diff --git a/packages/coding-agent/src/core/extensions/loader.ts b/packages/coding-agent/src/core/extensions/loader.ts index afc23069..03042a87 100644 --- a/packages/coding-agent/src/core/extensions/loader.ts +++ b/packages/coding-agent/src/core/extensions/loader.ts @@ -313,7 +313,7 @@ async function loadExtensionWithBun( setFlagValue, } = createExtensionAPI(handlers, tools, cwd, extensionPath, eventBus, sharedUI); - factory(api); + await factory(api); return { extension: { @@ -401,7 +401,7 @@ async function loadExtension( setFlagValue, } = createExtensionAPI(handlers, tools, cwd, extensionPath, eventBus, sharedUI); - factory(api); + await factory(api); return { extension: { @@ -436,13 +436,13 @@ async function loadExtension( /** * Create a LoadedExtension from an inline factory function. */ -export function loadExtensionFromFactory( +export async function loadExtensionFromFactory( factory: ExtensionFactory, cwd: string, eventBus: EventBus, sharedUI: { ui: ExtensionUIContext; hasUI: boolean }, name = "", -): LoadedExtension { +): Promise { const handlers = new Map(); const tools = new Map(); const { @@ -464,7 +464,7 @@ export function loadExtensionFromFactory( setFlagValue, } = createExtensionAPI(handlers, tools, cwd, name, eventBus, sharedUI); - factory(api); + await factory(api); return { path: name, diff --git a/packages/coding-agent/src/core/extensions/types.ts b/packages/coding-agent/src/core/extensions/types.ts index ad7b8540..96e095d2 100644 --- a/packages/coding-agent/src/core/extensions/types.ts +++ b/packages/coding-agent/src/core/extensions/types.ts @@ -641,8 +641,8 @@ export interface ExtensionAPI { events: EventBus; } -/** Extension factory function type. */ -export type ExtensionFactory = (pi: ExtensionAPI) => void; +/** Extension factory function type. Supports both sync and async initialization. */ +export type ExtensionFactory = (pi: ExtensionAPI) => void | Promise; // ============================================================================ // Loaded Extension Types diff --git a/packages/coding-agent/src/core/sdk.ts b/packages/coding-agent/src/core/sdk.ts index 6440415a..34b456ad 100644 --- a/packages/coding-agent/src/core/sdk.ts +++ b/packages/coding-agent/src/core/sdk.ts @@ -488,7 +488,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {} }; for (let i = 0; i < options.extensions.length; i++) { const factory = options.extensions[i]; - const loaded = loadExtensionFromFactory(factory, cwd, eventBus, uiHolder, ``); + const loaded = await loadExtensionFromFactory(factory, cwd, eventBus, uiHolder, ``); extensionsResult.extensions.push(loaded); } // Extend setUIContext to update inline extensions too