feat(ui): complete Avalonia UI port with 7 main pages, tool settings & top MenuBar

This commit is contained in:
Richard
2026-08-10 10:48:34 +02:00
parent a0e18d2a57
commit b5bf97ae74
187 changed files with 20054 additions and 882 deletions
@@ -152,6 +152,112 @@ public sealed class SqliteStorage
CREATE INDEX IF NOT EXISTS IX_RunUsage_Recent
ON RunUsage (OccurredAt DESC);
-- Taskboard (A1): Ausführungszustand der Aufgaben. Die Definition lebt in
-- Markdown-Dateien; diese Tabelle spiegelt sie und macht das Claiming atomar.
CREATE TABLE IF NOT EXISTS Tasks (
Id TEXT PRIMARY KEY,
Title TEXT NOT NULL DEFAULT '',
Status TEXT NOT NULL DEFAULT 'todo',
Type TEXT NOT NULL DEFAULT 'work',
Priority INTEGER NOT NULL DEFAULT 3,
Assignee TEXT NOT NULL DEFAULT '@human',
WhenKind TEXT NULL,
WhenValue TEXT NULL,
WhenTz TEXT NULL,
RequireApproval INTEGER NOT NULL DEFAULT 0,
Acceptance TEXT NOT NULL DEFAULT '',
-- Blocker als "|a|b|"; die Begrenzer verhindern Teiltreffer bei der Suche.
BlockedBy TEXT NOT NULL DEFAULT '',
OnlyWhenMarketOpen INTEGER NOT NULL DEFAULT 0,
Body TEXT NOT NULL DEFAULT '',
FileName TEXT NOT NULL DEFAULT '',
-- Nur für Typ tool_job: welches Tool mit welcher Job-Art getickt wird.
ToolName TEXT NOT NULL DEFAULT '',
JobTypeId TEXT NOT NULL DEFAULT '',
-- Ausführungszustand: nur das Board schreibt hier.
LastOccurrence TEXT NULL,
ClaimToken TEXT NULL,
ClaimedAt TEXT NULL,
CreatedAt TEXT NOT NULL,
UpdatedAt TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS IX_Tasks_Status
ON Tasks (Status);
CREATE INDEX IF NOT EXISTS IX_Tasks_Assignee
ON Tasks (Assignee);
-- Audit-Log (A3): ein Eintrag je Tool-Aufruf. Append-only die Herkunft
-- stempelt die Engine, Korrekturen sind neue Zeilen.
CREATE TABLE IF NOT EXISTS AuditLog (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
RunId TEXT NOT NULL,
AgentId TEXT NOT NULL,
Model TEXT NOT NULL DEFAULT '',
Source TEXT NOT NULL DEFAULT 'unknown',
Tool TEXT NOT NULL,
Arguments TEXT NOT NULL DEFAULT '',
Status TEXT NOT NULL,
Summary TEXT NOT NULL DEFAULT '',
DurationMs INTEGER NOT NULL DEFAULT 0,
OccurredAt TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS IX_AuditLog_Run
ON AuditLog (RunId, Id);
CREATE INDEX IF NOT EXISTS IX_AuditLog_Recent
ON AuditLog (Id DESC);
-- Abschluss-Belege (Receipts): ein Beleg je Lauf, verknüpft mit einem Task.
CREATE TABLE IF NOT EXISTS RunReceipts (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
RunId TEXT NOT NULL,
AgentId TEXT NOT NULL,
Model TEXT NOT NULL DEFAULT '',
Source TEXT NOT NULL DEFAULT 'unknown',
TaskId TEXT NULL,
Status TEXT NOT NULL DEFAULT '',
StepCount INTEGER NOT NULL DEFAULT 0,
PromptTokens INTEGER NOT NULL DEFAULT 0,
CompletionTokens INTEGER NOT NULL DEFAULT 0,
CachedTokens INTEGER NOT NULL DEFAULT 0,
CostUsd TEXT NOT NULL DEFAULT '0',
CostIsKnown INTEGER NOT NULL DEFAULT 0,
DurationMs INTEGER NOT NULL DEFAULT 0,
ResultRef TEXT NOT NULL DEFAULT '',
OccurredAt TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS IX_RunReceipts_Task
ON RunReceipts (TaskId);
CREATE INDEX IF NOT EXISTS IX_RunReceipts_Run
ON RunReceipts (RunId);
-- Staging (A2): eingefrorene, freigabepflichtige Tool-Aufrufe. Ausgeführt wird
-- genau der gespeicherte Argument-JSON (Plan-Freeze).
CREATE TABLE IF NOT EXISTS StagedCalls (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
RunId TEXT NOT NULL,
AgentId TEXT NOT NULL,
InstanceId TEXT NOT NULL DEFAULT '',
Tool TEXT NOT NULL,
Action TEXT NULL,
ArgumentsJson TEXT NOT NULL DEFAULT '',
Proposal TEXT NOT NULL DEFAULT '',
Status TEXT NOT NULL DEFAULT 'Pending',
CreatedAt TEXT NOT NULL,
DecidedAt TEXT NULL,
DecidedBy TEXT NULL,
ResultRef TEXT NULL,
RejectionReason TEXT NULL
);
CREATE INDEX IF NOT EXISTS IX_StagedCalls_Pending
ON StagedCalls (Status, Id);
""";
cmd.ExecuteNonQuery();