summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorspoj <[email protected]>2025-12-10 14:01:56 +0800
committerGitHub <[email protected]>2025-12-10 00:01:56 -0600
commit301f1a191b5526658d3cca28b44b948e1ea0cf66 (patch)
tree6b3d75f75e89e781e2a16d21b9891ea9fe8feb8c
parentd149c25aaba0dd171bb7e8bc713d1257c0a4e107 (diff)
downloadopencode-301f1a191b5526658d3cca28b44b948e1ea0cf66.tar.gz
opencode-301f1a191b5526658d3cca28b44b948e1ea0cf66.zip
fix: add Windows support for shell mode (! command) (#5311)
-rw-r--r--packages/opencode/src/session/prompt.ts18
1 files changed, 15 insertions, 3 deletions
diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
index 10520338c..bb6bce7a6 100644
--- a/packages/opencode/src/session/prompt.ts
+++ b/packages/opencode/src/session/prompt.ts
@@ -1231,8 +1231,12 @@ export namespace SessionPrompt {
},
}
await Session.updatePart(part)
- const shell = process.env["SHELL"] ?? "bash"
- const shellName = path.basename(shell)
+ const shell =
+ process.env["SHELL"] ??
+ (process.platform === "win32"
+ ? process.env["COMSPEC"] || "cmd.exe"
+ : "bash")
+ const shellName = path.basename(shell).toLowerCase()
const invocations: Record<string, { args: string[] }> = {
nu: {
@@ -1262,6 +1266,14 @@ export namespace SessionPrompt {
`,
],
},
+ // Windows cmd.exe
+ "cmd.exe": {
+ args: ["/c", input.command],
+ },
+ // Windows PowerShell
+ "powershell.exe": {
+ args: ["-NoProfile", "-Command", input.command],
+ },
// Fallback: any shell that doesn't match those above
"": {
args: ["-c", "-l", `${input.command}`],
@@ -1273,7 +1285,7 @@ export namespace SessionPrompt {
const proc = spawn(shell, args, {
cwd: Instance.directory,
- detached: true,
+ detached: process.platform !== "win32",
stdio: ["ignore", "pipe", "pipe"],
env: {
...process.env,