فهرست منبع

fix(electron): hide Windows background consoles (#16842)

Co-authored-by: Brendan Allan <[email protected]>
Luke Parker 1 ماه پیش
والد
کامیت
4ab35d2c5c

+ 2 - 2
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<string, string>) {
   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"],
   })

+ 1 - 0
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,

+ 6 - 1
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) =>

+ 1 - 0
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,

+ 4 - 1
packages/opencode/src/shell/shell.ts

@@ -15,7 +15,10 @@ export namespace Shell {
 
     if (process.platform === "win32") {
       await new Promise<void>((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())
       })

+ 1 - 0
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 = ""

+ 1 - 0
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