/** * `peaks sub-agent heartbeat` — G6: append a heartbeat to a dispatch record. * * to honor the 800-line file cap. The heartbeat is fire-and-forget; the * parent Dispatcher polls the record during the batch-sync wait and * renders a status line. Sub-agents should call this at least every * 30s (configurable via SKILL.md heartbeatIntervalSec). * * R-2 path guard: `assertSafeDispatchRecordPath` ensures the record * lives under `.peaks/_sub_agents/` so a malicious `--record` arg can't * point at a sensitive file outside the runtime tree. * * Slice c1-eslint-family-sweep / leaf c1w1-heartbeat-commands: the action the * `.action()` below wires lives in `heartbeat-commands-action.ts` (write path) * and `heartbeat-commands-validation.ts` (argument checks and reject envelopes) * — the option surface and the graph-node projections stayed here. */ import type { Command } from 'commander'; import { type ProgramIO } from '../cli-helpers.js'; export declare function registerHeartbeatCommand(parent: Command, io: ProgramIO): void; /** The graph-node input both projections below read. */ type GraphNodeHeartbeatInput = { dispatchRef?: string; graphNodeId?: string; status?: string; now?: string; lastHeartbeat?: string; }; /** * Programmatic `heartbeat` projection used by * tests/integration/sub-agent-graph-heartbeat.test.ts. */ export declare function heartbeat(input: GraphNodeHeartbeatInput): Record; /** * Programmatic `markLost` projection. Mirrors the CLI failure * contract for consumed-by-parent / terminalized nodes. */ export declare function markLost(input: { dispatchRef?: string; graphNodeId?: string; status?: string; reason?: string; }): Record; export {};