dsh-voice
No description
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 29, 2026
- Updated
- Aug 30, 2026
Introduction
dsh-voice
Voice dictation for the DeepSeek Harness Web GUI composer.
A 🎙 button floats at the composer textarea's top-right corner. Tap it, speak, watch your words land in the draft — tap again to stop. Works on desktop Chrome and iOS Safari (the phone-tailnet workflow), which is the whole point.
How it works
- Web Speech API (
SpeechRecognition/webkitSpeechRecognition) — no backend, no keys, no upload beyond what the browser's speech service already does - Continuous recognition with interim results shown as a floating preview
- Final transcripts append to the current draft (React-safe writes through the native value setter + input event, so the draft store picks them up — the pattern React's
onChangeactually listens for) - Hides itself on browsers without the API (Firefox)
Safety design
- Zero DOM mutation inside React's tree — the mic is
position: fixed, computed from the textarea's rect (the file-mentions crash class avoided) - Position re-tracks on resize/scroll/visualViewport changes and composer remounts
Install
cd ~/.dsh/profiles/web
pnpm add file:~/path/to/dsh-voice
Add dsh-voice to the profile's dsh.profile.bundles in package.json, restart the GUI, and the mic appears above the composer.
Permissions
The browser asks for microphone permission on first use (per origin — the localhost GUI and the tailnet URL are separate grants).
License
MIT