dsh-anywhere-sync:用私有 Git 仓库在多机之间同步 Harness 配置

前言

在 DeepSeek Harness(DSH)里开发智能体时,profile 往往不只一套 JSON:已装插件、各插件的 cordis.patch.yml、pnpm 锁文件、本地 link:/file: 插件源码,以及可选的 skills 目录,都会随机器和环境变化。手工拷贝目录容易漏项,也无法区分「哪台机器改动了哪一份文件」。社区插件 dsh-anywhere-sync(维护者 j1kwen,分类:联网工具)把上述内容投影到一个私有 Git 仓库,每台机器在下次 sync 时按策略合并,使多台 DSH 环境收敛到同一套可版本化的配置。

这是什么

dsh-anywhere-sync 通过一台私有 Git 远程仓库,同步 Harness profile 中的插件清单、插件配置、依赖锁、本地插件源码、skills 及其他 profile 文件。六项同步内容各自独立开关;在一台机器上的变更会在其他机器执行 sync 时落地。插件当前版本为 1.4.1(MIT 许可证),依赖 Node.js 20+ 与系统上的 git,并需要带 Web UI 的 Harness。

核心功能

下面介绍 README 中已写明、且与实现一致的能力。

六项可选同步项

项目 本地来源 仓库路径 默认
插件清单 <profile>/package.json profile/<profile>/package.json 开
本地插件源码 link: / file: / 绝对路径依赖对应目录 local-plugins/<package>/… 开
插件配置 <profile>/cordis.patch.yml profile/<profile>/cordis.patch.yml 开
插件数据 设置页列出的 $DSH_HOME 下路径 plugin-data/<path> 开
依赖锁 pnpm-lock.yaml、pnpm-workspace.yaml 同路径结构 开
其他 profile 文件 presets、config.toml 等 profile/<profile>/… 关
Skills ~/.agents/skills/、.skill-lock.json skills/… 关

关闭某一项时,该项不会被读取、写入或删除。即便开启「其他 profile 文件」,形如 .env*、*credential*、id_rsa*、.npmrc 等疑似凭据的文件仍会被排除。

三路比较与冲突

同步时对每个文件比较 本地、远程 与 上次 sync 的 base hash:只有两侧相对 base 都改过才算冲突。冲突策略默认为远程优先,也可选本地优先,或在设置页保留冲突并按文件选边。

覆盖前备份与自动同步

每次覆盖本地文件前会备份,最近 10 次保存在 $DSH_HOME/anywhere-sync/backups/。可配置定时间隔 sync、启动时 sync,以及在拉取变更后的插件清单后自动安装依赖。

本地插件与路径无关的仓库

推送前会把 package.json 与锁文件中的 link:、file:、workspace: 及绝对路径依赖投影成可移植形式,仓库里不写各机器的安装路径。其他本地插件源码存放在 local-plugins/<package>/;pull 后写回本机 link 目录或 $DSH_HOME/anywhere-sync/local-plugins/。本插件默认不参与同步,避免开发版覆盖另一台机器上的 GitHub 安装版;其设置保存在 $DSH_HOME/anywhere-sync,不会进共享仓库。

Agent 工具与设置页

Agent 工具 anywhere_sync 提供与 UI 一致的 status、sync、pull、push、install 操作;工具不能读取 token、不能改仓库 URL 或同步项开关。人类操作入口在 Settings → Config Sync:状态、分项文件列表、冲突处理与安装/同步控制。

安全要点

Token 仅存本机 $DSH_HOME/anywhere-sync/credentials.json(权限 0600),经 scoped GIT_ASKPASS 交给 git,不会写入仓库或日志。也可使用环境变量 ANYWHERE_SYNC_TOKEN、GH_TOKEN、GITHUB_TOKEN。除配置的 Git 远程外无遥测或额外出站请求。

安装与启用

环境要求:带 Web UI 的 DeepSeek Harness、Node.js 20+、git。

从插件目录安装(社区常用方式):

dsh plugin --profile desktop add j1kwen/dsh-anywhere-sync

从本地 checkout 或 release 包安装:

dsh plugin --profile desktop add /path/to/dsh-anywhere-sync

安装后重启 Harness,打开 Settings → Config Sync。若页面空白,按文档先重启;客户端 bundle 需在重启后加载。

典型用法

下面步骤来自官方 Quick start,可在两台机器上复现。

  1. 新建一个用于同步配置的 私有 Git 仓库。
  2. 创建 Personal Access Token:classic 需 repo 权限;fine-grained 需对该仓库 Contents 读写。
  3. 在 Settings → Config Sync 填写仓库 URL、分支与 token,选择 Save and connect。
  4. 选择 Sync now。在另一台机器安装同一插件、填写相同仓库与 token 后执行 sync。
  5. 按需开启 Scheduled sync 或 Sync on startup,保持多机一致。

若 pull 改变了插件 manifest,需要先完成依赖安装并重启 Harness,新插件才会加载。新机器仍需各安装一次本插件以进入设置页并完成首次 sync。

插件数据默认可同步 dsh-whale-widget 的部分 JSON(外观、气泡布局、自定义模型注册等);账本与按轮次统计等整文件同步会混台机器的数据,默认不包含,可在 UI 中按需添加其他相对 $DSH_HOME 的路径。

适用场景与注意

适合:在台式机、笔记本或多套开发环境中使用同一 DSH profile;需要版本化插件组合与 cordis.patch.yml;使用 link:/file: 本地插件并希望在仓库中携带源码而非每台机器单独 clone。

注意:

  • 插件以当前 DSH 进程权限运行,安装前应阅读 GitHub 源码 与 MIT 许可证,自行评估私有仓库与 token 的保管方式。
  • 共享仓库应设为私有;token 仅本机保存,勿提交进 Git。
  • DSH 社区插件目录为独立站点 SkillHub 上的插件页,与 DeepSeek / 幻方无官方从属关系;生态理念是「一切皆插件」,本插件是其中的联网类配置同步工具。

结尾

dsh-anywhere-sync 把 Harness profile、插件清单与配置、锁文件和本地插件源码收敛到一个私有 Git 仓库,用分项开关与三路合并降低多机拷贝的配置漂移。查阅说明与 issue 可访问 GitHub 仓库,在目录站查看条目:https://www.skillhub.cn/plugins/j1kwen/dsh-anywhere-sync。

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

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

小夜