From 3682842a5de0c9f6b2c8323dcb58351bff3c94fe Mon Sep 17 00:00:00 2001 From: Sandy Tao Date: Fri, 13 Mar 2026 21:34:53 -0700 Subject: [PATCH] fix(core): deduplicate project memory when JIT context is enabled (#22234) --- .../core/src/utils/environmentContext.test.ts | 23 +++++++++++++++++++ packages/core/src/utils/environmentContext.ts | 7 +++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/core/src/utils/environmentContext.test.ts b/packages/core/src/utils/environmentContext.test.ts index a43bb5fd56..42b2316955 100644 --- a/packages/core/src/utils/environmentContext.test.ts +++ b/packages/core/src/utils/environmentContext.test.ts @@ -165,6 +165,29 @@ describe('getEnvironmentContext', () => { expect(getFolderStructure).not.toHaveBeenCalled(); }); + it('should exclude environment memory when JIT context is enabled', async () => { + (mockConfig as Record)['isJitContextEnabled'] = vi + .fn() + .mockReturnValue(true); + + const parts = await getEnvironmentContext(mockConfig as Config); + + const context = parts[0].text; + expect(context).not.toContain('Mock Environment Memory'); + expect(mockConfig.getEnvironmentMemory).not.toHaveBeenCalled(); + }); + + it('should include environment memory when JIT context is disabled', async () => { + (mockConfig as Record)['isJitContextEnabled'] = vi + .fn() + .mockReturnValue(false); + + const parts = await getEnvironmentContext(mockConfig as Config); + + const context = parts[0].text; + expect(context).toContain('Mock Environment Memory'); + }); + it('should handle read_many_files returning no content', async () => { const mockReadManyFilesTool = { build: vi.fn().mockReturnValue({ diff --git a/packages/core/src/utils/environmentContext.ts b/packages/core/src/utils/environmentContext.ts index 88dd1aab68..d5bdd2d75b 100644 --- a/packages/core/src/utils/environmentContext.ts +++ b/packages/core/src/utils/environmentContext.ts @@ -57,7 +57,12 @@ export async function getEnvironmentContext(config: Config): Promise { ? await getDirectoryContextString(config) : ''; const tempDir = config.storage.getProjectTempDir(); - const environmentMemory = config.getEnvironmentMemory(); + // When JIT context is enabled, project memory is already included in the + // system instruction via renderUserMemory(). Skip it here to avoid sending + // the same GEMINI.md content twice. + const environmentMemory = config.isJitContextEnabled?.() + ? '' + : config.getEnvironmentMemory(); const context = `