acpmux: route/list says which routes serve the session's family
Summary
With a sessionId, _acpmux/route/list now also returns the session's harness family, and each route gets serves: true|false from Route::serves. The composer's new Account menu (#21853) uses it to list only the routes that can run the chat, without copying the serving rules into TypeScript. Without a sessionId the reply is unchanged.
Nothing else changes: who may call route/list (unix socket and local app, never Web or peer) is the same, and no secret is added to the reply.
Testing
routes_rpc.rs a_chat_switches_from_proxy_a_to_proxy_b_without_a_restart now adds a codex-only route and checks family == "claude", serves true for a Claude route and false for the codex one, and no serves without a session.
Hosted (./scripts/verify-cmux-tui-hosted.sh --filter a_chat_switches_from_proxy_a_to_proxy_b_without_a_restart):
- test-only commit 1ea6a63: failed as expected on Linux and macOS (
routes_rpc.rs:246,familywasNull, expected"claude"), run 39183206245 - fix dd6ec6f: passed on Linux and macOS, run 39186271546
Changelog
none
Proof
Wire change only; the test above is the proof.
🤖 Generated with Claude Code