From a2fe3d2ad055fadc6e3dcc032286a3e3ba2a0a8c Mon Sep 17 00:00:00 2001 From: Tommaso Sciortino Date: Fri, 13 Jun 2025 14:51:29 -0700 Subject: [PATCH] Stop extension MCPs from hopping into settings. (#1026) --- packages/cli/src/config/config.test.ts | 29 +++++++++++++++++++++++ packages/cli/src/config/config.ts | 2 +- packages/cli/src/config/extension.test.ts | 4 ++-- packages/cli/src/config/extension.ts | 2 +- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts index 60c693bb..313deedf 100644 --- a/packages/cli/src/config/config.test.ts +++ b/packages/cli/src/config/config.test.ts @@ -269,3 +269,32 @@ describe('Hierarchical Memory Loading (config.ts) - Placeholder Suite', () => { }); */ }); + +describe('mergeMcpServers', () => { + it('should not modify the original settings object', async () => { + const settings: Settings = { + mcpServers: { + 'test-server': { + url: 'http://localhost:8080', + }, + }, + }; + const extensions: Extension[] = [ + { + config: { + name: 'ext1', + version: '1.0.0', + mcpServers: { + 'ext1-server': { + url: 'http://localhost:8081', + }, + }, + }, + contextFiles: [], + }, + ]; + const originalSettings = JSON.parse(JSON.stringify(settings)); + await loadCliConfig(settings, extensions, [], 'test-session'); + expect(settings).toEqual(originalSettings); + }); +}); diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index b9a995ed..9534f403 100644 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -205,7 +205,7 @@ export async function loadCliConfig( } function mergeMcpServers(settings: Settings, extensions: Extension[]) { - const mcpServers = settings.mcpServers || {}; + const mcpServers = { ...(settings.mcpServers || {}) }; for (const extension of extensions) { Object.entries(extension.config.mcpServers || {}).forEach( ([key, server]) => { diff --git a/packages/cli/src/config/extension.test.ts b/packages/cli/src/config/extension.test.ts index 754e9dd0..7d299c78 100644 --- a/packages/cli/src/config/extension.test.ts +++ b/packages/cli/src/config/extension.test.ts @@ -72,7 +72,7 @@ describe('loadExtensions', () => { 'ext1', '1.0.0', false, - 'my-context.md', + 'my-context-file.md', ); const extensions = loadExtensions(tempWorkspaceDir); @@ -80,7 +80,7 @@ describe('loadExtensions', () => { expect(extensions).toHaveLength(1); const ext1 = extensions.find((e) => e.config.name === 'ext1'); expect(ext1?.contextFiles).toEqual([ - path.join(workspaceExtensionsDir, 'ext1', 'my-context.md'), + path.join(workspaceExtensionsDir, 'ext1', 'my-context-file.md'), ]); }); }); diff --git a/packages/cli/src/config/extension.ts b/packages/cli/src/config/extension.ts index 84863e32..418e5fb9 100644 --- a/packages/cli/src/config/extension.ts +++ b/packages/cli/src/config/extension.ts @@ -107,7 +107,7 @@ function loadExtension(extensionDir: string): Extension | null { function getContextFileNames(config: ExtensionConfig): string[] { if (!config.contextFileName) { - return ['GEMINI.md', 'gemini.md', 'Gemini.md']; + return ['GEMINI.md']; } else if (!Array.isArray(config.contextFileName)) { return [config.contextFileName]; }