mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-28 14:04:41 -07:00
Pass whole extensions rather than just context files (#10910)
Co-authored-by: Jake Macdonald <jakemac@google.com>
This commit is contained in:
@@ -8,6 +8,7 @@ import { type CommandModule } from 'yargs';
|
||||
import { disableExtension } from '../../config/extension.js';
|
||||
import { SettingScope } from '../../config/settings.js';
|
||||
import { getErrorMessage } from '../../utils/errors.js';
|
||||
import { ExtensionEnablementManager } from '../../config/extensions/extensionEnablement.js';
|
||||
import { debugLogger } from '@google/gemini-cli-core';
|
||||
|
||||
interface DisableArgs {
|
||||
@@ -16,11 +17,20 @@ interface DisableArgs {
|
||||
}
|
||||
|
||||
export function handleDisable(args: DisableArgs) {
|
||||
const extensionEnablementManager = new ExtensionEnablementManager();
|
||||
try {
|
||||
if (args.scope?.toLowerCase() === 'workspace') {
|
||||
disableExtension(args.name, SettingScope.Workspace);
|
||||
disableExtension(
|
||||
args.name,
|
||||
SettingScope.Workspace,
|
||||
extensionEnablementManager,
|
||||
);
|
||||
} else {
|
||||
disableExtension(args.name, SettingScope.User);
|
||||
disableExtension(
|
||||
args.name,
|
||||
SettingScope.User,
|
||||
extensionEnablementManager,
|
||||
);
|
||||
}
|
||||
debugLogger.log(
|
||||
`Extension "${args.name}" successfully disabled for scope "${args.scope}".`,
|
||||
@@ -41,7 +51,7 @@ export const disableCommand: CommandModule = {
|
||||
type: 'string',
|
||||
})
|
||||
.option('scope', {
|
||||
describe: 'The scope to disable the extenison in.',
|
||||
describe: 'The scope to disable the extension in.',
|
||||
type: 'string',
|
||||
default: SettingScope.User,
|
||||
})
|
||||
|
||||
@@ -8,6 +8,7 @@ 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;
|
||||
@@ -15,11 +16,16 @@ interface EnableArgs {
|
||||
}
|
||||
|
||||
export function handleEnable(args: EnableArgs) {
|
||||
const extensionEnablementManager = new ExtensionEnablementManager();
|
||||
try {
|
||||
if (args.scope?.toLowerCase() === 'workspace') {
|
||||
enableExtension(args.name, SettingScope.Workspace);
|
||||
enableExtension(
|
||||
args.name,
|
||||
SettingScope.Workspace,
|
||||
extensionEnablementManager,
|
||||
);
|
||||
} else {
|
||||
enableExtension(args.name, SettingScope.User);
|
||||
enableExtension(args.name, SettingScope.User, extensionEnablementManager);
|
||||
}
|
||||
if (args.scope) {
|
||||
console.log(
|
||||
@@ -46,7 +52,7 @@ export const enableCommand: CommandModule = {
|
||||
})
|
||||
.option('scope', {
|
||||
describe:
|
||||
'The scope to enable the extenison in. If not set, will be enabled in all scopes.',
|
||||
'The scope to enable the extension in. If not set, will be enabled in all scopes.',
|
||||
type: 'string',
|
||||
})
|
||||
.check((argv) => {
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
import type { CommandModule } from 'yargs';
|
||||
import {
|
||||
loadExtensions,
|
||||
annotateActiveExtensions,
|
||||
requestConsentNonInteractive,
|
||||
} from '../../config/extension.js';
|
||||
import {
|
||||
@@ -37,12 +36,7 @@ export async function handleUpdate(args: UpdateArgs) {
|
||||
// ones.
|
||||
args.name ? [args.name] : [],
|
||||
);
|
||||
const allExtensions = loadExtensions(extensionEnablementManager);
|
||||
const extensions = annotateActiveExtensions(
|
||||
allExtensions,
|
||||
workingDir,
|
||||
extensionEnablementManager,
|
||||
);
|
||||
const extensions = loadExtensions(extensionEnablementManager);
|
||||
if (args.name) {
|
||||
try {
|
||||
const extension = extensions.find(
|
||||
@@ -58,7 +52,10 @@ export async function handleUpdate(args: UpdateArgs) {
|
||||
);
|
||||
return;
|
||||
}
|
||||
const updateState = await checkForExtensionUpdate(extension);
|
||||
const updateState = await checkForExtensionUpdate(
|
||||
extension,
|
||||
extensionEnablementManager,
|
||||
);
|
||||
if (updateState !== ExtensionUpdateState.UPDATE_AVAILABLE) {
|
||||
debugLogger.log(`Extension "${args.name}" is already up to date.`);
|
||||
return;
|
||||
@@ -66,6 +63,7 @@ export async function handleUpdate(args: UpdateArgs) {
|
||||
// TODO(chrstnb): we should list extensions if the requested extension is not installed.
|
||||
const updatedExtensionInfo = (await updateExtension(
|
||||
extension,
|
||||
extensionEnablementManager,
|
||||
workingDir,
|
||||
requestConsentNonInteractive,
|
||||
updateState,
|
||||
@@ -90,6 +88,7 @@ export async function handleUpdate(args: UpdateArgs) {
|
||||
const extensionState = new Map();
|
||||
await checkForAllExtensionUpdates(
|
||||
extensions,
|
||||
extensionEnablementManager,
|
||||
(action) => {
|
||||
if (action.type === 'SET_STATE') {
|
||||
extensionState.set(action.payload.name, {
|
||||
@@ -104,6 +103,7 @@ export async function handleUpdate(args: UpdateArgs) {
|
||||
requestConsentNonInteractive,
|
||||
extensions,
|
||||
extensionState,
|
||||
extensionEnablementManager,
|
||||
() => {},
|
||||
);
|
||||
updateInfos = updateInfos.filter(
|
||||
|
||||
@@ -31,7 +31,7 @@ async function getMcpServersFromConfig(): Promise<
|
||||
}
|
||||
mcpServers[key] = {
|
||||
...server,
|
||||
extensionName: extension.name,
|
||||
extension,
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -115,7 +115,7 @@ export async function listMcpServers(): Promise<void> {
|
||||
|
||||
let serverInfo =
|
||||
serverName +
|
||||
(server.extensionName ? ` (from ${server.extensionName})` : '') +
|
||||
(server.extension?.name ? ` (from ${server.extension.name})` : '') +
|
||||
': ';
|
||||
if (server.httpUrl) {
|
||||
serverInfo += `${server.httpUrl} (http)`;
|
||||
|
||||
Reference in New Issue
Block a user