DeepSeek Harness Desktop
English · 简体中文
A Windows desktop client for the official DeepSeek Harness Web UI — automatically detects your environment, installs dependencies, and starts the service. Works out of the box.
Overview
An Electron desktop shell that embeds the official DeepSeek Harness Web UI. On startup it lets you pick an installation mode, then automatically handles environment detection, installation, and service startup — with a percentage progress bar for every stage. When the service is ready, the main UI opens automatically.
No command-line memorization, no manual service startup — just double-click and go.
Features
Installation Modes
Choose an install method when the app launches:
| Mode | Description | Best For |
|---|---|---|
| Quick Start | npm install -g @deepseek-ai/dsh (auto-updates to the latest official version on every start) |
Most users, fastest path to start |
| Full Source Build | git clone + pnpm install + pnpm run build |
Developers who want to modify/debug the source |
| Local Repair | Uninstall global @deepseek-ai/dsh, clean residue, reinstall |
Fix broken installs, version issues, or koffi load failures |
Friendly Startup Guide
- Large percentage progress bar + stage hints, fully replacing log spam
- Expandable command-line log panel: one click to view real output (install/build process), auto-expands on errors
- Stage text adapts intelligently: detecting environment → downloading → extracting → installing → building → starting
Plugin Management (Dedicated Page + Custom Install)
The home screen has a "Plugin Management" entry (left navigation) that opens a dedicated plugin page:
- Recommended plugins — one-click install/uninstall of community-built plugins (install progress shows in the "Custom Install" card's command log; click "Restart Service Now" after finishing):
- Usage & Cost Tracker (dsh-usage-plugin): per-call token/cache-hit stats, peak/off-peak billing, a usage calendar heatmap, balance query, and CSV/JSON/PNG export.
- Data Vault (dsh-vault): auto-backups
~/.dshdata to~/.dsh-backups, detects data wipe, and restores chat history and workspace data with one click.
- Custom install — enter any npm package name or install command (e.g.
@scope/plugin-nameornpm install @scope/plugin-name); the client installs it and registers it in the runtime profile. Command-line output is shown live in the custom-install card. - Installed list — shows all installed plugins (version / registration status) with per-plugin uninstall.
- The install logic is equivalent to the official
dsh plugin add(npm into profile + registerdsh.profile.bundles); restart the service to take effect.
Prefer the command line? The equivalent commands work too:
dsh plugin --profile web add @feiyang666/dsh-usage-plugin dsh plugin --profile web add @feiyang666/dsh-vault
Plugin Market (Scan GitHub Community Plugins)
A "Plugin Market" entry in the left navigation scans GitHub public repos tagged with dsh-plugin (the officially recommended way to discover community plugins):
- List view: each plugin shows name, author, description, star count, primary language, and license; official recommended plugins are pinned and marked "Official".
- Search / pagination: keyword search across plugin name / description / author, with paginated results.
- One-click install: once the repo's npm package name is detected from its
package.json, you can install it with one click (reuses the custom-install flow with automatic mirror switching); repos without a detectable npm package are marked "Not an npm package" for reference. - Installed status: already-installed plugins are marked "Installed" with their version directly in the market.
- The scan uses the public GitHub API and is subject to GitHub rate limits without login (~60 requests/hour); the market page shows failure hints and a retry entry.
Settings & Online Updates
The "Settings" entry (left navigation) opens the settings page:
- About: app version, changelog
- Appearance: interface theme with three options — Dark / Light / Follow System (persisted, takes effect immediately, synced across the desktop client and the official Web UI — change it on either side and the other follows)
- Notifications: toggle for new-version system notifications (persisted)
- Developer options: toggle "Developer options mode" (persisted, applies on next launch)
- Check for updates: auto-checks when entering settings; supports manual check, one-click download & install, live progress display, and SHA256 verification on completion
Developer Options Mode (for frontend development)
After enabling "Developer options mode", choosing "Quick Start" no longer runs a single-process npx; instead it splits startup into two processes for easier iteration on the DSH browser side:
| Process | Description |
|---|---|
| Service backend | Starts dsh web from the source repo (%APPDATA%/dsh-desktop/deepseek-harness), serves the API and hosts the frontend at the same address |
| Browser-side hot-reload watcher | pnpm run dev:web, watches all dsh.client plugin sources; rebuilds the bundle automatically on changes, hot-reloads in the browser without refresh |
- Requires a completed "Full Source Build" first (a hint is shown if not ready)
- The WebUI window still opens
http://127.0.0.1:3080; the home console shows a "Developer Mode" badge, and stop/restart manages both processes - Choosing "Full Source Build" while the mode is on also starts the hot-reload watcher after the build
- Turning the switch off returns to the original single-process npx Quick Start
Other Features
- No terminal windows: all subprocesses run directly via
node, no console popups - Automatic environment detection: guides you when Node.js/git/pnpm are missing (download button for Node, download hint for git, auto-install for pnpm)
- Automatic service startup: reuses an existing service on port 3080 when available; otherwise starts
dsh web - System tray: closing the window minimizes to tray while the service keeps running; exit from tray menu
- Clean exit: automatically
taskkills the dsh process tree on quit - Packaging:
electron-buildergenerates a Windows installer
System Requirements
| Dependency | Notes |
|---|---|
| Windows 10 / 11 (x64) | Runtime platform |
| Node.js ≥ 18 | Required for Quick Start mode; the client guides installation if missing |
| git | Only needed for source mode (pnpm auto-installs if missing) |
| Network | First install downloads dependencies (~hundreds of MB) |
The client guides you through installing anything missing — no manual setup required.
Getting Started
Development
start.bat
Or manually:
npm install
npm start
Custom port: npm start -- --port 8090 (default 3080; reuses an existing dsh web service on that port if present).
Project Structure
dsh-desktop/
├── main.js # Main process (mode selection/progress state machine/install/start/window/tray/cleanup/update service/plugin market IPC)
├── preload.js # Secure bridge (mode/progress/log/status/settings/update/plugin market IPC)
├── plugin-manager.js # Plugin manager (install/uninstall/status, pure Node logic)
├── plugin-market.js # Plugin market (scans GitHub topic:dsh-plugin, pure Node logic)
├── boot/ # Bootstrap page (home + left nav + plugin management + plugin market + settings + progress bar + log panel)
│ ├── boot.html
│ ├── boot.css
│ └── boot.js
├── assets/ # Packaging resources (icons, etc.)
├── pack.js # Interactive packaging script
├── start.bat # Dev startup script
└── package.json # Dependencies & build config
Startup Flow (State Machine)
[Home: Mode Selection] --user chooses (no auto-enter)-->
Quick: detect node → npx downloads deps → start service
Quick + Developer mode: detect node → check source repo → start service backend + browser hot-reload watcher (two processes)
Source: detect git/pnpm → clone → pnpm install --ignore-scripts → pnpm run build → start service (with dev mode on, also starts the watcher)
Repair: stop service → force-clear local data → official quick-start launch
│
▼
[Progress] 8% detect env → 25-90% install/build/repair → 60-95% start service → 100% ready
│
▼
[Home: Running] --opens WebUI in a separate window (http://127.0.0.1:3080)-->
[Stop] → home shows "Stopped"; re-run or switch mode
[Restart] → re-runs the startup flow with the last chosen mode
[Plugin Management] left nav → recommended one-click install / custom package install / uninstall from installed list
[Plugin Market] left nav → scans GitHub topic:dsh-plugin → search / browse / one-click install
[Settings] home → About / Notifications / Developer options / Check for updates (auto-check + download & install)
Key implementation details:
- Quick mode:
node <npm>/bin/npm-cli.js exec --yes -- @deepseek-ai/dsh webwithnpm_config_ignore_scripts=true(skips koffi source compilation to avoid missing CMake failures, same asstart-web.bat) - Version policy:
npm execresolveslatestfrom the registry on every start (npx cache compares resolved tarballs and downloads new versions automatically), so the next Quick Start is always the latest official version; if the registry is unreachable, it falls back to--prefer-offlineusing the cached version so you can still start offline - Source mode: repo cloned to
%APPDATA%/dsh-desktop/deepseek-harness(keeps the workspace clean);pnpm install --ignore-scriptsthenpnpm run build; starts vianode --import tsx/esm apps/cli/src/bin.ts web - All services start without going through
cmd.exe— no terminal popups
FAQ
Q: Installation stuck at a percentage? A: Click the "command-line log" panel to see the real output. Usually it's just slow network downloads — be patient. If it makes no progress for a long time, use "Local Repair" mode to reinstall.
Q: koffi load failure / version issues? A: Pick "Local Repair" mode on the startup page. The client uninstalls the global package, cleans residue, and reinstalls the latest version automatically.
Q: Port 3080 is already in use?
A: The client reuses a running dsh web service first; alternatively use npm start -- --port <port> to specify another port.
Q: Want to debug or modify the source?
A: Choose "Full Source Build" mode. The source is cloned to %APPDATA%/dsh-desktop/deepseek-harness and starts automatically after building.
Q: How do I use Developer Options mode?
A: Enable "Developer options mode" in Settings (a "Full Source Build" must be done first), then choose "Quick Start". The client runs the "service backend" and the "browser-side hot-reload watcher (pnpm dev:web)" as two processes; the browser still opens on 3080. Changes to dsh.client plugin sources rebuild automatically and hot-reload without a refresh.
Q: How does the desktop app update when DeepSeek releases a new official version?
A: Nothing to do manually. Quick Start uses npm exec (npx): it resolves the latest version from the registry on every start and downloads it automatically, so after an official release the next "Quick Start" is automatically the new version. The home screen shows the current dsh version (e.g. dsh v0.1.0-rc.6); Settings → "Runtime (dsh)" can compare "current version vs latest version" with one click. If you're offline at startup, the client falls back to the cached version and recovers to the latest on the next online start.
Q: Is "Local Repair" still available in Developer Options mode? A: Yes. "Local Repair" always runs the official quick-start npx single process and is unaffected by Developer Options (repair also cleans up any leftover watcher processes).
Tech Stack
- Electron 31 — desktop shell
- electron-builder — packaging (NSIS)
- Native Web APIs — bootstrap page (no frontend framework dependencies)
License
MIT © dsh-desktop
Related Projects
| Project | Description | Installation |
|---|---|---|
| Usage & Cost Tracker (dsh-usage-plugin) | Per-call token/cache-hit stats, peak/off-peak billing, balance query, CSV/JSON/PNG export | One-click from the desktop app's recommended plugins, or dsh plugin add @feiyang666/dsh-usage-plugin |
| Data Vault (dsh-vault) | Auto backup / wipe detection / one-click restore — protects chat history and workspace data | One-click from the desktop app's recommended plugins, or dsh plugin add @feiyang666/dsh-vault |
| DeepSeek-Harness | Official CLI / Web service | — |
If you find this helpful, feel free to Star ⭐
No comments yet. Be the first to write one.