Skip to content

fix(cost): read Workflow-tool agents and complete their output tokens - #9

Merged
tenkeb merged 1 commit into
mainfrom
fix/workflow-agent-transcripts
Oct 4, 2026
Merged

tenkeb merged 1 commit into
mainfrom
fix/workflow-agent-transcripts

Conversation

@tenkeb

@tenkeb tenkeb commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Worum es geht

Der Pilotlauf von product-vision-to-user-stories im Factory-Repo (15 Agents, 10,02 USD) hat zwei Annahmen aus PR #8 widerlegt. Ohne diesen Fix hätte der Bericht für Workflow-Läufe nur 0,16 von 10,02 USD gesehen. Befunde: docs/plans/laufkosten/spike.md, Abschnitt „Pilotlauf mit dem Workflow-Tool“.

  • Ort: Transkripte der Workflow-Agents liegen unter subagents/workflows/<run>/, nicht in subagents/. Leser und Ledger-Hook scannen jetzt jede Tiefe; die Phase kommt aus meta.workflowPhase.
  • Ausgabe-Tokens: Im Transkript steht nur ein Zwischenstand (16 statt 365), der Endwert wird nie nachgetragen; von 168 Anfragen waren 34 vollständig. Eingabe und Cache sind exakt.
    • Exakt mit Telemetrie: cost-report.mjs --otel <datei> nimmt je request_id die Werte aus den api_request-Ereignissen und führt die 52 Hilfsaufrufe (WebSearch/WebFetch) als eigene Zeilen. Dafür liegt otel-sink.mjs bei.
    • Ohne Telemetrie: die in cost-state fehlende Ausgabe ist je Modell exakt bekannt, wenn Eingabe und Cache übereinstimmen. Sie wird nach Textlänge verteilt und als geschätzt ausgewiesen; sonst gibt es nur eine Untergrenze mit Hinweis. Gesamtsumme exakt, am Pilot je Element zusammen 1,8 % der Kosten daneben.
  • Zuordnung: zusammengesetzte Labels Call_R1/R_4 gelten für den inneren Schritt; die Kostenkarte führt alle ausführbaren Elemente, weil die Fabrik auch hook- und orchestrator-Elemente als Agent ausführt.
  • Hook: schreibt unvollständige Anfragen als final: false und schreibt eine Anfrage neu, wenn sie besser wird.

Ergebnis am Pilot

Mit --otel: 10,0193 USD, nichts geschätzt, identisch mit cost-state und der Summe von claude_code.cost.usage. Der Hook hat alle 15 SubagentStop-Ereignisse bekommen; 15 von 15 Labels beginnen mit einer Element-ID. Teuerster Schritt: R_3b „Claims extrahieren & Abdeckung prüfen“ mit 2,76 USD (27 % des Laufs).

Prüfung

  • 27 Tests (neu: verschachtelte Agents, Phase, zusammengesetzte Labels, Schätzung, Untergrenze, Telemetrie).
  • Replay der echten Sitzung durch den neuen Hook: 169 Zeilen, ein zweiter Durchlauf fügt nichts hinzu.
  • npm run validate grün, regenerate.sh mit RESULT: PASS und allen erwarteten Zeilen, verify auf user-story-refinement (Kostenkarte neu erzeugt) PASS.

🤖 Generated with Claude Code

A real run showed that Workflow-tool agents sit in subagents/workflows/<run>/
(the reader and the ledger hook only scanned subagents/) and that their
transcripts keep only a streaming snapshot of output_tokens.

- scan agent transcripts at any depth and take the phase from meta.workflowPhase
- keep requests without stop_reason (final: false); complete their output
  exactly from telemetry api_request events (--otel, bundled otel-sink.mjs) or
  from cost-state by text length, reported as estimated
- resolve composite dispatch labels (Call_R1/R_4) and list every dispatchable
  element in the cost map, not only skills
- record the pilot findings in spike.md

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@tenkeb
tenkeb merged commit ba76017 into main Oct 4, 2026
1 check passed
@tenkeb
tenkeb deleted the fix/workflow-agent-transcripts branch October 4, 2026 16:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant