chore: add indicator to extensions list for enable/disable (#9405)

This commit is contained in:
Jack Wotherspoon
2025-09-25 12:30:25 -04:00
committed by GitHub
parent f80eb71068
commit c463d47fa8
2 changed files with 21 additions and 4 deletions

View File

@@ -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) {

View File

@@ -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})`;