diff --git a/src/plugins/bundled-web-search.test.ts b/src/plugins/bundled-web-search.test.ts new file mode 100644 index 00000000000..7db116a426f --- /dev/null +++ b/src/plugins/bundled-web-search.test.ts @@ -0,0 +1,13 @@ +import { expect, it } from "vitest"; +import { resolveBundledWebSearchPluginIds } from "./bundled-web-search.js"; + +it("keeps bundled web search compat ids aligned with bundled manifests", () => { + expect(resolveBundledWebSearchPluginIds({})).toEqual([ + "brave", + "firecrawl", + "google", + "moonshot", + "perplexity", + "xai", + ]); +}); diff --git a/src/plugins/bundled-web-search.ts b/src/plugins/bundled-web-search.ts new file mode 100644 index 00000000000..248928b093c --- /dev/null +++ b/src/plugins/bundled-web-search.ts @@ -0,0 +1,29 @@ +import type { PluginLoadOptions } from "./loader.js"; +import { loadPluginManifestRegistry } from "./manifest-registry.js"; + +export const BUNDLED_WEB_SEARCH_PLUGIN_IDS = [ + "brave", + "firecrawl", + "google", + "moonshot", + "perplexity", + "xai", +] as const; + +const bundledWebSearchPluginIdSet = new Set(BUNDLED_WEB_SEARCH_PLUGIN_IDS); + +export function resolveBundledWebSearchPluginIds(params: { + config?: PluginLoadOptions["config"]; + workspaceDir?: string; + env?: PluginLoadOptions["env"]; +}): string[] { + const registry = loadPluginManifestRegistry({ + config: params.config, + workspaceDir: params.workspaceDir, + env: params.env, + }); + return registry.plugins + .filter((plugin) => plugin.origin === "bundled" && bundledWebSearchPluginIdSet.has(plugin.id)) + .map((plugin) => plugin.id) + .toSorted((left, right) => left.localeCompare(right)); +} diff --git a/src/plugins/web-search-providers.ts b/src/plugins/web-search-providers.ts index 2cf44d9eac4..b415d7c7675 100644 --- a/src/plugins/web-search-providers.ts +++ b/src/plugins/web-search-providers.ts @@ -3,6 +3,7 @@ import { withBundledPluginAllowlistCompat, withBundledPluginEnablementCompat, } from "./bundled-compat.js"; +import { resolveBundledWebSearchPluginIds } from "./bundled-web-search.js"; import { loadOpenClawPlugins, type PluginLoadOptions } from "./loader.js"; import { createPluginLoaderLogger } from "./logger.js"; import { getActivePluginRegistry } from "./runtime.js"; @@ -41,25 +42,11 @@ function resolveBundledWebSearchCompatPluginIds(params: { workspaceDir?: string; env?: PluginLoadOptions["env"]; }): string[] { - const registry = loadOpenClawPlugins({ - config: { - ...params.config, - plugins: { - enabled: true, - }, - }, + return resolveBundledWebSearchPluginIds({ + config: params.config, workspaceDir: params.workspaceDir, env: params.env, - cache: false, - activate: false, - logger: createPluginLoaderLogger(log), }); - const bundledPluginIds = new Set( - registry.plugins.filter((plugin) => plugin.origin === "bundled").map((plugin) => plugin.id), - ); - return [...new Set(registry.webSearchProviders.map((entry) => entry.pluginId))] - .filter((pluginId) => bundledPluginIds.has(pluginId)) - .toSorted((left, right) => left.localeCompare(right)); } function withBundledWebSearchVitestCompat(params: {