@burdenoff/fe-libs 2026.906.5 → 2026.906.6

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.
@@ -41,6 +41,40 @@ export declare function waitForAssistantServiceReady(sandboxId: string, workspac
41
41
  export declare function createAssistantSession(sandboxId: string, workspaceId: string, mode: AssistantMode, authContext: AssistantSandboxAuthContext): Promise<{
42
42
  sessionId: string;
43
43
  }>;
44
+ /**
45
+ * Our own assistant sandboxes in this workspace that are for a DIFFERENT mode.
46
+ *
47
+ * ★★ Pure and exported so the ownership rules below are testable without a
48
+ * network. Getting these wrong stops somebody else's container.
49
+ */
50
+ export declare function selectSupersededAssistantSandboxes(sandboxes: readonly ExistingAssistantSandbox[], product: string, mode: AssistantMode, isProd: boolean, authContext: AssistantSandboxAuthContext): string[];
51
+ /**
52
+ * Free the workspace's sandbox slot before provisioning a different mode.
53
+ *
54
+ * ★★ THE BUG THIS FIXES. Sandbox reuse keys on mode and image tag, so "Ask" and
55
+ * "Take action" need DIFFERENT containers — but a Free workspace holds exactly
56
+ * ONE concurrent sandbox, and nothing ever released it. Every session provisions
57
+ * a read-only Ask sandbox, the panel heartbeat then extends its TTL for as long
58
+ * as the panel is open, and switching to "Take action" asks for a second
59
+ * container against a quota of one. It fails, and the failure surfaces as
60
+ * "You've reached your sandbox limit on the current plan" — which reads like a
61
+ * billing problem and is actually us holding our own slot.
62
+ *
63
+ * So: before provisioning, stop the assistant sandboxes that can no longer be
64
+ * reused. This is not an optimisation, it is the difference between "Take
65
+ * action" working and not working on the plan almost every workspace is on.
66
+ *
67
+ * ★ Best-effort by design. A failure to stop is not a failure to answer: the
68
+ * provision that follows may still succeed (a paid workspace has room), and if
69
+ * it does not, the quota error is the right thing for the user to see. Throwing
70
+ * here would replace a specific, actionable error with a vaguer one.
71
+ *
72
+ * ★ Consequence worth stating: with a one-slot quota, a second tab in the other
73
+ * mode loses its sandbox. That is forced by the quota rather than chosen here —
74
+ * the alternative is that the second mode never works at all — and the tab
75
+ * recovers by provisioning again on its next turn.
76
+ */
77
+ export declare function releaseSupersededAssistantSandboxes(workspaceId: string, product: string, mode: AssistantMode, isProd: boolean, authContext: AssistantSandboxAuthContext): Promise<string[]>;
44
78
  /**
45
79
  * Terminalize a sandbox whose Cloudflare data plane was reaped while its DB
46
80
  * record remained RUNNING. Invoked only for Cloudflare's exact connection-
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/api.ts"],"names":[],"mappings":"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"}
@@ -181,7 +181,32 @@ async function k(e, t, n, r = 9e4) {
181
181
  async function A(e, t, n, r) {
182
182
  return { sessionId: (await b(e, t, "/sessions", "POST", { mode: n }, r)).session.id };
183
183
  }
184
- async function j(n, r, i) {
184
+ function j(e, t, n, r, i) {
185
+ let a = p(n, r);
186
+ return e.filter((e) => e.metadata?.authStrategy === "sandbox-app-client-headers-v1" && e.metadata?.assistantProduct === t && (!i.userId || e.createdBy === i.userId) && !(h(e) === n && e.metadata?.imageTag === a)).map((e) => e.id);
187
+ }
188
+ async function M(n, r, i, o, s) {
189
+ let c;
190
+ try {
191
+ c = j((await t({
192
+ query: a,
193
+ operationName: "GetActiveSandboxes",
194
+ variables: { context: e(n, s) },
195
+ workspaceId: n,
196
+ authContext: s
197
+ })).getActiveSandboxes ?? [], r, i, o, s);
198
+ } catch {
199
+ return [];
200
+ }
201
+ return (await Promise.all(c.map(async (e) => {
202
+ try {
203
+ return await N(e, n, s), e;
204
+ } catch {
205
+ return null;
206
+ }
207
+ }))).filter((e) => e !== null);
208
+ }
209
+ async function N(n, r, i) {
185
210
  await t({
186
211
  query: l,
187
212
  operationName: "StopAssistantSandbox",
@@ -193,7 +218,7 @@ async function j(n, r, i) {
193
218
  authContext: i
194
219
  });
195
220
  }
196
- function M(e) {
221
+ function P(e) {
197
222
  let { mode: t, prompt: n, pageContext: r, parts: i } = e, a = {
198
223
  mode: t,
199
224
  prompt: n,
@@ -201,8 +226,8 @@ function M(e) {
201
226
  };
202
227
  return i && i.length > 0 && (a.parts = i), a;
203
228
  }
204
- async function N(e, t, n, r, i, a, o, s) {
205
- let c = await b(e, t, `/sessions/${n}/prompt-async`, "POST", M({
229
+ async function F(e, t, n, r, i, a, o, s) {
230
+ let c = await b(e, t, `/sessions/${n}/prompt-async`, "POST", P({
206
231
  mode: i,
207
232
  prompt: r,
208
233
  pageContext: a,
@@ -210,13 +235,13 @@ async function N(e, t, n, r, i, a, o, s) {
210
235
  }), o);
211
236
  return { messageID: typeof c.messageID == "string" ? c.messageID : void 0 };
212
237
  }
213
- async function P(e, t, n, r, i) {
238
+ async function I(e, t, n, r, i) {
214
239
  let a = `/sessions/${n}/messages?limit=${i?.limit ?? 50}`;
215
240
  i?.sinceMs && g("sinceParam") !== "unsupported" && (a += `&since=${i.sinceMs}`);
216
241
  let o = await b(e, t, a, "GET", void 0, r);
217
242
  return typeof o.now == "number" && v("sinceParam"), o.messages ?? [];
218
243
  }
219
- async function F(e, t, n, r) {
244
+ async function L(e, t, n, r) {
220
245
  if (g("sse") === "unsupported") return null;
221
246
  try {
222
247
  let i = await b(e, t, `/sessions/${n}/stream-url`, "GET", void 0, r);
@@ -228,7 +253,7 @@ async function F(e, t, n, r) {
228
253
  return y("sse"), null;
229
254
  }
230
255
  }
231
- async function I(n, r, a, o) {
256
+ async function R(n, r, a, o) {
232
257
  await t({
233
258
  query: i,
234
259
  operationName: "ExtendSandboxTtl",
@@ -241,20 +266,20 @@ async function I(n, r, a, o) {
241
266
  authContext: o
242
267
  });
243
268
  }
244
- async function L(e, t, n, r) {
269
+ async function z(e, t, n, r) {
245
270
  await b(e, t, `/sessions/${n}/heartbeat`, "POST", void 0, r).catch(() => void 0);
246
271
  }
247
- async function R(e, t, n, r) {
272
+ async function B(e, t, n, r) {
248
273
  return ((await b(e, t, `/sessions/${n}/artifacts`, "GET", void 0, r)).artifacts ?? []).filter((e) => !e.name.startsWith("."));
249
274
  }
250
- async function z(e, t, n, r) {
275
+ async function V(e, t, n, r) {
251
276
  let i = await b(e, t, `/sessions/${n}`, "GET", void 0, r);
252
277
  return {
253
278
  id: i.session?.id ?? n,
254
279
  mode: i.mode ?? "unknown"
255
280
  };
256
281
  }
257
- async function B(e, t, n, r, i) {
282
+ async function H(e, t, n, r, i) {
258
283
  let a = (await b(e, t, `/sessions/${n}/artifacts/download?path=${encodeURIComponent(r)}`, "GET", void 0, i)).artifact;
259
284
  if (!a) throw Error("Artifact download returned an empty response");
260
285
  return {
@@ -263,7 +288,7 @@ async function B(e, t, n, r, i) {
263
288
  contentBase64: a.contentBase64
264
289
  };
265
290
  }
266
- async function V(e, r) {
291
+ async function U(e, r) {
267
292
  return (await t({
268
293
  query: n,
269
294
  operationName: "CheckAiCredits",
@@ -272,7 +297,7 @@ async function V(e, r) {
272
297
  authContext: r
273
298
  })).checkAiCredits;
274
299
  }
275
- async function H(e, n, r, i, a, o) {
300
+ async function W(e, n, r, i, a, o) {
276
301
  let s = Math.max(0, Math.round(a.input ?? 0)), l = Math.max(0, Math.round(a.output ?? 0));
277
302
  s + l === 0 || !i || await t({
278
303
  query: c,
@@ -289,4 +314,4 @@ async function H(e, n, r, i, a, o) {
289
314
  });
290
315
  }
291
316
  //#endregion
292
- export { w as buildAssistantSandboxEnv, M as buildPromptRequestBody, V as checkAssistantAiCredits, T as createAssistantSandbox, A as createAssistantSession, B as downloadAssistantArtifact, I as extendAssistantSandboxTTL, x as findExistingSandbox, R as getAssistantArtifacts, P as getAssistantMessages, z as getAssistantSession, F as getAssistantStreamAccess, C as modeRequiresConfirmWrites, H as reportAssistantAiTokenUsage, S as selectExistingAssistantSandbox, N as sendAssistantPromptAsync, L as sendHeartbeat, j as stopReapedAssistantSandbox, k as waitForAssistantServiceReady, O as waitForSandboxRunning };
317
+ export { w as buildAssistantSandboxEnv, P as buildPromptRequestBody, U as checkAssistantAiCredits, T as createAssistantSandbox, A as createAssistantSession, H as downloadAssistantArtifact, R as extendAssistantSandboxTTL, x as findExistingSandbox, B as getAssistantArtifacts, I as getAssistantMessages, V as getAssistantSession, L as getAssistantStreamAccess, C as modeRequiresConfirmWrites, M as releaseSupersededAssistantSandboxes, W as reportAssistantAiTokenUsage, S as selectExistingAssistantSandbox, j as selectSupersededAssistantSandboxes, F as sendAssistantPromptAsync, z as sendHeartbeat, N as stopReapedAssistantSandbox, k as waitForAssistantServiceReady, O as waitForSandboxRunning };
@@ -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,CA2mDxD,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;AAmEf,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,CA+nDxD,CAAC"}
@@ -2,69 +2,69 @@ import { useI18n as e } from "../../providers/shell/I18nProvider.js";
2
2
  import { useAuthToken as t } from "../../providers/shell/AuthTokenProvider.js";
3
3
  import "../../../shared-providers-shell.js";
4
4
  import { isQuotaExhaustedError as n } from "../quota.js";
5
- import { createAssistantSandbox as r, createAssistantSession as i, extendAssistantSandboxTTL as a, findExistingSandbox as o, getAssistantArtifacts as s, getAssistantMessages as c, getAssistantSession as l, sendAssistantPromptAsync as u, waitForAssistantServiceReady as d, waitForSandboxRunning as f } from "../api.js";
6
- import { getAssistantMedia as p, sanitize as ee } from "../progress.js";
5
+ import { createAssistantSandbox as r, createAssistantSession as i, extendAssistantSandboxTTL as a, findExistingSandbox as o, getAssistantArtifacts as s, getAssistantMessages as c, getAssistantSession as l, releaseSupersededAssistantSandboxes as u, sendAssistantPromptAsync as ee, waitForAssistantServiceReady as d, waitForSandboxRunning as f } from "../api.js";
6
+ import { getAssistantMedia as p, sanitize as te } from "../progress.js";
7
7
  import { isVoiceTurn as m, voiceMarker as h, voiceSessionIdOf as g } from "../voice/turnVisibility.js";
8
- import { buildContinuedFromVoiceNote as _, buildVoiceTranscriptMarkdown as v, voiceTranscriptFilename as te } from "../voice/voiceTranscript.js";
9
- import { pollDelayMs as ne } from "../voice/assistantPollSchedule.js";
8
+ import { buildContinuedFromVoiceNote as _, buildVoiceTranscriptMarkdown as ne, voiceTranscriptFilename as v } from "../voice/voiceTranscript.js";
9
+ import { pollDelayMs as re } from "../voice/assistantPollSchedule.js";
10
10
  import { toCaptionText as y } from "../voice/captionText.js";
11
- import { resolveAssistantLanguage as b } from "../voice/languages.js";
12
- import { resolveLanguagePair as re } from "../voice/languagePair.js";
13
- import { findPendingWrite as x } from "../pendingWrite.js";
14
- import { useAssistantProduct as ie } from "../product.js";
15
- import { useAssistantTr as ae } from "../i18n.js";
16
- import { buildPromptParts as oe, buildPromptWithAttachments as se, countInlineImageCandidates as ce, countInlinedImageParts as le, getSendableAttachments as ue, toMessageAttachment as de } from "../attachments.js";
17
- import { useAssistantStore as S } from "../store.js";
18
- import { isTurnInFlight as fe } from "../turnState.js";
19
- import { parseToolActivity as pe } from "./AssistantToolActivity.js";
20
- import { useVoiceSession as me } from "./useVoiceSession.js";
21
- import { getOrganizationId as he, getWorkspaceId as ge } from "../context.js";
22
- import { createReadinessTracker as _e } from "../sandboxReadiness.js";
23
- import { AssistantSpokenTurnsNotice as ve } from "./AssistantSpokenTurnsNotice.js";
24
- import { VoiceTranscriptDrawer as ye } from "./voice/VoiceTranscriptDrawer.js";
25
- import { downloadFile as be } from "../exportConversation.js";
26
- import { AssistantEmptyState as xe } from "./AssistantEmptyState.js";
27
- import { AssistantMessageList as Se } from "./AssistantMessageList.js";
28
- import { AssistantVoiceSession as Ce } from "./voice/AssistantVoiceSession.js";
29
- import { useAssistantApiAccess as we } from "../useAssistantApiAccess.js";
30
- import { useConversationTurns as Te } from "../useConversationTurns.js";
31
- import { isMultimodalBodyRejection as Ee, isRecoverableAssistantError as De } from "../transportErrors.js";
32
- import { dispatchAssistantQuotaExhausted as Oe, notifyAiCreditsUpdated as ke } from "../aiCredits.js";
33
- import { useAssistantAttachments as Ae } from "../useAssistantAttachments.js";
34
- import { AssistantComposer as je } from "./composer/AssistantComposer.js";
35
- import { isProdRuntime as Me } from "../env.js";
36
- import { AssistantApiCallsConsentDialog as Ne } from "./AssistantApiCallsConsentDialog.js";
37
- import { useCallback as C, useEffect as w, useMemo as T, useRef as E, useState as Pe } from "react";
38
- import { jsx as D, jsxs as Fe } from "react/jsx-runtime";
11
+ import { resolveAssistantLanguage as ie } from "../voice/languages.js";
12
+ import { resolveLanguagePair as b } from "../voice/languagePair.js";
13
+ import { findPendingWrite as ae } from "../pendingWrite.js";
14
+ import { useAssistantProduct as oe } from "../product.js";
15
+ import { useAssistantTr as se } from "../i18n.js";
16
+ import { buildPromptParts as ce, buildPromptWithAttachments as le, countInlineImageCandidates as ue, countInlinedImageParts as de, getSendableAttachments as fe, toMessageAttachment as pe } from "../attachments.js";
17
+ import { useAssistantStore as x } from "../store.js";
18
+ import { isTurnInFlight as me } from "../turnState.js";
19
+ import { parseToolActivity as he } from "./AssistantToolActivity.js";
20
+ import { useVoiceSession as ge } from "./useVoiceSession.js";
21
+ import { getOrganizationId as _e, getWorkspaceId as ve } from "../context.js";
22
+ import { createReadinessTracker as ye } from "../sandboxReadiness.js";
23
+ import { AssistantSpokenTurnsNotice as be } from "./AssistantSpokenTurnsNotice.js";
24
+ import { VoiceTranscriptDrawer as xe } from "./voice/VoiceTranscriptDrawer.js";
25
+ import { downloadFile as Se } from "../exportConversation.js";
26
+ import { AssistantEmptyState as Ce } from "./AssistantEmptyState.js";
27
+ import { AssistantMessageList as we } from "./AssistantMessageList.js";
28
+ import { AssistantVoiceSession as Te } from "./voice/AssistantVoiceSession.js";
29
+ import { useAssistantApiAccess as Ee } from "../useAssistantApiAccess.js";
30
+ import { useConversationTurns as De } from "../useConversationTurns.js";
31
+ import { isMultimodalBodyRejection as Oe, isRecoverableAssistantError as ke } from "../transportErrors.js";
32
+ import { dispatchAssistantQuotaExhausted as Ae, notifyAiCreditsUpdated as je } from "../aiCredits.js";
33
+ import { useAssistantAttachments as Me } from "../useAssistantAttachments.js";
34
+ import { AssistantComposer as Ne } from "./composer/AssistantComposer.js";
35
+ import { isProdRuntime as Pe } from "../env.js";
36
+ import { AssistantApiCallsConsentDialog as Fe } from "./AssistantApiCallsConsentDialog.js";
37
+ import { useCallback as S, useEffect as C, useMemo as w, useRef as T, useState as Ie } from "react";
38
+ import { jsx as E, jsxs as Le } from "react/jsx-runtime";
39
39
  //#region src/shared/assistant/ui/AssistantChatArea.tsx
40
- var Ie = {
40
+ var Re = {
41
41
  general: 18e4,
42
42
  assistant: 18e4,
43
43
  "api-calls": 18e4,
44
44
  "vibe-plugins": 6e5
45
- }, Le = 18e4, Re = 600, ze = 2e4;
46
- function Be() {
45
+ }, ze = 18e4, Be = 600, Ve = 2e4;
46
+ function He() {
47
47
  return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
48
48
  }
49
- function Ve(e) {
49
+ function Ue(e) {
50
50
  return e.info?.time?.created ?? 0;
51
51
  }
52
- function O(e) {
52
+ function D(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 k(e) {
55
+ function O(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 He(e, t) {
62
- let n = e.filter((e) => e.info?.role === "assistant" && Ve(e) > t).sort((e, t) => Ve(e) - Ve(t));
61
+ function We(e, t) {
62
+ let n = e.filter((e) => e.info?.role === "assistant" && Ue(e) > t).sort((e, t) => Ue(e) - Ue(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 = O(r.parts), a = p(r.parts), o = k(r.parts), s = x(r.parts), c = [
67
+ let r = n[n.length - 1], i = D(r.parts), a = p(r.parts), o = O(r.parts), s = ae(r.parts), c = [
68
68
  i,
69
69
  ...a,
70
70
  ...o
@@ -78,7 +78,7 @@ function He(e, t) {
78
78
  ...s ? { pendingWrite: s } : {}
79
79
  };
80
80
  }
81
- function Ue(e) {
81
+ function Ge(e) {
82
82
  switch (e) {
83
83
  case "provisioning": return "Starting assistant environment...";
84
84
  case "connecting": return "Connecting to assistant...";
@@ -86,25 +86,25 @@ function Ue(e) {
86
86
  default: return "";
87
87
  }
88
88
  }
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
- Xe,
92
- Ze,
93
- Ye
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
- w(() => {
96
- ht || (!St || St.requiresAdmin && !W) && N !== "assistant" && it("assistant");
89
+ var k = ({ visible: p = !0, writeAccess: ae = "unknown" }) => {
90
+ let D = se(), { product: O, modes: k, gatherPageContext: Ke, buildPrompt: qe, reportTokenUsage: Je } = oe(), { getAccessToken: A, getWorkspaceToken: Ye, userId: Xe } = t(), { locale: Ze } = e(), Qe = x((e) => e.assistantLanguage), $e = x((e) => e.replyLanguage), et = w(() => b(Qe, $e, Ze), [
91
+ Qe,
92
+ $e,
93
+ Ze
94
+ ]), tt = et.reply.english, nt = et.replyIsExplicit, rt = et.reply.code, { conversations: it, activeConversationId: j, mode: M, processingByConversationId: at, setMode: ot, setConversationMode: N, setActiveConversation: st, createConversation: P, addMessage: F, updateMessage: ct, patchMessage: I, mergeMessageMetadata: lt, setConversationProcessing: L, setBackendSessionId: ut, clearBackendSessionId: R, setSandbox: z, clearSandbox: dt, acknowledgeApiCalls: ft } = x(), pt = it.find((e) => e.id === j), B = De(pt), V = B.all, H = j ? at[j] : void 0, U = me(H?.status), mt = U ? H?.messageId ?? null : null, ht = H?.status === "error" ? H.messageId : null, { canUseApiCalls: W, loading: gt } = Ee(_e()), _t = w(() => k.filter((e) => !e.requiresAdmin || W), [k, W]), [vt, yt] = Ie(null), [bt, G] = Ie(!1), xt = T({}), K = T(ye()), St = T(/* @__PURE__ */ new Set()), q = w(() => k.find((e) => e.id === M), [k, M]);
95
+ C(() => {
96
+ gt || (!q || q.requiresAdmin && !W) && M !== "assistant" && ot("assistant");
97
97
  }, [
98
- N,
99
- St,
98
+ M,
99
+ q,
100
100
  W,
101
- ht,
102
- it
101
+ gt,
102
+ ot
103
103
  ]);
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
- let c = S.getState().sandboxesByMode[n]?.sandboxId ?? null, u = async (e) => {
104
+ let J = S((e, t, n, r) => {
105
+ L(e, n, t, null), r ? ct(e, t, r) : ct(e, t, Ge(n));
106
+ }, [L, ct]), Ct = S(async (e, t, n, a, s) => {
107
+ let c = x.getState().sandboxesByMode[n]?.sandboxId ?? null, ee = async (e) => {
108
108
  if (K.current.isFresh(e)) return !0;
109
109
  try {
110
110
  return await f(e, a, s, 3e5), await d(e, a, s, 9e4), K.current.markVerified(e), !0;
@@ -112,339 +112,339 @@ var A = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
112
112
  return K.current.invalidate(e), !1;
113
113
  }
114
114
  };
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"));
115
+ if (c && (z(n, c, "provisioning"), J(e, t, "provisioning", "Reusing assistant environment..."), await ee(c) || (z(n, null, "provisioning"), c = null)), !c) {
116
+ J(e, t, "provisioning", "Looking for existing environment...");
117
+ let r = await o(a, O, n, Pe(), s);
118
+ r && (z(n, r, "provisioning"), J(e, t, "provisioning", "Reusing assistant environment..."), await ee(r) ? c = r : z(n, null, "provisioning"));
119
119
  }
120
120
  if (!c) {
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);
121
+ if (n === "api-calls" && !A()) throw Error("API Calls mode requires an authenticated session. Please sign in again.");
122
+ J(e, t, "provisioning", "Starting assistant environment..."), z(n, null, "provisioning"), await u(a, O, n, Pe(), s), c = await r(O, n, a, Pe(), Be, 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
- let p = S.getState().conversations.find((t) => t.id === e)?.backendSessionId ?? null;
125
+ let p = x.getState().conversations.find((t) => t.id === e)?.backendSessionId ?? null;
126
126
  if (p) try {
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
130
  R(e), p = null;
131
131
  }
132
- return p || (q(e, t, "connecting", "Preparing session..."), p = (await i(c, a, n, s)).sessionId, lt(e, p)), {
132
+ return p || (J(e, t, "connecting", "Preparing session..."), p = (await i(c, a, n, s)).sessionId, ut(e, p)), {
133
133
  sandboxId: c,
134
134
  sessionId: p
135
135
  };
136
136
  }, [
137
137
  R,
138
- j,
139
- k,
140
- lt,
138
+ A,
139
+ O,
140
+ ut,
141
141
  z,
142
- q
143
- ]), J = C(async (e, t = [], r = {}) => {
144
- let i = r.voiceSessionId !== void 0, o = S.getState(), l = o.activeConversationId ?? M;
145
- if (l && (fe(o.processingByConversationId[l]?.status) || xt.current.has(l))) return;
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 = P(void 0, d) : p && p.mode !== d && at(f, d) : f = P(void 0, d), !f) return;
148
- bt.current[f] = t;
149
- let m = ge(), g = {
150
- accessToken: j(),
151
- workspaceToken: qe(),
152
- userId: Je,
153
- organizationId: he()
154
- }, _ = {
155
- id: Be(),
142
+ J
143
+ ]), Y = S(async (e, t = [], r = {}) => {
144
+ let i = r.voiceSessionId !== void 0, o = x.getState(), l = o.activeConversationId ?? j;
145
+ if (l && (me(o.processingByConversationId[l]?.status) || St.current.has(l))) return;
146
+ let u = o.mode, d = j, f = d ? x.getState().conversations.find((e) => e.id === d) : void 0;
147
+ if (d ? f && f.mode !== u && (f.messages.length > 0 || f.backendSessionId) ? d = P(void 0, u) : f && f.mode !== u && N(d, u) : d = P(void 0, u), !d) return;
148
+ xt.current[d] = t;
149
+ let p = ve(), m = {
150
+ accessToken: A(),
151
+ workspaceToken: Ye(),
152
+ userId: Xe,
153
+ organizationId: _e()
154
+ }, g = {
155
+ id: He(),
156
156
  role: "user",
157
157
  content: e,
158
158
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
159
159
  metadata: {
160
- ...t.length ? { attachments: t.map(de) } : {},
160
+ ...t.length ? { attachments: t.map(pe) } : {},
161
161
  ...h(r.voiceSessionId)
162
162
  }
163
163
  };
164
- F(f, _);
165
- let v = Be();
166
- F(f, {
167
- id: v,
164
+ F(d, g);
165
+ let _ = He();
166
+ F(d, {
167
+ id: _,
168
168
  role: "assistant",
169
169
  content: "",
170
170
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
171
171
  metadata: {
172
- lang: tt,
172
+ lang: rt,
173
173
  ...h(r.voiceSessionId)
174
174
  }
175
- }), L(f, "provisioning", v, null);
176
- let te = (e, t, n, i, a = tt) => {
177
- I(f, v, { content: ee(e) }), ct(f, v, {
175
+ }), L(d, "provisioning", _, null);
176
+ let ne = (e, t, n, i, a = rt) => {
177
+ I(d, _, { content: te(e) }), lt(d, _, {
178
178
  lang: a,
179
179
  ...t?.length ? { artifacts: t } : {},
180
- ...t?.length || n || i ? { mode: d } : {},
180
+ ...t?.length || n || i ? { mode: u } : {},
181
181
  ...n ? { sessionId: n } : {},
182
182
  ...i ? { sandboxId: i } : {},
183
183
  ...h(r.voiceSessionId)
184
184
  });
185
- }, y = async (n = 1) => {
185
+ }, v = 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, 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
- r = ce(t) > y;
188
+ let { sandboxId: n, sessionId: o } = await Ct(d, _, u, p, m), l = (await c(n, p, o, m, { limit: 50 }).catch(() => [])).reduce((e, t) => Math.max(e, Ue(t)), 0);
189
+ J(d, _, "streaming", "Thinking...");
190
+ let f = le(e, t), h = qe?.(u, f, tt, nt, i) ?? f, g = ce(h, t), v = de(g), y = v > 0, ie = Ke?.();
191
+ r = ue(t) > v;
192
192
  try {
193
- await u(n, m, o, h, d, re, g, _?.length ? { parts: _ } : void 0);
193
+ await ee(n, p, o, h, u, ie, m, g?.length ? { parts: g } : void 0);
194
194
  } catch (e) {
195
- if (!_ || !Ee(e)) throw e;
196
- await u(n, m, o, h, d, re, g, void 0), r ||= b;
195
+ if (!g || !Oe(e)) throw e;
196
+ await ee(n, p, o, h, u, ie, m, void 0), r ||= y;
197
197
  }
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, {
198
+ let b = We([], l), ae = Date.now() + (Re[u] ?? ze), oe = Date.now(), se = Date.now();
199
+ for (; Date.now() < ae && (b = We(await c(n, p, o, m, {
200
200
  limit: 50,
201
201
  sinceMs: l
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
- if (!x.done && d !== "vibe-plugins") throw Error("Assistant response timed out while streaming progress");
204
- let de = d === "vibe-plugins" ? await s(n, m, o, g).then((e) => e).catch(() => []) : void 0;
205
- if (x.done || (x = {
206
- ...x,
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
- }), r && (x = {
209
- ...x,
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
- }), te(x.content, de, o, n), x.tokens) {
212
- I(f, v, { tokens: x.tokens });
202
+ }), l), I(d, _, { content: te(b.content) }), b.pendingWrite && lt(d, _, { pendingWrite: b.pendingWrite }), !b.done);) Date.now() - oe > 3e4 && (await a(n, p, 600, m).catch(() => void 0), oe = Date.now()), await new Promise((e) => setTimeout(e, re(Date.now() - se)));
203
+ if (!b.done && u !== "vibe-plugins") throw Error("Assistant response timed out while streaming progress");
204
+ let fe = u === "vibe-plugins" ? await s(n, p, o, m).then((e) => e).catch(() => []) : void 0;
205
+ if (b.done || (b = {
206
+ ...b,
207
+ content: `${b.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
+ }), r && (b = {
209
+ ...b,
210
+ content: `${b.content}\n\n${D("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
+ }), ne(b.content, fe, o, n), b.tokens) {
212
+ I(d, _, { tokens: b.tokens });
213
213
  try {
214
- await Ke?.({
215
- workspaceId: m,
214
+ await Je?.({
215
+ workspaceId: p,
216
216
  sessionId: o,
217
- messageId: x.messageId,
218
- model: x.model,
219
- tokens: x.tokens
220
- }), ke(k);
217
+ messageId: b.messageId,
218
+ model: b.model,
219
+ tokens: b.tokens
220
+ }), je(O);
221
221
  } catch {}
222
222
  }
223
- L(f, "complete", v, null);
223
+ L(d, "complete", _, null);
224
224
  } catch (e) {
225
- if (n === 1 && De(e)) return R(f), ut(d), y(2);
225
+ if (n === 1 && ke(e)) return R(d), dt(u), v(2);
226
226
  throw e;
227
227
  }
228
- }, b = f;
229
- xt.current.add(b);
228
+ }, y = d;
229
+ St.current.add(y);
230
230
  try {
231
- if (!m) throw Error("Assistant backend is unavailable without an active workspace context.");
232
- await y();
231
+ if (!p) throw Error("Assistant backend is unavailable without an active workspace context.");
232
+ await v();
233
233
  } catch (e) {
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);
234
+ if (K.current.invalidate(x.getState().sandboxesByMode[u]?.sandboxId ?? null), n(e)) {
235
+ Ae(O, "sandbox"), ne("You've reached your sandbox limit on the current plan. Upgrade to start the AI assistant.", void 0, void 0, void 0, "en"), L(d, "error", _, null);
236
236
  return;
237
237
  }
238
238
  let t = e instanceof Error ? e.message : "Something went wrong";
239
- L(f, "error", v, t), I(f, v, { content: `Sorry, an error occurred: ${t}. Please try again.` }), ct(f, v, {
239
+ L(d, "error", _, t), I(d, _, { content: `Sorry, an error occurred: ${t}. Please try again.` }), lt(d, _, {
240
240
  lang: "en",
241
241
  ...h(r.voiceSessionId)
242
242
  });
243
243
  } finally {
244
- xt.current.delete(b);
244
+ St.current.delete(y);
245
245
  }
246
246
  }, [
247
- M,
247
+ j,
248
248
  F,
249
- Ge,
249
+ qe,
250
250
  R,
251
- ut,
252
- nt,
251
+ dt,
252
+ it,
253
253
  P,
254
254
  Ct,
255
- We,
256
- j,
257
- qe,
258
- I,
259
- k,
260
255
  Ke,
261
- et,
256
+ A,
257
+ Ye,
258
+ I,
259
+ O,
260
+ Je,
261
+ nt,
262
+ rt,
262
263
  tt,
263
- $e,
264
- lt,
265
- at,
264
+ ut,
265
+ N,
266
266
  L,
267
- O,
268
- q,
269
- Je
270
- ]), wt = C((e) => {
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);
267
+ D,
268
+ J,
269
+ Xe
270
+ ]), wt = S((e) => {
271
+ Y(e);
272
+ }, [Y]), Tt = S(() => {
273
+ let e = [...B.chat].reverse().find((e) => e.role === "user"), t = j ? xt.current[j] ?? [] : [];
274
+ e && Y(e.content, t);
275
275
  }, [
276
276
  V,
277
- J,
278
- M
279
- ]), Y = E(J);
280
- w(() => {
281
- Y.current = J;
282
- }, [J]);
283
- let Et = T(() => {
277
+ Y,
278
+ j
279
+ ]), Et = T(Y);
280
+ C(() => {
281
+ Et.current = Y;
282
+ }, [Y]);
283
+ let Dt = w(() => {
284
284
  if (U) return null;
285
285
  for (let e = V.length - 1; e >= 0; --e) {
286
286
  let t = V[e];
287
287
  if (t?.role !== "assistant" || !m(t)) continue;
288
- let n = pe(t.content).text.trim();
288
+ let n = he(t.content).text.trim();
289
289
  return n ? {
290
290
  id: t.id,
291
291
  text: n
292
292
  } : null;
293
293
  }
294
294
  return null;
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) => ({
295
+ }, [V, U]), Ot = w(() => Dt ? y(Dt.text) : null, [Dt]), kt = B.chat, X = w(() => B.voice.filter((e) => e.role === "user" || e.role === "assistant").map((e) => ({
296
296
  id: e.id,
297
297
  role: e.role,
298
- text: pe(e.content).text.trim(),
298
+ text: he(e.content).text.trim(),
299
299
  sessionId: g(e),
300
300
  timestamp: e.timestamp
301
- })).filter((e) => e.text.length > 0), [B.voice]), kt = C(() => {
301
+ })).filter((e) => e.text.length > 0), [B.voice]), At = S(() => {
302
302
  if (X.length === 0) return;
303
303
  let e = /* @__PURE__ */ new Date();
304
- be(v(X, {
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");
304
+ Se(ne(X, {
305
+ title: D("voiceSession.transcript", "Voice conversation"),
306
+ savedAt: D("voiceSession.savedAt", "Saved"),
307
+ session: D("voiceSession.sessionLabel", "Session"),
308
+ earlier: D("voiceSession.earlierLabel", "Earlier"),
309
+ you: D("voiceSession.speakerYou", "You"),
310
+ assistant: D("voiceSession.speakerAssistant", "Assistant")
311
+ }, e), v(O, e), "text/markdown");
312
312
  }, [
313
- k,
313
+ O,
314
314
  X,
315
- O
316
- ]), Z = Ae(), Q = E(Z);
315
+ D
316
+ ]), Z = Me(), Q = T(Z);
317
317
  Q.current = Z;
318
- let $ = me({
319
- onSubmit: C((e, t) => {
318
+ let $ = ge({
319
+ onSubmit: S((e, t) => {
320
320
  let n = () => {
321
- let n = Q.current, r = ue(n.attachments);
322
- Y.current(e, r, { voiceSessionId: t }), n.clear();
321
+ let n = Q.current, r = fe(n.attachments);
322
+ Et.current(e, r, { voiceSessionId: t }), n.clear();
323
323
  };
324
324
  if (!Q.current.isBusy) {
325
325
  n();
326
326
  return;
327
327
  }
328
328
  let r = Date.now(), i = window.setInterval(() => {
329
- Q.current.isBusy && Date.now() - r < ze || (window.clearInterval(i), n());
329
+ Q.current.isBusy && Date.now() - r < Ve || (window.clearInterval(i), n());
330
330
  }, 200);
331
331
  }, []),
332
- latestReply: Et,
333
- language: b(Xe, Ye).tag
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
- let e = S.getState().activeConversationId;
332
+ latestReply: Dt,
333
+ language: ie(Qe, Ze).tag
334
+ }), jt = w(() => (pt?.messages ?? []).reduce((e, t) => Math.max(e, t.metadata?.continuedVoiceTurns ?? 0), 0), [pt?.messages]), Mt = X.length > jt, Nt = S(() => {
335
+ let e = x.getState().activeConversationId;
336
336
  !e || X.length === 0 || (F(e, {
337
- id: Be(),
337
+ id: He(),
338
338
  role: "system",
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 })
339
+ content: _(X.slice(jt), {
340
+ intro: D("voiceSession.continuedIntro", "Continued from a voice conversation. You asked about:"),
341
+ nothing: D("voiceSession.continuedNothing", "Continued from a voice conversation."),
342
+ more: (e) => D("voiceSession.continuedMore", "…and {{count}} more", { count: e })
343
343
  }),
344
344
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
345
345
  metadata: { continuedVoiceTurns: X.length }
346
346
  }), G(!1), $.end());
347
347
  }, [
348
348
  X,
349
- At,
349
+ jt,
350
350
  F,
351
- O,
351
+ D,
352
352
  $
353
- ]), Nt = E(0);
354
- w(() => {
355
- $.active && (Nt.current = X.length);
353
+ ]), Pt = T(0);
354
+ C(() => {
355
+ $.active && (Pt.current = X.length);
356
356
  }, [$.active]);
357
- let Pt = C(() => {
358
- let e = X.length > Nt.current;
357
+ let Ft = S(() => {
358
+ let e = X.length > Pt.current;
359
359
  $.end(), e && G(!0);
360
360
  }, [X, $]);
361
- w(() => {
361
+ C(() => {
362
362
  !p && $.active && $.end();
363
- }, [p, $]), w(() => {
363
+ }, [p, $]), C(() => {
364
364
  $.active || Q.current.clear();
365
- }, [$.active]), w(() => {
366
- let e = S.getState().consumePendingPrompt();
367
- return e && Y.current(e), S.subscribe((e, t) => {
365
+ }, [$.active]), C(() => {
366
+ let e = x.getState().consumePendingPrompt();
367
+ return e && Et.current(e), x.subscribe((e, t) => {
368
368
  if (e.pendingPrompt && e.pendingPrompt !== t.pendingPrompt) {
369
- let e = S.getState().consumePendingPrompt();
370
- e && Y.current(e);
369
+ let e = x.getState().consumePendingPrompt();
370
+ e && Et.current(e);
371
371
  }
372
372
  });
373
373
  }, []);
374
- let Ft = C((e) => {
375
- let t = M ? S.getState().conversations.find((e) => e.id === M) : void 0;
374
+ let It = S((e) => {
375
+ let t = j ? x.getState().conversations.find((e) => e.id === j) : void 0;
376
376
  if (t && (t.messages.length > 0 || t.backendSessionId)) {
377
377
  if (t.mode !== e) {
378
- let t = S.getState().conversations.find((t) => t.mode === e && t.messages.length === 0 && !t.backendSessionId && !S.getState().processingByConversationId[t.id]);
379
- t ? ot(t.id) : P(void 0, e);
378
+ let t = x.getState().conversations.find((t) => t.mode === e && t.messages.length === 0 && !t.backendSessionId && !x.getState().processingByConversationId[t.id]);
379
+ t ? st(t.id) : P(void 0, e);
380
380
  }
381
- } else M && at(M, e);
382
- it(e);
381
+ } else j && N(j, e);
382
+ ot(e);
383
383
  }, [
384
- M,
384
+ j,
385
385
  P,
386
- ot,
387
- at,
388
- it
389
- ]), It = C((e) => {
390
- if (A.find((t) => t.id === e)?.writeCapable && !S.getState().apiCallsAcknowledged) {
391
- vt(e);
386
+ st,
387
+ N,
388
+ ot
389
+ ]), Lt = S((e) => {
390
+ if (k.find((t) => t.id === e)?.writeCapable && !x.getState().apiCallsAcknowledged) {
391
+ yt(e);
392
392
  return;
393
393
  }
394
- Ft(e);
395
- }, [Ft, A]), Lt = C(() => {
396
- let e = _t;
397
- vt(null), dt(), e && Ft(e);
394
+ It(e);
395
+ }, [It, k]), Rt = S(() => {
396
+ let e = vt;
397
+ yt(null), ft(), e && It(e);
398
398
  }, [
399
- _t,
400
- dt,
401
- Ft
402
- ]), Rt = C(() => {
403
- vt(null);
399
+ vt,
400
+ ft,
401
+ It
402
+ ]), zt = S(() => {
403
+ yt(null);
404
404
  }, []);
405
- return /* @__PURE__ */ Fe("div", {
405
+ return /* @__PURE__ */ Le("div", {
406
406
  className: "relative flex flex-1 flex-col overflow-hidden",
407
407
  children: [
408
- /* @__PURE__ */ Fe("div", {
408
+ /* @__PURE__ */ Le("div", {
409
409
  className: "contents",
410
410
  inert: $.active || void 0,
411
411
  children: [
412
- X.length > 0 && !$.active ? /* @__PURE__ */ D(ve, {
412
+ X.length > 0 && !$.active ? /* @__PURE__ */ E(be, {
413
413
  count: X.length,
414
414
  onOpenTranscript: () => G(!0)
415
415
  }) : null,
416
- Ot.length === 0 ? /* @__PURE__ */ D(xe, {
417
- mode: N,
416
+ kt.length === 0 ? /* @__PURE__ */ E(Ce, {
417
+ mode: M,
418
418
  onSuggestionClick: wt
419
- }) : /* @__PURE__ */ D("div", {
419
+ }) : /* @__PURE__ */ E("div", {
420
420
  className: "flex min-h-0 flex-1 flex-col",
421
- children: /* @__PURE__ */ D(Se, {
422
- messages: Ot,
423
- streamingMessageId: pt,
424
- failedMessageId: mt,
421
+ children: /* @__PURE__ */ E(we, {
422
+ messages: kt,
423
+ streamingMessageId: mt,
424
+ failedMessageId: ht,
425
425
  onRetry: Tt
426
426
  })
427
427
  }),
428
- /* @__PURE__ */ D(je, {
429
- onStartVoiceSession: $.available && N !== "api-calls" ? $.start : void 0,
430
- onSend: (e, t) => void J(e, t),
428
+ /* @__PURE__ */ E(Ne, {
429
+ onStartVoiceSession: $.available && M !== "api-calls" ? $.start : void 0,
430
+ onSend: (e, t) => void Y(e, t),
431
431
  disabled: U,
432
- placeholder: N === "api-calls" ? O("chatArea.placeholderActions", "What would you like me to do?") : O("chatArea.placeholderGeneral", "Ask me anything…"),
433
- mode: N,
434
- writeAccessDenied: x === "denied" && !!St?.writeCapable,
435
- availableModes: gt,
436
- onModeChange: It
432
+ placeholder: M === "api-calls" ? D("chatArea.placeholderActions", "What would you like me to do?") : D("chatArea.placeholderGeneral", "Ask me anything…"),
433
+ mode: M,
434
+ writeAccessDenied: ae === "denied" && !!q?.writeCapable,
435
+ availableModes: _t,
436
+ onModeChange: Lt
437
437
  })
438
438
  ]
439
439
  }),
440
- yt && !$.active ? /* @__PURE__ */ D(ye, {
440
+ bt && !$.active ? /* @__PURE__ */ E(xe, {
441
441
  turns: X,
442
442
  onClose: () => G(!1),
443
- onSave: kt,
444
- onContinueInChat: jt ? Mt : void 0,
443
+ onSave: At,
444
+ onContinueInChat: Mt ? Nt : void 0,
445
445
  closeOnEscape: !0
446
446
  }) : null,
447
- $.active && /* @__PURE__ */ D(Ce, {
447
+ $.active && /* @__PURE__ */ E(Te, {
448
448
  session: $.session,
449
449
  notice: $.notice,
450
450
  capturing: $.capturing,
@@ -458,20 +458,20 @@ var A = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
458
458
  onRetryAttachment: Z.retry,
459
459
  canAttachMore: Z.canAddMore,
460
460
  preparingAttachments: Z.preparingCount,
461
- onSaveTranscript: kt,
462
- onContinueInChat: Mt,
461
+ onSaveTranscript: At,
462
+ onContinueInChat: Nt,
463
463
  onInterrupt: $.interrupt,
464
- spoken: Dt,
464
+ spoken: Ot,
465
465
  onToggleMute: $.toggleMute,
466
- onEnd: Pt
466
+ onEnd: Ft
467
467
  }),
468
- /* @__PURE__ */ D(Ne, {
469
- open: _t !== null,
470
- onConfirm: Lt,
471
- onCancel: Rt
468
+ /* @__PURE__ */ E(Fe, {
469
+ open: vt !== null,
470
+ onConfirm: Rt,
471
+ onCancel: zt
472
472
  })
473
473
  ]
474
474
  });
475
475
  };
476
476
  //#endregion
477
- export { A as AssistantChatArea };
477
+ export { k as AssistantChatArea };
@@ -4,90 +4,90 @@ import { buildSandboxContextInput as i, executeSandboxGraphQL as a } from "./sha
4
4
  import { CHECK_AI_CREDITS as o, CREATE_SANDBOX as s, EXTEND_SANDBOX_TTL as c, GET_ACTIVE_SANDBOXES as l, GET_SANDBOX as u, PROXY_SANDBOX_REQUEST as d, REPORT_AI_TOKEN_USAGE as f, STOP_ASSISTANT_SANDBOX as p, WAIT_FOR_SANDBOX_RUNNING as m } from "./shared/assistant/operations.js";
5
5
  import { ASSISTANT_API_AUTH_STRATEGY as h, getImageForMode as g, getImageTagForMode as _, getResourcesForMode as v, getSandboxImageRegistry as y, resolveSandboxAssistantMode as b } from "./shared/assistant/images.js";
6
6
  import { getCapability as x, isUnknownFieldError as S, markSupported as C, markUnsupported as w } from "./shared/assistant/capabilities.js";
7
- import { buildAssistantSandboxEnv as T, buildPromptRequestBody as E, checkAssistantAiCredits as D, createAssistantSandbox as O, createAssistantSession as k, downloadAssistantArtifact as A, extendAssistantSandboxTTL as j, findExistingSandbox as M, getAssistantArtifacts as N, getAssistantMessages as P, getAssistantSession as F, getAssistantStreamAccess as I, modeRequiresConfirmWrites as L, reportAssistantAiTokenUsage as R, selectExistingAssistantSandbox as z, sendAssistantPromptAsync as B, sendHeartbeat as V, stopReapedAssistantSandbox as H, waitForAssistantServiceReady as U, waitForSandboxRunning as W } from "./shared/assistant/api.js";
8
- import { AssistantRuntimeManager as G } from "./shared/assistant/runtime.js";
9
- import { buildProgress as K, getAssistantMedia as q, getAssistantText as J, getRawMessageCreatedAt as Y, getToolProgress as X, isReapedSandboxConnectionError as Z, isRecoverable as Q, mapSessionToHistory as $, mergeMessagesById as ee, sanitize as te } from "./shared/assistant/progress.js";
10
- import { createSandboxAssistantTransport as ne } from "./shared/assistant/createSandboxAssistantTransport.js";
11
- import { useSandboxAssistantTransport as re } from "./shared/assistant/useSandboxAssistantTransport.js";
12
- import { chatTurns as ie, groupBySession as ae, groupConsecutiveBySession as oe, isVoiceTurn as se, voiceMarker as ce, voiceSessionIdOf as le, voiceTurnsOnly as ue } from "./shared/assistant/voice/turnVisibility.js";
13
- import { browserSpeechEngine as de } from "./shared/assistant/speech/browserSpeechEngine.js";
14
- import { HOSTED_TTS_TIER as fe, HOSTED_VOICES as pe, hostedLocaleFor as me, hostedSupportsLanguage as he } from "./shared/assistant/speech/hostedVoiceCatalogue.js";
15
- import { HOSTED_TTS_MAX_CHARS as ge, SPEAKING_RATE_MAX as _e, SPEAKING_RATE_MAX_STREAMING as ve, SPEAKING_RATE_MAX_SYNC as ye, SPEAKING_RATE_MIN as be, base64ToBytes as xe, buildRequest as Se, classifyHttpFailure as Ce, decodeAudioResponse as we, shouldDisableEngine as Te, splitForVendor as Ee } from "./shared/assistant/speech/hostedTtsProtocol.js";
16
- import { createHostedTtsEngine as De } from "./shared/assistant/speech/hostedTtsSpeechEngine.js";
17
- import { createRoutingSpeechEngine as Oe } from "./shared/assistant/speech/routingSpeechEngine.js";
18
- import { configureSpeechEngine as ke, createSpeechEngines as Ae, getSpeechEngine as je, readSpeechEngineConfig as Me, resetSpeechEngine as Ne } from "./shared/assistant/speech/createSpeechEngine.js";
19
- import { micIsInterrupt as Pe, showsAssistantCaption as Fe, showsUserCaption as Ie, voiceStageState as Le, waveformIsActive as Re, waveformIsSettled as ze } from "./shared/assistant/voice/voiceStageState.js";
20
- import { ENDPOINT_GRACE_MS as Be, INITIAL_SESSION as Ve, INTERRUPT_MAX_MS as He, INTERRUPT_MIN_MS as Ue, SILENCE_SUBMIT_MS as We, isCapturing as Ge, isEcho as Ke, isSubmittable as qe, orbMode as Je, planReplyConsumption as Ye, spokenSoFar as Xe, voiceSessionReducer as Ze } from "./shared/assistant/voice/voiceSession.js";
21
- import { SPEECH_LANG as Qe, VOICE_LIST_TIMEOUT_MS as $e, isSpeechBlocked as et, languageDisplayName as tt, normalizeLangTag as nt, primaryLanguageSubtag as rt, selectVoiceForLocale as it, speechGate as at, speechLangForLocale as ot, voiceAvailability as st, voiceQualityRank as ct, voicesForLocale as lt } from "./shared/assistant/voice/speechVoices.js";
22
- import { buildContinuedFromVoiceNote as ut, buildVoiceTranscriptMarkdown as dt, voiceTranscriptFilename as ft } from "./shared/assistant/voice/voiceTranscript.js";
23
- import { DEFAULT_SPEAKABLE_LABELS as pt, MAX_SPEAKABLE_CHARS as mt, MAX_SPOKEN_TABLE_ROWS as ht, SPEECH_CHUNK_CHARS as gt, SPEECH_CHUNK_CJK_CHARS as _t, chunkForSpeech as vt, containsCjk as yt, speakableEmail as bt, splitTableRow as xt, toSpeakableText as St } from "./shared/assistant/voice/speakableText.js";
24
- import { PREVIEW_LANGUAGES as Ct, voicePreviewText as wt } from "./shared/assistant/voice/voicePreview.js";
25
- import { MINI_CAPTION_BUDGET as Tt, showPreviousChunk as Et } from "./shared/assistant/voice/miniCaptionBudget.js";
26
- import { POLL_FAST_MS as Dt, POLL_FAST_UNTIL_MS as Ot, POLL_SLOW_MS as kt, POLL_STEADY_MS as At, POLL_STEADY_UNTIL_MS as jt, pollDelayMs as Mt } from "./shared/assistant/voice/assistantPollSchedule.js";
27
- import { toCaptionText as Nt } from "./shared/assistant/voice/captionText.js";
28
- import { ASSISTANT_LANGUAGES as Pt, DEFAULT_SPEECH_RATE as Ft, findAssistantLanguage as It, resolveAssistantLanguage as Lt } from "./shared/assistant/voice/languages.js";
29
- import { replyFollowsInput as Rt, resolveLanguagePair as zt } from "./shared/assistant/voice/languagePair.js";
30
- import { findPendingWrite as Bt, parseConfirmationRefusal as Vt } from "./shared/assistant/pendingWrite.js";
31
- import { AssistantProductProvider as Ht, resolveModeConfig as Ut, useAssistantPageLabel as Wt, useAssistantProduct as Gt, useAssistantProductOrNull as Kt, useAssistantStorageFolders as qt } from "./shared/assistant/product.js";
32
- import { AssistantI18nProvider as Jt, assistantTranslationKey as Yt, useAssistantI18nNamespace as Xt, useAssistantTr as Zt } from "./shared/assistant/i18n.js";
33
- import { SPOKEN_LABEL_LANGUAGES as Qt, speechLabelsFor as $t } from "./shared/assistant/voice/speechLabels.js";
34
- import { detectScriptLocale as en, resolveSpeechLocale as tn } from "./shared/assistant/voice/replyLanguage.js";
35
- import { IDLE_PLAYBACK as nn, isSpeakingMessage as rn, requiresCancel as an, speechPlaybackReducer as on } from "./shared/assistant/voice/speechPlayback.js";
36
- import { MAX_INLINE_IMAGE_BASE64_BYTES as sn, MAX_REQUEST_BODY_BYTES as cn } from "./shared/assistant/gatewayLimits.js";
37
- import { BOILERPLATE_PAGE_SHARE as ln, MAX_BOILERPLATE_LINE_CHARS as un, MAX_EXTRACTED_CHARS as dn, MAX_PDF_PAGES_SCANNED as fn, MIN_PAGE_TEXT_CHARS as pn, MIN_TEXT_PAGE_SHARE as mn, columnLetterToIndex as hn, decodeXmlEntities as gn, docxXmlToText as _n, fitPdfPages as vn, formatPageRanges as yn, isMostlyImagePages as bn, joinSheets as xn, pageMarker as Sn, parseSharedStrings as Cn, parseWorkbookSheets as wn, pdfTextItemsToPage as Tn, sheetXmlToRows as En, summarisePageText as Dn, truncatePagesForInline as On } from "./shared/assistant/documentText.js";
38
- import { ATTACHMENT_ACCEPT as kn, AttachmentRejectedError as An, INLINE_IMAGE_MAX_DIM as jn, INLINE_IMAGE_QUALITY as Mn, MAX_ATTACHMENTS as Nn, MAX_FILE_BYTES as Pn, MAX_INLINE_CHARS_PER_FILE as Fn, MAX_INLINE_CHARS_TOTAL as In, MAX_INLINE_IMAGE_BASE64_CHARS as Ln, MAX_INLINE_IMAGE_PARTS as Rn, MAX_INLINE_TURN_BODY_BYTES as zn, MAX_TURN_BODY_BYTES as Bn, PROMPT_ENVELOPE_RESERVE_BYTES as Vn, TURN_BODY_HEADROOM_BYTES as Hn, buildAttachmentPromptBlock as Un, buildPromptParts as Wn, buildPromptWithAttachments as Gn, classifyAttachment as Kn, countInlineImageCandidates as qn, countInlinedImageParts as Jn, detectDocumentFormat as Yn, estimateTurnBodyBytes as Xn, formatBytes as Zn, getAttachmentSendBlocker as Qn, getExtension as $n, getSendableAttachments as er, hasAttachmentWorkInFlight as tr, parseDataUrl as nr, toMessageAttachment as rr, truncateForInline as ir, validateFile as ar } from "./shared/assistant/attachments.js";
39
- import { useAssistantStore as or } from "./shared/assistant/store.js";
40
- import { isTurnInFlight as sr } from "./shared/assistant/turnState.js";
41
- import { AssistantToolActivity as cr, parseToolActivity as lr } from "./shared/assistant/ui/AssistantToolActivity.js";
42
- import { AssistantSpeechProvider as ur, useAssistantSpeech as dr } from "./shared/assistant/ui/AssistantSpeechProvider.js";
43
- import { useVoiceSession as fr } from "./shared/assistant/ui/useVoiceSession.js";
44
- import { copyToClipboard as pr } from "./shared/assistant/clipboard.js";
45
- import { getActorId as mr, getOrganizationId as hr, getWorkspaceId as gr } from "./shared/assistant/context.js";
46
- import { ATTACHMENT_SOURCES as _r, availableAttachmentSources as vr, deviceHasCamera as yr } from "./shared/assistant/attachmentSources.js";
47
- import { SANDBOX_READY_TTL_MS as br, createReadinessTracker as xr, isRecentlyVerified as Sr } from "./shared/assistant/sandboxReadiness.js";
48
- import { AssistantAutoSpeakToggle as Cr } from "./shared/assistant/ui/AssistantAutoSpeakToggle.js";
49
- import { AssistantMarkdownImage as wr, imageHostLabel as Tr, isRemoteImageSrc as Er } from "./shared/assistant/ui/AssistantMarkdownImage.js";
50
- import { AssistantMarkdownRenderer as Dr, assistantUrlTransform as Or } from "./shared/assistant/ui/AssistantMarkdownRenderer.js";
51
- import { AssistantMessageAttachments as kr } from "./shared/assistant/ui/AssistantMessageAttachments.js";
52
- import { AssistantPendingWriteCard as Ar } from "./shared/assistant/ui/AssistantPendingWriteCard.js";
53
- import { AssistantLanguageMenu as jr } from "./shared/assistant/ui/AssistantLanguageMenu.js";
54
- import { AssistantReplyLanguageSelector as Mr } from "./shared/assistant/ui/AssistantReplyLanguageSelector.js";
55
- import { AssistantSpeakButton as Nr } from "./shared/assistant/ui/AssistantSpeakButton.js";
56
- import { AssistantSpokenTurnsNotice as Pr } from "./shared/assistant/ui/AssistantSpokenTurnsNotice.js";
57
- import { AssistantAttachmentButton as Fr } from "./shared/assistant/ui/composer/AssistantAttachmentButton.js";
58
- import { AssistantAttachmentChips as Ir } from "./shared/assistant/ui/composer/AssistantAttachmentChips.js";
59
- import { AssistantLanguageSelector as Lr, FOLLOW_APP_LOCALE as Rr } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
60
- import { ASSISTANT_MODE_META as zr, AssistantModeSelector as Br, nextModeIndex as Vr } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
61
- import { AssistantVoiceButton as Hr } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
62
- import { AUTO_VOICE as Ur, AssistantVoiceSelector as Wr } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
63
- import { AssistantVoiceOrb as Gr } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
64
- import { AssistantVoiceSessionButton as Kr } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
65
- import { CAPTION_SCROLL_ATTR as qr, VoiceCaption as Jr } from "./shared/assistant/ui/voice/VoiceCaption.js";
66
- import { VoiceConversationView as Yr } from "./shared/assistant/ui/voice/VoiceConversationView.js";
67
- import { VoiceWaveform as Xr } from "./shared/assistant/ui/voice/VoiceWaveform.js";
68
- import { VoiceMiniController as Zr } from "./shared/assistant/ui/voice/VoiceMiniController.js";
69
- import { VoiceStage as Qr } from "./shared/assistant/ui/voice/VoiceStage.js";
70
- import { VoiceTranscriptDrawer as $r } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
71
- import { downloadFile as ei, exportConversation as ti } from "./shared/assistant/exportConversation.js";
72
- import { AssistantMoreMenu as ni } from "./shared/assistant/ui/AssistantMoreMenu.js";
73
- import { AssistantHeader as ri } from "./shared/assistant/ui/AssistantHeader.js";
74
- import { AssistantConversationList as ii } from "./shared/assistant/ui/AssistantConversationList.js";
75
- import { AssistantEmptyState as ai } from "./shared/assistant/ui/AssistantEmptyState.js";
76
- import { AssistantMessageItem as oi } from "./shared/assistant/ui/AssistantMessageItem.js";
77
- import { AssistantMessageList as si } from "./shared/assistant/ui/AssistantMessageList.js";
78
- import { AssistantVoiceSession as ci } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
79
- import { useAssistantApiAccess as li } from "./shared/assistant/useAssistantApiAccess.js";
80
- import { useConversationTurns as ui } from "./shared/assistant/useConversationTurns.js";
81
- import { isMultimodalBodyRejection as di, isRecoverableAssistantError as fi } from "./shared/assistant/transportErrors.js";
82
- import { aiCreditsUpdatedEventName as pi, dispatchAssistantQuotaExhausted as mi, notifyAiCreditsUpdated as hi } from "./shared/assistant/aiCredits.js";
83
- import { useWorkspaceWriteAccess as gi } from "./shared/assistant/useWorkspaceWriteAccess.js";
84
- import { extractDocumentText as _i } from "./shared/assistant/documentExtract.js";
85
- import { useAssistantAttachments as vi } from "./shared/assistant/useAssistantAttachments.js";
86
- import { AssistantComposer as yi } from "./shared/assistant/ui/composer/AssistantComposer.js";
87
- import { isProdRuntime as bi } from "./shared/assistant/env.js";
88
- import { useAssistantHeartbeat as xi } from "./shared/assistant/useAssistantHeartbeat.js";
89
- import { useAssistantKeyboardShortcuts as Si } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
90
- import { AssistantApiCallsConsentDialog as Ci } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
91
- import { AssistantChatArea as wi } from "./shared/assistant/ui/AssistantChatArea.js";
92
- import { AIAssistantPanel as Ti } from "./shared/assistant/ui/AIAssistantPanel.js";
93
- export { Ti as AIAssistantPanel, h as ASSISTANT_API_AUTH_STRATEGY, Pt as ASSISTANT_LANGUAGES, zr as ASSISTANT_MODE_META, kn as ATTACHMENT_ACCEPT, _r as ATTACHMENT_SOURCES, Ur as AUTO_VOICE, Ci as AssistantApiCallsConsentDialog, Fr as AssistantAttachmentButton, Ir as AssistantAttachmentChips, Cr as AssistantAutoSpeakToggle, wi as AssistantChatArea, yi as AssistantComposer, ii as AssistantConversationList, ai as AssistantEmptyState, ri as AssistantHeader, Jt as AssistantI18nProvider, jr as AssistantLanguageMenu, Lr as AssistantLanguageSelector, wr as AssistantMarkdownImage, Dr as AssistantMarkdownRenderer, kr as AssistantMessageAttachments, oi as AssistantMessageItem, si as AssistantMessageList, Br as AssistantModeSelector, ni as AssistantMoreMenu, Ar as AssistantPendingWriteCard, Ht as AssistantProductProvider, Mr as AssistantReplyLanguageSelector, G as AssistantRuntimeManager, Nr as AssistantSpeakButton, ur as AssistantSpeechProvider, Pr as AssistantSpokenTurnsNotice, cr as AssistantToolActivity, Hr as AssistantVoiceButton, Gr as AssistantVoiceOrb, Wr as AssistantVoiceSelector, ci as AssistantVoiceSession, Kr as AssistantVoiceSessionButton, An as AttachmentRejectedError, ln as BOILERPLATE_PAGE_SHARE, qr as CAPTION_SCROLL_ATTR, o as CHECK_AI_CREDITS, s as CREATE_SANDBOX, pt as DEFAULT_SPEAKABLE_LABELS, Ft as DEFAULT_SPEECH_RATE, Be as ENDPOINT_GRACE_MS, c as EXTEND_SANDBOX_TTL, Rr as FOLLOW_APP_LOCALE, l as GET_ACTIVE_SANDBOXES, u as GET_SANDBOX, ge as HOSTED_TTS_MAX_CHARS, fe as HOSTED_TTS_TIER, pe as HOSTED_VOICES, nn as IDLE_PLAYBACK, Ve as INITIAL_SESSION, jn as INLINE_IMAGE_MAX_DIM, Mn as INLINE_IMAGE_QUALITY, He as INTERRUPT_MAX_MS, Ue as INTERRUPT_MIN_MS, Nn as MAX_ATTACHMENTS, un as MAX_BOILERPLATE_LINE_CHARS, dn as MAX_EXTRACTED_CHARS, Pn as MAX_FILE_BYTES, Fn as MAX_INLINE_CHARS_PER_FILE, In as MAX_INLINE_CHARS_TOTAL, sn as MAX_INLINE_IMAGE_BASE64_BYTES, Ln as MAX_INLINE_IMAGE_BASE64_CHARS, Rn as MAX_INLINE_IMAGE_PARTS, zn as MAX_INLINE_TURN_BODY_BYTES, fn as MAX_PDF_PAGES_SCANNED, cn as MAX_REQUEST_BODY_BYTES, mt as MAX_SPEAKABLE_CHARS, ht as MAX_SPOKEN_TABLE_ROWS, Bn as MAX_TURN_BODY_BYTES, Tt as MINI_CAPTION_BUDGET, pn as MIN_PAGE_TEXT_CHARS, mn as MIN_TEXT_PAGE_SHARE, Dt as POLL_FAST_MS, Ot as POLL_FAST_UNTIL_MS, kt as POLL_SLOW_MS, At as POLL_STEADY_MS, jt as POLL_STEADY_UNTIL_MS, Ct as PREVIEW_LANGUAGES, Vn as PROMPT_ENVELOPE_RESERVE_BYTES, d as PROXY_SANDBOX_REQUEST, f as REPORT_AI_TOKEN_USAGE, br as SANDBOX_READY_TTL_MS, We as SILENCE_SUBMIT_MS, _e as SPEAKING_RATE_MAX, ve as SPEAKING_RATE_MAX_STREAMING, ye as SPEAKING_RATE_MAX_SYNC, be as SPEAKING_RATE_MIN, gt as SPEECH_CHUNK_CHARS, _t as SPEECH_CHUNK_CJK_CHARS, Qe as SPEECH_LANG, Qt as SPOKEN_LABEL_LANGUAGES, p as STOP_ASSISTANT_SANDBOX, Hn as TURN_BODY_HEADROOM_BYTES, $e as VOICE_LIST_TIMEOUT_MS, Jr as VoiceCaption, Yr as VoiceConversationView, Zr as VoiceMiniController, Qr as VoiceStage, $r as VoiceTranscriptDrawer, Xr as VoiceWaveform, m as WAIT_FOR_SANDBOX_RUNNING, pi as aiCreditsUpdatedEventName, Yt as assistantTranslationKey, Or as assistantUrlTransform, vr as availableAttachmentSources, xe as base64ToBytes, de as browserSpeechEngine, T as buildAssistantSandboxEnv, Un as buildAttachmentPromptBlock, ut as buildContinuedFromVoiceNote, K as buildProgress, Wn as buildPromptParts, E as buildPromptRequestBody, Gn as buildPromptWithAttachments, Se as buildRequest, i as buildSandboxContextInput, dt as buildVoiceTranscriptMarkdown, ie as chatTurns, D as checkAssistantAiCredits, vt as chunkForSpeech, Kn as classifyAttachment, Ce as classifyHttpFailure, t as classifyQuotaError, hn as columnLetterToIndex, ke as configureSpeechEngine, yt as containsCjk, pr as copyToClipboard, qn as countInlineImageCandidates, Jn as countInlinedImageParts, O as createAssistantSandbox, k as createAssistantSession, De as createHostedTtsEngine, xr as createReadinessTracker, Oe as createRoutingSpeechEngine, ne as createSandboxAssistantTransport, Ae as createSpeechEngines, we as decodeAudioResponse, gn as decodeXmlEntities, Yn as detectDocumentFormat, en as detectScriptLocale, yr as deviceHasCamera, mi as dispatchAssistantQuotaExhausted, _n as docxXmlToText, A as downloadAssistantArtifact, ei as downloadFile, Xn as estimateTurnBodyBytes, a as executeSandboxGraphQL, ti as exportConversation, j as extendAssistantSandboxTTL, _i as extractDocumentText, It as findAssistantLanguage, M as findExistingSandbox, Bt as findPendingWrite, vn as fitPdfPages, Zn as formatBytes, yn as formatPageRanges, mr as getActorId, N as getAssistantArtifacts, q as getAssistantMedia, P as getAssistantMessages, F as getAssistantSession, I as getAssistantStreamAccess, J as getAssistantText, Qn as getAttachmentSendBlocker, x as getCapability, $n as getExtension, g as getImageForMode, _ as getImageTagForMode, hr as getOrganizationId, Y as getRawMessageCreatedAt, v as getResourcesForMode, y as getSandboxImageRegistry, er as getSendableAttachments, je as getSpeechEngine, X as getToolProgress, gr as getWorkspaceId, ae as groupBySession, oe as groupConsecutiveBySession, tr as hasAttachmentWorkInFlight, me as hostedLocaleFor, he as hostedSupportsLanguage, Tr as imageHostLabel, Ge as isCapturing, Ke as isEcho, bn as isMostlyImagePages, di as isMultimodalBodyRejection, bi as isProdRuntime, n as isQuotaExhaustedError, Z as isReapedSandboxConnectionError, Sr as isRecentlyVerified, Q as isRecoverable, fi as isRecoverableAssistantError, Er as isRemoteImageSrc, rn as isSpeakingMessage, et as isSpeechBlocked, qe as isSubmittable, sr as isTurnInFlight, S as isUnknownFieldError, se as isVoiceTurn, xn as joinSheets, tt as languageDisplayName, $ as mapSessionToHistory, C as markSupported, w as markUnsupported, ee as mergeMessagesById, Pe as micIsInterrupt, L as modeRequiresConfirmWrites, Vr as nextModeIndex, nt as normalizeLangTag, hi as notifyAiCreditsUpdated, Je as orbMode, Sn as pageMarker, Vt as parseConfirmationRefusal, nr as parseDataUrl, Cn as parseSharedStrings, lr as parseToolActivity, wn as parseWorkbookSheets, Tn as pdfTextItemsToPage, Ye as planReplyConsumption, Mt as pollDelayMs, rt as primaryLanguageSubtag, r as quotaExhaustedEventName, Me as readSpeechEngineConfig, Rt as replyFollowsInput, R as reportAssistantAiTokenUsage, an as requiresCancel, Ne as resetSpeechEngine, Lt as resolveAssistantLanguage, zt as resolveLanguagePair, Ut as resolveModeConfig, b as resolveSandboxAssistantMode, tn as resolveSpeechLocale, te as sanitize, z as selectExistingAssistantSandbox, it as selectVoiceForLocale, B as sendAssistantPromptAsync, V as sendHeartbeat, En as sheetXmlToRows, Te as shouldDisableEngine, Et as showPreviousChunk, Fe as showsAssistantCaption, Ie as showsUserCaption, bt as speakableEmail, at as speechGate, $t as speechLabelsFor, ot as speechLangForLocale, on as speechPlaybackReducer, Ee as splitForVendor, xt as splitTableRow, Xe as spokenSoFar, H as stopReapedAssistantSandbox, Dn as summarisePageText, Nt as toCaptionText, rr as toMessageAttachment, St as toSpeakableText, ir as truncateForInline, On as truncatePagesForInline, li as useAssistantApiAccess, vi as useAssistantAttachments, xi as useAssistantHeartbeat, Xt as useAssistantI18nNamespace, Si as useAssistantKeyboardShortcuts, Wt as useAssistantPageLabel, Gt as useAssistantProduct, Kt as useAssistantProductOrNull, dr as useAssistantSpeech, qt as useAssistantStorageFolders, or as useAssistantStore, Zt as useAssistantTr, ui as useConversationTurns, re as useSandboxAssistantTransport, e as useVoiceInput, fr as useVoiceSession, gi as useWorkspaceWriteAccess, ar as validateFile, st as voiceAvailability, ce as voiceMarker, wt as voicePreviewText, ct as voiceQualityRank, le as voiceSessionIdOf, Ze as voiceSessionReducer, Le as voiceStageState, ft as voiceTranscriptFilename, ue as voiceTurnsOnly, lt as voicesForLocale, U as waitForAssistantServiceReady, W as waitForSandboxRunning, Re as waveformIsActive, ze as waveformIsSettled };
7
+ import { buildAssistantSandboxEnv as T, buildPromptRequestBody as E, checkAssistantAiCredits as D, createAssistantSandbox as O, createAssistantSession as k, downloadAssistantArtifact as A, extendAssistantSandboxTTL as j, findExistingSandbox as M, getAssistantArtifacts as N, getAssistantMessages as P, getAssistantSession as F, getAssistantStreamAccess as I, modeRequiresConfirmWrites as L, releaseSupersededAssistantSandboxes as R, reportAssistantAiTokenUsage as z, selectExistingAssistantSandbox as B, selectSupersededAssistantSandboxes as V, sendAssistantPromptAsync as H, sendHeartbeat as U, stopReapedAssistantSandbox as W, waitForAssistantServiceReady as G, waitForSandboxRunning as K } from "./shared/assistant/api.js";
8
+ import { AssistantRuntimeManager as q } from "./shared/assistant/runtime.js";
9
+ import { buildProgress as J, getAssistantMedia as Y, getAssistantText as X, getRawMessageCreatedAt as Z, getToolProgress as Q, isReapedSandboxConnectionError as $, isRecoverable as ee, mapSessionToHistory as te, mergeMessagesById as ne, sanitize as re } from "./shared/assistant/progress.js";
10
+ import { createSandboxAssistantTransport as ie } from "./shared/assistant/createSandboxAssistantTransport.js";
11
+ import { useSandboxAssistantTransport as ae } from "./shared/assistant/useSandboxAssistantTransport.js";
12
+ import { chatTurns as oe, groupBySession as se, groupConsecutiveBySession as ce, isVoiceTurn as le, voiceMarker as ue, voiceSessionIdOf as de, voiceTurnsOnly as fe } from "./shared/assistant/voice/turnVisibility.js";
13
+ import { browserSpeechEngine as pe } from "./shared/assistant/speech/browserSpeechEngine.js";
14
+ import { HOSTED_TTS_TIER as me, HOSTED_VOICES as he, hostedLocaleFor as ge, hostedSupportsLanguage as _e } from "./shared/assistant/speech/hostedVoiceCatalogue.js";
15
+ import { HOSTED_TTS_MAX_CHARS as ve, SPEAKING_RATE_MAX as ye, SPEAKING_RATE_MAX_STREAMING as be, SPEAKING_RATE_MAX_SYNC as xe, SPEAKING_RATE_MIN as Se, base64ToBytes as Ce, buildRequest as we, classifyHttpFailure as Te, decodeAudioResponse as Ee, shouldDisableEngine as De, splitForVendor as Oe } from "./shared/assistant/speech/hostedTtsProtocol.js";
16
+ import { createHostedTtsEngine as ke } from "./shared/assistant/speech/hostedTtsSpeechEngine.js";
17
+ import { createRoutingSpeechEngine as Ae } from "./shared/assistant/speech/routingSpeechEngine.js";
18
+ import { configureSpeechEngine as je, createSpeechEngines as Me, getSpeechEngine as Ne, readSpeechEngineConfig as Pe, resetSpeechEngine as Fe } from "./shared/assistant/speech/createSpeechEngine.js";
19
+ import { micIsInterrupt as Ie, showsAssistantCaption as Le, showsUserCaption as Re, voiceStageState as ze, waveformIsActive as Be, waveformIsSettled as Ve } from "./shared/assistant/voice/voiceStageState.js";
20
+ import { ENDPOINT_GRACE_MS as He, INITIAL_SESSION as Ue, INTERRUPT_MAX_MS as We, INTERRUPT_MIN_MS as Ge, SILENCE_SUBMIT_MS as Ke, isCapturing as qe, isEcho as Je, isSubmittable as Ye, orbMode as Xe, planReplyConsumption as Ze, spokenSoFar as Qe, voiceSessionReducer as $e } from "./shared/assistant/voice/voiceSession.js";
21
+ import { SPEECH_LANG as et, VOICE_LIST_TIMEOUT_MS as tt, isSpeechBlocked as nt, languageDisplayName as rt, normalizeLangTag as it, primaryLanguageSubtag as at, selectVoiceForLocale as ot, speechGate as st, speechLangForLocale as ct, voiceAvailability as lt, voiceQualityRank as ut, voicesForLocale as dt } from "./shared/assistant/voice/speechVoices.js";
22
+ import { buildContinuedFromVoiceNote as ft, buildVoiceTranscriptMarkdown as pt, voiceTranscriptFilename as mt } from "./shared/assistant/voice/voiceTranscript.js";
23
+ import { DEFAULT_SPEAKABLE_LABELS as ht, MAX_SPEAKABLE_CHARS as gt, MAX_SPOKEN_TABLE_ROWS as _t, SPEECH_CHUNK_CHARS as vt, SPEECH_CHUNK_CJK_CHARS as yt, chunkForSpeech as bt, containsCjk as xt, speakableEmail as St, splitTableRow as Ct, toSpeakableText as wt } from "./shared/assistant/voice/speakableText.js";
24
+ import { PREVIEW_LANGUAGES as Tt, voicePreviewText as Et } from "./shared/assistant/voice/voicePreview.js";
25
+ import { MINI_CAPTION_BUDGET as Dt, showPreviousChunk as Ot } from "./shared/assistant/voice/miniCaptionBudget.js";
26
+ import { POLL_FAST_MS as kt, POLL_FAST_UNTIL_MS as At, POLL_SLOW_MS as jt, POLL_STEADY_MS as Mt, POLL_STEADY_UNTIL_MS as Nt, pollDelayMs as Pt } from "./shared/assistant/voice/assistantPollSchedule.js";
27
+ import { toCaptionText as Ft } from "./shared/assistant/voice/captionText.js";
28
+ import { ASSISTANT_LANGUAGES as It, DEFAULT_SPEECH_RATE as Lt, findAssistantLanguage as Rt, resolveAssistantLanguage as zt } from "./shared/assistant/voice/languages.js";
29
+ import { replyFollowsInput as Bt, resolveLanguagePair as Vt } from "./shared/assistant/voice/languagePair.js";
30
+ import { findPendingWrite as Ht, parseConfirmationRefusal as Ut } from "./shared/assistant/pendingWrite.js";
31
+ import { AssistantProductProvider as Wt, resolveModeConfig as Gt, useAssistantPageLabel as Kt, useAssistantProduct as qt, useAssistantProductOrNull as Jt, useAssistantStorageFolders as Yt } from "./shared/assistant/product.js";
32
+ import { AssistantI18nProvider as Xt, assistantTranslationKey as Zt, useAssistantI18nNamespace as Qt, useAssistantTr as $t } from "./shared/assistant/i18n.js";
33
+ import { SPOKEN_LABEL_LANGUAGES as en, speechLabelsFor as tn } from "./shared/assistant/voice/speechLabels.js";
34
+ import { detectScriptLocale as nn, resolveSpeechLocale as rn } from "./shared/assistant/voice/replyLanguage.js";
35
+ import { IDLE_PLAYBACK as an, isSpeakingMessage as on, requiresCancel as sn, speechPlaybackReducer as cn } from "./shared/assistant/voice/speechPlayback.js";
36
+ import { MAX_INLINE_IMAGE_BASE64_BYTES as ln, MAX_REQUEST_BODY_BYTES as un } from "./shared/assistant/gatewayLimits.js";
37
+ import { BOILERPLATE_PAGE_SHARE as dn, MAX_BOILERPLATE_LINE_CHARS as fn, MAX_EXTRACTED_CHARS as pn, MAX_PDF_PAGES_SCANNED as mn, MIN_PAGE_TEXT_CHARS as hn, MIN_TEXT_PAGE_SHARE as gn, columnLetterToIndex as _n, decodeXmlEntities as vn, docxXmlToText as yn, fitPdfPages as bn, formatPageRanges as xn, isMostlyImagePages as Sn, joinSheets as Cn, pageMarker as wn, parseSharedStrings as Tn, parseWorkbookSheets as En, pdfTextItemsToPage as Dn, sheetXmlToRows as On, summarisePageText as kn, truncatePagesForInline as An } from "./shared/assistant/documentText.js";
38
+ import { ATTACHMENT_ACCEPT as jn, AttachmentRejectedError as Mn, INLINE_IMAGE_MAX_DIM as Nn, INLINE_IMAGE_QUALITY as Pn, MAX_ATTACHMENTS as Fn, MAX_FILE_BYTES as In, MAX_INLINE_CHARS_PER_FILE as Ln, MAX_INLINE_CHARS_TOTAL as Rn, MAX_INLINE_IMAGE_BASE64_CHARS as zn, MAX_INLINE_IMAGE_PARTS as Bn, MAX_INLINE_TURN_BODY_BYTES as Vn, MAX_TURN_BODY_BYTES as Hn, PROMPT_ENVELOPE_RESERVE_BYTES as Un, TURN_BODY_HEADROOM_BYTES as Wn, buildAttachmentPromptBlock as Gn, buildPromptParts as Kn, buildPromptWithAttachments as qn, classifyAttachment as Jn, countInlineImageCandidates as Yn, countInlinedImageParts as Xn, detectDocumentFormat as Zn, estimateTurnBodyBytes as Qn, formatBytes as $n, getAttachmentSendBlocker as er, getExtension as tr, getSendableAttachments as nr, hasAttachmentWorkInFlight as rr, parseDataUrl as ir, toMessageAttachment as ar, truncateForInline as or, validateFile as sr } from "./shared/assistant/attachments.js";
39
+ import { useAssistantStore as cr } from "./shared/assistant/store.js";
40
+ import { isTurnInFlight as lr } from "./shared/assistant/turnState.js";
41
+ import { AssistantToolActivity as ur, parseToolActivity as dr } from "./shared/assistant/ui/AssistantToolActivity.js";
42
+ import { AssistantSpeechProvider as fr, useAssistantSpeech as pr } from "./shared/assistant/ui/AssistantSpeechProvider.js";
43
+ import { useVoiceSession as mr } from "./shared/assistant/ui/useVoiceSession.js";
44
+ import { copyToClipboard as hr } from "./shared/assistant/clipboard.js";
45
+ import { getActorId as gr, getOrganizationId as _r, getWorkspaceId as vr } from "./shared/assistant/context.js";
46
+ import { ATTACHMENT_SOURCES as yr, availableAttachmentSources as br, deviceHasCamera as xr } from "./shared/assistant/attachmentSources.js";
47
+ import { SANDBOX_READY_TTL_MS as Sr, createReadinessTracker as Cr, isRecentlyVerified as wr } from "./shared/assistant/sandboxReadiness.js";
48
+ import { AssistantAutoSpeakToggle as Tr } from "./shared/assistant/ui/AssistantAutoSpeakToggle.js";
49
+ import { AssistantMarkdownImage as Er, imageHostLabel as Dr, isRemoteImageSrc as Or } from "./shared/assistant/ui/AssistantMarkdownImage.js";
50
+ import { AssistantMarkdownRenderer as kr, assistantUrlTransform as Ar } from "./shared/assistant/ui/AssistantMarkdownRenderer.js";
51
+ import { AssistantMessageAttachments as jr } from "./shared/assistant/ui/AssistantMessageAttachments.js";
52
+ import { AssistantPendingWriteCard as Mr } from "./shared/assistant/ui/AssistantPendingWriteCard.js";
53
+ import { AssistantLanguageMenu as Nr } from "./shared/assistant/ui/AssistantLanguageMenu.js";
54
+ import { AssistantReplyLanguageSelector as Pr } from "./shared/assistant/ui/AssistantReplyLanguageSelector.js";
55
+ import { AssistantSpeakButton as Fr } from "./shared/assistant/ui/AssistantSpeakButton.js";
56
+ import { AssistantSpokenTurnsNotice as Ir } from "./shared/assistant/ui/AssistantSpokenTurnsNotice.js";
57
+ import { AssistantAttachmentButton as Lr } from "./shared/assistant/ui/composer/AssistantAttachmentButton.js";
58
+ import { AssistantAttachmentChips as Rr } from "./shared/assistant/ui/composer/AssistantAttachmentChips.js";
59
+ import { AssistantLanguageSelector as zr, FOLLOW_APP_LOCALE as Br } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
60
+ import { ASSISTANT_MODE_META as Vr, AssistantModeSelector as Hr, nextModeIndex as Ur } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
61
+ import { AssistantVoiceButton as Wr } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
62
+ import { AUTO_VOICE as Gr, AssistantVoiceSelector as Kr } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
63
+ import { AssistantVoiceOrb as qr } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
64
+ import { AssistantVoiceSessionButton as Jr } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
65
+ import { CAPTION_SCROLL_ATTR as Yr, VoiceCaption as Xr } from "./shared/assistant/ui/voice/VoiceCaption.js";
66
+ import { VoiceConversationView as Zr } from "./shared/assistant/ui/voice/VoiceConversationView.js";
67
+ import { VoiceWaveform as Qr } from "./shared/assistant/ui/voice/VoiceWaveform.js";
68
+ import { VoiceMiniController as $r } from "./shared/assistant/ui/voice/VoiceMiniController.js";
69
+ import { VoiceStage as ei } from "./shared/assistant/ui/voice/VoiceStage.js";
70
+ import { VoiceTranscriptDrawer as ti } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
71
+ import { downloadFile as ni, exportConversation as ri } from "./shared/assistant/exportConversation.js";
72
+ import { AssistantMoreMenu as ii } from "./shared/assistant/ui/AssistantMoreMenu.js";
73
+ import { AssistantHeader as ai } from "./shared/assistant/ui/AssistantHeader.js";
74
+ import { AssistantConversationList as oi } from "./shared/assistant/ui/AssistantConversationList.js";
75
+ import { AssistantEmptyState as si } from "./shared/assistant/ui/AssistantEmptyState.js";
76
+ import { AssistantMessageItem as ci } from "./shared/assistant/ui/AssistantMessageItem.js";
77
+ import { AssistantMessageList as li } from "./shared/assistant/ui/AssistantMessageList.js";
78
+ import { AssistantVoiceSession as ui } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
79
+ import { useAssistantApiAccess as di } from "./shared/assistant/useAssistantApiAccess.js";
80
+ import { useConversationTurns as fi } from "./shared/assistant/useConversationTurns.js";
81
+ import { isMultimodalBodyRejection as pi, isRecoverableAssistantError as mi } from "./shared/assistant/transportErrors.js";
82
+ import { aiCreditsUpdatedEventName as hi, dispatchAssistantQuotaExhausted as gi, notifyAiCreditsUpdated as _i } from "./shared/assistant/aiCredits.js";
83
+ import { useWorkspaceWriteAccess as vi } from "./shared/assistant/useWorkspaceWriteAccess.js";
84
+ import { extractDocumentText as yi } from "./shared/assistant/documentExtract.js";
85
+ import { useAssistantAttachments as bi } from "./shared/assistant/useAssistantAttachments.js";
86
+ import { AssistantComposer as xi } from "./shared/assistant/ui/composer/AssistantComposer.js";
87
+ import { isProdRuntime as Si } from "./shared/assistant/env.js";
88
+ import { useAssistantHeartbeat as Ci } from "./shared/assistant/useAssistantHeartbeat.js";
89
+ import { useAssistantKeyboardShortcuts as wi } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
90
+ import { AssistantApiCallsConsentDialog as Ti } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
91
+ import { AssistantChatArea as Ei } from "./shared/assistant/ui/AssistantChatArea.js";
92
+ import { AIAssistantPanel as Di } from "./shared/assistant/ui/AIAssistantPanel.js";
93
+ export { Di as AIAssistantPanel, h as ASSISTANT_API_AUTH_STRATEGY, It as ASSISTANT_LANGUAGES, Vr as ASSISTANT_MODE_META, jn as ATTACHMENT_ACCEPT, yr as ATTACHMENT_SOURCES, Gr as AUTO_VOICE, Ti as AssistantApiCallsConsentDialog, Lr as AssistantAttachmentButton, Rr as AssistantAttachmentChips, Tr as AssistantAutoSpeakToggle, Ei as AssistantChatArea, xi as AssistantComposer, oi as AssistantConversationList, si as AssistantEmptyState, ai as AssistantHeader, Xt as AssistantI18nProvider, Nr as AssistantLanguageMenu, zr as AssistantLanguageSelector, Er as AssistantMarkdownImage, kr as AssistantMarkdownRenderer, jr as AssistantMessageAttachments, ci as AssistantMessageItem, li as AssistantMessageList, Hr as AssistantModeSelector, ii as AssistantMoreMenu, Mr as AssistantPendingWriteCard, Wt as AssistantProductProvider, Pr as AssistantReplyLanguageSelector, q as AssistantRuntimeManager, Fr as AssistantSpeakButton, fr as AssistantSpeechProvider, Ir as AssistantSpokenTurnsNotice, ur as AssistantToolActivity, Wr as AssistantVoiceButton, qr as AssistantVoiceOrb, Kr as AssistantVoiceSelector, ui as AssistantVoiceSession, Jr as AssistantVoiceSessionButton, Mn as AttachmentRejectedError, dn as BOILERPLATE_PAGE_SHARE, Yr as CAPTION_SCROLL_ATTR, o as CHECK_AI_CREDITS, s as CREATE_SANDBOX, ht as DEFAULT_SPEAKABLE_LABELS, Lt as DEFAULT_SPEECH_RATE, He as ENDPOINT_GRACE_MS, c as EXTEND_SANDBOX_TTL, Br as FOLLOW_APP_LOCALE, l as GET_ACTIVE_SANDBOXES, u as GET_SANDBOX, ve as HOSTED_TTS_MAX_CHARS, me as HOSTED_TTS_TIER, he as HOSTED_VOICES, an as IDLE_PLAYBACK, Ue as INITIAL_SESSION, Nn as INLINE_IMAGE_MAX_DIM, Pn as INLINE_IMAGE_QUALITY, We as INTERRUPT_MAX_MS, Ge as INTERRUPT_MIN_MS, Fn as MAX_ATTACHMENTS, fn as MAX_BOILERPLATE_LINE_CHARS, pn as MAX_EXTRACTED_CHARS, In as MAX_FILE_BYTES, Ln as MAX_INLINE_CHARS_PER_FILE, Rn as MAX_INLINE_CHARS_TOTAL, ln as MAX_INLINE_IMAGE_BASE64_BYTES, zn as MAX_INLINE_IMAGE_BASE64_CHARS, Bn as MAX_INLINE_IMAGE_PARTS, Vn as MAX_INLINE_TURN_BODY_BYTES, mn as MAX_PDF_PAGES_SCANNED, un as MAX_REQUEST_BODY_BYTES, gt as MAX_SPEAKABLE_CHARS, _t as MAX_SPOKEN_TABLE_ROWS, Hn as MAX_TURN_BODY_BYTES, Dt as MINI_CAPTION_BUDGET, hn as MIN_PAGE_TEXT_CHARS, gn as MIN_TEXT_PAGE_SHARE, kt as POLL_FAST_MS, At as POLL_FAST_UNTIL_MS, jt as POLL_SLOW_MS, Mt as POLL_STEADY_MS, Nt as POLL_STEADY_UNTIL_MS, Tt as PREVIEW_LANGUAGES, Un as PROMPT_ENVELOPE_RESERVE_BYTES, d as PROXY_SANDBOX_REQUEST, f as REPORT_AI_TOKEN_USAGE, Sr as SANDBOX_READY_TTL_MS, Ke as SILENCE_SUBMIT_MS, ye as SPEAKING_RATE_MAX, be as SPEAKING_RATE_MAX_STREAMING, xe as SPEAKING_RATE_MAX_SYNC, Se as SPEAKING_RATE_MIN, vt as SPEECH_CHUNK_CHARS, yt as SPEECH_CHUNK_CJK_CHARS, et as SPEECH_LANG, en as SPOKEN_LABEL_LANGUAGES, p as STOP_ASSISTANT_SANDBOX, Wn as TURN_BODY_HEADROOM_BYTES, tt as VOICE_LIST_TIMEOUT_MS, Xr as VoiceCaption, Zr as VoiceConversationView, $r as VoiceMiniController, ei as VoiceStage, ti as VoiceTranscriptDrawer, Qr as VoiceWaveform, m as WAIT_FOR_SANDBOX_RUNNING, hi as aiCreditsUpdatedEventName, Zt as assistantTranslationKey, Ar as assistantUrlTransform, br as availableAttachmentSources, Ce as base64ToBytes, pe as browserSpeechEngine, T as buildAssistantSandboxEnv, Gn as buildAttachmentPromptBlock, ft as buildContinuedFromVoiceNote, J as buildProgress, Kn as buildPromptParts, E as buildPromptRequestBody, qn as buildPromptWithAttachments, we as buildRequest, i as buildSandboxContextInput, pt as buildVoiceTranscriptMarkdown, oe as chatTurns, D as checkAssistantAiCredits, bt as chunkForSpeech, Jn as classifyAttachment, Te as classifyHttpFailure, t as classifyQuotaError, _n as columnLetterToIndex, je as configureSpeechEngine, xt as containsCjk, hr as copyToClipboard, Yn as countInlineImageCandidates, Xn as countInlinedImageParts, O as createAssistantSandbox, k as createAssistantSession, ke as createHostedTtsEngine, Cr as createReadinessTracker, Ae as createRoutingSpeechEngine, ie as createSandboxAssistantTransport, Me as createSpeechEngines, Ee as decodeAudioResponse, vn as decodeXmlEntities, Zn as detectDocumentFormat, nn as detectScriptLocale, xr as deviceHasCamera, gi as dispatchAssistantQuotaExhausted, yn as docxXmlToText, A as downloadAssistantArtifact, ni as downloadFile, Qn as estimateTurnBodyBytes, a as executeSandboxGraphQL, ri as exportConversation, j as extendAssistantSandboxTTL, yi as extractDocumentText, Rt as findAssistantLanguage, M as findExistingSandbox, Ht as findPendingWrite, bn as fitPdfPages, $n as formatBytes, xn as formatPageRanges, gr as getActorId, N as getAssistantArtifacts, Y as getAssistantMedia, P as getAssistantMessages, F as getAssistantSession, I as getAssistantStreamAccess, X as getAssistantText, er as getAttachmentSendBlocker, x as getCapability, tr as getExtension, g as getImageForMode, _ as getImageTagForMode, _r as getOrganizationId, Z as getRawMessageCreatedAt, v as getResourcesForMode, y as getSandboxImageRegistry, nr as getSendableAttachments, Ne as getSpeechEngine, Q as getToolProgress, vr as getWorkspaceId, se as groupBySession, ce as groupConsecutiveBySession, rr as hasAttachmentWorkInFlight, ge as hostedLocaleFor, _e as hostedSupportsLanguage, Dr as imageHostLabel, qe as isCapturing, Je as isEcho, Sn as isMostlyImagePages, pi as isMultimodalBodyRejection, Si as isProdRuntime, n as isQuotaExhaustedError, $ as isReapedSandboxConnectionError, wr as isRecentlyVerified, ee as isRecoverable, mi as isRecoverableAssistantError, Or as isRemoteImageSrc, on as isSpeakingMessage, nt as isSpeechBlocked, Ye as isSubmittable, lr as isTurnInFlight, S as isUnknownFieldError, le as isVoiceTurn, Cn as joinSheets, rt as languageDisplayName, te as mapSessionToHistory, C as markSupported, w as markUnsupported, ne as mergeMessagesById, Ie as micIsInterrupt, L as modeRequiresConfirmWrites, Ur as nextModeIndex, it as normalizeLangTag, _i as notifyAiCreditsUpdated, Xe as orbMode, wn as pageMarker, Ut as parseConfirmationRefusal, ir as parseDataUrl, Tn as parseSharedStrings, dr as parseToolActivity, En as parseWorkbookSheets, Dn as pdfTextItemsToPage, Ze as planReplyConsumption, Pt as pollDelayMs, at as primaryLanguageSubtag, r as quotaExhaustedEventName, Pe as readSpeechEngineConfig, R as releaseSupersededAssistantSandboxes, Bt as replyFollowsInput, z as reportAssistantAiTokenUsage, sn as requiresCancel, Fe as resetSpeechEngine, zt as resolveAssistantLanguage, Vt as resolveLanguagePair, Gt as resolveModeConfig, b as resolveSandboxAssistantMode, rn as resolveSpeechLocale, re as sanitize, B as selectExistingAssistantSandbox, V as selectSupersededAssistantSandboxes, ot as selectVoiceForLocale, H as sendAssistantPromptAsync, U as sendHeartbeat, On as sheetXmlToRows, De as shouldDisableEngine, Ot as showPreviousChunk, Le as showsAssistantCaption, Re as showsUserCaption, St as speakableEmail, st as speechGate, tn as speechLabelsFor, ct as speechLangForLocale, cn as speechPlaybackReducer, Oe as splitForVendor, Ct as splitTableRow, Qe as spokenSoFar, W as stopReapedAssistantSandbox, kn as summarisePageText, Ft as toCaptionText, ar as toMessageAttachment, wt as toSpeakableText, or as truncateForInline, An as truncatePagesForInline, di as useAssistantApiAccess, bi as useAssistantAttachments, Ci as useAssistantHeartbeat, Qt as useAssistantI18nNamespace, wi as useAssistantKeyboardShortcuts, Kt as useAssistantPageLabel, qt as useAssistantProduct, Jt as useAssistantProductOrNull, pr as useAssistantSpeech, Yt as useAssistantStorageFolders, cr as useAssistantStore, $t as useAssistantTr, fi as useConversationTurns, ae as useSandboxAssistantTransport, e as useVoiceInput, mr as useVoiceSession, vi as useWorkspaceWriteAccess, sr as validateFile, lt as voiceAvailability, ue as voiceMarker, Et as voicePreviewText, ut as voiceQualityRank, de as voiceSessionIdOf, $e as voiceSessionReducer, ze as voiceStageState, mt as voiceTranscriptFilename, fe as voiceTurnsOnly, dt as voicesForLocale, G as waitForAssistantServiceReady, K as waitForSandboxRunning, Be as waveformIsActive, Ve as waveformIsSettled };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.906.5",
3
+ "version": "2026.906.6",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {