前言¶
DeepSeek Harness(DSH)的会话日志落在本地持久化层里,换电脑、换目录或升级 DSH 版本时,若只靠拷贝磁盘上的原始目录,往往要对齐工作区路径、会话格式代际和侧栏挂载关系,成本不低。社区里已有面向本地归档管理的参考实现(如 MichengAI/dsh-archive-manager),相邻需求则是把会话打成可移植包,在另一台机器或新版本 DSH 里重新落库并挂回工作区。
下面介绍维护者 jr-create 在 DSH 插件目录「记忆」分类下的 dsh-session-vault(DSH 会话保管库):宿主端 Node 服务、浏览器设置页 UI,以及供 Agent 调用的模型工具,围绕「看见 → 取走 → 放回」三类操作组织能力。归档格式标记为 dsh-session-archive(gzip 压缩的 JSONL,内容为持久化服务返回的归一化事件,而非磁盘原始字节),旧名 dsh-session-export 产生的标记仍可读取。配合 dsh-config-manager 可实现完整 DSH 配置与会话的换机移植。
这是什么¶
- 名称:dsh-session-vault(npm 上该名已被无关插件占用,因此通过 GitHub 直接分发;仓库名与内部路由/数据目录仍用 vault 命名)
- 维护者:jr-create
- 版本(package.json):0.1.0
- 许可证:MIT
- 定位:浏览、导出、导入,以及跨机器搬运 DSH 会话;导出归档扩展名为
.dshsession
核心功能¶
导出与导入¶
| 能力 | 说明 |
|---|---|
| 导出 | 勾选若干会话后打包为一个 .dshsession;不勾选则导出全部 |
| 部分成功 | 个别会话读不出时跳过并逐条报告原因,其余照常导出;全部失败才报错 |
| 导入 | 上传或选择 .dshsession,经 DSH 持久化服务重新落库,并挂到工作区侧栏 |
| 迁移路径 | 导入时可指定新的工作区目录,例如从 D:\old\proj 迁到 /home/me/proj |
| ID 冲突 | 默认跳过已有会话;也可选择以新 ID 导入,两份都保留 |
| 预览 | dryRun 只输出计划,不写入 |
归档与清理¶
- 归档管理:列出、下载、查看内容、删除已导出的归档;导出文件默认落在
<DSH_HOME>/dsh-session-vault/exports/。 - 清理会话:永久删除三类范围——未挂载且未归档的、已归档的未挂载的、从未使用过的空壳会话;先预览,需双重确认。删除是插件内唯一绕过服务直接动文件的操作(因
SessionPersistence无删除接口),并带有工作区归属、活动会话、路径安全与confirm: true等围栏;详见 README「已存储的会话 ≠ 侧栏里的会话」与清理说明。
列表与筛选¶
设置页与会话 API 区分「持久化里存的」与「侧栏可见的」:可按全部、侧栏可见、未挂载工作区、子代理等范围筛选;每行标注 mounted / orphaned / 工作区信息等。标题按三档解析(投影缓存、首条人类消息、无标题),并标出来源 titleSource。
模型工具与 HTTP¶
Agent 可调用:
session_listsession_exportsession_archive_inspectsession_importsession_delete(含 dryRun、includeArchived、includeEmpty等选项)
浏览器端走同源下的 /api/dsh-session-vault/*(如 GET /sessions、POST /export、POST /import、POST /purge 等)。README 中给出了 GET /api/dsh-session-vault/sessions 的 JSON 示例字段。
仓库测试:node --test 共 201 项测试,README 称全部离线通过。
安装与启用¶
插件为纯 JavaScript,无构建步骤;不要为其添加 dependencies / peerDependencies,也不要复制 node_modules(link 安装时若 import 宿主包会导致插件树加载失败、dsh web 无法启动;本插件通过 ctx.get() / ctx.inject() 与本地 shim 避免 import 宿主包)。
# 从 GitHub 安装
dsh plugin --profile web add github:jr-create/dsh-session-vault
# 锁定到某个 commit(推荐)
dsh plugin --profile web add github:jr-create/dsh-session-vault#<sha>
# 或装 Release 里的预打包 tarball
dsh plugin --profile web add ./dsh-session-vault-0.1.0.tgz
# 本地开发
dsh plugin --profile web add link:<你的源码目录>
安装完成后重启 dsh web,打开 设置 → 会话保管库。
卸载:
dsh plugin --profile web remove dsh-session-vault
运行环境(package.json):Node ^22.19.0 || >=24.0.0。
典型用法¶
图形界面¶
设置面板四个标签页:
- 导出 — 搜索、勾选、「导出所选并下载」。
- 导入 — 点击或拖入
.dshsession;可先查看归档内容,填写新工作区目录、冲突策略、是否自动建目录,再「预览」或「开始导入」。 - 归档 — 已导出归档的下载、导入、删除。
- 清理 — 三类垃圾各自范围标签;先预览,勾选确认后再删除。
通过 Agent 工具¶
按 README 工具名调用即可,例如先 session_list 确认范围,再 session_export 生成归档,session_archive_inspect 检查内容,session_import 落库(可先 dryRun)。
适用场景与注意¶
适合:需要在两台机器或不同 DSH 版本之间迁移会话;需要批量导出备份 .dshsession;工作区被删后会话日志仍在磁盘上,需要列出、导出或按规则清理;希望 Agent 在对话中自行导出/导入会话。
注意:
- 插件在 web profile 下安装,以当前
dsh web进程权限访问持久化与会话数据;安装前请自行查看 GitHub 源码 与 MIT 许可证。 - 归档是归一化事件流,不是
~/.dsh/sessions/**的逐字节镜像;跨版本导入依赖 DSH 持久化服务,与纯目录拷贝不是同一条路。 - 删除不可撤销;要保留副本请先导出。
结尾¶
dsh-session-vault 把 DSH 会话做成可清单、可打包、可回迁的保管库,并显式处理未挂载、子代理与清理边界,与本地归档类插件形成互补。目录与文档:
- 插件目录页:https://www.skillhub.cn/plugins/jr-create/dsh-session-vault
- GitHub:https://github.com/jr-create/dsh-session-vault