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/changed→host/archived-sessions-changed帧自动广播到所有客户端, 会话在原sessionIds槽位恢复,日志从未被触碰。
安装
~/.dsh/profiles/web/package.json的 dependencies 增加"archive-vault-pro": "file:./archive-vault-pro";- 在
~/.dsh/profiles/web执行pnpm install; cordis.patch.yml末尾追加本插件的 insert 块(见文件内注释);- 重启
dsh web。
卸载
删除 cordis.patch.yml 中对应的 insert 块与 package.json 依赖,pnpm install,
重启 dsh web。会话与日志不受影响。
已知限制
- 内容查看为只读自绘视图,不渲染官方全部细节(如图片仅占位、工具卡折叠);
- 取消归档调用官方注册表内部方法链(非公开 API);若未来 DSH 新增正式
unarchive API,仅需替换
lib/index.js中enqueueOperation那一处; - 长日志(> 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:true、workspace.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 个已知误报。
- 根因:read 路由每页都
上线后状态
- 归档集合当前 12 条(session-8ae2269c… 已取消归档作为演示),备份存在
~/.dsh/storages/workspace.json.bak(原始 13 条)与workspace.json.pre-smoke(冒烟前状态)。