/**
 * Provider ceiling adapter registry.
 *
 * Each adapter is the single source of truth for *what a provider can do* with a
 * dispatch ceiling: whether it can enforce one, by what mechanism, the valid
 * value set, and how to compile a ceiling value into dispatch arguments for a
 * given role. The resolver (`oat project dispatch-ceiling resolve`) joins stored
 * ceiling intent with these adapters to decide enforced/advisory/unsupported and
 * to produce concrete dispatch args — skills never re-implement this logic.
 *
 * Codex enforces via sync-time materialized role variants selected from matrix
 * model+effort targets. Claude enforces via the per-call Task `model` argument
 * (no variant files). Every other provider is advisory by default.
 */
export type EnforcementMechanism = 'pinned-variant' | 'model-arg' | 'none';
export type CeilingRole = 'implementer' | 'reviewer';
export interface CeilingCompileContext {
    /** The orchestrator's own tier, used to detect above-orchestrator upgrades. */
    orchestratorTier?: string;
    target?: {
        model?: string;
        effort?: string;
    } | null;
}
export type CeilingDispatchArgs = {
    variant: string;
} | {
    model: string;
} | null;
export declare function isDirectDispatchRoleName(value: string): boolean;
export interface ProviderCeilingAdapter {
    provider: string;
    supportsCeiling: boolean;
    validValues: string[];
    mechanism: EnforcementMechanism;
    /**
     * Compile a ceiling value into dispatch args for the given role, or `null`
     * when the value is invalid or the provider is advisory/unsupported.
     */
    compileToDispatchArgs(value: string, role: CeilingRole, ctx: CeilingCompileContext): CeilingDispatchArgs;
    /**
     * Whether dispatch must verify the actual model/tier before reporting
     * `enforced`. Only the upgrade path (requested tier > orchestrator tier) needs
     * verification; cap-down and lateral requests never do.
     */
    verifyOnDispatch(value: string, ctx: CeilingCompileContext): boolean;
}
/** Claude tier order, low → high, for above-orchestrator comparison. */
export declare const CLAUDE_TIER_ORDER: readonly string[];
/**
 * Look up the ceiling adapter for a provider. Unknown providers fall back to an
 * advisory no-op adapter (`supportsCeiling: false`, `mechanism: 'none'`,
 * `compileToDispatchArgs → null`).
 */
export declare function getCeilingAdapter(provider: string): ProviderCeilingAdapter;
//# sourceMappingURL=registry.d.ts.map