DeepSeek Harness Hub
← 返回列表

kyorakuyk/dsh-desktop

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
需源码安装

DeepSeek Harness 桌面客户端 — 基于 deepseek-harness 的 Tauri 原生窗口封装

暂不能直接安装(需源码编译或环境不满足):缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。 · 最近上游提交 2026/8/14 · 已提供中文文档
综合分
35.2
GitHub 分
35.2
用户评分
★ Stars
3
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add kyorakuyk/dsh-desktop
缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装,改用 GitHub 源安装
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包dsh-desktop @ 0.2.0
Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
dsh CLI 依赖未声明 dsh 版本约束
入口文件缺少入口声明

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/19 19:16:37

用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-desktop

DeepSeek Harness 桌面客户端 — 基于 deepseek-harness 的 Tauri 原生窗口封装

Release
CI
License
Topic

Windows · macOS · Linux — 开箱即用,无需安装 Node.js

这是什么

dsh-desktop 把 DeepSeek Harness 的 Web GUI(dsh web)装进原生桌面窗口:

- Tauri 2 (Rust) 壳负责窗口、主机进程生命周期与打包;
- 内嵌 Node.js 主机(sidecar)运行 npm 上发布的 @deepseek-ai/dsh(dsh web --port 0);
- WebView 直接访问 http://127.0.0.1:,完整复用 harness 的
window.__DSH_BOOT__ 注入、插件 bundle 服务、/api JSON-RPC 与 WebSocket 事件下行——不改动 deepseek-harness 一行代码。

安装包自带 Node 运行时与全部 harness 依赖,用户机器上无需预装任何运行时。

✨ 功能特性

| 能力 | 说明 |
| --- | --- |
| 🖥️ 原生窗口 | Windows WebView2 / macOS WKWebView / Linux WebKitGTK |
| 📦 零依赖安装 | 安装包内置 Node 运行时 + @deepseek-ai/dsh 全家桶 |
| 🔌 完整 harness 能力 | 会话、工具调用、插件、模型配置、工作区等与 dsh web 完全一致 |
| 🚀 即开即用 | 启动闪屏 → 主机装配(约 30 个插件行)→ 自动进入 GUI |
| 🤖 模型配置 | GUI 内 设置 → 模型 直接配置 API Key |
| 🔄 跨平台发布 | GitHub Actions 标签一键构建三平台安装包并发布 Releases |
| 📋 日志落地 | 主机与壳日志统一输出(tauri-plugin-log) |

📥 下载安装

从 Releases 下载对应平台的安装包:

| 平台 | 文件 | 说明 |
| --- | --- | --- |
| Windows | dsh-desktop__x64-setup.exe | NSIS 安装器,双击安装 |
| macOS (Apple Silicon) | dsh-desktop__aarch64.dmg | 拖入 Applications 即可 |
| macOS (Intel) | dsh-desktop__x64.dmg | 同上 |
| Linux | dsh-desktop__amd64.deb | Debian / Ubuntu:sudo dpkg -i |
| Linux | dsh-desktop--1.x86_64.rpm | Fedora / RHEL:sudo rpm -i |

首次使用:启动后等待数秒(主机装配),在 设置 → 模型 中配置 API Key 即可开始对话。
数据默认存放在 ~/.dsh(会话、设置、profile;与 dsh CLI 共用)。

🏗️ 架构

┌─────────────────────────────────────────────┐
│ Tauri 窗口 (WebView2 / WKWebView)           │
│  └─ 加载 http://127.0.0.1:         │
├─────────────────────────────────────────────┤
│ Rust 壳 (src-tauri)                         │
│  ├─ 拉起/监控 sidecar,解析 dsh web: URL 行│
│  ├─ 工作目录 ~/.dsh/workspace               │
│  ├─ 退出时终止主机进程                       │
│  └─ 日志(tauri-plugin-log)                 │
├─────────────────────────────────────────────┤
│ Sidecar:捆绑 Node 运行时 + @deepseek-ai/dsh│
│  └─ node host/main.mjs → dsh web --port 0   │
│     ├─ __DSH_BOOT__ 注入(dsh-client-modules│
│     │   节点端扫描 dsh.client 声明)          │
│     ├─ /plugins//client.js 插件 bundle   │
│     ├─ /api JSON-RPC 网关                    │
│     └─ /api/events.mux|host WebSocket 下行   │
└─────────────────────────────────────────────┘

启动时序
1. 应用启动,窗口显示闪屏页(主机装配期间的加载界面);
2. Rust 壳 spawn 捆绑的 node.exe → host/main.mjs → 进程内执行 dsh web --port 0;
3. dsh web 装配 Cordis 插件树(@deepseek-ai/dsh-base + @deepseek-ai/dsh-web-app 两个 bundle,
约 30 个插件行),webserver 绑定到操作系统分配的随机端口;
4. web-app bundle 在 Loader 树稳定后打印 dsh web: http://127.0.0.1:;
5. Rust 壳解析该行 → WebView 导航到该 URL → harness GUI 完整加载
(boot manifest、插件 bundle 预取、/api 连接、WebSocket 事件下行);
6. 用户关闭窗口 → 应用退出 → 主机进程被终止(会话数据已持久化到磁盘)。

工程要点

- 零端口冲突:--port 0 让 OS 分配端口,Rust 从 stdout 解析真实地址;
- Windows \\?\ 前缀:Tauri 资源路径带扩展长度前缀,Node loader 无法解析,
传给子进程前已剥除(strip_verbatim_prefix);
- 精简 bundle:pnpm 以 hoisted 布局安装(复制后无符号链接),打包时剔除
.pnpm store(约 250 MB)与 Node 发行包中的 npm/npx/corepack(约 30 MB);
- keyless 冒烟测试:CI 与本地均可用 npm run smoke 验证整条主机链路
(启动 → URL 行 → index 200 + shell HTML),无需 API Key。

📁 目录结构

dsh-desktop/
├── src-tauri/            # Rust 壳(窗口、sidecar 生命周期、打包配置、图标)
│   ├── src/host.rs       # sidecar spawn / URL 解析 / 进程终止
│   ├── src/lib.rs        # Tauri 应用装配与退出钩子
│   └── resources/        # 构建期组装产物(gitignored):
│                         #   host/{main.mjs, node/, node_modules/}
├── host/                 # Node 主机入口
│   ├── main.mjs          # 进程内执行 dsh web(argv 重定向 + file:// 导入)
│   └── pnpm-workspace.yaml  # pnpm 11 设置(hoisted / allowBuilds / 发布年龄门槛)
├── scripts/
│   ├── fetch-node.mjs    # 下载官方 Node 运行时(v22 LTS,按平台/架构)
│   ├── bundle-host.mjs   # 组装 resources/host(剔除 .pnpm 与 npm 发行件)
│   └── smoke-host.mjs    # keyless 主机冒烟测试(优先测打包产物)
├── ui/                   # 启动闪屏页(纯静态,无构建步骤)
├── .github/workflows/
│   ├── release.yml       # 标签 → tauri-action 三平台构建 → GitHub Releases
│   └── ci.yml            # PR/推送:主机冒烟 + Windows/Linux cargo check
└── package.json          # 便捷脚本(见下)

🛠️ 开发

环境要求

| 依赖 | 版本 | 说明 |
| --- | --- | --- |
| Node.js | ≥ 22.19 | 含 npm |
| pnpm | ≥ 11 | 用于安装 host 依赖 |
| Rust 工具链 | ≥ 1.77 | cargo / rustc |
| Linux 额外依赖 | — | libwebkit2gtk-4.1-dev 等,见 Tauri 官方文档 |

快速开始

1. 安装依赖并组装主机资源(Node 运行时 + @deepseek-ai/dsh 及其依赖)
npm install
npm run host:install        # 内部: pnpm -C host install --prod
npm run host:bundle         # 产物: src-tauri/resources/host/(已 gitignore)

2. 开发运行(打开窗口;主机由 Rust 自动拉起)
npm run tauri dev

常用脚本

| 脚本 | 作用 |
| --- | --- |
| npm run host:install | 安装 host 依赖(@deepseek-ai/dsh 固定版本) |
| npm run host:fetch-node | 下载/裁剪官方 Node 运行时 |
| npm run host:bundle | 组装 src-tauri/resources/host/ |
| npm run smoke | keyless 主机冒烟测试(优先测打包产物) |
| npm run tauri dev | 开发模式运行 |
| npm run build | 生产构建(bundle host + tauri build) |

构建安装包

npm run build
Windows: src-tauri/target/release/bundle/nsis/.exe
macOS:   bundle/macos/.app + bundle/dmg/.dmg
Linux:   bundle/deb/.deb + bundle/rpm/*.rpm(AppImage 暂缓,见已知限制)

🚀 发布到 GitHub

仓库已配置 .github/workflows/release.yml。两种触发方式:

方式一:推送标签(推荐)
git tag v0.2.0
git push origin v0.2.0
方式二:Actions 页面手动触发 release 工作流

工作流会在 Windows / macOS (arm64+x64) / Linux 上分别构建安装包,上传到 GitHub
Releases(草稿,确认无误后手动转正式版)。

可选 secrets(仅启用自动更新时需要,见下文):
TAURI_SIGNING_PRIVATE_KEY、TAURI_SIGNING_PRIVATE_KEY_PASSWORD。

🧪 CI 检查(ci.yml)

| Job | 内容 |
| --- | --- |
| Host boot smoke | Ubuntu 上安装 host 依赖并启动 dsh web,断言 URL 行 + shell HTML |
| cargo check | Windows + Ubuntu 双平台编译检查(含 build.rs 资源校验) |

🔄 自动更新(路线图)

当前版本未编译 tauri-plugin-updater。启用步骤:

1. cargo add tauri-plugin-updater 并在 src-tauri/src/lib.rs 注册;
2. 生成密钥对 npx tauri signer generate -w ~/.tauri/dsh-desktop.key,
公钥写入 tauri.conf.json → plugins.updater.pubkey;
3. 在仓库 Secrets 配置 TAURI_SIGNING_PRIVATE_KEY 与
TAURI_SIGNING_PRIVATE_KEY_PASSWORD;
4. tauri.conf.json 配置 plugins.updater.endpoints 指向
https://github.com/kyorakuyk/dsh-desktop/releases/latest/download/latest.json;
5. 推送新标签,tauri-action 自动上传更新清单与签名产物。

🔍 故障排查

| 现象 | 处理 |
| --- | --- |
| 长时间停留在闪屏页 | 查看应用日志定位主机启动失败原因 |
| 主机启动报错 | 日志:Windows %LOCALAPPDATA%\com.dsh.desktop\logs\dsh-desktop.log,macOS/Linux 见 ~/Library/Logs 与 ~/.local/share/com.dsh.desktop/logs |
| 模型无响应 | 检查 设置 → 模型 中的 API Key 与模型配置 |
| 构建时提示 host bundle missing | 先执行 npm run host:bundle(build.rs 会主动报错提示) |

⚠️ 已知限制

- 首次启动需数秒(主机装配约 30 个插件行 + 前端 bundle 预取),期间显示闪屏页;
- 安装包体积较大(内含 Node 运行时与全部 harness 依赖,约 100 MB 量级);
- 主机异常退出时窗口停留在最后页面(日志可见退出原因);
- Linux AppImage 暂不提供:CI 中 linuxdeploy 打包失败(deb/rpm 正常,
属于 AppImage 工具链问题),后续版本修复;
- 自动更新未启用(见上文路线图)。

📄 License

MIT — 与 deepseek-harness 一致。

免责声明:本项目是社区桌面封装,与 DeepSeek 官方无附属关系;
DeepSeek Harness 及其相关商标归其各自所有者所有。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

同作者(kyorakuyk)的其他插件

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群