READMESource: main@f3a3b32c
dsh-sync
把 DeepSeek Harness 的内容备份与同步到远程存储。当前支持 WebDAV,后续会支持 GitHub 同步。
可备份与同步的项目:
| 内容项 | 包含什么 |
|---|---|
| 基础配置 | cordis.patch.yml、cordis.yml、桌面偏好、语言 |
| 模型配置 | Provider 路由与模型清单,导出为 JSON |
| MCP 服务器 | 已挂载的 MCP 装载行,导出为 JSON |
| 已安装插件 | Profile 的 package.json、pnpm-lock.yaml、pnpm-workspace.yaml |
| 技能 | ~/.agents/skills 与版本锁文件 |
| API 密钥与令牌 | .credentials.yaml(默认关闭) |
| 记忆 | 你指定的记忆存储目录 |
| 其他文件目录 | 你自行添加的任意目录或文件,可指定独立的远端位置 |
每一项都能单独开关。侧栏有一个独立的 备份与同步 面板。
界面



面板分三页:
- 首页:每个内容项一张状态卡(本地/远端文件数、待上传数),以及「刷新比对」「按方向全部执行」。
- 同步内容配置:每项的开关、方向、目录列表,改完需手动保存。
- 连接配置:WebDAV 地址与凭据、远端子目录、设备名称、pull 与冲突策略。
四种同步方向
每一项自己决定方向,一次运行按方向分组执行。
| 方向 | 行为 |
|---|---|
| 关闭 | 不参与任何同步。 |
| 上传备份 | 写进这台机器的槽位 machines/<设备名>/。按文件内容哈希增量上传,永不删除远端,也永不回写本地。 |
| 下载还原 | 只从远端读回本地,用于新机器初始化。覆盖范围可选:只补缺失 / 远端更新才覆盖 / 总是覆盖。 |
| 双向同步 | 与共享区 shared/ 对账。靠基线区分「只有我改了」和「只有别人改了」;双方都改时保留双方副本。 |
任何方向都不传播删除——本地删掉的文件在远端仍然保留。
模型配置、MCP、已安装插件这类从实时服务导出或含本机路径的项,只能上传或下载,不做双向对账。
远端目录结构
<远端根>/<远端子目录>/
machines/<设备名>/<内容项>/<根标记>/… 单向备份,每台机器一个槽位
machines/<设备名>/.dsh-nas-sync/manifest.json 已上传文件的 sha256 清单
shared/<内容项>/<根标记>/… 双向同步的共享区
shared/.dsh-nas-sync/base-<设备名>.json 本机的双向基线
<根标记> 记录文件来自哪个本地根目录(dsh = DSH 主目录,agents = ~/.agents,home = 用户主目录,abs = 其他绝对路径),有了它,下载还原才能把文件放回原来的绝对路径。
内容项自身的远端目录会直接显示在面板每一行上。
Agent 工具
插件注册一个工具:
nas_sync——{ action: "plan" | "run", items?, mode?, dryRun? }。plan只算差异不写任何东西;run真正传输。
安装
dsh plugin add github:stone-yu/dsh-sync
也可以在 DSH 的 插件 → 添加插件 里指向本仓库。
已知限制
- API 密钥是明文。 开启那项后
.credentials.yaml会以未加密形式上传,能读取远端副本的人可以直接使用其中的令牌。默认关闭。 http://是明文链路。 只要地址不是 https,每次运行都会提示。link:/file:依赖不做重写。 含本机绝对路径的 profilepackage.json会原样备份,换机器需手工修正。- 双向同步不做文本合并。 冲突文件会被保存为
<文件>.conflict-<设备名>-<时间戳>,而不是合并成一个。 - 比对需要枚举远端目录。 打开面板先按配置渲染,数字在后台补齐;远端目录清单缓存 15 秒,点「刷新比对」时绕过硬缓存。
许可
MIT
No comments yet. Be the first to write one.