dsh-sentinel: Managing task notifications, system tray, and crash recovery outside the DSH main process

前言

用 DeepSeek Harness(DSH)跑长任务时,常见做法是开着 Web 界面等一轮对话结束。切到别的窗口写代码或开会,往往不知道任务已经跑完;需要审批或回答问题时,也要靠时不时切回浏览器。主进程一旦因插件未捕获的错误退出,排查往往要从终端日志里翻堆栈开始。

dsh-sentinel 是社区维护者 herenfor 发布的客户端类插件,在 DSH 主程序之外承担「照看」:一轮对话正常结束或需要你出面时发通知,可选 Windows 托盘启动/停止 DSH,并在崩溃后写报告、拉起紧急 DSH 与本地说明页。它接替已不再更新的 dsh-task-notify。目录页:https://www.skillhub.cn/plugins/herenfor/dsh-sentinel,源码:https://github.com/herenfor/dsh-sentinel。

这是什么

一句话:在 DSH 主进程之外提供任务完成提醒、托盘启动,以及崩溃后的紧急 DSH 与说明页面;可选插件健康检查。

维护者 herenfor,许可证 MIT(见仓库 LICENSE)。当前资料中的插件版本为 0.3.0,面向 DSH 0.2.x(>=0.2.0-rc.2 <0.3.0-0)。文档写明主要在 Windows 11 + WSL2 下使用,DSH 运行在 WSL 中;独立 headless、sdk 和 sdk-minimal profile 暂不支持,需要 DSH 的 web profile 及 DSH 支持的 Node.js 版本。

核心功能

任务与注意力通知

  • 一轮对话正常结束时发送通知;取消、出错和委派的子任务结束时不提醒。
  • 本轮启动的后台任务(例如编译)仍在运行时,结束的这一轮不提醒;等后台任务结束、AI 处理完结果后再提醒。
  • 需要你出面时也会提醒:有待审批操作、AI 提问,或本轮结束时还有未回答问题;5 秒内处理完的不提醒。
  • 支持 Web 模式里的 minimal 预设(AI 没有工具也能触发)。
  • 优先使用浏览器通知;浏览器未打开、无权限或发送失败时,改用 Windows 系统通知(DeepSeek Harness 名称、鲸鱼图标、默认提示音)。通知失败不影响任务运行。资料说明通知暂不支持点击后跳转到对应对话。

可选 Windows 托盘

插件包内带可选托盘程序,需单独安装(不是 DSH 插件本体的一部分):双击/单击打开网页,右键可重启或停止 DSH 等。安装脚本位于安装后的 node_modules/dsh-sentinel/tray/install.sh。

崩溃防护

DSH 进程异常退出后(资料举例:某插件抛出未处理错误),可自动:将崩溃报告写入 ~/.dsh/logs/dsh-sentinel/crashes/<时间>/;启动不带第三方插件的紧急 DSH(profile sentinel-rescue);在浏览器打开本地说明页,并可在 WSL 下发送 Windows 通知。不会修改你的既有配置。

仅安装插件并照常启动时,运行中崩溃有保护;启动就失败(配置错误、插件装坏)需通过启动器 dsh-sentinel-run 启动 DSH 才能覆盖。托盘默认经启动器启动则无需改命令;终端自启需在 dsh web 前加启动器前缀(见下文典型用法)。

插件健康检查(可选,默认关闭)

DSH 启动完成时检查已启用但未正常运行的插件,状态变化时再查;可发 Windows 通知,并在 设置 → 插件健康 或 http://127.0.0.1:<端口>/dsh-sentinel/health 查看。只读状态,不修改插件。

安装与启用

在 WSL 终端执行(命令来自仓库 README):

dsh plugin --profile web add github:herenfor/dsh-sentinel#v0.3.0

安装后等当前任务结束,重启 DSH 并刷新浏览器页面。WSL 需能找到 pnpm,且能运行 Windows 程序以便发送 Windows 通知。

若曾安装过 dsh-task-notify,先卸载再装本包(通知设置会保留):

dsh plugin --profile web remove dsh-task-notify

若 profile 里仍有旧的手动 task-notify 路径,请删除以免覆盖新版本。

开启浏览器通知:

  1. 打开 DSH 设置 → 任务通知。
  2. 点击 启用浏览器通知,在浏览器中允许。
  3. 点击 测试通知 确认。

页面需通过本机 localhost / 127.0.0.1 或 HTTPS 打开;换浏览器、端口或域名需重新授权。

启用插件健康检查:在 cordis.patch.yml 中设置 sentinel-health 的 disabled: false 后重启 DSH。崩溃防护相关项为 sentinel-crash-guard(rescue / openPage / notify 等,整段关闭可用 disabled: true)。

卸载:

dsh plugin --profile web remove dsh-sentinel

典型用法

用启动器覆盖「启动即失败」

在终端启动 DSH 时,在命令前加上启动器(路径以 web profile 安装后为准):

node ~/.dsh/profiles/web/node_modules/dsh-sentinel/bin/dsh-sentinel-run.mjs -- dsh web --port 3080

启动器会把 DSH 输出原样转出;正常 Ctrl+C 或托盘停止不会误报崩溃。

自测崩溃防护

先停掉正在运行的 DSH 或换端口,再执行:

DSH_SENTINEL_CRASH_TEST=10 dsh web

约 10 秒后 DSH 会故意崩溃,应出现说明页与紧急 DSH;报告会标明自测。试完按说明页命令关闭紧急 DSH。

安装托盘(可选)

在 WSL 中:

bash ~/.dsh/profiles/web/node_modules/dsh-sentinel/tray/install.sh

文件复制到 Windows 的 %USERPROFILE%\DshTray。非默认端口可用 --port;自定义启动/停止可在 ~/.config/dsh-tray/env 中设置 DSH_TRAY_START、DSH_TRAY_STOP 等(见 README)。

Windows 通知备用路径:默认 PowerShell 5.1;失败时可尝试 pwsh + BurntToast 1.1.0:

Install-Module BurntToast -RequiredVersion 1.1.0 -Scope CurrentUser

适用场景与注意

适合在 Windows 11 + WSL2 上用 web profile 日常跑 DSH、希望离开浏览器窗口仍能收到完成/审批/待答提醒,并希望在进程崩溃时有报告与紧急修复入口的用户。

使用前请注意:插件与 DSH 在同一进程权限与环境中运行,安装前应阅读仓库源码与 MIT 许可证,自行评估信任边界。SkillHub 目录与 GitHub 均为社区生态,与 DeepSeek / 幻方无官方从属关系。

限制(来自 README):kill -9 或 OOM 强杀时无法留记录;疑似插件由堆栈推断;紧急 DSH 需 dsh 命令行,与桌面版限制见文档;健康检查对导入即失败的插件只能显示「没有启动」,细节需看启动日志。

结尾

dsh-sentinel 把「任务是否结束、是否要回来处理」和「崩溃后如何自救」从主进程里拆到外围:通知、托盘、启动器与可选健康检查,组成一套主要在 WSL + Windows 下的照看方案。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye