dsh-sync:用 rclone bisync 在多机之间同步 DSH 会话与配置

前言

DeepSeek Harness(DSH)把开发环境、会话记录和 profile 配置集中在用户主目录下的 ~/.dsh。换机器或在家与公司之间切换时,若只靠 U 盘拷贝或手动 rsync,容易漏掉增量会话,也绕不开 rclone bisync 的 filter、--resync 首次种子顺序,以及交互式 rclone config。社区插件 dsh-sync(维护者 Rosa42,分类:工作流)在 DSH 里增加 Settings → Sync 页面,用可配置的同步范围把一台机器上的 DSH 主目录同步到其他机器,底层走任意 rclone remote 的双向同步。

下面介绍它做什么、如何安装,以及使用前需要留意的边界。

这是什么

dsh-sync 是 DeepSeek Harness 的普通 bundle 插件:在设置里提供同步界面,把本机 DSH 主目录(默认 ~/.dsh,可通过 $DSH_HOME 覆盖)与远端或本地镜像目录做 rclone bisync 双向同步,覆盖会话日志与 profile 相关配置;同步哪些切片、排除规则、比较方式与冲突处理可在页面上配置。插件还封装了非交互式 WebDAV 远端创建(含坚果云预设),并可在真正种子同步前做连接自检。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。安装第三方 bundle 前,应自行查看源码与许可证;插件以当前 dsh web 进程的用户权限运行,会读写 ~/.dsh 及插件工作目录下的设置与日志。

页面能做什么

README 将界面按区域归纳如下,便于对照使用:

区域 作用
Current state rclone 是否可用、解析后的本地与工作目录、生成的规则文件、上次运行、冲突副本数量
Sync target 从 rclone listremotes 选云 remote 加子路径,或指定已由网盘客户端同步的绝对本地文件夹
Connection self-test 在种子同步前检测可达性、可写性、内容与修改时间是否可信
Sync scope 按切片开关决定同步内容,附加排除、比较模式、冲突策略、删除上限
Configure cloud storage 非交互创建 WebDAV remote(含坚果云预设)
Actions 预览(--dry-run)、立即同步、首次种子(--resync)
Run output 完整 rclone 输出,并追加到 logs/ui-<date>.log
Conflict copies 列出留下的 *.conflictN,便于手工合并

连接自检为什么重要

首次 --resync 之前,以及更换 remote 之后,应先跑连接自检。流程是:经配置的 remote 上传临时文件、读回元数据再删除,凭证只留在 rclone 自有配置里。

bisync 默认用 size,modtime 与上一轮 listing 比较。若远端把修改时间改成上传时刻,两侧每次都会被视为变更,文件反复传输,冲突副本堆积。自检会用固定过去时刻的文件探测 modtime;若远端改写时间,结论会说明情况并建议改用 size 比较——是否采纳需 deliberate:size 无法发现「长度不变但内容已改」的编辑。

同步目标:云 remote 与「本地镜像 + 网盘客户端」

云 remote:在页面选择 rclone listremotes 中的目标并带子路径(示例配置里为 nutstore:dsh)。

本地文件夹:Target type 选 Local folder,指向网盘桌面客户端已在同步的目录。数据流为:

~/.dsh  ──rclone bisync──▶  <mirror folder>  ──provider client──▶  cloud

filter、冲突副本、预览、删除上限与自检逻辑不变;自检针对该文件夹执行。README 指出这对 rclone 无法直连的网盘(如百度网盘、夸克网盘)更合适,可避免逆向 WebDAV 桥、cookie 与写权限等问题。代价是 bisync 与客户端两层串联,故障需区分;云侧冲突由客户端决定;若客户端把下载时间戳成「现在」,bisync 可能多一次内容相同的路径,但两侧均为本地文件系统时通常会稳定下来。

为何不直接把 DSH_HOME 指到网盘同步目录:storages/、workspace.json、.credentials.yaml、session.lock、追加写入的会话日志等不适合与消费级同步客户端裸共享;经 bisync 镜像可在数据进入网盘客户端前应用 filter 与删除上限等安全规则。

安装与启用

插件是 ordinary DSH bundle:作者目录或解压到磁盘任意位置后,安装到 profile:

plugin_manager install_bundle  target: <absolute path to this directory>

安装会链接目录并启用 bundle。之后必须重启 dsh web 服务:Cordis loader 会缓存 entry 解析到的模块路径,替换或移动插件后若不重启,仍可能运行旧的 JavaScript 模块。

Windows 上 rclone 可见性

插件执行 rclone;找不到则报告未安装。Windows 上仅依赖 PATH 可能不够:winget 安装前已启动的进程或从长期运行的 explorer.exe 打开的新终端可能缺少 WinGet 的 command-shim 目录。插件会在进程内先查 PATH,再试 %LOCALAPPDATA%\Microsoft\WinGet\Links,状态卡片会显示最终解析到的可执行文件路径。

配置说明

设置写在 <workDir>/settings.json,由页面写入。示例结构(字段以 README 为准):

{
  "version": 1,
  "target": "nutstore:dsh",
  "sync": {
    "sessions": true,
    "attachments": true,
    "profiles": true,
    "homeConfig": true,
    "credentials": false,
    "workspaceState": false,
    "providerCache": false,
    "pluginModules": false
  },
  "extraExcludes": [],
  "compare": "size,modtime",
  "conflictResolve": "none",
  "maxDelete": 10
}

loader 行里的 config 在找到 settings 文件前需要已知路径:

- id: dsh-sync
  name: '@local/dsh-sync'
  config:
    localRoot: /home/me/.dsh   # default: $DSH_HOME, then ~/.dsh
    workDir: /home/me/.dsh-sync # default: ~/.dsh-sync

bundle 若装在 profile 外,无法解析 @deepseek-ai/schemastery 导出 harness 期望的 Config schema,因此用 settings 文件加页面编辑;装在 profile 内的部署可改为 schema 而不改路由契约。

同步范围各键对应 rclone filter:某切片 关闭 时会生成对应排除规则。默认开启 sessions、attachments、profiles、homeConfig;credentials、workspaceState 等默认关闭,与「不共享明文 API 键、不共享多机互相覆盖的 workspace 状态」的设计一致。

典型用法

  1. 安装 bundle 并重启 dsh web。
  2. 在 Settings → Sync 配置 localRoot / workDir(若与默认不同),选择云 remote 或本地镜像目录;需要时用页面向导创建 WebDAV(含坚果云预设)。
  3. 运行 Connection self-test;若 modtime 不可靠,按页面建议评估是否改为 size 比较。
  4. 按需调整 Sync scope 与 extraExcludes、maxDelete 等。
  5. 首次使用执行 first-time seed(--resync);日常用 Preview(--dry-run) 看变更后再 Sync now。
  6. 若出现 *.conflictN,在页面的 Conflict copies 中定位并手工合并。

开发与回归测试可在插件目录执行:

npm test   # includes both probe suites

适用场景与注意

适合:多台机器共用同一套 DSH 会话与 profile 配置;已有 rclone remote 或愿意用本地镜像配合官方网盘客户端;希望用 bisync 的 filter、删除上限和冲突副本机制,而不是直接把整个 ~/.dsh 丢进同步盘。

注意:插件依赖本机已安装且可被进程找到的 rclone;双向同步有冲突与误删风险,务必先 dry-run 并理解 maxDelete。插件以 dsh 进程权限读写主目录与工作目录;安装前阅读 MIT 许可下的源码。社区目录页星标等统计以站点展示为准(抓取时为 0)。

结尾

dsh-sync 把多机 DSH 主目录同步收进设置页:可配置同步范围、引导 WebDAV、连接自检与 bisync 常用操作,减少手写 rclone 配置与记 --resync 顺序的负担。详情与更新见 SkillHub 目录页 与 GitHub 仓库。

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

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

Xiaoye