/**
 * Autopilot Ken's verdict contract.
 *
 * In autopilot mode Ken never talks to the user — he auto-reviews GG Coder's
 * work and replies with exactly one of four machine-parseable verdicts. The
 * first non-empty line carries the keyword; anything after is the payload.
 *
 *   PROMPT
 *   <runnable GG Coder prompt body, 1-3 lines>
 *
 *   ALL_CLEAR
 *
 *   IGNORE
 *
 *   HUMAN
 *   <one short reason the human is needed>
 *
 * ALL_CLEAR and IGNORE both stop the cycle with nothing left to do, but they
 * mean different things to the UI: ALL_CLEAR is a verdict on real work ("GG
 * Coder built/changed something and it checks out") and renders a one-line Ken
 * marker. IGNORE means the turn was never worth reviewing in the first place
 * (small talk, a question, an ack, a mechanical operation with no code
 * changes) — it renders NOTHING, not even a marker, so trivial turns don't
 * spam the transcript with a Ken bubble that adds no information.
 *
 * Parsing is forgiving and safe-by-default: any reply we can't confidently map
 * to PROMPT, ALL_CLEAR, or IGNORE becomes a HUMAN stop, never a blind loop.
 *
 * Recovery order for prose-then-keyword drift (Ken writing commentary before
 * the verdict despite the contract): bare trailing ALL_CLEAR/IGNORE → buried
 * HUMAN → buried line-start PROMPT (uppercase, line-start only, so prose like
 * "prompt the user" can never match). HUMAN wins over PROMPT when both appear
 * — recovering a stop is always safe, recovering an action must lose ties.
 */
export type AutopilotVerdict = {
    kind: "prompt";
    body: string;
} | {
    kind: "all_clear";
} | {
    kind: "ignore";
} | {
    kind: "human";
    reason: string;
};
/**
 * Parse Autopilot Ken's raw reply into a verdict. Never throws.
 */
export declare function parseAutopilotVerdict(reply: string): AutopilotVerdict;
//# sourceMappingURL=autopilot-verdict.d.ts.map