import type { ExtensionContext } from "@earendil-works/pi-coding-agent"; import type { SenaiState } from "../core/state.js"; export declare const COMPLETED_STAGE_ARTIFACT: Record; /** Hard stage-order gate for the manual stage commands. The state machine * (STAGE_TRANSITIONS) is the only source of stage truth; a manual command * may only run from the exact stage its target advances from. Out-of-order * invocation is a hard error naming the exact command that must run first * — the approve flow (/senai-approve) is the only way forward. */ export declare function ensureStage(_cwd: string, state: SenaiState, targetStage: "planned" | "implemented" | "documented", command?: string): { ok: true; state: SenaiState; } | { ok: false; reason: string; }; export declare function checkStageArtifact(state: SenaiState, stage: "plan" | "implement" | "document" | "deliver", ctx: ExtensionContext): { ok: true; } | { ok: false; }; export declare function listMissingStageArtifacts(cwd: string, runId: string, stage: "plan" | "implement" | "document" | "deliver"): string[]; export declare function ensureAgentConfig(cwd: string, ctx: ExtensionContext): boolean; /** Interactive commands (pickers, list editors, input prompts) cannot run in * headless/print mode: every prompt would auto-cancel silently. Returns true * when a UI is present; otherwise warns and returns false so the caller bails. * Strict `=== false` check so older test mocks without the flag pass through. */ export declare function hasInteractiveUI(ctx: ExtensionContext): boolean;