dsh-state-notifier:DSH 任务状态的五类浏览器与终端提醒

前言

在 DeepSeek Harness(DSH)里跑长任务时,常见做法是盯着终端或反复切回 Web 会话,看 Agent 是否已回答、是否在等审批、是否卡住或报错。终端 BEL 只能表达「有动静」,很难区分完成与提问;纯日志也不方便从别的窗口一眼判断该回哪条会话。

下面介绍社区插件 dsh-state-notifier(维护者 HOPE-LGNF,当前版本 0.3.1)。它在宿主侧准确识别五类状态,在浏览器里用合成提示音与系统通知提醒,无就绪浏览器时可回退终端 BEL;全局策略走 Cordis 配置,面板偏好走本机 localStorage。

这是什么

dsh-state-notifier 是面向 DSH Web 配置文件的通知插件:任务完成、等待审批、等待回答、任务受阻、任务出错各有一套提醒逻辑。插件声明的 dsh 范围为 >=0.2.0-rc.2 <0.3.0-0,分类在包元数据中为 notify;社区目录将其归入工作流类插件。

实现上复用官方 Connection 的受认证 Fetch 长轮询,浏览器端通过 Web Locks 协调多标签页发送,断线可补发最近 256 条通知(有界内存,非 Web Push 后台服务)。

核心功能

五类事件与完成判定

  • 完成:要求回合正常结束且有最终文本回答;取消、空回合、仅工具调用、子代理回合不会误报完成。
  • 审批、提问、受阻、错误:独立提醒,不受「完成最短耗时」门槛影响。
  • 全局 events 可对五类通知分别开关;minDuration(默认 10 秒)仅作用于完成类通知。

浏览器:声音与桌面通知

  • 在本机浏览器内播放合成提示音,每类事件可选「默认、柔和、明亮、急促」,也可一键统一;无需下载 WAV 或调用外部播放器。
  • 用户授权后发送系统通知(Windows 上可走通知中心);点击通知可回到对应会话。
  • 通知默认展示分类、会话短标识;提问类可显示官方问题正文(多行,类似常见 IM 通知)。不会在系统通知里塞任务正文、工具参数、审批理由或错误堆栈。
  • 两个同源标签页通过 Web Locks 与有界回执协调;设置修改立即生效并同步到其他同源标签。

无浏览器时的回退

playback: auto 时,若没有就绪浏览器,则使用终端 BEL;终端无法响铃时会给出诊断,仍记录通知日志。

与旧插件的差异(README 说明)

项目参考 bell 的五类事件与控制思路,重新实现了传输与播放;未移植 bell 的 WAV 目录、逐事件 WAV、PowerShell/Linux 播放器及中英文切换,也未移植 ding 的声音上传、周期提醒和注册表协议。

安装与版本要求

需要 Node.js 22.19+ 的 22.x,或 Node.js 24+(README 建议 24)。CI 在 Node 22/24 × Linux/Windows 上验证。

不要用 Git 地址安装(如 github:owner/repo 或插件页的仓库 URL):浏览器产物 dist/client.js 不随 Git 分发,用 Git 安装可能被 pnpm 拒绝或启动失败。应使用 Release 的 tgz 或本地 npm pack 产物。

不在仓库根目录时,可直接安装 GitHub Release 附件(已含浏览器构建产物):

npx @deepseek-ai/dsh@0.2.0-rc.2 plugin --profile web add \
  "https://github.com/HOPE-LGNF/dsh-state-notifier/releases/download/v0.3.1/dsh-state-notifier-0.3.1.tgz"

在仓库根目录本地构建后安装($PWD 指向该目录):

npm ci
npm run check
npm pack

npx @deepseek-ai/dsh@0.2.0-rc.2 plugin --profile web add "$PWD/dsh-state-notifier-0.3.1.tgz"
npx @deepseek-ai/dsh@0.2.0-rc.2 web

卸载:

dsh plugin --profile web remove dsh-state-notifier

跟随最新发行版时,将 URL 中的版本号换成 latest,升级后按仓库 README「开发」节的兼容检查步骤再用于日常任务。

启用浏览器提醒

  1. 打开 dsh Web 页面,进入设置「常规」,或点会话顶部的铃铛。
  2. 勾选「播放声音」,首次点击「点击解锁声音」(浏览器要求用户手势才能解锁音频)。
  3. 勾选「显示桌面通知」,按提示「点击授权桌面通知」,并在浏览器站点权限中允许通知。
  4. 展开「权限及运行信息」查看声音、权限、连接与主机策略。

「声音方案与试听」可逐类试听合成音;「通知外观」可换铃铛图标、上传本机图标、选择通知里显示会话短标识或标题、开关「显示提问的问题」。上传图标仅写入本机 localStorage,不会发到宿主。

声音解锁与通知授权是两件独立的事;刷新后可能需要再次解锁声音。若通知权限曾被拒绝,需在浏览器站点设置里改回。

Windows 系统通知由在 Windows 上打开 dsh 页面的浏览器发出;宿主可运行在 WSL。远程 HTTP 通常不能用系统通知,宜使用 HTTPS;localhost 与回环地址一般为安全上下文。页面关闭、休眠或被浏览器冻结后,插件不保证提醒必达。

配置

全局策略只保存在 Cordis 配置中,可在 dsh 插件 Config 里改,或编辑 profile 的 cordis.patch.yml:

- id: state-notifier
  config:
    enabled: true
    playback: auto
    minDuration: 10
    events:
      complete: true
      approval: true
      question: true
      block: true
      error: true
项目 含义
enabled 总开关;关闭后不产生新通知
playback: auto 有就绪浏览器时由浏览器输出;否则 BEL
playback: browser 仅浏览器输出;仍保留终端日志
playback: terminal 仅终端 BEL;仍保留终端日志
playback: none 只记录日志
minDuration 完成通知最短耗时(秒),默认 10
events 五类通知的独立开关

浏览器面板的开关、音量、前台静音、每类声音方案、图标与会话显示方式等存在该浏览器的 localStorage,不会覆盖全局策略。需要全部静音时关闭宿主总开关 enabled;前台静音针对整个 dsh 窗口,不是「仅当前会话」。

关闭「显示提问的问题」后,提问正文不会随订阅响应发给浏览器,通知只保留分类与会话标识。

行为边界与适用注意

  • 通知使用有界内存;宿主重启、插件重载或断线超出保留范围时,面板会提示记录重置。首次打开页面只接收新通知,不补播旧任务。
  • 发送回执表示浏览器接受了 API 调用,不保证用户已看到或听到;崩溃、存储失败、系统免打扰可能导致重复或遗漏。无 Web Locks 时,面板会提示仅在一个标签页启用。
  • 适合需要区分「完成 / 等人 / 出错」、又不想长期盯终端的 DSH Web 用户。插件以当前 dsh 进程权限运行,安装前请自行查阅 GitHub 源码 与 MIT 许可证。

DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区收录,与 DeepSeek / 幻方无官方从属关系。

延伸阅读

  • 仓库:HOPE-LGNF/dsh-state-notifier
  • 架构、项目状态、浏览器验证步骤见仓库内 docs/ARCHITECTURE.md、docs/STATUS.md、docs/VALIDATION-browser.md。

经过上面的步骤,你可以在固定 dsh 版本与 Release tgz 的前提下,把五类任务状态接到浏览器声音、系统通知或终端 BEL,并按 Cordis 与面板两层配置控制粒度。

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

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

Xiaoye