Guest page: the guest's composer and its own messages (carries #26819)
Leo's words (2026-10-28), on Theo's T3 Code "Share with guest": "we want to be having, be able to do this kind of flow for CMux multiplayer ... we can work on the agent chat multiplayer." In that flow each message the guest sends waits for the owner. And today: "eh i think we'd better try to get at least the agent sessions' group chats in and refined".
This carries #26819 (part 2 of the guest page) onto current feat-cmux-next, now that part 1 landed as #29901 (6e5c3a5). It has only #26819's own three commits, cherry-picked with their authorship kept; #26779's commits are already on base through #29901. All three applied cleanly, so no line here differs from #26819.
8212e5eGuest page: the guest's composer and its own messages (GuestComposer.tsx,guestPrompts.ts,typingSignal.ts, the waiting gallery and tests).a3ef8f7Guest page: text fields show focus by their edge, not a ring.5cde0f9test: the guest page's spy test gives the page its storage (part 2's prop).
Plan: manaflow-ai/cmuxterm-hq#4766. Spec: leo-workspace design/chat-multiplayer.md, section 3 (the guest's composer) and section 4.3 (prompt, typing, prompt_state, prompt_status).
The owner's side of a held prompt (Approve / Decline) is the held-prompt stack (#28859, #29003, #26862, #26742), owned by another lane; until it lands a guest's prompt shows as waiting.
#26819 can close once this lands.
Agent session: agent session
š¤ Generated with Claude Code
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Adds the guest page's composer so a guest can send messages to the agent, while the chat's owner approves or declines each one before the agent sees it.
- The guest's messages carry a stable client id in
sessionStorage, so a resend after a dropped connection or a reload is the same prompt. - Held messages show a "sending" then "waiting on {owner}" state; decided ones collapse to a one-line "Sent / Declined / Withdrawn / Not sent" summary.
- Typing is signalled at most twice a second and turns off on send, clear, or 5s idle.
- The owner's Approve / Decline UI is not in this PR; until the held-prompt stack lands, guest messages remain in "waiting".