Преглед изворни кода

fix(desktop): respect proxy environment (#25846)

Luke Parker пре 3 месеци
родитељ
комит
465c83cf82
2 измењених фајлова са 17 додато и 2 уклоњено
  1. 15 1
      packages/desktop/src/main/index.ts
  2. 2 1
      packages/desktop/src/main/server.ts

+ 15 - 1
packages/desktop/src/main/index.ts

@@ -1,6 +1,7 @@
 import { randomUUID } from "node:crypto"
 import { randomUUID } from "node:crypto"
 import { EventEmitter } from "node:events"
 import { EventEmitter } from "node:events"
 import { existsSync } from "node:fs"
 import { existsSync } from "node:fs"
+import * as http from "node:http"
 import { createServer } from "node:net"
 import { createServer } from "node:net"
 import { homedir } from "node:os"
 import { homedir } from "node:os"
 import { join } from "node:path"
 import { join } from "node:path"
@@ -77,6 +78,7 @@ setupApp()
 
 
 function setupApp() {
 function setupApp() {
   ensureLoopbackNoProxy()
   ensureLoopbackNoProxy()
+  useEnvProxy()
   app.commandLine.appendSwitch("proxy-bypass-list", "<-loopback>")
   app.commandLine.appendSwitch("proxy-bypass-list", "<-loopback>")
   if (!app.isPackaged) app.commandLine.appendSwitch("remote-debugging-port", "9222")
   if (!app.isPackaged) app.commandLine.appendSwitch("remote-debugging-port", "9222")
 
 
@@ -133,6 +135,15 @@ function useSystemCertificates() {
   }
   }
 }
 }
 
 
+function useEnvProxy() {
+  try {
+    // Electron 41.2 runs Node 24.14.1; latest @types/node@24 is 24.12.2.
+    ;(http as any).setGlobalProxyFromEnv()
+  } catch (error) {
+    logger.warn("failed to load proxy environment", error)
+  }
+}
+
 function emitDeepLinks(urls: string[]) {
 function emitDeepLinks(urls: string[]) {
   if (urls.length === 0) return
   if (urls.length === 0) return
   pendingDeepLinks.push(...urls)
   pendingDeepLinks.push(...urls)
@@ -189,7 +200,10 @@ async function initialize() {
     }
     }
 
 
     logger.log("spawning sidecar", { url })
     logger.log("spawning sidecar", { url })
-    const { listener, health } = await spawnLocalServer(hostname, port, password)
+    const { listener, health } = await spawnLocalServer(hostname, port, password, () => {
+      ensureLoopbackNoProxy()
+      useEnvProxy()
+    })
     server = listener
     server = listener
     serverReady.resolve({
     serverReady.resolve({
       url,
       url,

+ 2 - 1
packages/desktop/src/main/server.ts

@@ -30,8 +30,9 @@ export function setWslConfig(config: WslConfig) {
   getStore().set(WSL_ENABLED_KEY, config.enabled)
   getStore().set(WSL_ENABLED_KEY, config.enabled)
 }
 }
 
 
-export async function spawnLocalServer(hostname: string, port: number, password: string) {
+export async function spawnLocalServer(hostname: string, port: number, password: string, configureEnv?: () => void) {
   prepareServerEnv(password)
   prepareServerEnv(password)
+  configureEnv?.()
   const { Log, Server } = await import("virtual:opencode-server")
   const { Log, Server } = await import("virtual:opencode-server")
   await Log.init({ level: "WARN" })
   await Log.init({ level: "WARN" })
   const listener = await Server.listen({
   const listener = await Server.listen({