/**
 * ConfigureSupervisorUseCase
 *
 * Creates or replaces a {@link SupervisorPolicy} for the
 * (scopeType, scopeId?, featureId?) scope. Validation is performed
 * before any persistence so callers see typed
 * {@link InvalidSupervisorPolicyError} rejections rather than partial
 * writes.
 *
 * Behaviour:
 *  - When no policy exists for the scope, a new row is inserted with
 *    `enabled = true` (callers explicitly disable via
 *    DisableSupervisorUseCase).
 *  - When a policy already exists for the scope, all configurable
 *    fields are replaced and `updatedAt` is bumped — `id` and
 *    `createdAt` are preserved.
 */
import type { ISupervisorPolicyRepository } from '../../ports/output/repositories/supervisor-policy-repository.interface.js';
import { SupervisorAutonomy, type SupervisorPolicy, type SupervisorScopeType } from '../../../domain/generated/output.js';
/** Approval-gate keys recognised by gateAuthority overrides. */
declare const VALID_GATE_KEYS: readonly ["prd", "plan", "merge"];
type GateKey = (typeof VALID_GATE_KEYS)[number];
export interface SupervisorPolicyRule {
    ruleId: string;
    condition: string;
    action: string;
}
export interface ConfigureSupervisorInput {
    scopeType: SupervisorScopeType;
    scopeId?: string;
    featureId?: string;
    autonomyLevel: SupervisorAutonomy;
    modelId?: string;
    promptVersion?: string;
    gateAuthority?: Partial<Record<GateKey, SupervisorAutonomy>>;
    policyRules?: SupervisorPolicyRule[];
    notificationOverrides?: Record<string, boolean>;
}
export declare class ConfigureSupervisorUseCase {
    private readonly policyRepository;
    constructor(policyRepository: ISupervisorPolicyRepository);
    execute(input: ConfigureSupervisorInput): Promise<SupervisorPolicy>;
}
export {};
//# sourceMappingURL=configure-supervisor.use-case.d.ts.map