@framers/agentos 0.1.74 → 0.1.76

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.
Files changed (138) hide show
  1. package/README.md +139 -34
  2. package/dist/core/agency/AgentCommunicationBus.d.ts +1 -0
  3. package/dist/core/agency/AgentCommunicationBus.d.ts.map +1 -1
  4. package/dist/core/agency/AgentCommunicationBus.js +62 -8
  5. package/dist/core/agency/AgentCommunicationBus.js.map +1 -1
  6. package/dist/core/agency/IAgentCommunicationBus.d.ts +1 -1
  7. package/dist/core/agency/IAgentCommunicationBus.d.ts.map +1 -1
  8. package/dist/orchestration/builders/index.d.ts +1 -1
  9. package/dist/orchestration/builders/index.d.ts.map +1 -1
  10. package/dist/orchestration/builders/index.js +1 -1
  11. package/dist/orchestration/builders/index.js.map +1 -1
  12. package/dist/orchestration/builders/nodes.d.ts +15 -0
  13. package/dist/orchestration/builders/nodes.d.ts.map +1 -1
  14. package/dist/orchestration/builders/nodes.js +33 -0
  15. package/dist/orchestration/builders/nodes.js.map +1 -1
  16. package/dist/orchestration/runtime/LoopController.d.ts +10 -10
  17. package/dist/orchestration/runtime/LoopController.d.ts.map +1 -1
  18. package/dist/orchestration/runtime/LoopController.js +1 -1
  19. package/dist/orchestration/runtime/LoopController.js.map +1 -1
  20. package/dist/orchestration/runtime/index.d.ts +1 -1
  21. package/dist/orchestration/runtime/index.d.ts.map +1 -1
  22. package/dist/orchestration/runtime/index.js.map +1 -1
  23. package/dist/speech/FallbackProxy.d.ts +104 -0
  24. package/dist/speech/FallbackProxy.d.ts.map +1 -0
  25. package/dist/speech/FallbackProxy.js +151 -0
  26. package/dist/speech/FallbackProxy.js.map +1 -0
  27. package/dist/speech/SpeechProviderResolver.d.ts +103 -0
  28. package/dist/speech/SpeechProviderResolver.d.ts.map +1 -0
  29. package/dist/speech/SpeechProviderResolver.js +256 -0
  30. package/dist/speech/SpeechProviderResolver.js.map +1 -0
  31. package/dist/speech/SpeechRuntime.d.ts +23 -1
  32. package/dist/speech/SpeechRuntime.d.ts.map +1 -1
  33. package/dist/speech/SpeechRuntime.js +82 -8
  34. package/dist/speech/SpeechRuntime.js.map +1 -1
  35. package/dist/speech/index.d.ts +6 -0
  36. package/dist/speech/index.d.ts.map +1 -1
  37. package/dist/speech/index.js +6 -0
  38. package/dist/speech/index.js.map +1 -1
  39. package/dist/speech/providerCatalog.d.ts.map +1 -1
  40. package/dist/speech/providerCatalog.js +15 -1
  41. package/dist/speech/providerCatalog.js.map +1 -1
  42. package/dist/speech/providers/AssemblyAISTTProvider.d.ts +49 -0
  43. package/dist/speech/providers/AssemblyAISTTProvider.d.ts.map +1 -0
  44. package/dist/speech/providers/AssemblyAISTTProvider.js +151 -0
  45. package/dist/speech/providers/AssemblyAISTTProvider.js.map +1 -0
  46. package/dist/speech/providers/AzureSpeechSTTProvider.d.ts +48 -0
  47. package/dist/speech/providers/AzureSpeechSTTProvider.d.ts.map +1 -0
  48. package/dist/speech/providers/AzureSpeechSTTProvider.js +90 -0
  49. package/dist/speech/providers/AzureSpeechSTTProvider.js.map +1 -0
  50. package/dist/speech/providers/AzureSpeechTTSProvider.d.ts +60 -0
  51. package/dist/speech/providers/AzureSpeechTTSProvider.d.ts.map +1 -0
  52. package/dist/speech/providers/AzureSpeechTTSProvider.js +127 -0
  53. package/dist/speech/providers/AzureSpeechTTSProvider.js.map +1 -0
  54. package/dist/speech/providers/DeepgramBatchSTTProvider.d.ts +55 -0
  55. package/dist/speech/providers/DeepgramBatchSTTProvider.d.ts.map +1 -0
  56. package/dist/speech/providers/DeepgramBatchSTTProvider.js +102 -0
  57. package/dist/speech/providers/DeepgramBatchSTTProvider.js.map +1 -0
  58. package/dist/speech/types.d.ts +35 -0
  59. package/dist/speech/types.d.ts.map +1 -1
  60. package/dist/voice/CallManager.d.ts +1 -1
  61. package/dist/voice/CallManager.d.ts.map +1 -1
  62. package/dist/voice/CallManager.js +9 -0
  63. package/dist/voice/CallManager.js.map +1 -1
  64. package/dist/voice/MediaStreamParser.d.ts +83 -0
  65. package/dist/voice/MediaStreamParser.d.ts.map +1 -0
  66. package/dist/voice/MediaStreamParser.js +2 -0
  67. package/dist/voice/MediaStreamParser.js.map +1 -0
  68. package/dist/voice/TelephonyStreamTransport.d.ts +112 -0
  69. package/dist/voice/TelephonyStreamTransport.d.ts.map +1 -0
  70. package/dist/voice/TelephonyStreamTransport.js +208 -0
  71. package/dist/voice/TelephonyStreamTransport.js.map +1 -0
  72. package/dist/voice/index.d.ts +10 -0
  73. package/dist/voice/index.d.ts.map +1 -1
  74. package/dist/voice/index.js +11 -0
  75. package/dist/voice/index.js.map +1 -1
  76. package/dist/voice/parsers/PlivoMediaStreamParser.d.ts +43 -0
  77. package/dist/voice/parsers/PlivoMediaStreamParser.d.ts.map +1 -0
  78. package/dist/voice/parsers/PlivoMediaStreamParser.js +92 -0
  79. package/dist/voice/parsers/PlivoMediaStreamParser.js.map +1 -0
  80. package/dist/voice/parsers/TelnyxMediaStreamParser.d.ts +51 -0
  81. package/dist/voice/parsers/TelnyxMediaStreamParser.d.ts.map +1 -0
  82. package/dist/voice/parsers/TelnyxMediaStreamParser.js +103 -0
  83. package/dist/voice/parsers/TelnyxMediaStreamParser.js.map +1 -0
  84. package/dist/voice/parsers/TwilioMediaStreamParser.d.ts +50 -0
  85. package/dist/voice/parsers/TwilioMediaStreamParser.d.ts.map +1 -0
  86. package/dist/voice/parsers/TwilioMediaStreamParser.js +144 -0
  87. package/dist/voice/parsers/TwilioMediaStreamParser.js.map +1 -0
  88. package/dist/voice/providers/plivo.d.ts +77 -0
  89. package/dist/voice/providers/plivo.d.ts.map +1 -0
  90. package/dist/voice/providers/plivo.js +180 -0
  91. package/dist/voice/providers/plivo.js.map +1 -0
  92. package/dist/voice/providers/telnyx.d.ts +93 -0
  93. package/dist/voice/providers/telnyx.d.ts.map +1 -0
  94. package/dist/voice/providers/telnyx.js +193 -0
  95. package/dist/voice/providers/telnyx.js.map +1 -0
  96. package/dist/voice/providers/twilio.d.ts +79 -0
  97. package/dist/voice/providers/twilio.d.ts.map +1 -0
  98. package/dist/voice/providers/twilio.js +191 -0
  99. package/dist/voice/providers/twilio.js.map +1 -0
  100. package/dist/voice/twiml.d.ts +69 -0
  101. package/dist/voice/twiml.d.ts.map +1 -0
  102. package/dist/voice/twiml.js +92 -0
  103. package/dist/voice/twiml.js.map +1 -0
  104. package/dist/voice/types.d.ts +9 -1
  105. package/dist/voice/types.d.ts.map +1 -1
  106. package/dist/voice-pipeline/AcousticEndpointDetector.d.ts +90 -0
  107. package/dist/voice-pipeline/AcousticEndpointDetector.d.ts.map +1 -0
  108. package/dist/voice-pipeline/AcousticEndpointDetector.js +123 -0
  109. package/dist/voice-pipeline/AcousticEndpointDetector.js.map +1 -0
  110. package/dist/voice-pipeline/HardCutBargeinHandler.d.ts +67 -0
  111. package/dist/voice-pipeline/HardCutBargeinHandler.d.ts.map +1 -0
  112. package/dist/voice-pipeline/HardCutBargeinHandler.js +55 -0
  113. package/dist/voice-pipeline/HardCutBargeinHandler.js.map +1 -0
  114. package/dist/voice-pipeline/HeuristicEndpointDetector.d.ts +128 -0
  115. package/dist/voice-pipeline/HeuristicEndpointDetector.d.ts.map +1 -0
  116. package/dist/voice-pipeline/HeuristicEndpointDetector.js +240 -0
  117. package/dist/voice-pipeline/HeuristicEndpointDetector.js.map +1 -0
  118. package/dist/voice-pipeline/SoftFadeBargeinHandler.d.ts +96 -0
  119. package/dist/voice-pipeline/SoftFadeBargeinHandler.d.ts.map +1 -0
  120. package/dist/voice-pipeline/SoftFadeBargeinHandler.js +69 -0
  121. package/dist/voice-pipeline/SoftFadeBargeinHandler.js.map +1 -0
  122. package/dist/voice-pipeline/VoicePipelineOrchestrator.d.ts +122 -0
  123. package/dist/voice-pipeline/VoicePipelineOrchestrator.d.ts.map +1 -0
  124. package/dist/voice-pipeline/VoicePipelineOrchestrator.js +317 -0
  125. package/dist/voice-pipeline/VoicePipelineOrchestrator.js.map +1 -0
  126. package/dist/voice-pipeline/WebSocketStreamTransport.d.ts +148 -0
  127. package/dist/voice-pipeline/WebSocketStreamTransport.d.ts.map +1 -0
  128. package/dist/voice-pipeline/WebSocketStreamTransport.js +207 -0
  129. package/dist/voice-pipeline/WebSocketStreamTransport.js.map +1 -0
  130. package/dist/voice-pipeline/index.d.ts +13 -0
  131. package/dist/voice-pipeline/index.d.ts.map +1 -0
  132. package/dist/voice-pipeline/index.js +13 -0
  133. package/dist/voice-pipeline/index.js.map +1 -0
  134. package/dist/voice-pipeline/types.d.ts +905 -0
  135. package/dist/voice-pipeline/types.d.ts.map +1 -0
  136. package/dist/voice-pipeline/types.js +23 -0
  137. package/dist/voice-pipeline/types.js.map +1 -0
  138. package/package.json +6 -1
@@ -0,0 +1,256 @@
1
+ import { EventEmitter } from 'events';
2
+ import { FallbackSTTProxy, FallbackTTSProxy } from './FallbackProxy.js';
3
+ import { findSpeechProviderCatalogEntry } from './providerCatalog.js';
4
+ /**
5
+ * Central resolver for speech providers (STT, TTS, VAD, wake-word).
6
+ *
7
+ * Providers are registered with a kind, priority, and catalog metadata.
8
+ * Resolution filters by `isConfigured`, applies {@link ProviderRequirements},
9
+ * and optionally wraps multiple candidates in a {@link FallbackSTTProxy} or
10
+ * {@link FallbackTTSProxy} when fallback mode is enabled in the config.
11
+ *
12
+ * Emits:
13
+ * - `provider_registered` — when a new provider is registered via {@link register}.
14
+ */
15
+ export class SpeechProviderResolver extends EventEmitter {
16
+ /**
17
+ * @param config Optional resolver configuration (preferred providers, fallback mode).
18
+ * @param env Environment variable map used to check provider availability.
19
+ */
20
+ constructor(config, env = process.env) {
21
+ super();
22
+ this.config = config;
23
+ this.env = env;
24
+ /** All registered providers keyed by id. */
25
+ this.registrations = new Map();
26
+ }
27
+ /**
28
+ * Register a provider. Overwrites any existing registration with the same id.
29
+ * Emits a `provider_registered` event with `{ id, kind, source }`.
30
+ */
31
+ register(reg) {
32
+ this.registrations.set(reg.id, reg);
33
+ this.emit('provider_registered', { id: reg.id, kind: reg.kind, source: reg.source });
34
+ }
35
+ /**
36
+ * List all registrations for a given kind, sorted ascending by priority
37
+ * (lower number = higher priority).
38
+ */
39
+ listProviders(kind) {
40
+ return [...this.registrations.values()]
41
+ .filter((r) => r.kind === kind)
42
+ .sort((a, b) => a.priority - b.priority);
43
+ }
44
+ /**
45
+ * Resolve the best STT provider matching optional {@link ProviderRequirements}.
46
+ *
47
+ * When `config.stt.fallback` is true and multiple candidates exist, wraps them
48
+ * in a {@link FallbackSTTProxy}. Otherwise returns the single best match.
49
+ *
50
+ * @throws When no configured STT provider matches requirements.
51
+ */
52
+ resolveSTT(requirements) {
53
+ const candidates = this.resolveByKind('stt', requirements);
54
+ if (candidates.length === 0) {
55
+ throw new Error('No configured STT provider matches requirements');
56
+ }
57
+ if (this.config?.stt?.fallback && candidates.length > 1) {
58
+ return new FallbackSTTProxy(candidates.map((r) => r.provider), this);
59
+ }
60
+ return candidates[0].provider;
61
+ }
62
+ /**
63
+ * Resolve the best TTS provider matching optional {@link ProviderRequirements}.
64
+ *
65
+ * When `config.tts.fallback` is true and multiple candidates exist, wraps them
66
+ * in a {@link FallbackTTSProxy}. Otherwise returns the single best match.
67
+ *
68
+ * @throws When no configured TTS provider matches requirements.
69
+ */
70
+ resolveTTS(requirements) {
71
+ const candidates = this.resolveByKind('tts', requirements);
72
+ if (candidates.length === 0) {
73
+ throw new Error('No configured TTS provider matches requirements');
74
+ }
75
+ if (this.config?.tts?.fallback && candidates.length > 1) {
76
+ return new FallbackTTSProxy(candidates.map((r) => r.provider), this);
77
+ }
78
+ return candidates[0].provider;
79
+ }
80
+ /**
81
+ * Resolve the highest-priority configured VAD provider.
82
+ *
83
+ * @throws When no VAD provider is registered and configured.
84
+ */
85
+ resolveVAD() {
86
+ const vads = this.listProviders('vad').filter((r) => r.isConfigured);
87
+ if (vads.length === 0) {
88
+ throw new Error('No VAD provider registered');
89
+ }
90
+ return vads[0].provider;
91
+ }
92
+ /**
93
+ * Resolve the highest-priority configured wake-word provider, or `null`
94
+ * when none is registered.
95
+ */
96
+ resolveWakeWord() {
97
+ const wakeWords = this.listProviders('wake-word').filter((r) => r.isConfigured);
98
+ return wakeWords.length > 0 ? wakeWords[0].provider : null;
99
+ }
100
+ // ---------------------------------------------------------------------------
101
+ // Bulk registration helpers
102
+ // ---------------------------------------------------------------------------
103
+ /**
104
+ * Register core providers from the static catalog and optionally discover
105
+ * extension providers from an ExtensionManager-like object. Also applies
106
+ * user-configured preferred priorities afterwards.
107
+ *
108
+ * @param extensionManager Optional object exposing `getDescriptorsByKind(kind)`.
109
+ */
110
+ async refresh(extensionManager) {
111
+ this.registerCoreProviders();
112
+ if (extensionManager) {
113
+ this.discoverExtensionProviders(extensionManager);
114
+ }
115
+ this.applyPreferredPriorities();
116
+ }
117
+ // ---------------------------------------------------------------------------
118
+ // Private helpers
119
+ // ---------------------------------------------------------------------------
120
+ /**
121
+ * Core resolution algorithm shared by {@link resolveSTT} and {@link resolveTTS}.
122
+ *
123
+ * When `requirements.preferredIds` is provided, returns matches in that order.
124
+ * Otherwise returns all configured providers matching requirements, sorted by
125
+ * priority (ascending).
126
+ */
127
+ resolveByKind(kind, requirements) {
128
+ if (requirements?.preferredIds?.length) {
129
+ const results = [];
130
+ for (const id of requirements.preferredIds) {
131
+ const reg = this.registrations.get(id);
132
+ if (reg && reg.kind === kind && reg.isConfigured && this.matchesRequirements(reg, requirements)) {
133
+ results.push(reg);
134
+ }
135
+ }
136
+ return results;
137
+ }
138
+ return this.listProviders(kind)
139
+ .filter((r) => r.isConfigured)
140
+ .filter((r) => this.matchesRequirements(r, requirements));
141
+ }
142
+ /**
143
+ * Check whether a registration satisfies the given requirements
144
+ * (streaming, local, features).
145
+ */
146
+ matchesRequirements(reg, req) {
147
+ if (!req)
148
+ return true;
149
+ if (req.streaming !== undefined && reg.catalogEntry.streaming !== req.streaming)
150
+ return false;
151
+ if (req.local !== undefined && reg.catalogEntry.local !== req.local)
152
+ return false;
153
+ if (req.features?.length) {
154
+ const providerFeatures = reg.catalogEntry.features ?? [];
155
+ if (!req.features.every((f) => providerFeatures.includes(f)))
156
+ return false;
157
+ }
158
+ return true;
159
+ }
160
+ /**
161
+ * Register providers from the static core list. Each provider is marked
162
+ * `isConfigured` based on whether the required environment variables are set.
163
+ * Providers with `available === false` in the catalog are skipped.
164
+ */
165
+ registerCoreProviders() {
166
+ const coreProviders = [
167
+ { id: 'openai-whisper', kind: 'stt', envVars: ['OPENAI_API_KEY'] },
168
+ { id: 'deepgram-batch', kind: 'stt', envVars: ['DEEPGRAM_API_KEY'] },
169
+ { id: 'assemblyai', kind: 'stt', envVars: ['ASSEMBLYAI_API_KEY'] },
170
+ { id: 'azure-speech-stt', kind: 'stt', envVars: ['AZURE_SPEECH_KEY', 'AZURE_SPEECH_REGION'] },
171
+ { id: 'openai-tts', kind: 'tts', envVars: ['OPENAI_API_KEY'] },
172
+ { id: 'elevenlabs', kind: 'tts', envVars: ['ELEVENLABS_API_KEY'] },
173
+ { id: 'azure-speech-tts', kind: 'tts', envVars: ['AZURE_SPEECH_KEY', 'AZURE_SPEECH_REGION'] },
174
+ { id: 'agentos-adaptive-vad', kind: 'vad', envVars: [] },
175
+ ];
176
+ for (const def of coreProviders) {
177
+ const catalogEntry = findSpeechProviderCatalogEntry(def.id);
178
+ if (!catalogEntry)
179
+ continue;
180
+ if (catalogEntry.available === false)
181
+ continue;
182
+ const isConfigured = def.envVars.length === 0 || def.envVars.every((v) => Boolean(this.env[v]));
183
+ this.register({
184
+ id: def.id,
185
+ kind: def.kind,
186
+ provider: null, // Lazy — actual provider instance created on first use.
187
+ catalogEntry,
188
+ isConfigured,
189
+ priority: 100,
190
+ source: 'core',
191
+ });
192
+ }
193
+ }
194
+ /**
195
+ * Discover speech providers exposed by an ExtensionManager via
196
+ * `getDescriptorsByKind()`. Extension providers default to priority 200
197
+ * (lower than core's 100) unless the user overrides via preferred config.
198
+ */
199
+ discoverExtensionProviders(extensionManager) {
200
+ /** Maps extension descriptor kinds to {@link SpeechProviderKind}. */
201
+ const kindMap = {
202
+ 'stt-provider': 'stt',
203
+ 'tts-provider': 'tts',
204
+ 'vad-provider': 'vad',
205
+ 'wake-word-provider': 'wake-word',
206
+ };
207
+ for (const descriptorKind of Object.keys(kindMap)) {
208
+ const descriptors = extensionManager.getDescriptorsByKind?.(descriptorKind) ?? [];
209
+ for (const desc of descriptors) {
210
+ const catalogEntry = findSpeechProviderCatalogEntry(desc.id);
211
+ const isConfigured = catalogEntry
212
+ ? catalogEntry.envVars.length === 0 ||
213
+ catalogEntry.envVars.every((v) => Boolean(this.env[v]))
214
+ : true;
215
+ this.register({
216
+ id: desc.id,
217
+ kind: kindMap[descriptorKind] ?? 'stt',
218
+ provider: desc.payload,
219
+ catalogEntry: catalogEntry ?? {
220
+ id: desc.id,
221
+ kind: kindMap[descriptorKind] ?? 'stt',
222
+ label: desc.id,
223
+ envVars: [],
224
+ local: false,
225
+ description: '',
226
+ },
227
+ isConfigured,
228
+ priority: 200,
229
+ source: 'extension',
230
+ });
231
+ }
232
+ }
233
+ }
234
+ /**
235
+ * Boost priority for providers listed in `config.stt.preferred` /
236
+ * `config.tts.preferred`. Earlier entries get lower (= higher priority)
237
+ * numbers starting at 50.
238
+ */
239
+ applyPreferredPriorities() {
240
+ if (this.config?.stt?.preferred) {
241
+ for (let i = 0; i < this.config.stt.preferred.length; i++) {
242
+ const reg = this.registrations.get(this.config.stt.preferred[i]);
243
+ if (reg)
244
+ reg.priority = 50 + i;
245
+ }
246
+ }
247
+ if (this.config?.tts?.preferred) {
248
+ for (let i = 0; i < this.config.tts.preferred.length; i++) {
249
+ const reg = this.registrations.get(this.config.tts.preferred[i]);
250
+ if (reg)
251
+ reg.priority = 50 + i;
252
+ }
253
+ }
254
+ }
255
+ }
256
+ //# sourceMappingURL=SpeechProviderResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpeechProviderResolver.js","sourceRoot":"","sources":["../../src/speech/SpeechProviderResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAYtC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IAItD;;;OAGG;IACH,YACmB,MAA6B,EAC7B,MAA0C,OAAO,CAAC,GAAG;QAEtE,KAAK,EAAE,CAAC;QAHS,WAAM,GAAN,MAAM,CAAuB;QAC7B,QAAG,GAAH,GAAG,CAAkD;QATxE,4CAA4C;QACpC,kBAAa,GAAG,IAAI,GAAG,EAAgC,CAAC;IAWhE,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,GAAyB;QAChC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACvF,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,IAAwB;QACpC,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;aAC9B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,YAAmC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,gBAAgB,CACzB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAgC,CAAC,EACzD,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,QAAgC,CAAC;IACxD,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,YAAmC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,gBAAgB,CACzB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAgC,CAAC,EACzD,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,QAAgC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACH,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACrE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,QAA6B,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAChF,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,SAAS,CAAC,CAAC,CAAC,CAAC,QAA6B,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,CAAC;IAED,8EAA8E;IAC9E,4BAA4B;IAC5B,8EAA8E;IAE9E;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,gBAAsB;QAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E;;;;;;OAMG;IACK,aAAa,CACnB,IAAwB,EACxB,YAAmC;QAEnC,IAAI,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;YACvC,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,KAAK,MAAM,EAAE,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;gBAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,CAAC;oBAChG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,GAAyB,EAAE,GAA0B;QAC/E,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,YAAY,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC9F,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAClF,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YACzB,MAAM,gBAAgB,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACK,qBAAqB;QAC3B,MAAM,aAAa,GAAG;YACpB,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE;YAC3E,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE;YAC7E,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,CAAC,oBAAoB,CAAC,EAAE;YAC3E,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,EAAE;YACtG,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE;YACvE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,CAAC,oBAAoB,CAAC,EAAE;YAC3E,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,EAAE;YACtG,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,EAAc,EAAE;SAC9E,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,8BAA8B,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,YAAY;gBAAE,SAAS;YAC5B,IAAI,YAAY,CAAC,SAAS,KAAK,KAAK;gBAAE,SAAS;YAE/C,MAAM,YAAY,GAChB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7E,IAAI,CAAC,QAAQ,CAAC;gBACZ,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,IAAW,EAAE,wDAAwD;gBAC/E,YAAY;gBACZ,YAAY;gBACZ,QAAQ,EAAE,GAAG;gBACb,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,0BAA0B,CAAC,gBAAqB;QACtD,qEAAqE;QACrE,MAAM,OAAO,GAAuC;YAClD,cAAc,EAAE,KAAK;YACrB,cAAc,EAAE,KAAK;YACrB,cAAc,EAAE,KAAK;YACrB,oBAAoB,EAAE,WAAW;SAClC,CAAC;QAEF,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,MAAM,WAAW,GAAU,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAEzF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,MAAM,YAAY,GAAG,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7D,MAAM,YAAY,GAAG,YAAY;oBAC/B,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;wBACjC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjE,CAAC,CAAC,IAAI,CAAC;gBAET,IAAI,CAAC,QAAQ,CAAC;oBACZ,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK;oBACtC,QAAQ,EAAE,IAAI,CAAC,OAAO;oBACtB,YAAY,EAAE,YAAY,IAAI;wBAC5B,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK;wBACtC,KAAK,EAAE,IAAI,CAAC,EAAE;wBACd,OAAO,EAAE,EAAE;wBACX,KAAK,EAAE,KAAK;wBACZ,WAAW,EAAE,EAAE;qBAChB;oBACD,YAAY;oBACZ,QAAQ,EAAE,GAAG;oBACb,MAAM,EAAE,WAAW;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,wBAAwB;QAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,IAAI,GAAG;oBAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,IAAI,GAAG;oBAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -1,11 +1,14 @@
1
1
  import type { ExtensionManager } from '../extensions/ExtensionManager.js';
2
2
  import { SpeechProviderRegistry } from './SpeechProviderRegistry.js';
3
+ import { SpeechProviderResolver } from './SpeechProviderResolver.js';
3
4
  import { SpeechSession } from './SpeechSession.js';
4
- import type { SpeechProviderCatalogEntry, SpeechRuntimeConfig, SpeechRuntimeSessionConfig, SpeechToTextProvider, SpeechVadProvider, TextToSpeechProvider, WakeWordProvider } from './types.js';
5
+ import type { ProviderRequirements, SpeechProviderCatalogEntry, SpeechRuntimeConfig, SpeechRuntimeSessionConfig, SpeechToTextProvider, SpeechVadProvider, TextToSpeechProvider, WakeWordProvider } from './types.js';
5
6
  export declare class SpeechRuntime {
6
7
  private readonly registry;
7
8
  private readonly preferredSttProviderId;
8
9
  private readonly preferredTtsProviderId;
10
+ /** @since 0.2.0 — Prefer resolver over registry for provider resolution. */
11
+ readonly resolver: SpeechProviderResolver;
9
12
  constructor(config?: SpeechRuntimeConfig);
10
13
  getProviderRegistry(): SpeechProviderRegistry;
11
14
  registerSttProvider(provider: SpeechToTextProvider): void;
@@ -13,12 +16,31 @@ export declare class SpeechRuntime {
13
16
  registerVadProvider(provider: SpeechVadProvider): void;
14
17
  registerWakeWordProvider(provider: WakeWordProvider): void;
15
18
  hydrateFromExtensionManager(manager: ExtensionManager): void;
19
+ /**
20
+ * Resolve an STT provider via the new {@link SpeechProviderResolver}.
21
+ * Returns `undefined` instead of throwing when no provider matches.
22
+ *
23
+ * @since 0.2.0
24
+ */
25
+ getSTT(requirements?: ProviderRequirements): SpeechToTextProvider | undefined;
26
+ /**
27
+ * Resolve a TTS provider via the new {@link SpeechProviderResolver}.
28
+ * Returns `undefined` instead of throwing when no provider matches.
29
+ *
30
+ * @since 0.2.0
31
+ */
32
+ getTTS(requirements?: ProviderRequirements): TextToSpeechProvider | undefined;
16
33
  createSession(config?: SpeechRuntimeSessionConfig): SpeechSession;
17
34
  listProviders(): Array<SpeechProviderCatalogEntry & {
18
35
  registered: boolean;
19
36
  }>;
20
37
  getProvider(id: string): SpeechToTextProvider | TextToSpeechProvider | SpeechVadProvider | WakeWordProvider | undefined;
21
38
  private isProviderRegistered;
39
+ /**
40
+ * Bridge helper — registers a provider instance into the resolver with
41
+ * sensible defaults derived from the static catalog.
42
+ */
43
+ private registerProviderInResolver;
22
44
  private resolveDefaultSttProvider;
23
45
  private resolveDefaultTtsProvider;
24
46
  private resolveDefaultVadProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"SpeechRuntime.d.ts","sourceRoot":"","sources":["../../src/speech/SpeechRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAQ1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqB;IAC5D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqB;gBAEhD,MAAM,GAAE,mBAAwB;IA2C5C,mBAAmB,IAAI,sBAAsB;IAI7C,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIzD,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIzD,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAItD,wBAAwB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI1D,2BAA2B,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAe5D,aAAa,CAAC,MAAM,GAAE,0BAA+B,GAAG,aAAa;IAkBrE,aAAa,IAAI,KAAK,CAAC,0BAA0B,GAAG;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IAO5E,WAAW,CAAC,EAAE,EAAE,MAAM,GAClB,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,gBAAgB,GAChB,SAAS;IASb,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,8BAA8B;CAGvC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,mBAAwB,GAAG,aAAa,CAEnF;AAED,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,MAAM,GAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAM,GAC5C,aAAa,CAEf;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAKlF"}
1
+ {"version":3,"file":"SpeechRuntime.d.ts","sourceRoot":"","sources":["../../src/speech/SpeechRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAQ1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,OAAO,KAAK,EACV,oBAAoB,EACpB,0BAA0B,EAE1B,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqB;IAC5D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqB;IAE5D,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;gBAE9B,MAAM,GAAE,mBAAwB;IA4D5C,mBAAmB,IAAI,sBAAsB;IAI7C,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIzD,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIzD,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAItD,wBAAwB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI1D,2BAA2B,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAmB5D;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,GAAG,SAAS;IAQ7E;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,GAAG,SAAS;IAQ7E,aAAa,CAAC,MAAM,GAAE,0BAA+B,GAAG,aAAa;IAkBrE,aAAa,IAAI,KAAK,CAAC,0BAA0B,GAAG;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IAO5E,WAAW,CAAC,EAAE,EAAE,MAAM,GAClB,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,gBAAgB,GAChB,SAAS;IASb,OAAO,CAAC,oBAAoB;IAe5B;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAwBlC,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,8BAA8B;CAGvC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,mBAAwB,GAAG,aAAa,CAEnF;AAED,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,MAAM,GAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAM,GAC5C,aAAa,CAEf;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAKlF"}
@@ -1,6 +1,7 @@
1
1
  import { EXTENSION_KIND_STT_PROVIDER, EXTENSION_KIND_TTS_PROVIDER, EXTENSION_KIND_VAD_PROVIDER, EXTENSION_KIND_WAKE_WORD_PROVIDER, } from '../extensions/types.js';
2
2
  import { findSpeechProviderCatalogEntry, getSpeechProviderCatalog } from './providerCatalog.js';
3
3
  import { SpeechProviderRegistry } from './SpeechProviderRegistry.js';
4
+ import { SpeechProviderResolver } from './SpeechProviderResolver.js';
4
5
  import { SpeechSession } from './SpeechSession.js';
5
6
  import { BuiltInAdaptiveVadProvider } from './providers/BuiltInAdaptiveVadProvider.js';
6
7
  import { ElevenLabsTextToSpeechProvider } from './providers/ElevenLabsTextToSpeechProvider.js';
@@ -8,6 +9,16 @@ import { OpenAITextToSpeechProvider } from './providers/OpenAITextToSpeechProvid
8
9
  import { OpenAIWhisperSpeechToTextProvider } from './providers/OpenAIWhisperSpeechToTextProvider.js';
9
10
  export class SpeechRuntime {
10
11
  constructor(config = {}) {
12
+ const env = config.env ?? process.env;
13
+ /* Build resolver config from legacy preferred-provider fields. */
14
+ const resolverConfig = {};
15
+ if (config.preferredSttProviderId) {
16
+ resolverConfig.stt = { preferred: [config.preferredSttProviderId] };
17
+ }
18
+ if (config.preferredTtsProviderId) {
19
+ resolverConfig.tts = { preferred: [config.preferredTtsProviderId] };
20
+ }
21
+ this.resolver = new SpeechProviderResolver(resolverConfig, env);
11
22
  this.registry = new SpeechProviderRegistry();
12
23
  this.preferredSttProviderId =
13
24
  typeof config.preferredSttProviderId === 'string' && config.preferredSttProviderId.trim()
@@ -17,28 +28,36 @@ export class SpeechRuntime {
17
28
  typeof config.preferredTtsProviderId === 'string' && config.preferredTtsProviderId.trim()
18
29
  ? config.preferredTtsProviderId.trim()
19
30
  : undefined;
20
- this.registry.registerVadProvider(new BuiltInAdaptiveVadProvider());
31
+ /* VAD — always registered. */
32
+ const vadProvider = new BuiltInAdaptiveVadProvider();
33
+ this.registry.registerVadProvider(vadProvider);
34
+ this.registerProviderInResolver(vadProvider, 'vad');
21
35
  if (config.autoRegisterFromEnv !== false) {
22
- const env = config.env ?? process.env;
23
36
  const openaiApiKey = env['OPENAI_API_KEY'];
24
37
  if (openaiApiKey) {
25
- this.registry.registerSttProvider(new OpenAIWhisperSpeechToTextProvider({
38
+ const stt = new OpenAIWhisperSpeechToTextProvider({
26
39
  apiKey: openaiApiKey,
27
40
  model: env['WHISPER_MODEL_DEFAULT'] ?? 'whisper-1',
28
- }));
29
- this.registry.registerTtsProvider(new OpenAITextToSpeechProvider({
41
+ });
42
+ this.registry.registerSttProvider(stt);
43
+ this.registerProviderInResolver(stt, 'stt');
44
+ const tts = new OpenAITextToSpeechProvider({
30
45
  apiKey: openaiApiKey,
31
46
  model: env['OPENAI_TTS_DEFAULT_MODEL'] ?? 'tts-1',
32
47
  voice: env['OPENAI_TTS_DEFAULT_VOICE'] ?? 'nova',
33
- }));
48
+ });
49
+ this.registry.registerTtsProvider(tts);
50
+ this.registerProviderInResolver(tts, 'tts');
34
51
  }
35
52
  const elevenLabsApiKey = env['ELEVENLABS_API_KEY'];
36
53
  if (elevenLabsApiKey) {
37
- this.registry.registerTtsProvider(new ElevenLabsTextToSpeechProvider({
54
+ const tts = new ElevenLabsTextToSpeechProvider({
38
55
  apiKey: elevenLabsApiKey,
39
56
  model: env['ELEVENLABS_TTS_MODEL'] ?? 'eleven_multilingual_v2',
40
57
  voiceId: env['ELEVENLABS_VOICE_ID'],
41
- }));
58
+ });
59
+ this.registry.registerTtsProvider(tts);
60
+ this.registerProviderInResolver(tts, 'tts');
42
61
  }
43
62
  }
44
63
  }
@@ -60,15 +79,47 @@ export class SpeechRuntime {
60
79
  hydrateFromExtensionManager(manager) {
61
80
  for (const descriptor of manager.getRegistry(EXTENSION_KIND_STT_PROVIDER).listActive()) {
62
81
  this.registry.registerSttProvider(descriptor.payload);
82
+ this.registerProviderInResolver(descriptor.payload, 'stt', 'extension');
63
83
  }
64
84
  for (const descriptor of manager.getRegistry(EXTENSION_KIND_TTS_PROVIDER).listActive()) {
65
85
  this.registry.registerTtsProvider(descriptor.payload);
86
+ this.registerProviderInResolver(descriptor.payload, 'tts', 'extension');
66
87
  }
67
88
  for (const descriptor of manager.getRegistry(EXTENSION_KIND_VAD_PROVIDER).listActive()) {
68
89
  this.registry.registerVadProvider(descriptor.payload);
90
+ this.registerProviderInResolver(descriptor.payload, 'vad', 'extension');
69
91
  }
70
92
  for (const descriptor of manager.getRegistry(EXTENSION_KIND_WAKE_WORD_PROVIDER).listActive()) {
71
93
  this.registry.registerWakeWordProvider(descriptor.payload);
94
+ this.registerProviderInResolver(descriptor.payload, 'wake-word', 'extension');
95
+ }
96
+ }
97
+ /**
98
+ * Resolve an STT provider via the new {@link SpeechProviderResolver}.
99
+ * Returns `undefined` instead of throwing when no provider matches.
100
+ *
101
+ * @since 0.2.0
102
+ */
103
+ getSTT(requirements) {
104
+ try {
105
+ return this.resolver.resolveSTT(requirements);
106
+ }
107
+ catch {
108
+ return undefined;
109
+ }
110
+ }
111
+ /**
112
+ * Resolve a TTS provider via the new {@link SpeechProviderResolver}.
113
+ * Returns `undefined` instead of throwing when no provider matches.
114
+ *
115
+ * @since 0.2.0
116
+ */
117
+ getTTS(requirements) {
118
+ try {
119
+ return this.resolver.resolveTTS(requirements);
120
+ }
121
+ catch {
122
+ return undefined;
72
123
  }
73
124
  }
74
125
  createSession(config = {}) {
@@ -114,6 +165,29 @@ export class SpeechRuntime {
114
165
  return false;
115
166
  }
116
167
  }
168
+ /**
169
+ * Bridge helper — registers a provider instance into the resolver with
170
+ * sensible defaults derived from the static catalog.
171
+ */
172
+ registerProviderInResolver(provider, kind, source = 'core') {
173
+ const catalogEntry = findSpeechProviderCatalogEntry(provider.id) ?? {
174
+ id: provider.id,
175
+ kind,
176
+ label: provider.getProviderName?.() ?? provider.id,
177
+ envVars: [],
178
+ local: false,
179
+ description: '',
180
+ };
181
+ this.resolver.register({
182
+ id: provider.id,
183
+ kind,
184
+ provider: provider,
185
+ catalogEntry,
186
+ isConfigured: true,
187
+ priority: source === 'extension' ? 200 : 100,
188
+ source,
189
+ });
190
+ }
117
191
  resolveDefaultSttProvider() {
118
192
  if (this.preferredSttProviderId) {
119
193
  const preferred = this.registry.getSttProvider(this.preferredSttProviderId);
@@ -1 +1 @@
1
- {"version":3,"file":"SpeechRuntime.js","sourceRoot":"","sources":["../../src/speech/SpeechRuntime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SpeechRuntime.js","sourceRoot":"","sources":["../../src/speech/SpeechRuntime.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,8BAA8B,EAAE,MAAM,+CAA+C,CAAC;AAC/F,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,iCAAiC,EAAE,MAAM,kDAAkD,CAAC;AAarG,MAAM,OAAO,aAAa;IAQxB,YAAY,SAA8B,EAAE;QAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QAEtC,kEAAkE;QAClE,MAAM,cAAc,GAAyB,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;YAClC,cAAc,CAAC,GAAG,GAAG,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACtE,CAAC;QACD,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;YAClC,cAAc,CAAC,GAAG,GAAG,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACtE,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAsB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC7C,IAAI,CAAC,sBAAsB;YACzB,OAAO,MAAM,CAAC,sBAAsB,KAAK,QAAQ,IAAI,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE;gBACvF,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE;gBACtC,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,sBAAsB;YACzB,OAAO,MAAM,CAAC,sBAAsB,KAAK,QAAQ,IAAI,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE;gBACvF,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE;gBACtC,CAAC,CAAC,SAAS,CAAC;QAEhB,8BAA8B;QAC9B,MAAM,WAAW,GAAG,IAAI,0BAA0B,EAAE,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEpD,IAAI,MAAM,CAAC,mBAAmB,KAAK,KAAK,EAAE,CAAC;YACzC,MAAM,YAAY,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC3C,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,GAAG,GAAG,IAAI,iCAAiC,CAAC;oBAChD,MAAM,EAAE,YAAY;oBACpB,KAAK,EAAE,GAAG,CAAC,uBAAuB,CAAC,IAAI,WAAW;iBACnD,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAE5C,MAAM,GAAG,GAAG,IAAI,0BAA0B,CAAC;oBACzC,MAAM,EAAE,YAAY;oBACpB,KAAK,EAAE,GAAG,CAAC,0BAA0B,CAAC,IAAI,OAAO;oBACjD,KAAK,EAAE,GAAG,CAAC,0BAA0B,CAAC,IAAI,MAAM;iBACjD,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;YAED,MAAM,gBAAgB,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACnD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,GAAG,GAAG,IAAI,8BAA8B,CAAC;oBAC7C,MAAM,EAAE,gBAAgB;oBACxB,KAAK,EAAE,GAAG,CAAC,sBAAsB,CAAC,IAAI,wBAAwB;oBAC9D,OAAO,EAAE,GAAG,CAAC,qBAAqB,CAAC;iBACpC,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,mBAAmB,CAAC,QAA8B;QAChD,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,mBAAmB,CAAC,QAA8B;QAChD,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,mBAAmB,CAAC,QAA2B;QAC7C,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,wBAAwB,CAAC,QAA0B;QACjD,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,2BAA2B,CAAC,OAAyB;QACnD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,CAAuB,2BAA2B,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC;YAC7G,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,CAAuB,2BAA2B,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC;YAC7G,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,CAAoB,2BAA2B,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC;YAC1G,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,CAAmB,iCAAiC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC;YAC/G,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC3D,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,YAAmC;QACxC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,YAAmC;QACxC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,aAAa,CAAC,SAAqC,EAAE;QACnD,MAAM,SAAS,GAAG;YAChB,GAAG,EAAE,MAAM,CAAC,aAAa;gBACvB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACpC,GAAG,EAAE,MAAM,CAAC,aAAa;gBACvB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACpC,GAAG,EAAE,MAAM,CAAC,aAAa;gBACvB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACpC,QAAQ,EAAE,MAAM,CAAC,kBAAkB;gBACjC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,kBAAkB,CAAC;gBAC9D,CAAC,CAAC,IAAI,CAAC,8BAA8B,EAAE;SAC1C,CAAC;QACF,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,aAAa;QACX,OAAO,wBAAwB,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,GAAG,KAAK;YACR,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;SAC7C,CAAC,CAAC,CAAC;IACN,CAAC;IAED,WAAW,CAAC,EAAU;QAMpB,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CACtC,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,KAAiC;QAC5D,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,KAAK;gBACR,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,KAAK,KAAK;gBACR,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,KAAK,KAAK;gBACR,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,KAAK,WAAW;gBACd,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,0BAA0B,CAChC,QAAwD,EACxD,IAAyC,EACzC,SAA+B,MAAM;QAErC,MAAM,YAAY,GAAG,8BAA8B,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI;YAClE,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI;YACJ,KAAK,EAAE,QAAQ,CAAC,eAAe,EAAE,EAAE,IAAI,QAAQ,CAAC,EAAE;YAClD,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,EAAE;SAChB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACrB,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI;YACJ,QAAQ,EAAE,QAAe;YACzB,YAAY;YACZ,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YAC5C,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAEO,yBAAyB;QAC/B,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC5E,IAAI,SAAS;gBAAE,OAAO,SAAS,CAAC;QAClC,CAAC;QACD,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAsC,CACnE,CAAC;IACJ,CAAC;IAEO,yBAAyB;QAC/B,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC5E,IAAI,SAAS;gBAAE,OAAO,SAAS,CAAC;QAClC,CAAC;QACD,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAsC,CACnE,CAAC;IACJ,CAAC;IAEO,yBAAyB;QAC/B,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAmC,CAChE,CAAC;IACJ,CAAC;IAEO,8BAA8B;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAiC,CAAC;IAC5E,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,SAA8B,EAAE;IAClE,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAA0C,OAAO,CAAC,GAAG,EACrD,SAA2C,EAAE;IAE7C,OAAO,IAAI,aAAa,CAAC,EAAE,GAAG,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAmB;IAC5D,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,8BAA8B,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,8BAA8B,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;AAC1D,CAAC"}
@@ -2,10 +2,16 @@ export * from './types.js';
2
2
  export * from './audio.js';
3
3
  export * from './providerCatalog.js';
4
4
  export * from './SpeechProviderRegistry.js';
5
+ export * from './SpeechProviderResolver.js';
6
+ export * from './FallbackProxy.js';
5
7
  export * from './SpeechSession.js';
6
8
  export * from './SpeechRuntime.js';
7
9
  export * from './providers/OpenAIWhisperSpeechToTextProvider.js';
8
10
  export * from './providers/OpenAITextToSpeechProvider.js';
9
11
  export * from './providers/ElevenLabsTextToSpeechProvider.js';
10
12
  export * from './providers/BuiltInAdaptiveVadProvider.js';
13
+ export * from './providers/DeepgramBatchSTTProvider.js';
14
+ export * from './providers/AssemblyAISTTProvider.js';
15
+ export * from './providers/AzureSpeechSTTProvider.js';
16
+ export * from './providers/AzureSpeechTTSProvider.js';
11
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/speech/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/speech/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC"}
@@ -2,10 +2,16 @@ export * from './types.js';
2
2
  export * from './audio.js';
3
3
  export * from './providerCatalog.js';
4
4
  export * from './SpeechProviderRegistry.js';
5
+ export * from './SpeechProviderResolver.js';
6
+ export * from './FallbackProxy.js';
5
7
  export * from './SpeechSession.js';
6
8
  export * from './SpeechRuntime.js';
7
9
  export * from './providers/OpenAIWhisperSpeechToTextProvider.js';
8
10
  export * from './providers/OpenAITextToSpeechProvider.js';
9
11
  export * from './providers/ElevenLabsTextToSpeechProvider.js';
10
12
  export * from './providers/BuiltInAdaptiveVadProvider.js';
13
+ export * from './providers/DeepgramBatchSTTProvider.js';
14
+ export * from './providers/AssemblyAISTTProvider.js';
15
+ export * from './providers/AzureSpeechSTTProvider.js';
16
+ export * from './providers/AzureSpeechTTSProvider.js';
11
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/speech/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/speech/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"providerCatalog.d.ts","sourceRoot":"","sources":["../../src/speech/providerCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEjF,eAAO,MAAM,uBAAuB,EAAE,SAAS,0BAA0B,EAiR/D,CAAC;AAEX,wBAAgB,wBAAwB,CACtC,IAAI,CAAC,EAAE,kBAAkB,GACxB,0BAA0B,EAAE,CAG9B;AAED,wBAAgB,sBAAsB,IAAI,kBAAkB,EAAE,CAE7D;AAED,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE,MAAM,GACT,0BAA0B,GAAG,SAAS,CAExC;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,0BAA0B,EACjC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,OAAO,CAET"}
1
+ {"version":3,"file":"providerCatalog.d.ts","sourceRoot":"","sources":["../../src/speech/providerCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEjF,eAAO,MAAM,uBAAuB,EAAE,SAAS,0BAA0B,EA+R/D,CAAC;AAEX,wBAAgB,wBAAwB,CACtC,IAAI,CAAC,EAAE,kBAAkB,GACxB,0BAA0B,EAAE,CAG9B;AAED,wBAAgB,sBAAsB,IAAI,kBAAkB,EAAE,CAE7D;AAED,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE,MAAM,GACT,0BAA0B,GAAG,SAAS,CAExC;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,0BAA0B,EACjC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,OAAO,CAET"}
@@ -50,6 +50,16 @@ export const SPEECH_PROVIDER_CATALOG = [
50
50
  streaming: true,
51
51
  features: ['cloud', 'streaming'],
52
52
  },
53
+ {
54
+ id: 'deepgram-batch',
55
+ kind: 'stt',
56
+ label: 'Deepgram Batch',
57
+ envVars: ['DEEPGRAM_API_KEY'],
58
+ local: false,
59
+ streaming: false,
60
+ description: 'Batch speech-to-text via Deepgram REST API.',
61
+ features: ['cloud', 'diarization', 'timestamps'],
62
+ },
53
63
  {
54
64
  id: 'assemblyai',
55
65
  kind: 'stt',
@@ -77,7 +87,7 @@ export const SPEECH_PROVIDER_CATALOG = [
77
87
  envVars: ['AZURE_SPEECH_KEY', 'AZURE_SPEECH_REGION'],
78
88
  local: false,
79
89
  description: 'Azure speech recognition for batch and live transcription.',
80
- streaming: true,
90
+ streaming: false,
81
91
  features: ['cloud', 'streaming'],
82
92
  },
83
93
  {
@@ -107,6 +117,7 @@ export const SPEECH_PROVIDER_CATALOG = [
107
117
  local: true,
108
118
  description: 'Local/offline ASR via NVIDIA NeMo.',
109
119
  features: ['local', 'offline'],
120
+ available: false,
110
121
  },
111
122
  {
112
123
  id: 'openai-tts',
@@ -179,6 +190,7 @@ export const SPEECH_PROVIDER_CATALOG = [
179
190
  streaming: true,
180
191
  description: 'Local XTTS / Coqui speech synthesis.',
181
192
  features: ['local', 'tts', 'voice-cloning'],
193
+ available: false,
182
194
  },
183
195
  {
184
196
  id: 'bark',
@@ -188,6 +200,7 @@ export const SPEECH_PROVIDER_CATALOG = [
188
200
  local: true,
189
201
  description: 'Local Bark expressive speech synthesis.',
190
202
  features: ['local', 'tts'],
203
+ available: false,
191
204
  },
192
205
  {
193
206
  id: 'styletts2',
@@ -197,6 +210,7 @@ export const SPEECH_PROVIDER_CATALOG = [
197
210
  local: true,
198
211
  description: 'Local StyleTTS2 expressive speech synthesis.',
199
212
  features: ['local', 'tts'],
213
+ available: false,
200
214
  },
201
215
  {
202
216
  id: 'agentos-adaptive-vad',