import { type AutocompleteProvider, type SlashCommand } from "@pk-nerdsaver-ai/pi-tui";
import type { InteractiveModeContext } from "../../modes/types";
import { readImageFromClipboard, readTextFromClipboard } from "../../utils/clipboard";
export declare class InputController {
    #private;
    private ctx;
    /** Injectable clipboard reads so tests can drive paste flows without a real clipboard. */
    private clipboard;
    constructor(ctx: InteractiveModeContext, 
    /** Injectable clipboard reads so tests can drive paste flows without a real clipboard. */
    clipboard?: {
        readImage: typeof readImageFromClipboard;
        readText: typeof readTextFromClipboard;
    });
    setupKeyHandlers(): void;
    setupEditorSubmitHandler(): void;
    handleCtrlC(): void;
    handleCtrlD(): void;
    handleCtrlZ(): void;
    handleDequeue(): void;
    handleRetry(): Promise<void>;
    /** Send editor text as a follow-up message (queued behind current stream). */
    handleFollowUp(): Promise<void>;
    restoreQueuedMessagesToEditor(options?: {
        abort?: boolean;
        currentText?: string;
    }): number;
    handleImagePathPaste(path: string): Promise<void>;
    handleImagePaste(): Promise<boolean>;
    handleClipboardTextRawPaste(): Promise<void>;
    /**
     * Editor `onLargePaste` hook: gate a marker-sized paste behind the large-paste menu. Returns
     * `true` to intercept (the editor skips its default `[Paste]` marker) once the paste reaches the
     * configured `paste.largeMenuThreshold` line count; otherwise `false` for default collapse-to-marker
     * behavior. The async menu is fired and forgotten — the editor only needs the synchronous verdict.
     */
    handleLargePaste(text: string, lineCount: number): boolean;
    /**
     * Present the large-paste menu and apply the chosen action: wrap in `<attachment>` tags (collapsed
     * to a `[Paste]` marker that expands on submit), save the text to a file and reference its path so
     * the agent can `read` it on demand, or paste inline. Cancelling (Esc) falls back to the default
     * inline paste marker, so the pasted content is never lost.
     */
    presentLargePasteMenu(text: string, lineCount: number): Promise<void>;
    createAutocompleteProvider(commands: SlashCommand[], basePath: string): AutocompleteProvider;
    /** Copy the current editor line to the system clipboard. */
    handleCopyCurrentLine(): void;
    /** Copy current prompt text to system clipboard. */
    handleCopyPrompt(): void;
    cycleThinkingLevel(): void;
    cycleRoleModel(direction?: "forward" | "backward"): Promise<void>;
    toggleToolOutputExpansion(): void;
    setToolsExpanded(expanded: boolean): void;
    toggleThinkingBlockVisibility(): void;
    openExternalEditor(): Promise<void>;
    registerExtensionShortcuts(): void;
}
