mirror of
https://github.com/stablyai/orca.git
synced 2026-10-31 00:57:45 +00:00
* fix(updater): let supervised macOS serve installs stage Squirrel during install Supervised `orca serve` keeps autoInstallOnAppQuit off, so electron-updater's MacUpdater hands the download to Squirrel.Mac only inside quitAndInstall. The updater, however, held the status at "downloading 100%" and gated quitAndInstall on Squirrel having already staged the bundle. Neither could happen first, so every macOS serve update stalled at macos_waiting_for_squirrel, remote installs failed with remote_update_not_downloaded, and a local install request timed out and quit without installing. In supervised serve mode, report the download as installable and let the install proceed to the handoff and native quitAndInstall. The install commits and arms the exit watchdog when Squirrel signals it has staged the bundle; a staging failure still recovers through the existing pre-commit error path. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(updater): hold destructive install prep until Squirrel stages the serve bundle The supervised macOS install now calls electron-updater's quitAndInstall before Squirrel has staged anything, and that staging completes asynchronously. Three consequences needed handling: - PTY cleanup and close-listener removal ran before staging, so a Squirrel failure recovered the server with its in-process sessions already killed. They now run when Squirrel reports the bundle staged, together with the commit and exit watchdog. - Any updater 'error' during staging (for example a background check) failed the handoff while MacUpdater's pending listener would still quit and install. While staging is awaited, only Squirrel's native error ends it. - Nothing bounded a Squirrel that never answers. After two minutes the install recovers through the existing pre-commit failure path and the server keeps serving. isMacStagingDeferredToInstall is now darwin-only, so Linux supervised installs keep their immediate commit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(updater): report a slow Squirrel staging instead of abandoning the install Recovering the install on the staging timeout reset Orca's state and failed the supervisor handoff, but electron-updater's MacUpdater keeps its own completion listener. A Squirrel that finished after the timeout still quit the app and installed, now with a failed handoff, so the supervisor skipped the replacement spawn. The timeout now only reports a non-retryable error status and records the slow staging; the handoff and in-flight install stay live so a late staging commits and relaunches normally. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(updater): commit a staged serve install before its session cleanup Squirrel's update-downloaded listeners run in registration order, and Orca's runs before the one MacUpdater adds to quit the app. The staged-install commit ran PTY cleanup first, so a throwing cleanup callback skipped the commit, the exit watchdog, and MacUpdater's quit, leaving the install stuck in progress. Commit and arm the watchdog first, then run cleanup under the same post_commit_cleanup_failed handling performQuitAndInstall already uses. The tests now register MacUpdater's persistent quit listener per unstaged install, so a retried install is followed through completion. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * test(updater): pin the MacUpdater staging behavior supervised serve installs rely on The supervised macOS serve install assumes electron-updater's MacUpdater starts Squirrel staging only inside quitAndInstall when autoInstallOnAppQuit is off, and quits the app once staged when autoRunAppAfterInstall is off. Every updater suite mocks electron-updater, so run the installed MacUpdater methods directly; an upgrade that changed either behavior now fails here instead of silently restoring the deadlock. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * test(updater): adapt the serve staging tests to current main Main's macOS quit-guard test predates the staging callbacks this change adds, so it now passes them, and the new install test builds its window without a type assertion. Co-authored-by: jbamlee <dev.jbam@gmail.com> --------- Co-authored-by: jbamlee <dev.jbam@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: m4air <m4air@Mac.localdomain>