import { Plugin } from "prosemirror-state";
import { AIRequestHelpers, InvokeAIOptions } from "./types.js";
type AIPluginState = {
    aiMenuState: ({
        /**
         * The ID of the block that the AI menu is opened at.
         * This changes as the AI is making changes to the document
         */
        blockId: string;
    } & ({
        status: "error";
        error: any;
    } | {
        status: "user-input" | "thinking" | "ai-writing" | "user-reviewing";
    })) | "closed";
};
export declare const AIExtension: (options?: (AIRequestHelpers & {
    /**
     * The name and color of the agent cursor
     *
     * @default { name: "AI", color: "#8bc6ff" }
     */
    agentCursor?: {
        name: string;
        color: string;
    };
}) | undefined) => import("@blocknote/core").ExtensionFactoryInstance<{
    key: string;
    options: import("@tanstack/store").Store<AIRequestHelpers, (cb: AIRequestHelpers) => AIRequestHelpers>;
    store: import("@tanstack/store").Store<AIPluginState, (cb: AIPluginState) => AIPluginState>;
    mount({ signal }: {
        signal: AbortSignal;
    }): void;
    prosemirrorPlugins: (Plugin<any> | Plugin<{
        selection: {
            anchor: number;
            head: number;
        } | undefined;
    }> | Plugin<{
        enabled: boolean;
    }>)[];
    /**
     * Open the AI menu at a specific block
     */
    openAIMenuAtBlock(blockID: string): void;
    /**
     * Close the AI menu
     */
    closeAIMenu(): void;
    /**
     * Accept the changes made by the LLM
     */
    acceptChanges(): void;
    /**
     * Reject the changes made by the LLM
     */
    rejectChanges(): void;
    /**
     * Abort the current LLM request.
     *
     * This will stop the ongoing request and revert any changes made by the AI.
     * Only valid when there is an active AI request in progress.
     */
    abort(reason?: any): Promise<void>;
    /**
     * Retry the previous LLM call.
     *
     * Only valid if the current status is "error"
     */
    retry(): Promise<void>;
    /**
     * Update the status of a call to an LLM
     *
     * @warning This method should usually only be used for advanced use-cases
     * if you want to implement how an LLM call is executed. Usually, you should
     * use {@link executeLLMRequest} instead which will handle the status updates for you.
     */
    setAIResponseStatus(status: "user-input" | "thinking" | "ai-writing" | "user-reviewing" | {
        status: "error";
        error: any;
    }): void;
    /**
     * @deprecated Use {@link invokeAI} instead
     */
    callLLM(opts: InvokeAIOptions): Promise<void>;
    /**
     * Execute a call to an LLM and apply the result to the editor
     */
    invokeAI(opts: InvokeAIOptions): Promise<void>;
}>;
export {};
