import type { Persona } from './PersonaRouter';
export interface ExecuteOptions {
    /** Hard cap on iterations. Default 10. */
    maxIters?: number;
    /** Force a specific persona, ignoring the auto-picked sequence. */
    persona?: Persona;
    /** Stop after this persona — skips later personas (e.g. skip sentinel QA). */
    stopAfter?: Persona;
    /** Allow dirty working tree. Default false (refuses). */
    force?: boolean;
    /** Skip source mutations — only run tests for already-checked ACs. */
    dryRunTests?: boolean;
    /** Just print the plan + persona pick, don't run. */
    planOnly?: boolean;
    /** Host adapter override (claude/gemini/codex/mock). */
    adapter?: 'claude' | 'gemini' | 'codex' | 'mock';
    /** Hard ceiling on adapter wallclock per iteration. */
    iterTimeoutMs?: number;
    /** Working dir for git operations + adapter spawn. Defaults to cwd. */
    cwd?: string;
}
export interface ExecuteResult {
    ok: boolean;
    storyId: string;
    status: 'completed' | 'halted' | 'plan-only' | 'failed';
    reason?: string;
    iterations: number;
    acsCheckedThisRun: number;
    commits: string[];
    durationMs: number;
    branch?: string;
    errors?: string[];
}
export declare class StoryExecutor {
    /**
     * Run the autonomous loop on the named story id.
     */
    run(storyId: string, opts?: ExecuteOptions): Promise<ExecuteResult>;
    /** Construct the per-iteration prompt fed to the host CLI. */
    private buildPrompt;
    /** Map persona → ModelTierRouter category, return adapter name. */
    private routerPickAdapter;
    /** Spawn a test command via the user's shell. */
    private runTestCmd;
    private haltWithReason;
}
