import type { AgentEventEmitter } from "../../domain/agentEvents.js"; type AgentEventStreamResponse = { writeHead: (statusCode: number, headers: Record) => 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 {};