对话结束语音播报(会话名、轮数、结果),回复生成时实时逐句朗读;内置 edge-tts,零第三方依赖。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-voice-announcer
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:flashyiyi/dsh-voice-announcer
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。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
English | 简体中文
DSH(DeepSeek Harness)语音播报插件:监听每个会话的 turn/end 事件,用语音播报会话名、轮数与结果——不用盯着屏幕,也能知道哪个会话聊完了、是否出错。
功能
- 播报清晰:
会话名:第 N 轮对话结束了,出错、中止、截断、打断各有专属文案 - 会话独立音色:每个会话从勾选的音色池中按索引轮转分配一个中文音色并固定,新会话自动错开,跨重启保持
- 音色筛选:在设置界面勾选 14 个中文音色中的任意子集;只勾 1 个 = 全会话一种声音
- 子代理可控:子代理(subagent)会话默认静默,一键开启即可一并播报
- 实时朗读:回复生成过程中按句朗读(edge-tts,句子缓冲、预合成无缝衔接);可只读当前活动会话,追不上时自动跳到最新内容
- Web 设置界面:在 设置 → 插件配置 中完成全部配置,保存后即时生效,无需改配置文件
- 音色试听:每个音色行都有「试听」按钮,按当前语速与音调合成示例语音
- 双引擎:edge-tts(神经网络音质,需联网)/ sapi(Windows 本地语音,离线可用)
- 流式播放:边合成边播放,无临时文件、无转码;首字约 0.6 秒内出声
- 并发安全:每次播报相互独立;多会话同时完成互不干扰、不丢播报
安装
dsh plugin --profile web add dsh-voice-announcer
edge-tts 合成引擎已内置(零第三方 npm 依赖)。
其他依赖
- ffplay(edge-tts 模式的流式播放):
winget install ffmpeg(自带 ffplay) - Node.js ≥ 22(edge-tts 模式;内置 WebSocket 客户端无需任何外部包)
- Windows 系统(sapi 引擎)
配置
方式一:Web 设置界面(推荐)
侧边栏 设置 → 插件配置 → 语音播报:保存后即时生效。
方式二:配置文件
在 ~/.dsh/profiles/<profile>/cordis.patch.yml 末尾追加:
- id: dsh-voice-announcer
config:
enabled: true
engine: edge-tts # edge-tts / sapi
voices: [] # [] = 全部中文音色(默认);或指定列表,如 [zh-CN-XiaoxiaoNeural, zh-CN-YunxiNeural]
overlapLive: true # 多会话重叠朗读(默认开启):不同音色的会话可同时朗读;设为 false 回退全局单队列
announceCompleted: true
announceError: true
announceSubagent: false # 是否播报子代理会话
announceWait: true # 会话在等你时播报(提问 / 计划审阅 / 审批提权)
liveRead: true # 实时朗读:回复生成时边出边念(仅 edge-tts)
liveReadActiveOnly: false # 只朗读当前活动会话
liveReadMaxQueue: 5 # 跟读跳跃阈值(待念队列句数)
配置项
| 配置项 | 默认值 | 说明 |
|---|---|---|
| enabled | true | 总开关 |
| engine | edge-tts | 播报引擎;选择 sapi 时音色/语速/音调控件自动禁用 |
| voices | [] | 音色池(edge-tts 中文音色)。新会话按索引轮转从池中分配一个并固定;空 = 全部 14 个中文音色(默认);只 1 个 = 全会话一种声音 |
| rate | +0% | 语速(edge-tts),滑杆 -50% ~ +50% |
| pitch | +0Hz | 音调(edge-tts),滑杆 -50Hz ~ +50Hz |
| announceCompleted | true | 对话正常结束时播报 |
| announceError | true | 出错、中止、截断时播报 |
| announceSubagent | false | 是否播报子代理会话 |
| announceWait | true | 会话挂起等你回应时播报:向你提问、计划待审阅、审批/提权请求 |
| liveRead | true | 实时朗读:回复按句边出边念(仅 edge-tts) |
| liveReadActiveOnly | false | 只朗读当前活动会话(浏览器自动上报) |
| overlapLive | true | 多会话重叠朗读:默认开启 = 不同音色的会话可同时朗读(同会话仍串行);关闭 = 全局单队列,同一时间只念一个会话 |
| liveReadMaxQueue | 5 | 跟读跳跃:待念队列超过此句数时丢弃旧文本、跳到最新内容 |
音色(edge-tts,14 个中文音色)
全部为中文音色(普通话 / 方言 / 粤语 / 台湾)——edge-tts 每个音色都能朗读英文,中英混合内容照常。
| 分组 | 音色 |
|---|---|
| 普通话(zh-CN) | 晓晓 · 晓伊 · 云希 · 云扬 · 云健 · 云夏 |
| 方言(zh-CN) | 晓北(辽宁)· 晓妮(陕西) |
| 粤语(zh-HK) | 曉佳 · 曉曼 · 雲龍 |
| 台湾(zh-TW) | 曉臻 · 曉雨 · 雲哲 |
会话分配:新会话(首次朗读时)按
分配计数 % 音色池长度从勾选池中取一个音色并永久固定(持久化到voice-announcer-session-voices.json)。修改筛选只影响之后的分配——已分配会话保持原音色,取模保证新会话与新列表长度自动对齐。
行为
- 子代理会话默认不播报(可通过
announceSubagent开启) - 每个会话固定使用分配到的音色直至会话结束;升级前已朗读过的会话保留旧单音色行为
- 实时朗读默认多会话重叠(不同音色的会话可同时朗读,同会话仍串行);将「多会话重叠朗读」关闭后回退全局单队列(同一时间只念一个会话)
- 每次播报边合成边流式播放,无临时文件、无转码;ffplay 缺失时自动降级 SAPI
- 会话挂起等你回应时(向你提问 / 计划待审阅 / 审批提权请求)会用该会话音色播报一句提示,只打断该会话的实时朗读(
announceWait控制) - 出错时附带错误信息(截取前 60 字);中止时区分「你中止」与「父代理中止」
开发
# 构建 host(需要 DSH 源码 checkout 的 tsc)
DSH_CHECKOUT=<你的dsh-harness路径> bash scripts/build.sh
# 构建 client(Web 设置卡片)
npx tsdown
更新记录
- 0.1.7 — 性能修复:会话标题读取不再走
sessionProjections.snapshot()——该调用会对超大会话(百万级事件 × 每个注册投影 key)同步做全量 fold,曾导致 DSH 服务端定期完全卡住(冻结数秒到分钟级后自动恢复)。现在改为轻量反向扫描最近的session/title事件取标题,播报标题不再触发全量投影。
License
BSD-3-Clause
链接
同类插件
PolinniZhong/dsh-omi-voice★ 75
DeepSeek Harness 对话内朗读:点一下即可朗读、暂停、继续 AI 回复,豆包 TTS 自然音色(BYOK),只读最终回答并过滤代码、表格与图形,本地引擎,插件零 Key。
PensiveFei/dsh-voice-scribe★ 36
面向 Web UI 的语音输入插件:点按 Alt(或 Alt+空格)开始/停止听写,支持浏览器内置 Web Speech(零配置)或 OpenAI 兼容云端 ASR,可选经 DSH 已配置模型润色,带设置页。
1624318455/dsh-plugin-tts★ 25
用免费 Edge TTS 或你自己的 RVC 音色朗读 AI 回复:消息朗读与自动朗读、长文自适应分块渐进播放(无缝衔接)、音色包仓库一键安装、便携 RVC 运行时。
WizisCool/dsh-ears★ 22
面向 DeepSeek Harness (dsh) 的语音输入插件:输入框的麦克风按钮把语音转成草稿文本,支持多种语音识别后端,可选经 dsh 自有 LLM 路由润色,并带原生设置页。
ppy-web/dsh-plugin-xiaomi-mimo-tts★ 18
为 DSH Web 添加 Xiaomi MiMo 语音朗读,支持助手消息朗读、PCM 流式播放、预置与自定义音色、浏览器语音兜底、播放控制和可选 UI 音效。
PerryLink/dsh-talk★ 17
DeepSeek Harness 的语音输入输出:麦克风语音转文字与文字转语音。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。