Back to home@johndfowler

dsh-voice

No description

Stars
0
Language
JavaScript
Created
Aug 29, 2026
Updated
Aug 30, 2026
GitHub repo

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 onChange actually 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