DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

XunWuJian /

XunWuJian/dsh-git-session-vault

Verified

用私有 Git 仓库备份、同步 DSH 会话记录,三向合并,冲突时停下来问你。 / Back up, restore and sync DSH sessions across devices with your own private Git repo.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@7e654d01

会话保险库 · DSH Session Vault

用你自己的 Git 仓库备份、恢复并在多台设备之间同步 DeepSeek Harness 的会话记录。

⚠️ 仓库必须是私有的。 会话文件里是完整的对话内容,包括你说过的每一句话、贴过的代码和文件路径。公开仓库等于公开你的全部聊天记录。

它解决什么问题

DSH 把每条会话存成 DSH_HOME/sessions/<工作区>/<会话 id>/session.v4.jsonl.zstd 这样的本地文件。换一台机器就看不到之前的对话;硬盘坏了就全没了。

这个插件把这些文件放进一个 Git 仓库,让多台设备通过同一个仓库收敛到相同状态:

  • 换设备:新机器同步一次,历史会话全部回来。
  • 备份:每次同步都是一个带信息的提交,可以回退。
  • 多端并存:两台机器都改过同一个会话时停下来问你,绝不悄悄覆盖。

安装

# 在 DSH 配置目录里安装(二选一)
dsh plugin add dsh-git-session-vault

或者装进某个 profile:

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

装好后打开 设置 → 会话保险库。

从源码安装

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

快速开始

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

之后:新设备装插件 → 填同一个仓库 → 点 同步,历史会话就下来了。

认证

方式 什么时候用 怎么配
系统凭据助手(推荐) 已经配好 SSH key 或 Git 凭据 什么都不用填
环境变量令牌 HTTPS + PAT,不想用凭据助手 填环境变量名,例如 DSH_SYNC_TOKEN

令牌永远不会写进配置文件,插件只保存变量名。填 https://user:token@host/repo 这种带凭据的地址也会被自动剥掉凭据并拒绝保存。

三向同步规则

插件为每条会话记录一个基线(base,即上次双方达成一致的内容哈希),同步时比较 base / 本地 / 远端:

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

几条硬规则:

  • 从不删除本地文件。 仓库里消失的会话仍然留在本机。
  • 覆盖前一定先备份。 被替换的文件复制到插件数据目录的 backups/<时间戳>/ 下。
  • 不会静默覆盖本地改动。 本地已修改的会话需要显式开启「允许覆盖」或手动选择保留哪一边。
  • 推送失败不会被吞掉。 提交留在本地,错误照实报告,下一次重试即可。

仓库里的布局

manifest.json                                备份索引(工作区、会话清单、最后操作)
metadata/schema.json                         布局说明(自解释,方便人工查看)
profiles/<工作区>/sessions/<会话 id>/*.zstd   会话原始文件,原样保存

会话文件是 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 真正执行。

需要注意

  • 仓库体积会一直增长。 Git 保留历史,会话日志是整文件快照。会话很多时建议定期重建仓库或使用浅克隆。
  • 不要提交到公开仓库。 插件无法阻止你这么做,请自己确认仓库是私有的。
  • 冲突是设计的一部分。 两台设备改了同一个会话时,插件不会猜你想要哪一边。
  • 首次同步会把本地会话全部上传。 请先确认仓库是空的,或你确实想合并进去。

开发

pnpm install
pnpm run build     # lib/index.js + lib/client.js
pnpm test          # 两个设备 + 一个裸仓库的集成测试

src/ 是主机端(纯 ESM,无 @deepseek-ai/* 运行时依赖),src/client.js 是浏览器端(esbuild 打包成 window.__ModuleLoader__ 模块)。lib/ 是构建产物,不要手改。

许可证

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit 7e654d01e914

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout