DeepSeek Harness Plugin: dsh-work-done-bell

前言

DeepSeek Harness(DSH)开发中,代理的状态常显示为 idle。但这通常只代表调度器空闲,后台任务或子代理仍在运行。若在 idle 时触发提示音,一个任务可能会响铃多次。dsh-work-done-bell 解决了这个问题,它等待的是“真正的完成”。

插件定位

这是一个 DeepSeek Harness 客户端插件,由 FunctionHookTJU 维护。它会在 DSH 会话真正完成所有工作后(即进入静默状态),播放 Windows 系统提示音,并在右下角弹出 Toast 通知。该插件将完成提示的状态持久化存储,支持开关切换。

核心功能

插件通过“静默检测”机制判断会话是否结束,避免误报。

  1. 静默检测条件:会话必须同时满足以下条件才算真正完成:
    • 状态为 idle。
    • 没有属于该会话的运行中或正在停止的任务。
    • 没有属于该会话的运行中代理。
  2. 超时保护:静默检测存在 90 秒的截止期限。如果超过 90 秒仍未检测到静默,该次会话将不再触发提示音。
  3. 去重处理:在 2.5 秒内的多次完成会合并为一次提示音,防止并发任务导致声音叠加。
  4. 提示音逻辑:声音来源是 DSH 日志中的 turn/end 原因,而非猜测:
    • completed / blocked / max-tokens:播放 Asterisk(默认通知音)。
    • error:播放 Hand(停止音)。
    • aborted / interrupted(包括手动停止):静音。
  5. UI 交互:右下角提供持久开关,用于控制提示音和 Toast 的显示。

安装与启用

使用 file: 协议安装,确保依赖能正确解析。

1、克隆仓库:

git clone https://github.com/FunctionHookTJU/dsh-work-done-bell

2、在目录下执行安装命令:

dsh plugin --profile web add file:/absolute/path/to/dsh-work-done-bell

3、重启 DSH 后端,无需在配置文件中手动编辑其他内容。

诊断与状态查询

插件提供 HTTP 接口供调试。浏览器端每秒轮询该接口获取状态。

通过以下命令检查当前状态(开启 verbose=1 可查看详细原因和策略):

curl "http://127.0.0.1:3080/dsh-work-done-bell/state?verbose=1"

平台限制与注意事项

  • 声音限制:声音播放功能仅支持 Windows 平台,通过 System.Media.SystemSounds 执行。在其他平台上,插件加载并显示 Toast,但保持静音。移植时需修改 play() 函数中的命令为 afplay 或 paplay。
  • 沙盒策略:播放声音的命令必须携带已解析的沙盒策略。如果宿主 shell 服务拒绝该命令,声音将无法播放。在 verbose=1 模式下,lastError 和 lastPolicy 字段会记录原因。
  • Toast 显示:Toast 通知需要浏览器有打开的页面才能显示,声音播放不依赖页面打开。
  • 命名方式:Toast 通知显示的是会话的短 ID,而非标题。

总结

dsh-work-done-bell 是一个实用的 DSH 客户端插件,通过精确的“静默检测”和超时机制,解决了后台任务导致的误报问题。对于需要长时间运行或包含子代理的复杂任务,它能提供清晰的听觉反馈。

  • 插件目录:https://www.skillhub.cn/plugins/FunctionHookTJU/dsh-work-done-bell
  • GitHub 仓库:https://github.com/FunctionHookTJU/dsh-work-done-bell
羽毛球分组比赛记分
小程序二维码

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

Xiaoye