# 运行时完整采集回归结果 本子任务仅新增 `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 旧版本失败对照 命令: ```bash 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 增量与完成事件补尾 且不重复`、`重连/历史工具列表预览遵守生产条数上限` 在旧版本即已通过,属于 防回退断言,不计入基线失败。 ## 当前实现复跑 命令: ```bash timeout 60s node scripts/history-runtime-unit.js ``` 当前(2026-10-10 17:24,Asia/Shanghai)实现共 13 个用例,13 个全部通过, 退出码为 0。实施代理已补齐 Claude `user/tool_result` 事件处理,以及 Codex CLI 混合正文的统一完整内容保存路径。 最终输出: ```text 通过:生产 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 旧版本模块。