前言¶
在多台机器上使用 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 许可证。
核心能力¶
- 按系统分目录:
dsh-sync/win/、dsh-sync/mac/、dsh-sync/linux/各存一份,互不覆盖。 - 参照模式:
pull默认只输出逐文件行级差异(-本地、+远端),不改本机;传apply:true才写入,且写入前自动备份。 - 同步账本:每次 push/apply 在本机
DSH_HOME/dsh-webdav-sync/ledger.json追加一条记录(时间、设备、动作、文件清单),只增不改。 - 溯源:远端
dsh-sync-manifest.json带pushedBy(主机 + 系统),拉取时可看云端由谁推送。 - 零第三方运行时依赖:WebDAV 客户端用 Node 内置
fetch实现 GET/PUT/MKCOL 与 manifest,不解析 XML。 - 双入口:聊天里可调
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
- 把本包放到
%DSH_HOME%\profiles\desktop\node_modules\dsh-webdav-sync; - 在
profiles\desktop\package.json的dsh.profile.bundles里加入"dsh-webdav-sync"; - 重启 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 插件页。