Back to home@titxue

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)。首次启动时应用会:
    1. 下载固定版本 Node.js v22.22.3 win-x64 压缩包(多镜像源,SHA-256 校验);
    2. 使用固定的 package.json + package-lock.json 执行内置的 npm install,安装到 %LOCALAPPDATA%\ai.deepseek.harness.desktop\deps
    3. 从该依赖闭包启动 dsh web 并加载界面。 之后启动直接使用缓存,几秒内完成。服务端必须运行在 Node 下——Bun 缺少 Harness 依赖的 node:module.stripTypeScriptTypes
  • 工具链:除 Rust 编译外,一切均由 Bun 驱动——bun installbunx 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),与 dsh CLI 共享。
  • 首次运行需下载约 35 MB(Node)+ 190 MB(依赖)。下载源默认使用 npmmirror 镜像(国内访问友好;Node 压缩包优先 npmmirror,nodejs.org 兜底;npm 依赖通过 bootstrap/.npmrcregistry.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),三平台并行构建:

平台产物
WindowsNSIS 安装包(x64-setup.exe)
macOS.dmg + .app
Linux.deb + AppImage

产物作为 CI artifact 上传,也可附加到 GitHub Release(gh release create vX.Y.Z 后由发布流程上传)。 Node.js 运行时按平台分发(bootstrap/node-manifest.jsonplatforms 映射,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,但可完全离线使用。