Files
memind/docs/pending-fixes/h5-session-stream-replay-4c-20260706.md
john 14a00774d9 feat(h5): web 联网能力、实时查询路由与 session Finish 对齐
- 新增 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>
2026-07-06 16:06:26 +08:00

1.9 KiB
Raw Permalink Blame History

Patch 4cSession 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

手工:

  1. .envMEMIND_SESSION_STREAM_REPLAY=1,重启 pnpm dev
  2. agent 路径发消息,DevTools 看 /sessions/:id/eventsid:
  3. 流式过程中断网/刷新,确认重连后 token/Finish 不丢

与 4b 关系

  • 4bGET /agent/runs/:id/events + h5_agent_run_events
  • 4cGET /sessions/:id/events + h5_session_stream_events
  • 双通道职责仍分离(§1.3