Repository navigation
fix(agent-pane): show the whole todo list, as Claude's check/spinner card - #21623
Conversation
Red on feat-cmux-next: the row takes the composer Plan toggle's 28px height and clips the list, the progress is a visible heading, done steps are struck through, the step in progress is bold and nothing spins. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The composer Plan toggle's rules matched the transcript's todo row, which is also .acpmux-plan, so the row took the toggle's 28px height and its paint containment cut the list to about one step. The toggle's rules now name the button, as #20833 did. The list itself draws as Claude desktop's card: a filled check is done, a thin spinner runs and a dashed circle waits, with no visible heading, strike-through or bold. A step left in progress stops spinning once its turn ends. Screen readers still hear the progress and each state. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Bead |
This comment has been minimized.
This comment has been minimized.
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Probably yours: CI stopped on
Failures:
Matched log linesNot re-run automatically: Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on de3ed0e to compare; do not merge until green; see lane-rules
Agents: |
|
Agents: |
Four ways a turn ends still leave its plan row live: the last turn without a summary, an earlier one with no other work, and a plan sent after the answer or after the summary. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A plan row in the last turn without a summary, in an earlier one with no other work, or sent after the answer or the summary now ends with its turn. An ended in-progress step is a plain ring, not a frozen arc. Long step text wraps under its first line, with the mark beside that line. The row height estimate matches the card (40 + 24 per step). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
…lish/plan-card # Conflicts: # webviews/src/agent-session/acpmux/styles.css
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cators Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
- vp fmt webviews/src/agent-session/acpmux/replyHref.ts - vp fmt webviews/src/pages/markdown/README.md - vp fmt webviews/src/pages/markdown/links.ts - vp fmt webviews/test/markdown-cmux-app-links.test.ts Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39210635038
|
Review finding (low severity): |
…after its answer Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the arc by selector, not source order settledWithoutSummary returned the rows from the answer on without endedPlan, so a plan sent after the answer of a summary-less turn with folded work kept spinning. The spinner rule now carries the Static condition itself, and the default-mode loops check asserts the plan spinner is among the running loops. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
[Medium impact] The PR appears safe to merge, with two previously reported, non-blocking spinner-state issues still open. FindingsSummaryFixes the todo list being clipped by the composer’s Plan button styles and gives it a bordered card.
No new findings were accepted. Tests and browser captures were not run during this review. Diagram%%{init: {'theme': 'neutral'}}%%
flowchart LR
A[Plan update] --> B[Transcript row]
B --> C{Turn ended?}
C -->|No| D[Allow spinner]
C -->|Yes| E[Set turnEnded]
E --> F[Draw plain ring]
D --> G[Apply motion preferences]
Reviews (9) · Last reviewed commit: "Merge branch 'feat-cmux-next' into claud..." · Reviewed by Greptile |
| shaped.push(...work.map((row) => ({ ...row, id: isEdit(row) ? `${row.id}${FOLDED}` : row.id, settled: true }))); | ||
| } | ||
| shaped.push(...groups, ...renderRows(body, version)); | ||
| shaped.push(...groups.map(endedPlan), ...renderRows(body, version)); |
There was a problem hiding this comment.
When the agent starts another turn on its own, direct.ts keeps planRow across turn_result and turn_started. The next plan update reuses the row before the previous summary. groups.map(endedPlan) then sets turnEnded even while the agent is working, so the active step shows a still ring instead of spinning.
Start a new plan row at that turn boundary, and cover this sequence with an event-based test.
…st a budget red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Found 26 test failures on Blacksmith runners: Failures
...and 16 more test failures. View all on Blacksmith: run 39373671987, run 39373671601
|
| const endedPlan = (row: AcpmuxRow): AcpmuxRow => | ||
| row.kind === "plan" && row.plan ? { ...row, turnEnded: true, version: row.version * 2 + 1 } : row; |
There was a problem hiding this comment.
Opening a long, finished chat can load a plan update and summary without their earlier prompt. attach loads only the newest 400 events, capped at 128 KiB. turnViewFrom copies rows before the first prompt unchanged, so that plan never gets turnEnded and its unfinished step keeps spinning. Apply the ended-plan logic to these leading rows too, while preserving any genuinely running plan.
# Conflicts: # webviews/src/agent-session/acpmux/composerStates.css # webviews/src/agent-session/acpmux/model.ts # webviews/src/agent-session/acpmux/styles.css
|
|
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
|
|
|
|
|
|
|
composerStates.css takes the base's no-shrink press (no press transform, opacity or spring rule) and keeps this branch's :where(button).acpmux-plan scoping and its note; static-status-loops lists both the running line's dots and the todo list's spinner. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…22028) * test(agent-pane): the todo list draws as a card with Claude's marks Red on feat-cmux-next: the row takes the composer Plan toggle's 28px height and clips the list, the progress is a visible heading, done steps are struck through, the step in progress is bold and nothing spins. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(agent-pane): the todo list draws as Claude's quiet card, unclipped The composer Plan toggle's rules matched the transcript's todo row, which is also .acpmux-plan, so the row took the toggle's 28px height and its paint containment cut the list to about one step. The toggle's rules now name the button, as #20833 did. The list itself draws as Claude desktop's card: a filled check is done, a thin spinner runs and a dashed circle waits, with no visible heading, strike-through or bold. A step left in progress stops spinning once its turn ends. Screen readers still hear the progress and each state. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Test that every ended turn's plan stops spinning Four ways a turn ends still leave its plan row live: the last turn without a summary, an earlier one with no other work, and a plan sent after the answer or after the summary. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(agent-pane): every ended turn's plan stops spinning; wrap long steps A plan row in the last turn without a summary, in an earlier one with no other work, or sent after the answer or the summary now ends with its turn. An ended in-progress step is a plain ring, not a frozen arc. Long step text wraps under its first line, with the mark beside that line. The row height estimate matches the card (40 + 24 per step). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux NEXT: test that Static stops the todo list spinner Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux NEXT: the todo list spinner holds still under Static status indicators Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 2e1857a - vp fmt webviews/src/agent-session/acpmux/replyHref.ts - vp fmt webviews/src/pages/markdown/README.md - vp fmt webviews/src/pages/markdown/links.ts - vp fmt webviews/test/markdown-cmux-app-links.test.ts Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39210635038 * test(agent-pane): an earlier turn without a summary ends a plan sent after its answer Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * agent pane: an earlier turn's late plan stops spinning; Static stops the arc by selector, not source order settledWithoutSummary returned the rows from the answer on without endedPlan, so a plan sent after the answer of a summary-less turn with folded work kept spinning. The spinner rule now carries the Static condition itself, and the default-mode loops check asserts the plan spinner is among the running loops. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Agent pane: tests for the activity line under the todo list (red) With agent.sessionStatus on, a running turn with a todo list shows one line under the list naming the running call (a command as itself, an edit by file name) or the todo in progress, and the turn's time, in the Working for status's place. Red: turns.ts has no activity line yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Agent pane: activity line under the todo list (agent.sessionStatus) With the Debug Settings toggle agent.sessionStatus on, a running turn with a todo list draws the list under its work and one line under it naming what the agent is doing now, with the turn's time ticking from the prompt (••• Edit ProductGrid.module.css 26s). The running tool call reads as its row names it (a command as itself, an edit by file name), else the todo in progress. The line takes the Working for status's place and goes away while the answer streams. Toggle off draws as before. The line's dots stop under static status indicators and Reduce Motion. Recut of #20833 (activity line only; the todo card is #21623). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test: a live turn's plan after the summary keeps spinning (fails) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(agent-pane): a live turn's plan after the summary keeps spinning Review finding: rows after a turn summary were marked turnEnded even while the turn was live, so a plan the agent started on its own stopped spinning. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
…nto recut/cx-ncc.102-activity-line turns.ts keeps the base's QUESTION_RECORD and isRunning imports and adds editedPaths to the toolPaths import; static-status-loops lists both the running line's dots and the activity line's dots. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keeps this branch's activity line additions next to #21623's squash (PlanList gallery note, .cv-activity styles, static-status-loops fixture). App.tsx reads useSessionStatus once: the base's recap card read it a second time in the same component, which no longer compiled. The toggle-off test waits for the running status line, since the base's line now names the running call instead of saying Working for. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
Summary
On
feat-cmux-nextthe agent's todo list is cut to about one step. The composer's Plan toggle is styled through.acpmux-plan, and the transcript's todo row has the same class (acpmux-row acpmux-${kind}). So the row takes the toggle's 28px height, and its paint containment clips everything below. The toggle's rules now use:where(button).acpmux-plan, which keeps a class's specificity. This is the base fix from #20833.The list also now draws as Claude desktop's todo card (row 1 of #21604, ref
apps/claude/live/transcript-task-list-in-progress.pngin cmux-design-references). It's a quiet bordered card: a filled check is done, a thin spinner runs and a dashed circle waits. The "n of m done" heading, strike-through and bold are gone. A step the agent leaves in progress stops spinning once its turn ends (turnEnded, set inturns.ts). Screen readers still hear the progress and each step's state.After review: every way a turn ends now marks its plan ended. That covers the last turn without a summary, an earlier one with no other work, and a plan sent after the answer or after the summary. An ended in-progress step draws as a plain ring, not a frozen arc. Long step text wraps under its first line, with the mark beside that line. The row height estimate matches the card (40 + 24 per step).
#20833 draws the same card, but only behind the
agent.sessionStatusDebug toggle, and it's been conflicting since 10-15. This PR lands the card for everyone. #20833's activity line and toggle are left for that PR or a follow-up.Testing
CMUX_BROWSER_TESTS=1 bun test test/agent-pane-plan.test.ts(real Chromium against a stand-in acpmux):bun test test/transcript-plan-ended.test.ts, which shapes each ended path withturnView:warmDevServer: / still cold after 100000 ms). The new CSS (wrap, ended ring) has no browser run yet, and the screenshots are from c15a5af.bun teston transcript-worked-fold, transcript-live-runs, transcript-long-chat-updates and transcript-range-content: 19 pass.bun run typecheckpasses. Inbun run check, everything up tovp checkpasses.acpmux-protocol:checkcouldn't run in my sparse checkout because the protocol IR file is missing. This PR doesn't touch the protocol.agent-pane.plan-list) in headless Chromium.plan.progressandplan.progress.one.Changelog
Fixed: The agent's todo list shows every step as a card with check, spinner and dashed-circle marks, instead of being cut to one line
Proof
Gallery
agent-pane.plan-list, dark, normal width.Checklist
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.