A DSH Harness workbench distribution for
DeepSeek Harness (DSH) —
embedded runtime, minimal-grayscale workspace, Smart routing, Skills discovery, and a curated plugin stack.
MIT License · Electron 39 · TypeScript 5 · Windows / macOS / Linux
English · 中文
DSH Desktop is the distributable, opinionated DSH Harness workbench. It packages the locked DSH runtime, the official dsh web UI, an opinionated minimal-grayscale surface, a selectable Smart routing preset, a Skills discovery contract, and a curated plugin stack into an offline-capable application.
The Electron window is only the delivery shell. The product experience is the combination of:
| Layer | What is included |
|---|---|
| DSH runtime | @deepseek-ai/dsh@0.1.0-rc.6, launched from the bundled closure |
| Default workbench | Minimal grayscale tokens, grayscale background/editor/terminal treatment, and glass panes |
| Agent behavior | Standard DSH capability plus the selectable routing-suite Smart routing preset |
| Skills | list_skills, /see-skills/skills, the Skills sidebar tab, and user skill discovery |
| Extensions | Curated forked plugins, vendored with license/provenance notices |
This is not a generic Electron wrapper and it does not replace DSH's model or provider layer. Users configure their provider, model, credentials, and local skill directories through DSH. The app preserves the standard tool/context surface so a capable model such as DeepSeek V4 Pro can be evaluated through the same public DSH workflow rather than through a reduced demo harness.
It consumes only DSH's public boundary — the official dsh web UI — and never patches DSH source. The runtime is bundled, so end users need no Node.js and no dsh CLI installed.
This repository is a second-development distribution, not a one-line fork or a collection of unmodified plugins. The following work is maintained in this repository and is what makes the product different from the upstream DSH web UI, upstream plugin repositories, and a generic Electron wrapper.
| Area | Our optimization, addition, or fix | Result for users |
|---|---|---|
| Desktop productization | Built an Electron 39 desktop application around the public dsh web boundary; added a frameless window, custom title bar, no default menu, single-instance locking, safe external-link handling, workspace resolution, and child-process cleanup. |
A native-feeling Windows/macOS/Linux DSH application with the same official web UI and shared DSH sessions. |
| Runtime delivery | Locked @deepseek-ai/dsh@0.1.0-rc.6; bundled the production dependency closure; launch the local runtime with an ephemeral port; probe host.describe before showing the window; recover from first-profile creation with one controlled restart. |
Release downloads work without a separately installed Node.js, pnpm, or dsh CLI, and startup failures are detected before a blank window is shown. |
| Dependency and plugin seating | Replaced fragile hand-written .pnpm flattening with pnpm deploy --node-linker=hoisted; materialize profile bundle entries and profiles/node_modules links idempotently; preserve user-owned packages. |
Curated plugins load offline and do not depend on the user's package manager layout. |
| Plugin curation | Use direct selected subpackages instead of the upstream aggregate bundle; deliberately exclude the rc.6-incompatible dsh-liangshen and unnecessary pet/remote-web-ui/ssh/liangshen packages; vendor fork provenance and licenses. |
Smaller, more predictable plugin surface with fewer startup crashes and less unrelated UI. |
| Grayscale workbench | Added dsh-skin-grayscale; desaturate design tokens with Rec.709 perceptual luminance, cover deep background/editor/terminal layers, and preserve contrast and hierarchy. |
A consistent minimal-grayscale DSH experience instead of a shallow color filter. |
| Glass workbench | Integrated the forked Aqua surface and tuned it to coexist with the grayscale skin, including translucent panels, blur/frost controls, background layers, and the frameless title bar. | Codex-style glassmorphism without losing grayscale readability. |
| Smart routing | Integrated dsh-routing-suite as a selectable routing-suite preset; classify the first durable task as inspect-first, direct, or neutral; append only a bounded guidance section through system-prompt/assemble. |
Task-aware behavior that preserves DSH persona, tools, context, model settings, and request count. |
| Routing safety | Added explicit boundaries: no file/process execution, no tool filtering, no hidden model call, no DSH source patch, and no silent model/provider changes; added contract tests for the routing decisions. | Smart routing remains inspectable and cannot silently reduce Harness capability. |
| Skills host contract | Built dsh-see-skills with the list_skills tool, GET /see-skills/skills, structured records, safe root normalization, and discovery of $DSH_HOME/skills, .agents, .codex, environment-provided, and bundled roots. |
Existing user Skills are visible without copying private Skill bodies into this repository. |
| Skills client experience | Added a better-sidebar Skills tab backed by the same host inventory; documented SKILL.md frontmatter, references/scripts/assets layout, safety rules, and contribution contract. |
Skills are a real workbench capability rather than a README-only promise. |
| Vision and workbench integration | Integrated the modlens vision bridge, describe_image, better-sidebar, task board, git graph, AionUI right panel, web UI settings, and skin center as a tested curated stack. |
Vision, files, editor, terminal, Git, jobs, preview, and settings work together in one DSH workbench. |
| Release engineering | Added Windows x64, macOS Intel/ARM64, and Linux x64 installers; unsigned-package guidance; bilingual documentation; release checklist; tag-to-package-version CI validation; secret scans; runtime, routing, Skills, and installer smoke checks. | Release assets and README claims are checked against the actual product before publishing. |
| Download optimization | Release v0.1.4 removes runtime-unused source maps and PDB debug symbols while keeping the complete offline runtime and standard installer compression; CI caches Electron downloads and retries transient failures on all platforms. |
Smaller downloads and more reliable cross-platform publishing without turning the first launch into a partially installed shell. |
The DSH runtime and upstream projects remain credited in their package metadata
and license files. Third-party plugins are vendored under app/plugins/fork/
with forkedFrom metadata where applicable. This project owns the Electron
delivery layer, plugin selection and seating, grayscale/glass integration,
Smart routing integration, Skills host/client contract, release process, and
the product documentation. It consumes DSH through the public web boundary and
does not modify DSH source code.
- Frameless window + custom title bar — no default File/Edit menu; drag region, minimize/maximize/close controls.
- Bundled DSH runtime — spawns
dsh web --port 0on Electron's Node, loads the official Web UI; shares~/.dshsessions & credentials with the CLI. - Offline plugin pre-seating — the plugin closure is materialized via
pnpm deploy --node-linker=hoistedand seated intodsh.profile.bundles+profiles/node_modulessymlinks on first launch. - Minimal grayscale skin (
dsh-skin-grayscale) — every DSH design token desaturated by perceptual luminance; editor & terminal deep-grayscaled. - Grayscale-first workbench — the default bundled surface activates the grayscale skin over both token-driven UI and skin-provided background layers.
- Skills viewer (
dsh-see-skills) —list_skillstool +/see-skills/skillsroute + a sidebar "Skills" tab, structured output following modlens' evidence contract. - Configured Skills compatibility — discovers DSH,
.agents,.codex, environment-provided, and bundled skill roots; private skill files stay on the user's machine and are not copied into the public repository. - Task-aware routing (
dsh-routing-suite) — a selectable Smart routing mode that chooses inspect-first or direct execution from the first durable user task, without extra model calls or tool restrictions. - Curated plugin stack — modlens (vision), better-sidebar (workbench), task-board, git-graph, aionui right-panel, describe-image, skin-center, and Smart routing.
The default visual profile is the minimal grayscale workbench. The bundled skin desaturates DSH design tokens using perceptual luminance, gives the editor and terminal a deep grayscale treatment, and also covers background layers that are outside the official UI root. The glass layer remains enabled, so hierarchy, translucency, blur, and contrast are preserved without brand-blue accents.
dsh-routing-suite contributes a selectable Agent preset named routing-suite.
When that preset is selected, it reads the first durable user task and chooses
one of three modes:
inspect-firstfor maintenance, debugging, audit, and investigation work;directfor creation and implementation work;neutralwhen the task is ambiguous or empty.
It appends only its own short routing-suite-guidance section to the public
system-prompt/assemble boundary. It preserves the persona, contexts, tools,
and other DSH assembly fields. It does not execute files or processes, filter
tools, add another LLM request, or change the DeepSeek model configuration.
Skills are a first-class part of the workbench rather than a README-only claim.
Each skill is a directory containing SKILL.md, with optional references/,
scripts/, and assets/. The host exposes a structured inventory through the
list_skills model tool and GET /see-skills/skills; the better-sidebar plugin
renders the same inventory in the Skills tab.
The runtime discovers $DSH_HOME/skills, ~/.agents/skills, ~/.codex/skills,
the optional DSH_BUNDLED_SKILL_DIR, and the bundled modlens skill. See the
Skills contract for the frontmatter, discovery, safety, and
contribution requirements. Private skill contents and credentials remain local
and must never be committed.
| Package | Purpose | Origin |
|---|---|---|
@liustack/modlens |
vision bridge: modlens_read_image tool + (modlens vision) variants |
forked |
dsh-better-sidebar |
sidebar workbench: files / editor / terminal / git / jobs | forked |
@linxin666/dsh-client-ui-task-board |
task board | forked |
@linxin666/dsh-client-ui-git-graph |
git graph | forked |
@linxin666/dsh-client-ui-aionui-panel |
right panel (preview / file tree / SCM) | forked |
@linxin666/dsh-tool-describe-image |
describe_image vision tool |
forked |
@linxin666/dsh-client-ui-skin-center |
skin center | forked |
dsh-skin-grayscale |
minimal grayscale skin + default minimal-gray agent preset |
built in this repo |
dsh-see-skills |
skills viewer | built in this repo |
dsh-routing-suite |
Smart routing mode: inspect-first / direct execution / automatic classification | forked from dragonbaba/dsh-routing-suite |
dsh-ux-enhance |
UX enhancements: font zoom / ↑↓ history / cost badge (CNY, customizable) | built in this repo |
@liustack/modsearch |
web search provider (backing web_search / web_fetch) |
forked |
The official
@linxin666/dsh-web-ui-allaggregate is intentionally avoided: its bundleddsh-liangshencrashes DSH rc.6, and it pulls pet/remote-web-ui/ssh that we don't need. We seat the curated sub-packages directly.
The v0.1.4 package is the first lean Release: runtime-unused source maps and
PDB debug symbols are excluded while standard installer compression is kept. The
DSH runtime, official Web UI, Smart routing, grayscale/glass surface, Skills
viewer, and curated plugins remain inside the package, so the first launch is
offline-capable and does not depend on a background download completing.
We intentionally do not split the stable package into “start now, copy plugin files later”. DSH plugin bundles are loaded through a profile manifest and a dependency closure; a partial copy can leave a profile in a state where the runtime starts but the UI fails. A future online bootstrap may download an optional plugin pack atomically into the user data directory, with checksum, resume, rollback, and an offline full package fallback. Until that protocol is implemented and tested, the complete compressed package is the reliable open-box path.
Open the GitHub Releases
page and download the asset for your operating system. The installer is the
complete product: Electron, @deepseek-ai/dsh@0.1.0-rc.6, the grayscale/glass
workbench, Smart routing, curated plugins, and the Skills viewer are included.
Node.js, pnpm, and a separate dsh installation are not required.
On first launch the app starts the bundled local DSH web runtime, creates or
updates the web profile, seats the built-in plugins, and may restart the
runtime once. This is expected. Configure a provider, model, and credentials
in DSH before sending a task; this repository cannot provide a user's API key.
The desktop package is self-contained, but model requests still require the
provider network and valid credentials.
First-run checklist:
- Install the package for your platform and launch DSH Desktop.
- Complete DSH provider/model setup, or reuse the existing
~/.dshprofile. - Keep the default minimal grayscale workbench, or choose Smart routing
(
routing-suite) from the Agent preset/mode selector. - Open the Skills tab to confirm
$DSH_HOME/skills,~/.agents/skills,~/.codex/skills, and bundled skills are discoverable.
Public packages are unsigned. Windows SmartScreen and macOS Gatekeeper may
require explicit confirmation on first launch. Linux AppImage may need execute
permission (chmod +x dsh-desktop-*.AppImage).
Requirements: Node.js ≥ 22.19, pnpm ≥ 11.
cd app
pnpm install # first run downloads Electron + the DSH runtime closure
pnpm prepare:runtime # materialize the offline runtime closure (.runtime/)
pnpm dev # build the shell and launch Electronpnpm dev will:
- spawn the bundled
dsh web --port 0(data dir~/.dsh, shared with the CLI); - materialize the
routing-suiteAgent preset and seat the curated plugins into thewebprofile; - activate the minimal grayscale + glass workbench surface;
- open a frameless window loading the official Web UI, with configured Skills discoverable from the user skill roots.
For maintainers, run the following from app/:
pnpm install --frozen-lockfile
pnpm typecheck
pnpm verify:runtime
pnpm build
pnpm distpnpm dist is the release build. It first materializes and verifies the
runtime closure, then invokes electron-builder. A partial runtime fails the
build instead of becoming a misleading installer. Build on the target OS;
electron-builder does not turn a Windows build into a valid macOS/Linux package.
The native targets are:
| Platform | Package |
|---|---|
| Windows x64 | NSIS .exe installer |
| macOS x64 / arm64 | .dmg installer or .zip archive |
| Linux x64 | .AppImage or .deb package |
Every release asset must contain Electron, the locked DSH runtime, the curated plugins, the default grayscale/glass workbench, Smart routing, and the Skills viewer. See the release checklist before publishing.
Notes:
- Native modules ship with platform prebuilds;
node-ptyuses N-API (ABI-stable), no Electron ABI rebuild is required. - Signing is intentionally disabled until platform-specific signing credentials are configured in CI.
Pushing a semantic-version tag matching app/package.json (for example,
v0.1.4 for version 0.1.4) runs the cross-platform release workflow and
uploads Windows, macOS Intel/Apple Silicon, and Linux x64 packages to GitHub
Releases. Do not create a tag whose version differs from app/package.json.
- The window starts but no model response arrives: configure a provider, model, and credential in DSH; this repository never ships user credentials.
- A new plugin or preset is not visible after an upgrade: quit all DSH Desktop/DSH web processes and launch again. The first launch may perform one automatic runtime restart to load the profile bundles.
- Skills are missing: verify that each skill directory contains
SKILL.mdand that it is under one of the documented roots. Private skill files must remain on the local machine. - A source checkout cannot build: use Node.js ≥ 22.19 and pnpm ≥ 11, run
commands from
app/, and usepnpm install --frozen-lockfileto reproduce CI.
dsh-desktop/
├─ app/
│ ├─ src/main/ Electron main process (dsh web shell + plugin pre-seating + frameless window)
│ ├─ plugins/
│ │ ├─ dsh-skin-grayscale/ minimal grayscale skin (built here)
│ │ ├─ see-skills/ skills viewer plugin (built here)
│ │ └─ fork/ forked third-party plugins (vendored, marked `forkedFrom`)
│ ├─ runtime/ bundled DSH runtime closure (package.json pins deps)
│ ├─ scripts/ build / deploy / rebuild-native / generator tooling
│ └─ electron-builder.yml
├─ docs/ architecture, design, and Skills contract docs
└─ .github/ CI & issue/PR templates
The desktop never imports DSH internals. It:
- resolves the DSH CLI (bundled closure first);
- spawns
dsh web --port 0and parses the readiness line; - materializes the selectable
routing-suitepreset, seats the forked plugins, and appends package names todsh.profile.bundles; - loads the official Web UI in a frameless
BrowserWindow, where the grayscale/glass surface and Skills viewer are provided by client plugins.
See docs/ARCHITECTURE.md for details.
Contributions are welcome! See CONTRIBUTING.md. Please follow the Code of Conduct.
Found a vulnerability? See SECURITY.md.
MIT © 2026 DSH Desktop contributors.
The forked plugins in
app/plugins/fork/retain their respective upstream licenses (MIT / Apache-2.0); see each package for details.