Back to home@Lorodn4x

dsh-voice

Voice messages for DeepSeek Harness web UI: Edge TTS playback button plus agent-sent voice notes

Stars
0
Language
JavaScript
Created
Aug 25, 2026
Updated
Aug 25, 2026
GitHub repo

Introduction

dsh-voice

Голосовые сообщения для веб-GUI DeepSeek Harness: кнопка прослушивания под ответами агента плюс инструмент voice_say, которым агент сам отправляет голосовые по собственному выбору. Синтез речи - Edge TTS (Microsoft), без API-ключей.

Как это устроено

Один пакет обслуживает обе половины:

Node-половина (lib/index.js):

  • инструмент voice_say(text, voice?) на ctx.tools - агент вызывает его, чтобы отправить голосовое;
  • HTTP-маршрут POST /dsh-voice/tts ({text, voice}audio/mpeg) на ctx.webServer - им пользуется браузерная половина;
  • секция системного промпта ui:voice-messages с правилами использования.

Синтез (lib/tts.js) чистит текст перед озвучкой: вырезает fenced/indented код, inline-code, URL, HTML-теги, разметку таблиц и заголовков. Результат кэшируется в $DSH_HOME/voice-cache/<sha1>.mp3; параллельные запросы одного текста дедуплицируются. Голоса: ru-RU-DmitryNeural (male) и ru-RU-SvetlanaNeural (female); полный Edge ShortName тоже принимается.

Браузерная половина (lib/client.js):

  • свёртка voiceDefinition (ctx.conversationEvents, kind voice) собирает вызовы voice_say внутри тура;
  • рендер в слоте conversation.chat.turnTail: плееры для голосовых агента, кнопка «Прослушать» с текстом закрывающего ответа и переключатель голоса (Дмитрий/Светлана, выбор живёт в localStorage под ключом dsh-voice.voice);
  • проигрывание через blob-URL с кэшем на 30 записей; одновременно звучит только один плеер.

Подключение

dsh plugin --profile web add --save link:/путь/к/dsh-voice   # или прописать link: в package.json профиля

и добавить "dsh-voice" в список dsh.profile.bundles профиля (патч из cordis.patch.yml вставит строку voice автоматически при загрузке бандла). После подключения нужен перезапуск профиля: инструмент и маршрут живут в процессе хоста.

Известные ограничения

  • Русские голоса по умолчанию; другие языки - полным ShortName через параметр voice.
  • Кнопка «Прослушать» синтезирует текст заново при смене голоса (кэш раздельный).
  • Синтез требует доступа к speech.platform.bing.com.