fix: 修复会话归组和文件预览编码

This commit is contained in:
shiyue
2026-08-07 10:54:08 +08:00
parent 3ddf21af85
commit 5ad2839b2c
21 changed files with 765 additions and 42 deletions

View File

@@ -0,0 +1,7 @@
# 调研结论
- 前端 `openFileBrowserFile` 请求 `/api/fs/read` 后,将 `data.content` 原样写入 `textContent`,渲染层不会制造乱码。
- 服务端 `handleFileSystemReadApi` 当前使用 `previewBuffer.toString('utf8')`,无效 UTF-8 字节会变成 U+FFFD。
- 截图中的 `<60><><EFBFBD><EFBFBD>` 是典型替换字符,且相邻 ASCII 正常,符合 GBK/GB18030 被当成 UTF-8 解码的特征。
- 项目当前只依赖 `echarts``ws`。Node 的 WHATWG `TextDecoder` 原生支持 `gb18030`,可避免新增包依赖。
- `server.js``scripts/regression.js` 存在其他会话的未提交修改,编码修复必须以小范围追加方式完成。

View File

@@ -0,0 +1,8 @@
# 进度日志
- 2026-08-07读取项目规范、Trellis 工作流和计划技能。
- 2026-08-07确认 codebase-memory 索引可用并定位文件预览链路。
- 2026-08-07确认根因是 `/api/fs/read` 固定按 UTF-8 解码。
- 2026-08-07实现代理完成多编码解码和回归测试。
- 2026-08-07实现代理与检查代理均通过专用回归、语法检查和 diff 检查。
- 2026-08-07主代理复跑 `file-preview-encoding``session-preview-metadata`,均通过。

View File

@@ -0,0 +1,38 @@
# 任务计划:中文文件预览编码兼容
## 目标
修复文件浏览器预览 GBK/GB2312/GB18030 等中文文本时出现替换字符的问题,并保持 UTF-8 与二进制拒绝行为稳定。
## 当前阶段
阶段 5交付
## 阶段
- [x] 定位文件预览读取与渲染链路
- [x] 补充非 UTF-8 中文文件回归测试
- [x] 实现安全的多编码检测与解码
- [x] 运行相关测试与静态检查
- [x] 执行浏览器回归并复核变更
## 交付结果
- 服务端支持 UTF-8、UTF-8/UTF-16 BOM、GB18030兼容 GBK/GB2312
- `/api/fs/read` 返回 `encoding`,前端预览元信息展示识别结果。
- 二进制 415、路径安全、预览大小限制保持不变。
- Trellis 实现与检查代理均未发现明确缺陷。
## 关键决策
- 在服务端解码API 继续返回合法 JSON/Unicode前端无需猜测原始字节编码。
- BOM 优先;无 BOM 时严格验证 UTF-8无效 UTF-8 回退 GB18030。
- 仅对已判定为文本的内容解码,不能放宽二进制文件预览限制。
- API 返回实际识别编码,便于诊断,但前端不依赖该字段。
## 错误记录
| 错误 | 尝试 | 处理 |
|---|---:|---|
| codebase-memory `search_code` 返回 `pattern is required` | 1 | 查阅工具 schema 后改用 `pattern` |
| 计划补丁未命中模板标题 | 1 | 读取真实模板后精确替换 |