import type { AgentSession } from "@mariozechner/pi-coding-agent";
import type { ReasoningLevel, VerboseLevel } from "../auto-reply/thinking.js";
import type { SymiConfig } from "../config/types.symi.js";
import type { HookRunner } from "../plugins/hooks.js";
import type { BlockReplyChunking } from "./pi-embedded-block-chunker.js";
import type { BlockReplyPayload } from "./pi-embedded-payloads.js";
export type ToolResultFormat = "markdown" | "plain";
export type SubscribeEmbeddedPiSessionParams = {
    session: AgentSession;
    runId: string;
    hookRunner?: HookRunner;
    verboseLevel?: VerboseLevel;
    reasoningMode?: ReasoningLevel;
    toolResultFormat?: ToolResultFormat;
    shouldEmitToolResult?: () => boolean;
    shouldEmitToolOutput?: () => boolean;
    onToolResult?: (payload: {
        text?: string;
        mediaUrls?: string[];
    }) => void | Promise<void>;
    onReasoningStream?: (payload: {
        text?: string;
        mediaUrls?: string[];
    }) => void | Promise<void>;
    /** Called when a thinking/reasoning block ends (</think> tag processed). */
    onReasoningEnd?: () => void | Promise<void>;
    onBlockReply?: (payload: BlockReplyPayload) => void | Promise<void>;
    /** Flush pending block replies (e.g., before tool execution to preserve message boundaries). */
    onBlockReplyFlush?: () => void | Promise<void>;
    blockReplyBreak?: "text_end" | "message_end";
    blockReplyChunking?: BlockReplyChunking;
    onPartialReply?: (payload: {
        text?: string;
        mediaUrls?: string[];
    }) => void | Promise<void>;
    onAssistantMessageStart?: () => void | Promise<void>;
    onAgentEvent?: (evt: {
        stream: string;
        data: Record<string, unknown>;
    }) => void | Promise<void>;
    enforceFinalTag?: boolean;
    config?: SymiConfig;
    sessionKey?: string;
};
export type { BlockReplyChunking } from "./pi-embedded-block-chunker.js";
