dshbase

插件目录 / Desktop / DSH-Desktop

DSH-Desktop

已验证 · 实测可装 JustGenius-s

✓ 持续维护 2 位贡献者 纯 TypeScript

查看 GitHub ↗ ← 返回插件目录

21Stars
1Forks
1未关闭 issue
TypeScript语言
2026-09-29最近推送
跨平台平台

功能简介

DSH-Desktop。

✅
我们的评价
可用 — 实测通过,社区增长中

DSH-Desktop。 实测能干净安装、正常启动。社区在增长,是个稳妥选择。

「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。

README

DSH-Desktop app icon

English | 简体中文

DSH-Desktop

Electron desktop shell for DeepSeek Harness (DSH). Uses Electron's embedded Node and bundled pnpm to install @deepseek-ai/dsh into ~/.dsh/runtime and serve the dsh web UI.

DSH-Desktop screenshot

Download & Install

Prebuilt packages are published on GitHub Releases. First launch installs the DSH runtime (~1-2 min).

macOS

Requires macOS 13 (Ventura) or later.

  1. Download DSH-Desktop-*.dmg from the latest release.
  2. Open the .dmg and drag DSH-Desktop.app into /Applications.
  3. The app is unsigned, so Gatekeeper blocks the first launch. Right-click the app → Open and confirm, or run:
xattr -dr com.apple.quarantine /Applications/DSH-Desktop.app

Windows

Requires 64-bit Windows.

  1. Download DSH-Desktop Setup *.exe (installer) or DSH-Desktop-*-win.zip (portable) from the latest release.
  2. Run the installer, or unzip the archive and launch DSH-Desktop.exe.
  3. The build is unsigned, so SmartScreen may warn. Click More info → Run anyway.

How it works

Electron main process
  ├─ embedded Node (ELECTRON_RUN_AS_NODE) + bundled pnpm
  ├─ node/pnpm launchers (resources/runtime; repo-root runtime/ in dev)
  ├─ first launch: pnpm installs @deepseek-ai/dsh → ~/.dsh/runtime (upgradeable)
  ├─ spawn  dsh web --host 127.0.0.1 --port <free-port>
  └─ BrowserWindow → http://127.0.0.1:<port>

DSH is installed from npm at runtime, not shipped with the app. Upgrading DSH = detect a newer version on launch → click "Update" → optionally restart the web service (the desktop app stays open). No rebuild or re-signing.

After a successful boot, the web port is saved in web-port.json under Electron's user-data directory. Cold starts reuse it when available so origin-scoped browser preferences survive restarts. If another process occupies that port, a new loopback port is allocated; the app never attaches to that process. Plugins must still persist durable data on the host to survive a port change. Development and installed apps keep separate port records.

Develop

pnpm install
pnpm collect      # collect pnpm and Electron launchers into runtime/
pnpm start        # first launch installs @deepseek-ai/dsh (~1-2 min)
pnpm dev          # alias for start

Dev and packaged builds both use the current Electron executable and the external ~/.dsh/runtime. No standalone Node binary is downloaded or shipped. Plugin commands find a small node launcher through PATH; the executable path is supplied at each launch, so moving or upgrading the app does not leave stale paths.

Tests (no Electron window or browser required):

pnpm test               # build + both runners (see below)
pnpm test:unit          # vitest, test/unit/**  (no build needed)
pnpm test:integration   # build + test/integration/**
pnpm typecheck
pnpm check              # formatting + typecheck + build + all tests

test/ mirrors src/ so a failing file names the module it covers:

Path Runner What it may import
test/unit/**/*.test.ts vitest src/ directly; Electron via vi.mock
test/integration/**/*.test.ts vitest src/ directly, multi-module flows
test/integration/**/*.test.cjs node:test only built dist/ and scripts/

The .ts suites run under vitest; the .cjs suites are plain node:test
(see vitest.config.ts, which deliberately excludes them). The test script
builds fresh output first.

Package

pnpm dist:mac     # macOS dmg + zip
pnpm dist:win     # Windows nsis + zip (run on Windows)

Packaging recollects pnpm and the launchers. Windows builds require the matching MSVC Native Tools environment and Windows SDK for the small forwarding node.exe.

macOS artifacts are unsigned; Gatekeeper blocks first launch. Allow with:

xattr -dr com.apple.quarantine /Applications/DSH-Desktop.app

Runtime dependencies

  • Node supplied by Electron; pnpm (latest) and command launchers collected by scripts/collect-runtime.mjs
  • @deepseek-ai/dsh (npm latest), installed to ~/.dsh/runtime

Updating Electron

Run pnpm add -D -E electron@<version> and pnpm check, then launch and test the packaged app.

Launchers and native plugin builds use the running Electron's path and version. Keep the runAsNode fuse enabled. DSH may reject a new Node/V8 combination, and existing ABI-specific plugins may need rebuilding; verify the UI, terminals and plugin installation before release. The DSH installation is shared with the CLI, so do not rebuild the entire shared runtime for Electron.

Desktop plugin API

The shell injects window.dshDesktop into the DSH page (updates / seats / notify / overlays / plugins). Plugins should depend on that contract, not on Electron packaging code. See docs/desktop-api.md.

Our plugins

Companion DSH plugins live in DSH-Plugs.

Thanks to

安装

🧩 让 Agent 自动装(推荐)

装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:

dsh plugin add dshbase-catalog

然后对 agent 说「帮我装 DSH-Desktop」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。

该插件是 GitHub 源码(未发 npm)——直接从仓库装:

Web profile:

dsh plugin --profile web add github:JustGenius-s/DSH-Desktop

Headless(CLI)profile:

dsh plugin --profile headless add github:JustGenius-s/DSH-Desktop

实测报告

验证通过:从 GitHub 源码完成 L1 安装 + L2 加载 + L3 运行(dsh 0.1.0-rc.6)。

使用场景

把 dsh 跑成原生桌面应用——独立窗口、托盘图标、快捷键——而不是浏览器标签。

适合谁

想要已安装应用的感觉和系统集成(托盘、全局热键、开机自启)的人。

二次开发建议

原生壳是缝——加全局快捷键、通知、单实例锁或按 OS 定制的行为。

安全:尚未扫描——我们的每日静态扫描将很快覆盖它。

分享徽章

Desktop 里更多

浏览全部 7819 个插件 →