From 626844b539af6bf6d21a04d43173074c98b71474 Mon Sep 17 00:00:00 2001 From: shrutip90 Date: Wed, 6 Aug 2025 15:27:21 -0700 Subject: [PATCH] experiment: Add feature exp flag for folder trust (#5709) --- packages/cli/src/config/config.test.ts | 33 ++++++++++++++++++++++++++ packages/cli/src/config/config.ts | 3 +++ packages/cli/src/config/settings.ts | 1 + packages/core/src/config/config.ts | 7 ++++++ 4 files changed, 44 insertions(+) diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts index 64ecdbb8..6a7e3b57 100644 --- a/packages/cli/src/config/config.test.ts +++ b/packages/cli/src/config/config.test.ts @@ -1009,6 +1009,39 @@ describe('loadCliConfig ideModeFeature', () => { }); }); +describe('loadCliConfig folderTrustFeature', () => { + const originalArgv = process.argv; + const originalEnv = { ...process.env }; + + beforeEach(() => { + vi.resetAllMocks(); + vi.mocked(os.homedir).mockReturnValue('/mock/home/user'); + process.env.GEMINI_API_KEY = 'test-api-key'; + }); + + afterEach(() => { + process.argv = originalArgv; + process.env = originalEnv; + vi.restoreAllMocks(); + }); + + it('should be false by default', async () => { + process.argv = ['node', 'script.js']; + const settings: Settings = {}; + const argv = await parseArguments(); + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getFolderTrustFeature()).toBe(false); + }); + + it('should be true when settings.folderTrustFeature is true', async () => { + process.argv = ['node', 'script.js']; + const argv = await parseArguments(); + const settings: Settings = { folderTrustFeature: true }; + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getFolderTrustFeature()).toBe(true); + }); +}); + vi.mock('fs', async () => { const actualFs = await vi.importActual('fs'); const MOCK_CWD1 = process.cwd(); diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index 7175c033..2c942c08 100644 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -313,6 +313,8 @@ export async function loadCliConfig( const ideModeFeature = argv.ideModeFeature ?? settings.ideModeFeature ?? false; + const folderTrustFeature = settings.folderTrustFeature ?? false; + const allExtensions = annotateActiveExtensions( extensions, argv.extensions || [], @@ -480,6 +482,7 @@ export async function loadCliConfig( summarizeToolOutput: settings.summarizeToolOutput, ideMode, ideModeFeature, + folderTrustFeature, }); } diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts index 93641ae0..64500845 100644 --- a/packages/cli/src/config/settings.ts +++ b/packages/cli/src/config/settings.ts @@ -112,6 +112,7 @@ export interface Settings { // Flag to be removed post-launch. ideModeFeature?: boolean; + folderTrustFeature?: boolean; /// IDE mode setting configured via slash command toggle. ideMode?: boolean; diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index fa51a6af..005573da 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -188,6 +188,7 @@ export interface ConfigParameters { noBrowser?: boolean; summarizeToolOutput?: Record; ideModeFeature?: boolean; + folderTrustFeature?: boolean; ideMode?: boolean; loadMemoryFromIncludeDirectories?: boolean; } @@ -233,6 +234,7 @@ export class Config { private readonly extensionContextFilePaths: string[]; private readonly noBrowser: boolean; private readonly ideModeFeature: boolean; + private readonly folderTrustFeature: boolean; private ideMode: boolean; private ideClient: IdeClient; private inFallbackMode = false; @@ -305,6 +307,7 @@ export class Config { this.noBrowser = params.noBrowser ?? false; this.summarizeToolOutput = params.summarizeToolOutput; this.ideModeFeature = params.ideModeFeature ?? false; + this.folderTrustFeature = params.folderTrustFeature ?? false; this.ideMode = params.ideMode ?? false; this.ideClient = IdeClient.getInstance(); if (this.ideMode && this.ideModeFeature) { @@ -638,6 +641,10 @@ export class Config { return this.ideModeFeature; } + getFolderTrustFeature(): boolean { + return this.folderTrustFeature; + } + getIdeMode(): boolean { return this.ideMode; }