🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

语音播报增强 M0Yun/dsh-speak-plus

DeepSeek 客户端
M0Yun3 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

把回答和中间过程合并朗读,审批提问优先播报

30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/6 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/M0Yun/dsh-speak-plus.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/06·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 3 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 10 处,展示前 10 条)
  • 写入本地文件
    adapters/dsh/speech-hook.js:57
    try { fs.appendFileSync(LOG, `[${new Date().toISOString()}] ${args.join(' ')}\n`) } catch (e) { }
  • 读取本地文件
    adapters/dsh/speech-hook.js:71
    if (fs.existsSync(bundled)) return bundled
  • 读取本地文件
    adapters/dsh/speech-hook.js:275
    const stat = fs.statSync(file)
  • 读取本地文件
    adapters/dsh/speech-hook.js:279
    for (const line of fs.readFileSync(file, 'utf8').split(/ ? /)) {
  • 删除本地文件
    adapters/dsh/speech-hook.js:501
    function removeTemp(tmp) { try { fs.unlinkSync(tmp) } catch (e) { } }
  • 写入本地文件
    adapters/dsh/speech-hook.js:508
    try { fs.writeFileSync(tmp, item.text, 'utf8') } catch (e) { log('write temp failed:', e.message); return false }
  • 执行外部命令固定命令
    adapters/dsh/speech-hook.js:517
    child = spawn('/bin/bash', [cfg.engine].concat(args), { detached: true, stdio: 'ignore' })
  • 执行外部命令固定命令
    adapters/dsh/speech-hook.js:523
    child = spawn('powershell.exe', winArgs, { windowsHide: true, stdio: 'ignore' })
  • 发起网络请求
    client/client.js:242
    const response = await fetch(CONTROL_PATH, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) })
  • 发起网络请求
    client/client.js:449
    fetch(CONTROL_PATH, {
扫描于 2026/11/6(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

让 DSH 把回答念出来:中间过程合并朗读、审批/提问优先播报、新内容自动换手、Alt+S 停止(dsh-speak 1.8.4 增强分支)

README

由 DeepSeek 最新模型翻译生成
dsh-speak-plus 🔊 让 DeepSeek Harness 把回答念出来——而且中间过程也念,不是只念最后一句。 本仓库是 dsh-speak 1.8.4 的增强分支(MIT 许可)。 上游的朗读、队列、设置页、WebSocket 状态同步全部保留,另外补了五项能力。 所有新增行为默认关闭或取保守值,不配置时与上游一致。 英文文档见 README.en.md;上游完整中文文档见 docs/UPSTREAM-README.zh-CN.md。 为什么做这个分支 上游开启 queueAllMessages 后,每条 assistant 消息都会立刻独立入队朗读。但模型在工具调用之间往往只吐一两句话,于是听感是这样的: "收到——"(被切)/ "那就你自己重启。"(被切)/ "6 个场景全过。"(被切)/ … 本分支把连续到达的正文先攒成一段再念,并且规定了「什么时候该打断、什么时候不该」,让中间过程听得清、也不拖得太久。
展开完整文档(README 剩余 1 节)
dsh-speak-plus 🔊

让 DeepSeek Harness 把回答念出来——而且中间过程也念,不是只念最后一句。

本仓库是 dsh-speak 1.8.4 的增强分支(MIT 许可)。
上游的朗读、队列、设置页、WebSocket 状态同步全部保留,另外补了五项能力。
所有新增行为默认关闭或取保守值,不配置时与上游一致。

英文文档见 README.en.md;上游完整中文文档见 docs/UPSTREAM-README.zh-CN.md。

为什么做这个分支

上游开启 queueAllMessages 后,每条 assistant 消息都会立刻独立入队朗读。但模型在工具调用之间往往只吐一两句话,于是听感是这样的:

"收到——"(被切)/ "那就你自己重启。"(被切)/ "6 个场景全过。"(被切)/ …

本分支把连续到达的正文先攒成一段再念,并且规定了「什么时候该打断、什么时候不该」,让中间过程听得清、也不拖得太久。

功能

| 能力 | 上游 1.8.4 | 本分支 |
| 朗读最终回复 | ✅ | ✅ |
| 朗读中间过程 | 逐条、易被切碎 | 合并成段,按序读完 |
| 新内容打断当前朗读 | ❌ | ✅ 可配(默认等新回合出内容才换手) |
| 审批 / 提问优先 | ❌(会被正文顶掉) | ✅ 插队并保护 |
| 停止播报快捷键 | ❌ | ✅ Alt + S |
| 配置读取 | 依赖设置 schema | ✅ schema 不可用时回落读 profile 配置 |
| 队列 / 状态同步 / 设置页 / 手动重播 | ✅ | ✅ 全部保留 |

安装

插件以 DSH bundle 形式挂载,在 profile 的 cordis.patch.yml 中配置:

- id: dsh-speak
name: dsh-speak-plus
config:
queueAllMessages: true
interruptOnNewMessage: true
interimMode: queue
interimMergeMs: 800
interimMaxBacklog: 180
engine: 'C:\Users\<你>\.dsh\profiles\desktop\data\dsh-speak-edge\speak-edge.ps1' # 可选:自定义引擎 rate: 8

Windows 用系统 SAPI 嗓音(装了 NaturalVoiceSAPIAdapter 可用自然音色),macOS 用系统 say。
引擎脚本与上游一致(engine/speak.ps1、engine/speak.sh),也可以用 engine 指向自己的脚本。

配置项

新增(本分支)

| 键 | 默认 | 说明 |
| interruptOnNewMessage | false | 总开关:打开后启用本分支的打断 / 合并逻辑 |
| interruptOnNewTurn | false | false:提交消息不打断,等新回合真的产出内容才换手;true:按下发送就掐断 |
| interimMode | queue | queue:回合内各段排队读完、互不打断;replace:每段新内容立刻顶掉正在播的 |
| interimMergeMs | 800 | 静默多久把碎片合并成一段,0 = 不合并 |
| interimMaxBacklog | 180 | 待播正文最多积压多少字,超出丢弃最旧的 |

继承自上游(常用)

| 键 | 默认 | 说明 |
| enabled | true | 总开关,关掉后完全不出声 |
| automaticSpeech | true | 自动朗读;手动重播始终可用 |
| queueAllMessages | false | 每条 assistant 消息都入队(中间过程) |
| throttleMs | 1500 | 默认模式的合并延迟 |
| engine | 空 | 覆盖引擎脚本路径 |
| rate / volume | 0 / 50 | Windows 为 SAPI 刻度(-10~10) |
| maxChars | 安全值 | 超过则只念固定提示语 |
| longTextMode / longTextMessage | message | 超长文本的处理方式 |
| announceApprovals / announceQuestions | true | 审批 / 提问播报 |
| announceTurnEnd / announceCommandDone / announceGoalChange / announceToolErrors / announceTodoWrite | false | 可选事件播报 |

完整列表见上游文档。

快捷键

Alt + S —— 立刻停止播报,同时清空待播队列和还没播出的缓冲片段。

说明:DSH 核心的「快捷键」列表只列核心自己的动作,没有给插件预留注册入口,所以这个键位由插件自己监听,不会出现在那个列表里。输入框有焦点时同样生效。

行为说明

回合内的中间过程(interimMode: queue):

1. 片段按 interimMergeMs 合并成一段,避免一句话被拆成几次播报
2. 段与段之间排队,前一段念完再念下一段,不互相打断
3. 待播积压超过 interimMaxBacklog 字时丢弃最旧的,保证不会越听越落后

换手规则:

- 你发消息时不掐断当前朗读
- 新回合第一段内容要播时,才掐掉上一轮还在念的正文
- 正在念审批 / 提问时,新正文排队等待,不抢占

配置兜底:某些 DSH 构建里插件无法加载设置 schema,此时会直接读本 profile 的 cordis.patch.yml(按修改时间缓存,只取已知键),与运行时配置合并,运行时优先。
挂载时会打一行 生效配置: … 便于排查。

已知限制

- 设置页依赖 Config schema;构建失败时设置页可能不显示,此时改 YAML 即可
- 新回合内容会掐掉其他会话正在播的正文(同一套扬声器),不区分来源
- 直接改 node_modules 里的插件文件会在重装 / 升级时被覆盖

目录

adapters/dsh/speech-hook.js 宿主端:事件 → 队列 → 引擎 client/client.js 浏览器端:设置页、消息按钮、Alt+S engine/ 朗读引擎(SAPI / macOS say) docs/LOCAL-CHANGES.zh-CN.md 本分支相对上游的改动清单 docs/UPSTREAM-README.zh-CN.md 上游完整文档

许可

MIT,继承上游 LICENSE,上游版权归 Alan2Z 所有。
预览分享卡片长什么样 ↓M0Yun/dsh-speak-plus
分享 · DeepSeek Harness Hub
M0Yun/dsh-speak-plus

把回答和中间过程合并朗读,审批提问优先播报

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部