🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

Awesome-AI-Pedia/dsh-plugin-desktop

DeepSeek Harnessspec-screened扫描:低风险在 GitHub 查看 ↗
未验证

deepseek harness desktop Tauri Rust DSH 桌面端

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/19 · 已提供中文文档
综合分
27.3
GitHub 分
27.3
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add Awesome-AI-Pedia/dsh-plugin-desktop
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
信任档位:仅索引本站尚未对其实装验证,仅收录元数据
是什么
dsh 原生插件 · market
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
更新放缓:最近一次提交在 37 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

数据截至 2026/9/22(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness 桌面客户端

DeepSeek Harness(DSH)的桌面客户端。采用 Tauri v2 + 官方 Web UI:
Rust 外壳负责窗口/托盘/子进程/下载/自动更新;业务界面(对话、Agent、插件页)完全复用上游 DSH Web,不重写。

架构一览

┌─────────────────────────────────────────┐
│  Tauri 主窗口                            │
│  ┌────────────────────────────────────┐ │
│  │ React 外壳(src/)                  │ │
│  │  - Navbar(刷新 / 重启服务)        │ │
│  │  - StatusOverlay(加载/下载/错误)  │ │
│  │  ┌──────────────────────────────┐  │ │
│  │  │ │  │ │
│  │  │   (官方 DSH Web,原样复用)  │  │ │
│  │  └──────────────────────────────┘  │ │
│  └────────────────────────────────────┘ │
└─────────────────────────────────────────┘
↕ Tauri IPC / 事件
┌─────────────────────────────────────────┐
│  Rust(src-tauri/src/)                  │
│  bridge/    tauri command 桥            │
│  config/    路径 & 常量                  │
│  service/                               │
│    ├─ probe        端口/健康检查        │
│    ├─ launcher     spawn dsh 子进程     │
│    ├─ process      平台安全 kill        │
│    └─ download/    Node + dsh-pkg 下载  │
│  desktop/                               │
│    ├─ window       主窗口 + iframe shim │
│    ├─ tray         系统托盘             │
│    └─ shim         注入 iframe 的桥     │
└─────────────────────────────────────────┘
↕ spawn
┌──────────────────┐
│  node bin.js web │
│  --host 127.0.0.1 │
│  --port {p}       │
└──────────────────┘

关键行为

- 启动流程:App 启动 → Rust 探测 127.0.0.1:3080 上是否有 dsh 存活。
- 若有 → 直接复用(owned_by_this_app = false),iframe 加载;
- 若无 → 首次运行下载 Node.js runtime(v22.22.0)+ DSH 运行时包(从 GitHub Release),
然后 spawn node /lib/bin.js web --host 127.0.0.1 --port ;
健康检查最多 30s 等待就绪。
- 端口策略:优先 3080;被占则用系统 ephemeral 端口。
- 进程隔离 ⚠️:只回收本 App 拉起的子进程。外部 dsh web 一根汗毛都不动。
实现靠 Rust 侧 Inner.child: Option:外部服务下这个字段永远是 None,
stop_on_exit 只对 Some 的情况执行 kill。
- 关闭 = 最小化到托盘;托盘菜单:显示主窗口 / 重启 DSH 服务 / 完全退出。
- iframe shim:window.open 与  → 系统浏览器;
Notification API → 系统通知;对 dsh 官方页面零改动。

开发

前置:
- Rust stable(rustup)
- Node ≥ 18(本项目自身开发用,运行时的 Node 由 App 自动下载)

装前端依赖
npm install

运行(开发模式:Rust + Vite 联动)
npm run tauri:dev

首次运行会往 App 数据目录下载 ~50MB Node runtime + ~200MB DSH pkg。
数据目录:
- macOS: ~/Library/Application Support/com.dsh.desktop/
- Windows: %APPDATA%/com.dsh.desktop/
- Linux: ~/.local/share/com.dsh.desktop/

结构:
/
├── dsh-home/            # DSH_HOME(用户 profile、配置、缓存)
├── dependencies/dsh/    # DSH 运行时包解压
├── runtime/node/        # Node.js runtime 解压
├── downloads/           # 临时下载包(安装后自动清理)
└── logs/dsh-web.log     # dsh 子进程 stdout/stderr

打包

npm run tauri:build

产物:
- macOS: .app + .dmg(M1/Intel 各一份,需分别在两种架构上打)
- Windows: NSIS .exe 安装包
- Linux: .AppImage + .deb

产物路径:src-tauri/target/release/bundle/

自动更新(可选)

如需 GitHub Release 自动更新,追加 tauri.conf.json:

"plugins": {json
"updater": {
"endpoints": ["https://github.com///releases/latest/download/latest.json"],
"pubkey": ""
}
}

密钥生成:npx tauri signer generate -w ~/.tauri/dsh-desktop.key。
签名后的 .sig 上传到 GitHub Release,前端调 @tauri-apps/plugin-updater 检查。

代码模块指引

| 目录 | 职责 |
|---|---|
| src/store/harness.ts | 前端状态机 + 事件监听(dsh://status / dsh://download) |
| src/components/harness-webview.tsx | iframe 宿主 + 顶栏 |
| src/components/status-overlay.tsx | 加载/下载/错误蒙层 |
| src-tauri/src/bridge/mod.rs | 6 个 tauri command:launch_harness / shutdown_harness / restart_harness / get_dsh_status / install_dependencies / get_runtime_info |
| src-tauri/src/service/mod.rs | HarnessManager:生命周期决策(复用外部 vs 自拉) |
| src-tauri/src/service/launcher.rs | 选端口 + 组装命令 + 健康检查轮询 |
| src-tauri/src/service/process.rs | 平台安全 kill(Unix setsid + TERM/KILL;Windows taskkill /T /F) |
| src-tauri/src/service/download/ | Node + dsh-pkg 下载 + 解压 + 进度事件 |
| src-tauri/src/service/probe.rs | 端口探测 + HTTP 健康检查 |
| src-tauri/src/desktop/window.rs | 主窗口构造 + 注入 iframe shim |
| src-tauri/src/desktop/tray.rs | 系统托盘菜单 |
| src-tauri/src/desktop/shim.rs | 注入 iframe 的 JS 桥(window.open / Notification) |
| src-tauri/src/config/runtime.rs | 路径解析 + Node/DSH 定位 + 常量(NODE_VERSION / PREFERRED_PORT) |

常见问题

Q: 我在终端手动跑着 dsh,会被 App 干掉吗?
不会。App 检测到 3080 上有外部 dsh 会直接复用(前端状态显示"检测到外部 DSH 服务"),
退出时不会 kill 它。只有 App 自己拉起的子进程会被回收。

Q: 首次下载卡住怎么办?
- 检查网络到 nodejs.org 和 github.com 通不通。
- 手动删 /downloads/、/dependencies/dsh/、/runtime/node/ 再重启。
- 或提前把 @deepseek-ai/dsh 全局安装到系统 PATH,App 会优先探测系统 dsh。

Q: 想换成固定端口?
改 src-tauri/src/config/runtime.rs 里的 PREFERRED_PORT;或在 launcher::pick_port 里去掉 ephemeral fallback 强制 3080。

里程碑

- [x] M1 骨架:Tauri v2 + React 外壳 + iframe 加载 dsh web
- [x] M2 dsh 子进程 + 端口探测 + 生命周期(区分自拉/外部)
- [x] M3 首次下载 Node runtime + dsh-pkg(进度事件)
- [x] M4 系统托盘 + 关闭最小化到托盘 + 只杀自拉进程
- [x] M5 iframe 桥接(window.open / Notification)
- [x] M6 三平台打包配置(macOS/Windows/Linux)
- [x] M7 README + 调试信息

后续可选增强

- i18n(中/英切换)
- 首选项页(自定义端口、代理、日志级别)
- 调试侧边栏(实时看 dsh 日志、runtime 路径、进程 PID)
- 官方 DSH release 版本追踪(比对 commit,提示可更新)
- tauri-plugin-updater 自动更新(需密钥)

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

同作者(Awesome-AI-Pedia)的其他插件

💬 加入社群

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

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群