iyam-x/iyam-dsh-desktop 预览 preview

iyam-x/iyam-dsh-desktop

Desktop桌面端 ⭐ 2 MIT Clients & Launchers客户端与启动器

DeepSeek Harness(DSH)的跨平台原生桌面客户端。首次启动时会自动下载并部署 Node.js 运行时与 DSH 内核到本地 /.dsh,之后开箱即用,无需用户手动安装 Node.js。

catalog descriptioncatalog 简介 / catalog description:a deepseek harness desktop

Project Overview项目介绍

iyam-dsh-desktop is a cross-platform native desktop client for the DeepSeek Harness, built on Tauri v2 and supporting macOS, Linux, and Windows. On first launch it auto-downloads and deploys a Node 24 runtime plus the @deepseek-ai/dsh kernel into ~/.dsh/, removing the need for a pre-installed Node.js, and reuses the local install for second-level startups. Use it to run the DSH Web UI, Agent Presets, Cordis plugins, and the dshmarket plugin marketplace from a desktop shell. Caveat: the installer is unsigned and unnotarized, so first-time macOS and Windows users will see system security warnings.

iyam-dsh-desktop 是基于 Tauri v2 的 DSH 跨平台原生桌面客户端,覆盖 macOS、Linux、Windows。它首次启动自动下载并部署 Node 24 运行时与 @deepseek-ai/dsh 内核至 ~/.dsh/,免去用户手动安装 Node;后续启动复用本地安装实现秒开。适用于希望以桌面应用形式使用 DSH Web UI、Agent Presets、Cordis 插件及 dshmarket 插件市场的用户。注意:安装包未签名/未公证,首次打开 macOS 与 Windows 会触发系统安全警告。

Or use CLI install (for developers)或使用命令行安装(适合开发者)

CLI Install命令行安装

dsh plugin --profile web add github:iyam-x/iyam-dsh-desktop

iyam-x/iyam-dsh-desktop 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

iyam-dsh-desktop

DeepSeek Harness(DSH)的跨平台原生桌面客户端。首次启动时会自动下载并部署 Node.js 运行时与 DSH 内核到本地 ~/.dsh,之后开箱即用,无需用户手动安装 Node.js

preview.png

功能特性

  • 开箱即用:首次启动自动下载 Node 运行时与 DSH 内核到 ~/.dsh/(经 npmmirror / npm 官方镜像回退,约 1~2 分钟),之后直接复用,秒级启动。
  • 跨平台:macOS(Intel / Apple Silicon)、Windows 10/11、主流 Linux 发行版。
  • 完整 DSH 生态兼容dsh plugin add/remove、Agent Presets、Cordis 插件系统、内核升级等全部可用。
  • 系统通知点击唤起:对话完成后的系统通知,点击即可把应用窗口带到前台。
  • 内置插件市场:启动后询问是否安装 dshmarket 插件市场,装好即可在应用内浏览、搜索、一键安装社区插件。

安装包下载

发布版安装包在 Releases 页面,按操作系统选择:

系统要求

  • macOS 10.15+ / Windows 10 1803+ / 主流 Linux 发行版
  • 磁盘剩余空间 ≥ 1GB(Node 运行时 + DSH 内核部署到 ~/.dsh/ 后共约 600~800MB)
  • 不需要 预先安装 Node.js 或 npm
  • 首次启动需联网:用于下载 Node 运行时与 DSH 内核(Node 归档与 npm registry 均按 npmmirror → 腾讯云 → 华为云 → 官方源回退);之后日常使用不再依赖网络(除非主动检查更新)

首次启动

  1. 双击应用,会显示「正在安装 DeepSeek Harness…」:自动下载 Node 运行时(镜像回退)→ 用托管 Node 的 npm 把 @deepseek-ai/dsh 装到 ~/.dsh/(全局布局,约 1~2 分钟,需联网)。
  2. 部署完成后自动启动 DSH 并加载 Web UI。
  3. 后续启动直接复用 ~/.dsh/ 本地安装,秒级启动,不再下载。

常见问题

  • macOS 提示"无法验证开发者":当前为未签名/未公证版本。首次打开请右键点击图标 → 「打开」;正式发布后会提供签名公证版本。
  • Windows 提示 SmartScreen:点击「更多信息」→「仍要运行」。
  • 首次启动卡在"正在安装":检查网络是否可访问 npmmirror / npm 官方源;安装日志见 ~/.dsh/.iyam-dsh-stderr.log
  • 卸载:删除应用 + 删除 ~/.dsh/ 目录即可完全清除(含已下载的 Node 与 DSH)。

从源码构建(开发者)

前置依赖

  • Node.js 20+

  • Rust 稳定版工具链

  • npm 10+(随 Node.js 自带)

  • 平台原生依赖:

    • Linuxlibwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libgtk-3-dev build-essential pkg-config libssl-dev python3
    • macOS:Xcode Command Line Tools(xcode-select --install
    • Windows:Visual Studio 2022 含「使用 C++ 的桌面开发」

步骤

npm install               # 安装前端依赖(生成/使用 package-lock.json)
npm run tauri:dev         # 开发模式(热重载)
npm run tauri:build       # 生产构建(仅打包壳与内置插件,不含 DSH 内核/Node)

安装包不再内置 DSH 内核与 Node 运行时;二者在用户首次启动时按需下载到 ~/.dsh/(见「工作原理」)。如需本地预拉取运行时用于离线验证或 CI 预缓存,可执行 npm run fetch:dsh(拉取 DSH 到 bundle 资源目录)与 npm run fetch:node(拉取当前平台 Node 归档)。

构建产物位于 src-tauri/target/release/bundle/ 下对应平台的目录。

持续集成 / 自动构建

仓库已配置 GitHub Actions(.github/workflows/build.yml):推送 v* 标签时,会在 macOS(Apple Silicon,aarch64)、Windows(x64)、Linux(x64) 三个平台上并行构建,并将各平台安装包作为 Assets 上传到一个正式 ReleasereleaseDraft: false),构建完成后自动发布。

  • 首次构建会下载 DSH 内核与 Node 运行时,单次构建耗时较长,属正常现象。
  • 如需对 macOS 产物做签名/公证,在项目 Secrets 中填入 APPLE_CERTIFICATEAPPLE_CERTIFICATE_PASSWORDAPPLE_SIGNING_IDENTITYAPPLE_IDAPPLE_PASSWORDAPPLE_TEAM_ID 即可自动生效(留空则产出未签名包)。

工作原理

iyam-dsh-desktop (Tauri v2)
├── Rust 后端:进程管理、首次启动按需下载并部署 Node + DSH 到 ~/.dsh/
├── React 前端:状态 UI(Installing / Loading / Ready / Error / Crashed)
├── 运行时下载器(downloader.rs):Node 归档镜像回退 + npm 全局安装 @deepseek-ai/dsh
├── 内置体验插件:dsh-shell-plugin / dsh-rtui-ui(随壳分发)
└── 嵌入 DSH Web UI:WebView 直连 http://127.0.0.1:<port>
  1. 首次启动下载:检测 ~/.dsh/ 是否已安装 dsh(及托管 Node)。未安装时:
  • 经 npmmirror → 腾讯云 → 华为云 → nodejs.org 下载 Node 24 归档并解压到 ~/.dsh/node/
  • 用托管 Node 的 npm 以全局布局(-g --prefix ~/.dsh)安装 @deepseek-ai/dsh,registry 依次回退 npmmirror → 腾讯云 → 华为云 → npmjs,约 1~2 分钟;
  • 生成独立启动脚本 ~/.dsh/bin/dsh(Windows 为 dsh.cmd):直接用托管 Node 运行 lib/bin.js,不依赖系统 PATH / shebang;
  • 把两个内置插件部署到 ~/.dsh/lib/node_modules/@iyam/,并在 ~/.dsh/profiles/node_modules/@iyam/ 建软链,供 dsh 的 profile 插件树解析(dsh 只为其自身依赖闭包建软链,@iyam/* 需由 app 补建);
  • 首次运行 dsh plugin 时按需用托管 npm 预装 pnpm 到托管 Node 目录,并注入 PATH(GUI 启动的应用没有用户 shell 的 PATH,找不到 pnpm)。
  1. 后续启动:直接复用 ~/.dsh/ 本地安装,秒级启动,不再下载。
  2. 进程管理:用托管 node spawn lib/bin.js web --port 0,监听 stdout 捕获带认证 token 的访问 URL(dsh ≥ 0.1.2-rc.1 全站认证),通过 Tauri Event 通知前端;运行中进程的 dsh 版本与磁盘不一致(升级提升后旧进程常驻)时强制重启对齐。
  3. UI 渲染:前端收到 URL 后用 <iframe> 加载(token 首访换取界面;app 侧对 dsh 打有 webview 认证适配补丁,见 PLAN.md 问题记录 13/14)。
  4. 升级(备货机制):「检查更新」发现 registry 有新版本时,后台把新版本装到 ~/.dsh/.staging,写 .update.json;下次启动提升(apply)到正式目录,失败自动回滚到上一可用版本。版本未变不会重新下载。
  5. 安装自愈:探测/启动统一用「托管 node + bin.js」直跑,绕开 npm 生成软链与 shebang 的坑;安装后校验入口确实可运行(bin.js --version),若入口损坏(如镜像分发坏 tarball)则自动从 npmjs --prefer-online 重装,绕过本地被污染的 npm 缓存。
  6. 插件自愈:启动失败时从 stderr 解析肇事第三方插件并自动禁用重试(点不出肇事者则禁用全部第三方插件兜底),保证 DSH 必然能启动;被禁插件记入 ~/.dsh/.quarantine.json,dsh 版本变化后自动恢复重试。
  7. 本 app 自身的更新(检查 + 引导下载):启动时自动检查(24h 节流,离线/失败静默),标题栏下拉菜单也可手动「检查应用更新」。做法是拉 GitHub releases/latest 的 tag 与当前版本(编译期写入,与发布 tag 同源)比对:有新版则弹系统通知,菜单里给出「前往下载」直接打开 Release 页,由用户手动安装——原生安装包(NSIS / dmg / AppImage)无法在应用内覆盖自身,故不做静默自更新。注意该能力只对已包含它的版本生效:升级到本版本之前的老版本仍需手动装一次。

不读取系统 node、不读取系统全局安装的 dsh(除非用户自行安装且经探测选用)。手动终端使用可通过 ~/.dsh/bin/dsh(Windows 为 dsh.cmd)。

项目结构

iyam-dsh-desktop/
├── package.json                  # Tauri + Vite 项目配置(npm,非 pnpm)
├── scripts/
│   ├── fetch-dsh.mjs             # 拉取最新 DSH 内核到 bundle 资源(CI 与本地预缓存用)
│   └── fetch-node.mjs            # 拉取当前平台 Node 归档(CI 与本地预缓存用)
├── src/                          # React 前端
├── src-tauri/
│   ├── bin/dsh-{shell,rtui-ui}/  # 内置体验插件(随壳分发)
│   ├── src/{main,installer,process,process_state,downloader,updater,app_update,notify,window,aumid}.rs
│   ├── tauri.conf.json           # 窗口、bundle、安全配置(+ tauri.macos.conf.json 平台覆盖)
│   ├── capabilities/             # 权限策略
│   └── build.rs                  # 将内置插件打包进 app Resources(不含 DSH/Node)
├── .github/workflows/build.yml   # 跨平台自动构建(v* 标签触发,自动发布 Release)
└── PLAN.md                       # 完整方案文档

与 DSH 生态兼容

功能 行为
dsh plugin add / dsh plugin remove ✅ 完整可用
Agent Presets ✅ 读取 ~/.dsh/.agent-presets/
Cordis 插件系统 ✅ 完整保留
DSH 内核升级 自动备货最新版,下次启动生效;失败自动回滚、不兼容插件自动隔离
dsh web 认证(≥ 0.1.2-rc.1) ✅ 自动适配:token 直取界面 + 本机回环放行 API(对 dsh 打幂等补丁,见 PLAN.md 问题记录 13/14)

风险提示

  • 代码签名 / 公证:macOS / Windows 发布前建议进行平台签名与公证,否则用户首次打开会有系统安全警告。
  • Windows WebView2:确保用户系统已安装 WebView2 Runtime(Windows 10/11 默认已安装)。
  • 首次启动需联网:DSH 内核与 Node 运行时在首次启动时下载,请保证可访问 npmmirror / 腾讯云 / 华为云 / npm 官方源;安装包本身仅约 10MB(壳 + 前端 + 内置插件)。
  • 托管 Node 升级:Node 版本由 src-tauri/src/downloader.rsNODE_VERSION 常量控制,升级 Node 需重新发版;DSH 版本由应用内「检查更新」独立升级,无需重装应用。

许可证

本项目以 MIT 许可证 开源,代码托管于 github.com/iyam-x/iyam-dsh-desktop

上一个 Prev dsh-session-settings 下一个 Next agent-body