openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
126 lines (125 loc) • 6.87 kB
JavaScript
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 };