- mergeNativeHistoryWithSnapshot 的边界定位改为 locateNativeBoundaryIndex, 允许跳过快照头部只在 cc-web 存在的气泡(ccwebDisplayOnly 回传显示、 无 native 身份的本地用户回显),遇到无法对齐的普通消息仍然放弃确认。 - native 前缀不再按 turn 别名折叠,改为 mergeNativePrefixWithSnapshot 按自身 ID 去重,同 ID 片段用 combineNativeFragments 合并正文与工具调用,避免前端按稳定 ID 去重丢正文。 - session-history-unit 新增 3 条断言,历史服务端回归 12 项通过。 - 重新构建 dist-exe/cc-web-bun-linux-x64-baseline.tar.gz(bun 1.4.2 baseline)。
25 lines
2.7 KiB
Markdown
25 lines
2.7 KiB
Markdown
# 调研发现
|
||
|
||
- `server.js` 中 `resolveSessionHistory` 位于约 4489 行,session_info、session_history_chunk、resume_session_result 多处复用。
|
||
- `lib/codex-rollouts.js` 是 native rollout 解析入口,需结合 server.js 的持久化写入路径分析。
|
||
- `public/app.js` 已有 `renderMessages` 与 `reconcileRenderedSessionMessages`,前端存在重连/历史刷新竞态相关逻辑。
|
||
- codebase-memory 项目 `home-cc-web` 索引状态为 ready(8208 nodes / 19300 edges)。
|
||
- 工作区存在用户已有未提交改动:`lib/ccweb-mcp-server.js`、`scripts/ccweb-message-reply-unit.js`,本任务不触碰。
|
||
|
||
|
||
- 2026-09-21:db04e08 已删除全量 native 替换,但 merge 的数值 baseIndex 回退仍不可靠;messagesEquivalent 不支持 codexAppTurnId 与 native turnId 跨来源对齐。
|
||
- 前端 prepend/reconcile 仍以相同下标跳过不同 ID,缓存也会按下标覆盖不同消息。
|
||
- sessions/35394008-4f0c-43c0-a481-b622d9e6b884.json 本机暂未找到,不能假装完成迁移。
|
||
|
||
- 自动回传使用 buildCrossConversationReplyAutoRunText 的“子对话回传已返回……”包装,需与“来自……”投递包装分别精确识别;两者均不能作为普通用户消息。
|
||
- response_item 中存在 AGENTS/environment 等用户角色上下文;有 event_msg.user_message 时以事件为权威,仅从匹配 response 补充 ID。
|
||
- done 原来不携带持久化助手身份,结束后的本地 stream 与刷新消息无法去重;现已将最终消息及合并后下标通过 done 传递。
|
||
- 新迁移能力通过已认证 WebSocket 在服务端同步检查/备份/写入;单文件提供 --migrate-session-history 入口,默认预览,--apply 写入。
|
||
|
||
## 2026-09-21 旧会话迁移复盘
|
||
|
||
- `sessions/35394008-…json` 的截断提示结构化字段完整,但仍报 `history_boundary_unconfirmed`:快照首条是 cc-web 专有的跨对话回传显示气泡(`ccwebDisplayOnly`),rollout 里不存在对应记录,旧规则只认首条锚点就直接放弃确认。
|
||
- mergeHistorySegments 的 turn 别名键会把 native 前缀里同一 turn 的多条气泡折叠成一条,实测丢掉 9 条助手正文(2537 字);native 前缀必须按自身 ID 去重,不能按 turn 去重。
|
||
- rollout 解析器会把同一条气泡拆成多条空文本工具片段且共用同一 `history-assistant:<hash>` ID,前端按稳定 ID 去重时只保留最后一条;前缀侧需要先按 ID 合并片段(正文拼接、工具调用并集)再交给前端。
|
||
- 迁移后文件不再带截断提示,未升级的旧服务进程也会走 snapshot 分支把 739 条全部展示,historyAvailable 为 true,因此迁移不必等待服务重启。
|