deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
Turn DeepSeek Harness into a Codex-style desktop app: a native WebView2 shell, system-tray residency, auto-start on logon, real Windows toasts, and a set of DSH plugins that add a desktop settings tab, a standalone card-based skin center, reusable right/bottom panels, a Git graph, file/SCM browsing, a mini terminal, and per-turn token statistics.
DshDesktop.exe, C# WinForms + WebView2, x64) — embeds the DSH Web UI in a standalone app window.127.0.0.1:3080); if it is not running, it starts corepack pnpm dsh web in the background automatically.Run key registration.session.prompt channel; sandbox permission escalations show Allow once / Reject buttons answered through the official DSH respond channel. A COM activator (INotificationActivationCallback) reads in-toast text input.dsh-desktop-framework) merges the former settings/panels frameworks and the right-panel tabs: any plugin can add Settings tabs/items declaratively (registerTab/registerItem/get/set/subscribe) and register right/bottom panel tabs (registerPanel), with persistence and cross-plugin sync (see docs/settings-framework.md and docs/panels-framework.md).dsh-skin-gallery) shows modern preview cards: each card paints a mini app-window mockup with the real theme tokens (plus the skin's accent when provided), shows name/author/description, marks the current skin with a ✓ badge, and supports filter chips (All / Built-in / Skins). Click a card to apply; the choice persists (activeSkin) and the UI auto-refreshes.dsh-desktop-framework: renders a right column and a bottom bar with tabs, one-click collapse/expand rails, drag-to-resize, and persisted state. Any plugin can register tabs (see docs/panels-framework.md).cd supported), backed by the desktop client.dsh-plugin).Deepseek-Harness-as-Desktop/
├── dsh-desktop-window/ # Host plugin + desktop client
│ ├── lib/index.js # DSH host plugin: window launch, turn/end toast, skin manifest
│ └── shell/ # DshDesktop.exe + source + WebView2 SDK + toast scripts + whale.ico
├── dsh-desktop-settings/ # Client plugin: Desktop settings tab (close behavior, auto-start, notify)
├── dsh-desktop-framework/ # Unified desktop framework: settings + panels + Files/Changes/Terminal
├── dsh-skin-gallery/ # Standalone card-based skin center (own Settings tab)
├── dsh-git-graph/ # Git Graph conversation view (branch selector + commit swimlanes)
├── dsh-live-stats/ # Per-turn token statistics line
└── docs/ # skin-compatibility, settings-framework, panels-framework
Path assumptions: the desktop app and plugins are relocatable — they derive config, data, and script paths from their own location. The only machine-specific path is the DeepSeek Harness checkout, which defaults to
D:\deepseek harnessand can be changed per-install via theserverWorkDirkey inconfig.json, or per-launch with--workdir.
Prepare the harness (one time):
git clone https://github.com/deepseek-ai/deepseek-harness.git "D:\deepseek harness"
cd /d "D:\deepseek harness"
corepack pnpm install
corepack pnpm run build
Place the app anywhere — copy the dsh-desktop-window folder anywhere
(e.g. D:\dsh-desktop-window) and double-click
dsh-desktop-window\shell\DshDesktop.exe (or build it from Program.cs — see
below). It starts the backend if needed and opens the DSH UI in a native window.
Install the plugins into the web profile. All six plugins ship in
this repository ? each one is a folder under the repo root
(dsh-desktop-window/, dsh-desktop-settings/, dsh-desktop-framework/,
dsh-skin-gallery/, dsh-git-graph/, dsh-live-stats/). Point each
add at its folder (copy the folder anywhere, or use the paths inside
this repo):
cd /d "D:\deepseek harness"
corepack pnpm dsh plugin --profile web add D:\dsh-desktop-window
corepack pnpm dsh plugin --profile web add D:\dsh-desktop-settings
corepack pnpm dsh plugin --profile web add D:\dsh-desktop-framework
corepack pnpm dsh plugin --profile web add D:\dsh-skin-gallery
corepack pnpm dsh plugin --profile web add D:\dsh-git-graph
corepack pnpm dsh plugin --profile web add D:\dsh-live-stats
Restart the desktop app. Then:
The host plugin (
dsh-desktop-window) is optional but recommended: it sendsturn/endtoasts and keepsskins.jsonfresh for the skin center. The desktop app disables its own auto-open viaDSH_DESKTOP_AUTO=0when it starts the backend itself.
Stored in D:\dsh-desktop-window\config.json:
| Key | Values | Description |
|---|---|---|
closeBehavior |
tray (default) / exit |
Close-button behavior |
autoStart |
true / false |
Launch at logon (HKCU Run) |
notifyOnComplete |
true / false |
Toast on task (turn) completion |
activeSkin |
skin id or "" |
Persisted skin-center selection ("" = DSH default) |
apiPort |
3980 |
Local config API port |
serverWorkDir |
D:\deepseek harness |
Harness checkout to start as the backend; overrides the compiled default (--workdir arg wins) |
panelRightOpen / panelBottomOpen |
true / false |
Persisted panel open state (panels framework) |
panelRightWidth / panelBottomHeight |
px | Persisted panel sizes (panels framework) |
The Desktop settings tab writes these through the exe's local HTTP API
(127.0.0.1:3980, CORS-open):
| Endpoint | Description |
|---|---|
GET /api/config |
Read config |
POST /api/config {key,value} |
Update config |
GET /api/skins |
Skin manifest (default + installed skins) |
POST /api/notify {title,message} |
Send a real Windows toast |
GET/POST /api/settings {key,value} |
Generic key-value settings (framework backend) |
GET /api/fs/list?dir= |
List a directory (files + folders, sizes) |
GET /api/fs/read?path= |
Read a text file (or image preview as data URL) |
GET /api/git/branches?dir= |
List branches + current |
GET /api/git/log?dir=&branch=&limit= |
Commit log (hash, parents, author, date, subject) |
GET /api/git/status?dir= |
Porcelain status (branch + changes) |
POST /api/git/checkout {dir,branch} |
Checkout a branch |
POST /api/git/stage|unstage|discard {dir,path} |
Stage / unstage / discard changes (path = . for all) |
GET /api/shell/cwd |
Current terminal working directory |
POST /api/shell/exec {dir,command} |
Run a command (cmd.exe); cd updates the cwd |
The Skin Center (its own Settings tab, dsh-skin-gallery, ordered after
all native settings tabs) is a one-of-N card picker: the DSH built-in default
plus every installed skin plugin. Each card paints a mini app-window mockup
with the actual theme tokens (no hardcoded colors) — sidebar, chat bubbles,
input bar and a brand-colored send button — using the skin's accent color
when the manifest provides one, and falls back to the current theme otherwise.
The current skin is marked with a ✓ badge, cards lift on hover, and the grid
supports filter chips (All / Built-in / Skins). Picking a skin persists
activeSkin and reloads the UI; on every boot only the selected skin stays
mounted.
Third-party skins are not bundled. To make a skin appear in the picker it
must provide a skin.json next to its package and be registered with
dsh plugin --profile web add. See
docs/skin-compatibility.md for the full
convention.
Recommended skins
git clone https://github.com/Small-tailqwq/dsh-deep-whale "D:\dsh-deep-whale"
corepack pnpm dsh plugin --profile web add D:\dsh-deep-whale\maid-atelier
dsh-desktop-framework renders the panel shells and registers the
Files/Changes/Terminal tabs and the header toggle buttons. The right panel
shares the left sidebar's fill (--dsw-specific-sidebar-fill), and panel
buttons/tabs reuse the app's native button tokens, so they follow the theme. Use the ◧ / ◨ and ▤ buttons in
the session header (next to the mode selector) to one-click collapse/expand
the right panel and the bottom terminal. Collapsed panels become slim rails on
the right/bottom edges — click them to expand again. Drag the panel edges to
resize; widths/heights and open state persist. Other plugins can add their own
tabs (see docs/panels-framework.md).
The right panel is a multi-tab workspace (dsh-desktop-framework). Files opened
from the Files tab or from conversation links render in closable tabs:
| Type | Viewer |
|---|---|
| Markdown | GitHub-style rendered document |
| Code / text | monospace with word wrap |
| Image | image viewer with zoom (wheel / +/- buttons) |
| Video | HTML5 player (seeking via byte-range) |
| built-in Chromium PDF viewer | |
| HTML | rendered web page in an iframe (relative css/js/img served by the desktop client) |
| Web | iframe |
| 3D (STL/OBJ) | WebGL viewer — drag to rotate, wheel to zoom |
Web pages come in three forms and all render in an iframe: local .html files
(served by DshDesktop.exe via /serve/ so relative assets resolve next to
the file), pages on a local port (http://127.0.0.1:<port>), and public
internet URLs. HTML files default to opening in the desktop viewer; change it
per type in the Open files settings tab.
Left-click a conversation link to pick Open in desktop / Open with system
default / Copy link; right-click shows the same actions as a context menu. The
Open files settings tab controls the default per type (ask / desktop /
system). Opening with the system default app or browser is handled by the
desktop client (DshDesktop.exe) through its local API.
dsh-desktop-framework ships a dependency-free Node CLI for exercising the
plugin and the desktop client API without the UI:
cd D:\dsh-desktop\dsh-desktop-framework
node cli.js check # health-check web (3080) + desktop api (3980)
node cli.js raw <path> [range] # fetch /api/fs/raw (byte-range aware)
node cli.js open <path> # open with the system default app
node cli.js open-url <url> # open in the default browser
node cli.js settings [k [v]] # read/update the desktop settings store
node cli.js type <path> # viewer kind for a file name
node cli.js samples [dir] # write sample md/stl/pdf test files
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /nologo /target:winexe /platform:x64 ^
/win32icon:dsh-desktop-window\shell\whale.ico ^
/resource:dsh-desktop-window\shell\whale.ico,DshDesktop.whale.ico ^
/out:dsh-desktop-window\shell\DshDesktop.exe ^
/r:dsh-desktop-window\shell\Microsoft.Web.WebView2.Core.dll ^
/r:dsh-desktop-window\shell\Microsoft.Web.WebView2.WinForms.dll ^
/r:System.dll /r:System.Core.dll /r:System.Drawing.dll /r:System.Windows.Forms.dll /r:System.Web.Extensions.dll ^
dsh-desktop-window\shell\Program.cs
All UI plugins register zh/en dictionaries through the DSH client locale
service and follow the language switcher of the harness. Toast messages are
bilingual.
See CHANGELOG.md.
Microsoft.Web.WebView2.Core.dll / WinForms.dll / WebView2Loader.dll:
the Microsoft Edge WebView2 SDK (MIT), redistributed per its license.whale.ico: DeepSeek's official whale logo (derived from the harness repo
apps/web/public/favicon.svg); used here only to identify the DeepSeek
Harness app.CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。