From e3f00c103ea7777f2e228aad5eedcf198cb73e95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jim=20Liu=20=E5=AE=9D=E7=8E=89?= Date: Mon, 2 Mar 2026 12:07:12 -0600 Subject: [PATCH] feat(baoyu-danger-gemini-web): WSL auto-detection and debug port env var Add GEMINI_WEB_DEBUG_PORT env var for fixed port in WSL. Auto-detect WSL and resolve Chrome profile to Windows-native path. --- .../gemini-webapi/utils/load-browser-cookies.ts | 2 ++ .../scripts/gemini-webapi/utils/paths.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/skills/baoyu-danger-gemini-web/scripts/gemini-webapi/utils/load-browser-cookies.ts b/skills/baoyu-danger-gemini-web/scripts/gemini-webapi/utils/load-browser-cookies.ts index e587bd6..90a8220 100644 --- a/skills/baoyu-danger-gemini-web/scripts/gemini-webapi/utils/load-browser-cookies.ts +++ b/skills/baoyu-danger-gemini-web/scripts/gemini-webapi/utils/load-browser-cookies.ts @@ -91,6 +91,8 @@ class CdpConnection { } async function get_free_port(): Promise { + const fixed = parseInt(process.env.GEMINI_WEB_DEBUG_PORT || '', 10); + if (fixed > 0) return fixed; return await new Promise((resolve, reject) => { const srv = net.createServer(); srv.unref(); diff --git a/skills/baoyu-danger-gemini-web/scripts/gemini-webapi/utils/paths.ts b/skills/baoyu-danger-gemini-web/scripts/gemini-webapi/utils/paths.ts index 5eff4de..a98ba04 100644 --- a/skills/baoyu-danger-gemini-web/scripts/gemini-webapi/utils/paths.ts +++ b/skills/baoyu-danger-gemini-web/scripts/gemini-webapi/utils/paths.ts @@ -1,3 +1,4 @@ +import { execSync } from 'node:child_process'; import os from 'node:os'; import path from 'node:path'; import process from 'node:process'; @@ -29,9 +30,22 @@ export function resolveGeminiWebCookiePath(): string { return path.join(resolveGeminiWebDataDir(), COOKIE_FILE_NAME); } +let _wslHome: string | null | undefined; +function getWslWindowsHome(): string | null { + if (_wslHome !== undefined) return _wslHome; + if (!process.env.WSL_DISTRO_NAME) { _wslHome = null; return null; } + try { + const raw = execSync('cmd.exe /C "echo %USERPROFILE%"', { encoding: 'utf-8', timeout: 5000 }).trim().replace(/\r/g, ''); + _wslHome = execSync(`wslpath -u "${raw}"`, { encoding: 'utf-8', timeout: 5000 }).trim() || null; + } catch { _wslHome = null; } + return _wslHome; +} + export function resolveGeminiWebChromeProfileDir(): string { const override = process.env.GEMINI_WEB_CHROME_PROFILE_DIR?.trim(); if (override) return path.resolve(override); + const wslHome = getWslWindowsHome(); + if (wslHome) return path.join(wslHome, '.local', 'share', APP_DATA_DIR, GEMINI_DATA_DIR, PROFILE_DIR_NAME); return path.join(resolveGeminiWebDataDir(), PROFILE_DIR_NAME); }