@burdenoff/fe-libs 2026.913.1 → 2026.913.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,42 @@
1
+ import { useAssistantTr as e } from "../../i18n.js";
2
+ import { voiceStatusParts as t } from "../../voice/voiceStatus.js";
3
+ import { IDLE_ROTATION_CLOCK as n, advanceRotationClock as r, rotationElapsedMs as i, startRotationTicker as a, syncRotationClock as o } from "../../voice/rotationClock.js";
4
+ import { useEffect as s, useState as c } from "react";
5
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
+ //#region src/shared/assistant/ui/voice/VoiceStatusText.tsx
7
+ var d = ({ announced: e, shown: t, className: n }) => /* @__PURE__ */ u("p", {
8
+ className: `relative ${n}`,
9
+ "data-testid": "assistant-voice-status-line",
10
+ children: [/* @__PURE__ */ l("span", {
11
+ "aria-hidden": "true",
12
+ "data-testid": "assistant-voice-status-shown",
13
+ children: t
14
+ }), /* @__PURE__ */ l("span", {
15
+ className: "sr-only left-0 top-0",
16
+ "aria-live": "polite",
17
+ "aria-atomic": "true",
18
+ "data-testid": "assistant-voice-status",
19
+ children: e
20
+ })]
21
+ }), f = ({ status: n, suffix: r = null, rotating: i = !1, className: a }) => {
22
+ let { announced: o, shown: s } = t({
23
+ tr: e(),
24
+ status: n,
25
+ suffix: r,
26
+ rotating: i,
27
+ elapsedMs: p(i)
28
+ });
29
+ return /* @__PURE__ */ l(d, {
30
+ className: a,
31
+ announced: o,
32
+ shown: s
33
+ });
34
+ };
35
+ function p(e) {
36
+ let [t, l] = c(() => o(n, e)), u = o(t, e);
37
+ return u !== t && l(u), s(() => {
38
+ if (e) return a(() => l((e) => r(e)));
39
+ }, [e]), i(u);
40
+ }
41
+ //#endregion
42
+ export { d as VoiceStatusLine, f as VoiceStatusText };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The clock behind the voice status line's rotating phrase, as plain functions.
3
+ *
4
+ * ★★ Why this is not simply a hook. fe-libs tests run with no DOM and no React
5
+ * renderer, and static rendering runs no effects. A clock written inline in a
6
+ * component is exercised by nothing, so every way of breaking it — never
7
+ * starting, never resetting, never clearing — passes the whole suite (measured:
8
+ * seven such mutations survived before this split). Here the state rules are
9
+ * pure and the ticker runs under fake timers; the hook that joins them is a few
10
+ * lines, pinned by `voiceStatusWiring.test.ts`.
11
+ */
12
+ export interface RotationClock {
13
+ /** Whole rotation steps since the clock last became active. */
14
+ readonly steps: number;
15
+ readonly active: boolean;
16
+ }
17
+ export declare const IDLE_ROTATION_CLOCK: RotationClock;
18
+ /**
19
+ * Follow `active`, restarting from step 0 whenever it changes.
20
+ *
21
+ * ★ Returns the SAME object when nothing changed. The hook adjusts state during
22
+ * render only on a change of identity, so a fresh object here every call would
23
+ * be an infinite render loop.
24
+ */
25
+ export declare function syncRotationClock(clock: RotationClock, active: boolean): RotationClock;
26
+ /** One tick. A tick that lands after the clock went inactive is ignored. */
27
+ export declare function advanceRotationClock(clock: RotationClock): RotationClock;
28
+ export declare function rotationElapsedMs(clock: RotationClock): number;
29
+ /** Call `onTick` every `intervalMs` until the returned stop function runs. */
30
+ export declare function startRotationTicker(onTick: () => void, intervalMs?: number): () => void;
31
+ //# sourceMappingURL=rotationClock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotationClock.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/voice/rotationClock.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,mBAAmB,EAAE,aAA2C,CAAC;AAE9E;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,OAAO,GACd,aAAa,CAEf;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAExE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAE9D;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,IAAI,EAClB,UAAU,GAAE,MAAyB,GACpC,MAAM,IAAI,CAGZ"}
@@ -0,0 +1,27 @@
1
+ import { PHRASE_ROTATE_MS as e } from "../stageCopy.js";
2
+ //#region src/shared/assistant/voice/rotationClock.ts
3
+ var t = {
4
+ steps: 0,
5
+ active: !1
6
+ };
7
+ function n(e, t) {
8
+ return e.active === t ? e : {
9
+ steps: 0,
10
+ active: t
11
+ };
12
+ }
13
+ function r(e) {
14
+ return e.active ? {
15
+ steps: e.steps + 1,
16
+ active: !0
17
+ } : e;
18
+ }
19
+ function i(t) {
20
+ return t.active ? t.steps * e : 0;
21
+ }
22
+ function a(t, n = e) {
23
+ let r = setInterval(t, n);
24
+ return () => clearInterval(r);
25
+ }
26
+ //#endregion
27
+ export { t as IDLE_ROTATION_CLOCK, r as advanceRotationClock, i as rotationElapsedMs, a as startRotationTicker, n as syncRotationClock };
@@ -0,0 +1,81 @@
1
+ import { AssistantTr } from '../i18n';
2
+ import { StageCopyEntry } from '../stageCopy';
3
+ import { VoiceStageState } from './voiceStageState';
4
+ /** The voice session's own label for `thinking` — one definition for the session and the status line. */
5
+ export declare const VOICE_THINKING_LABEL: StageCopyEntry;
6
+ /** Reported alongside a stage while the microphone is off. */
7
+ export declare const VOICE_MUTED_LABEL: StageCopyEntry;
8
+ /**
9
+ * The muted suffix for the status line, or null.
10
+ *
11
+ * Muted is reported ALONGSIDE the stage, not instead of it: the assistant may
12
+ * still be speaking with the microphone off, and saying only "Microphone off"
13
+ * would misreport that.
14
+ *
15
+ * ★ Gated on the STAGE, not the phase. `connecting`, `endpoint-grace` and
16
+ * `interrupting` are all `phase === 'listening'` underneath, so a phase test
17
+ * dropped the suffix on exactly those three stages — leaving "Stopped — go
18
+ * ahead" inviting someone to speak into a muted microphone.
19
+ *
20
+ * ★ Not while `listening`: that stage's own label already IS "Microphone off"
21
+ * when muted, and a suffix would read "Microphone off · Microphone off".
22
+ *
23
+ * ★ Not for an empty label (ended, mic-error), which would otherwise render a
24
+ * bare " · Microphone off". And no `error !== null` arm: the error belongs to
25
+ * the stage's alert element, and testing it here once printed the whole
26
+ * sentence TWICE — truncated in the status line, repeated below it, and
27
+ * announced twice by a screen reader.
28
+ */
29
+ export declare function voiceStatusSuffix(args: {
30
+ tr: AssistantTr;
31
+ stage: VoiceStageState;
32
+ muted: boolean;
33
+ /** The stage's label, already localised. */
34
+ label: string;
35
+ }): string | null;
36
+ /** The full status: the stage label, then the suffix when there is one. */
37
+ export declare function composeVoiceStatus(label: string, suffix: string | null): string;
38
+ /**
39
+ * The status line, split into what is SHOWN and what is ANNOUNCED.
40
+ *
41
+ * ★★ Why two strings. The status line is a live region: a screen reader reads
42
+ * it aloud whenever its text changes. While the model is thinking, a sighted
43
+ * user is better served by a phrase that moves — a single frozen "Thinking…"
44
+ * for the length of a turn reads as a hang (see `THINKING_PHRASES`). Putting
45
+ * that rotation into the live region would announce a new filler word every
46
+ * `PHRASE_ROTATE_MS`. So the rotation is visual only, and the announced text
47
+ * changes only when the status genuinely does.
48
+ *
49
+ * ★ The first shown phrase is the voice session's OWN label, not the pool's
50
+ * opening entry: on entering `thinking`, sighted and screen-reader users get
51
+ * the same words.
52
+ *
53
+ * ★★ A pool phrase is shown only when it is in the SAME translation state as
54
+ * the voice label. The label (`voiceSession.*`) and the pool (`stage.*`) are
55
+ * separately seeded key families. With the label translated and the pool not,
56
+ * rotating would alternate the user's language with English — so the line holds
57
+ * on the translated label instead. When neither is translated, it rotates in
58
+ * English, like the rest of the untranslated interface.
59
+ *
60
+ * ★ A muted microphone stays on screen through the rotation.
61
+ *
62
+ * Pure in `elapsedMs` — the caller owns the clock — like `thinkingPhrase`.
63
+ */
64
+ export interface VoiceStatusParts {
65
+ /** For the live region. Changes only when the status does. */
66
+ readonly announced: string;
67
+ /** For the eye. Rotates while thinking; otherwise identical to `announced`. */
68
+ readonly shown: string;
69
+ }
70
+ export declare function voiceStatusParts(args: {
71
+ tr: AssistantTr;
72
+ /** The meaningful status, exactly as it should be announced. */
73
+ status: string;
74
+ /** Kept on the shown text while it rotates, e.g. "Microphone off". */
75
+ suffix: string | null;
76
+ /** True only while the assistant is thinking. */
77
+ rotating: boolean;
78
+ /** Time since rotation began. */
79
+ elapsedMs: number;
80
+ }): VoiceStatusParts;
81
+ //# sourceMappingURL=voiceStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voiceStatus.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/voice/voiceStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,yGAAyG;AACzG,eAAO,MAAM,oBAAoB,EAAE,cAGlC,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAE,cAG/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,EAAE,EAAE,WAAW,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,GAAG,IAAI,CAKhB;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAER;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,EAAE,EAAE,WAAW,CAAC;IAChB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iDAAiD;IACjD,QAAQ,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,gBAAgB,CAmBnB"}
@@ -0,0 +1,33 @@
1
+ import { THINKING_PHRASES as e, stageText as t, thinkingPhrase as n } from "../stageCopy.js";
2
+ //#region src/shared/assistant/voice/voiceStatus.ts
3
+ var r = {
4
+ key: "voiceSession.thinking",
5
+ fallback: "Thinking…"
6
+ }, i = {
7
+ key: "voiceSession.muted",
8
+ fallback: "Microphone off"
9
+ };
10
+ function a(e) {
11
+ let { tr: n, stage: r, muted: a, label: o } = e;
12
+ return a && r !== "listening" && o !== "" ? t(n, i) : null;
13
+ }
14
+ function o(e, t) {
15
+ return t ? `${e} · ${t}` : e;
16
+ }
17
+ var s = (e, t) => e(t.key, t.fallback) !== t.fallback;
18
+ function c(i) {
19
+ let { tr: a, status: c, suffix: l, rotating: u, elapsedMs: d } = i, f = {
20
+ announced: c,
21
+ shown: c
22
+ };
23
+ if (!u || c === "") return f;
24
+ let p = n(a, d);
25
+ if (p === n(a, 0)) return f;
26
+ let m = e.find((e) => t(a, e) === p);
27
+ return !m || s(a, m) !== s(a, r) ? f : {
28
+ announced: c,
29
+ shown: o(p, l)
30
+ };
31
+ }
32
+ //#endregion
33
+ export { i as VOICE_MUTED_LABEL, r as VOICE_THINKING_LABEL, o as composeVoiceStatus, c as voiceStatusParts, a as voiceStatusSuffix };
@@ -23,88 +23,91 @@ import { createHostedTtsEngine as it } from "./shared/assistant/speech/hostedTts
23
23
  import { createRoutingSpeechEngine as at } from "./shared/assistant/speech/routingSpeechEngine.js";
24
24
  import { configureSpeechEngine as ot, createSpeechEngines as st, getSpeechEngine as ct, readSpeechEngineConfig as lt, resetSpeechEngine as ut } from "./shared/assistant/speech/createSpeechEngine.js";
25
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, PROVIDER_READABLE_FILE_MEDIA_TYPES as ur, TURN_BODY_HEADROOM_BYTES as dr, buildAttachmentPromptBlock as fr, buildPromptParts as pr, buildPromptWithAttachments as mr, classifyAttachment as hr, countInlineImageCandidates as gr, countInlinedImageParts as _r, detectDocumentFormat as vr, estimateTurnBodyBytes as yr, formatBytes as br, getAttachmentSendBlocker as xr, getExtension as Sr, getSendableAttachments as Cr, hasAttachmentWorkInFlight as wr, isProviderReadableFilePart as Tr, parseDataUrl as Er, toMessageAttachment as Dr, truncateForInline as Or, validateFile as kr } from "./shared/assistant/attachments.js";
43
- import { useAssistantStore as Ar } from "./shared/assistant/store.js";
44
- import { isTurnInFlight as jr, planAbandonedTurn as Mr, planTurnAbort as Nr } from "./shared/assistant/turnState.js";
45
- import { PHRASE_ROTATE_MS as Pr, STAGE_COPY as Fr, THINKING_PHRASES as Ir, isStageCopy as Lr, stageText as Rr, statusStageCopy as zr, thinkingPhrase as Br } from "./shared/assistant/stageCopy.js";
46
- import { AssistantAvatar as Vr } from "./shared/assistant/ui/AssistantAvatar.js";
47
- import { AssistantToolActivity as Hr, parseToolActivity as Ur } from "./shared/assistant/ui/AssistantToolActivity.js";
48
- import { AssistantSpeechProvider as Wr, useAssistantSpeech as Gr } from "./shared/assistant/ui/AssistantSpeechProvider.js";
49
- import { useVoiceSession as Kr } from "./shared/assistant/ui/useVoiceSession.js";
50
- import { getActorId as qr, getOrganizationId as Jr, getWorkspaceId as Yr } from "./shared/assistant/context.js";
51
- import { ATTACHMENT_SOURCES as Xr, availableAttachmentSources as Zr, deviceHasCamera as Qr } from "./shared/assistant/attachmentSources.js";
52
- import { SANDBOX_READY_TTL_MS as $r, createReadinessTracker as ei, isRecentlyVerified as ti } from "./shared/assistant/sandboxReadiness.js";
53
- import { AssistantAutoSpeakToggle as ni } from "./shared/assistant/ui/AssistantAutoSpeakToggle.js";
54
- import { AssistantMessageAttachments as ri } from "./shared/assistant/ui/AssistantMessageAttachments.js";
55
- import { AssistantPendingWriteCard as ii } from "./shared/assistant/ui/AssistantPendingWriteCard.js";
56
- import { AssistantLanguageMenu as ai } from "./shared/assistant/ui/AssistantLanguageMenu.js";
57
- import { AssistantReplyLanguageSelector as oi } from "./shared/assistant/ui/AssistantReplyLanguageSelector.js";
58
- import { AssistantSpeakButton as si } from "./shared/assistant/ui/AssistantSpeakButton.js";
59
- import { AssistantSpokenTurnsNotice as ci } from "./shared/assistant/ui/AssistantSpokenTurnsNotice.js";
60
- import { AssistantConnectSourceProvider as li, useAssistantConnectSource as ui } from "./shared/assistant/ui/composer/connectSource.js";
61
- import { AssistantConnectSourceItem as di } from "./shared/assistant/ui/composer/AssistantConnectSourceItem.js";
62
- import { ASSISTANT_OVERLAY_ATTR as fi, ASSISTANT_PANEL_ATTR as pi, NO_PANEL_OVERLAY as mi, activePanelOverlay as hi, assistantPanelOwnsEscape as gi, escapeDismisses as _i, focusIsInsidePanel as vi, nextPanelOverlays as yi, panelOwnsEscape as bi } from "./shared/assistant/ui/panelOverlays.js";
63
- import { useDropdownEscape as xi } from "./shared/assistant/ui/useDropdownEscape.js";
64
- import { AssistantAttachmentButton as Si } from "./shared/assistant/ui/composer/AssistantAttachmentButton.js";
65
- import { AssistantAttachmentChips as Ci } from "./shared/assistant/ui/composer/AssistantAttachmentChips.js";
66
- import { AssistantPreviewProvider as wi, useAssistantPreview as Ti } from "./shared/assistant/preview/context.js";
67
- import { IDLE_PREVIEW_STATE as Ei, isRunningStatus as Di, nextPreviewEvents as Oi } from "./shared/assistant/preview/previewTransitions.js";
68
- import { IDLE_PREVIEW as ki, NO_OWNER as Ai, applyPreviewEvent as ji, createAssistantPreviewSurface as Mi, currentPreviewOwner as Ni, runBelongsTo as Pi, sameOwner as Fi } from "./shared/assistant/preview/surfaceState.js";
69
- import { createRunIdentityCache as Ii, runIdentities as Li } from "./shared/assistant/preview/runIdentity.js";
70
- import { IDLE_ACTIVE_TAB as Ri, nextActiveTab as zi, pinActiveTab as Bi, shouldPinOnMove as Vi, shouldPinOnSelect as Hi, stepsFromToolActivity as Ui, tabForArrowKey as Wi } from "./shared/assistant/preview/entity/entityPreviewState.js";
71
- import { AssistantStepRail as Gi } from "./shared/assistant/preview/entity/AssistantStepRail.js";
72
- import { AssistantEntityPreview as Ki } from "./shared/assistant/preview/entity/AssistantEntityPreview.js";
73
- import { useOverlayFocus as qi } from "./shared/assistant/ui/useOverlayFocus.js";
74
- import { useAssistantPreviewBridge as Ji } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
75
- import { AssistantPreviewOverlay as Yi } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
76
- import { AssistantLanguageSelector as Xi, FOLLOW_APP_LOCALE as Zi } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
77
- import { ASSISTANT_MODE_META as Qi, AssistantModeSelector as $i, nextModeIndex as ea } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
78
- import { AssistantVoiceButton as ta } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
79
- import { AUTO_VOICE as na, AssistantVoiceSelector as ra } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
80
- import { AssistantVoiceOrb as ia } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
81
- import { AssistantVoiceSessionButton as aa } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
82
- import { CAPTION_SCROLL_ATTR as oa, VoiceCaption as sa } from "./shared/assistant/ui/voice/VoiceCaption.js";
83
- import { VoiceConversationView as ca } from "./shared/assistant/ui/voice/VoiceConversationView.js";
84
- import { VoiceWaveform as la } from "./shared/assistant/ui/voice/VoiceWaveform.js";
85
- import { VoiceMiniController as ua } from "./shared/assistant/ui/voice/VoiceMiniController.js";
86
- import { VoiceStage as da } from "./shared/assistant/ui/voice/VoiceStage.js";
87
- import { VoiceTranscriptDrawer as fa } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
88
- import { downloadFile as pa, exportConversation as ma } from "./shared/assistant/exportConversation.js";
89
- import { AssistantMoreMenu as ha } from "./shared/assistant/ui/AssistantMoreMenu.js";
90
- import { AssistantHeader as ga } from "./shared/assistant/ui/AssistantHeader.js";
91
- import { AssistantConversationList as _a } from "./shared/assistant/ui/AssistantConversationList.js";
92
- import { AssistantEmptyState as va } from "./shared/assistant/ui/AssistantEmptyState.js";
93
- import { AssistantMessageItem as ya } from "./shared/assistant/ui/AssistantMessageItem.js";
94
- import { AssistantMessageList as ba } from "./shared/assistant/ui/AssistantMessageList.js";
95
- import { AssistantVoiceSession as xa } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
96
- import { useAssistantApiAccess as Sa } from "./shared/assistant/useAssistantApiAccess.js";
97
- import { useConversationTurns as Ca } from "./shared/assistant/useConversationTurns.js";
98
- import { isMultimodalBodyRejection as wa, isRecoverableAssistantError as Ta } from "./shared/assistant/transportErrors.js";
99
- import { aiCreditsUpdatedEventName as Ea, dispatchAssistantQuotaExhausted as Da, notifyAiCreditsUpdated as Oa } from "./shared/assistant/aiCredits.js";
100
- import { useWorkspaceWriteAccess as ka } from "./shared/assistant/useWorkspaceWriteAccess.js";
101
- import { extractDocumentText as Aa } from "./shared/assistant/documentExtract.js";
102
- import { useAssistantAttachments as ja } from "./shared/assistant/useAssistantAttachments.js";
103
- import { AssistantComposer as Ma } from "./shared/assistant/ui/composer/AssistantComposer.js";
104
- import { isProdRuntime as Na } from "./shared/assistant/env.js";
105
- import { useAssistantHeartbeat as Pa } from "./shared/assistant/useAssistantHeartbeat.js";
106
- import { useAssistantKeyboardShortcuts as Fa } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
107
- import { AssistantApiCallsConsentDialog as Ia } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
108
- import { AssistantChatArea as La } from "./shared/assistant/ui/AssistantChatArea.js";
109
- import { AIAssistantPanel as Ra } from "./shared/assistant/ui/AIAssistantPanel.js";
110
- export { Ra as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, fn as ASSISTANT_LANGUAGES, Qi as ASSISTANT_MODE_META, fi as ASSISTANT_OVERLAY_ATTR, pi as ASSISTANT_PANEL_ATTR, Zn as ATTACHMENT_ACCEPT, Xr as ATTACHMENT_SOURCES, na as AUTO_VOICE, Ia as AssistantApiCallsConsentDialog, Si as AssistantAttachmentButton, Ci as AssistantAttachmentChips, ni as AssistantAutoSpeakToggle, Vr as AssistantAvatar, La as AssistantChatArea, Ma as AssistantComposer, di as AssistantConnectSourceItem, li as AssistantConnectSourceProvider, _a as AssistantConversationList, va as AssistantEmptyState, Ki as AssistantEntityPreview, ga as AssistantHeader, s as AssistantI18nProvider, ai as AssistantLanguageMenu, Xi as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, ri as AssistantMessageAttachments, ya as AssistantMessageItem, ba as AssistantMessageList, $i as AssistantModeSelector, ha as AssistantMoreMenu, g as AssistantNavigateProvider, ii as AssistantPendingWriteCard, Yi as AssistantPreviewOverlay, wi as AssistantPreviewProvider, t as AssistantProductProvider, oi as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, si as AssistantSpeakButton, Wr as AssistantSpeechProvider, ci as AssistantSpokenTurnsNotice, Gi as AssistantStepRail, Hr as AssistantToolActivity, ta as AssistantVoiceButton, ia as AssistantVoiceOrb, ra as AssistantVoiceSelector, xa as AssistantVoiceSession, aa as AssistantVoiceSessionButton, Qn as AttachmentRejectedError, jn as BOILERPLATE_PAGE_SHARE, oa 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, Zi 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, Ri as IDLE_ACTIVE_TAB, wn as IDLE_PLAYBACK, ki as IDLE_PREVIEW, Ei 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, Ai as NO_OWNER, mi as NO_PANEL_OVERLAY, Pr 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, ur as PROVIDER_READABLE_FILE_MEDIA_TYPES, N as PROXY_SANDBOX_REQUEST, P as REPORT_AI_TOKEN_USAGE, $r 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, Fr as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, je as STREAM_BUDGET_MS, Ir as THINKING_PHRASES, dr as TURN_BODY_HEADROOM_BYTES, At as VOICE_LIST_TIMEOUT_MS, sa as VoiceCaption, ca as VoiceConversationView, ua as VoiceMiniController, da as VoiceStage, fa as VoiceTranscriptDrawer, la as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, hi as activePanelOverlay, Ea as aiCreditsUpdatedEventName, ji as applyPreviewEvent, J as approvePendingWrite, gi as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Zr as availableAttachmentSources, Qe as base64ToBytes, y as browserShouldHandle, He as browserSpeechEngine, Y as buildAssistantSandboxEnv, fr as buildAttachmentPromptBlock, Vt as buildContinuedFromVoiceNote, ve as buildProgress, pr as buildPromptParts, X as buildPromptRequestBody, mr as buildPromptWithAttachments, $e as buildRequest, E as buildSandboxContextInput, Ht as buildVoiceTranscriptMarkdown, Fe as chatTurns, Z as checkAssistantAiCredits, Yt as chunkForSpeech, b as classifyAssistantHref, hr as classifyAttachment, et as classifyHttpFailure, S as classifyQuotaError, Ln as columnLetterToIndex, ot as configureSpeechEngine, Xt as containsCjk, d as copyToClipboard, gr as countInlineImageCandidates, _r as countInlinedImageParts, Mi as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, it as createHostedTtsEngine, ei as createReadinessTracker, at as createRoutingSpeechEngine, Ii as createRunIdentityCache, Oe as createSandboxAssistantTransport, st as createSpeechEngines, Ni as currentPreviewOwner, tt as decodeAudioResponse, Rn as decodeXmlEntities, C as describeQuotaError, vr as detectDocumentFormat, Sn as detectScriptLocale, Qr as deviceHasCamera, Da as dispatchAssistantQuotaExhausted, zn as docxXmlToText, ee as downloadAssistantArtifact, pa as downloadFile, _i as escapeDismisses, yr as estimateTurnBodyBytes, D as executeSandboxGraphQL, ma as exportConversation, te as extendAssistantSandboxTTL, Aa as extractDocumentText, mn as findAssistantLanguage, ne as findExistingSandbox, vn as findPendingWrite, Bn as fitPdfPages, vi as focusIsInsidePanel, br as formatBytes, Vn as formatPageRanges, qr as getActorId, re as getAssistantArtifacts, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, xr as getAttachmentSendBlocker, U as getCapability, Sr as getExtension, R as getImageForMode, z as getImageTagForMode, Jr as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, Cr as getSendableAttachments, ct as getSpeechEngine, Se as getToolProgress, Yr as getWorkspaceId, Ie as groupBySession, Le as groupConsecutiveBySession, wr as hasAttachmentWorkInFlight, Ge as hostedLocaleFor, Ke as hostedSupportsLanguage, p as imageHostLabel, Me as incompleteTurnNotice, St as isCapturing, Ct as isEcho, Hn as isMostlyImagePages, wa as isMultimodalBodyRejection, Na as isProdRuntime, Tr as isProviderReadableFilePart, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, ti as isRecentlyVerified, we as isRecoverable, Ta as isRecoverableAssistantError, m as isRemoteImageSrc, Di as isRunningStatus, Tn as isSpeakingMessage, jt as isSpeechBlocked, Lr as isStageCopy, wt as isSubmittable, jr 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, zi as nextActiveTab, ea as nextModeIndex, yi as nextPanelOverlays, Oi as nextPreviewEvents, Nt as normalizeLangTag, Oa as notifyAiCreditsUpdated, Tt as orbMode, Wn as pageMarker, bi as panelOwnsEscape, yn as parseConfirmationRefusal, Er as parseDataUrl, Gn as parseSharedStrings, Ur as parseToolActivity, Kn as parseWorkbookSheets, qn as pdfTextItemsToPage, Bi as pinActiveTab, Mr as planAbandonedTurn, Et as planReplyConsumption, Nr 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, Pi as runBelongsTo, Li as runIdentities, Fi 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, Vi as shouldPinOnMove, Hi 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, Rr as stageText, zr as statusStageCopy, Ui as stepsFromToolActivity, me as stopReapedAssistantSandbox, Ne as streamBudgetMs, Yn as summarisePageText, Wi as tabForArrowKey, Br as thinkingPhrase, dn as toCaptionText, Dr as toMessageAttachment, $t as toSpeakableText, Or as truncateForInline, Xn as truncatePagesForInline, Sa as useAssistantApiAccess, ja as useAssistantAttachments, ui as useAssistantConnectSource, Pa as useAssistantHeartbeat, l as useAssistantI18nNamespace, Fa as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, Ti as useAssistantPreview, Ji as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, Gr as useAssistantSpeech, o as useAssistantStorageFolders, Ar as useAssistantStore, u as useAssistantTr, Ca as useConversationTurns, xi as useDropdownEscape, qi as useOverlayFocus, ke as useSandboxAssistantTransport, e as useVoiceInput, Kr as useVoiceSession, ka as useWorkspaceWriteAccess, kr 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 };
26
+ import { PHRASE_ROTATE_MS as _t, STAGE_COPY as vt, THINKING_PHRASES as yt, isStageCopy as bt, stageText as xt, statusStageCopy as St, thinkingPhrase as Ct } from "./shared/assistant/stageCopy.js";
27
+ import { VOICE_MUTED_LABEL as wt, VOICE_THINKING_LABEL as Tt, composeVoiceStatus as Et, voiceStatusParts as Dt, voiceStatusSuffix as Ot } from "./shared/assistant/voice/voiceStatus.js";
28
+ import { IDLE_ROTATION_CLOCK as kt, advanceRotationClock as At, rotationElapsedMs as jt, startRotationTicker as Mt, syncRotationClock as Nt } from "./shared/assistant/voice/rotationClock.js";
29
+ import { ENDPOINT_GRACE_MS as Pt, INITIAL_SESSION as Ft, INTERRUPT_MAX_MS as It, INTERRUPT_MIN_MS as Lt, SILENCE_SUBMIT_MS as Rt, isCapturing as zt, isEcho as Bt, isSubmittable as Vt, orbMode as Ht, planReplyConsumption as Ut, spokenSoFar as Wt, voiceSessionReducer as Gt } from "./shared/assistant/voice/voiceSession.js";
30
+ import { SPEECH_LANG as Kt, VOICE_LIST_TIMEOUT_MS as qt, isSpeechBlocked as Jt, languageDisplayName as Yt, normalizeLangTag as Xt, primaryLanguageSubtag as Zt, selectVoiceForLocale as Qt, speechGate as $t, speechLangForLocale as en, voiceAvailability as tn, voiceQualityRank as nn, voicesForLocale as rn } from "./shared/assistant/voice/speechVoices.js";
31
+ import { buildContinuedFromVoiceNote as an, buildVoiceTranscriptMarkdown as on, voiceTranscriptFilename as sn } from "./shared/assistant/voice/voiceTranscript.js";
32
+ import { DEFAULT_SPEAKABLE_LABELS as cn, MAX_SPEAKABLE_CHARS as ln, MAX_SPOKEN_TABLE_ROWS as un, SPEECH_CHUNK_CHARS as dn, SPEECH_CHUNK_CJK_CHARS as fn, chunkForSpeech as pn, containsCjk as mn, speakableEmail as hn, splitTableRow as gn, toSpeakableText as _n } from "./shared/assistant/voice/speakableText.js";
33
+ import { PREVIEW_LANGUAGES as vn, voicePreviewText as yn } from "./shared/assistant/voice/voicePreview.js";
34
+ import { MINI_CAPTION_BUDGET as bn, showPreviousChunk as xn } from "./shared/assistant/voice/miniCaptionBudget.js";
35
+ import { POLL_FAST_MS as Sn, POLL_FAST_UNTIL_MS as Cn, POLL_SLOW_MS as wn, POLL_STEADY_MS as Tn, POLL_STEADY_UNTIL_MS as En, pollDelayMs as Dn } from "./shared/assistant/voice/assistantPollSchedule.js";
36
+ import { toCaptionText as On } from "./shared/assistant/voice/captionText.js";
37
+ import { ASSISTANT_LANGUAGES as kn, DEFAULT_SPEECH_RATE as An, findAssistantLanguage as jn, resolveAssistantLanguage as Mn } from "./shared/assistant/voice/languages.js";
38
+ import { replyFollowsInput as Nn, resolveLanguagePair as Pn } from "./shared/assistant/voice/languagePair.js";
39
+ import { findPendingWrite as Fn, parseConfirmationRefusal as In } from "./shared/assistant/pendingWrite.js";
40
+ import { SPOKEN_LABEL_LANGUAGES as Ln, speechLabelsFor as Rn } from "./shared/assistant/voice/speechLabels.js";
41
+ import { detectScriptLocale as zn, resolveSpeechLocale as Bn } from "./shared/assistant/voice/replyLanguage.js";
42
+ import { IDLE_PLAYBACK as Vn, isSpeakingMessage as Hn, publishedChunks as Un, requiresCancel as Wn, speechPlaybackReducer as Gn } from "./shared/assistant/voice/speechPlayback.js";
43
+ import { MAX_INLINE_IMAGE_BASE64_BYTES as Kn, MAX_REQUEST_BODY_BYTES as qn } from "./shared/assistant/gatewayLimits.js";
44
+ import { BOILERPLATE_PAGE_SHARE as Jn, MAX_BOILERPLATE_LINE_CHARS as Yn, MAX_EXTRACTED_CHARS as Xn, MAX_PDF_PAGES_SCANNED as Zn, MIN_PAGE_TEXT_CHARS as Qn, MIN_TEXT_PAGE_SHARE as $n, columnLetterToIndex as er, decodeXmlEntities as tr, docxXmlToText as nr, fitPdfPages as rr, formatPageRanges as ir, isMostlyImagePages as ar, joinSheets as or, pageMarker as sr, parseSharedStrings as cr, parseWorkbookSheets as lr, pdfTextItemsToPage as ur, sheetXmlToRows as dr, summarisePageText as fr, truncatePagesForInline as pr } from "./shared/assistant/documentText.js";
45
+ import { ATTACHMENT_ACCEPT as mr, AttachmentRejectedError as hr, INLINE_IMAGE_MAX_DIM as gr, INLINE_IMAGE_QUALITY as _r, MAX_ATTACHMENTS as vr, MAX_FILE_BYTES as yr, MAX_INLINE_CHARS_PER_FILE as br, MAX_INLINE_CHARS_TOTAL as xr, MAX_INLINE_IMAGE_BASE64_CHARS as Sr, MAX_INLINE_IMAGE_PARTS as Cr, MAX_INLINE_TURN_BODY_BYTES as wr, MAX_TURN_BODY_BYTES as Tr, PROMPT_ENVELOPE_RESERVE_BYTES as Er, PROVIDER_READABLE_FILE_MEDIA_TYPES as Dr, TURN_BODY_HEADROOM_BYTES as Or, buildAttachmentPromptBlock as kr, buildPromptParts as Ar, buildPromptWithAttachments as jr, classifyAttachment as Mr, countInlineImageCandidates as Nr, countInlinedImageParts as Pr, detectDocumentFormat as Fr, estimateTurnBodyBytes as Ir, formatBytes as Lr, getAttachmentSendBlocker as Rr, getExtension as zr, getSendableAttachments as Br, hasAttachmentWorkInFlight as Vr, isProviderReadableFilePart as Hr, parseDataUrl as Ur, toMessageAttachment as Wr, truncateForInline as Gr, validateFile as Kr } from "./shared/assistant/attachments.js";
46
+ import { useAssistantStore as qr } from "./shared/assistant/store.js";
47
+ import { isTurnInFlight as Jr, planAbandonedTurn as Yr, planTurnAbort as Xr } from "./shared/assistant/turnState.js";
48
+ import { AssistantAvatar as Zr } from "./shared/assistant/ui/AssistantAvatar.js";
49
+ import { AssistantToolActivity as Qr, parseToolActivity as $r } from "./shared/assistant/ui/AssistantToolActivity.js";
50
+ import { AssistantSpeechProvider as ei, useAssistantSpeech as ti } from "./shared/assistant/ui/AssistantSpeechProvider.js";
51
+ import { useVoiceSession as ni } from "./shared/assistant/ui/useVoiceSession.js";
52
+ import { getActorId as ri, getOrganizationId as ii, getWorkspaceId as ai } from "./shared/assistant/context.js";
53
+ import { ATTACHMENT_SOURCES as oi, availableAttachmentSources as si, deviceHasCamera as ci } from "./shared/assistant/attachmentSources.js";
54
+ import { SANDBOX_READY_TTL_MS as li, createReadinessTracker as ui, isRecentlyVerified as di } from "./shared/assistant/sandboxReadiness.js";
55
+ import { AssistantAutoSpeakToggle as fi } from "./shared/assistant/ui/AssistantAutoSpeakToggle.js";
56
+ import { AssistantMessageAttachments as pi } from "./shared/assistant/ui/AssistantMessageAttachments.js";
57
+ import { AssistantPendingWriteCard as mi } from "./shared/assistant/ui/AssistantPendingWriteCard.js";
58
+ import { AssistantLanguageMenu as hi } from "./shared/assistant/ui/AssistantLanguageMenu.js";
59
+ import { AssistantReplyLanguageSelector as gi } from "./shared/assistant/ui/AssistantReplyLanguageSelector.js";
60
+ import { AssistantSpeakButton as _i } from "./shared/assistant/ui/AssistantSpeakButton.js";
61
+ import { AssistantSpokenTurnsNotice as vi } from "./shared/assistant/ui/AssistantSpokenTurnsNotice.js";
62
+ import { AssistantConnectSourceProvider as yi, useAssistantConnectSource as bi } from "./shared/assistant/ui/composer/connectSource.js";
63
+ import { AssistantConnectSourceItem as xi } from "./shared/assistant/ui/composer/AssistantConnectSourceItem.js";
64
+ import { ASSISTANT_OVERLAY_ATTR as Si, ASSISTANT_PANEL_ATTR as Ci, NO_PANEL_OVERLAY as wi, activePanelOverlay as Ti, assistantPanelOwnsEscape as Ei, escapeDismisses as Di, focusIsInsidePanel as Oi, nextPanelOverlays as ki, panelOwnsEscape as Ai } from "./shared/assistant/ui/panelOverlays.js";
65
+ import { useDropdownEscape as ji } from "./shared/assistant/ui/useDropdownEscape.js";
66
+ import { AssistantAttachmentButton as Mi } from "./shared/assistant/ui/composer/AssistantAttachmentButton.js";
67
+ import { AssistantAttachmentChips as Ni } from "./shared/assistant/ui/composer/AssistantAttachmentChips.js";
68
+ import { AssistantPreviewProvider as Pi, useAssistantPreview as Fi } from "./shared/assistant/preview/context.js";
69
+ import { IDLE_PREVIEW_STATE as Ii, isRunningStatus as Li, nextPreviewEvents as Ri } from "./shared/assistant/preview/previewTransitions.js";
70
+ import { IDLE_PREVIEW as zi, NO_OWNER as Bi, applyPreviewEvent as Vi, createAssistantPreviewSurface as Hi, currentPreviewOwner as Ui, runBelongsTo as Wi, sameOwner as Gi } from "./shared/assistant/preview/surfaceState.js";
71
+ import { createRunIdentityCache as Ki, runIdentities as qi } from "./shared/assistant/preview/runIdentity.js";
72
+ import { IDLE_ACTIVE_TAB as Ji, nextActiveTab as Yi, pinActiveTab as Xi, shouldPinOnMove as Zi, shouldPinOnSelect as Qi, stepsFromToolActivity as $i, tabForArrowKey as ea } from "./shared/assistant/preview/entity/entityPreviewState.js";
73
+ import { AssistantStepRail as ta } from "./shared/assistant/preview/entity/AssistantStepRail.js";
74
+ import { AssistantEntityPreview as na } from "./shared/assistant/preview/entity/AssistantEntityPreview.js";
75
+ import { useOverlayFocus as ra } from "./shared/assistant/ui/useOverlayFocus.js";
76
+ import { useAssistantPreviewBridge as ia } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
77
+ import { AssistantPreviewOverlay as aa } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
78
+ import { AssistantLanguageSelector as oa, FOLLOW_APP_LOCALE as sa } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
79
+ import { ASSISTANT_MODE_META as ca, AssistantModeSelector as la, nextModeIndex as ua } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
80
+ import { AssistantVoiceButton as da } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
81
+ import { AUTO_VOICE as fa, AssistantVoiceSelector as pa } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
82
+ import { AssistantVoiceOrb as ma } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
83
+ import { AssistantVoiceSessionButton as ha } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
84
+ import { CAPTION_SCROLL_ATTR as ga, VoiceCaption as _a } from "./shared/assistant/ui/voice/VoiceCaption.js";
85
+ import { VoiceConversationView as va } from "./shared/assistant/ui/voice/VoiceConversationView.js";
86
+ import { VoiceWaveform as ya } from "./shared/assistant/ui/voice/VoiceWaveform.js";
87
+ import { VoiceStatusLine as ba, VoiceStatusText as xa } from "./shared/assistant/ui/voice/VoiceStatusText.js";
88
+ import { VoiceMiniController as Sa } from "./shared/assistant/ui/voice/VoiceMiniController.js";
89
+ import { VoiceStage as Ca } from "./shared/assistant/ui/voice/VoiceStage.js";
90
+ import { VoiceTranscriptDrawer as wa } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
91
+ import { downloadFile as Ta, exportConversation as Ea } from "./shared/assistant/exportConversation.js";
92
+ import { AssistantMoreMenu as Da } from "./shared/assistant/ui/AssistantMoreMenu.js";
93
+ import { AssistantHeader as Oa } from "./shared/assistant/ui/AssistantHeader.js";
94
+ import { AssistantConversationList as ka } from "./shared/assistant/ui/AssistantConversationList.js";
95
+ import { AssistantEmptyState as Aa } from "./shared/assistant/ui/AssistantEmptyState.js";
96
+ import { AssistantMessageItem as ja } from "./shared/assistant/ui/AssistantMessageItem.js";
97
+ import { AssistantMessageList as Ma } from "./shared/assistant/ui/AssistantMessageList.js";
98
+ import { AssistantVoiceSession as Na } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
99
+ import { useAssistantApiAccess as Pa } from "./shared/assistant/useAssistantApiAccess.js";
100
+ import { useConversationTurns as Fa } from "./shared/assistant/useConversationTurns.js";
101
+ import { isMultimodalBodyRejection as Ia, isRecoverableAssistantError as La } from "./shared/assistant/transportErrors.js";
102
+ import { aiCreditsUpdatedEventName as Ra, dispatchAssistantQuotaExhausted as za, notifyAiCreditsUpdated as Ba } from "./shared/assistant/aiCredits.js";
103
+ import { useWorkspaceWriteAccess as Va } from "./shared/assistant/useWorkspaceWriteAccess.js";
104
+ import { extractDocumentText as Ha } from "./shared/assistant/documentExtract.js";
105
+ import { useAssistantAttachments as Ua } from "./shared/assistant/useAssistantAttachments.js";
106
+ import { AssistantComposer as Wa } from "./shared/assistant/ui/composer/AssistantComposer.js";
107
+ import { isProdRuntime as Ga } from "./shared/assistant/env.js";
108
+ import { useAssistantHeartbeat as Ka } from "./shared/assistant/useAssistantHeartbeat.js";
109
+ import { useAssistantKeyboardShortcuts as qa } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
110
+ import { AssistantApiCallsConsentDialog as Ja } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
111
+ import { AssistantChatArea as Ya } from "./shared/assistant/ui/AssistantChatArea.js";
112
+ import { AIAssistantPanel as Xa } from "./shared/assistant/ui/AIAssistantPanel.js";
113
+ export { Xa as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, kn as ASSISTANT_LANGUAGES, ca as ASSISTANT_MODE_META, Si as ASSISTANT_OVERLAY_ATTR, Ci as ASSISTANT_PANEL_ATTR, mr as ATTACHMENT_ACCEPT, oi as ATTACHMENT_SOURCES, fa as AUTO_VOICE, Ja as AssistantApiCallsConsentDialog, Mi as AssistantAttachmentButton, Ni as AssistantAttachmentChips, fi as AssistantAutoSpeakToggle, Zr as AssistantAvatar, Ya as AssistantChatArea, Wa as AssistantComposer, xi as AssistantConnectSourceItem, yi as AssistantConnectSourceProvider, ka as AssistantConversationList, Aa as AssistantEmptyState, na as AssistantEntityPreview, Oa as AssistantHeader, s as AssistantI18nProvider, hi as AssistantLanguageMenu, oa as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, pi as AssistantMessageAttachments, ja as AssistantMessageItem, Ma as AssistantMessageList, la as AssistantModeSelector, Da as AssistantMoreMenu, g as AssistantNavigateProvider, mi as AssistantPendingWriteCard, aa as AssistantPreviewOverlay, Pi as AssistantPreviewProvider, t as AssistantProductProvider, gi as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, _i as AssistantSpeakButton, ei as AssistantSpeechProvider, vi as AssistantSpokenTurnsNotice, ta as AssistantStepRail, Qr as AssistantToolActivity, da as AssistantVoiceButton, ma as AssistantVoiceOrb, pa as AssistantVoiceSelector, Na as AssistantVoiceSession, ha as AssistantVoiceSessionButton, hr as AttachmentRejectedError, Jn as BOILERPLATE_PAGE_SHARE, ga as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, cn as DEFAULT_SPEAKABLE_LABELS, An as DEFAULT_SPEECH_RATE, Ae as DEFAULT_STREAM_BUDGET_MS, Pt as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, sa 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, Ji as IDLE_ACTIVE_TAB, Vn as IDLE_PLAYBACK, zi as IDLE_PREVIEW, Ii as IDLE_PREVIEW_STATE, kt as IDLE_ROTATION_CLOCK, Ft as INITIAL_SESSION, gr as INLINE_IMAGE_MAX_DIM, _r as INLINE_IMAGE_QUALITY, It as INTERRUPT_MAX_MS, Lt as INTERRUPT_MIN_MS, vr as MAX_ATTACHMENTS, Yn as MAX_BOILERPLATE_LINE_CHARS, Xn as MAX_EXTRACTED_CHARS, yr as MAX_FILE_BYTES, br as MAX_INLINE_CHARS_PER_FILE, xr as MAX_INLINE_CHARS_TOTAL, Kn as MAX_INLINE_IMAGE_BASE64_BYTES, Sr as MAX_INLINE_IMAGE_BASE64_CHARS, Cr as MAX_INLINE_IMAGE_PARTS, wr as MAX_INLINE_TURN_BODY_BYTES, Zn as MAX_PDF_PAGES_SCANNED, qn as MAX_REQUEST_BODY_BYTES, ln as MAX_SPEAKABLE_CHARS, un as MAX_SPOKEN_TABLE_ROWS, Tr as MAX_TURN_BODY_BYTES, bn as MINI_CAPTION_BUDGET, Qn as MIN_PAGE_TEXT_CHARS, $n as MIN_TEXT_PAGE_SHARE, Bi as NO_OWNER, wi as NO_PANEL_OVERLAY, _t as PHRASE_ROTATE_MS, Sn as POLL_FAST_MS, Cn as POLL_FAST_UNTIL_MS, wn as POLL_SLOW_MS, Tn as POLL_STEADY_MS, En as POLL_STEADY_UNTIL_MS, vn as PREVIEW_LANGUAGES, Er as PROMPT_ENVELOPE_RESERVE_BYTES, Dr as PROVIDER_READABLE_FILE_MEDIA_TYPES, N as PROXY_SANDBOX_REQUEST, P as REPORT_AI_TOKEN_USAGE, li as SANDBOX_READY_TTL_MS, Rt 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, dn as SPEECH_CHUNK_CHARS, fn as SPEECH_CHUNK_CJK_CHARS, Kt as SPEECH_LANG, Ln as SPOKEN_LABEL_LANGUAGES, vt as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, je as STREAM_BUDGET_MS, yt as THINKING_PHRASES, Or as TURN_BODY_HEADROOM_BYTES, qt as VOICE_LIST_TIMEOUT_MS, wt as VOICE_MUTED_LABEL, Tt as VOICE_THINKING_LABEL, _a as VoiceCaption, va as VoiceConversationView, Sa as VoiceMiniController, Ca as VoiceStage, ba as VoiceStatusLine, xa as VoiceStatusText, wa as VoiceTranscriptDrawer, ya as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, Ti as activePanelOverlay, At as advanceRotationClock, Ra as aiCreditsUpdatedEventName, Vi as applyPreviewEvent, J as approvePendingWrite, Ei as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, si as availableAttachmentSources, Qe as base64ToBytes, y as browserShouldHandle, He as browserSpeechEngine, Y as buildAssistantSandboxEnv, kr as buildAttachmentPromptBlock, an as buildContinuedFromVoiceNote, ve as buildProgress, Ar as buildPromptParts, X as buildPromptRequestBody, jr as buildPromptWithAttachments, $e as buildRequest, E as buildSandboxContextInput, on as buildVoiceTranscriptMarkdown, Fe as chatTurns, Z as checkAssistantAiCredits, pn as chunkForSpeech, b as classifyAssistantHref, Mr as classifyAttachment, et as classifyHttpFailure, S as classifyQuotaError, er as columnLetterToIndex, Et as composeVoiceStatus, ot as configureSpeechEngine, mn as containsCjk, d as copyToClipboard, Nr as countInlineImageCandidates, Pr as countInlinedImageParts, Hi as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, it as createHostedTtsEngine, ui as createReadinessTracker, at as createRoutingSpeechEngine, Ki as createRunIdentityCache, Oe as createSandboxAssistantTransport, st as createSpeechEngines, Ui as currentPreviewOwner, tt as decodeAudioResponse, tr as decodeXmlEntities, C as describeQuotaError, Fr as detectDocumentFormat, zn as detectScriptLocale, ci as deviceHasCamera, za as dispatchAssistantQuotaExhausted, nr as docxXmlToText, ee as downloadAssistantArtifact, Ta as downloadFile, Di as escapeDismisses, Ir as estimateTurnBodyBytes, D as executeSandboxGraphQL, Ea as exportConversation, te as extendAssistantSandboxTTL, Ha as extractDocumentText, jn as findAssistantLanguage, ne as findExistingSandbox, Fn as findPendingWrite, rr as fitPdfPages, Oi as focusIsInsidePanel, Lr as formatBytes, ir as formatPageRanges, ri as getActorId, re as getAssistantArtifacts, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, Rr as getAttachmentSendBlocker, U as getCapability, zr as getExtension, R as getImageForMode, z as getImageTagForMode, ii as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, Br as getSendableAttachments, ct as getSpeechEngine, Se as getToolProgress, ai as getWorkspaceId, Ie as groupBySession, Le as groupConsecutiveBySession, Vr as hasAttachmentWorkInFlight, Ge as hostedLocaleFor, Ke as hostedSupportsLanguage, p as imageHostLabel, Me as incompleteTurnNotice, zt as isCapturing, Bt as isEcho, ar as isMostlyImagePages, Ia as isMultimodalBodyRejection, Ga as isProdRuntime, Hr as isProviderReadableFilePart, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, di as isRecentlyVerified, we as isRecoverable, La as isRecoverableAssistantError, m as isRemoteImageSrc, Li as isRunningStatus, Hn as isSpeakingMessage, Jt as isSpeechBlocked, bt as isStageCopy, Vt as isSubmittable, Jr as isTurnInFlight, W as isUnknownFieldError, Re as isVoiceTurn, or as joinSheets, Yt as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, dt as micIsInterrupt, se as modeRequiresConfirmWrites, Yi as nextActiveTab, ua as nextModeIndex, ki as nextPanelOverlays, Ri as nextPreviewEvents, Xt as normalizeLangTag, Ba as notifyAiCreditsUpdated, Ht as orbMode, sr as pageMarker, Ai as panelOwnsEscape, In as parseConfirmationRefusal, Ur as parseDataUrl, cr as parseSharedStrings, $r as parseToolActivity, lr as parseWorkbookSheets, ur as pdfTextItemsToPage, Xi as pinActiveTab, Yr as planAbandonedTurn, Ut as planReplyConsumption, Xr as planTurnAbort, Dn as pollDelayMs, Zt as primaryLanguageSubtag, Un as publishedChunks, T as quotaExhaustedEventName, lt as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, Nn as replyFollowsInput, le as reportAssistantAiTokenUsage, Wn as requiresCancel, ut as resetSpeechEngine, Mn as resolveAssistantLanguage, Pn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, Bn as resolveSpeechLocale, jt as rotationElapsedMs, Wi as runBelongsTo, qi as runIdentities, Gi as sameOwner, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, Qt as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, dr as sheetXmlToRows, nt as shouldDisableEngine, Zi as shouldPinOnMove, Qi as shouldPinOnSelect, xn as showPreviousChunk, ft as showsAssistantCaption, pt as showsUserCaption, hn as speakableEmail, $t as speechGate, Rn as speechLabelsFor, en as speechLangForLocale, Gn as speechPlaybackReducer, rt as splitForVendor, gn as splitTableRow, Wt as spokenSoFar, xt as stageText, Mt as startRotationTicker, St as statusStageCopy, $i as stepsFromToolActivity, me as stopReapedAssistantSandbox, Ne as streamBudgetMs, fr as summarisePageText, Nt as syncRotationClock, ea as tabForArrowKey, Ct as thinkingPhrase, On as toCaptionText, Wr as toMessageAttachment, _n as toSpeakableText, Gr as truncateForInline, pr as truncatePagesForInline, Pa as useAssistantApiAccess, Ua as useAssistantAttachments, bi as useAssistantConnectSource, Ka as useAssistantHeartbeat, l as useAssistantI18nNamespace, qa as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, Fi as useAssistantPreview, ia as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, ti as useAssistantSpeech, o as useAssistantStorageFolders, qr as useAssistantStore, u as useAssistantTr, Fa as useConversationTurns, ji as useDropdownEscape, ra as useOverlayFocus, ke as useSandboxAssistantTransport, e as useVoiceInput, ni as useVoiceSession, Va as useWorkspaceWriteAccess, Kr as validateFile, tn as voiceAvailability, ze as voiceMarker, yn as voicePreviewText, nn as voiceQualityRank, Be as voiceSessionIdOf, Gt as voiceSessionReducer, mt as voiceStageState, Dt as voiceStatusParts, Ot as voiceStatusSuffix, sn as voiceTranscriptFilename, Ve as voiceTurnsOnly, rn 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.913.1",
3
+ "version": "2026.913.2",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {