dashitongzhi/dsh-config-webdav-sync ↗★ 0
@kralai/dsh-config-webdav-sync
DSH plugin: bidirectional WebDAV sync for DSH configuration (providers, plugins, prompts, skills). Excludes sessions and credentials. 适合需要在多台设备间保持DSH配置、提示词和技能同步的用户。
Install
This plugin has no verified bundle, or compatibility checks failed. Read the repository notes first. Read the full README ↗
README
Read the full README ↗dsh-config-webdav-sync
DSH (DeepSeek Harness) 第三方插件:通过 WebDAV 双向同步 DSH 配置层(供应商 / 插件清单 / 提示词 / 技能目录),让 Mac ↔ Windows 多设备保持一致。
设计参考:farion1231/cc-switch 的 manifest 校验 / 上传原子性 / SHA256 验证机制,针对 DSH 做了精简(不做 SQL dump / 不做 DB 兼容层)。
同步什么
| 内容 | 源 | artifact |
|---|---|---|
| Providers(供应商 / API key 之外的配置) | ctx.settings namespace | settings.json |
| Plugins(用户安装的第三方插件清单) | profile cordis.patch.yml + package.json | plugins.json |
| Prompts(自定义提示词段落) | ctx.systemPrompt 段落 | prompts.json |
| Skills(技能目录) | ~/.dsh/skills/ | skills.zip |
| 不同步:会话历史 / credentials | — | — |
不同步什么(明确排除)
- ❌
~/.dsh/.sessions/— 聊天记录(你明确要求) - ❌
~/.dsh/.credentials.yaml— API key 等敏感数据(每台机器单独配) - ❌ bundle 列表(web-app / headless)— 跨设备不一定有相同 bundle
远端布局
{baseUrl}/{remoteRoot}/v1/{profile}/
├── manifest.json
├── settings.json
├── plugins.json
├── prompts.json
└── skills.zip
部署示例:https://sync.kralai.tech/dsh-sync/v1/default/
Manifest 协议(v1)
{
"format": "dsh-config-webdav-sync",
"version": 1,
"deviceName": "KraldeMacBook-Air.local",
"createdAt": "2026-09-20T10:00:00.000Z",
"snapshotId": "",
"artifacts": {
"settings.json": { "sha256": "...", "size": 1234 },
"plugins.json": { "sha256": "...", "size": 567 },
"prompts.json": { "sha256": "...", "size": 89 },
"skills.zip": { "sha256": "...", "size": 12345 }
}
}
同步算法(核心三点,复用 CC Switch)
- 上传顺序:artifacts 先 → manifest 最后(保证 manifest 是 SSOT)
- 下载校验:先 fetch manifest → 校验
format/version→ 下载每个 artifact 后做 SHA256 + size 双重校验 - 全局互斥:通过
syncMutex()防止并发上传/下载覆盖
安装(手动复制)
# 1. 把构建产物拷贝到 profile 的 node_modules
DEST="$HOME/.dsh/profiles/web/node_modules/@yourorg/dsh-config-webdav-sync"
mkdir -p "$DEST/lib"
cp lib/index.js lib/index.js.map lib/index.d.ts "$DEST/lib/"
cp package.json cordis.yml "$DEST/"
# 2. 在 profile 的 cordis.patch.yml 里追加 insert
cat >> "$HOME/.dsh/profiles/web/cordis.patch.yml" << 'EOF'
- insert:
- id: dsh-config-webdav-sync
name: '@yourorg/dsh-config-webdav-sync'
EOF
# 3. 重启 DSH(或 reload profile)
# 4. Settings → Plugins → 找到 "Config WebDAV Sync" → 填入 WebDAV 信息
依赖
@deepseek-ai/cordis(peerDependency,DSH 主程序自带)@deepseek-ai/dsh-settings-plus/sdk(可选,用于显示在 plugin settings 页面)zod(peerDependency,DSH 主程序自带)schemastery(可选,配合 settings-plus SDK 用)- 无其他运行时依赖
开发
pnpm install
pnpm run typecheck
pnpm test # manifest + snapshot 单元测试
pnpm run build # tsdown → lib/index.js
协议演进
version: 1 是初始版本。任何破坏性变更 → version: 2,并在 validate_manifest_compat 里拒绝老 manifest。
新增 artifact(如未来想 sync subagent 配置)→ 仍保持 version: 1,在 manifest 里增加键,老客户端忽略未知键即可(向下兼容)。