summaryrefslogtreecommitdiff
path: root/packages/cli/src/config/config.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/config/config.ts')
-rw-r--r--packages/cli/src/config/config.ts34
1 files changed, 30 insertions, 4 deletions
diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts
index b79d20fc..7d1af7e1 100644
--- a/packages/cli/src/config/config.ts
+++ b/packages/cli/src/config/config.ts
@@ -20,7 +20,7 @@ import {
} from '@google/gemini-cli-core';
import { Settings } from './settings.js';
-import { Extension } from './extension.js';
+import { Extension, filterActiveExtensions } from './extension.js';
import { getCliVersion } from '../utils/version.js';
import { loadSandboxConfig } from './sandboxConfig.js';
@@ -49,6 +49,8 @@ interface CliArgs {
telemetryOtlpEndpoint: string | undefined;
telemetryLogPrompts: boolean | undefined;
'allowed-mcp-server-names': string | undefined;
+ extensions: string[] | undefined;
+ listExtensions: boolean | undefined;
}
async function parseArguments(): Promise<CliArgs> {
@@ -133,6 +135,18 @@ async function parseArguments(): Promise<CliArgs> {
type: 'string',
description: 'Allowed MCP server names',
})
+ .option('extensions', {
+ alias: 'e',
+ type: 'array',
+ string: true,
+ description:
+ 'A list of extensions to use. If not provided, all extensions are used.',
+ })
+ .option('list-extensions', {
+ alias: 'l',
+ type: 'boolean',
+ description: 'List all available extensions and exit.',
+ })
.version(await getCliVersion()) // This will enable the --version flag based on package.json
.alias('v', 'version')
.help()
@@ -174,6 +188,11 @@ export async function loadCliConfig(
const argv = await parseArguments();
const debugMode = argv.debug || false;
+ const activeExtensions = filterActiveExtensions(
+ extensions,
+ argv.extensions || [],
+ );
+
// Set the context filename in the server's memoryTool module BEFORE loading memory
// TODO(b/343434939): This is a bit of a hack. The contextFileName should ideally be passed
// directly to the Config constructor in core, and have core handle setGeminiMdFilename.
@@ -185,7 +204,9 @@ export async function loadCliConfig(
setServerGeminiMdFilename(getCurrentGeminiMdFilename());
}
- const extensionContextFilePaths = extensions.flatMap((e) => e.contextFiles);
+ const extensionContextFilePaths = activeExtensions.flatMap(
+ (e) => e.contextFiles,
+ );
const fileService = new FileDiscoveryService(process.cwd());
// Call the (now wrapper) loadHierarchicalGeminiMemory which calls the server's version
@@ -196,8 +217,8 @@ export async function loadCliConfig(
extensionContextFilePaths,
);
- let mcpServers = mergeMcpServers(settings, extensions);
- const excludeTools = mergeExcludeTools(settings, extensions);
+ let mcpServers = mergeMcpServers(settings, activeExtensions);
+ const excludeTools = mergeExcludeTools(settings, activeExtensions);
if (argv['allowed-mcp-server-names']) {
const allowedNames = new Set(
@@ -262,6 +283,11 @@ export async function loadCliConfig(
bugCommand: settings.bugCommand,
model: argv.model!,
extensionContextFilePaths,
+ listExtensions: argv.listExtensions || false,
+ activeExtensions: activeExtensions.map((e) => ({
+ name: e.config.name,
+ version: e.config.version,
+ })),
});
}