import type { OpenClawConfig } from "../config/config.js"; import { loadOpenClawPlugins } from "./loader.js"; import type { PluginRegistry } from "./registry.js"; import { getActivePluginRegistry } from "./runtime.js"; type CapabilityProviderRegistryKey = | "speechProviders" | "mediaUnderstandingProviders" | "imageGenerationProviders"; type CapabilityProviderForKey = PluginRegistry[K][number] extends { provider: infer T } ? T : never; export function resolvePluginCapabilityProviders(params: { key: K; cfg?: OpenClawConfig; useActiveRegistryWhen?: (active: PluginRegistry | undefined) => boolean; }): CapabilityProviderForKey[] { const active = getActivePluginRegistry(); const shouldUseActive = params.useActiveRegistryWhen?.(active) ?? (active?.[params.key].length ?? 0) > 0; const registry = shouldUseActive || !params.cfg ? active : loadOpenClawPlugins({ config: params.cfg }); return (registry?.[params.key] ?? []).map( (entry) => entry.provider, ) as CapabilityProviderForKey[]; }