# deepseek-harness-shortcut English | [中文](README.zh.md)

DeepSeek Harness shortcut icon

A [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH) plugin that creates a **desktop shortcut to start or open your local DSH web UI with one click** (Windows). The shortcut icon: [assets/icon.jpg](assets/icon.jpg) · [assets/icon.ico](assets/icon.ico) Double-clicking the shortcut: - if the DSH service is **already running** → opens the browser directly; - if it is **not running** → starts it (`npx --yes @deepseek-ai/dsh web` by default), waits until port 3080 answers, then opens the browser. ## Features - ✅ One command: `/desktop-shortcut` - ✅ Smart launcher script (start-vs-open, wait-for-ready, up to 30s) - ✅ Customizable: shortcut name, URL, port, icon, working directory, start command - ✅ Zero runtime dependencies (Node ≥ 18 built-ins only) - ✅ Ships as a DSH **bundle**: installing the package auto-activates it in the profile ## Install ### From GitHub ```sh dsh plugin --profile web add github:Ho11ow8/deepseek-harness-shortcut ``` ### From a local checkout ```sh dsh plugin --profile web add file:D:\DeepseekHarness\deepseek-harness-shortcut ``` Then restart `dsh web`. In the chat, run: ``` /desktop-shortcut ``` A `start-dsh.bat` launcher is written to your workspace and a `DeepSeek Harness.lnk` shortcut appears on your desktop. > Bundle activation is automatic: `dsh plugin` appends any dependency that declares `dsh.bundle` to the profile's `dsh.profile.bundles` layer stack. (See `dsh --help` / `dsh plugin --help`.) ## What it generates The plugin does not ship a pre-built launcher — running `/desktop-shortcut` generates the files on your machine: | Generated file | Location | Purpose | |---|---|---| | `start-dsh.bat` | your workspace (or `launcherDir`) | Smart launcher: checks port 3080 → opens the browser if the service is already running, otherwise starts it and waits until ready | | `DeepSeek Harness.lnk` | your desktop | Shortcut that runs `start-dsh.bat` when double-clicked | Icon resolution (first match wins): 1. `iconPath` from your config, if set; 2. the first `.ico`/`.png` found in `launcherDir`; 3. the plugin's bundled `assets/icon.ico` (shipped with the package) — so every user gets a nice icon even without their own. Re-run `/desktop-shortcut` any time to refresh the shortcut (e.g. after changing the config or the icon). ## Slow startup? Switch to a China npm mirror The launcher starts the service with `npx --yes @deepseek-ai/dsh web`. On every launch, npx contacts the npm registry to resolve the `@deepseek-ai/dsh` version. When your access to `registry.npmjs.org` is slow or unstable (common in China), this step can take several seconds — or much longer when the connection is reset and npm retries with backoff. Point npm at a China-based mirror (npmmirror.com — Alibaba's sync of the official registry): ```sh npm config set registry https://registry.npmmirror.com ``` This writes `registry=https://registry.npmmirror.com` to your **user-level** `.npmrc` (`C:\Users\\.npmrc` on Windows), so all npm/npx commands you run use the mirror. Verify with `npm config get registry`. - Package contents are identical — npmmirror mirrors the official registry; your local npm cache stays valid. - New releases can lag the official registry by a few minutes to hours. - Revert with: `npm config set registry https://registry.npmjs.org/`. > The mirror only speeds up the npx network step before DSH boots. Once the service is > running, the browser loads everything from `127.0.0.1:3080`, which has nothing to do > with the registry. ## Configuration Override any key through a later patch row in the profile's `cordis.patch.yml`: ```yaml - id: desktop-shortcut config: shortcutName: My Harness url: 'http://127.0.0.1:8080' port: 8080 iconPath: 'C:\icons\my.ico' launcherDir: 'D:\launchers' workdir: 'D:\DeepseekHarness' command: 'npx --yes @deepseek-ai/dsh web' waitSeconds: 45 ``` | Key | Default | Meaning | |---|---|---| | `shortcutName` | `DeepSeek Harness` | Shortcut file name (no extension) | | `url` | `http://127.0.0.1:3080` | URL the launcher opens | | `port` | `3080` | Port probed to decide start-vs-open | | `iconPath` | `""` | `.ico`/`.exe`/`.dll` icon for the shortcut (falls back to first `.ico`/`.png` in `launcherDir`) | | `launcherDir` | workspace | Directory for the generated `start-dsh.bat` | | `workdir` | launcher dir | Working directory used by the launcher | | `command` | `npx --yes @deepseek-ai/dsh web` | Command that starts the service | | `waitSeconds` | `30` | Max seconds to wait for the service | ### Changing the icon Two ways to use your own icon: **Option A — drop the icon into your workspace (easiest)** 1. Copy your icon (`.ico` or `.png`) into the workspace (the directory where you run `dsh web`, e.g. `D:\DeepseekHarness`); 2. Re-run the command: ``` /desktop-shortcut ``` The plugin picks up the first `.ico`/`.png` found in the workspace. If several icons exist, remove the old ones or make sure yours sorts first. **Option B — pin an exact path with `iconPath`** Set `iconPath` in the plugin config: ```yaml - id: desktop-shortcut config: iconPath: 'D:\my-icons\my-custom.ico' ``` Then restart `dsh web` and re-run `/desktop-shortcut`. > If the desktop still shows the old icon after changing it, refresh the desktop (press **F5**) or right-click the desktop → Refresh — Windows caches icons. `.ico` is recommended for crisp rendering at all sizes. ## License MIT