Repository navigation
Releases: Arlenman/dsh-backup-sync
Releases · Arlenman/dsh-backup-sync
Release list
v0.2.0 · 云端备份(WebDAV)与插件卡列出插件本身
这一版解决什么
换机不再依赖同局域网。 v0.1.0 只能把包拷到本机目录或走 GitHub 私有仓库;这一版加了 WebDAV 云通道,绿联 NAS / 群晖 / Nextcloud / 坚果云都能用,国内直连、不需要代理。
新增
- 云端备份(WebDAV):同步页签新增「云端(WebDAV)」卡片 —— 填地址、账号、口令、远端目录,「保存并测试连接」当场给结论;支持「传最新一份上去」「列出远端」「下载到本机」「删远端」,以及定时备份跑完自动上传。
- 云端凭据独立存放:口令单独写在
~/.dsh/backup-sync/cloud-credentials.json(权限 0600),不进设置文件;这个文件名同时在凭据黑名单里 —— 既不会被打进备份包,也不会被导入。 - 导入页签能直接挑云端的包:「备份包」下拉现在分两组 —— 「本机」与「云端(WebDAV)」。云端每项标着「本机已有」或「本机没有」;选中云端那份点「分析差异」,本机没有的会自动从云端下载到本机备份目录(带
.sha256的包下载后核对哈希),下完继续按原名走原有流程;本机已有的直接跳过下载。云端读不出来时只在页内给一条说明,不影响本机那些包照常导入。 - 插件卡列出插件本身,不再只列三个清单文件:一行一个插件 —— 显示名(取插件自带
locale/zh.json的meta.title,和「设置 → 插件」里一模一样)、真正装上的版本、以及已启用 / 仅依赖 / 未安装 / 内置 / 本地目录徽标。悬停看说明、单击开详情弹窗、双击复制插件名。 - 远端操作只认自己的包:只接受
dsh-sync-<时间戳>.tar.gz,其它名字(含../这类路径穿越)一律拒绝,且拒绝发生在发请求之前。
修复(8 处,全是真机跑出来的)
| 症状 | 根因 |
|---|---|
| 删掉最后一份包后界面说「远端还没有这个文件夹」 | listRemote 把「远端目录不存在」误判成「目录是空的」 |
npm test 无输出无报错、永不退出 |
Node 默认把 test/**/*.js 全当测试文件,test/fake-webdav.js 被当测试跑起来常驻 |
| 在绿联 NAS 上「新建目录成功」之后 PUT 被拒 | UGREEN 的 WebDAV 根是只读虚拟根,根下 MKCOL 回 405 但不真的建目录,被当成已存在放行 |
| 刚上传的包被判成「远端更新」 | WebDAV 的 getlastmodified 只有秒级精度,加了 1 秒容差 |
| 每次展开插件卡都弹一条黄色警告 | 重装留下的 node_modules/xxx.old-<时间戳> 副本照样带 dsh 字段 |
| 好机器上常年挂「3 个声明了但没装上」 | @deepseek-ai/* 内置 bundle 本就不在 profile 的 node_modules 里 |
| 凭据被拦下时只给一句文件名,看不懂为什么 | 告警文案没分类(凭据文件名 vs 可能藏凭据的文件) |
| 云端卡片显示「上次测试 1792204738211」 | 直接渲染了宿主写的 epoch 毫秒,改为读 atLocal(缺了就按本机时区补,再没有就写「时间未知」) |
安装 / 升级
dsh plugin --profile web add github:Arlenman/dsh-backup-sync#v0.2.0
桌面端:设置 → 插件 → 添加插件,填 github:Arlenman/dsh-backup-sync#v0.2.0。
包体 25 个文件 / 130,583 字节,无运行时依赖、无构建步骤(装完重启一次 DSH 生效)。
验收
| 项 | 结果 |
|---|---|
node --test test/*.test.js |
529 / 529 |
npm run e2e:cloud(假 WebDAV 起独立进程) |
65 / 65,整包 sha256 逐字节一致 |
npm run e2e:nas(真机绿联 NAS) |
17 / 17 |
| 真机 UI 驱动(step17 / step18 / step19) | 10 / 10 · 10 / 10 · 5 / 5 |
完整变更见 CHANGELOG.md。
dsh-backup-sync v0.1.0
dsh-backup-sync v0.1.0
DeepSeek Harness 的备份 / 恢复 / 换机同步插件首个公开版本。
安装
# 从 GitHub 装(推荐锁这个 tag)
dsh plugin --profile web add github:Arlenman/dsh-backup-sync#v0.1.0
# 或直接用下面这个 tar.gz 资产
dsh plugin --profile web add https://github.com/Arlenman/dsh-backup-sync/releases/download/v0.1.0/dsh-backup-sync-0.1.0.tgz桌面版:设置 → 插件 → 安装,粘贴上面任意一条。
装完重启一次 DSH(宿主半边的 HTTP 路由不热重载)。
暂未发布到 npm,
dsh plugin --profile web add dsh-backup-sync这个写法现在装不到东西。
要求 DSH 0.2.0-rc.2、Node.js ≥ 22,零运行时依赖。
这个版本有什么
- 六个模块:技能(
~/.agents/skills,别的备份插件备不到)、插件清单、核心配置、记忆、待办、对话(默认不勾)。 - 带基线的三方合并导入:逐文件判定「只有对方改了 / 只有我改了 / 两边都改了」,
冲突弹差异预览逐项裁决;裁决「保留本地」之后基线记归档版本当共同祖先,下次不再打扰。 - 删除默认关闭(
allowDelete=false);导入前自动快照到<输出目录>/pre-restore-<时间戳>/。 - 凭据永不进包:凭据文件名/后缀黑名单 + 1 MiB 内容闸,包内不可能出现 API key。
- 定时备份:每天固定时刻或每隔 N 小时;DSH 没开不补跑、失败不重试、只删自己打的包。
- 同步目录推送:推到 OneDrive / 坚果云 / 群晖 / U 盘,带 sha256 校验。
- 入口:设置 → 备份同步(四个页签:备份 / 历史版本 / 导入 / 同步)。
- 12 条 HTTP 路由(
/api/dsh-backup-sync/*),走 DSH 自带连接鉴权。
质量
- 423 项单元测试,Windows 与 Linux 双平台全绿;CI 跑 Node 22 / 24 × Ubuntu / Windows。
- 归档格式
tar.gz+.sha256边车;包内manifest.json记录逐文件哈希。 - 文档开源:逆向内核得到的客户端模块加载器契约与
settings.section槽位契约
(docs/notes/),以及本插件的设计与实施记录(docs/plans/)。
已知限制
- 归档不加密(
tar.gz+ sha256);要加密请用同步目录那一侧的工具。 - 配置文件的合并粒度是「整文件」,不做字段级合并(插件清单的 JSON 除外)。
- 定时器跑在宿主进程内,DSH 退出即停(有意为之)。
- 界面半边是手写 CJS bundle(本机无打包器),无 JSX / TS。
完整改动:CHANGELOG.md