Skip to content

Releases: Arlenman/dsh-backup-sync

v0.2.0 · 云端备份(WebDAV)与插件卡列出插件本身

Choose a tag to compare

@Arlenman Arlenman released this 17 Oct 08:44

这一版解决什么

换机不再依赖同局域网。 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

Choose a tag to compare

@Arlenman Arlenman released this 14 Oct 09:11

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