import { ChatMessage } from '../elements/chat-types';
import { ToolPart } from '../components/tool-types';
/** The one universal contract: a functional-updater setter (React setState shape). */
export type SetMessages = (updater: (prev: ChatMessage[]) => ChatMessage[]) => void;
/** A fluent builder for one in-flight assistant message. Owns no state. */
export interface AssistantStream {
    readonly id: string;
    appendText(delta: string): AssistantStream;
    setText(content: string): AssistantStream;
    appendReasoning(delta: string, label?: string): AssistantStream;
    setReasoning(text: string, label?: string): AssistantStream;
    upsertTool(tool: ToolPart): AssistantStream;
    updateTool(toolCallId: string, patch: Partial<ToolPart>): AssistantStream;
    patch(patch: Partial<ChatMessage>): AssistantStream;
    done(final?: Partial<ChatMessage>): void;
    abort(reason?: string): void;
}
/** Start an assistant message and drive it through `set`. New refs on every mutation. */
export declare function createAssistantStream(set: SetMessages, init?: Partial<ChatMessage>): AssistantStream;
/** Wrap a stream so `onSettle` fires on done/abort (used to toggle a `loading` flag).
 *  Preserves the fluent chain by returning the wrapper from every mutator. */
export declare function onStreamSettled(inner: AssistantStream, onSettle: () => void): AssistantStream;
