dsh-session-vault:DSH 会话的浏览、导出、导入与跨机器搬运

前言

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_list
  • session_export
  • session_archive_inspect
  • session_import
  • session_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。

典型用法

图形界面

设置面板四个标签页:

  1. 导出 — 搜索、勾选、「导出所选并下载」。
  2. 导入 — 点击或拖入 .dshsession;可先查看归档内容,填写新工作区目录、冲突策略、是否自动建目录,再「预览」或「开始导入」。
  3. 归档 — 已导出归档的下载、导入、删除。
  4. 清理 — 三类垃圾各自范围标签;先预览,勾选确认后再删除。

通过 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜