summaryrefslogtreecommitdiff
path: root/packages/cli/src/config/config.ts
diff options
context:
space:
mode:
authorJacob MacDonald <[email protected]>2025-08-07 14:19:06 -0700
committerGitHub <[email protected]>2025-08-07 21:19:06 +0000
commit19491b7b940912c2fb3fe24b2f189d3fd5668669 (patch)
tree6112b96d342a87bea824caa405e5786715a0ab2f /packages/cli/src/config/config.ts
parent53f8617b249c9f0443f5082a293a30504a118030 (diff)
avoid loading and initializing CLI config twice in non-interactive mode (#5793)
Diffstat (limited to 'packages/cli/src/config/config.ts')
-rw-r--r--packages/cli/src/config/config.ts31
1 files changed, 27 insertions, 4 deletions
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);