import type { AssistantMessage, TextContent, ThinkingContent, ToolCall } from "../types.js";
import type { AssistantMessageEventStream } from "./event-stream.js";
/** The content-block kinds that may appear while a response is being streamed. */
export type StreamBlock = TextContent | ThinkingContent | ToolCall;
/**
 * Resolves which content block a streaming delta targets. Providers tag each
 * block with an `index`; this tracker uses that tag to find the matching block
 * (or its position) within a partially built assistant message.
 */
export declare class BlockTracker<TBlock extends StreamBlock = StreamBlock> {
    private readonly blocks;
    constructor(output: AssistantMessage);
    findByIndex(index: number): (TBlock & {
        index?: number;
    }) | undefined;
    findPositionByIndex(index: number): number;
}
/**
 * Convenience facade over an {@link AssistantMessageEventStream}. Each method
 * relays one lifecycle call and automatically tacks on the latest partial
 * output, so provider handlers don't have to thread that argument through by
 * hand every time.
 */
export declare class StreamEventHelper {
    private readonly stream;
    private readonly output;
    constructor(stream: AssistantMessageEventStream, output: AssistantMessage);
    start(): void;
    textStart(contentIndex: number): void;
    textDelta(contentIndex: number, delta: string): void;
    textEnd(contentIndex: number, content: string): void;
    thinkingStart(contentIndex: number): void;
    thinkingDelta(contentIndex: number, delta: string): void;
    thinkingEnd(contentIndex: number, content: string): void;
    toolCallStart(contentIndex: number): void;
    toolCallDelta(contentIndex: number, delta: string): void;
    toolCallEnd(contentIndex: number, toolCall: ToolCall): void;
}
