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, kindvoice) собирает вызовы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.
No comments yet. Be the first to write one.