Tools & Capabilities
dsh-desktop
functy23/dsh-desktop · ★ 2
Native Tauri v2 desktop shell for the DeepSeek Harness web GUI · 基于 Tauri v2 的 D
An English summary is not available; the Chinese summary is shown.
Archived repository
安装
dsh plugin --profile web add github:functy23/dsh-desktopGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
For install and environment setup, plus plugin development tutorials, see DSH community docs ↗
README
DSH Desktop
Built entirely by DeepSeek V4Pro
A Tauri v2 desktop shell for DeepSeek Harness. It opens a native window running the full dsh web GUI — no product UI is forked or reimplemented.
Platform support: macOS (verified) · Linux (theoretical support — not yet fully tested)
Note: the author has no x86_64 machine — x86_64 builds must be produced by building the app yourself (see Run (dev)).
Behavior
- Spawns a crash-safe
supervisorthat runs thedsh webbackend on a free loopback port. - Waits until the backend accepts connections, then opens one native (decorated) WebView at
http://127.0.0.1:<port>/. - On exit, terminates the whole backend process tree (graceful SIGTERM → SIGKILL).
- If the app crashes or is force-killed, the supervisor's watchdog reaps the backend automatically.
- Pins
DSH_HOMEto~/.dsh(scrubbing ambientDSH_*vars), sharing sessions/settings/credentials with CLIdsh. - Opens a single 1200×800 window titled
DSH Desktopusing the native title bar (a decorated window).
Requirements
- Rust (stable):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Node
^22.19 || >=24and pnpm - macOS: Xcode command-line tools
- Linux (theoretical): Tauri's system prerequisites (
webkit2gtk-4.1,libayatana-appindicator, etc.)
Run (dev)
The default backend command runs the repository-local dsh from source at
/Users/functy/Desktop/deepseek-harness, which needs its web frontend built:
# in deepseek-harness
pnpm --filter @deepseek-ai/dsh-web-frontend build
# in dsh-desktop
cargo tauri dev
Override the backend command with DSH_WEB_CMD (space-separated; the literal
{port} is substituted):
DSH_WEB_CMD="dsh web --host 127.0.0.1 --port {port}" cargo tauri dev
Sync with upstream
This project consumes @deepseek-ai/dsh as a dependency and never edits
harness source. Syncing upstream = bump the harness version + rebuild the
bundled backend.
Backend packaging
scripts/prepare-backend.mjs stages a self-contained backend under backend/:
backend/bin/node— a per-platform Node runtime (downloaded if absent).backend/bin/supervisor— the crash-safe watchdog.backend/node_modules— the@deepseek-ai/dshproduction closure, pruned of the bundler and foreign-platform prebuilds.
tauri.conf.json bundles ../backend via bundle.resources, and the app
spawns <resource>/backend/bin/node <resource>/backend/node_modules/@deepseek-ai/dsh/lib/bin.js web.
Because node_modules is a real directory, the harness's
healProfilesModuleFallback resolves plugin packages normally (verified end
to end).
The earlier @yao-pkg/pkg --sea single-file attempt (build-sidecar.mjs)
cannot boot the web profile: pkg keeps node_modules in a virtual
snapshot, so profile-based plugin resolution fails with
ERR_MODULE_NOT_FOUND. (SIDECAR_DEBUG=1 keeps a deep-print diagnostic
entry for reproducing it.)