DSH-Desktop app icon

English简体中文

DSH-Desktop

Electron desktop shell for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH). Bundles node + pnpm, installs `@deepseek-ai/dsh` into `~/.dsh/runtime`, and serves the `dsh web` UI in a browser window.

DSH-Desktop screenshot

## Download & Install Prebuilt packages are published on [GitHub Releases](https://github.com/JustGenius-s/DSH-Desktop/releases). First launch installs the DSH runtime (~1-2 min). ### macOS 1. Download `DSH-Desktop-*.dmg` from the latest release. 2. Open the `.dmg` and drag `DSH-Desktop.app` into `/Applications`. 3. The app is unsigned, so Gatekeeper blocks the first launch. Right-click the app → **Open** and confirm, or run: ```sh xattr -dr com.apple.quarantine /Applications/DSH-Desktop.app ``` ### Windows 1. Download `DSH-Desktop Setup *.exe` (installer) or `DSH-Desktop-*-win.zip` (portable) from the latest release. 2. Run the installer, or unzip the archive and launch `DSH-Desktop.exe`. 3. The build is unsigned, so SmartScreen may warn. Click **More info** → **Run anyway**. ## How it works ``` Electron main process ├─ bundled node + pnpm (resources/runtime; repo-root runtime/ in dev) ├─ first launch: pnpm installs @deepseek-ai/dsh → ~/.dsh/runtime (upgradeable) ├─ spawn dsh web --host 127.0.0.1 --port └─ BrowserWindow → http://127.0.0.1: ``` DSH is installed from npm at runtime, not shipped with the app. Upgrading DSH = detect a newer version on launch → click "Update" → restart. No rebuild or re-signing. ## Develop ```sh pnpm install pnpm collect # download node + pnpm into runtime/ pnpm start # first launch installs @deepseek-ai/dsh (~1-2 min) ``` Dev and packaged behave identically: both use the bundled node and the external `~/.dsh/runtime`. ## Package ```sh pnpm dist:mac # macOS dmg + zip pnpm dist:win # Windows nsis + zip (run on Windows) ``` macOS artifacts are unsigned; Gatekeeper blocks first launch. Allow with: ```sh xattr -dr com.apple.quarantine /Applications/DSH-Desktop.app ``` ## Runtime dependencies - node (latest) + pnpm (latest), bundled via `scripts/collect-runtime.mjs` - `@deepseek-ai/dsh` (npm latest), installed to `~/.dsh/runtime` ## Desktop plugin API The shell injects `window.dshDesktop` into the DSH page (`updates` / `seats` / `notify` / `overlays`). Plugins should depend on that contract, not on Electron packaging code. See [docs/desktop-api.md](docs/desktop-api.md). ## Our plugins Companion DSH plugins live in [DSH-Plugs](https://github.com/JustGenius-s/DSH-Plugs). ## Thanks to - [Linux do](https://linux.do/)