Repository navigation
improve(chat): make tool activity easier to follow - #2120
BumpyClock wants to merge 4 commits into
Conversation
…time - Coalesce consecutive tool calls into one collapsible activity summary. - Rework activity shimmer to a neutral secondary-text sweep visible in light and dark themes. - Show elapsed time and tokens inline after the active tool, group, or thinking header instead of a separate Working footer. - Add slow tool-group fixture scenario and pause/step/resume controls for the chat playground. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Animate completed tool summaries between calls without showing stale running labels. Keep progress on the current phase and preserve reasoning chronology. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 02e8605ca0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "Working" => last.Kind == ReactorTimelineRowKind.Activity | ||
| || last.Entry?.Kind == ChatTimelineItemKind.ToolCall, |
There was a problem hiding this comment.
Restrict progress anchoring to tools in the current run
Before the first transcript entry of an externally started or adopted run arrives, the timeline can still end in a completed or interrupted tool from the preceding run: ChatThinkingEvent, also used by TryAdoptInFlightRun, starts the new turn without appending an entry. This Working branch accepts that unrelated tail, attaches the new run's elapsed time to the old tool, and causes BuildRows to omit the current working footer. Require a current-run or current-turn match before anchoring, and retain the footer when the last tool belongs to an earlier run.
Useful? React with 👍 / 👎.
|
Codex review: needs real behavior proof before merge. What this changesThis PR adds animated chat status transitions, collapsible reasoning, and elapsed time beside tool activity. Example: A read tool finishes while the agent continues working.
Review scores
ProductKind: Preference · Worth it: Needs a maintainer decision · Fix scope: Complete Merge readiness⛔ Blocked before merge - 4 items remain Keep open: this PR contains distinct status improvements, but needs correctness repairs and an owner decision on the presentation redesign. Priority: P2 Decision needed
Before merge
Findings
Provenance
Tests
Agent review detailsHow this fits togetherGateway chat events enter the timeline reducer, then native presentation owners project reasoning, tool groups, status labels, and message actions into Reactor controls. flowchart LR
A[Gateway chat events] --> B[Timeline reducer]
B --> C[Reasoning projection]
C --> D[Timeline rows]
D --> E[Tool and reasoning disclosures]
D --> F[Run progress]
D --> G[Copy and speech actions]
Technical reviewBest possible solution: Use the existing reducer and presentation owners to keep status truthful, preserve whole-message actions, and limit the visual change to the direction selected by the chat owner. Do we have a high-confidence way to reproduce the issue? Current-main source can retain Responding after an assistant preamble followed by completed tool work, and the added parity test describes that sequence; no runtime reproduction was performed. Is this the best way to solve the issue? The phase corrections belong in the existing reducer and progress projection, while the broader animation and disclosure redesign needs an owner choice and must preserve message identity. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 2a2370699158. Provenance checked
TestingProof path: none. SecurityNone. EvidenceWhat I checked:
Likely related people:
Preflight sourceSource unknown. Source comparison at the observed PR snapshot only. Completion is self-reported; body, policy, tests, execution, and report bytes are not verified. Review metrics
LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed November 11, 2026, 6:41 PM ET / 23:41 UTC. |
|
The new animations and smoother transitions look great. One thing I miss is the animated claw as the working indicator. It gives OpenClaw personality and makes it clear that it’s still working. Could we bring that back while keeping the new transitions? |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Move the claw and elapsed-time row into a fixed row above the chat composer so streamed responses no longer push it out of view. Tool activity status lines and transitions stay inline in the transcript. Anchor elapsed time to the current run so a new or adopted run cannot reuse a tool start time from the previous run. Keep Copy and Read aloud on the whole assistant message when reasoning splits its display. Review fixes: the claw is no longer a tab stop, the pinned row stays hidden in welcome mode, reasoning source ids tolerate unexpected JSON shapes, and UI proof helpers use layout readiness and shared insets. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
What Problem This Solves
Chat status changes can be abrupt and make tool activity hard to follow.
Light mode
https://github.com/user-attachments/assets/5ac5ea77-25b6-49bc-9073-3d229f518db8
Dark mode
https://github.com/user-attachments/assets/d93a1891-b6ba-410d-a9c8-d3b08e63c425
User Impact
User impact: Chat groups tool activity and shows elapsed time beside the active status.
Known limitation: During an active reply split by reasoning, Copy and Read aloud can act on only one text fragment.
Why This Change Was Made
Status updates animate between states, and a neutral shimmer indicates active work without adding a separate status row.
Evidence
Build and local tests passed. Current-head visible proof remains pending. The available light and dark recordings predate the rebase.
Change Type
Scope
winnodeRequired proof pools
windows-winui-interactive: current-head chat visual proof. Pending.Validation
.\build.ps1 -NoTrustRepository: passed.dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restore: 5844 passed, 28 skipped.dotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restore: 6318 passed..\scripts\validate-docs.ps1: passed.Real Behavior Proof
0989c7d56bd04cd2b62681da7dce06a19a2e6fc3. Tests ran against equivalent uncommitted source, before a documentation-only correction.Yes/No/N/A): No.Security Impact
Yes/No): No.Yes/No): No.Yes/No): No.Yes/No): No.Yes/No): No.Yes, explain the risk and mitigation:Compatibility and Migration
Yes/No): Yes.Yes/No): No.Yes/No): No.Review Conversations