Files
cc-web/.trellis/tasks/10-10-streaming-retry-history/research/streaming-contract.md
shiyue 69b6db0f5b 修复完整会话历史与长气泡交互并更新 CentOS 7 发布包
提交当前工作区全部源码、回归脚本、任务记录及重新构建的 Bun baseline 发布包。发布单文件 MCP 初始化及前端资源一致性验证通过。
2026-10-10 23:40:16 +08:00

25 lines
2.3 KiB
Markdown
Raw 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.

# 运行中正文交接契约
## 已核对的丢失点
1. 自动延续重试清理中断运行态,新轮 `fullText`、工具及映射为空。原正文仅进入模型提示,提示有界不等于保存。
2. `attachActiveRuntimeToWs` 使用 `SESSION_MESSAGE_CONTENT_MAX_CHARS` 裁剪流式正文。浏览器收到裁剪快照后权威替换正文,长正文前缀消失。
3. 重试等待期不在 `isSessionRunning` 和 attach 判断内。刷新会被视为无运行态,之前气泡无法重建。
## 契约
- 同一用户任务自动续跑须交接完整正文、全部工具、文本/工具去重映射,以及持续一致的逻辑消息身份。线程身份仍按既有 expectedThreadId 校验。
- 完整运行态在移除旧活动轮次前落盘,等待期仍可读取;新轮接管前不能清理唯一落盘副本。保存失败明确停止危险交接并保留内容。
- 续跑启动时先提供完整 `resume_generating` 状态,再提供增量事件。等待期和运行期刷新、切换与重连也提供完整状态。
- 前端以完整 snapshot 替换当前 streaming 正文、工具,复用气泡节点;禁止把不同用户轮次的正文盲目拼接。现有 `resume_generating` 分支的权威替换和工具重建符合该语义,前端代理将用行为回归确认。
- 模型重试提示可继续只保留尾部,显示和持久化不使用该上限。
- 重试耗尽、手动取消、自动启动失败及重启恢复仍需保存已有正文;正常新用户轮次从空正文开始。
- `turn/start`已发出但原生ID未知时取消,旧轮仍持有线程门禁。通知先于RPC回包也只能归入旧轮,身份明确并精确中断后才允许新轮开始;RPC超时不能凭空释放身份。
- `done`和历史分页提供完整正文及全部工具输入/结果,不得用实时预览限额覆盖完整运行态。
## 验证方法
- VM 提取真实生产函数并配真实临时存储,先跑现有实现产生正文丢失红灯,再跑修复版本;不得仅以缺 helper 作为旧版失败证据。
- 长正文超过预览限额,A/B/C 各一次并保持顺序;所有阶段的工具、消息 ID 和用户消息条数一致。
- 真实浏览器连接隔离服务,检查实际 DOM 首段、工具、气泡数、刷新及重连,测试不接触生产运行会话;记录浏览器类型、资源来源、截图和退出码。