@burdenoff/fe-libs 2026.1007.5 → 2026.1007.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/shared/assistant/api.d.ts +11 -0
  2. package/dist/shared/assistant/api.d.ts.map +1 -1
  3. package/dist/shared/assistant/api.js +6 -2
  4. package/dist/shared/assistant/conversation.d.ts +14 -0
  5. package/dist/shared/assistant/conversation.d.ts.map +1 -1
  6. package/dist/shared/assistant/createSandboxAssistantTransport.d.ts +8 -1
  7. package/dist/shared/assistant/createSandboxAssistantTransport.d.ts.map +1 -1
  8. package/dist/shared/assistant/createSandboxAssistantTransport.js +70 -51
  9. package/dist/shared/assistant/history/historyMapping.d.ts.map +1 -1
  10. package/dist/shared/assistant/history/historyMapping.js +19 -12
  11. package/dist/shared/assistant/i18nManifest.d.ts +9 -0
  12. package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
  13. package/dist/shared/assistant/i18nManifest.js +9 -0
  14. package/dist/shared/assistant/index.d.ts +6 -0
  15. package/dist/shared/assistant/index.d.ts.map +1 -1
  16. package/dist/shared/assistant/localUiCommandCopy.d.ts +23 -0
  17. package/dist/shared/assistant/localUiCommandCopy.d.ts.map +1 -1
  18. package/dist/shared/assistant/localUiCommandCopy.js +60 -23
  19. package/dist/shared/assistant/localUiCommands.d.ts +29 -0
  20. package/dist/shared/assistant/localUiCommands.d.ts.map +1 -1
  21. package/dist/shared/assistant/localUiCommands.js +18 -7
  22. package/dist/shared/assistant/types.d.ts +19 -8
  23. package/dist/shared/assistant/types.d.ts.map +1 -1
  24. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  25. package/dist/shared/assistant/ui/AssistantChatArea.js +1479 -1140
  26. package/dist/shared/assistant/ui/AssistantMarkdownRenderer.d.ts +18 -3
  27. package/dist/shared/assistant/ui/AssistantMarkdownRenderer.d.ts.map +1 -1
  28. package/dist/shared/assistant/ui/AssistantMarkdownRenderer.js +1 -1
  29. package/dist/shared/assistant/ui/AssistantMessageItem.d.ts +5 -0
  30. package/dist/shared/assistant/ui/AssistantMessageItem.d.ts.map +1 -1
  31. package/dist/shared/assistant/ui/AssistantMessageItem.js +89 -84
  32. package/dist/shared/assistant/ui/AssistantMessageList.d.ts +5 -0
  33. package/dist/shared/assistant/ui/AssistantMessageList.d.ts.map +1 -1
  34. package/dist/shared/assistant/ui/AssistantMessageList.js +26 -25
  35. package/dist/shared/assistant/ui/AssistantUiOfferLink.d.ts +45 -0
  36. package/dist/shared/assistant/ui/AssistantUiOfferLink.d.ts.map +1 -0
  37. package/dist/shared/assistant/ui/AssistantUiOfferLink.js +56 -0
  38. package/dist/shared/assistant/ui/assistantOverlayState.d.ts +9 -0
  39. package/dist/shared/assistant/ui/assistantOverlayState.d.ts.map +1 -1
  40. package/dist/shared/assistant/ui/assistantOverlayState.js +37 -28
  41. package/dist/shared/assistant/ui/composer/AssistantConnectSourceItem.d.ts.map +1 -1
  42. package/dist/shared/assistant/ui/composer/AssistantConnectSourceItem.js +1 -1
  43. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts +5 -0
  44. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
  45. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +12 -11
  46. package/dist/shared/assistant/ui/voice/VoiceConversationView.d.ts +6 -1
  47. package/dist/shared/assistant/ui/voice/VoiceConversationView.d.ts.map +1 -1
  48. package/dist/shared/assistant/ui/voice/VoiceConversationView.js +7 -7
  49. package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.d.ts +6 -1
  50. package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.d.ts.map +1 -1
  51. package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.js +15 -12
  52. package/dist/shared/assistant/uiActions/actOnResolve.d.ts +108 -0
  53. package/dist/shared/assistant/uiActions/actOnResolve.d.ts.map +1 -0
  54. package/dist/shared/assistant/uiActions/actOnResolve.js +51 -0
  55. package/dist/shared/assistant/uiActions/linkContext.d.ts +29 -0
  56. package/dist/shared/assistant/uiActions/linkContext.d.ts.map +1 -1
  57. package/dist/shared/assistant/uiActions/linkContext.js +37 -10
  58. package/dist/shared/assistant/uiActions/navIntent.d.ts +58 -0
  59. package/dist/shared/assistant/uiActions/navIntent.d.ts.map +1 -0
  60. package/dist/shared/assistant/uiActions/navIntent.js +79 -0
  61. package/dist/shared/assistant/uiActions/navigateAction.d.ts +6 -1
  62. package/dist/shared/assistant/uiActions/navigateAction.d.ts.map +1 -1
  63. package/dist/shared/assistant/uiActions/navigateAction.js +18 -14
  64. package/dist/shared/assistant/uiActions/navigationOutcome.d.ts +16 -2
  65. package/dist/shared/assistant/uiActions/navigationOutcome.d.ts.map +1 -1
  66. package/dist/shared/assistant/uiActions/navigationOutcome.js +6 -2
  67. package/dist/shared/assistant/uiActions/offerYesOnSurface.d.ts +39 -0
  68. package/dist/shared/assistant/uiActions/offerYesOnSurface.d.ts.map +1 -0
  69. package/dist/shared/assistant/uiActions/offerYesOnSurface.js +34 -0
  70. package/dist/shared/assistant/uiActions/uiCatalogue.d.ts +14 -0
  71. package/dist/shared/assistant/uiActions/uiCatalogue.d.ts.map +1 -1
  72. package/dist/shared/assistant/uiActions/uiCatalogue.js +23 -3
  73. package/dist/shared/assistant/uiActions/uiOffers.d.ts +249 -0
  74. package/dist/shared/assistant/uiActions/uiOffers.d.ts.map +1 -0
  75. package/dist/shared/assistant/uiActions/uiOffers.js +195 -0
  76. package/dist/shared/assistant/writeProposals.d.ts +6 -0
  77. package/dist/shared/assistant/writeProposals.d.ts.map +1 -1
  78. package/dist/shared/assistant/writeReplyBinder.d.ts +40 -0
  79. package/dist/shared/assistant/writeReplyBinder.d.ts.map +1 -1
  80. package/dist/shared/assistant/writeReplyBinder.js +100 -83
  81. package/dist/shared/assistant/writeReplySend.d.ts +14 -0
  82. package/dist/shared/assistant/writeReplySend.d.ts.map +1 -1
  83. package/dist/shared/assistant/writeReplySend.js +32 -29
  84. package/dist/shared/hooks/index.d.ts +2 -0
  85. package/dist/shared/hooks/index.d.ts.map +1 -1
  86. package/dist/shared/navigation/unsavedChanges.d.ts +83 -0
  87. package/dist/shared/navigation/unsavedChanges.d.ts.map +1 -0
  88. package/dist/shared/navigation/unsavedChanges.js +46 -0
  89. package/dist/shared-assistant.js +244 -238
  90. package/dist/shared-hooks.js +10 -9
  91. package/dist/shared.js +20 -19
  92. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"assistantOverlayState.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/assistantOverlayState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assistantOverlayState.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/assistantOverlayState.ts"],"names":[],"mappings":"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"}
@@ -1,72 +1,81 @@
1
+ import { unsavedChangesBlocking as e } from "../../navigation/unsavedChanges.js";
1
2
  //#region src/shared/assistant/ui/assistantOverlayState.ts
2
- function e(e) {
3
+ function t(e) {
3
4
  return {
4
5
  toggleEvent: `${e}:toggle-ai-assistant`,
5
6
  openStorageKey: `${e}:ai-panel:isOpen`,
6
7
  dockStorageKey: `${e}:ai-panel:docked`
7
8
  };
8
9
  }
9
- function t(e) {
10
+ function n(e) {
10
11
  if (typeof CustomEvent > "u" || !(e instanceof CustomEvent)) return null;
11
12
  let t = e.detail;
12
13
  return typeof t != "object" || !t || !("open" in t) ? null : typeof t.open == "boolean" ? t.open : null;
13
14
  }
14
- function n(e, t) {
15
+ function r(e, t) {
15
16
  return t ?? !e;
16
17
  }
17
- var r = "Ctrl+Shift+A";
18
- function i(e) {
18
+ var i = "Ctrl+Shift+A";
19
+ function a(e) {
19
20
  return (e.ctrlKey || e.metaKey) && e.shiftKey && typeof e.key == "string" && e.key.toLowerCase() === "a";
20
21
  }
21
- var a = "[role=\"dialog\"],[role=\"alertdialog\"],dialog[open]";
22
- function o(e, t) {
23
- return s(e) ? e.closest(t) : null;
22
+ var o = "[role=\"dialog\"],[role=\"alertdialog\"],dialog[open]";
23
+ function s(e, t) {
24
+ return c(e) ? e.closest(t) : null;
24
25
  }
25
- function s(e) {
26
+ function c(e) {
26
27
  return typeof e == "object" && !!e && "closest" in e && typeof e.closest == "function";
27
28
  }
28
- function c(e) {
29
+ function l(e) {
29
30
  return e.key !== "Escape" || !e.isOpen || e.alreadyHandled || e.dialogOpen || e.pressedInsideDialog || e.panelOwnsEscape ? "ignore" : "close";
30
31
  }
31
- var l = "max(var(--mobile-tabbar-height, 0px), var(--safe-bottom, 0px), env(safe-area-inset-bottom, 0px))";
32
- function u(e) {
33
- return `calc(${e} + ${l})`;
32
+ var u = "max(var(--mobile-tabbar-height, 0px), var(--safe-bottom, 0px), env(safe-area-inset-bottom, 0px))";
33
+ function d(e) {
34
+ return `calc(${e} + ${u})`;
34
35
  }
35
- var d = 440, f = "--assistant-dock-width", p = "--assistant-overlay-top", m = 56, h = "(min-width: 640px)";
36
- function g(e) {
36
+ var f = 440, p = "--assistant-dock-width", m = "--assistant-overlay-top", h = 56, g = "(min-width: 640px)";
37
+ function _(e) {
37
38
  return e.isOpen && e.docked && e.isDesktop ? 440 : 0;
38
39
  }
39
- var _ = 520, v = 24, y = "--assistant-panel-inset";
40
- function b(e) {
40
+ var v = 520, y = 24, b = "--assistant-panel-inset";
41
+ function x(e) {
41
42
  return !e.isOpen || !e.isDesktop ? 0 : e.docked ? 440 : 544;
42
43
  }
43
- var x = "fixed z-50 flex flex-col overflow-hidden border border-border-default bg-bg-surface shadow-2xl inset-x-0 bottom-0 top-auto rounded-t-2xl animate-in slide-in-from-bottom-4 fade-in duration-200", S = "h-[60vh] max-h-[60vh]", C = "h-[88vh] max-h-[88vh]", w = "sm:inset-auto sm:top-auto sm:bottom-24 sm:right-6 sm:rounded-2xl sm:h-[680px] sm:max-h-[calc(100vh-8rem)] sm:w-[520px] sm:max-w-[calc(100vw-2rem)]", T = "sm:left-auto sm:right-0 sm:top-[var(--assistant-overlay-top)] sm:bottom-0 sm:rounded-none sm:h-auto sm:max-h-none sm:w-[440px] sm:max-w-[calc(100vw-2rem)]";
44
- function E(e) {
44
+ var S = "fixed z-50 flex flex-col overflow-hidden border border-border-default bg-bg-surface shadow-2xl inset-x-0 bottom-0 top-auto rounded-t-2xl animate-in slide-in-from-bottom-4 fade-in duration-200", C = "h-[60vh] max-h-[60vh]", w = "h-[88vh] max-h-[88vh]", T = "sm:inset-auto sm:top-auto sm:bottom-24 sm:right-6 sm:rounded-2xl sm:h-[680px] sm:max-h-[calc(100vh-8rem)] sm:w-[520px] sm:max-w-[calc(100vw-2rem)]", E = "sm:left-auto sm:right-0 sm:top-[var(--assistant-overlay-top)] sm:bottom-0 sm:rounded-none sm:h-auto sm:max-h-none sm:w-[440px] sm:max-w-[calc(100vw-2rem)]";
45
+ function D(e) {
45
46
  return [
46
- x,
47
- e.expanded ? C : S,
48
- e.docked ? T : w
47
+ S,
48
+ e.expanded ? w : C,
49
+ e.docked ? E : T
49
50
  ].join(" ");
50
51
  }
51
- function D(e) {
52
- return (t) => e.isShellLessTarget?.(t) ? (e.openInNewTab(t), { kind: "new-tab" }) : (e.navigate(t), e.isDesktop() || e.collapseSheet(), { kind: "routed" });
52
+ function O(t) {
53
+ return (n, r) => {
54
+ if (t.isShellLessTarget?.(n)) return t.openInNewTab(n), { kind: "new-tab" };
55
+ let i = e(r);
56
+ return i ? {
57
+ kind: "refused",
58
+ reason: "unsaved-changes",
59
+ unsaved: i
60
+ } : (t.navigate(n), t.isDesktop() || t.collapseSheet(), { kind: "routed" });
61
+ };
53
62
  }
54
- function O(e) {
63
+ function k(e) {
55
64
  if (typeof CustomEvent > "u" || !(e instanceof CustomEvent)) return "generic";
56
65
  let t = e.detail;
57
66
  return typeof t != "object" || !t || !("kind" in t) ? "generic" : t.kind === "sandbox" || t.kind === "ai-credits" ? t.kind : "generic";
58
67
  }
59
- function k(e, t) {
68
+ function A(e, t) {
60
69
  try {
61
70
  return e()?.getItem(t) === "1";
62
71
  } catch {
63
72
  return !1;
64
73
  }
65
74
  }
66
- function A(e, t, n) {
75
+ function j(e, t, n) {
67
76
  try {
68
77
  e()?.setItem(t, n ? "1" : "0");
69
78
  } catch {}
70
79
  }
71
80
  //#endregion
72
- export { l as ASSISTANT_BOTTOM_CHROME_CLEARANCE, a as ASSISTANT_DIALOG_SELECTOR, T as ASSISTANT_DOCKED_DESKTOP_CLASS, d as ASSISTANT_DOCK_WIDTH_PX, f as ASSISTANT_DOCK_WIDTH_VAR, w as ASSISTANT_FLOATING_DESKTOP_CLASS, v as ASSISTANT_FLOATING_RIGHT_PX, _ as ASSISTANT_FLOATING_WIDTH_PX, m as ASSISTANT_OVERLAY_DEFAULT_TOP_PX, h as ASSISTANT_OVERLAY_DESKTOP_QUERY, p as ASSISTANT_OVERLAY_TOP_VAR, y as ASSISTANT_PANEL_INSET_VAR, x as ASSISTANT_SHEET_BASE_CLASS, S as ASSISTANT_SHEET_COMPACT_CLASS, C as ASSISTANT_SHEET_EXPANDED_CLASS, r as ASSISTANT_TOGGLE_SHORTCUT_LABEL, u as aboveAssistantBottomChrome, E as assistantOverlayClassName, c as assistantOverlayEscapeAction, e as assistantOverlayKeys, O as assistantQuotaKindOf, o as closestAround, D as createAssistantNavigate, i as isAssistantToggleShortcut, n as nextAssistantOpenState, g as publishedAssistantDockWidth, b as publishedAssistantPanelInset, k as readAssistantOverlayFlag, t as requestedAssistantOpenState, A as writeAssistantOverlayFlag };
81
+ export { u as ASSISTANT_BOTTOM_CHROME_CLEARANCE, o as ASSISTANT_DIALOG_SELECTOR, E as ASSISTANT_DOCKED_DESKTOP_CLASS, f as ASSISTANT_DOCK_WIDTH_PX, p as ASSISTANT_DOCK_WIDTH_VAR, T as ASSISTANT_FLOATING_DESKTOP_CLASS, y as ASSISTANT_FLOATING_RIGHT_PX, v as ASSISTANT_FLOATING_WIDTH_PX, h as ASSISTANT_OVERLAY_DEFAULT_TOP_PX, g as ASSISTANT_OVERLAY_DESKTOP_QUERY, m as ASSISTANT_OVERLAY_TOP_VAR, b as ASSISTANT_PANEL_INSET_VAR, S as ASSISTANT_SHEET_BASE_CLASS, C as ASSISTANT_SHEET_COMPACT_CLASS, w as ASSISTANT_SHEET_EXPANDED_CLASS, i as ASSISTANT_TOGGLE_SHORTCUT_LABEL, d as aboveAssistantBottomChrome, D as assistantOverlayClassName, l as assistantOverlayEscapeAction, t as assistantOverlayKeys, k as assistantQuotaKindOf, s as closestAround, O as createAssistantNavigate, a as isAssistantToggleShortcut, r as nextAssistantOpenState, _ as publishedAssistantDockWidth, x as publishedAssistantPanelInset, A as readAssistantOverlayFlag, n as requestedAssistantOpenState, j as writeAssistantOverlayFlag };
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantConnectSourceItem.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/composer/AssistantConnectSourceItem.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAe,KAAK,EAAE,EAAmB,MAAM,OAAO,CAAC;AAc9D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,IAAI,EAChB,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,MAAM,IAAI,CAKZ;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,kCAAkC,GAAG,UAAU,GAAG,QAAQ,CAAC;AAoBvE,MAAM,WAAW,+BAA+B;IAC9C,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,kCAAkC,CAAC;CACnD;AAED,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC,+BAA+B,CA6F1E,CAAC"}
1
+ {"version":3,"file":"AssistantConnectSourceItem.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/composer/AssistantConnectSourceItem.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAe,KAAK,EAAE,EAAmB,MAAM,OAAO,CAAC;AAc9D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,IAAI,EAChB,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,MAAM,IAAI,CAKZ;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,kCAAkC,GAAG,UAAU,GAAG,QAAQ,CAAC;AAoBvE,MAAM,WAAW,+BAA+B;IAC9C,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,kCAAkC,CAAC;CACnD;AAED,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC,+BAA+B,CA8F1E,CAAC"}
@@ -16,7 +16,7 @@ var d = "flex w-full items-center gap-2.5 border-t border-border-subtle px-3 py-
16
16
  action: "assistant-connect-source-action"
17
17
  }, m = ({ onActivate: m, presentation: h = "menuitem" }) => {
18
18
  let g = e(), { href: _, open: v } = a(), y = r(), b = n(_), x = b === "internal" ? t(_) : null, S = o((e) => {
19
- e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || (m?.(), !(!y || !x) && (e.preventDefault(), y(x)));
19
+ e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || (m?.(), !(!y || !x) && (e.preventDefault(), y(x, "person")));
20
20
  }, [
21
21
  y,
22
22
  x,
@@ -83,6 +83,11 @@ interface Props {
83
83
  closeLabel: string;
84
84
  onClose: () => void;
85
85
  } | null;
86
+ /**
87
+ * ★ BOFF-8060 (N3): drawn under one assistant turn in the transcript drawer
88
+ * — the page the model offered in that voice turn.
89
+ */
90
+ renderAfterTurn?: (turnId: string) => ReactNode;
86
91
  }
87
92
  /**
88
93
  * Full-screen voice conversation (BOFF-7120).
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantVoiceSession.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/AssistantVoiceSession.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAS7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAqBjG,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,UAAU,KAAK;IACb,OAAO,EAAE,oBAAoB,CAAC;IAC9B,iEAAiE;IACjE,KAAK,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC3C,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACrD,gEAAgE;IAChE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,6EAA6E;IAC7E,YAAY,CAAC,EAAE;QACb,OAAO,EAAE,SAAS,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,GAAG,IAAI,CAAC;CACV;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CA41B3C,CAAC"}
1
+ {"version":3,"file":"AssistantVoiceSession.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/AssistantVoiceSession.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAS7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAqBjG,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,UAAU,KAAK;IACb,OAAO,EAAE,oBAAoB,CAAC;IAC9B,iEAAiE;IACjE,KAAK,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC3C,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACrD,gEAAgE;IAChE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,6EAA6E;IAC7E,YAAY,CAAC,EAAE;QACb,OAAO,EAAE,SAAS,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,GAAG,IAAI,CAAC;IACT;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CA81B3C,CAAC"}
@@ -17,7 +17,7 @@ import { useCallback as s, useEffect as c, useMemo as me, useRef as l, useState
17
17
  import { Maximize2 as he, Minimize2 as ge, ScrollText as _e, X as d } from "lucide-react";
18
18
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
19
19
  //#region src/shared/assistant/ui/voice/AssistantVoiceSession.tsx
20
- var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: Se, notice: h = null, privacyNotice: g = null, spoken: _, onInterrupt: Ce, onToggleMute: v, attachments: y = [], onAttachFiles: b, onRemoveAttachment: we, onRetryAttachment: Te, canAttachMore: Ee = !0, preparingAttachments: x = 0, spokenChunks: S = null, onEnd: C, capturing: De = !0, interrupting: Oe = !1, awaitingEndpoint: ke = !1, holding: w = !1, correcting: Ae = !1, onLetMeFinish: T, onImDone: E, proposalChip: D = null, proposalTray: O = null }) => {
20
+ var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: Se, notice: h = null, privacyNotice: g = null, spoken: _, onInterrupt: Ce, onToggleMute: v, attachments: y = [], onAttachFiles: b, onRemoveAttachment: we, onRetryAttachment: Te, canAttachMore: Ee = !0, preparingAttachments: x = 0, spokenChunks: S = null, onEnd: C, capturing: De = !0, interrupting: Oe = !1, awaitingEndpoint: ke = !1, holding: w = !1, correcting: Ae = !1, onLetMeFinish: T, onImDone: E, proposalChip: D = null, proposalTray: O = null, renderAfterTurn: je }) => {
21
21
  let k = n(), { muted: A, error: j } = m, M = l(null), N = l(null), [P, F] = u("mini"), I = P === "full", L = P === "mini", R = P === "mini" ? "panel" : P === "panel" ? "full" : "mini", [z, B] = u(!1);
22
22
  t("assistant.transcript", me(() => ({ run: () => z ? { status: "already" } : (B(!0), { status: "done" }) }), [z]));
23
23
  let V = O !== null && !L, H = l(!1), U = l(v);
@@ -26,7 +26,7 @@ var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: S
26
26
  m.phase !== "listening" && m.phase !== "thinking" || A || H.current || o(m) || (H.current = !0, U.current());
27
27
  }, [A, m]), G = s(() => {
28
28
  H.current && (H.current = !1, U.current());
29
- }, []), je = W;
29
+ }, []), Me = W;
30
30
  c(() => {
31
31
  let e = () => {
32
32
  document.visibilityState === "hidden" ? W() : G();
@@ -84,7 +84,7 @@ var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: S
84
84
  capturing: De,
85
85
  interrupting: Oe,
86
86
  awaitingEndpoint: ke
87
- }), Me = (() => {
87
+ }), Ne = (() => {
88
88
  switch (X) {
89
89
  case "connecting": return k("voiceSession.connecting", "Starting the microphone…");
90
90
  case "endpoint-grace": return k("voiceSession.endpointGrace", "Still listening — take your time");
@@ -96,12 +96,12 @@ var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: S
96
96
  case "listening": return A ? k("voiceSession.muted", "Microphone off") : k("voiceSession.listening", "Listening…");
97
97
  default: return X;
98
98
  }
99
- })(), Z = !A && (X === "listening" || X === "endpoint-grace"), Q = Z && w ? k("voiceSession.holding", "Take your time — tap “I’m done” when you finish") : Z && Ae ? k("voiceSession.correcting", "Stopped that answer — listening to your correction") : Me, $ = ne({
99
+ })(), Z = !A && (X === "listening" || X === "endpoint-grace"), Q = Z && w ? k("voiceSession.holding", "Take your time — tap “I’m done” when you finish") : Z && Ae ? k("voiceSession.correcting", "Stopped that answer — listening to your correction") : Ne, $ = ne({
100
100
  tr: k,
101
101
  stage: X,
102
102
  muted: A,
103
103
  label: Q
104
- }), Ne = te(Q, $), Pe = X === "thinking";
104
+ }), Pe = te(Q, $), Fe = X === "thinking";
105
105
  return /* @__PURE__ */ p("div", {
106
106
  ref: N,
107
107
  className: `flex flex-col items-center justify-between bg-bg-sunken ${P === "full" ? "fixed inset-x-0 bottom-0 top-14 z-[60] px-6 py-8" : P === "panel" ? "absolute inset-0 z-20 px-4 py-6" : "absolute inset-x-0 bottom-0 z-20 h-[11.25rem] border-t border-border-subtle px-3 py-3 shadow-lg"}`,
@@ -157,9 +157,9 @@ var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: S
157
157
  spokenChunks: S,
158
158
  state: X,
159
159
  caption: i,
160
- statusText: Ne,
160
+ statusText: Pe,
161
161
  statusSuffix: $,
162
- rotateStatus: Pe,
162
+ rotateStatus: Fe,
163
163
  errorText: a,
164
164
  control: n
165
165
  }) : /* @__PURE__ */ f(le, {
@@ -168,9 +168,9 @@ var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: S
168
168
  spokenChunks: S,
169
169
  assistantCaption: _,
170
170
  expanded: I,
171
- statusText: Ne,
171
+ statusText: Pe,
172
172
  statusSuffix: $,
173
- rotateStatus: Pe,
173
+ rotateStatus: Fe,
174
174
  errorText: a,
175
175
  control: n
176
176
  });
@@ -214,7 +214,8 @@ var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: S
214
214
  turns: be,
215
215
  onClose: () => B(!1),
216
216
  onSave: xe,
217
- onContinueInChat: Se
217
+ onContinueInChat: Se,
218
+ renderAfterTurn: je
218
219
  }) : null,
219
220
  b ? /* @__PURE__ */ f("div", {
220
221
  className: `absolute ${I ? "left-6 top-6" : L ? "left-11 top-2" : "left-3 top-3"}`,
@@ -222,7 +223,7 @@ var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: S
222
223
  onFiles: (e) => {
223
224
  b(e), F((e) => e === "mini" ? "panel" : e);
224
225
  },
225
- onPickerOpen: je,
226
+ onPickerOpen: Me,
226
227
  direction: "down",
227
228
  canAddMore: Ee
228
229
  })
@@ -1,4 +1,4 @@
1
- import { FC } from 'react';
1
+ import { FC, ReactNode } from 'react';
2
2
  import { VoiceTranscriptTurn } from '../../voice/turnVisibility';
3
3
  /**
4
4
  * The voice conversation, as a normal chat.
@@ -32,6 +32,11 @@ interface Props {
32
32
  * leading group rather than being scattered one divider apart.
33
33
  */
34
34
  turns: ReadonlyArray<VoiceTranscriptTurn>;
35
+ /**
36
+ * ★ BOFF-8060 (N3): drawn under one ASSISTANT turn's text — the page the
37
+ * model offered in that voice turn. Absent, or null for a turn, nothing is.
38
+ */
39
+ renderAfterTurn?: (turnId: string) => ReactNode;
35
40
  }
36
41
  export declare const VoiceConversationView: FC<Props>;
37
42
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"VoiceConversationView.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceConversationView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAGpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,UAAU,KAAK;IACb;;;;;;OAMG;IACH,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CAwE3C,CAAC"}
1
+ {"version":3,"file":"VoiceConversationView.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceConversationView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAGpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,UAAU,KAAK;IACb;;;;;;OAMG;IACH,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC1C;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC;CACjD;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CA4E3C,CAAC"}
@@ -4,18 +4,18 @@ import { groupConsecutiveBySession as n } from "../../voice/turnVisibility.js";
4
4
  import { useMemo as r } from "react";
5
5
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
6
6
  //#region src/shared/assistant/ui/voice/VoiceConversationView.tsx
7
- var o = ({ turns: o }) => {
8
- let s = e(), c = r(() => n(o, (e) => e.sessionId), [o]);
7
+ var o = ({ turns: o, renderAfterTurn: s }) => {
8
+ let c = e(), l = r(() => n(o, (e) => e.sessionId), [o]);
9
9
  return o.length === 0 ? /* @__PURE__ */ i("div", {
10
10
  className: "flex flex-1 items-center justify-center px-6",
11
11
  children: /* @__PURE__ */ i("p", {
12
12
  className: "text-center text-sm text-text-muted",
13
- children: s("voiceSession.transcriptEmpty", "Nothing spoken yet in this session.")
13
+ children: c("voiceSession.transcriptEmpty", "Nothing spoken yet in this session.")
14
14
  })
15
15
  }) : /* @__PURE__ */ i("div", {
16
16
  className: "scrollbar-slim flex-1 overflow-y-auto px-4 py-4",
17
17
  "data-testid": "assistant-voice-conversation",
18
- children: c.map((e, n) => /* @__PURE__ */ a("section", {
18
+ children: l.map((e, n) => /* @__PURE__ */ a("section", {
19
19
  className: "space-y-4 pb-4",
20
20
  children: [n > 0 ? /* @__PURE__ */ a("div", {
21
21
  className: "flex items-center gap-2 pt-2",
@@ -24,7 +24,7 @@ var o = ({ turns: o }) => {
24
24
  /* @__PURE__ */ i("span", { className: "h-px flex-1 bg-border-subtle" }),
25
25
  /* @__PURE__ */ i("span", {
26
26
  className: "text-[11px] uppercase tracking-wide text-text-muted",
27
- children: s("voiceSession.newSession", "New voice session")
27
+ children: c("voiceSession.newSession", "New voice session")
28
28
  }),
29
29
  /* @__PURE__ */ i("span", { className: "h-px flex-1 bg-border-subtle" })
30
30
  ]
@@ -34,9 +34,9 @@ var o = ({ turns: o }) => {
34
34
  className: "max-w-[85%] whitespace-pre-wrap break-words rounded-2xl bg-bg-elevated px-3 py-2 text-sm leading-relaxed text-text-primary",
35
35
  children: e.text
36
36
  })
37
- }, e.id) : /* @__PURE__ */ i("div", {
37
+ }, e.id) : /* @__PURE__ */ a("div", {
38
38
  className: "text-sm leading-relaxed text-text-secondary",
39
- children: /* @__PURE__ */ i(t, { content: e.text })
39
+ children: [/* @__PURE__ */ i(t, { content: e.text }), s?.(e.id)]
40
40
  }, e.id))]
41
41
  }, `${e.sessionId ?? "earlier"}-${n}`))
42
42
  });
@@ -1,4 +1,4 @@
1
- import { FC } from 'react';
1
+ import { FC, ReactNode } from 'react';
2
2
  import { VoiceTranscriptTurn } from '../../voice/turnVisibility';
3
3
  /**
4
4
  * This session's spoken turns, on demand.
@@ -56,6 +56,11 @@ interface Props {
56
56
  onShowEarlier?: () => void;
57
57
  /** A page is being read: the control waits. */
58
58
  showEarlierDisabled?: boolean;
59
+ /**
60
+ * ★ BOFF-8060 (N3): what goes under one assistant turn — the page the model
61
+ * offered in that VOICE turn. Never the chat thread's offers (rule 4).
62
+ */
63
+ renderAfterTurn?: (turnId: string) => ReactNode;
59
64
  }
60
65
  export declare const VoiceTranscriptDrawer: FC<Props>;
61
66
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"VoiceTranscriptDrawer.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceTranscriptDrawer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAOnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;GAkBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,+CAA+C;IAC/C,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CAoJ3C,CAAC"}
1
+ {"version":3,"file":"VoiceTranscriptDrawer.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceTranscriptDrawer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;GAkBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,+CAA+C;IAC/C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC;CACjD;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CAqJ3C,CAAC"}
@@ -7,21 +7,21 @@ import { useEffect as o, useRef as s } from "react";
7
7
  import { ArrowRight as c, Download as l, X as u } from "lucide-react";
8
8
  import { jsx as d, jsxs as f } from "react/jsx-runtime";
9
9
  //#region src/shared/assistant/ui/voice/VoiceTranscriptDrawer.tsx
10
- var p = ({ turns: p, onClose: m, onSave: h, onContinueInChat: g, closeOnEscape: _ = !1, onShowEarlier: v, showEarlierDisabled: y = !1 }) => {
11
- let b = t(), x = s(null);
12
- return e(x, { fallbackSelector: `[${n}]` }), o(() => {
10
+ var p = ({ turns: p, onClose: m, onSave: h, onContinueInChat: g, closeOnEscape: _ = !1, onShowEarlier: v, showEarlierDisabled: y = !1, renderAfterTurn: b }) => {
11
+ let x = t(), S = s(null);
12
+ return e(S, { fallbackSelector: `[${n}]` }), o(() => {
13
13
  if (!_) return;
14
14
  let e = (e) => {
15
15
  if (e.key !== "Escape" || document.querySelector("[role=\"alertdialog\"]")) return;
16
- let t = x.current?.closest(`[${n}]`), i = document.activeElement;
16
+ let t = S.current?.closest(`[${n}]`), i = document.activeElement;
17
17
  r(t ?? null, i) && (e.preventDefault(), e.stopPropagation(), m());
18
18
  };
19
19
  return document.addEventListener("keydown", e, !0), () => document.removeEventListener("keydown", e, !0);
20
20
  }, [_, m]), /* @__PURE__ */ f("div", {
21
- ref: x,
21
+ ref: S,
22
22
  className: "absolute inset-0 z-30 flex flex-col bg-bg-sunken/95 backdrop-blur-sm",
23
23
  role: "dialog",
24
- "aria-label": b("voiceSession.transcriptTitle", "Voice transcript"),
24
+ "aria-label": x("voiceSession.transcriptTitle", "Voice transcript"),
25
25
  "data-testid": "assistant-voice-transcript",
26
26
  children: [
27
27
  /* @__PURE__ */ f("div", {
@@ -30,16 +30,16 @@ var p = ({ turns: p, onClose: m, onSave: h, onContinueInChat: g, closeOnEscape:
30
30
  className: "min-w-0",
31
31
  children: [/* @__PURE__ */ d("h2", {
32
32
  className: "text-sm font-semibold text-text-primary",
33
- children: b("voiceSession.transcript", "Voice conversation")
33
+ children: x("voiceSession.transcript", "Voice conversation")
34
34
  }), /* @__PURE__ */ d("p", {
35
35
  className: "truncate text-xs text-text-muted",
36
- children: b("voiceSession.transcriptHint", "Spoken turns in this conversation — kept out of your typed chat.")
36
+ children: x("voiceSession.transcriptHint", "Spoken turns in this conversation — kept out of your typed chat.")
37
37
  })]
38
38
  }), /* @__PURE__ */ d("button", {
39
39
  type: "button",
40
40
  onClick: m,
41
41
  className: "flex size-8 items-center justify-center rounded-full text-text-secondary transition-colors hover:bg-bg-raised hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong",
42
- "aria-label": b("voiceSession.transcriptClose", "Close the transcript"),
42
+ "aria-label": x("voiceSession.transcriptClose", "Close the transcript"),
43
43
  "data-testid": "assistant-voice-transcript-close",
44
44
  children: /* @__PURE__ */ d(u, { className: "size-4" })
45
45
  })]
@@ -48,7 +48,10 @@ var p = ({ turns: p, onClose: m, onSave: h, onContinueInChat: g, closeOnEscape:
48
48
  onShowEarlier: v,
49
49
  disabled: y
50
50
  }) : null,
51
- /* @__PURE__ */ d(i, { turns: p }),
51
+ /* @__PURE__ */ d(i, {
52
+ turns: p,
53
+ renderAfterTurn: b
54
+ }),
52
55
  (h || g) && p.length > 0 ? /* @__PURE__ */ f("div", {
53
56
  className: "flex items-center justify-end gap-2 border-t border-border-subtle px-4 py-3",
54
57
  children: [h ? /* @__PURE__ */ f("button", {
@@ -59,13 +62,13 @@ var p = ({ turns: p, onClose: m, onSave: h, onContinueInChat: g, closeOnEscape:
59
62
  children: [/* @__PURE__ */ d(l, {
60
63
  className: "size-3.5",
61
64
  "aria-hidden": "true"
62
- }), b("voiceSession.save", "Save transcript")]
65
+ }), x("voiceSession.save", "Save transcript")]
63
66
  }) : null, g ? /* @__PURE__ */ f("button", {
64
67
  type: "button",
65
68
  onClick: g,
66
69
  className: "flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-medium text-action-primary-fg transition-opacity hover:opacity-90 focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong",
67
70
  "data-testid": "assistant-voice-continue-in-chat",
68
- children: [b("voiceSession.continueInChat", "Continue in chat"), /* @__PURE__ */ d(c, {
71
+ children: [x("voiceSession.continueInChat", "Continue in chat"), /* @__PURE__ */ d(c, {
69
72
  className: "size-3.5",
70
73
  "aria-hidden": "true"
71
74
  })]
@@ -0,0 +1,108 @@
1
+ import { UnsavedChange } from '../../navigation/unsavedChanges';
2
+ import { LocalUiCommandOptions } from '../localUiCommands';
3
+ import { NavIntent } from './navIntent';
4
+ import { LiveUiOffer } from './uiOffers';
5
+ /**
6
+ * ★ BOFF-8060 (N3, design §8): act-on-resolve — the person asked explicitly to
7
+ * be taken somewhere, the model answered with exactly one offered page, and
8
+ * the panel opens it without asking a second time.
9
+ *
10
+ * Decided ONCE, when the turn poller has seen the turn complete and made its
11
+ * final read; never on a later poll, a reopen or a resume. ALL guards must
12
+ * hold; any one failing keeps the page an ordinary OFFER ("Open {page}"), so a
13
+ * wrong "no" costs one tap and a wrong "yes" is what the guards exist to stop.
14
+ *
15
+ * - R1 explicit intent: the person's own sentence THIS turn matched the frozen
16
+ * grammar (`parseNavIntent`) — never a chip, host-queued prompt, retry or
17
+ * redirect remainder (the caller passes null for those).
18
+ * - R2 exactly one offer bound to the turn, live and resolvable now.
19
+ * - R2b relevance: a content word the person named is among the page's own
20
+ * registry words — an offer steered elsewhere stays an offer.
21
+ * - R3 nothing pending: no write proposal waits in the conversation, AND the
22
+ * turn could not have raised one (sent in a read mode, served by a read
23
+ * sandbox). Proposal discovery runs AFTER a turn settles, so at
24
+ * completion only a read transport proves "this turn raised none".
25
+ * - R4 nothing moved: the location, the open conversation, the workspace and
26
+ * the signed-in actor are what they were at send; the panel is mounted
27
+ * and the tab visible.
28
+ * - R5 nothing unsaved: the N4 leave-page guard (`listUnsavedChanges`)
29
+ * reports an empty list. ★★ It FAILS CLOSED: without a guard (null —
30
+ * which is also what a product WITHOUT the `leaveGuard` attestation
31
+ * gets, see `n4LeaveGuard`), or
32
+ * when the guard throws or answers anything but a well-formed list, the
33
+ * panel never acts — and nothing may call such a turn act-on-resolve.
34
+ * A non-empty list keeps the offer and names what is unsaved.
35
+ * - R6 not already there: then the panel says so (N1a copy) and stays.
36
+ *
37
+ * Pure: the caller reads every live value at the decision point.
38
+ */
39
+ /** N4's `listUnsavedChanges()`: the unsaved changes on the page right now. */
40
+ export type UnsavedChangesProbe = () => readonly UnsavedChange[];
41
+ /**
42
+ * ★★ The N4 leave-page guard R5 reads (design §8 R5; `ui-navigation.md` §7):
43
+ * `listUnsavedChanges`, the page's live registry (`useUnsavedChanges`) — but
44
+ * ONLY when the product attests that its editors register there
45
+ * (`LocalUiCommandOptions.leaveGuard === true`).
46
+ *
47
+ * The registry cannot tell "nothing is unsaved" from "this product's editors
48
+ * never call `useUnsavedChanges`": both read `[]`. Without the attestation an
49
+ * empty list proves nothing, so the guard is ABSENT (null) and R5 fails closed
50
+ * (`R5-absent`) — the panel never acts on its own, and the page stays an
51
+ * offer. A product sets `leaveGuard: true` only in the same release as its
52
+ * editors' `useUnsavedChanges` adoption, with a seam test that pins both.
53
+ */
54
+ export declare function n4LeaveGuard(options: Pick<LocalUiCommandOptions, "leaveGuard"> | null | undefined): UnsavedChangesProbe | null;
55
+ /** Where the person was, and as whom, at one moment (R4). */
56
+ export interface ActOnResolveSnapshot {
57
+ /** `pathname + search`. */
58
+ location: string;
59
+ conversationId: string | null;
60
+ workspaceId: string | null;
61
+ actorId: string | null;
62
+ }
63
+ export interface ActOnResolveInput {
64
+ /** R1: the turn's explicit request, captured at send; null when there was none. */
65
+ intent: NavIntent | null;
66
+ /** R2: the turn's live, resolvable offers (`liveOffersFor`). */
67
+ live: readonly LiveUiOffer[];
68
+ /** R2: the turn's offers not used yet, live or not. */
69
+ unusedCount: number;
70
+ /** R3: write proposals pending in the conversation now. */
71
+ pendingProposals: number;
72
+ /** R3: the mode the turn was SENT in could write. */
73
+ turnWriteCapable: boolean;
74
+ /** R4. */
75
+ atSend: ActOnResolveSnapshot;
76
+ now: ActOnResolveSnapshot;
77
+ mounted: boolean;
78
+ visible: boolean;
79
+ /** R5: N4's guard (`n4LeaveGuard(options)`); null fails closed. */
80
+ unsavedChanges: UnsavedChangesProbe | null;
81
+ /** R6: the person is already on the offered page (or one of its aliases). */
82
+ alreadyThere: (offer: LiveUiOffer) => boolean;
83
+ }
84
+ /** Which guard kept the page an offer. */
85
+ export type ActOnResolveHold = "R1" | "R2" | "R2b" | "R3" | "R4" | "R5-absent" | "R5-unsaved";
86
+ export type ActOnResolveDecision =
87
+ /** Open it (`runNavigation`, `via: 'offer'`, `trigger: 'resolve'`). */
88
+ {
89
+ act: "navigate";
90
+ offer: LiveUiOffer;
91
+ }
92
+ /** R6: say "You're already on {page}", record it, and stay. */
93
+ | {
94
+ act: "already-here";
95
+ offer: LiveUiOffer;
96
+ }
97
+ /**
98
+ * The page stays an offer. `unsaved` is set for `R5-unsaved` only: the
99
+ * changes N4 named, for the "you have unsaved changes" line.
100
+ */
101
+ | {
102
+ act: "keep-offer";
103
+ hold: ActOnResolveHold;
104
+ unsaved?: readonly UnsavedChange[];
105
+ };
106
+ /** The act-on-resolve decision (design §8). Every guard, in order; the first that fails holds. */
107
+ export declare function decideActOnResolve(input: ActOnResolveInput): ActOnResolveDecision;
108
+ //# sourceMappingURL=actOnResolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actOnResolve.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/uiActions/actOnResolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG,MAAM,SAAS,aAAa,EAAE,CAAC;AAEjE;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,GACpE,mBAAmB,GAAG,IAAI,CAE5B;AAED,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,gEAAgE;IAChE,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IAC7B,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,qDAAqD;IACrD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU;IACV,MAAM,EAAE,oBAAoB,CAAC;IAC7B,GAAG,EAAE,oBAAoB,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,cAAc,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC3C,6EAA6E;IAC7E,YAAY,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC;CAC/C;AAED,0CAA0C;AAC1C,MAAM,MAAM,gBAAgB,GACxB,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,WAAW,GACX,YAAY,CAAC;AAEjB,MAAM,MAAM,oBAAoB;AAC9B,uEAAuE;AACrE;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE;AACzC,+DAA+D;GAC7D;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE;AAC7C;;;GAGG;GACD;IACE,GAAG,EAAE,YAAY,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CACpC,CAAC;AAkCN,kGAAkG;AAClG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,oBAAoB,CA2BjF"}
@@ -0,0 +1,51 @@
1
+ import { listUnsavedChanges as e } from "../../navigation/unsavedChanges.js";
2
+ import { navIntentRelevant as t } from "./navIntent.js";
3
+ //#region src/shared/assistant/uiActions/actOnResolve.ts
4
+ function n(t) {
5
+ return t?.leaveGuard === !0 ? e : null;
6
+ }
7
+ var r = (e) => ({
8
+ act: "keep-offer",
9
+ hold: e
10
+ }), i = (e, t) => e.location === t.location && e.conversationId !== null && e.conversationId === t.conversationId && e.workspaceId === t.workspaceId && e.actorId !== null && e.actorId === t.actorId;
11
+ function a(e) {
12
+ try {
13
+ let t = e();
14
+ if (!Array.isArray(t)) return null;
15
+ let n = [];
16
+ for (let e of t) {
17
+ if (typeof e != "object" || !e || !("id" in e) || !("label" in e) || typeof e.id != "string" || typeof e.label != "string") return null;
18
+ n.push({
19
+ id: e.id,
20
+ label: e.label
21
+ });
22
+ }
23
+ return n;
24
+ } catch {
25
+ return null;
26
+ }
27
+ }
28
+ function o(e) {
29
+ let { intent: n } = e;
30
+ if (!n) return r("R1");
31
+ let [o] = e.live;
32
+ if (!o || e.live.length !== 1 || e.unusedCount !== 1) return r("R2");
33
+ if (!t(n, o.target)) return r("R2b");
34
+ if (e.pendingProposals !== 0 || e.turnWriteCapable || o.offer.transport !== "read") return r("R3");
35
+ if (!e.mounted || !e.visible || !i(e.atSend, e.now)) return r("R4");
36
+ if (!e.unsavedChanges) return r("R5-absent");
37
+ let s = a(e.unsavedChanges);
38
+ return s === null ? r("R5-absent") : s.length > 0 ? {
39
+ act: "keep-offer",
40
+ hold: "R5-unsaved",
41
+ unsaved: s
42
+ } : e.alreadyThere(o) ? {
43
+ act: "already-here",
44
+ offer: o
45
+ } : {
46
+ act: "navigate",
47
+ offer: o
48
+ };
49
+ }
50
+ //#endregion
51
+ export { o as decideActOnResolve, n as n4LeaveGuard };