Repository navigation
Update Everything: one action updates the app, every machine's daemon and agent CLIs (cx-1mbnu) - #20940
Update Everything: one action updates the app, every machine's daemon and agent CLIs (cx-1mbnu)#20940teamleaderleo wants to merge 42 commits into
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
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)
Passes: CI passes on CI passes on Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on 47ae435 to compare; do not merge until green; see lane-rules
|
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
This comment has been minimized.
This comment has been minimized.
… and agent CLIs (cx-1mbnu) Recut of #20940 onto the current feat-cmux-next as one commit, now that #20920 (the cmux-tui agent-update-plan / agent-update-apply half) has landed. The CmuxNextUpdateEverything target, its catalog and tests are unchanged; the base merge added the module next to CmuxNextHomeEngine in CmuxNextAppTests and kept the base's action counts in actions.md for the export autofix to recount. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
67d93df to
613caed
Compare
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Recut onto feat-cmux-next |
This comment has been minimized.
This comment has been minimized.
- regenerated plans/cmux-next/actions.md Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39131862670
The base's namespace-type rule, added after this branch began, refuses all-static enums. lint-ios-package-conventions.sh --namespace-fix made UpdateEverything, UpdateEverythingDaemon and UpdateHandlers structs with a public init; their static members are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
…e-everything # Conflicts: # Packages/macOS/CmuxNext/Package.swift
check-l10n requires the 21 shipped languages and English's plural categories in every language. Adds bs, da, it, km, nb, pl, pt-BR, ru, th, tr, uk and vi, and gives ja, ko, km, th, vi and zh a "one" form for updateEverything.threadsRestart. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
# Conflicts: # plans/cmux-next/actions.md # schemas/settings-export/settings-schema.sources.sha256
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15db7-20cd-7e10-8535-158031297e5c&host=huge-blue
|
Review (subagent, correctness first): SHIP at 395a5e1 Re-review since the last SHIP at 9dd5810:
|
everyKeyHasAnExplicitAgentPolicy failed: the new key was in neither agent table. Turning it on lets Update Everything reach paired servers, so only the person sets it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15db7-20cd-7e10-8535-158031297e5c&host=huge-blue
Package.swift, the agent policy table and UpdatesSettings keep both sides (CmuxNextWebUpdates and updates.web from base). Generated files take base's side; the PR autofix regenerates them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15db7-20cd-7e10-8535-158031297e5c&host=huge-blue
|
Handoff for orphan-sweep: lane projects-07 (huge-blue, session 01a15db7) is folding because of the huge-blue disk P0, so this PR is orphaned. Run
|
|
Partially superseded by #20920, #21447, #21469, #21480, #20295, #25245, and #25386. The stale aggregate branch is not reusable: current base still lacks the cross-machine confirmation, app-last/relaunch journal, server opt-in, and chat-continuation result barrier. Closing this stale PR; those remaining contracts need a new owner and fresh cut. |
SHOW LEO. risk:high (update path): Leo approves the final head before it merges. Adopted by dead-owner-adopt-cmux from orphan-sweep; the original work is the cx-1mbnu lane's. #20920, which it depends on, merged 10-15.
Update Everything (cx-1mbnu) is one palette and app-menu action. It updates the app, every connected machine's cmux daemon and each machine's agent CLIs, then restarts that machine's chats on the new CLIs. It asks once, with:
Machines update in parallel. The app's own Sparkle update goes last because it relaunches. The relaunched app finishes the run from a journal note in Application Support: once the named machines reconnect, it moves them to the newer bundled daemon.
What it updates, and where
agent-update-applySSHService.installof this app's pinned cmux-tuicmux link machine update --to-bundled, refused like SSH when Cloud is turned off by the organizationupdates.updateEverythingServerson (off by default)Paired servers are skipped by default. A paired server (
ServerMachineSession) runs a Chief brain whose binaries belong to its own installer, and other people may use it. Update Everything leaves it out unless Settings > General > Updates > Include Paired Servers in Update Everything (updates.updateEverythingServers) is on. Even then, only its agent CLIs update and its chats restart.daemonChangeandupdateDaemonnever touch a server's cmux.Overlap checked
agent-update-plan/agent-update-applyandcmux link machine update --to-bundled. This PR is its client.UpdaterService.installAvailableUpdate(), so it goes through whatever relaunch gate cmux-next: safe continuous nightly updates #20295 adds. This PR has no second relaunch path.What changed
UpdateEverything.bind), the plan, the confirmation and result toasts, the runner and the relaunch journal;UpdateEverythingHostSteps);agent-update-plan/agent-update-applyand the wait for a replaced daemon (UpdateEverythingDaemon).UpdateEverythingHost, a struct of closures: its machines,SSHService.install, the Cloud update call and the active window.UpdateEverythingHost.app(_:)and onebindline are all of it. The app's existing update actions (UpdateHandlers) move into the module.threads_failed/threads_errorstill decodes.updates.updateEverythingServers(toggle, off). Its source isschemas/settings/source/updates.json; the PR autofix regenerates the exports.debug.update_everything {action: confirm|progress}and the tourupdate-everything. They open the real confirmation for a fixed plan (This Mac, an SSH machine, a Cloud machine and a paired server) and the progress toast. Nothing updates.updates.updateEverything. Its strings and the new setting's are in all 21 catalog locales.Tests
CmuxNextAppTests/UpdateEverythingRunTestsdrives the runner through the steps protocol the App implements:aRunUpdatesEveryMachineThenTheAppLastAndTheRelaunchFinishesIt:aPairedServerUpdatesOnlyItsAgentCLIsNeverItsDaemon(new): a server never gets a daemon change or a daemon step; its agent CLIs update.chatsThatCouldNotRestartAreNamedInTheResult,aFailedDaemonUpdateStopsThatMachinesAgentUpdate,aDaemonThatDoesNotNameItsBuildIsNotCalledOutdated, and the launch-check and no-window cases.Earlier fleet runs at older heads (before this base merge): red-then-green for the threads reason (steps
0976f7f19630585ef88a43d1,6de1aa6a8db4bc9afac14dc5), all 347 suites green at 4178ae9 (step8638da2362de71a6e1d25295) except a display-only sidebar test that also fails on unrelated branches, and a Release compile (step0193f5f31738075eed4df6d3). This head's compile and tests run in this PR's CI.Observed / Not run
gen-settings-sources.py --check,prepush-gate.py(no new violations) andgenerated_outputs.py driftlocally on the head.updates.updateEverythingServers: false.Known limits (review findings, not fixed here)
agent-update-applygets a fixed 30 minutes. The daemon allows 15 minutes per CLI plus restart time, so with several slow CLIs the app can report a timeout while the daemon is still updating.daemonChangetreats any build other than the bundled one as outdated. A Mac on an older build than a shared SSH machine's daemon would move that daemon back.59ae151d).Captures
Capture
tour-update-everythingat7a2dbd6e5154(fleet build, capture mini, text checked for private data)The tour opens the real confirmation for the fixed DEBUG plan, with the progress toast below it. The dark still reads cleanly. In the light still the dialog's text has low contrast: that is the shared
CmuxDialogstyling (or the light-appearance switch mid-dialog), not this PR's code. Captured at7a2dbd6e; the final headc242dc8ediffers from it only by a base merge that doesn't touch Update Everything.Changelog
🤖 Generated with Claude Code
Agent session: huge-blue