dsh-profile-gist-sync:用 GitHub Gist 备份与同步 DSH Profile 配置

前言

在多台机器上跑 DeepSeek Harness(dsh)时,Profile 里的 package.json、cordis.yml、供应商配置等文本往往需要手工拷贝或自己写脚本。DSH 插件市场支持 dsh-profile-backup 格式的导入导出,但若要在两台机器之间持续对齐、并一眼看出本地与远端是否一致,仍需要额外工具。

dsh-profile-gist-sync 由 Meta-Virgo 维护,分类为 admin-security,当前版本 1.1.1(MIT 许可证,要求 Node >= 20)。它把本机 Profile 配置备份到 unlisted secret GitHub Gist,可在另一台机器拉取同步,并在设置页面对比本地与云端是否一致;同时向 Agent 暴露 config_backup 工具。下文介绍安装步骤、页面用法与同步时应注意的事项。

这是什么

一句话:DeepSeek Harness 插件,提供 设置 → 插件 → 配置同步 / Config sync 页面,以及 Agent 侧 config_backup 工具,通过 GitHub Gist API(api.github.com)上传/下载 dsh-profile-backup v0.2 文档。

Gist 以 public: false 创建,属于 unlisted、非 private:持有链接者可读,链接本身即秘密。Gist id 记在 <profile>/.dsh-config-sync/settings.json,该文件不参与备份,避免同步时泄露来源机器的 Gist id。

核心功能

设置页三步流

页面按编号分三块,每步对应按钮,无需手打路径:

  1. 状态 — 打开时自动检查云端;展示本地与云端是否一致、当前 profile、文件数量、上次上传/同步时间。「重新检查」可再查一次。
  2. 上传 — 「上传到云端」更新本 profile 已记住的 Gist(首次会创建并记住);「另存为本地文件」把同一份备份写到本地文件。
  3. 同步 — 「从云端同步」将云端副本写入本机,之后可提供「撤销上次同步」。同卡片会列出 manifest 中点名但本机未安装的插件,并提供一键安装。

Token、Gist id、从备份文件恢复、文件列表、新机清单等放在折叠的 高级设置 中。

Agent 工具

除 UI 外,插件注册 config_backup,供 Agent 以编程方式执行备份相关动作(含文档所述的 undo 等)。

备份内容与排除项

备份携带 Profile 目录中的文本配置:package.json、cordis.patch.yml、cordis.yml、.npmrc、pnpm-workspace.yaml、data/*.json、suppliers/* 及 profile 内其他文本文件。格式与 DSH 插件市场读写的 dsh-profile-backup v0.2 相同,可与市场导入导出互通。

明确不上传并在 UI 中列出原因的路径包括:node_modules/、pnpm-lock.yaml、.git/、*.bak、各类隐藏目录(含 .dsh-config-sync/)、data/auths/credentials.sqlite 等二进制、data/usage.json(可按高级选项包含计数器),以及本机才有的 dependencies 写法(link:、file:、portal:、workspace: 或裸路径)。后者会从上传用的 package.json 中去掉对应条目并报告,避免在另一台机器用无效路径覆盖目标机已有 spec。

恢复为 合并式、可撤销:备份中的文件会写入,仅本地存在的文件保留;package.json 的 dependencies 与 dsh.profile.bundles 做并集合并,同名依赖以 incoming spec 为准。每次覆盖前会把旧内容快照到 <profile>/.dsh-config-sync/undo/<stamp>/。

网络与凭证

插件测试要求仅连接 api.github.com。GitHub token 不会写入磁盘,单次请求使用,来源可为请求体、环境变量 DSH_GITHUB_TOKEN / GITHUB_TOKEN,或已登录的 gh CLI;设置页提供检查 token 的按钮。

安装与启用

在目标 profile 下执行官方 README 中的命令(示例为 web profile):

dsh plugin --profile web add dsh-profile-gist-sync          # from npm
dsh plugin --profile web add github:Meta-Virgo/dsh-profile-gist-sync   # from source

然后 重启 DSH。包为纯 ESM,无额外依赖、无构建步骤、无安装脚本。

插件在当前 dsh 进程权限下运行;安装前建议阅读 源码仓库 与 MIT 许可证,自行评估是否适合本环境。

典型用法

单机备份与对比

  1. 安装插件并重启后,打开 设置 → 插件 → 配置同步。
  2. 在高级设置中按需配置 token(或使用环境变量 / gh 登录)。
  3. 使用 上传 将本机配置推到 Gist,或在 状态 区确认与云端一致。

需要本地副本时,在同一页使用「另存为本地文件」。

第二台机器同步

README 给出的可复现流程如下:

  1. 在该机器安装本插件并重启 DSH。
  2. 使用 与 Gist 所有者相同 GitHub 账号 的 token。secret Gist 仅所有者可经 API 读取;其他账号会得到「not found」而非单纯的 forbidden 提示。
  3. 打开配置同步页,点击 从云端同步。
  4. 仍缺失的插件会出现在步骤 ③;点击「安装缺的插件」后再次重启 DSH。

步骤 2 与 4 是新机器上最常见的失败点,因此新机清单与 token 报错说明集中在高级设置与页面文案中。

若需改用新的 Gist:在高级设置清空 Gist id 并保存以创建新 Gist,或粘贴 id/链接以接管已有 Gist。

适用场景与注意

适合谁:需要在两台及以上机器之间对齐 DSH Profile 文本配置、又希望用 GitHub 私有链路(Gist + token)而非公开仓库的开发者;admin-security 分类也适合关注「上传了什么、连了谁」的运维场景。

应注意:

  • 仅文本配置出境;凭证库、二进制、node_modules 等被排除,但 Gist 链接本身需妥善保管。
  • 同步后插件包不会自动到位,需按页面提示安装 manifest 中的缺失 spec;installBundle 仅为缺失项做加法,不会删除或改写已有 bundle 选择。
  • 从插件市场等其他来源导入的备份文档若含本插件不写的路径(例如 credentials.sqlite),导入时会跳过并列出计划,而非一律拒绝。
  • 社区插件目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;安装与配置责任在用户侧。

结尾

经过上面的步骤,可将 Profile 配置收敛到一条 Gist 链路:本机上传、他机同步、状态区对比是否一致,必要时撤销同步并补齐插件。进一步细节以仓库 README 为准。

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

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

Xiaoye