@burdenoff/fe-libs 2026.1003.1 → 2026.1003.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/shared/assistant/index.d.ts +1 -0
  2. package/dist/shared/assistant/index.d.ts.map +1 -1
  3. package/dist/shared/assistant/prewarm.d.ts +71 -0
  4. package/dist/shared/assistant/prewarm.d.ts.map +1 -1
  5. package/dist/shared/assistant/prewarm.js +49 -2
  6. package/dist/shared/assistant/speech/speechFeed.d.ts +63 -0
  7. package/dist/shared/assistant/speech/speechFeed.d.ts.map +1 -0
  8. package/dist/shared/assistant/speech/speechFeed.js +40 -0
  9. package/dist/shared/assistant/turnTimeline.d.ts +22 -2
  10. package/dist/shared/assistant/turnTimeline.d.ts.map +1 -1
  11. package/dist/shared/assistant/turnTimeline.js +18 -1
  12. package/dist/shared/assistant/turnTimingReport.d.ts.map +1 -1
  13. package/dist/shared/assistant/turnTimingReport.js +5 -4
  14. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  15. package/dist/shared/assistant/ui/AssistantChatArea.js +981 -931
  16. package/dist/shared/assistant/ui/AssistantSpeechProvider.d.ts.map +1 -1
  17. package/dist/shared/assistant/ui/AssistantSpeechProvider.js +198 -169
  18. package/dist/shared/assistant/ui/useVoiceSession.d.ts.map +1 -1
  19. package/dist/shared/assistant/ui/useVoiceSession.js +165 -153
  20. package/dist/shared/assistant/voice/speakableText.d.ts +16 -1
  21. package/dist/shared/assistant/voice/speakableText.d.ts.map +1 -1
  22. package/dist/shared/assistant/voice/speakableText.js +116 -102
  23. package/dist/shared/assistant/voice/voiceSession.d.ts +12 -0
  24. package/dist/shared/assistant/voice/voiceSession.d.ts.map +1 -1
  25. package/dist/shared/assistant/voice/voiceSession.js +6 -0
  26. package/dist/shared-assistant.js +151 -150
  27. package/package.json +1 -1
@@ -1,164 +1,176 @@
1
1
  import { useVoiceInput as e } from "../voice/useVoiceInput.js";
2
- import { INITIAL_SESSION as t, INTERRUPT_MAX_MS as ee, NOTHING_HEARD as n, SILENCE_SUBMIT_MS as te, advanceHeardClock as ne, isCapturing as r, isSubmittable as re, planListeningHold as ie, planReplyConsumption as ae, planVoiceAnnouncement as oe, spokenSoFar as i, voiceSessionReducer as se } from "../voice/voiceSession.js";
2
+ import { speechFeed as t } from "../speech/speechFeed.js";
3
+ import { INITIAL_SESSION as n, INTERRUPT_MAX_MS as ee, NOTHING_HEARD as r, SILENCE_SUBMIT_MS as te, advanceHeardClock as ne, isCapturing as i, isSubmittable as re, planListeningHold as ie, planReplyConsumption as ae, planVoiceAnnouncement as oe, spokenSoFar as a, voiceSessionReducer as se } from "../voice/voiceSession.js";
3
4
  import { captionChunks as ce } from "../voice/speechPlayback.js";
4
- import { turnClockMs as a } from "../turnTimeline.js";
5
+ import { turnClockMs as o } from "../turnTimeline.js";
5
6
  import { useAssistantSpeech as le } from "./AssistantSpeechProvider.js";
6
- import { useCallback as o, useEffect as s, useLayoutEffect as ue, useMemo as de, useReducer as fe, useRef as c, useState as l } from "react";
7
+ import { useCallback as s, useEffect as c, useLayoutEffect as ue, useMemo as de, useReducer as fe, useRef as l, useState as u } from "react";
7
8
  //#region src/shared/assistant/ui/useVoiceSession.ts
8
9
  var pe = 4e3, me = 2500, he = 5e3, ge = 12e3, _e = "data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQAAAAA=";
9
- function u({ onSubmit: u, latestReply: d, language: ve }) {
10
- let f = c(null), [p, m] = fe(o((e, t) => se(e, t, f.current), []), t), h = le(), { setSessionSpeaking: g, setSessionMicOpen: _, speakingMessageId: v, stop: y } = h, ye = c(h.toggle), b = h.toggle;
10
+ function d({ onSubmit: d, latestReply: f, language: ve }) {
11
+ let p = l(null), [m, h] = fe(s((e, t) => se(e, t, p.current), []), n), g = le(), { setSessionSpeaking: _, setSessionMicOpen: v, speakingMessageId: y, stop: b } = g, x = l(g.toggle), S = g.toggle;
11
12
  ue(() => {
12
- ye.current = b;
13
- }, [b]);
14
- let x = c(null), S = c({}), C = c(n), w = c(null), T = c(!1), [E, D] = l(null), [O, k] = l(!1), [A, j] = l(!1), M = c(p);
15
- M.current = p;
16
- let N = c([]), P = c(null), F = c(!1), I = o(() => {
17
- N.current = [], P.current = null, F.current = !1;
18
- }, []), L = o(() => {
13
+ x.current = S;
14
+ }, [S]);
15
+ let C = l(null), w = l({}), T = l(r), E = l(null), D = l(!1), O = l(null), [k, A] = u(null), [j, M] = u(!1), [N, P] = u(!1), F = l(m);
16
+ F.current = m;
17
+ let I = l([]), L = l(null), R = l(!1), z = s(() => {
18
+ I.current = [], L.current = null, R.current = !1;
19
+ }, []), B = s(() => {
19
20
  for (;;) {
20
- let e = N.current.shift();
21
+ let e = I.current.shift();
21
22
  if (!e) return !1;
22
23
  if (!(e.stillWanted && !e.stillWanted())) {
23
- P.current = e, f.current = f.current ? `${f.current} ${e.text}` : e.text;
24
+ L.current = e, p.current = p.current ? `${p.current} ${e.text}` : e.text;
24
25
  try {
25
- ye.current(e.id, e.text, e.lang);
26
+ x.current(e.id, e.text, e.lang);
26
27
  } catch {
27
- P.current = null;
28
+ L.current = null;
28
29
  continue;
29
30
  }
30
31
  return !0;
31
32
  }
32
33
  }
33
- }, []), R = c(!1), z = o((e) => {
34
+ }, []), V = l(!1), H = s((e) => {
34
35
  let t = ie({
35
36
  requested: e,
36
- held: R.current,
37
- muted: M.current.muted
37
+ held: V.current,
38
+ muted: F.current.muted
38
39
  });
39
- R.current = t.held, t.mute !== null && m({
40
+ V.current = t.held, t.mute !== null && h({
40
41
  type: "mute",
41
42
  muted: t.mute
42
43
  });
43
- }, []), B = o((e) => {
44
- let t = oe(M.current);
45
- t !== "drop" && (P.current?.id === e.id || N.current.some((t) => t.id === e.id) || (N.current.push(e), t === "start" && !F.current && (F.current = !0, m({ type: "announce" }))));
46
- }, []), V = o((e) => {
47
- if (M.current.phase !== "thinking") {
48
- B(e);
44
+ }, []), U = s((e) => {
45
+ let t = oe(F.current);
46
+ t !== "drop" && (L.current?.id === e.id || I.current.some((t) => t.id === e.id) || (I.current.push(e), t === "start" && !R.current && (R.current = !0, h({ type: "announce" }))));
47
+ }, []), W = s((e) => {
48
+ if (F.current.phase !== "thinking") {
49
+ U(e);
49
50
  return;
50
51
  }
51
- N.current.push(e), F.current = !0, m({ type: "answered-locally" });
52
- }, [B]), H = c(d);
53
- H.current = d, s(() => {
54
- if (p.phase === "speaking") {
55
- f.current = d?.text ?? null;
52
+ I.current.push(e), R.current = !0, h({ type: "answered-locally" });
53
+ }, [U]), G = l(f);
54
+ G.current = f, c(() => {
55
+ if (m.phase === "speaking") {
56
+ let e = O.current;
57
+ p.current = e && E.current === e.id && f?.id !== e.id ? e.text : f?.text ?? null;
56
58
  return;
57
59
  }
58
- if (f.current === null) return;
60
+ if (p.current === null) return;
59
61
  let e = setTimeout(() => {
60
- f.current = null;
62
+ p.current = null;
61
63
  }, me);
62
64
  return () => clearTimeout(e);
63
- }, [p.phase, d]);
64
- let U = o((e, t) => {
65
- m({
65
+ }, [m.phase, f]);
66
+ let K = s((e, t) => {
67
+ h({
66
68
  type: "speech",
67
69
  transcript: e,
68
70
  final: t
69
71
  });
70
- }, []), W = c(0), G = o(() => {
71
- I(), y(), W.current = Date.now(), k(!0), m({ type: "interrupt" });
72
- }, [y, I]), K = e({
73
- onFinalize: o((e) => U(e, !0), [U]),
72
+ }, []), q = l(0), J = s(() => {
73
+ z(), b(), q.current = Date.now(), M(!0), h({ type: "interrupt" });
74
+ }, [b, z]), Y = e({
75
+ onFinalize: s((e) => K(e, !0), [K]),
74
76
  language: ve
75
77
  });
76
- s(() => {
77
- K.interim && U(K.interim, !1);
78
- }, [K.interim, U]), s(() => {
79
- if (x.current && clearTimeout(x.current), j(!1), C.current = ne(C.current, p, a()), p.phase !== "listening" || p.muted || !re(i(p))) return;
80
- let e = setTimeout(() => j(!0), 800), t = a();
81
- return x.current = setTimeout(() => {
82
- S.current = {
83
- speechEnded: C.current.at ?? t,
78
+ c(() => {
79
+ Y.interim && K(Y.interim, !1);
80
+ }, [Y.interim, K]), c(() => {
81
+ if (C.current && clearTimeout(C.current), P(!1), T.current = ne(T.current, m, o()), m.phase !== "listening" || m.muted || !re(a(m))) return;
82
+ let e = setTimeout(() => P(!0), 800), t = o();
83
+ return C.current = setTimeout(() => {
84
+ w.current = {
85
+ speechEnded: T.current.at ?? t,
84
86
  graceStarted: t,
85
- graceEnded: a()
86
- }, m({ type: "silence" });
87
+ graceEnded: o()
88
+ }, h({ type: "silence" });
87
89
  }, te), () => {
88
- clearTimeout(e), x.current && clearTimeout(x.current);
90
+ clearTimeout(e), C.current && clearTimeout(C.current);
89
91
  };
90
- }, [p]), s(() => {
91
- if (!O) return;
92
- let e = Date.now() - W.current, t = K.isListening ? Math.max(0, 500 - e) : Math.max(0, ee - e), n = setTimeout(() => k(!1), t);
92
+ }, [m]), c(() => {
93
+ if (!j) return;
94
+ let e = Date.now() - q.current, t = Y.isListening ? Math.max(0, 500 - e) : Math.max(0, ee - e), n = setTimeout(() => M(!1), t);
93
95
  return () => clearTimeout(n);
94
- }, [O, K.isListening]);
95
- let q = c("");
96
- p.phase === "listening" && (q.current = i(p)), s(() => {
97
- if (p.phase !== "thinking") return;
98
- _(!1), I();
99
- let e = q.current.trim();
100
- e && u(e, J.current ?? `vs-orphan-${Date.now().toString(36)}`, S.current), S.current = {}, C.current = n;
101
- }, [p.phase]), s(() => {
102
- let e = ae(d?.id, p.phase, w.current);
103
- e.claim && (w.current = d?.id ?? null, e.advance && d && m({
96
+ }, [j, Y.isListening]);
97
+ let X = l("");
98
+ m.phase === "listening" && (X.current = a(m)), c(() => {
99
+ if (m.phase !== "thinking") return;
100
+ v(!1), z();
101
+ let e = X.current.trim();
102
+ e && d(e, Z.current ?? `vs-orphan-${Date.now().toString(36)}`, w.current), w.current = {}, T.current = r;
103
+ }, [m.phase]), c(() => {
104
+ let e = ae(f?.id, m.phase, E.current);
105
+ e.claim && (E.current = f?.id ?? null, e.advance && f && h({
104
106
  type: "reply",
105
- text: d.text
107
+ text: f.text
106
108
  }));
107
- }, [d, p.phase]), s(() => {
108
- let e = v !== null;
109
- T.current && !e && (P.current = null, (M.current.phase !== "speaking" || !L()) && m({ type: "speech-ended" })), T.current = e;
110
- }, [v, L]), s(() => {
111
- p.phase !== "listening" && D((e) => e === "nothing-heard" ? null : e);
112
- }, [p.phase]), s(() => {
113
- if (p.phase !== "speaking" || v !== null) return;
109
+ }, [f, m.phase]), c(() => {
110
+ if (y === null || m.phase !== "thinking" || E.current === y) return;
111
+ let e = t.peek(y);
112
+ !e || e.channel !== "voice" || e.voiceSessionId === void 0 || e.voiceSessionId !== Z.current || (E.current = y, O.current = {
113
+ id: y,
114
+ text: e.text
115
+ }, h({
116
+ type: "reply-audio-started",
117
+ replyId: y
118
+ }));
119
+ }, [y, m.phase]), c(() => {
120
+ let e = y !== null;
121
+ D.current && !e && (L.current = null, (F.current.phase !== "speaking" || !B()) && h({ type: "speech-ended" })), D.current = e;
122
+ }, [y, B]), c(() => {
123
+ m.phase !== "listening" && A((e) => e === "nothing-heard" ? null : e);
124
+ }, [m.phase]), c(() => {
125
+ if (m.phase !== "speaking" || y !== null) return;
114
126
  let e = setTimeout(() => {
115
- T.current || (I(), m({ type: "speech-ended" }));
127
+ D.current || (z(), h({ type: "speech-ended" }));
116
128
  }, pe);
117
129
  return () => clearTimeout(e);
118
130
  }, [
119
- p.phase,
120
- v,
121
- I
122
- ]), s(() => {
123
- let e = r(p);
124
- _(e), e ? K.isActive || K.start("auto") : K.isActive && K.stop();
131
+ m.phase,
132
+ y,
133
+ z
134
+ ]), c(() => {
135
+ let e = i(m);
136
+ v(e), e ? Y.isActive || Y.start("auto") : Y.isActive && Y.stop();
125
137
  }, [
126
- p,
127
- K,
128
- _
129
- ]), s(() => {
130
- p.phase !== "speaking" || !F.current || (F.current = !1, L() || m({ type: "speech-ended" }));
131
- }, [p.phase, L]), s(() => {
132
- K.error === "not-allowed" || K.error === "audio-capture" ? m({
138
+ m,
139
+ Y,
140
+ v
141
+ ]), c(() => {
142
+ m.phase !== "speaking" || !R.current || (R.current = !1, B() || h({ type: "speech-ended" }));
143
+ }, [m.phase, B]), c(() => {
144
+ Y.error === "not-allowed" || Y.error === "audio-capture" ? h({
133
145
  type: "fail",
134
146
  error: "mic-denied"
135
- }) : K.error === "language-not-supported" ? m({
147
+ }) : Y.error === "language-not-supported" ? h({
136
148
  type: "fail",
137
149
  error: "no-speech-support"
138
- }) : K.error === "network" ? D("network") : K.error === "unknown" && D("recognition-failed");
139
- }, [K.error]), s(() => {
140
- K.error !== null || !K.isListening || D((e) => e === "network" || e === "recognition-failed" ? null : e);
141
- }, [K.error, K.isListening]), s(() => {
142
- if (K.isListening && D((e) => e === "not-capturing" ? null : e), !r(p) || K.isListening) return;
143
- let e = setTimeout(() => D("not-capturing"), he);
150
+ }) : Y.error === "network" ? A("network") : Y.error === "unknown" && A("recognition-failed");
151
+ }, [Y.error]), c(() => {
152
+ Y.error !== null || !Y.isListening || A((e) => e === "network" || e === "recognition-failed" ? null : e);
153
+ }, [Y.error, Y.isListening]), c(() => {
154
+ if (Y.isListening && A((e) => e === "not-capturing" ? null : e), !i(m) || Y.isListening) return;
155
+ let e = setTimeout(() => A("not-capturing"), he);
144
156
  return () => clearTimeout(e);
145
- }, [p, K.isListening]), s(() => {
146
- if (p.phase !== "listening" || p.muted || !K.isListening || i(p) !== "") return;
147
- let e = setTimeout(() => D("nothing-heard"), ge);
157
+ }, [m, Y.isListening]), c(() => {
158
+ if (m.phase !== "listening" || m.muted || !Y.isListening || a(m) !== "") return;
159
+ let e = setTimeout(() => A("nothing-heard"), ge);
148
160
  return () => clearTimeout(e);
149
- }, [p, K.isListening]), s(() => {
150
- i(p) !== "" && D(null);
151
- }, [p]);
152
- let J = c(null), Y = o(() => {
153
- if (k(!1), j(!1), I(), R.current = !1, !K.isSupported) {
154
- m({
161
+ }, [m, Y.isListening]), c(() => {
162
+ a(m) !== "" && A(null);
163
+ }, [m]);
164
+ let Z = l(null), Q = s(() => {
165
+ if (M(!1), P(!1), z(), V.current = !1, !Y.isSupported) {
166
+ h({
155
167
  type: "fail",
156
168
  error: "no-speech-support"
157
169
  });
158
170
  return;
159
171
  }
160
- if (h.isBlocked) {
161
- m({
172
+ if (g.isBlocked) {
173
+ h({
162
174
  type: "fail",
163
175
  error: "no-voice-support"
164
176
  });
@@ -177,63 +189,63 @@ function u({ onSubmit: u, latestReply: d, language: ve }) {
177
189
  e.volume = 0, e.play().catch(() => {});
178
190
  }
179
191
  } catch {}
180
- g(!0), D(null), w.current = H.current?.id ?? null, J.current = `vs-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`, m({ type: "start" });
192
+ _(!0), A(null), E.current = G.current?.id ?? null, O.current = null, Z.current = `vs-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`, h({ type: "start" });
181
193
  }, [
182
- K.isSupported,
183
- h.isBlocked,
184
- g,
185
- I
186
- ]), X = o(() => {
187
- k(!1), j(!1), I(), R.current = !1, J.current = null, m({ type: "end" }), y(), g(!1);
194
+ Y.isSupported,
195
+ g.isBlocked,
196
+ _,
197
+ z
198
+ ]), $ = s(() => {
199
+ M(!1), P(!1), z(), V.current = !1, Z.current = null, h({ type: "end" }), b(), _(!1);
188
200
  }, [
189
- y,
190
- g,
191
- I
192
- ]), Z = o((e) => J.current === e, []), Q = o(() => {
193
- m({
201
+ b,
202
+ _,
203
+ z
204
+ ]), ye = s((e) => Z.current === e, []), be = s(() => {
205
+ h({
194
206
  type: "mute",
195
- muted: !M.current.muted
207
+ muted: !F.current.muted
196
208
  });
197
209
  }, []);
198
- s(() => () => {
199
- g(!1), _(!1);
200
- }, [g, _]);
201
- let $ = ce(h.spokenChunks, p.phase, v);
210
+ c(() => () => {
211
+ _(!1), v(!1);
212
+ }, [_, v]);
213
+ let xe = ce(g.spokenChunks, m.phase, y);
202
214
  return de(() => ({
203
- session: p,
204
- notice: E,
205
- spokenChunks: $,
206
- capturing: K.isListening,
207
- active: p.phase !== "idle" && (p.phase !== "ended" || p.error !== null),
208
- interrupting: O,
209
- awaitingEndpoint: A,
210
- available: K.isSupported && !h.isBlocked,
211
- start: Y,
212
- end: X,
213
- isCurrentSession: Z,
214
- toggleMute: Q,
215
- interrupt: G,
216
- announce: B,
217
- holdListening: z,
218
- answerLocally: V
215
+ session: m,
216
+ notice: k,
217
+ spokenChunks: xe,
218
+ capturing: Y.isListening,
219
+ active: m.phase !== "idle" && (m.phase !== "ended" || m.error !== null),
220
+ interrupting: j,
221
+ awaitingEndpoint: N,
222
+ available: Y.isSupported && !g.isBlocked,
223
+ start: Q,
224
+ end: $,
225
+ isCurrentSession: ye,
226
+ toggleMute: be,
227
+ interrupt: J,
228
+ announce: U,
229
+ holdListening: H,
230
+ answerLocally: W
219
231
  }), [
220
- p,
221
- E,
222
- O,
223
- A,
224
- K.isListening,
225
- K.isSupported,
226
- h.isBlocked,
227
- $,
228
- Y,
229
- X,
230
- Z,
232
+ m,
233
+ k,
234
+ j,
235
+ N,
236
+ Y.isListening,
237
+ Y.isSupported,
238
+ g.isBlocked,
239
+ xe,
231
240
  Q,
232
- G,
233
- B,
234
- z,
235
- V
241
+ $,
242
+ ye,
243
+ be,
244
+ J,
245
+ U,
246
+ H,
247
+ W
236
248
  ]);
237
249
  }
238
250
  //#endregion
239
- export { u as useVoiceSession };
251
+ export { d as useVoiceSession };
@@ -80,6 +80,19 @@ export declare const SPEECH_CHUNK_CHARS = 180;
80
80
  * is ~7–10 seconds, the same target the Latin limit is aiming at.
81
81
  */
82
82
  export declare const SPEECH_CHUNK_CJK_CHARS = 40;
83
+ /**
84
+ * Ceiling for the FIRST chunk of a voice-session reply spoken from the speech
85
+ * feed (BOFF-8062, speed design C1), in characters.
86
+ *
87
+ * Nothing is heard until chunk 0 has made a full round trip to the TTS proxy,
88
+ * and that trip scales with the text. The design's range is about 100-120
89
+ * characters; 110 is its midpoint, taken as the default because the alpha TTS
90
+ * latency sweep (V-C1) is not part of this change. Applies ONLY to replies
91
+ * spoken from the feed — never to panel announcements, readbacks or the
92
+ * Listen button, so their chunking (and the local-command RT4 check) is
93
+ * unchanged.
94
+ */
95
+ export declare const SPEECH_FIRST_CHUNK_MAX_CHARS = 110;
83
96
  export interface SpeakableOptions {
84
97
  labels?: Partial<SpeakableLabels>;
85
98
  maxChars?: number;
@@ -117,5 +130,7 @@ export declare function containsCjk(text: string): boolean;
117
130
  * listener expects) rather than an arbitrary character offset. A CJK sentence
118
131
  * gets the tighter CJK ceiling, because a character there is a whole syllable.
119
132
  */
120
- export declare function chunkForSpeech(text: string, maxChars?: number, cjkMaxChars?: number): string[];
133
+ export declare function chunkForSpeech(text: string, maxChars?: number, cjkMaxChars?: number, options?: {
134
+ firstChunkMaxChars?: number;
135
+ }): string[];
121
136
  //# sourceMappingURL=speakableText.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"speakableText.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/voice/speakableText.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAStC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,OAAQ,CAAC;AAEzC;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AA6CD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBpD;AAkBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAO,EAAE,GAAG,SAAQ,GAAG,MAAM,CAE9E;AAkLD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAiJxF;AAiMD,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAkFD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAA2B,EACrC,WAAW,GAAE,MAA+B,GAC3C,MAAM,EAAE,CAoEV"}
1
+ {"version":3,"file":"speakableText.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/voice/speakableText.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAStC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,OAAQ,CAAC;AAEzC;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAKhD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AA6CD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBpD;AAkBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAO,EAAE,GAAG,SAAQ,GAAG,MAAM,CAE9E;AAkLD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAiJxF;AAiMD,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAkFD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAA2B,EACrC,WAAW,GAAE,MAA+B,EAC5C,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,MAAM,EAAE,CAyEV"}