dsh-all-notify:DSH 宿主事件的原生 Windows 系统通知

前言

用 DeepSeek Harness(DSH)跑长任务时,浏览器标签页不一定在前台:审批工具调用、Agent 提问、轮次结束或报错,如果只靠页面内提示,很容易被错过。浏览器自带的 Notification API 还依赖页面开着、权限已授,关掉标签或最小化窗口后往往就哑了。

下面介绍社区插件 dsh-all-notify(npm 包名 @mkasoy/dsh-all-notify):由维护者 mkasoy 发布,在 Windows 上通过宿主进程调用 PowerShell 与 WinRT ToastNotificationManager 弹出系统 toast,并在「当前正在看的会话且页面在前台」时自动静音,避免同一窗口里重复打扰。

这是什么

dsh-all-notify 是 DSH 的原生系统通知插件,零运行时依赖、无构建步骤。宿主半身监听审批、提问、任务结束与 Agent 错误等事件;浏览器半身只上报「当前会话 id + 页面是否隐藏」,两者经自定义 HTTP 路由协作。插件在 SkillHub 目录中归类为「模型推理」,与 README 中的能力描述一致:把推理与交互过程中的关键节点推到桌面层提醒。

  • 目录页:https://www.skillhub.cn/plugins/mkasoy/dsh-all-notify
  • 源码与文档:https://github.com/mkasoy/dsh-all-notify
  • 许可证:MIT(package.json 与 README 一致)

核心功能

原生 toast,不依赖浏览器 Notification

通知由宿主直接 spawn PowerShell 触发 Windows 系统 toast,不是页面里的 Notification API。README 写明:浏览器关掉后仍可弹出(在 Windows 环境下由宿主侧执行)。

带会话标题

每条通知第二行格式为 「会话标题」 · 事件细节。标题从持久化的 title 投影按需读取(依赖 @deepseek-ai/dsh-session-title)。

按事件类型分别提醒

事件 通知要点
approval/request 需要你的批准 — 工具名与原因(沙箱提权审批同此通道)
user-questions/request 需要你的回答 — 第一个问题
session/event + turn/end 任务完成 / 任务出错 / 任务已中止 / 任务被阻塞 / 任务达到输出上限
agent/error 出错 — 错误码与信息

同一轮失败只弹一条:agent/error 先上报后,同一轮次的 turn/end(error) 不再重复。

智能静音

仅当 事件所属会话 = 页面上正在显示的会话,且 页面在前台(document.hidden 为 false)时不弹。切到其他软件后,即使浏览器仍停在该会话,事件会重新提醒。浏览器每 10 秒上报一次当前会话与可见性,切换会话或 visibilitychange 时立即上报;超过 30 秒未上报则视为失效,通知恢复。浏览器半身不工作时,宿主收不到上报,所有事件都会通知(失败方向是多弹,不是静默)。

分项开关

审批、提问、正常结束、错误、中止、阻塞、输出上限等结局可在配置里单独开关;另有总开关 enabled 与调试项 debug。

安装与启用

在 web profile 下安装(命令来自 GitHub README):

# npm
dsh plugin --profile web add @mkasoy/dsh-all-notify

# 或从 GitHub
dsh plugin --profile web add github:mkasoy/dsh-all-notify

说明:

  1. 修改了宿主半身后需重启 dsh web;只改浏览器半身时刷新页面即可。
  2. 插件以当前 dsh 进程权限运行,安装前建议阅读仓库源码与 MIT 许可证。
  3. README 开发与实测环境为 DSH 0.1.7-alpha.1(dsh web profile,Windows 11 + Windows PowerShell 5.1)。package.json 要求 Node >=20。

配置

所有键可选。写在插件自带的 cordis.patch.yml,或在 ~/.dsh/profiles/web/cordis.patch.yml 里用同一行 id 覆盖:

- id: all-notify
  config:
    enabled: true                # 总开关
    onApproval: true             # 审批请求
    onQuestion: true             # 提问
    onCompleted: true            # 正常结束
    onError: true                # 轮次或步骤失败
    onAborted: true              # 被中止
    onBlocked: true              # 被阻塞
    onMaxTokens: true            # 达到输出上限
    appName: DeepSeek Harness    # 通知上显示的应用程序名
    debug: false                 # true 时把每次决策打到 dsh web 终端

当前无图形设置页;配置需编辑 YAML。这是 README 中明确的设计选择,用以避免额外浏览器依赖面。

典型用法

安装并重启或刷新后,无需额外命令:宿主监听事件,浏览器自动上报状态。需要排查「为何弹 / 为何不弹」时,将 debug 设为 true,在 dsh web 终端查看每次决策日志。

本地校验语法(来自 README「开发」一节):

node --check lib\index.js
node --check lib\client.js

适用场景与注意

适合谁

  • 在 Windows 上用 DSH web 跑 Agent,经常切到 IDE、终端或其它应用,希望审批与任务结果以系统 toast 到达桌面。
  • 希望关闭浏览器标签后仍能通过宿主收到关键事件提醒(非 Windows 平台不适用,见下)。

务必知晓的限制

  • 仅 Windows;其它平台宿主半身会加载但不执行通知逻辑。
  • 每次通知约 0.5–1 秒 延迟(需启动 PowerShell);README 说明这是零依赖方案的取舍。
  • 多标签页 会互相覆盖「当前会话」上报,后报者生效;单标签页无此问题。
  • SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库为准(package.json 当前版本 0.1.0)。

小结

dsh-all-notify 把 DSH 的审批、提问与轮次结局接到 Windows 原生 toast,并用浏览器侧可见性与会话 id 做前台静音。安装命令见上文;细节与架构图见 GitHub README。

  • 目录:https://www.skillhub.cn/plugins/mkasoy/dsh-all-notify
  • GitHub:https://github.com/mkasoy/dsh-all-notify
羽毛球分组比赛记分
小程序二维码

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

Xiaoye