dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
dsh 内置自动更新插件 — Auto-update for DeepSeek Harness: safe version detection, exit-time apply, health check, auto-rollback & circuit breaker.
A built-in auto-update plugin for dsh (DeepSeek Harness). It adds a 检查更新 (Check for Updates) section to the dsh Settings page: one click checks npm for a new @deepseek-ai/dsh release, a confirm dialog schedules it, and a guarded update transaction — exit-time install, health verification, automatic rollback — does the rest.
autoCheck: true restores the v1.0.0 periodic mode)latest, rc, …)process.argv[1]) and installs into it with --prefix — immune to multi-Node PATH confusionauto → notify → off; any success restores full automationdsh plugin --profile <p> update (with manifest backup/restore)For the local v1.1.3 fix, run dsh plugin --profile web add ./dsh-autoupdate-1.1.3.tgz from this project and restart dsh. Check and confirm in Settings → Updates, then exit the dsh process (closing the browser is insufficient). Wait for helper-result.json to report phase: "done" before restarting. Automatic application requires a discoverable npm global installation; an unknown prefix is rejected.
Install into any dsh profile through the official plugin channel:
# from npm
dsh plugin --profile web add dsh-autoupdate
# from GitHub
dsh plugin --profile web add github:lc23313/dsh-autoupdate
# from a local tarball (offline sharing)
dsh plugin --profile web add /path/to/dsh-autoupdate-1.1.3.tgz
Verify it was registered as a profile layer, then restart dsh:
dsh --dump-config --profile web # should list the auto-update row (name: dsh-autoupdate)
By default, open Settings → Updates and click Check for updates. With autoCheck: true, checks run 30 seconds after boot and every 6 hours. State and logs live in $DSH_HOME/plugins-data/dsh-autoupdate/ (default ~/.dsh/).
Defaults live in the package's own cordis.patch.yml; override them per profile in ~/.dsh/profiles/<name>/cordis.patch.yml (a user-layer row replaces the row's whole config; omitted keys fall back to schema defaults):
- id: auto-update
config:
channel: rc # track the rc dist-tag
checkIntervalMs: 3600000 # check hourly
| Option | Default | Description |
|---|---|---|
enabled | true | Master switch; false = no-op |
channel | "latest" | npm dist-tag to track; falls back to latest |
autoApply | true | false = detect + notify only (prints a manual command) |
autoCheck | false | v1.1.0: false = manual mode (Settings button only); true = v1.0.0 periodic checks |
checkIntervalMs | 21600000 | Check interval when autoCheck: true (6 h; floor 5 min) |
startupDelayMs | 30000 | Delay before the first check after boot |
maxConsecutiveFailures | 3 | N failures → notify, 2N → off |
cooldownMs | 86400000 | Pause auto-apply after an apply failure |
npmTimeoutMs | 30000 | Timeout for npm queries |
installTimeoutMs | 300000 | Timeout for npm install / pnpm update |
npmCommand / dshCommand | npm / dsh | Command overrides (absolute paths allowed) |
registry | "" | npm registry override (mirrors) |
updateProfilePlugins | true | Refresh user plugins in profiles after a CLI update |
profiles | [] | Which profiles to refresh; empty = auto-detect profiles depending on this plugin |
logToConsole | true | Mirror log lines to the dsh console |
detect new version X
└─ arm: spawn detached helper (polls this dsh process by pid)
└─ dsh exits (gracefully or killed)
└─ helper re-confirms the arm in state.json (stale arms abort)
└─ npm install -g @deepseek-ai/dsh@X --prefix <running dsh's prefix>
└─ on failure: retry ×3 → verify old version intact → stop
└─ verify: manifest version == X AND `node <bin> --version` prints X
└─ mismatch → reinstall previous version → re-verify → record rollback
└─ (optional) per-profile: backup manifests → dsh plugin --profile <p> update
└─ write helper-result.json + update state.json
next dsh boot → consume the result → feed the circuit breaker → log the outcome
Before installing any plugin that can run package installs, you should know exactly what this one does:
npm (version queries, npm install -g @deepseek-ai/dsh@<exact version> into the prefix dsh itself runs from) and, optionally, dsh plugin --profile <p> update|install for profiles that depend on this plugin.settings.yaml, cordis.patch.yml, profile manifests). All state/logs are confined to $DSH_HOME/plugins-data/dsh-autoupdate/.autoupdate.log — audit it any time.| Task | How |
|---|---|
| Inspect state | cat $DSH_HOME/plugins-data/dsh-autoupdate/state.json |
| Read the log | cat $DSH_HOME/plugins-data/dsh-autoupdate/autoupdate.log |
| Reset the breaker | delete state.json |
| Roll back manually | npm install -g @deepseek-ai/dsh@<old-version> |
| Disable auto-apply | set autoApply: false (detection + notification remain) |
| Diagnostics | boot dsh with DSH_AUTOUPDATE_DOCTOR=1 |
| Uninstall | dsh plugin --profile <name> remove dsh-autoupdate |
off); periodic recovery probes resume checks after reconnect; successful checks clear check-failure degradation.startupDelayMs for those workflows.npm test # offline regression and UI tests
node scripts/dev-smoke.mjs # end-to-end smoke test (real detection, autoApply forced off, zero side effects)
Design notes on surviving dsh breaking updates: docs/COMPATIBILITY.zh.md (Chinese).