dsh-git-session-vault:用私有 Git 仓库备份与同步 DSH 会话

前言

DeepSeek Harness(DSH)把每条对话存成本地文件,路径形如 DSH_HOME/sessions/<工作区>/<会话 id>/session.v4.jsonl.zstd。换电脑或磁盘故障时,这些记录不会自动跟着你走;社区里也没有统一的「会话云备份」方案。若你希望会话留在自己控制的存储里、又能在多台机器上收敛到同一状态,就需要把本地会话目录和版本控制结合起来。dsh-git-session-vault(会话保险库)就是面向这一需求的 DSH 插件:用你自己的私有 Git 仓库做备份、恢复与多端同步,并在双方同时改动同一会话时停下来等你决定,而不是静默覆盖。

这是什么

dsh-git-session-vault 由维护者 XunWuJian 发布,在 SkillHub 社区目录中归类为「记忆」。插件把 DSH 会话原始文件原样写入 Git 仓库,不做格式转换;任何装了 DSH 的机器在同步后都能直接读取这些 .zstd 文件。

仓库与文档:

DSH 生态强调「一切皆插件」;SkillHub 是独立的社区插件目录,与 DeepSeek / 幻方无官方从属关系。

它解决什么问题

README 中的定位可以概括为三点:

  • 换设备:新机器配置同一仓库并同步一次,历史会话回到本地。
  • 备份:每次同步产生带信息的 Git 提交,可按提交回退。
  • 多端并存:两台设备都改过同一会话且内容不一致时,插件停止并提示冲突,不会悄悄用远端覆盖本地。

会话文件含完整对话、代码片段与路径。远程仓库必须是私有的;公开仓库等于公开全部聊天记录,插件无法阻止你推送到公开库,需自行确认权限。

核心功能

三向合并

插件为每条会话维护基线 base(上次双方一致时的内容哈希),同步时比较 base、本地与远端:

本地 远端 动作
未变 未变 跳过
已改 未变 上传
未变 已改 下载(覆盖前先备份本地旧文件)
都改过且内容相同 跳过
都改过且内容不同 冲突:停止并等你决定
本地没有 远端有 下载
本地有 远端没有 上传
首次同步同 id 不同内容 冲突

硬规则(README 原文要点):

  • 从不删除本地文件;仓库里消失的会话仍留在本机。
  • 覆盖前将旧文件复制到插件数据目录 backups/<时间戳>/。
  • 不会静默覆盖本地改动;需显式开启「允许覆盖」或在冲突面板选择保留哪一边。
  • 推送失败时提交留在本地,错误如实报告,下次可重试。

仓库布局

manifest.json
metadata/schema.json
profiles/<工作区>/sessions/<会话 id>/*.zstd

manifest.json 为备份索引;会话文件与 DSH 本地格式一致。

设置界面与自动同步

装好后在 DSH 中打开 设置 → 会话保险库,可配置仓库地址、分支、设备名、认证方式,查看本地会话数、基线数、上次同步时间与最近错误;冲突面板可逐条选「保留本地」或「保留远端」。支持同步、仅上传、仅下载、查看历史,以及子代理会话、上传/下载开关、覆盖保护、单会话大小上限等选项。自动同步可在启动后执行一次,或在会话变化后防抖同步。

给 Agent 的工具

工具 作用
dsh_session_sync_status 读取状态与上次结果
dsh_session_sync_list 列出本地会话
dsh_session_sync_diff 只读三向比较
dsh_session_sync_sync 双向同步(需二次确认)
dsh_session_sync_backup 仅上传
dsh_session_sync_restore 仅下载
dsh_session_sync_history 查看提交历史

会写数据的操作须先不带 confirm 调用以获取计划,再带 confirm: true 执行。

安装与启用

插件在 DSH 配置目录安装(README 给出的命令如下,二选一):

dsh plugin add dsh-git-session-vault

或指定 profile:

dsh plugin add dsh-git-session-vault --profile web

装好后打开 设置 → 会话保险库 完成仓库与认证配置。

package.json 声明运行环境:node >= 22.19.0,dsh >= 0.2.0-rc.1。插件以当前 DSH 进程权限运行;安装前建议阅读源码与 MIT 许可证,确认仓库地址与凭据策略符合你的安全要求。

从源码安装(需自行构建,README 步骤):

git clone https://github.com/XunWuJian/dsh-git-session-vault.git
cd dsh-git-session-vault
pnpm install
pnpm run build
dsh plugin add .

典型用法

下面步骤来自 README「快速开始」,可按顺序复现。

  1. 在 GitHub、Gitee 或自建 Git 服务上新建空的私有仓库。
  2. 打开 设置 → 会话保险库,填入仓库地址,例如 git@github.com:you/private-sessions.git。
  3. 点 测试连接 确认可访问。
  4. 点 同步。首次同步会创建分支、写入备份布局并推送。

之后在新设备上:安装同一插件 → 填同一仓库 → 同步,历史会话即可拉取到本地。

认证

方式 什么时候用 怎么配
系统凭据助手(推荐) 已配置 SSH 或 Git 凭据 无需额外填写
环境变量令牌 HTTPS + PAT,不用凭据助手 填环境变量名,如 DSH_SYNC_TOKEN

令牌不会写入配置文件,插件只保存变量名。含 https://user:token@host/repo 的地址会被剥掉凭据并拒绝保存。

适用场景与注意

适合:需要在多台开发机之间迁移 DSH 对话、希望备份带 Git 历史、且能接受私有仓库存储敏感会话内容的用户。

需要注意(README):

  • 仓库体积会随提交增长;会话很多时可考虑定期重建仓库或浅克隆。
  • 首次同步会把本地会话全部上传;请先确认远程仓库为空,或你确实要合并进去。
  • 冲突是预期行为,插件不会在两端同时修改时替你猜一侧结果。

结尾

dsh-git-session-vault 把 DSH 本地会话目录与私有 Git 仓库绑在一起:备份、换机恢复和多端同步都走同一套三向合并规则,冲突时由你拍板。若要在 Harness 里启用,可从社区目录了解概况,并以 GitHub README 为准完成安装与配置。

羽毛球分组比赛记分
小程序二维码

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

小夜