autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
46 lines (45 loc) • 1.64 kB
TypeScript
/**
* 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;