UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

22 lines (21 loc) 1.3 kB
import { createHash } from "node:crypto"; //#region src/cron/heartbeat-task.ts /** Identity and execution metadata for heartbeat tasks migrated into cron. */ const HEARTBEAT_TASK_DECLARATION_PREFIX = "heartbeat-task:"; /** Whether a declaration key belongs to the doctor-owned heartbeat-task namespace. */ function isHeartbeatTaskDeclarationKey(declarationKey) { return declarationKey?.startsWith(HEARTBEAT_TASK_DECLARATION_PREFIX) === true; } /** Stable declaration identity; duplicate names add their deterministic occurrence ordinal. */ function heartbeatTaskDeclarationKey(agentId, taskName, occurrenceIndex = 0) { const hash = createHash("sha256").update(agentId).update("\0").update(taskName); if (occurrenceIndex > 0) hash.update("\0").update(String(occurrenceIndex)); const identity = hash.digest("hex").slice(0, 24); return `${HEARTBEAT_TASK_DECLARATION_PREFIX}${agentId}:${identity}`; } /** Migrated jobs keep public system-event payloads so cron tools can edit or remove them normally. */ function isHeartbeatTaskCronJob(job) { return isHeartbeatTaskDeclarationKey(job.declarationKey) && job.payload.kind === "systemEvent" && job.sessionTarget === "main"; } //#endregion export { heartbeatTaskDeclarationKey as n, isHeartbeatTaskCronJob as r, HEARTBEAT_TASK_DECLARATION_PREFIX as t };