import type { DiscoveredControl, DiscoveredControlCoverageOutcome, InteractionCoverageEvidence, InteractionCoverageKind, InteractionCoverageWitnessRef } from "./types.js";
import { type TerminalInteractionCoverageKind } from "./idempotent-state.js";
export type { DiscoveredControlCoverageOutcome, InteractionCoverageEvidence, InteractionCoverageKind, InteractionCoverageObligation, InteractionCoverageSerialization, InteractionCoverageWitnessRef, } from "./types.js";
export type { IdempotentTerminalAssessment, TerminalInteractionCoverageKind } from "./idempotent-state.js";
export { assessIdempotentTerminalState } from "./idempotent-state.js";
export type DiscoveredControlCoverageEvidence = InteractionCoverageEvidence;
export type InteractionOracleBand = "blocking" | "blocking-conditional" | "advisory";
export type OracleCoverageGapReason = "no-discoverable-contract" | InteractionCoverageKind | TerminalInteractionCoverageKind;
export type DiscoveredControlOracle = {
    kind: "aria-pressed-state-flip";
    band: "blocking";
} | {
    kind: "aria-declared-state";
    band: "advisory";
    state: string;
} | {
    kind: "required-form-validation";
    band: "blocking-conditional";
} | {
    kind: "dialog-disclosure-focus";
    band: "advisory";
} | {
    kind: "search-landmark-submit";
    band: "advisory";
} | {
    kind: "same-origin-link-navigation";
    band: "advisory";
} | {
    kind: "coverage-gap";
    reason: OracleCoverageGapReason;
    terminal?: {
        axis: string;
        value: "true" | "false";
    };
};
export type DiscoveredControlOracleObservation = {
    before?: string;
    after?: string;
    checkValidity?: boolean;
    invalidFired?: boolean;
    nativeSubmissionSuppressed?: boolean;
    explicitStateContradiction?: boolean;
    ariaModal?: boolean;
    backgroundOperable?: boolean;
    beforeOrigin?: string;
    afterOrigin?: string;
    navigated?: boolean;
    reacted?: boolean;
};
type TerminalObligation = {
    id: string;
    witnessRefs: [InteractionCoverageWitnessRef, ...InteractionCoverageWitnessRef[]];
};
type TerminalOutcome<Status extends string, Kind extends TerminalInteractionCoverageKind> = {
    status: Status;
    reason: Kind;
    phase: "terminal";
    evidence: {
        kind: Kind;
        phase: "terminal";
        obligations: [TerminalObligation, ...TerminalObligation[]];
    };
    witnessRefs: [InteractionCoverageWitnessRef, ...InteractionCoverageWitnessRef[]];
};
export type TerminalDiscoveredControlCoverageOutcome = TerminalOutcome<"coverage-incomplete", Exclude<TerminalInteractionCoverageKind, "satisfied-terminal-state">>;
export type SatisfiedTerminalEvidence = TerminalOutcome<"terminal-evidence", "satisfied-terminal-state">;
export type DiscoveredControlOracleResult = {
    kind: "pass";
    terminal?: SatisfiedTerminalEvidence;
} | {
    kind: "unproven";
    oracle: DiscoveredControlOracle["kind"];
    coverage?: DiscoveredControlCoverageOutcome | TerminalDiscoveredControlCoverageOutcome;
} | {
    kind: "finding";
    band: InteractionOracleBand;
    oracle: DiscoveredControlOracle["kind"];
};
export declare function requiresDiscoveredControlActivation(oracle: DiscoveredControlOracle): boolean;
export declare function deriveDiscoveredControlOracle(control: DiscoveredControl, options?: {
    commandControls?: boolean;
    searchSubmission?: boolean;
}): DiscoveredControlOracle;
export declare function evaluateDiscoveredControlOracle(oracle: DiscoveredControlOracle, observation: DiscoveredControlOracleObservation): DiscoveredControlOracleResult;
//# sourceMappingURL=oracles.d.ts.map