Revert "feat(admin): implement extensions disabled" (#16082)

This commit is contained in:
christine betts
2026-01-07 14:35:56 -05:00
committed by GitHub
parent 143bb63483
commit 19bdd95eab
6 changed files with 8 additions and 117 deletions

View File

@@ -637,7 +637,6 @@ export async function loadCliConfig(
const ptyInfo = await getPty();
const mcpEnabled = settings.admin?.mcp?.enabled ?? true;
const extensionsEnabled = settings.admin?.extensions?.enabled ?? true;
return new Config({
sessionId,
@@ -660,7 +659,6 @@ export async function loadCliConfig(
mcpServerCommand: mcpEnabled ? settings.mcp?.serverCommand : undefined,
mcpServers: mcpEnabled ? settings.mcpServers : {},
mcpEnabled,
extensionsEnabled,
allowedMcpServers: mcpEnabled
? (argv.allowedMcpServerNames ?? settings.mcp?.allowed)
: undefined,

View File

@@ -465,12 +465,6 @@ Would you like to attempt to install via "git clone" instead?`,
if (this.loadedExtensions) {
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();
this.loadedExtensions = [];
if (!fs.existsSync(extensionsDir)) {
@@ -543,16 +537,12 @@ Would you like to attempt to install via "git clone" instead?`,
}
if (config.mcpServers) {
if (this.settings.admin?.mcp?.enabled === false) {
config.mcpServers = undefined;
} else {
config.mcpServers = Object.fromEntries(
Object.entries(config.mcpServers).map(([key, value]) => [
key,
filterMcpConfig(value),
]),
);
}
config.mcpServers = Object.fromEntries(
Object.entries(config.mcpServers).map(([key, value]) => [
key,
filterMcpConfig(value),
]),
);
}
const contextFiles = getContextFileNames(config)

View File

@@ -632,77 +632,6 @@ describe('extension tests', () => {
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', () => {
it.each([
{

View File

@@ -101,7 +101,6 @@ describe('BuiltinCommandLoader', () => {
getFolderTrust: vi.fn().mockReturnValue(true),
getEnableExtensionReloading: () => false,
getEnableHooks: () => false,
getExtensionsEnabled: vi.fn().mockReturnValue(true),
isSkillsSupportEnabled: vi.fn().mockReturnValue(false),
getMcpEnabled: vi.fn().mockReturnValue(true),
getSkillManager: vi.fn().mockReturnValue({
@@ -200,7 +199,6 @@ describe('BuiltinCommandLoader profile', () => {
getCheckpointingEnabled: () => false,
getEnableExtensionReloading: () => false,
getEnableHooks: () => false,
getExtensionsEnabled: vi.fn().mockReturnValue(true),
isSkillsSupportEnabled: vi.fn().mockReturnValue(false),
getMcpEnabled: vi.fn().mockReturnValue(true),
getSkillManager: vi.fn().mockReturnValue({

View File

@@ -76,24 +76,7 @@ export class BuiltinCommandLoader implements ICommandLoader {
docsCommand,
directoryCommand,
editorCommand,
...(this.config?.getExtensionsEnabled() === false
? [
{
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())]),
extensionsCommand(this.config?.getEnableExtensionReloading()),
helpCommand,
...(this.config?.getEnableHooks() ? [hooksCommand] : []),
await ideCommand(),
@@ -112,7 +95,7 @@ export class BuiltinCommandLoader implements ICommandLoader {
): Promise<MessageActionReturn> => ({
type: 'message',
messageType: 'error',
content: 'MCP is disabled by your admin.',
content: 'MCP disabled by your admin.',
}),
},
]

View File

@@ -356,7 +356,6 @@ export interface ConfigParameters {
experimentalJitContext?: boolean;
onModelChange?: (model: string) => void;
mcpEnabled?: boolean;
extensionsEnabled?: boolean;
onReload?: () => Promise<{ disabledSkills?: string[] }>;
}
@@ -391,7 +390,6 @@ export class Config {
private readonly toolCallCommand: string | undefined;
private readonly mcpServerCommand: string | undefined;
private readonly mcpEnabled: boolean;
private readonly extensionsEnabled: boolean;
private mcpServers: Record<string, MCPServerConfig> | undefined;
private userMemory: string;
private geminiMdFileCount: number;
@@ -517,7 +515,6 @@ export class Config {
this.mcpServerCommand = params.mcpServerCommand;
this.mcpServers = params.mcpServers;
this.mcpEnabled = params.mcpEnabled ?? true;
this.extensionsEnabled = params.extensionsEnabled ?? true;
this.allowedMcpServers = params.allowedMcpServers ?? [];
this.blockedMcpServers = params.blockedMcpServers ?? [];
this.allowedEnvironmentVariables = params.allowedEnvironmentVariables ?? [];
@@ -1143,10 +1140,6 @@ export class Config {
return this.mcpEnabled;
}
getExtensionsEnabled(): boolean {
return this.extensionsEnabled;
}
getMcpClientManager(): McpClientManager | undefined {
return this.mcpClientManager;
}