一键朗读最新回复,拖拽选起点并调节音量
28.3/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/11 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/jianghu-lao-yao/sh-volume-knob.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 39 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 5 处,展示前 5 条)
- 发起网络请求lib/client.js:74
fetch('/sh-volume-knob/diag', { - 发起网络请求lib/client.js:1020
const res = await fetch(TTS_STATUS, { cache: 'no-store' }) - 发起网络请求lib/client.js:1032
const res = await fetch(TTS_SPEAK, { - 发起网络请求lib/client.js:1230
const res = await fetch(ROUTE, { cache: 'no-store' }) - 发起网络请求lib/client.js:1244
const res = await fetch(ROUTE, {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 朗读最新回复
- 拖拽选择起点
- 调节音量
朗读智能体最新回复,并在 DSH 输入框调节音量。
README
由 DeepSeek 最新模型翻译生成sh-volume-knob
朗读 + 音量,一个按钮。从你最新那条提问的开头开始朗读。· Read aloud from the start of your newest question — one button. 作者 / by 江湖老妖
DeepSeek Harness Web GUI 的输入框工具行里、话筒按钮右边的一个扬声器按钮:
- 单击 → 页面自动翻动到朗读起点(默认=你最新那条提问的第一个字),在起点闪烁一根光标,然后从那里一直读到最新回复结尾;再单击停止,光标同时消失。
- 按住并向右拖拽 → 在页面上挑朗读起点:光标跟着鼠标走,旁边给出提示(第几字 + 预览);松手即定,提示消失,再单击就从这里开始读。
- 按住并向上拖拽 → 调出竖式音量混音台:页内音量 + 系统音量,各自可静音。
- 点击页面任何其他地方 / Esc → 收起混音台 / 取消挑选。
展开完整文档(README 剩余 1 节)
sh-volume-knob
朗读 + 音量,一个按钮。从你最新那条提问的开头开始朗读。· Read aloud from the start of your newest question — one button. 作者 / by 江湖老妖
DeepSeek Harness Web GUI 的输入框工具行里、话筒按钮右边的一个扬声器按钮:
- 单击 → 页面自动翻动到朗读起点(默认=你最新那条提问的第一个字),在起点闪烁一根光标,然后从那里一直读到最新回复结尾;再单击停止,光标同时消失。
- 按住并向右拖拽 → 在页面上挑朗读起点:光标跟着鼠标走,旁边给出提示(第几字 + 预览);松手即定,提示消失,再单击就从这里开始读。
- 按住并向上拖拽 → 调出竖式音量混音台:页内音量 + 系统音量,各自可静音。
- 点击页面任何其他地方 / Esc → 收起混音台 / 取消挑选。
[ 话筒 ] [ 🔊 ] ← order 30 / 40 in the composer tool row
安装
从 npm 安装(推荐)
dsh plugin --profile web add sh-volume-knob
也可以直接从 GitHub 装(等价,取的是仓库源码):
dsh plugin --profile web add github:jianghu-lao-yao/sh-volume-knob
收录进社区列表后,还能在 dsh-market(设置 → 插件市场)里搜到并一键安装。
装完重启一次 dsh web(插件在启动时组入 boot graph),然后刷新页面。
交互
| 手势 | 行为 |
| 单击图标 | 翻到起点、闪烁光标、从起点朗读;再单击 → 停止 |
| 按住并向右拖拽(≥16px) | 进入挑起点模式:光标跟手,显示提示;松手定下起点 |
| 按住并向上拖拽(≥18px) | 调出音量混音台(从图标上方弹出) |
| 点击其他地方 / Esc | 收起混音台 / 取消挑选 |
| 长按不拖(>400ms) | 不朗读(防误触) |
| 混音台开着时单击图标 | 只收起混音台 |
| Enter / Space | 朗读 / 停止 |
| Alt + ↑ | 开关混音台 |
| ← / → | 光标左右移 1 字(挑选模式下同样可微调) |
| Shift + ← / → | 光标左右移 20 字 |
朗读中图标变蓝并多一道声波弧;页内静音时图标变红带斜线。挑选起点时光标变琥珀色,朗读时光标是主题色。
朗读起点
- 默认起点:你最新那条提问的第一个字。单击即翻到那里,并在那里闪一根光标,读的顺序是「这条提问 → 之后的助手回复(含最新那条)」。
- 自定义起点:按住图标向右拖,把鼠标移到想开始读的文字上松手。光标会吸附到最近的可读字符上,越界(拖到空白/代码块外面的糊边上)会夹到最近的可读位置。
- 起点按会话记录保存(localStorage),刷新页面后仍在;出现新回复时自动回到「最新提问开头」。
- 光标只是标记,不是 MD 编辑器里的选区:它不会选中文字、不影响复制。
两个音量有什么区别
| 推子 | 管什么 | 不管什么 |
| 页内音量 | 本标签页里所有 / 元素的 volume:语音朗读、提示音、网页播放器 | 系统音量、其他 App、其他标签页 |
| 系统音量 | 系统输出音量与静音(macOS osascript,Linux pactl) | 单个页面的元素音量上限 |
两者串联:系统音量是天花板。系统静音时页内开满也没声;页内拉到 0 只静这一页。
朗读实现
- 文本来源是白名单,不是黑名单。真实 DSH DOM 里每个消息节点都带 [data-chat-flow],用 data-chat-flow-kind 标明类型;实测(dsh 0.1.7-rc.1)出现过这 5 种:
| kind | 内容 | 是否朗读 |
| user | 你的提问 | ✅ 默认起点就是最新这条的第一个字 |
| assistant-step | 回复正文(data-chat-group-part="response") | ✅ |
| assistant-step | 思考过程(data-chat-group-part="reasoning") | ❌ 模型草稿,不念 |
| turn-process | 「已完成工作 用时 4 秒」折叠头 | ❌ |
| turn-tail | 用量 301K tok 02:00 | ❌ |
| tool-call | 工具调用卡片 | ❌ |
所有节点都是平铺的兄弟节点(没有嵌套),所以按文档顺序拼接即可。
- 阅读范围:从起点字符起,沿「可读节点序列」一直读到末尾;更早的轮次不读。
- 每个字符都有对应的 DOM 位置:插件把节点按 innerText 语义打平成文本串,同时记录「第 n 个字落在哪个文本节点的第几个字符」,所以光标、翻页、按字符微调都精确到字;节点内部的按钮(复制/重试)不计入。
- 合成:按 ~220 字切句块,逐块 POST /dsh-tts/speak(复用 dsh-tts 已配置的 provider 链,例如 Edge zh-CN-XiaoxiaoNeural),顺序播放;未安装 dsh-tts 或某个分块合成失败时,剩下的部分回退浏览器 speechSynthesis(不会从头重念)。
- 点按钮时会先暂停页面上正在播放的音频,所以和 dsh-tts 的自动朗读(speakReplies)不会重叠。
0.6.0 在这里翻过车:它按 data-chat-flow-kind="assistant" 找回复(真实值其实是 assistant-step),又用「跳过 button/svg」的黑名单排除杂物,结果把 turn-tail 当成了起点——光标落在时间戳上。0.7.0 换成白名单,并补了针对这一条的回归测试。
结构
package.json dsh.bundle.patch + dsh.client.platform=web
cordis.patch.yml bundle 层 lib/index.js host 半:GET/POST /sh-volume-knob/system、诊断 /sh-volume-knob/diag lib/client.js 浏览器半:slot 按钮 + 文本/光标定位 + 朗读器 + 竖式混音台(无需构建步骤) scripts/test.mjs jsdom 测试:把上面这个 bundle 原样跑在仿真会话 DOM 上
开发
npm install
npm test # 16 项:文本定位、光标、拖右挑选、朗读、回退、混音台
测试不引入 React,而是自带一个只实现 createElement + 四个 hook 的微型运行时,并用 jsdom 跑未改动的 lib/client.js;只有 jsdom 缺的东西(布局几何、音频、语音合成、宿主 HTTP 路由)是仿真的。
要求
- DSH >= 0.1.5-rc.3,Web GUI。适配按你要的通道顺序推进:正式版 → next → latest(alpha 版不在适配范围内)。
| 顺序 | 通道 | 现在这个 Tag 指向 | 状态 |
| 1 | 正式版(无后缀稳定版) | 还没有——npm 上 26 个版本全是 -rc/-alpha,GitHub 上 10 个 release 全标着 prerelease(deepseek-harness@0.0.1 只是占位包) | 出了即通过,插件无需改动 |
| 2 | next | 0.1.7-rc.1 | 已核对(本机 GUI 就是这一版) |
| 3 | latest | 0.1.5-rc.3 | 已核对 |
⚠️ latest 比 next 旧(0.1.5-rc.3 < 0.1.7-rc.1),所以通道顺序 ≠ 版本递增顺序。这正是 engines.dsh 必须写成下限式 >=0.1.5-rc.3 的原因:写成按「最新那版」收窄的范围(比如 >=0.1.7-rc.1)会把 latest 关在门外;写成 ^0.1.5 又会在 0.1.x 上永远不匹配 0.1.7-rc.1,把 next 也踢掉。
正式版发出来之后,位于版本号下方的通道一律被这个范围涵盖,不需要再动。
- 插件代码里没有任何按版本分支:window.__ModuleLoader__.load({id, factory})、ctx.slots.inject / ctx.slots.register、conversation.input.right 这些接口在 latest(0.1.5-rc.3) 与 next(0.1.7-rc.1) 上逐个比对过,签名一致。
⚠️ 但消息 DOM 的取值必须实测,不能只看接口名:0.6.0 就是栽在这里——它以为 kind 是 user/assistant,实际是 user/assistant-step/turn-process/turn-tail/tool-call。0.7.0 的取值是在真实页面上 dump 出来的(见下表)。
- 系统音量路由:macOS(osascript,内置)/ Linux(pactl)。其他平台该行置灰并显示原因。
- 可选:dsh-tts —— 没装也能用,只是回退到浏览器语音。
已知边界
- 页内音量是母音量,会覆盖插件自己设过的 element.volume;默认 100% 时行为不变。
- 浏览器 speechSynthesis 没有音量 API,只能在静音时 cancel()。
- 混音台路由只接受回环地址或同源请求,避免任意网页改你机器音量。
- 「起点」是按字符记的:如果回复在起点之后被重新渲染成不同的文字(例如流式输出还没结束),起点会按同一节点重新夹取;节点整个换掉时退回默认起点(最新提问开头)。
许可
MIT © 江湖老妖预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
jianghu-lao-yao/sh-volume-knob
一键朗读最新回复,拖拽选起点并调节音量
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1