@burdenoff/fe-libs 2026.904.3 → 2026.904.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ import { createProfileScopedStorage as e } from "../utils/profileScopedStorage.js";
2
+ import "../../shared-utils.js";
3
+ import { create as t } from "zustand";
4
+ import { persist as n } from "zustand/middleware";
5
+ //#region src/shared/assistant/store.ts
6
+ function r() {
7
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
8
+ }
9
+ var i = t()(n((e, t) => ({
10
+ conversations: [],
11
+ activeConversationId: null,
12
+ mode: "assistant",
13
+ processingByConversationId: {},
14
+ conversationListOpen: !1,
15
+ sandboxesByMode: {},
16
+ pendingPrompt: null,
17
+ apiCallsAcknowledged: !1,
18
+ autoSpeakEnabled: !1,
19
+ assistantLanguage: null,
20
+ replyLanguage: null,
21
+ preferredVoices: {},
22
+ createConversation: (n, i) => {
23
+ let a = r(), o = (/* @__PURE__ */ new Date()).toISOString(), s = i ?? t().mode, c = {
24
+ id: a,
25
+ title: n || "New conversation",
26
+ mode: s,
27
+ messages: [],
28
+ backendSessionId: null,
29
+ createdAt: o,
30
+ updatedAt: o
31
+ };
32
+ return e((e) => ({
33
+ conversations: [c, ...e.conversations],
34
+ activeConversationId: a,
35
+ conversationListOpen: !1
36
+ })), a;
37
+ },
38
+ deleteConversation: (t) => e((e) => {
39
+ let n = e.conversations.filter((e) => e.id !== t), r = { ...e.processingByConversationId };
40
+ return delete r[t], {
41
+ conversations: n,
42
+ processingByConversationId: r,
43
+ activeConversationId: e.activeConversationId === t ? n[0]?.id ?? null : e.activeConversationId
44
+ };
45
+ }),
46
+ renameConversation: (t, n) => e((e) => ({ conversations: e.conversations.map((e) => e.id === t ? {
47
+ ...e,
48
+ title: n,
49
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
50
+ } : e) })),
51
+ setActiveConversation: (t) => e((e) => ({
52
+ activeConversationId: t,
53
+ mode: e.conversations.find((e) => e.id === t)?.mode ?? e.mode,
54
+ conversationListOpen: !1
55
+ })),
56
+ setMode: (t) => e({ mode: t }),
57
+ setConversationMode: (t, n) => e((e) => ({
58
+ conversations: e.conversations.map((e) => e.id === t ? {
59
+ ...e,
60
+ mode: n,
61
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
62
+ } : e),
63
+ mode: e.activeConversationId === t ? n : e.mode
64
+ })),
65
+ addMessage: (t, n) => e((e) => ({ conversations: e.conversations.map((e) => e.id === t ? {
66
+ ...e,
67
+ messages: [...e.messages, n],
68
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
69
+ title: e.messages.length === 0 && n.role === "user" ? n.content.slice(0, 50) + (n.content.length > 50 ? "..." : "") : e.title
70
+ } : e) })),
71
+ updateMessage: (t, n, r) => e((e) => ({ conversations: e.conversations.map((e) => e.id === t ? {
72
+ ...e,
73
+ messages: e.messages.map((e) => e.id === n ? {
74
+ ...e,
75
+ content: r
76
+ } : e),
77
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
78
+ } : e) })),
79
+ patchMessage: (t, n, r) => e((e) => ({ conversations: e.conversations.map((e) => e.id === t ? {
80
+ ...e,
81
+ messages: e.messages.map((e) => e.id === n ? {
82
+ ...e,
83
+ ...r
84
+ } : e),
85
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
86
+ } : e) })),
87
+ mergeMessageMetadata: (t, n, r) => e((e) => ({ conversations: e.conversations.map((e) => e.id === t ? {
88
+ ...e,
89
+ messages: e.messages.map((e) => e.id === n ? {
90
+ ...e,
91
+ metadata: {
92
+ ...e.metadata,
93
+ ...r
94
+ }
95
+ } : e),
96
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
97
+ } : e) })),
98
+ setConversationProcessing: (t, n, r = null, i = null) => e((e) => ({ processingByConversationId: {
99
+ ...e.processingByConversationId,
100
+ [t]: {
101
+ status: n,
102
+ messageId: r,
103
+ error: i,
104
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
105
+ }
106
+ } })),
107
+ clearConversationProcessing: (t) => e((e) => {
108
+ let n = { ...e.processingByConversationId };
109
+ return delete n[t], { processingByConversationId: n };
110
+ }),
111
+ toggleConversationList: () => e((e) => ({ conversationListOpen: !e.conversationListOpen })),
112
+ setConversationListOpen: (t) => e({ conversationListOpen: t }),
113
+ clearConversation: (t) => e((e) => ({
114
+ conversations: e.conversations.map((e) => e.id === t ? {
115
+ ...e,
116
+ messages: [],
117
+ backendSessionId: null,
118
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
119
+ } : e),
120
+ processingByConversationId: {
121
+ ...e.processingByConversationId,
122
+ [t]: {
123
+ status: "idle",
124
+ messageId: null,
125
+ error: null,
126
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
127
+ }
128
+ }
129
+ })),
130
+ setBackendSessionId: (t, n) => e((e) => ({ conversations: e.conversations.map((e) => e.id === t ? {
131
+ ...e,
132
+ backendSessionId: n
133
+ } : e) })),
134
+ clearBackendSessionId: (t) => e((e) => ({ conversations: e.conversations.map((e) => e.id === t ? {
135
+ ...e,
136
+ backendSessionId: null
137
+ } : e) })),
138
+ setSandbox: (t, n, r) => e((e) => {
139
+ if (!n) {
140
+ let n = { ...e.sandboxesByMode };
141
+ return delete n[t], { sandboxesByMode: n };
142
+ }
143
+ return { sandboxesByMode: {
144
+ ...e.sandboxesByMode,
145
+ [t]: {
146
+ sandboxId: n,
147
+ status: r
148
+ }
149
+ } };
150
+ }),
151
+ clearSandbox: (t) => e((e) => {
152
+ let n = { ...e.sandboxesByMode };
153
+ return delete n[t], { sandboxesByMode: n };
154
+ }),
155
+ resetStore: () => e({
156
+ conversations: [],
157
+ activeConversationId: null,
158
+ mode: "assistant",
159
+ processingByConversationId: {},
160
+ conversationListOpen: !1,
161
+ sandboxesByMode: {},
162
+ pendingPrompt: null,
163
+ apiCallsAcknowledged: !1,
164
+ autoSpeakEnabled: !1,
165
+ assistantLanguage: null,
166
+ replyLanguage: null,
167
+ preferredVoices: {}
168
+ }),
169
+ submitPrompt: (t) => e({ pendingPrompt: t }),
170
+ consumePendingPrompt: () => {
171
+ let n = t().pendingPrompt;
172
+ return n !== null && e({ pendingPrompt: null }), n;
173
+ },
174
+ acknowledgeApiCalls: () => e({ apiCallsAcknowledged: !0 }),
175
+ setAutoSpeak: (t) => e({ autoSpeakEnabled: t }),
176
+ setAssistantLanguage: (t) => e({ assistantLanguage: t }),
177
+ setReplyLanguage: (t) => e({ replyLanguage: t }),
178
+ setPreferredVoice: (t, n) => e((e) => {
179
+ let r = { ...e.preferredVoices };
180
+ return n === null ? delete r[t] : r[t] = n, { preferredVoices: r };
181
+ })
182
+ }), {
183
+ name: "hb-ai-assistant",
184
+ storage: e(),
185
+ partialize: (e) => ({
186
+ conversations: e.conversations.map(({ ...e }) => e),
187
+ activeConversationId: e.activeConversationId,
188
+ mode: e.mode,
189
+ conversationListOpen: e.conversationListOpen,
190
+ apiCallsAcknowledged: e.apiCallsAcknowledged,
191
+ autoSpeakEnabled: e.autoSpeakEnabled,
192
+ assistantLanguage: e.assistantLanguage,
193
+ replyLanguage: e.replyLanguage,
194
+ preferredVoices: e.preferredVoices
195
+ })
196
+ }));
197
+ //#endregion
198
+ export { i as useAssistantStore };
@@ -0,0 +1,16 @@
1
+ import { AssistantConversationStatus } from './conversation';
2
+ /**
3
+ * Is a turn genuinely in flight for this conversation?
4
+ *
5
+ * One predicate, three callers, because they must not drift: the re-entry guard
6
+ * in `handleSend`, the `aria-busy` / streaming-message derivation, and the
7
+ * composer's disabled state. The subtlety it encodes is that a processing
8
+ * ENTRY outliving the turn is normal — `setConversationProcessing` keeps the
9
+ * conversation keyed as 'complete' or 'error' afterwards — so "has an entry" is
10
+ * not the question; "is it one of the live statuses" is.
11
+ *
12
+ * Type-only import, so this module stays importable in the node-environment
13
+ * test suite.
14
+ */
15
+ export declare function isTurnInFlight(status: AssistantConversationStatus | undefined): boolean;
16
+ //# sourceMappingURL=turnState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turnState.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/turnState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAElE;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,2BAA2B,GAAG,SAAS,GAC9C,OAAO,CAMT"}
@@ -0,0 +1,6 @@
1
+ //#region src/shared/assistant/turnState.ts
2
+ function e(e) {
3
+ return e === "provisioning" || e === "connecting" || e === "streaming";
4
+ }
5
+ //#endregion
6
+ export { e as isTurnInFlight };
@@ -30,4 +30,9 @@ import { AssistantI18nProvider as Rt, assistantTranslationKey as zt, useAssistan
30
30
  import { SPOKEN_LABEL_LANGUAGES as Ht, speechLabelsFor as Ut } from "./shared/assistant/voice/speechLabels.js";
31
31
  import { detectScriptLocale as Wt, resolveSpeechLocale as Gt } from "./shared/assistant/voice/replyLanguage.js";
32
32
  import { IDLE_PLAYBACK as Kt, isSpeakingMessage as qt, requiresCancel as Jt, speechPlaybackReducer as Yt } from "./shared/assistant/voice/speechPlayback.js";
33
- export { p as ASSISTANT_API_AUTH_STRATEGY, At as ASSISTANT_LANGUAGES, Rt as AssistantI18nProvider, U as AssistantRuntimeManager, i as CHECK_AI_CREDITS, a as CREATE_SANDBOX, dt as DEFAULT_SPEAKABLE_LABELS, jt as DEFAULT_SPEECH_RATE, Re as ENDPOINT_GRACE_MS, o as EXTEND_SANDBOX_TTL, s as GET_ACTIVE_SANDBOXES, c as GET_SANDBOX, me as HOSTED_TTS_MAX_CHARS, ue as HOSTED_TTS_TIER, de as HOSTED_VOICES, Kt as IDLE_PLAYBACK, ze as INITIAL_SESSION, Be as INTERRUPT_MAX_MS, Ve as INTERRUPT_MIN_MS, ft as MAX_SPEAKABLE_CHARS, pt as MAX_SPOKEN_TABLE_ROWS, Ct as POLL_FAST_MS, wt as POLL_FAST_UNTIL_MS, Tt as POLL_SLOW_MS, Et as POLL_STEADY_MS, Dt as POLL_STEADY_UNTIL_MS, xt as PREVIEW_LANGUAGES, l as PROXY_SANDBOX_REQUEST, u as REPORT_AI_TOKEN_USAGE, He as SILENCE_SUBMIT_MS, he as SPEAKING_RATE_MAX, ge as SPEAKING_RATE_MAX_STREAMING, _e as SPEAKING_RATE_MAX_SYNC, ve as SPEAKING_RATE_MIN, mt as SPEECH_CHUNK_CHARS, ht as SPEECH_CHUNK_CJK_CHARS, Xe as SPEECH_LANG, Ht as SPOKEN_LABEL_LANGUAGES, d as STOP_ASSISTANT_SANDBOX, Ze as VOICE_LIST_TIMEOUT_MS, f as WAIT_FOR_SANDBOX_RUNNING, zt as assistantTranslationKey, ye as base64ToBytes, le as browserSpeechEngine, C as buildAssistantSandboxEnv, ct as buildContinuedFromVoiceNote, W as buildProgress, w as buildPromptRequestBody, be as buildRequest, t as buildSandboxContextInput, lt as buildVoiceTranscriptMarkdown, ne as chatTurns, T as checkAssistantAiCredits, gt as chunkForSpeech, xe as classifyHttpFailure, De as configureSpeechEngine, _t as containsCjk, E as createAssistantSandbox, D as createAssistantSession, Te as createHostedTtsEngine, Ee as createRoutingSpeechEngine, ee as createSandboxAssistantTransport, Oe as createSpeechEngines, Se as decodeAudioResponse, Wt as detectScriptLocale, O as downloadAssistantArtifact, n as executeSandboxGraphQL, k as extendAssistantSandboxTTL, Mt as findAssistantLanguage, A as findExistingSandbox, It as findPendingWrite, j as getAssistantArtifacts, G as getAssistantMedia, M as getAssistantMessages, N as getAssistantSession, P as getAssistantStreamAccess, K as getAssistantText, y as getCapability, m as getImageForMode, h as getImageTagForMode, q as getRawMessageCreatedAt, g as getResourcesForMode, _ as getSandboxImageRegistry, ke as getSpeechEngine, J as getToolProgress, re as groupBySession, ie as groupConsecutiveBySession, fe as hostedLocaleFor, pe as hostedSupportsLanguage, Ue as isCapturing, We as isEcho, r as isQuotaExhaustedError, Y as isReapedSandboxConnectionError, X as isRecoverable, qt as isSpeakingMessage, Qe as isSpeechBlocked, Ge as isSubmittable, b as isUnknownFieldError, ae as isVoiceTurn, $e as languageDisplayName, Z as mapSessionToHistory, x as markSupported, S as markUnsupported, Q as mergeMessagesById, Me as micIsInterrupt, F as modeRequiresConfirmWrites, et as normalizeLangTag, Ke as orbMode, Lt as parseConfirmationRefusal, qe as planReplyConsumption, Ot as pollDelayMs, tt as primaryLanguageSubtag, Ae as readSpeechEngineConfig, Pt as replyFollowsInput, I as reportAssistantAiTokenUsage, Jt as requiresCancel, je as resetSpeechEngine, Nt as resolveAssistantLanguage, Ft as resolveLanguagePair, v as resolveSandboxAssistantMode, Gt as resolveSpeechLocale, $ as sanitize, L as selectExistingAssistantSandbox, nt as selectVoiceForLocale, R as sendAssistantPromptAsync, z as sendHeartbeat, Ce as shouldDisableEngine, Ne as showsAssistantCaption, Pe as showsUserCaption, vt as speakableEmail, rt as speechGate, Ut as speechLabelsFor, it as speechLangForLocale, Yt as speechPlaybackReducer, we as splitForVendor, yt as splitTableRow, Je as spokenSoFar, B as stopReapedAssistantSandbox, kt as toCaptionText, bt as toSpeakableText, Bt as useAssistantI18nNamespace, Vt as useAssistantTr, te as useSandboxAssistantTransport, e as useVoiceInput, at as voiceAvailability, oe as voiceMarker, St as voicePreviewText, ot as voiceQualityRank, se as voiceSessionIdOf, Ye as voiceSessionReducer, Fe as voiceStageState, ut as voiceTranscriptFilename, ce as voiceTurnsOnly, st as voicesForLocale, V as waitForAssistantServiceReady, H as waitForSandboxRunning, Ie as waveformIsActive, Le as waveformIsSettled };
33
+ import { MAX_INLINE_IMAGE_BASE64_BYTES as Xt, MAX_REQUEST_BODY_BYTES as Zt } from "./shared/assistant/gatewayLimits.js";
34
+ import { BOILERPLATE_PAGE_SHARE as Qt, MAX_BOILERPLATE_LINE_CHARS as $t, MAX_EXTRACTED_CHARS as en, MAX_PDF_PAGES_SCANNED as tn, MIN_PAGE_TEXT_CHARS as nn, MIN_TEXT_PAGE_SHARE as rn, columnLetterToIndex as an, decodeXmlEntities as on, docxXmlToText as sn, fitPdfPages as cn, formatPageRanges as ln, isMostlyImagePages as un, joinSheets as dn, pageMarker as fn, parseSharedStrings as pn, parseWorkbookSheets as mn, pdfTextItemsToPage as hn, sheetXmlToRows as gn, summarisePageText as _n, truncatePagesForInline as vn } from "./shared/assistant/documentText.js";
35
+ import { ATTACHMENT_ACCEPT as yn, AttachmentRejectedError as bn, INLINE_IMAGE_MAX_DIM as xn, INLINE_IMAGE_QUALITY as Sn, MAX_ATTACHMENTS as Cn, MAX_FILE_BYTES as wn, MAX_INLINE_CHARS_PER_FILE as Tn, MAX_INLINE_CHARS_TOTAL as En, MAX_INLINE_IMAGE_BASE64_CHARS as Dn, MAX_INLINE_IMAGE_PARTS as On, MAX_INLINE_TURN_BODY_BYTES as kn, MAX_TURN_BODY_BYTES as An, PROMPT_ENVELOPE_RESERVE_BYTES as jn, TURN_BODY_HEADROOM_BYTES as Mn, buildAttachmentPromptBlock as Nn, buildPromptParts as Pn, buildPromptWithAttachments as Fn, classifyAttachment as In, countInlineImageCandidates as Ln, countInlinedImageParts as Rn, detectDocumentFormat as zn, estimateTurnBodyBytes as Bn, formatBytes as Vn, getAttachmentSendBlocker as Hn, getExtension as Un, getSendableAttachments as Wn, hasAttachmentWorkInFlight as Gn, parseDataUrl as Kn, toMessageAttachment as qn, truncateForInline as Jn, validateFile as Yn } from "./shared/assistant/attachments.js";
36
+ import { useAssistantStore as Xn } from "./shared/assistant/store.js";
37
+ import { isTurnInFlight as Zn } from "./shared/assistant/turnState.js";
38
+ export { p as ASSISTANT_API_AUTH_STRATEGY, At as ASSISTANT_LANGUAGES, yn as ATTACHMENT_ACCEPT, Rt as AssistantI18nProvider, U as AssistantRuntimeManager, bn as AttachmentRejectedError, Qt as BOILERPLATE_PAGE_SHARE, i as CHECK_AI_CREDITS, a as CREATE_SANDBOX, dt as DEFAULT_SPEAKABLE_LABELS, jt as DEFAULT_SPEECH_RATE, Re as ENDPOINT_GRACE_MS, o as EXTEND_SANDBOX_TTL, s as GET_ACTIVE_SANDBOXES, c as GET_SANDBOX, me as HOSTED_TTS_MAX_CHARS, ue as HOSTED_TTS_TIER, de as HOSTED_VOICES, Kt as IDLE_PLAYBACK, ze as INITIAL_SESSION, xn as INLINE_IMAGE_MAX_DIM, Sn as INLINE_IMAGE_QUALITY, Be as INTERRUPT_MAX_MS, Ve as INTERRUPT_MIN_MS, Cn as MAX_ATTACHMENTS, $t as MAX_BOILERPLATE_LINE_CHARS, en as MAX_EXTRACTED_CHARS, wn as MAX_FILE_BYTES, Tn as MAX_INLINE_CHARS_PER_FILE, En as MAX_INLINE_CHARS_TOTAL, Xt as MAX_INLINE_IMAGE_BASE64_BYTES, Dn as MAX_INLINE_IMAGE_BASE64_CHARS, On as MAX_INLINE_IMAGE_PARTS, kn as MAX_INLINE_TURN_BODY_BYTES, tn as MAX_PDF_PAGES_SCANNED, Zt as MAX_REQUEST_BODY_BYTES, ft as MAX_SPEAKABLE_CHARS, pt as MAX_SPOKEN_TABLE_ROWS, An as MAX_TURN_BODY_BYTES, nn as MIN_PAGE_TEXT_CHARS, rn as MIN_TEXT_PAGE_SHARE, Ct as POLL_FAST_MS, wt as POLL_FAST_UNTIL_MS, Tt as POLL_SLOW_MS, Et as POLL_STEADY_MS, Dt as POLL_STEADY_UNTIL_MS, xt as PREVIEW_LANGUAGES, jn as PROMPT_ENVELOPE_RESERVE_BYTES, l as PROXY_SANDBOX_REQUEST, u as REPORT_AI_TOKEN_USAGE, He as SILENCE_SUBMIT_MS, he as SPEAKING_RATE_MAX, ge as SPEAKING_RATE_MAX_STREAMING, _e as SPEAKING_RATE_MAX_SYNC, ve as SPEAKING_RATE_MIN, mt as SPEECH_CHUNK_CHARS, ht as SPEECH_CHUNK_CJK_CHARS, Xe as SPEECH_LANG, Ht as SPOKEN_LABEL_LANGUAGES, d as STOP_ASSISTANT_SANDBOX, Mn as TURN_BODY_HEADROOM_BYTES, Ze as VOICE_LIST_TIMEOUT_MS, f as WAIT_FOR_SANDBOX_RUNNING, zt as assistantTranslationKey, ye as base64ToBytes, le as browserSpeechEngine, C as buildAssistantSandboxEnv, Nn as buildAttachmentPromptBlock, ct as buildContinuedFromVoiceNote, W as buildProgress, Pn as buildPromptParts, w as buildPromptRequestBody, Fn as buildPromptWithAttachments, be as buildRequest, t as buildSandboxContextInput, lt as buildVoiceTranscriptMarkdown, ne as chatTurns, T as checkAssistantAiCredits, gt as chunkForSpeech, In as classifyAttachment, xe as classifyHttpFailure, an as columnLetterToIndex, De as configureSpeechEngine, _t as containsCjk, Ln as countInlineImageCandidates, Rn as countInlinedImageParts, E as createAssistantSandbox, D as createAssistantSession, Te as createHostedTtsEngine, Ee as createRoutingSpeechEngine, ee as createSandboxAssistantTransport, Oe as createSpeechEngines, Se as decodeAudioResponse, on as decodeXmlEntities, zn as detectDocumentFormat, Wt as detectScriptLocale, sn as docxXmlToText, O as downloadAssistantArtifact, Bn as estimateTurnBodyBytes, n as executeSandboxGraphQL, k as extendAssistantSandboxTTL, Mt as findAssistantLanguage, A as findExistingSandbox, It as findPendingWrite, cn as fitPdfPages, Vn as formatBytes, ln as formatPageRanges, j as getAssistantArtifacts, G as getAssistantMedia, M as getAssistantMessages, N as getAssistantSession, P as getAssistantStreamAccess, K as getAssistantText, Hn as getAttachmentSendBlocker, y as getCapability, Un as getExtension, m as getImageForMode, h as getImageTagForMode, q as getRawMessageCreatedAt, g as getResourcesForMode, _ as getSandboxImageRegistry, Wn as getSendableAttachments, ke as getSpeechEngine, J as getToolProgress, re as groupBySession, ie as groupConsecutiveBySession, Gn as hasAttachmentWorkInFlight, fe as hostedLocaleFor, pe as hostedSupportsLanguage, Ue as isCapturing, We as isEcho, un as isMostlyImagePages, r as isQuotaExhaustedError, Y as isReapedSandboxConnectionError, X as isRecoverable, qt as isSpeakingMessage, Qe as isSpeechBlocked, Ge as isSubmittable, Zn as isTurnInFlight, b as isUnknownFieldError, ae as isVoiceTurn, dn as joinSheets, $e as languageDisplayName, Z as mapSessionToHistory, x as markSupported, S as markUnsupported, Q as mergeMessagesById, Me as micIsInterrupt, F as modeRequiresConfirmWrites, et as normalizeLangTag, Ke as orbMode, fn as pageMarker, Lt as parseConfirmationRefusal, Kn as parseDataUrl, pn as parseSharedStrings, mn as parseWorkbookSheets, hn as pdfTextItemsToPage, qe as planReplyConsumption, Ot as pollDelayMs, tt as primaryLanguageSubtag, Ae as readSpeechEngineConfig, Pt as replyFollowsInput, I as reportAssistantAiTokenUsage, Jt as requiresCancel, je as resetSpeechEngine, Nt as resolveAssistantLanguage, Ft as resolveLanguagePair, v as resolveSandboxAssistantMode, Gt as resolveSpeechLocale, $ as sanitize, L as selectExistingAssistantSandbox, nt as selectVoiceForLocale, R as sendAssistantPromptAsync, z as sendHeartbeat, gn as sheetXmlToRows, Ce as shouldDisableEngine, Ne as showsAssistantCaption, Pe as showsUserCaption, vt as speakableEmail, rt as speechGate, Ut as speechLabelsFor, it as speechLangForLocale, Yt as speechPlaybackReducer, we as splitForVendor, yt as splitTableRow, Je as spokenSoFar, B as stopReapedAssistantSandbox, _n as summarisePageText, kt as toCaptionText, qn as toMessageAttachment, bt as toSpeakableText, Jn as truncateForInline, vn as truncatePagesForInline, Bt as useAssistantI18nNamespace, Xn as useAssistantStore, Vt as useAssistantTr, te as useSandboxAssistantTransport, e as useVoiceInput, Yn as validateFile, at as voiceAvailability, oe as voiceMarker, St as voicePreviewText, ot as voiceQualityRank, se as voiceSessionIdOf, Ye as voiceSessionReducer, Fe as voiceStageState, ut as voiceTranscriptFilename, ce as voiceTurnsOnly, st as voicesForLocale, V as waitForAssistantServiceReady, H as waitForSandboxRunning, Ie as waveformIsActive, Le as waveformIsSettled };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.904.3",
3
+ "version": "2026.904.4",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {