openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
50 lines (49 loc) • 2.58 kB
JavaScript
import { l as normalizeOptionalString } from "./string-coerce-1VuiLaaR.mjs";
import { t as createSubsystemLogger } from "./subsystem-I-uqdx4f.mjs";
import { n as normalizeAgentId } from "./agent-id-D1-Q6vR4.mjs";
import "./session-key-C09ow4h0.mjs";
import { i as listAgentIds } from "./agent-roster-BXD1uMJD.mjs";
import "./agent-scope-CG17uXFn.mjs";
//#region src/infra/heartbeat-log.ts
const heartbeatLog = createSubsystemLogger("gateway/heartbeat");
//#endregion
//#region src/infra/heartbeat-wake-policy.ts
function inferHeartbeatWakeSourceFromReason(reason) {
const trimmed = (reason ?? "").trim();
if (trimmed === "exec-event") return "exec-event";
if (trimmed.startsWith("cron:")) return "cron";
if (trimmed === "wake" || trimmed.startsWith("hook:")) return "hook";
if (trimmed.startsWith("acp:spawn:")) return "acp-spawn";
if (trimmed.startsWith("session-state:")) return "session-state";
}
function resolveHeartbeatWakePayloadFlags(params) {
const source = params.source ?? inferHeartbeatWakeSourceFromReason(params.reason);
const reason = (params.reason ?? "").trim();
return {
isExecEventWake: source === "exec-event",
isCronWake: source === "cron",
isWakePayload: source === "hook" || source === "acp-spawn" || source === "session-state" || source === "background-task" || source === "background-task-blocked" || reason === "wake"
};
}
function isTargetedUnscheduledWake(params) {
const hasSessionTarget = normalizeOptionalString(params.sessionKey) !== void 0;
if (!hasSessionTarget && normalizeOptionalString(params.agentId) === void 0) return false;
const reason = params.reason?.trim();
switch (params.source) {
case "cron": return params.intent === "immediate" && (reason?.startsWith("cron:") ?? false);
case "manual":
case "notifications-event":
case "restart-sentinel": return params.intent === "immediate" && hasSessionTarget && reason === "wake";
case "hook": return params.intent === "immediate" && (reason?.startsWith("hook:") ?? false);
case "exec-event": return params.intent === "event" && reason === "exec-event";
case "background-task":
case "background-task-blocked": return params.intent === "immediate";
default: return false;
}
}
function isConfiguredHeartbeatAgent(cfg, agentId) {
const normalized = normalizeAgentId(agentId);
return listAgentIds(cfg).some((candidate) => normalizeAgentId(candidate) === normalized);
}
//#endregion
export { heartbeatLog as a, resolveHeartbeatWakePayloadFlags as i, isConfiguredHeartbeatAgent as n, isTargetedUnscheduledWake as r, inferHeartbeatWakeSourceFromReason as t };