fix(daemon): hide Warp open-in launcher on win32/linux until dir-targeting lands (#4544)#4546
Open
cbeaulieu-gt wants to merge 1 commit into
Open
fix(daemon): hide Warp open-in launcher on win32/linux until dir-targeting lands (#4544)#4546cbeaulieu-gt wants to merge 1 commit into
cbeaulieu-gt wants to merge 1 commit into
Conversation
Warp cannot reliably target a directory on Windows/Linux: a cold start (Warp not running) ignores the spawn cwd and opens at home, while a warm relaunch honors it. This cold/warm split is invisible to the user and makes "Open in Warp" land at the wrong directory unpredictably. Gate the Warp catalogue entry to platforms: ['darwin'] (mirroring the terminal entry) so the existing applicableForPlatform filter hides it on win32/linux until upstream dir-targeting lands (warpdotdev/warp#6357). macOS (open -a Warp <dir>) is unaffected. Promote CATALOGUE, applicableForPlatform, CatalogueEntry, Platform, RealPlatform to exports so the platform gate is unit-testable without mocking process.platform. Follow-up to nexu-io#4539 / nexu-io#4542.
nettee
approved these changes
Jun 19, 2026
nettee
left a comment
Contributor
There was a problem hiding this comment.
@cbeaulieu-gt I verified the Warp gating change across the daemon’s two relevant paths: GET /api/editors now filters the entry out off-Darwin, and POST /api/projects/:id/open-in rejects unsupported platforms before any launch resolution. The added coverage around the Warp gate and the cross-platform Cursor guard matches the regression boundary this follow-up is trying to protect. Nice cleanup on tightening this behavior before it ships wider.
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.
Fixes #4544
Why
Follow-up to #4539 / #4542, addressing @nettee's review on #4542.
#4542 made the Warp host tool detectable and launchable on Windows, but surfaced a deeper limitation: Warp has no reliable directory-targeted launch on Windows/Linux. Empirically verified on Windows:
cwdis ignored — Warp opens at its home directory.cwd— the new tab opens at the project directory.This cold/warm split is invisible to the user and is a bug magnet: a user who keeps Warp closed clicks "Open in Warp", lands at home instead of their project, and reports "Open in Warp ignores my project" with no way to know why. Rather than ship inconsistent behavior, hide the Warp launcher on the platforms where it can't reliably target the directory until upstream support lands (warpdotdev/warp#6357). macOS (
open -a Warp <dir>) is unaffected.What users will see
od project editors/od project open-inCLI surfaces no longer list Warp. A directPOST /api/projects/:id/open-inwitheditorId: "warp"now returns400on these platforms.This is a default-behavior change for existing Windows/Linux users (Warp was briefly offered via #4542's draft; it is now gated off).
Surface area
od project editors/od project open-inreflect the same gate (both go through/api/editors+applicableForPlatform)/api/*shape change; theHostEditorresponse is unchanged, the catalogue is just filteredDual-track note: this is a filtering change, not a capability addition. The gate lives in one place (
applicableForPlatform) that both the UI list (GET /api/editors) and the launch path (POST /api/projects/:id/open-in) already consult, so UI and CLI stay in lockstep automatically.Screenshots
Verified live on Windows (win32) against the branch build. The "Open with editor" menu lists exactly: Cursor, VS Code, Explorer (installed) and Windsurf, Zed, Qoder, Antigravity, WebStorm, IntelliJ IDEA (not installed) — Warp is absent, matching
GET /api/editors1:1. The darwin-only Finder/Terminal entries are correctly absent too.Bug fix verification
Test path:
apps/daemon/tests/host-tools-routes.test.ts(newdescribeblock, "platform gate — Warp is darwin-only…").mainand green on this branch? yes — red becauseCATALOGUE/applicableForPlatformwere private (import resolvedundefined); green after the entry gainsplatforms: ['darwin']and the two symbols are exported.applicableForPlatform(warp, 'win32'|'linux') === false,applicableForPlatform(warp, 'darwin') === true, plus a regression guard thatcursorstays applicable on all platforms (no over-broad gating).Validation
pnpm --filter @open-design/daemon test -- host-tools-routes— 8/8 green (the 6 new gate assertions + the 2 pre-existing finder/terminal tests).pnpm --filter @open-design/daemon test(full suite) — no new failures attributable to this change; pre-existing failures are external-dependency/env tests (provider auth keys absent, agent CLIs absent,velabinary unresolved, Langfuse telemetry), none touching host-tools.pnpm typecheck— pass (all packages).pnpm --filter @open-design/daemon build— pass.pnpm guard— fails on this branch andmainidentically (stale design-system token artifacts, unrelated to this diff; confirmed via stash/pop on the same checkout).GET /api/editorsreturns nowarpid; rendered "Open with editor" menu shows no Warp (see Screenshots).🤖 Generated by Claude Code on behalf of @cbeaulieu-gt