跳转至

DeepSeekHarnessBox

把 DeepSeek Harness 的 Node.js 运行环境、启动流程和进程管理封装成一个 Windows 单文件启动器,下载后双击即可运行。

GitHub:BeyondXinXin/deepseek-harness-box


1 项目定位

DeepSeek Harness 本身是一个 Web 应用,但对于只是想体验的人来说,真正麻烦的往往不是应用,而是运行环境:

安装 Node.js
配置 npm / pnpm
准备依赖
设置环境
执行命令
确认端口
打开浏览器

如果只是自己使用,这些步骤当然都能完成。

但我更希望它像普通 Windows 软件一样:

下载一个 exe
双击
自动启动
浏览器打开

DeepSeekHarnessBox 就是为此做的一层 Windows 封装。

它不修改 Harness 的核心功能,也不提供额外 API 服务,只负责把“如何在 Windows 上稳定运行 Harness”这件事处理掉。


2 它做了什么

DeepSeekHarnessBox 将已经验证过的运行环境与启动器一起打包。

用户运行后,程序会自动:

  1. 检查是否已经存在实例
  2. 准备本地应用目录
  3. 首次运行或版本变化时释放内置运行环境
  4. 启动 Harness Web 服务
  5. 自动寻找可用本地端口
  6. 等待服务真正可访问
  7. 使用默认浏览器打开页面
  8. 常驻系统托盘
  9. 退出时清理由自己创建的子进程

对于使用者来说,这些过程都不需要手工操作。


3 单文件入口

对外发布的入口只有一个:

DeepSeekHarnessBox.exe

第一次运行时,程序会把运行所需内容释放到:

%LOCALAPPDATA%\BeyondXinXin\DeepSeekHarnessBox\
├─ app\
├─ runtime\
├─ dsh-home\
└─ logs\

其中:

  • app 保存稳定的程序副本
  • runtime 保存释放出的运行环境
  • dsh-home 保存 Harness 自己的数据
  • logs 保存启动器日志

这样既能保持下载和分发简单,也不会把大量运行文件散落到用户手工选择的目录。


4 内置 Node.js 环境

这个项目解决的关键不是“调用一个 npm 命令”,而是把 Node.js 和 Harness 运行环境一起固定下来。

这样用户不需要:

  • 安装 Node
  • 修改系统 PATH
  • 配置 npm
  • 处理 Node 版本差异
  • 自己准备运行目录

运行环境只属于 DeepSeekHarnessBox 自己,不污染系统环境。

这也让一个原本偏开发者工具的项目,更接近普通 Windows 软件的使用方式。


5 进程生命周期

封装 Web 应用时,一个容易忽略的问题是子进程生命周期。

如果只是简单调用外部命令,很容易出现:

  • 主程序退出但 Node 还在运行
  • 重复启动多个实例
  • 端口一直被残留进程占用
  • 浏览器打开时服务还没有真正就绪

DeepSeekHarnessBox 对整个启动流程做了明确管理:

启动器
  ├─ 检查已有实例
  ├─ 准备运行环境
  ├─ 选择端口
  ├─ 启动 Harness
  ├─ 等待服务就绪
  ├─ 打开浏览器
  └─ 退出时清理子进程

Harness 默认监听 127.0.0.1,默认使用 3081,端口占用时会在预设范围内自动寻找可用端口。


6 托盘模式

启动成功后,DeepSeekHarnessBox 常驻 Windows 系统托盘。

可以:

  • 双击托盘图标重新打开 Harness 页面
  • 通过右键菜单打开
  • 从托盘正常退出

对于这种“后台是本地服务,前端是浏览器”的程序,托盘比长期保留一个传统桌面主窗口更自然。


7 技术实现

启动器使用 Go 1.26 编写。

项目本身保持了很少的 Go 依赖,主要工作集中在:

  • Windows 进程启动与生命周期管理
  • 运行环境释放
  • 端口检测
  • 本地服务就绪检测
  • 浏览器启动
  • 托盘与单实例
  • 本地目录管理
  • 构建时 payload 整理

工程中单独保留 payloadscripts,用于组织被嵌入 / 打包的运行环境以及构建流程。

最终用户拿到的是一个 Windows x64 单文件入口,而内部复杂的 Node.js 环境由启动器自己维护。


8 与 PortPilot 配合

DeepSeekHarnessBox 默认让 Harness 保持在 127.0.0.1,这是我希望保留的安全边界。

如果只在当前电脑使用,不需要任何额外配置。

如果需要从自己的另一台电脑访问,可以配合我另外一个项目 PortPilot,通过 Tailscale Serve 或 Remote Bridge 提供访问入口。

尤其是 Remote Bridge,可以让远端电脑仍然以:

http://127.0.0.1:端口

的形式访问,而不需要修改 Harness 原本的 localhost 运行方式。


9 关于 API

DeepSeekHarnessBox 只负责本地运行环境和启动流程。

它:

  • 不提供 DeepSeek API Key
  • 不赠送 API 额度
  • 不代理 API 请求
  • 不修改官方计费规则

实际使用 Harness 时仍然需要用户自己的 DeepSeek API 配置。


10 为什么做这个项目

这个项目本质上是在解决软件工程中很常见的一类问题:

一个东西“开发者可以跑起来”,和“普通用户双击就能用”,中间还有很长一段距离。

Harness 本身并不需要我重新实现。

真正值得做的是把环境、启动、端口、目录、进程、浏览器和退出行为全部收起来,最后只留下一个 exe。

源码:

https://github.com/BeyondXinXin/deepseek-harness-box