import { canUndoFinding, notesForFinding, ReviewDecisionError, stagedDecisionForFinding, type ReviewDraft } from "../review/index.js";
export type ReviewAction = "decide" | "batch-decide" | "clear-decision" | "undo" | "update-notes" | "update-scope";
export type ReviewRequestBody = {
    action?: unknown;
    targetIds?: unknown;
    verdict?: unknown;
    reason?: unknown;
    notes?: unknown;
    scope?: unknown;
    expectedRevision?: unknown;
};
export declare class ReviewRevisionConflictError extends Error {
    readonly draft: ReviewDraft;
    readonly changedDecisions: ReviewDraft["decisions"];
    readonly code: "revision-conflict";
    constructor(draft: ReviewDraft, changedDecisions: ReviewDraft["decisions"]);
}
export declare class NonAdjudicableTargetError extends Error {
    readonly code: "non-adjudicable-target";
    readonly rejectedIds: string[];
    constructor(rejectedIds: string[]);
}
export declare class InvalidReviewRequestError extends Error {
    readonly code: string;
    constructor(code: string, message: string);
}
export type ReviewMutationResult = {
    status: "accepted";
    acceptedCount: number;
    draft: ReviewDraft;
};
export declare function serializeReviewMutation<T>(mutation: () => Promise<T>): Promise<T>;
export declare function readReviewDraft(reportDir: string): Promise<ReviewDraft>;
export declare function handleReviewMutation(reportDir: string, body: ReviewRequestBody): Promise<ReviewMutationResult>;
export declare function isNonAdjudicableTarget(reportDir: string, targetId: string): Promise<boolean>;
export { canUndoFinding, notesForFinding, stagedDecisionForFinding, ReviewDecisionError, };
//# sourceMappingURL=review.d.ts.map