authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-06-04 15:14:07-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-06-04 15:14:07-07:00
loga74dfd4f3c06e5028b43af51d2e35139f7ac2c00
tree750da97e78ea29268c85d79a89f6f09134d4c741
parent49c1b64687f8acdbe145f760988314e397170da6
signature Signed by PGP key B5690EEEBB952194

[codex] Avoid shell for Node executable spawns (#2952)

Co-authored-by: Julius Marminge <julius@mac.lan>

4 files changed, 3 insertions(+), 8 deletions(-)

apps/server/scripts/cli.ts-2
...@@ -175,8 +175,6 @@ const buildCmd = Command.make(...@@ -175,8 +175,6 @@ const buildCmd = Command.make(
175 cwd: serverDir,175 cwd: serverDir,
176 stdout: config.verbose ? "inherit" : "ignore",176 stdout: config.verbose ? "inherit" : "ignore",
177 stderr: "inherit",177 stderr: "inherit",
178 // Windows needs shell mode to resolve `.cmd` shims on PATH.
179 shell: process.platform === "win32",
180 }),178 }),
181 );179 );
182180
packages/effect-acp/src/client.test.ts+1-2
...@@ -34,9 +34,8 @@ it.layer(NodeServices.layer)("effect-acp client", (it) => {...@@ -34,9 +34,8 @@ it.layer(NodeServices.layer)("effect-acp client", (it) => {
34 Effect.gen(function* () {34 Effect.gen(function* () {
35 const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;35 const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
36 const path = yield* Path.Path;36 const path = yield* Path.Path;
37 const command = ChildProcess.make("node", mockPeerArgs(yield* mockPeerPath), {37 const command = ChildProcess.make(process.execPath, mockPeerArgs(yield* mockPeerPath), {
38 cwd: path.join(import.meta.dirname, ".."),38 cwd: path.join(import.meta.dirname, ".."),
39 shell: process.platform === "win32",
40 ...(env ? { env: { ...process.env, ...env } } : {}),39 ...(env ? { env: { ...process.env, ...env } } : {}),
41 });40 });
42 return yield* spawner.spawn(command);41 return yield* spawner.spawn(command);
packages/effect-acp/src/protocol.test.ts+1-2
...@@ -57,9 +57,8 @@ const makeHandle = (env?: Record<string, string>) =>...@@ -57,9 +57,8 @@ const makeHandle = (env?: Record<string, string>) =>
57 Effect.gen(function* () {57 Effect.gen(function* () {
58 const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;58 const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
59 const path = yield* Path.Path;59 const path = yield* Path.Path;
60 const command = ChildProcess.make("node", mockPeerArgs(yield* mockPeerPath), {60 const command = ChildProcess.make(process.execPath, mockPeerArgs(yield* mockPeerPath), {
61 cwd: path.join(import.meta.dirname, ".."),61 cwd: path.join(import.meta.dirname, ".."),
62 shell: process.platform === "win32",
63 ...(env ? { env: { ...process.env, ...env } } : {}),62 ...(env ? { env: { ...process.env, ...env } } : {}),
64 });63 });
65 return yield* spawner.spawn(command);64 return yield* spawner.spawn(command);
packages/effect-codex-app-server/src/client.test.ts+1-2
...@@ -22,9 +22,8 @@ it.layer(NodeServices.layer)("effect-codex-app-server client", (it) => {...@@ -22,9 +22,8 @@ it.layer(NodeServices.layer)("effect-codex-app-server client", (it) => {
22 const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;22 const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
23 const path = yield* Path.Path;23 const path = yield* Path.Path;
24 const peerCwd = path.join(import.meta.dirname, "..");24 const peerCwd = path.join(import.meta.dirname, "..");
25 const command = ChildProcess.make("node", mockPeerArgs(yield* mockPeerPath), {25 const command = ChildProcess.make(process.execPath, mockPeerArgs(yield* mockPeerPath), {
26 cwd: peerCwd,26 cwd: peerCwd,
27 shell: process.platform === "win32",
28 });27 });
29 return yield* spawner.spawn(command);28 return yield* spawner.spawn(command);
30 });29 });