fix(agent-pane): show the whole todo list, as Claude's check/spinner card

Merged
TE
16d ago
+195-43

Summary

On feat-cmux-next the 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.png in 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 in turns.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.sessionStatus Debug 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):
    • Red on 38e54ca, the test commit alone: the progress was a visible heading, the in-progress step didn't spin, and steps fell outside their row.
    • Green on c15a5af: 3 pass.
  • bun test test/transcript-plan-ended.test.ts, which shapes each ended path with turnView:
    • Red on 54c194f, the test commit alone: 4 fail, 1 pass (the running turn).
    • Green on 0cf4c2e: 5 pass.
  • The browser test above couldn't rerun on 0cf4c2e. Host load was ~350, and its dev server stayed cold past the 100s warm-up (warmDevServer: / still cold after 100000 ms). The new CSS (wrap, ended ring) has no browser run yet, and the screenshots are from c15a5af.
  • bun test on transcript-worked-fold, transcript-live-runs, transcript-long-chat-updates and transcript-range-content: 19 pass.
  • bun run typecheck passes. In bun run check, everything up to vp check passes. acpmux-protocol:check couldn't run in my sparse checkout because the protocol IR file is missing. This PR doesn't touch the protocol.
  • No app build. The change is webview CSS and TSX, and the screenshots come from the gallery stage (agent-pane.plan-list) in headless Chromium.
  • Localization: no new strings. The progress line reuses plan.progress and plan.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.

Before (running)After (running)
After (finished turn)After (running, light)

Checklist

  • Behavior changes have added or updated tests, or Testing says why not
  • UI, settings, menu, schema, help-text or user-facing docs change: localization audited, and the result is stated above
  • Reviewed with a subagent before merge (cmux-review), and all bot and human review comments resolved

šŸ¤– Generated with Claude Code


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