DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
V

dsh-voice-scribe

Voice Scribe

Voice input plugin for DSH: tap or hold Alt to talk, then release or tap again to convert speech to text. Supports a hotword replacement list (hot.txt), custom polishing prompts, and a recording level indicator. Uses local offline recognition by default (SenseVoice; zero configuration, zero key, and

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:PensiveFei/dsh-voice-scribe#f23702958f760ac80a975aa8bf7257c922aaa358
READMECompatibilityVersions

Description

Voice input plugin for DSH: tap or hold Alt to talk, then release or tap again to convert speech to text. Supports a hotword replacement list (hot.txt), custom polishing prompts, and a recording level indicator. Uses local offline recognition by default (SenseVoice; zero configuration, zero key, and audio stays on the device), automatically falls back to browser Web Speech, and optionally supports cloud ASR and polishing (reusing DSH models). Voice input for DeepSeek Harness: tap or hold Alt to talk, get text in the composer — local SenseVoice by default, zero config, zero API key.

Compatibility and provenance

Voice Scribe is published as dsh-voice-scribe and currently resolves to version 0.5.4. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
10/24/2026

Versions

0.5.4stable
10/24/2026
0.5.3stable
10/21/2026
0.5.2stable
10/11/2026
Show 14 more versionsCollapse versions
0.5.1stable
9/30/2026
0.5.0stable
9/24/2026
0.4.10stable
9/15/2026
0.4.9stable
9/9/2026
0.4.7stable
9/4/2026
0.4.6stable
9/1/2026
0.4.4stable
9/1/2026
0.4.3stable
8/31/2026
0.4.2stable
8/30/2026
0.4.1stable
8/29/2026
0.4.0stable
8/28/2026
0.3.0stable
8/27/2026
0.2.0stable
8/26/2026
0.1.1stable
8/25/2026

Related plugins

Loading related plugins…

Latest
0.5.4
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 35
Weekly downloads
0
Last push
11/1/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in vision-media.

Experimental Voice Input Bundle@deepseek-ai/dsh-experimental-voice-input-bundleExperimental voice input with local SenseVoice; downloads its runtime on first useModlens@liustack/modlensPlug-in vision for text-only LLMs, powered by the free Antigravity CLIImage Gendsh-image-genBring ChatGPT-like image generation to DeepSeek Harness — Gemini, OpenAI, Seedream, DashScope, local ComfyUI & more.Ab Ocrdsh-ab-ocr--- description: "The out-of-tree ocr tool: recognizes a scanned PDF or image page by page, merges the pages in order only after the last one, and saves one Markdown document with the heading levels the model decided." kind: "package-reference" ---

README

dsh-voice-scribe

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\s*seek/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 / 粤语 / 日本語 / 한국어 可切换取决于 provider 声明的 languages
设备与诊断设备选择器 + 录音中显示实际设备名 + 电平峰值归因工具条内有电平;未见设备选择
模型准备体验首次使用后台下载 + 进度轮询步骤清单 + 磁盘/内存/耗时预估 + 下载源可选
音频去向本地引擎不出本机;云端走你自己配置的端点本地=Host 机器(官方注明可能与浏览器不是同一台)

怎么选:只要「点一下说话、点一下停」并希望官方原生集成 → 用官方;需要热键 / 按住说话、边说边上屏、热词纠正、AI 润色、云端多 provider 故障切换、自定义组合键 → 用本插件。

两者可以并存:官方插件用它自己的 🎤 按钮,本插件用 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 只挡安装器(不会把一份并行核心树拖进你的 profile),不影响这道检查。
  • 输入框插槽 conversation.input.right 在 DSH 0.1.2 起由 <textarea> 改为 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 形态全部不变。

开发 Dev

0.5.4 的问题、修复、验证边界和后续优化见 代码检查记录。

npm test          # 测试
npm run lint      # 语法检查
npm run security  # 密钥/路径泄露扫描

License

MIT

  • 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 吞掉。