Bisher wurden Workflow-Subagent-Outputs nur beim sauberen FinalizeChain in die DB gerettet - bei Abbruch (529/Timeout/Stop/Hard-Kill) war alles weg, Tokens standen auf 0. - A) Inkrementelle Persistenz: MaybeFlushWorkflowProgress() (throttled 6s) schreibt workflow_info + Token + runId waehrend des Laufs -> ueberlebt Hard-Kill (OOM/Redeploy), wo kein catch/finally laeuft. - B) Output-Rettung: ReadLive liest jetzt vollstaendige Subagent-Outputs aus journal.jsonl (nicht nur Counts), inkl. State. - C) Token-Fix: neuer assistant-Branch -> CliEventType.Usage; EffectiveUsage() rettet Orchestrator-Token bei Abbruch statt 0. - D) Resume: Feld/Migration workflow_run_id; FinalizeChain persistiert die runId; naechster Chat injiziert einen resumeFromRunId-Hinweis. - UI: Workflow-Status-Modal zeigt geretteten Output + runId/"fortsetzbar"-Banner. Build 0/0, ReadLive gegen echtes journal.jsonl verifiziert, adversarial 2x geprueft. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
28 lines
1.1 KiB
C#
28 lines
1.1 KiB
C#
namespace Gott.Models;
|
||
|
||
public class ChainRecord
|
||
{
|
||
public long Id { get; set; }
|
||
public string ChainId { get; set; }
|
||
public string SessionId { get; set; }
|
||
public string AgentId { get; set; }
|
||
public string Model { get; set; }
|
||
public string SystemPrompt { get; set; }
|
||
public long InputTokens { get; set; }
|
||
public long OutputTokens { get; set; }
|
||
public long CacheCreationTokens { get; set; }
|
||
public long CacheReadTokens { get; set; }
|
||
public int Iterations { get; set; }
|
||
public string StopReason { get; set; }
|
||
public long DurationMs { get; set; }
|
||
public string ToolChoice { get; set; }
|
||
public string ToolNames { get; set; }
|
||
public string ArchiveId { get; set; }
|
||
public string StreamErrorInfo { get; set; }
|
||
public string WorkflowInfo { get; set; } // JSON: Telemetrie eines dynamischen Workflows (ultracode), null = kein Workflow
|
||
public string WorkflowRunId { get; set; } // runId (wf_…) des zuletzt gestarteten Workflows – für Resume nach Abbruch
|
||
public bool PlanMode { get; set; }
|
||
public string Effort { get; set; }
|
||
public string CreatedAt { get; set; }
|
||
}
|