Skip to content

Repository files navigation

DSH Launcher · DeepSeek Harness Launcher

English | 中文

License: MIT Platform: Windows

A Windows desktop launcher: double-click the icon to start dsh web, with no black console window at any point, plus a splash screen that shows the logo, the full product name, a progress bar and the live startup steps.

⚠️ This is a third-party, unofficial tool and is not affiliated with DeepSeek. The whale logo comes from the official DSH frontend (favicon.svg) and remains DeepSeek's copyright. DSH itself must be installed separately (npx @deepseek-ai/dsh web).

┌──────────────────────────────────────────┐
│                                          │
│                   🐋                     │   ← DSH whale logo
│                                          │
│           DeepSeek Harness               │   ← full product name
│       dsh · local AI coding workbench     │
│                                          │
│  ████████████████████████░░░░░░░░░░░░░   │   ← progress bar (middle)
│                                          │
│        Waiting for the service…          │   ← gray step text (lower middle)
│                                          │
└──────────────────────────────────────────┘

Features

  • No console window — the launcher is a WinExe; the dsh service is started windowless through a detach shim and writes its output to a log file
  • Visible startup — logo, product name, progress bar and step-by-step status text (check environment → locate install → start service → wait for ready → open browser)
  • Opens the browser for you — parses the tokenized URL dsh prints (dsh web: http://127.0.0.1:port/?token=...), so you never copy it by hand
  • Outlives the launcher — dsh runs detached; quitting the launcher never interrupts the service
  • Tray resident — open UI / copy URL / view log / restart service / stop service and quit
  • Reuses a running DSH — if dsh web is already listening (for example the session you started from PowerShell), it just opens the UI instead of starting a second server
  • Failures are visible — when startup fails, the splash stays open and shows the reason in red (Node.js not found, port already in use, process exited, …)
  • High-DPI aware — the DPI-aware manifest keeps the UI crisp at 150% scaling

Requirements

Requirement Notes
Windows 10 / 11 WinForms + .NET Framework 4.x (ships with Windows)
Node.js runtime for dsh
DSH anything that makes npx @deepseek-ai/dsh web work
PowerShell 5.1+ only for building / installing shortcuts (ships with Windows)

Quick start

Option 1 — download the prebuilt exe (easiest)

Grab DSH-Launcher.exe from Releases and double-click it (Node.js and DSH must already be installed on the machine).

Option 2 — build from source

git clone https://github.com/codeWang-J/dsh-launcher.git
cd dsh-launcher

pwsh -File build.ps1              # generate icons + compile DSH-Launcher.exe
pwsh -File install-shortcuts.ps1  # create desktop / Start menu shortcuts

Then double-click DeepSeek Harness on the desktop.

The repository ships no prebuilt exe (source only) and no generated icons; build.ps1 generates the icons from assets/dsh-logo.svg and compiles. If icon generation fails (for example when sharp cannot be found), the build still continues — just without a custom icon.

Usage

How to start Where
Desktop shortcut DeepSeek Harness on the desktop
Start menu Start menu → DeepSeek Harness
Directly DSH-Launcher.exe

Startup flow: the progress bar and gray text advance step by step → service ready → the browser opens automatically → the splash fades out and the whale icon appears in the tray.

Tray menu (right-click the tray icon):

Item Effect
Open DSH UI reopen the browser UI (double-clicking the tray icon does the same)
Copy URL copy the tokenized URL to the clipboard
View startup log open this run's dsh log
Restart DSH service stop the current service and start it again
Stop service and quit kill the dsh process tree, then exit the launcher
Quit launcher (keep service) close the launcher only; the service keeps running

Closing the splash (“×” or Esc) minimizes it to the tray; it does not interrupt startup. Quitting the launcher does not stop the service — use “Stop service and quit” for that.

What if DSH is already running? If something is already serving dsh web on the port, the launcher reuses it and just opens the UI instead of starting a second server. The tray's “stop / restart” then acts on that process, whose PID is resolved by looking up the port owner.

Configuration

Copy launcher.ini.example to launcher.ini (the real file is .gitignored so local paths never get committed):

Key Default Meaning
workspace the workspace folder next to the launcher's parent session working directory
profile web profile to boot; web = browser UI
host / port 127.0.0.1 / 3080 listen address and port
node empty (auto-detect) path to Node.js
entry empty (auto-detect) dsh's lib/bin.js; picks the highest version in the npm / npx caches
openbrowser true open the browser once the service is ready
timeout 180 seconds to wait for readiness
extraargs empty extra arguments passed to dsh
datadir <launcher>\runtime where logs and pid files live

Command-line flags override the ini: --port, --host, --profile, --workspace, --node, --entry, --restart, --no-open, --timeout, --preview (demos the splash without starting anything).

Why there is no black console window

Step How
The launcher itself compiled as a WinExe (GUI subsystem) — it has no console at all
Starting dsh src/bootstrap.cjs detaches it: detached + windowsHide, stdout/stderr redirected to a log file, the shim exits immediately
Opening the browser handed to the default browser via ShellExecute
Port lookup / stopping netstat and taskkill are both invoked with CreateNoWindow

There is no pipe between the launcher and the service, so quitting or crashing the launcher can neither affect dsh nor trigger broken-pipe errors.

Repository layout

├─ src\
│   ├─ DSHLauncher.cs      launcher source (C# / WinForms / .NET Framework 4.x)
│   ├─ bootstrap.cjs       detach shim: runs dsh as a windowless background process
│   └─ app.manifest        DPI awareness + OS compatibility manifest
├─ assets\
│   └─ dsh-logo.svg        official DSH logo (input for icon generation)
├─ tools\
│   └─ render-assets.js    generates png / ico from the svg (needs sharp)
├─ build.ps1               build: generate icons + compile
├─ install-shortcuts.ps1   create / remove shortcuts (-Remove to remove)
├─ push-to-github.ps1      one-command push (for machines where git is not on PATH)
├─ launcher.ini.example    configuration template
└─ runtime\logs\           runtime logs (ignored, not committed)

Troubleshooting

Start with the logs: runtime\logs\launcher.log (what the launcher did, and why it failed) and runtime\logs\dsh-web-*.log (dsh's own output).

Message on the splash What to do
Node.js not found node is not on PATH — set node= to the full path in launcher.ini
DSH install directory not found the npx cache was cleaned: run npx @deepseek-ai/dsh web once, or point entry= at ...\@deepseek-ai\dsh\lib\bin.js
Startup failed: port in use change port=, or stop whatever holds the port
Could not open the browser the splash shows the URL — copy it into a browser manually
Blurry icons / text make sure the exe is a current build (build.ps1); older builds had no DPI manifest

Known limitations

  • Only the web profile has a complete flow (other profiles can be booted with profile=, but there is no browser handoff)
  • Single instance: launching it again just brings up the running launcher and opens the UI
  • “Stop service and quit” kills the dsh process tree — if your current session runs on that service, the session ends with it

License

MIT.

Note: the DSH whale logo used by the UI and icons comes from the official DeepSeek Harness frontend assets and remains DeepSeek's copyright; it is not covered by this project's MIT license. DSH itself is installed separately and governed by its own license.

Releases

Packages

Contributors

Languages