通知出口:agent 主动通过桌面通知 / 中文语音 / 音效(炸裂、胜利、警报)联系你,60 秒确认窗口后语音呼叫,音量增强,设置面板。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-plugin-notify
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:huguangyu666/dsh-plugin-notify
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
已收录于 awesome-dsh-plugin 精选列表(Notifications & Integrations)
DeepSeek Harness 插件:通知出口——让 agent 主动联系你。桌面通知 / 中文语音播报 / 提示音,Windows 本机零依赖。
功能
系统提示词注入:自动往所有 agent 的系统提示词注入主动通知规则(长任务完成 / 出错 / 需要你注意时用 notify_user),不用每次教;
DSH_NOTIFY_INJECT_PROMPT=0可禁用自动通知兜底(不依赖模型自觉):
- 会话回合出错 → 自动语音 + 桌面通知
- 回合结束 → 立即桌面通知,进入 60 秒确认窗口:期间你在 dsh 发了消息(=看到了)则取消;没发 → 中文语音呼叫你(无论你在不在电脑前——用电脑没发现任务完成更需要语音打断提醒);
DSH_NOTIFY_ON_TURN_END=0关闭全部
agent 工具
notify_user:模型想说啥说啥——把想说的话写进message自由发挥(如搞定了,报告放桌面了);不写则按scene用默认文案命令
/notify:/notify <内容> [--speak|--sound|--toast]手动发通知设置入口(dsh 原生设置界面):dsh 左下角设置 → 「通知」分区——所有行为偏好直接嵌在 dsh 设置里(默认通知方式 / 确认窗口秒数 / 自动通知开关 / 语音呼叫开关 / 音量增强 / 文案模板),保存即生效;另有
/notify页面可测试通知音量增强:可选——通知时自动把系统音量调到最大,播报完恢复原音量(适合怕错过呼叫的场景,不是每个人都喜欢所以默认关闭)
炸裂音效:4 种合成音效(炸裂 / 胜利 / 警报 / 清脆,Python 标准库实时合成),通知时可配;默认「炸裂」
音量增强默认开启:通知时自动把系统音量调到最大,播完恢复原音量
三种通道(可组合):
toast桌面通知(NotifyIcon 气泡,无额外模块)speak中文语音播报(PowerShell SAPI 离线 TTS,优先中文语音)sound系统提示音both语音 + 桌面通知
安装
方式一:官方命令(推荐)
# 装进 web profile(自动 reconcile dsh.profile.bundles)
dsh plugin --profile web add dsh-plugin-notify
dsh web # 重启生效
方式二:商店一键安装
装 dsh-store,打开「插件商店」搜索安装。
方式三:手动
npm i dsh-plugin-notify
在 dsh 的 profile patch(~/.dsh/profiles/<profile>/cordis.patch.yml)中挂载:
- insert:
- id: notify
name: 'dsh-plugin-notify'
重启 dsh 即生效。要求 Windows + PowerShell 5.1+(系统自带)。
使用
模型主动通知(核心场景):直接跟 agent 说"做完这个任务通知我""出错时叫我",它会调用 notify_user 工具。语音播报会念出内容(自动截断 300 字),适合你离开电脑时的场景:
"查一下今天的项目状态,完成后用语音叫我"
手动通知:
/notify 任务完成了
/notify --speak 快回来看看结果
/notify --sound 提醒
测试页:浏览器打开 /notify,选模式点发送;"演示:任务完成叫你"一键体验完整场景。
环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
DSH_NOTIFY_DEFAULT_MODE |
toast |
默认通知方式(toast / speak / sound / both) |
DSH_NOTIFY_INJECT_PROMPT |
1 |
是否向系统提示词注入"主动通知"规则(0 关闭) |
DSH_NOTIFY_ON_TURN_END |
1 |
回合结束是否自动通知(0 关闭全部) |
DSH_NOTIFY_CALL_DELAY_SECONDS |
60 |
toast 发出后等待用户响应的秒数,超时未互动则语音呼叫 |
DSH_NOTIFY_TEMPLATE_DONE 等 |
默认模板 | 文案模板(task_done / task_error / call_back),也可用设置面板或 ~/.dsh/notify/config.json 覆盖 |
文案模板
模型不写 message 时按场景用默认文案(写了 message 则完全自由发挥)。模板支持 {{summary}} / {{session}} 变量,默认不含:
| 场景 | 默认文案 |
|---|---|
task_done |
任务已经完成了,快回来看看结果吧 |
task_error |
任务出错了,需要你处理一下 |
call_back |
我需要你过来看看 |
自定义(设置面板 / 配置文件 ~/.dsh/notify/config.json > 环境变量 > 默认):
# 方式一:配置文件 ~/.dsh/notify/templates.json
# {"task_done": "搞定啦,任务完成了{{summary}}"}
# 方式二:环境变量
# DSH_NOTIFY_TEMPLATE_DONE="搞定啦,任务完成了{{summary}}"
```## 设置面板
浏览器打开 `/notify` 可配置所有行为偏好,保存到 `~/.dsh/notify/config.json` 立即生效:
| 配置 | 说明 |
|---|---|
| 默认通知方式 | 模型/命令不指定时的默认模式 |
| 确认窗口(秒) | toast 发出后等待用户回应的秒数,超时未互动则语音呼叫(默认 60) |
| 回合结束自动通知 | 开关(默认开) |
| 超时语音呼叫 | 开关(默认开) |
| 音量增强 | 通知时把系统音量调到最大,播完恢复(默认开) |
| 通知音效 | 炸裂(默认)/ 胜利 / 警报 / 清脆 / 系统提示音 |
| 文案模板 | 三个场景的通知文案,支持 `{{summary}}` / `{{session}}` 变量 |
## 音效
插件内置音效合成器(`sound.py`,纯 Python 标准库,零依赖),首次使用自动生成到 `~/.dsh/notify/sounds/`:
| 音效 | 构成 |
|---|---|
| 炸裂 | 低频冲击下滑 + 噪声爆裂 + 高频滑音 |
| 胜利 | C-E-G-C 胜利琶音 |
| 警报 | 880Hz 方波断续 |
| 清脆 | E6 → A6 双音 |
## 实现说明
- 后端是单文件 `notify.ps1`(随包分发),通过环境变量 `DSH_NOTIFY_PAYLOAD` 接收 base64 编码的 JSON(避免命令行中文编码问题)
- 语音用系统 SAPI:自动选择 `zh-CN` 语音(如 Microsoft Huihui Desktop),无中文语音时回退默认
- 语音播报在后台子进程执行(不阻塞 dsh 事件循环 / Web UI),等待播完才返回给调用方;通知串行执行,超时 120 秒
## 开发
```bash
npm run build # esbuild 构建 lib/
node test-mock.mjs # mock 测试 14 项(工具/命令/路由注册、配置读写)
# 单测后端:DSH_NOTIFY_PAYLOAD=$(node -e "console.log(Buffer.from(JSON.stringify({mode:'speak',title:'测试',message:'你好'})).toString('base64'))") powershell -File notify.ps1
许可
MIT
链接
同类插件
PolinniZhong/dsh-omi-voice★ 74
DeepSeek Harness 对话内朗读:点一下即可朗读、暂停、继续 AI 回复,豆包 TTS 自然音色(BYOK),只读最终回答并过滤代码、表格与图形,本地引擎,插件零 Key。
PensiveFei/dsh-voice-scribe★ 34
面向 Web UI 的语音输入插件:点按 Alt(或 Alt+空格)开始/停止听写,支持浏览器内置 Web Speech(零配置)或 OpenAI 兼容云端 ASR,可选经 DSH 已配置模型润色,带设置页。
WizisCool/dsh-ears★ 22
面向 DeepSeek Harness (dsh) 的语音输入插件:输入框的麦克风按钮把语音转成草稿文本,支持多种语音识别后端,可选经 dsh 自有 LLM 路由润色,并带原生设置页。
1624318455/dsh-plugin-tts★ 21
用免费 Edge TTS 或你自己的 RVC 音色朗读 AI 回复:消息朗读与自动朗读、长文自适应分块渐进播放(无缝衔接)、音色包仓库一键安装、便携 RVC 运行时。
qishuilalala/dsh-voice-mode#dsh-voice-mode★ 15
DeepSeek Harness Web UI 全双工语音对话:按钮或 Ctrl+Shift+V 进入,持续聆听(停顿自动发送)或按住说话,zipformer2 流式识别入可编辑草稿、可选唤醒词;回复按句 Edge TTS 朗读并显示实时字幕,开口即打断播放与回合(真 barge-in);识别模型本地推理、Edge TTS 在线合成,无需 API Key。
PerryLink/dsh-talk★ 13
DeepSeek Harness 的语音输入输出:麦克风语音转文字与文字转语音。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。