@burdenoff/fe-libs 2026.906.2 → 2026.906.4

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/conversation.d.ts +12 -0
  2. package/dist/shared/assistant/conversation.d.ts.map +1 -1
  3. package/dist/shared/assistant/index.d.ts +1 -0
  4. package/dist/shared/assistant/index.d.ts.map +1 -1
  5. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  6. package/dist/shared/assistant/ui/AssistantChatArea.js +154 -142
  7. package/dist/shared/assistant/ui/AssistantSpeechProvider.d.ts.map +1 -1
  8. package/dist/shared/assistant/ui/AssistantSpeechProvider.js +100 -88
  9. package/dist/shared/assistant/ui/useVoiceSession.d.ts.map +1 -1
  10. package/dist/shared/assistant/ui/useVoiceSession.js +1 -1
  11. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
  12. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +56 -56
  13. package/dist/shared/assistant/ui/voice/VoiceCaption.d.ts +6 -0
  14. package/dist/shared/assistant/ui/voice/VoiceCaption.d.ts.map +1 -1
  15. package/dist/shared/assistant/ui/voice/VoiceCaption.js +23 -14
  16. package/dist/shared/assistant/ui/voice/VoiceMiniController.d.ts.map +1 -1
  17. package/dist/shared/assistant/ui/voice/VoiceMiniController.js +28 -27
  18. package/dist/shared/assistant/ui/voice/VoiceStage.d.ts.map +1 -1
  19. package/dist/shared/assistant/ui/voice/VoiceStage.js +1 -0
  20. package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.d.ts +18 -4
  21. package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.d.ts.map +1 -1
  22. package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.js +36 -26
  23. package/dist/shared/assistant/voice/miniCaptionBudget.d.ts +46 -0
  24. package/dist/shared/assistant/voice/miniCaptionBudget.d.ts.map +1 -0
  25. package/dist/shared/assistant/voice/miniCaptionBudget.js +15 -0
  26. package/dist/shared-assistant.js +69 -68
  27. package/package.json +1 -1
@@ -42,6 +42,18 @@ export interface AssistantMessageMetadata {
42
42
  * voice the moment the user switches, even with the right voice installed.
43
43
  */
44
44
  lang?: string;
45
+ /**
46
+ * On a "continued from a voice conversation" note: how many spoken turns the
47
+ * conversation held when it was written.
48
+ *
49
+ * ★★ The marker lives on the MESSAGE, not in component state, and that is the
50
+ * whole point. Tracked in state it reset every time `PanelContainer`
51
+ * unmounted the panel — minimise and reopen and the same note could be
52
+ * appended again — and it could not say WHICH turns were already carried
53
+ * over, so a later note repeated questions the thread already showed. A
54
+ * message persists with the conversation and answers both.
55
+ */
56
+ continuedVoiceTurns?: number;
45
57
  /**
46
58
  * This turn happened inside a live VOICE session, not in the chat panel.
47
59
  *
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/conversation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAIhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,cAAc,GACd,SAAS,GACT,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,MAAM,2BAA2B,GACnC,MAAM,GACN,cAAc,GACd,YAAY,GACZ,WAAW,GACX,UAAU,GACV,OAAO,CAAC;AAEZ;;;;;;;;;GASG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAC3C;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,2BAA2B,CAAC;IACpC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,aAAa,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,wEAAwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/conversation.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,7 @@ export * from './voice/speechVoices';
50
50
  export * from './voice/voiceTranscript';
51
51
  export * from './voice/speakableText';
52
52
  export * from './voice/voicePreview';
53
+ export * from './voice/miniCaptionBudget';
53
54
  export * from './voice/assistantPollSchedule';
54
55
  export * from './voice/captionText';
55
56
  export * from './voice/languagePair';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantChatArea.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantChatArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;AAkEf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAoLvE;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAkgDxD,CAAC"}
1
+ {"version":3,"file":"AssistantChatArea.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantChatArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;AAkEf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAoLvE;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA2mDxD,CAAC"}
@@ -46,25 +46,25 @@ var Ie = {
46
46
  function Be() {
47
47
  return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
48
48
  }
49
- function O(e) {
49
+ function Ve(e) {
50
50
  return e.info?.time?.created ?? 0;
51
51
  }
52
- function k(e) {
52
+ function O(e) {
53
53
  return (e ?? []).filter((e) => e.type === "text" && typeof e.text == "string").map((e) => e.text?.trim() ?? "").filter(Boolean).join("\n");
54
54
  }
55
- function A(e) {
55
+ function k(e) {
56
56
  return (e ?? []).filter((e) => e.type === "tool" && e.tool).map((e) => {
57
57
  let t = e.state?.status ?? "running", n = e.tool ?? "tool";
58
58
  return t === "completed" ? `Completed: ${n}` : t === "failed" ? `Failed: ${n}` : `Running: ${n}`;
59
59
  });
60
60
  }
61
- function Ve(e, t) {
62
- let n = e.filter((e) => e.info?.role === "assistant" && O(e) > t).sort((e, t) => O(e) - O(t));
61
+ function He(e, t) {
62
+ let n = e.filter((e) => e.info?.role === "assistant" && Ve(e) > t).sort((e, t) => Ve(e) - Ve(t));
63
63
  if (n.length === 0) return {
64
64
  content: "Thinking...",
65
65
  done: !1
66
66
  };
67
- let r = n[n.length - 1], i = k(r.parts), a = p(r.parts), o = A(r.parts), s = x(r.parts), c = [
67
+ let r = n[n.length - 1], i = O(r.parts), a = p(r.parts), o = k(r.parts), s = x(r.parts), c = [
68
68
  i,
69
69
  ...a,
70
70
  ...o
@@ -78,7 +78,7 @@ function Ve(e, t) {
78
78
  ...s ? { pendingWrite: s } : {}
79
79
  };
80
80
  }
81
- function He(e) {
81
+ function Ue(e) {
82
82
  switch (e) {
83
83
  case "provisioning": return "Starting assistant environment...";
84
84
  case "connecting": return "Connecting to assistant...";
@@ -86,40 +86,40 @@ function He(e) {
86
86
  default: return "";
87
87
  }
88
88
  }
89
- var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
90
- let k = ae(), { product: A, modes: j, gatherPageContext: Ue, buildPrompt: We, reportTokenUsage: Ge } = ie(), { getAccessToken: Ke, getWorkspaceToken: qe, userId: Je } = t(), { locale: Ye } = e(), Xe = S((e) => e.assistantLanguage), Ze = S((e) => e.replyLanguage), Qe = T(() => re(Xe, Ze, Ye), [
89
+ var A = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
90
+ let O = ae(), { product: k, modes: A, gatherPageContext: We, buildPrompt: Ge, reportTokenUsage: Ke } = ie(), { getAccessToken: j, getWorkspaceToken: qe, userId: Je } = t(), { locale: Ye } = e(), Xe = S((e) => e.assistantLanguage), Ze = S((e) => e.replyLanguage), Qe = T(() => re(Xe, Ze, Ye), [
91
91
  Xe,
92
92
  Ze,
93
93
  Ye
94
- ]), $e = Qe.reply.english, et = Qe.replyIsExplicit, tt = Qe.reply.code, { conversations: nt, activeConversationId: M, mode: N, processingByConversationId: rt, setMode: P, setConversationMode: it, setActiveConversation: at, createConversation: F, addMessage: I, updateMessage: ot, patchMessage: L, mergeMessageMetadata: st, setConversationProcessing: R, setBackendSessionId: ct, clearBackendSessionId: lt, setSandbox: z, clearSandbox: ut, acknowledgeApiCalls: dt } = S(), B = Te(nt.find((e) => e.id === M)), ft = B.all, V = M ? rt[M] : void 0, H = fe(V?.status), pt = H ? V?.messageId ?? null : null, mt = V?.status === "error" ? V.messageId : null, { canUseApiCalls: U, loading: ht } = we(he()), gt = T(() => j.filter((e) => !e.requiresAdmin || U), [j, U]), [_t, vt] = Pe(null), [yt, bt] = Pe(!1), xt = E({}), W = E(_e()), St = E(/* @__PURE__ */ new Set()), G = T(() => j.find((e) => e.id === N), [j, N]);
94
+ ]), $e = Qe.reply.english, et = Qe.replyIsExplicit, tt = Qe.reply.code, { conversations: nt, activeConversationId: M, mode: N, processingByConversationId: rt, setMode: it, setConversationMode: at, setActiveConversation: ot, createConversation: P, addMessage: F, updateMessage: st, patchMessage: I, mergeMessageMetadata: ct, setConversationProcessing: L, setBackendSessionId: lt, clearBackendSessionId: R, setSandbox: z, clearSandbox: ut, acknowledgeApiCalls: dt } = S(), ft = nt.find((e) => e.id === M), B = Te(ft), V = B.all, H = M ? rt[M] : void 0, U = fe(H?.status), pt = U ? H?.messageId ?? null : null, mt = H?.status === "error" ? H.messageId : null, { canUseApiCalls: W, loading: ht } = we(he()), gt = T(() => A.filter((e) => !e.requiresAdmin || W), [A, W]), [_t, vt] = Pe(null), [yt, G] = Pe(!1), bt = E({}), K = E(_e()), xt = E(/* @__PURE__ */ new Set()), St = T(() => A.find((e) => e.id === N), [A, N]);
95
95
  w(() => {
96
- ht || (!G || G.requiresAdmin && !U) && N !== "assistant" && P("assistant");
96
+ ht || (!St || St.requiresAdmin && !W) && N !== "assistant" && it("assistant");
97
97
  }, [
98
98
  N,
99
- G,
100
- U,
99
+ St,
100
+ W,
101
101
  ht,
102
- P
102
+ it
103
103
  ]);
104
- let K = C((e, t, n, r) => {
105
- R(e, n, t, null), r ? ot(e, t, r) : ot(e, t, He(n));
106
- }, [R, ot]), Ct = C(async (e, t, n, a, s) => {
104
+ let q = C((e, t, n, r) => {
105
+ L(e, n, t, null), r ? st(e, t, r) : st(e, t, Ue(n));
106
+ }, [L, st]), Ct = C(async (e, t, n, a, s) => {
107
107
  let c = S.getState().sandboxesByMode[n]?.sandboxId ?? null, u = async (e) => {
108
- if (W.current.isFresh(e)) return !0;
108
+ if (K.current.isFresh(e)) return !0;
109
109
  try {
110
- return await f(e, a, s, 3e5), await d(e, a, s, 9e4), W.current.markVerified(e), !0;
110
+ return await f(e, a, s, 3e5), await d(e, a, s, 9e4), K.current.markVerified(e), !0;
111
111
  } catch {
112
- return W.current.invalidate(e), !1;
112
+ return K.current.invalidate(e), !1;
113
113
  }
114
114
  };
115
- if (c && (z(n, c, "provisioning"), K(e, t, "provisioning", "Reusing assistant environment..."), await u(c) || (z(n, null, "provisioning"), c = null)), !c) {
116
- K(e, t, "provisioning", "Looking for existing environment...");
117
- let r = await o(a, A, n, Me(), s);
118
- r && (z(n, r, "provisioning"), K(e, t, "provisioning", "Reusing assistant environment..."), await u(r) ? c = r : z(n, null, "provisioning"));
115
+ if (c && (z(n, c, "provisioning"), q(e, t, "provisioning", "Reusing assistant environment..."), await u(c) || (z(n, null, "provisioning"), c = null)), !c) {
116
+ q(e, t, "provisioning", "Looking for existing environment...");
117
+ let r = await o(a, k, n, Me(), s);
118
+ r && (z(n, r, "provisioning"), q(e, t, "provisioning", "Reusing assistant environment..."), await u(r) ? c = r : z(n, null, "provisioning"));
119
119
  }
120
120
  if (!c) {
121
- if (n === "api-calls" && !Ke()) throw Error("API Calls mode requires an authenticated session. Please sign in again.");
122
- K(e, t, "provisioning", "Starting assistant environment..."), z(n, null, "provisioning"), c = await r(A, n, a, Me(), Re, s), z(n, c, "provisioning"), await f(c, a, s, 3e5), await d(c, a, s, 9e4);
121
+ if (n === "api-calls" && !j()) throw Error("API Calls mode requires an authenticated session. Please sign in again.");
122
+ q(e, t, "provisioning", "Starting assistant environment..."), z(n, null, "provisioning"), c = await r(k, n, a, Me(), Re, s), z(n, c, "provisioning"), await f(c, a, s, 3e5), await d(c, a, s, 9e4);
123
123
  }
124
124
  z(n, c, "running");
125
125
  let p = S.getState().conversations.find((t) => t.id === e)?.backendSessionId ?? null;
@@ -127,27 +127,27 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
127
127
  let e = await l(c, a, p, s);
128
128
  if (e.mode !== n) throw Error(`Session mode mismatch: expected ${n}, received ${e.mode}`);
129
129
  } catch {
130
- lt(e), p = null;
130
+ R(e), p = null;
131
131
  }
132
- return p || (K(e, t, "connecting", "Preparing session..."), p = (await i(c, a, n, s)).sessionId, ct(e, p)), {
132
+ return p || (q(e, t, "connecting", "Preparing session..."), p = (await i(c, a, n, s)).sessionId, lt(e, p)), {
133
133
  sandboxId: c,
134
134
  sessionId: p
135
135
  };
136
136
  }, [
137
+ R,
138
+ j,
139
+ k,
137
140
  lt,
138
- Ke,
139
- A,
140
- ct,
141
141
  z,
142
- K
143
- ]), q = C(async (e, t = [], r = {}) => {
142
+ q
143
+ ]), J = C(async (e, t = [], r = {}) => {
144
144
  let i = r.voiceSessionId !== void 0, o = S.getState(), l = o.activeConversationId ?? M;
145
- if (l && (fe(o.processingByConversationId[l]?.status) || St.current.has(l))) return;
145
+ if (l && (fe(o.processingByConversationId[l]?.status) || xt.current.has(l))) return;
146
146
  let d = o.mode, f = M, p = f ? S.getState().conversations.find((e) => e.id === f) : void 0;
147
- if (f ? p && p.mode !== d && (p.messages.length > 0 || p.backendSessionId) ? f = F(void 0, d) : p && p.mode !== d && it(f, d) : f = F(void 0, d), !f) return;
148
- xt.current[f] = t;
147
+ if (f ? p && p.mode !== d && (p.messages.length > 0 || p.backendSessionId) ? f = P(void 0, d) : p && p.mode !== d && at(f, d) : f = P(void 0, d), !f) return;
148
+ bt.current[f] = t;
149
149
  let m = ge(), g = {
150
- accessToken: Ke(),
150
+ accessToken: j(),
151
151
  workspaceToken: qe(),
152
152
  userId: Je,
153
153
  organizationId: he()
@@ -161,9 +161,9 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
161
161
  ...h(r.voiceSessionId)
162
162
  }
163
163
  };
164
- I(f, _);
164
+ F(f, _);
165
165
  let v = Be();
166
- I(f, {
166
+ F(f, {
167
167
  id: v,
168
168
  role: "assistant",
169
169
  content: "",
@@ -172,9 +172,9 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
172
172
  lang: tt,
173
173
  ...h(r.voiceSessionId)
174
174
  }
175
- }), R(f, "provisioning", v, null);
175
+ }), L(f, "provisioning", v, null);
176
176
  let te = (e, t, n, i, a = tt) => {
177
- L(f, v, { content: ee(e) }), st(f, v, {
177
+ I(f, v, { content: ee(e) }), ct(f, v, {
178
178
  lang: a,
179
179
  ...t?.length ? { artifacts: t } : {},
180
180
  ...t?.length || n || i ? { mode: d } : {},
@@ -185,9 +185,9 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
185
185
  }, y = async (n = 1) => {
186
186
  let r = !1;
187
187
  try {
188
- let { sandboxId: n, sessionId: o } = await Ct(f, v, d, m, g), l = (await c(n, m, o, g, { limit: 50 }).catch(() => [])).reduce((e, t) => Math.max(e, O(t)), 0);
189
- K(f, v, "streaming", "Thinking...");
190
- let p = se(e, t), h = We?.(d, p, $e, et, i) ?? p, _ = oe(h, t), y = le(_), b = y > 0, re = Ue?.();
188
+ let { sandboxId: n, sessionId: o } = await Ct(f, v, d, m, g), l = (await c(n, m, o, g, { limit: 50 }).catch(() => [])).reduce((e, t) => Math.max(e, Ve(t)), 0);
189
+ q(f, v, "streaming", "Thinking...");
190
+ let p = se(e, t), h = Ge?.(d, p, $e, et, i) ?? p, _ = oe(h, t), y = le(_), b = y > 0, re = We?.();
191
191
  r = ce(t) > y;
192
192
  try {
193
193
  await u(n, m, o, h, d, re, g, _?.length ? { parts: _ } : void 0);
@@ -195,11 +195,11 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
195
195
  if (!_ || !Ee(e)) throw e;
196
196
  await u(n, m, o, h, d, re, g, void 0), r ||= b;
197
197
  }
198
- let x = Ve([], l), ie = Date.now() + (Ie[d] ?? Le), ae = Date.now(), ue = Date.now();
199
- for (; Date.now() < ie && (x = Ve(await c(n, m, o, g, {
198
+ let x = He([], l), ie = Date.now() + (Ie[d] ?? Le), ae = Date.now(), ue = Date.now();
199
+ for (; Date.now() < ie && (x = He(await c(n, m, o, g, {
200
200
  limit: 50,
201
201
  sinceMs: l
202
- }), l), L(f, v, { content: ee(x.content) }), x.pendingWrite && st(f, v, { pendingWrite: x.pendingWrite }), !x.done);) Date.now() - ae > 3e4 && (await a(n, m, 600, g).catch(() => void 0), ae = Date.now()), await new Promise((e) => setTimeout(e, ne(Date.now() - ue)));
202
+ }), l), I(f, v, { content: ee(x.content) }), x.pendingWrite && ct(f, v, { pendingWrite: x.pendingWrite }), !x.done);) Date.now() - ae > 3e4 && (await a(n, m, 600, g).catch(() => void 0), ae = Date.now()), await new Promise((e) => setTimeout(e, ne(Date.now() - ue)));
203
203
  if (!x.done && d !== "vibe-plugins") throw Error("Assistant response timed out while streaming progress");
204
204
  let de = d === "vibe-plugins" ? await s(n, m, o, g).then((e) => e).catch(() => []) : void 0;
205
205
  if (x.done || (x = {
@@ -207,83 +207,83 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
207
207
  content: `${x.content}\n\n_Still building in the background — any artifacts below will finish shortly. Re-open this conversation to pick up the completed plugin._`
208
208
  }), r && (x = {
209
209
  ...x,
210
- content: `${x.content}\n\n${k("attachments.imagesNotSent", "_Your photo was too large to include with this message, so the answer above is from the text and the file link only. Try a smaller or more tightly cropped photo._")}`
210
+ content: `${x.content}\n\n${O("attachments.imagesNotSent", "_Your photo was too large to include with this message, so the answer above is from the text and the file link only. Try a smaller or more tightly cropped photo._")}`
211
211
  }), te(x.content, de, o, n), x.tokens) {
212
- L(f, v, { tokens: x.tokens });
212
+ I(f, v, { tokens: x.tokens });
213
213
  try {
214
- await Ge?.({
214
+ await Ke?.({
215
215
  workspaceId: m,
216
216
  sessionId: o,
217
217
  messageId: x.messageId,
218
218
  model: x.model,
219
219
  tokens: x.tokens
220
- }), ke(A);
220
+ }), ke(k);
221
221
  } catch {}
222
222
  }
223
- R(f, "complete", v, null);
223
+ L(f, "complete", v, null);
224
224
  } catch (e) {
225
- if (n === 1 && De(e)) return lt(f), ut(d), y(2);
225
+ if (n === 1 && De(e)) return R(f), ut(d), y(2);
226
226
  throw e;
227
227
  }
228
228
  }, b = f;
229
- St.current.add(b);
229
+ xt.current.add(b);
230
230
  try {
231
231
  if (!m) throw Error("Assistant backend is unavailable without an active workspace context.");
232
232
  await y();
233
233
  } catch (e) {
234
- if (W.current.invalidate(S.getState().sandboxesByMode[d]?.sandboxId ?? null), n(e)) {
235
- Oe(A, "sandbox"), te("You've reached your sandbox limit on the current plan. Upgrade to start the AI assistant.", void 0, void 0, void 0, "en"), R(f, "error", v, null);
234
+ if (K.current.invalidate(S.getState().sandboxesByMode[d]?.sandboxId ?? null), n(e)) {
235
+ Oe(k, "sandbox"), te("You've reached your sandbox limit on the current plan. Upgrade to start the AI assistant.", void 0, void 0, void 0, "en"), L(f, "error", v, null);
236
236
  return;
237
237
  }
238
238
  let t = e instanceof Error ? e.message : "Something went wrong";
239
- R(f, "error", v, t), L(f, v, { content: `Sorry, an error occurred: ${t}. Please try again.` }), st(f, v, {
239
+ L(f, "error", v, t), I(f, v, { content: `Sorry, an error occurred: ${t}. Please try again.` }), ct(f, v, {
240
240
  lang: "en",
241
241
  ...h(r.voiceSessionId)
242
242
  });
243
243
  } finally {
244
- St.current.delete(b);
244
+ xt.current.delete(b);
245
245
  }
246
246
  }, [
247
247
  M,
248
- I,
249
- We,
250
- lt,
248
+ F,
249
+ Ge,
250
+ R,
251
251
  ut,
252
252
  nt,
253
- F,
253
+ P,
254
254
  Ct,
255
- Ue,
256
- Ke,
255
+ We,
256
+ j,
257
257
  qe,
258
- L,
259
- A,
260
- Ge,
258
+ I,
259
+ k,
260
+ Ke,
261
261
  et,
262
262
  tt,
263
263
  $e,
264
- ct,
265
- it,
266
- R,
267
- k,
268
- K,
264
+ lt,
265
+ at,
266
+ L,
267
+ O,
268
+ q,
269
269
  Je
270
270
  ]), wt = C((e) => {
271
- q(e);
272
- }, [q]), Tt = C(() => {
273
- let e = [...B.chat].reverse().find((e) => e.role === "user"), t = M ? xt.current[M] ?? [] : [];
274
- e && q(e.content, t);
271
+ J(e);
272
+ }, [J]), Tt = C(() => {
273
+ let e = [...B.chat].reverse().find((e) => e.role === "user"), t = M ? bt.current[M] ?? [] : [];
274
+ e && J(e.content, t);
275
275
  }, [
276
- ft,
277
- q,
276
+ V,
277
+ J,
278
278
  M
279
- ]), J = E(q);
279
+ ]), Y = E(J);
280
280
  w(() => {
281
- J.current = q;
282
- }, [q]);
283
- let Y = T(() => {
284
- if (H) return null;
285
- for (let e = ft.length - 1; e >= 0; --e) {
286
- let t = ft[e];
281
+ Y.current = J;
282
+ }, [J]);
283
+ let Et = T(() => {
284
+ if (U) return null;
285
+ for (let e = V.length - 1; e >= 0; --e) {
286
+ let t = V[e];
287
287
  if (t?.role !== "assistant" || !m(t)) continue;
288
288
  let n = pe(t.content).text.trim();
289
289
  return n ? {
@@ -292,34 +292,34 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
292
292
  } : null;
293
293
  }
294
294
  return null;
295
- }, [ft, H]), Et = T(() => Y ? y(Y.text) : null, [Y]), Dt = B.chat, X = T(() => B.voice.filter((e) => e.role === "user" || e.role === "assistant").map((e) => ({
295
+ }, [V, U]), Dt = T(() => Et ? y(Et.text) : null, [Et]), Ot = B.chat, X = T(() => B.voice.filter((e) => e.role === "user" || e.role === "assistant").map((e) => ({
296
296
  id: e.id,
297
297
  role: e.role,
298
298
  text: pe(e.content).text.trim(),
299
299
  sessionId: g(e),
300
300
  timestamp: e.timestamp
301
- })).filter((e) => e.text.length > 0), [B.voice]), Ot = C(() => {
301
+ })).filter((e) => e.text.length > 0), [B.voice]), kt = C(() => {
302
302
  if (X.length === 0) return;
303
303
  let e = /* @__PURE__ */ new Date();
304
304
  be(v(X, {
305
- title: k("voiceSession.transcript", "Voice conversation"),
306
- savedAt: k("voiceSession.savedAt", "Saved"),
307
- session: k("voiceSession.sessionLabel", "Session"),
308
- earlier: k("voiceSession.earlierLabel", "Earlier"),
309
- you: k("voiceSession.speakerYou", "You"),
310
- assistant: k("voiceSession.speakerAssistant", "Assistant")
311
- }, e), te(A, e), "text/markdown");
305
+ title: O("voiceSession.transcript", "Voice conversation"),
306
+ savedAt: O("voiceSession.savedAt", "Saved"),
307
+ session: O("voiceSession.sessionLabel", "Session"),
308
+ earlier: O("voiceSession.earlierLabel", "Earlier"),
309
+ you: O("voiceSession.speakerYou", "You"),
310
+ assistant: O("voiceSession.speakerAssistant", "Assistant")
311
+ }, e), te(k, e), "text/markdown");
312
312
  }, [
313
- A,
313
+ k,
314
314
  X,
315
- k
315
+ O
316
316
  ]), Z = Ae(), Q = E(Z);
317
317
  Q.current = Z;
318
318
  let $ = me({
319
319
  onSubmit: C((e, t) => {
320
320
  let n = () => {
321
321
  let n = Q.current, r = ue(n.attachments);
322
- J.current(e, r, { voiceSessionId: t }), n.clear();
322
+ Y.current(e, r, { voiceSessionId: t }), n.clear();
323
323
  };
324
324
  if (!Q.current.isBusy) {
325
325
  n();
@@ -329,67 +329,77 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
329
329
  Q.current.isBusy && Date.now() - r < ze || (window.clearInterval(i), n());
330
330
  }, 200);
331
331
  }, []),
332
- latestReply: Y,
332
+ latestReply: Et,
333
333
  language: b(Xe, Ye).tag
334
- }), kt = C(() => {
334
+ }), At = T(() => (ft?.messages ?? []).reduce((e, t) => Math.max(e, t.metadata?.continuedVoiceTurns ?? 0), 0), [ft?.messages]), jt = X.length > At, Mt = C(() => {
335
335
  let e = S.getState().activeConversationId;
336
- !e || X.length === 0 || (I(e, {
336
+ !e || X.length === 0 || (F(e, {
337
337
  id: Be(),
338
338
  role: "system",
339
- content: _(X, {
340
- intro: k("voiceSession.continuedIntro", "Continued from a voice conversation. You asked about:"),
341
- nothing: k("voiceSession.continuedNothing", "Continued from a voice conversation."),
342
- more: (e) => k("voiceSession.continuedMore", "…and {{count}} more", { count: e })
339
+ content: _(X.slice(At), {
340
+ intro: O("voiceSession.continuedIntro", "Continued from a voice conversation. You asked about:"),
341
+ nothing: O("voiceSession.continuedNothing", "Continued from a voice conversation."),
342
+ more: (e) => O("voiceSession.continuedMore", "…and {{count}} more", { count: e })
343
343
  }),
344
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
345
- }), bt(!1), $.end());
344
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
345
+ metadata: { continuedVoiceTurns: X.length }
346
+ }), G(!1), $.end());
346
347
  }, [
347
348
  X,
348
- I,
349
- k
350
- ]);
349
+ At,
350
+ F,
351
+ O,
352
+ $
353
+ ]), Nt = E(0);
354
+ w(() => {
355
+ $.active && (Nt.current = X.length);
356
+ }, [$.active]);
357
+ let Pt = C(() => {
358
+ let e = X.length > Nt.current;
359
+ $.end(), e && G(!0);
360
+ }, [X, $]);
351
361
  w(() => {
352
362
  !p && $.active && $.end();
353
363
  }, [p, $]), w(() => {
354
364
  $.active || Q.current.clear();
355
365
  }, [$.active]), w(() => {
356
366
  let e = S.getState().consumePendingPrompt();
357
- return e && J.current(e), S.subscribe((e, t) => {
367
+ return e && Y.current(e), S.subscribe((e, t) => {
358
368
  if (e.pendingPrompt && e.pendingPrompt !== t.pendingPrompt) {
359
369
  let e = S.getState().consumePendingPrompt();
360
- e && J.current(e);
370
+ e && Y.current(e);
361
371
  }
362
372
  });
363
373
  }, []);
364
- let At = C((e) => {
374
+ let Ft = C((e) => {
365
375
  let t = M ? S.getState().conversations.find((e) => e.id === M) : void 0;
366
376
  if (t && (t.messages.length > 0 || t.backendSessionId)) {
367
377
  if (t.mode !== e) {
368
378
  let t = S.getState().conversations.find((t) => t.mode === e && t.messages.length === 0 && !t.backendSessionId && !S.getState().processingByConversationId[t.id]);
369
- t ? at(t.id) : F(void 0, e);
379
+ t ? ot(t.id) : P(void 0, e);
370
380
  }
371
- } else M && it(M, e);
372
- P(e);
381
+ } else M && at(M, e);
382
+ it(e);
373
383
  }, [
374
384
  M,
375
- F,
385
+ P,
386
+ ot,
376
387
  at,
377
- it,
378
- P
379
- ]), jt = C((e) => {
380
- if (j.find((t) => t.id === e)?.writeCapable && !S.getState().apiCallsAcknowledged) {
388
+ it
389
+ ]), It = C((e) => {
390
+ if (A.find((t) => t.id === e)?.writeCapable && !S.getState().apiCallsAcknowledged) {
381
391
  vt(e);
382
392
  return;
383
393
  }
384
- At(e);
385
- }, [At, j]), Mt = C(() => {
394
+ Ft(e);
395
+ }, [Ft, A]), Lt = C(() => {
386
396
  let e = _t;
387
- vt(null), dt(), e && At(e);
397
+ vt(null), dt(), e && Ft(e);
388
398
  }, [
389
399
  _t,
390
400
  dt,
391
- At
392
- ]), Nt = C(() => {
401
+ Ft
402
+ ]), Rt = C(() => {
393
403
  vt(null);
394
404
  }, []);
395
405
  return /* @__PURE__ */ Fe("div", {
@@ -401,15 +411,15 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
401
411
  children: [
402
412
  X.length > 0 && !$.active ? /* @__PURE__ */ D(ve, {
403
413
  count: X.length,
404
- onOpenTranscript: () => bt(!0)
414
+ onOpenTranscript: () => G(!0)
405
415
  }) : null,
406
- Dt.length === 0 ? /* @__PURE__ */ D(xe, {
416
+ Ot.length === 0 ? /* @__PURE__ */ D(xe, {
407
417
  mode: N,
408
418
  onSuggestionClick: wt
409
419
  }) : /* @__PURE__ */ D("div", {
410
420
  className: "flex min-h-0 flex-1 flex-col",
411
421
  children: /* @__PURE__ */ D(Se, {
412
- messages: Dt,
422
+ messages: Ot,
413
423
  streamingMessageId: pt,
414
424
  failedMessageId: mt,
415
425
  onRetry: Tt
@@ -417,20 +427,22 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
417
427
  }),
418
428
  /* @__PURE__ */ D(je, {
419
429
  onStartVoiceSession: $.available && N !== "api-calls" ? $.start : void 0,
420
- onSend: (e, t) => void q(e, t),
421
- disabled: H,
422
- placeholder: N === "api-calls" ? k("chatArea.placeholderActions", "What would you like me to do?") : k("chatArea.placeholderGeneral", "Ask me anything…"),
430
+ onSend: (e, t) => void J(e, t),
431
+ disabled: U,
432
+ placeholder: N === "api-calls" ? O("chatArea.placeholderActions", "What would you like me to do?") : O("chatArea.placeholderGeneral", "Ask me anything…"),
423
433
  mode: N,
424
- writeAccessDenied: x === "denied" && !!G?.writeCapable,
434
+ writeAccessDenied: x === "denied" && !!St?.writeCapable,
425
435
  availableModes: gt,
426
- onModeChange: jt
436
+ onModeChange: It
427
437
  })
428
438
  ]
429
439
  }),
430
440
  yt && !$.active ? /* @__PURE__ */ D(ye, {
431
441
  turns: X,
432
- onClose: () => bt(!1),
433
- onSave: Ot
442
+ onClose: () => G(!1),
443
+ onSave: kt,
444
+ onContinueInChat: jt ? Mt : void 0,
445
+ closeOnEscape: !0
434
446
  }) : null,
435
447
  $.active && /* @__PURE__ */ D(Ce, {
436
448
  session: $.session,
@@ -446,20 +458,20 @@ var j = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
446
458
  onRetryAttachment: Z.retry,
447
459
  canAttachMore: Z.canAddMore,
448
460
  preparingAttachments: Z.preparingCount,
449
- onSaveTranscript: Ot,
450
- onContinueInChat: kt,
461
+ onSaveTranscript: kt,
462
+ onContinueInChat: Mt,
451
463
  onInterrupt: $.interrupt,
452
- spoken: Et,
464
+ spoken: Dt,
453
465
  onToggleMute: $.toggleMute,
454
- onEnd: $.end
466
+ onEnd: Pt
455
467
  }),
456
468
  /* @__PURE__ */ D(Ne, {
457
469
  open: _t !== null,
458
- onConfirm: Mt,
459
- onCancel: Nt
470
+ onConfirm: Lt,
471
+ onCancel: Rt
460
472
  })
461
473
  ]
462
474
  });
463
475
  };
464
476
  //#endregion
465
- export { j as AssistantChatArea };
477
+ export { A as AssistantChatArea };
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantSpeechProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantSpeechProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EASL,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AA2B/D,OAAO,EAQL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAc/B,MAAM,WAAW,2BAA2B;IAC1C,gFAAgF;IAChF,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,iBAAiB,CAAC;IAChC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD;;;;OAIG;IACH,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;IACzC,8EAA8E;IAC9E;;;;;;OAMG;IACH,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;;;OAQG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C;;;;;;;OAOG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC;;;;;;;;;;;;;OAaG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,kFAAkF;IAClF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AA2BD,wBAAgB,kBAAkB,IAAI,2BAA2B,CAEhE;AAED,UAAU,KAAK;IACb,QAAQ,EAAE,SAAS,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,KAAK,CAmqB7C,CAAC"}
1
+ {"version":3,"file":"AssistantSpeechProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantSpeechProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EASL,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AA2B/D,OAAO,EAQL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAiB/B,MAAM,WAAW,2BAA2B;IAC1C,gFAAgF;IAChF,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,iBAAiB,CAAC;IAChC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD;;;;OAIG;IACH,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;IACzC,8EAA8E;IAC9E;;;;;;OAMG;IACH,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;;;OAQG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C;;;;;;;OAOG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC;;;;;;;;;;;;;OAaG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,kFAAkF;IAClF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AA2BD,wBAAgB,kBAAkB,IAAI,2BAA2B,CAEhE;AAED,UAAU,KAAK;IACb,QAAQ,EAAE,SAAS,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,KAAK,CA6vB7C,CAAC"}