fix: reduce conversation history memory use
GoodBuddy Agents / Validate Agent source (push) Canceled after 0s
GoodBuddy Agents / Build darwin arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build linux arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build linux x64 Agent (push) Canceled after 0s
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s
GoodBuddy Agents / Validate Agent source (push) Canceled after 0s
GoodBuddy Agents / Build darwin arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build linux arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build linux x64 Agent (push) Canceled after 0s
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s
Load lightweight conversation summaries and hydrate full history only when needed, preserving search, copy, export, queued requests, and remote questions. Keep unchanged image reconciliation messages stable so list refreshes no longer resend the entire saved history. Prepare Desktop 0.13.6 with the approved bilingual notes and aligned feature matrices. Agent remains 0.13.0; no LoongArch preview or navigation demo edits are included. Development validation passed 4301 tests with 67 skipped; the user requested CI validation instead of repeating local release checks. Release note: 历史会话按需加载,减少切回应用时的重复保存和内存占用,同时保留完整历史、搜索与续聊。
This commit is contained in:
@@ -1,5 +1,100 @@
|
||||
# 工作栏实现与验证进度
|
||||
|
||||
## 2026-09-15 Desktop 0.13.6 发布准备
|
||||
|
||||
用户批准两项性能修复的中英文更新说明,指定 Desktop 0.13.6,不发布 Agent 或
|
||||
LoongArch 预览,并明确排除工作区另外四个应用导航设计/演示文件。
|
||||
`package.json` 与 lockfile 的两处根版本一致,更新说明校验通过。
|
||||
双语功能矩阵已核对并补充按需历史行为;Agent 保持 0.13.0。
|
||||
|
||||
用户随后要求直接交由 CI 发布,本地独立候选的全量验收命令被取消,未记为通过;
|
||||
开发阶段的完整测试及实测结果保留在下一节。候选发布不再进行本地生产构建或
|
||||
打包,主分支 CI 与六平台标签工作流仍为发布验收入口。最终提交、标签与公开
|
||||
产物状态须以远端实际结果核对,不以版本号变更视为已发布。
|
||||
|
||||
## 2026-09-15 会话列表与图片合并性能修复
|
||||
|
||||
本轮针对用户报告的 0.13.5 卡顿与高内存,不修改正在运行的正式应用或数据库。
|
||||
只读检查发现最近会话正文约 1.14 MiB,消息 metadata 约 119.3 MiB;`f8d0741`
|
||||
的图片合并还会重建无变化消息,使焦点刷新后再次保存历史。实现规则见
|
||||
[会话列表读取与前端保留](./execution-history-storage.md#会话列表读取与前端保留)。
|
||||
|
||||
已实现并验证:
|
||||
|
||||
- 图片合并的三个分支共用保留引用的函数。1,600 条无图片历史引用不变;App 使用
|
||||
JSON 往返形状刷新后,保存的消息数为 0,较新的图片操作、成果关联和流式正文仍保留。
|
||||
- 启动、焦点/队列刷新、活动跳转与自定义任务入口均使用摘要或按 ID 读取。
|
||||
搜索保留中文、Unicode 大小写和字面 `%_` 匹配,包含仍显示但已落到最近 100 条以外的
|
||||
会话;真实 SQLite 中 501 条历史仍可完整取回,header-only 保存不删除消息。
|
||||
- 打开、复制、导出、发送及压缩上下文保留完整历史语义。详情读取失败可原地重试;
|
||||
旧摘要不能覆盖晚到的后台审批或刚加载的历史。搜索只保存命中 ID,复制/导出不把
|
||||
未打开详情留入缓存,空闲详情在已确认保存后随现有 KeepAlive 生命周期释放。
|
||||
- 三路 simplify 审查覆盖全部本轮源码,修正了两处残留全量读取、搜索保留大对象、
|
||||
较早会话搜索遗漏及后台审批竞态。保留已发布完整列表接口,无 schema/Agent 协议迁移。
|
||||
- 定向 App、SQLite、IPC/恢复及图片合并测试:**443 通过**。最终 `npm test`:
|
||||
**4,301 通过、67 跳过、0 失败**,约 736.46 秒。`npm run typecheck` 和所有本轮
|
||||
源码文件的 ESLint 通过。全仓 `npm run lint` 仍被本轮范围外的
|
||||
`application-tool-navigation/navigation-demo.js:360` 的 `no-unused-expressions`
|
||||
阻塞,未修改该用户编辑;不能记为全仓 lint 通过。
|
||||
- 以 `f47049c40d757a38296d06d281b87fb6a5fe1c8c` 和本轮 14 个源码/测试文件冻结
|
||||
before/after,两个生产 Electron 构建均成功;验证后哈希核对无源码漂移。
|
||||
- 隔离生产 Electron 的 100 会话/1,600 消息试验:首次摘要读取 0 条消息,仅当前会话
|
||||
详情读取 16 条;搜索第 100 个会话的正文不预载其 metadata,点击后再读取完整 16 条。
|
||||
已检查实际 UI 截图,不是只调用数据库或 Mock。
|
||||
- 另一个隔离 App 正常 UI 打开未加载的旧会话并发送,Main 请求携带原有 2 条历史;
|
||||
**1 次真实直连文本调用**,HTTP 200,最终完整保存准确标记 `HISTORY_RENDERER_7391`。
|
||||
初始等待使用错误 DOM class 超时,随后以保存结果核对成功,未重复发送。
|
||||
- Linux x64 共享 Host 在本轮独立目录构建、安装并激活当前源码 Agent/OpenCode,
|
||||
真实 SQLite 摘要测试通过;**2 次真实无工具文本调用**均完成且 delivered=1,
|
||||
第二轮复用同一原生 Session 并准确记住首轮标记。测试 Agent 停止后独立 `/proc`
|
||||
检查无该目录所属进程。此检查验证当前源码部署与 Session 续接,不冒充远端 UI
|
||||
断线恢复全流程;桌面恢复问题投影由本轮真实 SQLite IPC 回归覆盖。
|
||||
|
||||
本轮真实模型调用共 **3 次文本、0 次图片**,无工具请求,不新增图片生成费用。
|
||||
准备阶段的错误 fixture provider/图片默认字段、独立 profile 缺少原安全存储的
|
||||
加密上下文、Host 源码包漏带 LICENSE 均只修验证脚本;失败记录保留,不计为产品修复。
|
||||
所有脚本与原始证据位于忽略目录
|
||||
`.agent-resources/conversation-performance-20260915/run-KX7bIz/`。
|
||||
|
||||
### 完整 App 配对内存测量
|
||||
|
||||
最终采用三组顺序执行的 before/after 冷启动,共六个独立 profile。每组使用相同
|
||||
100 会话/1,600 消息,正文 1.20 MiB、完整 reasoning metadata 119.69 MiB;
|
||||
执行三次焦点刷新、搜索未打开正文并导航 11 次。使用直连 Runtime 的无网络配置,
|
||||
不启动 OC/DSH、不调用模型;测试与构建已完成后再开始这组测量。
|
||||
|
||||
下表是各三次结果的中位数,内存为 Windows Private Commit,单位 MiB:
|
||||
|
||||
| 指标 | before | after |
|
||||
| --- | ---: | ---: |
|
||||
| 初次传入 Renderer 的完整消息数 | 1,600 | 16 |
|
||||
| 三次无变化刷新保存的消息数 | 4,800 | 0 |
|
||||
| Main 焦点列表读取耗时(ms,不是端到端帧延迟) | 207.28 | 8.05 |
|
||||
| 启动稳定点 App / Renderer | 803.42 / 284.77 | 682.36 / 155.73 |
|
||||
| 三次刷新后 App / Renderer | 1,640.43 / 703.91 | 661.34 / 154.16 |
|
||||
| 导航及缓存释放后 App / Renderer | 895.27 / 557.09 | 574.65 / 248.95 |
|
||||
| App 采样峰值 | 1,788.71 | 694.35 |
|
||||
|
||||
每次 10 个进程样本,定时器间隔 5 秒,另有阶段采样,不代表连续峰值。
|
||||
本数据集采样峰值中位数下降 **61.18%**;before 三次峰值分别为
|
||||
2,506.29 / 1,788.71 / 1,766.39,after 为 694.35 / 693.61 / 719.27。
|
||||
它测的是这两项历史读取/重复保存修复,不含重型 Runtime 的原生内存,不能推广为
|
||||
正式用户整个 App 必然下降相同比例,也不是长时间空闲泄漏证明。
|
||||
|
||||
六个最终 profile 都保留 1,600 条消息,按 ID/角色/状态/正文/完整 reasoning
|
||||
计算的 SHA-256 一致,`quick_check` 均通过;六个 App 均正常退出(code 0)。
|
||||
汇总见 `summary.json`,单轮为 `before-2` 至 `after-4` 的 report/acceptance。
|
||||
|
||||
保留但不纳入三组对照的早期 `before-1`/`after-1`:after 的驱动在清除搜索后未等待
|
||||
延迟筛选收敛,导航失败;退出时还记录 `PostQueuedCompletionStatus` 无效句柄。
|
||||
后续为两个版本都补上可见列表等待,并等本轮采样子进程完成后再正常退出;
|
||||
未唯一定位早期退出错误,也未据此修改产品代码。最终六轮完成后的监督脚本仍因
|
||||
向已退出 CDP 调用 browser close 返回错误;随后不附带 CDP 独立关闭命名浏览器成功。
|
||||
OS 按本轮目录核对无遗留 Electron/Node 进程,原始失败日志未覆盖。
|
||||
|
||||
文档检查覆盖本轮六份文档、81 个相对文件链接,无缺失;未逐一校验所有历史锚点。
|
||||
修改未提交、未推送、未发布。
|
||||
|
||||
## 2026-09-15 Runtime 执行清单设计(未实现)
|
||||
|
||||
对应 FR-CL1–FR-CL4。用户本轮明确只完善设计与进展文档,不改代码;
|
||||
|
||||
Reference in New Issue
Block a user