From 3f5f030d01887db0bc8b3b7567751861ef0be6b4 Mon Sep 17 00:00:00 2001 From: Shreya Keshive Date: Tue, 9 Dec 2025 14:41:32 -0500 Subject: [PATCH] feat(ide): fallback to GEMINI_CLI_IDE_AUTH_TOKEN env var (#14843) --- packages/core/src/ide/ide-client.test.ts | 31 ++++++++++++++++++++++++ packages/core/src/ide/ide-client.ts | 7 +++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/packages/core/src/ide/ide-client.test.ts b/packages/core/src/ide/ide-client.test.ts index 1881d91122..7ec7e53124 100644 --- a/packages/core/src/ide/ide-client.test.ts +++ b/packages/core/src/ide/ide-client.test.ts @@ -59,6 +59,7 @@ describe('IdeClient', () => { delete process.env['GEMINI_CLI_IDE_SERVER_PORT']; delete process.env['GEMINI_CLI_IDE_SERVER_STDIO_COMMAND']; delete process.env['GEMINI_CLI_IDE_SERVER_STDIO_ARGS']; + delete process.env['GEMINI_CLI_IDE_AUTH_TOKEN']; // Mock dependencies vi.spyOn(process, 'cwd').mockReturnValue('/test/workspace/sub-dir'); @@ -923,5 +924,35 @@ describe('IdeClient', () => { IDEConnectionStatus.Connected, ); }); + + it('should connect with an auth token from environment variable if config file is missing', async () => { + vi.mocked(fs.promises.readFile).mockRejectedValue( + new Error('File not found'), + ); + ( + vi.mocked(fs.promises.readdir) as Mock< + (path: fs.PathLike) => Promise + > + ).mockResolvedValue([]); + process.env['GEMINI_CLI_IDE_SERVER_PORT'] = '9090'; + process.env['GEMINI_CLI_IDE_AUTH_TOKEN'] = 'env-auth-token'; + + const ideClient = await IdeClient.getInstance(); + await ideClient.connect(); + + expect(StreamableHTTPClientTransport).toHaveBeenCalledWith( + new URL('http://127.0.0.1:9090/mcp'), + expect.objectContaining({ + requestInit: { + headers: { + Authorization: 'Bearer env-auth-token', + }, + }, + }), + ); + expect(ideClient.getConnectionStatus().status).toBe( + IDEConnectionStatus.Connected, + ); + }); }); }); diff --git a/packages/core/src/ide/ide-client.ts b/packages/core/src/ide/ide-client.ts index cfe7fcd61b..7523a09a93 100644 --- a/packages/core/src/ide/ide-client.ts +++ b/packages/core/src/ide/ide-client.ts @@ -151,9 +151,10 @@ export class IdeClient { this.setState(IDEConnectionStatus.Connecting); this.connectionConfig = await this.getConnectionConfigFromFile(); - if (this.connectionConfig?.authToken) { - this.authToken = this.connectionConfig.authToken; - } + this.authToken = + this.connectionConfig?.authToken ?? + process.env['GEMINI_CLI_IDE_AUTH_TOKEN']; + const workspacePath = this.connectionConfig?.workspacePath ?? process.env['GEMINI_CLI_IDE_WORKSPACE_PATH'];