TUI: ACP-Output lesbarer machen (Chat zusammenfügen, Tool-Calls gruppieren) #20

Closed
opened 2026-07-12 12:31:21 +02:00 by frank · 1 comment
Owner

Problem

In forge agent watch --tui ist der ACP-Output im Detail-Viewport schwer lesbar:

  1. Agent-Chat zerfällt in Kurzzeilen
    Text-Chunks (agent_message_chunk) werden offenbar jeweils als eigene Zeile gerendert. Dadurch bricht der Chat mitten im Satz um (oft nur 2–5 Wörter pro Zeile), obwohl der Agent keinen echten Zeilenumbruch intendiert hat.

  2. Tool-Calls mit gleicher UUID wiederholen sich
    Status-Updates desselben Tool-Calls (tool_call / tool_update mit gleicher tool_id) erscheinen als separate Log-Zeilen. Typisch z. B. mehrfach dieselbe UUID hintereinander oder mit Zwischenzeilen — das Log wird lang und unübersichtlich.

Beobachtet u. a. bei Issue #14 (ACP) mit cursor-agent im PR-Modus.

Verwandt: #14 (ACP-strukturierte Ausgaben), #15 (Agent-Dashboard TUI).

Ziel

ACP-Output in der TUI so formatieren, dass:

  • Agent-Chat zusammenhängend fließt, solange kein expliziter Zeilenumbruch im Chunk enthalten ist.
  • Tool-Calls pro UUID/tool_id zusammengefasst werden (eine Zeile bzw. ein Block, Status aktualisiert sich in-place).

Scope

1. Chat-Streaming zusammenfügen

  • Aufeinanderfolgende agent_message_chunk-Events in denselben Absatz/Puffer schreiben.
  • Nur bei echtem \n (oder vergleichbarem Break im Content) eine neue Zeile beginnen.
  • Keine künstlichen Soft-Wraps auf Chunk-Grenzen; Viewport-Wrapping der TUI bleibt unverändert.
  • Optional: Leerzeilen/\n\n als Absatztrenner beibehalten.

2. Tool-Calls nach UUID gruppieren

  • Events mit gleicher tool_id zu einem Log-Eintrag zusammenführen.
  • Status (pendingin_progresscompleted/failed) und Titel in diesem Eintrag aktualisieren statt neue Zeilen anzuhängen.
  • Bei Bedarf Kurzinfo (z. B. Dateiname bei Edit/Read) im selben Eintrag anzeigen, ohne die UUID mehrfach zu wiederholen.
  • Abgeschlossene Tool-Calls kompakt halten (eine Zeile), laufende klar markieren.

3. Nicht-Ziele

  • Kein Umbau der ACP-Protokollschicht selbst (nur Rendering/Aggregation der bereits strukturierten Events).
  • Keine Änderung am Plain-Log-Modus ohne TUI, außer wenn dieselbe Aggregation dort trivial wiederverwendbar ist.

Akzeptanzkriterien

  • Fließender Agent-Chat ohne Chunk-bedingte Kurzzeilen; echte \n bleiben erhalten.
  • Mehrere Updates derselben tool_id erscheinen als ein Eintrag (Status wechselt sichtbar).
  • Log bleibt bei typischen Runs (viele Tool-Calls) deutlich kürzer und scanbarer.
  • Bestehende TUI-Keybindings und Viewport-Verhalten unverändert nutzbar.
## Problem In `forge agent watch --tui` ist der ACP-Output im Detail-Viewport schwer lesbar: 1. **Agent-Chat zerfällt in Kurzzeilen** Text-Chunks (`agent_message_chunk`) werden offenbar jeweils als eigene Zeile gerendert. Dadurch bricht der Chat mitten im Satz um (oft nur 2–5 Wörter pro Zeile), obwohl der Agent keinen echten Zeilenumbruch intendiert hat. 2. **Tool-Calls mit gleicher UUID wiederholen sich** Status-Updates desselben Tool-Calls (`tool_call` / `tool_update` mit gleicher `tool_id`) erscheinen als separate Log-Zeilen. Typisch z. B. mehrfach dieselbe UUID hintereinander oder mit Zwischenzeilen — das Log wird lang und unübersichtlich. Beobachtet u. a. bei Issue #14 (ACP) mit `cursor-agent` im PR-Modus. Verwandt: #14 (ACP-strukturierte Ausgaben), #15 (Agent-Dashboard TUI). ## Ziel ACP-Output in der TUI so formatieren, dass: - Agent-Chat **zusammenhängend** fließt, solange kein expliziter Zeilenumbruch im Chunk enthalten ist. - Tool-Calls **pro UUID/`tool_id` zusammengefasst** werden (eine Zeile bzw. ein Block, Status aktualisiert sich in-place). ## Scope ### 1. Chat-Streaming zusammenfügen - Aufeinanderfolgende `agent_message_chunk`-Events in denselben Absatz/Puffer schreiben. - Nur bei echtem `\n` (oder vergleichbarem Break im Content) eine neue Zeile beginnen. - Keine künstlichen Soft-Wraps auf Chunk-Grenzen; Viewport-Wrapping der TUI bleibt unverändert. - Optional: Leerzeilen/`\n\n` als Absatztrenner beibehalten. ### 2. Tool-Calls nach UUID gruppieren - Events mit gleicher `tool_id` zu **einem** Log-Eintrag zusammenführen. - Status (`pending` → `in_progress` → `completed`/`failed`) und Titel in diesem Eintrag aktualisieren statt neue Zeilen anzuhängen. - Bei Bedarf Kurzinfo (z. B. Dateiname bei Edit/Read) im selben Eintrag anzeigen, ohne die UUID mehrfach zu wiederholen. - Abgeschlossene Tool-Calls kompakt halten (eine Zeile), laufende klar markieren. ### 3. Nicht-Ziele - Kein Umbau der ACP-Protokollschicht selbst (nur Rendering/Aggregation der bereits strukturierten Events). - Keine Änderung am Plain-Log-Modus ohne TUI, außer wenn dieselbe Aggregation dort trivial wiederverwendbar ist. ## Akzeptanzkriterien - [x] Fließender Agent-Chat ohne Chunk-bedingte Kurzzeilen; echte `\n` bleiben erhalten. - [x] Mehrere Updates derselben `tool_id` erscheinen als ein Eintrag (Status wechselt sichtbar). - [x] Log bleibt bei typischen Runs (viele Tool-Calls) deutlich kürzer und scanbarer. - [x] Bestehende TUI-Keybindings und Viewport-Verhalten unverändert nutzbar.
Author
Owner

🤖 forge agent started

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

TUI: ACP-Output lesbarer machen (Chat zusammenfügen, Tool-Calls gruppieren) — In forge agent watch --tui ist der ACP-Output im Detail-Viewport schwer lesbar:

🤖 **forge agent started** - Agent: `cursor-agent` - Model: `(default)` - Mode: `pr` - Trigger: `assignee=agent` - Open ToDos: 4 TUI: ACP-Output lesbarer machen (Chat zusammenfügen, Tool-Calls gruppieren) — In `forge agent watch --tui` ist der ACP-Output im Detail-Viewport schwer lesbar:
frank closed this issue 2026-07-12 12:41:50 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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#20
No description provided.