diff --git a/apps/cli/src/daemon.ts b/apps/cli/src/daemon.ts index abd7dd722..666f869e6 100644 --- a/apps/cli/src/daemon.ts +++ b/apps/cli/src/daemon.ts @@ -49,10 +49,17 @@ export const parseDaemonBaseUrl = (baseUrl: string, defaultPort: number): Parsed // --------------------------------------------------------------------------- const LOCAL_DAEMON_HOSTNAMES = new Set(["localhost", "127.0.0.1", "::1", "[::1]"]); +const BUN_EMBEDDED_ENTRYPOINT_PREFIX = "/$bunfs/"; export const canAutoStartLocalDaemonForHost = (hostname: string): boolean => LOCAL_DAEMON_HOSTNAMES.has(hostname.toLowerCase()); +export const isDevCliEntrypoint = (scriptPath: string | undefined): boolean => { + if (!scriptPath) return false; + if (scriptPath.startsWith(BUN_EMBEDDED_ENTRYPOINT_PREFIX)) return false; + return scriptPath.endsWith(".ts") || scriptPath.endsWith(".js"); +}; + // --------------------------------------------------------------------------- // Process spec // --------------------------------------------------------------------------- diff --git a/apps/cli/src/main.ts b/apps/cli/src/main.ts index a46a503ba..839750c74 100644 --- a/apps/cli/src/main.ts +++ b/apps/cli/src/main.ts @@ -64,6 +64,7 @@ import { buildDaemonSpawnSpec, chooseDaemonPort, canAutoStartLocalDaemonForHost, + isDevCliEntrypoint, parseDaemonBaseUrl, spawnDetached, waitForReachable, @@ -159,7 +160,7 @@ const isServerReachable = (baseUrl: string): Effect.Effect => ); const script = process.argv[1]; -const isDevMode = script?.endsWith(".ts") || script?.endsWith(".js"); +const isDevMode = isDevCliEntrypoint(script); const cliPrefix = isDevMode ? `bun run ${script}` : "executor"; const toError = (cause: unknown): Error => diff --git a/tests/daemon-bootstrap.test.ts b/tests/daemon-bootstrap.test.ts index 7c90cbfbd..949cb45f4 100644 --- a/tests/daemon-bootstrap.test.ts +++ b/tests/daemon-bootstrap.test.ts @@ -6,6 +6,7 @@ import { buildDaemonSpawnSpec, canAutoStartLocalDaemonForHost, chooseDaemonPort, + isDevCliEntrypoint, parseDaemonBaseUrl, } from "../apps/cli/src/daemon"; @@ -33,6 +34,14 @@ describe("daemon bootstrap helpers", () => { expect(canAutoStartLocalDaemonForHost("api.example.com")).toBe(false); }); + it("treats source entrypoints as dev mode but excludes bun embedded paths", () => { + expect(isDevCliEntrypoint("/repo/apps/cli/src/main.ts")).toBe(true); + expect(isDevCliEntrypoint("/repo/apps/cli/src/main.js")).toBe(true); + expect(isDevCliEntrypoint("/$bunfs/root/main.js")).toBe(false); + expect(isDevCliEntrypoint("/usr/local/bin/executor")).toBe(false); + expect(isDevCliEntrypoint(undefined)).toBe(false); + }); + it("builds bun-run spec in dev mode", () => { const spec = buildDaemonSpawnSpec({ port: 4788,