Add extension settings info to /extensions list (#14905)

This commit is contained in:
christine betts
2025-12-30 16:09:48 -05:00
committed by GitHub
parent ec79fe1ab2
commit ec11b8afbf
4 changed files with 86 additions and 3 deletions

View File

@@ -44,6 +44,7 @@ import {
type GeminiCLIExtension,
type HookDefinition,
type HookEventName,
type ResolvedExtensionSetting,
} from '@google/gemini-cli-core';
import { maybeRequestConsentOrFail } from './extensions/consent.js';
import { resolveEnvVarsInObject } from '../utils/envVarResolver.js';
@@ -509,6 +510,24 @@ Would you like to attempt to install via "git clone" instead?`,
);
config = resolveEnvVarsInObject(config, customEnv);
const resolvedSettings: ResolvedExtensionSetting[] = [];
if (config.settings) {
for (const setting of config.settings) {
const value = customEnv[setting.envVar];
resolvedSettings.push({
name: setting.name,
envVar: setting.envVar,
value:
value === undefined
? '[not set]'
: setting.sensitive
? '***'
: value,
sensitive: setting.sensitive ?? false,
});
}
}
if (config.mcpServers) {
config.mcpServers = Object.fromEntries(
Object.entries(config.mcpServers).map(([key, value]) => [
@@ -532,7 +551,7 @@ Would you like to attempt to install via "git clone" instead?`,
});
}
const extension = {
const extension: GeminiCLIExtension = {
name: config.name,
version: config.version,
path: effectiveExtensionPath,
@@ -546,6 +565,8 @@ Would you like to attempt to install via "git clone" instead?`,
this.workspaceDir,
),
id: getExtensionId(config, installMetadata),
settings: config.settings,
resolvedSettings,
};
this.loadedExtensions = [...this.loadedExtensions, extension];
@@ -700,6 +721,13 @@ Would you like to attempt to install via "git clone" instead?`,
output += `\n ${tool}`;
});
}
const resolvedSettings = extension.resolvedSettings;
if (resolvedSettings && resolvedSettings.length > 0) {
output += `\n Settings:`;
resolvedSettings.forEach((setting) => {
output += `\n ${setting.name}: ${setting.value}`;
});
}
return output;
}