PerryLink/dsh-talk10

dsh-talk

Voice-first session loop for DeepSeek Harness: a composer microphone button with browser/local speech-to-text (Web Speech, FunASR, whisper.cpp), a speak tool for text-to-speech replies (browser, edge-tts, piper), event announcements with mute, and speak-to-interrupt.

包名
dsh-talk
版本
0.3.10
许可证
Apache-2.0
最近更新
2026年9月12日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:PerryLink/dsh-talk

Configuration

All tunables are Schemastery Config fields (changeable from cordis.yml). cordis.patch.yml documents each key inline.

KeyDefaultMeaning
record.enabledtrueShow the composer mic button
record.hotkey(none)Optional toggle hotkey, e.g. "alt+r"
record.maxSeconds60Recording cap in seconds (1..600)
record.autoSubmitfalseSubmit the transcription as a user message (false = fill the draft)
record.vad.enabled / silenceMs / energyThresholdtrue / 1500 / 0.01Voice-activity detection: silence auto-ends the recording (degrades when AudioContext is absent)
stt.engineautoauto / web / funasr / whisper; auto prefers a configured local engine, then Web Speech
stt.languageautoBCP-47 language or auto
stt.interimtrueShow interim transcriptions (Web Speech)
stt.silenceFinaliseMs4000Stop continuous Web Speech recognition after this many milliseconds without speech (500..15000)
stt.funasr.url(none)FunASR inference endpoint; required when the engine is funasr
stt.whisper.modelPath(none)whisper.cpp model; required when the engine is whisper
tts.engineautoauto / browser / edge-tts / piper; auto prefers piper, then edge-tts, then the browser voice
tts.rate0Rate offset in percent (-50..50) for edge-tts/piper
tts.fallbackToBrowsertrueFall back to the browser voice when a local engine fails
tts.browser.voiceName(none)Preferred browser voice name; an unknown name uses the platform default
tts.browser.rate1Browser SpeechSynthesis rate (0.1..10)
tts.browser.pitch1Browser SpeechSynthesis pitch (0..2)
tts.piper.modelPath(none)piper voice model; required when the engine is piper
announce.enabledtrueMaster switch for event announcements
announce.onTurnEnd / onApproval / onErrortrueWhich events are spoken
announce.messages.*"Turn complete." etc.Spoken phrases
interrupttrueTalking stops current playback
maxSpeakChars20000Cap on the speak tool's text length (1..100000)
maxAudioCacheBytes8388608In-memory synthesized-audio cache cap (1 MiB..64 MiB)

stt.silenceFinaliseMs and record.vad.silenceMs are separate mechanisms: the first finalises the Web Speech transcript when continuous recognition hears no speech, the second is the MediaRecorder energy-based detector that ends the recording (and submits it when record.autoSubmit is on). They run in different pipelines and share no state.