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

4.8 KiB
Raw Permalink Blame History

运行时完整采集回归结果

本子任务仅新增 scripts/history-runtime-unit.js 和本报告;不修改生产实现、 已有 regression 或其它单测。测试直接加载生产 factory 和事件处理函数, 使用内存 WebSocket 接收器,不读取或写入真实会话,不操作远端或重启服务。

首次代码状态与失败证据

时间:2026-10-10 16:52:53(Asia/Shanghai)。

并行实施代理已先完成默认完整采集改造,因此未复现“长正文被裁剪”的修复前 状态,仅记录当时真实结果:

场景 期望 首次只读探针实际
Claude 长正文 1,050,006 字符原样保留 1,050,006 字符,完全相等
Codex CLI 长正文 1,050,006 字符原样保留 1,050,006 字符,完全相等
Codex App 单次长增量 1,050,006 字符原样保留 1,050,006 字符,完全相等
Claude assistant/tool_use → user/tool_result 工具 done=true,结果为输入原值 done=false,result 缺失
Codex CLI 纯正文 → JSON 文本块 → 纯正文 保存路径选用的内容包含三段正文 fullText 含三段,contentBlocks 只有中间正文

HEAD 旧版本失败对照

命令:

timeout 60s node scripts/history-runtime-unit.js --baseline-head

脚本通过 git show HEAD:lib/agent-runtime.js、git show HEAD:lib/codex-app-runtime.js 读取真实旧版本源码,用 node:module 在内存中编译,不写入工作区。旧版本 共复现 9 项预期失败(退出码 0 表示“对照成立”):

失败用例 旧版本表现
Claude CLI 长正文完整采集 正文被 256 KiB 上限裁剪
Codex CLI 长正文完整采集 正文被 256 KiB 上限裁剪
Codex App 长正文完整采集 单次增量被 16 KiB 流上限裁剪
Claude user/tool_result 长结果完整采集 user 事件未处理,工具仍 done=false
Codex CLI 长工具结果完整采集 结果被 2,000 字符上限裁剪
Codex App 超限工具输入、结果与数组完整采集 entry 内输入/结果被预览限额裁剪
超出预览条数上限 40 的 130 条工具仍完整采集 工具数组只留前 120 条
Codex CLI 正文与 JSON 内容块混合采集 contentBlocks 与 fullText 二选一导致丢两端
生产 WebSocket 正文与工具预览保持有界 缺少 tool_end(Claude user 缺口的连带失败)

Claude CLI JSON 字符串工具参数使用生产解析、Codex App 增量与完成事件补尾 且不重复、重连/历史工具列表预览遵守生产条数上限 在旧版本即已通过,属于 防回退断言,不计入基线失败。

当前实现复跑

命令:

timeout 60s node scripts/history-runtime-unit.js

当前(2026-10-10 17:24,Asia/Shanghai)实现共 13 个用例,13 个全部通过, 退出码为 0。实施代理已补齐 Claude user/tool_result 事件处理,以及 Codex CLI 混合正文的统一完整内容保存路径。

最终输出:

通过:生产 runtime 完整采集与有界传输
      checkedTextChars=1050006
      checkedToolInputChars=24006
      checkedToolResultChars=48006
      checkedToolCalls=130
      webSocketPreviews=275
      passed=13

覆盖项包括:三条长正文完整采集、Claude JSON 字符串工具参数经生产 sanitizeToolInput 解析且不裁剪、Claude user/tool_result 长结果、Codex CLI 长工具输入与长结果、Codex App 超限输入/结果/数组、130 条超限工具的 entry 完整性与 130 次预览事件、Codex CLI 混合正文、Codex App 增量与完成事件 补尾去重、正文与工具预览的传输上限、40 条工具预览上限。

覆盖边界与局限

  • 生产完成/重启恢复、输入保存失败、跨会话失败、child 队列、CLI 幂等性由 主后端代理的 scripts/session-history-store-unit.js 覆盖,本脚本不重复。
  • 脚本只覆盖运行时事件到 entry/WebSocket 的链路,不覆盖真实会话落盘、 真实 WebSocket 连接、前端渲染与生产服务重启。
  • 预览断言依赖 server.js 中的常量与函数源码提取;若这些符号被重命名, 脚本会以断言失败提示,而不是静默放宽。

工具调用简报

  • 时间:2026-10-10 16:45—17:25,Asia/Shanghai。
  • codebase-memory-mcp:list_projects 与 index_status(home-cc-web) 返回 ready;search_graph、search_code 与 get_code_snippet 定位 processRuntimeEvent、processCodexAppNotification、sanitizeToolInput、 safeJsonParse、sanitizeMessageForTransport 等生产入口,未重建索引、 未重启服务。
  • FastCtx 文件工具未返回所需能力,降级使用 rg、sed 做只读校验。
  • Node 回归:内存 WebSocket + 生产 sanitizer,不落盘;--baseline-head 仅内存编译 Git 旧版本模块。