export interface InteractivePrompt {
    promptId: string;
    origin: 'cli' | 'mcp' | 'agent';
    providerType: string;
    createdAt: number;
    questions: InteractiveQuestion[];
}
export interface InteractiveQuestion {
    questionId: string;
    question: string;
    header?: string;
    multiSelect: boolean;
    options: InteractiveOption[];
    allowFreeform?: boolean;
}
export interface InteractiveOption {
    label: string;
    description?: string;
    preview?: string;
}
export interface InteractivePromptResponse {
    promptId: string;
    answers: Record<string, InteractiveAnswer>;
}
export interface InteractiveAnswer {
    selectedLabels: string[];
    freeformText?: string;
}
export declare function normalizeInteractivePrompt(raw: unknown): InteractivePrompt | null;
export declare function normalizeInteractivePromptResponse(raw: unknown): InteractivePromptResponse;
export declare function buildClaudeInteractiveToolResult(response: InteractivePromptResponse): string;
export interface ClaudeInteractiveTuiPage {
    screenText: string;
    header?: string;
}
/**
 * Decide whether a captured claude-cli AskUserQuestion TUI page is multi-select.
 *
 * The original heuristic only matched the footer hint `/Space to select|toggle
 * selections/i`. That string drifts between claude-cli versions, so when it
 * changed the dashboard silently fell back to multiSelect:false and rendered
 * single-select (radio) controls even though the on-screen picker showed
 * checkboxes — the user could not check more than one box. (The CLI's own
 * terminal still rendered `[ ]` correctly because it never depends on this
 * parse.)
 *
 * Make detection robust by ALSO recognising the actual checkbox markers the
 * multi-select picker draws on its option rows (`[ ]` / `[x]` / `☐` / `☒` /
 * `◻` / `◼`). Single-select rows are drawn with a `❯`/number cursor only and
 * carry none of these box glyphs, so their presence is a reliable signal. The
 * broadened footer patterns ("Space to", "toggle", "select multiple") are kept
 * as a secondary signal for layouts that render markers differently.
 */
export declare function detectClaudeTuiMultiSelect(screenText: string): boolean;
/**
 * Read the question the live claude TUI picker is CURRENTLY focused on, plus
 * whether that focused page renders multi-select checkbox markers.
 *
 * Used to repair a multi-question prompt after the fact: when the daemon
 * Tab-captures pages 2..N it snapshots ~120ms after the Tab keypress, before
 * the newly-focused page's option-row checkbox column has redrawn — so those
 * questions get frozen as multiSelect:false even though the picker is
 * multi-select. Re-reading the focused page on a later status tick (once it has
 * settled) lets us attribute the now-visible glyphs to the matching question
 * and upgrade just that one. Returns null when no picker question is on screen.
 */
export declare function readFocusedClaudeTuiQuestion(screenText: string): {
    question: string;
    header?: string;
    multiSelect: boolean;
} | null;
export declare function detectClaudeAskUserQuestionPromptFromTuiPages(pages: ClaudeInteractiveTuiPage[], options: {
    promptId: string;
    providerType?: string;
    createdAt?: number;
}): InteractivePrompt | null;
export declare function buildClaudeInteractiveTuiAnswerSteps(prompt: InteractivePrompt, response: InteractivePromptResponse): string[];
export declare function interactivePromptFromClaudeAskUserQuestion(input: unknown, options: {
    promptId: string;
    providerType: string;
    createdAt?: number;
    origin?: InteractivePrompt['origin'];
}): InteractivePrompt | null;
export declare function detectClaudeAskUserQuestionPromptFromJson(value: unknown, providerType?: string): InteractivePrompt | null;
