{"version":3,"file":"stream-to-sse.mjs","names":[],"sources":["../../../../../../../ai/src/serve/stream-to-sse.ts"],"sourcesContent":["import { encodeSSE, SSE_DONE } from \"./sse\";\n\n/**\n * A streamable execution: an async iterable of typed events that also\n * exposes the final `result` promise — exactly the shape every primitive's\n * `stream()` returns ({@link StreamContract}).\n */\nexport type StreamLike<TEvent extends { type: string }, TResult> =\n  AsyncIterable<TEvent> & { result?: Promise<TResult> };\n\n/**\n * Convert a primitive's event stream into an SSE byte stream (A3): each\n * event becomes an SSE frame named by its `type`, then the final `result`\n * (or an `error` frame if it rejects) is emitted, and finally the\n * `[DONE]` sentinel. Pure and transport-agnostic — {@link serve} pipes it\n * to an HTTP response, but it works against any sink.\n *\n * @example\n * for await (const frame of streamToSSE(agent.stream(\"hi\"))) {\n *   res.write(frame);\n * }\n */\nexport async function* streamToSSE<TEvent extends { type: string }, TResult>(\n  stream: StreamLike<TEvent, TResult>,\n): AsyncIterable<string> {\n  for await (const event of stream) {\n    yield encodeSSE({ event: event.type, data: event });\n  }\n\n  if (stream.result) {\n    try {\n      const result = await stream.result;\n      yield encodeSSE({ event: \"result\", data: result });\n    } catch (error) {\n      yield encodeSSE({\n        event: \"error\",\n        data: { message: error instanceof Error ? error.message : String(error) },\n      });\n    }\n  }\n\n  yield SSE_DONE;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAsBA,gBAAuB,YACrB,QACuB;CACvB,WAAW,MAAM,SAAS,QACxB,MAAM,UAAU;EAAE,OAAO,MAAM;EAAM,MAAM;CAAM,CAAC;CAGpD,IAAI,OAAO,QACT,IAAI;EAEF,MAAM,UAAU;GAAE,OAAO;GAAU,MAAM,MADpB,OAAO;EACoB,CAAC;CACnD,SAAS,OAAO;EACd,MAAM,UAAU;GACd,OAAO;GACP,MAAM,EAAE,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE;EAC1E,CAAC;CACH;CAGF,MAAM;AACR"}