前言¶
DeepSeek Harness(DSH)把人格、长期记忆、技能、待办和会话都落在本机 ~/.dsh 里。官方配置备份插件 dsh-config-manager 管的是配置 JSON,并不覆盖上述「记忆层」目录。换电脑、重装或磁盘故障时,如果只备份了 profile 配置,Agent 侧积累的内容仍可能从零开始。
下面介绍社区插件 DSH-Sync-Backup(维护者 YAN3RA,目录分类:记忆)。它按白名单收集记忆层路径,打成 tar 后用 AES-256-GCM 加密,在本地留存,并可同步到 WebDAV 与 GitHub 私有仓库 两条彼此独立的通道;上传成功以回读 SHA256 校验为准,而非仅看 HTTP 2xx。插件声明 零第三方 npm 运行时依赖(仅使用 Node 内置模块,peer 由 harness 提供)。
README 标明插件仍在破坏式迭代中,安装前请自行审阅源码与许可证,并留意当前 DSH 进程权限下的数据访问范围。
这是什么¶
DSH-Sync-Backup 是 DSH 的定时备份插件:把 DSH 记忆层(记忆、技能、待办、会话、存储等)打包为加密归档,默认以本地副本为主,在显式开启目标与开关后才向远端上传。
装上之后通常会多出:
- 设置分区 「备份与同步」(概览 / 产物文件 / 通道配置 / 环境和维护);
- AI 工具
sync_backup_run(立即执行)与sync_backup_status(查看状态); - 一段提示词小节,说明工具边界。
三个「外传」相关闸门在出厂 patch 中默认偏保守:dryRun: true、webdavEnabled: false、githubEnabled: false。须主动填写目标、打开通道开关并关闭 dryRun,备份才会真正出网。
与官方配置备份的分工¶
| 范围 | dsh-config-manager | DSH-Sync-Backup |
|---|---|---|
| 顶层配置 JSON 等 | 覆盖 | 可选条目 sync-config |
memory/、技能、待办、会话、storages/ 等 |
不覆盖 | 白名单收集并加密打包 |
记忆层典型路径包括:全局人格 AGENTS.md、长期记忆 memory/、技能 skills/、待办 task-board/、定时任务 storages/schedule.json、会话 sessions/ 等(具体以插件条目勾选为准)。
核心功能¶
加密与密钥¶
归档在落盘或上传前经 AES-256-GCM 处理;密钥采用信封加密(DEK 以密文形式存在,由本机 KEK 与恢复码派生的 KEK 分别包裹)。恢复码为 base32,不落盘、无法事后重算;首次生成或迁移时需自行保存,设置页可导出(二次确认,明文限时显示)。
双通道异地副本¶
两个通道使用同一份载荷、同一归档 id,互不影响;一个通道失败不会中止另一个。
- WebDAV:Basic 认证,适用于坚果云、自建等;
- GitHub:Contents API 写入私有仓库,每次涉及归档本体、manifest、
latest.tar.gz稳定副本与index.json索引。
非本机 HTTP 默认拒绝(仅 loopback 放行 http);内网私服需显式设置 webdavAllowInsecureHttp。
定时与调度¶
内置自排期(schedulerEnabled 默认开):
- 本地打包周期
intervalHours(schema 默认 12 小时); - 远端同步周期
remoteIntervalHours(默认 0,即本地打包后立即同步); - 启动补跑、失败退避等见 README。
注意:定时任务默认只做本地打包。自动上传须同时满足 uploadOnSchedule: true 且 dryRun: false。
可选恢复自检¶
- 打包后内存内自检(
restoreCheck,默认关); - 维护页「运行恢复前自检」:解到系统临时目录校验后删除,不写回
$DSH_HOME。
插件不提供一键写回 $DSH_HOME 的恢复;灾难恢复需凭恢复码解密后手动解包。
保留与清理¶
本地产物受 localKeepDays(默认 7 天)与 keepLast(默认 7 份)约束;远端按通道 keepLast 裁剪。清理与备份串行并共用运行锁,备份进行中会返回 busy。
安装与启用¶
插件包内含 cordis.patch.yml(dsh.bundle.patch 声明),安装后 host 端自动注册,无需在 profile 里手动 insert 同一 loader id(重复 insert 可能导致 duplicate loader entry 无法启动)。
安装 spec 只接受:npm 包名、Git 地址、tarball URL / 本地 .tgz、本地绝对路径;不要用 GitHub 网页 tree 链接,也不要用 github:用户/仓库 简写(可能被解析为 SSH 导致 EPERM)。
插件页(桌面 / 网页)¶
侧栏 → 插件 → 添加插件 → 粘贴以下之一 → 安装 → 完全退出并重启 DSH:
dsh-sync-backup
https://github.com/YAN3RA/DSH-Sync-Backup/archive/refs/tags/V1.5-261011.tar.gz
git+https://github.com/YAN3RA/DSH-Sync-Backup.git
公司网络或代理环境优先使用 tarball 行(纯 HTTPS,不依赖本机 git)。
命令行¶
dsh plugin --profile desktop add dsh-sync-backup
dsh plugin --profile desktop add https://github.com/YAN3RA/DSH-Sync-Backup/archive/refs/tags/V1.5-261011.tar.gz
dsh plugin --profile desktop add git+https://github.com/YAN3RA/DSH-Sync-Backup.git
桌面版执行 CLI 前须先完全退出桌面应用。卸载示例:
dsh plugin --profile desktop remove dsh-sync-backup
插件异常导致无法启动时,可在 cordis.patch.yml 顶层覆盖:
- id: dsh-sync-backup
disabled: true
典型用法¶
换机或重装:先本地加密,再开通道上传¶
- 安装并重启 DSH,打开 设置 → 备份与同步 → 通道配置,填写 WebDAV 或 GitHub 目标(或两者);
- 用插件脚本写入凭据(勿把口令写进配置文件):
node tools/set-webdav-password.mjs --verify
node tools/set-github-token.mjs --verify
- 关闭
dryRun,执行一次上传备份,例如通过 AI 工具:sync_backup_run(upload: true)。
本地加密归档位于 $DSH_HOME/dsh-sync-backup/artifacts/;各通道上传后会回读校验 SHA256。
不改 YAML 的日常配置¶
用户在本机覆盖写入 $DSH_HOME/dsh-sync-backup/config.json(设置页保存即生效,无需重启)。出厂默认来自 cordis.patch.yml,修改后需重启。删除 config.json 可整体回到出厂覆盖层,无需重装插件。
在 patch 中调整默认示例:
- id: dsh-sync-backup
config:
intervalHours: 6
按需缩小备份集合¶
「环境和维护」页可逐项勾选备份条目(含风险等级与本机体积)。默认集合包含 persona、memory、skills、task-board、sync-config、storages、sessions 等;profiles(插件与依赖树,体积可达 GB 级)默认不选。
适用场景与注意¶
适合谁
- 需要记忆层兜底、换机不想从零重建上下文的人;
- 希望本地加密副本 + WebDAV / GitHub 双份异地校验的人;
- 希望定时本地打包、按需再开上传的人。
使用前请确认
- 插件以当前 DSH 进程权限读写
$DSH_HOME;安装前请阅读 GitHub 仓库 源码与LICENSE; - README 标注 「测试中」,功能仍在破坏式迭代,生产环境请谨慎;
- 半失败连续达到
partialAlertAfter(默认 3)会进入needsAttention,需在概览页健康条关注; - 社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
DSH-Sync-Backup 补的是官方配置备份未覆盖的记忆层:加密归档、本地保留、可选 WebDAV 与 GitHub 双通道,并在默认配置下尽量做到「未显式配置则不外传」。版本号采用 V<主>.<次>-<YYMMDD> 形式;资料中 tarball 示例对应 V1.5-261011(npm package.json 为 1.5.0)。
- 目录页:https://www.skillhub.cn/plugins/YAN3RA/DSH-Sync-Backup
- GitHub:https://github.com/YAN3RA/DSH-Sync-Backup