dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
一个基于WinUI的deepseek harness客户端
🌐 For English readers: the English version is here → README_en.md
把 DeepSeek Harness 装进一个原生窗口 —— 装完即用,像用普通软件一样简单。 v1.0.2 起由 C#/WinUI 3 完全重写为 Rust + Tauri 2,跨 Windows / macOS / Linux。
原生窗口内嵌系统 WebView,把 DeepSeek Harness 的 Web UI(dsh web)包装成桌面应用。
应用在本地拉起 dsh web 服务进程,解析鉴权 URL 后导航到 http://127.0.0.1:<port>/?token=...;
退出应用时终止整棵子进程树,绝不残留。
| 🪄 零 CLI 前置 | 安装包自带 Node.js 运行时;首次启动自动联网安装最新版 dsh(多源测速选最快),无需手动装任何东西 |
| 🧩 安装即自动绑定 | dsh 自动装到独立目录,装完即被定位并复用,升级/重装应用不受影响 |
| 🖥️ 原生体验 | Tauri 原生窗口 + 顶部悬浮工具栏(毛玻璃胶囊,可收起),WebView 渲染服务界面 |
| 🔌 插件市场 | 多来源(DSH Market / npm / npmmirror)发现并一键安装插件,装完服务自动重启 |
| 🩹 崩溃自愈 | 插件搞崩服务?自动卸载 + 残留彻底清理 + 安全配置重启,弹窗展示日志;卸载记录保留在只读历史中 |
| 🪶 轻量 | Rust 原生二进制,不再捆绑 ~200MB 的 .NET 运行时 |
latest / next 中较新的确切版本号安装(杜绝"latest 标签导致版本偏斜"),进度实时显示在日志窗口$DSH_HOME/profiles/node_modules 模块回退缓存
缺失/悬空时自动清除重建("更新后必须删光重装"的根治方案)--profile web --no-open --port 0 启动,系统分配空闲端口永不冲突;完整捕获鉴权 tokennode_modules/<包名>、.pnpm 存储条目、
模块回退目录中的软链、插件在 profile 下自建的数据目录、package.json 的 dependencies / dsh.profile.bundles 条目)
→ 安全重启 → 弹窗告知;记录保留在「插件管理 → 已自动卸载(历史记录)」(只读,不再提供恢复)taskkill /T /F,Unix 进程组信号)target=_blank)交给系统浏览器打开;WebView 用户数据目录独立| 平台 | 安装包 | 说明 |
|---|---|---|
| Windows 10/11 x64 | artifacts/DshDesktop-Setup-1.0.5-rust.exe | Inno Setup 向导,无需管理员权限;检测 WebView2 Runtime |
| Ubuntu 22.04+ / Debian 12+ / UOS 1070 / deepin 23 x64 | artifacts/*.deb | sudo apt install ./dsh-desktop_1.0.5_amd64.deb |
| macOS (Apple Silicon) | artifacts/*.dmg | 未签名,首次打开需右键 → 打开 |
免安装版(Windows):
src-tauri/target/release/DshDesktop.exe(需与resources/目录放在一起)。
配置 API Key:在用户主目录创建 .env:
DEEPSEEK_API_KEY=sk-xxxx
启动应用:首次启动自动下载安装 @deepseek-ai/dsh(自动选择最快镜像源),
安装进度实时显示在「启动日志」窗口;装完立即自动打开 Web UI。
📍 dsh 安装位置:Windows 在应用所在盘根的
DeepSeek Harness文件夹 (与 C# 版一致,旧安装直接复用);Linux/macOS 在~/.local/share/DeepSeek Harness。 设置中可手动指定 dsh 路径作为备用方案。
安装插件:点顶部工具栏的「插件管理」图标,从多来源列表一键安装; 导致崩溃的插件会被自动卸载并清理残留,记录见「已自动卸载(历史记录)」。
窗口顶部中央的毛玻璃工具栏,从左到右依次是:
Alt+←、Alt+→、Ctrl+R)Ctrl+Shift+H、Ctrl+Shift+O)Ctrl+Shift+P、Ctrl+,、Ctrl+L)点工具栏右侧的箭头可把它收成一个小手柄(不挡页面),再点一下展开。
插件管理窗口分三块:已安装插件(可卸载)、从插件来源获取(可搜索、一键安装)、
已自动卸载(历史记录,只读,可一键清空)。
无论是手动卸载还是崩溃自愈卸载,应用都会自动清理该插件的残留:node_modules/<包名>、
.pnpm 存储中的对应条目、模块回退目录里的软链、该插件在 profile 下自建的数据目录,
以及 package.json 的 dependencies / dsh.profile.bundles 条目 —— 最后一项正是
“卸载不干净导致下次启动继续崩”的根因。
安全边界:清理只覆盖 dsh 目录内的内容。若插件把数据存在 dsh 之外(例如其他盘的仓库), 应用不会跨目录删除,避免误删用户数据。
| 项目 | 要求 | 说明 |
|---|---|---|
| Rust | 1.77+ stable(Windows 需 MSVC 工具链) | rustup 安装 |
| Node.js + npm | 18+ | 用于生成捆绑运行时 |
| Tauri CLI | 2.x | npm install -g @tauri-apps/cli |
| Inno Setup | 7(仅 Windows 打包) | iscc 在 PATH 或默认安装目录 |
| Linux 额外依赖 | libwebkit2gtk-4.1-dev libgtk-3-dev build-essential | Ubuntu 22.04+ / Debian 12+ |
scripts\build-all.cmd
流程:prepare-runtime.ps1(捆绑 node/npm/pnpm 到 src-tauri/resources/runtime)
→ tauri build --no-bundle → Inno Setup 打包 → 产物:
src-tauri/target/release/DshDesktop.exe — 免安装直接运行artifacts/DshDesktop-Setup-1.0.5-rust.exe — 安装器bash scripts/build-deb.sh
# 产物:src-tauri/target/release/bundle/deb/*.deb
bash scripts/build-mac.sh
# 产物:src-tauri/target/release/bundle/dmg/*.dmg(未签名)
💡 Linux / macOS 也可以直接用 GitHub Actions:推送后在
.github/workflows/build.yml的三平台矩阵中自动构建并上传产物。
仅需开发调试:
cd src-tauri && cargo tauri dev # 或 cargo build / cargo test
deepseek-harness-desktop-rust/
├── src-tauri/ # Rust / Tauri 2 应用
│ ├── src/
│ │ ├── main.rs # 入口:原生菜单、窗口管理、单实例
│ │ ├── state.rs # 启动/安装/升级/崩溃自愈状态机(原 MainWindow 逻辑)
│ │ ├── commands.rs # Tauri 命令层(前端 invoke 接口)
│ │ ├── host.rs # dsh web 子进程管理(URL 解析、崩溃检测、进程树清理)
│ │ ├── locator.rs # dsh 定位(自动安装目录 → 手动路径 → PATH/npm 全局)
│ │ ├── installer.rs # 暂存安装/校验/整体替换/模块回退缓存自愈
│ │ ├── registry.rs # npm 多源测速(官方 + 国内镜像)
│ │ ├── plugins.rs # 插件市场多来源抓取/去重/安装/屏蔽恢复
│ │ ├── settings.rs # 用户设置(settings.json,与 C# 版同目录可继承)
│ │ ├── paths.rs # 跨平台路径常量
│ │ └── version.rs # 简化 semver 比较
│ ├── ui → ../ui # 前端页面(frontendDist)
│ ├── capabilities/ # Tauri 权限配置
│ ├── icons/ # 应用图标(由 AppIcon.png 生成)
│ ├── resources/runtime/ # 捆绑的 node/npm/pnpm 运行时(构建脚本生成,gitignore)
│ └── tauri.conf.json
├── ui/ # 前端:index(状态页)/ log / plugins / settings
├── installer/setup.iss # Inno Setup 7 安装脚本
├── scripts/
│ ├── build-all.cmd # Windows 一键全流程
│ ├── prepare-runtime.ps1 # 捆绑运行时(Windows)
│ ├── prepare-runtime.sh # 捆绑运行时(Linux/macOS)
│ ├── build-deb.sh # Linux .deb 构建
│ └── build-mac.sh # macOS .dmg 构建
├── .github/workflows/build.yml # 三平台 CI 矩阵构建
└── legacy/ # 旧 C#/WinUI 3 版本源码存档(v0.7.2)
pnpm update)。.pnpm 存储条目、模块回退软链、
插件数据目录、package.json 的 profile 层条目),从根上断开崩溃循环;
「已自动卸载」只是只读历史,不再提供「恢复」,如需再用请从插件列表重新安装。libwebkit2gtk-4.1(Ubuntu 22.04+ / Debian 12+ / deepin 23 / UOS 1070 自带)。SameSite=Strict,只有顶级导航才能携带,
因此不能用 iframe 嵌入 —— 这也是本版采用"原生菜单 + 直接导航"架构的原因<盘根>\DeepSeek Harness(兼容 C# 版旧安装);
Unix ~/.local/share/DeepSeek Harness(可用 DSH_INSTALL_ROOT 覆盖)%APPDATA%\DshDesktop / ~/.config/DshDesktop),旧数据无缝继承