DeepSeek Harness

August 20, 2026 · View on GitHub

DSH 的 Windows 桌面启动器(Tauri 2 + Vanilla TS)。打开应用即自动启动 DeepSeek Harness 的 Web 服务并把其界面内嵌在无边框窗口里,同时负责 dsh 的版本检查与一键升级。

功能

  • 极致轻量:安装包仅 3.27 MB,秒下载、秒安装,Windows 原生体验。
  • 一键启动:启动时自动启动 DeepSeek Harness 服务(通过 dshweb 子命令),服务就绪后在窗口内嵌显示 Web 界面(http://127.0.0.1:3080);若服务已在运行(包括外部启动的),直接挂载,绝不重复启动。
  • 无边框窗口:自绘标题栏与内容同底色、无分隔线,融为一体;支持拖拽、最小化、最大化/还原、关闭;应用图标为 SVG 鲸鱼(深色主题自动反白)。
  • 主题联动:实时监听 %USERPROFILE%\.dsh\settings.yamlui-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 iconsrc-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.yamlui-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.svgnpm run icon → 重新打包;应用内标题栏图标同步替换 src/assets/logo.svg
  • 打包后任务栏/桌面仍显示旧图标:图标文件变更后必须重跑构建脚本(已通过 build.rsrerun-if-changed 保证);Windows 自身的图标缓存也会造成残留,重装后运行 ie4uinit.exe -show 或重启资源管理器;若应用被固定到任务栏,取消固定后再固定一次。