import type { AgentEventEmitter } from "../../domain/agentEvents.js";
type AgentEventStreamResponse = {
    writeHead: (statusCode: number, headers: Record<string, string>) => void;
    write: (chunk: string) => unknown;
    end: () => unknown;
    writableEnded: boolean;
    destroyed: boolean;
};
type AgentEventStreamOptions = {
    vercelAiUiMessageStream?: boolean;
    closeActiveBlockOnToolStart?: boolean;
};
/**
 * Maps the internal {@link AgentEvent} vocabulary onto the two Server-Sent-Events
 * wire dialects the frontend consumes. Both dialects are HARD external contracts —
 * do not change frame names/shapes without updating the corresponding consumer:
 *
 * - `vercelAiUiMessageStream: true` (used by `/agent/response` and `/agent/approval`):
 *   the Vercel AI SDK message-stream v1 format (`start`, `text-start`/`text-delta`/
 *   `text-end`, `reasoning-*`, `data-*` parts including `data-steer-applied`,
 *   `error` with `errorText`, `finish`, `[DONE]`). Consumed by `DefaultChatTransport`
 *   and the manual approval parser in `custom/composables/agentStore/useAgentChat.ts`.
 * - default (used by `/agent/speech-response`): bare event names
 *   (`transcript`, `speech-response`, `audio-start`/`audio-delta`/`audio-done`,
 *   `open-page`, `error`) plus the Vercel-shaped `data-tool-call`. Consumed by
 *   `custom/composables/useAgentAudio.ts`.
 */
export declare function createSseEventEmitter(res: AgentEventStreamResponse, options?: AgentEventStreamOptions): AgentEventEmitter;
export {};
