From cbda781f73b913a82f05beaba9a6c7ed8b393733 Mon Sep 17 00:00:00 2001 From: christine betts Date: Thu, 17 Jul 2025 14:35:23 +0000 Subject: [PATCH] [ide-mode] Add active file to user model request (#4312) --- packages/core/src/core/client.test.ts | 1 + packages/core/src/core/client.ts | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/packages/core/src/core/client.test.ts b/packages/core/src/core/client.test.ts index 03793bda..93ea8912 100644 --- a/packages/core/src/core/client.test.ts +++ b/packages/core/src/core/client.test.ts @@ -198,6 +198,7 @@ describe('Gemini Client (client.ts)', () => { getQuotaErrorOccurred: vi.fn().mockReturnValue(false), setQuotaErrorOccurred: vi.fn(), getNoBrowser: vi.fn().mockReturnValue(false), + getIdeMode: vi.fn().mockReturnValue(false), }; return mock as unknown as Config; }); diff --git a/packages/core/src/core/client.ts b/packages/core/src/core/client.ts index 80979812..1cffd6a3 100644 --- a/packages/core/src/core/client.ts +++ b/packages/core/src/core/client.ts @@ -41,6 +41,7 @@ import { import { ProxyAgent, setGlobalDispatcher } from 'undici'; import { DEFAULT_GEMINI_FLASH_MODEL } from '../config/models.js'; import { LoopDetectionService } from '../services/loopDetectionService.js'; +import { ideContext } from '../services/ideContext.js'; function isThinkingSupported(model: string) { if (model.startsWith('gemini-2.5')) return true; @@ -303,6 +304,25 @@ export class GeminiClient { if (compressed) { yield { type: GeminiEventType.ChatCompressed, value: compressed }; } + + if (this.config.getIdeMode()) { + const activeFile = ideContext.getActiveFileContext(); + if (activeFile?.filePath) { + let context = ` +This is the file that the user was most recently looking at: +- Path: ${activeFile.filePath}`; + if (activeFile.cursor) { + context += ` +This is the cursor position in the file: +- Cursor Position: Line ${activeFile.cursor.line}, Character ${activeFile.cursor.character}`; + } + request = [ + { text: context }, + ...(Array.isArray(request) ? request : [request]), + ]; + } + } + const turn = new Turn(this.getChat(), prompt_id); const resultStream = turn.run(request, signal); for await (const event of resultStream) {