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

60 lines
1.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
## 开关
```bash
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 | 纯透传 goosedlive 持久化(开关开启时) |
| 重连(有 Last-Event-ID | DB 补发 → 若未到 terminal 再挂 upstream |
| cursor miss | 全量补发(同 4b |
| direct chat session | 仍走 `sendDirectChatSessionEvents`,不经本路径 |
## 验证(全量开发完成后)
```bash
npm run verify:h5-session-patches
```
手工:
1. `.env``MEMIND_SESSION_STREAM_REPLAY=1`,重启 `pnpm dev`
2. agent 路径发消息,DevTools 看 `/sessions/:id/events``id:`
3. 流式过程中断网/刷新,确认重连后 token/Finish 不丢
## 与 4b 关系
- **4b**`GET /agent/runs/:id/events` + `h5_agent_run_events`
- **4c**`GET /sessions/:id/events` + `h5_session_stream_events`
- 双通道职责仍分离(§1.3