Skip to content
dsh.fish
Bundle

dsh-voice-input-space

Voice input for DeepSeek Harness: hold Space in any editable field to speak, release to insert the transcript at the caret. Zero dependencies, browser Web Speech API. / 语音输入:在输入框长按空格键说话,松开自动上屏。零依赖,基于浏览器 Web Speech API。

Source
XSakura666
License
MIT
Updated
Updated 2 days ago

Readme

# dsh-voice-input-space

Voice input for DeepSeek Harness — hold **Space** in any editable field to speak, release to insert the transcript at the caret. Zero dependencies, powered by the browser's Web Speech API (Chrome / Edge).

语音输入插件:在输入框**长按空格键**说话,松开自动上屏。零依赖,基于浏览器 Web Speech API(Chrome / Edge)。

![voice panel](https://raw.githubusercontent.com/XSakura666/dsh-voice-input-space/main/assets/screenshot-panel.png)

## Features / 功能

- **Hold-to-talk**: long-press Space (≥ 450 ms) in the composer (or any text field) starts listening; a floating panel shows the live transcript; release inserts the final text at the caret. / 按住说话:在输入框(或任意文本框)长按空格键(≥450ms)开始聆听,悬浮面板实时显示转写,松开后文字插入光标处。
- **Esc / Cancel button** abandons the session without inserting. / Esc 或「取消」按钮放弃本次输入。
- **IME-safe**: space used to confirm Chinese IME candidates is never intercepted (`isComposing` guard); a quick tap still types a normal space. / 中文输入法安全:选词用的空格不会被拦截;轻点空格仍是普通空格。
- **Languages**: 普通话 / 繁體中文 / 粤语 / English / 日本語 / 한국어, switchable in Settings → General. / 支持六种语言,可在 设置 → 通用 切换。
- **Toggle**: enable/disable the hotkey from Settings → General. / 可在设置中一键停用。
- **Status chip** under the composer shows the current language and listening state. / 输入框下方状态条显示当前语言与聆听状态。

## Why this plugin / 为什么选它

Voice-input plugins already exist in the DSH ecosystem (e.g. SenseVoice-based offline transcription with a mic-button flow). This plugin targets a different trade-off — zero setup and hands-on-keyboard dictation:

语音输入插件社区里已有别的方案(如 SenseVoice 离线转写 + 麦克风按钮流程)。本插件选择了不同的取舍——零配置、手不离键盘:

| | dsh-voice-input-space(本插件) | SenseVoice-style plugins |
|---|---|---|
| Setup / 安装 | install + refresh — no model, no build / 即装即用,无模型无构建 | needs model download & transcription chain / 需下载模型与转写链路 |
| Interaction / 交互 | hold **Space** in the editor, release to insert / 长按空格,松开上屏 | click mic button → record → refill / 点按钮 → 录音 → 回填 |
| IME / 中文输入法 | never intercepts composition Space / 选词空格永不拦截 | — |
| Privacy / 隐私 | audio via browser speech service, not stored / 音频走浏览器语音服务,不落盘 | fully offline, audio never leaves the machine / 全离线,音频不出本机 |
| Dependencies / 依赖 | zero / 零依赖 | sherpa-onnx 等 |

Both approaches are valid: theirs for offline privacy, this one for instant use. 两种方案各有取舍:对方适合离线隐私场景,本插件适合即装即用。

## Install / 安装

```sh
dsh plugin --profile web add dsh-voice-input-space
```

Or from the plugin market (Settings → Plugins → Plugin Market) after the entry is listed. Then refresh the page.

或者等插件进入社区目录后,在 设置 → 插件 → 插件市场 中一键安装,然后刷新页面。

First use: the browser asks for **microphone permission** — click Allow in the address bar (127.0.0.1 is a secure context). / 首次使用浏览器会请求**麦克风权限**,在地址栏点击允许即可。

## Usage / 用法

1. Click into the input box. / 点击输入框。
2. Hold **Space** for about half a second. / 长按**空格键**约 0.5 秒。
3. Speak — the transcript appears live in the floating panel. / 说话,面板实时转写。
4. Release **Space** — the text lands at the cursor. / 松开空格,文字上屏。

## Uninstall / 卸载

```sh
dsh plugin --profile web remove dsh-voice-input-space
```

## Notes / 说明

- Speech recognition runs in the browser via the Web Speech API; on Chrome/Edge it uses the platform speech service (network access required). Audio is not stored. / 语音识别由浏览器 Web Speech API 完成,音频不会被保存。
- Without microphone permission the panel shows a persistent error until you release the key. / 未授权麦克风时,面板会持续显示错误提示直至松开按键。
- Dev aid: `window.__dshVoiceInput` exposes the plugin's state and counters for debugging. / 调试钩子:`window.__dshVoiceInput` 暴露状态与计数器。

## Development / 开发

```sh
# headless verification against a running dsh web (needs Edge):
node tools/verify-headless.cjs
```

## License

MIT

Install

dsh plugin --profile web add github:XSakura666/dsh-voice-input-space#9bb74b7e4ed8f3b4920a2c4d61a33fac2fd99a38

Profile: web

Source