From 19491b7b940912c2fb3fe24b2f189d3fd5668669 Mon Sep 17 00:00:00 2001 From: Jacob MacDonald Date: Thu, 7 Aug 2025 14:19:06 -0700 Subject: avoid loading and initializing CLI config twice in non-interactive mode (#5793) --- packages/cli/src/config/config.ts | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'packages/cli/src/config/config.ts') diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index 3104e4c1..d142bd12 100644 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -23,6 +23,9 @@ import { FileDiscoveryService, TelemetryTarget, FileFilteringOptions, + ShellTool, + EditTool, + WriteFileTool, } from '@google/gemini-cli-core'; import { Settings } from './settings.js'; @@ -365,7 +368,22 @@ export async function loadCliConfig( ); let mcpServers = mergeMcpServers(settings, activeExtensions); - const excludeTools = mergeExcludeTools(settings, activeExtensions); + const question = argv.promptInteractive || argv.prompt || ''; + const approvalMode = + argv.yolo || false ? ApprovalMode.YOLO : ApprovalMode.DEFAULT; + const interactive = + !!argv.promptInteractive || (process.stdin.isTTY && question.length === 0); + // In non-interactive and non-yolo mode, exclude interactive built in tools. + const extraExcludes = + !interactive && approvalMode !== ApprovalMode.YOLO + ? [ShellTool.Name, EditTool.Name, WriteFileTool.Name] + : undefined; + + const excludeTools = mergeExcludeTools( + settings, + activeExtensions, + extraExcludes, + ); const blockedMcpServers: Array<{ name: string; extensionName: string }> = []; if (!argv.allowedMcpServerNames) { @@ -427,7 +445,7 @@ export async function loadCliConfig( settings.loadMemoryFromIncludeDirectories || false, debugMode, - question: argv.promptInteractive || argv.prompt || '', + question, fullContext: argv.allFiles || argv.all_files || false, coreTools: settings.coreTools || undefined, excludeTools, @@ -437,7 +455,7 @@ export async function loadCliConfig( mcpServers, userMemory: memoryContent, geminiMdFileCount: fileCount, - approvalMode: argv.yolo || false ? ApprovalMode.YOLO : ApprovalMode.DEFAULT, + approvalMode, showMemoryUsage: argv.showMemoryUsage || argv.show_memory_usage || @@ -486,6 +504,7 @@ export async function loadCliConfig( ideModeFeature, chatCompression: settings.chatCompression, folderTrustFeature, + interactive, folderTrust, }); } @@ -514,8 +533,12 @@ function mergeMcpServers(settings: Settings, extensions: Extension[]) { function mergeExcludeTools( settings: Settings, extensions: Extension[], + extraExcludes?: string[] | undefined, ): string[] { - const allExcludeTools = new Set(settings.excludeTools || []); + const allExcludeTools = new Set([ + ...(settings.excludeTools || []), + ...(extraExcludes || []), + ]); for (const extension of extensions) { for (const tool of extension.config.excludeTools || []) { allExcludeTools.add(tool); -- cgit v1.2.3