dsh-task-notifier: DSH 任务通知插件

前言

在使用 DeepSeek Harness (DSH) 处理任务时,任务可能会进入“需要批准”、“需要回答”或“出错”的状态。如果这些状态变化没有被及时捕捉,可能导致任务卡住或被忽略。dsh-task-notifier 插件通过应用内横幅、合成提示音与系统通知,确保你能实时感知这些状态变更。

该插件由 xubin0628 维护,采用 MIT 许可证,主要解决“状态变更漏看”的问题。

核心功能

插件订阅 DSH 的四个核心事件,并分发三种通知形式:

  1. 事件覆盖:

    • agent/status:任务完成(非等待用户输入状态)。
    • approval/request:需要批准(如沙箱/权限调用)。
    • user-questions/request:需要回答问题。
    • agent/error:执行出错。
    • 注:等待批准/回答期间的状态变化不会再次触发“任务完成”通知,避免重复提示。
  2. 通知形式:

    • 应用内横幅:使用 Shadow DOM 实现,样式隔离,可配置停留时长。
    • 提示音:使用 WebAudio 合成,无需加载外部音频文件,支持清脆/铃铛/水滴等音色与音量调节。
    • 系统通知:调用页面侧的 Notification API。
  3. 配置灵活性:

    • 在设置页提供「通知」页面,可独立开关四种事件、是否包含子代理、横幅显示时长。
    • 提供试听功能,实时生效。

安装与启用

插件以 Bundle 形式安装。由于官方桌面端使用独占的 desktop profile,无法直接通过 CLI 插件管理,需在 DSH 会话内部调用内置 plugin_manager。

# 软链安装(推荐开发期使用,修改源码即时生效)
install_bundle target = link:<插件目录绝对路径>

# 拷贝安装(推荐生产环境,源码丢失不影响运行)
install_bundle target = file:<插件目录绝对路径>

安装后,新版本通常热生效。若涉及 package.json 修改或宿主进程模块变更,需重启客户端。

配置与设置

插件的配置分为两处:

  1. 宿主侧默认值 (cordis.patch.yml 的 config 段):

    • 控制通知开关(完成、批准、回答、错误)、是否包含子代理、防抖时间、音量等。
    • 此处修改需重启客户端生效。
  2. 用户侧偏好(设置页「通知」):

    • 存储在浏览器的 localStorage 中(键为 dsh-task-notifier:settings:v1)。
    • 一旦用户在设置页修改过任何项,后续以用户侧设置为准,不再回退到默认值。

自检与排查

插件提供 RESTful 接口用于检查状态和测试链路。

检查插件状态与等待中的会话:

Invoke-RestMethod http://127.0.0.1:19387/dsh-notifier/status

查看最近的通知记录:

Invoke-RestMethod 'http://127.0.0.1:19387/dsh-notifier/recent?limit=20'

测试通知链路:

Invoke-RestMethod 'http://127.0.0.1:19387/dsh-notifier/test?kind=approval'
# kind 可取: done | approval | question | error

开发与已知限制

在修改代码后,生效逻辑取决于文件类型:

修改文件 生效方式 原因
assets/notifier-client.js 刷新页面 宿主按 mtime 重新读取
lib/client.js 刷新页面 页面重载即更新
lib/index.js 重启客户端 Node ESM 模块缓存
package.json / cordis.patch.yml 重启客户端 需要重新 apply patch

桌面端已知限制:
* 通知限制:桌面端运行在独立子进程,无法直接访问 Electron 的 Notification API(会导致 WinRT 错误 0x80073D54),必须依赖页面侧的 Notification API。
* 注入限制:桌面端的 index 注入表在宿主启动时收集一次,修改注入逻辑后必须重启客户端。
* 设置隔离:设置存储在 localStorage,不写入 profile 配置,换浏览器或清缓存会重置为默认值。

结尾

dsh-task-notifier 是一个轻量级的通知增强工具,通过 SSE 事件流与 WebAudio 合成技术,为 DSH 提供了可视与听觉的双重反馈。对于需要长时间运行代理或频繁进行人机交互的场景,它能有效降低状态遗漏的风险。

更多细节与源码,请访问 SkillHub 目录 或 GitHub 仓库。

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

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

小夜