DeepSeek-Harness-Desktop
一个轻量的 macOS 桌面应用壳,Rust 编写,承载 DeepSeek Harness WebUI,一键启停
- Stars
- 0
- Language
- Rust
- Created
- Aug 15, 2026
- Updated
- Aug 15, 2026
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/dsh(dsh 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_CWD | dsh 服务进程工作目录(默认用户主目录) |
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 无输出)
参考
- xiincs/deepseek-harness-desktop — 架构蓝本(Windows 向)
- omdsh-dev/DSH-better-sidebar — 侧边栏插件
- miniLV/Anthropic-codex-theme — 配色