Back to home@KimFischer99

DeepSeek-Harness-Desktop

一个轻量的 macOS 桌面应用壳,Rust 编写,承载 DeepSeek Harness WebUI,一键启停

Stars
0
Language
Rust
Created
Aug 15, 2026
Updated
Aug 15, 2026
GitHub repo

Introduction

DeepSeek Harness (macOS 桌面壳)

一个轻量的 macOS 桌面应用壳(Tauri 2),承载本机 DeepSeek Harness WebUI:

  • 一键启动:打开应用即拉起 dsh web,窗口内直接显示 http://127.0.0.1:3080 上的完整 UI(与浏览器版同一份 ~/.dsh 数据)
  • 托盘常驻:关闭窗口只隐藏,服务继续在后台跑;点托盘/ Dock 图标一键重新打开
  • 通知弹窗:首次转入后台、后台就绪、异常退出都有系统通知
  • 彻底退出才关端口:只有菜单/托盘里的"退出"(或 Cmd+Q)会杀掉 dsh 进程树并退出
  • 智能端口:3080 已有 dsh 在跑则直接挂接;被其他程序占用则自动换系统分配端口
  • 集成 dsh-better-sidebar (VSCode 风格侧边栏)— 首次运行自动安装到 web profile
  • Anthropic Codex 配色#F8F6F1/#1E1D1B + 铜色 #CA7554)— 通过内置 client 插件注入 DSH 设计 token
  • 毛玻璃半透明:窗口叠加 macOS vibrancy(frosted glass),主题 token 以 半透明 rgba 呈现;进入全屏自动切换为不透明(Rust 轮询 is_fullscreen 并 通过 data-desktop-fullscreen 属性联动页面)
  • 鲸鱼图标:Dock 应用图标与菜单栏(状态栏)图标为定制设计的鲸鱼图标 (src-tauri/icons/dock_icon.svg / menu_bar_icon.svg,由原图转制的 SVG 源文件;dock_icon.png/menu_bar_icon.png 为原始位图)。菜单栏图标 为单色 template 图(icons/tray-icon.png),随系统明暗自适应
  • 启动速度优化:复用系统 node/dsh(不捆绑运行时)、boot 页为纯静态 HTML (窗口秒开)、服务与窗口并行启动、插件存在时零额外进程开销、release 构建 lto + codegen-units=1 + opt-level=s + strip

架构

┌─ Tauri 应用 (Rust + WKWebView) ──────────────────────────────┐
│ 本地 boot 页(启动/就绪/错误/日志,Anthropic 配色)            │
│   └─ 就绪后跳转 → http://127.0.0.1:<port>(真正的界面)       │
│ 服务管理器 (src/server.rs)                                    │
│   定位 node/dsh → 探测 3080 → 准备插件 → 拉起 dsh web         │
│   → 从 stdout 解析真实 URL → 监视进程 → 退出时杀进程组         │
│ 插件管理 (src/plugins.rs)                                     │
│   dsh-better-sidebar + dsh-anthropic-theme → web profile      │
│ 原生菜单/托盘 (src/menu.rs)                                   │
└───────────────────────────┬───────────────────────────────────┘
                            │ 拉起
                   ┌────────▼────────┐
                   │  dsh web 服务    │  数据 → ~/.dsh
                   └─────────────────┘

安全模型与参考实现一致:harness 页面作为纯远程页面加载,不授予 Tauri IPC 访问权限(不开 dangerousRemoteDomainIpcAccess),外壳操作全走原生菜单/托盘。

开发

前置:Rust、Node ≥ 22、pnpm、本机已安装 @deepseek-ai/dshdsh web 可跑)。

npm install          # @tauri-apps/cli
npm run dev          # tauri dev(窗口 + 服务)
npm run build        # release 构建 → src-tauri/target/release/bundle/macos/DeepSeek Harness.app

环境变量覆盖项

变量作用
DSH_DESKTOP_NODE指定 node 可执行文件绝对路径(默认 PATH → Homebrew → nvm)
DSH_DESKTOP_DSH_BIN指定 dsh lib/bin.js 绝对路径
DSH_DESKTOP_PNPM指定 pnpm 绝对路径(插件安装用)
DSH_DESKTOP_THEME_DIR指定内置主题插件目录(默认打包资源 / dev checkout)
DSH_DESKTOP_PORT默认绑定端口(默认 3080;同时跑多个实例时用)
DSH_DESKTOP_CWDdsh 服务进程工作目录(默认用户主目录)
DSH_HOME透传;harness 数据根目录(默认 ~/.dsh

插件(自动准备,仅缺时安装)

  • dsh-better-sidebar@0.12.1 — npm registry,装进 ~/.dsh/profiles/web 并注册 bundle(dsh plugin --profile web add 自动协调)
  • dsh-anthropic-theme — 本仓库 plugins/anthropic-theme/,以 file: 本地包 形式安装;主题通过 client 插件覆盖 DSH 的 --dsw-static-* 设计 token (body / body[data-ds-dark-theme]),light/dark 双套配色 + DM Sans / JetBrains Mono 字体栈

改动主题后记得递增 plugins/anthropic-theme/package.json 的 version—— 应用按版本号判断是否需要重装(file: 包不自动跟随源码变化)。

图标

图标源文件:src-tauri/icons/dock_icon.png(Dock,白底蓝鲸)与 menu_bar_icon.png(菜单栏,透明底黑鲸),另有同名 .svg(内嵌原图,无损转制)。

重新生成全部图标格式(PNG + ICNS + tray):

python3 scripts/gen-icons.py src-tauri/icons/dock_icon.png src-tauri/icons/menu_bar_icon.png src-tauri/icons

测试

npm run build
# 手动测试(见 README 测试清单):
#   1. 打开应用 → boot 页 → 自动跳转 UI
#   2. 关窗口 → 托盘常驻 + 首次通知;lsof -i :3080 仍在
#   3. 点托盘/Dock → 窗口回来,端口保持
#   4. 托盘右键 → 退出 → 进程退出、端口关闭(lsof -i :3080 无输出)

参考