UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

51 lines (50 loc) 2.5 kB
import { n as normalizeAgentId } from "./agent-id-CeT3w4ap.js"; import { k as withAgentRosterFactsBatch } from "./agent-scope-config-DcbEhP0R.js"; import "./session-key-BnWWjqNc.js"; import { c as resolveHeartbeatPromptCore } from "./heartbeat-ofet59jF.js"; import { a as tryResolveAmbientHeartbeatAgentId, i as resolveHeartbeatIntervalMs, n as resolveHeartbeatAgents, r as resolveHeartbeatConfig } from "./heartbeat-config-DYNUPVum.js"; //#region src/infra/heartbeat-summary-projection.ts /** * Heartbeat enrollment and summary projection shared by the public * heartbeat-summary module and the health/status snapshot builders. Lives * outside heartbeat-summary.ts because that module is wildcard re-exported by * the plugin SDK: the fleet-wide resolver is an internal snapshot helper, not * public API, and must not widen the SDK surface. */ const DEFAULT_HEARTBEAT_TARGET = "owner"; function enrolledHeartbeatAgentIds(cfg) { return new Set(resolveHeartbeatAgents(cfg).map((agent) => agent.agentId)); } function isEnrolledHeartbeatAgent(cfg, agentId, enrolled) { const resolvedAgentId = agentId ?? tryResolveAmbientHeartbeatAgentId(cfg); return resolvedAgentId !== void 0 && enrolled.has(normalizeAgentId(resolvedAgentId)); } function buildHeartbeatSummary(cfg, agentId, enrolled) { const merged = resolveHeartbeatConfig(cfg, agentId); const everyMs = resolveHeartbeatIntervalMs(cfg, void 0, merged); const enabled = isEnrolledHeartbeatAgent(cfg, agentId, enrolled) && everyMs !== null; return { enabled, every: enabled ? merged?.every ?? "30m" : "disabled", everyMs: enabled ? everyMs : null, prompt: resolveHeartbeatPromptCore(merged?.prompt), target: merged?.target ?? DEFAULT_HEARTBEAT_TARGET, model: merged?.model, session: merged?.session, ackMaxChars: 300 }; } /** * Display-ready heartbeat settings for many agents from one roster pass, in * input order. Health and status project every configured agent; resolving * enrollment per agent re-walks the roster each time, so a large fleet blocked * the Gateway event loop for tens of seconds per refresh (#137570). */ function resolveHeartbeatSummariesForAgents(cfg, agentIds) { return withAgentRosterFactsBatch(cfg, () => { const enrolled = enrolledHeartbeatAgentIds(cfg); return agentIds.map((agentId) => buildHeartbeatSummary(cfg, agentId, enrolled)); }); } //#endregion export { resolveHeartbeatSummariesForAgents as i, enrolledHeartbeatAgentIds as n, isEnrolledHeartbeatAgent as r, buildHeartbeatSummary as t };