fix(cmux-next): show progress while forking chats
Problem
Fork starts a slow asynchronous host operation without showing that the click was accepted. A second click can arrive before the new session appears, and refusal/error feedback is easy to miss.
Change
Fork actions now use the live host chat.fork promise when available. The button enters a same-frame pending state, disables duplicate activation, shows a spinner while the fork/new-agent handoff is pending, then shows a success check or the existing localized fork failure state. Gallery and unit-test callers retain their injected fallback.
Leo described the problem as: “the fork button is slow with no feedback”.
Validation
bun test test/user-message-actions.test.tsx --test-name-pattern 'Fork|read prompt'bunx vp lint src/agent-session/acpmux/conversation/MessageActions.tsx src/agent-session/acpmux/conversation/UserBubble.tsx src/agent-session/acpmux/conversation/TurnRows.tsx- Fleet compile and exact-head before/after captures will be added before merge.
Design reference
Matched the quiet, hover-first transcript action rows documented in apps/claude/live/NOTES.md and the fork action row reference apps/claude/live/transcript-user-message-actions-read-receipt.png.
Agent-Session: cmux16
![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
Fork now shows immediate feedback in the transcript instead of looking inert while the host creates the new session.
- The button enters a same-frame pending state, disables duplicate clicks, shows a spinner, then resolves to a success check or the existing localized failure state; empty or false host results count as refusal.
- Pending state lasts through the live host
chat.forkpromise when available, and the app path now waits for session selection and persistence before resolving; injected fallbacks are unchanged.