DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Dictation Hotkey — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-dictation-hotkey

Dictation Hotkey

按键说话听写:按下组合键即可在 DSH 网页中录音,由 DSH 自有语音引擎转写,文本随后显示在编辑框中。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add dsh-dictation-hotkey@0.3.0
README兼容性版本

兼容性与来源证明

Dictation Hotkey 以 dsh-dictation-hotkey 发布,当前版本为 0.3.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/10/13

版本

0.3.0stable
2026/10/13
0.2.1stable
2026/10/11
0.2.0stable
2026/10/11

相关插件

正在加载相关插件…

最新版
0.3.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
53.3 kB
文件数
11
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 0
周下载
0
最近提交
2026/10/13
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 productivity-workflow 分类下经过校验的插件。

Acp App@deepseek-ai/dsh-acp-appdsh ACP 配置文件包:基于 dsh-base 的仅限自动化的 JSON-RPC stdio 和进程生命周期管理Experimental Schedule Bundle@deepseek-ai/dsh-experimental-schedule-bundle为 Web 组合添加 Schedule、其任务页面和时间上下文的可选捆绑包Ab Ocrdsh-ab-ocr--- description: "外部 ocr 工具:逐页识别扫描的 PDF 或图像,仅在处理完最后一页后按顺序合并页面,并使用模型确定的标题级别保存为一个 Markdown 文档。" kind: "package-reference" ---Deepseek Ipptdeepseek-ipptiPolloWork PPT Studio 及其精选幻灯片模板,作为原生 DeepSeek Harness 对话视图。

README

dsh-dictation-hotkey

Press-to-talk dictation for the DSH Web composer. Hold a key combination, speak, release — DSH's own speech engine transcribes it and the text lands in the composer.

The plugin adds no second recognizer: it drives the speech Remote that DSH already ships with its voice-input bundle (local SenseVoice, CPU) and inserts the result through the official composer actions.

hold Ctrl+Shift+Space ──▶ speak ──▶ release
        │
        ├─ microphone capture in the page (getUserMedia + AudioWorklet, muted output)
        ├─ encoded as the canonical 16 kHz mono PCM16 WAV the Remote requires
        ├─ ctx.remote.speech.transcribe()      ← official speech Remote (SenseVoice)
        └─ inputActions.insertText() / submit() ← official composer

What it does

  • Push to talk: hold (record while held) or toggle (press to start, press to stop) trigger modes.
  • Fill or send: insert the transcript for review, or submit it immediately.
  • Reuses DSH's engine: the same local SenseVoice provider the official microphone button uses — no extra process, model download, or cloud API.
  • Composer-native insertion: text is spliced into the live draft through inputActions.insertText, so the caret, references, and attachments survive.
  • Configurable per browser: hotkey, mode, send behaviour, beeps, and diagnostics live in a popover on the composer pill (localStorage).
  • Works on the new-conversation screen too: with no session open there is no composer draft to splice into, so the transcript is pasted into the focused composer as a normal edit, and the pill returns with the first session.
  • Diagnosable: optional per-keystroke log with audio level, audio length, and inference time, which separates "nothing was picked up" from "the recognizer missed it".

Requirements

  • DSH 0.2.0-rc.2 or a compatible release, Web profile.
  • The official voice input bundle enabled (plugin manager → 语音输入). It provides the speech engine; without it the pill reports that no recognizer is mounted.

Install

# from a checkout
dsh plugin --profile web add /path/to/dsh-dictation-hotkey

# or straight from git (no clone, no build: the bundle is committed)
dsh plugin --profile web add github:AndyYang12345/dsh-dictation-hotkey

Then reload the Web UI. The bundle is committed at client/dist/client.js, so a checkout works without a build step.

Updating later: dsh plugin --profile web add github:AndyYang12345/dsh-dictation-hotkey again and restart dsh web — a profile keeps its own copy of the installed package, so pushing to GitHub does not update an already-installed profile by itself.

Use

A 🎙 Dictation pill appears under the composer:

ActionResult
Hold Ctrl+Shift+Space, speak, releaseTranscript inserted into the composer
Click the pillSettings: hotkey (press the keys to capture), fill ↔ send, hold ↔ toggle, beeps, diagnostics

Releasing any key of the combination ends the recording, so there is no need to lift them together.

On the home screen (no session yet) the pill is absent — the composer dock only exists inside a session — but the hotkey still works: the controller stays armed through a root-scope seat and the transcript is pasted into the focused composer. Auto-send is skipped there, so sending stays your own keystroke.

Settings

Stored per browser under localStorage key dsh-dictation-hotkey.settings.

FieldDefaultMeaning
hotkeyCtrl+Shift+Space+-separated combination; Space, F9, Alt+~, letters and digits are understood
modeholdhold = record while held, toggle = press to start/stop
autoSendfalseSubmit the draft as soon as the transcript is inserted
beeptrueShort tones for start, stop, and failure
language(empty)Recognition language hint; empty follows the DSH speech settings
providerId(empty)Speech provider id; empty uses the deployment default
minRecordMs150Presses shorter than this are rejected with a visible notice
tailMs180Audio kept after release, so a fast release does not clip a syllable
maxRecordSeconds60Safety stop
debugfalseKeep the keystroke log

Diagnostics

Enable 诊断日志 in the popover; each keystroke then records a structured entry, mirrored to the DevTools console and kept as a 20-entry ring buffer in localStorage (dsh-dictation-hotkey.log, copy/clear buttons in the popover).

eventMeaning
startMicrophone ready — micStartMs, triggering keys heldCodes
stopReleased — heldMs, tailMs
okRecognized — audioSeconds, inferenceMs, chars, peakDb
empty-transcriptEngine returned nothing — carries peakDb; quiet: true means the recording itself was near-silent
skipRejected by a threshold: shorter than minRecordMs, empty audio, speech remote absent
transcribe-failed / mic-failed / insert-conflict / finish-threwCorresponding failure

peakDb > -45 with an empty transcript points at the recognizer (adjust language); peakDb < -45 means that take carried no usable sound.

Development

npm run build     # build client/dist/client.js (esbuild)
npm run verify    # contract check: the bundle only touches injected services
npm test          # behaviour suite: fake microphone + recognizer

verify.mjs exists because Cordis throws when a plugin reads a service it did not declare (cannot get property "slots" without inject) while the Web shell only prints web boot: 1 entry did not activate — a diagnostic dead end this plugin hit once, now a build-time check. test-release.mjs covers sloppy release order, double taps, sub-threshold presses, empty transcripts, and auto-send.

How it is wired

PieceWhere
Hotkey, microphone, WAV encoding, stateclient/src/{index,controller,hotkey,audio,settings,ui}.js
Composer seat (session-scoped)conversation.composer.dock slot
Session-less seatheadless component in the root-scope shell.overlay slot
Recognitionctx.remote.speech.transcribe — official speech Remote
Host halfhost/index.js, intentionally a no-op (apply() {})
Bundle layercordis.patch.yml inserts the plugin row

The host half deliberately has no @deepseek-ai/* import and no service access: a profile installs this package through a link, which resolves no dependencies for it, so a host-side import would abort activation with ERR_MODULE_NOT_FOUND and DSH would refuse to boot the Web GUI.

Limitations

  • Keys are handled while the DSH page is focused. A key pressed with another window in front never reaches the plugin; system-wide support needs an OS-level helper and is not implemented.
  • Microphone permission is granted for the DSH origin. The first ever use may require clicking the official microphone button once.
  • Recording is capped by maxRecordSeconds and by the Remote's own audio limits.

License

MIT © 2026 AndyYang12345