mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-13 05:12:55 -07:00
Revert "feat(admin): implement extensions disabled" (#16082)
This commit is contained in:
@@ -637,7 +637,6 @@ export async function loadCliConfig(
|
|||||||
const ptyInfo = await getPty();
|
const ptyInfo = await getPty();
|
||||||
|
|
||||||
const mcpEnabled = settings.admin?.mcp?.enabled ?? true;
|
const mcpEnabled = settings.admin?.mcp?.enabled ?? true;
|
||||||
const extensionsEnabled = settings.admin?.extensions?.enabled ?? true;
|
|
||||||
|
|
||||||
return new Config({
|
return new Config({
|
||||||
sessionId,
|
sessionId,
|
||||||
@@ -660,7 +659,6 @@ export async function loadCliConfig(
|
|||||||
mcpServerCommand: mcpEnabled ? settings.mcp?.serverCommand : undefined,
|
mcpServerCommand: mcpEnabled ? settings.mcp?.serverCommand : undefined,
|
||||||
mcpServers: mcpEnabled ? settings.mcpServers : {},
|
mcpServers: mcpEnabled ? settings.mcpServers : {},
|
||||||
mcpEnabled,
|
mcpEnabled,
|
||||||
extensionsEnabled,
|
|
||||||
allowedMcpServers: mcpEnabled
|
allowedMcpServers: mcpEnabled
|
||||||
? (argv.allowedMcpServerNames ?? settings.mcp?.allowed)
|
? (argv.allowedMcpServerNames ?? settings.mcp?.allowed)
|
||||||
: undefined,
|
: undefined,
|
||||||
|
|||||||
@@ -465,12 +465,6 @@ Would you like to attempt to install via "git clone" instead?`,
|
|||||||
if (this.loadedExtensions) {
|
if (this.loadedExtensions) {
|
||||||
throw new Error('Extensions already loaded, only load extensions once.');
|
throw new Error('Extensions already loaded, only load extensions once.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.settings.admin?.extensions?.enabled === false) {
|
|
||||||
this.loadedExtensions = [];
|
|
||||||
return this.loadedExtensions;
|
|
||||||
}
|
|
||||||
|
|
||||||
const extensionsDir = ExtensionStorage.getUserExtensionsDir();
|
const extensionsDir = ExtensionStorage.getUserExtensionsDir();
|
||||||
this.loadedExtensions = [];
|
this.loadedExtensions = [];
|
||||||
if (!fs.existsSync(extensionsDir)) {
|
if (!fs.existsSync(extensionsDir)) {
|
||||||
@@ -543,9 +537,6 @@ Would you like to attempt to install via "git clone" instead?`,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (config.mcpServers) {
|
if (config.mcpServers) {
|
||||||
if (this.settings.admin?.mcp?.enabled === false) {
|
|
||||||
config.mcpServers = undefined;
|
|
||||||
} else {
|
|
||||||
config.mcpServers = Object.fromEntries(
|
config.mcpServers = Object.fromEntries(
|
||||||
Object.entries(config.mcpServers).map(([key, value]) => [
|
Object.entries(config.mcpServers).map(([key, value]) => [
|
||||||
key,
|
key,
|
||||||
@@ -553,7 +544,6 @@ Would you like to attempt to install via "git clone" instead?`,
|
|||||||
]),
|
]),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const contextFiles = getContextFileNames(config)
|
const contextFiles = getContextFileNames(config)
|
||||||
.map((contextFileName) =>
|
.map((contextFileName) =>
|
||||||
|
|||||||
@@ -632,77 +632,6 @@ describe('extension tests', () => {
|
|||||||
expect(extension).toBeUndefined();
|
expect(extension).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not load any extensions if admin.extensions.enabled is false', async () => {
|
|
||||||
createExtension({
|
|
||||||
extensionsDir: userExtensionsDir,
|
|
||||||
name: 'test-extension',
|
|
||||||
version: '1.0.0',
|
|
||||||
});
|
|
||||||
const loadedSettings = loadSettings(tempWorkspaceDir);
|
|
||||||
loadedSettings.setValue(
|
|
||||||
SettingScope.System,
|
|
||||||
'admin.extensions.enabled',
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
extensionManager = new ExtensionManager({
|
|
||||||
workspaceDir: tempWorkspaceDir,
|
|
||||||
requestConsent: mockRequestConsent,
|
|
||||||
requestSetting: mockPromptForSettings,
|
|
||||||
settings: loadedSettings.merged,
|
|
||||||
});
|
|
||||||
|
|
||||||
const extensions = await extensionManager.loadExtensions();
|
|
||||||
expect(extensions).toEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not load mcpServers if admin.mcp.enabled is false', async () => {
|
|
||||||
createExtension({
|
|
||||||
extensionsDir: userExtensionsDir,
|
|
||||||
name: 'test-extension',
|
|
||||||
version: '1.0.0',
|
|
||||||
mcpServers: {
|
|
||||||
'test-server': { command: 'echo', args: ['hello'] },
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const loadedSettings = loadSettings(tempWorkspaceDir);
|
|
||||||
loadedSettings.setValue(SettingScope.System, 'admin.mcp.enabled', false);
|
|
||||||
extensionManager = new ExtensionManager({
|
|
||||||
workspaceDir: tempWorkspaceDir,
|
|
||||||
requestConsent: mockRequestConsent,
|
|
||||||
requestSetting: mockPromptForSettings,
|
|
||||||
settings: loadedSettings.merged,
|
|
||||||
});
|
|
||||||
|
|
||||||
const extensions = await extensionManager.loadExtensions();
|
|
||||||
expect(extensions).toHaveLength(1);
|
|
||||||
expect(extensions[0].mcpServers).toBeUndefined();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should load mcpServers if admin.mcp.enabled is true', async () => {
|
|
||||||
createExtension({
|
|
||||||
extensionsDir: userExtensionsDir,
|
|
||||||
name: 'test-extension',
|
|
||||||
version: '1.0.0',
|
|
||||||
mcpServers: {
|
|
||||||
'test-server': { command: 'echo', args: ['hello'] },
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const loadedSettings = loadSettings(tempWorkspaceDir);
|
|
||||||
loadedSettings.setValue(SettingScope.System, 'admin.mcp.enabled', true);
|
|
||||||
extensionManager = new ExtensionManager({
|
|
||||||
workspaceDir: tempWorkspaceDir,
|
|
||||||
requestConsent: mockRequestConsent,
|
|
||||||
requestSetting: mockPromptForSettings,
|
|
||||||
settings: loadedSettings.merged,
|
|
||||||
});
|
|
||||||
|
|
||||||
const extensions = await extensionManager.loadExtensions();
|
|
||||||
expect(extensions).toHaveLength(1);
|
|
||||||
expect(extensions[0].mcpServers).toEqual({
|
|
||||||
'test-server': { command: 'echo', args: ['hello'] },
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('id generation', () => {
|
describe('id generation', () => {
|
||||||
it.each([
|
it.each([
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -101,7 +101,6 @@ describe('BuiltinCommandLoader', () => {
|
|||||||
getFolderTrust: vi.fn().mockReturnValue(true),
|
getFolderTrust: vi.fn().mockReturnValue(true),
|
||||||
getEnableExtensionReloading: () => false,
|
getEnableExtensionReloading: () => false,
|
||||||
getEnableHooks: () => false,
|
getEnableHooks: () => false,
|
||||||
getExtensionsEnabled: vi.fn().mockReturnValue(true),
|
|
||||||
isSkillsSupportEnabled: vi.fn().mockReturnValue(false),
|
isSkillsSupportEnabled: vi.fn().mockReturnValue(false),
|
||||||
getMcpEnabled: vi.fn().mockReturnValue(true),
|
getMcpEnabled: vi.fn().mockReturnValue(true),
|
||||||
getSkillManager: vi.fn().mockReturnValue({
|
getSkillManager: vi.fn().mockReturnValue({
|
||||||
@@ -200,7 +199,6 @@ describe('BuiltinCommandLoader profile', () => {
|
|||||||
getCheckpointingEnabled: () => false,
|
getCheckpointingEnabled: () => false,
|
||||||
getEnableExtensionReloading: () => false,
|
getEnableExtensionReloading: () => false,
|
||||||
getEnableHooks: () => false,
|
getEnableHooks: () => false,
|
||||||
getExtensionsEnabled: vi.fn().mockReturnValue(true),
|
|
||||||
isSkillsSupportEnabled: vi.fn().mockReturnValue(false),
|
isSkillsSupportEnabled: vi.fn().mockReturnValue(false),
|
||||||
getMcpEnabled: vi.fn().mockReturnValue(true),
|
getMcpEnabled: vi.fn().mockReturnValue(true),
|
||||||
getSkillManager: vi.fn().mockReturnValue({
|
getSkillManager: vi.fn().mockReturnValue({
|
||||||
|
|||||||
@@ -76,24 +76,7 @@ export class BuiltinCommandLoader implements ICommandLoader {
|
|||||||
docsCommand,
|
docsCommand,
|
||||||
directoryCommand,
|
directoryCommand,
|
||||||
editorCommand,
|
editorCommand,
|
||||||
...(this.config?.getExtensionsEnabled() === false
|
extensionsCommand(this.config?.getEnableExtensionReloading()),
|
||||||
? [
|
|
||||||
{
|
|
||||||
name: 'extensions',
|
|
||||||
description: 'Manage extensions',
|
|
||||||
kind: CommandKind.BUILT_IN,
|
|
||||||
autoExecute: false,
|
|
||||||
subCommands: [],
|
|
||||||
action: async (
|
|
||||||
_context: CommandContext,
|
|
||||||
): Promise<MessageActionReturn> => ({
|
|
||||||
type: 'message',
|
|
||||||
messageType: 'error',
|
|
||||||
content: 'Extensions are disabled by your admin.',
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
]
|
|
||||||
: [extensionsCommand(this.config?.getEnableExtensionReloading())]),
|
|
||||||
helpCommand,
|
helpCommand,
|
||||||
...(this.config?.getEnableHooks() ? [hooksCommand] : []),
|
...(this.config?.getEnableHooks() ? [hooksCommand] : []),
|
||||||
await ideCommand(),
|
await ideCommand(),
|
||||||
@@ -112,7 +95,7 @@ export class BuiltinCommandLoader implements ICommandLoader {
|
|||||||
): Promise<MessageActionReturn> => ({
|
): Promise<MessageActionReturn> => ({
|
||||||
type: 'message',
|
type: 'message',
|
||||||
messageType: 'error',
|
messageType: 'error',
|
||||||
content: 'MCP is disabled by your admin.',
|
content: 'MCP disabled by your admin.',
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -356,7 +356,6 @@ export interface ConfigParameters {
|
|||||||
experimentalJitContext?: boolean;
|
experimentalJitContext?: boolean;
|
||||||
onModelChange?: (model: string) => void;
|
onModelChange?: (model: string) => void;
|
||||||
mcpEnabled?: boolean;
|
mcpEnabled?: boolean;
|
||||||
extensionsEnabled?: boolean;
|
|
||||||
onReload?: () => Promise<{ disabledSkills?: string[] }>;
|
onReload?: () => Promise<{ disabledSkills?: string[] }>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -391,7 +390,6 @@ export class Config {
|
|||||||
private readonly toolCallCommand: string | undefined;
|
private readonly toolCallCommand: string | undefined;
|
||||||
private readonly mcpServerCommand: string | undefined;
|
private readonly mcpServerCommand: string | undefined;
|
||||||
private readonly mcpEnabled: boolean;
|
private readonly mcpEnabled: boolean;
|
||||||
private readonly extensionsEnabled: boolean;
|
|
||||||
private mcpServers: Record<string, MCPServerConfig> | undefined;
|
private mcpServers: Record<string, MCPServerConfig> | undefined;
|
||||||
private userMemory: string;
|
private userMemory: string;
|
||||||
private geminiMdFileCount: number;
|
private geminiMdFileCount: number;
|
||||||
@@ -517,7 +515,6 @@ export class Config {
|
|||||||
this.mcpServerCommand = params.mcpServerCommand;
|
this.mcpServerCommand = params.mcpServerCommand;
|
||||||
this.mcpServers = params.mcpServers;
|
this.mcpServers = params.mcpServers;
|
||||||
this.mcpEnabled = params.mcpEnabled ?? true;
|
this.mcpEnabled = params.mcpEnabled ?? true;
|
||||||
this.extensionsEnabled = params.extensionsEnabled ?? true;
|
|
||||||
this.allowedMcpServers = params.allowedMcpServers ?? [];
|
this.allowedMcpServers = params.allowedMcpServers ?? [];
|
||||||
this.blockedMcpServers = params.blockedMcpServers ?? [];
|
this.blockedMcpServers = params.blockedMcpServers ?? [];
|
||||||
this.allowedEnvironmentVariables = params.allowedEnvironmentVariables ?? [];
|
this.allowedEnvironmentVariables = params.allowedEnvironmentVariables ?? [];
|
||||||
@@ -1143,10 +1140,6 @@ export class Config {
|
|||||||
return this.mcpEnabled;
|
return this.mcpEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
getExtensionsEnabled(): boolean {
|
|
||||||
return this.extensionsEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
getMcpClientManager(): McpClientManager | undefined {
|
getMcpClientManager(): McpClientManager | undefined {
|
||||||
return this.mcpClientManager;
|
return this.mcpClientManager;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user