@@ -37,6 +37,7 @@ import {
3737 getAdminErrorMessage ,
3838 isHeadlessMode ,
3939 Config ,
40+ SimpleExtensionLoader ,
4041 resolveToRealPath ,
4142 applyAdminAllowlist ,
4243 applyRequiredServers ,
@@ -558,6 +559,7 @@ export interface LoadCliConfigOptions {
558559 disabled ?: string [ ] ;
559560 } ;
560561 worktreeSettings ?: WorktreeSettings ;
562+ skipExtensions ?: boolean ;
561563}
562564
563565export async function loadCliConfig (
@@ -566,7 +568,7 @@ export async function loadCliConfig(
566568 argv : CliArgs ,
567569 options : LoadCliConfigOptions = { } ,
568570) : Promise < Config > {
569- const { cwd = process . cwd ( ) , projectHooks } = options ;
571+ const { cwd = process . cwd ( ) , projectHooks, skipExtensions = false } = options ;
570572 const debugMode = isDebugMode ( argv ) ;
571573
572574 const worktreeSettings =
@@ -641,21 +643,24 @@ export async function loadCliConfig(
641643 includeDirectories . push ( ...ideFolders ) ;
642644 }
643645
644- const extensionManager = new ExtensionManager ( {
645- settings,
646- requestConsent : requestConsentNonInteractive ,
647- requestSetting : promptForSetting ,
648- workspaceDir : cwd ,
649- enabledExtensionOverrides : argv . extensions ,
650- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
651- eventEmitter : coreEvents as EventEmitter < ExtensionEvents > ,
652- clientVersion : await getVersion ( ) ,
653- } ) ;
654- await extensionManager . loadExtensions ( ) ;
646+ let extensionManager : ExtensionManager | undefined ;
647+ if ( ! skipExtensions ) {
648+ extensionManager = new ExtensionManager ( {
649+ settings,
650+ requestConsent : requestConsentNonInteractive ,
651+ requestSetting : promptForSetting ,
652+ workspaceDir : cwd ,
653+ enabledExtensionOverrides : argv . extensions ,
654+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
655+ eventEmitter : coreEvents as EventEmitter < ExtensionEvents > ,
656+ clientVersion : await getVersion ( ) ,
657+ } ) ;
658+ await extensionManager . loadExtensions ( ) ;
659+ }
655660
656661 const extensionPlanSettings = extensionManager
657- . getExtensions ( )
658- . find ( ( ext ) => ext . isActive && ext . plan ?. directory ) ?. plan ;
662+ ? .getExtensions ( )
663+ ? .find ( ( ext ) => ext . isActive && ext . plan ?. directory ) ?. plan ;
659664
660665 const experimentalJitContext = settings . experimental . jitContext ?? true ;
661666
@@ -673,6 +678,9 @@ export async function loadCliConfig(
673678 let fileCount = 0 ;
674679 let filePaths : string [ ] = [ ] ;
675680
681+ const finalExtensionLoader =
682+ extensionManager ?? new SimpleExtensionLoader ( [ ] ) ;
683+
676684 if ( ! experimentalJitContext ) {
677685 // Call the (now wrapper) loadHierarchicalGeminiMemory which calls the server's version
678686 const result = await loadServerHierarchicalMemory (
@@ -681,7 +689,7 @@ export async function loadCliConfig(
681689 ? includeDirectories
682690 : [ ] ,
683691 fileService ,
684- extensionManager ,
692+ finalExtensionLoader ,
685693 trustedFolder ,
686694 memoryImportFormat ,
687695 memoryFileFiltering ,
@@ -1037,7 +1045,7 @@ export async function loadCliConfig(
10371045 listSessions : argv . listSessions || false ,
10381046 deleteSession : argv . deleteSession ,
10391047 enabledExtensions : argv . extensions ,
1040- extensionLoader : extensionManager ,
1048+ extensionLoader : finalExtensionLoader ,
10411049 extensionRegistryURI,
10421050 enableExtensionReloading : settings . experimental ?. extensionReloading ,
10431051 enableAgents : settings . experimental ?. enableAgents ,
0 commit comments