From c463d47fa802b043d51974422340a0af6b8a26f2 Mon Sep 17 00:00:00 2001 From: Jack Wotherspoon Date: Thu, 25 Sep 2025 12:30:25 -0400 Subject: [PATCH] chore: add indicator to extensions list for enable/disable (#9405) --- packages/cli/src/commands/extensions/list.ts | 16 ++++++++++++++-- packages/cli/src/config/extension.ts | 9 +++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/commands/extensions/list.ts b/packages/cli/src/commands/extensions/list.ts index 4611062505..57139cebeb 100644 --- a/packages/cli/src/commands/extensions/list.ts +++ b/packages/cli/src/commands/extensions/list.ts @@ -5,7 +5,12 @@ */ import type { CommandModule } from 'yargs'; -import { loadUserExtensions, toOutputString } from '../../config/extension.js'; +import { + loadUserExtensions, + toOutputString, + ExtensionStorage, +} from '../../config/extension.js'; +import { ExtensionEnablementManager } from '../../config/extensions/extensionEnablement.js'; import { getErrorMessage } from '../../utils/errors.js'; export async function handleList() { @@ -15,9 +20,16 @@ export async function handleList() { console.log('No extensions installed.'); return; } + const manager = new ExtensionEnablementManager( + ExtensionStorage.getUserExtensionsDir(), + ); + const cwd = process.cwd(); console.log( extensions - .map((extension, _): string => toOutputString(extension)) + .map((extension): string => { + const isEnabled = manager.isEnabled(extension.config.name, cwd); + return toOutputString(extension, isEnabled); + }) .join('\n\n'), ); } catch (error) { diff --git a/packages/cli/src/config/extension.ts b/packages/cli/src/config/extension.ts index 9c44ad4043..f9bbc5cd7b 100644 --- a/packages/cli/src/config/extension.ts +++ b/packages/cli/src/config/extension.ts @@ -37,6 +37,7 @@ import { } from './extensions/github.js'; import type { LoadExtensionContext } from './extensions/variableSchema.js'; import { ExtensionEnablementManager } from './extensions/extensionEnablement.js'; +import chalk from 'chalk'; export const EXTENSIONS_DIRECTORY_NAME = path.join(GEMINI_DIR, 'extensions'); @@ -612,8 +613,12 @@ export async function uninstallExtension( ); } -export function toOutputString(extension: Extension): string { - let output = `${extension.config.name} (${extension.config.version})`; +export function toOutputString( + extension: Extension, + isEnabled: boolean, +): string { + const status = isEnabled ? chalk.green('✓') : chalk.red('✗'); + let output = `${status} ${extension.config.name} (${extension.config.version})`; output += `\n Path: ${extension.path}`; if (extension.installMetadata) { output += `\n Source: ${extension.installMetadata.source} (Type: ${extension.installMetadata.type})`;