cmux NEXT transcript: an opened message from another agent has one Copy

Draft
TE
5d ago
+127-3

Leo, 2026-10-27: "why are there two copy-paste symbols? I mean, two copy symbols". Leo, 2026-10-29: "wouldnt it be a little copy symbol on the top right within this card?" (#28057).

When a message from another agent is opened, it shows two Copy buttons. The card draws its Copy in the top-right corner (CardCopy, #28057), and the line's hover row draws a second one beside the time (ReceivedActions' MessageCopy). The two even copy different text: the corner copies the unsigned words, the row copies the raw text. design/chat-transcript.md says "Each message has one Copy control".

What changes

  • Opened, the card's corner Copy is the message's only Copy, and the line's hover row draws none (CardCopyShownContext, provided by IncomingMessageLine, read by ReceivedActions).
  • Closed, the row's Copy is the only one, as before.
  • Time, Retry, Pin, Reply and a waiting steer's ⋯ stay in the row. Nothing else changes, and nothing is removed: each state keeps exactly one Copy. A sub-session's prompt card and a wait's reply had only the corner Copy already.

Tests (red at the first commit, green at the head)

  • webviews/test/received-message-one-copy-browser.test.ts: Chromium on the gallery's agent-pane.incoming-message (long and opened), with the pointer on the message's line. Closed shows 1 Copy; opened shows 1 Copy, in the corner; closed again shows the row's Copy back. It writes 2x light and dark stills of the opened message.

Stills

Gallery agent-pane.incoming-message / opened, Chromium, synthetic data, light and dark: to follow from the cmux-ci runs at the red commit (before) and the head (after).

Observed / Not run

  • Observed: vp fmt and the browser-lane check on the changed files. web-lint's other failures are base debt in files this PR doesn't touch.
  • Not run yet: the test (it goes to cmux-ci).

Changelog

Fixed: an opened message from another agent shows one Copy button, not two.

Design spec: leo-workspace design/chat-transcript.md ("Delivery and actions").

Agent session: agent session

🤖 Generated with Claude Code