From 197f3ec820d7b714323989b5efe26b1474d0a032 Mon Sep 17 00:00:00 2001 From: christine betts Date: Thu, 6 Nov 2025 12:55:20 -0800 Subject: [PATCH] Update keychain storage name to be more user-friendly (#12644) --- docs/extensions/index.md | 3 +++ .../cli/src/config/extensions/extensionSettings.ts | 13 +++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/extensions/index.md b/docs/extensions/index.md index 2c8bc9b22e..af886026d7 100644 --- a/docs/extensions/index.md +++ b/docs/extensions/index.md @@ -187,6 +187,9 @@ precedence. ### Settings +_Note: This is an experimental feature. We do not yet recommend extension +authors introduce settings as part of their core flows._ + Extensions can define settings that the user will be prompted to provide upon installation. This is useful for things like API keys, URLs, or other configuration that the extension needs to function. diff --git a/packages/cli/src/config/extensions/extensionSettings.ts b/packages/cli/src/config/extensions/extensionSettings.ts index f625ef5ea8..89209e58ec 100644 --- a/packages/cli/src/config/extensions/extensionSettings.ts +++ b/packages/cli/src/config/extensions/extensionSettings.ts @@ -22,6 +22,11 @@ export interface ExtensionSetting { sensitive?: boolean; } +const getKeychainStorageName = ( + extensionName: string, + extensionId: string, +): string => `Gemini CLI Extensions ${extensionName} ${extensionId}`; + export async function maybePromptForSettings( extensionConfig: ExtensionConfig, extensionId: string, @@ -38,7 +43,9 @@ export async function maybePromptForSettings( return; } const envFilePath = new ExtensionStorage(extensionName).getEnvFilePath(); - const keychain = new KeychainTokenStorage(extensionId); + const keychain = new KeychainTokenStorage( + getKeychainStorageName(extensionName, extensionId), + ); if (!settings || settings.length === 0) { await clearSettings(envFilePath, keychain); @@ -107,7 +114,9 @@ export async function getEnvContents( return Promise.resolve({}); } const extensionStorage = new ExtensionStorage(extensionConfig.name); - const keychain = new KeychainTokenStorage(extensionId); + const keychain = new KeychainTokenStorage( + getKeychainStorageName(extensionConfig.name, extensionId), + ); let customEnv: Record = {}; if (fsSync.existsSync(extensionStorage.getEnvFilePath())) { const envFile = fsSync.readFileSync(