howlma
dsh-desktop
No description
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 14, 2026
- Updated
- Aug 14, 2026
Introduction
DeepSeek Harness 桌面客户端(dsh-desktop)
一个 Electron 桌面客户端:打开客户端即自动启动(或复用)Harness 网关,窗口内直接嵌
入官方 Web 界面——界面与操作逻辑和网页端 http://127.0.0.1:3080 完全一致,因为加载
的就是同一个 Harness Web UI,而不是重新仿制。
适用场景:电脑刚开机时,双击客户端即可拉起 Harness 后台;关窗后台继续跑(托盘常驻), 随时秒开。
功能
- 打开即启动网关:启动时检测
127.0.0.1:3080是否已有 Harness 网关在运行—— 有则直接复用,没有则自动拉起dsh web并等待就绪后加载界面。 - 界面与网页端 100% 一致:窗口内嵌官方 Web UI,操作逻辑天然一致。
- 托盘常驻:关闭窗口只是隐藏到托盘,网关继续在后台运行;托盘菜单提供 「显示主界面 / 在浏览器中打开 / 重启后台 / 开机自启开关 / 退出」。
- 开机自启开关:托盘一键开启(默认关),开启后 Windows 登录时自动启动客户端并拉起网关。
- 单实例:重复打开只会聚焦已有窗口。
- 网关日志:写入 userData 目录(一般
%APPDATA%\dsh-desktop\)下的gateway.log, 启动页实时显示。 - 可配置:端口、工作目录、开机自启均可通过
settings.json调整(见下)。
运行方式
方式一:便携版(推荐给普通用户)
下载 dsh-desktop-portable.zip,解压后双击 electron.exe 即可。
- 首次启动会自动检测并拉起 Harness 网关(需要本机已安装 Node.js 且
dsh web可用)。 - 默认工作区为
%USERPROFILE%\harness-workspace,可在settings.json中修改。
方式二:源码运行(开发者)
需要 Node.js ≥ 20 且本机 dsh(@deepseek-ai/dsh)可用。
cd harness-desktop
npm install # 首次安装 Electron(约 100MB)
npm start
Windows 网络受限时,安装 Electron 可走镜像:
set electron_config_cache=%~dp0.electron-cache
set ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
npm install
配置
设置文件位于 Electron 的 userData 目录(一般 %APPDATA%\dsh-desktop\settings.json),
支持字段:
{
"port": 3080,
"openAtLogin": false,
"workspace": "C:\\Users\\you\\harness-workspace"
}
port:网关端口,默认3080。若该端口被其它程序占用,客户端会报错并提示。openAtLogin:开机自启(也可通过托盘菜单开关)。workspace:dsh web的工作目录(Harness 的默认 workspace 根目录)。 源码运行默认取客户端目录的上一级;便携版默认%USERPROFILE%\harness-workspace。
打包
npm run build:portable # 生成 dist\portable\ 目录,压缩为 zip 即便携版
如需制作安装程序,可用 electron-builder:
npm i -D electron-builder
npx electron-builder --win nsis
开发与测试
npm run smoke # 网关管理模块冒烟测试(纯 Node,无需 Electron)
npm start # 启动桌面客户端
代码结构:
├── main.js # 主进程:窗口/托盘/生命周期
├── preload.js # 仅向加载页暴露网关状态订阅
├── lib/
│ ├── gateway.js # 网关解析、拉起、探测、停止
│ ├── settings.js # 设置读写
│ ├── tray.js # 托盘菜单
│ └── icon.js # 纯 Node 生成托盘/窗口图标
├── renderer/ # 启动加载页
└── test/gateway-smoke.mjs # 冒烟测试
常见问题
- 网关启动失败/超时:托盘 → 退出后,查看 userData 目录下的
gateway.log日志尾部; 确认dsh web手动可以启动。 - 端口被占用:
settings.json换一个端口(手动启动的网关也要用同端口)。 - 界面和网页端不一样? 不会——客户端加载的就是官方 Web UI 本身。
License
MIT