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

100 lines
4.8 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.

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