DSH 专属语音输入插件:点按或按住 Alt 说话、松开/再点按转文字,结果追加到输入框草稿末尾不覆盖已输入内容。
48.5/100
综合分
35
GitHub 星标
1,531
npm 周下载
—/5
用户评分
数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-voice-scribenpm 源 · dsh-voice-scribe 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-voice-scribe @ 0.5.4
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 09:06:00
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 18 处,展示前 18 条)
- 发起网络请求lib/client.js:95
const res = await fetch(API_PREFIX, { - 读取本地文件lib/host-utils.js:40
const parsed = JSON.parse(readFileSync(settingsPath(), "utf8")); - 写入本地文件lib/host-utils.js:49
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件lib/host-utils.js:54
writeFileSync(temporary, JSON.stringify(settings, null, 2), { encoding: "utf8", mode: 0o600, flag: "wx" }); - 写入本地文件lib/host-utils.js:55
renameSync(temporary, file); - 删除本地文件lib/host-utils.js:57
try { unlinkSync(temporary); } catch { } - 读取本地文件lib/host-utils.js:536
const stat = statSync(file); - 读取本地文件lib/host-utils.js:542
const parsed = parseHotwords(oversized ? "" : readFileSync(file, "utf8")); - 发起网络请求lib/host-utils.js:697
const res = await runWithSignal(() => fetch(provider.url, { - 读取本地文件lib/local-asr.js:50
const [ms, ts] = await Promise.all([stat(model), stat(tokens)]); - 读取本地文件lib/local-asr.js:100
const info = await stat(path); - 发起网络请求lib/local-asr.js:123
const res = await fetch(url, { signal: AbortSignal.timeout(600_000), headers: { "accept-encoding": "identity" } }); - 写入本地文件lib/local-asr.js:134
file = createWriteStream(part); - 写入本地文件lib/local-asr.js:180
await rename(part, target); - 删除本地文件lib/local-asr.js:196
await unlink(part).catch(() => {}); - 读取本地文件lib/local-asr.js:210
entries = await readdir(dir); - 删除本地文件lib/local-asr.js:217
await unlink(join(dir, entry)); - 写入本地文件lib/local-asr.js:260
await mkdir(dir, { recursive: true });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-llm@deepseek-ai/dsh-web-app给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 按Alt语音输入
- 转文字追加草稿末尾
- 可选ASR与润色
DSH 语音输入插件:按 Alt 说话,文字直接进输入框。默认用 Web Speech,零配置,可选 OpenAI 兼容 ASR,还能用 DSH LLM 润色。
最近更新
在 GitHub 查看全部 →v0.5.42026-10-24
· dsh-voice-scribe v0.5.4
修复语音输入的尾句丢失、取消竞态、凭据边界和模型完整性问题,并限制热词及推理排队资源。
· Web Speech 保留已完成句子与未完成尾句,预览尊重用户手输草稿;空润色回退原文字。
· 切换引擎、重复停止、取消/报错 watchdog、旧识别事件、插件卸载和异步上传清理统一处理,避免麦克风残留或旧结果提交。
· 上传断开不再悬挂;云端与润色限制响应/输出并覆盖完整请求的取消;严查 Host、URL、JSON 类型、base64 和 PCM。
· 切换 ASR 地址不沿用其他端点的 key;错误和日志不回显凭据;服务端设置原子写入。
· SenseVoice 固定上游 revision,下载校验精确大小与 SHA-256;镜像错误体取消,已缓存文件按准确尺寸判断。识别器按目录隔离,最多 4 个运行/排队任务。
· 全部热词规则在可终止 worker 执行,限制 2 秒、64 MiB V8 老生代、最多 4 并发与 1 Mi 字符输出;保留原正则语法,超限/失败保留原始转写。
· 发布 tag/版本/提交校验更严格;同一 tarball 用于发布及 GitHub 资产,重复发布冲突需核对完整性值。
验证:原有 204 项检查通过,新增 58 项行为回归;Windows 本地 261 通过 / 1 项 POSIX 权限检查跳过 / 0 失败。GitHub CI 的 Linux Node 18/20/22/24 与 Windows Node 24 全绿;lint、security、npm audit(零漏洞)及独立安装包 smoke 通过。
升级边界:host peer 范围不变,仍使用 webStartup。与固定尺寸不符的旧模型需重新下载。已开始的原生推理无法强制停止,取消后会抑制结果。未运行真实麦克风、完整 DSH 宿主或原生 SenseVoice 推理;本轮测试采用行为桩与 mock。
详见 检查与后续优化、CHANGELOG、修复 PR #9。
安装:dsh plugin --profile web add dsh-voice-scribe,或通过官方 Plugins 面板安装后重启宿主。
发布产物:dsh-voice-scribe-0.5.4.tgz,96,796 B。
SHA-256:07f066924077d14919d6489811beedff33f46992a5b01c3eaa223e68d9cf5474。
v0.5.32026-10-21
DSH 0.2.1 起 host 端永久 pending,语音输入整条链路不可用。
· 根因
DSH 0.2.1-rc.1 删除了 webRuntime 服务 —— dsh-web-app 现在提供的是 webApp(只有 getAdvertisedUrl),不再有任何服务携带 trustedHosts。cordis 的 inject 是硬门禁,服务永不到场,插件 host 半就永远停在:
voice-scribe (dsh-voice-scribe): pending (waiting for service: webRuntime)
于是 apply() 不执行、/voice-input 不注册(POST 405 / GET 404),前端 local-status 拿不到结果,设置页把磁盘上已经完整存在的模型显示成「未下载」。
· 修复
改用 webStartup(@deepseek-ai/dsh-web-app/startup 提供,trustedHosts 同名同义)。该服务从 0.1.0-rc.6(本包声明的最低支持版本)一路到 0.2.1-rc.2 都在,整个支持区间一次覆盖,不需要按版本分支。
· 需要注意
· peer 门禁抓不到这一类问题:0.2.1-rc.1 删服务时,dsh-app-boot 的 semver.satisfies() 仍判定 SAT(范围是 >= 开区间,包名没换),所以插件是「通过门禁后静默卡死」,而不是被明确拒绝。能暴露它的只有 inject 里的服务名本身 —— 本版因此补了名字断言。
· 非 loopback 访问的信任语义变紧(已知且有意):webStartup.trustedHosts 只含显式的 --trusted-host 值(旧的 webRuntime.trustedHosts 是 [...局域网地址, ...--trusted-host])。本机 127.0.0.1 走 loopback 短路,不受影响;靠局域网 IP 访问 DSH 的用户需要显式传 --trusted-host,这与上游 0.2.1 自身的模型一致。
· 兼容性
· 逐版本核对 @deepseek-ai/dsh-web-app:webRuntime 在 0.1.0-rc.6 / 0.1.7-rc.2 / 0.2.0-rc.1 存在,0.2.1-rc.1 起删除;webStartup 自 0.1.0-rc.6 起全程存在。
· webServer 服务名、register({ kind: "prefix" }) 路由接口、webStartup.trustedHosts 字段在 0.2.1-rc.2 均未变,因此本次只改服务依赖,无其他功能性改动。peer 范围未动。
· 测试
202 → 204,新增两条针对这一类失效的回归:
· 「被移除的 webRuntime 不得出现在 inject 或 apply() 里」(源码断言,挡住改回去);
· 「宿主只提供 webStartup 时 apply() 仍能挂载 /voice-input」(行为级:真跑 apply(),喂一个没有 webRuntime 的假 ctx,断言路由注册成功且信任栅栏仍按新名单拒绝 403)。
同时修正了 peer 派生测试里一条已被现实证伪的注释(原文声称 peer 范围能挡住「提供方改名」,实际挡不住)。
感谢 MiHjy12138 的详细复现与根因分析。
npm:
· 贡献归属补记(2026-10-30)
· @MiHjy12138:报告并复现 DSH 0.2.1 的 host pending 问题,提供服务名变更诊断与修复建议,见 Issue #8。
感谢上述复现与诊断贡献。本次补记明确账号、贡献角色和来源,保留原有发行说明。
v0.5.12026-09-30
DSH 0.2.0 兼容收尾:一个客户端生命周期缺陷 + 宿主 peer 声明
· 修了什么
· 「语音输入」设置页在客户端半被重新加载后会静默消失(DSH 0.2.0 起可复现):语言字典的 disposer 被丢掉,而字典存在长活的 locale 服务里 —— 于是第二次 apply() 必然抛 locale namespace "settings.voiceScribe" already has locale "zh",被插件自己的兜底 catch 吞成一句控制台警告,设置页消失到整页刷新为止。DSH 在客户端 bundle 或客户端图变化时会卸载并重新 apply 客户端插件(dsh-client-hmr 推 rebuilt / graph 帧,插件管理器禁用→启用同理),所以在运行中的应用上覆盖安装一个新版本就会踩到。现在 disposer 交回调用方 fiber(与官方 dsh-client-ui-conversation 的写法一致)。
· 声明
· 补上插件实际绑定的两个宿主服务 peer:@deepseek-ai/dsh-host-webserver(提供 webServer)与 @deepseek-ai/dsh-web-app(提供 webRuntime),与既有的 @deepseek-ai/dsh-llm 一样标 optional 并共用同一范围。此前只声明 dsh-llm,这两个服务一旦改名/迁移,插件会被静默 park(工具与界面消失且没有兼容提示);现在会得到明确的兼容拒绝信息。
· peer 范围补上 0.1.7-alpha 与 0.2.0-rc 两条发行线(semver 的预发布规则要求逐条列出元组,否则该线宿主会一直收到 unmet-peer 告警)。
· 客户端头部注释里残留的改名路径 /plugins/dsh-voice-input/client.js 改为现名。
· 验证
· 目标宿主 DSH 0.2.0-rc.2(桌面版运行时;npm latest / next 同版本,已无更新的可测):
- peer 门禁用宿主自带的 semver 7.8.5 实测 SAT(^0.1.0-rc.7 / ~0.1.0-rc.6 仍 UNSAT,印证「跨版本线必须用 >= 开区间并列」);
- 宿主端 webServer / webRuntime / llm 三个服务名、register({ kind: "prefix" }) 路由、ctx.webRuntime.trustedHosts、prepareCall 与流式 text-delta / finish.reason 全部不变(0.2.0 新增的 callConfigEquals 硬校验放行本插件的 { ...prepared.config, … } 调用形态);
- 客户端 slots / locale 服务名、conversation.input.right 的 useInput + inputActions、settings.section 的 label thunk、[data-composer-card] + Lexical contenteditable 与 inputActions.setDraft 均未变 —— 0.1.x → 0.2.0 无需功能性改动。
· 测试 201 → 202:新增「客户端半重载后设置页仍在」的行为测试(用最小 cordis 桩如实建模 ctx.effect 同步抛错、slots.* 清理挂调用方 fiber、locale.register 只靠 disposer 释放),已验证该测试在 0.5.0 代码上必红。peer 范围的派生断言改为逐个核对每一个声明的 peer,并按 registry 重读已发布版本表。
· release gate(tests + lint + security)在 CI 上全绿,本包带 provenance 签名(Trusted Publishing / OIDC)。
· 安装
dsh plugin --profile add dsh-voice-scribe@0.5.1
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-voice-scribe
dsh.so risk
dsh.so install
Listed in awesome-dsh-plugin
DSH 专属语音输入插件:点按或按住 Alt 说话、松开/再点按转文字,结果追加到输入框草稿末尾(不覆盖已输入内容)。
Voice input for DeepSeek Harness: tap or hold Alt to talk, get text in the composer.
⚠️ 非官方插件,与 DeepSeek / 深度求索公司无关联。使用前请阅读 SECURITY.md。
安装 Install
官方插件面板(推荐):dsh 侧边栏 → Plugins → 安装,填入下面任一种 spec——插件管理器同时支持 npm 包名与 GitHub 地址:
dsh-voice-scribe # npm 包名 github:PensiveFei/dsh-voice-scribe # 直接从 GitHub 仓库装(会先做一次 git ls-remote 预检)
命令行:
dsh plugin --profile web add dsh-voice-scribe # 重启 dsh web 后生效
展开完整文档(README 剩余 1 节)
dsh-voice-scribe
dsh.so risk
dsh.so install
Listed in awesome-dsh-plugin
DSH 专属语音输入插件:点按或按住 Alt 说话、松开/再点按转文字,结果追加到输入框草稿末尾(不覆盖已输入内容)。
Voice input for DeepSeek Harness: tap or hold Alt to talk, get text in the composer.
⚠️ 非官方插件,与 DeepSeek / 深度求索公司无关联。使用前请阅读 SECURITY.md。
安装 Install
官方插件面板(推荐):dsh 侧边栏 → Plugins → 安装,填入下面任一种 spec——插件管理器同时支持 npm 包名与 GitHub 地址:
dsh-voice-scribe # npm 包名 github:PensiveFei/dsh-voice-scribe # 直接从 GitHub 仓库装(会先做一次 git ls-remote 预检)
命令行:
dsh plugin --profile web add dsh-voice-scribe # 重启 dsh web 后生效
桌面端(Electron)跑的是与 web 同一套宿主与插件体系(@deepseek-ai/dsh-desktop-host 依赖 dsh-app-boot / dsh-host-webserver / dsh-home-paths),同一个插件包两端通用。
使用 Usage
- 麦克风按钮:输入框右侧 🎤 图标,点击开始说话、再点停止并转写(按钮录音中变红)
- 热键:点输入框 → 按 Alt 开始说话 → 再按 Alt 结束并转写(备选 Alt+空格;设置 → 语音输入 → 热键可选「自定义」,录制任意组合键,如 Ctrl+Shift+V、F9、Alt+Space)
- 按住说话:设置 → 语音输入 → 触发方式 可选「按住说话」——按住热键录音、松开自动转写(麦克风按钮同样支持);自定义组合键在按住模式下同样生效(松开组合键中的任意一键即结束)
- 实时中间结果:说话时识别文本实时出现在草稿里(浏览器引擎逐字、本地引擎每 3 秒刷新),停止后替换为最终结果
- 录音电平指示:录音中状态条下方显示实时电平条
- 麦克风设备:设置 → 语音输入 → 麦克风设备 可指定用哪一路输入,录音中状态条会显示实际生效的设备名(见下文「麦克风设备」)
- 最长录音时长:本地引擎约 4 分钟、云端 10 分钟,到时长自动停止并转写
- 切窗取消:录音中切到其他窗口自动取消本次录音(Alt+Tab 误触不会留下录音)
识别引擎 Engine(默认「自动」,零配置)
| 引擎 | 说明 |
| 自动(默认) | 本地离线识别优先;不可用时自动回退浏览器识别 |
| 本地离线识别 | SenseVoice,零配置零 key、音频不出本机;首次使用自动下载模型(约 230MB,国内镜像,只需一次) |
| 浏览器 Web Speech | 零配置;依赖 Google/Microsoft 服务(国内 / Edge Stable 可能不可用) |
| 云端 ASR(可选) | 服务链:可配置多个 OpenAI 兼容端点按序尝试、失败自动切换;需在设置中配置 API key |
浏览器识别依赖外部语音服务(Chrome 在大陆被墙、Edge Stable 有已知回归),故默认以本地识别为主。
云端 ASR 服务链示例:Groq(免费层)→ 硅基流动 SenseVoice → 阿里云百炼,任一失败自动尝试下一个(设置 → 语音输入 → 云端 ASR)。
识别语言 Languages
支持 中文 / English / 粤语 / 日本語 / 한국어(设置 → 语音输入 可选)。本地离线识别自动检测语言;所选语言作用于浏览器与云端识别。
麦克风设备 Microphone
getUserMedia({ audio: true }) 的「默认设备」由浏览器决定,不等于 Windows 的默认设备:Chrome 优先用站点在 chrome://settings/content/microphone 里的选择,没有选择时按它自己 profile 里的设备排序——而排序第一名可能是纯静音的虚拟设备(典型:装过 Steam 之后的 Steam Streaming Microphone)。症状极具误导性:状态条显示「🎙 录音中…」、电平条不动、转写结果为空,看起来像插件坏了。
现在的行为:
- 设置 → 语音输入 → 麦克风设备:可选「系统默认(由浏览器决定)」或指定某一路输入(按浏览器持久化);指定后以 deviceId: { exact } 精确请求,不再交给浏览器解析;
- 录音中状态条会显示实际生效的设备名(取自 track.label),设置页也会显示「上次录音实际使用的是:…」——设备选错一眼可见;
- 转写为空时,若这一轮采集到的峰值 ≈0,提示会追加「输入电平≈0」,把「录到了静音」和「识别没听清」区分开;
- 选定的设备被拔掉/禁用后会自动回退到系统默认设备并在状态条说明,不会卡在 OverconstrainedError 上;
- 设置页只用 enumerateDevices(),不会为了列设备而打开麦克风(未授权时显示占位名,授权一次后显示真实名称),并跟随蓝牙设备上下线自动刷新列表。
该设置作用于插件自己的录音路径(本地离线识别 / 云端 ASR,以及麦克风按钮在这些引擎下的录音)。浏览器 Web Speech 由浏览器直接采集,插件无法指定其设备——那条路径请改用浏览器的站点麦克风设置,或切换到本地/云端引擎。
排查顺序:
1. 先看设置页里的「实际使用的设备」是不是你想用的那一路,不是就直接选;
2. Chrome 用户再看一眼 chrome://settings/content/microphone(站点级选择优先于系统默认);
3. Windows 还有按应用的设备策略:设置 → 隐私和安全性 → 麦克风 里给浏览器指定的设备优先于系统默认,且改系统默认无效,需要把该应用的选择清掉;
4. 电平条一动不动 + 提示「输入电平≈0」= 采集端本身就是静音(虚拟声卡、被静音的硬件、被独占占用),不是识别问题。
热词替换表 Hot Words(可选)
把识别错的人名、术语、项目名替换回来:编辑 $DSH_HOME/voice/hot.txt(每行一条,修改后下次转写生效):
字面替换(不区分大小写):正确词=错误词1|错误词2
DeepSeek=deep seek|迪普西克
王小明=王小铭
正则替换(标准 $1 语义;未写 flags 时默认全局替换,写 g/y 则按原样使用) /老\s师/老师/
/\{([^}]+)\}/【$1】/
/deep\sseek/DeepSeek/gi
设置 → 语音输入 页面会显示热词表状态(规则条数 / 文件路径 / 解析错误)。云端与本地离线引擎的转写结果统一应用。
0.5.4 起,服务端热词处理在可终止工作线程中执行,保留现有正则与替换语法;预算为 2 秒、64 MiB V8 老生代、最多 4 个并发和 1 Mi 字符输出。超时、取消或异常时保留原始转写,警告只包含原因代码。直接导出的同步工具函数供可信程序调用,API 路由使用有预算的异步入口。
自定义润色提示词(可选)
设置 → 语音输入 → 开启润色后:
- 润色模型:下拉选择复用的 DSH 模型(选项来自 DSH 已配置的 provider,首次开启自动选中第一个)
- 润色提示词:可自定义(多行,保存在服务端);留空或「恢复默认」使用内置的最小必要修正提示词
润色时会先做一步本地规则预润色(去「嗯/呃」等口头禅、折叠多余空格),再把更短更干净的文本交给 LLM,省 token;LLM 失败时仍保留原始转写。
隐私 Privacy
本地引擎音频不出本机;Web Speech 由浏览器语音服务处理;云端 ASR 的 key 只存服务端。
切换云端端点时需要重新确认该端点的 key,旧端点凭据不会被自动转发。
模型下载固定上游版本并校验大小及 SHA-256;已有缓存只做准确尺寸检查,避免状态轮询重复读取整个模型。
与预期大小不符的旧模型会要求重新下载。
与官方语音输入对比 Compare with the official voice input
DSH 从 0.1.7 起自带一个实验性的官方语音输入 —— @deepseek-ai/dsh-experimental-voice-input-bundle,同样使用本地 SenseVoice。它默认是关闭的,启用方式:
1. dsh 侧边栏 → Plugins → 打开 Voice Input(蓝色波形图标)
2. 按提示进入 bundle 详情 → Download and prepare 下载模型(会显示磁盘 / 内存 / 耗时预估,下载源可选 Automatic / Hugging Face / HF-Mirror)
3. 点模型选择器与发送键之间的 🎤 → 录音 → 点 Stop 把转写写进草稿
两者都用本地 SenseVoice、音频都不出本机,取舍如下(官方一列取自其 README 与 docs/subsystems/voice-input.md,截至 2026-09):
| | dsh-voice-scribe(本插件) | 官方 voice input(experimental) |
| 获取 | 第三方插件,Plugins 面板 / npm 安装 | 随 dsh 分发,默认关闭,Plugins 面板启用 |
| 识别引擎 | 本地 SenseVoice 离线默认 + 浏览器 Web Speech 回退 + 云端服务链(多 provider 故障切换) | 本地 SenseVoice;云端识别需自行注册 provider 与凭据 |
| 触发方式 | Alt 热键(可自定义任意组合键)/ 按住说话 / 🎤 按钮 | 🎤 按钮 → 录音工具条 → 点 Stop |
| 实时上屏 | ✅ 边说边出(浏览器引擎逐字、本地引擎每 3 秒) | ❌ 官方列为未做(no streaming captions) |
| 热词 / 规则替换 | ✅ hot.txt(字面 + 正则,默认全量替换) | ❌ |
| 润色 | ✅ 复用 DSH 模型 + 本地规则预润色(省 token) | ❌ |
| 语言 | 中文 / English / 粤语 / 日本語 / 한국어 可切换 | 取决于服务商声明的 languages |
| 设备与诊断 | 设备选择器 + 录音中显示实际设备名 + 电平峰值归因 | 工具条内有电平;未见设备选择 |
| 模型准备体验 | 首次使用后台下载 + 进度轮询 | 步骤清单 + 磁盘/内存/耗时预估 + 下载源可选 |
| 音频去向 | 本地引擎不出本机;云端走你自己配置的端点 | 本地=Host 机器(官方注明可能与浏览器不是同一台) |
怎么选:只要「点一下说话、点一下停」并希望官方原生集成 → 用官方;需要热键 / 按住说话、边说边上屏、热词纠正、AI 润色、云端多服务商故障切换、自定义组合键 → 用本插件。
两者可以并存:官方插件用它自己的 🎤 按钮,本插件用 Alt 热键和另一个 🎤 按钮(悬停提示会写明是哪个),互不冲突。在 0.2.0-rc.2 上逐项核对过:两者占不同插槽(官方 conversation.input.activity,本插件 conversation.input.right)、不同 locale 命名空间(voice-input vs settings.voiceScribe)、路由前缀也不重叠(官方走 speech/* API remotes,本插件的 /voice-input 无人占用),且官方那套没有全局热键。同时启用时输入框会出现两个麦克风按钮,SenseVoice 模型也会各存一份(官方 ~/.dsh/speech-to-text/sensevoice,本插件 ~/.dsh/voice/sensevoice)。
已知限制 Known limitations
- 输入框里含 @ 引用芯片(如 @文件)时,插件目前通过「整段替换草稿」写入,会把芯片展开成纯文本;先发送或清空草稿再听写可避免。(DSH 0.1.7 起新增了可按选区插入、不覆盖引用芯片的 insertText(span) 接口,适配已记入待办。)
- 浏览器 Web Speech 依赖外部语音服务,国内网络下通常需要改用本地离线或云端引擎。
兼容性 Compatibility
- 需要 DSH 0.1.0-rc.6 及以上;peer 范围显式列出每条已发布的预发布线(0.1.1-rc / 0.1.2-alpha / 0.1.3-alpha / 0.1.5-alpha / 0.1.6-alpha / 0.1.7-alpha / 0.2.0-rc),semver 的预发布规则要求逐条列出元组,否则该线宿主会一直收到 unmet-peer 告警。
- 声明了三个宿主 peer(@deepseek-ai/dsh-llm / @deepseek-ai/dsh-host-webserver / @deepseek-ai/dsh-web-app,三者共用同一范围且都标 optional):它们分别是 llm、webServer、webStartup 三个服务的提供方。DSH 0.2.0 起 dsh-app-boot 会用 semver.satisfies(runtime, range, { includePrerelease: true }) 逐个核对 peer,任一不匹配就整包拒绝加载;把这三个声明出来,包本身超出范围时你会拿到明确的兼容拒绝信息,而不是插件静默失效。但要注意:这道检查只核对包的版本范围,看不到包里某个服务被改名或移除 —— DSH 0.2.1-rc.1 删掉 webRuntime 时 peer 范围依然满足,插件于是静默卡在 pending(issue #8);本版起改为依赖 webStartup。optional 只挡安装器(不会把一份并行核心树拖进你的配置档),不影响这道检查。
- 输入框插槽 conversation.input.right 在 DSH 0.1.2 起由 改为 Lexical contenteditable:0.4.8 起两种形态都支持(读取实时草稿走 useInput,写入走 inputActions.setDraft)。
- 界面没有麦克风按钮(旧壳子没有该插槽)时,Alt 热键仍然可用。
- 桌面端:官方桌面应用是 Electron 外壳,跑的是与 web 同一套宿主与插件体系(@deepseek-ai/dsh-desktop-host 依赖 dsh-app-boot / dsh-host-webserver / dsh-home-paths / dsh-client-connection),同一个插件包两端通用。
- 0.1.7-rc.2 核对:inputActions.setDraft() 与 useInput(s => s.draft) 均未变化,插件不受影响;同版本新增 captureInsertion() / insertText(text, span)(按选区插入、一步可撤销、不覆盖引用芯片),适配排期见仓库待办。
- 实测核对:0.4.10 逐文件对照了 DSH 0.1.5-rc.1 与 0.1.2-rc.1 —— 宿主端 dsh-host-webserver 两份字节一致,webServer / webRuntime / llm 三个服务与 ctx.llm.prepareCall / 流式 text-delta / finish.reason 均无变化;客户端 dsh-client-modules / dsh-client-ui-renderer / dsh-client-locale / dsh-client-ui-settings 四份字节一致,插槽注册、setDraft、useInput(s => s.draft)、[data-composer-card] + contenteditable 的 DOM 形态全部不变。
- 0.2.0-rc.2 核对(0.5.1):桌面版运行时与 npm latest / next 同为 0.2.0-rc.2。peer 门禁用宿主自带 semver 7.8.5 实测 SAT;宿主端 webServer / webRuntime / llm 三个服务名、register({ kind: "prefix" }) 路由、ctx.webRuntime.trustedHosts、prepareCall 与流式 text-delta / finish.reason 全部不变(0.2.0 新增的 callConfigEquals 硬校验放行本插件的 { ...prepared.config, … } 调用形态);客户端 slots / locale 服务名、conversation.input.right 的 useInput + inputActions、settings.section 的 label thunk、[data-composer-card] + Lexical contenteditable 与 inputActions.setDraft 均未变——0.1.x → 0.2.0 无需功能性改动。
- 重载语义(0.5.1 修复):DSH 在客户端 bundle 或客户端图变化时会卸载并重新 apply 客户端插件(dsh-client-hmr 的 rebuilt / graph 帧;插件管理器禁用→启用同理),所以插件必须把注册到长活服务上的东西(如 locale 命名空间)的 disposer 交回自己的 fiber,否则第二次 apply 会抛错、被兜底 catch 吞掉。
开发 Dev
0.5.4 的问题、修复、验证边界和后续优化见 代码检查记录。
npm test # 测试
npm run lint # 语法检查
npm run security # 密钥/路径泄露扫描
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
PensiveFei/dsh-voice-scribe
DSH 专属语音输入插件:点按或按住 Alt 说话、松开/再点按转文字,结果追加到输入框草稿末尾不覆盖已输入内容。
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,173已汉化DeepSeek 客户端
74.4
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,197已汉化DSH
71.7
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,308已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,897已汉化DSH
71.2