前言¶
DeepSeek Harness(DSH)的 profile 里集中了插件依赖、cordis.patch.yml 里的模型与 MCP 配置,以及补丁层开关。换电脑或在家与公司各装一套 DSH 时,手工拷贝 profile 目录容易漏文件、版本对不齐,或在两台机器上各自改同一份配置后互相覆盖。社区插件 @xiaokang6/dsh-config-sync(仓库 xiaokang6/dsh-config-sync-xk)把「只同步配置、不同步会话与附件」这件事做成设置页可操作的流程:远端用坚果云 WebDAV 或 GitHub,本机用逐文件内容哈希做合并与冲突处理,并可选用口令对远端文件做 AES-256-GCM 加密。下面介绍它做什么、怎么装、怎么用。
这是什么¶
维护者为 xiaokang6,在 SkillHub 目录中归类为联网工具。插件当前版本为 0.1.0(MIT 许可证),通过 DSH 的 bundle 机制挂载,在 设置 → 内置插件 → 配置同步 提供 UI 与 HTTP API(/dsh-config-sync/*)。
它解决的是:在一台 DSH 上改好的 profile 配置,经远端在多台设备间保持一致;冲突时不强行二选一,而是保留副本并在面板里选择采用哪一侧。
同步范围与安全边界¶
默认同步 scope(可在设置里调整)包括:
| 文件 | 内容 |
|---|---|
package.json |
插件依赖与 dsh.profile.bundles |
cordis.patch.yml |
补丁层(模型 provider、MCP、开关等) |
cordis.yml |
profile 根入口 |
pnpm-lock.yaml |
插件版本锁定 |
不会同步:node_modules/、.dsh-market/snapshots/、会话、附件、.credentials.yaml、.env。插件不会直接修改 node_modules;若拉取后 package.json 或 pnpm-lock.yaml 有变化,只会执行 pnpm install 并提示重启宿主。
远端凭据与加密口令保存在本机 ~/.dsh/config-sync/remote.json(权限 0600),不会写入 cordis.patch.yml,因此不会随配置一起上传。cordis.patch.yml 中若存在 MCP/模型相关明文或 {{SECRET_…}} 占位符,跨设备时新机器仍需在本机凭据库中能解析对应 secret,否则相关条目会失效——这也是插件提供可选加密的原因之一。
核心功能¶
远端与合并策略¶
支持 坚果云 WebDAV(README 中推荐)与 GitHub 私有仓库。合并以「上次同步成功的各文件内容哈希」为基线:
- 仅本机变更 → 上传;仅远端变更 → 下载;两侧改得一致 → 跳过。
- 两侧都改且内容不同 → 冲突:本机文件保留,远端版本另存为
<文件名>.remote-<设备名>-<时间戳>,可在设置页「采用远端 / 采用本地」。 - 新设备首次双向同步:无合并基时自动采用远端,本机旧版另存为
<文件名>.local-<设备名>-<时间戳>;若只想推送本机配置,使用「上传」方向。
方向支持上传、下载、双向;只上传或只下载时,另一方向的变更会在结果中标记为 skipped。删除不传播:一侧缺失的文件不会删除另一侧,仅在报告中说明。
可选加密¶
开启加密并设置口令后,各文件在远端以 AES-256-GCM 信封存储(scrypt 派生密钥、每文件独立 salt/iv/tag)。manifest 中仍保存明文哈希,计划阶段不需要口令;多设备须使用同一口令。
启动时自动同步¶
默认在插件启动约 15 秒后按面板所选方向执行一次同步;可在远端设置中关闭「启动时自动同步」。远端未配好、或已开加密但本机无口令时会自动跳过。延迟与默认值可在 profile 的 cordis.patch.yml 中按插件 id config-sync 覆盖,例如:
- id: config-sync
config: { autoSyncOnStart: true, autoSyncDelayMs: 15000 }
autoSyncDelayMs 范围为 0–300000 ms。
安全与恢复¶
同步前会把待改文件备份到 ~/.dsh/config-sync/backups/<时间>-<操作>/,设置页可一键恢复。写入采用临时文件加 rename 的原子替换。若远端 package.json 无任何依赖而本机有依赖,默认拒绝覆盖(空依赖保护);确需覆盖可在设置中允许。路径校验拒绝 ..、绝对路径及 node_modules 等敏感路径;HTTP 路由与插件市场类似,仅接受本机 loopback 等同源策略。
插件自升级¶
设置 → 内置插件 → 配置同步 → 插件升级 可检查更新与一键升级:github: 安装时在 profile 中执行 pnpm update @xiaokang6/dsh-config-sync;link: 安装时对本地检出做 fast-forward。检查更新优先 HTTPS(GitHub info/refs),再退 API,最后才用 git ls-remote。升级或改 lib/ 后需重启 DeepSeek Harness 或点窗口右上角刷新,宿主内 ESM 缓存才会加载新代码。
安装与启用¶
多机同步时 README 推荐用 github: 快照安装,避免 link: 绝对路径随 package.json 同步到其他机器后链接失效。
在目标 profile(示例为 desktop)上,优先使用宿主自带命令(会同时把 bundle 写入 dsh.profile.bundles):
dsh plugin --profile desktop add github:xiaokang6/dsh-config-sync-xk
若无 dsh 命令,可在 profile 目录用 pnpm,但须手动把 "@xiaokang6/dsh-config-sync" 加入 package.json 的 dsh.profile.bundles,否则插件不会挂载:
cd $env:USERPROFILE\.dsh\profiles\desktop
pnpm add github:xiaokang6/dsh-config-sync-xk
装完后重启 App 或点刷新按钮。换新机器时须先装同一版本的 DSH 与上述插件,再在设置页填写同一远端与口令,然后执行「双向同步」。
插件以当前 DSH 进程权限运行;安装前请自行查阅 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全要求。
典型用法¶
坚果云 WebDAV¶
- 在坚果云网页 → 账户信息 → 安全选项 → 添加应用密码(勿用登录密码)。
- 在设置页填写:
- Base URL:https://dav.jianguoyun.com/dav/
- 用户名:坚果云账号邮箱
- 应用密码:上一步生成的字符串
- 远端路径:如dsh-config-sync/desktop(多设备须相同) - 先「检测差异」,再「双向同步」。
GitHub¶
- 创建私有仓库;生成 fine-grained PAT,权限至少 Contents: Read and write(或 classic token 的
repo)。 - 在设置页填写 owner、repo、branch(默认
main)、远端路径与 Token。
冲突与依赖¶
处理冲突后在设置页选择采用一侧,会清理 .remote-* 等副本。若同步后 pnpm install 因宿主「新版本等待期」报 ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION,插件会尝试以 minimumReleaseAge=0 重试并在报告中标注;也可在 profile 目录手动执行 pnpm install --config.minimumReleaseAge=0。
适用场景与注意¶
适合在多台 PC 上共用同一套 DSH 插件列表与 cordis.patch.yml 补丁、又希望会话与本地密钥留在各机上的开发者。不适合把整盘 profile 或 node_modules 当网盘同步——插件设计 explicitly 排除这些路径。
每台机器仍需单独配置 remote.json、.credentials.yaml / .env,以及保证 {{SECRET_…}} 在新机可解析。若 package.json 里其他插件使用 link:D:/… 这类本机路径,同步到其他机器后可能装不起来,应改为 github: 等同机无关的依赖写法(README 故障排查中有说明)。
DSH 社区插件目录(如 SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系;本文事实来自插件 README 与 package.json。
结尾¶
@xiaokang6/dsh-config-sync 把 profile 级配置的跨设备同步收敛为:选定 WebDAV 或 GitHub、哈希合并与冲突副本、可选加密与设置页操作,并区分「可同步的配置」与「必须留本机的凭据与会话」。进一步了解可访问目录页 xiaokang6/dsh-config-sync-xk 与源码 github.com/xiaokang6/dsh-config-sync-xk。