openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
415 lines (414 loc) • 21.6 kB
JavaScript
import { c as normalizeOptionalLowercaseString } from "./string-coerce-CIXf7egm.js";
import { h as withBundledPluginEnablementCompat, m as isBundledProviderCompatPlugin } from "./installed-plugin-index-wrDsjyMD.js";
import { n as normalizePluginsConfigWithResolverCore } from "./config-normalization-shared-D4lufwW0.js";
import { d as resolveEffectivePluginActivationState, l as normalizePluginsConfig } from "./config-state-BkU1frVq.js";
import { t as isPluginEnabledByDefaultForPlatform } from "./default-enablement-CEIbpabL.js";
import { c as resolvePluginMetadataSnapshot, d as createPluginRegistryIdNormalizer } from "./plugin-metadata-snapshot-w-4EjxI4.js";
import "./plugin-registry-contributions-BwuDvm89.js";
import { n as listExplicitlyDisabledChannelIdsForConfig } from "./config-presence-Cd62ZvYR.js";
import { c as listGatewayActivatedChannelIds } from "./channel-presence-policy-_eDSlojg.js";
import { t as canStartConfiguredChannelPlugin } from "./channel-startup-policy-B767T942.js";
import { A as manifestOwnsConfiguredSpeechProvider, C as collectConfiguredMemoryEmbeddingProviderIds, E as collectConfiguredWebSearchProviderIds, S as collectConfiguredGenerationProviderIds, T as collectConfiguredVoiceProviderIds, _ as resolveContextEngineSlotStartupPluginId, a as collectConfiguredProviderIds, b as sortUniquePluginIds, c as collectValidationConfiguredShorthandModelIds, d as hasConfiguredActivationPath, f as hasConfiguredStartupChannel, g as resolveAuthorizedGatewayStartupDreamingPluginIds, h as readStartupBundledDiscoveryMode, i as blocksPluginStartup, j as manifestOwnsConfiguredWebSearchProvider, k as manifestOwnsConfiguredModelProvider, l as createManifestRegistryLookup, m as normalizePluginsConfigForInstalledIndex, n as addConfiguredSlotPluginIds, o as collectConfiguredStartupChannelIds, p as listManifestChannelIds, r as addPluginConfigEntryIds, s as collectValidationConfiguredProviderIds, t as addConfiguredActivationPathPluginIds, u as findManifestPlugin, v as resolveMemorySlotStartupPluginId, x as collectConfiguredAgentModelProviderIds, y as shouldConsiderForGatewayStartup } from "./gateway-startup-plugin-config-Bq9ZdScF.js";
import { t as collectConfiguredAgentHarnessRuntimes } from "./harness-runtimes-BrMGAsrQ.js";
import { t as collectConfiguredSpeechProviderIds } from "./gateway-startup-speech-providers-C1sqNf-9.js";
import { n as normalizeWorkerProviderIds, t as collectConfiguredWorkerProviderIds } from "./worker-provider-config-Cq1C8T7E.js";
import { n as manifestOwnsWorkerProvider } from "./worker-provider-manifest-p8jUgDjU.js";
import { t as createInstalledPluginIndexScopeLookup } from "./installed-plugin-index-scope-lookup-zFavZQ1h.js";
//#region src/plugins/gateway-startup-plugin-activation.ts
function addRequiredAgentHarnessPluginIds(target, params) {
const requiredAgentHarnessRuntimes = new Set(collectConfiguredAgentHarnessRuntimes(params.activationSourceConfig, { includeImplicitRuntimePreferences: false }));
if (requiredAgentHarnessRuntimes.size === 0) return;
for (const plugin of params.index.plugins) if (plugin.startup.agentHarnesses.some((runtime) => requiredAgentHarnessRuntimes.has(runtime)) && passesPluginStartupPolicy({
...params,
plugin
}, "harness")) target.add(plugin.pluginId);
}
function resolveStartupActivationState(params, autoEnabledReason, applyBundledProviderCompat = false) {
const config = applyBundledProviderCompat ? withBundledPluginEnablementCompat({
config: params.config,
pluginIds: [params.plugin.pluginId],
env: params.env,
activation: "defaults"
}) ?? params.config : params.config;
return resolveEffectivePluginActivationState({
id: params.plugin.pluginId,
origin: params.plugin.origin,
channelIds: params.plugin.contributions?.channels,
config: applyBundledProviderCompat ? normalizePluginsConfig(config.plugins) : params.pluginsConfig,
rootConfig: config,
enabledByDefault: isPluginEnabledByDefaultForPlatform(params.plugin, params.platform),
activationSource: params.activationSource,
...autoEnabledReason ? { autoEnabledReason } : {}
});
}
function isProviderCompatStartupPolicy(policy) {
return policy === "provider" || policy === "worker" || policy === "speech" || policy === "implicit-external";
}
function hasExplicitHookPolicyConfig(entry) {
return entry?.hooks?.allowConversationAccess === true || entry?.hooks?.allowPromptInjection === true || entry?.hooks?.timeoutMs !== void 0 || entry?.hooks?.timeouts !== void 0 && Object.keys(entry.hooks.timeouts).length > 0;
}
function passesPluginStartupPolicy(params, policy) {
const { activationSource, plugin, pluginsConfig } = params;
if (policy !== "speech" && (!pluginsConfig.enabled || !activationSource.plugins.enabled) || blocksPluginStartup({
pluginId: plugin.pluginId,
pluginsConfig,
activationSourcePlugins: activationSource.plugins
})) return false;
if (policy === "harness" && [pluginsConfig, activationSource.plugins].some((config) => config.allow.length > 0 && !config.allow.includes(plugin.pluginId))) return false;
const bundled = plugin.origin === "bundled";
if (bundled && (policy === "harness" || policy === "speech" || policy === "root")) return true;
if (policy === "root" && activationSource.plugins.allow.length > 0 && !activationSource.plugins.allow.includes(plugin.pluginId)) return false;
const activationState = resolveStartupActivationState(params, policy === "worker" ? "cloud worker provider required" : void 0, isProviderCompatStartupPolicy(policy) && isBundledProviderCompatPlugin({
origin: plugin.origin,
providers: plugin.contributions?.providers,
contracts: plugin.contributions?.contracts
}));
if (!activationState.enabled) return false;
if (policy === "harness" || policy === "implicit-external") return true;
if (policy === "hook") return activationState.explicitlyEnabled || hasExplicitHookPolicyConfig(activationSource.plugins.entries[plugin.pluginId]);
return bundled || activationState.explicitlyEnabled;
}
function manifestOwnsConfiguredContract(manifest, contractKey, configuredProviderIds) {
return configuredProviderIds.size > 0 && (manifest?.contracts?.[contractKey] ?? []).some((providerId) => {
const normalized = normalizeOptionalLowercaseString(providerId);
return normalized ? configuredProviderIds.has(normalized) : false;
});
}
function manifestOwnsConfiguredContractGroup(manifest, configuredProviderIds) {
return Object.entries(configuredProviderIds).some(([contractKey, providerIds]) => manifestOwnsConfiguredContract(manifest, contractKey, providerIds));
}
const GATEWAY_STARTUP_ACTIVATION_POLICIES = [
{
policy: "harness",
matches: ({ plugin, requiredAgentHarnessRuntimes }) => plugin.startup.agentHarnesses.some((runtime) => requiredAgentHarnessRuntimes.has(runtime))
},
{
policy: "root",
matches: ({ manifest, activationSource, config }) => hasConfiguredActivationPath({
manifest,
config: activationSource.rootConfig ?? config
})
},
{
policy: "worker",
matches: ({ manifest, configuredWorkerProviderIds }) => manifestOwnsWorkerProvider(manifest, configuredWorkerProviderIds)
},
{
policy: "speech",
matches: ({ manifest, configuredSpeechProviderIds }) => manifestOwnsConfiguredSpeechProvider({
manifest,
configuredSpeechProviderIds
})
},
{
policy: "implicit-external",
matches: ({ manifest, configuredWebSearchProviderIds }) => manifestOwnsConfiguredWebSearchProvider({
manifest,
configuredWebSearchProviderIds
})
},
{
policy: "provider",
matches: ({ manifest, configuredModelProviderIds }) => manifestOwnsConfiguredModelProvider({
manifest,
configuredModelProviderIds
})
},
{
policy: "provider",
matches: ({ manifest, configuredGenerationProviderIds }) => manifestOwnsConfiguredContractGroup(manifest, configuredGenerationProviderIds)
},
{
policy: "provider",
matches: ({ manifest, configuredVoiceProviderIds }) => manifestOwnsConfiguredContractGroup(manifest, configuredVoiceProviderIds)
},
{
policy: "implicit-external",
matches: ({ manifest, configuredMemoryEmbeddingProviderIds }) => manifestOwnsConfiguredContract(manifest, "embeddingProviders", configuredMemoryEmbeddingProviderIds)
},
{
policy: "hook",
matches: ({ activationSource, manifest, plugin }) => manifest?.activation?.onCapabilities?.includes("hook") === true || hasExplicitHookPolicyConfig(activationSource.plugins.entries[plugin.pluginId])
},
{
policy: "tool",
matches: ({ manifest }) => (manifest?.contracts?.tools?.length ?? 0) > 0
},
{
policy: "provider",
matches: ({ manifest }) => (manifest?.contracts?.trustedToolPolicies?.length ?? 0) > 0
}
];
/** Evaluates manifest-owned startup surfaces in their original precedence order. */
function canStartGatewayStartupPlugin(params) {
return GATEWAY_STARTUP_ACTIVATION_POLICIES.some(({ matches, policy }) => matches(params) && passesPluginStartupPolicy(params, policy));
}
//#endregion
//#region src/plugins/gateway-startup-plugin-metadata.ts
function resolveGatewayStartupMetadataPluginIds(params) {
const lookup = createInstalledPluginIndexScopeLookup(params.index);
const activationSourceConfig = params.activationSourceConfig ?? params.config;
const pluginsConfig = normalizePluginsConfigForInstalledIndex(params.config.plugins, lookup);
const activationSourcePlugins = normalizePluginsConfigForInstalledIndex(activationSourceConfig.plugins, lookup);
if (!pluginsConfig.enabled || !activationSourcePlugins.enabled) return [];
if (readStartupBundledDiscoveryMode(params.config, params.env) === "compat" || readStartupBundledDiscoveryMode(activationSourceConfig, params.env) === "compat") return;
if (pluginsConfig.allow.length === 0 && activationSourcePlugins.allow.length === 0) return;
const scope = /* @__PURE__ */ new Set([...pluginsConfig.allow, ...activationSourcePlugins.allow]);
addPluginConfigEntryIds(scope, pluginsConfig);
addPluginConfigEntryIds(scope, activationSourcePlugins);
const memorySlotStartupPluginId = resolveMemorySlotStartupPluginId({
activationSourceConfig,
activationSourcePlugins,
normalizePluginId: lookup.normalizePluginId
});
addConfiguredSlotPluginIds(scope, {
activationSourceConfig,
activationSourcePlugins,
lookup
});
for (const pluginId of resolveAuthorizedGatewayStartupDreamingPluginIds({
config: params.config,
pluginsConfig,
activationSource: {
plugins: activationSourcePlugins,
rootConfig: activationSourceConfig
},
activationSourcePlugins,
selectedMemoryPluginId: memorySlotStartupPluginId,
index: params.index,
platform: params.platform
})) scope.add(pluginId);
if (!lookup.hasCompleteConfigPathActivationMetadata()) return;
addConfiguredActivationPathPluginIds(scope, {
activationSourceConfig,
index: params.index
});
const configuredChannelIds = collectConfiguredStartupChannelIds({
config: params.config,
activationSourceConfig,
env: params.env,
ambientEnvTriggers: params.ambientEnvTriggers,
includePersistedAuthState: false
});
if (!lookup.hasDirectChannelOwners(configuredChannelIds)) return;
lookup.addDirectChannelOwners(scope, configuredChannelIds);
const configuredProviderIds = sortUniquePluginIds([
...collectConfiguredProviderIds(params.config),
...collectConfiguredProviderIds(activationSourceConfig),
...collectValidationConfiguredProviderIds(params.config),
...collectValidationConfiguredProviderIds(activationSourceConfig)
]);
if (!lookup.canResolveDirectProviderIds(configuredProviderIds, scope)) return;
lookup.addDirectProviderOwners(scope, configuredProviderIds);
const workerProviderIds = normalizeWorkerProviderIds([
...collectConfiguredWorkerProviderIds(params.config),
...collectConfiguredWorkerProviderIds(activationSourceConfig),
...params.workerProviderIds ?? []
]);
if (!lookup.hasProviderContributionOwners(workerProviderIds)) return;
lookup.addProviderContributionOwners(scope, workerProviderIds);
const configuredShorthandModelIds = sortUniquePluginIds([...collectValidationConfiguredShorthandModelIds(params.config), ...collectValidationConfiguredShorthandModelIds(activationSourceConfig)]);
if (!lookup.hasShorthandModelOwners(configuredShorthandModelIds)) return;
lookup.addShorthandModelOwners(scope, configuredShorthandModelIds);
addRequiredAgentHarnessPluginIds(scope, {
activationSourceConfig,
config: params.config,
index: params.index,
pluginsConfig,
activationSource: {
plugins: activationSourcePlugins,
rootConfig: activationSourceConfig
},
env: params.env,
platform: params.platform
});
const deniedPluginIds = /* @__PURE__ */ new Set([...pluginsConfig.deny, ...activationSourcePlugins.deny]);
for (const pluginId of deniedPluginIds) scope.delete(pluginId);
for (const [pluginId, entry] of Object.entries(pluginsConfig.entries)) if (entry?.enabled === false) scope.delete(pluginId);
for (const [pluginId, entry] of Object.entries(activationSourcePlugins.entries)) if (entry?.enabled === false) scope.delete(pluginId);
if (!lookup.hasInstalledPluginIds(scope)) return;
return sortUniquePluginIds(scope);
}
function createGatewayStartupMetadataPluginIdScope(params) {
const workerProviderIds = normalizeWorkerProviderIds(params.workerProviderIds ?? []);
return { resolve: ({ index }) => resolveGatewayStartupMetadataPluginIds({
config: params.config,
...params.activationSourceConfig !== void 0 ? { activationSourceConfig: params.activationSourceConfig } : {},
env: params.env,
index,
...workerProviderIds.length > 0 ? { workerProviderIds } : {},
...params.platform !== void 0 ? { platform: params.platform } : {},
...params.ambientEnvTriggers !== void 0 ? { ambientEnvTriggers: params.ambientEnvTriggers } : {}
}) };
}
//#endregion
//#region src/plugins/gateway-startup-plugin-plan.ts
function resolveChannelPluginIdsFromRegistry(params) {
const { manifestRegistry } = params;
return manifestRegistry.plugins.filter((plugin) => plugin.channels.length > 0).map((plugin) => plugin.id);
}
function resolveGatewayStartupPluginPlanFromRegistry(params) {
const channelPluginIds = resolveChannelPluginIdsFromRegistry({ manifestRegistry: params.manifestRegistry });
const activationSourceConfig = params.activationSourceConfig ?? params.config;
const configuredChannelIds = new Set(listGatewayActivatedChannelIds({
config: params.config,
activationSourceConfig,
env: params.env,
ambientEnvTriggers: params.ambientEnvTriggers,
manifestRecords: params.manifestRegistry.plugins,
discovery: params.discovery
}));
const normalizePluginId = params.normalizePluginId ?? createPluginRegistryIdNormalizer(params.index, { manifestRegistry: params.manifestRegistry });
const pluginsConfig = normalizePluginsConfigWithResolverCore(params.config.plugins, normalizePluginId);
const activationSourcePlugins = normalizePluginsConfigWithResolverCore(activationSourceConfig.plugins, normalizePluginId);
const activationSource = {
plugins: activationSourcePlugins,
rootConfig: activationSourceConfig
};
const manifestLookup = createManifestRegistryLookup(params.manifestRegistry);
const explicitlyDisabledChannelIds = new Set(listExplicitlyDisabledChannelIdsForConfig(params.config));
const requiredAgentHarnessRuntimes = new Set(collectConfiguredAgentHarnessRuntimes(activationSourceConfig));
const configuredSpeechProviderIds = collectConfiguredSpeechProviderIds(activationSourceConfig);
const configuredWebSearchProviderIds = collectConfiguredWebSearchProviderIds(activationSourceConfig);
const configuredModelProviderIds = collectConfiguredAgentModelProviderIds(activationSourceConfig, params.manifestRegistry);
const configuredGenerationProviderIds = collectConfiguredGenerationProviderIds(activationSourceConfig);
const configuredVoiceProviderIds = collectConfiguredVoiceProviderIds(activationSourceConfig);
const configuredMemoryEmbeddingProviderIds = collectConfiguredMemoryEmbeddingProviderIds(activationSourceConfig);
const configuredWorkerProviderIds = /* @__PURE__ */ new Set([...collectConfiguredWorkerProviderIds(activationSourceConfig), ...normalizeWorkerProviderIds(params.workerProviderIds ?? [])]);
const memorySlotStartupPluginId = resolveMemorySlotStartupPluginId({
activationSourceConfig,
activationSourcePlugins,
normalizePluginId
});
const startupDreamingPluginIds = resolveAuthorizedGatewayStartupDreamingPluginIds({
config: params.config,
pluginsConfig,
activationSource,
activationSourcePlugins,
selectedMemoryPluginId: memorySlotStartupPluginId,
index: params.index,
platform: params.platform
});
const contextEngineSlotStartupPluginId = resolveContextEngineSlotStartupPluginId({
activationSourceConfig,
activationSourcePlugins,
normalizePluginId
});
const pluginIds = [];
for (const plugin of params.index.plugins) {
const manifest = findManifestPlugin(manifestLookup, plugin.pluginId);
const hasEnabledManifestChannel = manifest?.channels?.some((channelId) => {
const normalizedChannelId = normalizeOptionalLowercaseString(channelId);
return normalizedChannelId ? !explicitlyDisabledChannelIds.has(normalizedChannelId) : false;
}) ?? false;
const hasExplicitlyEnabledNonBundledChannel = plugin.origin !== "bundled" && hasEnabledManifestChannel && pluginsConfig.entries[plugin.pluginId]?.enabled === true && !pluginsConfig.deny.includes(plugin.pluginId);
if (hasConfiguredStartupChannel({
plugin,
manifestLookup,
configuredChannelIds
}) || hasExplicitlyEnabledNonBundledChannel) {
if (canStartConfiguredChannelPlugin({
id: plugin.pluginId,
origin: plugin.origin,
channelIds: plugin.origin === "bundled" ? listManifestChannelIds(manifestLookup, plugin.pluginId) : plugin.contributions?.channels,
config: params.config,
pluginsConfig,
activationSource
})) pluginIds.push(plugin.pluginId);
continue;
}
if (canStartGatewayStartupPlugin({
plugin,
manifest,
config: params.config,
pluginsConfig,
activationSource,
env: params.env,
requiredAgentHarnessRuntimes,
configuredWorkerProviderIds,
configuredSpeechProviderIds,
configuredWebSearchProviderIds,
configuredModelProviderIds,
configuredGenerationProviderIds,
configuredVoiceProviderIds,
configuredMemoryEmbeddingProviderIds,
platform: params.platform
})) {
pluginIds.push(plugin.pluginId);
continue;
}
if (!shouldConsiderForGatewayStartup({
plugin,
manifest,
startupDreamingPluginIds,
memorySlotStartupPluginId,
contextEngineSlotStartupPluginId
})) continue;
if (startupDreamingPluginIds.has(plugin.pluginId)) {
pluginIds.push(plugin.pluginId);
continue;
}
const startupPolicyOrigin = plugin.origin === "bundled" && plugin.packageBuild?.bundledDist === false ? "workspace" : plugin.origin;
const activationState = resolveEffectivePluginActivationState({
id: plugin.pluginId,
origin: startupPolicyOrigin,
channelIds: plugin.contributions?.channels,
config: pluginsConfig,
rootConfig: params.config,
enabledByDefault: isPluginEnabledByDefaultForPlatform(plugin, params.platform),
activationSource
});
if (!activationState.enabled) continue;
if (startupPolicyOrigin !== "bundled" ? activationState.explicitlyEnabled : activationState.source === "explicit" || activationState.source === "default") pluginIds.push(plugin.pluginId);
}
return {
channelPluginIds,
pluginIds
};
}
//#endregion
//#region src/plugins/gateway-startup-plugin-loader.ts
function resolveChannelPluginIds(params) {
return [...loadGatewayStartupPluginPlan(params).channelPluginIds];
}
function resolveGatewayStartupPluginIdsFromRegistry(params) {
return [...resolveGatewayStartupPluginPlanFromRegistry(params).pluginIds];
}
function loadGatewayStartupPluginPlanWithMetadata(params) {
const snapshotConfig = params.activationSourceConfig ?? params.config;
const metadataSnapshot = params.metadataSnapshot ?? resolvePluginMetadataSnapshot({
config: snapshotConfig,
workspaceDir: params.workspaceDir,
env: params.env,
allowWorkspaceScopedCurrent: params.workspaceDir === void 0,
...params.index ? { index: params.index } : {},
pluginIdScope: createGatewayStartupMetadataPluginIdScope({
config: params.config,
...params.activationSourceConfig !== void 0 ? { activationSourceConfig: params.activationSourceConfig } : {},
env: params.env,
workerProviderIds: params.workerProviderIds ?? [],
...params.platform !== void 0 ? { platform: params.platform } : {},
...params.ambientEnvTriggers !== void 0 ? { ambientEnvTriggers: params.ambientEnvTriggers } : {}
})
});
return {
plan: resolveGatewayStartupPluginPlanFromRegistry({
config: params.config,
...params.activationSourceConfig !== void 0 ? { activationSourceConfig: params.activationSourceConfig } : {},
env: params.env,
index: metadataSnapshot.index,
manifestRegistry: metadataSnapshot.manifestRegistry,
discovery: metadataSnapshot.discovery,
normalizePluginId: metadataSnapshot.normalizePluginId,
workerProviderIds: params.workerProviderIds ?? [],
platform: params.platform,
ambientEnvTriggers: params.ambientEnvTriggers
}),
metadataSnapshot
};
}
function loadGatewayStartupPluginPlan(params) {
return loadGatewayStartupPluginPlanWithMetadata(params).plan;
}
//#endregion
export { resolveChannelPluginIdsFromRegistry as a, resolveGatewayStartupMetadataPluginIds as c, resolveGatewayStartupPluginIdsFromRegistry as i, loadGatewayStartupPluginPlanWithMetadata as n, resolveGatewayStartupPluginPlanFromRegistry as o, resolveChannelPluginIds as r, createGatewayStartupMetadataPluginIdScope as s, loadGatewayStartupPluginPlan as t };