UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

415 lines (414 loc) 21.6 kB
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 };