deepseek-harness-launcher
其他 活跃维护

deepseek-harness-launcher

mecoren/deepseek-harness-launcher

deepseek-harness-launcher

1
Stars 标星
0
Forks 分支
1
Watchers 关注
0
Open Issues
JavaScript
主要语言
None
开源协议
388 KB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:mecoren/deepseek-harness-launcher
git clone https://github.com/mecoren/deepseek-harness-launcher.git
git clone git@github.com:mecoren/deepseek-harness-launcher.git
README.md main

DeepSeek Harness 桌面启动器

基于 Tauri 2 的轻量桌面外壳,把 DeepSeek 网页工作台(dsh web)封装成一个
原生 Windows 应用:系统托盘常驻、自带标题栏、内置离线运行环境,终端用户无需安装
Node.js / npm 即可使用与更新。


为什么要有这个项目

DeepSeek 官方提供的 dsh web 是一个命令行启动的本地网页工作台,但它本质上是
“跑在终端里的一条命令”,存在几个对普通用户不友好的地方:

  • 没有原生窗口外壳:dsh web 启动后只往终端打印一个 http://127.0.0.1:<port>
    地址,用户得自己开浏览器访问;没有最小化/关闭、托盘驻留、独立窗口这些桌面体验。
  • 依赖用户本机的 Node / npm 环境:跑 dsh web 需要先装好 Node.js,更新时还要
    用 npm,普通用户机器上往往没有,或者版本不对。
  • 更新链路裸露:检查版本、拉新版都散落在命令行里,没有统一入口。

这个项目就是把这些“零散的命令行体验”包成一个开箱即用的桌面应用:

  • 用 Tauri 2 提供一个原生窗口(自定义注入标题栏,去掉了系统边框);
  • 启动后自动在后台拉起 dsh web(loopback 随机端口),主窗口直接导航过去;
  • 把 Node 运行环境和 dsh CLI 打包进应用内部(runtime-host/),首次运行免联网;
  • 更新功能改用应用自带的 npm CLI(独立安装在 runtime-host/tools/npm),不再调用用户机器上的 npm,所以最终用户也不用装 npm。

一句话:让 dsh web 从“一条命令”变成“一个双击就开的桌面程序”。


它做什么

  • 桌面外壳:Tauri 2 窗口承载 DeepSeek 网页工作台,去掉系统边框,
    注入自定义标题栏(🐋 DeepSeek Harness 品牌 + 最小化 / 全屏 / 关闭按钮)。
  • 自动启动工作台:后台线程以 dsh web --host 127.0.0.1 --port 0
    (系统随机分配 loopback 端口)拉起服务,读取就绪行 dsh web: <url> 后把主窗口
    导航过去。点击标题栏品牌文字可展开下拉菜单,内含「检查 DeepSeek Harness 更新」。
  • 托盘常驻:关闭窗口 只隐藏,进程继续驻留系统托盘(黑鲸图标);
    只有托盘菜单的「退出」才真正结束进程,并在退出时强杀 dsh web 进程树。
  • 离线运行:优先使用内置 runtime-host/(随包发布的 Node 可执行文件 +
    @deepseek-ai/dsh CLI + 独立 npm CLI),首次运行完全免联网。
  • 自带更新器:通过 runtime-host/node.exe tools/npm/node_modules/npm/bin/npm-cli.js
    执行 npm view / npm install 检查并安装新版,只需能访问 npm registry,
    不依赖用户机器上的 Node / npm / pnpm。独立 npm 装在 dsh 依赖图之外,
    npm install 不会破坏更新器自身(此前用 pnpm 时出现过自举损坏问题)。
  • 提示样式:内联实现 shadcn Sonner 风格的居中 toast(顶部居中、成功绿 /
    失败红、自动消失),不引入任何外部 CDN 或前端组件依赖。

怎么启动 / 怎么跑起来

环境要求(开发者侧,Windows 10 / 11,x64)

依赖 说明
Rust 工具链 稳定版(≥ 1.77)
MSVC 目标 x86_64-pc-windows-msvc(不能用 GNU,Tauri 资源是 MSVC COFF 格式)
Visual Studio Build Tools 2022 “使用 C++ 的桌面开发”工作负载(含 MSVC + Windows SDK)
Node.js + npm ≥ 18,仅用于组装离线 CLI 包;终端用户不需要
WebView2 运行时 Win10/11 已预装,Tauri 渲染前端依赖它

1. 准备 Rust MSVC 目标

rustup target add x86_64-pc-windows-msvc

2. 准备离线 CLI 包(首次必须,否则无离线模式)

runtime-host/ 全部内容(含 package.json 元数据)已在 .gitignore 中忽略,
克隆仓库后需要本地重建:

推荐一键脚本(生成 package.json + 复制 node.exe + npm install + 安装独立 npm + 校验):

.\tools\prepare-runtime-host.ps1
# 若 PATH 上没有 node:.\tools\prepare-runtime-host.ps1 -NodeExe "C:\Program Files\nodejs\node.exe"

等价手动步骤:

cd runtime-host
# 1) 先生成最小 package.json(缺失时 npm 会向上层目录查找,把依赖错装到仓库根)
'{ "name": "deepseek-harness-runtime-host", "version": "0.0.0", "private": true }' | Set-Content package.json
copy <你的 Node 安装目录>\node.exe node.exe          # 2) 复制一份 Windows Node 进来
npm install @deepseek-ai/dsh@latest --save-exact --no-audit --no-fund   # 3) 安装官方 CLI
npm install npm@11.17.0 --prefix tools/npm --no-audit --no-fund   # 4) 独立安装更新器 npm
# ⚠️ 必须用 npm(扁平布局、无符号链接);不要用 pnpm,其 symlink 布局打包后会丢失、
#    且把更新器放进 dsh 依赖图会导致更新时自举损坏

若 runtime-host/ 缺失,应用会自动回退到 npx -y @deepseek-ai/dsh web
(首次运行需联网下载一次),仍能启动。

3. 启动方式

开发模式(最常用)

cd deepseek-harness-launcher
npm install          # 仅首次:拉取 @tauri-apps/cli
npm run dev          # = tauri dev:编译 debug 二进制并打开窗口

tauri.conf.json 的 devUrl 为 null,tauri dev 直接用 Tauri 内置开发服务器
伺服静态 dist/,不需要额外的前端 dev server(本项目没有 Vite/React)。

只出可执行文件(最快验证)

cargo build --release --target x86_64-pc-windows-msvc

产物直接双击启动:

src-tauri/target/x86_64-pc-windows-msvc/release/deepseek_harness_launcher.exe

打包安装程序

npm run build        # = tauri build(按 tauri.conf.json 的 bundle.targets:nsis/deb/rpm/dmg/app)

产物在 src-tauri/target/x86_64-pc-windows-msvc/release/bundle/(NSIS 安装包,安装时可选择「仅为当前用户 / 所有用户」)。

4. 启动后行为

  1. 外壳先显示加载页(dist/index.html,中文 spinner 文案,含实时等待秒数)。
  2. 后台拉起 dsh web,读取就绪行后主窗口导航到本地工作台。
  3. 关闭窗口 → 仅隐藏,进程继续驻留托盘。
  4. 托盘菜单「显示主窗口」/「退出」;「退出」才真正结束并强杀 dsh web 进程树。

为什么界面是「网页」:按上游架构,桌面外壳只负责无边框标题栏、托盘与
服务生命周期;工作台 UI 由官方 Web 前端在本地 dsh web 上渲染。实测服务
就绪约 2–4 秒(冷热启动几乎一致)。安装后的首次启动更慢是 Windows
Defender 逐个扫描 runtime-host 数万个文件的一次性成本,之后不再发生。
标题栏注入已改为页面加载事件驱动(不再 500ms 轮询),运行时开销可忽略。


更多细节

完整的依赖清单、离线包目录结构、更新机制、项目结构、排错与 GitHub 元数据,
见仓库内的 INSTALL.md。


技术栈

  • Tauri 2(Rust 后端 + WebView2 渲染)
  • 内置 Node 22 运行环境 + @deepseek-ai/dsh CLI(离线)
  • 自带独立 npm 更新器(runtime-host/tools/npm)
  • 自定义注入式标题栏 + 内联 Sonner toast(无前端框架、无外部依赖)