前言¶
DeepSeek Harness(DSH)开发中,代理的状态常显示为 idle。但这通常只代表调度器空闲,后台任务或子代理仍在运行。若在 idle 时触发提示音,一个任务可能会响铃多次。dsh-work-done-bell 解决了这个问题,它等待的是“真正的完成”。
插件定位¶
这是一个 DeepSeek Harness 客户端插件,由 FunctionHookTJU 维护。它会在 DSH 会话真正完成所有工作后(即进入静默状态),播放 Windows 系统提示音,并在右下角弹出 Toast 通知。该插件将完成提示的状态持久化存储,支持开关切换。
核心功能¶
插件通过“静默检测”机制判断会话是否结束,避免误报。
- 静默检测条件:会话必须同时满足以下条件才算真正完成:
- 状态为
idle。 - 没有属于该会话的运行中或正在停止的任务。
- 没有属于该会话的运行中代理。
- 状态为
- 超时保护:静默检测存在 90 秒的截止期限。如果超过 90 秒仍未检测到静默,该次会话将不再触发提示音。
- 去重处理:在 2.5 秒内的多次完成会合并为一次提示音,防止并发任务导致声音叠加。
- 提示音逻辑:声音来源是 DSH 日志中的
turn/end原因,而非猜测:completed/blocked/max-tokens:播放Asterisk(默认通知音)。error:播放Hand(停止音)。aborted/interrupted(包括手动停止):静音。
- 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