Skip to content

Agent pane: the live Thinking line starts on the icon column and stays the last row - #34370

Merged
teamleaderleo merged 5 commits into
feat-cmux-nextfrom
lane/thinking-shimmer-bottom
Nov 4, 2026
Merged

teamleaderleo merged 5 commits into
feat-cmux-nextfrom
lane/thinking-shimmer-bottom

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Leo, on the running turn's live line ("Thinking · 1m 23s total · 3.2K tokens" drawn under "Sent a message, finished 3 background tasks, ran 5 commands"):

the indent looks bad

thinking shimmer not being at the bottom looks bad

Leo-ask: ask-f654b777b7
Reference: cmux-design-references cmux/live/transcript-activity-summary-thinking-row (and a second capture of the live line drawn above a waiting message's "Send now" row)

  • Indent: the live line no longer pads its words to the icon rows' text column (.cv-worked.cv-worked--live, added in Agent chat: every status row's words on one column; session names read as words #33157). Its words now start on the icon column, the transcript's left edge, the way the shimmer sits in the Claude and ChatGPT apps, so it no longer reads like a second line of the row above it. The empty-slot marker data-lead-slot and the gallery icon-column invariant's handling of it are gone too: the invariant now reads the line's words like any other text row.
  • At the bottom: App.tsx used to append the waiting-messages group ("N messages from M sessions") and held guest prompts after the running turn's live line, so the shimmer sat above them. withWaitingRows (conversation/pendingMessages.ts) now puts them above a trailing live line (isLiveLine, model.ts). The line stays the last row, the same way a held prompt already sits above the line inside its turn.

Risk: small and contained (CSS, one row-order helper, comments). Nothing changes for an ended turn. Spacing stays the same because the live line under the group's head is still "one more line of the run" (isLiveStep).

Design spec: design/chat-transcript.md ("One icon column": the live line now starts on the icon column).

Test

bun test src/agent-session/acpmux/conversation/pendingMessages.test.ts: the new test "the waiting messages draw over the running turn's live line" fails on base, where withWaitingRows doesn't exist and the group was appended after the line, and passes on the head (22 pass).

Observed / Not run

  • Ran: the test file above; scripts/web-lint.sh.
  • Not run: the gallery advisory run and a DEV build capture. Leo will try the build.

Changelog

  • Changed: The agent's live "Thinking" line now starts at the transcript's left edge and stays the last row, below waiting messages.

Agent session: agent session

🤖 Generated with Claude Code


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


Summary by cubic

The live Thinking line now starts at the transcript's left edge and stays the last row, below waiting-message groups and held prompts. Its spacing is unchanged, and ended turns still place waiting messages at the end.

Written for commit 4cadcda. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 2 commits November 3, 2026 23:30
…g messages

Fails on base: withWaitingRows does not exist and App.tsx appended the
waiting-messages group after the live line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-1f5b0310f68aec102ea5
…s the last row

Leo: "the indent looks bad" / "thinking shimmer not being at the bottom looks bad".
Drops the live line's text-column inset (#33157) and keeps it under the
waiting-messages group and held guest prompts (withWaitingRows).

Leo-ask: ask-f654b777b7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-1f5b0310f68aec102ea5
@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 4cadcda: 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=pr34370 -f ref=lane/thinking-shimmer-bottom -f platform=macos -f backend_mode=local

Gallery before/after for 4cadcda: 16 states rendered, 4 images differ, 3392 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 41751157041 -R manaflow-ai/cmux -n gallery-advisory-34370-4cadcda04ce84b3dce0f0fce661a2d67379de164 (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 Light changed 0.0522% own conversation.css
agent-pane.activity-line-looks/spinner Apple System Colors changed 0.043% own conversation.css
agent-pane.activity-line-looks/kind Apple System Colors Light changed 0.0258% own conversation.css
agent-pane.activity-line-looks/kind Apple System Colors changed 0.0235% 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.attachment-source/before Apple System Colors Light unchanged 0% own conversation.css
agent-pane.attachment-source/before Apple System Colors unchanged 0% own conversation.css
agent-pane.attachment-source/corner Apple System Colors Light unchanged 0% own conversation.css
agent-pane.attachment-source/corner Apple System Colors unchanged 0% own conversation.css
agent-pane.attachment-source/small Apple System Colors Light unchanged 0% own conversation.css
agent-pane.attachment-source/small Apple System Colors unchanged 0% own conversation.css

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

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards. This PR merged before its CI finished: fix forward on main.

CI failed on 4cadcda04c (run 41751157462 attempt 1): 1 code, 1 unknown.

Job Verdict Why
web / react-apps-check (1) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs queuePausedState.test.ts a turn sent now while the queue stays paused shows running: timed out after 30000ms (job)
  • seen on other PRs agent-pane-changes-placement.test.tsx the in-page changes view sits right of the transcript at every pane width: failed (job)
  • seen on other PRs agent-pane-changes-tab.test.ts the chat opens Changes as a tab for remote chats and non-repository turns, in the page only with no ...: failed (job)
  • seen on other PRs agent-pane-edited-calm.test.ts the diff: a regular file header, plain-text badges, terminal-sized code lines: failed (job)
  • seen on other PRs trailing-plates-diff.test.ts (unnamed): failed (job)
  • seen on other PRs changes-address-thread.test.ts (unnamed): failed (job)
  • seen on other PRs changes-review-threads.test.ts (unnamed): failed (job)
  • seen on other PRs changes-stage-hunk-keys.test.ts (unnamed): failed (job)
Matched log lines
web / react-apps-check (1): (fail) a turn sent now while the queue stays paused shows running [30000.00ms]

Not re-run automatically: web / react-apps-check (1), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: web / Web status; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules
red: web / react-apps-check; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules
red: web / react-apps-check (1); NEW: at warmGalleryFrame (/home/runner/_work/cmux/cmux/webviews/test/support/galleryFrame.ts:207:25) at async <anonymous> (/home/runner/_work/cmux/cmux/webviews/test (+9 more) is not red on the base 842ce34; do not merge until green; see lane-rules

Shipped in:

@teamleaderleo teamleaderleo added leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel risk:low Risk tier (docs/ci/risk-tiers.md) labels Nov 4, 2026
@github-actions github-actions Bot added risk:normal Risk tier (docs/ci/risk-tiers.md) and removed risk:low Risk tier (docs/ci/risk-tiers.md) labels Nov 4, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

Checked row order, isLiveStep spacing, footer marks, Find and types; the first pass caught a readonly/mutable type error, fixed at this head.
Follow-ups: when a turn ends with waiting messages still shown, the group moves down one footer line (rows go from [group, live] to [footer, group]).

@blacksmith-sh

blacksmith-sh Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Found 44 test failures on Blacksmith runners:

Failures

Test View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs

...and 34 more test failures. View all on Blacksmith

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol xhigh, router-review): BLOCK at 14e9fcb

BLOCK at 14e9fcb
Visual verdict: no images; Leo tries the build

  1. [P1] [blocking] conversation.css:2098 — Update webviews/test/transcript-status-text-column.test.ts:105. Both variants still require the live words to align with icon rows’ text within 0.5px. Removing the inset moves them 24px left, breaking those browser tests.

  2. [P1] [blocking] pendingMessages.ts:95 — Update the spacing tests and their tables for the reordered neighbors. transcript-spacing-table.test.ts:181 and transcript-spacing-kinds.test.ts:265 still measure waiting-minus-live and expect positive 22px; placing waiting above live makes that distance negative.

These failures follow from the unchanged assertions; execution was unavailable because Bun/bunx are absent.

Follow-ups:

  1. [P2] [follow-up] Thinking.tsx:221 — Provide after screenshots covering alignment and ordering with waiting messages and held prompts.

…ew order and icon column

Router review (gpt-6.1-sol) at 14e9fcb: the text-column and spacing browser
tests still asserted the live line on the text column and over the waiting group.

Leo-ask: ask-f654b777b7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-1f5b0310f68aec102ea5
…from the group's last line

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-1f5b0310f68aec102ea5
…e kinds test does

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

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 4cadcda

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 4cadcda
Visual verdict: no images; Leo tries the build

No correctness regressions found in static review. Tests could not run because Bun and dependencies are unavailable.

  1. [P2] [follow-up] webviews/src/agent-session/acpmux/App.tsx:7487: Capture the running turn with waiting messages to verify the new ordering and alignment visually.

Follow-ups:

  • Capture and inspect the build’s live-line layout.

@teamleaderleo
teamleaderleo merged commit 8557b10 into feat-cmux-next Nov 4, 2026
165 of 177 checks passed
@teamleaderleo
teamleaderleo deleted the lane/thinking-shimmer-bottom branch November 4, 2026 01:40
teamleaderleo added a commit that referenced this pull request Nov 4, 2026
…w the live line kept last (base reds) (#34620)

* gallery: message-row plays click the one-line row's first line (#34464)

#34464 returned message rows to one line: the first line sits on the row
after the name, and stacked (#33249) stays a gallery version. #34149's plays
clicked .cv-agentmsg__below, the stacked first line, which the default no
longer draws (agent-message-row#sent-opened, #sent-opened-long: no element),
and message-line-look#opened waited for Copy under the opened message,
which only the stacked version moves there (waitFor timed out). The plays
click the first line's words on the row, never the recipient's chip, and
wait for what the one-line look draws.

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

* gallery: shift rows follow the one-line message rows and the live line kept last

incoming-message#minimal-fade-count, #minimal-inline-name and #minimal-open
go back down to 0.0175, 0.0175 and 0.0624: #34149 raised them for #33249's
stacked lines, and #34464's one-line rows measure 0.01749, 0.01749 and
0.0623 again on base (push run 41756372530).

queued-agent-messages#subsession-outbox and composer#queued-from-agent-open
open a waiting message above the running turn's live Thinking line, which
#34370 keeps as the last row by design (Leo: "thinking shimmer not being at
the bottom looks bad"), so opening it moves the live line down by what
opened (0.0159, 0.0082). Their 0 rows were measured with the live line over
the waiting group.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
lawrencecchen added a commit that referenced this pull request Nov 4, 2026
…t spacing test's after() helper (#34577)

* base red: the What's New brief's More line sits on the spacing scale (design tokens)

check:design-tokens is red on feat since b7c9441 (#34477): the brief
popover's .wn-pop-more used margin-top 2px, off the token scale. It now
uses --ds-space-1 (4px), the same gap .wn-pop-all uses above it.

* base red: transcript spacing test defines after() again (webviews typecheck)

webviews typecheck is red on feat: test/transcript-spacing-kinds.test.ts:247
calls after(), which #34464 (1e8a45b) removed together with below()
while #34370 (8557b10, written on a base that still had them) added a
new use. Restore both helpers as #34370 measured with them; no other change.

* base red: cloudRun test names a string in its template (vp lint restrict-template-expressions)

#34592 (31ffec4) builds a call label with ${params.cwd}, an unknown;
vp lint treats that as an error in the pre-push web lint, so the merge
service's hook refused #34577's squash. String() it; no behavior change.

* base red: format three webviews files the way vp fmt --check wants

feat's emoji shortcode change (#34364) left App.tsx, emojiShortcodes.test.ts
and composer-emoji.browser.test.ts unformatted, so vp fmt --check fails the
pre-push web lint on every webviews push. Output of scripts/web-lint.sh --fix.

* base red: the Cloud start source check accepts the formatted App.tsx call

vp fmt puts cloudFolderGrant.granting(folder.cwd, pickFolder(...)) on
several lines, and cloudRun.test.ts read it as one line, so it failed
after the format commit. The pattern now allows whitespace between the
arguments. bun test cloudRun.test.ts: 21 pass, 0 fail.

This branch was previously deployed

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

Labels

leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant