IMHaoyan/deepseek-harness-launcher
DeepSeek Harness Launcher(DSHL)—— Windows 托盘启动器 / 看护工具:运行环境一键安装、服务看护、自动更新
Project Overview项目介绍
DSHL is a Windows tray launcher for the DeepSeek Harness plugin: it stays in the system tray, starts, stops, or takes over the DSH web service on demand, shows flashing message notifications, enables auto-start at login, auto-detects the runtime environment with one-click installation, and handles automatic updates for both itself and DSH. It ships as an NSIS installer requiring no admin rights or preinstalled Node.js/DSH. Caveat: only Windows 10/11 (64-bit) is supported; macOS/Linux are untested, and the installer is unsigned, so Windows SmartScreen may prompt an "Unknown publisher" warning.
DSHL 是 DeepSeek Harness 的 Windows 托盘启动器:常驻托盘,一键启停或接管 DSH Web 服务,含消息闪烁通知、开机自启、运行环境自动检测与一键安装,以及自身与 DSH 的自动更新。通过 NSIS 安装包分发,无须管理员权限或预装 Node.js/DSH。主要限制:仅承诺 Windows 10/11(64 位)可用,macOS/Linux 未测试;安装包未做代码签名,SmartScreen 可能拦截。
请帮我了解并安装插件:【deepseek-harness-launcher】【https://github.com/IMHaoyan/deepseek-harness-launcher】
Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。
Or use CLI install (for developers)或使用命令行安装(适合开发者)
CLI Install命令行安装
dsh plugin --profile web add github:IMHaoyan/deepseek-harness-launcher
把 IMHaoyan/deepseek-harness-launcher 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
DeepSeek Harness Launcher(DSHL)
DeepSeek Harness(DSH)的 Windows 托盘启动器:常驻托盘,负责 DSH Web 服务的启停与看护、运行环境一键安装、预装插件管理、消息通知与自动更新。
支持 Windows 10/11(64 位)。macOS / Linux 的代码保留在仓库中,但未测试,暂不承诺可用。
本项目完全由 DeepSeek Harness 搭载 DeepSeek 模型通过 Vibe coding 得到。
截图
![]() |
![]() |
![]() |
![]() |
安装与使用
- 从 Releases 下载最新
dshl-<版本>.exe并安装(免管理员权限,无需预装 Node.js / npm / pnpm / DSH)。 - 首次启动会立即打开唯一窗口并显示「首次设置」控制台;若运行环境缺失,点击一键安装缺失环境即可(自动安装 Node.js、pnpm 与 DSH,全程进度与日志,失败自动回退国内镜像)。
- 环境就绪后自动启动服务并进入 DeepSeek Harness 页面;标题栏右侧「控制台」按钮可在同一窗口内打开/关闭 DSHL 控制台,DSH 会话保持存活。此后托盘常驻、开机自启。
- 卸载:控制面板 → 卸载程序。用户数据保留在
~/.dsh(配置、日志、会话数据)。
安装包未做代码签名,SmartScreen 提示「未知发布者」时选择更多信息 → 仍要运行。
功能
单窗口与控制台
- 应用只有一个窗口 —— DeepSeek Harness 独立窗口本身。标题栏右侧「控制台」按钮在同一窗口内打开/关闭宽屏 DSHL 控制台,切换时 DSH 页面保持存活:不重载、不丢会话、不丢滚动位置与输入。
- 控制台左侧固定三项导航:通用 / 预装插件 / 日志与反馈,底部常驻服务状态、启动器版本与「返回 DeepSeek Harness」。
- 窗口低于约 960px 时侧栏收成图标栏、内容改单列;低于约 720px 时导航转为顶部横排。
通用(原「概览」+「设置」)
- 状态卡:状态(运行中 / 正在启动 / 正在停止 / 服务正在自动重启 / 已停止 + 服务来源)、地址、启动器版本、DSH 版本;两个版本都可就地「检查更新」。
- 主操作:打开 DeepSeek Harness;启动 / 重启 DSH(重启 = 停止 → 启动 → 刷新独立窗口);查看日志。
- 稳定性提示:上次未正常退出或已自动回退配置时,出现「打开恢复 / 导出诊断 / 知道了」。
- 警示卡:运行环境缺失时一键安装;端口被占用时给出空闲端口一键切换或直接改端口。
- 偏好设置分两组:界面与使用(对话界面缩放、主题、消息提醒、三类提醒开关、开机自启)与 服务与更新(服务端口、运行环境、DSH 更新渠道、恢复默认设置)。
服务管理
- 托盘一键启动 / 停止 / 打开 DSH,接管已在运行的服务;退出启动器时只停止自己拉起或已认领看护的服务,外部实例保持不动。
- 端口被占用时先做 HTTP 指纹校验:确认是 DSH 才接管,否则拒绝启动并推荐空闲端口,绝不误杀。
- 服务意外退出自动重启(10 秒冷却,10 分钟内最多 5 次);服务反复启动失败时自动回退到上一个正常配置,仍失败则停止自动恢复并提示。
- 在 DSH 内点「重启服务」不会被误判成崩溃:先按启动参数逐字比对认领后继进程(最多等 20 秒让它绑上端口),状态行区分「由本工具启动 / 服务自重启后已接管 / 接管外部服务」。
运行环境
入口:通用 → 服务与更新 → 运行环境(状态卡下的「查看详情(高级)」也直达这里)。
- 自动识别 Node.js、pnpm 与 DSH 的四种安装形态(源码 / 全局 npm / 托管 / npx),缺失或版本过低时引导一键安装。
- 一键安装使用官方发行包(校验 SHA256,失败回退镜像),装入用户级目录并写入用户 PATH,全程零管理员权限。
- pnpm 优先通过 Node 自带 Corepack 对齐到固定版本;没有 Corepack shim 时回退 npm 全局安装,保证
dsh plugin/ 插件市场可用。
预装插件
这一页只放 DSHL 精选的预装插件,不是插件管理器。浏览、安装和管理更多插件,请使用 DSH 窗口内的「插件市场」。
- 一张卡片一个插件:名称 + 版本、包名、说明、备注、启用开关、安装 / 重新安装 / 更新到新版本 / 卸载;支持搜索与「已安装 / 未安装」筛选,卡片上直接显示可更新状态。
- 真实启停:关闭只在该 profile 的 patch 层禁用、不卸载,重新打开也不用重装。
- 变更不打断会话:装 / 卸 / 启停都只改 profile 与 patch 层,控制台顶部常驻「需要重启服务」提示条 —— 装完所有插件点一次「立即重启生效」即可,不必装一个重启一次(DSH 的 client 模块由服务端组装,整页刷新卸载不掉已注册的 UI 入口,所以启停也走重启)。
- 一键全部安装:依次补齐所有尚未安装的插件;已安装的不动,不做静默升级。
- 默认代装:插件市场(
dshmarket)、手机连接(DSH Bridge Next,随安装包分发,入口在 DSH 设置页「手机连接」分区)默认开启;增强侧边栏(dsh-better-sidebar)、用量与计费(@kenz1117/dsh-ui-usage-billing)、技能管理(@michengai/dsh-skills-manager)、会话归档(@michengai/dsh-archive-manager)、划线提问(dsh-sidebar-qa)、对话回退(dsh-rewind-plugin)、MCP Lens(dsh-mcp-lens)在首次运行或升级后自动补装一次 —— 用户手动卸载过就不再装回,手动装回后恢复自动维护。Codex 风格界面(@michengai/dsh-codex-ui)、会话导入(dsh-chat-import)保持手动安装。划线提问依赖增强侧边栏(前者未装时它只是不显示入口,不会报错)。 - 与 DSH 插件市场同源:在 DSH 内置市场里的启停会同步到同一份 patch 层;carrier 插件(如 Codex 风格界面)被关闭时会一并恢复它对外层侧栏 / 设置行的覆盖,不会留下「侧栏消失」的状态。
更新
- 启动器自身:静默检查 GitHub Releases,后台下载,退出重启自动安装。
- DSH:静默检测更新(24 小时节流;渠道可选
latest/alpha,默认latest),升级需在控制台点「立即更新」;更新前先停服务,更新后重启并强制重载页面,避免旧进程与新文件混用导致白屏。新版启动失败或版本不符时自动回滚到旧版。
通知与反馈
- 通知:DSH 完成 / 提问时托盘闪烁提醒,点击直达对话;窗口聚焦时静默不打扰。三类提醒(服务异常 / 服务恢复 / 更新提醒)可分别开关,关闭只影响系统通知,日志仍逐条记录;同一版本的更新提醒只弹一次。
- 问题反馈:控制台内填写后一键发送给作者,自动附带版本、运行环境与日志(日志已脱敏)。
- 日志与反馈页:服务状态与启停、3 个健康检查点(一行一个,可一键回退配置 —— 回退前先把当前配置备份为
.broken-*文件)、运行日志(最近 60 行,可复制 / 清空显示)、生成诊断报告与打开诊断目录;无异常时只占一行「✓ 没有未处理的异常」。
开发者
npm install # 安装依赖
npm run build:assets # 首次或修改 ui-src 后生成 wwwroot 产物
npm start # 开发模式运行(--console 启动后直接打开控制台)
npm run dev # 热更新:改 ui-src 自动重建并刷新控制台,改主进程文件自动重启
npm test # 单元测试(node --test,零依赖)
npm run selftest # 端到端自检(临时 DSH_HOME + 3999 端口,不影响正在运行的服务)
npm run envcheck # 脱离 Electron 的环境探测(退出码 0 就绪 / 1 缺失 / 2 错误)
npm run dist:win # 打包 NSIS 安装包 → dist/dshl-<版本>.exe
npm run release # 构建 + 创建 GitHub Release 并上传产物
VS Code 打开仓库即可使用内置的 .vscode/launch.json(Ctrl+Shift+D 选择配置后 F5):F5 运行的是当前 workspace 的源码,不是 dist 安装包;开发配置使用独立的 .dev-user-data,避免 Electron 单实例锁冲突;DSH_HOME 仍指向真实 ~/.dsh,F5 前建议先托盘退出已安装版,避免两个启动器同时管理同一 DSH 服务。要验证打包产物,请直接运行 dist\win-unpacked\DeepSeek Harness Launcher.exe 或安装 dist\dshl-*.exe。
调试 UI:控制台内按 F12 或右键 →「打开开发者工具」;配合 npm run dev 改样式即时生效。详见 .vscode/launch.json 注释。
目录结构
main.js 主进程:托盘、服务生命周期、IPC、更新接线
preload.js 控制台渲染进程桥(contextIsolation + sandbox)
console-surface.js 控制台 WebContentsView 生命周期(唯一窗口内全页覆盖)
browser-preload.js 独立窗口(WebContentsView)桥
env-detect.js 环境探测(Node + pnpm + DSH 安装形态 + 通知插件)
env-install.js 一键安装引擎(Node 发行包 + pnpm + DSH 全局安装)
updater.js 启动器自动更新(electron-updater)
dsh-update.js DSH 版本检测、更新与回滚
market.js 插件市场(dshmarket 安装 / 卸载)
plugin-switch.js 插件启停(写 profile 的 cordis.patch.yml,不卸载即可关闭)
bridge.js 远程连接(DSH Bridge Next 安装 / 卸载,随包 payload)
service-stop-guard.js 服务停止防重入与看门狗
service-handover.js DSH 自重启后继的识别与认领判据(纯函数)
notify-policy.js 通知分类开关与"每版本只提醒一次"策略(纯函数)
redact.js 日志 / 反馈 / 诊断统一脱敏
run-guard.js 活跃运行证据(非正常退出检测)
crash-note.js 崩溃提示的展示与"知道了"记账
start-progress.js 启动步骤文案与进度打点
lifecycle.js 生命周期事件日志
health.js 健康快照与崩溃回退
diagnostics.js 诊断报告
ui-src/ 控制台源码(index.html / styles.css / console.css / app.js)
wwwroot/ 构建产物(由 ui-src 生成,随仓库提交)
assets/ 图标;assets/bridge-next 为随包分发的远程连接 payload
docs/ 发布说明规范与截图
tests/ 单元测试
tools/ 构建、开发、发布与校验脚本
新增插件
预装插件页由主进程注册表驱动,不要求为每个插件写专用 DOM:
推荐插件(npm 分发,最常见):
- 在
main.js的MANAGED_NPM_PLUGINS里补一条描述(id/order/npm包名 / 名称 / 说明 / 图标 / 分类;要默认代装再加autoInstall: true); - 动作分支不用改:
runManagedPluginAction()按id在注册表里查表,install/uninstall/update/reinstall/enable/disable全部通用(插件市场与手机连接是另两张固定卡片,见下); - 只加插件条目不需要重建产物(
wwwroot由ui-src生成,注册表在主进程);改了ui-src才要执行npm run build:assets。安装、卸载、更新检查、启停开关、状态卡片全部由通用逻辑生成,无需改ui-src/app.js,也不需要新写安装器模块(启停要求 bundle patch 使用标准的insert:行;若 bundle 还带有对别的插件的disabled: true(carrier),DSHL 会自动写反向覆盖并在关闭时恢复那些行)。
随启动器分发或需要专用逻辑的插件:在 buildPluginCatalog() 中补一条描述,并在 runManagedPluginAction() 中补对应动作分支(如现有的 dshmarket、bridge-next)。
配置
~/.dsh/dshl/config.json(首次运行自动生成)。常用字段:
| 字段 | 说明 |
|---|---|
theme |
主题:light / dark / system |
port |
服务端口,0 = 默认 3080 |
dshVersion |
一键安装锁定的 DSH 版本,默认 latest |
pnpmVersion |
安装/对齐的 pnpm 版本,默认 11.8.0 |
nodeMajor |
安装的 Node 主版本,默认 22 |
nodePath / harnessRoot |
手动指定 Node 路径 / DSH 源码仓库根目录 |
nodeMirror / npmRegistry |
下载源与 npm 源覆盖(默认镜像优先、失败回退官方) |
notifyCategories |
三类系统通知的开关:{ service, recovery, update } |
pluginPendingRestart |
已改但还没重启生效的插件变更(控制台顶部提示条用) |
pluginNotes |
各插件的本地备注 |
remoteConnect |
远程连接开关:{ enabled, autoEnabledFor, declined }。默认开启;旧配置无此字段时升级后自动开启并记录到 autoEnabledFor;用户手动关闭会置 declined,不会被自动开启重新打开 |
feedbackWebhook |
反馈通道覆盖(通道地址随安装包内置) |
其余字段为窗口几何与内部记账,由程序自动维护。
维护者:发布新版本
发布说明必须遵守 docs/release-notes-style.md:标题为纯版本号,正文按 新增 / 优化 / 调整 / 修复 / 移除 分组,每条一行、动词开头,只写用户可感知的变化。
- 更新
package.json的version,按规范写好说明,提交并推送; - 执行发布(脚本会补上
## vX.Y.Z — <日期>版本头并打印最终说明):
npm run release "**新增**\n- 通用页新增…\n\n**修复**\n- 修复…"
前置条件:工作区干净、已 git push origin main、已安装并登录 GitHub CLI。产物为 dshl-<版本>.exe / .blockmap / latest.yml,客户端依据 latest.yml 自动更新;版本号带 -(如 1.3.0-rc.1)会发成 GitHub prerelease,正式用户收不到。
已知限制
- 安装包未做代码签名,SmartScreen 会提示「未知发布者」。
- Windows 开发模式(
npm start)的通知来源显示为 "Electron",安装版显示产品名。 - Defender 排除项需一次 UAC 授权;Windows 11 开启「篡改保护」时无法添加(系统限制,仅记录日志)。




anywhere-labs/dsh-desktop
ccch1mneyyy/dsh-TUI
shaobeichen/dsh-pocket
whitelonng/dshcode
myYangyunfan/dsh_desktop
lencx/Minke
Nagi-ovo/dsh-ads