diff --git a/packages/core/src/ide/ide-client.test.ts b/packages/core/src/ide/ide-client.test.ts index 1881d91122b..7ec7e53124a 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 f9b105372b2..997a2d47294 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'];