UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

46 lines (45 loc) 1.64 kB
/** * SSE Session Manager — 基于 EventSource 的流式会话管理 * * 架构: * POST /chat/stream → 创建 session + 后台执行 AgentRuntime → 返回 { sessionId } * GET /chat/events/:sessionId → EventSource 端点, 回放缓冲事件 + 实时推送 * * 为什么不用 fetch + ReadableStream: * Chrome/Safari 的 fetch() streaming 会缓冲初始响应体(~1-4KB),导致小体积 * SSE 事件滞留在缓冲区中不被交付给 ReadableStream reader。 * 原生 EventSource API 是浏览器专门为 SSE 优化的消费者,不受此限制。 * * @module lib/http/utils/sse-sessions */ import { EventEmitter } from 'node:events'; /** * 创建一个 stream session * * @param scene 场景标识 */ export declare function createStreamSession(scene: string): { sessionId: string; scene: string; /** 事件缓冲区(供 EventSource 连接后回放) */ buffer: Record<string, unknown>[]; /** 会话是否已结束 */ completed: boolean; createdAt: number; /** * 缓冲 + 广播一个事件 * @param event 必须包含 type 字段 */ send(event: Record<string, unknown>): void; /** 标记会话完成,发送 stream:done */ end(donePayload?: Record<string, unknown>): void; /** 标记会话错误,发送 stream:error */ error(message: string, code: string): void; /** * 订阅实时事件 * @returns unsubscribe 函数 */ on(handler: (event: Record<string, unknown>) => void): () => EventEmitter<any>; }; /** 获取已有的 session */ export declare function getStreamSession(sessionId: string): any;