任务完成时播放提示音并弹出小通知(页面内 toast + 后台时系统通知)。纯浏览器方案,零系统依赖,跨 Windows/macOS/Linux。
安装
dsh plugin --profile web add github:kaixinbaba/dsh-complete-notifyGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
DeepSeek Harness(DSH)任务完成通知插件:任务完成时播放提示音并弹出小通知。
- 纯浏览器方案:音效用 Web Audio 合成、弹窗是页面内 toast、页面在后台时改用系统通知(Web Notification API)——零系统依赖、零音频文件,Windows / macOS / Linux 通用
- 不依赖任何系统通知命令(无 osascript / notify-send / PowerShell),通知权限是浏览器站点级授权,授权一次即可
- 与官方运行指示灯同源的完成检测:会话列表快照的
running/completed状态 - toast 与系统通知附带运行统计(时长 / tokens / 步骤)与一句话小结(💬 recap,≤50 字),点击直达对应会话
安装
# 从 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: 指向本地目录,改代码后重启即生效,无需每次走 npm):
dsh plugin --profile web add link:/path/to/dsh-complete-notify
使用
- 任务完成后:听到「叮咚」提示音 + 右上角弹出状态着色的小卡片(绿 ✓ 任务完成 / 黄 ⚠ 等待你的反馈 / 红 ✕ 任务中断或失败 / 橙 ⚠ 达到 token 上限),包含一句话小结(💬 recap,≤50 字)、运行统计(时长 ⏱ / tokens ⚡ / 步骤 🔧)与「点击打开会话」提示;点击卡片快速跳转到对应会话,5 秒自动消失
- 页面切到后台/其他标签页时完成任务:收到系统通知(标题与正文按结果状态区分,同样带小结与统计,点击通知会聚焦窗口并打开对应会话)+ 提示音 + 标签页标题闪烁
- 设置 → 任务完成通知:
- 启用提醒 / 提示音 / 系统通知(页面在后台时)开关、音量滑块
- 分别为绿色完成、黄色阻塞、红色中断选择不同音效
- 下拉框按当前浏览器识别的操作系统分组:macOS / Windows / Linux 推荐预设 + 通用预设 + 静音
- 「测试音效」「测试通知」按钮;首次点「测试通知」会请求浏览器通知权限,点允许
- 全部设置保存在浏览器 localStorage(
dsh.completeNotify.v1)
音效选择说明
音效由浏览器 Web Audio API 合成,不读取系统原生声音文件,因此跨操作系统稳定工作。预设名称是对应系统提示音的风格,不是调用 macOS/Windows/Linux 的系统音频文件;每个状态可以独立选择,也可以单独设为静音。
结果状态
结果状态以 Host 端 turn/end 的 reason.kind 为权威来源(客户端兜底推断:turn-error / turn-max-tokens 节点、被打断的 assistant 消息):
| 状态 | 颜色 | 文案 |
|---|---|---|
completed |
🟢 绿 | 任务完成 |
blocked |
🟡 黄 | 等待你的反馈(模型提问 / 等待审批) |
aborted |
🔴 红 | 任务已中断 |
error |
🔴 红 | 任务失败 |
max-tokens |
🟠 橙 | 达到 token 上限 |
弹窗效果预览
关于小结(recap):弹窗先立即显示降级小结(最终回答前 50 字的清洗版),随后由 Host 端异步调用 LLM 生成真正的一句话小结(≤50 字)并自动升级替换。每次运行结束调用一次 LLM(输入为最终回答,输出约 50 字,成本极小)。小结覆盖整轮运行(多轮 goal 任务取最终回答),与运行统计的「最后一轮」口径不同。
行为细节
| 场景 | 行为 |
|---|---|
| 页面可见,任一会话完成 | toast(小结 + 时长/token/steps)+ 对应状态音效 |
| 页面在后台,会话完成 | 系统通知(含小结与统计)+ 对应状态音效 + 标题闪烁 |
| 系统通知权限被拒 | 降级为长时 toast(30 秒,回来也能看到)+ 标题闪烁 |
| 一次完成 | 只提醒一次(按会话去重,重新运行后再完成会再次提醒) |
| 子代理(subagent)会话 | 不提醒 |
| 多会话同时完成 | toast 栈最多 3 条(FIFO) |
运行统计口径为「最后一轮」(turn 号最大的已结束轮次):时长来自
turnTimings,tokens 为 assistant 消息usage的输入+输出之和,steps 为工具调用块数量。单轮任务即为本次运行的完整数据;多轮 goal 运行显示最后一轮。
已知限制
- 标签页必须开着(浏览器限制);标签页关闭后系统通知也收不到。如需关页推送可后续接 Push API(需推送服务器)
- toast 为深色样式,暂未跟随明暗主题切换
- 浏览器自动播放策略:首次用户交互(点击/按键)后音效才可用——DSH 里发第一条消息时即自然解锁
开发
node --test # 完成检测状态机 + 运行统计单测(通过 stub 执行同一份 client/client.js)
npm run check # 语法检查
结构:
lib/index.js # 宿主入口(事件监听、recap LLM 与路由装配)
client/client.js # 客户端单文件(DSH 模块加载器格式;全部逻辑在此)
cordis.patch.yml # bundle insert 声明
tests/ # node --test 单测
卸载
dsh plugin --profile web remove dsh-complete-notify
License
MIT
原始 README: https://github.com/kaixinbaba/dsh-complete-notify/blob/main/README.md ↗
同类插件
查看全部 →
dsh
将 DeepSeek Harness 的生命周期状态、错误与审批请求,桥接到本地运行的 OpenPets 桌面伙伴。

dsh-qqbot
让 QQ Bot 接入 DeepSeek Harness(dsh)的官方插件

dsh-open-in-vscode
从 Web GUI 一键在 VS Code 中打开工作区目录。

dsh-notification
回合完成桌面通知,按结果分控 + 关键词过滤。

dsh-notifier
DSH 统一通知推送与远程控制:一个 `notify()` API 打通 25+ 渠道(Telegram / 钉钉 / 飞书 / 企业微信 / QQ 机器人 / WxPusher / PushPlus / Server 酱 / Bark / Discord / Slack / ntfy / webhook 等),timeSensitive / active / passive 分级路由并重试;五通道反向审批(Telegram 按钮 / 飞书卡片 / QQ / WxPusher / 微信 iLink);QQ/钉钉/飞书官方扫码登录;本地 Web 管理台;多 agent 路由;系统桌面通知——以及**手机指挥中心**:在手机上发 `!status` / `!stop` / `!retry` 遥控 agent,通知带可操作按钮(查看结果 / 重试 / 日志,点击回调 agent)。密钥脱敏、工具限流、零运行时依赖。

chatccc
飞书(Lark)或微信(WeChat)聊天控制 DeepSeek Harness / Claude Code / Cursor / Codex / CCC Agent