dsh-complete-notify:给 DSH 加上任务完成提示音与通知

前言

用 DSH(DeepSeek Harness)跑任务,常见的工作方式是把任务交给智能体后切去做别的事。麻烦在于你不知道任务什么时候结束:有时早就跑完在等你反馈,有时中途被阻塞需要审批,一直盯着页面又浪费注意力。

dsh-complete-notify 解决的就是这件事:任务结束时播放提示音并弹出通知,页面在前台用 toast,页面在后台改用系统通知。下面介绍它的定位、功能、安装与配置。

这是什么

dsh-complete-notify 是 kaixinbaba 维护的 DSH 插件,MIT 许可。一句话定位:任务完成时播放提示音并弹出小通知(页面内 toast + 后台时系统通知)。

它是纯浏览器方案:音效用 Web Audio API 合成,弹窗是页面内 toast,页面在后台时走 Web Notification API 发系统通知。不调用 osascript、notify-send、PowerShell 等系统命令,没有音频文件、零系统依赖,Windows / macOS / Linux 通用。通知权限是浏览器站点级授权,授权一次即可。

当前版本 0.6.2,要求 node >= 22.19.0、dsh >= 0.1.0-rc.6,平台为 web。

核心功能

提示音

任务完成时播放提示音,音效由浏览器 Web Audio API 合成。每个结果状态可以独立选择音效,也可以单独设为静音。

页面内 toast

页面在前台时,任务完成会在右上角弹出小卡片,按结果状态着色:绿为任务完成、黄为等待你的反馈、红为任务中断或失败、橙为达到 token 上限。卡片附一句话小结(recap,不超过 50 字)和运行统计(时长 / tokens / 步骤),5 秒自动消失,点击跳转对应会话。多会话同时完成时,toast 栈最多 3 条,先进先出。

后台系统通知

页面切到后台或其他标签页时完成任务,改用系统通知,附带小结与统计,点击通知会聚焦窗口并打开对应会话,同时标签页标题闪烁。系统通知权限被拒时,降级为 30 秒的长时 toast 加标题闪烁。

小结与运行统计

小结先显示降级版本(最终回答前 50 字的清洗版),随后由 Host 端异步调用 LLM 生成一句话小结并自动替换,每次运行结束调用一次。

注意两者口径不同:运行统计取「最后一轮」(turn 号最大的已结束轮次),小结覆盖整轮运行,多轮任务取最终回答。

结果状态判定

结果状态以 Host 端 turn/end 的 reason.kind 为权威来源,客户端兜底推断(turn-error / turn-max-tokens 节点、被打断的 assistant 消息):

reason.kind 颜色 含义
completed 绿 任务完成
blocked 等待你的反馈
aborted 任务已中断
error 任务失败
max-tokens 达到 token 上限

完成检测与官方运行指示灯同源:会话列表快照的 running / completed 状态。

安装与启用

从 npm 安装(推荐):

dsh plugin --profile web add dsh-complete-notify

或锁定 GitHub 版本:

dsh plugin --profile web add "github:kaixinbaba/dsh-complete-notify"

重启 dsh web 生效(launchd 托管时):

launchctl kickstart -k gui/$(id -u)/com.dsh.dsh-web

本地开发可以用源码安装,link: 指向本地目录:

dsh plugin --profile web add link:/path/to/dsh-complete-notify

开发调试用 node –test 运行单测,npm run check 做语法检查:

node --test
npm run check

卸载:

dsh plugin --profile web remove dsh-complete-notify

配置

全部设置在「设置 → 任务完成通知」面板里,保存在浏览器 localStorage(键名 dsh.completeNotify.v1)。可配置项包括:

  1. 启用提醒 / 提示音 / 系统通知(页面在后台时)开关,以及音量滑块。
  2. 分别为绿色完成、黄色阻塞、红色中断选择不同音效。
  3. 音效下拉框按当前浏览器识别的操作系统分组:macOS / Windows / Linux 推荐预设 + 通用预设 + 静音。预设名称是对应系统提示音的风格,实际仍由 Web Audio 合成,不读取系统音频文件。
  4. 「测试音效」「测试通知」按钮。首次点「测试通知」会请求浏览器通知权限,需要点允许。

典型用法

  1. 页面在前台,任务完成:听到提示音,右上角弹出状态着色的小卡片,含小结、运行统计与「点击打开会话」提示,点击卡片跳转对应会话。
  2. 页面切到后台或其他标签页时完成任务:收到系统通知(带小结与统计)+ 提示音 + 标签页标题闪烁。
  3. 首次使用:在「设置 → 任务完成通知」里点「测试通知」,允许浏览器的通知权限请求。

提醒按会话去重:一个会话一次完成只提醒一次,重新运行后再完成会再次提醒。子代理(subagent)会话不提醒。

适用场景与注意事项

适合多会话并行跑任务、长时间后台运行、需要审批或反馈的阻塞场景——这些情况下人不在页面前,也能第一时间知道该回来了。

几个限制需要知道:

  • 标签页必须开着,这是浏览器限制。关闭标签页后系统通知也收不到;如需关页推送,需要接 Push API(需要推送服务器)。
  • 浏览器自动播放策略:首次用户交互(点击/按键)后音效才可用。在 DSH 里发第一条消息时即自然解锁,一般无感。
  • toast 为深色样式,暂未跟随明暗主题切换。

最后提醒一点:插件以当前 dsh 进程的权限运行,安装前建议自行查看源码与许可证。这个仓库是 MIT 许可,源码在 GitHub 上可以完整审阅。

结尾

dsh-complete-notify 用纯浏览器方案补上了 DSH 任务完成提醒这一环:不装系统依赖、不用系统通知命令,跨 Windows / macOS / Linux 可用,状态着色和一句话小结让你不用切回页面就能判断要不要处理。

  • GitHub:https://github.com/kaixinbaba/dsh-complete-notify
  • 插件目录页:https://www.skillhub.cn/plugins/kaixinbaba/dsh-complete-notify

顺带说明:skillhub.cn 是社区维护的插件目录,独立站点,与 DeepSeek / 幻方无官方从属关系。

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

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

小夜