cmux NEXT: a click on a chat its agent made with acpmux new opens it

Merged
TE
15d ago
+23-5

Summary

Leo clicked a row in the "18 sessions" tray above the composer (summary-panel, priority-view, … each "Running") and nothing happened. Same for those chats in the Inspector's Subagents list.

Why: the tray and the Inspector list the chats a chat's agent started from acpmux spawnedBy (an agent running acpmux new, started/startedSessions.ts). A click sends chat.offer.open, and the app only opens a session of the chat's family (AgentPaneOfferOpen, AgentTurnStateStore.isFamily). That family check read only startedBy, the link the start_session tool sets. A chat made with acpmux new has spawnedBy only, so the app answered chat.offer.refused and the page (by design) did nothing.

Now the watch's summaries link a chat by startedBy, else spawnedBy, the same way RemoteAgentSessionLinks already reads a peer machine's chats. Every started chat the page lists can be opened: it focuses its tab if one shows it, else opens in the chat's side pane.

Testing

  • AgentSubsessionFamilyTests.aSpawnedChatIsFamilyToo (new): a spawnedBy-only summary links to its parent, startedBy wins over spawnedBy, a blank startedBy falls back, a self link is dropped, and isFamily holds after replaceStartedBy. It fails on base: there the summary has no parent.
  • The new parsing expression was compiled and run standalone with swiftc (cases above). The package compile and test run on CI.

Observed / Not run

  • Observed: the standalone swiftc run printed the expected parents.
  • Not run: the app. No Mac build on this host (rulebook); CI compiles it.

Changelog

Fixed: Clicking a chat the agent started with acpmux new in the running tray or the Inspector's Subagents now opens it

Proof

No capture: the fix is the native permission check behind the click; nothing changes on screen until a row is clicked.

Agent session: cosmic-gray