Repository navigation
Cloud: a new chat offers Sign in from its first turn (agent_login before the first send) - #31147
Conversation
A new chat's wire has no session client during initialize, so it never named agent_login and its first failed turn offered no sign-in until the chat reconnected. The host now passes its machine daemon's agent-session-login-v1 read to the start wire, which names the feature before the first send. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on 377187a to compare; do not merge until green; see lane-rules Shipped in:
|
|
Owned by an agent session · session |
|
Found 7 test failures on Blacksmith runners: Failures
|
|
Review (subagent opus 5.5 medium): SHIP at f1020e8 No blocking findings. It checked the Swift 6 captures, both Follow-ups:
Checks at this head: the fleet app compile passed; the webview verdict is green; |
…1147, #31145) (#31182) arch-ratchet at the feat tip 2aaed54: [app_lines] CmuxNextApp +5, from #31147 (AgentTabRemoteHost.swift) on top of #31145's +4. HandshakeFollower and its Handshake and Snapshot types hold only value logic and no app state; they move from CmuxNextApp/Cloud/CloudMachineUpdates.swift to CmuxNextCloud/Link/HandshakeFollower.swift, and their four tests move to CmuxNextCloudTests. No behavior change; the app calls the same API. (cherry picked from commit 1d78bf5; prepared earlier today, fleet compile 10238882589a and suites 0a0c418e4823 green at its first base)
) A new chat's wire has no session client during initialize, so it never named agent_login and its first failed turn offered no sign-in until the chat reconnected. The host now passes its machine daemon's agent-session-login-v1 read to the start wire, which names the feature before the first send. Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-709509da51987320d9a5
…o CmuxNextHostedChief (#31218) The arch ratchet's app_lines row was +15 at the feat-cmux-next tip against the last green arch tip 006666a (#26600 +22, #31055 +16, #22953 +15, #31147 +5, #31106 -1, #31182 -42). CmuxNextApp may not grow. ServerReachPlan (which paired servers the app reaches, and the parsers of chief.list, team.hosts.list, `cmux link show` and `cmux link peer list`) holds no app state: it is value types and pure functions over CloudChief (CmuxNextHostedChief) and ServerReach (CmuxNextRemote). It moves as it is into CmuxNextHostedChief with a public API; ServerReachService in the App calls it. CmuxNextHostedChief now depends on CmuxNextRemote (service -> service). Behavior-neutral: the only body change is parseChiefs, which read the chiefs through the App's CloudChiefs.parseList after its guard proved `chiefs` is an array; it now maps that array with CloudChief.parse itself, the same result.
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Fixes #30894.
Leo, 2026-11-01, on the Cloud sign-in card: "yes those are important".
A new Cloud chat had no sign-in offer on its first failed turn. Its wire (
RemoteAcpmuxWire(start:)) has no session client duringinitialize, so it never namedagent_login. The page reads features only atinitialize, so the offer stayed hidden until the chat reconnected.The fix:
AgentTabs+Wiring: sets the host'sservesLoginfrom the machine daemon'sagent-session-login-v1, the same read thatservesTrustandservesKeyedReasonalready use.AgentTabRemoteHost: passes it to the start wire.RemoteAcpmuxWire: namesagent_loginfrom it until a session client exists, then asks the client as before.Test:
RemoteAcpmuxLoginTests.aNewChatNamesTheFeatureBeforeItsFirstSendcovers a new chat whose daemon serves the relay and one whose daemon doesn't, each with and without a Cloud owner answer.Risk: low. An observer never takes the start route, and a wire that already has a session is unchanged.
Agent session: agent session
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Fixes #30894. A new Cloud chat now offers Sign in from its first failed turn; previously the offer appeared only after the chat reconnected, because the start wire has no session client during
initializeand so never namedagent_login.AgentTabs+Wiringsets the host'sservesLoginfrom the daemon'sagent-session-login-v1, the same read thatservesTrustandservesKeyedReasonuse.AgentTabRemoteHostpasses that flag to the start wire, andRemoteAcpmuxWirenamesagent_loginfrom it until a session client exists.Written for commit f1020e8. Summary will update on new commits.