UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

126 lines (125 loc) 6.87 kB
import { c as normalizeOptionalLowercaseString } from "./string-coerce-CIXf7egm.js"; import { y as uniqueStrings } from "./string-normalization-DsCfAx8q.js"; import { r as normalizeProviderId } from "./provider-id-DMd-TDFp.js"; import { l as normalizePluginsConfig } from "./config-state-BkU1frVq.js"; import { s as createPluginIdScopeSet, u as normalizePluginIdScope } from "./current-plugin-metadata-snapshot-CmSX4G3W.js"; import { i as passesManifestOwnerBasePolicy, r as isBundledManifestOwner, t as hasExplicitManifestOwnerTrust } from "./manifest-owner-policy-D98oU3cV.js"; import { n as loadPluginManifestRegistryForPluginRegistry } from "./plugin-registry-contributions-BwuDvm89.js"; //#region src/plugins/activation-planner.ts /** Computes which manifest-owned plugins need activation for commands, routes, providers, or capabilities. */ /** Returns a deterministic activation plan without importing plugin runtime modules. */ function resolveManifestActivationPlan(params) { const onlyPluginIdSet = createPluginIdScopeSet(normalizePluginIdScope(params.onlyPluginIds)); const registry = params.manifestRecords ? { plugins: params.manifestRecords, diagnostics: [] } : loadPluginManifestRegistryForPluginRegistry({ config: params.config, workspaceDir: params.workspaceDir, env: params.env, includeDisabled: true }); const normalizedConfig = normalizePluginsConfig(params.config?.plugins); const entries = registry.plugins.flatMap((plugin) => { if (params.origin && plugin.origin !== params.origin) return []; if (onlyPluginIdSet && !onlyPluginIdSet.has(plugin.id)) return []; if (!passesManifestOwnerBasePolicy({ plugin, normalizedConfig, allowRestrictiveAllowlistBypass: params.allowRestrictiveAllowlistBypass })) return []; if (params.requireExplicitManifestOwnerTrust && !hasExplicitActivationPlannerManifestOwnerTrust({ plugin, normalizedConfig })) return []; const reasons = listManifestActivationTriggerReasons(plugin, params.trigger); if (reasons.length === 0) return []; return [{ pluginId: plugin.id, origin: plugin.origin, reasons }]; }).toSorted((left, right) => left.pluginId.localeCompare(right.pluginId)); return { trigger: params.trigger, pluginIds: uniqueStrings(entries.map((entry) => entry.pluginId)), entries, diagnostics: registry.diagnostics }; } /** Convenience wrapper for callers that only need plugin ids from the activation plan. */ function resolveManifestActivationPluginIds(params) { return [...resolveManifestActivationPlan(params).pluginIds]; } function hasExplicitActivationPlannerManifestOwnerTrust(params) { return isBundledManifestOwner(params.plugin) || params.plugin.origin === "config" || hasExplicitManifestOwnerTrust({ plugin: params.plugin, normalizedConfig: params.normalizedConfig }); } function listManifestActivationTriggerReasons(plugin, trigger) { switch (trigger.kind) { case "command": return listCommandTriggerReasons(plugin, normalizeCommandId(trigger.command)); case "provider": return listProviderTriggerReasons(plugin, normalizeProviderId(trigger.provider)); case "agentHarness": return listAgentHarnessTriggerReasons(plugin, normalizeCommandId(trigger.runtime)); case "channel": return listChannelTriggerReasons(plugin, normalizeCommandId(trigger.channel)); case "route": return listRouteTriggerReasons(plugin, normalizeCommandId(trigger.route)); case "capability": return listCapabilityTriggerReasons(plugin, trigger.capability); } return trigger; } function listAgentHarnessTriggerReasons(plugin, runtime) { return listHasNormalizedValue(plugin.activation?.onAgentHarnesses, runtime, normalizeCommandId) ? ["activation-agent-harness-hint"] : []; } function listCommandTriggerReasons(plugin, command) { return dedupeReasons([ listHasNormalizedValue(plugin.activation?.onCommands, command, normalizeCommandId) ? "activation-command-hint" : null, listHasNormalizedValue(plugin.cliCommands?.map((descriptor) => descriptor.name), command, normalizeCommandId) ? "manifest-cli-command-owner" : null, listHasNormalizedValue((plugin.commandAliases ?? []).flatMap((alias) => alias.cliCommand ?? alias.name), command, normalizeCommandId) ? "manifest-command-alias" : null ]); } function listProviderTriggerReasons(plugin, provider) { return dedupeReasons([ listHasNormalizedValue(plugin.activation?.onProviders, provider, normalizeProviderId) ? "activation-provider-hint" : null, listHasNormalizedValue(plugin.providers, provider, normalizeProviderId) ? "manifest-provider-owner" : null, listHasNormalizedValue(plugin.setup?.providers?.map((setupProvider) => setupProvider.id), provider, normalizeProviderId) ? "manifest-setup-provider-owner" : null ]); } function listChannelTriggerReasons(plugin, channel) { return dedupeReasons([listHasNormalizedValue(plugin.activation?.onChannels, channel, normalizeCommandId) ? "activation-channel-hint" : null, listHasNormalizedValue(plugin.channels, channel, normalizeCommandId) ? "manifest-channel-owner" : null]); } function listRouteTriggerReasons(plugin, route) { return listHasNormalizedValue(plugin.activation?.onRoutes, route, normalizeCommandId) ? ["activation-route-hint"] : []; } function listCapabilityTriggerReasons(plugin, capability) { switch (capability) { case "provider": return dedupeReasons([ plugin.activation?.onCapabilities?.includes(capability) ? "activation-capability-hint" : null, hasValues(plugin.activation?.onProviders) ? "activation-provider-hint" : null, hasValues(plugin.providers) ? "manifest-provider-owner" : null, hasValues(plugin.setup?.providers) ? "manifest-setup-provider-owner" : null ]); case "channel": return dedupeReasons([ plugin.activation?.onCapabilities?.includes(capability) ? "activation-capability-hint" : null, hasValues(plugin.activation?.onChannels) ? "activation-channel-hint" : null, hasValues(plugin.channels) ? "manifest-channel-owner" : null ]); case "tool": return dedupeReasons([plugin.activation?.onCapabilities?.includes(capability) ? "activation-capability-hint" : null, hasValues(plugin.contracts?.tools) ? "manifest-tool-contract" : null]); case "hook": return dedupeReasons([plugin.activation?.onCapabilities?.includes(capability) ? "activation-capability-hint" : null, hasValues(plugin.hooks) ? "manifest-hook-owner" : null]); } return capability; } function listHasNormalizedValue(values, expected, normalize) { return values?.some((value) => normalize(value) === expected) ?? false; } function hasValues(values) { return (values?.length ?? 0) > 0; } function dedupeReasons(reasons) { return [...new Set(reasons.filter((reason) => Boolean(reason)))]; } function normalizeCommandId(value) { return normalizeOptionalLowercaseString(value) ?? ""; } //#endregion export { resolveManifestActivationPluginIds as n, resolveManifestActivationPlan as t };