[**δΈ­ζ–‡**](./README.md) Β· [**English**](./README_EN.md) # πŸ‹ Dsh-Desktop **A desktop companion plugin for DeepSeek Harness** β€” tray whale icon Β· desktop shortcut Β· auto-start straight to the desktop window Β· one-click desktop/web switching ![cover](assets/cover.png) [![dsh-plugin](https://img.shields.io/badge/topic-dsh--plugin-1e3a8a?style=flat-square)](https://github.com/topics/dsh-plugin) [![type](https://img.shields.io/badge/type-Web%20Plugin-818cf8?style=flat-square)](cordis.patch.yml) [![version](https://img.shields.io/badge/version-0.7.7-38bdf8?style=flat-square)](package.json) [![license](https://img.shields.io/badge/license-MIT-22d3ee?style=flat-square)](LICENSE) [![platform](https://img.shields.io/badge/platform-Windows%2010%2F11-0ea5e9?style=flat-square)](#requirements) [![node](https://img.shields.io/badge/node-%3E%3D20-6366f1?style=flat-square)](package.json) **A Windows desktop companion for DeepSeek Harness: system tray (whale) icon, desktop shortcut, login auto-start straight into the desktop window, and one-click desktop/web switching.**
> ⚠️ **Windows-only**: This plugin is for **Windows 10 / 11**. On macOS / Linux it loads without crashing, but the desktop features β€” tray, desktop shortcut, auto-start β€” **will not work**, because they depend on Windows PowerShell and Task Scheduler. > πŸ“Œ **Before you install**: requires **Node.js β‰₯ 20** (same as DeepSeek Harness); **Microsoft Edge or Google Chrome** is recommended (the app-mode desktop window needs a Chromium engine β€” with neither, it falls back to a plain default-browser window); **no admin rights** required; uninstall needs manual cleanup (tray, auto-start, shortcut, `%LOCALAPPDATA%\dsh-desktop`). > πŸš€ **Key point: the desktop experience = DeepSeek Harness + one plugin β€” no extra installation.** > DeepSeek Harness's desktop experience is delivered entirely as a **Web plugin**. No separate desktop client to download, no reinstall, no admin rights required. > If you already have a DeepSeek Harness Web environment, install this plugin and restart to get the full desktop experience. ## ✨ Features | Feature | Description | | --- | --- | | πŸ‹ **System tray companion** | A whale icon in the notification area with a right-click menu: **Open / Restart / Quit** the harness | | πŸ–₯️ **Native desktop window** | Rendered by your local Chromium in app mode (`--app`): 1352:972 adaptive ratio, centered, freely resizable; a dedicated browser profile keeps extensions, notifications and sign-in prompts out of the window; no startup flicker | | πŸ”„ **One-click desktop/web switching** | The Settings button shows **Switch to Desktop** in web mode and **Switch to Web** in desktop mode; state is detected without WMI, so the label is always truthful | | ⚑ **Fast boot** | The logon task uses a `wscript.exe` hidden launcher (cold-start <1s) to start `node web` directly (the exact entry is recorded in `harness.json`); before the service is ready, the desktop window shows the **built-in boot page** and auto-redirects once ready; no npx round trip, no port conflicts | | πŸ” **Login auto-start toggle** | Registers a **Task Scheduler logon trigger** (the `DSHDesktop` task, no admin rights; `HKCU\...\Run` is only the fallback if registration fails) β€” fires immediately at sign-in, no startup-queue wait | | πŸš€ **No console flash** | Every external PowerShell launch (shortcut / tray / logon task) goes through a `wscript.exe` hidden runner (Win32 `SW_HIDE`) β€” no console window ever flashes during boot, open or switching | | πŸ›‘οΈ **Reopen Β· tray self-heal Β· race guards** | Reopen immediately after quit; a single-flight launch mutex ignores repeated clicks instead of starting competing Node flows; quit-marker wait, self-healing readiness wait and tray ownership guards against races | | πŸͺŸ **Show/hide terminal** | Toggle the harness terminal window from Settings | | βš™οΈ **Native Settings panel** | A new **Desktop** section in the DSH Web UI: status cards, one-click actions, last-open diagnostics | ### 0.7.7 iteration - Fixed slow quit-to-reopen behavior by closing known desktop-window PIDs directly and skipping unnecessary WMI scans for a normal single-node shutdown. - Fixed repeated shortcut/tray clicks starting competing PowerShell and Node launch flows. - Added tray **Restart**, which rebuilds the Harness service and desktop window while preserving the tray and auto-start configuration. ## πŸ“¦ Installation ### Requirements | Item | Requirement | | --- | --- | | OS | Windows 10 / 11 (built-in Windows PowerShell 5.1) | | Runtime | Node.js β‰₯ 20 (the same Node you use for DeepSeek Harness) | | Harness | DeepSeek Harness Web profile (`dsh web`) | | Browser | Chromium-based recommended (Edge ships with Windows); the desktop window uses your default browser when it is Chromium-based, otherwise Edge β†’ Chrome | ### ⚑ Option 1: Install with a single command (recommended) Run in any terminal with an installed, working `dsh` CLI; the plugin manager handles dependency installation: ```sh dsh plugin --profile web add github:LvsH13/dsh-desktop ``` Then **restart the running Web profile**: - A πŸ‹ whale tray icon appears in the notification area; - A new **Desktop** section shows up in Settings; - Once auto-start is enabled, the logon task opens the desktop window with the boot page within seconds (no console flash). ### Option 2: Install from a source checkout ```sh git clone https://github.com/LvsH13/dsh-desktop.git dsh plugin --profile web add "ABSOLUTE/PATH/TO/cloned/dsh-desktop" ``` Restart the Web profile afterwards. ### Option 3: Manual install (standard Web plugin flow) 1. Go to the web profile directory (default `%USERPROFILE%\.dsh\profiles\web`); 2. Add this package to the `dependencies` of `package.json` β€” one command: ```sh npm install github:LvsH13/dsh-desktop ``` 3. Add the following entry to the `insert` list of the profile's `cordis.patch.yml`: ```yaml - insert: - id: dsh-desktop name: '@dsh-external/dsh-desktop' ``` 4. Restart the Web profile β€” the plugin is now active. ### Uninstall ```sh dsh plugin --profile web remove "@dsh-external/dsh-desktop" ``` Optionally: quit the tray, disable auto-start (delete the `DSHDesktop` scheduled task; if the Run-key fallback was used, also delete the `DSHDesktop` value under `HKCU\...\Run`), delete the desktop shortcut and remove `%LOCALAPPDATA%\dsh-desktop`. ## πŸš€ Usage Open **Settings β†’ Desktop**: | Panel | What it does | | --- | --- | | Status | Live state of the harness service, tray, desktop window, desktop shortcut, auto-start, terminal | | Auto-start | Enable/disable login auto-start (Task Scheduler logon trigger, Run-key fallback); when enabled, login starts the service in seconds and opens the desktop window with the boot page directly | | Actions | **Switch to Desktop / Switch to Web** (labeled by the current mode), start/quit tray, create desktop shortcut, show/hide terminal | The **Last open** line reports the previous launch: readiness time (e.g. `ready in 1.2s`) and window mode (`standalone window` / `default browser`), or the failure reason β€” check this first when something feels slow. ## βš™οΈ Configuration | Item | Location / Notes | | --- | --- | | Companion directory | `%LOCALAPPDATA%\dsh-desktop\` (auto-migrated from v0.1's `$DSH_HOME\desktop`) | | `dsh-tray.ps1` | Core tray/launcher script (window layout, single instance, readiness polling, quit signal) | | `harness.json` | Exact CLI entry of the running installation: node, DSH_HOME, origin, port | | `state.json` | `showTerminal` / `autoStart` state | | `open-state.json` | Last-open diagnostics (readiness time, window mode) | | Boot page | `boot.html` β€” the black-whale-on-white page shown in the desktop window until the service is ready, then auto-redirects to the UI | | Auto-start method | Task Scheduler logon trigger (the `DSHDesktop` task, no admin rights); `HKCU\...\Run` is only the fallback when registration fails; the active method is recorded in `%LOCALAPPDATA%\dsh-desktop\autostart-method.json` (`task` / `runkey`) | | Desktop/web state detection | Dual-channel: recorded window PID (primary) + WMI command-line match (fallback) β€” reliable even without WMI | | Runtime dependency | `schemastery` (the only runtime dependency) | > ⚠️ Keep `dsh-tray.ps1` as **UTF-8 with BOM** β€” Windows PowerShell 5.1 misreads BOM-less UTF-8. ## πŸ“Έ Showcase | πŸ–₯️ Desktop DeepSeek Harness | πŸ‹ Tray icon | | :---: | :---: | | ![Desktop DeepSeek Harness](images/desktop.png) | ![Whale tray icon](images/tray.png) | | πŸ“Œ Desktop shortcut | πŸ—” Taskbar | | :---: | :---: | | ![Desktop shortcut](images/shortcut.png) | ![DeepSeek Harness in the taskbar](images/taskbar.png) | | βš™οΈ Settings panel Β· dsh-desktop | | | :---: | :---: | | ![dsh-desktop in the Settings panel](images/settings.png) | | ## πŸ“„ License [MIT](./LICENSE) Β· Copyright Β© 2026 [LvsH13](https://github.com/LvsH13) ---
πŸ”– Part of the **dsh-plugin** ecosystem: [dsh-plugin topic](https://github.com/topics/dsh-plugin) Β· [GitHub repository](https://github.com/LvsH13/dsh-desktop)