Back to home@lzxcs

archive-vault-pro

归档会话库:查看所有工作区的已归档会话、只读回看内容、右键取消归档(不影响官方逻辑)。

Stars
0
Language
JavaScript
Created
Aug 26, 2026
Updated
Aug 26, 2026

Introduction

archive-vault-pro

安装(Install)

需要 DSH(DeepSeek Harness)与 web profile(dsh web):

# 1. 安装插件(pnpm git 依赖)
dsh plugin --profile web add github:lzxcs/archive-vault-pro
# 2. 在 ~/.dsh/profiles/web/cordis.patch.yml 末尾追加注入块:
- insert:
    - id: archive-vault-pro
      name: 'archive-vault-pro'
# 3. 重启 DSH Web(托盘菜单 → DSH Web 重启),浏览器 Ctrl+F5 刷新页面

卸载:dsh plugin --profile web remove archive-vault-pro,并删掉 cordis.patch.yml 中的注入块。

DSH web profile 插件:归档会话库。侧边栏底部「归档会话」按钮打开窗口, 聚合展示所有工作区的已归档会话(窗口化列表,数千条不卡顿),点击查看 只读内容(分页加载),右键条目取消归档——会话原样恢复原工作区原位并自动 打开,可直接继续对话。

原理(不改动官方文件)

  • 列表数据来自客户端既有 store(ctx.workspaces.list / ctx.sessions.list),零额外请求;
  • 内容经 host 半 GET /__archive-vault/read 折叠 + 分页读取;
  • 取消归档经 POST /__archive-vault/unarchive 调用官方 WorkspaceRegistry 的既有 enqueueOperation/requireState/setState 方法链移除归档集合成员; 官方 domain/changedhost/archived-sessions-changed 帧自动广播到所有客户端, 会话在原 sessionIds 槽位恢复,日志从未被触碰。

安装

  1. ~/.dsh/profiles/web/package.json 的 dependencies 增加 "archive-vault-pro": "file:./archive-vault-pro"
  2. ~/.dsh/profiles/web 执行 pnpm install
  3. cordis.patch.yml 末尾追加本插件的 insert 块(见文件内注释);
  4. 重启 dsh web

卸载

删除 cordis.patch.yml 中对应的 insert 块与 package.json 依赖,pnpm install, 重启 dsh web。会话与日志不受影响。

已知限制

  • 内容查看为只读自绘视图,不渲染官方全部细节(如图片仅占位、工具卡折叠);
  • 取消归档调用官方注册表内部方法链(非公开 API);若未来 DSH 新增正式 unarchive API,仅需替换 lib/index.jsenqueueOperation 那一处;
  • 长日志(> 5000 折叠条目)仅显示最近窗口。

验证记录

  • host-core 单测:node --test test/host-core.test.mjs —— 12/12 通过 (折叠、配对、分页、截断、幂等取消、turn/end 对象 reason)。
  • host 路由 mock 测试:node --test test/route.test.mjs —— 6/6 通过 (read 200/400/404、untilSeq 锚点翻页、unarchive 移除+幂等+校验+405)。
  • 真实日志探针:test/real-data-probe.mjs / test/page-probe.mjs 对 session-8ae2269c / e0bb9853 / eb46a8d6 / 27873c8a 四份真实归档日志验证 折叠与分页拼接(无缺口、严格递增)。
  • 线上验证(3080 实例,已完成,无需再重启):
    • /__archive-vault/read:200(真实折叠 JSON)、非法 limit 400、未知会话 404;
    • /__archive-vault/unarchive:真实取消 session-8ae2269c → unarchived:trueworkspace.json 落盘(13→12)、幂等重放 false
    • /plugins/archive-vault-pro/client.js:200(联结点直连源码);
    • 3000 条性能冒烟:服务端加载 3012 条、fake id 读取 404("日志缺失"容错)、 真实会话 200;冒烟后已恢复 12 条最终状态。
  • 源码分发说明:node_modules/archive-vault-pro 是指向本目录的 junction, 修改源码即时生效(每次 pnpm install 可能将其替换为拷贝,若发生请重建 junction)。
  • 查看器改版(仅看对话模式,默认隐藏工具/过程/信息行;打开即拉全量并定位到 开头;分段「仅看对话 | 全部」;「加载更新」分片渲染):
    • node --check 通过;test/inspect-hooks.mjs(hook 顺序扫描)仅剩 2 个 同行的已知误报;host-core + route 单测 18/18 通过;
    • 渲染验收:test/preview-viewer.generated.html(真实 dsh 暗色 token + 插件 CSS 全量复刻)经 headless Edge 截屏 + 两轮独立评审(第一轮 8 项 意见已全部修复并复核:气泡与滚动条间隙 20px、标头分组、CTA 强调、 选中行色条、计数去重、meta 对比度改用 label-secondary 等);
    • 横向溢出门槛:doc-overflow: 0px @ 有效视口 1416/1024/492(scrolling 元素 scrollWidth − clientWidth = 0,气泡右缘距滚动区 ≥ 20px)。
  • 打开大会话变慢(用户实测"点开会话要等 3 秒")——修复 + 实测
    • 根因:read 路由每页都 readFrom(id,0) 全量重读 + 重折叠(1MB 会话 ≈0.9s/页、8.6MB ≈2.6s/页),分页是线性乘数;
    • 修复:host 侧 createFoldCache(LRU cap 12 / TTL 300s / in-flight 去重, unarchive 立即失效)+ 客户端对列表前 2 条做 limit=1 预热预取;
    • 实测(3080 实例最新进程,node fetch 与浏览器同路径): session-27873c8a(337 条折叠):修复前整链 ≈1.7s(2 页×0.9s);修复后 首次打开 ≈0.9s(仅一次全量读),再打开/切换回来 ≈ 39ms; session-94250f63(1599 条折叠 / 8.6MB):修复前全链 21.6s;修复后 全链 ≈3.0s(页 1 冷读 2.6s + 页 2-8 各 10-35ms),二次打开毫秒级;
    • 单测 26/26(新增 createFoldCache 6 项 + 路由缓存 2 项),node --check 全过,hook 扫描仍仅 2 个已知误报。

上线后状态

  • 归档集合当前 12 条(session-8ae2269c… 已取消归档作为演示),备份存在 ~/.dsh/storages/workspace.json.bak(原始 13 条)与 workspace.json.pre-smoke(冒烟前状态)。