Releases: GooDAnDReaDY/dsh-tts
Release list
dsh-tts 0.3.0
Two more voices.
Xiaomi MiMo (mimo) — speaks through a chat endpoint: the text goes in as a message, voice and format as a separate field, and the audio comes back base64. Set MIMO_API_KEY; mimoFormat chooses mp3 or wav, and the voice is a MiMo voice name.
MiniMax (minimax) — through its official CLI rather than over HTTP: its protocol carries a separate group id and its own response envelope, and the CLI already handles the account, the login and the voice catalogue. Install it and log in; the provider shells out to it the way the piper and espeak providers do, and declines cleanly when it is missing.
- id: dsh-tts
config:
chain:
- provider: mimo
- provider: edgeDoubao is not included. Reaching it needs either a vendor protocol with an app id, token and cluster that nothing at hand pins down, or a companion desktop app on another operating system. A provider written from a guess is worse than one that does not exist.
Install
dsh plugin --profile web add @goodandready/dsh-ttsdsh-tts 0.2.1
Reading a reply out loud while you answer it is a losing race: you talk over the voice, and the voice lands in your recording.
The voice-input plugin now announces the moment the microphone opens, and the speech plugin stops playback when it hears that — the queue is dropped, the current audio pauses, browser speech is cancelled.
dsh-voice:speaking { phase: 'start' | 'end' }A plain window event: no service, no import, no dependency in either direction. Either plugin works alone, and if the other is not installed the event simply never arrives.
bargeIn in the speech settings turns it off.
dsh-tts 0.2.0
Speaking as it goes
Replies used to be collected for the whole turn and read once it ended — silence while the agent worked, then everything at once. Each reply is now synthesized the moment it lands, split on sentence boundaries, so sound starts almost immediately. speakAsItGoes: false restores the old behaviour.
Approvals are announced
When a turn stops for an approval, the plugin says so and plays a short chime — that is exactly the moment nobody is looking at the screen. Questions from the agent are announced too. The chime is generated in the browser, so there is no file to download or configure.
Settings: announceApproval, approvalText, questionText, chime (ding, beep, none).
Playback no longer cuts itself off
Every arriving utterance used to pause the previous one. Playback is a queue now, and a place in it is reserved before synthesis starts, so the order spoken is the order written — not the order the providers answered in.
Also
- Playback speed
rate, 0.5 to 2. Synthesis is untouched; the browser plays faster or slower. - A fallback voice: if synthesis fails, the browser reads the text itself.
- Pause, resume and stop in the composer row while something is being read.
- Three more providers speaking OpenAI's dialect:
siliconflow,deepinfra,fireworks. Each endpoint was probed without a key and answered401.
Install
dsh plugin --profile web add @goodandready/dsh-ttsdsh-tts-0.1.2
Speak finished DeepSeek Harness Web UI replies through a host-side TTS chain.
- Settings -> Speech: toggle speak-agent-replies, pick providers, paste API keys
- Keys go to the DSH credentials store (never echoed back to the browser)
- Fallback chain: cloud providers plus local Edge / Piper / eSpeak
- Tool speak_text; audio is not written into the model transcript
Install: dsh plugin --profile web add @goodandready/dsh-tts
dsh-tts-0.1.1
Speak finished DeepSeek Harness Web UI replies through a host-side TTS chain.
- Settings -> Speech: toggle speak-agent-replies, pick providers, paste API keys
- Keys go to the DSH credentials store (never echoed back to the browser)
- Fallback chain: cloud providers plus local Edge / Piper / eSpeak
- Tool speak_text; audio is not written into the model transcript
Install: dsh plugin --profile web add @goodandready/dsh-tts