/**
 * RemoteCloseAudit — the RELAYING machine's own record of every relayed
 * session-close order (REMOTE-SESSION-CLOSE-SPEC §2.3).
 *
 * The owning machine's reap-log is the authoritative record of the KILL; this
 * JSONL is the record of the ORDER. "A session must never disappear without a
 * trace naming where the order came from" must hold at BOTH ends — without
 * this, a compromised relayer's kill sweep leaves no local manifest.
 *
 * Append-only history; writes are best-effort (an audit hiccup must not block
 * the close path) but a failed append logs loudly — an auditless destructive
 * relay is worth a console line.
 */
export interface RemoteCloseAuditEntry {
    ts: string;
    targetMachineId: string;
    targetNickname?: string;
    sessionUuid: string;
    sessionName?: string;
    /** What the relay observed: the peer's word, or the transport failure class.
     *  'unknown' = timeout (the peer may be mid-kill — delivery honesty). */
    outcome: 'closed' | 'already-closed' | 'unreachable' | 'url-rejected' | 'unauthorized' | 'peer-error' | 'unknown';
    /** Peer HTTP status when one was received. */
    peerStatus?: number;
}
export declare class RemoteCloseAudit {
    private readonly log;
    private readonly filePath;
    constructor(stateDir: string, log?: (msg: string) => void);
    record(entry: Omit<RemoteCloseAuditEntry, 'ts'>): void;
    /** Read the tail (observability/tests). */
    read(limit?: number): RemoteCloseAuditEntry[];
}
//# sourceMappingURL=RemoteCloseAudit.d.ts.map