DeepSeek Harness
August 20, 2026 · View on GitHub
DSH 的 Windows 桌面启动器(Tauri 2 + Vanilla TS)。打开应用即自动启动 DeepSeek Harness 的 Web 服务并把其界面内嵌在无边框窗口里,同时负责 dsh 的版本检查与一键升级。
功能
- 极致轻量:安装包仅 3.27 MB,秒下载、秒安装,Windows 原生体验。
- 一键启动:启动时自动启动 DeepSeek Harness 服务(通过
dsh的web子命令),服务就绪后在窗口内嵌显示 Web 界面(http://127.0.0.1:3080);若服务已在运行(包括外部启动的),直接挂载,绝不重复启动。 - 无边框窗口:自绘标题栏与内容同底色、无分隔线,融为一体;支持拖拽、最小化、最大化/还原、关闭;应用图标为 SVG 鲸鱼(深色主题自动反白)。
- 主题联动:实时监听
%USERPROFILE%\.dsh\settings.yaml的ui-theme.preference(dark/light/system,system 跟随系统深浅色),标题栏与内嵌页面同步变色。 - 版本检查与升级:每天第一次启动检查新版本,之后每 6 小时后台再查;发现新版本时左上角弹出「升级dsh新版本 vX.Y.Z」提示,可一键执行
npm install -g @deepseek-ai/dsh并自动重启服务;「稍后」当日不再提示。 - 环境引导:未检测到 Node.js / npm 时提示安装并提供 nodejs.org 入口;未安装 dsh 时提供一键安装按钮。
- 关闭不终止服务:关闭窗口即退出应用,但 DeepSeek Harness 服务留在后台继续运行(下次打开时自动复用);需要停止时在界面点击「停止」;单实例运行,重复启动只聚焦已有窗口。
- 服务管理:状态条提供「重启服务」「停止服务」按钮,对任何由本机 node 进程承载的 DeepSeek Harness 服务生效——包括上次会话遗留、手动启动的实例(按 3080 端口精确定位监听进程并终止其进程树,不误伤其他 node 程序)。仅当端口由非 node 进程持有(如 WSL 中继
wslrelay.exe,即服务运行在 WSL 内)时不受桌面端控制:点击按钮会给出真实持有进程与指引,由你在原环境中操作,桌面端每 5 秒探测、服务恢复后自动重新挂载。
环境要求
- Windows 10/11(自带 WebView2 Runtime)
- Node.js ≥ 18(含 npm;用于前端构建与 dsh 运行)
- Rust stable(用于编译 Tauri)
- dsh:
npm install -g @deepseek-ai/dsh
快速开始
npm install # 安装前端依赖
npm run tauri dev # 开发模式(热更新,需要 Rust 工具链)
打包
npm run package # 一键打包:构建 + 复制安装包到 ./release/
等价的手动步骤:
npm run tauri build
# 产物: src-tauri/target/release/bundle/nsis/DeepSeek Harness_<版本>_x64-setup.exe
脚本一览
| 脚本 | 作用 |
|---|---|
npm run tauri dev | 开发模式(启动 Vite + 编译运行桌面应用) |
npm run package | 一键打包(scripts/package.mjs:构建并收集安装包到 release/) |
npm run tauri build | 构建 NSIS 安装包与 exe |
npm run icon | 从 src-tauri/icons/source.svg 重新生成全套图标(.ico/.png) |
npm run build | 仅构建前端(tsc + vite build) |
cargo test(在 src-tauri/) | Rust 单元测试(主题解析、版本比较、路径解析) |
目录结构
├─ src/ # 前端(原生 TS,无框架)
│ ├─ main.ts # 状态机、事件监听、升级/重启/停止流程
│ ├─ styles.css # 主题变量与界面样式
│ └─ assets/logo.svg # 应用内图标(与根目录 icon.svg 同源)
├─ src-tauri/
│ ├─ src/
│ │ ├─ dsh.rs # DeepSeek Harness 进程管理、健康探测、状态机
│ │ ├─ theme.rs # settings.yaml 主题解析与文件监听
│ │ ├─ update.rs # 版本检查、每日闸门、npm 升级
│ │ ├─ env.rs # node/npm/dsh 工具链探测
│ │ ├─ commands.rs # Tauri 命令层
│ │ └─ state.rs # 共享状态
│ ├─ tauri.conf.json # 窗口/无边框/CSP/打包配置
│ ├─ capabilities/ # 权限声明(窗口操作、opener)
│ └─ icons/ # 图标集(含 source.svg 源图)
├─ scripts/package.mjs # 一键打包脚本
└─ icon.svg # 应用图标源文件(替换后运行 npm run icon)
配置说明
| 环境变量 | 说明 |
|---|---|
DSH_DESKTOP_PORT | 覆盖 DeepSeek Harness 服务端口(默认 3080,会以 dsh web --port <N> 传递) |
DSH_HOME | 覆盖 DSH 配置目录(默认 %USERPROFILE%\.dsh) |
其他行为说明:
- 主题读取
settings.yaml的ui-theme.preference;该文件不存在或字段非法时默认system(跟随系统)。兼容文件名setting.yaml。 - 版本检查使用 npm registry(
registry.npmjs.org/@deepseek-ai/dsh/latest);当日检查状态与「稍后」记录持久化在%APPDATA%\com.dsh.desktop\state.json。 - 端口被非 dsh 服务占用时,状态条会报「端口被其他程序占用」并展示进程日志。
常见问题
- 最小化/关闭/拖拽无效:Tauri 2 的窗口动作权限需在
src-tauri/capabilities/default.json显式声明(已配置完整)。 - 关窗后 DeepSeek Harness 仍在后台运行(预期行为):关闭窗口只退出桌面端,服务会继续在后台运行,下次打开桌面端时自动复用;若需彻底停止,在界面点击「停止」或执行
taskkill /IM node.exe /F(仅当没有其他 Node 程序)。 - 修改图标:替换根目录
icon.svg→npm run icon→ 重新打包;应用内标题栏图标同步替换src/assets/logo.svg。 - 打包后任务栏/桌面仍显示旧图标:图标文件变更后必须重跑构建脚本(已通过
build.rs的rerun-if-changed保证);Windows 自身的图标缓存也会造成残留,重装后运行ie4uinit.exe -show或重启资源管理器;若应用被固定到任务栏,取消固定后再固定一次。