diff --git a/packages/desktop-electron/src/main/cli.ts b/packages/desktop-electron/src/main/cli.ts index e338d39138e..fba301f36c2 100644 --- a/packages/desktop-electron/src/main/cli.ts +++ b/packages/desktop-electron/src/main/cli.ts @@ -107,7 +107,7 @@ export function syncCli() { let version = "" try { - version = execFileSync(installPath, ["--version"]).toString().trim() + version = execFileSync(installPath, ["--version"], { windowsHide: true }).toString().trim() } catch { return } @@ -147,7 +147,7 @@ export function spawnCommand(args: string, extraEnv: Record) { console.log(`[cli] Executing: ${cmd} ${cmdArgs.join(" ")}`) const child = spawn(cmd, cmdArgs, { env: envs, - detached: true, + detached: process.platform !== "win32", windowsHide: true, stdio: ["ignore", "pipe", "pipe"], }) diff --git a/packages/opencode/src/lsp/index.ts b/packages/opencode/src/lsp/index.ts index 9d7d30632ab..6ea7554c096 100644 --- a/packages/opencode/src/lsp/index.ts +++ b/packages/opencode/src/lsp/index.ts @@ -114,6 +114,7 @@ export namespace LSP { return { process: spawn(item.command[0], item.command.slice(1), { cwd: root, + windowsHide: true, env: { ...process.env, ...item.env, diff --git a/packages/opencode/src/lsp/server.ts b/packages/opencode/src/lsp/server.ts index 71f50c94b1b..c918008b44c 100644 --- a/packages/opencode/src/lsp/server.ts +++ b/packages/opencode/src/lsp/server.ts @@ -1,4 +1,4 @@ -import { spawn, type ChildProcessWithoutNullStreams } from "child_process" +import { spawn as launch, type ChildProcessWithoutNullStreams } from "child_process" import path from "path" import os from "os" import { Global } from "../global" @@ -14,6 +14,11 @@ import { Process } from "../util/process" import { which } from "../util/which" import { Module } from "@opencode-ai/util/module" +const spawn = ((cmd, args, opts) => { + if (Array.isArray(args)) return launch(cmd, [...args], { ...(opts ?? {}), windowsHide: true }); + return launch(cmd, { ...(args ?? {}), windowsHide: true }); +}) as typeof launch + export namespace LSPServer { const log = Log.create({ service: "lsp.server" }) const pathExists = async (p: string) => diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 7698b78baba..655afd2b14d 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1629,6 +1629,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the const proc = spawn(shell, args, { cwd, detached: process.platform !== "win32", + windowsHide: process.platform === "win32", stdio: ["ignore", "pipe", "pipe"], env: { ...process.env, diff --git a/packages/opencode/src/shell/shell.ts b/packages/opencode/src/shell/shell.ts index 60ae46f5ee7..a30889d699a 100644 --- a/packages/opencode/src/shell/shell.ts +++ b/packages/opencode/src/shell/shell.ts @@ -15,7 +15,10 @@ export namespace Shell { if (process.platform === "win32") { await new Promise((resolve) => { - const killer = spawn("taskkill", ["/pid", String(pid), "/f", "/t"], { stdio: "ignore" }) + const killer = spawn("taskkill", ["/pid", String(pid), "/f", "/t"], { + stdio: "ignore", + windowsHide: true, + }) killer.once("exit", () => resolve()) killer.once("error", () => resolve()) }) diff --git a/packages/opencode/src/tool/bash.ts b/packages/opencode/src/tool/bash.ts index 3be2734863a..109a665363b 100644 --- a/packages/opencode/src/tool/bash.ts +++ b/packages/opencode/src/tool/bash.ts @@ -173,6 +173,7 @@ export const BashTool = Tool.define("bash", async () => { }, stdio: ["ignore", "pipe", "pipe"], detached: process.platform !== "win32", + windowsHide: process.platform === "win32", }) let output = "" diff --git a/packages/opencode/src/util/process.ts b/packages/opencode/src/util/process.ts index 473ee27dc97..04909693709 100644 --- a/packages/opencode/src/util/process.ts +++ b/packages/opencode/src/util/process.ts @@ -60,6 +60,7 @@ export namespace Process { cwd: opts.cwd, env: opts.env === null ? {} : opts.env ? { ...process.env, ...opts.env } : undefined, stdio: [opts.stdin ?? "ignore", opts.stdout ?? "ignore", opts.stderr ?? "ignore"], + windowsHide: process.platform === "win32", }) let closed = false