diff --git a/src/extension-host/provider-runtime.test.ts b/src/extension-host/provider-runtime.test.ts new file mode 100644 index 00000000000..224452005cb --- /dev/null +++ b/src/extension-host/provider-runtime.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from "vitest"; +import { createEmptyPluginRegistry } from "../plugins/registry.js"; +import { resolveExtensionHostProviders } from "./provider-runtime.js"; + +describe("resolveExtensionHostProviders", () => { + it("projects provider registrations into provider plugins with plugin ids", () => { + const registry = createEmptyPluginRegistry(); + registry.providers.push({ + pluginId: "demo-plugin", + source: "bundled", + provider: { + id: "demo-provider", + label: "Demo Provider", + auth: [], + }, + }); + + expect(resolveExtensionHostProviders({ registry })).toEqual([ + { + id: "demo-provider", + label: "Demo Provider", + auth: [], + pluginId: "demo-plugin", + }, + ]); + }); +}); diff --git a/src/extension-host/provider-runtime.ts b/src/extension-host/provider-runtime.ts new file mode 100644 index 00000000000..66295a1a072 --- /dev/null +++ b/src/extension-host/provider-runtime.ts @@ -0,0 +1,11 @@ +import type { PluginRegistry } from "../plugins/registry.js"; +import type { ProviderPlugin } from "../plugins/types.js"; + +export function resolveExtensionHostProviders(params: { + registry: Pick; +}): ProviderPlugin[] { + return params.registry.providers.map((entry) => ({ + ...entry.provider, + pluginId: entry.pluginId, + })); +} diff --git a/src/plugins/providers.ts b/src/plugins/providers.ts index 4847a61935b..195126e432b 100644 --- a/src/plugins/providers.ts +++ b/src/plugins/providers.ts @@ -1,3 +1,4 @@ +import { resolveExtensionHostProviders } from "../extension-host/provider-runtime.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { loadOpenClawPlugins, type PluginLoadOptions } from "./loader.js"; import { createPluginLoaderLogger } from "./logger.js"; @@ -18,8 +19,5 @@ export function resolvePluginProviders(params: { logger: createPluginLoaderLogger(log), }); - return registry.providers.map((entry) => ({ - ...entry.provider, - pluginId: entry.pluginId, - })); + return resolveExtensionHostProviders({ registry }); }