Spawn the real dsh CLI running the web profile on loopback (OS-assigned port), parse the printed readiness URL, and open a native window at it. The harness and its native addons stay on the system Node ABI; the main imports only electron and node builtins. Co-Authored-By: Claude <noreply@anthropic.com>
@deepseek-ai/dsh-desktop
Electron desktop shell over the DeepSeek Harness. The Electron main process is a
thin wrapper: it spawns the real dsh CLI running the web profile on loopback
(an OS-assigned port), parses the readiness URL line the profile prints
(dsh web: http://127.0.0.1:<port>), and opens a native window at that address.
The harness — its Cordis plugins, webserver, static frontend dist, and WebSocket
transport — runs exactly as dsh web would, as a separate system-Node process,
so native addons keep their system Node ABI.
Run from a checkout
pnpm install
pnpm run build # builds lib + the apps/web frontend dist
pnpm desktop:dev # opens the desktop window
desktop:dev builds the frontend dist and the dsh CLI, then launches
Electron. Override the spawned Node or dsh entry with DSH_NODE / DSH_ENTRY.
Package
pnpm desktop:pack # electron-builder: mac .dmg / win .nsis in apps/desktop/dist
Packaging is unsigned by default; provide a certificate to distribute. The
harness child needs a Node runtime on the target platform — see
electron-builder.yml and the notes in src/main.ts.