dsh-webdav-sync:用 WebDAV 按系统备份 DSH 设置与状态

前言

在多台机器上使用 DeepSeek Harness(DSH)时,agent 预设、定时任务、任务看板和桌面端 cordis.patch.yml 往往会各改各的。用网盘手工拷目录容易漏文件,也难分清「远端该以谁为准」。社区插件 dsh-webdav-sync(维护者 GerdonMa)把上述配置与状态推到 WebDAV(坚果云、Nextcloud 等),按 Windows / macOS / Linux 分目录存放,并以「参照模式」拉取:默认只看差异,确认后再写入。下面按安装、配置与典型流程说明用法。

这是什么

dsh-webdav-sync 是 DSH 的跨设备同步插件,归类为 SkillHub 上的「联网工具」。它同步的是 ~/.dsh 下白名单内的设置与状态(合计约几百 KB),不包含会话历史与附件;定位是配置/状态的异地备份与第二台设备的拉取源,不是实时双向同步。远端路径为 <WebDAV 根>/dsh-sync/<系统>/,插件会自行创建子目录。许可证为 MIT,当前包版本 0.1.0,运行要求 Node >=20。

同步范围与安全边界

默认同步(相对 %DSH_HOME% / ~/.dsh)包括:

路径 内容
.agent-presets/ 自定义 agent 预设
storages/scheduled_tasks.json 定时任务
storages/schedule.json 调度器状态
auto-work/tasks.json 自动化任务
task-board/ 任务看板
profiles/desktop/cordis.patch.yml 插件/模型/UI 配置

硬排除:.credentials.yaml、.anonymous-user-id、*.tmp、*.lock 等,密钥不会进 WebDAV。故意不进白名单的还有 workspace.json(含本机绝对路径)、sessions/、attachments/、大块缓存等。

凭据保存在本机 %DSH_HOME%\dsh-webdav-sync\config.json,不在同步范围;也可通过环境变量 DSH_WEBDAV_URL、DSH_WEBDAV_USER、DSH_WEBDAV_PASS 提供(优先级:config.json > cordis.patch.yml 中的 config > 环境变量)。密码以明文存在本机 config.json,若 WebDAV 不完全可信,建议单独账号。插件以当前 DSH 进程权限运行,安装前可在 GitHub 仓库 查阅源码与 MIT 许可证。

核心能力

  1. 按系统分目录:dsh-sync/win/、dsh-sync/mac/、dsh-sync/linux/ 各存一份,互不覆盖。
  2. 参照模式:pull 默认只输出逐文件行级差异(- 本地、+ 远端),不改本机;传 apply:true 才写入,且写入前自动备份。
  3. 同步账本:每次 push/apply 在本机 DSH_HOME/dsh-webdav-sync/ledger.json 追加一条记录(时间、设备、动作、文件清单),只增不改。
  4. 溯源:远端 dsh-sync-manifest.json 带 pushedBy(主机 + 系统),拉取时可看云端由谁推送。
  5. 零第三方运行时依赖:WebDAV 客户端用 Node 内置 fetch 实现 GET/PUT/MKCOL 与 manifest,不解析 XML。
  6. 双入口:聊天里可调 dsh_sync_* 工具,左侧栏也有「WebDAV 同步」页。

聊天可用工具包括:dsh_sync_config(配置地址/用户名/密码)、dsh_sync_push、dsh_sync_pull、dsh_sync_diff、dsh_sync_status、dsh_sync_ledger、dsh_sync_scope。

安装与启用

官方 README 给出两种方式,任选其一。

方式一:放入 profile 并注册 bundle

  1. 把本包放到 %DSH_HOME%\profiles\desktop\node_modules\dsh-webdav-sync;
  2. 在 profiles\desktop\package.json 的 dsh.profile.bundles 里加入 "dsh-webdav-sync";
  3. 重启 DSH(desktop 端)。

方式二:插件管理器

plugin_manager install_bundle target=file:<本包绝对路径>

插件自带 cordis.patch.yml,会以 insert 方式注册 webdav-sync bundle。DSH 生态上插件常通过 profile bundle 与社区目录分发;SkillHub 目录页 是独立站点,与 DeepSeek / 幻方无官方从属关系,安装命令以仓库 README 为准,不要凭名称拼接未文档化的 CLI。

改源码后若需重载,可再次执行 plugin_manager install_bundle target=file:<本包绝对路径>,或复制 lib/index.js、client.js 后 disable / enable 该插件。

典型用法

WebDAV 根地址示例:坚果云可填 https://dav.jianguoyun.com/dav/,插件会在其下建 dsh-sync/<系统>/。

两台设备流程:

A 设备:推送到云端
B 设备:对比差异(看行级 diff)→ 应用变更

侧栏页步骤:填写地址、账号、密码并保存 → A 机「推送到云端」;B 机同一地址 →「对比差异」→ 确认后「应用变更」。

语义上采用 单写者 + 手动推拉:一台改完关掉 DSH 再 push,另一台先 diff/apply。两台同时改没有冲突合并,实质是 last-write-wins。workspace.json 不同步,两机工作区路径不同属于预期;v1 不支持透明加密。

架构简述

单包含服务端 lib/index.js(注册 dsh_sync_* 工具与 GET/POST /api/dsh-webdav-sync)和客户端 client.js(侧栏配置与操作按钮)。Pull/status/diff 由远端 manifest(path → sha256 + pushedBy)驱动,避免解析 PROPFIND XML。

结尾

若你需要在 WebDAV 上按系统分开备份 DSH 配置与任务状态,并在第二台机器上先 diff 再 apply,dsh-webdav-sync 对得上这个模型。详情与源码见 GitHub,社区条目见 SkillHub 插件页。

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

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

小夜