14a00774d9
- 新增 web 能力并挂载 platform/web(web_search/fetch_url) - 实时查询强制 web skill,router fallback 与 await session Finish - Session Broker 覆盖率/指标、stream replay 与相关单测/E2E 脚本 Co-authored-by: Cursor <cursoragent@cursor.com>
1.9 KiB
1.9 KiB
Patch 4c:Session SSE Replay(进行中,禁止 merge main / 上 103)
状态:代码 + 单测已完成(2026-07-06);全量 soak 待开发完成后执行。
目标
解决 H5 session SSE 重连丢状态问题(§8.3):
- Portal 持久化经 sanitizer 后的 session 事件到
h5_session_stream_events - SSE 帧带 Portal
id:cursor(与 run replay 4b 对齐) - 客户端带
Last-Event-ID重连时,先从 DB 补发 missed events - 若补发以
Finish/Error终态结束,则不再挂 upstream(避免重复 Finish)
开关
MEMIND_SESSION_STREAM_REPLAY=1
与 4b 独立:可只开 run replay、只开 session replay、或两者同开。
改动文件
| 文件 | 说明 |
|---|---|
session-stream.mjs |
replay 纯函数、flag |
session-stream-store.mjs |
MySQL 读写 |
session-stream*.test.mjs |
单测 |
db.mjs / schema.sql |
h5_session_stream_events 表 |
tkmind-proxy.mjs |
重连补发 + live persist + SSE id: |
server.mjs |
store 注入、启动 flag 日志 |
.env.example / docs/local-dev.md |
文档 |
行为说明
| 场景 | 行为 |
|---|---|
| 首次订阅(无 Last-Event-ID) | 纯透传 goosed,live 持久化(开关开启时) |
| 重连(有 Last-Event-ID) | DB 补发 → 若未到 terminal 再挂 upstream |
| cursor miss | 全量补发(同 4b) |
| direct chat session | 仍走 sendDirectChatSessionEvents,不经本路径 |
验证(全量开发完成后)
npm run verify:h5-session-patches
手工:
.env加MEMIND_SESSION_STREAM_REPLAY=1,重启pnpm dev- agent 路径发消息,DevTools 看
/sessions/:id/events含id:行 - 流式过程中断网/刷新,确认重连后 token/Finish 不丢
与 4b 关系
- 4b:
GET /agent/runs/:id/events+h5_agent_run_events - 4c:
GET /sessions/:id/events+h5_session_stream_events - 双通道职责仍分离(§1.3)