Repository navigation
improve(chat): make tool activity compact and fully inspectable - #1092
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Codex review: needs real behavior proof before merge. Reviewed August 6, 2026, 2:42 AM ET / 06:42 UTC. ClawSweeper reviewWhat this changesThe PR groups consecutive tray-chat tool calls into compact expandable activity rows and preserves structured tool call/result order when replaying saved chat history. Merge readiness⛔ Blocked until stronger real behavior proof is added - 4 items remain Keep open. The supplied patch appears cohesive and has no supported line-level correctness finding, but the final saved-history correlation repair lacks current-head real tray proof; the PR itself says the conflicting-ID replay was not manually captured. Priority: P2 Review scores
Verification
How this fits togetherGateway chat history is parsed into ordered message content, replayed into the tray timeline, then rendered as WinUI chat rows. This change affects both that replay boundary and the expandable presentation of tool activity. flowchart LR
A[Gateway chat history] --> B[History parser]
B --> C[Replay projection]
C --> D[Chat timeline]
D --> E[Tool activity grouping]
E --> F[Expandable tray chat rows]
Before merge
Agent review detailsSecurityNone. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Keep the focused renderer and replay projection, then merge only after a current-head native tray run reloads a redacted conflicting-ID history fixture and visibly shows the correct grouped tool result. Do we have a high-confidence way to reproduce the issue? Not applicable as a feature PR. The focused fixture is covered by parser and provider tests, but the final behavior still needs a current-head real tray replay demonstration. Is this the best way to solve the issue? Yes for the overall direction: the focused activity renderer and replay projection fit the recorded ownership boundaries. The proof package is not yet the best merge evidence because it does not visibly exercise the last correlation repair. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against cdcb74f44a21. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (14 earlier review cycles; latest 8 shown)
|
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…l-activity Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> # Conflicts: # src/OpenClaw.Tray.WinUI/Chat/OpenClawChatDataProvider.cs # src/OpenClaw.Tray.WinUI/Chat/ReactorChatTimeline.cs
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Prefer semantic tool-result call references and consume aborted assistant state on the first replayed part, including tool-first messages. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
What Problem This Solves
Consecutive agent tool calls can overwhelm the tray chat transcript with large standalone cards, making tool-heavy responses difficult to scan. The prior presentation also made complete input and output details harder to inspect without losing conversation context.
Why This Change Was Made
Consecutive tool calls now render as one compact activity disclosure. Expanding the activity reveals dense per-tool rows, and expanding an individual row reveals its bounded input and output details.
The implementation preserves source chronology and call identity across live updates and saved-history replay. Structured result blocks prefer their semantic call-reference fields over generic block IDs, and aborted tool-first assistant history is replayed as one stopped response rather than leaking into a later message.
Grouping, expansion state, rendering, and replay projection are handled by focused owners so the compact presentation remains stable across mixed text and tool transcripts.
User Impact
Users can:
Evidence
Current PR head:
c0b7b36978dd7403b275e3aab79718918d0c978eThe final history-correlation repair does not change the visual renderer. These screenshots remain representative of the compact and expanded presentation at the current head.
Collapsed tool activity
Single tool fully expanded
Current-head automated proof verifies that the production Reactor renderer starts collapsed, exposes accessible expansion state, lazily realizes nested tool rows, renders selectable output only after expansion, and removes nested rows when re-collapsed. Current-head history tests directly exercise semantic result correlation, mixed text and tool chronology, string-valued tool results, and aborted tool-first assistant replay.
Change Type
Scope
winnodeValidation
Local validation at
c0b7b36978dd7403b275e3aab79718918d0c978e:./build.ps1: passeddotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --no-restore: 3,412 passed, 32 skipped, 0 failed, 3,444 totaldotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj --no-restore: 2,165 passed, 0 skipped, 0 failed, 2,165 totalReactorToolActivityProofTests.ConsecutiveTools_RenderCompactActivityWithAccessibleExpansion: passedReal Behavior Proof
c0b7b36978dd7403b275e3aab79718918d0c978eYes/No/N/A): YesSecurity Impact
Yes/No): NoYes/No): NoYes/No): NoYes/No): NoYes/No): NoYes, explain the risk and mitigation: N/AExpanded rows display only allowlisted tool argument keys. Command-like values pass through the existing display sanitizer, arbitrary JSON and environment payloads are omitted, internal correlation identifiers are not rendered, and displayed values are bounded.
Compatibility and Migration
Yes/No): YesYes/No): NoYes/No): NoReview Conversations