Speech-to-text voice input for the web UI: a mic button in the composer transcribes speech into the draft via the browser Web Speech API (zero-config) or an OpenAI-compatible Whisper API (OpenAI / Groq), with a selectable model and language in Settings.
Install
# from a prebuilt release tarball
dsh plugin --profile web add "https://github.com/baisama-cloud/dsh-stt-input/releases/download/v0.1.0/dsh-stt-input-0.1.0.tgz"
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:baisama-cloud/dsh-stt-input
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
中文 · English
dsh-stt-input
Speech-to-text voice input for the DeepSeek Harness (DSH) web GUI.
Click the 🎤 mic button beside the composer, speak, click again — the transcript is written straight into the input box. The STT engine and model are selectable in Settings → 语音输入 (Voice Input).
Features
- Two engines
- Browser local — uses the browser's built-in Web Speech API
(
SpeechRecognition, Chrome/Edge). Zero configuration, no API key, live interim results appear in the input box as you speak. - API — records with
MediaRecorderand transcribes through any OpenAI-compatible/v1/audio/transcriptionsendpoint (OpenAI, Groq, custom).
- Browser local — uses the browser's built-in Web Speech API
(
- Selectable model —
whisper-1(OpenAI),whisper-large-v3,whisper-large-v3-turbo,distil-whisper-large-v3-en(Groq), or a custom model name. - Configurable — service preset (OpenAI / Groq / custom), API base URL, API key, recognition language, and insert mode (append to / replace the existing draft).
- Live status — a pill under the composer shows recording time, transcribing state, and errors.
- Privacy — the API key is kept in page memory only and is never persisted
or logged; the non-secret config survives reloads via
localStorage.
Install
Build the tarball and install it into your DSH web profile (same flow as other
dsh-* plugins):
pnpm pack
# copy dsh-stt-input-*.tgz into the web profile and add the dependency,
# e.g. under ~/.dsh/profiles/web: pnpm add ../path/to/dsh-stt-input-0.1.0.tgz
# then restart `dsh web`.
The plugin registers:
- a mic button in the composer tool row (
conversation.input.left), - a status pill under the composer (
conversation.composer.dock), - a settings page (
settings.section→ 语音输入).
Usage
- Open Settings → 语音输入 and pick an engine.
- Browser local: nothing else needed (Chrome/Edge).
- API: choose a preset (OpenAI or Groq), pick the model, and paste your
API key. Groq's
whisper-large-v3is currently free.
- Click the 🎤 mic button in the composer to start, speak, and click again to stop. The transcript lands in the input box; press Enter to send.
The browser engine needs Chrome or Edge (Web Speech API). Firefox falls back to the API engine.
How it works
┌──────────┐ click 🎤 ┌───────────────┐
│ Client │ ───────────────▶ │ MediaRecorder │ (api engine)
│ (browser)│ │ SpeechRecog. │ (browser engine)
└──────────┘ └──────┬────────┘
▲ ▼
│ setDraft(text) base64 audio (JSON)
│ POST /stt-input/transcribe
│ │
┌─────┴──────┐ ┌───────▼────────┐
│ input box │ ◀────────────│ Host (Node) │
└────────────┘ {ok,text} │ fetch → /v1/ │
│ audio/transcr. │
└─────────────────┘
The client (lib/client.js) captures audio and posts base64 JSON to the host
route /stt-input/transcribe. The host (lib/index.js) decodes the audio and
uploads it as multipart/form-data to ${baseUrl}/v1/audio/transcriptions
using Node ≥ 18 global fetch / FormData / Blob.
License
MIT
Links
More in this category
PolinniZhong/dsh-omi-voice★ 74
In-chat read-aloud for DeepSeek Harness: tap to read, pause and resume AI replies with natural Doubao TTS voices (BYOK), reading only the final answer with code, tables and diagrams filtered; local engine, plugin keeps no API key.
PensiveFei/dsh-voice-scribe★ 34
Voice input for the web UI: tap Alt (or Alt+Space) to start/stop dictation, browser Web Speech (zero-config) or OpenAI-compatible cloud ASR, optional polish through DSH-configured LLM, settings UI.
1624318455/dsh-plugin-tts★ 21
Reads assistant replies aloud via free Edge TTS or your own RVC voice models: read-aloud buttons + auto-read, adaptive chunked progressive playback (gapless long reads), one-click voice-pack installs from a registry, and a portable RVC runtime.
WizisCool/dsh-ears★ 21
Voice input plugin for DeepSeek Harness (dsh): a microphone button in the composer turns speech into a draft transcript, with a choice of speech-recognition backends, optional polish through dsh own LLM routes, and a native settings page.
PerryLink/dsh-talk★ 16
Voice I/O for DeepSeek Harness — speech-to-text and text-to-speech over the microphone and audio output.
qishuilalala/dsh-voice-mode#dsh-voice-mode★ 15
Full-duplex voice mode for the DeepSeek Harness Web UI: toggle (2s-pause auto-send) or hold-to-talk dictation into an editable draft with zipformer2 streaming ASR, optional wake word; sentence-by-sentence Edge TTS read-aloud with live captions, and speaking interrupts playback and the running turn (true barge-in). On-device ASR, no API key.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.