Add ExtensionLoader interface, use that on Config object (#12116)

This commit is contained in:
Jacob MacDonald
2025-10-28 09:04:30 -07:00
committed by GitHub
parent 25f27509c0
commit 1b302deeff
35 changed files with 619 additions and 505 deletions
+13 -4
View File
@@ -154,6 +154,10 @@ import {
DEFAULT_MEMORY_FILE_FILTERING_OPTIONS,
} from './constants.js';
import { debugLogger } from '../utils/debugLogger.js';
import {
type ExtensionLoader,
SimpleExtensionLoader,
} from '../utils/extensionLoader.js';
export type { FileFilteringOptions };
export {
@@ -248,7 +252,7 @@ export interface ConfigParameters {
maxSessionTurns?: number;
experimentalZedIntegration?: boolean;
listExtensions?: boolean;
extensions?: GeminiCLIExtension[];
extensionLoader?: ExtensionLoader;
enabledExtensions?: string[];
blockedMcpServers?: Array<{ name: string; extensionName: string }>;
noBrowser?: boolean;
@@ -337,7 +341,7 @@ export class Config {
private inFallbackMode = false;
private readonly maxSessionTurns: number;
private readonly listExtensions: boolean;
private readonly _extensions: GeminiCLIExtension[];
private readonly _extensionLoader: ExtensionLoader;
private readonly _enabledExtensions: string[];
private readonly _blockedMcpServers: Array<{
name: string;
@@ -440,7 +444,8 @@ export class Config {
this.experimentalZedIntegration =
params.experimentalZedIntegration ?? false;
this.listExtensions = params.listExtensions ?? false;
this._extensions = params.extensions ?? [];
this._extensionLoader =
params.extensionLoader ?? new SimpleExtensionLoader([]);
this._enabledExtensions = params.enabledExtensions ?? [];
this._blockedMcpServers = params.blockedMcpServers ?? [];
this.noBrowser = params.noBrowser ?? false;
@@ -885,7 +890,11 @@ export class Config {
}
getExtensions(): GeminiCLIExtension[] {
return this._extensions;
return this._extensionLoader.getExtensions();
}
getExtensionLoader(): ExtensionLoader {
return this._extensionLoader;
}
// The list of explicitly enabled extensions, if any were given, may contain