From 80302c4e12f1d70bd31275d73626866a134e357a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Muhammed=20Akg=C3=BCl?= Date: Wed, 28 Jan 2026 09:33:30 +0300 Subject: [PATCH] fix(extensions): support Windows npm global paths for Gemini CLI --- extensions/google-gemini-cli-auth/oauth.ts | 24 +++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/extensions/google-gemini-cli-auth/oauth.ts b/extensions/google-gemini-cli-auth/oauth.ts index 0f58bf801..6488ce121 100644 --- a/extensions/google-gemini-cli-auth/oauth.ts +++ b/extensions/google-gemini-cli-auth/oauth.ts @@ -64,13 +64,27 @@ export function extractGeminiCliCredentials(): { clientId: string; clientSecret: if (!geminiPath) return null; const resolvedPath = realpathSync(geminiPath); - const geminiCliDir = dirname(dirname(resolvedPath)); - - const searchPaths = [ - join(geminiCliDir, "node_modules", "@google", "gemini-cli-core", "dist", "src", "code_assist", "oauth2.js"), - join(geminiCliDir, "node_modules", "@google", "gemini-cli-core", "dist", "code_assist", "oauth2.js"), + + // Support both Unix symlinks and Windows npm shims + const bases = [ + dirname(dirname(resolvedPath)), // Unix: .../pkg/bin/run -> .../pkg + dirname(resolvedPath), // Windows: .../npm/gemini.cmd -> .../npm ]; + const searchPaths: string[] = []; + for (const base of bases) { + // 1. Check for flat installation of gemini-cli-core + searchPaths.push( + join(base, "node_modules", "@google", "gemini-cli-core", "dist", "src", "code_assist", "oauth2.js"), + join(base, "node_modules", "@google", "gemini-cli-core", "dist", "code_assist", "oauth2.js") + ); + // 2. Check for nested installation inside gemini-cli + searchPaths.push( + join(base, "node_modules", "@google", "gemini-cli", "node_modules", "@google", "gemini-cli-core", "dist", "src", "code_assist", "oauth2.js"), + join(base, "node_modules", "@google", "gemini-cli", "node_modules", "@google", "gemini-cli-core", "dist", "code_assist", "oauth2.js") + ); + } + let content: string | null = null; for (const p of searchPaths) { if (existsSync(p)) {