UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

180 lines (179 loc) 9.34 kB
import { T as tryResolveConfiguredAgentWorkspaceDir } from "./agent-scope-config-DcbEhP0R.js"; import { n as resolveDefaultAgentWorkspaceDir } from "./workspace-default-DPT1Dhad.js"; import { i as getGatewayPluginMetadataSnapshot } from "./current-plugin-metadata-state-B1UoAr4G.js"; import { f as extractPluginInstallRecordsFromInstalledPluginIndex } from "./installed-plugin-index-wrDsjyMD.js"; import { t as completePluginMetadataSnapshot } from "./plugin-metadata-snapshot-w-4EjxI4.js"; import "./agent-scope-DbtJyKUL.js"; import { r as listAmbientOnlyConfiguredChannelIds } from "./channel-presence-policy-_eDSlojg.js"; import { O as setActivePluginRegistry, u as getActivePluginRegistry } from "./runtime-BL4wZfTq.js"; import { t as createEmptyPluginRegistry } from "./registry-empty-55wlVNzO.js"; import { D as collectRegisteredEmbeddingProviderIds, O as collectUnregisteredConfiguredMemoryEmbeddingProviders } from "./gateway-startup-plugin-config-Bq9ZdScF.js"; import "./loader-DPiOPJjR.js"; import "./channel-plugin-ids-DIyH-LxI.js"; import { a as setPluginRuntimeLoadContext } from "./load-context-BdeWeJHL.js"; import { t as loadPluginLookUpTable } from "./plugin-lookup-table-DXuDIg4u.js"; import { f as initSubagentRegistry } from "./subagent-registry-BMJDw92y.js"; import { r as resolveGatewayStartupPluginActivationConfig } from "./plugin-activation-runtime-config-BOxF5R5M.js"; import { n as listGatewayMethods } from "./server-methods-list-BTWMuzF7.js"; //#region src/gateway/server-startup-plugins.ts /** Returns the config snapshot used by channel/plugin startup maintenance. */ function resolveGatewayStartupMaintenanceConfig(params) { return params.cfgAtStart.channels === void 0 && params.startupRuntimeConfig.channels !== void 0 ? { ...params.cfgAtStart, channels: params.startupRuntimeConfig.channels } : params.cfgAtStart; } /** Runs channel, session, and pairing maintenance before plugin bootstrap. */ async function runGatewayStartupMaintenance(params) { const { assertConfiguredWorkspaceStateReady } = await import("./workspace-state-dirs-B8xySjIm.js"); assertConfiguredWorkspaceStateReady({ cfg: params.cfgAtStart }); const startupMaintenanceConfig = resolveGatewayStartupMaintenanceConfig({ cfgAtStart: params.cfgAtStart, startupRuntimeConfig: params.startupRuntimeConfig }); if (!params.minimalTestGateway || startupMaintenanceConfig.channels !== void 0) { const { runChannelPluginStartupMaintenance } = await import("./lifecycle-startup-ChgWZSWU.js"); const startupTasks = [runChannelPluginStartupMaintenance({ cfg: startupMaintenanceConfig, env: process.env, log: params.log })]; if (!params.minimalTestGateway) { const { runStartupSessionMigration } = await import("./server-startup-session-migration-CXGhrUP8.js"); startupTasks.push(runStartupSessionMigration({ cfg: params.cfgAtStart, env: process.env, log: params.log })); const { migrateLegacyDevicePairingStore } = await import("./device-pairing-migration-58_k-NjV.js"); const { migrateLegacyNodePairingStore } = await import("./node-pairing-migration-B77whfwU.js"); startupTasks.push(migrateLegacyDevicePairingStore({ log: params.log }).then(() => migrateLegacyNodePairingStore({ log: params.log }).then(() => void 0, (error) => { params.log.warn(`node pairing store migration failed: ${String(error)}`); }), (error) => { params.log.warn(`device pairing store migration failed: ${String(error)}`); })); } await Promise.all(startupTasks); } } /** Builds plugin startup state and gateway method lists before the server binds. */ async function prepareGatewayPluginBootstrap(params) { const activationSourceConfig = params.activationSourceConfig ?? params.cfgAtStart; initSubagentRegistry(); const gatewayPluginConfig = params.minimalTestGateway ? params.cfgAtStart : resolveGatewayStartupPluginActivationConfig({ runtimeConfig: params.cfgAtStart, activationSourceConfig, env: process.env, ...params.pluginMetadataSnapshot?.manifestRegistry ? { manifestRegistry: params.pluginMetadataSnapshot.manifestRegistry } : {}, discovery: params.pluginMetadataSnapshot?.discovery, ambientEnvTriggers: params.ambientEnvTriggers }); const pluginsGloballyDisabled = gatewayPluginConfig.plugins?.enabled === false; const pluginWorkspaceDir = tryResolveConfiguredAgentWorkspaceDir(gatewayPluginConfig); const defaultWorkspaceDir = pluginWorkspaceDir ?? resolveDefaultAgentWorkspaceDir(); const pluginLookUpTable = params.minimalTestGateway || pluginsGloballyDisabled ? void 0 : loadPluginLookUpTable({ config: gatewayPluginConfig, workspaceDir: pluginWorkspaceDir, env: process.env, activationSourceConfig, metadataSnapshot: params.pluginMetadataSnapshot, workerProviderIds: params.workerProviderIds ?? [], ambientEnvTriggers: params.ambientEnvTriggers }); const pluginManifestRecords = pluginLookUpTable?.manifestRegistry.plugins ?? params.pluginMetadataSnapshot?.manifestRegistry.plugins ?? []; const startupPluginIds = [...pluginLookUpTable?.startup.pluginIds ?? []]; const ambientAutostartSuppressedChannelIds = params.ambientEnvTriggers === "suppress" ? new Set(listAmbientOnlyConfiguredChannelIds({ config: params.cfgAtStart, activationSourceConfig, env: process.env, includePersistedAuthState: false, manifestRecords: pluginManifestRecords })) : /* @__PURE__ */ new Set(); const baseMethods = listGatewayMethods(); const emptyPluginRegistry = createEmptyPluginRegistry(); const pluginRegistry = params.minimalTestGateway && !pluginsGloballyDisabled ? getActivePluginRegistry() ?? emptyPluginRegistry : emptyPluginRegistry; const metadataSnapshot = getGatewayPluginMetadataSnapshot() ?? completePluginMetadataSnapshot({ snapshot: pluginLookUpTable ?? params.pluginMetadataSnapshot, config: activationSourceConfig, env: process.env, workspaceDir: defaultWorkspaceDir }); setPluginRuntimeLoadContext(pluginRegistry, { rawConfig: params.cfgAtStart, config: gatewayPluginConfig, activationSourceConfig, autoEnabledReasons: {}, workspaceDir: pluginWorkspaceDir, env: process.env, logger: params.log, metadataSnapshot, manifestRegistry: metadataSnapshot?.manifestRegistry, installRecords: metadataSnapshot ? extractPluginInstallRecordsFromInstalledPluginIndex(metadataSnapshot.index) : void 0, preferBuiltPluginArtifacts: true }); setActivePluginRegistry(pluginRegistry); return { gatewayPluginConfigAtStart: gatewayPluginConfig, defaultWorkspaceDir, pluginWorkspaceDir, startupPluginIds, pluginManifestRecords, pluginMetadataSnapshot: metadataSnapshot, pluginLookUpTable, baseMethods, pluginRegistry, baseGatewayMethods: baseMethods, ambientAutostartSuppressedChannelIds }; } /** * Warn when `memory.search.provider` selects a memory embedding provider * that no loaded plugin registered. Without the owning plugin, `active-memory` * cannot embed and silently falls back to keyword/FTS-only recall. */ function warnUnregisteredConfiguredMemoryEmbeddingProviders(params) { const unregistered = collectUnregisteredConfiguredMemoryEmbeddingProviders({ config: params.config, registeredProviderIds: collectRegisteredEmbeddingProviderIds(params.pluginRegistry) }); for (const provider of unregistered) { const path = `memory.search.${provider.source}`; params.log.warn(`${path}="${provider.configuredId}" is configured, but no loaded plugin registered a memory embedding provider that can serve "${provider.configuredId}". Semantic memory recall will fall back to keyword/FTS-only search. Ensure the plugin that provides "${provider.configuredId}" is installed and enabled.`); } } /** Loads startup plugin runtimes after the gateway listener binds. */ async function loadGatewayStartupPluginRuntime(params) { const { loadGatewayStartupPlugins } = await import("./server-plugin-bootstrap-Dkzu2wb7.js"); await params.pluginRuntimeClaim?.waitForUnblocked(); if (params.pluginRuntimeClaim && !params.pluginRuntimeClaim.isCurrent()) { const currentPluginRegistry = params.getCurrentPluginRegistry?.(); if (!currentPluginRegistry) throw new Error("superseded Gateway startup cannot resolve the current plugin runtime"); return { pluginRegistry: currentPluginRegistry, gatewayMethods: params.baseMethods }; } const loaded = loadGatewayStartupPlugins({ cfg: params.cfg, activationSourceConfig: params.activationSourceConfig, workspaceDir: params.workspaceDir, log: params.log, coreGatewayMethodNames: params.coreGatewayMethodNames ?? params.baseMethods, baseMethods: params.baseMethods, ...params.hostServices !== void 0 && { hostServices: params.hostServices }, pluginIds: params.startupPluginIds, pluginLookUpTable: params.pluginLookUpTable, channelPluginLoadIntent: "full", startupTrace: params.startupTrace, ambientEnvTriggers: params.ambientEnvTriggers, ...params.resolveGatewayContext ? { resolveGatewayContext: params.resolveGatewayContext } : {} }); warnUnregisteredConfiguredMemoryEmbeddingProviders({ config: params.cfg, pluginRegistry: loaded.pluginRegistry, log: params.log }); return loaded; } //#endregion export { loadGatewayStartupPluginRuntime, prepareGatewayPluginBootstrap, resolveGatewayStartupMaintenanceConfig, runGatewayStartupMaintenance, warnUnregisteredConfiguredMemoryEmbeddingProviders };