@burdenoff/fe-libs 2026.1024.2 → 2026.1024.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/chrome/FooterBar.d.ts +1 -1
  2. package/dist/chrome/NativePageTransition.d.ts +1 -1
  3. package/dist/chrome/ProductPickerSheet.js +42 -42
  4. package/dist/chrome/ProductSwitcher.d.ts +8 -0
  5. package/dist/chrome/ProductSwitcher.js +83 -72
  6. package/dist/chrome/index.d.ts +9 -9
  7. package/dist/chrome/swipe/swipeMath.d.ts +1 -1
  8. package/dist/shared/assistant/api.d.ts +3 -3
  9. package/dist/shared/assistant/appControls/grammar.d.ts +21 -21
  10. package/dist/shared/assistant/appControls/languageReply.d.ts +1 -1
  11. package/dist/shared/assistant/appControls/names.d.ts +3 -3
  12. package/dist/shared/assistant/appControls/pageAdapters.d.ts +5 -5
  13. package/dist/shared/assistant/appControls/plan.d.ts +38 -38
  14. package/dist/shared/assistant/appControls/types.d.ts +15 -15
  15. package/dist/shared/assistant/appControls/useAssistantControl.d.ts +1 -1
  16. package/dist/shared/assistant/attachmentSources.d.ts +2 -2
  17. package/dist/shared/assistant/attachments.d.ts +5 -5
  18. package/dist/shared/assistant/autoRouting.d.ts +6 -6
  19. package/dist/shared/assistant/avatar/live/LiveAvatarMinutes.d.ts +24 -0
  20. package/dist/shared/assistant/avatar/live/LiveAvatarMinutes.js +161 -0
  21. package/dist/shared/assistant/avatar/live/LiveAvatarStage.js +95 -73
  22. package/dist/shared/assistant/avatar/live/LiveAvatarTabView.d.ts +6 -0
  23. package/dist/shared/assistant/avatar/live/LiveAvatarTabView.js +195 -171
  24. package/dist/shared/assistant/avatar/live/avatarSessionClient.d.ts +77 -1
  25. package/dist/shared/assistant/avatar/live/avatarSessionClient.js +193 -72
  26. package/dist/shared/assistant/avatar/live/createLiveAvatarSeam.d.ts +14 -1
  27. package/dist/shared/assistant/avatar/live/createLiveAvatarSeam.js +65 -40
  28. package/dist/shared/assistant/avatar/live/liveAvatarController.d.ts +64 -2
  29. package/dist/shared/assistant/avatar/live/liveAvatarController.js +403 -242
  30. package/dist/shared/assistant/avatar/live/liveAvatarMinutesView.d.ts +127 -0
  31. package/dist/shared/assistant/avatar/live/liveAvatarMinutesView.js +168 -0
  32. package/dist/shared/assistant/avatar/live/liveAvatarStatus.d.ts +3 -0
  33. package/dist/shared/assistant/avatar/live/liveAvatarStatus.js +11 -7
  34. package/dist/shared/assistant/avatar/useAvatarCopy.d.ts +127 -2
  35. package/dist/shared/assistant/avatar/useAvatarCopy.js +116 -7
  36. package/dist/shared/assistant/conversation.d.ts +20 -20
  37. package/dist/shared/assistant/displayContent.d.ts +4 -4
  38. package/dist/shared/assistant/documentText.d.ts +3 -3
  39. package/dist/shared/assistant/exportConversation.d.ts +1 -1
  40. package/dist/shared/assistant/history/historyControls.d.ts +4 -4
  41. package/dist/shared/assistant/history/historyErrors.d.ts +3 -3
  42. package/dist/shared/assistant/history/historyList.d.ts +5 -5
  43. package/dist/shared/assistant/history/historyMerge.d.ts +4 -4
  44. package/dist/shared/assistant/history/historyOperations.d.ts +1 -1
  45. package/dist/shared/assistant/history/historySearch.d.ts +5 -5
  46. package/dist/shared/assistant/history/historyStatus.d.ts +1 -1
  47. package/dist/shared/assistant/history/historyTypes.d.ts +12 -12
  48. package/dist/shared/assistant/history/profileBoundStorage.d.ts +2 -2
  49. package/dist/shared/assistant/i18n.d.ts +1 -1
  50. package/dist/shared/assistant/i18nManifest.d.ts +566 -535
  51. package/dist/shared/assistant/i18nManifest.js +55 -24
  52. package/dist/shared/assistant/index.d.ts +2 -0
  53. package/dist/shared/assistant/liveDeltas.d.ts +1 -1
  54. package/dist/shared/assistant/liveOverlay.d.ts +1 -1
  55. package/dist/shared/assistant/localUiCommandCopy.d.ts +1 -1
  56. package/dist/shared/assistant/localUiCommands.d.ts +22 -22
  57. package/dist/shared/assistant/localeCommands/engine.d.ts +5 -5
  58. package/dist/shared/assistant/localeCommands/evaluate.d.ts +8 -8
  59. package/dist/shared/assistant/localeCommands/fold.d.ts +2 -2
  60. package/dist/shared/assistant/localeCommands/frames.d.ts +3 -3
  61. package/dist/shared/assistant/localeCommands/gate.d.ts +3 -3
  62. package/dist/shared/assistant/localeCommands/languageNames.d.ts +1 -1
  63. package/dist/shared/assistant/localeCommands/normalise.d.ts +1 -1
  64. package/dist/shared/assistant/localeCommands/types.d.ts +4 -4
  65. package/dist/shared/assistant/modeCapabilities.d.ts +1 -1
  66. package/dist/shared/assistant/modeCopy.d.ts +2 -2
  67. package/dist/shared/assistant/permissionError.d.ts +2 -2
  68. package/dist/shared/assistant/preview/surfaceState.d.ts +1 -1
  69. package/dist/shared/assistant/preview/types.d.ts +5 -5
  70. package/dist/shared/assistant/preview/writeActionResults.d.ts +1 -1
  71. package/dist/shared/assistant/prewarm.d.ts +5 -5
  72. package/dist/shared/assistant/quota.d.ts +2 -2
  73. package/dist/shared/assistant/sandboxReadiness.d.ts +2 -2
  74. package/dist/shared/assistant/speech/speechFeed.d.ts +3 -3
  75. package/dist/shared/assistant/turnOutcome.d.ts +2 -2
  76. package/dist/shared/assistant/turnProgress.d.ts +1 -1
  77. package/dist/shared/assistant/turnState.d.ts +1 -1
  78. package/dist/shared/assistant/turnStream.d.ts +3 -3
  79. package/dist/shared/assistant/turnTimeline.d.ts +13 -13
  80. package/dist/shared/assistant/turnTimingReport.d.ts +1 -1
  81. package/dist/shared/assistant/turnTimingReporter.d.ts +3 -3
  82. package/dist/shared/assistant/ui/AssistantAvatarTabs.d.ts +1 -1
  83. package/dist/shared/assistant/ui/AssistantChatArea.js +17 -17
  84. package/dist/shared/assistant/ui/AssistantHistoryNotices.d.ts +1 -1
  85. package/dist/shared/assistant/ui/AssistantMarkdownRenderer.d.ts +5 -2
  86. package/dist/shared/assistant/ui/AssistantToolActivity.d.ts +1 -1
  87. package/dist/shared/assistant/ui/AssistantUiOfferLink.d.ts +2 -2
  88. package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.d.ts +3 -3
  89. package/dist/shared/assistant/ui/assistantLiveAvatarSeam.d.ts +10 -2
  90. package/dist/shared/assistant/ui/avatar/AssistantAvatarTab.js +78 -76
  91. package/dist/shared/assistant/ui/avatar/avatarAskGate.d.ts +2 -0
  92. package/dist/shared/assistant/ui/avatar/avatarAskGate.js +1 -0
  93. package/dist/shared/assistant/ui/composer/AssistantAttachmentButton.d.ts +1 -1
  94. package/dist/shared/assistant/ui/composer/AssistantConnectSourceItem.d.ts +1 -1
  95. package/dist/shared/assistant/ui/leaveConfirmFocus.d.ts +1 -1
  96. package/dist/shared/assistant/ui/leaveConfirmNavigate.d.ts +3 -3
  97. package/dist/shared/assistant/ui/panelOverlays.d.ts +5 -5
  98. package/dist/shared/assistant/ui/useVoiceSession.d.ts +5 -5
  99. package/dist/shared/assistant/ui/useWriteProposalConfirm.d.ts +4 -4
  100. package/dist/shared/assistant/ui/useWriteProposals.d.ts +2 -2
  101. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts +1 -1
  102. package/dist/shared/assistant/ui/voice/VoiceCaption.d.ts +1 -1
  103. package/dist/shared/assistant/ui/voice/VoiceWaveform.d.ts +1 -1
  104. package/dist/shared/assistant/ui/voice/voiceSessionEscape.d.ts +2 -2
  105. package/dist/shared/assistant/ui/voice/voiceStartGate.d.ts +6 -6
  106. package/dist/shared/assistant/ui/writeProposalPresentation.d.ts +1 -1
  107. package/dist/shared/assistant/uiActions/actOnResolve.d.ts +5 -5
  108. package/dist/shared/assistant/uiActions/assistantHref.d.ts +2 -2
  109. package/dist/shared/assistant/uiActions/backStack.d.ts +1 -1
  110. package/dist/shared/assistant/uiActions/deixis.d.ts +3 -3
  111. package/dist/shared/assistant/uiActions/entityRoutes.d.ts +1 -1
  112. package/dist/shared/assistant/uiActions/navigationOutcome.d.ts +8 -8
  113. package/dist/shared/assistant/uiActions/offerYesOnSurface.d.ts +1 -1
  114. package/dist/shared/assistant/uiActions/resolveTarget.d.ts +2 -2
  115. package/dist/shared/assistant/uiActions/uiOffers.d.ts +5 -5
  116. package/dist/shared/assistant/usageReporting.d.ts +2 -2
  117. package/dist/shared/assistant/useWorkspaceWriteAccess.d.ts +1 -1
  118. package/dist/shared/assistant/voice/affirmations.d.ts +1 -1
  119. package/dist/shared/assistant/voice/handsFree.d.ts +3 -3
  120. package/dist/shared/assistant/voice/handsfree/bargeIn.d.ts +5 -5
  121. package/dist/shared/assistant/voice/handsfree/echoGate.d.ts +6 -6
  122. package/dist/shared/assistant/voice/handsfree/handsFreeController.d.ts +7 -7
  123. package/dist/shared/assistant/voice/handsfree/handsFreeSetting.d.ts +2 -2
  124. package/dist/shared/assistant/voice/handsfree/micCapture.d.ts +1 -1
  125. package/dist/shared/assistant/voice/handsfree/playbackReference.d.ts +1 -1
  126. package/dist/shared/assistant/voice/handsfree/sttTransport.d.ts +3 -3
  127. package/dist/shared/assistant/voice/handsfree/useHandsFreeInterrupt.d.ts +4 -4
  128. package/dist/shared/assistant/voice/handsfree/vad.d.ts +1 -1
  129. package/dist/shared/assistant/voice/speechPlayback.d.ts +7 -7
  130. package/dist/shared/assistant/voice/useVoiceInput.d.ts +1 -1
  131. package/dist/shared/assistant/voice/voiceReopen.d.ts +8 -8
  132. package/dist/shared/assistant/writeConfirmSeam.d.ts +1 -1
  133. package/dist/shared/assistant/writeModeConsent.d.ts +7 -7
  134. package/dist/shared/assistant/writeProposalDiscovery.d.ts +3 -3
  135. package/dist/shared/assistant/writeProposalErrorCopy.d.ts +1 -1
  136. package/dist/shared/assistant/writeProposals.d.ts +23 -23
  137. package/dist/shared/assistant/writeReplyBinder.d.ts +11 -11
  138. package/dist/shared/assistant/writeReplySend.d.ts +7 -7
  139. package/dist/shared/components/LandingOrDashboardRedirect.d.ts +18 -3
  140. package/dist/shared/components/LandingOrDashboardRedirect.js +58 -28
  141. package/dist/shared/components/index.d.ts +2 -1
  142. package/dist/shared/events/index.d.ts +2 -1
  143. package/dist/shared/hooks/shell/globalSearchError.d.ts +2 -2
  144. package/dist/shared/navigation/productSwitchHandoff.d.ts +45 -0
  145. package/dist/shared/navigation/productSwitchHandoff.js +27 -0
  146. package/dist/shared/navigation/unsavedChanges.d.ts +1 -1
  147. package/dist/shared/utils/index.d.ts +3 -3
  148. package/dist/shared-assistant.js +227 -225
  149. package/dist/shared-components.js +7 -6
  150. package/dist/shared.js +71 -70
  151. package/package.json +3 -2
@@ -7,11 +7,12 @@ import { INCOMPLETE_TURN_NOTICES as a } from "./streamBudget.js";
7
7
  import { STAGE_COPY as o, THINKING_PHRASES as s } from "./stageCopy.js";
8
8
  import { VOICE_MUTED_LABEL as c, VOICE_THINKING_LABEL as l } from "./voice/voiceStatus.js";
9
9
  import { ATTACHMENT_SOURCES as u } from "./attachmentSources.js";
10
- import { assistantProductCopyEntries as d } from "./productCopy.js";
11
- import { WRITE_PROPOSAL_ERROR_COPY as f } from "./writeProposalErrorCopy.js";
12
- import { WRITE_PROPOSAL_VOICE_COPY as p } from "./writeProposalVoice.js";
10
+ import { AVATAR_MINUTES_HOW_COUNTED as d } from "./avatar/useAvatarCopy.js";
11
+ import { assistantProductCopyEntries as f } from "./productCopy.js";
12
+ import { WRITE_PROPOSAL_ERROR_COPY as p } from "./writeProposalErrorCopy.js";
13
+ import { WRITE_PROPOSAL_VOICE_COPY as m } from "./writeProposalVoice.js";
13
14
  //#region src/shared/assistant/i18nManifest.ts
14
- var m = {
15
+ var h = {
15
16
  "apiCalls.consentBody": "In Take action mode the assistant can read AND change your data — creating records, logging activity, updating details, and more, on your behalf.",
16
17
  "apiCalls.consentBody2": "It will describe what it is about to do and ask you to confirm before making a change. Only continue if you want the assistant to take actions for you.",
17
18
  "apiCalls.consentCancel": "Stay in Ask",
@@ -129,6 +130,7 @@ var m = {
129
130
  "avatar.askNeedsAvatar": "Turn on the avatar to send your question. You can type it now.",
130
131
  "avatar.askNeedsVoice": "You can still turn the avatar on, but you ask it questions in a voice conversation.",
131
132
  "avatar.askNoFiles": "To attach files, use Chat.",
133
+ "avatar.askNoMinutes": "You can send your question when avatar credits are available.",
132
134
  "avatar.askNotHeard": "This answer wasn't read aloud: the avatar may still have been finishing the last answer.",
133
135
  "avatar.askNotSpoken": "The avatar wasn't available, so this answer wasn't read aloud.",
134
136
  "avatar.askNothing": "You can't ask the avatar anything in this conversation.",
@@ -153,6 +155,23 @@ var m = {
153
155
  "avatar.consentCancel": "Not now",
154
156
  "avatar.consentConfirm": "Turn on the avatar",
155
157
  "avatar.handsFreeOff": "Hands-free interrupt is off, so the avatar's voice can't interrupt itself. It stays off after you turn the avatar off; turn it back on in More options. You can still tap to interrupt.",
158
+ "avatar.minutes.askAdmin": "Ask your billing administrator about a plan with more avatar credits.",
159
+ "avatar.minutes.assignPlan": "Assign your new plan to this workspace in Billing to use its credits.",
160
+ "avatar.minutes.checkAgain": "Check again",
161
+ "avatar.minutes.checking": "Checking…",
162
+ "avatar.minutes.checkingPlan": "Checking your plan…",
163
+ "avatar.minutes.ended": "The avatar stopped because this workspace’s avatar credits ran out. Continuing with voice only.",
164
+ "avatar.minutes.endedNoVoice": "The avatar stopped because this workspace’s avatar credits ran out.",
165
+ "avatar.minutes.freePerMonth": "Free avatar credits each month: {{count}}",
166
+ "avatar.minutes.freePerPerson": "Free avatar credits per person each month: {{count}}",
167
+ "avatar.minutes.left": "Avatar credits left: {{count}}",
168
+ "avatar.minutes.low": "Avatar credits are running low. The avatar stops when they run out.",
169
+ "avatar.minutes.noFree": "No free avatar credits are included.",
170
+ "avatar.minutes.planPerMonth": "Avatar credits from paid plans each month: {{count}}",
171
+ "avatar.minutes.resetsOn": "Avatar credits reset on {{date}} (UTC).",
172
+ "avatar.minutes.seePlans": "See plans",
173
+ "avatar.minutes.sessionLeft": "Minutes left in this session: about {{count}}",
174
+ "avatar.minutes.shared": "Everyone in this workspace shares these credits.",
156
175
  "avatar.problemAlreadyRunning": "An avatar is already running for you.",
157
176
  "avatar.problemBudgetExhausted": "Avatar time is used up for now.",
158
177
  "avatar.problemBudgetExhaustedEveryone": "Avatar time is used up for everyone for now.",
@@ -161,6 +180,17 @@ var m = {
161
180
  "avatar.problemCapacity": "Avatars are busy right now. Try again in a moment.",
162
181
  "avatar.problemCapacityTimed": "Avatars are busy right now.",
163
182
  "avatar.problemConnection": "The connection to the avatar was lost.",
183
+ "avatar.problemMinutesExhausted": "No avatar credits left in this workspace.",
184
+ "avatar.problemMinutesExhaustedUntil": "No avatar credits left in this workspace. They come back on {{date}} (UTC).",
185
+ "avatar.problemMinutesFreeCeiling": "You’ve used your free avatar credits for this month.",
186
+ "avatar.problemMinutesInUse": "Avatar credits are in use in another session. Try again when it ends.",
187
+ "avatar.problemMinutesInUseSelf": "Your avatar is still running on another device. End it there, or try again when it ends.",
188
+ "avatar.problemMinutesInUseSelfTimed": "Your avatar is still running on another device. End it there.",
189
+ "avatar.problemMinutesInUseTimed": "Avatar credits are in use in another session.",
190
+ "avatar.problemMinutesNotIncluded": "Avatar credits aren’t included for this workspace.",
191
+ "avatar.problemMinutesUnavailable": "Avatar credits can’t be checked right now. Try again in a moment.",
192
+ "avatar.problemMinutesUnavailableTimed": "Avatar credits can’t be checked right now.",
193
+ "avatar.problemMinutesZeroSessionLimit": "You’ve started too many short avatar sessions today.",
164
194
  "avatar.problemNeedsHostedVoice": "The avatar needs one of the assistant’s own voices. Choose one in the voice settings.",
165
195
  "avatar.problemNotReady": "This avatar isn’t ready yet. Try another one.",
166
196
  "avatar.problemPaused": "Avatars are paused for now.",
@@ -542,34 +572,35 @@ var m = {
542
572
  "writeProposal.values": "Values",
543
573
  "writeProposal.variablesOmitted": "{{count}} more values not shown",
544
574
  "writeProposal.waitForTurn": "You can confirm once the assistant finishes replying."
545
- }, h = (e) => Object.fromEntries(e.map((e) => [e.key, e.fallback])), g = Object.freeze({
546
- ...h(Object.values(o)),
547
- ...h(s),
548
- ...h([l, c]),
549
- ...h(a),
550
- ...h(Object.values(i)),
551
- ...h(Object.values(r)),
552
- ...h(Object.values(f)),
553
- ...h(Object.values(p)),
575
+ }, g = (e) => Object.fromEntries(e.map((e) => [e.key, e.fallback])), _ = Object.freeze({
576
+ ...g(Object.values(o)),
577
+ ...g(s),
578
+ ...g([l, c]),
579
+ ...g(a),
580
+ ...g(Object.values(i)),
581
+ ...g(Object.values(r)),
582
+ ...g(Object.values(p)),
583
+ ...g(Object.values(m)),
584
+ ...g(Object.values(d)),
554
585
  ...Object.fromEntries(u.map((e) => [e.labelKey, e.labelFallback]))
555
- }), _ = Object.freeze({
586
+ }), v = Object.freeze({
556
587
  "attachments.retrying": "Retrying {{attempt}} of {{max}}",
557
588
  "attachments.waking": "File service is starting up — retry {{attempt}} of {{max}}",
558
589
  "outcome.usageDailyLimitReachedNoTime": "You've reached today's AI assistant limit. Try again tomorrow."
559
- }), v = Object.freeze({
560
- ...m,
561
- ...g,
562
- ..._
590
+ }), y = Object.freeze({
591
+ ...h,
592
+ ..._,
593
+ ...v
563
594
  });
564
- function y(e) {
595
+ function b(e) {
565
596
  let r = e.map((e) => e.id).filter((e) => !n(e));
566
597
  if (r.length > 0) throw Error(`assistantModeI18nCopy: malformed mode id ${r.map((e) => JSON.stringify(e)).join(", ")}. Declare product modes with declareAssistantMode().`);
567
598
  return Object.fromEntries(e.map((e) => [`mode.${e.id}`, e.label || t(e)]));
568
599
  }
569
- function b(t) {
600
+ function x(t) {
570
601
  let n = {
571
- ...v,
572
- ...y(t.modes)
602
+ ...y,
603
+ ...b(t.modes)
573
604
  }, r = Object.entries(t.overrides ?? {}), i = r.filter(([e]) => !Object.hasOwn(n, e)).map(([e]) => e);
574
605
  if (i.length > 0) throw Error(`assistantI18nSeedCopy: no shared assistant key ${i.join(", ")} to override. Check the spelling, or that the key is a mode this product offers; a key fe-libs no longer requests belongs with the product's own keys.`);
575
606
  let a = r.filter(([, e]) => e.trim() === "").map(([e]) => e);
@@ -577,7 +608,7 @@ function b(t) {
577
608
  let o = {
578
609
  ...n,
579
610
  ...Object.fromEntries(r),
580
- ...d({
611
+ ...f({
581
612
  modes: t.modes,
582
613
  pageLabels: t.pageLabels
583
614
  })
@@ -585,4 +616,4 @@ function b(t) {
585
616
  return Object.fromEntries(Object.entries(o).map(([n, r]) => [e(t.namespace, n), r]));
586
617
  }
587
618
  //#endregion
588
- export { g as ASSISTANT_I18N_COMPUTED_COPY, m as ASSISTANT_I18N_LITERAL_COPY, v as ASSISTANT_I18N_MANIFEST, _ as ASSISTANT_I18N_SEED_COMPAT_COPY, b as assistantI18nSeedCopy, y as assistantModeI18nCopy };
619
+ export { _ as ASSISTANT_I18N_COMPUTED_COPY, h as ASSISTANT_I18N_LITERAL_COPY, y as ASSISTANT_I18N_MANIFEST, v as ASSISTANT_I18N_SEED_COMPAT_COPY, x as assistantI18nSeedCopy, b as assistantModeI18nCopy };
@@ -345,6 +345,8 @@ export * from './avatar/live/LiveAvatarTabView';
345
345
  export * from './avatar/live/avatarFaces';
346
346
  export * from './avatar/live/AvatarFace';
347
347
  export * from './avatar/live/liveAvatarStatus';
348
+ export * from './avatar/live/liveAvatarMinutesView';
349
+ export * from './avatar/live/LiveAvatarMinutes';
348
350
  export * from './avatar/live/createLiveAvatarSeam';
349
351
  export * from './avatar/live/avatarVoice';
350
352
  export * from './promptDelivery';
@@ -70,6 +70,6 @@ export declare function applyLiveDeltas(polled: readonly AssistantRawMessage[],
70
70
  * it saw was live from its start and none was gapped or frozen, `partial` when
71
71
  * the stream carried some but not all, `none` when it carried nothing.
72
72
  */
73
- export declare function liveCoverage(state: LiveDeltaState): "full" | "partial" | "none";
73
+ export declare function liveCoverage(state: LiveDeltaState): 'full' | 'partial' | 'none';
74
74
  /** Has any live text arrived that could be shown? */
75
75
  export declare function hasLiveText(state: LiveDeltaState): boolean;
@@ -40,7 +40,7 @@ export interface LiveRenderOptions {
40
40
  setTimer?: (run: () => void, ms: number) => unknown;
41
41
  clearTimer?: (timer: unknown) => void;
42
42
  /** Tests only: a store other than the shared one. */
43
- overlay?: Pick<LiveOverlayState, "setLive" | "clearLive">;
43
+ overlay?: Pick<LiveOverlayState, 'setLive' | 'clearLive'>;
44
44
  }
45
45
  export interface LiveRender {
46
46
  /**
@@ -92,7 +92,7 @@ export declare function offerAnnounceText(tr: AssistantTr, page: string): string
92
92
  * The hint under the link: "yes" is named only for an offer the model asked
93
93
  * about in a read transport (`uiOfferHintKind`).
94
94
  */
95
- export declare function offerHintText(tr: AssistantTr, kind: "read" | "link"): string;
95
+ export declare function offerHintText(tr: AssistantTr, kind: 'read' | 'link'): string;
96
96
  /** A "yes" to an offer that ran out of time. */
97
97
  export declare function offerExpiredCopy(tr: AssistantTr): LocalCommandCopy;
98
98
  /** An accepted offer whose page the live registry no longer holds. */
@@ -4,14 +4,14 @@ import { ControlSnapshot } from './appControls/snapshot';
4
4
  import { AssistantEntityRoute } from './uiActions/entityRoutes';
5
5
  import { NavigationContext, PendingChoice } from './uiActions/linkContext';
6
6
  import { AssistantRecordAdapter, RecordRequest } from './uiActions/recordNames';
7
- export type ThemeFamily = "light" | "dark";
7
+ export type ThemeFamily = 'light' | 'dark';
8
8
  /** Named themes a person can ask for, beyond the plain light/dark family. */
9
- export type NamedTheme = "forest" | "ocean" | "sunset" | "high-contrast" | "system";
9
+ export type NamedTheme = 'forest' | 'ocean' | 'sunset' | 'high-contrast' | 'system';
10
10
  export type ThemeRequest = {
11
- kind: "family";
11
+ kind: 'family';
12
12
  family: ThemeFamily;
13
13
  } | {
14
- kind: "named";
14
+ kind: 'named';
15
15
  theme: NamedTheme;
16
16
  };
17
17
  /** A place the person can be taken: an entry in the app's navigation. */
@@ -31,7 +31,7 @@ export interface LocalDestination {
31
31
  group?: string;
32
32
  }
33
33
  export type LocalUiCommand = {
34
- kind: "theme";
34
+ kind: 'theme';
35
35
  request: ThemeRequest;
36
36
  }
37
37
  /**
@@ -40,9 +40,9 @@ export type LocalUiCommand = {
40
40
  * one" over a numbered list the panel showed (BOFF-8060 N1b).
41
41
  */
42
42
  | {
43
- kind: "navigate";
43
+ kind: 'navigate';
44
44
  destination: LocalDestination;
45
- via?: "link" | "choice";
45
+ via?: 'link' | 'choice';
46
46
  }
47
47
  /**
48
48
  * ★ BOFF-8060 (N3): a page the model OFFERED, accepted — "take me there"
@@ -51,13 +51,13 @@ export type LocalUiCommand = {
51
51
  * it navigates. `destination` is the person's own registry entry.
52
52
  */
53
53
  | {
54
- kind: "navigate";
54
+ kind: 'navigate';
55
55
  destination: LocalDestination;
56
- via: "offer";
56
+ via: 'offer';
57
57
  offerId: string;
58
- trigger: "deixis" | "yes";
58
+ trigger: 'deixis' | 'yes';
59
59
  } | {
60
- kind: "choose-destination";
60
+ kind: 'choose-destination';
61
61
  query: string;
62
62
  candidates: LocalDestination[];
63
63
  }
@@ -67,7 +67,7 @@ export type LocalUiCommand = {
67
67
  * deletes. Typed and spoken alike, it records nothing.
68
68
  */
69
69
  | {
70
- kind: "conversation-delete";
70
+ kind: 'conversation-delete';
71
71
  }
72
72
  /**
73
73
  * ★ BOFF-8060 (R2): "go back" — undo the assistant's OWN last navigation.
@@ -75,7 +75,7 @@ export type LocalUiCommand = {
75
75
  * (`LocalUiCommandContext.backRunnable`).
76
76
  */
77
77
  | {
78
- kind: "back";
78
+ kind: 'back';
79
79
  }
80
80
  /**
81
81
  * ★ BOFF-8060 (N1b): "take me there" over a reply that links 2 to 4 pages —
@@ -83,19 +83,19 @@ export type LocalUiCommand = {
83
83
  * 4, in reply order).
84
84
  */
85
85
  | {
86
- kind: "choose-linked";
86
+ kind: 'choose-linked';
87
87
  candidates: LocalDestination[];
88
88
  }
89
89
  /** A choice word (or "there") while a numbered list is the newest message: point at the list. */
90
90
  | {
91
- kind: "pick-from-list";
91
+ kind: 'pick-from-list';
92
92
  /** The list that IS the newest message (null: it cannot be read back). It stays pending after this reply. */
93
- candidates: PendingChoice["candidates"];
94
- candidateIds: PendingChoice["candidateIds"];
93
+ candidates: PendingChoice['candidates'];
94
+ candidateIds: PendingChoice['candidateIds'];
95
95
  }
96
96
  /** "take me there", and the reply links only pages the person cannot be taken to from here. */
97
97
  | {
98
- kind: "link-not-openable";
98
+ kind: 'link-not-openable';
99
99
  }
100
100
  /**
101
101
  * ★ BOFF-8060 (N1b): "open the Coffee Shop Sales dashboard". The panel asks
@@ -103,7 +103,7 @@ export type LocalUiCommand = {
103
103
  * sentence to the model as before.
104
104
  */
105
105
  | {
106
- kind: "open-record";
106
+ kind: 'open-record';
107
107
  request: RecordRequest;
108
108
  }
109
109
  /**
@@ -112,7 +112,7 @@ export type LocalUiCommand = {
112
112
  * (`appControls/registry.ts`). Never produced without one.
113
113
  */
114
114
  | {
115
- kind: "app-control";
115
+ kind: 'app-control';
116
116
  request: AppControlRequest;
117
117
  };
118
118
  /**
@@ -132,7 +132,7 @@ export interface LocalUiCommandOptions {
132
132
  * qualified as the app's ("change the app theme to dark") — sets the APP
133
133
  * theme. Default `any`.
134
134
  */
135
- themeWords?: "any" | "mode-only";
135
+ themeWords?: 'any' | 'mode-only';
136
136
  /**
137
137
  * The language the sentence was typed or said in (a BCP-47 tag or the
138
138
  * assistant's code). Plural/singular page matching (BOFF-8247) is English
@@ -246,7 +246,7 @@ export interface NavEntryLike {
246
246
  */
247
247
  export declare function navDestinations(entries: readonly NavEntryLike[], parent?: string): LocalDestination[];
248
248
  /** The concrete theme `setMode` takes. */
249
- export type ThemeModeValue = "light" | "dark" | NamedTheme;
249
+ export type ThemeModeValue = 'light' | 'dark' | NamedTheme;
250
250
  /**
251
251
  * What a theme request does given the current theme — SET semantics, never a
252
252
  * toggle. A family request is already satisfied by any theme of that family:
@@ -14,7 +14,7 @@ export interface Compiled {
14
14
  zh: boolean;
15
15
  prep: PrepData;
16
16
  closed: ClosedSlots;
17
- goto: Record<"go" | "open" | "show", CompiledFrame[]>;
17
+ goto: Record<'go' | 'open' | 'show', CompiledFrame[]>;
18
18
  ambiguous: Set<string>;
19
19
  there: CompiledFrame[];
20
20
  back: CompiledFrame[];
@@ -22,12 +22,12 @@ export interface Compiled {
22
22
  language: CompiledFrame[];
23
23
  theme: Array<{
24
24
  frame: CompiledFrame;
25
- family: "light" | "dark";
25
+ family: 'light' | 'dark';
26
26
  invert: boolean;
27
27
  saysTheme: boolean;
28
28
  }>;
29
29
  controls: {
30
- phrases: Record<"history" | "transcript" | "previewOpen" | "previewClose" | "newConversation" | "notifications" | "help" | "sidebarCollapse" | "sidebarExpand", CompiledControlPhrase[]>;
30
+ phrases: Record<'history' | 'transcript' | 'previewOpen' | 'previewClose' | 'newConversation' | 'notifications' | 'help' | 'sidebarCollapse' | 'sidebarExpand', CompiledControlPhrase[]>;
31
31
  tab: CompiledFrame[];
32
32
  filter: CompiledFrame[];
33
33
  filterClear: CompiledFrame[];
@@ -69,7 +69,7 @@ export interface LocaleEngineInput {
69
69
  inputLocale?: string | undefined;
70
70
  commandLocales?: readonly string[] | undefined;
71
71
  manifest: CommandManifest;
72
- themeWords?: "any" | "mode-only" | undefined;
72
+ themeWords?: 'any' | 'mode-only' | undefined;
73
73
  /** An offered navigation context exists (the newest reply's links or list). */
74
74
  navigation: boolean;
75
75
  backRunnable: boolean;
@@ -86,4 +86,4 @@ export declare function matchLocaleIntents(input: LocaleEngineInput): LocaleRun[
86
86
  * panel builds the offered-navigation context (a parse of the newest reply) only
87
87
  * for such a sentence, so an ordinary send never parses a reply.
88
88
  */
89
- export declare function mayBeThereOrPick(input: Omit<LocaleEngineInput, "destinations" | "controls">): boolean;
89
+ export declare function mayBeThereOrPick(input: Omit<LocaleEngineInput, 'destinations' | 'controls'>): boolean;
@@ -6,8 +6,8 @@ import { CommandManifest } from './types';
6
6
  export interface EvalControls {
7
7
  registered?: readonly string[];
8
8
  languages?: readonly UiLanguage[];
9
- sidebarEntries?: ControlSnapshot["sidebarEntries"];
10
- page?: Partial<NonNullable<ControlSnapshot["page"]>> | null;
9
+ sidebarEntries?: ControlSnapshot['sidebarEntries'];
10
+ page?: Partial<NonNullable<ControlSnapshot['page']>> | null;
11
11
  }
12
12
  export interface EvalNavigation {
13
13
  links?: readonly LocalDestination[];
@@ -26,24 +26,24 @@ export interface EvalItem {
26
26
  text: string;
27
27
  uiLocale: string;
28
28
  inputLocale?: string;
29
- origin?: "typed" | "spoken";
29
+ origin?: 'typed' | 'spoken';
30
30
  family?: string;
31
31
  sidebar?: readonly LocalDestination[];
32
32
  controls?: EvalControls;
33
33
  backRunnable?: boolean;
34
34
  navigation?: EvalNavigation | null;
35
35
  yes?: EvalYes;
36
- themeWords?: "any" | "mode-only";
36
+ themeWords?: 'any' | 'mode-only';
37
37
  expected?: string | Record<string, unknown>;
38
38
  }
39
39
  export type EvalActual = {
40
- result: "model";
40
+ result: 'model';
41
41
  plannedAs?: string;
42
42
  } | ({
43
- result: "command";
43
+ result: 'command';
44
44
  kind: string;
45
45
  } & Record<string, unknown>);
46
- export type EvalVerdict = "pass" | "false-match" | "wrong" | "miss" | "unscored";
46
+ export type EvalVerdict = 'pass' | 'false-match' | 'wrong' | 'miss' | 'unscored';
47
47
  export interface EvalResult {
48
48
  id: string;
49
49
  locale: string;
@@ -56,7 +56,7 @@ export interface EvalResult {
56
56
  export declare function describeCommand(command: LocalUiCommand | null): EvalActual;
57
57
  /** What the shipping composition does with one item. */
58
58
  export declare function actualOf(item: EvalItem, manifest: CommandManifest): EvalActual;
59
- export declare function verdictOf(actual: EvalActual, expected: EvalItem["expected"]): EvalVerdict;
59
+ export declare function verdictOf(actual: EvalActual, expected: EvalItem['expected']): EvalVerdict;
60
60
  export declare function evaluateCommandItem(item: EvalItem, manifest?: CommandManifest): EvalResult;
61
61
  export interface EvalCell {
62
62
  locale: string;
@@ -3,7 +3,7 @@ import { CommandLocale } from './types';
3
3
  * The fold: lower-case, punctuation-free, single-spaced — and, for `zh`, with no
4
4
  * space at all. Idempotent.
5
5
  */
6
- export declare function foldText(text: string, locale: CommandLocale | "en"): string;
6
+ export declare function foldText(text: string, locale: CommandLocale | 'en'): string;
7
7
  /** One word of a sentence, as said and as folded (a word may fold to several, or to none). */
8
8
  export interface FoldedWord {
9
9
  said: string;
@@ -14,4 +14,4 @@ export interface FoldedWord {
14
14
  * free-text slot can hand back the person's OWN words (case, inner
15
15
  * punctuation) rather than the fold of them.
16
16
  */
17
- export declare function foldWords(text: string, locale: CommandLocale | "en"): FoldedWord[];
17
+ export declare function foldWords(text: string, locale: CommandLocale | 'en'): FoldedWord[];
@@ -10,14 +10,14 @@ export interface CompiledFrame {
10
10
  readonly slots: readonly string[];
11
11
  }
12
12
  /** Compile a template for `locale`. Throws on a malformed template (a table bug). */
13
- export declare function compileFrame(template: string, locale: CommandLocale | "en", closed?: ClosedSlots): CompiledFrame;
13
+ export declare function compileFrame(template: string, locale: CommandLocale | 'en', closed?: ClosedSlots): CompiledFrame;
14
14
  /** Every distinct parse of the whole folded utterance by this frame. */
15
15
  export declare function matchFrame(frame: CompiledFrame, folded: string): Captures[];
16
16
  /** A map from folded word to value, for a closed slot. */
17
- export declare function closedSlot(entries: ReadonlyArray<readonly [readonly string[], string | number]>, locale: CommandLocale | "en"): ReadonlyMap<string, string | number>;
17
+ export declare function closedSlot(entries: ReadonlyArray<readonly [readonly string[], string | number]>, locale: CommandLocale | 'en'): ReadonlyMap<string, string | number>;
18
18
  /**
19
19
  * Every sentence a template can say, with each slot filled from `slots` (a
20
20
  * closed slot may be left out: its table words are used). For the tests and the
21
21
  * evaluation harness — the engine never enumerates, it matches.
22
22
  */
23
- export declare function expandTemplate(template: string, locale: CommandLocale | "en", slots: Readonly<Record<string, readonly string[]>>, closed?: ClosedSlots): string[];
23
+ export declare function expandTemplate(template: string, locale: CommandLocale | 'en', slots: Readonly<Record<string, readonly string[]>>, closed?: ClosedSlots): string[];
@@ -6,7 +6,7 @@ import { CommandFamily, CommandManifest, ManifestLocale } from './types';
6
6
  */
7
7
  export declare const COMMAND_MANIFEST: CommandManifest;
8
8
  /** The families each manifest locale can carry. `en` carries only the English additions. */
9
- export declare const MANIFEST_FAMILIES: Readonly<Record<ManifestLocale, readonly (CommandFamily | "frames")[]>>;
9
+ export declare const MANIFEST_FAMILIES: Readonly<Record<ManifestLocale, readonly (CommandFamily | 'frames')[]>>;
10
10
  /** Design §3.2 G4: the recall an entry needs to be enabled for go-to, there and yes. */
11
11
  export declare const RECALL_FLOOR = 0.6;
12
12
  /**
@@ -26,7 +26,7 @@ export declare function manifestWith(on: readonly string[]): CommandManifest;
26
26
  */
27
27
  export declare function effectiveManifest(supplied: CommandManifest | undefined, shipped?: CommandManifest): CommandManifest;
28
28
  /** Is `family` of `locale` on in this manifest? */
29
- export declare function isEnabled(manifest: CommandManifest, locale: ManifestLocale, family: CommandFamily | "frames"): boolean;
29
+ export declare function isEnabled(manifest: CommandManifest, locale: ManifestLocale, family: CommandFamily | 'frames'): boolean;
30
30
  /** Does this locale have any family on? (A table with nothing on is not active.) */
31
31
  export declare function localeHasAnyOn(manifest: CommandManifest, locale: ManifestLocale): boolean;
32
32
  /**
@@ -34,4 +34,4 @@ export declare function localeHasAnyOn(manifest: CommandManifest, locale: Manife
34
34
  * `corpusShaOf` reads the sha256 of the frozen blind file an entry names, or
35
35
  * null when that file does not exist.
36
36
  */
37
- export declare function validateManifest(manifest: CommandManifest, corpusShaOf: (locale: ManifestLocale, family: CommandFamily | "frames") => string | null): string[];
37
+ export declare function validateManifest(manifest: CommandManifest, corpusShaOf: (locale: ManifestLocale, family: CommandFamily | 'frames') => string | null): string[];
@@ -7,5 +7,5 @@ import { CommandLocale, LanguageCode, LocaleTable } from './types';
7
7
  export declare function languageNameMap(input: {
8
8
  tables: readonly LocaleTable[];
9
9
  appLanguages: readonly UiLanguage[];
10
- fold: CommandLocale | "en";
10
+ fold: CommandLocale | 'en';
11
11
  }): ReadonlyMap<string, LanguageCode>;
@@ -1,5 +1,5 @@
1
1
  import { CommandLocale } from './types';
2
- export type FoldLocale = CommandLocale | "en";
2
+ export type FoldLocale = CommandLocale | 'en';
3
3
  /** The normalisation words a table (or the English additions) brings. */
4
4
  export interface PrepSource {
5
5
  maxLength: number;
@@ -24,9 +24,9 @@ export type CommandLocale = (typeof COMMAND_LOCALES)[number];
24
24
  export declare const COMMAND_FAMILIES: readonly ["goto", "there", "back", "pick", "yes", "language", "theme", "controls"];
25
25
  export type CommandFamily = (typeof COMMAND_FAMILIES)[number];
26
26
  /** The locale keys of the manifest: `en` carries the English additions. */
27
- export type ManifestLocale = CommandLocale | "en";
27
+ export type ManifestLocale = CommandLocale | 'en';
28
28
  /** The six UI languages a language command can set (`appControls/types`). */
29
- export type LanguageCode = "en" | "ar" | "es" | "hi" | "ta" | "zh";
29
+ export type LanguageCode = 'en' | 'ar' | 'es' | 'hi' | 'ta' | 'zh';
30
30
  /** How a go-to template treats a record noun and a place word. */
31
31
  export interface GotoFrames {
32
32
  /** "go to X": a navigation verb, a bare name is enough. */
@@ -56,7 +56,7 @@ export interface PickFrames {
56
56
  /** One theme phrase: a template over nothing (a closed phrase), the family it sets. */
57
57
  export interface ThemePhrase {
58
58
  template: string;
59
- family: "light" | "dark";
59
+ family: 'light' | 'dark';
60
60
  /** "dark mode off" sets the other family. */
61
61
  invert?: boolean;
62
62
  /** The phrase says "theme": a product with `themeWords: "mode-only"` skips it. */
@@ -169,4 +169,4 @@ export interface ManifestEntry {
169
169
  falseMatches?: number;
170
170
  recall?: number;
171
171
  }
172
- export type CommandManifest = Readonly<Record<ManifestLocale, Readonly<Partial<Record<CommandFamily | "frames", ManifestEntry>>>>>;
172
+ export type CommandManifest = Readonly<Record<ManifestLocale, Readonly<Partial<Record<CommandFamily | 'frames', ManifestEntry>>>>>;
@@ -44,7 +44,7 @@ export interface AssistantModeCapabilities {
44
44
  readonly provisionable: boolean;
45
45
  }
46
46
  /** The capability fields a product may set, plus the id they belong to. */
47
- export type AssistantModeCapabilityConfig = Pick<AssistantModeConfig, "id" | "producesArtifacts" | "streamBudgetMs" | "continuesInBackground" | "accumulatesNarration">;
47
+ export type AssistantModeCapabilityConfig = Pick<AssistantModeConfig, 'id' | 'producesArtifacts' | 'streamBudgetMs' | 'continuesInBackground' | 'accumulatesNarration'>;
48
48
  /**
49
49
  * The largest `streamBudgetMs` a product may configure: one hour.
50
50
  *
@@ -17,8 +17,8 @@ import { AssistantMode, BuiltInAssistantMode } from './types';
17
17
  export declare const ASSISTANT_MODE_FALLBACK_LABELS: {
18
18
  readonly general: "Ask";
19
19
  readonly assistant: "Ask";
20
- readonly "api-calls": "Take action";
21
- readonly "vibe-plugins": "Build";
20
+ readonly 'api-calls': "Take action";
21
+ readonly 'vibe-plugins': "Build";
22
22
  };
23
23
  /**
24
24
  * Every BUILT-IN mode id, read off the table above so the list cannot fall
@@ -4,7 +4,7 @@
4
4
  * assistant session for this role yet — a platform decision, not an access a
5
5
  * workspace admin can grant, so its copy asks no one for anything.
6
6
  */
7
- export type PermissionRefusal = "denied" | "session" | "provisioning-gated";
7
+ export type PermissionRefusal = 'denied' | 'session' | 'provisioning-gated';
8
8
  /**
9
9
  * The i18n key wspace-sandbox-svc refuses `provisionAssistantSandbox` with
10
10
  * while the §2.8 gate is on (FORBIDDEN, for a caller without
@@ -33,4 +33,4 @@ export declare function describePermissionError(error: unknown): PermissionRefus
33
33
  */
34
34
  export declare function permissionRefusalMessage(detail: PermissionRefusalDetail): string;
35
35
  /** Which outcome copy a permission refusal gets — one table, read by both the message and the outcome. */
36
- export declare function permissionRefusalCopyId(refusal: PermissionRefusal): "sessionUnverified" | "provisioningNotPermitted" | "permissionDenied";
36
+ export declare function permissionRefusalCopyId(refusal: PermissionRefusal): 'sessionUnverified' | 'provisioningNotPermitted' | 'permissionDenied';
@@ -20,7 +20,7 @@ import { AssistantPreviewEvent, AssistantPreviewRun } from './types';
20
20
  * rebuilt. Without a named phase for it the phase became whatever string
21
21
  * arrived, and a product's status lookup returned `undefined`.
22
22
  */
23
- export type PreviewPhase = "idle" | "generating" | "complete" | "error" | "abandoned" | "ended";
23
+ export type PreviewPhase = 'idle' | 'generating' | 'complete' | 'error' | 'abandoned' | 'ended';
24
24
  /**
25
25
  * Who an answer belongs to.
26
26
  *
@@ -60,11 +60,11 @@ export interface AssistantPreviewRun {
60
60
  * than in a comment a consumer never reads.
61
61
  */
62
62
  export type AssistantPreviewEvent = {
63
- kind: "start";
63
+ kind: 'start';
64
64
  run: AssistantPreviewRun;
65
65
  } | {
66
66
  /** An approved write finished, independently of the model's turn. */
67
- kind: "action-result";
67
+ kind: 'action-result';
68
68
  run: AssistantPreviewRun;
69
69
  action: {
70
70
  id: string;
@@ -76,7 +76,7 @@ export type AssistantPreviewEvent = {
76
76
  result: unknown;
77
77
  };
78
78
  } | {
79
- kind: "snapshot";
79
+ kind: 'snapshot';
80
80
  run: AssistantPreviewRun;
81
81
  /**
82
82
  * ★★ THE PROSE, with the tool-activity lines REMOVED.
@@ -98,7 +98,7 @@ export type AssistantPreviewEvent = {
98
98
  */
99
99
  steps: readonly AssistantToolStep[];
100
100
  } | {
101
- kind: "end";
101
+ kind: 'end';
102
102
  run: AssistantPreviewRun;
103
103
  /**
104
104
  * ★★ `abandoned` is not a failure and not a completion — it is a run the
@@ -109,7 +109,7 @@ export type AssistantPreviewEvent = {
109
109
  * outcome the run would simply never end and a preview would sit showing
110
110
  * progress forever. The turn may or may not still be executing.
111
111
  */
112
- outcome: "complete" | "error" | "abandoned";
112
+ outcome: 'complete' | 'error' | 'abandoned';
113
113
  /**
114
114
  * ★ NON-optional. Every terminal branch sets this — `complete` and
115
115
  * `error` from the store, `abandoned` explicitly as null — so leaving it
@@ -5,5 +5,5 @@ import { AssistantPreviewEvent } from './types';
5
5
  export declare function writeActionResultEvents(view: Pick<WriteProposalView, 'proposalId' | 'status' | 'result'> & {
6
6
  description: Pick<WriteProposalView['description'], 'rootFields'>;
7
7
  }, conversationId: string, messageId: string, owner: PreviewOwner): Extract<AssistantPreviewEvent, {
8
- kind: "action-result";
8
+ kind: 'action-result';
9
9
  }>[];