@burtson-labs/bandit-engine 2.1.7 → 2.1.9

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 (89) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/AdvancedTab-D7SDAQEL.mjs +229 -0
  3. package/dist/AdvancedTab-D7SDAQEL.mjs.map +1 -0
  4. package/dist/CrewSection-N2J3TJGU.mjs +15 -0
  5. package/dist/InstructionsTab-MKOGBQ5L.mjs +195 -0
  6. package/dist/InstructionsTab-MKOGBQ5L.mjs.map +1 -0
  7. package/dist/PersonalizationTab-KPTVJKB3.mjs +179 -0
  8. package/dist/PersonalizationTab-KPTVJKB3.mjs.map +1 -0
  9. package/dist/{ProjectsPane-E5D72PUG.mjs → ProjectsPane-C63C6GW5.mjs} +17 -13
  10. package/dist/ProjectsPane-C63C6GW5.mjs.map +1 -0
  11. package/dist/{SchedulesTab-AKJ6WFZV.mjs → SchedulesTab-TEOM3NWQ.mjs} +13 -11
  12. package/dist/SchedulesTab-TEOM3NWQ.mjs.map +1 -0
  13. package/dist/{aiProviderStore-ANPQVHGD.mjs → aiProviderStore-GH4JZTMW.mjs} +3 -2
  14. package/dist/chat-QAEEYO73.mjs +29 -0
  15. package/dist/chunk-3CDCJJ4S.mjs +64 -0
  16. package/dist/chunk-3CDCJJ4S.mjs.map +1 -0
  17. package/dist/chunk-5JNKGMMN.mjs +5871 -0
  18. package/dist/chunk-5JNKGMMN.mjs.map +1 -0
  19. package/dist/{chunk-KWOUXBSF.mjs → chunk-5LXCZJLJ.mjs} +5 -213
  20. package/dist/chunk-5LXCZJLJ.mjs.map +1 -0
  21. package/dist/{chunk-GX4FVZNA.mjs → chunk-DHXSFFLX.mjs} +4 -26
  22. package/dist/chunk-DHXSFFLX.mjs.map +1 -0
  23. package/dist/chunk-F56OTXXR.mjs +17 -0
  24. package/dist/chunk-F56OTXXR.mjs.map +1 -0
  25. package/dist/{chunk-SQJ4OKWM.mjs → chunk-GN3X7IIZ.mjs} +18 -1734
  26. package/dist/chunk-GN3X7IIZ.mjs.map +1 -0
  27. package/dist/chunk-H2XUGGKV.mjs +168 -0
  28. package/dist/chunk-H2XUGGKV.mjs.map +1 -0
  29. package/dist/{chunk-4NUQYUZH.mjs → chunk-JGJRY4MR.mjs} +7 -569
  30. package/dist/chunk-JGJRY4MR.mjs.map +1 -0
  31. package/dist/chunk-KPT7NNNK.mjs +214 -0
  32. package/dist/chunk-KPT7NNNK.mjs.map +1 -0
  33. package/dist/chunk-LC64VSDS.mjs +541 -0
  34. package/dist/chunk-LC64VSDS.mjs.map +1 -0
  35. package/dist/{chunk-DH5A2HT2.mjs → chunk-LY3O7UWA.mjs} +45 -1
  36. package/dist/chunk-LY3O7UWA.mjs.map +1 -0
  37. package/dist/chunk-MR643IO6.mjs +294 -0
  38. package/dist/chunk-MR643IO6.mjs.map +1 -0
  39. package/dist/{chunk-4NHPLHXU.mjs → chunk-MX37LD3Z.mjs} +5469 -11527
  40. package/dist/chunk-MX37LD3Z.mjs.map +1 -0
  41. package/dist/chunk-MX7Z4RSP.mjs +1203 -0
  42. package/dist/chunk-MX7Z4RSP.mjs.map +1 -0
  43. package/dist/chunk-P42M52OW.mjs +1732 -0
  44. package/dist/chunk-P42M52OW.mjs.map +1 -0
  45. package/dist/{chunk-5URP2E5V.mjs → chunk-UT46TXNG.mjs} +42 -6
  46. package/dist/chunk-UT46TXNG.mjs.map +1 -0
  47. package/dist/{chunk-2HFSBPOE.mjs → chunk-WDFQG3RM.mjs} +21 -1
  48. package/dist/chunk-WDFQG3RM.mjs.map +1 -0
  49. package/dist/chunk-XWUHUDAV.mjs +814 -0
  50. package/dist/chunk-XWUHUDAV.mjs.map +1 -0
  51. package/dist/chunk-Y272M3D5.mjs +28 -0
  52. package/dist/chunk-Y272M3D5.mjs.map +1 -0
  53. package/dist/chunk-YY7BX2HM.mjs +566 -0
  54. package/dist/chunk-YY7BX2HM.mjs.map +1 -0
  55. package/dist/crew-delegate-card-I4SSZU5H.mjs +229 -0
  56. package/dist/crew-delegate-card-I4SSZU5H.mjs.map +1 -0
  57. package/dist/crew-mention-picker-OSJ2NHUB.mjs +118 -0
  58. package/dist/crew-mention-picker-OSJ2NHUB.mjs.map +1 -0
  59. package/dist/crew-task-card-ZCXFTR34.mjs +416 -0
  60. package/dist/crew-task-card-ZCXFTR34.mjs.map +1 -0
  61. package/dist/index.d.mts +121 -8
  62. package/dist/index.d.ts +121 -8
  63. package/dist/index.js +11313 -8127
  64. package/dist/index.js.map +1 -1
  65. package/dist/index.mjs +1222 -2217
  66. package/dist/index.mjs.map +1 -1
  67. package/dist/{modelStore-YNANSWCN.mjs → modelStore-KO45QAO2.mjs} +3 -2
  68. package/dist/modelStore-KO45QAO2.mjs.map +1 -0
  69. package/dist/{public-Tq2Pmw9m.d.mts → public-_W_Zew3C.d.mts} +14 -0
  70. package/dist/{public-Tq2Pmw9m.d.ts → public-_W_Zew3C.d.ts} +14 -0
  71. package/dist/public-types.d.mts +1 -1
  72. package/dist/public-types.d.ts +1 -1
  73. package/dist/{schedule-confirm-card-D4K76HEA.mjs → schedule-confirm-card-Y2JF2RBV.mjs} +5 -5
  74. package/package.json +1 -1
  75. package/dist/ProjectsPane-E5D72PUG.mjs.map +0 -1
  76. package/dist/SchedulesTab-AKJ6WFZV.mjs.map +0 -1
  77. package/dist/chat-MI4IL3WK.mjs +0 -19
  78. package/dist/chunk-2HFSBPOE.mjs.map +0 -1
  79. package/dist/chunk-4NHPLHXU.mjs.map +0 -1
  80. package/dist/chunk-4NUQYUZH.mjs.map +0 -1
  81. package/dist/chunk-5URP2E5V.mjs.map +0 -1
  82. package/dist/chunk-DH5A2HT2.mjs.map +0 -1
  83. package/dist/chunk-GX4FVZNA.mjs.map +0 -1
  84. package/dist/chunk-KWOUXBSF.mjs.map +0 -1
  85. package/dist/chunk-SQJ4OKWM.mjs.map +0 -1
  86. /package/dist/{aiProviderStore-ANPQVHGD.mjs.map → CrewSection-N2J3TJGU.mjs.map} +0 -0
  87. /package/dist/{chat-MI4IL3WK.mjs.map → aiProviderStore-GH4JZTMW.mjs.map} +0 -0
  88. /package/dist/{modelStore-YNANSWCN.mjs.map → chat-QAEEYO73.mjs.map} +0 -0
  89. /package/dist/{schedule-confirm-card-D4K76HEA.mjs.map → schedule-confirm-card-Y2JF2RBV.mjs.map} +0 -0
@@ -0,0 +1,541 @@
1
+ import {
2
+ usePackageSettingsStore
3
+ } from "./chunk-K7SQWDNF.mjs";
4
+ import {
5
+ authenticationService
6
+ } from "./chunk-S3DWWUBD.mjs";
7
+ import {
8
+ debugLogger
9
+ } from "./chunk-NI7BKLC7.mjs";
10
+
11
+ // src/services/tts/voiceService.ts
12
+ var VoiceService = class _VoiceService {
13
+ static instance;
14
+ cachedModels = null;
15
+ cacheTimestamp = 0;
16
+ CACHE_DURATION = 5 * 60 * 1e3;
17
+ // 5 minutes
18
+ constructor() {
19
+ }
20
+ static getInstance() {
21
+ if (!_VoiceService.instance) {
22
+ _VoiceService.instance = new _VoiceService();
23
+ }
24
+ return _VoiceService.instance;
25
+ }
26
+ getGatewayApiUrl() {
27
+ return usePackageSettingsStore.getState().settings?.gatewayApiUrl || "";
28
+ }
29
+ isValid(data) {
30
+ if (typeof data !== "object" || data === null) {
31
+ return false;
32
+ }
33
+ const record = data;
34
+ return Array.isArray(record.models) && record.models.every((item) => typeof item === "string") && typeof record.defaultModel === "string" && typeof record.fallbackModel === "string";
35
+ }
36
+ isCacheValid() {
37
+ return this.cachedModels !== null && Date.now() - this.cacheTimestamp < this.CACHE_DURATION;
38
+ }
39
+ async fetchAvailableVoices() {
40
+ if (this.isCacheValid()) {
41
+ debugLogger.debug("Returning cached voice models");
42
+ return this.cachedModels;
43
+ }
44
+ const gatewayUrl = this.getGatewayApiUrl();
45
+ if (!gatewayUrl) {
46
+ debugLogger.error("Gateway API URL not configured");
47
+ throw new Error("Gateway API URL not configured");
48
+ }
49
+ const token = authenticationService.getToken();
50
+ if (!token) {
51
+ debugLogger.info("No JWT token available - skipping voice models fetch");
52
+ const emptyModels = {
53
+ models: [],
54
+ defaultModel: "",
55
+ fallbackModel: ""
56
+ };
57
+ return emptyModels;
58
+ }
59
+ if (authenticationService.isTokenExpired(token)) {
60
+ debugLogger.warn("JWT token is expired - skipping voice models fetch");
61
+ const emptyModels = {
62
+ models: [],
63
+ defaultModel: "",
64
+ fallbackModel: ""
65
+ };
66
+ return emptyModels;
67
+ }
68
+ try {
69
+ debugLogger.debug("Fetching voice models from gateway API...");
70
+ const response = await fetch(`${gatewayUrl}/tts/available-models`, {
71
+ method: "GET",
72
+ headers: {
73
+ Authorization: `Bearer ${token}`,
74
+ "Content-Type": "application/json"
75
+ }
76
+ });
77
+ if (!response.ok) {
78
+ throw new Error(`Failed to fetch voice models: ${response.status}`);
79
+ }
80
+ const data = await response.json();
81
+ if (!this.isValid(data)) {
82
+ throw new Error("Invalid voice models response format");
83
+ }
84
+ this.cachedModels = data;
85
+ this.cacheTimestamp = Date.now();
86
+ debugLogger.debug("Voice models fetched successfully", data);
87
+ return data;
88
+ } catch (error) {
89
+ debugLogger.error("Error fetching voice models:", {
90
+ error: error instanceof Error ? error.message : String(error)
91
+ });
92
+ const emptyModels = {
93
+ models: [],
94
+ defaultModel: "",
95
+ fallbackModel: ""
96
+ };
97
+ debugLogger.warn("Voice service unavailable - no models available");
98
+ return emptyModels;
99
+ }
100
+ }
101
+ clearCache() {
102
+ this.cachedModels = null;
103
+ this.cacheTimestamp = 0;
104
+ debugLogger.debug("Voice models cache cleared");
105
+ }
106
+ };
107
+ var voiceService = VoiceService.getInstance();
108
+
109
+ // src/services/tts/ttsSanitizer.ts
110
+ var stripHtmlTags = (text) => text.replace(/<[^>]*>/g, "");
111
+ var stripMarkdown = (text) => text.replace(/[*_~`]+/g, "");
112
+ var stripEmojis = (text) => text.replace(/[\p{Emoji_Presentation}\p{Extended_Pictographic}]/gu, "");
113
+ var simplifyLinks = (text) => text.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1");
114
+ var stripListBullets = (text) => text.replace(/^\s*[*\-]\s+/gm, "");
115
+ var normalizeWhitespace = (text) => text.replace(/\s{2,}/g, " ").trim();
116
+ var sanitizeForTTS = (text) => {
117
+ return normalizeWhitespace(
118
+ stripListBullets(stripEmojis(stripMarkdown(simplifyLinks(stripHtmlTags(text)))))
119
+ );
120
+ };
121
+
122
+ // src/services/tts/streaming-tts.ts
123
+ import { Observable as Observable2, BehaviorSubject, Subject } from "rxjs";
124
+
125
+ // src/services/tts/tts-client.ts
126
+ import { Observable, Subscription } from "rxjs";
127
+
128
+ // src/store/voiceStore.ts
129
+ import { create } from "zustand";
130
+ var autoInitialized = false;
131
+ var useVoiceStore = create((set, get) => ({
132
+ availableVoices: [],
133
+ selectedVoice: "",
134
+ defaultVoice: "",
135
+ fallbackVoice: "",
136
+ isLoading: false,
137
+ isServiceAvailable: false,
138
+ initialized: false,
139
+ setSelectedVoice: (voice) => {
140
+ const currentVoice = get().selectedVoice;
141
+ debugLogger.debug("Setting selected voice", {
142
+ previousVoice: currentVoice,
143
+ newVoice: voice,
144
+ isChange: currentVoice !== voice
145
+ });
146
+ if (currentVoice && currentVoice !== voice) {
147
+ debugLogger.debug("\u{1F504} Voice changing in store - stopping TTS immediately", {
148
+ from: currentVoice,
149
+ to: voice
150
+ });
151
+ stopTTS();
152
+ }
153
+ set({ selectedVoice: voice });
154
+ },
155
+ loadVoicesFromAPI: async () => {
156
+ const state = get();
157
+ if (state.isLoading) return;
158
+ set({ isLoading: true, initialized: true });
159
+ try {
160
+ const voiceData = await voiceService.fetchAvailableVoices();
161
+ const hasVoices = voiceData.models.length > 0;
162
+ let finalSelectedVoice = state.selectedVoice;
163
+ if (hasVoices) {
164
+ if (finalSelectedVoice && voiceData.models.includes(finalSelectedVoice)) {
165
+ } else {
166
+ finalSelectedVoice = voiceData.defaultModel;
167
+ }
168
+ set({
169
+ isServiceAvailable: true,
170
+ availableVoices: voiceData.models,
171
+ defaultVoice: voiceData.defaultModel,
172
+ fallbackVoice: voiceData.fallbackModel,
173
+ selectedVoice: finalSelectedVoice,
174
+ isLoading: false
175
+ });
176
+ } else {
177
+ set({
178
+ isServiceAvailable: false,
179
+ isLoading: false
180
+ });
181
+ }
182
+ } catch (error) {
183
+ debugLogger.error("Failed to load voice models", {
184
+ error: error instanceof Error ? error.message : String(error)
185
+ });
186
+ set({
187
+ isServiceAvailable: false,
188
+ isLoading: false
189
+ });
190
+ }
191
+ },
192
+ refreshVoices: async () => {
193
+ const currentSelection = get().selectedVoice;
194
+ voiceService.clearCache();
195
+ await get().loadVoicesFromAPI();
196
+ const { availableVoices } = get();
197
+ if (currentSelection && availableVoices.includes(currentSelection)) {
198
+ set({ selectedVoice: currentSelection });
199
+ }
200
+ },
201
+ forceInitialize: async () => {
202
+ const state = get();
203
+ if (!state.initialized || state.availableVoices.length === 0) {
204
+ debugLogger.debug("Force initializing voice store...");
205
+ await state.loadVoicesFromAPI();
206
+ }
207
+ }
208
+ }));
209
+ if (!autoInitialized) {
210
+ autoInitialized = true;
211
+ setTimeout(() => {
212
+ debugLogger.debug("Auto-initializing voice store...");
213
+ useVoiceStore.getState().forceInitialize().catch((error) => {
214
+ debugLogger.warn("Auto-initialization failed:", error);
215
+ });
216
+ }, 1e3);
217
+ }
218
+
219
+ // src/services/tts/tts-client.ts
220
+ var getOrAppendAuthHeader = (existing = {}) => {
221
+ const token = authenticationService.getToken();
222
+ if (token) {
223
+ existing["Authorization"] = `Bearer ${token}`;
224
+ return existing;
225
+ }
226
+ debugLogger.warn("No token found, using empty string for Authorization header");
227
+ existing["Authorization"] = "";
228
+ return existing;
229
+ };
230
+
231
+ // src/services/tts/streaming-tts.ts
232
+ var TTSState = /* @__PURE__ */ ((TTSState2) => {
233
+ TTSState2["IDLE"] = "IDLE";
234
+ TTSState2["LOADING"] = "LOADING";
235
+ TTSState2["PLAYING"] = "PLAYING";
236
+ TTSState2["PAUSED"] = "PAUSED";
237
+ TTSState2["ERROR"] = "ERROR";
238
+ return TTSState2;
239
+ })(TTSState || {});
240
+ var StreamingTTSClient = class _StreamingTTSClient {
241
+ static instance;
242
+ audio = null;
243
+ objectUrl = null;
244
+ controller = null;
245
+ // Store event handler references for proper cleanup
246
+ audioHandlers = /* @__PURE__ */ new Map();
247
+ // State management
248
+ stateSubject = new BehaviorSubject("IDLE" /* IDLE */);
249
+ progressSubject = new Subject();
250
+ constructor() {
251
+ }
252
+ static getInstance() {
253
+ if (!_StreamingTTSClient.instance) {
254
+ _StreamingTTSClient.instance = new _StreamingTTSClient();
255
+ }
256
+ return _StreamingTTSClient.instance;
257
+ }
258
+ /**
259
+ * Get current state
260
+ */
261
+ getCurrentState() {
262
+ return this.stateSubject.value;
263
+ }
264
+ /**
265
+ * Get state changes as observable
266
+ */
267
+ getStateChanges() {
268
+ return this.stateSubject.asObservable();
269
+ }
270
+ /**
271
+ * Get progress updates as observable
272
+ */
273
+ getProgress() {
274
+ return this.progressSubject.asObservable();
275
+ }
276
+ /**
277
+ * Speak text with simple streaming
278
+ */
279
+ speakStream(text, voice, options = {}) {
280
+ return new Observable2((subscriber) => {
281
+ this.performSimpleStreaming(text, voice, options, subscriber);
282
+ });
283
+ }
284
+ /**
285
+ * Simple streaming implementation - no queues, just direct playback
286
+ */
287
+ async performSimpleStreaming(text, voice, options, subscriber) {
288
+ try {
289
+ this.cleanup();
290
+ await new Promise((resolve) => setTimeout(resolve, 10));
291
+ this.setState("LOADING" /* LOADING */);
292
+ const gatewayUrl = usePackageSettingsStore.getState().settings?.gatewayApiUrl;
293
+ if (!gatewayUrl) {
294
+ throw new Error("Gateway API URL not configured");
295
+ }
296
+ this.controller = new AbortController();
297
+ const response = await fetch(`${gatewayUrl}/tts`, {
298
+ method: "POST",
299
+ headers: {
300
+ ...getOrAppendAuthHeader(),
301
+ "Content-Type": "application/json"
302
+ },
303
+ body: JSON.stringify({
304
+ Text: text,
305
+ ModelName: voice
306
+ }),
307
+ signal: this.controller.signal
308
+ });
309
+ if (this.controller.signal.aborted) {
310
+ subscriber.complete();
311
+ return;
312
+ }
313
+ if (!response.ok) {
314
+ throw new Error(`TTS request failed: ${response.status} ${response.statusText}`);
315
+ }
316
+ const audioBlob = await response.blob();
317
+ if (this.controller.signal.aborted) {
318
+ subscriber.complete();
319
+ return;
320
+ }
321
+ if (!audioBlob || audioBlob.size === 0) {
322
+ throw new Error("Received empty audio response");
323
+ }
324
+ this.objectUrl = URL.createObjectURL(audioBlob);
325
+ this.audio = new Audio(this.objectUrl);
326
+ this.audio.autoplay = false;
327
+ this.audio.preload = "auto";
328
+ this.setupAudioListeners(subscriber, options);
329
+ if (this.controller.signal.aborted) {
330
+ this.cleanup();
331
+ subscriber.complete();
332
+ return;
333
+ }
334
+ this.audio.load();
335
+ } catch (error) {
336
+ if (error instanceof Error && error.name === "AbortError") {
337
+ this.setState("IDLE" /* IDLE */);
338
+ subscriber.complete();
339
+ return;
340
+ }
341
+ debugLogger.error("TTS streaming failed:", {
342
+ error: error instanceof Error ? error.message : String(error)
343
+ });
344
+ this.setState("ERROR" /* ERROR */);
345
+ subscriber.error(error);
346
+ }
347
+ }
348
+ /**
349
+ * Set up audio event listeners
350
+ */
351
+ setupAudioListeners(subscriber, options) {
352
+ if (!this.audio) return;
353
+ this.audioHandlers.clear();
354
+ const canPlayThroughHandler = () => {
355
+ if (!this.audio || this.getCurrentState() !== "LOADING" /* LOADING */ || this.controller && this.controller.signal.aborted) {
356
+ return;
357
+ }
358
+ this.setState("PLAYING" /* PLAYING */);
359
+ this.audio.play().catch((error) => {
360
+ debugLogger.error("Failed to start audio playback:", error);
361
+ this.setState("ERROR" /* ERROR */);
362
+ subscriber.error(error);
363
+ });
364
+ };
365
+ const playHandler = () => {
366
+ this.setState("PLAYING" /* PLAYING */);
367
+ subscriber.next();
368
+ };
369
+ const pauseHandler = () => {
370
+ if (this.getCurrentState() !== "IDLE" /* IDLE */) {
371
+ this.setState("PAUSED" /* PAUSED */);
372
+ }
373
+ };
374
+ const endedHandler = () => {
375
+ this.setState("IDLE" /* IDLE */);
376
+ this.clearAudioHandlers();
377
+ subscriber.complete();
378
+ };
379
+ const timeUpdateHandler = () => {
380
+ if (this.audio && this.audio.duration) {
381
+ const buffered = this.audio.buffered.length > 0 ? this.audio.buffered.end(0) : 0;
382
+ const progress = {
383
+ currentTime: this.audio.currentTime,
384
+ duration: this.audio.duration,
385
+ percentage: this.audio.currentTime / this.audio.duration * 100,
386
+ buffered,
387
+ state: this.getCurrentState()
388
+ };
389
+ this.progressSubject.next(progress);
390
+ if (options.onProgress) {
391
+ options.onProgress(progress);
392
+ }
393
+ }
394
+ };
395
+ const errorHandler = (event) => {
396
+ debugLogger.error("Audio playback error:", event);
397
+ this.setState("ERROR" /* ERROR */);
398
+ subscriber.error(new Error("Audio playback failed"));
399
+ };
400
+ this.audioHandlers.set("canplaythrough", canPlayThroughHandler);
401
+ this.audioHandlers.set("play", playHandler);
402
+ this.audioHandlers.set("pause", pauseHandler);
403
+ this.audioHandlers.set("ended", endedHandler);
404
+ this.audioHandlers.set("timeupdate", timeUpdateHandler);
405
+ this.audioHandlers.set("error", errorHandler);
406
+ this.audio.addEventListener("canplaythrough", canPlayThroughHandler);
407
+ this.audio.addEventListener("play", playHandler);
408
+ this.audio.addEventListener("pause", pauseHandler);
409
+ this.audio.addEventListener("ended", endedHandler);
410
+ this.audio.addEventListener("timeupdate", timeUpdateHandler);
411
+ this.audio.addEventListener("error", errorHandler);
412
+ }
413
+ /**
414
+ * Stop playback
415
+ */
416
+ stop() {
417
+ if (this.controller) {
418
+ this.controller.abort();
419
+ this.controller = null;
420
+ }
421
+ if (this.audio) {
422
+ this.audio.pause();
423
+ this.audio.currentTime = 0;
424
+ this.audio.onloadstart = null;
425
+ this.audio.oncanplaythrough = null;
426
+ this.audio.onplay = null;
427
+ this.audio.onpause = null;
428
+ this.audio.onended = null;
429
+ this.audio.ontimeupdate = null;
430
+ this.audio.onerror = null;
431
+ }
432
+ this.setState("IDLE" /* IDLE */);
433
+ this.cleanup();
434
+ }
435
+ /**
436
+ * Pause playback
437
+ */
438
+ pause() {
439
+ if (this.audio && this.getCurrentState() === "PLAYING" /* PLAYING */) {
440
+ this.audio.pause();
441
+ this.setState("PAUSED" /* PAUSED */);
442
+ }
443
+ }
444
+ /**
445
+ * Resume playback
446
+ */
447
+ resume() {
448
+ if (this.audio && this.getCurrentState() === "PAUSED" /* PAUSED */) {
449
+ this.audio.play().catch((error) => {
450
+ debugLogger.error("Failed to resume audio:", error);
451
+ this.setState("ERROR" /* ERROR */);
452
+ });
453
+ this.setState("PLAYING" /* PLAYING */);
454
+ }
455
+ }
456
+ /**
457
+ * Set state and notify observers
458
+ */
459
+ setState(state) {
460
+ this.stateSubject.next(state);
461
+ }
462
+ /**
463
+ * Reset the TTS client completely - useful for model changes
464
+ */
465
+ reset() {
466
+ this.stop();
467
+ this.audio = null;
468
+ this.objectUrl = null;
469
+ this.controller = null;
470
+ this.stateSubject.next("IDLE" /* IDLE */);
471
+ }
472
+ /**
473
+ * Clear only the audio event handlers
474
+ */
475
+ clearAudioHandlers() {
476
+ if (this.audio) {
477
+ for (const [eventType, handler] of this.audioHandlers) {
478
+ this.audio.removeEventListener(eventType, handler);
479
+ }
480
+ }
481
+ this.audioHandlers.clear();
482
+ }
483
+ /**
484
+ * Clean up resources
485
+ */
486
+ cleanup() {
487
+ if (this.audio) {
488
+ this.clearAudioHandlers();
489
+ try {
490
+ this.audio.pause();
491
+ this.audio.currentTime = 0;
492
+ this.audio.src = "";
493
+ this.audio.load();
494
+ } catch (error) {
495
+ }
496
+ this.audio = null;
497
+ }
498
+ if (this.objectUrl) {
499
+ URL.revokeObjectURL(this.objectUrl);
500
+ this.objectUrl = null;
501
+ }
502
+ if (this.controller) {
503
+ this.controller.abort();
504
+ this.controller = null;
505
+ }
506
+ }
507
+ };
508
+ var getStreamingTTSClient = () => {
509
+ return StreamingTTSClient.getInstance();
510
+ };
511
+ var speakStream = (text, voice, options) => {
512
+ return getStreamingTTSClient().speakStream(text, voice, options);
513
+ };
514
+ var stopTTS = () => {
515
+ getStreamingTTSClient().stop();
516
+ };
517
+ var pauseTTS = () => {
518
+ getStreamingTTSClient().pause();
519
+ };
520
+ var resumeTTS = () => {
521
+ getStreamingTTSClient().resume();
522
+ };
523
+ var getTTSState = () => {
524
+ return getStreamingTTSClient().getCurrentState();
525
+ };
526
+
527
+ export {
528
+ VoiceService,
529
+ voiceService,
530
+ sanitizeForTTS,
531
+ TTSState,
532
+ StreamingTTSClient,
533
+ getStreamingTTSClient,
534
+ speakStream,
535
+ stopTTS,
536
+ pauseTTS,
537
+ resumeTTS,
538
+ getTTSState,
539
+ useVoiceStore
540
+ };
541
+ //# sourceMappingURL=chunk-LC64VSDS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/tts/voiceService.ts","../src/services/tts/ttsSanitizer.ts","../src/services/tts/streaming-tts.ts","../src/services/tts/tts-client.ts","../src/store/voiceStore.ts"],"mappings":"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","names":["Observable","TTSState","Observable"]}
@@ -2,6 +2,49 @@
2
2
  import { Box, Button, Skeleton, Stack, Typography } from "@mui/material";
3
3
  import { alpha } from "@mui/material/styles";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
+ function ManagementCard({
6
+ title,
7
+ description,
8
+ actions,
9
+ children,
10
+ id
11
+ }) {
12
+ return /* @__PURE__ */ jsxs(
13
+ Box,
14
+ {
15
+ component: "section",
16
+ id,
17
+ "aria-label": title,
18
+ sx: (theme) => ({
19
+ p: { xs: 1.5, sm: 2 },
20
+ borderRadius: `${Number(theme.shape.borderRadius)}px`,
21
+ border: `1px solid ${theme.palette.divider}`,
22
+ bgcolor: theme.palette.bandit?.surface.raised ?? theme.palette.background.paper,
23
+ minWidth: 0
24
+ }),
25
+ children: [
26
+ /* @__PURE__ */ jsxs(
27
+ Stack,
28
+ {
29
+ direction: "row",
30
+ alignItems: "flex-start",
31
+ justifyContent: "space-between",
32
+ spacing: 1.5,
33
+ sx: { mb: children ? 1.5 : 0 },
34
+ children: [
35
+ /* @__PURE__ */ jsxs(Box, { sx: { minWidth: 0, flex: 1 }, children: [
36
+ /* @__PURE__ */ jsx(Typography, { component: "h2", variant: "subtitle1", sx: { fontWeight: 600 }, children: title }),
37
+ description && /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", sx: { mt: 0.25 }, children: description })
38
+ ] }),
39
+ actions && /* @__PURE__ */ jsx(Box, { sx: { flexShrink: 0 }, children: actions })
40
+ ]
41
+ }
42
+ ),
43
+ children
44
+ ]
45
+ }
46
+ );
47
+ }
5
48
  function ManagementPageHeader({
6
49
  title,
7
50
  description,
@@ -280,10 +323,11 @@ function SectionSkeleton({ rows = 4 }) {
280
323
  }
281
324
 
282
325
  export {
326
+ ManagementCard,
283
327
  ManagementPageHeader,
284
328
  SaveStatus,
285
329
  UnsavedChangesBar,
286
330
  ManagementEmptyState,
287
331
  SectionSkeleton
288
332
  };
289
- //# sourceMappingURL=chunk-DH5A2HT2.mjs.map
333
+ //# sourceMappingURL=chunk-LY3O7UWA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/management/shell/parts.tsx"],"mappings":"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","names":[]}