UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

102 lines (101 loc) 5.07 kB
import { c as isNixMode } from "./paths-D2sRr1a_.js"; import { n as measureStartup } from "./server-startup-trace-DfOgyIYF.js"; //#region src/gateway/server-startup-early.ts const loadRemoteSkillsRuntimeModule = async () => await import("./remote-Bba6aX84.js"); /** Start early Gateway side runtimes before the main server is fully ready. */ async function startGatewayEarlyRuntime(params) { if (!params.minimalTestGateway) await measureStartup(params.startupTrace, "runtime.early.task-state", async () => { const { ensureTaskRuntimeStateReady } = await import("./runtime-internal-CZt3etqC.js"); ensureTaskRuntimeStateReady(); }); params.swapDiscovery(await measureStartup(params.startupTrace, "runtime.early.discovery", async () => { if (params.minimalTestGateway) return null; const machineDisplayName = await measureStartup(params.startupTrace, "runtime.early.discovery.machine-name", async () => (await import("./machine-name-EP0RusdH.js")).getMachineDisplayName()); return await measureStartup(params.startupTrace, "runtime.early.discovery.start", async () => { const { startGatewayDiscovery } = await import("./server-discovery-runtime-BEtXdyTR.js"); return await startGatewayDiscovery({ machineDisplayName, port: params.port, gatewayTls: params.gatewayTls.enabled ? params.gatewayTls : void 0, gatewayDirectReachable: params.gatewayDirectReachable, discovery: params.cfgAtStart.discovery, tailscaleMode: params.tailscaleMode, gatewayDiscoveryServices: params.pluginRegistry?.gatewayDiscoveryServices, pluginRuntimeClaim: params.pluginRuntimeClaim, logDiscovery: params.logDiscovery }); }); })); let getActiveTaskCount = () => 0; if (!params.minimalTestGateway) { const [{ primeRemoteSkillsCache, setSkillsRemoteRegistry }, taskRegistryMaintenance] = await measureStartup(params.startupTrace, "runtime.early.lazy-runtime-imports", () => Promise.all([loadRemoteSkillsRuntimeModule(), import("./task-registry.maintenance-BH8D6B0k.js")])); setSkillsRemoteRegistry(params.nodeRegistry); primeRemoteSkillsCache(); taskRegistryMaintenance.configureTaskRegistryMaintenance({ runtimeAuthoritative: true }); taskRegistryMaintenance.startTaskRegistryMaintenance(); getActiveTaskCount = () => taskRegistryMaintenance.getInspectableActiveTaskRestartBlockers().length; } const skillsChangeUnsub = params.minimalTestGateway ? async () => {} : await measureStartup(params.startupTrace, "runtime.early.skills-listener", async () => { const skillsRuntimePromise = import("./refresh-DEmFkd11.js"); const remoteSkillsRuntimePromise = loadRemoteSkillsRuntimeModule(); const { closeSkillsWatchers, registerSkillsChangeListener } = await skillsRuntimePromise; const { refreshRemoteBinsForConnectedNodes } = await remoteSkillsRuntimePromise; const unregister = registerSkillsChangeListener((event) => { if (event.reason === "remote-node") { params.broadcast("skills.changed", { reason: event.reason }); return; } const existingTimer = params.getSkillsRefreshTimer(); if (existingTimer) clearTimeout(existingTimer); const nextTimer = setTimeout(() => { params.setSkillsRefreshTimer(null); refreshRemoteBinsForConnectedNodes(params.getRuntimeConfig()).then(() => { params.broadcast("skills.changed", { reason: event.reason }); }, (error) => { params.log.warn(`failed to refresh remote bins after skills change: ${String(error)}`); params.broadcast("skills.changed", { reason: event.reason }); }); }, params.skillsRefreshDelayMs); params.setSkillsRefreshTimer(nextTimer); }); return async () => { unregister(); await closeSkillsWatchers(); }; }); const startMaintenance = async (activeWorkInspectors) => { if (params.minimalTestGateway) return null; return await measureStartup(params.startupTrace, "post-ready.maintenance", async () => { const { startGatewayMaintenanceTimers } = await import("./server-maintenance-CahI1H6W.js"); return startGatewayMaintenanceTimers({ broadcast: params.broadcast, nodeSendToAllSubscribed: params.nodeSendToAllSubscribed, getPresenceVersion: params.getPresenceVersion, getHealthVersion: params.getHealthVersion, refreshGatewayHealthSnapshot: params.refreshGatewayHealthSnapshot, restartRunningChannels: params.restartRunningChannels, activeWorkInspectors, refreshPresence: params.refreshPresence, resetEventLoopHealth: params.resetEventLoopHealth, logHealth: params.logHealth, dedupe: params.dedupe, chatAbortControllers: params.chatAbortControllers, chatQueuedTurns: params.chatQueuedTurns, restartRecoveryCandidates: params.restartRecoveryCandidates, chatRunState: params.chatRunState, removeChatRun: params.removeChatRun, agentRunSeq: params.agentRunSeq, nodeSendToSession: params.nodeSendToSession, isNixMode, getRuntimeConfig: params.getRuntimeConfig }); }); }; return { getActiveTaskCount, skillsChangeUnsub, startMaintenance }; } //#endregion export { startGatewayEarlyRuntime };