openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
98 lines (97 loc) • 5.25 kB
JavaScript
import { c as normalizeOptionalLowercaseString } from "./string-coerce-CIXf7egm.js";
import { v as sortUniqueStrings } from "./string-normalization-DsCfAx8q.js";
import { n as isVitestRuntimeEnv } from "./test-runtime-env-DQDRzsLt.js";
import "./env-M3R40TOb.js";
import { h as resolveSelectedContextEnginePluginIdFromConfig, l as normalizePluginsConfig } from "./config-state-BkU1frVq.js";
import { i as passesManifestOwnerBasePolicy } from "./manifest-owner-policy-D98oU3cV.js";
import { n as listExplicitlyDisabledChannelIdsForConfig, r as listPotentialConfiguredChannelIds } from "./config-presence-Cd62ZvYR.js";
import { c as loadManifestMetadataSnapshot } from "./manifest-contract-eligibility-BbV7X6pV.js";
import { l as resolveConfiguredChannelPluginIds, s as listExplicitConfiguredChannelIdsForConfig } from "./channel-presence-policy-_eDSlojg.js";
import { t as applyPluginAutoEnable } from "./plugin-auto-enable-Tv_C18cS.js";
import { t as loadGatewayStartupPluginPlan } from "./gateway-startup-plugin-ids-D2iVoeEm.js";
import "./channel-plugin-ids-DIyH-LxI.js";
//#region src/plugins/effective-plugin-ids.ts
/** Resolves effective plugin ids from config, installed records, and activation metadata. */
function collectConfiguredChannelIds(config, activationSourceConfig, env, discovery) {
const disabled = /* @__PURE__ */ new Set([...listExplicitlyDisabledChannelIdsForConfig(config), ...listExplicitlyDisabledChannelIdsForConfig(activationSourceConfig)]);
return [.../* @__PURE__ */ new Set([...listPotentialConfiguredChannelIds(config, env, {
includePersistedAuthState: false,
discovery
}), ...listExplicitConfiguredChannelIdsForConfig(activationSourceConfig)])].map((channelId) => normalizeOptionalLowercaseString(channelId)).filter((channelId) => {
if (!channelId) return false;
return !disabled.has(channelId);
}).toSorted((left, right) => left.localeCompare(right));
}
function addBundledChannelOwnerPluginIds(params) {
const plugins = normalizePluginsConfig(params.config.plugins);
const channelIds = new Set(params.channelIds.map((channelId) => normalizeOptionalLowercaseString(channelId)).filter((channelId) => Boolean(channelId)));
if (channelIds.size === 0) return;
const env = params.bundledPluginsDir ? {
...params.env,
OPENCLAW_BUNDLED_PLUGINS_DIR: params.bundledPluginsDir,
...isVitestRuntimeEnv(params.env) || isVitestRuntimeEnv() ? { OPENCLAW_TEST_TRUST_BUNDLED_PLUGINS_DIR: "1" } : {}
} : params.env;
const records = params.manifestRecords ?? loadManifestMetadataSnapshot({
config: params.config,
env,
workspaceDir: params.workspaceDir
}).plugins;
for (const plugin of records) {
if (plugin.origin !== "bundled") continue;
if (plugin.channels.some((channelId) => channelIds.has(normalizeOptionalLowercaseString(channelId) ?? ""))) {
const pluginId = normalizeOptionalLowercaseString(plugin.id);
if (pluginId && passesManifestOwnerBasePolicy({
plugin: { id: pluginId },
normalizedConfig: plugins,
allowRestrictiveAllowlistBypass: true
})) params.pluginIds.add(pluginId);
}
}
}
/** Lists plugin ids that are effectively enabled for a config/discovery context. */
function resolveEffectivePluginIds(params) {
const prepared = params.bundledPluginsDir || params.metadataSnapshot?.pluginIds ? void 0 : params.metadataSnapshot;
const effectiveConfig = applyPluginAutoEnable({
config: params.config,
env: params.env,
...prepared ? { manifestRegistry: prepared.manifestRegistry } : {},
...prepared?.discovery ? { discovery: prepared.discovery } : {}
}).config;
const plugins = normalizePluginsConfig(effectiveConfig.plugins);
const ids = new Set(plugins.enabled ? plugins.allow : []);
if (plugins.enabled) {
for (const [pluginId, entry] of Object.entries(plugins.entries)) if (entry?.enabled === false) ids.delete(pluginId);
else if (entry?.enabled === true && (plugins.allow.length === 0 || plugins.allow.includes(pluginId))) ids.add(pluginId);
for (const pluginId of plugins.deny) ids.delete(pluginId);
}
const contextEnginePluginId = resolveSelectedContextEnginePluginIdFromConfig(plugins, plugins.slots.contextEngine);
if (contextEnginePluginId) ids.add(contextEnginePluginId);
const configuredChannelIds = collectConfiguredChannelIds(effectiveConfig, params.config, params.env, prepared?.discovery);
for (const pluginId of resolveConfiguredChannelPluginIds({
config: effectiveConfig,
activationSourceConfig: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
manifestRecords: prepared?.plugins,
discovery: prepared?.discovery
})) ids.add(pluginId);
addBundledChannelOwnerPluginIds({
pluginIds: ids,
config: effectiveConfig,
channelIds: configuredChannelIds,
env: params.env,
workspaceDir: params.workspaceDir,
manifestRecords: prepared?.plugins,
...params.bundledPluginsDir ? { bundledPluginsDir: params.bundledPluginsDir } : {}
});
for (const pluginId of loadGatewayStartupPluginPlan({
config: effectiveConfig,
activationSourceConfig: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
...prepared ? { metadataSnapshot: prepared } : {}
}).pluginIds) ids.add(pluginId);
return sortUniqueStrings(ids);
}
//#endregion
export { resolveEffectivePluginIds as t };