dsh-ownsync:用自建 Git 服务器同步 DSH 工作区与会话

前言

DeepSeek Harness(DSH)把项目工作区、多会话聊天和附件都落在本机数据目录里。换电脑或重装之后,这些「记忆」不会跟着走;若把整份数据目录拷来拷去,又容易把凭据、插件配置和项目代码一并带上。社区里也有面向 GitHub、Gitee 等托管平台的同步插件,更适合自动同步和多分支场景。

下面介绍 dsh-ownsync(维护者 Shengyis,npm 包名 dsh-ownsync):把自己控制的 Git 裸仓库 当作传输通道,只做 手动上传 / 下载,把 DSH 的工作区登记、会话日志和聊天里引用的附件同步过去,在另一台机器上接着聊。设计上没有自动同步、没有分支合并;文档要求同一时间只在一台电脑上改内容。

这是什么

dsh-ownsync 是 DSH 生态中的「记忆」类插件:同步范围收窄为 DSH 自身需要的三类数据,不碰项目仓库里的代码、settings.yaml、插件清单和凭据等。服务器上的 main 分支始终是当前内容的一份快照式提交,仓库体积不会随上传次数无限膨胀。

同步什么、不同步什么

上传时会扫描本机数据目录,写入本地同步仓库 .ownsync/repo.git,再向远端 main 推送只含当前内容的根提交。

类别 内容
工作区 storages/workspace.json:工作区列表、标题、顺序、会话归属、归档状态
会话 sessions/** 下各会话的最高代际日志
聊天附件 attachments/** 中被上述会话日志引用到的文件

不参与同步的包括:项目文件夹里的代码与文档、settings.yaml、cordis.patch.yml、插件清单、凭据、缓存、日志、AGENTS.md、skills/。只有 header、没有任何事件的空白会话也不同步。

权威来源是服务器:服务器上有什么,本机下载后就变成什么。

核心机制

服务器侧

在自有机器上准备一个普通裸仓库即可,例如:

git init --bare /srv/git/dsh-sync.git

README 说明不要设置 receive.denyNonFastForwards,因为每次上传可能对应强制推送。

上传

  1. 扫描本机三类同步内容;
  2. 写入 .ownsync/repo.git;
  3. 生成只含当前内容的根提交并推到 main。

下载

  1. 取回 main;
  2. 按文件写回本机(覆盖前把原件存到 .ownsync/backup/);
  3. 记录本机基线版本;
  4. 若写回了会话,会自动重启 DSH 以便重新读盘;会话被占用时会先切到空白会话再重启。

插件调用系统 PATH 里的 git(Windows 上为 Git for Windows)。若提示找不到 git 命令,安装后需完全退出并重新打开 DSH。

界面与状态

侧栏左下角(头像上方)有同步卡片:显示本机 / 服务器版本号、上次同步时间,以及 上传、下载、检查更新 按钮;齿轮打开设置(仓库地址、分支、两个刷新间隔)。

本机状态刷新默认每 5 秒、仅本地扫描;服务器自动检查默认每 10 秒,执行 git fetch。这些间隔存在本机浏览器里,不参与同步。

常见状态包括:未配置地址、尚未检查服务器、无法连接、服务器空仓库建议上传、本机尚未下载、本机有未上传改动、服务器版本较新建议下载、已同步等。按钮会根据状态自动启用或禁用,禁用时悬停可看原因。

「同步」按钮目前为占位,点击不执行操作。「重启」需确认,并受运行中任务、插件安装、刚重启 5 秒内等条件限制;自动重启能力以 Windows 桌面版为主,Web 或其他环境可能只提示手动退出。

安装与启用

插件通过 npm(或团队私有 registry)安装,当前 package 版本为 1.1.0,许可证 MIT,要求 Node >= 24。

在 DSH 内:

  1. 打开 DSH → 设置 → 插件;
  2. 输入包名 dsh-ownsync,点安装;
  3. 完全退出 DSH 再打开。

等价命令行:

# Web 端
dsh plugin --profile web add dsh-ownsync

# Windows 桌面端
& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add dsh-ownsync

升级可指定版本,例如 dsh-ownsync@1.1.0,装完同样要完全退出再打开。若不用公共 npm,需在 profile 的 .npmrc 配置 registry,或在安装命令后加 --registry <地址>。

插件以当前 DSH 进程权限运行;安装前建议阅读 GitHub 仓库 源码与许可证,自行判断是否适合你的环境。

典型用法

1. 准备服务器与凭据

git init --bare /srv/git/dsh-sync.git

插件不弹登录窗。需先在本机打通 git 访问:

  • SSH:ssh-keygen,公钥加到服务器,ssh -T user@host 能通;
  • HTTPS:在终端执行一次 git ls-remote <仓库地址>,按提示输入账号与令牌,由系统凭据管理器保存。

2. 配置仓库地址

在 DSH 侧栏点设置齿轮,填入地址(示例:ssh://git@backup.example.com:2222/srv/git/dsh-sync.git),保存。

3. 首台电脑(已有内容)

点 检查更新。空仓库时状态为「服务器上还没有内容, 建议上传」,点 上传 即可在服务器上产生 v1。

4. 新电脑

安装插件、填同一地址,检查更新 → 下载。覆盖前会备份到 .ownsync/backup/;写回会话后会自动重启。之后换机流程固定为:旧机 上传 → 新机 检查更新 → 下载。

安全边界与限制

  • 下载会覆盖本机,原件在 <数据目录>/.ownsync/backup/<时间>/files/... 可手工恢复。
  • 一次删掉过多已同步文件时上传会要求确认,并可能把服务器旧版本备份到本机。
  • 本机有未上传改动时下载需确认;上传若在服务器已被另一端改过之后进行会被拒绝,提示先下载(session/end-seed 标记不算改动)。
  • 服务器只是传输通道,不是完整备份方案;长期备份仍要依赖本机数据目录与 .ownsync/backup。
  • 会话正在生成时上传会被拒绝;单文件上限 256 MiB,超限附件会跳过并出现在上传结果里。
  • 下载写回会话、占用会话切空白等场景会触发自动重启(Windows 桌面版由外部助手拉起);其他平台需按提示手动重启。

本插件基于 dsh-chatsync 修改,去掉托管平台 API、分支合并和自动同步,面向自建 Git;若需要 GitHub / Gitee 上的自动同步与多分支,文档建议优先使用 chatsync。

结尾

dsh-ownsync 把 DSH 的工作区、会话和引用附件收敛到一条你可控的 Git 通道上,用明确的上传 / 下载节奏换电脑接着聊,避免把无关配置和项目代码一并同步。插件目录见 SkillHub 条目,源码与变更说明见 GitHub:Shengyis/dsh-ownsync。

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

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

小夜