dsh-desktop
No description
- Stars
- 0
- Language
- Rust
- Created
- Aug 14, 2026
- Updated
- Aug 18, 2026
Introduction
DeepSeek Harness Desktop(bun + Tauri)
DeepSeek Harness——面向编码智能体的 Agent 运行框架——的 Windows 原生桌面版封装。
架构
- 外壳(Shell):基于 Tauri v2 的原生窗口(WebView2)。首次运行时自动引导安装 Harness,显示加载页,就绪后跳转到
http://127.0.0.1:<port>,退出时自动关闭服务进程。 - 动态运行时(默认):安装包不携带 Node.js 和 node_modules(安装包仅约 2.5 MB)。首次启动时应用会:
- 下载固定版本 Node.js
v22.22.3win-x64 压缩包(多镜像源,SHA-256 校验); - 使用固定的
package.json+package-lock.json执行内置的npm install,安装到%LOCALAPPDATA%\ai.deepseek.harness.desktop\deps; - 从该依赖闭包启动
dsh web并加载界面。 之后启动直接使用缓存,几秒内完成。服务端必须运行在 Node 下——Bun 缺少 Harness 依赖的node:module.stripTypeScriptTypes。
- 下载固定版本 Node.js
- 工具链:除 Rust 编译外,一切均由 Bun 驱动——
bun install、bunx tauri以及 bootstrap 组装脚本。
目录结构
dsh-desktop/
package.json bun 项目(devDep: @tauri-apps/cli)
assets/ 应用图标源文件(svg/png)
ui/index.html 服务启动期间的加载页
bootstrap/ 随安装包发布的轻量首次运行资源
package.json 固定版本的依赖根(dsh + web profile 闭包)
package-lock.json 锁定闭包(可复现的 npm install)
node-manifest.json Node 版本、镜像地址、SHA-256
install-deps.mjs 独立的备用安装脚本
src-tauri/ Tauri v2 外壳(Rust)
scripts/setup-runtime.ts 通过 bun 组装 bootstrap/(见下文)
构建
bun install # 安装 @tauri-apps/cli
bun scripts/setup-runtime.ts # 组装 bootstrap/(环境变量覆盖见下文)
bunx tauri build # 编译 Rust 并打包 NSIS 安装程序
产物输出到 src-tauri/target/release/bundle/nsis/:
DeepSeek Harness_0.1.0_x64-setup.exe(约 2.5 MB)。
setup-runtime.ts
- 默认模式:复用
DSH_RUNTIME_NODE_MODULES指向的已安装闭包,生成固定的package.json+package-lock.json(可离线工作),并下载一次 Node 压缩包计算node-manifest.json的 SHA-256。 - 回退模式:未设置
DSH_RUNTIME_NODE_MODULES时,通过 npm 从 registry 拉取依赖闭包,从 nodejs.org / npmmirror 下载 Node 压缩包。
运行时行为与配置项
- 服务端绑定随机空闲端口,绝不会与其他 dsh 实例冲突。
- 会话/设置存放在标准的
$DSH_HOME(~/.dsh),与dshCLI 共享。 - 首次运行需下载约 35 MB(Node)+ 190 MB(依赖)。下载源默认使用 npmmirror 镜像(国内访问友好;Node 压缩包优先 npmmirror,nodejs.org 兜底;npm 依赖通过
bootstrap/.npmrc走registry.npmmirror.com)。DSH_NPM_REGISTRY—— 覆盖 npm registry(以--registry传入)
- 首次运行进度:加载页显示实时进度条——Node 下载阶段按实际字节百分比精确推进;npm 阶段按预估 90 秒时间线推进(慢网络自动延长),详情行显示当前下载的包名;窗口标题同步显示状态。
- 诊断日志:
%LOCALAPPDATA%\ai.deepseek.harness.desktop\logs\(desktop.log、npm.out/err.log、server.out/err.log)。
多平台打包(GitHub Actions)
推送 main 分支自动触发 CI(.github/workflows/build.yml),三平台并行构建:
| 平台 | 产物 |
|---|---|
| Windows | NSIS 安装包(x64-setup.exe) |
| macOS | .dmg + .app |
| Linux | .deb + AppImage |
产物作为 CI artifact 上传,也可附加到 GitHub Release(gh release create vX.Y.Z 后由发布流程上传)。
Node.js 运行时按平台分发(bootstrap/node-manifest.json 的 platforms 映射,win-x64 / darwin-arm64 / darwin-x64 / linux-x64,各带 SHA-256 校验)。
macOS 安装说明(未签名版本)
应用未经过 Apple 公证(需要 Apple 开发者账号),首次从浏览器下载打开会提示"已损坏"或"无法验证开发者"—— 这是 Gatekeeper 安全拦截,不是文件损坏。按任一步骤即可使用:
- 右键打开:在访达中右键应用 →「打开」→ 在弹窗中再点「打开」(之后可正常双击);
- 清除隔离标记(终端):
xattr -cr "/Applications/DeepSeek Harness.app" - 本地传输:通过 AirDrop / U 盘拷贝安装包,不经网络下载可避免隔离标记、直接打开。
安装包已做 ad-hoc 签名(codesign),本地分发可正常运行;彻底消除 Gatekeeper 提示需 Apple Developer 签名 + 公证(CI 已预留签名步骤,未来配置证书即可自动启用)。
离线变体(打包 node_modules)
编辑 src-tauri/tauri.conf.json,将 bundle.resources 改为 ["../runtime"],然后执行 bun scripts/setup-runtime.ts --bundle 组装完整闭包(node_modules + node.exe)。外壳会从 exe 同级目录或 NSIS 的 _up_ 暂存目录查找 runtime。安装包体积增至约 45 MB,但可完全离线使用。