@burdenoff/fe-libs 2026.912.3 → 2026.912.5

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.
@@ -34,6 +34,7 @@ export * from './createSandboxAssistantTransport';
34
34
  export * from './runtime';
35
35
  export * from './gatewayClient';
36
36
  export * from './progress';
37
+ export * from './streamBudget';
37
38
  export * from './api';
38
39
  export * from './types';
39
40
  export * from './voice/turnVisibility';
@@ -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":"AssistantEntityPreview.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/preview/entity/AssistantEntityPreview.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAQL,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAQL,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IACzC,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B;;;;;;;WAOG;QACH,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAC7D;;;;;;WAMG;QACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAgaD,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAqKlE,CAAC"}
1
+ {"version":3,"file":"AssistantEntityPreview.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/preview/entity/AssistantEntityPreview.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAQL,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAQL,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IACzC,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B;;;;;;;WAOG;QACH,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAC7D;;;;;;WAMG;QACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAmaD,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAqKlE,CAAC"}
@@ -22,7 +22,7 @@ var g = {
22
22
  style: { color: "var(--color-text-primary)" },
23
23
  children: e
24
24
  }), t == null ? null : /* @__PURE__ */ m("span", {
25
- className: "shrink-0 text-xs",
25
+ className: "min-w-0 truncate text-xs",
26
26
  style: { color: "var(--color-text-muted)" },
27
27
  "data-testid": "assistant-entity-preview-meta",
28
28
  children: t
@@ -0,0 +1,57 @@
1
+ import { AssistantMode } from './types';
2
+ /**
3
+ * How long the client streams progress before it stops polling a turn.
4
+ *
5
+ * Chat replies (general / api-calls) finish in seconds; a vibe-plugins build is
6
+ * a multi-step pipeline (read docs → scaffold → bun install → bun build →
7
+ * checklist) that runs for minutes, so it gets a much larger budget. The sandbox
8
+ * TTL is auto-extended every 30s during the poll loop, so a longer budget never
9
+ * outlives the sandbox.
10
+ *
11
+ * ★★ THE BUDGET ELAPSING IS NOT AN ERROR. It used to be, for every mode except
12
+ * vibe-plugins: the poll loop `throw`ew, the catch wrote
13
+ * `Sorry, an error occurred: …` into the assistant message, and that error was
14
+ * PERSISTED — it survived a reload, so the turn was destroyed rather than
15
+ * merely unfinished. Measured in production on 2026-09-12 with a 10.8 KB
16
+ * markdown attachment: the turn produced no content for 206s, the client gave
17
+ * up at ~3 minutes, and re-opening the conversation showed only the error.
18
+ *
19
+ * A client-side deadline is a statement about how long THIS CLIENT will wait.
20
+ * It is not evidence that the turn failed, and it must never be allowed to
21
+ * overwrite the conversation. So the budget elapsing now yields a normal
22
+ * assistant message: whatever content arrived, plus an honest closing note.
23
+ */
24
+ export declare const STREAM_BUDGET_MS: Record<AssistantMode, number>;
25
+ export declare const DEFAULT_STREAM_BUDGET_MS = 180000;
26
+ /**
27
+ * Budget for `mode`, falling back to the default for a mode added later.
28
+ *
29
+ * Exported as a function rather than leaving callers to index the record, so a
30
+ * new mode cannot silently get `undefined` and a `NaN` deadline.
31
+ */
32
+ export declare function streamBudgetMs(mode: AssistantMode): number;
33
+ /** i18n key + English fallback for the note closing an unfinished turn. */
34
+ export interface IncompleteTurnNotice {
35
+ key: string;
36
+ fallback: string;
37
+ }
38
+ /**
39
+ * ★ NO PLACEHOLDERS IN EITHER FALLBACK, deliberately.
40
+ *
41
+ * `t()` did not interpolate single-brace placeholders until fe-libs 2026.910.7,
42
+ * and 37 app shells still pin older builds, so a `{minutes}` here would render
43
+ * raw braces to real users on most of the fleet. The elapsed budget is not worth
44
+ * that risk, and a reader does not need the number to know what to do next.
45
+ */
46
+ export declare function incompleteTurnNotice(mode: AssistantMode): IncompleteTurnNotice;
47
+ /**
48
+ * Close an unfinished turn: keep every character the turn did produce, then
49
+ * append the note for `mode`.
50
+ *
51
+ * Total function — it never throws, and never returns an empty string for a
52
+ * turn that produced nothing, because an empty assistant bubble reads as a
53
+ * silent failure. `translate` is injected rather than taken from a hook so this
54
+ * is testable without a React tree or an i18n provider.
55
+ */
56
+ export declare function withIncompleteTurnNotice(content: string, mode: AssistantMode, translate: (key: string, fallback: string) => string): string;
57
+ //# sourceMappingURL=streamBudget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamBudget.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/streamBudget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAK1D,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAAU,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAE1D;AAED,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,GAClB,oBAAoB,CAsBtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GACnD,MAAM,CAWR"}
@@ -0,0 +1,30 @@
1
+ //#region src/shared/assistant/streamBudget.ts
2
+ var e = {
3
+ general: 18e4,
4
+ assistant: 18e4,
5
+ "api-calls": 18e4,
6
+ "vibe-plugins": 6e5
7
+ }, t = 18e4;
8
+ function n(t) {
9
+ return e[t] ?? 18e4;
10
+ }
11
+ function r(e) {
12
+ return e === "vibe-plugins" ? {
13
+ key: "assistant.turnStillBuilding",
14
+ fallback: "_Still building in the background — any artifacts below will finish shortly. Re-open this conversation to pick up the completed plugin._"
15
+ } : {
16
+ key: "assistant.turnIncomplete",
17
+ fallback: "_This turn stopped before an answer arrived. Your message and any attachment are still here — send it again, or try a shorter document or a narrower question._"
18
+ };
19
+ }
20
+ function i(e, t, n) {
21
+ let i = r(t), a;
22
+ try {
23
+ a = n(i.key, i.fallback) || i.fallback;
24
+ } catch {
25
+ a = i.fallback;
26
+ }
27
+ return e.trim() ? `${e}\n\n${a}` : a;
28
+ }
29
+ //#endregion
30
+ export { t as DEFAULT_STREAM_BUDGET_MS, e as STREAM_BUDGET_MS, r as incompleteTurnNotice, n as streamBudgetMs, i as withIncompleteTurnNotice };
@@ -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;AAyEf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAgLvE;;;;;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,CAg9DxD,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;AAqEf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAoKvE;;;;;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,CAs9DxD,CAAC"}
@@ -6,44 +6,40 @@ import { useAssistantTr as r } from "../i18n.js";
6
6
  import { describeQuotaError as i } from "../quota.js";
7
7
  import { abortAssistantTurn as a, approvePendingWrite as o, createAssistantSandbox as s, createAssistantSession as c, extendAssistantSandboxTTL as l, findExistingSandbox as u, getAssistantArtifacts as ee, getAssistantMessages as te, getAssistantSession as d, releaseSupersededAssistantSandboxes as f, sendAssistantPromptAsync as ne, waitForAssistantServiceReady as p, waitForSandboxRunning as m } from "../api.js";
8
8
  import { getAssistantMedia as h, sanitize as re } from "../progress.js";
9
+ import { streamBudgetMs as ie, withIncompleteTurnNotice as ae } from "../streamBudget.js";
9
10
  import { isVoiceTurn as g, voiceMarker as _, voiceSessionIdOf as v } from "../voice/turnVisibility.js";
10
- import { buildContinuedFromVoiceNote as ie, buildVoiceTranscriptMarkdown as y, voiceTranscriptFilename as ae } from "../voice/voiceTranscript.js";
11
- import { pollDelayMs as oe } from "../voice/assistantPollSchedule.js";
12
- import { toCaptionText as se } from "../voice/captionText.js";
13
- import { resolveAssistantLanguage as ce } from "../voice/languages.js";
14
- import { resolveLanguagePair as le } from "../voice/languagePair.js";
11
+ import { buildContinuedFromVoiceNote as oe, buildVoiceTranscriptMarkdown as y, voiceTranscriptFilename as se } from "../voice/voiceTranscript.js";
12
+ import { pollDelayMs as ce } from "../voice/assistantPollSchedule.js";
13
+ import { toCaptionText as le } from "../voice/captionText.js";
14
+ import { resolveAssistantLanguage as ue } from "../voice/languages.js";
15
+ import { resolveLanguagePair as de } from "../voice/languagePair.js";
15
16
  import { findPendingWrite as b } from "../pendingWrite.js";
16
- import { buildPromptParts as ue, buildPromptWithAttachments as de, countInlineImageCandidates as fe, countInlinedImageParts as pe, getSendableAttachments as me, toMessageAttachment as he } from "../attachments.js";
17
+ import { buildPromptParts as fe, buildPromptWithAttachments as pe, countInlineImageCandidates as me, countInlinedImageParts as he, getSendableAttachments as ge, toMessageAttachment as _e } from "../attachments.js";
17
18
  import { useAssistantStore as x } from "../store.js";
18
- import { isTurnInFlight as ge, planAbandonedTurn as _e, planTurnAbort as ve } from "../turnState.js";
19
- import { STAGE_COPY as S, isStageCopy as ye, stageText as C, statusStageCopy as be, thinkingPhrase as xe } from "../stageCopy.js";
20
- import { parseToolActivity as Se } from "./AssistantToolActivity.js";
21
- import { useVoiceSession as Ce } from "./useVoiceSession.js";
22
- import { getOrganizationId as we, getWorkspaceId as Te } from "../context.js";
23
- import { createReadinessTracker as Ee } from "../sandboxReadiness.js";
24
- import { AssistantSpokenTurnsNotice as De } from "./AssistantSpokenTurnsNotice.js";
25
- import { VoiceTranscriptDrawer as Oe } from "./voice/VoiceTranscriptDrawer.js";
26
- import { downloadFile as ke } from "../exportConversation.js";
27
- import { AssistantEmptyState as Ae } from "./AssistantEmptyState.js";
28
- import { AssistantMessageList as je } from "./AssistantMessageList.js";
29
- import { AssistantVoiceSession as Me } from "./voice/AssistantVoiceSession.js";
30
- import { useAssistantApiAccess as Ne } from "../useAssistantApiAccess.js";
31
- import { useConversationTurns as Pe } from "../useConversationTurns.js";
32
- import { isMultimodalBodyRejection as Fe, isRecoverableAssistantError as Ie } from "../transportErrors.js";
33
- import { dispatchAssistantQuotaExhausted as Le, notifyAiCreditsUpdated as Re } from "../aiCredits.js";
34
- import { useAssistantAttachments as ze } from "../useAssistantAttachments.js";
35
- import { AssistantComposer as Be } from "./composer/AssistantComposer.js";
36
- import { isProdRuntime as Ve } from "../env.js";
37
- import { AssistantApiCallsConsentDialog as He } from "./AssistantApiCallsConsentDialog.js";
38
- import { useCallback as w, useEffect as T, useMemo as E, useRef as D, useState as Ue } from "react";
39
- import { jsx as O, jsxs as We } from "react/jsx-runtime";
19
+ import { isTurnInFlight as ve, planAbandonedTurn as ye, planTurnAbort as be } from "../turnState.js";
20
+ import { STAGE_COPY as S, isStageCopy as xe, stageText as C, statusStageCopy as Se, thinkingPhrase as Ce } from "../stageCopy.js";
21
+ import { parseToolActivity as we } from "./AssistantToolActivity.js";
22
+ import { useVoiceSession as Te } from "./useVoiceSession.js";
23
+ import { getOrganizationId as Ee, getWorkspaceId as De } from "../context.js";
24
+ import { createReadinessTracker as Oe } from "../sandboxReadiness.js";
25
+ import { AssistantSpokenTurnsNotice as ke } from "./AssistantSpokenTurnsNotice.js";
26
+ import { VoiceTranscriptDrawer as Ae } from "./voice/VoiceTranscriptDrawer.js";
27
+ import { downloadFile as je } from "../exportConversation.js";
28
+ import { AssistantEmptyState as Me } from "./AssistantEmptyState.js";
29
+ import { AssistantMessageList as Ne } from "./AssistantMessageList.js";
30
+ import { AssistantVoiceSession as Pe } from "./voice/AssistantVoiceSession.js";
31
+ import { useAssistantApiAccess as Fe } from "../useAssistantApiAccess.js";
32
+ import { useConversationTurns as Ie } from "../useConversationTurns.js";
33
+ import { isMultimodalBodyRejection as Le, isRecoverableAssistantError as Re } from "../transportErrors.js";
34
+ import { dispatchAssistantQuotaExhausted as ze, notifyAiCreditsUpdated as Be } from "../aiCredits.js";
35
+ import { useAssistantAttachments as Ve } from "../useAssistantAttachments.js";
36
+ import { AssistantComposer as He } from "./composer/AssistantComposer.js";
37
+ import { isProdRuntime as Ue } from "../env.js";
38
+ import { AssistantApiCallsConsentDialog as We } from "./AssistantApiCallsConsentDialog.js";
39
+ import { useCallback as w, useEffect as T, useMemo as E, useRef as D, useState as Ge } from "react";
40
+ import { jsx as O, jsxs as Ke } from "react/jsx-runtime";
40
41
  //#region src/shared/assistant/ui/AssistantChatArea.tsx
41
- var Ge = {
42
- general: 18e4,
43
- assistant: 18e4,
44
- "api-calls": 18e4,
45
- "vibe-plugins": 6e5
46
- }, Ke = 18e4, qe = 600, Je = 2e4;
42
+ var qe = 600, Je = 2e4;
47
43
  function Ye() {
48
44
  return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
49
45
  }
@@ -80,11 +76,11 @@ function Ze(e, t) {
80
76
  };
81
77
  }
82
78
  var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
83
- let k = r(), { product: A, modes: j, gatherPageContext: Qe, buildPrompt: $e, reportTokenUsage: et } = n(), { getAccessToken: M, getWorkspaceToken: N, userId: P } = t(), { locale: tt } = e(), nt = x((e) => e.assistantLanguage), rt = x((e) => e.replyLanguage), it = E(() => le(nt, rt, tt), [
79
+ let k = r(), { product: A, modes: j, gatherPageContext: Qe, buildPrompt: $e, reportTokenUsage: et } = n(), { getAccessToken: M, getWorkspaceToken: N, userId: P } = t(), { locale: tt } = e(), nt = x((e) => e.assistantLanguage), rt = x((e) => e.replyLanguage), it = E(() => de(nt, rt, tt), [
84
80
  nt,
85
81
  rt,
86
82
  tt
87
- ]), at = it.reply.english, ot = it.replyIsExplicit, st = it.reply.code, { conversations: ct, activeConversationId: F, mode: I, processingByConversationId: lt, setMode: ut, setConversationMode: dt, setActiveConversation: ft, createConversation: L, addMessage: R, updateMessage: z, patchMessage: B, mergeMessageMetadata: pt, setConversationProcessing: V, clearConversationProcessing: mt, setBackendSessionId: ht, clearBackendSessionId: gt, setSandbox: H, clearSandbox: _t, acknowledgeApiCalls: vt } = x(), yt = ct.find((e) => e.id === F), U = Pe(yt), bt = U.all, xt = F ? lt[F] : void 0, St = ge(xt?.status), Ct = St ? xt?.messageId ?? null : null, wt = xt?.status === "error" ? xt.messageId : null, { canUseApiCalls: Tt, loading: Et } = Ne(we()), Dt = E(() => j.filter((e) => !e.requiresAdmin || Tt), [j, Tt]), [Ot, kt] = Ue(null), [At, W] = Ue(!1), jt = D({}), Mt = D(Ee()), Nt = D(/* @__PURE__ */ new Set()), Pt = E(() => j.find((e) => e.id === I), [j, I]);
83
+ ]), at = it.reply.english, ot = it.replyIsExplicit, st = it.reply.code, { conversations: ct, activeConversationId: F, mode: I, processingByConversationId: lt, setMode: ut, setConversationMode: dt, setActiveConversation: ft, createConversation: L, addMessage: R, updateMessage: z, patchMessage: B, mergeMessageMetadata: pt, setConversationProcessing: V, clearConversationProcessing: mt, setBackendSessionId: ht, clearBackendSessionId: gt, setSandbox: H, clearSandbox: _t, acknowledgeApiCalls: vt } = x(), yt = ct.find((e) => e.id === F), U = Ie(yt), bt = U.all, xt = F ? lt[F] : void 0, St = ve(xt?.status), Ct = St ? xt?.messageId ?? null : null, wt = xt?.status === "error" ? xt.messageId : null, { canUseApiCalls: Tt, loading: Et } = Fe(Ee()), Dt = E(() => j.filter((e) => !e.requiresAdmin || Tt), [j, Tt]), [Ot, kt] = Ge(null), [At, jt] = Ge(!1), Mt = D({}), W = D(Oe()), Nt = D(/* @__PURE__ */ new Set()), Pt = E(() => j.find((e) => e.id === I), [j, I]);
88
84
  T(() => {
89
85
  Et || (!Pt || Pt.requiresAdmin && !Tt) && I !== "assistant" && ut("assistant");
90
86
  }, [
@@ -95,28 +91,28 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
95
91
  ut
96
92
  ]);
97
93
  let G = w((e, t, n, r) => {
98
- V(e, n, t, null), r ? z(e, t, r) : z(e, t, be(k, n));
94
+ V(e, n, t, null), r ? z(e, t, r) : z(e, t, Se(k, n));
99
95
  }, [
100
96
  V,
101
97
  z,
102
98
  k
103
99
  ]), Ft = w(async (e, t, n, r, i) => {
104
100
  let a = x.getState().sandboxesByMode[n]?.sandboxId ?? null, o = async (e) => {
105
- if (Mt.current.isFresh(e)) return !0;
101
+ if (W.current.isFresh(e)) return !0;
106
102
  try {
107
- return await m(e, r, i, 3e5), await p(e, r, i, 9e4), Mt.current.markVerified(e), !0;
103
+ return await m(e, r, i, 3e5), await p(e, r, i, 9e4), W.current.markVerified(e), !0;
108
104
  } catch {
109
- return Mt.current.invalidate(e), !1;
105
+ return W.current.invalidate(e), !1;
110
106
  }
111
107
  };
112
108
  if (a && (H(n, a, "provisioning"), G(e, t, "provisioning", C(k, S.reusingEnvironment)), await o(a) || (H(n, null, "provisioning"), a = null)), !a) {
113
109
  G(e, t, "provisioning", C(k, S.lookingForEnvironment));
114
- let s = await u(r, A, n, Ve(), i);
110
+ let s = await u(r, A, n, Ue(), i);
115
111
  s && (H(n, s, "provisioning"), G(e, t, "provisioning", C(k, S.reusingEnvironment)), await o(s) ? a = s : H(n, null, "provisioning"));
116
112
  }
117
113
  if (!a) {
118
114
  if (n === "api-calls" && !M()) throw Error("API Calls mode requires an authenticated session. Please sign in again.");
119
- G(e, t, "provisioning", C(k, S.startingEnvironment)), H(n, null, "provisioning"), await f(r, A, n, Ve(), i), a = await s(A, n, r, Ve(), qe, i), H(n, a, "provisioning"), await m(a, r, i, 3e5), await p(a, r, i, 9e4);
115
+ G(e, t, "provisioning", C(k, S.startingEnvironment)), H(n, null, "provisioning"), await f(r, A, n, Ue(), i), a = await s(A, n, r, Ue(), qe, i), H(n, a, "provisioning"), await m(a, r, i, 3e5), await p(a, r, i, 9e4);
120
116
  }
121
117
  H(n, a, "running");
122
118
  let l = x.getState().conversations.find((t) => t.id === e)?.backendSessionId ?? null;
@@ -138,29 +134,29 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
138
134
  H,
139
135
  k,
140
136
  G
141
- ]), [It, Lt] = Ue(null), K = D(/* @__PURE__ */ new Set()), Rt = D(null), zt = w(() => {
137
+ ]), [It, Lt] = Ge(null), K = D(/* @__PURE__ */ new Set()), Rt = D(null), zt = w(() => {
142
138
  let e = x.getState(), t = e.activeConversationId;
143
139
  if (!t) return;
144
- let n = e.processingByConversationId[t], r = ge(n?.status) ? n?.messageId ?? null : null;
145
- if (!ve({
140
+ let n = e.processingByConversationId[t], r = ve(n?.status) ? n?.messageId ?? null : null;
141
+ if (!be({
146
142
  interruptedTurnId: r,
147
143
  activeTurnId: r,
148
144
  alreadyRequested: r ? K.current.has(r) : !1
149
145
  }).send || !r) return;
150
146
  K.current.add(r);
151
- let i = e.sandboxesByMode[e.mode]?.sandboxId, o = Te(), s = e.conversations.find((e) => e.id === t)?.backendSessionId;
147
+ let i = e.sandboxesByMode[e.mode]?.sandboxId, o = De(), s = e.conversations.find((e) => e.id === t)?.backendSessionId;
152
148
  !i || !o || !s || a(i, o, s, {
153
149
  accessToken: M(),
154
150
  workspaceToken: N(),
155
151
  userId: P,
156
- organizationId: we()
152
+ organizationId: Ee()
157
153
  });
158
154
  }, [
159
155
  P,
160
156
  M,
161
157
  N
162
158
  ]), Bt = w(async (e) => {
163
- let t = x.getState(), n = t.sandboxesByMode[t.mode]?.sandboxId, r = Te(), i = t.activeConversationId;
159
+ let t = x.getState(), n = t.sandboxesByMode[t.mode]?.sandboxId, r = De(), i = t.activeConversationId;
164
160
  if (!(!n || !r || !i)) {
165
161
  Lt(e);
166
162
  try {
@@ -168,7 +164,7 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
168
164
  accessToken: M(),
169
165
  workspaceToken: N(),
170
166
  userId: P,
171
- organizationId: we()
167
+ organizationId: Ee()
172
168
  });
173
169
  } catch (e) {
174
170
  Lt(null), R(i, {
@@ -188,7 +184,7 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
188
184
  ]), q = w(async (e, t = [], n = {}) => {
189
185
  let r = n.voiceSessionId !== void 0, a = x.getState(), o = a.activeConversationId ?? F;
190
186
  if (o) {
191
- if (ge(a.processingByConversationId[o]?.status)) {
187
+ if (ve(a.processingByConversationId[o]?.status)) {
192
188
  let r = a.processingByConversationId[o]?.messageId ?? null;
193
189
  r && K.current.has(r) && (Rt.current = {
194
190
  conversationId: o,
@@ -202,19 +198,19 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
202
198
  }
203
199
  let s = a.mode, c = F, u = c ? x.getState().conversations.find((e) => e.id === c) : void 0;
204
200
  if (c ? u && u.mode !== s && (u.messages.length > 0 || u.backendSessionId) ? c = L(void 0, s) : u && u.mode !== s && dt(c, s) : c = L(void 0, s), !c) return;
205
- jt.current[c] = t;
206
- let d = Te(), f = {
201
+ Mt.current[c] = t;
202
+ let d = De(), f = {
207
203
  accessToken: M(),
208
204
  workspaceToken: N(),
209
205
  userId: P,
210
- organizationId: we()
206
+ organizationId: Ee()
211
207
  }, p = {
212
208
  id: Ye(),
213
209
  role: "user",
214
210
  content: e,
215
211
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
216
212
  metadata: {
217
- ...t.length ? { attachments: t.map(he) } : {},
213
+ ...t.length ? { attachments: t.map(_e) } : {},
218
214
  ..._(n.voiceSessionId)
219
215
  }
220
216
  };
@@ -244,24 +240,24 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
244
240
  try {
245
241
  let { sandboxId: n, sessionId: a } = await Ft(c, m, s, d, f), o = (await te(n, d, a, f, { limit: 50 }).catch(() => [])).reduce((e, t) => Math.max(e, Xe(t)), 0);
246
242
  G(c, m, "streaming", C(k, S.thinking));
247
- let u = de(e, t), p = $e?.(s, u, at, ot, r) ?? u, g = ue(p, t), _ = pe(g), v = _ > 0, ie = Qe?.();
248
- i = fe(t) > _;
243
+ let u = pe(e, t), p = $e?.(s, u, at, ot, r) ?? u, g = fe(p, t), _ = he(g), v = _ > 0, oe = Qe?.();
244
+ i = me(t) > _;
249
245
  try {
250
- await ne(n, d, a, p, s, ie, f, g?.length ? { parts: g } : void 0);
246
+ await ne(n, d, a, p, s, oe, f, g?.length ? { parts: g } : void 0);
251
247
  } catch (e) {
252
- if (!g || !Fe(e)) throw e;
253
- await ne(n, d, a, p, s, ie, f, void 0), i ||= v;
248
+ if (!g || !Le(e)) throw e;
249
+ await ne(n, d, a, p, s, oe, f, void 0), i ||= v;
254
250
  }
255
- let y = Ze([], o), ae = Date.now() + (Ge[s] ?? Ke), se = Date.now(), ce = Date.now(), le = () => _e({
251
+ let y = Ze([], o), se = Date.now() + ie(s), le = Date.now(), ue = Date.now(), de = () => ye({
256
252
  turnId: m,
257
253
  abortRequested: K.current.has(m),
258
254
  activeTurnId: x.getState().processingByConversationId[c]?.messageId ?? null
259
255
  }), b = () => {
260
256
  let e = x.getState().conversations.find((e) => e.id === c)?.messages.find((e) => e.id === m)?.content;
261
- ye(k, e) && z(c, m, C(k, S.stopped));
257
+ xe(k, e) && z(c, m, C(k, S.stopped));
262
258
  };
263
- for (; Date.now() < ae;) {
264
- let e = le();
259
+ for (; Date.now() < se;) {
260
+ let e = de();
265
261
  if (e.abandon) {
266
262
  b(), e.clearProcessing && mt(c);
267
263
  return;
@@ -269,18 +265,17 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
269
265
  if (y = Ze(await te(n, d, a, f, {
270
266
  limit: 50,
271
267
  sinceMs: o
272
- }), o), B(c, m, { content: ye(k, y.content) ? xe(k, Date.now() - ce) : re(y.content) }), y.pendingWrite && pt(c, m, { pendingWrite: y.pendingWrite }), y.done) break;
273
- Date.now() - se > 3e4 && (await l(n, d, 600, f).catch(() => void 0), se = Date.now()), await new Promise((e) => setTimeout(e, oe(Date.now() - ce)));
268
+ }), o), B(c, m, { content: xe(k, y.content) ? Ce(k, Date.now() - ue) : re(y.content) }), y.pendingWrite && pt(c, m, { pendingWrite: y.pendingWrite }), y.done) break;
269
+ Date.now() - le > 3e4 && (await l(n, d, 600, f).catch(() => void 0), le = Date.now()), await new Promise((e) => setTimeout(e, ce(Date.now() - ue)));
274
270
  }
275
- if (!y.done && s !== "vibe-plugins") throw Error("Assistant response timed out while streaming progress");
276
- let me = s === "vibe-plugins" ? await ee(n, d, a, f).then((e) => e).catch(() => []) : void 0;
271
+ let ge = s === "vibe-plugins" ? await ee(n, d, a, f).then((e) => e).catch(() => []) : void 0;
277
272
  if (y.done || (y = {
278
273
  ...y,
279
- content: `${y.content}\n\n_Still building in the background — any artifacts below will finish shortly. Re-open this conversation to pick up the completed plugin._`
274
+ content: ae(y.content, s, k)
280
275
  }), i && (y = {
281
276
  ...y,
282
277
  content: `${y.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._")}`
283
- }), h(y.content, me, a, n), y.tokens) {
278
+ }), h(y.content, ge, a, n), y.tokens) {
284
279
  B(c, m, { tokens: y.tokens });
285
280
  try {
286
281
  await et?.({
@@ -289,17 +284,17 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
289
284
  messageId: y.messageId,
290
285
  model: y.model,
291
286
  tokens: y.tokens
292
- }), Re(A);
287
+ }), Be(A);
293
288
  } catch {}
294
289
  }
295
- let he = le();
296
- if (he.abandon) {
297
- b(), he.clearProcessing && mt(c);
290
+ let _e = de();
291
+ if (_e.abandon) {
292
+ b(), _e.clearProcessing && mt(c);
298
293
  return;
299
294
  }
300
295
  V(c, "complete", m, null);
301
296
  } catch (e) {
302
- if (n === 1 && Ie(e)) return gt(c), _t(s), g(2);
297
+ if (n === 1 && Re(e)) return gt(c), _t(s), g(2);
303
298
  throw e;
304
299
  }
305
300
  }, v = c;
@@ -308,10 +303,10 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
308
303
  if (!d) throw Error("Assistant backend is unavailable without an active workspace context.");
309
304
  await g();
310
305
  } catch (e) {
311
- Mt.current.invalidate(x.getState().sandboxesByMode[s]?.sandboxId ?? null);
306
+ W.current.invalidate(x.getState().sandboxesByMode[s]?.sandboxId ?? null);
312
307
  let t = i(e);
313
308
  if (t) {
314
- t.refusal === "exhausted" && Le(A, "sandbox");
309
+ t.refusal === "exhausted" && ze(A, "sandbox");
315
310
  let e = [t.quotaName, t.traceId ? `reference ${t.traceId}` : null].filter(Boolean).join(" · "), n = t.refusal === "exhausted" ? "You've reached your sandbox limit on the current plan. Upgrade to start the AI assistant." : "This workspace has no sandbox allowance provisioned, so the AI assistant cannot start. Upgrading will not help — ask an administrator to provision it.";
316
311
  h(e ? `${n}\n\n${e}` : n, void 0, void 0, void 0, "en"), V(c, "error", m, null);
317
312
  return;
@@ -355,7 +350,7 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
355
350
  ]), Vt = w((e) => {
356
351
  q(e);
357
352
  }, [q]), Ht = w(() => {
358
- let e = [...U.chat].reverse().find((e) => e.role === "user"), t = F ? jt.current[F] ?? [] : [];
353
+ let e = [...U.chat].reverse().find((e) => e.role === "user"), t = F ? Mt.current[F] ?? [] : [];
359
354
  e && q(e.content, t);
360
355
  }, [
361
356
  bt,
@@ -370,40 +365,40 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
370
365
  for (let e = bt.length - 1; e >= 0; --e) {
371
366
  let t = bt[e];
372
367
  if (t?.role !== "assistant" || !g(t) || K.current.has(t.id)) continue;
373
- let n = Se(t.content).text.trim();
368
+ let n = we(t.content).text.trim();
374
369
  return n ? {
375
370
  id: t.id,
376
371
  text: n
377
372
  } : null;
378
373
  }
379
374
  return null;
380
- }, [bt, St]), Ut = E(() => Y ? se(Y.text) : null, [Y]), Wt = U.chat, X = E(() => U.voice.filter((e) => e.role === "user" || e.role === "assistant").map((e) => ({
375
+ }, [bt, St]), Ut = E(() => Y ? le(Y.text) : null, [Y]), Wt = U.chat, X = E(() => U.voice.filter((e) => e.role === "user" || e.role === "assistant").map((e) => ({
381
376
  id: e.id,
382
377
  role: e.role,
383
- text: Se(e.content).text.trim(),
378
+ text: we(e.content).text.trim(),
384
379
  sessionId: v(e),
385
380
  timestamp: e.timestamp
386
381
  })).filter((e) => e.text.length > 0), [U.voice]), Gt = w(() => {
387
382
  if (X.length === 0) return;
388
383
  let e = /* @__PURE__ */ new Date();
389
- ke(y(X, {
384
+ je(y(X, {
390
385
  title: k("voiceSession.transcript", "Voice conversation"),
391
386
  savedAt: k("voiceSession.savedAt", "Saved"),
392
387
  session: k("voiceSession.sessionLabel", "Session"),
393
388
  earlier: k("voiceSession.earlierLabel", "Earlier"),
394
389
  you: k("voiceSession.speakerYou", "You"),
395
390
  assistant: k("voiceSession.speakerAssistant", "Assistant")
396
- }, e), ae(A, e), "text/markdown");
391
+ }, e), se(A, e), "text/markdown");
397
392
  }, [
398
393
  A,
399
394
  X,
400
395
  k
401
- ]), Z = ze(), Q = D(Z);
396
+ ]), Z = Ve(), Q = D(Z);
402
397
  Q.current = Z;
403
- let $ = Ce({
398
+ let $ = Te({
404
399
  onSubmit: w((e, t) => {
405
400
  let n = () => {
406
- let n = Q.current, r = me(n.attachments);
401
+ let n = Q.current, r = ge(n.attachments);
407
402
  J.current(e, r, { voiceSessionId: t }), n.clear();
408
403
  };
409
404
  if (!Q.current.isBusy) {
@@ -415,20 +410,20 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
415
410
  }, 200);
416
411
  }, []),
417
412
  latestReply: Y,
418
- language: ce(nt, tt).tag
413
+ language: ue(nt, tt).tag
419
414
  }), Kt = E(() => (yt?.messages ?? []).reduce((e, t) => Math.max(e, t.metadata?.continuedVoiceTurns ?? 0), 0), [yt?.messages]), qt = X.length > Kt, Jt = w(() => {
420
415
  let e = x.getState().activeConversationId;
421
416
  !e || X.length === 0 || (R(e, {
422
417
  id: Ye(),
423
418
  role: "system",
424
- content: ie(X.slice(Kt), {
419
+ content: oe(X.slice(Kt), {
425
420
  intro: k("voiceSession.continuedIntro", "Continued from a voice conversation. You asked about:"),
426
421
  nothing: k("voiceSession.continuedNothing", "Continued from a voice conversation."),
427
422
  more: (e) => k("voiceSession.continuedMore", "…and {{count}} more", { count: e })
428
423
  }),
429
424
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
430
425
  metadata: { continuedVoiceTurns: X.length }
431
- }), W(!1), $.end());
426
+ }), jt(!1), $.end());
432
427
  }, [
433
428
  X,
434
429
  Kt,
@@ -441,7 +436,7 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
441
436
  }, [$.active]);
442
437
  let Xt = w(() => {
443
438
  let e = X.length > Yt.current;
444
- $.end(), e && W(!0);
439
+ $.end(), e && jt(!0);
445
440
  }, [X, $]);
446
441
  T(() => {
447
442
  !h && $.active && $.end();
@@ -487,23 +482,23 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
487
482
  ]), en = w(() => {
488
483
  kt(null);
489
484
  }, []);
490
- return /* @__PURE__ */ We("div", {
485
+ return /* @__PURE__ */ Ke("div", {
491
486
  className: "relative flex flex-1 flex-col overflow-hidden",
492
487
  children: [
493
- /* @__PURE__ */ We("div", {
488
+ /* @__PURE__ */ Ke("div", {
494
489
  className: "contents",
495
490
  inert: $.active || void 0,
496
491
  children: [
497
- X.length > 0 && !$.active ? /* @__PURE__ */ O(De, {
492
+ X.length > 0 && !$.active ? /* @__PURE__ */ O(ke, {
498
493
  count: X.length,
499
- onOpenTranscript: () => W(!0)
494
+ onOpenTranscript: () => jt(!0)
500
495
  }) : null,
501
- Wt.length === 0 ? /* @__PURE__ */ O(Ae, {
496
+ Wt.length === 0 ? /* @__PURE__ */ O(Me, {
502
497
  mode: I,
503
498
  onSuggestionClick: Vt
504
499
  }) : /* @__PURE__ */ O("div", {
505
500
  className: "flex min-h-0 flex-1 flex-col",
506
- children: /* @__PURE__ */ O(je, {
501
+ children: /* @__PURE__ */ O(Ne, {
507
502
  onApprovePendingWrite: Bt,
508
503
  approvingWriteRef: It,
509
504
  messages: Wt,
@@ -512,7 +507,7 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
512
507
  onRetry: Ht
513
508
  })
514
509
  }),
515
- /* @__PURE__ */ O(Be, {
510
+ /* @__PURE__ */ O(He, {
516
511
  onStartVoiceSession: $.available && I !== "api-calls" ? $.start : void 0,
517
512
  onSend: (e, t) => void q(e, t),
518
513
  disabled: St,
@@ -524,14 +519,14 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
524
519
  })
525
520
  ]
526
521
  }),
527
- At && !$.active ? /* @__PURE__ */ O(Oe, {
522
+ At && !$.active ? /* @__PURE__ */ O(Ae, {
528
523
  turns: X,
529
- onClose: () => W(!1),
524
+ onClose: () => jt(!1),
530
525
  onSave: Gt,
531
526
  onContinueInChat: qt ? Jt : void 0,
532
527
  closeOnEscape: !0
533
528
  }) : null,
534
- $.active && /* @__PURE__ */ O(Me, {
529
+ $.active && /* @__PURE__ */ O(Pe, {
535
530
  session: $.session,
536
531
  notice: $.notice,
537
532
  capturing: $.capturing,
@@ -554,7 +549,7 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
554
549
  onToggleMute: $.toggleMute,
555
550
  onEnd: Xt
556
551
  }),
557
- /* @__PURE__ */ O(He, {
552
+ /* @__PURE__ */ O(We, {
558
553
  open: Ot !== null,
559
554
  onConfirm: $t,
560
555
  onCancel: en
@@ -14,95 +14,96 @@ import { AssistantRuntimeManager as _e } from "./shared/assistant/runtime.js";
14
14
  import { buildProgress as ve, getAssistantMedia as ye, getAssistantText as be, getRawMessageCreatedAt as xe, getToolProgress as Se, isReapedSandboxConnectionError as Ce, isRecoverable as we, mapSessionToHistory as Te, mergeMessagesById as Ee, sanitize as De } from "./shared/assistant/progress.js";
15
15
  import { createSandboxAssistantTransport as Oe } from "./shared/assistant/createSandboxAssistantTransport.js";
16
16
  import { useSandboxAssistantTransport as ke } from "./shared/assistant/useSandboxAssistantTransport.js";
17
- import { chatTurns as Ae, groupBySession as je, groupConsecutiveBySession as Me, isVoiceTurn as Ne, voiceMarker as Pe, voiceSessionIdOf as Fe, voiceTurnsOnly as Ie } from "./shared/assistant/voice/turnVisibility.js";
18
- import { browserSpeechEngine as Le } from "./shared/assistant/speech/browserSpeechEngine.js";
19
- import { HOSTED_TTS_TIER as Re, HOSTED_VOICES as ze, hostedLocaleFor as Be, hostedSupportsLanguage as Ve } from "./shared/assistant/speech/hostedVoiceCatalogue.js";
20
- import { HOSTED_TTS_MAX_CHARS as He, SPEAKING_RATE_MAX as Ue, SPEAKING_RATE_MAX_STREAMING as We, SPEAKING_RATE_MAX_SYNC as Ge, SPEAKING_RATE_MIN as Ke, base64ToBytes as qe, buildRequest as Je, classifyHttpFailure as Ye, decodeAudioResponse as Xe, shouldDisableEngine as Ze, splitForVendor as Qe } from "./shared/assistant/speech/hostedTtsProtocol.js";
21
- import { createHostedTtsEngine as $e } from "./shared/assistant/speech/hostedTtsSpeechEngine.js";
22
- import { createRoutingSpeechEngine as et } from "./shared/assistant/speech/routingSpeechEngine.js";
23
- import { configureSpeechEngine as tt, createSpeechEngines as nt, getSpeechEngine as rt, readSpeechEngineConfig as it, resetSpeechEngine as at } from "./shared/assistant/speech/createSpeechEngine.js";
24
- import { micIsInterrupt as ot, showsAssistantCaption as st, showsUserCaption as ct, voiceStageState as lt, waveformIsActive as ut, waveformIsSettled as dt } from "./shared/assistant/voice/voiceStageState.js";
25
- import { ENDPOINT_GRACE_MS as ft, INITIAL_SESSION as pt, INTERRUPT_MAX_MS as mt, INTERRUPT_MIN_MS as ht, SILENCE_SUBMIT_MS as gt, isCapturing as _t, isEcho as vt, isSubmittable as yt, orbMode as bt, planReplyConsumption as xt, spokenSoFar as St, voiceSessionReducer as Ct } from "./shared/assistant/voice/voiceSession.js";
26
- import { SPEECH_LANG as wt, VOICE_LIST_TIMEOUT_MS as Tt, isSpeechBlocked as Et, languageDisplayName as Dt, normalizeLangTag as Ot, primaryLanguageSubtag as kt, selectVoiceForLocale as At, speechGate as jt, speechLangForLocale as Mt, voiceAvailability as Nt, voiceQualityRank as Pt, voicesForLocale as Ft } from "./shared/assistant/voice/speechVoices.js";
27
- import { buildContinuedFromVoiceNote as It, buildVoiceTranscriptMarkdown as Lt, voiceTranscriptFilename as Rt } from "./shared/assistant/voice/voiceTranscript.js";
28
- import { DEFAULT_SPEAKABLE_LABELS as zt, MAX_SPEAKABLE_CHARS as Bt, MAX_SPOKEN_TABLE_ROWS as Vt, SPEECH_CHUNK_CHARS as Ht, SPEECH_CHUNK_CJK_CHARS as Ut, chunkForSpeech as Wt, containsCjk as Gt, speakableEmail as Kt, splitTableRow as qt, toSpeakableText as Jt } from "./shared/assistant/voice/speakableText.js";
29
- import { PREVIEW_LANGUAGES as Yt, voicePreviewText as Xt } from "./shared/assistant/voice/voicePreview.js";
30
- import { MINI_CAPTION_BUDGET as Zt, showPreviousChunk as Qt } from "./shared/assistant/voice/miniCaptionBudget.js";
31
- import { POLL_FAST_MS as $t, POLL_FAST_UNTIL_MS as en, POLL_SLOW_MS as tn, POLL_STEADY_MS as nn, POLL_STEADY_UNTIL_MS as rn, pollDelayMs as an } from "./shared/assistant/voice/assistantPollSchedule.js";
32
- import { toCaptionText as on } from "./shared/assistant/voice/captionText.js";
33
- import { ASSISTANT_LANGUAGES as sn, DEFAULT_SPEECH_RATE as cn, findAssistantLanguage as ln, resolveAssistantLanguage as un } from "./shared/assistant/voice/languages.js";
34
- import { replyFollowsInput as dn, resolveLanguagePair as fn } from "./shared/assistant/voice/languagePair.js";
35
- import { findPendingWrite as pn, parseConfirmationRefusal as mn } from "./shared/assistant/pendingWrite.js";
36
- import { SPOKEN_LABEL_LANGUAGES as hn, speechLabelsFor as gn } from "./shared/assistant/voice/speechLabels.js";
37
- import { detectScriptLocale as _n, resolveSpeechLocale as vn } from "./shared/assistant/voice/replyLanguage.js";
38
- import { IDLE_PLAYBACK as yn, isSpeakingMessage as bn, publishedChunks as xn, requiresCancel as Sn, speechPlaybackReducer as Cn } from "./shared/assistant/voice/speechPlayback.js";
39
- import { MAX_INLINE_IMAGE_BASE64_BYTES as wn, MAX_REQUEST_BODY_BYTES as Tn } from "./shared/assistant/gatewayLimits.js";
40
- import { BOILERPLATE_PAGE_SHARE as En, MAX_BOILERPLATE_LINE_CHARS as Dn, MAX_EXTRACTED_CHARS as On, MAX_PDF_PAGES_SCANNED as kn, MIN_PAGE_TEXT_CHARS as An, MIN_TEXT_PAGE_SHARE as jn, columnLetterToIndex as Mn, decodeXmlEntities as Nn, docxXmlToText as Pn, fitPdfPages as Fn, formatPageRanges as In, isMostlyImagePages as Ln, joinSheets as Rn, pageMarker as zn, parseSharedStrings as Bn, parseWorkbookSheets as Vn, pdfTextItemsToPage as Hn, sheetXmlToRows as Un, summarisePageText as Wn, truncatePagesForInline as Gn } from "./shared/assistant/documentText.js";
41
- import { ATTACHMENT_ACCEPT as Kn, AttachmentRejectedError as qn, INLINE_IMAGE_MAX_DIM as Jn, INLINE_IMAGE_QUALITY as Yn, MAX_ATTACHMENTS as Xn, MAX_FILE_BYTES as Zn, MAX_INLINE_CHARS_PER_FILE as Qn, MAX_INLINE_CHARS_TOTAL as $n, MAX_INLINE_IMAGE_BASE64_CHARS as er, MAX_INLINE_IMAGE_PARTS as tr, MAX_INLINE_TURN_BODY_BYTES as nr, MAX_TURN_BODY_BYTES as rr, PROMPT_ENVELOPE_RESERVE_BYTES as ir, TURN_BODY_HEADROOM_BYTES as ar, buildAttachmentPromptBlock as or, buildPromptParts as sr, buildPromptWithAttachments as cr, classifyAttachment as lr, countInlineImageCandidates as ur, countInlinedImageParts as dr, detectDocumentFormat as fr, estimateTurnBodyBytes as pr, formatBytes as mr, getAttachmentSendBlocker as hr, getExtension as gr, getSendableAttachments as _r, hasAttachmentWorkInFlight as vr, parseDataUrl as yr, toMessageAttachment as br, truncateForInline as xr, validateFile as Sr } from "./shared/assistant/attachments.js";
42
- import { useAssistantStore as Cr } from "./shared/assistant/store.js";
43
- import { isTurnInFlight as wr, planAbandonedTurn as Tr, planTurnAbort as Er } from "./shared/assistant/turnState.js";
44
- import { PHRASE_ROTATE_MS as Dr, STAGE_COPY as Or, THINKING_PHRASES as kr, isStageCopy as Ar, stageText as jr, statusStageCopy as Mr, thinkingPhrase as Nr } from "./shared/assistant/stageCopy.js";
45
- import { AssistantToolActivity as Pr, parseToolActivity as Fr } from "./shared/assistant/ui/AssistantToolActivity.js";
46
- import { AssistantSpeechProvider as Ir, useAssistantSpeech as Lr } from "./shared/assistant/ui/AssistantSpeechProvider.js";
47
- import { useVoiceSession as Rr } from "./shared/assistant/ui/useVoiceSession.js";
48
- import { getActorId as zr, getOrganizationId as Br, getWorkspaceId as Vr } from "./shared/assistant/context.js";
49
- import { ATTACHMENT_SOURCES as Hr, availableAttachmentSources as Ur, deviceHasCamera as Wr } from "./shared/assistant/attachmentSources.js";
50
- import { SANDBOX_READY_TTL_MS as Gr, createReadinessTracker as Kr, isRecentlyVerified as qr } from "./shared/assistant/sandboxReadiness.js";
51
- import { AssistantAutoSpeakToggle as Jr } from "./shared/assistant/ui/AssistantAutoSpeakToggle.js";
52
- import { AssistantMessageAttachments as Yr } from "./shared/assistant/ui/AssistantMessageAttachments.js";
53
- import { AssistantPendingWriteCard as Xr } from "./shared/assistant/ui/AssistantPendingWriteCard.js";
54
- import { AssistantLanguageMenu as Zr } from "./shared/assistant/ui/AssistantLanguageMenu.js";
55
- import { AssistantReplyLanguageSelector as Qr } from "./shared/assistant/ui/AssistantReplyLanguageSelector.js";
56
- import { AssistantSpeakButton as $r } from "./shared/assistant/ui/AssistantSpeakButton.js";
57
- import { AssistantSpokenTurnsNotice as ei } from "./shared/assistant/ui/AssistantSpokenTurnsNotice.js";
58
- import { AssistantConnectSourceProvider as ti, useAssistantConnectSource as ni } from "./shared/assistant/ui/composer/connectSource.js";
59
- import { AssistantConnectSourceItem as ri } from "./shared/assistant/ui/composer/AssistantConnectSourceItem.js";
60
- import { ASSISTANT_OVERLAY_ATTR as ii, ASSISTANT_PANEL_ATTR as ai, NO_PANEL_OVERLAY as oi, activePanelOverlay as si, assistantPanelOwnsEscape as ci, escapeDismisses as li, focusIsInsidePanel as ui, nextPanelOverlays as di, panelOwnsEscape as fi } from "./shared/assistant/ui/panelOverlays.js";
61
- import { useDropdownEscape as pi } from "./shared/assistant/ui/useDropdownEscape.js";
62
- import { AssistantAttachmentButton as mi } from "./shared/assistant/ui/composer/AssistantAttachmentButton.js";
63
- import { AssistantAttachmentChips as hi } from "./shared/assistant/ui/composer/AssistantAttachmentChips.js";
64
- import { AssistantPreviewProvider as gi, useAssistantPreview as _i } from "./shared/assistant/preview/context.js";
65
- import { IDLE_PREVIEW_STATE as vi, isRunningStatus as yi, nextPreviewEvents as bi } from "./shared/assistant/preview/previewTransitions.js";
66
- import { IDLE_PREVIEW as xi, NO_OWNER as Si, applyPreviewEvent as Ci, createAssistantPreviewSurface as wi, currentPreviewOwner as Ti, runBelongsTo as Ei, sameOwner as Di } from "./shared/assistant/preview/surfaceState.js";
67
- import { createRunIdentityCache as Oi, runIdentities as ki } from "./shared/assistant/preview/runIdentity.js";
68
- import { IDLE_ACTIVE_TAB as Ai, nextActiveTab as ji, pinActiveTab as Mi, shouldPinOnMove as Ni, shouldPinOnSelect as Pi, stepsFromToolActivity as Fi, tabForArrowKey as Ii } from "./shared/assistant/preview/entity/entityPreviewState.js";
69
- import { AssistantStepRail as Li } from "./shared/assistant/preview/entity/AssistantStepRail.js";
70
- import { AssistantEntityPreview as Ri } from "./shared/assistant/preview/entity/AssistantEntityPreview.js";
71
- import { useOverlayFocus as zi } from "./shared/assistant/ui/useOverlayFocus.js";
72
- import { useAssistantPreviewBridge as Bi } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
73
- import { AssistantPreviewOverlay as Vi } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
74
- import { AssistantLanguageSelector as Hi, FOLLOW_APP_LOCALE as Ui } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
75
- import { ASSISTANT_MODE_META as Wi, AssistantModeSelector as Gi, nextModeIndex as Ki } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
76
- import { AssistantVoiceButton as qi } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
77
- import { AUTO_VOICE as Ji, AssistantVoiceSelector as Yi } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
78
- import { AssistantVoiceOrb as Xi } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
79
- import { AssistantVoiceSessionButton as Zi } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
80
- import { CAPTION_SCROLL_ATTR as Qi, VoiceCaption as $i } from "./shared/assistant/ui/voice/VoiceCaption.js";
81
- import { VoiceConversationView as ea } from "./shared/assistant/ui/voice/VoiceConversationView.js";
82
- import { VoiceWaveform as ta } from "./shared/assistant/ui/voice/VoiceWaveform.js";
83
- import { VoiceMiniController as na } from "./shared/assistant/ui/voice/VoiceMiniController.js";
84
- import { VoiceStage as ra } from "./shared/assistant/ui/voice/VoiceStage.js";
85
- import { VoiceTranscriptDrawer as ia } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
86
- import { downloadFile as aa, exportConversation as oa } from "./shared/assistant/exportConversation.js";
87
- import { AssistantMoreMenu as sa } from "./shared/assistant/ui/AssistantMoreMenu.js";
88
- import { AssistantHeader as ca } from "./shared/assistant/ui/AssistantHeader.js";
89
- import { AssistantConversationList as la } from "./shared/assistant/ui/AssistantConversationList.js";
90
- import { AssistantEmptyState as ua } from "./shared/assistant/ui/AssistantEmptyState.js";
91
- import { AssistantMessageItem as da } from "./shared/assistant/ui/AssistantMessageItem.js";
92
- import { AssistantMessageList as fa } from "./shared/assistant/ui/AssistantMessageList.js";
93
- import { AssistantVoiceSession as pa } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
94
- import { useAssistantApiAccess as ma } from "./shared/assistant/useAssistantApiAccess.js";
95
- import { useConversationTurns as ha } from "./shared/assistant/useConversationTurns.js";
96
- import { isMultimodalBodyRejection as ga, isRecoverableAssistantError as _a } from "./shared/assistant/transportErrors.js";
97
- import { aiCreditsUpdatedEventName as va, dispatchAssistantQuotaExhausted as ya, notifyAiCreditsUpdated as ba } from "./shared/assistant/aiCredits.js";
98
- import { useWorkspaceWriteAccess as xa } from "./shared/assistant/useWorkspaceWriteAccess.js";
99
- import { extractDocumentText as Sa } from "./shared/assistant/documentExtract.js";
100
- import { useAssistantAttachments as Ca } from "./shared/assistant/useAssistantAttachments.js";
101
- import { AssistantComposer as wa } from "./shared/assistant/ui/composer/AssistantComposer.js";
102
- import { isProdRuntime as Ta } from "./shared/assistant/env.js";
103
- import { useAssistantHeartbeat as Ea } from "./shared/assistant/useAssistantHeartbeat.js";
104
- import { useAssistantKeyboardShortcuts as Da } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
105
- import { AssistantApiCallsConsentDialog as Oa } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
106
- import { AssistantChatArea as ka } from "./shared/assistant/ui/AssistantChatArea.js";
107
- import { AIAssistantPanel as Aa } from "./shared/assistant/ui/AIAssistantPanel.js";
108
- export { Aa as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, sn as ASSISTANT_LANGUAGES, Wi as ASSISTANT_MODE_META, ii as ASSISTANT_OVERLAY_ATTR, ai as ASSISTANT_PANEL_ATTR, Kn as ATTACHMENT_ACCEPT, Hr as ATTACHMENT_SOURCES, Ji as AUTO_VOICE, Oa as AssistantApiCallsConsentDialog, mi as AssistantAttachmentButton, hi as AssistantAttachmentChips, Jr as AssistantAutoSpeakToggle, ka as AssistantChatArea, wa as AssistantComposer, ri as AssistantConnectSourceItem, ti as AssistantConnectSourceProvider, la as AssistantConversationList, ua as AssistantEmptyState, Ri as AssistantEntityPreview, ca as AssistantHeader, s as AssistantI18nProvider, Zr as AssistantLanguageMenu, Hi as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, Yr as AssistantMessageAttachments, da as AssistantMessageItem, fa as AssistantMessageList, Gi as AssistantModeSelector, sa as AssistantMoreMenu, g as AssistantNavigateProvider, Xr as AssistantPendingWriteCard, Vi as AssistantPreviewOverlay, gi as AssistantPreviewProvider, t as AssistantProductProvider, Qr as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, $r as AssistantSpeakButton, Ir as AssistantSpeechProvider, ei as AssistantSpokenTurnsNotice, Li as AssistantStepRail, Pr as AssistantToolActivity, qi as AssistantVoiceButton, Xi as AssistantVoiceOrb, Yi as AssistantVoiceSelector, pa as AssistantVoiceSession, Zi as AssistantVoiceSessionButton, qn as AttachmentRejectedError, En as BOILERPLATE_PAGE_SHARE, Qi as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, zt as DEFAULT_SPEAKABLE_LABELS, cn as DEFAULT_SPEECH_RATE, ft as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, Ui as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, He as HOSTED_TTS_MAX_CHARS, Re as HOSTED_TTS_TIER, ze as HOSTED_VOICES, Ai as IDLE_ACTIVE_TAB, yn as IDLE_PLAYBACK, xi as IDLE_PREVIEW, vi as IDLE_PREVIEW_STATE, pt as INITIAL_SESSION, Jn as INLINE_IMAGE_MAX_DIM, Yn as INLINE_IMAGE_QUALITY, mt as INTERRUPT_MAX_MS, ht as INTERRUPT_MIN_MS, Xn as MAX_ATTACHMENTS, Dn as MAX_BOILERPLATE_LINE_CHARS, On as MAX_EXTRACTED_CHARS, Zn as MAX_FILE_BYTES, Qn as MAX_INLINE_CHARS_PER_FILE, $n as MAX_INLINE_CHARS_TOTAL, wn as MAX_INLINE_IMAGE_BASE64_BYTES, er as MAX_INLINE_IMAGE_BASE64_CHARS, tr as MAX_INLINE_IMAGE_PARTS, nr as MAX_INLINE_TURN_BODY_BYTES, kn as MAX_PDF_PAGES_SCANNED, Tn as MAX_REQUEST_BODY_BYTES, Bt as MAX_SPEAKABLE_CHARS, Vt as MAX_SPOKEN_TABLE_ROWS, rr as MAX_TURN_BODY_BYTES, Zt as MINI_CAPTION_BUDGET, An as MIN_PAGE_TEXT_CHARS, jn as MIN_TEXT_PAGE_SHARE, Si as NO_OWNER, oi as NO_PANEL_OVERLAY, Dr as PHRASE_ROTATE_MS, $t as POLL_FAST_MS, en as POLL_FAST_UNTIL_MS, tn as POLL_SLOW_MS, nn as POLL_STEADY_MS, rn as POLL_STEADY_UNTIL_MS, Yt as PREVIEW_LANGUAGES, ir as PROMPT_ENVELOPE_RESERVE_BYTES, N as PROXY_SANDBOX_REQUEST, P as REPORT_AI_TOKEN_USAGE, Gr as SANDBOX_READY_TTL_MS, gt as SILENCE_SUBMIT_MS, Ue as SPEAKING_RATE_MAX, We as SPEAKING_RATE_MAX_STREAMING, Ge as SPEAKING_RATE_MAX_SYNC, Ke as SPEAKING_RATE_MIN, Ht as SPEECH_CHUNK_CHARS, Ut as SPEECH_CHUNK_CJK_CHARS, wt as SPEECH_LANG, hn as SPOKEN_LABEL_LANGUAGES, Or as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, kr as THINKING_PHRASES, ar as TURN_BODY_HEADROOM_BYTES, Tt as VOICE_LIST_TIMEOUT_MS, $i as VoiceCaption, ea as VoiceConversationView, na as VoiceMiniController, ra as VoiceStage, ia as VoiceTranscriptDrawer, ta as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, si as activePanelOverlay, va as aiCreditsUpdatedEventName, Ci as applyPreviewEvent, J as approvePendingWrite, ci as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Ur as availableAttachmentSources, qe as base64ToBytes, y as browserShouldHandle, Le as browserSpeechEngine, Y as buildAssistantSandboxEnv, or as buildAttachmentPromptBlock, It as buildContinuedFromVoiceNote, ve as buildProgress, sr as buildPromptParts, X as buildPromptRequestBody, cr as buildPromptWithAttachments, Je as buildRequest, E as buildSandboxContextInput, Lt as buildVoiceTranscriptMarkdown, Ae as chatTurns, Z as checkAssistantAiCredits, Wt as chunkForSpeech, b as classifyAssistantHref, lr as classifyAttachment, Ye as classifyHttpFailure, S as classifyQuotaError, Mn as columnLetterToIndex, tt as configureSpeechEngine, Gt as containsCjk, d as copyToClipboard, ur as countInlineImageCandidates, dr as countInlinedImageParts, wi as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, $e as createHostedTtsEngine, Kr as createReadinessTracker, et as createRoutingSpeechEngine, Oi as createRunIdentityCache, Oe as createSandboxAssistantTransport, nt as createSpeechEngines, Ti as currentPreviewOwner, Xe as decodeAudioResponse, Nn as decodeXmlEntities, C as describeQuotaError, fr as detectDocumentFormat, _n as detectScriptLocale, Wr as deviceHasCamera, ya as dispatchAssistantQuotaExhausted, Pn as docxXmlToText, ee as downloadAssistantArtifact, aa as downloadFile, li as escapeDismisses, pr as estimateTurnBodyBytes, D as executeSandboxGraphQL, oa as exportConversation, te as extendAssistantSandboxTTL, Sa as extractDocumentText, ln as findAssistantLanguage, ne as findExistingSandbox, pn as findPendingWrite, Fn as fitPdfPages, ui as focusIsInsidePanel, mr as formatBytes, In as formatPageRanges, zr as getActorId, re as getAssistantArtifacts, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, hr as getAttachmentSendBlocker, U as getCapability, gr as getExtension, R as getImageForMode, z as getImageTagForMode, Br as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, _r as getSendableAttachments, rt as getSpeechEngine, Se as getToolProgress, Vr as getWorkspaceId, je as groupBySession, Me as groupConsecutiveBySession, vr as hasAttachmentWorkInFlight, Be as hostedLocaleFor, Ve as hostedSupportsLanguage, p as imageHostLabel, _t as isCapturing, vt as isEcho, Ln as isMostlyImagePages, ga as isMultimodalBodyRejection, Ta as isProdRuntime, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, qr as isRecentlyVerified, we as isRecoverable, _a as isRecoverableAssistantError, m as isRemoteImageSrc, yi as isRunningStatus, bn as isSpeakingMessage, Et as isSpeechBlocked, Ar as isStageCopy, yt as isSubmittable, wr as isTurnInFlight, W as isUnknownFieldError, Ne as isVoiceTurn, Rn as joinSheets, Dt as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, ot as micIsInterrupt, se as modeRequiresConfirmWrites, ji as nextActiveTab, Ki as nextModeIndex, di as nextPanelOverlays, bi as nextPreviewEvents, Ot as normalizeLangTag, ba as notifyAiCreditsUpdated, bt as orbMode, zn as pageMarker, fi as panelOwnsEscape, mn as parseConfirmationRefusal, yr as parseDataUrl, Bn as parseSharedStrings, Fr as parseToolActivity, Vn as parseWorkbookSheets, Hn as pdfTextItemsToPage, Mi as pinActiveTab, Tr as planAbandonedTurn, xt as planReplyConsumption, Er as planTurnAbort, an as pollDelayMs, kt as primaryLanguageSubtag, xn as publishedChunks, T as quotaExhaustedEventName, it as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, dn as replyFollowsInput, le as reportAssistantAiTokenUsage, Sn as requiresCancel, at as resetSpeechEngine, un as resolveAssistantLanguage, fn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, vn as resolveSpeechLocale, Ei as runBelongsTo, ki as runIdentities, Di as sameOwner, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, At as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, Un as sheetXmlToRows, Ze as shouldDisableEngine, Ni as shouldPinOnMove, Pi as shouldPinOnSelect, Qt as showPreviousChunk, st as showsAssistantCaption, ct as showsUserCaption, Kt as speakableEmail, jt as speechGate, gn as speechLabelsFor, Mt as speechLangForLocale, Cn as speechPlaybackReducer, Qe as splitForVendor, qt as splitTableRow, St as spokenSoFar, jr as stageText, Mr as statusStageCopy, Fi as stepsFromToolActivity, me as stopReapedAssistantSandbox, Wn as summarisePageText, Ii as tabForArrowKey, Nr as thinkingPhrase, on as toCaptionText, br as toMessageAttachment, Jt as toSpeakableText, xr as truncateForInline, Gn as truncatePagesForInline, ma as useAssistantApiAccess, Ca as useAssistantAttachments, ni as useAssistantConnectSource, Ea as useAssistantHeartbeat, l as useAssistantI18nNamespace, Da as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, _i as useAssistantPreview, Bi as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, Lr as useAssistantSpeech, o as useAssistantStorageFolders, Cr as useAssistantStore, u as useAssistantTr, ha as useConversationTurns, pi as useDropdownEscape, zi as useOverlayFocus, ke as useSandboxAssistantTransport, e as useVoiceInput, Rr as useVoiceSession, xa as useWorkspaceWriteAccess, Sr as validateFile, Nt as voiceAvailability, Pe as voiceMarker, Xt as voicePreviewText, Pt as voiceQualityRank, Fe as voiceSessionIdOf, Ct as voiceSessionReducer, lt as voiceStageState, Rt as voiceTranscriptFilename, Ie as voiceTurnsOnly, Ft as voicesForLocale, he as waitForAssistantServiceReady, ge as waitForSandboxRunning, ut as waveformIsActive, dt as waveformIsSettled };
17
+ import { DEFAULT_STREAM_BUDGET_MS as Ae, STREAM_BUDGET_MS as je, incompleteTurnNotice as Me, streamBudgetMs as Ne, withIncompleteTurnNotice as Pe } from "./shared/assistant/streamBudget.js";
18
+ import { chatTurns as Fe, groupBySession as Ie, groupConsecutiveBySession as Le, isVoiceTurn as Re, voiceMarker as ze, voiceSessionIdOf as Be, voiceTurnsOnly as Ve } from "./shared/assistant/voice/turnVisibility.js";
19
+ import { browserSpeechEngine as He } from "./shared/assistant/speech/browserSpeechEngine.js";
20
+ import { HOSTED_TTS_TIER as Ue, HOSTED_VOICES as We, hostedLocaleFor as Ge, hostedSupportsLanguage as Ke } from "./shared/assistant/speech/hostedVoiceCatalogue.js";
21
+ import { HOSTED_TTS_MAX_CHARS as qe, SPEAKING_RATE_MAX as Je, SPEAKING_RATE_MAX_STREAMING as Ye, SPEAKING_RATE_MAX_SYNC as Xe, SPEAKING_RATE_MIN as Ze, base64ToBytes as Qe, buildRequest as $e, classifyHttpFailure as et, decodeAudioResponse as tt, shouldDisableEngine as nt, splitForVendor as rt } from "./shared/assistant/speech/hostedTtsProtocol.js";
22
+ import { createHostedTtsEngine as it } from "./shared/assistant/speech/hostedTtsSpeechEngine.js";
23
+ import { createRoutingSpeechEngine as at } from "./shared/assistant/speech/routingSpeechEngine.js";
24
+ import { configureSpeechEngine as ot, createSpeechEngines as st, getSpeechEngine as ct, readSpeechEngineConfig as lt, resetSpeechEngine as ut } from "./shared/assistant/speech/createSpeechEngine.js";
25
+ import { micIsInterrupt as dt, showsAssistantCaption as ft, showsUserCaption as pt, voiceStageState as mt, waveformIsActive as ht, waveformIsSettled as gt } from "./shared/assistant/voice/voiceStageState.js";
26
+ import { ENDPOINT_GRACE_MS as _t, INITIAL_SESSION as vt, INTERRUPT_MAX_MS as yt, INTERRUPT_MIN_MS as bt, SILENCE_SUBMIT_MS as xt, isCapturing as St, isEcho as Ct, isSubmittable as wt, orbMode as Tt, planReplyConsumption as Et, spokenSoFar as Dt, voiceSessionReducer as Ot } from "./shared/assistant/voice/voiceSession.js";
27
+ import { SPEECH_LANG as kt, VOICE_LIST_TIMEOUT_MS as At, isSpeechBlocked as jt, languageDisplayName as Mt, normalizeLangTag as Nt, primaryLanguageSubtag as Pt, selectVoiceForLocale as Ft, speechGate as It, speechLangForLocale as Lt, voiceAvailability as Rt, voiceQualityRank as zt, voicesForLocale as Bt } from "./shared/assistant/voice/speechVoices.js";
28
+ import { buildContinuedFromVoiceNote as Vt, buildVoiceTranscriptMarkdown as Ht, voiceTranscriptFilename as Ut } from "./shared/assistant/voice/voiceTranscript.js";
29
+ import { DEFAULT_SPEAKABLE_LABELS as Wt, MAX_SPEAKABLE_CHARS as Gt, MAX_SPOKEN_TABLE_ROWS as Kt, SPEECH_CHUNK_CHARS as qt, SPEECH_CHUNK_CJK_CHARS as Jt, chunkForSpeech as Yt, containsCjk as Xt, speakableEmail as Zt, splitTableRow as Qt, toSpeakableText as $t } from "./shared/assistant/voice/speakableText.js";
30
+ import { PREVIEW_LANGUAGES as en, voicePreviewText as tn } from "./shared/assistant/voice/voicePreview.js";
31
+ import { MINI_CAPTION_BUDGET as nn, showPreviousChunk as rn } from "./shared/assistant/voice/miniCaptionBudget.js";
32
+ import { POLL_FAST_MS as an, POLL_FAST_UNTIL_MS as on, POLL_SLOW_MS as sn, POLL_STEADY_MS as cn, POLL_STEADY_UNTIL_MS as ln, pollDelayMs as un } from "./shared/assistant/voice/assistantPollSchedule.js";
33
+ import { toCaptionText as dn } from "./shared/assistant/voice/captionText.js";
34
+ import { ASSISTANT_LANGUAGES as fn, DEFAULT_SPEECH_RATE as pn, findAssistantLanguage as mn, resolveAssistantLanguage as hn } from "./shared/assistant/voice/languages.js";
35
+ import { replyFollowsInput as gn, resolveLanguagePair as _n } from "./shared/assistant/voice/languagePair.js";
36
+ import { findPendingWrite as vn, parseConfirmationRefusal as yn } from "./shared/assistant/pendingWrite.js";
37
+ import { SPOKEN_LABEL_LANGUAGES as bn, speechLabelsFor as xn } from "./shared/assistant/voice/speechLabels.js";
38
+ import { detectScriptLocale as Sn, resolveSpeechLocale as Cn } from "./shared/assistant/voice/replyLanguage.js";
39
+ import { IDLE_PLAYBACK as wn, isSpeakingMessage as Tn, publishedChunks as En, requiresCancel as Dn, speechPlaybackReducer as On } from "./shared/assistant/voice/speechPlayback.js";
40
+ import { MAX_INLINE_IMAGE_BASE64_BYTES as kn, MAX_REQUEST_BODY_BYTES as An } from "./shared/assistant/gatewayLimits.js";
41
+ import { BOILERPLATE_PAGE_SHARE as jn, MAX_BOILERPLATE_LINE_CHARS as Mn, MAX_EXTRACTED_CHARS as Nn, MAX_PDF_PAGES_SCANNED as Pn, MIN_PAGE_TEXT_CHARS as Fn, MIN_TEXT_PAGE_SHARE as In, columnLetterToIndex as Ln, decodeXmlEntities as Rn, docxXmlToText as zn, fitPdfPages as Bn, formatPageRanges as Vn, isMostlyImagePages as Hn, joinSheets as Un, pageMarker as Wn, parseSharedStrings as Gn, parseWorkbookSheets as Kn, pdfTextItemsToPage as qn, sheetXmlToRows as Jn, summarisePageText as Yn, truncatePagesForInline as Xn } from "./shared/assistant/documentText.js";
42
+ import { ATTACHMENT_ACCEPT as Zn, AttachmentRejectedError as Qn, INLINE_IMAGE_MAX_DIM as $n, INLINE_IMAGE_QUALITY as er, MAX_ATTACHMENTS as tr, MAX_FILE_BYTES as nr, MAX_INLINE_CHARS_PER_FILE as rr, MAX_INLINE_CHARS_TOTAL as ir, MAX_INLINE_IMAGE_BASE64_CHARS as ar, MAX_INLINE_IMAGE_PARTS as or, MAX_INLINE_TURN_BODY_BYTES as sr, MAX_TURN_BODY_BYTES as cr, PROMPT_ENVELOPE_RESERVE_BYTES as lr, TURN_BODY_HEADROOM_BYTES as ur, buildAttachmentPromptBlock as dr, buildPromptParts as fr, buildPromptWithAttachments as pr, classifyAttachment as mr, countInlineImageCandidates as hr, countInlinedImageParts as gr, detectDocumentFormat as _r, estimateTurnBodyBytes as vr, formatBytes as yr, getAttachmentSendBlocker as br, getExtension as xr, getSendableAttachments as Sr, hasAttachmentWorkInFlight as Cr, parseDataUrl as wr, toMessageAttachment as Tr, truncateForInline as Er, validateFile as Dr } from "./shared/assistant/attachments.js";
43
+ import { useAssistantStore as Or } from "./shared/assistant/store.js";
44
+ import { isTurnInFlight as kr, planAbandonedTurn as Ar, planTurnAbort as jr } from "./shared/assistant/turnState.js";
45
+ import { PHRASE_ROTATE_MS as Mr, STAGE_COPY as Nr, THINKING_PHRASES as Pr, isStageCopy as Fr, stageText as Ir, statusStageCopy as Lr, thinkingPhrase as Rr } from "./shared/assistant/stageCopy.js";
46
+ import { AssistantToolActivity as zr, parseToolActivity as Br } from "./shared/assistant/ui/AssistantToolActivity.js";
47
+ import { AssistantSpeechProvider as Vr, useAssistantSpeech as Hr } from "./shared/assistant/ui/AssistantSpeechProvider.js";
48
+ import { useVoiceSession as Ur } from "./shared/assistant/ui/useVoiceSession.js";
49
+ import { getActorId as Wr, getOrganizationId as Gr, getWorkspaceId as Kr } from "./shared/assistant/context.js";
50
+ import { ATTACHMENT_SOURCES as qr, availableAttachmentSources as Jr, deviceHasCamera as Yr } from "./shared/assistant/attachmentSources.js";
51
+ import { SANDBOX_READY_TTL_MS as Xr, createReadinessTracker as Zr, isRecentlyVerified as Qr } from "./shared/assistant/sandboxReadiness.js";
52
+ import { AssistantAutoSpeakToggle as $r } from "./shared/assistant/ui/AssistantAutoSpeakToggle.js";
53
+ import { AssistantMessageAttachments as ei } from "./shared/assistant/ui/AssistantMessageAttachments.js";
54
+ import { AssistantPendingWriteCard as ti } from "./shared/assistant/ui/AssistantPendingWriteCard.js";
55
+ import { AssistantLanguageMenu as ni } from "./shared/assistant/ui/AssistantLanguageMenu.js";
56
+ import { AssistantReplyLanguageSelector as ri } from "./shared/assistant/ui/AssistantReplyLanguageSelector.js";
57
+ import { AssistantSpeakButton as ii } from "./shared/assistant/ui/AssistantSpeakButton.js";
58
+ import { AssistantSpokenTurnsNotice as ai } from "./shared/assistant/ui/AssistantSpokenTurnsNotice.js";
59
+ import { AssistantConnectSourceProvider as oi, useAssistantConnectSource as si } from "./shared/assistant/ui/composer/connectSource.js";
60
+ import { AssistantConnectSourceItem as ci } from "./shared/assistant/ui/composer/AssistantConnectSourceItem.js";
61
+ import { ASSISTANT_OVERLAY_ATTR as li, ASSISTANT_PANEL_ATTR as ui, NO_PANEL_OVERLAY as di, activePanelOverlay as fi, assistantPanelOwnsEscape as pi, escapeDismisses as mi, focusIsInsidePanel as hi, nextPanelOverlays as gi, panelOwnsEscape as _i } from "./shared/assistant/ui/panelOverlays.js";
62
+ import { useDropdownEscape as vi } from "./shared/assistant/ui/useDropdownEscape.js";
63
+ import { AssistantAttachmentButton as yi } from "./shared/assistant/ui/composer/AssistantAttachmentButton.js";
64
+ import { AssistantAttachmentChips as bi } from "./shared/assistant/ui/composer/AssistantAttachmentChips.js";
65
+ import { AssistantPreviewProvider as xi, useAssistantPreview as Si } from "./shared/assistant/preview/context.js";
66
+ import { IDLE_PREVIEW_STATE as Ci, isRunningStatus as wi, nextPreviewEvents as Ti } from "./shared/assistant/preview/previewTransitions.js";
67
+ import { IDLE_PREVIEW as Ei, NO_OWNER as Di, applyPreviewEvent as Oi, createAssistantPreviewSurface as ki, currentPreviewOwner as Ai, runBelongsTo as ji, sameOwner as Mi } from "./shared/assistant/preview/surfaceState.js";
68
+ import { createRunIdentityCache as Ni, runIdentities as Pi } from "./shared/assistant/preview/runIdentity.js";
69
+ import { IDLE_ACTIVE_TAB as Fi, nextActiveTab as Ii, pinActiveTab as Li, shouldPinOnMove as Ri, shouldPinOnSelect as zi, stepsFromToolActivity as Bi, tabForArrowKey as Vi } from "./shared/assistant/preview/entity/entityPreviewState.js";
70
+ import { AssistantStepRail as Hi } from "./shared/assistant/preview/entity/AssistantStepRail.js";
71
+ import { AssistantEntityPreview as Ui } from "./shared/assistant/preview/entity/AssistantEntityPreview.js";
72
+ import { useOverlayFocus as Wi } from "./shared/assistant/ui/useOverlayFocus.js";
73
+ import { useAssistantPreviewBridge as Gi } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
74
+ import { AssistantPreviewOverlay as Ki } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
75
+ import { AssistantLanguageSelector as qi, FOLLOW_APP_LOCALE as Ji } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
76
+ import { ASSISTANT_MODE_META as Yi, AssistantModeSelector as Xi, nextModeIndex as Zi } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
77
+ import { AssistantVoiceButton as Qi } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
78
+ import { AUTO_VOICE as $i, AssistantVoiceSelector as ea } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
79
+ import { AssistantVoiceOrb as ta } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
80
+ import { AssistantVoiceSessionButton as na } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
81
+ import { CAPTION_SCROLL_ATTR as ra, VoiceCaption as ia } from "./shared/assistant/ui/voice/VoiceCaption.js";
82
+ import { VoiceConversationView as aa } from "./shared/assistant/ui/voice/VoiceConversationView.js";
83
+ import { VoiceWaveform as oa } from "./shared/assistant/ui/voice/VoiceWaveform.js";
84
+ import { VoiceMiniController as sa } from "./shared/assistant/ui/voice/VoiceMiniController.js";
85
+ import { VoiceStage as ca } from "./shared/assistant/ui/voice/VoiceStage.js";
86
+ import { VoiceTranscriptDrawer as la } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
87
+ import { downloadFile as ua, exportConversation as da } from "./shared/assistant/exportConversation.js";
88
+ import { AssistantMoreMenu as fa } from "./shared/assistant/ui/AssistantMoreMenu.js";
89
+ import { AssistantHeader as pa } from "./shared/assistant/ui/AssistantHeader.js";
90
+ import { AssistantConversationList as ma } from "./shared/assistant/ui/AssistantConversationList.js";
91
+ import { AssistantEmptyState as ha } from "./shared/assistant/ui/AssistantEmptyState.js";
92
+ import { AssistantMessageItem as ga } from "./shared/assistant/ui/AssistantMessageItem.js";
93
+ import { AssistantMessageList as _a } from "./shared/assistant/ui/AssistantMessageList.js";
94
+ import { AssistantVoiceSession as va } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
95
+ import { useAssistantApiAccess as ya } from "./shared/assistant/useAssistantApiAccess.js";
96
+ import { useConversationTurns as ba } from "./shared/assistant/useConversationTurns.js";
97
+ import { isMultimodalBodyRejection as xa, isRecoverableAssistantError as Sa } from "./shared/assistant/transportErrors.js";
98
+ import { aiCreditsUpdatedEventName as Ca, dispatchAssistantQuotaExhausted as wa, notifyAiCreditsUpdated as Ta } from "./shared/assistant/aiCredits.js";
99
+ import { useWorkspaceWriteAccess as Ea } from "./shared/assistant/useWorkspaceWriteAccess.js";
100
+ import { extractDocumentText as Da } from "./shared/assistant/documentExtract.js";
101
+ import { useAssistantAttachments as Oa } from "./shared/assistant/useAssistantAttachments.js";
102
+ import { AssistantComposer as ka } from "./shared/assistant/ui/composer/AssistantComposer.js";
103
+ import { isProdRuntime as Aa } from "./shared/assistant/env.js";
104
+ import { useAssistantHeartbeat as ja } from "./shared/assistant/useAssistantHeartbeat.js";
105
+ import { useAssistantKeyboardShortcuts as Ma } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
106
+ import { AssistantApiCallsConsentDialog as Na } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
107
+ import { AssistantChatArea as Pa } from "./shared/assistant/ui/AssistantChatArea.js";
108
+ import { AIAssistantPanel as Fa } from "./shared/assistant/ui/AIAssistantPanel.js";
109
+ export { Fa as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, fn as ASSISTANT_LANGUAGES, Yi as ASSISTANT_MODE_META, li as ASSISTANT_OVERLAY_ATTR, ui as ASSISTANT_PANEL_ATTR, Zn as ATTACHMENT_ACCEPT, qr as ATTACHMENT_SOURCES, $i as AUTO_VOICE, Na as AssistantApiCallsConsentDialog, yi as AssistantAttachmentButton, bi as AssistantAttachmentChips, $r as AssistantAutoSpeakToggle, Pa as AssistantChatArea, ka as AssistantComposer, ci as AssistantConnectSourceItem, oi as AssistantConnectSourceProvider, ma as AssistantConversationList, ha as AssistantEmptyState, Ui as AssistantEntityPreview, pa as AssistantHeader, s as AssistantI18nProvider, ni as AssistantLanguageMenu, qi as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, ei as AssistantMessageAttachments, ga as AssistantMessageItem, _a as AssistantMessageList, Xi as AssistantModeSelector, fa as AssistantMoreMenu, g as AssistantNavigateProvider, ti as AssistantPendingWriteCard, Ki as AssistantPreviewOverlay, xi as AssistantPreviewProvider, t as AssistantProductProvider, ri as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, ii as AssistantSpeakButton, Vr as AssistantSpeechProvider, ai as AssistantSpokenTurnsNotice, Hi as AssistantStepRail, zr as AssistantToolActivity, Qi as AssistantVoiceButton, ta as AssistantVoiceOrb, ea as AssistantVoiceSelector, va as AssistantVoiceSession, na as AssistantVoiceSessionButton, Qn as AttachmentRejectedError, jn as BOILERPLATE_PAGE_SHARE, ra as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, Wt as DEFAULT_SPEAKABLE_LABELS, pn as DEFAULT_SPEECH_RATE, Ae as DEFAULT_STREAM_BUDGET_MS, _t as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, Ji as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, qe as HOSTED_TTS_MAX_CHARS, Ue as HOSTED_TTS_TIER, We as HOSTED_VOICES, Fi as IDLE_ACTIVE_TAB, wn as IDLE_PLAYBACK, Ei as IDLE_PREVIEW, Ci as IDLE_PREVIEW_STATE, vt as INITIAL_SESSION, $n as INLINE_IMAGE_MAX_DIM, er as INLINE_IMAGE_QUALITY, yt as INTERRUPT_MAX_MS, bt as INTERRUPT_MIN_MS, tr as MAX_ATTACHMENTS, Mn as MAX_BOILERPLATE_LINE_CHARS, Nn as MAX_EXTRACTED_CHARS, nr as MAX_FILE_BYTES, rr as MAX_INLINE_CHARS_PER_FILE, ir as MAX_INLINE_CHARS_TOTAL, kn as MAX_INLINE_IMAGE_BASE64_BYTES, ar as MAX_INLINE_IMAGE_BASE64_CHARS, or as MAX_INLINE_IMAGE_PARTS, sr as MAX_INLINE_TURN_BODY_BYTES, Pn as MAX_PDF_PAGES_SCANNED, An as MAX_REQUEST_BODY_BYTES, Gt as MAX_SPEAKABLE_CHARS, Kt as MAX_SPOKEN_TABLE_ROWS, cr as MAX_TURN_BODY_BYTES, nn as MINI_CAPTION_BUDGET, Fn as MIN_PAGE_TEXT_CHARS, In as MIN_TEXT_PAGE_SHARE, Di as NO_OWNER, di as NO_PANEL_OVERLAY, Mr as PHRASE_ROTATE_MS, an as POLL_FAST_MS, on as POLL_FAST_UNTIL_MS, sn as POLL_SLOW_MS, cn as POLL_STEADY_MS, ln as POLL_STEADY_UNTIL_MS, en as PREVIEW_LANGUAGES, lr as PROMPT_ENVELOPE_RESERVE_BYTES, N as PROXY_SANDBOX_REQUEST, P as REPORT_AI_TOKEN_USAGE, Xr as SANDBOX_READY_TTL_MS, xt as SILENCE_SUBMIT_MS, Je as SPEAKING_RATE_MAX, Ye as SPEAKING_RATE_MAX_STREAMING, Xe as SPEAKING_RATE_MAX_SYNC, Ze as SPEAKING_RATE_MIN, qt as SPEECH_CHUNK_CHARS, Jt as SPEECH_CHUNK_CJK_CHARS, kt as SPEECH_LANG, bn as SPOKEN_LABEL_LANGUAGES, Nr as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, je as STREAM_BUDGET_MS, Pr as THINKING_PHRASES, ur as TURN_BODY_HEADROOM_BYTES, At as VOICE_LIST_TIMEOUT_MS, ia as VoiceCaption, aa as VoiceConversationView, sa as VoiceMiniController, ca as VoiceStage, la as VoiceTranscriptDrawer, oa as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, fi as activePanelOverlay, Ca as aiCreditsUpdatedEventName, Oi as applyPreviewEvent, J as approvePendingWrite, pi as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Jr as availableAttachmentSources, Qe as base64ToBytes, y as browserShouldHandle, He as browserSpeechEngine, Y as buildAssistantSandboxEnv, dr as buildAttachmentPromptBlock, Vt as buildContinuedFromVoiceNote, ve as buildProgress, fr as buildPromptParts, X as buildPromptRequestBody, pr as buildPromptWithAttachments, $e as buildRequest, E as buildSandboxContextInput, Ht as buildVoiceTranscriptMarkdown, Fe as chatTurns, Z as checkAssistantAiCredits, Yt as chunkForSpeech, b as classifyAssistantHref, mr as classifyAttachment, et as classifyHttpFailure, S as classifyQuotaError, Ln as columnLetterToIndex, ot as configureSpeechEngine, Xt as containsCjk, d as copyToClipboard, hr as countInlineImageCandidates, gr as countInlinedImageParts, ki as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, it as createHostedTtsEngine, Zr as createReadinessTracker, at as createRoutingSpeechEngine, Ni as createRunIdentityCache, Oe as createSandboxAssistantTransport, st as createSpeechEngines, Ai as currentPreviewOwner, tt as decodeAudioResponse, Rn as decodeXmlEntities, C as describeQuotaError, _r as detectDocumentFormat, Sn as detectScriptLocale, Yr as deviceHasCamera, wa as dispatchAssistantQuotaExhausted, zn as docxXmlToText, ee as downloadAssistantArtifact, ua as downloadFile, mi as escapeDismisses, vr as estimateTurnBodyBytes, D as executeSandboxGraphQL, da as exportConversation, te as extendAssistantSandboxTTL, Da as extractDocumentText, mn as findAssistantLanguage, ne as findExistingSandbox, vn as findPendingWrite, Bn as fitPdfPages, hi as focusIsInsidePanel, yr as formatBytes, Vn as formatPageRanges, Wr as getActorId, re as getAssistantArtifacts, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, br as getAttachmentSendBlocker, U as getCapability, xr as getExtension, R as getImageForMode, z as getImageTagForMode, Gr as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, Sr as getSendableAttachments, ct as getSpeechEngine, Se as getToolProgress, Kr as getWorkspaceId, Ie as groupBySession, Le as groupConsecutiveBySession, Cr as hasAttachmentWorkInFlight, Ge as hostedLocaleFor, Ke as hostedSupportsLanguage, p as imageHostLabel, Me as incompleteTurnNotice, St as isCapturing, Ct as isEcho, Hn as isMostlyImagePages, xa as isMultimodalBodyRejection, Aa as isProdRuntime, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, Qr as isRecentlyVerified, we as isRecoverable, Sa as isRecoverableAssistantError, m as isRemoteImageSrc, wi as isRunningStatus, Tn as isSpeakingMessage, jt as isSpeechBlocked, Fr as isStageCopy, wt as isSubmittable, kr as isTurnInFlight, W as isUnknownFieldError, Re as isVoiceTurn, Un as joinSheets, Mt as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, dt as micIsInterrupt, se as modeRequiresConfirmWrites, Ii as nextActiveTab, Zi as nextModeIndex, gi as nextPanelOverlays, Ti as nextPreviewEvents, Nt as normalizeLangTag, Ta as notifyAiCreditsUpdated, Tt as orbMode, Wn as pageMarker, _i as panelOwnsEscape, yn as parseConfirmationRefusal, wr as parseDataUrl, Gn as parseSharedStrings, Br as parseToolActivity, Kn as parseWorkbookSheets, qn as pdfTextItemsToPage, Li as pinActiveTab, Ar as planAbandonedTurn, Et as planReplyConsumption, jr as planTurnAbort, un as pollDelayMs, Pt as primaryLanguageSubtag, En as publishedChunks, T as quotaExhaustedEventName, lt as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, gn as replyFollowsInput, le as reportAssistantAiTokenUsage, Dn as requiresCancel, ut as resetSpeechEngine, hn as resolveAssistantLanguage, _n as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, Cn as resolveSpeechLocale, ji as runBelongsTo, Pi as runIdentities, Mi as sameOwner, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, Ft as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, Jn as sheetXmlToRows, nt as shouldDisableEngine, Ri as shouldPinOnMove, zi as shouldPinOnSelect, rn as showPreviousChunk, ft as showsAssistantCaption, pt as showsUserCaption, Zt as speakableEmail, It as speechGate, xn as speechLabelsFor, Lt as speechLangForLocale, On as speechPlaybackReducer, rt as splitForVendor, Qt as splitTableRow, Dt as spokenSoFar, Ir as stageText, Lr as statusStageCopy, Bi as stepsFromToolActivity, me as stopReapedAssistantSandbox, Ne as streamBudgetMs, Yn as summarisePageText, Vi as tabForArrowKey, Rr as thinkingPhrase, dn as toCaptionText, Tr as toMessageAttachment, $t as toSpeakableText, Er as truncateForInline, Xn as truncatePagesForInline, ya as useAssistantApiAccess, Oa as useAssistantAttachments, si as useAssistantConnectSource, ja as useAssistantHeartbeat, l as useAssistantI18nNamespace, Ma as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, Si as useAssistantPreview, Gi as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, Hr as useAssistantSpeech, o as useAssistantStorageFolders, Or as useAssistantStore, u as useAssistantTr, ba as useConversationTurns, vi as useDropdownEscape, Wi as useOverlayFocus, ke as useSandboxAssistantTransport, e as useVoiceInput, Ur as useVoiceSession, Ea as useWorkspaceWriteAccess, Dr as validateFile, Rt as voiceAvailability, ze as voiceMarker, tn as voicePreviewText, zt as voiceQualityRank, Be as voiceSessionIdOf, Ot as voiceSessionReducer, mt as voiceStageState, Ut as voiceTranscriptFilename, Ve as voiceTurnsOnly, Bt as voicesForLocale, he as waitForAssistantServiceReady, ge as waitForSandboxRunning, ht as waveformIsActive, gt as waveformIsSettled, Pe as withIncompleteTurnNotice };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.912.3",
3
+ "version": "2026.912.5",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {