@local/dsh-sync
通过rclone在多台机器间同步DSH主目录 适合需要在多台设备间同步会话、配置和附件的多机用户。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Rosa42/dsh-sync说明文档
阅读完整 README ↗Configuration
Settings live in /settings.json and are written by the page. They are a plain JSON document:
{
"version": 1,
"target": "nutstore:dsh",
"sync": {
"sessions": true,
"attachments": true,
"profiles": true,
"homeConfig": true,
"credentials": false,
"workspaceState": false,
"providerCache": false,
"pluginModules": false
},
"extraExcludes": [],
"compare": "size,modtime",
"conflictResolve": "none",
"maxDelete": 10
}
The loader row's config seeds the two paths that must be known before the settings file can be found:
- id: dsh-sync
name: '@local/dsh-sync'
config:
localRoot: /home/me/.dsh # default: $DSH_HOME, then ~/.dsh
workDir: /home/me/.dsh-sync # default: ~/.dsh-sync
Why settings are not a Config schema
A bundle installed outside a profile cannot resolve @deepseek-ai/schemastery, so it cannot export the validated Config schema the harness expects. The settings file replaces it and the page is the editing surface. A deployment that installs this bundle from inside a profile can switch to a schema-backed Config without changing the route contract.
Sync scope
Each slice maps to rclone filter rules emitted when the slice is disabled:
| Key | Content | Default |
|---|---|---|
sessions | sessions/** — one append-only log per session | on |
attachments | attachments/** — images and files a session references | on |
profiles | profiles/** — bundles, patch layers, lockfiles | on |
homeConfig | cordis.patch.yml, AGENTS.md at the home root | on |
credentials | .credentials.yaml, .env — plaintext API keys | off |
workspaceState | storages/** — sidebar grouping and derived caches | off |
providerCache | llm-deepseek/** — expiring vendor upload records | off |
pluginModules | node_modules/** — platform-specific binaries and absolute links | off |
/.anonymous-user-id, session.lock, and *.tmp are always excluded.
The rules file is generated; editing it by hand has no effect, because the next state read rewrites it from the settings. Changing settings also invalidates bisync's remembered filter hash, which is why the page regenerates it before every run.