@asong111/dsh-cloud-sync
v0.3.0
Published
Cloud sync for the dsh web GUI: bidirectionally sync plugins, config, agent-presets, skills and task history between two machines through a private Git remote (default SSH). Auto-installs dependencies after pull; excludes plaintext secrets (credentials/SS
Readme
dsh-cloud-sync
在两台不同网络的电脑之间,通过一个私有 Git 远端(默认 SSH 免密)做 DSH 云端同步:把 ~/.dsh 下的插件清单、配置、agent presets、skills、任务历史双向同步,做到换台电脑接着干。拉取后自动安装依赖,并默认排除明文密钥。
独立插件项目(不依赖 dsh-web-ui 全家桶),与 DSH 本身同款双 face(host + client)插件范式,热插拔、不改 dsh 源码。
特性
- 双向同步:
push(本机 → 云端远端)、pull(云端远端 → 本机)。 - 自动装依赖:
pull后检测到package.json/pnpm-lock.yaml变化时,自动dsh plugin install复现插件(installAfterPull默认开,可在 GUI 关)。 - 安全:默认排除
.credentials.yaml、dsh-ssh.json(含明文 SSH 密码)、设备匿名 ID、pet.json;node_modules/.git一律不进镜像。 - 冲突保守:不静默覆盖;冲突时先备份本机旧文件,标记「待处理」,绝不
--force推送。 - GUI:侧边栏「云同步」面板(配置远端 / 一键上传 / 一键拉取 / 自动同步开关与间隔)。
- 动作日志:面板「日志」页按天展示每次 push/pull/resolve 新增/修改/删除的具体文件;原始数据落盘
~/.dsh-sync/logs/<profile>/sync-<日期>.jsonl。 - 同步介质:Git(有版本历史、可冲突检测、可
age/git-crypt加密)。
支持的同步内容
| 内容 | 路径 | 说明 |
|---|---|---|
| 插件清单 | profiles/<profile>/package.json + pnpm-lock.yaml | 不拷 node_modules,拉取后自动 install |
| 配置 | profiles/<profile>/cordis.patch.yml、settings.yaml、cordis.patch.yml(home) | settings.yaml 已确认无明文密钥 |
| agent presets | .agent-presets/ | 梁神等预设 |
| skills | skills/ | |
| 任务历史 | sessions/、storages/、task-board/ | |
安装与使用
# A 机 / B 机都执行一次
dsh plugin --profile web add @asong111/dsh-cloud-sync
# GUI 侧边栏「云同步」:
# 1) 填远端仓库地址(如 [email protected]:ASong111/dsh-sync.git)
# 2) 点「↑ 上传到云端」完成首次 push
# 3) 另一台电脑点「↓ 从云端拉取」→ 自动装依赖两机 SSH 免密(Git 鉴权,一次配置)
- 同一把密钥:把 A 机
~/.ssh/id_rsa+id_rsa.pub复制到 B 机~/.ssh/;或 - 各自密钥:在 B 机新生成密钥,把公钥加到 GitHub 账号。
installAfterPull走 npm registry 网络,与 Git 的 SSH 鉴权相互独立。
完整的两机部署走查(首次上传/拉取、link: 依赖注意事项、ERR_PNPM_UNEXPECTED_STORE 修复、冲突恢复)见 DEPLOY.md。
开发
pnpm install
pnpm test # vitest:excludes / store / engine(双机模拟)
pnpm build # tsc + tsdown -> lib/
pnpm watch安全红线
以下文件永不进入同步(硬编码黑名单,无法通过配置强行纳入):
~/.dsh/.credentials.yaml~/.dsh/dsh-ssh.json~/.dsh/.anonymous-user-id~/.dsh/pet.jsonnode_modules/、.git/
许可证
Apache-2.0
