Files
gemini-cli/packages/cli/src/commands/extensions/enable.ts

82 lines
2.2 KiB
TypeScript
Raw Normal View History

/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { type CommandModule } from 'yargs';
import { FatalConfigError, getErrorMessage } from '@google/gemini-cli-core';
import { enableExtension } from '../../config/extension.js';
import { SettingScope } from '../../config/settings.js';
import { ExtensionEnablementManager } from '../../config/extensions/extensionEnablement.js';
interface EnableArgs {
name: string;
2025-09-19 11:43:39 -04:00
scope?: string;
}
export function handleEnable(args: EnableArgs) {
const extensionEnablementManager = new ExtensionEnablementManager();
try {
2025-09-19 11:43:39 -04:00
if (args.scope?.toLowerCase() === 'workspace') {
enableExtension(
args.name,
SettingScope.Workspace,
extensionEnablementManager,
);
2025-09-19 11:43:39 -04:00
} else {
enableExtension(args.name, SettingScope.User, extensionEnablementManager);
2025-09-19 11:43:39 -04:00
}
if (args.scope) {
console.log(
`Extension "${args.name}" successfully enabled for scope "${args.scope}".`,
);
} else {
console.log(
`Extension "${args.name}" successfully enabled in all scopes.`,
);
}
} catch (error) {
throw new FatalConfigError(getErrorMessage(error));
}
}
export const enableCommand: CommandModule = {
2025-08-29 16:48:57 +00:00
command: 'enable [--scope] <name>',
describe: 'Enables an extension.',
builder: (yargs) =>
yargs
.positional('name', {
describe: 'The name of the extension to enable.',
type: 'string',
})
.option('scope', {
describe:
'The scope to enable the extension in. If not set, will be enabled in all scopes.',
type: 'string',
})
2025-09-19 11:43:39 -04:00
.check((argv) => {
if (
argv.scope &&
!Object.values(SettingScope)
.map((s) => s.toLowerCase())
.includes((argv.scope as string).toLowerCase())
) {
throw new Error(
`Invalid scope: ${argv.scope}. Please use one of ${Object.values(
SettingScope,
)
.map((s) => s.toLowerCase())
.join(', ')}.`,
);
}
return true;
}),
handler: (argv) => {
handleEnable({
name: argv['name'] as string,
2025-09-19 11:43:39 -04:00
scope: argv['scope'] as string,
});
},
};