import type { ImageAttachment } from '../../types/core.js';
import type { Logger } from '../../utils/logging/types.js';
import type { ActiveEditorState } from '../../vscode/vscode-server.js';
interface VSCodePromptContext {
    filePath?: string;
    selection?: string;
    fileName?: string;
    startLine?: number;
    endLine?: number;
    cursorPosition?: {
        line: number;
        character: number;
    };
}
interface VSCodePromptDispatcher {
    /**
     * Stable callback handed to `useVSCodeServer` for prompts pushed in from
     * the extension. Builds a fully formatted message (with file/selection
     * context) and forwards it to whichever `handleMessageSubmit` is currently
     * bound via {@link bindMessageSubmit}.
     */
    handleVSCodePrompt: (prompt: string, context?: VSCodePromptContext) => void;
    /**
     * Bind (or re-bind) the chat input's `handleMessageSubmit`. Called once
     * `useAppHandlers` produces it; the dispatcher needs to exist earlier than
     * that because `useVSCodeServer` consumes the prompt callback.
     */
    bindMessageSubmit: (handleMessageSubmit: (message: string) => void) => void;
}
/**
 * Owns the prompt dispatcher half of the VS Code integration. Returns a
 * stable `handleVSCodePrompt` for `useVSCodeServer` plus a `bindMessageSubmit`
 * setter that App calls after `useAppHandlers` is constructed. The split
 * exists because `useVSCodeServer` runs before `useAppHandlers`, but
 * VS Code prompts can only be answered once the chat input is alive.
 */
export declare function useVSCodePromptDispatcher({ logger, }: {
    logger: Logger;
}): VSCodePromptDispatcher;
/**
 * Wraps the chat input submission with the active VS Code editor pill so the
 * user's typed message is augmented with file/selection context when an
 * editor is focused.
 */
export declare function useUserSubmit({ handleMessageSubmit, activeEditor, }: {
    handleMessageSubmit: (message: string, displayValue?: string, images?: ImageAttachment[]) => Promise<void>;
    activeEditor: ActiveEditorState | null;
}): (message: string, displayValue?: string, images?: ImageAttachment[]) => Promise<void>;
export {};
//# sourceMappingURL=useVSCodePromptHandling.d.ts.map