From c13ec85d7d8e6354b9378d8ffa39f757bcc093e3 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(