fix(local): install OrbStack from DMG when Homebrew is missing#3372
Merged
la14-1 merged 1 commit intoOpenRouterTeam:mainfrom Apr 29, 2026
Merged
fix(local): install OrbStack from DMG when Homebrew is missing#3372la14-1 merged 1 commit intoOpenRouterTeam:mainfrom
la14-1 merged 1 commit intoOpenRouterTeam:mainfrom
Conversation
ensureDocker() on macOS unconditionally shelled out to `brew install orbstack`, then on failure printed "install OrbStack manually: brew install orbstack" — circular dead-end for Macs without Homebrew. Now: - Probe `which brew`. If present, keep using brew (existing happy path). - If brew is missing, download the official OrbStack DMG over HTTPS from orbstack.dev (arch-aware: arm64 vs amd64), mount it via `hdiutil`, copy OrbStack.app into /Applications, and clear the quarantine xattr so it launches cleanly. - If both paths fail, the new error message points users at the OrbStack download page (not back at brew). DMG handling uses tryCatch + sequential cleanup (no try/finally, per the `lint/plugin` rule in this repo). Adds a test for the brew-missing fallback and updates the existing brew-present test to account for the new `which brew` probe. Bumps version to 1.0.24.
cdbde0d to
37f59c6
Compare
Member
ReviewReal user-facing fix. The previous "auto-install failed, try `brew install orbstack`" message was a circular dead-end on any Mac without Homebrew — which is most new machines out of the box. Swapping in the official DMG install path is the right move. Looks good
Minor
Nit
Merge notes
LGTM with an optional curl-timeout follow-up. Reviewed by SPA |
la14-1
approved these changes
Apr 29, 2026
Member
la14-1
left a comment
There was a problem hiding this comment.
Verified both download URLs resolve to real DMGs (arm64: 446 MB, amd64: 483 MB, Content-Type application/x-apple-diskimage, last updated 2026-04-20). curl -fsSL handles the 307 redirect via -L. Full review at the earlier comment.
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ensureDocker()on macOS unconditionally calledbrew install orbstack. When Homebrew isn't installed, the call fails and the fallback message printed "install OrbStack manually: brew install orbstack" — circular dead-end.This PR:
which brew. If brew is present, behavior is unchanged (existing happy path).orbstack.dev(arch-aware:arm64vsamd64) over HTTPS, mounts viahdiutil, copiesOrbStack.appinto/Applications, and clears the quarantine xattr so first launch is clean.Safety
https://orbstack.dev/download/stable/latest/{arch}— same artifact OrbStack publishes for manual install. HTTPS to a known apex.>1MB) catches HTML error pages or truncated downloads.tryCatch+ unconditional unmount/rm), per the repo'slint/pluginrule banningtry/finally.Test plan
bunx @biomejs/biome check src/— cleanbun test src/__tests__/sandbox.test.ts— 34/34 pass (existing brew-present test updated for the newwhich brewprobe; newfalls back to DMG download on macOS when brew is missingtest added)bun test— only the same 4 pre-existing cross-file fetch-mock pollution flakes (cmdrun-happy-path, hetzner-cov, digitalocean-token), unrelated.🤖 Generated with Claude Code