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

2.3 KiB
Raw Blame History

运行中正文交接契约

已核对的丢失点

  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 首段、工具、气泡数、刷新及重连,测试不接触生产运行会话;记录浏览器类型、资源来源、截图和退出码。