feat: Agent-Harness Usage-Metriken am PR-Abschluss posten #63

Closed
opened 2026-07-13 10:33:45 +02:00 by frank · 2 comments
Owner

Problem

Beim Abschluss eines Agent-Laufs im --pr-Modus fehlen auf dem Pull Request die verfügbaren Nutzungsdaten des Agent-Harnesses (ACP / CLI). Token-, Kosten- und Limit-Infos landen heute höchstens im lokalen Dashboard (WatchStatus), nicht dauerhaft am PR.

Ziel

Zum Abschluss (Finalize / Success-Finish, idealerweise auch nach Follow-up-Läufen) sollen die verfügbaren Harness-Metriken als strukturierter Block auf dem PR erscheinen (Kommentar und/oder Ergänzung der PR-Beschreibung).

Felder (soweit vom jeweiligen Harness geliefert)

Metrik Beschreibung
In Tokens (+ cached) Input-Tokens inkl. Cache-Read/Write, falls verfügbar
Out Tokens (+ cached) Output-Tokens (ggf. Thought/Reasoning separat), inkl. Cache falls vorhanden
Dollar Usage Session-Kosten (cost.amount / Währung)
Available Limits (+ used) Verfügbare vs. genutzte Limits (z. B. Context-Window used/size, Provider-Quota/Rate-Limits)
Agent Runtime Laufzeit der Agent-Session (Duration vom Start bis Ende)

Fehlende Felder weglassen oder als n/a markieren — kein Fehler, wenn ein Agent/Harness etwas nicht liefert.

Erwartetes Verhalten

  1. Nach erfolgreichem Abschluss eines PR-Laufs erscheint ein sichtbarer Agent usage-Block auf dem PR (bevorzugt Abschlusskommentar; optional zusätzlich in der finalen PR-Beschreibung).
  2. Daten kommen bevorzugt aus dem ACP-Harness (PromptResponse.usage, sessionUpdate: usage_update / Cost), Fallback wo sinnvoll aus bereits geparsten CLI-Logs (total_tokens, cost_usd, …).
  3. Aggregation über die gesamte Issue-/PR-Session (Initial-Run + Follow-ups), sofern die Werte kumuliert verfügbar sind; sonst zumindest der letzte Lauf + Runtime.
  4. Nicht-ACP-Agents (z. B. reiner CLI-Pfad) posten, was zuverlässig ermittelbar ist; Rest weglassen.
  5. Wiki kurz dokumentieren (Agent-Watch / PR-Babysitting).

Beispiel (Sketch)

📊 **Agent usage** (`cursor-agent` / ACP)

| | |
| --- | --- |
| In tokens | 120 000 (cached read 80 000) |
| Out tokens | 8 500 |
| Cost | $1.23 USD |
| Limits | context 142 000 / 200 000 · quota ok |
| Runtime | 12m 34s |

Akzeptanzkriterien

  • PR erhält beim Finalize einen Usage-Block mit den oben genannten Feldern (soweit verfügbar)
  • In/Out-Tokens inkl. Cache-Feldern, wenn ACP Usage liefert
  • Dollar-Kosten aus ACP Cost bzw. bekannten Log-Heuristiken
  • Available vs. used Limits (mindestens Context used/size; Provider-Limits wenn Checker/Harness sie liefern)
  • Agent-Runtime (Duration) wird gemessen und ausgegeben
  • Fehlende Werte crashen den Abschluss nicht
  • Tests für Formatierung / Aggregation / „nur verfügbare Felder“
  • Wiki-Update

Hinweise / Ansatzpunkte

  • internal/agent/acp_client.goapplyACPUsage speichert bisher nur Used + Cost im Status, nicht In/Out/Cache
  • ACP-Typen: Usage (inputTokens, outputTokens, cachedReadTokens, …), SessionUsageUpdate (used/size/cost), PromptResponse.Usage
  • internal/agent/status.goSetRunTokens / SetRunCostUSD, Run-Startzeit für Duration
  • internal/agent/pipeline.gosuccessFinish / Finalize-Kommentare
  • internal/agent/usagelimit.go — Provider-Quota (Codex/Claude) als mögliche Limit-Quelle
## Problem Beim Abschluss eines Agent-Laufs im `--pr`-Modus fehlen auf dem Pull Request die verfügbaren Nutzungsdaten des Agent-Harnesses (ACP / CLI). Token-, Kosten- und Limit-Infos landen heute höchstens im lokalen Dashboard (`WatchStatus`), nicht dauerhaft am PR. ## Ziel Zum Abschluss (Finalize / Success-Finish, idealerweise auch nach Follow-up-Läufen) sollen die verfügbaren Harness-Metriken als strukturierter Block auf dem PR erscheinen (Kommentar und/oder Ergänzung der PR-Beschreibung). ## Felder (soweit vom jeweiligen Harness geliefert) | Metrik | Beschreibung | | --- | --- | | **In Tokens** (+ cached) | Input-Tokens inkl. Cache-Read/Write, falls verfügbar | | **Out Tokens** (+ cached) | Output-Tokens (ggf. Thought/Reasoning separat), inkl. Cache falls vorhanden | | **Dollar Usage** | Session-Kosten (`cost.amount` / Währung) | | **Available Limits** (+ used) | Verfügbare vs. genutzte Limits (z. B. Context-Window `used`/`size`, Provider-Quota/Rate-Limits) | | **Agent Runtime** | Laufzeit der Agent-Session (Duration vom Start bis Ende) | Fehlende Felder weglassen oder als `n/a` markieren — kein Fehler, wenn ein Agent/Harness etwas nicht liefert. ## Erwartetes Verhalten 1. Nach erfolgreichem Abschluss eines PR-Laufs erscheint ein sichtbarer **Agent usage**-Block auf dem PR (bevorzugt Abschlusskommentar; optional zusätzlich in der finalen PR-Beschreibung). 2. Daten kommen bevorzugt aus dem ACP-Harness (`PromptResponse.usage`, `sessionUpdate: usage_update` / Cost), Fallback wo sinnvoll aus bereits geparsten CLI-Logs (`total_tokens`, `cost_usd`, …). 3. Aggregation über die gesamte Issue-/PR-Session (Initial-Run + Follow-ups), sofern die Werte kumuliert verfügbar sind; sonst zumindest der letzte Lauf + Runtime. 4. Nicht-ACP-Agents (z. B. reiner CLI-Pfad) posten, was zuverlässig ermittelbar ist; Rest weglassen. 5. Wiki kurz dokumentieren (Agent-Watch / PR-Babysitting). ## Beispiel (Sketch) ```markdown 📊 **Agent usage** (`cursor-agent` / ACP) | | | | --- | --- | | In tokens | 120 000 (cached read 80 000) | | Out tokens | 8 500 | | Cost | $1.23 USD | | Limits | context 142 000 / 200 000 · quota ok | | Runtime | 12m 34s | ``` ## Akzeptanzkriterien - [x] PR erhält beim Finalize einen Usage-Block mit den oben genannten Feldern (soweit verfügbar) - [x] In/Out-Tokens inkl. Cache-Feldern, wenn ACP `Usage` liefert - [x] Dollar-Kosten aus ACP `Cost` bzw. bekannten Log-Heuristiken - [x] Available vs. used Limits (mindestens Context `used`/`size`; Provider-Limits wenn Checker/Harness sie liefern) - [x] Agent-Runtime (Duration) wird gemessen und ausgegeben - [x] Fehlende Werte crashen den Abschluss nicht - [x] Tests für Formatierung / Aggregation / „nur verfügbare Felder“ - [x] Wiki-Update ## Hinweise / Ansatzpunkte - `internal/agent/acp_client.go` — `applyACPUsage` speichert bisher nur `Used` + `Cost` im Status, nicht In/Out/Cache - ACP-Typen: `Usage` (`inputTokens`, `outputTokens`, `cachedReadTokens`, …), `SessionUsageUpdate` (`used`/`size`/`cost`), `PromptResponse.Usage` - `internal/agent/status.go` — `SetRunTokens` / `SetRunCostUSD`, Run-Startzeit für Duration - `internal/agent/pipeline.go` — `successFinish` / Finalize-Kommentare - `internal/agent/usagelimit.go` — Provider-Quota (Codex/Claude) als mögliche Limit-Quelle
Collaborator

🤖 forge agent started

  • Agent: cursor-agent
  • Model: (default)
  • Mode: pr
  • Trigger: assignee=agent|+4 mapped
  • Open ToDos: 8

feat: Agent-Harness Usage-Metriken am PR-Abschluss posten — Beim Abschluss eines Agent-Laufs im --pr-Modus fehlen auf dem Pull Request die verfügbaren Nutzungsdaten des Agent-Harnesses (ACP / CLI). Token-, Kosten- und Limit-Infos landen heute höchstens im…

🤖 **forge agent started** - Agent: `cursor-agent` - Model: `(default)` - Mode: `pr` - Trigger: `assignee=agent|+4 mapped` - Open ToDos: 8 feat: Agent-Harness Usage-Metriken am PR-Abschluss posten — Beim Abschluss eines Agent-Laufs im `--pr`-Modus fehlen auf dem Pull Request die verfügbaren Nutzungsdaten des Agent-Harnesses (ACP / CLI). Token-, Kosten- und Limit-Infos landen heute höchstens im…
Collaborator

forge agent failed

CI still failing after 3 attempts: no CI run appeared: context deadline exceeded
❌ **forge agent failed** ``` CI still failing after 3 attempts: no CI run appeared: context deadline exceeded ```
frank closed this issue 2026-07-13 18:29:51 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
frank/forgecli#63
No description provided.