4.8 KiB
运行时完整采集回归结果
本子任务仅新增 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 旧版本模块。