Skip to content

Agent pane: tool-call rows read one way (lead thought label, failure tag, step hover, task line) - #34439

Merged
teamleaderleo merged 8 commits into
feat-cmux-nextfrom
lane/transcript-tool-row-consistency
Nov 4, 2026
Merged

teamleaderleo merged 8 commits into
feat-cmux-nextfrom
lane/transcript-tool-row-consistency

Conversation

@teamleaderleo

Copy link
Copy Markdown
Collaborator

Leo: "i think we ought to audit the whole tool call/notice/send and recieve message styling esp like see what we can iterate on in the gallery too"

This audit found five places where tool-call rows in the agent transcript break the shared row grammar. This PR fixes them. It follows design/chat-transcript.md, sections "One row grammar" and "Grouped steps", plus the rules that a disclosure chevron goes right after its label and that no tool-call row draws a spinner. References used: chatgpt/live/transcript-disclosure-chevron-chatgpt, claude/live/transcript-tool-call-group-summary.

Changes

  1. The opened lead thought's chevron goes after its label (introduced in cmux NEXT: list a run's steps in one bordered group, as Claude Code desktop does #27896). An opened lead thought had no label, and float: right put its chevron alone at the row's far edge. It now reads "Thought for 6s" (or "Thought") with the chevron right after the words, the way a later step thought does, and its text sits flush underneath. ThoughtRow.tsx StepThought, conversation.css .cv-step-thought.
    • Gallery agent-pane.claude-desktop-organization, three looks: shared (label plus chevron, shipped), lead-edge (the replaced far-edge chevron) and lead-bare (a lone chevron at the text column). I picked the label: it is the only look that follows the chevron-after-label rule and matches how Claude Code desktop names a thought.
  2. The failure word stays visible when a label is cut (introduced in Agent chat: a failed tool call says what happened in a word and why in one line #24339). In ToolRow, "Failed", "Denied", "blocked by hook" and "Exit 1" sat inside .cv-tool__text, so a long label's ellipsis hid them. The word is now a flex: none tag after the text, as CommandRow's is. Gallery agent-pane.tool-errors#long-label.
  3. A sub-session line has no spinner (introduced in Agent chat: a finished turn keeps the task it started in sight #32927). TaskLine drew a <Spinner> for a working task. It now keeps the harness mark at rest and shimmers its title (RowShimmer, is-live), the way a running tool row does. The harness mark is now 12px, the same as received rows' sender logos (SENDER_LOGO_SIZE), and the undefined var(--cv-muted) is now --cv-text-muted. Gallery agent-pane.long-report#lead-finished-working.
  4. Hovering a grouped step only reveals its chevron (introduced in fix(transcript): reveal inner tool chevrons on hover #29854). Steps inside an opened group used to brighten their icon, text and chevron to --cv-text on hover, while lone rows don't change on hover (Agent chat: steps read as one list; a thought shows in full #20330, fix(webviews): step rows stay still on hover; token-line tests follow the activity tone #27977). Hover now only reveals the chevron; focus, open and an open popup still brighten the step. Gallery agent-pane.claude-desktop-organization#step-hover.
  5. Failed non-shell steps say "Failed" too (introduced in Agent chat: a run of tool calls reads as Claude Code desktop summarizes it #33759). Only .cv-command__failed was capitalised, so a failed Read step said "failed" next to a command step's "Failed". ToolRow's failure tag now gets the same ::first-letter rule. Gallery agent-pane.tool-errors#failed-step-mixed.

Tests

  • New webviews/test/transcript-tool-row-consistency.test.ts (Chromium, light and dark) checks five things:
    • A cut label keeps its failure word whole, after the label and inside the row.
    • Both failed steps read "Failed" through ::first-letter uppercase.
    • The opened lead thought's chevron sits 0 to 8px after "Thought…", with no float.
    • A working task line has no spinner, has one shimmer and has a 12px mark.
  • agent-pane-step-rows.test.ts: a hovered step shows its chevron and keeps its tone.
  • transcript-chevron-after-label.test.ts: the opened lead thought is no longer exempt, and the organization scene was added.
  • agent-pane-write-row-label.test.tsx and claude-desktop-tool-summary.test.tsx were updated for the tag move.

Risk

Small and contained. All changes are in transcript tool-row CSS and three row components, and no data or state changes. A trial merge with #34136, #34303, #34313 and #34306 is clean.

Follow-up: McpCallRows.tsx still puts its failure word inside the cut text. I left it out here because open #34313 changes that file.

Agent session: agent session

🤖 Generated with Claude Code

teamleaderleo and others added 4 commits November 3, 2026 16:08
…tag, step hover, task line)

- An opened lead thought reads "Thought for 6s" with its chevron right after the words, not parked
  at the row's far edge (cmux#27896).
- ToolRow's failure word is a tag after the label, outside its ellipsis (cmux#24339), capitalised
  as CommandRow's "Failed", in steps too (cmux#33759).
- An inner step under the pointer only reveals its chevron; focus and open still lift it (#29854).
- A working sub-session line draws no spinner: its harness mark stays (12px, as received rows'
  logos), its title shimmers, and its state mark uses --cv-text-muted (cmux#32927).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
… run, each with one failure

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
… first-letter rule

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review c16267f: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr34439 -f ref=lane/transcript-tool-row-consistency -f platform=macos -f backend_mode=local

Gallery before/after for c16267f: 16 states rendered, 6 images differ, 1885 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41763656370 -R manaflow-ai/cmux -n gallery-advisory-34439-c16267f4ea025f5253416aeedd0d19b02acef8c2 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.access-offer/turn-no-credits Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-credits Apple System Colors unchanged 0% own conversation.css
agent-pane.access-offer/turn-low-credits Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-low-credits Apple System Colors unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-offer Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-offer Apple System Colors unchanged 0% own conversation.css
agent-pane.activity-line-looks/none Apple System Colors Light unchanged 0% own conversation.css
agent-pane.activity-line-looks/none Apple System Colors unchanged 0% own conversation.css
agent-pane.activity-line-looks/spinner Apple System Colors changed 0.0357% own conversation.css
agent-pane.activity-line-looks/spinner Apple System Colors Light changed 0.0298% own conversation.css
agent-pane.activity-line-looks/kind Apple System Colors changed 0.0109% own conversation.css
agent-pane.activity-line-looks/kind Apple System Colors Light changed 0.0103% own conversation.css
agent-pane.activity-line-looks/aligned Apple System Colors Light unchanged 0% own conversation.css
agent-pane.activity-line-looks/aligned Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/single Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/single Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/grouped Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/grouped Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/single-multiedit Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/single-multiedit Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-multiedit Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-multiedit Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/single-long Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/single-long Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-long Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-long Apple System Colors unchanged 0% own conversation.css
agent-pane.approved-tool-row/ask-mode-approved Apple System Colors Light unchanged 0% own ToolRow.tsx
agent-pane.approved-tool-row/ask-mode-approved Apple System Colors unchanged 0% own ToolRow.tsx
agent-pane.approved-tool-row/run-one-approved Apple System Colors Light changed 2.77% own ToolRow.tsx
agent-pane.approved-tool-row/run-one-approved Apple System Colors changed 2.32% own ToolRow.tsx
agent-pane.approved-tool-row/mcp-approved Apple System Colors Light unchanged 0% own ToolRow.tsx
agent-pane.approved-tool-row/mcp-approved Apple System Colors unchanged 0% own ToolRow.tsx

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Shipped in:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at 3853d82
Visual verdict: code-only review; no images.

Checked: the new .cv-tool > .cv-tool__failed:not(.cv-tool__icon) rule only matches ToolRow's moved tag. Every other .cv-tool__failed (ToolGroupRow, McpCallRows, FailedCount, BackgroundStatusLine) sits inside a text span, and SentMessageLine's icon is excluded by the :not. The card, tree and zebra grids place the tag in column 3 (column 4 in tree). The tag move leaves RowShimmer and Find alone (still data-find-skip), and a label-only row's clip measurement now just counts the label. StepThought keeps the closed lead preview, its aria-label matches the visible label, and its body is still findable. The TaskLine shimmer works: .cv-tool.is-live .cv-row-shimmer and its band/lit rules use descendant selectors, so they reach .cv-agent-activity__sentence, which TaskLine.css positions. The dim rest tone comes from the new .cv-agent-tag rule. Hover now only reveals the chevron, and the focus and open lift is kept.

Follow-ups:

  • [follow-up] On the non-default tool-error-look=inline arm, the inline cause now comes before the failure word ("Read x · File does not exist Failed"), because InlineFailureCause stayed inside .cv-tool__text. Move it after the tag, or hide it when the tag shows.
  • [follow-up] The openAnyRun play in toolErrors.gallery.ts has an unbounded while (closed) click loop. If a click ever fails to flip aria-expanded, it spins until the frame's outer timeout. Cap the iterations, for example at the number of runs.
  • [follow-up] The task-line test runs with reducedMotion: "true", where .cv-row-shimmer is display: none, so it only checks that the shimmer exists, not that it shows. A motion-on check of the lit copy's box against the title would cover the overlay alignment.
  • [follow-up] McpCallRows.tsx still puts its failure word inside the cut text (already named in the PR body; waits on Unify transcript icons on the cmux pack (#33867) #34313).

@blacksmith-sh

blacksmith-sh Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Found 5 test failures on Blacksmith runners:

Failures

Test View Logs
main.DeveloperIdAppTests.test_download_prints_the_active_profile_only/
test_download_prints_the_active_profile_only
View Logs
stubs: /System/Library/Frameworks/Security.framework/Versions/A/Security has no stub/
Security has no stub
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_CFRetain']/
CoreFoundation, missing 1: ['_CFRetain']
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_log2']/
CoreFoundation, missing 1: ['_log2']
View Logs
test_the_type_check_covers_every_webviews_test_file (main.WorkflowShape.test_the_ty
pe_check_covers_every_webviews_test_file)/
test_the_type_check_covers_every_webviews_test_file (main.WorkflowShape.test_the_ty
pe_check_covers_every_webviews_test_file)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at 46a5ef1
Visual verdict: code-only review; no images.

The only change since 3853d82 is a formatter fix: TaskLine.tsx puts the AgentIdentity element on one line, with the same props. The earlier review and its follow-ups carry over unchanged.

…ript-tool-row-consistency

# Conflicts:
#	webviews/test/transcript-chevron-after-label.test.ts
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at 623fcc5

The base merge keeps the PR's diff byte-for-byte apart from line offsets. Its one hand resolution, in transcript-chevron-after-label.test.ts, keeps both scene lists (the base's message-line-look scenes and the PR's claude-desktop-organization#shared). The base's conversation.css changes don't touch the rules this PR changes. The earlier follow-ups stand.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at c16267f

On top of the SHIP at 623fcc5 this only reformats: the formatter puts the mark ternary in TaskLine.tsx on one line, and behaviour is unchanged.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at c16267f

Reviewer: codex gpt-6.1-sol xhigh, fast tier.

SHIP at c16267f

Visual verdict: compared all 16 gallery pairs; no confirmed regression attributable to this diff. Approved-row clipping appears to be an animation capture artifact.

No correctness findings. Tests could not run because Bun, dependencies, and browser binaries are unavailable.

Follow-ups: none

@teamleaderleo
teamleaderleo merged commit c084488 into feat-cmux-next Nov 4, 2026
171 of 172 checks passed
@teamleaderleo
teamleaderleo deleted the lane/transcript-tool-row-consistency branch November 4, 2026 04:39
teamleaderleo added a commit that referenced this pull request Nov 4, 2026
… words, like every row's

The organization scene #34439 added to transcript-chevron-after-label measured the folded todo
line's chevron 11.2px after "1 of 3 tasks done" (its own 8px flex gap plus the glyph inset).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64
teamleaderleo added a commit that referenced this pull request Nov 4, 2026
… words, like every row's (#34986)

The organization scene #34439 added to transcript-chevron-after-label measured the folded todo
line's chevron 11.2px after "1 of 3 tasks done" (its own 8px flex gap plus the glyph inset).


Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

1 inactive deployment
ci-routing-agent — c16267f4 Deployed Nov 4, 2026 by teamleaderleo via cmux-tui tree preflight #108972
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant