openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
112 lines (111 loc) • 6.18 kB
JavaScript
import { s as normalizeOptionalLowercaseString } from "./string-coerce-mnp54Vah.js";
import { _ as uniqueStrings } from "./string-normalization-WNUDCpXX.js";
import { i as normalizeProviderId } from "./provider-id-Dq06Bcx6.js";
import { s as normalizePluginsConfig } from "./config-state-CikNNz7T.js";
import { i as passesManifestOwnerBasePolicy } from "./manifest-owner-policy-DxLYM2ma.js";
import { s as createPluginIdScopeSet, u as normalizePluginIdScope } from "./current-plugin-metadata-snapshot-CfA_n2Nc.js";
import { n as loadPluginManifestRegistryForPluginRegistry } from "./plugin-registry-ChcJPHWl.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 normalizedConfig = normalizePluginsConfig(params.config?.plugins);
const registry = params.manifestRecords ? {
plugins: params.manifestRecords,
diagnostics: []
} : loadPluginManifestRegistryForPluginRegistry({
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
includeDisabled: true
});
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 [];
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 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.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 t };