From 0d32090cd5af8d1e6ebef55b773b7260551b73c5 Mon Sep 17 00:00:00 2001 From: Woohyun Rho Date: Tue, 13 Jan 2026 17:12:44 +0900 Subject: [PATCH] fix(sdk): add shell option for Windows spawn compatibility On Windows, npm-installed packages create .cmd wrapper scripts. Node.js spawn() without shell: true cannot find these in PATH, causing ENOENT errors when spawning 'opencode'. This adds shell: true conditionally on Windows while maintaining Unix compatibility. Fixes #8160 --- packages/sdk/js/src/server.ts | 2 ++ packages/sdk/js/src/v2/server.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/sdk/js/src/server.ts b/packages/sdk/js/src/server.ts index 174131ccfd5..d168993fda2 100644 --- a/packages/sdk/js/src/server.ts +++ b/packages/sdk/js/src/server.ts @@ -33,6 +33,7 @@ export async function createOpencodeServer(options?: ServerOptions) { const proc = spawn(`opencode`, args, { signal: options.signal, + shell: process.platform === "win32", env: { ...process.env, OPENCODE_CONFIG_CONTENT: JSON.stringify(options.config ?? {}), @@ -109,6 +110,7 @@ export function createOpencodeTui(options?: TuiOptions) { const proc = spawn(`opencode`, args, { signal: options?.signal, stdio: "inherit", + shell: process.platform === "win32", env: { ...process.env, OPENCODE_CONFIG_CONTENT: JSON.stringify(options?.config ?? {}), diff --git a/packages/sdk/js/src/v2/server.ts b/packages/sdk/js/src/v2/server.ts index 174131ccfd5..d168993fda2 100644 --- a/packages/sdk/js/src/v2/server.ts +++ b/packages/sdk/js/src/v2/server.ts @@ -33,6 +33,7 @@ export async function createOpencodeServer(options?: ServerOptions) { const proc = spawn(`opencode`, args, { signal: options.signal, + shell: process.platform === "win32", env: { ...process.env, OPENCODE_CONFIG_CONTENT: JSON.stringify(options.config ?? {}), @@ -109,6 +110,7 @@ export function createOpencodeTui(options?: TuiOptions) { const proc = spawn(`opencode`, args, { signal: options?.signal, stdio: "inherit", + shell: process.platform === "win32", env: { ...process.env, OPENCODE_CONFIG_CONTENT: JSON.stringify(options?.config ?? {}),