@goodandready/dsh-tts 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,361 @@
1
+ const en = {
2
+ 'statusOnline': 'Host online',
3
+ 'recent': 'Recent',
4
+ 'recentEmpty': 'No recent speech yet',
5
+ 'retry': 'Retry',
6
+ 'advancedCollapsed': 'Advanced',
7
+ 'confirmClearCache': 'Clear the synthesis cache? This cannot be undone.',
8
+ 'confirmDeleteModel': 'Delete downloaded weights for this engine?',
9
+ 'autoplayBlocked': 'Sound is blocked until you click or tap once',
10
+ 'enableSound': 'Enable sound',
11
+ 'runtimeNotBundled': 'Neural inference runtime is not bundled',
12
+ 'runtimeNotBundledHint': 'Install weights does not enable speech. Use Edge, Piper, or eSpeak for offline TTS.',
13
+ 'testProvider': 'Test provider',
14
+ 'breakerOpen': 'Circuit open',
15
+ 'lastError': 'Last error',
16
+ 'activeProvider': 'Active provider',
17
+ 'queueLen': 'Queue',
18
+ 'sseState': 'SSE',
19
+ 'currentVoice': 'Voice',
20
+
21
+ 'statusOffline': 'Host unreachable',
22
+ 'cacheStats': 'Cache',
23
+
24
+ 'general': 'General',
25
+ 'loading': 'Loading\u2026',
26
+ 'chainHintCard': 'Pick a provider, paste its API key, and Save (or leave the key field). The key is written to the host credentials store immediately. The browser never reads it back.',
27
+ 'speakRepliesHint': 'When on, each finished reply is synthesized on the host and played in this browser. Audio is not sent back to the model.',
28
+ 'chainHint': 'Top to bottom is the fallback order. Cloud keys are saved to the host credentials store, never into plugin settings.',
29
+ 'title': 'Speech',
30
+ 'speakReplies': 'Speak agent replies',
31
+ 'speakAsItGoes': 'Speak as it goes',
32
+ 'speakAsItGoesHint': 'Read each reply the moment it lands, sentence by sentence, instead of waiting for the whole turn.',
33
+ 'rate': 'Playback speed',
34
+ 'rateHint': '0.5 to 2. Synthesis is untouched; the browser plays faster or slower.',
35
+ 'bargeIn': 'Fall silent when you speak',
36
+ 'bargeInHint': 'Stop reading the moment the microphone opens.',
37
+ 'announce': 'Announce approvals',
38
+ 'announceHint': 'Say it out loud and play a chime when the agent stops for an approval or asks a question.',
39
+ 'approvalText': 'Approval wording',
40
+ 'approvalHint': 'Said when an approval is asked for; the tool name is appended.',
41
+ 'questionText': 'Question wording',
42
+ 'questionHint': 'Said when the agent asks a question. Empty disables it.',
43
+ 'chime': 'Chime',
44
+ 'chimeHint': 'ding, beep or none.',
45
+ 'language': 'Language',
46
+ 'languageHint': 'Hint for voices that need a locale (eSpeak, Azure SSML).',
47
+ 'piperModel': 'Piper model path',
48
+ 'piperModelHint': 'Absolute path to an ONNX model. Leave empty to skip Piper.',
49
+ 'piperBin': 'Piper binary',
50
+ 'binHint': 'Looked up in PATH unless absolute.',
51
+ 'espeakBin': 'eSpeak binary',
52
+ 'espeakHint': 'Usually espeak-ng.',
53
+ 'edgeBin': 'edge-tts binary',
54
+ 'edgeHint': 'Python CLI from the edge-tts package.',
55
+ 'azureRegion': 'Azure region',
56
+ 'azureHint': 'Required for the azure provider, e.g. eastus.',
57
+ 'openaiBaseUrl': 'OpenAI base URL',
58
+ 'openaiBaseUrlHint': 'OpenAI-compatible origin for the openai provider.',
59
+ 'mimoBaseUrl': 'MiMo base URL',
60
+ 'mimoBaseUrlHint': 'MiMo API root; synthesis uses its chat endpoint.',
61
+ 'mimoFormat': 'MiMo format',
62
+ 'mimoFormatHint': 'mp3 or wav.',
63
+ 'minimaxBin': 'MiniMax CLI',
64
+ 'minimaxBinHint': 'Looked up in PATH unless absolute; install and log in separately.',
65
+ 'advancedTitle': 'Advanced',
66
+ 'advancedHint': 'Limits and endpoint overrides. Provider API keys stay in the chain editor; credential slot names (*KeyEnv) are config-only.',
67
+ 'maxChars': 'Max characters',
68
+ 'maxCharsHint': 'Hard cap before long-reply handling; 0 disables.',
69
+ 'sentenceChars': 'Sentence chunk size',
70
+ 'sentenceCharsHint': 'Max characters per streaming sentence piece.',
71
+ 'timeoutMs': 'Provider timeout (ms)',
72
+ 'timeoutMsHint': 'Abort a provider attempt after this many milliseconds.',
73
+ 'maxQueue': 'Max queue length',
74
+ 'maxQueueHint': 'Drop oldest pending pieces beyond this count.',
75
+ 'chainTitle': 'Provider chain',
76
+ 'addProvider': 'Add provider',
77
+ 'localProvider': 'Local / CLI provider — no API key',
78
+ 'configured': 'Configured',
79
+ 'notSet': 'Not set',
80
+ 'fromEnv': 'Set in environment',
81
+ 'clear': 'Clear',
82
+ 'remove': 'Remove',
83
+ 'up': 'Up',
84
+ 'down': 'Down',
85
+ 'save': 'Save',
86
+ 'saved': 'Saved',
87
+ 'cardHint': 'Provider chain, voices and playback options.',
88
+ 'skipCode': 'Skip code blocks',
89
+ 'skipCodeHint': 'Say a short notice instead of reading code aloud.',
90
+ 'cache': 'Synthesis cache',
91
+ 'cacheHint': 'Reuse synthesized audio for repeated phrases.',
92
+ 'cacheMaxMb': 'Cache size limit, MB',
93
+ 'cacheMaxMbHint': 'Least recently used items are evicted first.',
94
+ 'clearCache': 'Clear cache',
95
+ 'pronTitle': 'Pronunciation',
96
+ 'pronHint': 'Rules run top-down. Wrap left side in /…/ for a regex; Lang filters the rule.',
97
+ 'pronFrom': 'Replace',
98
+ 'pronTo': 'With',
99
+ 'pronWhole': 'Whole word',
100
+ 'pronLang': 'Lang',
101
+ 'addRule': 'Add rule',
102
+ 'rolesTitle': 'Voice roles',
103
+ 'rolesHint': 'Empty fields inherit the main chain.',
104
+ 'roleReply': 'Reply',
105
+ 'roleApproval': 'Approval',
106
+ 'roleError': 'Error',
107
+ 'longReply': 'Long replies',
108
+ 'longReplyHint': 'truncate: cut at the limit; summarize: short retelling; full: read everything.',
109
+ 'summaryModel': 'Summary model',
110
+ 'summaryModelHint': 'provider/model, empty = conversation default.',
111
+ 'summarySentences': 'Retelling length',
112
+ 'summarySentencesHint': 'Sentences in the spoken retelling.',
113
+ 'preview': 'Preview',
114
+ 'statsTitle': 'Statistics',
115
+ 'statTotal': 'Total',
116
+ 'statHits': 'Cache hits',
117
+ 'statErrors': 'Errors',
118
+ 'statReset': 'Reset stats',
119
+
120
+ 'autoDetect': 'Auto language per piece',
121
+ 'autoDetectHint': 'Guess ru/en per spoken piece instead of the language setting.',
122
+ 'narrateQuotesOnly': 'Only quotes',
123
+ 'narrateQuotesHint': 'Read only «quoted» fragments of a reply.',
124
+ 'skipActions': 'Skip *actions*',
125
+ 'skipActionsHint': 'Drop asterisk action blocks.',
126
+ 'removeRegex': 'Remove regex',
127
+ 'removeRegexHint': 'Global regex; matches are removed before synthesis.',
128
+ 'customBaseUrl': 'Custom TTS endpoint',
129
+ 'customBaseUrlHint': 'OpenAI-compatible origin, e.g. http://localhost:8880/v1; empty = off.',
130
+ 'customKeyEnv': 'Custom key env',
131
+ 'customKeyEnvHint': 'Credential name for the custom endpoint bearer key.',
132
+
133
+ 'localEnginesTitle': 'Local Engines (Offline)',
134
+ 'localEnginesHint': 'Run speech synthesis 100% offline without API keys.',
135
+ 'enableLocalEngines': 'Enable local engines',
136
+ 'enableLocalEnginesHint': 'Use Kokoro or F5-TTS when installed.',
137
+ 'streamingEnabled': 'Instant streaming (< 300 ms)',
138
+ 'streamingEnabledHint': 'Play audio via AudioWorklet and SSE in real-time.',
139
+ 'useKokoro': 'Enable Kokoro-82M (CPU)',
140
+ 'useKokoroHint': 'Fast neural synthesis on CPU.',
141
+ 'useF5': 'Enable F5-TTS (GPU)',
142
+ 'useF5Hint': 'High-fidelity zero-shot synthesis on NVIDIA GPU.',
143
+ 'installed': 'Installed',
144
+ 'notInstalled': 'Not installed',
145
+ 'downloading': 'Downloading',
146
+ 'installKokoro': 'Install (350 MB)',
147
+ 'installF5': 'Install (2.1 GB)',
148
+ 'deleteModel': 'Delete',
149
+
150
+ 'voiceDuplexTitle': 'Voice Duplex (Voice-to-Voice)',
151
+ 'voiceDuplexHint': 'Interactive voice conversation integrated with dsh-voice.',
152
+ 'voiceNotInstalledTitle': 'Required plugin @goodandready/dsh-voice is not installed',
153
+ 'voiceInstallHint': 'To enable voice duplex, install the plugin with',
154
+ 'voiceDuplex': 'Voice-to-Voice mode',
155
+ 'voiceDuplexHintToggle': 'Automatically synthesize agent reply when finished talking.',
156
+ 'vadBargeIn': 'VAD Barge-in',
157
+ 'vadBargeInHint': 'Mute speech synthesis immediately when user voice is detected.',
158
+ 'newSubagentRole': 'Subagent name (e.g. coder, reviewer)',
159
+ 'addSubagentRole': 'Add Subagent',
160
+ 'role_coder': 'Coder',
161
+ 'role_reviewer': 'Reviewer',
162
+ 'role_planner': 'Planner',
163
+
164
+ 'enableItDictionary': 'Built-in IT dictionary',
165
+ 'enableItDictionaryHint': 'Auto-correct pronunciation for SQL, Nginx, K8s, Docker, API, JSON, YAML, etc.',
166
+ 'loadItDictionary': 'Populate IT terms',
167
+ 'previewRule': 'Listen',
168
+
169
+ 'messengerIntegrationTitle': 'Messenger Integration (Telegram, Discord)',
170
+ 'messengerIntegrationHint': 'Voice replies and notes sent through @goodandready/dsh-messenger-gateway.',
171
+ 'messengerNotInstalledTitle': 'Required plugin @goodandready/dsh-messenger-gateway is not installed',
172
+ 'messengerInstallHint': 'To enable voice notes in messengers, install the plugin with',
173
+ 'messengerTtsEnabled': 'Voice replies in messengers',
174
+ 'messengerTtsEnabledHint': 'Allow messenger bridge to synthesize voice notes for agent replies.',
175
+
176
+ 'dockLabel': 'Speech',
177
+ 'dockPause': 'Pause',
178
+ 'dockResume': 'Resume speech',
179
+ 'dockStop': 'Stop speech',
180
+ }
181
+ const ru = {
182
+ 'statusOnline': 'Хост на связи',
183
+ 'recent': 'Недавние',
184
+ 'recentEmpty': 'Пока нет реплик',
185
+ 'retry': 'Повторить',
186
+ 'advancedCollapsed': 'Дополнительно',
187
+ 'confirmClearCache': 'Очистить кэш синтеза? Действие необратимо.',
188
+ 'confirmDeleteModel': 'Удалить скачанные веса движка?',
189
+ 'autoplayBlocked': 'Звук заблокирован — один раз кликните или коснитесь экрана',
190
+ 'enableSound': 'Включить звук',
191
+ 'runtimeNotBundled': 'Рантайм нейросинтеза не входит в пакет',
192
+ 'runtimeNotBundledHint': 'Установка весов не включает речь. Для offline используйте Edge, Piper или eSpeak.',
193
+ 'testProvider': 'Проверить провайдера',
194
+ 'breakerOpen': 'Переключатель открыт',
195
+ 'lastError': 'Последняя ошибка',
196
+ 'activeProvider': 'Активный провайдер',
197
+ 'queueLen': 'Очередь',
198
+ 'sseState': 'SSE',
199
+ 'currentVoice': 'Голос',
200
+
201
+ 'statusOffline': 'Хост недоступен',
202
+ 'cacheStats': 'Кэш',
203
+
204
+ 'dockLabel': 'Чтение',
205
+ 'dockPause': 'Пауза',
206
+ 'dockResume': 'Продолжить чтение',
207
+ 'dockStop': 'Прекратить чтение',
208
+
209
+ 'general': 'Общее',
210
+ 'loading': 'Загрузка…',
211
+ 'chainHintCard': 'Выберите провайдера, вставьте ключ и нажмите «Сохранить» (или просто уйдите из поля). Ключ сразу попадает в хранилище учётных данных харнесса; браузер его обратно не читает.',
212
+ 'speakRepliesHint': 'Каждый законченный ответ озвучивается на стороне харнесса и играет в этом браузере. Звук модели не отправляется.',
213
+ 'chainHint': 'Порядок сверху вниз — порядок отката. Ключи облачных провайдеров попадают в хранилище учётных данных харнесса, а не в настройки плагина.',
214
+ 'title': 'Озвучка',
215
+ 'speakReplies': 'Читать ответы агента',
216
+ 'speakAsItGoes': 'Читать по ходу',
217
+ 'speakAsItGoesHint': 'Читать каждый ответ, как только он пришёл, предложениями, не дожидаясь конца хода.',
218
+ 'rate': 'Скорость чтения',
219
+ 'rateHint': 'От 0.5 до 2. Синтез не меняется — быстрее или медленнее играет браузер.',
220
+ 'bargeIn': 'Замолкать, когда вы заговорили',
221
+ 'bargeInHint': 'Прекращать чтение, как только открылся микрофон.',
222
+ 'announce': 'Объявлять запрос подтверждения',
223
+ 'announceHint': 'Говорить вслух и подавать сигнал, когда агент остановился ради подтверждения или задал вопрос.',
224
+ 'approvalText': 'Что говорить о подтверждении',
225
+ 'approvalHint': 'Произносится при запросе подтверждения; имя инструмента добавляется следом.',
226
+ 'questionText': 'Что говорить о вопросе',
227
+ 'questionHint': 'Произносится, когда агент задал вопрос. Пусто — не произносить.',
228
+ 'chime': 'Сигнал',
229
+ 'chimeHint': 'ding, beep или none.',
230
+ 'language': 'Язык',
231
+ 'languageHint': 'Подсказка для голосов, которым нужен язык (eSpeak, Azure SSML).',
232
+ 'piperModel': 'Piper: путь к модели',
233
+ 'piperModelHint': 'Абсолютный путь к модели ONNX. Пусто — Piper пропускается.',
234
+ 'piperBin': 'Piper: бинарь',
235
+ 'binHint': 'Ищется в PATH, если путь не абсолютный.',
236
+ 'espeakBin': 'eSpeak: бинарь',
237
+ 'espeakHint': 'Обычно espeak-ng.',
238
+ 'edgeBin': 'edge-tts: бинарь',
239
+ 'edgeHint': 'Консольная утилита из пакета edge-tts.',
240
+ 'azureRegion': 'Azure: регион',
241
+ 'azureHint': 'Нужен провайдеру azure, например eastus.',
242
+ 'openaiBaseUrl': 'OpenAI base URL',
243
+ 'openaiBaseUrlHint': 'OpenAI-совместимый origin для провайдера openai.',
244
+ 'mimoBaseUrl': 'MiMo base URL',
245
+ 'mimoBaseUrlHint': 'Корень API MiMo; синтез идёт через chat endpoint.',
246
+ 'mimoFormat': 'Формат MiMo',
247
+ 'mimoFormatHint': 'mp3 или wav.',
248
+ 'minimaxBin': 'MiniMax CLI',
249
+ 'minimaxBinHint': 'Ищется в PATH, если путь не абсолютный; вход в CLI — отдельно.',
250
+ 'advancedTitle': 'Дополнительно',
251
+ 'advancedHint': 'Лимиты и override endpoint. API-ключи — в редакторе цепочки; имена credential-слотов (*KeyEnv) — только в конфиге.',
252
+ 'maxChars': 'Максимум символов',
253
+ 'maxCharsHint': 'Жёсткий лимит до обработки длинных ответов; 0 — без лимита.',
254
+ 'sentenceChars': 'Размер куска (символы)',
255
+ 'sentenceCharsHint': 'Максимум символов в streaming-куске предложения.',
256
+ 'timeoutMs': 'Таймаут провайдера (мс)',
257
+ 'timeoutMsHint': 'Прервать попытку провайдера через столько миллисекунд.',
258
+ 'maxQueue': 'Длина очереди',
259
+ 'maxQueueHint': 'Отбрасывать самые старые куски сверх этого числа.',
260
+ 'chainTitle': 'Цепочка провайдеров',
261
+ 'addProvider': 'Добавить провайдера',
262
+ 'localProvider': 'Локальный провайдер — ключ не нужен',
263
+ 'configured': 'Ключ задан',
264
+ 'notSet': 'Ключа нет',
265
+ 'fromEnv': 'Задан в окружении',
266
+ 'clear': 'Убрать',
267
+ 'remove': 'Удалить',
268
+ 'up': 'Выше',
269
+ 'down': 'Ниже',
270
+ 'save': 'Сохранить',
271
+ 'saved': 'Сохранено',
272
+ 'cardHint': 'Цепочка провайдеров, голоса и параметры чтения.',
273
+ 'skipCode': 'Пропускать код',
274
+ 'skipCodeHint': 'Вместо чтения кода вслух — короткая пометка.',
275
+ 'cache': 'Кэш синтеза',
276
+ 'cacheHint': 'Повторяющиеся фразы не синтезируются заново.',
277
+ 'cacheMaxMb': 'Лимит кэша, МБ',
278
+ 'cacheMaxMbHint': 'Сначала вытесняется самое давнее по использованию.',
279
+ 'clearCache': 'Очистить кэш',
280
+ 'pronTitle': 'Произношение',
281
+ 'pronHint': 'Правила работают сверху вниз; /…/ в левой части — регулярка; Язк ограничивает правило.',
282
+ 'pronFrom': 'Заменить',
283
+ 'pronTo': 'На',
284
+ 'pronWhole': 'Целое слово',
285
+ 'pronLang': 'Язк',
286
+ 'addRule': 'Добавить правило',
287
+ 'rolesTitle': 'Голоса ролей',
288
+ 'rolesHint': 'Пустые поля наследуют основную цепочку.',
289
+ 'roleReply': 'Ответ',
290
+ 'roleApproval': 'Подтверждение',
291
+ 'roleError': 'Ошибка',
292
+ 'longReply': 'Длинные ответы',
293
+ 'longReplyHint': 'truncate: обрезать; summarize: короткий пересказ; full: читать целиком.',
294
+ 'summaryModel': 'Модель пересказа',
295
+ 'summaryModelHint': 'provider/model, пусто — как у разговора.',
296
+ 'summarySentences': 'Длина пересказа',
297
+ 'summarySentencesHint': 'Предложений в озвучиваемом пересказе.',
298
+ 'preview': 'Проба',
299
+ 'statsTitle': 'Статистика',
300
+ 'statTotal': 'Всего',
301
+ 'statHits': 'Кэш-хиты',
302
+ 'statErrors': 'Ошибки',
303
+ 'statReset': 'Сбросить',
304
+
305
+ 'autoDetect': 'Автоязык по куску',
306
+ 'autoDetectHint': 'Подсказывать провайдеру ru/en по каждому куску вместо общей настройки.',
307
+ 'narrateQuotesOnly': 'Только цитаты',
308
+ 'narrateQuotesHint': 'Читать только фрагменты в кавычках.',
309
+ 'skipActions': 'Пропускать *действия*',
310
+ 'skipActionsHint': 'Вырезать блоки в звёздочках.',
311
+ 'removeRegex': 'Регулярка вырезания',
312
+ 'removeRegexHint': 'Глобальная регулярка: совпадения удаляются перед синтезом.',
313
+ 'customBaseUrl': 'Свой TTS endpoint',
314
+ 'customBaseUrlHint': 'OpenAI-compatible base URL, e.g. http://localhost:8880/v1; empty disables it.',
315
+ 'customKeyEnv': 'Имя ключа для endpoint',
316
+ 'customKeyEnvHint': 'Имя credential для Bearer-ключа своего endpointа.',
317
+
318
+ 'localEnginesTitle': 'Локальные движки (Offline)',
319
+ 'localEnginesHint': 'Автономный синтез без API-ключей и интернета.',
320
+ 'enableLocalEngines': 'Включить локальные движки',
321
+ 'enableLocalEnginesHint': 'Использовать Kokoro или F5-TTS при наличии моделей.',
322
+ 'streamingEnabled': 'Мгновенный потоковый звук (< 300 мс)',
323
+ 'streamingEnabledHint': 'Воспроизводить звук через AudioWorklet и SSE без задержек.',
324
+ 'useKokoro': 'Использовать Kokoro-82M (CPU)',
325
+ 'useKokoroHint': 'Быстрый нейросинтез на процессоре.',
326
+ 'useF5': 'Использовать F5-TTS (GPU)',
327
+ 'useF5Hint': 'Высокоточный синтез на видеокарте NVIDIA.',
328
+ 'installed': 'Установлена',
329
+ 'notInstalled': 'Не установлена',
330
+ 'downloading': 'Загрузка',
331
+ 'installKokoro': 'Установить (350 МБ)',
332
+ 'installF5': 'Установить (2.1 ГБ)',
333
+ 'deleteModel': 'Удалить',
334
+
335
+ 'voiceDuplexTitle': 'Голосовой диалог (Voice-to-Voice)',
336
+ 'voiceDuplexHint': 'Интерактивный голосовой разговор при наличии плагина dsh-voice.',
337
+ 'voiceNotInstalledTitle': 'Плагин @goodandready/dsh-voice не установлен',
338
+ 'voiceInstallHint': 'Для включения голосового диалога установите плагин командой',
339
+ 'voiceDuplex': 'Voice-to-Voice режим',
340
+ 'voiceDuplexHintToggle': 'Автоматически отвечать голосом после завершения голосовой реплики.',
341
+ 'vadBargeIn': 'VAD Barge-in',
342
+ 'vadBargeInHint': 'Мгновенно глушить речь ассистента при обнаружении голоса пользователя.',
343
+ 'newSubagentRole': 'Имя субагента (например, coder, reviewer)',
344
+ 'addSubagentRole': 'Добавить субагента',
345
+ 'role_coder': 'Кодер',
346
+ 'role_reviewer': 'Ревьюер',
347
+ 'role_planner': 'Планировщик',
348
+
349
+ 'enableItDictionary': 'Предустановленный словарь IT-терминов',
350
+ 'enableItDictionaryHint': 'Автоматически заменять SQL, Nginx, K8s, Docker, API, JSON, YAML и др. на правильное произношение.',
351
+ 'loadItDictionary': 'Вставить IT-термины в таблицу',
352
+ 'previewRule': 'Прослушать',
353
+
354
+ 'messengerIntegrationTitle': 'Интеграция с мессенджерами (Telegram, Discord)',
355
+ 'messengerIntegrationHint': 'Озвучивание ответов и голосовые заметки через @goodandready/dsh-messenger-gateway.',
356
+ 'messengerNotInstalledTitle': 'Плагин @goodandready/dsh-messenger-gateway не установлен',
357
+ 'messengerInstallHint': 'Для отправки голосовых сообщений в мессенджеры установите плагин командой',
358
+ 'messengerTtsEnabled': 'Голосовые ответы в мессенджеры',
359
+ 'messengerTtsEnabledHint': 'Разрешить мосту мессенджеров озвучивать ответы голосовыми заметками.',
360
+ }
361
+