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

89 lines
5.6 KiB
Markdown
Raw Permalink 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.

# 前端历史分页实现结果
记录时间:2026-10-10 16:09(Asia/Shanghai)。
## 变更
- `public/app.js`:正文与用户提问目录按正数游标请求已有历史,`available=false` 只用于更早记录待核实的说明。
- 正文显示可读取的已保存消息数量,保留 loading、重试及来源提示。游标归零后移除加载按钮;来源状态为 false 时仍显示「更早的记录尚待核实,已保存的消息可正常查看。」
- 用户目录首屏没有提问、但仍有历史游标时保持入口可用;读取失败可重试,索引自动逐页完成。
- 来源尚未返回时,初始和重置状态不展示待核实提示;服务端明确返回的 `historyAvailable=false` 仍保留。普通完整历史没有限制提示。
- `scripts/history-frontend-unit.js`:新增行为回归,直接执行生产请求、响应处理、正文合并及目录索引函数;只模拟浏览器节点与网络发送。
## 失败与通过证据
先修改专项测试,尚未修改 `app.js` 时执行:
```bash
timeout 60s node scripts/history-frontend-unit.js
```
退出码为 **1**,失败断言为「原始来源不可用时仍须请求已保存的45条正文」,实际请求数 **0**、期望 **1**。这是旧分页门禁导致的行为失败。
完成最小修复后,以下命令全部退出 **0**:
```bash
timeout 60s node scripts/history-frontend-unit.js
node --check public/app.js
node --check scripts/history-frontend-unit.js
git diff --check -- public/app.js scripts/history-frontend-unit.js
```
已覆盖:
- 57 条已保存消息、首屏 12 条、游标 45、来源不可用:正文按 `45→33→21→9→0` 分页读全,顺序正确,无重复。
- 首屏全部为助手消息:目录入口仍可点击,并自动索引全部旧用户提问,顺序正确,无重复。
- 正文和目录分别验证未认证、连接未打开、连接不存在及当前会话不匹配时不发送请求。
- 正文和目录分别过滤错误会话、过期响应;重复请求去重,重复响应不污染结果。
- 两类请求失败后释放在途状态、保留游标、显示重试并发送新请求,loading 正常。
- 游标为零时两类请求均停止;更早记录待核实的提示仍保留且无正文加载按钮,完整历史不显示限制。
- 原有稳定消息 ID、缓存合并、重连和流式完成去重回归继续通过。
## 余下边界
- 前端只读取服务端已提供的历史;完整历史持久化及原始日志合并仍由后端实现负责。
- `available=false` 也可能只是合并边界尚未确认,不能断言原始文件不完整或消息未保存。旧版如果已经裁掉消息且没有可确证来源,前端无法补出;本次保留核实提示,不将旧存量历史宣称为完全恢复。
- 尚未在用户所指的其他客户端实际验证。本次只执行隔离的专项测试和语法检查,没有操作真实会话、远端或服务。
## 隔离浏览器归档验收
已将归档重启流程合入 `scripts/history-browser-check.js`。测试只创建临时目录、临时密码和隔离
`server.js` 子进程;运行中把夹具 rollout 重命名为 `.isolated-hidden`,停止并重新启动隔离
服务,重新登录并打开夹具会话,未读取或改写真实会话、生产服务或真实 rollout。
执行命令:
```bash
node --check scripts/history-browser-check.js
git diff --check -- scripts/history-browser-check.js
timeout --signal=TERM --kill-after=5s 60s node scripts/history-browser-check.js
```
结果全部通过,证据目录为:
`/tmp/cc-web-history-browser-60Uwf0`
浏览器阶段包含 `loaded`、`archivedAfterRestart`、`archivedPaged`、`running`、
`refreshed`、`reconnected`、`completed`、`completedRefreshed`。归档阶段的证据为:
- 重启后 `session_info.historySource` 全部为 `archive`,`historyTotal=148`,
`historyAvailable=true`。
- 归档分页共 6 个 `session_history_chunk`,每块来源均为 `archive`、总数均为 148,
协议下标连续覆盖 `0..147`,协议稳定 ID 数为 148。
- 重启后首屏为 12 条,下标为 `136..147`;点击分页直到最早的「早期问题 0」出现后,
浏览器实际读回 148 条,稳定 ID 唯一数为 148,顺序与夹具完整 ID 序列一致。
- 读完完整归档后提示为空,没有「无法恢复」或「待核实」。
- `/tmp/cc-web-history-browser-60Uwf0/archived-after-restart.png` 记录重启后首屏;
`/tmp/cc-web-history-browser-60Uwf0/archived-paged.png` 记录分页读到最早消息。
- 重启后仍继续完成原有运行中发送、刷新、WebSocket 重连、完成事件和完成后刷新检查。
本轮只修改 `scripts/history-browser-check.js` 和本报告;隔离测试进程、Firefox、
relay 及隐藏的 rollout 均在 `finally` 中清理或恢复。
## 工具调用简报
- `codebase-memory-mcp`:`list_projects` / `index_status(project="home-cc-web")` 确认索引 ready;用 `search_code` / `search_graph` 定位,再用 `get_code_snippet` 读取正文分页、目录分页及渲染函数。
- 随后查询历史控件 CSS 时索引工具返回 `Transport closed`;降级为 FastCtx 精确本地读取和搜索,没有重启服务。
- `FastCtx`:读取任务文档、规范、技能目录及专项测试;执行范围限定的测试、语法和差异检查。所有单次测试命令最大 60 秒,无重试或退避。
- 浏览器验收:使用本地 `Firefox/geckodriver`、临时隔离服务和夹具;测试完成后读取
`/tmp/cc-web-history-browser-60Uwf0/evidence.json` 及截图核对协议总数、稳定 ID 和阶段结果。