dsh-live-voice 0.2.2 → 0.3.0
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.
- package/CHANGELOG.md +39 -1
- package/DEVELOPMENT.md +13 -0
- package/LICENSE +201 -674
- package/PLAN.md +28 -0
- package/README.md +65 -110
- package/docs/ARCHITECTURE.md +40 -0
- package/docs/CHOOSING-AN-ENGINE.md +120 -0
- package/docs/CONFIGURATION.md +149 -0
- package/docs/REVIEW.md +35 -0
- package/docs/VOICE-LIFECYCLE.md +59 -0
- package/lib/client.js +3652 -1576
- package/lib/server.js +641 -453
- package/package.json +17 -6
- package/scripts/build.ts +16 -4
- package/scripts/preview-ui.ts +1 -1
- package/src/{client/index.ts → app/client/apply.tsx} +152 -59
- package/src/app/client/i18n/DshLanguageBoundary.tsx +42 -0
- package/src/app/client/i18n/catalogs/base.ts +231 -0
- package/src/app/client/i18n/catalogs/en.ts +258 -0
- package/src/app/client/i18n/catalogs/es.ts +279 -0
- package/src/app/client/i18n/catalogs/fr.ts +281 -0
- package/src/app/client/i18n/catalogs/hi.ts +263 -0
- package/src/app/client/i18n/catalogs/index.ts +18 -0
- package/src/app/client/i18n/catalogs/pt-BR.ts +270 -0
- package/src/app/client/i18n/catalogs/zh.ts +248 -0
- package/src/app/client/i18n/index.ts +4 -0
- package/src/app/client/i18n/registerDshLocales.ts +43 -0
- package/src/app/client/i18n/runtime.tsx +58 -0
- package/src/app/client/index.ts +3 -0
- package/src/app/client/registerSlots.tsx +30 -0
- package/src/app/client/slotDefinitions.ts +32 -0
- package/src/app/server/apply.ts +479 -0
- package/src/app/server/index.ts +2 -0
- package/src/app/server/registerRoutes.ts +11 -0
- package/src/modules/conversation/components/ConversationControls.tsx +40 -0
- package/src/modules/conversation/components/ConversationStatusBar.tsx +155 -0
- package/src/modules/conversation/components/DeliveryModeButton.tsx +43 -0
- package/src/modules/conversation/components/MicrophoneButton.tsx +6 -0
- package/src/modules/conversation/components/PlaybackControls.tsx +41 -0
- package/src/modules/conversation/components/SpeakButton.tsx +30 -0
- package/src/modules/conversation/components/Waveform.tsx +68 -0
- package/src/modules/conversation/components/conversationStatus.ts +17 -0
- package/src/modules/conversation/components/createConversationComponents.tsx +505 -0
- package/src/modules/conversation/components/index.ts +8 -0
- package/src/modules/conversation/hooks/index.ts +2 -0
- package/src/modules/conversation/hooks/useConversationActions.ts +27 -0
- package/src/modules/conversation/hooks/useConversationController.ts +15 -0
- package/src/modules/conversation/index.ts +3 -0
- package/src/{client → modules/conversation/models}/chat.ts +2 -1
- package/src/modules/conversation/models/index.ts +1 -0
- package/src/{core → modules/core}/coordinator.ts +133 -7
- package/src/modules/core/index.ts +6 -0
- package/src/{engines/qwen-http-host.ts → modules/core/qwen/QwenHttpHost.ts} +2 -2
- package/src/modules/core/qwen/QwenSettings.tsx +148 -0
- package/src/{core → modules/core}/settings.ts +23 -0
- package/src/modules/recognition/components/RecognitionCapabilityStatus.tsx +19 -0
- package/src/{engines/recognition/qwen-http.ts → modules/recognition/engines/qwen/QwenRecognitionEngine.ts} +1 -1
- package/src/{engines/recognition/whisper-http.ts → modules/recognition/engines/whisper/WhisperRecognitionEngine.ts} +1 -1
- package/src/modules/recognition/engines/whisper/WhisperSettings.tsx +150 -0
- package/src/modules/recognition/index.ts +4 -0
- package/src/modules/recognition/qwen/QwenRecognitionSettings.tsx +4 -0
- package/src/modules/settings/components/LiveVoiceSettings.tsx +72 -0
- package/src/modules/settings/components/SettingsHeader.tsx +49 -0
- package/src/modules/settings/components/VersionBadges.tsx +39 -0
- package/src/modules/settings/components/createLiveVoiceSettings.tsx +8 -0
- package/src/modules/settings/components/index.ts +4 -0
- package/src/modules/settings/hooks/index.ts +3 -0
- package/src/modules/settings/hooks/useAudioDevices.ts +38 -0
- package/src/modules/settings/hooks/useLiveVoiceSettings.ts +4 -0
- package/src/modules/settings/hooks/useReleaseStatus.ts +17 -0
- package/src/modules/settings/index.ts +4 -0
- package/src/modules/settings/models/index.ts +1 -0
- package/src/modules/settings/models/settingsStorage.ts +14 -0
- package/src/modules/settings/sections/conversation/ConversationDelaySettings.tsx +24 -0
- package/src/modules/settings/sections/conversation/ConversationSettingsSection.tsx +23 -0
- package/src/modules/settings/sections/conversation/DeliverySettings.tsx +38 -0
- package/src/modules/settings/sections/conversation/HoldToTalkSettings.tsx +20 -0
- package/src/modules/settings/sections/conversation/VoiceModeSettings.tsx +31 -0
- package/src/modules/settings/sections/conversation/index.ts +5 -0
- package/src/modules/settings/sections/index.ts +3 -0
- package/src/modules/settings/sections/recognition/RecognitionEngineSettings.tsx +109 -0
- package/src/modules/settings/sections/recognition/RecognitionFilterSettings.tsx +33 -0
- package/src/modules/settings/sections/recognition/RecognitionSettingsSection.tsx +20 -0
- package/src/modules/settings/sections/recognition/RecognitionStatus.tsx +19 -0
- package/src/modules/settings/sections/recognition/SilenceDetectionSettings.tsx +58 -0
- package/src/modules/settings/sections/recognition/VoiceCommandSettings.tsx +41 -0
- package/src/modules/settings/sections/recognition/index.ts +5 -0
- package/src/modules/settings/sections/speak/OutputFilterSettings.tsx +39 -0
- package/src/modules/settings/sections/speak/PlaybackPolicySettings.tsx +26 -0
- package/src/modules/settings/sections/speak/SpeakSettingsSection.tsx +16 -0
- package/src/modules/settings/sections/speak/SpeechAdvancedSettings.tsx +81 -0
- package/src/modules/settings/sections/speak/SpeechEngineSettings.tsx +80 -0
- package/src/modules/settings/sections/speak/index.ts +4 -0
- package/src/modules/settings/services/releases.ts +117 -0
- package/src/modules/speak/engines/audio/HostAudioEngine.ts +167 -0
- package/src/modules/speak/engines/audio/M4aAacTranscoder.ts +58 -0
- package/src/modules/speak/engines/qwen/QwenSpeakingEngine.ts +14 -0
- package/src/{engines/speaking/say.ts → modules/speak/engines/say/SaySpeakingEngine.ts} +26 -4
- package/src/modules/speak/index.ts +5 -0
- package/src/modules/speak/qwen/QwenSpeakingSettings.tsx +4 -0
- package/src/modules/speak/services/speechQueue.ts +2 -0
- package/src/server.ts +9 -365
- package/src/shared/design-system/buttons/IconButton.tsx +33 -0
- package/src/shared/design-system/buttons/PillButton.tsx +11 -0
- package/src/shared/design-system/buttons/ToggleButton.tsx +6 -0
- package/src/shared/design-system/buttons/index.ts +3 -0
- package/src/shared/design-system/feedback/ErrorMessage.tsx +27 -0
- package/src/shared/design-system/feedback/StatusBadge.tsx +9 -0
- package/src/shared/design-system/feedback/StatusMessage.tsx +4 -0
- package/src/shared/design-system/feedback/index.ts +3 -0
- package/src/shared/design-system/forms/CheckboxField.tsx +20 -0
- package/src/shared/design-system/forms/NumberField.tsx +12 -0
- package/src/shared/design-system/forms/SelectField.tsx +20 -0
- package/src/shared/design-system/forms/TextAreaField.tsx +12 -0
- package/src/shared/design-system/forms/TextField.tsx +12 -0
- package/src/shared/design-system/forms/index.ts +5 -0
- package/src/shared/design-system/icons/Icon.tsx +20 -0
- package/src/shared/design-system/icons/icons.ts +16 -0
- package/src/shared/design-system/icons/index.ts +2 -0
- package/src/shared/design-system/index.ts +5 -0
- package/src/shared/design-system/layout/SettingsCard.tsx +9 -0
- package/src/shared/design-system/layout/SettingsSection.tsx +9 -0
- package/src/shared/design-system/layout/SettingsSubcard.tsx +14 -0
- package/src/shared/design-system/layout/SettingsTabs.tsx +54 -0
- package/src/shared/design-system/layout/index.ts +4 -0
- package/src/{client/styles.ts → styles/index.ts} +3 -1
- package/src/client/components.ts +0 -1080
- package/src/client/qwen-settings.ts +0 -144
- package/src/client/whisper-settings.ts +0 -147
- package/src/engines/speaking/qwen-http.ts +0 -124
- /package/src/{core → modules/core}/filters.ts +0 -0
- /package/src/{core → modules/core}/microphone.ts +0 -0
- /package/src/{core → modules/core}/ownership.ts +0 -0
- /package/src/{core → modules/core}/transcript.ts +0 -0
- /package/src/{engines/recognition/browser.ts → modules/recognition/engines/browser/BrowserRecognitionEngine.ts} +0 -0
- /package/src/{engines/recognition/whisper-http-host.ts → modules/recognition/engines/whisper/whisperRecognitionHost.ts} +0 -0
- /package/src/{engines/speaking/browser.ts → modules/speak/engines/browser/BrowserSpeakingEngine.ts} +0 -0
- /package/src/{engines/speaking/say-client.ts → modules/speak/engines/say/sayClient.ts} +0 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import type { Translation } from '@wads.dev/i18n-ts';
|
|
2
|
+
|
|
3
|
+
export interface LiveVoiceTranslation extends Translation {
|
|
4
|
+
'dsh-live-voice.commons.connection.contactingHost': string;
|
|
5
|
+
'dsh-live-voice.commons.connection.endpoint': string;
|
|
6
|
+
'dsh-live-voice.commons.connection.healthEndpoint': string;
|
|
7
|
+
'dsh-live-voice.commons.connection.reload': string;
|
|
8
|
+
'dsh-live-voice.commons.connection.test': string;
|
|
9
|
+
'dsh-live-voice.commons.connection.timeout': string;
|
|
10
|
+
'dsh-live-voice.commons.connection.title': string;
|
|
11
|
+
'dsh-live-voice.commons.connection.unsaved': string;
|
|
12
|
+
'dsh-live-voice.commons.controls.title': string;
|
|
13
|
+
'dsh-live-voice.commons.conversation.end': string;
|
|
14
|
+
'dsh-live-voice.commons.conversation.idle': string;
|
|
15
|
+
'dsh-live-voice.commons.conversation.start': string;
|
|
16
|
+
'dsh-live-voice.commons.delivery.queueBadge': string;
|
|
17
|
+
'dsh-live-voice.commons.device.numberedLabel': string;
|
|
18
|
+
'dsh-live-voice.commons.dismiss': string;
|
|
19
|
+
'dsh-live-voice.commons.dismissError': string;
|
|
20
|
+
'dsh-live-voice.commons.engine.failure': string;
|
|
21
|
+
'dsh-live-voice.commons.input.ignoring': string;
|
|
22
|
+
'dsh-live-voice.commons.input.ignoringBadge': string;
|
|
23
|
+
'dsh-live-voice.commons.input.listening': string;
|
|
24
|
+
'dsh-live-voice.commons.input.listeningBadge': string;
|
|
25
|
+
'dsh-live-voice.commons.manual': string;
|
|
26
|
+
'dsh-live-voice.commons.off': string;
|
|
27
|
+
'dsh-live-voice.commons.on': string;
|
|
28
|
+
'dsh-live-voice.commons.pluginName': string;
|
|
29
|
+
'dsh-live-voice.commons.queue': string;
|
|
30
|
+
'dsh-live-voice.commons.repository.starLabel': string;
|
|
31
|
+
'dsh-live-voice.commons.repository.starLink': string;
|
|
32
|
+
'dsh-live-voice.commons.seconds': string;
|
|
33
|
+
'dsh-live-voice.commons.send': string;
|
|
34
|
+
'dsh-live-voice.commons.status.ready': string;
|
|
35
|
+
'dsh-live-voice.commons.systemDefault': string;
|
|
36
|
+
'dsh-live-voice.commons.toggle.offBadge': string;
|
|
37
|
+
'dsh-live-voice.commons.unknownLanguage': string;
|
|
38
|
+
'dsh-live-voice.commons.update.label': string;
|
|
39
|
+
'dsh-live-voice.commons.update.link': string;
|
|
40
|
+
'dsh-live-voice.commons.update.version': string;
|
|
41
|
+
'dsh-live-voice.commons.version.compatibility': string;
|
|
42
|
+
'dsh-live-voice.commons.version.compatibilityLink': string;
|
|
43
|
+
'dsh-live-voice.commons.version.label': string;
|
|
44
|
+
'dsh-live-voice.commons.version.link': string;
|
|
45
|
+
'dsh-live-voice.commons.version.title': string;
|
|
46
|
+
'dsh-live-voice.recognition.autoSend.countdownHelp': string;
|
|
47
|
+
'dsh-live-voice.recognition.browser.autoInstallPack': string;
|
|
48
|
+
'dsh-live-voice.recognition.browser.help': string;
|
|
49
|
+
'dsh-live-voice.recognition.browser.label': string;
|
|
50
|
+
'dsh-live-voice.recognition.browser.localProcessing': string;
|
|
51
|
+
'dsh-live-voice.recognition.browser.microphoneHelp': string;
|
|
52
|
+
'dsh-live-voice.recognition.browser.remoteServiceWarning': string;
|
|
53
|
+
'dsh-live-voice.recognition.commands.clear': string;
|
|
54
|
+
'dsh-live-voice.recognition.commands.enabled': string;
|
|
55
|
+
'dsh-live-voice.recognition.commands.mute': string;
|
|
56
|
+
'dsh-live-voice.recognition.commands.queue': string;
|
|
57
|
+
'dsh-live-voice.recognition.commands.resume': string;
|
|
58
|
+
'dsh-live-voice.recognition.commands.send': string;
|
|
59
|
+
'dsh-live-voice.recognition.commands.stopSpeech': string;
|
|
60
|
+
'dsh-live-voice.recognition.commands.title': string;
|
|
61
|
+
'dsh-live-voice.recognition.dictation.cancel': string;
|
|
62
|
+
'dsh-live-voice.recognition.engine.label': string;
|
|
63
|
+
'dsh-live-voice.recognition.headphoneMode.help': string;
|
|
64
|
+
'dsh-live-voice.recognition.headphoneMode.label': string;
|
|
65
|
+
'dsh-live-voice.recognition.holdToTalk.enabled': string;
|
|
66
|
+
'dsh-live-voice.recognition.holdToTalk.help': string;
|
|
67
|
+
'dsh-live-voice.recognition.language.automatic': string;
|
|
68
|
+
'dsh-live-voice.recognition.language.label': string;
|
|
69
|
+
'dsh-live-voice.recognition.manualSend.help': string;
|
|
70
|
+
'dsh-live-voice.recognition.maxUtterance.help': string;
|
|
71
|
+
'dsh-live-voice.recognition.maxUtterance.label': string;
|
|
72
|
+
'dsh-live-voice.recognition.microphone.checking': string;
|
|
73
|
+
'dsh-live-voice.recognition.microphone.device': string;
|
|
74
|
+
'dsh-live-voice.recognition.microphone.failure': string;
|
|
75
|
+
'dsh-live-voice.recognition.microphone.ignore': string;
|
|
76
|
+
'dsh-live-voice.recognition.microphone.inputStatus': string;
|
|
77
|
+
'dsh-live-voice.recognition.microphone.label': string;
|
|
78
|
+
'dsh-live-voice.recognition.microphone.permissionHelp': string;
|
|
79
|
+
'dsh-live-voice.recognition.microphone.resume': string;
|
|
80
|
+
'dsh-live-voice.recognition.microphone.starting': string;
|
|
81
|
+
'dsh-live-voice.recognition.microphone.takeControl': string;
|
|
82
|
+
'dsh-live-voice.recognition.minimumWords.enabled': string;
|
|
83
|
+
'dsh-live-voice.recognition.minimumWords.help': string;
|
|
84
|
+
'dsh-live-voice.recognition.minimumWords.label': string;
|
|
85
|
+
'dsh-live-voice.recognition.mode.label': string;
|
|
86
|
+
'dsh-live-voice.recognition.planned.parakeet': string;
|
|
87
|
+
'dsh-live-voice.recognition.planned.sherpa': string;
|
|
88
|
+
'dsh-live-voice.recognition.planned.vote': string;
|
|
89
|
+
'dsh-live-voice.recognition.planned.voxtral': string;
|
|
90
|
+
'dsh-live-voice.recognition.planned.webGpu': string;
|
|
91
|
+
'dsh-live-voice.recognition.presets.long.description': string;
|
|
92
|
+
'dsh-live-voice.recognition.presets.long.label': string;
|
|
93
|
+
'dsh-live-voice.recognition.presets.natural.description': string;
|
|
94
|
+
'dsh-live-voice.recognition.presets.natural.label': string;
|
|
95
|
+
'dsh-live-voice.recognition.presets.short.description': string;
|
|
96
|
+
'dsh-live-voice.recognition.presets.short.label': string;
|
|
97
|
+
'dsh-live-voice.recognition.providerSettings.help': string;
|
|
98
|
+
'dsh-live-voice.recognition.qwen.captureHelp': string;
|
|
99
|
+
'dsh-live-voice.recognition.qwen.connectionSuccess': string;
|
|
100
|
+
'dsh-live-voice.recognition.qwen.endpointHelp': string;
|
|
101
|
+
'dsh-live-voice.recognition.qwen.hostHelp': string;
|
|
102
|
+
'dsh-live-voice.recognition.qwen.label': string;
|
|
103
|
+
'dsh-live-voice.recognition.silenceDetection.duration': string;
|
|
104
|
+
'dsh-live-voice.recognition.silenceDetection.help': string;
|
|
105
|
+
'dsh-live-voice.recognition.silenceDetection.label': string;
|
|
106
|
+
'dsh-live-voice.recognition.silenceDetection.pauseLabel': string;
|
|
107
|
+
'dsh-live-voice.recognition.silenceDetection.title': string;
|
|
108
|
+
'dsh-live-voice.recognition.speakerMode.help': string;
|
|
109
|
+
'dsh-live-voice.recognition.speakerMode.label': string;
|
|
110
|
+
'dsh-live-voice.recognition.status.answer': string;
|
|
111
|
+
'dsh-live-voice.recognition.status.awaitingAnswer': string;
|
|
112
|
+
'dsh-live-voice.recognition.status.listening': string;
|
|
113
|
+
'dsh-live-voice.recognition.status.processing': string;
|
|
114
|
+
'dsh-live-voice.recognition.status.unavailable': string;
|
|
115
|
+
'dsh-live-voice.recognition.voiceCommands.help': string;
|
|
116
|
+
'dsh-live-voice.recognition.whisper.captureHelp': string;
|
|
117
|
+
'dsh-live-voice.recognition.whisper.connectionSuccess': string;
|
|
118
|
+
'dsh-live-voice.recognition.whisper.endpointHelp': string;
|
|
119
|
+
'dsh-live-voice.recognition.whisper.healthFailed': string;
|
|
120
|
+
'dsh-live-voice.recognition.whisper.label': string;
|
|
121
|
+
'dsh-live-voice.recognition.whisper.requestFailed': string;
|
|
122
|
+
'dsh-live-voice.recognition.whisper.restartRequired': string;
|
|
123
|
+
'dsh-live-voice.recognition.whisper.save': string;
|
|
124
|
+
'dsh-live-voice.recognition.whisper.saved': string;
|
|
125
|
+
'dsh-live-voice.recognition.whisper.signInRequired': string;
|
|
126
|
+
'dsh-live-voice.settings.autoSend.cancel': string;
|
|
127
|
+
'dsh-live-voice.settings.autoSend.countdown': string;
|
|
128
|
+
'dsh-live-voice.settings.autoSend.delay': string;
|
|
129
|
+
'dsh-live-voice.settings.close': string;
|
|
130
|
+
'dsh-live-voice.settings.delivery.label': string;
|
|
131
|
+
'dsh-live-voice.settings.delivery.manualLabel': string;
|
|
132
|
+
'dsh-live-voice.settings.delivery.queueLabel': string;
|
|
133
|
+
'dsh-live-voice.settings.delivery.status': string;
|
|
134
|
+
'dsh-live-voice.settings.delivery.steerDescription': string;
|
|
135
|
+
'dsh-live-voice.settings.delivery.steerLabel': string;
|
|
136
|
+
'dsh-live-voice.settings.delivery.toggle': string;
|
|
137
|
+
'dsh-live-voice.settings.engine.refresh': string;
|
|
138
|
+
'dsh-live-voice.settings.filters.title': string;
|
|
139
|
+
'dsh-live-voice.settings.tabs.conversation': string;
|
|
140
|
+
'dsh-live-voice.settings.tabs.recognition': string;
|
|
141
|
+
'dsh-live-voice.settings.tabs.speak': string;
|
|
142
|
+
'dsh-live-voice.settings.title': string;
|
|
143
|
+
'dsh-live-voice.settings.whisper.hostHelp': string;
|
|
144
|
+
'dsh-live-voice.speak.agentContext.enabled': string;
|
|
145
|
+
'dsh-live-voice.speak.agentContext.enabledHelp': string;
|
|
146
|
+
'dsh-live-voice.speak.agentContext.help': string;
|
|
147
|
+
'dsh-live-voice.speak.agentContext.label': string;
|
|
148
|
+
'dsh-live-voice.speak.agentContext.restore': string;
|
|
149
|
+
'dsh-live-voice.speak.autoPlayback.enabled': string;
|
|
150
|
+
'dsh-live-voice.speak.autoPlayback.help': string;
|
|
151
|
+
'dsh-live-voice.speak.autoPlayback.label': string;
|
|
152
|
+
'dsh-live-voice.speak.autoPlayback.remainingOne': string;
|
|
153
|
+
'dsh-live-voice.speak.autoPlayback.remainingOther': string;
|
|
154
|
+
'dsh-live-voice.speak.autoPlayback.status': string;
|
|
155
|
+
'dsh-live-voice.speak.browser.automaticVoice': string;
|
|
156
|
+
'dsh-live-voice.speak.browser.label': string;
|
|
157
|
+
'dsh-live-voice.speak.browser.name': string;
|
|
158
|
+
'dsh-live-voice.speak.browser.outputHelp': string;
|
|
159
|
+
'dsh-live-voice.speak.browser.voice': string;
|
|
160
|
+
'dsh-live-voice.speak.engine.label': string;
|
|
161
|
+
'dsh-live-voice.speak.engine.playbackHelp': string;
|
|
162
|
+
'dsh-live-voice.speak.filters.code.enabled': string;
|
|
163
|
+
'dsh-live-voice.speak.filters.code.maxLines': string;
|
|
164
|
+
'dsh-live-voice.speak.filters.code.notice': string;
|
|
165
|
+
'dsh-live-voice.speak.filters.code.replacement': string;
|
|
166
|
+
'dsh-live-voice.speak.interruption.disabledHelp': string;
|
|
167
|
+
'dsh-live-voice.speak.interruption.enabled': string;
|
|
168
|
+
'dsh-live-voice.speak.interruption.enabledHelp': string;
|
|
169
|
+
'dsh-live-voice.speak.macos.label': string;
|
|
170
|
+
'dsh-live-voice.speak.macos.name': string;
|
|
171
|
+
'dsh-live-voice.speak.macos.outputHelp': string;
|
|
172
|
+
'dsh-live-voice.speak.output.checking': string;
|
|
173
|
+
'dsh-live-voice.speak.output.device': string;
|
|
174
|
+
'dsh-live-voice.speak.output.fallbackName': string;
|
|
175
|
+
'dsh-live-voice.speak.output.stopTest': string;
|
|
176
|
+
'dsh-live-voice.speak.output.test': string;
|
|
177
|
+
'dsh-live-voice.speak.output.testPhrase': string;
|
|
178
|
+
'dsh-live-voice.speak.output.testing': string;
|
|
179
|
+
'dsh-live-voice.speak.playback.message': string;
|
|
180
|
+
'dsh-live-voice.speak.playback.next': string;
|
|
181
|
+
'dsh-live-voice.speak.playback.pause': string;
|
|
182
|
+
'dsh-live-voice.speak.playback.resume': string;
|
|
183
|
+
'dsh-live-voice.speak.playback.stop': string;
|
|
184
|
+
'dsh-live-voice.speak.playback.stopAll': string;
|
|
185
|
+
'dsh-live-voice.speak.qwen.connection': string;
|
|
186
|
+
'dsh-live-voice.speak.qwen.endpoint': string;
|
|
187
|
+
'dsh-live-voice.speak.qwen.healthFailed': string;
|
|
188
|
+
'dsh-live-voice.speak.qwen.label': string;
|
|
189
|
+
'dsh-live-voice.speak.qwen.name': string;
|
|
190
|
+
'dsh-live-voice.speak.qwen.requestFailed': string;
|
|
191
|
+
'dsh-live-voice.speak.qwen.restartRequired': string;
|
|
192
|
+
'dsh-live-voice.speak.qwen.save': string;
|
|
193
|
+
'dsh-live-voice.speak.qwen.saved': string;
|
|
194
|
+
'dsh-live-voice.speak.qwen.signInRequired': string;
|
|
195
|
+
'dsh-live-voice.speak.qwen.test': string;
|
|
196
|
+
'dsh-live-voice.speak.qwen.voice': string;
|
|
197
|
+
'dsh-live-voice.speak.qwen.voiceHelp': string;
|
|
198
|
+
'dsh-live-voice.speak.qwen.voices.aiden': string;
|
|
199
|
+
'dsh-live-voice.speak.qwen.voices.dylan': string;
|
|
200
|
+
'dsh-live-voice.speak.qwen.voices.eric': string;
|
|
201
|
+
'dsh-live-voice.speak.qwen.voices.onoAnna': string;
|
|
202
|
+
'dsh-live-voice.speak.qwen.voices.ryan': string;
|
|
203
|
+
'dsh-live-voice.speak.qwen.voices.serena': string;
|
|
204
|
+
'dsh-live-voice.speak.qwen.voices.sohee': string;
|
|
205
|
+
'dsh-live-voice.speak.qwen.voices.uncleFu': string;
|
|
206
|
+
'dsh-live-voice.speak.qwen.voices.vivian': string;
|
|
207
|
+
'dsh-live-voice.speak.rate.help': string;
|
|
208
|
+
'dsh-live-voice.speak.rate.label': string;
|
|
209
|
+
'dsh-live-voice.speak.responseDelay.help': string;
|
|
210
|
+
'dsh-live-voice.speak.responseDelay.label': string;
|
|
211
|
+
'dsh-live-voice.speak.segmentGap.help': string;
|
|
212
|
+
'dsh-live-voice.speak.segmentGap.label': string;
|
|
213
|
+
'dsh-live-voice.speak.status.paused': string;
|
|
214
|
+
'dsh-live-voice.speak.status.playing': string;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Exclude Translation's open index signature from valid plugin identifiers.
|
|
218
|
+
export type LiveVoiceKey = keyof {
|
|
219
|
+
[
|
|
220
|
+
K in keyof LiveVoiceTranslation as string extends K ? never : number extends K ? never : K
|
|
221
|
+
]: LiveVoiceTranslation[K];
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
export type LiveVoiceLocale = 'en' | 'zh' | 'pt-BR' | 'fr' | 'es' | 'hi';
|
|
225
|
+
|
|
226
|
+
export const liveVoiceLanguageDefinitions = Object.freeze([
|
|
227
|
+
{ id: 'pt-BR', label: 'Português (Brasil)', fallback: 'en' },
|
|
228
|
+
{ id: 'fr', label: 'Français', fallback: 'en' },
|
|
229
|
+
{ id: 'es', label: 'Español', fallback: 'en' },
|
|
230
|
+
{ id: 'hi', label: 'हिन्दी', fallback: 'en' },
|
|
231
|
+
]);
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import type { LiveVoiceTranslation } from './base.js';
|
|
2
|
+
|
|
3
|
+
const en: LiveVoiceTranslation = {
|
|
4
|
+
'dsh-live-voice.commons.connection.contactingHost': 'Contacting DSH host…',
|
|
5
|
+
'dsh-live-voice.commons.connection.endpoint': 'Endpoint URL',
|
|
6
|
+
'dsh-live-voice.commons.connection.healthEndpoint': 'Health URL or path',
|
|
7
|
+
'dsh-live-voice.commons.connection.reload': 'Reload saved settings',
|
|
8
|
+
'dsh-live-voice.commons.connection.test': 'Test connection',
|
|
9
|
+
'dsh-live-voice.commons.connection.timeout': 'Request timeout (ms)',
|
|
10
|
+
'dsh-live-voice.commons.connection.title': 'Connection settings',
|
|
11
|
+
'dsh-live-voice.commons.connection.unsaved': 'Unsaved changes',
|
|
12
|
+
'dsh-live-voice.commons.controls.title': 'Voice controls',
|
|
13
|
+
'dsh-live-voice.commons.conversation.end': 'End voice conversation',
|
|
14
|
+
'dsh-live-voice.commons.conversation.idle': 'Conversation idle',
|
|
15
|
+
'dsh-live-voice.commons.conversation.start': 'Start voice conversation',
|
|
16
|
+
'dsh-live-voice.commons.delivery.queueBadge': 'QUEUE',
|
|
17
|
+
'dsh-live-voice.commons.device.numberedLabel': '{device} {number}',
|
|
18
|
+
'dsh-live-voice.commons.dismiss': 'Dismiss',
|
|
19
|
+
'dsh-live-voice.commons.dismissError': 'Dismiss voice error',
|
|
20
|
+
'dsh-live-voice.commons.engine.failure': '{engine}: {reason}',
|
|
21
|
+
'dsh-live-voice.commons.input.ignoring': 'ignoring',
|
|
22
|
+
'dsh-live-voice.commons.input.ignoringBadge': 'IGNORING',
|
|
23
|
+
'dsh-live-voice.commons.input.listening': 'listening',
|
|
24
|
+
'dsh-live-voice.commons.input.listeningBadge': 'LISTENING',
|
|
25
|
+
'dsh-live-voice.commons.manual': 'manual',
|
|
26
|
+
'dsh-live-voice.commons.off': 'off',
|
|
27
|
+
'dsh-live-voice.commons.on': 'on',
|
|
28
|
+
'dsh-live-voice.commons.pluginName': 'Live Voice',
|
|
29
|
+
'dsh-live-voice.commons.queue': 'queue',
|
|
30
|
+
'dsh-live-voice.commons.repository.starLabel': 'Star Us on GitHub',
|
|
31
|
+
'dsh-live-voice.commons.repository.starLink': 'Star DSH Live Voice on GitHub',
|
|
32
|
+
'dsh-live-voice.commons.seconds': '{seconds} seconds',
|
|
33
|
+
'dsh-live-voice.commons.send': 'SEND',
|
|
34
|
+
'dsh-live-voice.commons.status.ready': 'Voice ready',
|
|
35
|
+
'dsh-live-voice.commons.systemDefault': 'System default',
|
|
36
|
+
'dsh-live-voice.commons.toggle.offBadge': 'OFF',
|
|
37
|
+
'dsh-live-voice.commons.unknownLanguage': 'unknown language',
|
|
38
|
+
'dsh-live-voice.commons.update.label': 'Update available',
|
|
39
|
+
'dsh-live-voice.commons.update.link': 'Update available: {version}. Open release',
|
|
40
|
+
'dsh-live-voice.commons.update.version': 'Update available: {version}',
|
|
41
|
+
'dsh-live-voice.commons.version.compatibility': 'Compatible with DSH v{version}',
|
|
42
|
+
'dsh-live-voice.commons.version.compatibilityLink':
|
|
43
|
+
'Compatible with DSH v{version}. Open release',
|
|
44
|
+
'dsh-live-voice.commons.version.label': 'DSH Live Voice v{version}',
|
|
45
|
+
'dsh-live-voice.commons.version.link': 'DSH Live Voice v{version}. Open releases',
|
|
46
|
+
'dsh-live-voice.commons.version.title': 'Version information',
|
|
47
|
+
'dsh-live-voice.recognition.autoSend.countdownHelp':
|
|
48
|
+
'Countdown starts after a final recognized phrase. New speech or edits cancel it.',
|
|
49
|
+
'dsh-live-voice.recognition.browser.autoInstallPack':
|
|
50
|
+
'Automatically install this browser language pack when needed',
|
|
51
|
+
'dsh-live-voice.recognition.browser.help':
|
|
52
|
+
'Uses the browser SpeechRecognition API. This is the default option.',
|
|
53
|
+
'dsh-live-voice.recognition.browser.label': 'Browser SpeechRecognition — Default option',
|
|
54
|
+
'dsh-live-voice.recognition.browser.localProcessing':
|
|
55
|
+
'Process recognition locally on this device',
|
|
56
|
+
'dsh-live-voice.recognition.browser.microphoneHelp':
|
|
57
|
+
'Browser SpeechRecognition may use the browser or system default microphone instead of this selection.',
|
|
58
|
+
'dsh-live-voice.recognition.browser.remoteServiceWarning':
|
|
59
|
+
'Browser-service recognition is enabled. The browser may send microphone audio to its recognition service.',
|
|
60
|
+
'dsh-live-voice.recognition.commands.clear': 'Clear composer',
|
|
61
|
+
'dsh-live-voice.recognition.commands.enabled': 'Enable exact voice commands',
|
|
62
|
+
'dsh-live-voice.recognition.commands.mute': 'Mute composer input',
|
|
63
|
+
'dsh-live-voice.recognition.commands.queue': 'Put in queue',
|
|
64
|
+
'dsh-live-voice.recognition.commands.resume': 'Resume composer input',
|
|
65
|
+
'dsh-live-voice.recognition.commands.send': 'Send to running agent',
|
|
66
|
+
'dsh-live-voice.recognition.commands.stopSpeech': 'Stop assistant speech',
|
|
67
|
+
'dsh-live-voice.recognition.commands.title': 'Voice commands',
|
|
68
|
+
'dsh-live-voice.recognition.dictation.cancel': 'Cancel dictation',
|
|
69
|
+
'dsh-live-voice.recognition.engine.label': 'Recognition engine',
|
|
70
|
+
'dsh-live-voice.recognition.headphoneMode.help':
|
|
71
|
+
'Open microphone keeps listening while responses play. When your speech is detected, playback pauses and resumes only when you choose.',
|
|
72
|
+
'dsh-live-voice.recognition.headphoneMode.label': 'Headphones — open microphone',
|
|
73
|
+
'dsh-live-voice.recognition.holdToTalk.enabled': 'Hold Control to talk',
|
|
74
|
+
'dsh-live-voice.recognition.holdToTalk.help':
|
|
75
|
+
'While a composer is open, hold Control anywhere on the page to capture speech. Release it to flush queued transcription, wait the configured send delay, queue the message, and close voice capture. Press Escape while holding to cancel.',
|
|
76
|
+
'dsh-live-voice.recognition.language.automatic': 'Automatic — detect language',
|
|
77
|
+
'dsh-live-voice.recognition.language.label': 'Recognition language',
|
|
78
|
+
'dsh-live-voice.recognition.manualSend.help':
|
|
79
|
+
'Recognized text stays in the composer until you use the normal DSH Send control.',
|
|
80
|
+
'dsh-live-voice.recognition.maxUtterance.help':
|
|
81
|
+
'If speech never pauses, start a new transcription chunk after this duration. Default: 60 seconds.',
|
|
82
|
+
'dsh-live-voice.recognition.maxUtterance.label': 'Maximum continuous speech (seconds)',
|
|
83
|
+
'dsh-live-voice.recognition.microphone.checking': 'Checking microphone availability',
|
|
84
|
+
'dsh-live-voice.recognition.microphone.device': 'Input device',
|
|
85
|
+
'dsh-live-voice.recognition.microphone.failure': 'Microphone: {reason}',
|
|
86
|
+
'dsh-live-voice.recognition.microphone.ignore': 'Ignore composer input',
|
|
87
|
+
'dsh-live-voice.recognition.microphone.inputStatus': 'Microphone input: {state}',
|
|
88
|
+
'dsh-live-voice.recognition.microphone.label': 'Microphone',
|
|
89
|
+
'dsh-live-voice.recognition.microphone.permissionHelp':
|
|
90
|
+
'Microphone permission will be requested only when you start dictation or a voice conversation.',
|
|
91
|
+
'dsh-live-voice.recognition.microphone.resume': 'Resume listening',
|
|
92
|
+
'dsh-live-voice.recognition.microphone.starting': 'Starting microphone…',
|
|
93
|
+
'dsh-live-voice.recognition.microphone.takeControl': 'Take microphone',
|
|
94
|
+
'dsh-live-voice.recognition.minimumWords.enabled': 'Ignore short final transcription chunks',
|
|
95
|
+
'dsh-live-voice.recognition.minimumWords.help':
|
|
96
|
+
'Final chunks with fewer words are ignored before they reach the composer or automatic delivery.',
|
|
97
|
+
'dsh-live-voice.recognition.minimumWords.label': 'Minimum words per final chunk',
|
|
98
|
+
'dsh-live-voice.recognition.mode.label': 'Listening mode',
|
|
99
|
+
'dsh-live-voice.recognition.planned.parakeet': 'NVIDIA Parakeet — Soon',
|
|
100
|
+
'dsh-live-voice.recognition.planned.sherpa': 'sherpa-onnx Streaming — Soon',
|
|
101
|
+
'dsh-live-voice.recognition.planned.vote': 'Coming Soon — vote on repo issues',
|
|
102
|
+
'dsh-live-voice.recognition.planned.voxtral': 'Voxtral Realtime — Soon',
|
|
103
|
+
'dsh-live-voice.recognition.planned.webGpu': 'Browser WebGPU Inference — Soon',
|
|
104
|
+
'dsh-live-voice.recognition.presets.long.description': 'Wait through longer thinking pauses.',
|
|
105
|
+
'dsh-live-voice.recognition.presets.long.label': 'Long',
|
|
106
|
+
'dsh-live-voice.recognition.presets.natural.description': 'Allow normal pauses between phrases.',
|
|
107
|
+
'dsh-live-voice.recognition.presets.natural.label': 'Natural',
|
|
108
|
+
'dsh-live-voice.recognition.presets.short.description': 'Send quickly after a short pause.',
|
|
109
|
+
'dsh-live-voice.recognition.presets.short.label': 'Short',
|
|
110
|
+
'dsh-live-voice.recognition.providerSettings.help':
|
|
111
|
+
'Provider settings change with the selected recognition engine.',
|
|
112
|
+
'dsh-live-voice.recognition.qwen.captureHelp':
|
|
113
|
+
'Audio is segmented into complete WAV utterances and sent through authenticated DSH to the host-local Qwen3 ASR model.',
|
|
114
|
+
'dsh-live-voice.recognition.qwen.connectionSuccess':
|
|
115
|
+
'Connection successful. Both Qwen ASR and TTS are loaded. Unsaved edits have not been applied.',
|
|
116
|
+
'dsh-live-voice.recognition.qwen.endpointHelp':
|
|
117
|
+
'HTTP API at the configured DSH host URL (default: http://127.0.0.1:8080/inference). Audio uses the authenticated DSH host transcription route.',
|
|
118
|
+
'dsh-live-voice.recognition.qwen.hostHelp':
|
|
119
|
+
'Host-wide settings for the Qwen3 ASR + TTS server. Enter any HTTP or HTTPS base URL reachable from the DSH host. The browser accesses it through authenticated DSH routes.',
|
|
120
|
+
'dsh-live-voice.recognition.qwen.label': 'Qwen3 ASR — HTTP API',
|
|
121
|
+
'dsh-live-voice.recognition.silenceDetection.duration': 'Pause before sending: {milliseconds} ms',
|
|
122
|
+
'dsh-live-voice.recognition.silenceDetection.help':
|
|
123
|
+
'Controls how long a pause must last before captured speech is sent for recognition.',
|
|
124
|
+
'dsh-live-voice.recognition.silenceDetection.label': 'Silence detection',
|
|
125
|
+
'dsh-live-voice.recognition.silenceDetection.pauseLabel': 'Pause before sending',
|
|
126
|
+
'dsh-live-voice.recognition.silenceDetection.title': 'Silence detection settings',
|
|
127
|
+
'dsh-live-voice.recognition.speakerMode.help':
|
|
128
|
+
'Gated listening releases the microphone while responses play, preventing speaker audio from being recognized. Use Take microphone to interrupt.',
|
|
129
|
+
'dsh-live-voice.recognition.speakerMode.label': 'Speakers — gated listening',
|
|
130
|
+
'dsh-live-voice.recognition.status.answer': 'Recognizing answer…',
|
|
131
|
+
'dsh-live-voice.recognition.status.awaitingAnswer': 'Listening for your answer…',
|
|
132
|
+
'dsh-live-voice.recognition.status.listening': 'Listening — waiting for speech',
|
|
133
|
+
'dsh-live-voice.recognition.status.processing': 'Recognizing speech…',
|
|
134
|
+
'dsh-live-voice.recognition.status.unavailable': 'Speech recognition unavailable',
|
|
135
|
+
'dsh-live-voice.recognition.voiceCommands.help':
|
|
136
|
+
'Separate phrases with commas. Matching ignores capitalization, accents, punctuation, and extra spaces. The entire final chunk must match.',
|
|
137
|
+
'dsh-live-voice.recognition.whisper.captureHelp':
|
|
138
|
+
'Audio is segmented into complete WAV utterances, sent through authenticated DSH, and processed by loopback whisper.cpp HTTP.',
|
|
139
|
+
'dsh-live-voice.recognition.whisper.connectionSuccess':
|
|
140
|
+
'Connection successful. Health endpoint responded; transcription was not tested. Unsaved edits have not been applied.',
|
|
141
|
+
'dsh-live-voice.recognition.whisper.endpointHelp':
|
|
142
|
+
'HTTP API at the configured base URL (default: http://127.0.0.1:8080/). Compatible with POST /v1/audio/transcriptions.',
|
|
143
|
+
'dsh-live-voice.recognition.whisper.healthFailed': 'Whisper health check failed.',
|
|
144
|
+
'dsh-live-voice.recognition.whisper.label': 'Whisper — HTTP API',
|
|
145
|
+
'dsh-live-voice.recognition.whisper.requestFailed': 'Whisper settings request failed.',
|
|
146
|
+
'dsh-live-voice.recognition.whisper.restartRequired':
|
|
147
|
+
'Whisper settings routes are not loaded. A normal DSH server restart is required to load updated plugin routes; refreshing this page alone is not enough.',
|
|
148
|
+
'dsh-live-voice.recognition.whisper.save': 'Save Whisper settings',
|
|
149
|
+
'dsh-live-voice.recognition.whisper.saved':
|
|
150
|
+
'Saved on the DSH host. Active host transcription requests were cancelled.',
|
|
151
|
+
'dsh-live-voice.recognition.whisper.signInRequired': 'Sign in to DSH to manage Whisper settings.',
|
|
152
|
+
'dsh-live-voice.settings.autoSend.cancel': 'Cancel automatic send',
|
|
153
|
+
'dsh-live-voice.settings.autoSend.countdown': 'Sending in {remaining}…',
|
|
154
|
+
'dsh-live-voice.settings.autoSend.delay': 'Send after silence',
|
|
155
|
+
'dsh-live-voice.settings.close': 'Close voice settings',
|
|
156
|
+
'dsh-live-voice.settings.delivery.label': 'Sending mode',
|
|
157
|
+
'dsh-live-voice.settings.delivery.manualLabel': 'Off — review and send manually',
|
|
158
|
+
'dsh-live-voice.settings.delivery.queueLabel': 'Queue — automatically add after silence',
|
|
159
|
+
'dsh-live-voice.settings.delivery.status': 'Automatic delivery: {mode}',
|
|
160
|
+
'dsh-live-voice.settings.delivery.steerDescription': 'send to the running agent',
|
|
161
|
+
'dsh-live-voice.settings.delivery.steerLabel': 'Steer — automatically send to the running agent',
|
|
162
|
+
'dsh-live-voice.settings.delivery.toggle': 'Automatic delivery mode',
|
|
163
|
+
'dsh-live-voice.settings.engine.refresh': 'Refresh available engines',
|
|
164
|
+
'dsh-live-voice.settings.filters.title': 'Filtering',
|
|
165
|
+
'dsh-live-voice.settings.tabs.conversation': 'Conversation',
|
|
166
|
+
'dsh-live-voice.settings.tabs.recognition': 'Speech recognition',
|
|
167
|
+
'dsh-live-voice.settings.tabs.speak': 'Speech',
|
|
168
|
+
'dsh-live-voice.settings.title': 'Live Voice settings',
|
|
169
|
+
'dsh-live-voice.settings.whisper.hostHelp':
|
|
170
|
+
'Host-wide settings. Only unauthenticated loopback HTTP URLs (localhost, 127.0.0.1, [::1]) are allowed. Loopback means the DSH host, not this browser. All health checks and audio requests run through the authenticated backend.',
|
|
171
|
+
'dsh-live-voice.speak.agentContext.enabled': 'Enable agent voice context',
|
|
172
|
+
'dsh-live-voice.speak.agentContext.enabledHelp':
|
|
173
|
+
'When enabled, the context below tells the agent that its responses will be spoken aloud.',
|
|
174
|
+
'dsh-live-voice.speak.agentContext.help':
|
|
175
|
+
'This English instruction is sent to the agent only during an active voice conversation with automatic assistant speech enabled.',
|
|
176
|
+
'dsh-live-voice.speak.agentContext.label': 'Agent voice context',
|
|
177
|
+
'dsh-live-voice.speak.agentContext.restore': 'Restore default',
|
|
178
|
+
'dsh-live-voice.speak.autoPlayback.enabled': 'Automatically speak new assistant messages',
|
|
179
|
+
'dsh-live-voice.speak.autoPlayback.help':
|
|
180
|
+
'During a voice conversation, assistant phrases are announced automatically. Playback waits while you are speaking.',
|
|
181
|
+
'dsh-live-voice.speak.autoPlayback.label': 'Automatic assistant speech',
|
|
182
|
+
'dsh-live-voice.speak.autoPlayback.remainingOne':
|
|
183
|
+
'Automatic assistant speech: {state} — {count} speech segment remaining',
|
|
184
|
+
'dsh-live-voice.speak.autoPlayback.remainingOther':
|
|
185
|
+
'Automatic assistant speech: {state} — {count} speech segments remaining',
|
|
186
|
+
'dsh-live-voice.speak.autoPlayback.status': 'Automatic assistant speech: {state}',
|
|
187
|
+
'dsh-live-voice.speak.browser.automaticVoice': 'Automatic local voice',
|
|
188
|
+
'dsh-live-voice.speak.browser.label': 'Browser speech — device audio',
|
|
189
|
+
'dsh-live-voice.speak.browser.name': 'Browser speech',
|
|
190
|
+
'dsh-live-voice.speak.browser.outputHelp':
|
|
191
|
+
'Browser speech synthesis may ignore the selected output device; this browser API normally follows the system default.',
|
|
192
|
+
'dsh-live-voice.speak.browser.voice': 'Local browser voice',
|
|
193
|
+
'dsh-live-voice.speak.engine.label': 'Speech engine',
|
|
194
|
+
'dsh-live-voice.speak.engine.playbackHelp':
|
|
195
|
+
'Qwen and macOS say synthesize on the DSH host; compact AAC/M4A audio plays in this browser. Browser speech synthesizes and plays on this device.',
|
|
196
|
+
'dsh-live-voice.speak.filters.code.enabled': 'Filter Markdown code blocks before speaking',
|
|
197
|
+
'dsh-live-voice.speak.filters.code.maxLines': 'Read code blocks up to this many lines',
|
|
198
|
+
'dsh-live-voice.speak.filters.code.notice': 'Look at the code in our conversation',
|
|
199
|
+
'dsh-live-voice.speak.filters.code.replacement': 'Replacement phrase for larger code blocks',
|
|
200
|
+
'dsh-live-voice.speak.interruption.disabledHelp':
|
|
201
|
+
'Sending another message does not stop the assistant audio you are already hearing.',
|
|
202
|
+
'dsh-live-voice.speak.interruption.enabled': 'Stop assistant speech when I send a message',
|
|
203
|
+
'dsh-live-voice.speak.interruption.enabledHelp':
|
|
204
|
+
'Sending or steering a new user message stops current or paused assistant speech.',
|
|
205
|
+
'dsh-live-voice.speak.macos.label': 'macOS say — host audio',
|
|
206
|
+
'dsh-live-voice.speak.macos.name': 'macOS say',
|
|
207
|
+
'dsh-live-voice.speak.macos.outputHelp': 'macOS say uses the output selected on the DSH host.',
|
|
208
|
+
'dsh-live-voice.speak.output.checking': 'Checking speech output…',
|
|
209
|
+
'dsh-live-voice.speak.output.device': 'Output device',
|
|
210
|
+
'dsh-live-voice.speak.output.fallbackName': 'Audio output',
|
|
211
|
+
'dsh-live-voice.speak.output.stopTest': 'Stop speech test',
|
|
212
|
+
'dsh-live-voice.speak.output.test': 'Test selected speech output',
|
|
213
|
+
'dsh-live-voice.speak.output.testPhrase':
|
|
214
|
+
'DSH Live Voice. The selected speech output is working.',
|
|
215
|
+
'dsh-live-voice.speak.output.testing': 'Testing speech…',
|
|
216
|
+
'dsh-live-voice.speak.playback.message': 'Speak message',
|
|
217
|
+
'dsh-live-voice.speak.playback.next': 'Skip to next speech segment',
|
|
218
|
+
'dsh-live-voice.speak.playback.pause': 'Pause speech',
|
|
219
|
+
'dsh-live-voice.speak.playback.resume': 'Resume speech',
|
|
220
|
+
'dsh-live-voice.speak.playback.stop': 'Stop speaking',
|
|
221
|
+
'dsh-live-voice.speak.playback.stopAll': 'Stop all speech',
|
|
222
|
+
'dsh-live-voice.speak.qwen.connection': 'Qwen server connection',
|
|
223
|
+
'dsh-live-voice.speak.qwen.endpoint': 'Qwen API base URL',
|
|
224
|
+
'dsh-live-voice.speak.qwen.healthFailed': 'Qwen health check failed.',
|
|
225
|
+
'dsh-live-voice.speak.qwen.label': 'Qwen3 TTS — local MLX server',
|
|
226
|
+
'dsh-live-voice.speak.qwen.name': 'Qwen3 local',
|
|
227
|
+
'dsh-live-voice.speak.qwen.requestFailed': 'Qwen settings request failed.',
|
|
228
|
+
'dsh-live-voice.speak.qwen.restartRequired':
|
|
229
|
+
'Qwen settings routes are not loaded. A normal DSH server restart is required to load updated plugin routes; refreshing this page alone is not enough.',
|
|
230
|
+
'dsh-live-voice.speak.qwen.save': 'Save Qwen settings',
|
|
231
|
+
'dsh-live-voice.speak.qwen.saved': 'Saved on the DSH host. Active Qwen requests were cancelled.',
|
|
232
|
+
'dsh-live-voice.speak.qwen.signInRequired': 'Sign in to DSH to manage Qwen settings.',
|
|
233
|
+
'dsh-live-voice.speak.qwen.test': 'Test Qwen server',
|
|
234
|
+
'dsh-live-voice.speak.qwen.voice': 'Qwen voice',
|
|
235
|
+
'dsh-live-voice.speak.qwen.voiceHelp':
|
|
236
|
+
'Aiden is used by default. These preset voices are not native Brazilian Portuguese voices.',
|
|
237
|
+
'dsh-live-voice.speak.qwen.voices.aiden': 'Aiden — male, American English',
|
|
238
|
+
'dsh-live-voice.speak.qwen.voices.dylan': 'Dylan — male, Beijing Chinese',
|
|
239
|
+
'dsh-live-voice.speak.qwen.voices.eric': 'Eric — male, Sichuan Chinese',
|
|
240
|
+
'dsh-live-voice.speak.qwen.voices.onoAnna': 'Ono Anna — female, Japanese',
|
|
241
|
+
'dsh-live-voice.speak.qwen.voices.ryan': 'Ryan — male, English',
|
|
242
|
+
'dsh-live-voice.speak.qwen.voices.serena': 'Serena — female, Chinese',
|
|
243
|
+
'dsh-live-voice.speak.qwen.voices.sohee': 'Sohee — female, Korean',
|
|
244
|
+
'dsh-live-voice.speak.qwen.voices.uncleFu': 'Uncle Fu — male, Chinese',
|
|
245
|
+
'dsh-live-voice.speak.qwen.voices.vivian': 'Vivian — female, Chinese',
|
|
246
|
+
'dsh-live-voice.speak.rate.help': 'Relative speed: 1 is normal.',
|
|
247
|
+
'dsh-live-voice.speak.rate.label': 'Speech rate',
|
|
248
|
+
'dsh-live-voice.speak.responseDelay.help':
|
|
249
|
+
'After you stop speaking, automatic assistant playback waits for this much continuous silence. Speaking again restarts the wait.',
|
|
250
|
+
'dsh-live-voice.speak.responseDelay.label': 'Assistant response delay',
|
|
251
|
+
'dsh-live-voice.speak.segmentGap.help':
|
|
252
|
+
'Wait this many milliseconds between consecutive spoken segments. 400 ms is the default.',
|
|
253
|
+
'dsh-live-voice.speak.segmentGap.label': 'Pause between speech segments',
|
|
254
|
+
'dsh-live-voice.speak.status.paused': 'Speech paused',
|
|
255
|
+
'dsh-live-voice.speak.status.playing': 'Speaking',
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
export default Object.freeze(en);
|