dsh-desktop
No description
- Stars
- 0
- Language
- Rust
- Created
- Aug 22, 2026
- Updated
- Aug 24, 2026
Introduction
DSH Desktop
以 Tauri 2 封装 deepseek-harness 的 macOS 桌面端:托管内核源码、随时拉取上游最新代码并从源码构建,在应用窗口内运行 dsh Web 界面。
参考 hairyf/deepseek-harness-desktop(其下载预编译发行版);本项目改为直接管理上游 git 仓库,始终跟随最新源码。
功能
- 内核托管 — 首次启动自动浅克隆
deepseek-ai/deepseek-harness到应用数据目录。 - 随时更新 — 一键检查上游更新(fetch + 提交数对比);「更新代码并构建」拉取最新代码后按需执行
pnpm install/pnpm run build;「更新并重启服务」完成后自动重启服务。上游 force-push 也能通过reset --hard FETCH_HEAD跟进。 - 插件管理 — 在控制台管理
webprofile 的 npm 插件,支持版本检查、升级、重装和卸载;服务运行中会自动停启。 - 服务生命周期 — 以独立进程组启动
dsh --profile web(loopback 绑定),健康检查就绪后才切换到内嵌界面;停止 / 重启、异常退出与健康检查连续失败都会反映到状态栏与日志。 - 内嵌界面 — 服务就绪后通过 iframe 加载
http://127.0.0.1:<port>,顶栏可随时切回控制台查看日志与操作。 - 退出清理 — 关窗或进程终止(SIGTERM/SIGINT)都会杀死整个服务进程组,不残留 node 进程。
环境要求
- macOS(开发与打包均在 macOS 完成)
- Rust 与 Xcode Command Line Tools
- Node.js
^22.19 || >=24与 pnpm(构建 harness 内核用;支持 NVM、fnm、Volta、asdf/mise 与 Homebrew 自动发现) - 首次克隆需要网络
数据目录
~/Library/Application Support/com.danbao.dsh-desktop/
├── config.json # { "port": 3080, "autostart": true }
├── harness/ # 托管的 deepseek-harness 浅克隆
└── state/ # 构建标记(记录产物对应的 commit)
开发
pnpm install
pnpm tauri dev # 开发模式(Vite + cargo)
指向本地已有的 harness 工作区调试(跳过克隆;构建标记按路径区分存放):
DSH_DESKTOP_HARNESS_PATH=/path/to/deepseek-harness pnpm tauri dev
打包
pnpm tauri build # 产出 .app 与 .dmg(src-tauri/target/release/bundle)
发布
推送 v* tag(如 v0.1.0)触发 GitHub Actions,在 macOS runner 上交叉编译 aarch64 与 x86_64 两个架构,自动创建 GitHub Release 并上传 .app / .dmg 安装包;也可在 Actions 页面手动指定 tag 触发。
应用内置自动更新(Tauri updater):顶栏「检查更新」从 GitHub Releases 拉取带签名的更新包校验后安装重启,产物签名密钥为 minisign 密钥对(私钥在 repo secrets TAURI_SIGNING_PRIVATE_KEY,本地备份 ~/.tauri/dsh-desktop.key,丢失则历史版本无法升级到新版本)。
架构
前端 (vanilla TS + Vite)
控制台:环境 / 内核 / 服务三张状态卡 + 日志窗格
就绪后 iframe 加载 dsh Web UI,可切回控制台
│ invoke 命令 / listen 事件
Rust 后端 (src-tauri/src)
commands.rs get_state / sync_harness / update_harness /
start_service / stop_service / set_config
gitops.rs 浅克隆、fetch、behind 对比、reset --hard FETCH_HEAD
pipeline.rs needs_build 判定、pnpm install / build、构建标记
plugins.rs web profile 插件目录、registry 版本检查与官方 CLI 操作
service.rs 进程组 spawn、监督线程(健康检查/意外退出检测)、
停止与信号清理(SIGTERM/SIGINT → kill 组)
snapshot.rs 全量状态快照,state-changed 事件广播
paths.rs 应用数据目录、config.json、按路径哈希的构建标记
util.rs 登录 shell PATH 解析、流式子进程日志、loopback 探针
要点:
- GUI 不继承终端的 PATH。应用会合并继承环境、用户登录/交互 shell(zsh、bash、fish 等)和常见版本管理器目录,验证后让所有子进程共享同一工具链环境;自动检测失败时可在环境卡中分别指定 Node 与 pnpm。
- 服务以
process_group(0)启动,停止与清理都作用于整个进程组。 - 构建标记存在应用数据目录而非 harness 树内,避免污染用户工作区。
安全说明
dsh 具备本地代码执行能力;本应用仅绑定 loopback,不提供鉴权层。请在可信环境中使用。
License
MIT