Files
cc-web/.planning/fix-session-preview-cwd/findings.md
2026-08-07 10:54:08 +08:00

30 lines
1.6 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.

# 调研结论
## 用户可见现象
- 同一会话 `bf88c202-711a-4f2f-b6e3-b29062f37b20` 刷新后归入 `fineui-web-mcp`。
- 点击后同一会话回到正确的 `上下游协同平台`。
- 后续 `session_list` 推送会再次把它归入错误分组。
## 已证实根因
- 目标会话文件为 909402 bytes,超过默认 512KB 完整元数据解析阈值。
- 大文件路径通过 `readSessionPreview()` 读取头尾片段。
- `jsonStringFieldFromPreview()` 用正则匹配第一个同名键,不识别 JSON 层级。
- 文件中首次出现的 `cwd` 位于消息工具调用 `fastctx.run` 的参数内,值为 `/mnt/e/我的项目/MCP/fineui-web-mcp`。
- 真正的顶层 `cwd` 是 `/mnt/e/华电众信/2026/上下游协同平台`。
- 刷新使用错误的预览元数据;点击使用完整 JSON,因此出现往返漂移。
## 代码边界
- 根因位置:`server.js` 的预览字段读取与 `loadSessionMetaFromFile()` 大文件分支。
- 消费链路:`sendSessionList()` → 前端 `session_list` 整批替换 → `groupSessionsByProject()`。
- 点击恢复链路:`handleLoadSession()` 完整解析 → `session_info` → `mergeSessionListSnapshot()`。
- 前端按收到的数据正确渲染,不属于本次修改范围。
## 风险点
- 不能仅把顶层 `cwd` 移到 `messages` 前面,这依赖属性顺序且不能解决其他顶层字段误读。
- 必须覆盖字符串转义、嵌套对象/数组、头尾拼接边界、缺失字段和 `null`。
- 现有预览读取用于避免大文件完整解析,修复不应退化成无上限读取整个文件。