Bundle
dsh-voice-kit
Voice input (Web Speech API) and read-aloud (speechSynthesis) for the DeepSeek Harness web GUI — DSH 语音输入 + 回复朗读套件
- Source
- aaaadrop
- stars
- 1 stars
- License
- MIT
- Updated
- Updated 13 days ago
Readme
# dsh-voice-kit 🎙️
Voice input and read-aloud for the [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) web GUI.
[中文说明](README.zh.md)
> **Status: v0.4.0, published on npm** — `pnpm typecheck` passes, 239 unit
> tests pass, `pnpm build` emits the ecosystem-standard closure-factory bundle
> (host half + browser half). Verified inside a real DSH Desktop profile.
> Install: `dsh plugin add dsh-voice-kit`.
## Features
- 🎤 **Voice input** — mic button in the composer's left rail; records and
transcribes **host-side**, appending the text to the draft (never clobbering
what you already typed). Two backends: the browser **Web Speech API**
(Chrome/Edge) or a **host-side OpenAI-compatible service** (e.g. SiliconFlow
SenseVoice). `Esc` cancels; stop anytime.
- 🔊 **Read aloud (three engines)** — a per-message button at each assistant
message tail:
- **Microsoft neural voices** (free; 晓晓/云希/云健/云扬…), synthesized
host-side via `msedge-tts` and cached; connects through the system proxy
tunnel automatically on censored networks.
- **Cloud neural voices** (SiliconFlow CosyVoice2 and any OpenAI-compatible
`audio/speech`; direct from mainland China, no proxy needed) — reuses the
same credential you already set up for speech recognition.
- **System voices** — fully offline fallback; works everywhere.
- Markdown and emoji are stripped before speaking; long replies are
**streamed in sentence-boundary chunks** — the first chunk speaks within
~1s and later chunks download while it plays; only one voice at a time;
the playing message is scrolled into view with an on-screen bubble showing
what is being read; click again to stop instantly.
- ⚙️ **Settings** — a first-level section: voice engine (three choices), one-tap
cloud preset, voice, rate, pitch, recognition language, an engine
reachability probe (see at a glance whether Edge is reachable), and key status
(shows only "saved / not set", never the value).
## Quick Start (5 minutes)
### 1. Install
```bash
# from npm (recommended)
dsh plugin add dsh-voice-kit
# or from a local checkout
dsh plugin --profile desktop add link:/path/to/dsh-voice-kit
```
Restart DSH Desktop and refresh the web GUI.
### 2. Hear read-aloud (pick an engine)
Open **Settings → Voice → Read aloud**:
- **Works instantly** — "**System voice**" → press 🔊 and you hear audio
(offline; dated quality).
- **Free and natural** — "**Microsoft neural**". The page shows
"❌ Edge unreachable / ✅ Edge reachable". If unreachable, turn on your
proxy (the plugin routes through the system proxy automatically) and press 🔊.
- **No proxy, close to Doubao quality** — "**Cloud neural**" → tap the
"**SiliconFlow CosyVoice2**" preset → if you already configured a speech
recognition key, just press "**Play test**"; otherwise enter the key once
(TTS reuses the same one).
> 💡 Cloud TTS and recognition share **one credential**: configure voice input
> first and read-aloud needs nothing more.
### 3. Speak with voice input
Open the 🎤 in the composer:
- If it says "configure a recognition service", go to **Settings → Voice →
Voice input**, choose "host-side transcription", and enter the SiliconFlow
base URL + key.
- Press 🎤 to talk, press again (or `Esc`) to stop; the transcript is
**appended** to the draft.
- Use "**Microphone self-check**" first to confirm permission / device / format.
### 4. Troubleshooting
| Problem | Fix |
|---|---|
| No audio | Check the engine is reachable; Microsoft needs a proxy, cloud needs a key, system always works |
| Long text starts slowly | Optimized to ~1s to first audio; update to 0.4.0 if slower |
| Key shows "saved" but no effect | Key lives host-side; restart and press "Play test" again |
| No transcript on voice input | Confirm host-side recognition is configured |
## Install
```bash
# from npm (after publish)
dsh plugin add dsh-voice-kit
# or from a local checkout (development)
dsh plugin --profile desktop add link:/path/to/dsh-voice-kit
```
Restart the harness, refresh the web GUI.
## Development
```bash
pnpm install
pnpm typecheck # tsc --noEmit
pnpm test # vitest (markdown stripping / chunking / concurrent prefetch)
pnpm build # tsdown → lib/index.js (host) + lib/client.js (browser)
```
Build pipeline is the ecosystem-standard closure-factory bundle
(`window.__ModuleLoader__.load`) driven by `shared/tsdown.client.ts`
(adapted from the official DeepSeek Harness `packages/client/tsdown.client.ts`,
MIT; `libExternal` option from the dsh-web-ui family bucket, Apache-2.0).
## License
MIT. The bundled `shared/tsdown.client.ts` adapts official DSH build tooling
(MIT) plus the dsh-web-ui `libExternal` option (Apache-2.0); see the file header.
Install
dsh plugin --profile web add github:aaaadrop/dsh-voice-kit
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-voice-kit from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.