import { type HeartbeatRow } from './heartbeat-store.js';
export interface RunResult {
    status: 'skipped' | 'delivered' | 'suppressed' | 'no-agent' | 'failed';
    reason: string;
    /** Populated only when status='delivered'. */
    deliveredText?: string;
    /** Populated when status='delivered' or 'suppressed' so /heartbeat
     *  run-now can print "the gate / sink got this much". */
    rawAgentOutput?: string;
}
/**
 * Single binding tick. ALL exceptions caught + logged + stamped onto
 * the row; never throws. Returns the result so the slash command's
 * `/heartbeat run-now` can show it back to the user synchronously.
 */
export declare function runForBinding(row: HeartbeatRow): Promise<RunResult>;
/**
 * One scheduler pass. Picks up to 50 due bindings and runs them
 * sequentially; concurrent ticks on the same scheduler are intentional
 * (avoids stampedes on the user's agent, keeps memory bounded). Returns
 * a summary so tests can assert on it.
 */
export declare function tickOnce(): Promise<{
    scanned: number;
    results: Record<string, number>;
}>;
export declare function startHeartbeatScheduler(): void;
export declare function stopHeartbeatScheduler(): void;
/** Reflect current scheduler state for /heartbeat status output. */
export declare function schedulerInfo(): {
    enabled: boolean;
    running: boolean;
    periodMs: number;
};
//# sourceMappingURL=heartbeat.d.ts.map