Reading the engines field across all 44 published versions, the dividing line is obvious:
| Version | engines.node | Published | Note |
|---|---|---|---|
| 0.1.2-alpha.5 | (none) | 2026-09-02 | The generation source checkouts use; asks for ^22.19.0 || >=24.0.0 in practice |
| 0.2.1-rc.3 / rc.4 / rc.5 | (none) | 2026-10-23 to 10-29 | No engines at all; node 22 installs fine |
| 0.2.2-alpha.2 onwards | >=24.9.0 | from 2026-10-27 | The gate jumps and stays |
| 0.2.2-rc.1 (latest) | >=24.9.0 | 2026-11-04 | What a bare npm i gives you |
| 0.2.2-rc.3 (next) | >=24.9.0 | 2026-11-13 | The next channel |
So on node 22, installing @deepseek-ai/dsh (default latest) gives 0.2.2-rc.1 and breaks the gate. Pinning @0.2.1-rc.5 avoids it.
Three ways out
- Upgrade node to 24.9.0 or newer. The sanctioned path.
- Pin an older version:
npm i -g @deepseek-ai/[email protected]. You lose 0.2.2 changes. - Use a version manager: fnm or nvm, a 24.x environment just for dsh, leaving the system node alone. Easiest when several projects coexist.
Check what you have and what you installed:
node -v dsh --version npm ls -g @deepseek-ai/dsh --depth=0
If dsh --version says command not found, check whether the global bin directory is on PATH — it sits beside node_modules, not inside it.