deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
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).
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。