dsh-updater
One-click updates for DeepSeek Harness (DSH)
Community plugin · incremental npm tarballs · backup & rollback · like Codex
Install · How it works · Screenshots · Config · Security · Français

dsh-updater adds a Settings → Updates panel and a sidebar button to DeepSeek Harness (@deepseek-ai/dsh). It checks npm next / latest, copies your current engine, downloads only packages that changed, swaps the running engine, then restarts — or tells you to quit DSH on a laptop.
It is not official DeepSeek software. It does not fork DSH, does not git pull the source, and never runs sudo or curl | bash.
Why this exists
A full npm install @deepseek-ai/dsh rebuilds a 200-package monorepo in memory and can OOM (we hit a 1 GB heap in Docker). Claude Code / Codex-style tools do not re-resolve the universe on every bump.
This plugin:
- Reuses the engine already on disk (
node_modules, native addons). - Fetches changed
@deepseek-ai/*tarballs from the npm registry. - Keeps third-party deps (commander, koffi, …) when the version matches.
- Backs up to
$DSH_HOME/engine-bakand rolls back on failure. - Works everywhere the process is writable: Docker volume,
npm -g, nvm, Windows%APPDATA%\npm, pnpm/yarn global, localnode_modules, npx cache.
Install
Never dsh plugin add github:… (unpinned). Clone this repo, then add the absolute path:
git clone https://github.com/Takinggg/dsh-updater.git
dsh plugin --profile web add /absolute/path/to/dsh-updater
Windows:
dsh plugin --profile web add C:\absolute\path\to\dsh-updater
Open Settings → Updates, or the Updates control next to Settings.
Screenshots
| Confirm & fetch | Success |
|---|---|
![]() |
![]() |
How it works
- Resolves
@deepseek-ai/dshby walking up fromprocess.argv[1](DSH_ENGINE_DIRoverride). - Reads npm dist-tags
nextandlatest. Offers a target only if it is newer than the running engine (no accidental downgrade). - Backup →
$DSH_HOME/engine-bak. - Stage on
$DSH_HOME/update-stage(never Docker/tmptmpfs). - Incremental tarballs into
$DSH_HOME/update-cache. RegistryAccept: application/json(avoids npm 406 on version URLs).npm view/npm packfallbacks for odd registries. - Overlay, optional
npm rebuildfor native addons that actually changed. - Restores the
dshPATH shim when the install is a classic npm global prefix. - Docker / PID 1 /
DSH_ENGINE_PERSIST=1: process exits 0 so Compose restarts it. A success popup is shown after reload. - Laptop: you quit DSH and start it again. The UI does not kill your session.
incremental-tarballs @deepseek-ai/dsh@<version> --reuse-engine --stage $DSH_HOME/update-stage
Config
| Variable | Effect |
|---|---|
DSH_ENGINE_DIR |
Force the engine folder. |
DSH_HOME |
Backup / stage / cache root (default ~/.dsh). |
DSH_UPDATE=0 |
Lock updates. |
DSH_UPDATE_RESTART=1 / 0 |
Force process-exit restart, or never. |
DSH_ENGINE_PERSIST=1 |
Supervised container (exit to restart). |
DSH_UPDATE_STAGE |
Staging directory. |
DSH_UPDATE_CACHE |
Tarball cache. |
DSH_UPDATE_TIMEOUT_MS |
Whole-job budget (default 12 minutes). |
DSH_UPDATE_MODE |
Display override only. |
Honors npm_config_registry, scoped npm_config_@deepseek-ai:registry, NPM_TOKEN / NODE_AUTH_TOKEN for private registries.
Security
- Host RPC requires
{ confirm: true }before install. - Target must be a published
nextorlatestdist-tag. - No sudo, no live
npm -ginto a Docker engine volume (that can empty the prefix). - Tarball paths are checked against traversal.
- Auto-rollback from
engine-bakif verify fails.
Development
npm test
npm run demo
Node 20+. Zero runtime dependencies.
Disclaimer
Community plugin — not official DeepSeek software. DeepSeek and DeepSeek Harness are marks of their owners. This repo only installs versions already published on npm as @deepseek-ai/dsh.


No comments yet. Be the first to write one.