import { z } from 'zod';
import type { Claim, Claimant, Decision, HandOff, Occurrence, Outcome } from '../policy/types.ts';
import { type Wire } from './policy.ts';
/** Decode one stateless approval result from the shared policy stream. */
export declare function approvalQuery<T>(query: Wire, result: z.ZodType<T>): T;
/** One existing record, with an invocation-local identity distinct from its public id. */
export declare function recordWire(record: Decision, key: number, rule: number | null, argv: readonly string[], cwd: string): Wire;
/** Mechanical identity transport for a synchronous Rust approval query. */
export declare class ApprovalSnapshot {
    private readonly records;
    private static readonly RESPONSE;
    readonly recordObjects: Decision[];
    readonly holderObjects: HandOff[];
    readonly claimObjects: Claim[];
    readonly occurrenceObjects: Occurrence[];
    private readonly recordKeys;
    private readonly holderKeys;
    private readonly claimKeys;
    private readonly occurrenceKeys;
    private readonly live;
    constructor(records?: readonly Decision[], live?: Iterable<HandOff>, roots?: readonly HandOff[]);
    recordKey(record: Decision): number;
    holderKey(holder: HandOff): number;
    occurrenceKey(occurrence: Occurrence | null): number | null;
    record(key: number): Decision;
    holder(key: number): HandOff;
    private originalClaim;
    private recordsWire;
    get wire(): Wire;
    plan(recordRules: readonly number[], rules: readonly number[], argv: readonly string[], cwd: string, claimant: Claimant | null): {
        answers: (Decision | null)[];
        denied: number | null;
        missing: number[];
        once: Decision[];
        waiting: (Decision | null)[];
        claim: {
            records: Decision[];
            live: HandOff[];
        } | null;
    };
    waiting(argv: readonly string[], cwd: string): Decision | null;
    answer(id: string, outcome: Outcome): Decision | null;
    claim(holder: HandOff, records: readonly Decision[]): {
        records: Decision[];
        live: HandOff[];
    };
    split(holder: HandOff, scope: Occurrence): Claim[];
    handUp(holder: HandOff): {
        parent: HandOff;
        claims: Claim[];
        live: HandOff[];
    };
    revoke(holder: HandOff): Decision[];
}
//# sourceMappingURL=approvals.d.ts.map