Transcript: copy once per turn and keep pre-steer replies visible

Merged
TE
5d ago
+276-317

Carries the stranded transcript footer work from #29636 into a recoverable lane and fixes the copied turn ordering around interim steers.

Leo, 2026-10-31: “this is so stupid didn't i say this over an hour ago just remove the copy paste blocks the inherent capability to do so from the stupid interim chatter.” He also said: “claude code doesn't have individual copy pastable things for the entire thing, only the bottom. ironically we have literally the complete opposite. so let's invert our behaviour.”

Takes back #27313: replace its per-reply action rows with one turn footer so interim chatter has no copy affordance, as Leo requested.

Leo also clarified: “i literally said dont fold the steer” and “THE FACT THAT YOUR INTERIM MESSAGE YOU SENT BETWEEN STEERS GOT COLLAPSED IS [bad].”

What changes

  • Keeps a personal steer and the assistant reply before it expanded when the turn finishes; ordinary interim chatter still collapses.
  • Keeps one action footer at the bottom of an assistant turn; interim assistant chatter has no individual Copy affordance, while the final footer remains copyable.
  • Carries #29636's whole-turn Copy behavior, including top-level tool lines, and keeps tool runs before and after an interim steer separate so copied text follows transcript order.
  • Updates design/chat-transcript.md in teamleaderleo/leo-workspace#2001 with the one-footer/interim-chatter rule.
  • Renders a complete multi-message turn in a regression test and asserts exactly one footer, with interim dialogue both expanded and collapsed.

The notification-only turn fold is not included because Leo's earlier ask did not name it.

Risk is limited to completed-turn presentation. The existing fold anchor, expanded row order, turn identity, and final footer are preserved.

Validation

  • cmux-ci test -- bash -lc 'cd webviews && bun run test test/agent-pane-reply-actions.test.tsx test/agent-pane-reply-actions-frame.test.tsx test/transcript-completed-fold.test.ts test/transcript-steer-continuous.test.tsx test/agent-pane-turn-token-split.test.tsx'
  • The prior react-apps-base-check (1) failure was split: the changed footer test is fixed by preserving tool-run boundaries; pane-english.test.ts remains the same base red (sessionPages.ts English strings).

Changelog

Changed: Interim assistant chatter no longer has per-message copy affordances; one turn footer copies the ordered turn.

Agent session: agent session
🤖 Generated with Claude Code