cmux NEXT chat: a teammate's queued prompt names them and is theirs to change

Merged
TE
11d ago
+763-61

What

A teammate's queued prompt in a shared chat names them, and only they may change it.

Leo's words:

  • "we can still do the regular chat multiplayer" (2026-10-26)
  • "also chief chats we need multiplayer"
  • "for the agent chat side, we should be able to just... do stuff. unless lawrence is super actively workin on stuf rn"

acpmux now records a person author on queued prompts and refuses another author's queue edit with queue.not_author (#25268). Until this PR the pane dropped that author on the queue row, so a teammate's waiting prompt looked like the reader's own and offered Steer, Delete and Edit, which acpmux would refuse.

  • The queue entry keeps the author from its queued or queue_updated record (_meta.provenance {kind: "person_message", from, fromName}) and through acpmux's queue list.
  • The row shows the author's face and name inline, ahead of the text.
  • It offers no Steer, Delete, Edit, Move or ⋯ menu, and its keys only walk (↑ ↓ Esc). The reader's own rows are unchanged.

Stacked on #25253 (the multiplayer components); it retargets to feat-cmux-next when that lands. The design is hq #4389.

Captures (Linux Chromium, synthetic data, gallery agent-pane.shared-chat)

Before is queued-alone: the same running turn with two queued prompts, both the reader's. After is queued: Ana's prompt waits first, under her name, with no actions; the reader's own is below it.

before (queued-alone)after (queued)
dark
light

Risk

Low. Nothing changes for a chat whose records carry no person author: author stays unset and every row draws and acts as before.

Tests

Run through cmux-ci test (Linux):

  • vp lint: 0 warnings;
  • tsc --noEmit: clean;
  • bun test for multiplayer, ComposerQueue.test.tsx and queuedMessage.test.ts: all pass. New tests cover a teammate's row (its name, no actions, keys do nothing) and the author kept through acpmux's list.

test/agent-pane-queue-steer.test.ts "the queue takes its own place in the stack" fails the same way on feat-cmux-next (595 > 570 there). It is not from this change.

Agent session: agent session

šŸ¤– Generated with Claude Code