Skip to content

improve(chat): make tool activity easier to follow - #2120

Open
BumpyClock wants to merge 4 commits into
openclaw:mainfrom
BumpyClock:adityasharma_microsoft/chat-ux-tool-call-fix
Open

BumpyClock wants to merge 4 commits into
openclaw:mainfrom
BumpyClock:adityasharma_microsoft/chat-ux-tool-call-fix

Conversation

@BumpyClock

@BumpyClock BumpyClock commented Nov 11, 2026 •

Copy link
Copy Markdown

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

  • Bug fix
  • Feature
  • Refactor
  • Docs or instructions
  • Tests or validation
  • Security hardening
  • Chore or infrastructure

Scope

  • Tray or WinUI UX
  • Windows node capability
  • Local MCP or winnode
  • Gateway, connection, or pairing
  • Setup or onboarding
  • Permissions, privacy, or security
  • Tests, CI, or docs

Required 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.
  • Focused mounted chat WinUI selection: 45 passed, none skipped.
  • .\scripts\validate-docs.ps1: passed.
  • Independent Opus review completed. Astra review is pending.
  • Shared autoreview helper: not run. The required shared installation is unavailable.

Real Behavior Proof

  • Environment tested: Windows local worktree.
  • PR head: 0989c7d56bd04cd2b62681da7dce06a19a2e6fc3. Tests ran against equivalent uncommitted source, before a documentation-only correction.
  • Exact steps or command run: See Validation.
  • Evidence after fix: Pending. The available light and dark recordings predate the rebase.
  • Observed result: Pending visible proof.
  • Screenshot or artifact links verified? (Yes/No/N/A): No.
  • Not verified or blocked: Current-head visible proof, the second review, and shared autoreview remain outstanding. An earlier mounted UI test failed; it passed in isolation and in the focused selection, but the original failure remains unexplained.

Security Impact

  • New permissions or capabilities? (Yes/No): No.
  • Secrets or tokens handling changed? (Yes/No): No.
  • New or changed network calls? (Yes/No): No.
  • Command or tool execution surface changed? (Yes/No): No.
  • Data access scope changed? (Yes/No): No.
  • If any answer is Yes, explain the risk and mitigation:

Compatibility and Migration

  • Backward compatible? (Yes/No): Yes.
  • Config or environment changes? (Yes/No): No.
  • Migration needed? (Yes/No): No.
  • If yes, list the exact upgrade steps:

Review Conversations

  • I replied to or resolved every bot review conversation addressed by this PR.
  • I left unresolved only conversations that still need maintainer judgment.

…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>
@clawsweeper

clawsweeper Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-11T22:55:37.316890Z 02e8605 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@clawsweeper clawsweeper Bot added the clawsweeper:intake:feature Preliminary submission classification; full source review pending. label Nov 11, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +431 to +432
"Working" => last.Kind == ReactorTimelineRowKind.Activity
|| last.Entry?.Kind == ChatTimelineItemKind.ToolCall,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@clawsweeper clawsweeper Bot added P2 Normal priority bug or improvement with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Nov 11, 2026
@clawsweeper

clawsweeper Bot commented Nov 11, 2026

Copy link
Copy Markdown

Codex review: needs real behavior proof before merge.

What this changes

This PR adds animated chat status transitions, collapsible reasoning, and elapsed time beside tool activity.

Example: A read tool finishes while the agent continues working.

  • Before: Elapsed time appears in a separate working row.
  • After: Elapsed time appears beside the completed tool summary until the next phase.

Review scores

Measure Result What it means
Overall readiness 🧂 unranked krab (1/6) Current-head behavior is unproven, two source-confirmed regressions remain, and the presentation direction is unresolved.
Proof confidence 🧂 unranked krab (1/6) Real behavior proof is necessary before merge. See Before merge.
Patch quality 🦪 silver shellfish (2/6) 2 actionable review findings remain.

Product

Kind: Preference · Worth it: Needs a maintainer decision · Fix scope: Complete
User problem: Abrupt chat status changes make ongoing tool activity harder to follow.
Reason: Phase accuracy has clear value, but collapsed reasoning, faster shimmer, and removal of the working claw change an owner-built presentation rather than repair a defined visual failure.

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
Reviewed head: 02e8605ca0c6f50a8459600167c5da2734764194
Owner decision: Required. See Decision needed.

Decision needed

  • Question: Should native chat replace inline reasoning and the working-claw indicator with collapsed reasoning and animated text-only activity headers?
  • Recommendation: Narrow to truthful status fixes: Preserve the established reasoning and working-indicator presentation while addressing phase accuracy through the existing owners.
  • Why: These replace deliberate existing presentation contracts, and the discussion contains no recorded owner approval of this direction.

Before merge

  • Add real behavior proof - The full body and discussion provide no current-head execution evidence for the changed Reactor owners and explicitly mark validation and visual proof pending. Supply current-head Light/Dark screenshots or video with diagnostics showing tool-status handoffs, reasoning disclosure, and inline elapsed placement; redact IPs, keys, and non-public endpoints. After adding proof, update the PR body, then request a new review with @clawsweeper re-review. The PR author or someone with repository write access can request it.
  • Restrict progress anchoring to the current run (P2) - When an externally started or adopted run begins before its first transcript entry, ChatThinkingEvent activates the turn without appending a row. A completed or interrupted tool from the preceding run can therefore remain last. This Working branch attaches the new clock to that unrelated tool and suppresses the new working footer. Require a current-run or turn match before anchoring and retain the footer otherwise. This confirms the existing inline review discussion.
  • Preserve whole-message targets when splitting assistant text (P2) - With reasoning previews enabled, assistant deltas 'Before ' and 'After' separated by a thought become separate projected assistant entries. BuildAssistantFooter still uses entry.Text for Copy and Read aloud, so the original entry's action now receives only 'After' instead of 'Before After'. The PR body acknowledges this limitation, but no maintainer has accepted the regression. Keep the original entry identity and full action text separate from each displayed fragment, and cover both actions.
  • Explain or restore the original intent of Inline reasoning presentation - 243f9cf: Expose supplied thinking as inline Markdown with the established reading rhythm; the PR does not explain why reasoning should now always start collapsed.

Findings

  • [P2] Restrict progress anchoring to the current run — src/OpenClaw.Tray.WinUI/Chat/ReactorChatTimeline.cs:431-432
  • [P2] Preserve whole-message targets when splitting assistant text — src/OpenClaw.Tray.WinUI/Chat/ChatReasoningPresentation.cs:102-107

Provenance

  • Inline reasoning presentation changes intended behavior without addressing why it exists (243f9cf: Expose supplied thinking as inline Markdown with the established reading rhythm; the PR does not explain why reasoning should now always start collapsed.)

Tests

  • Low-value test tests/OpenClaw.Tray.Tests/ChatTimelinePresentationTests.cs: Remove the new RunStatusLabel_AnimatesSwapsWithoutAffectingAccessibilityOrReducedMotion source-string test: it pins constants and implementation spelling without exercising those behaviors, which the mounted tests target directly.
  • Missing end-to-end proof: Current-head native execution and a base-fails/head-passes regression result are not supplied for the changed status, reasoning, and message-action paths.
Agent review details

How this fits together

Gateway 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]
Loading

Technical review

Best 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:

  • [P2] Restrict progress anchoring to the current run — src/OpenClaw.Tray.WinUI/Chat/ReactorChatTimeline.cs:431-432
    When an externally started or adopted run begins before its first transcript entry, ChatThinkingEvent activates the turn without appending a row. A completed or interrupted tool from the preceding run can therefore remain last. This Working branch attaches the new clock to that unrelated tool and suppresses the new working footer. Require a current-run or turn match before anchoring and retain the footer otherwise. This confirms the existing inline review discussion.
    Confidence: 0.99
  • [P2] Preserve whole-message targets when splitting assistant text — src/OpenClaw.Tray.WinUI/Chat/ChatReasoningPresentation.cs:102-107
    With reasoning previews enabled, assistant deltas 'Before ' and 'After' separated by a thought become separate projected assistant entries. BuildAssistantFooter still uses entry.Text for Copy and Read aloud, so the original entry's action now receives only 'After' instead of 'Before After'. The PR body acknowledges this limitation, but no maintainer has accepted the regression. Keep the original entry identity and full action text separate from each displayed fragment, and cover both actions.
    Confidence: 0.99

Overall correctness: patch is incorrect
Overall confidence: 0.96

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 2a2370699158.

Provenance checked

  • Compact tool grouping and inspectable details keeps the original intent (aac07ab: Keep tool-heavy conversations scannable while preserving chronology, identity, and selectable input/output.)
  • Live run progress changes intended behavior with a stated reason (814e732: Prevent active chat from appearing frozen and retain visible timing through tool work; this PR proposes quieter inline timing instead.)
  • Synthetic interactive Gateway scenarios keeps the original intent (5ca1513: Exercise interactive chat without competing for a real Gateway; the added tool-group scenario remains inert.)

Testing

Proof path: none.

Security

None.

Evidence

What I checked:

Likely related people:

  • Barbara Kudiess: Raw commit 243f9cf adds src/OpenClaw.Tray.WinUI/Chat/ChatReasoningPresentation.cs:26 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 243f9cff53d8; files: src/OpenClaw.Tray.WinUI/Chat/ChatReasoningPresentation.cs)
  • Caleb Eden: Raw commit aac07ab adds src/OpenClaw.Tray.WinUI/Chat/ToolCallCardRenderer.cs:362 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: aac07abb1fbd; files: src/OpenClaw.Tray.WinUI/Chat/ToolCallCardRenderer.cs)

Preflight source

Source 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

Metric Value Why it matters
Production and test growth Production +1,061/-157 lines; tests and test support +1,831/-69 lines Most growth supports disclosure motion, status handoffs, and mounted lifecycle coverage; its value depends on accepting the presentation redesign.

Labels

Label changes:

  • add P2: Chat status clarity and message actions have limited workflow impact without blocking chat delivery or setup.
  • add rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🦪 silver shellfish.
  • add status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Label justifications:

  • P2: Chat status clarity and message actions have limited workflow impact without blocking chat delivery or setup.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🦪 silver shellfish.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Rating scale

6/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.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed November 11, 2026, 6:41 PM ET / 23:41 UTC.

@bkudiess

Copy link
Copy Markdown
Collaborator

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?

BumpyClock and others added 2 commits November 12, 2026 09:31
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>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants