@flamingo-stack/openframe-frontend-core 0.0.849 → 0.0.851

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 (140) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/chat-protocol/events.d.ts +4 -1
  3. package/dist/chat-protocol/events.d.ts.map +1 -1
  4. package/dist/chat-protocol/index.cjs +90 -40
  5. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
  6. package/dist/chat-protocol/nats-decoder.js +5 -1
  7. package/dist/chat-protocol/policy-review.d.ts +18 -0
  8. package/dist/chat-protocol/policy-review.d.ts.map +1 -0
  9. package/dist/chat-protocol/policy-review.js +55 -0
  10. package/dist/{chunk-C3P7IUTU.cjs → chunk-2NGW73T2.cjs} +5 -4
  11. package/dist/{chunk-SHQY4GOE.cjs → chunk-2WZHNMQY.cjs} +67 -67
  12. package/dist/{chunk-R5JPZ6TY.cjs → chunk-5SEJEBAB.cjs} +8 -8
  13. package/dist/{chunk-TX4NTH22.cjs → chunk-B6D4WWKD.cjs} +36 -36
  14. package/dist/{chunk-FXLROQUT.cjs → chunk-CDW6JTAQ.cjs} +442 -459
  15. package/dist/{chunk-5PIR77V5.cjs → chunk-DN227KZH.cjs} +4 -4
  16. package/dist/{chunk-MC3L525K.cjs → chunk-FGSN5UNY.cjs} +3 -3
  17. package/dist/{chunk-ZGEWT3SF.cjs → chunk-HXURNKXI.cjs} +3 -3
  18. package/dist/{chunk-FRG724DU.cjs → chunk-KRTTH3ET.cjs} +4 -4
  19. package/dist/{chunk-YJZ7R3W5.cjs → chunk-KXFIYO4O.cjs} +8 -8
  20. package/dist/{chunk-4YBS4HIO.cjs → chunk-LM7EL3UQ.cjs} +444 -27
  21. package/dist/{chunk-YYHQY3K6.cjs → chunk-NQEPLUUW.cjs} +21 -21
  22. package/dist/{chunk-KXBZCUDW.cjs → chunk-ODMZSAIY.cjs} +36 -36
  23. package/dist/{chunk-36XWCVSM.cjs → chunk-OUP7L3U5.cjs} +50 -50
  24. package/dist/{chunk-5CBI2ZYV.cjs → chunk-PJNEBSP5.cjs} +5 -5
  25. package/dist/{chunk-6AJYGXXS.cjs → chunk-PPCRLSVR.cjs} +11 -11
  26. package/dist/{chunk-SA2NNWIJ.cjs → chunk-QCSA7GIX.cjs} +17 -62
  27. package/dist/{chunk-PV2XQJ2R.cjs → chunk-SPKAXETT.cjs} +42 -42
  28. package/dist/{chunk-IKOL6NJY.cjs → chunk-U4RTWH5D.cjs} +53 -43
  29. package/dist/{chunk-IHY7E4EX.cjs → chunk-UFGPLXH6.cjs} +4 -4
  30. package/dist/{chunk-TEKN6TJ5.cjs → chunk-UQK6J3ZS.cjs} +13 -13
  31. package/dist/{chunk-S3QXLD4X.cjs → chunk-VCFQHPOO.cjs} +37 -3
  32. package/dist/{chunk-Z5UCDEKZ.cjs → chunk-VU6N3NZS.cjs} +6 -6
  33. package/dist/{chunk-ZY34R37A.cjs → chunk-VXIZCUNZ.cjs} +61 -61
  34. package/dist/{chunk-3W4ASAXN.cjs → chunk-WYROOMUZ.cjs} +2 -2
  35. package/dist/{chunk-YLETC7LP.cjs → chunk-ZEPEFKHA.cjs} +893 -973
  36. package/dist/{cloud-tenants-HKUUEUAY.cjs → cloud-tenants-XH6GV4EI.cjs} +12 -13
  37. package/dist/components/case-studies/index.cjs +24 -25
  38. package/dist/components/chat/approval-batch-message.d.ts +5 -0
  39. package/dist/components/chat/approval-batch-message.d.ts.map +1 -1
  40. package/dist/components/chat/approval-batch-message.js +36 -10
  41. package/dist/components/chat/index.cjs +8 -9
  42. package/dist/components/chat/policy-review.d.ts +27 -0
  43. package/dist/components/chat/policy-review.d.ts.map +1 -0
  44. package/dist/components/chat/policy-review.js +67 -0
  45. package/dist/components/chat/stream/message-mutations.d.ts.map +1 -1
  46. package/dist/components/chat/stream/message-mutations.js +4 -1
  47. package/dist/components/chat/tool-execution-display.d.ts.map +1 -1
  48. package/dist/components/chat/tool-execution-display.js +16 -5
  49. package/dist/components/chat/types/message.types.d.ts +40 -2
  50. package/dist/components/chat/types/message.types.d.ts.map +1 -1
  51. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
  52. package/dist/components/chat/utils/extract-incomplete-message-state.js +2 -0
  53. package/dist/components/chat/utils/message-segment-accumulator.d.ts.map +1 -1
  54. package/dist/components/chat/utils/message-segment-accumulator.js +3 -0
  55. package/dist/components/chat/utils/process-historical-messages.d.ts +2 -2
  56. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  57. package/dist/components/chat/utils/process-historical-messages.js +7 -1
  58. package/dist/components/contact/index.cjs +13 -14
  59. package/dist/components/docs/index.cjs +16 -17
  60. package/dist/components/embeds/embed-viewer-frame.d.ts +2 -0
  61. package/dist/components/embeds/embed-viewer-frame.d.ts.map +1 -1
  62. package/dist/components/embeds/embed-viewer-frame.js +12 -2
  63. package/dist/components/embeds/index.cjs +13 -14
  64. package/dist/components/embeds/pdf-viewer.d.ts.map +1 -1
  65. package/dist/components/embeds/pdf-viewer.js +2 -1
  66. package/dist/components/faq/index.cjs +14 -15
  67. package/dist/components/features/approval-level.d.ts +6 -12
  68. package/dist/components/features/approval-level.d.ts.map +1 -1
  69. package/dist/components/features/approval-level.js +45 -55
  70. package/dist/components/features/index.cjs +17 -15
  71. package/dist/components/features/notifications/approval-request-notification-tile.d.ts.map +1 -1
  72. package/dist/components/features/notifications/approval-request-notification-tile.js +71 -48
  73. package/dist/components/features/notifications/types.d.ts +2 -0
  74. package/dist/components/features/notifications/types.d.ts.map +1 -1
  75. package/dist/components/features/notifications/types.js +3 -1
  76. package/dist/components/features/policy-configuration-panel.d.ts.map +1 -1
  77. package/dist/components/features/policy-configuration-panel.js +75 -64
  78. package/dist/components/features/software/index.d.ts +1 -1
  79. package/dist/components/features/software/index.d.ts.map +1 -1
  80. package/dist/components/features/software/index.js +2 -0
  81. package/dist/components/features/software/software-action-copy.d.ts.map +1 -1
  82. package/dist/components/features/software/software-action-copy.js +6 -12
  83. package/dist/components/features/software/software-action-form.d.ts +7 -1
  84. package/dist/components/features/software/software-action-form.d.ts.map +1 -1
  85. package/dist/components/features/software/software-action-form.js +11 -3
  86. package/dist/components/features/software/update-settings-fields.d.ts +12 -1
  87. package/dist/components/features/software/update-settings-fields.d.ts.map +1 -1
  88. package/dist/components/features/software/update-settings-fields.js +57 -29
  89. package/dist/components/help-center-pages/index.cjs +78 -79
  90. package/dist/components/index.cjs +58 -58
  91. package/dist/components/meeting-scheduler/index.cjs +61 -61
  92. package/dist/components/navigation/index.cjs +15 -16
  93. package/dist/components/onboarding-guides/index.cjs +14 -15
  94. package/dist/components/product-demo/index.cjs +23 -24
  95. package/dist/components/tickets/index.cjs +17 -18
  96. package/dist/components/ui/file-manager/index.cjs +8 -9
  97. package/dist/components/ui/index.cjs +16 -18
  98. package/dist/components/ui/page-actions.d.ts.map +1 -1
  99. package/dist/components/ui/page-actions.js +11 -1
  100. package/dist/components/ui/radio-group.d.ts.map +1 -1
  101. package/dist/components/ui/radio-group.js +8 -2
  102. package/dist/components/ui/tab-selector.d.ts +7 -1
  103. package/dist/components/ui/tab-selector.d.ts.map +1 -1
  104. package/dist/components/ui/tab-selector.js +22 -3
  105. package/dist/{devices-P7M4Z7VP.cjs → devices-7PT6MPJI.cjs} +13 -14
  106. package/dist/{embeddable-chat-322NDFP5.cjs → embeddable-chat-5NY76K7K.cjs} +84 -85
  107. package/dist/index.cjs +24 -24
  108. package/dist/{knowledge-TC7JLOWI.cjs → knowledge-J6N7IEVI.cjs} +13 -14
  109. package/dist/{logs-GPOYCP4B.cjs → logs-D6KQP2BX.cjs} +19 -20
  110. package/dist/{policies-ZUHOUMDD.cjs → policies-J7MCOL3C.cjs} +16 -17
  111. package/dist/{remote-session-NT4NG7EF.cjs → remote-session-PXHA5KFK.cjs} +8 -9
  112. package/dist/{scripts-FOEVDGTH.cjs → scripts-VURXIHVS.cjs} +19 -20
  113. package/dist/{software-update-XGTMNFST.cjs → software-update-6SHUBDIE.cjs} +16 -17
  114. package/dist/{tickets-board-7FLGQEHF.cjs → tickets-board-NLCN7WNX.cjs} +9 -9
  115. package/package.json +1 -1
  116. package/src/chat-protocol/events.ts +4 -1
  117. package/src/chat-protocol/nats-decoder.ts +4 -0
  118. package/src/chat-protocol/policy-review.ts +71 -0
  119. package/src/components/chat/approval-batch-message.tsx +47 -10
  120. package/src/components/chat/policy-review.tsx +90 -0
  121. package/src/components/chat/stream/message-mutations.ts +4 -0
  122. package/src/components/chat/tool-execution-display.tsx +23 -4
  123. package/src/components/chat/types/message.types.ts +42 -2
  124. package/src/components/chat/utils/extract-incomplete-message-state.ts +2 -0
  125. package/src/components/chat/utils/message-segment-accumulator.ts +3 -0
  126. package/src/components/chat/utils/process-historical-messages.ts +14 -3
  127. package/src/components/embeds/embed-viewer-frame.tsx +10 -2
  128. package/src/components/embeds/pdf-viewer.tsx +4 -1
  129. package/src/components/features/approval-level.tsx +74 -78
  130. package/src/components/features/notifications/approval-request-notification-tile.tsx +75 -50
  131. package/src/components/features/notifications/types.ts +4 -0
  132. package/src/components/features/policy-configuration-panel.tsx +100 -83
  133. package/src/components/features/software/index.ts +1 -0
  134. package/src/components/features/software/software-action-copy.ts +19 -12
  135. package/src/components/features/software/software-action-form.tsx +16 -3
  136. package/src/components/features/software/update-settings-fields.tsx +104 -32
  137. package/src/components/ui/page-actions.tsx +19 -2
  138. package/src/components/ui/radio-group.tsx +20 -2
  139. package/src/components/ui/tab-selector.tsx +26 -3
  140. package/dist/chunk-N3MBQRCQ.cjs +0 -41
@@ -17,7 +17,7 @@
17
17
 
18
18
 
19
19
 
20
- var _chunk3W4ASAXNcjs = require('./chunk-3W4ASAXN.cjs');
20
+ var _chunkWYROOMUZcjs = require('./chunk-WYROOMUZ.cjs');
21
21
 
22
22
 
23
23
 
@@ -36,16 +36,21 @@ var _chunk3W4ASAXNcjs = require('./chunk-3W4ASAXN.cjs');
36
36
 
37
37
 
38
38
 
39
- var _chunk4YBS4HIOcjs = require('./chunk-4YBS4HIO.cjs');
40
39
 
41
40
 
42
41
 
43
42
 
44
43
 
45
44
 
45
+ var _chunkLM7EL3UQcjs = require('./chunk-LM7EL3UQ.cjs');
46
46
 
47
47
 
48
- var _chunkYJZ7R3W5cjs = require('./chunk-YJZ7R3W5.cjs');
48
+
49
+
50
+
51
+
52
+
53
+ var _chunkKXFIYO4Ocjs = require('./chunk-KXFIYO4O.cjs');
49
54
 
50
55
 
51
56
  var _chunkPGAMWM6Ccjs = require('./chunk-PGAMWM6C.cjs');
@@ -406,10 +411,8 @@ var _chunkGG466XFQcjs = require('./chunk-GG466XFQ.cjs');
406
411
  var _chunkUJ7AXHRZcjs = require('./chunk-UJ7AXHRZ.cjs');
407
412
 
408
413
 
409
- var _chunkN3MBQRCQcjs = require('./chunk-N3MBQRCQ.cjs');
410
-
411
414
 
412
- var _chunkS3QXLD4Xcjs = require('./chunk-S3QXLD4X.cjs');
415
+ var _chunkVCFQHPOOcjs = require('./chunk-VCFQHPOO.cjs');
413
416
 
414
417
 
415
418
  var _chunkZ74QE57Tcjs = require('./chunk-Z74QE57T.cjs');
@@ -521,37 +524,6 @@ var TabsContent = _react.forwardRef.call(void 0, ({ className, ...props }, ref)
521
524
  ));
522
525
  TabsContent.displayName = TabsPrimitive.Content.displayName;
523
526
 
524
- // src/components/ui/layout-hold.tsx
525
-
526
- var ROUNDED_BAR = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' rx='6'/%3E%3C/svg%3E")`;
527
- var BAR_MASK = `${ROUNDED_BAR} center / 100% min(1em, calc(1lh - 6px)) no-repeat`;
528
- var BAR_STYLE = { mask: BAR_MASK, WebkitMask: BAR_MASK };
529
- function TextHold({ children, variant = "bar", className }) {
530
- const bar = variant === "bar";
531
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
532
- "span",
533
- {
534
- "aria-hidden": true,
535
- className: _chunk63A4GZMBcjs.cn.call(void 0,
536
- // `bar`: the words themselves, unseen, on the skeleton's surface. The span stays INLINE, so the
537
- // browser paints one bar per line the words take, each exactly as wide as that line, and
538
- // `box-decoration-clone` gives every line its own bar (and its own mask, `BAR_STYLE`). Pure CSS: it
539
- // is drawn in the server's HTML, before any script runs (a loading state streamed by the server
540
- // is often replaced before it hydrates).
541
- bar ? _chunk63A4GZMBcjs.cn.call(void 0, _chunkPMUCEUFQcjs.SKELETON_SURFACE_CLASS, "rounded-md box-decoration-clone text-transparent") : "invisible",
542
- // A hold is never selectable or clickable, whatever it wraps.
543
- "pointer-events-none select-none",
544
- className
545
- ),
546
- style: bar ? BAR_STYLE : void 0,
547
- children
548
- }
549
- );
550
- }
551
- function LayoutHold({ children, className }) {
552
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "aria-hidden": true, inert: true, className: _chunk63A4GZMBcjs.cn.call(void 0, "invisible", className), children });
553
- }
554
-
555
527
  // src/utils/markdown-link.ts
556
528
  var AUTHORED_LINK_REL_TOKENS = ["nofollow", "ugc", "sponsored"];
557
529
  var NEW_TAB_REL = "noopener noreferrer";
@@ -595,11 +567,11 @@ function unescapeMarkdownLinkText(value) {
595
567
  function encodeMarkdownUrl(url) {
596
568
  return url.replace(/\s/g, (match) => encodeURIComponent(match)).replace(/[()]/g, (match) => encodeURIComponent(match));
597
569
  }
598
- function findMarkdownLinkAt(text2, selectionStart, selectionEnd = selectionStart) {
570
+ function findMarkdownLinkAt(text3, selectionStart, selectionEnd = selectionStart) {
599
571
  const from = Math.min(selectionStart, selectionEnd);
600
572
  const to = Math.max(selectionStart, selectionEnd);
601
573
  const contains = (start, end) => start <= from && to <= end;
602
- for (const match of text2.matchAll(HTML_LINK_RE)) {
574
+ for (const match of text3.matchAll(HTML_LINK_RE)) {
603
575
  const start = _nullishCoalesce(match.index, () => ( 0));
604
576
  const end = start + match[0].length;
605
577
  if (!contains(start, end)) continue;
@@ -612,7 +584,7 @@ function findMarkdownLinkAt(text2, selectionStart, selectionEnd = selectionStart
612
584
  rel: authoredRelTokens(htmlAttribute(attributes, "rel"))
613
585
  };
614
586
  }
615
- for (const match of text2.matchAll(MARKDOWN_LINK_RE)) {
587
+ for (const match of text3.matchAll(MARKDOWN_LINK_RE)) {
616
588
  const start = _nullishCoalesce(match.index, () => ( 0));
617
589
  const end = start + match[0].length;
618
590
  if (!contains(start, end)) continue;
@@ -620,8 +592,8 @@ function findMarkdownLinkAt(text2, selectionStart, selectionEnd = selectionStart
620
592
  }
621
593
  return null;
622
594
  }
623
- function formatMarkdownLink({ text: text2, url, rel }) {
624
- const label = text2.length > 0 ? text2 : url;
595
+ function formatMarkdownLink({ text: text3, url, rel }) {
596
+ const label = text3.length > 0 ? text3 : url;
625
597
  const tokens = authoredRelTokens(rel);
626
598
  if (tokens.length > 0) {
627
599
  return `<a href="${escapeHtmlAttribute(url)}" rel="${tokens.join(" ")}">${escapeHtmlText(label)}</a>`;
@@ -652,7 +624,7 @@ var element = (tagName, children) => ({
652
624
  var sectionsBreak;
653
625
  function toTextBreaksBetweenSections() {
654
626
  if (sectionsBreak === void 0) {
655
- const row = (text2) => element("tr", [element("td", [{ type: "text", value: text2 }])]);
627
+ const row = (text3) => element("tr", [element("td", [{ type: "text", value: text3 }])]);
656
628
  const table = element("table", [element("thead", [row("a")]), element("tbody", [row("b")])]);
657
629
  sectionsBreak = _hastutiltotext.toText.call(void 0, { type: "root", children: [table] }).includes("\n");
658
630
  }
@@ -723,17 +695,17 @@ function buildHeadingIdMap(content, sectionIds) {
723
695
  const map = /* @__PURE__ */ new Map();
724
696
  let sectionOrdinal = 0;
725
697
  let headingOrdinal = 0;
726
- for (const { line, level, text: rawText } of _chunkGRCOEICKcjs.scanHeadings.call(void 0, content)) {
727
- const text2 = stripInlineMarkdown(rawText).trim();
698
+ for (const { line, level: level2, text: rawText } of _chunkGRCOEICKcjs.scanHeadings.call(void 0, content)) {
699
+ const text3 = stripInlineMarkdown(rawText).trim();
728
700
  headingOrdinal++;
729
- if (level <= EXTRACTOR_MAX_LEVEL) sectionOrdinal++;
701
+ if (level2 <= EXTRACTOR_MAX_LEVEL) sectionOrdinal++;
730
702
  let assigned;
731
- if (sectionIds && level <= EXTRACTOR_MAX_LEVEL) {
703
+ if (sectionIds && level2 <= EXTRACTOR_MAX_LEVEL) {
732
704
  for (const variation of [
733
- text2,
734
- text2.toLowerCase(),
735
- _chunkGRCOEICKcjs.stripHeadingEmojis.call(void 0, text2),
736
- _chunkGRCOEICKcjs.stripHeadingEmojis.call(void 0, text2).toLowerCase()
705
+ text3,
706
+ text3.toLowerCase(),
707
+ _chunkGRCOEICKcjs.stripHeadingEmojis.call(void 0, text3),
708
+ _chunkGRCOEICKcjs.stripHeadingEmojis.call(void 0, text3).toLowerCase()
737
709
  ]) {
738
710
  const id = sectionIdMap.get(variation);
739
711
  if (id) {
@@ -743,9 +715,9 @@ function buildHeadingIdMap(content, sectionIds) {
743
715
  }
744
716
  }
745
717
  if (assigned === void 0) {
746
- const baseId = _chunkGRCOEICKcjs.slugifyHeadingText.call(void 0, text2);
718
+ const baseId = _chunkGRCOEICKcjs.slugifyHeadingText.call(void 0, text3);
747
719
  assigned = dedupe(
748
- baseId || (level <= EXTRACTOR_MAX_LEVEL ? `section-${sectionOrdinal}` : `heading-${headingOrdinal}`)
720
+ baseId || (level2 <= EXTRACTOR_MAX_LEVEL ? `section-${sectionOrdinal}` : `heading-${headingOrdinal}`)
749
721
  );
750
722
  }
751
723
  map.set(line, assigned);
@@ -2100,8 +2072,8 @@ function findInlineCodeRanges(source) {
2100
2072
  }
2101
2073
  return ranges;
2102
2074
  }
2103
- function foldAsciiCase(text2) {
2104
- return text2.replace(/[A-Z]/g, (c) => String.fromCharCode(c.charCodeAt(0) + 32));
2075
+ function foldAsciiCase(text3) {
2076
+ return text3.replace(/[A-Z]/g, (c) => String.fromCharCode(c.charCodeAt(0) + 32));
2105
2077
  }
2106
2078
  function blankRanges(masked, ranges) {
2107
2079
  if (ranges.length === 0) return masked;
@@ -2343,13 +2315,13 @@ function footnoteLabelEnd(c, open) {
2343
2315
  }
2344
2316
  function blankUnreferencedFootnotes(masked, lines, folded) {
2345
2317
  if (masked.indexOf("[^") === -1) return masked;
2346
- const text2 = (line) => stripCr(masked.slice(line.contentStart, line.contentStart + line.content.length));
2318
+ const text3 = (line) => stripCr(masked.slice(line.contentStart, line.contentStart + line.content.length));
2347
2319
  const refMask = footnoteReferenceMask(masked, folded);
2348
2320
  const refText2 = (line) => stripCr(refMask.slice(line.contentStart, line.contentStart + line.content.length));
2349
2321
  const referenced = /* @__PURE__ */ new Set();
2350
2322
  const defAt = [];
2351
2323
  for (const line of lines) {
2352
- const c = text2(line);
2324
+ const c = text3(line);
2353
2325
  let isDef = null;
2354
2326
  if (c.indexOf("[^") !== -1) {
2355
2327
  const open = FOOTNOTE_DEF_OPEN_RE.exec(c);
@@ -2378,13 +2350,13 @@ function blankUnreferencedFootnotes(masked, lines, folded) {
2378
2350
  for (let i = 0; i < lines.length; i++) {
2379
2351
  const at = defAt[i];
2380
2352
  if (at === null) continue;
2381
- const head = text2(lines[i]);
2353
+ const head = text3(lines[i]);
2382
2354
  const end = footnoteLabelEnd(head, at);
2383
2355
  if (referenced.has(normalizeFootnoteLabel(head.slice(at + 2, end)))) continue;
2384
2356
  let j = i;
2385
2357
  let sawBlank = false;
2386
2358
  for (let k = i + 1; k < lines.length; k++) {
2387
- const c = text2(lines[k]);
2359
+ const c = text3(lines[k]);
2388
2360
  if (_chunkGRCOEICKcjs.isBlankLine.call(void 0, c)) {
2389
2361
  sawBlank = true;
2390
2362
  continue;
@@ -2567,9 +2539,9 @@ function spliceWindows(masked, edits) {
2567
2539
  if (edits.length === 0) return masked;
2568
2540
  const parts = [];
2569
2541
  let cursor = 0;
2570
- for (const [from, to, text2] of edits) {
2542
+ for (const [from, to, text3] of edits) {
2571
2543
  if (from > cursor) parts.push(masked.slice(cursor, from));
2572
- parts.push(text2);
2544
+ parts.push(text3);
2573
2545
  cursor = to;
2574
2546
  }
2575
2547
  parts.push(masked.slice(cursor));
@@ -2673,8 +2645,8 @@ function blankListItemCode(masked, lines, depth = 0) {
2673
2645
  flush();
2674
2646
  return spliceWindows(masked, edits);
2675
2647
  }
2676
- function buildCloserHaystack(text2) {
2677
- const folded = foldAsciiCase(text2);
2648
+ function buildCloserHaystack(text3) {
2649
+ const folded = foldAsciiCase(text3);
2678
2650
  const lines = toMaskLines(folded);
2679
2651
  let masked = blankRanges(folded, findInlineCodeRanges(folded));
2680
2652
  masked = blankFencedRegions(masked, lines);
@@ -2861,8 +2833,8 @@ function htmlBlockStartKind(line, inParagraph) {
2861
2833
  if (!inParagraph && HTML_BLOCK_START_7.test(line)) return 7;
2862
2834
  return null;
2863
2835
  }
2864
- function computeHtmlBlockRanges(text2) {
2865
- if (text2.indexOf("<") === -1) return [];
2836
+ function computeHtmlBlockRanges(text3) {
2837
+ if (text3.indexOf("<") === -1) return [];
2866
2838
  const ranges = [];
2867
2839
  const fences = _chunkGRCOEICKcjs.createFenceTracker.call(void 0, );
2868
2840
  let kind = null;
@@ -2872,7 +2844,7 @@ function computeHtmlBlockRanges(text2) {
2872
2844
  let offset = 0;
2873
2845
  let listContentCol = 0;
2874
2846
  let openPrefixLen = 0;
2875
- for (const line of text2.split("\n")) {
2847
+ for (const line of text3.split("\n")) {
2876
2848
  const lineStart = offset;
2877
2849
  const lineEnd = offset + line.length;
2878
2850
  offset = lineEnd + 1;
@@ -2934,21 +2906,21 @@ function escapeLeftoverTagStarts(gap, lowerSource, gapOffset) {
2934
2906
  (m, slash, tag, at) => isMaskedBlank(lowerSource, gapOffset + at, gapOffset + at + m.length) ? m : `&lt;${slash}${tag}`
2935
2907
  );
2936
2908
  }
2937
- function escapeUnknownHtmlTags(text2, allowedTags = SAFE_HTML_TAGS) {
2938
- if (!text2 || text2.indexOf("<") === -1) return text2;
2939
- const lowerSource = buildCloserHaystack(text2);
2909
+ function escapeUnknownHtmlTags(text3, allowedTags = SAFE_HTML_TAGS) {
2910
+ if (!text3 || text3.indexOf("<") === -1) return text3;
2911
+ const lowerSource = buildCloserHaystack(text3);
2940
2912
  let htmlBlocks = null;
2941
2913
  const spanInsideHtmlBlock = (from, to) => {
2942
- _nullishCoalesce(htmlBlocks, () => ( (htmlBlocks = computeHtmlBlockRanges(text2))));
2914
+ _nullishCoalesce(htmlBlocks, () => ( (htmlBlocks = computeHtmlBlockRanges(text3))));
2943
2915
  return htmlBlocks.some((r) => r.start < to && r.end > from);
2944
2916
  };
2945
2917
  const parts = [];
2946
2918
  let cursor = 0;
2947
2919
  PROTECTED_SPAN_RE.lastIndex = 0;
2948
2920
  let span;
2949
- while ((span = PROTECTED_SPAN_RE.exec(text2)) !== null) {
2921
+ while ((span = PROTECTED_SPAN_RE.exec(text3)) !== null) {
2950
2922
  if (span.index > cursor) {
2951
- parts.push(escapeOutsideFences(text2.slice(cursor, span.index), allowedTags, lowerSource, cursor));
2923
+ parts.push(escapeOutsideFences(text3.slice(cursor, span.index), allowedTags, lowerSource, cursor));
2952
2924
  }
2953
2925
  const isFence = span[1] !== void 0;
2954
2926
  const spanEnd = span.index + span[0].length;
@@ -2957,8 +2929,8 @@ function escapeUnknownHtmlTags(text2, allowedTags = SAFE_HTML_TAGS) {
2957
2929
  );
2958
2930
  cursor = span.index + span[0].length;
2959
2931
  }
2960
- if (cursor < text2.length) {
2961
- parts.push(escapeOutsideFences(text2.slice(cursor), allowedTags, lowerSource, cursor));
2932
+ if (cursor < text3.length) {
2933
+ parts.push(escapeOutsideFences(text3.slice(cursor), allowedTags, lowerSource, cursor));
2962
2934
  }
2963
2935
  return parts.join("");
2964
2936
  }
@@ -3141,12 +3113,12 @@ function splitStreamingBlocks(content) {
3141
3113
  }
3142
3114
  let cursorLine = 1;
3143
3115
  return units.map((unitLines, idx) => {
3144
- const text2 = unitLines.join("\n");
3116
+ const text3 = unitLines.join("\n");
3145
3117
  const isTail = idx === units.length - 1;
3146
3118
  const startLine = cursorLine;
3147
3119
  cursorLine += unitLines.length;
3148
3120
  return {
3149
- text: text2,
3121
+ text: text3,
3150
3122
  index: idx,
3151
3123
  startLine,
3152
3124
  // Units carrying UNBALANCED raw HTML are never cached: an open
@@ -3156,7 +3128,7 @@ function splitStreamingBlocks(content) {
3156
3128
  // opens AND closes within the unit (`<div>x</div>`) leaves the
3157
3129
  // scanner's depth unchanged, so it stays memoizable — correctly: its
3158
3130
  // parse cannot be invalidated by later tokens.
3159
- memoizable: !isTail && !unitTouchedHtml[idx] && !NON_MEMOIZABLE_RE.test(text2)
3131
+ memoizable: !isTail && !unitTouchedHtml[idx] && !NON_MEMOIZABLE_RE.test(text3)
3160
3132
  };
3161
3133
  });
3162
3134
  }
@@ -3311,7 +3283,7 @@ var RENDERER_CLASS = MARKDOWN_RENDERER_CLASS;
3311
3283
  var CONTENT_WRAPPER_CLASS = "max-w-none";
3312
3284
  var ARTICLE_CLASS = "max-w-none [&>*:last-child]:mb-0";
3313
3285
  var StreamingBlockRenderer = _react.memo.call(void 0, function StreamingBlockRendererImpl({
3314
- text: text2,
3286
+ text: text3,
3315
3287
  remarkPlugins,
3316
3288
  rehypePlugins,
3317
3289
  components
@@ -3323,7 +3295,7 @@ var StreamingBlockRenderer = _react.memo.call(void 0, function StreamingBlockRen
3323
3295
  rehypePlugins,
3324
3296
  urlTransform: cardAwareUrlTransform,
3325
3297
  components,
3326
- children: text2
3298
+ children: text3
3327
3299
  }
3328
3300
  );
3329
3301
  });
@@ -3539,7 +3511,7 @@ function onAskAiIntent(run) {
3539
3511
 
3540
3512
  // src/components/chat/chat-appearance-context.tsx
3541
3513
 
3542
- var ChatAppearanceContext = _react.createContext.call(void 0, _chunk3W4ASAXNcjs.CHAT_APPEARANCE.CLASSIC);
3514
+ var ChatAppearanceContext = _react.createContext.call(void 0, _chunkWYROOMUZcjs.CHAT_APPEARANCE.CLASSIC);
3543
3515
  function useChatAppearance() {
3544
3516
  return _react.useContext.call(void 0, ChatAppearanceContext);
3545
3517
  }
@@ -3578,7 +3550,7 @@ var ApprovalRequestMessage = _react.forwardRef.call(void 0,
3578
3550
  ...props
3579
3551
  }, ref) => {
3580
3552
  const [isProcessing, setIsProcessing] = _react.useState.call(void 0, false);
3581
- const isV2 = useChatAppearance() === _chunk3W4ASAXNcjs.CHAT_APPEARANCE.V2;
3553
+ const isV2 = useChatAppearance() === _chunkWYROOMUZcjs.CHAT_APPEARANCE.V2;
3582
3554
  const handleApprove = async () => {
3583
3555
  setIsProcessing(true);
3584
3556
  try {
@@ -3601,7 +3573,7 @@ var ApprovalRequestMessage = _react.forwardRef.call(void 0,
3601
3573
  {
3602
3574
  ref,
3603
3575
  className: _chunk63A4GZMBcjs.cn.call(void 0,
3604
- _chunk4YBS4HIOcjs.CHAT_BLOCK_CLASS,
3576
+ _chunkLM7EL3UQcjs.CHAT_BLOCK_CLASS,
3605
3577
  // v2: the thread owns the space below the card.
3606
3578
  !isV2 && "mb-[var(--spacing-system-xsf)]",
3607
3579
  className
@@ -3609,7 +3581,7 @@ var ApprovalRequestMessage = _react.forwardRef.call(void 0,
3609
3581
  ...props,
3610
3582
  children: [
3611
3583
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "w-full whitespace-pre-line break-words text-ods-text-primary text-h4", children: _optionalChain([data, 'access', _51 => _51.explanation, 'optionalAccess', _52 => _52.trim, 'call', _53 => _53()]) || "Approval required" }),
3612
- showFooterActions && status === "pending" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.ApprovalWaitingLine, {}),
3584
+ showFooterActions && status === "pending" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.ApprovalWaitingLine, {}),
3613
3585
  !showFooterActions ? null : status === "pending" ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full items-center gap-[var(--spacing-system-xsf)]", children: [
3614
3586
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3615
3587
  _chunkFCZAUK4Dcjs.Button,
@@ -3641,14 +3613,14 @@ var ApprovalRequestMessage = _react.forwardRef.call(void 0,
3641
3613
  children: "Reject"
3642
3614
  }
3643
3615
  )
3644
- ] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.ApprovalStatusTag, { status, resolvedByName, inlineResolver: true }) })
3616
+ ] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.ApprovalStatusTag, { status, resolvedByName, inlineResolver: true }) })
3645
3617
  ]
3646
3618
  }
3647
3619
  );
3648
3620
  }
3649
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref, className: _chunk63A4GZMBcjs.cn.call(void 0, "mb-[var(--spacing-system-xsf)]", _chunk4YBS4HIOcjs.CHAT_BLOCK_CLASS, className), ...props, children: [
3621
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref, className: _chunk63A4GZMBcjs.cn.call(void 0, "mb-[var(--spacing-system-xsf)]", _chunkLM7EL3UQcjs.CHAT_BLOCK_CLASS, className), ...props, children: [
3650
3622
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ApprovalCardBody, { data }),
3651
- showFooterActions && status === "pending" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.ApprovalWaitingLine, {}),
3623
+ showFooterActions && status === "pending" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.ApprovalWaitingLine, {}),
3652
3624
  !showFooterActions ? null : status === "pending" ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-[var(--spacing-system-xsf)]", children: [
3653
3625
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3654
3626
  _chunkFCZAUK4Dcjs.Button,
@@ -3680,7 +3652,7 @@ var ApprovalRequestMessage = _react.forwardRef.call(void 0,
3680
3652
  children: "Reject"
3681
3653
  }
3682
3654
  )
3683
- ] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.ApprovalStatusTag, { status, resolvedByName, inlineResolver: true }) })
3655
+ ] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.ApprovalStatusTag, { status, resolvedByName, inlineResolver: true }) })
3684
3656
  ] });
3685
3657
  }
3686
3658
  );
@@ -3710,7 +3682,7 @@ EscalationOfferMessage.displayName = "EscalationOfferMessage";
3710
3682
 
3711
3683
  var AiAssistantInfo = _react.forwardRef.call(void 0,
3712
3684
  ({ className, icon, leading, title, body, timestamp, ...props }, ref) => {
3713
- const isV2 = useChatAppearance() === _chunk3W4ASAXNcjs.CHAT_APPEARANCE.V2;
3685
+ const isV2 = useChatAppearance() === _chunkWYROOMUZcjs.CHAT_APPEARANCE.V2;
3714
3686
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
3715
3687
  "div",
3716
3688
  {
@@ -3726,7 +3698,7 @@ var AiAssistantInfo = _react.forwardRef.call(void 0,
3726
3698
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
3727
3699
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full items-start", children: [
3728
3700
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "min-w-0 flex-1 truncate text-ods-text-primary text-h4", title, children: title }),
3729
- timestamp && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "shrink-0 text-right text-ods-text-secondary text-h6", children: _chunk3W4ASAXNcjs.formatTime.call(void 0, timestamp) })
3701
+ timestamp && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "shrink-0 text-right text-ods-text-secondary text-h6", children: _chunkWYROOMUZcjs.formatTime.call(void 0, timestamp) })
3730
3702
  ] }),
3731
3703
  body != null && body !== "" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "w-full break-words text-ods-text-secondary text-h4", children: body })
3732
3704
  ] })
@@ -3834,8 +3806,8 @@ TicketEventMessage.displayName = "TicketEventMessage";
3834
3806
 
3835
3807
  var JOINED = /^(.+) joined the chat$/;
3836
3808
  var LEFT = /^(.+) left the chat$/;
3837
- var SystemEventMessage = _react.forwardRef.call(void 0, ({ text: text2, timestamp, ...props }, ref) => {
3838
- const joined = _optionalChain([JOINED, 'access', _57 => _57.exec, 'call', _58 => _58(text2), 'optionalAccess', _59 => _59[1]]);
3809
+ var SystemEventMessage = _react.forwardRef.call(void 0, ({ text: text3, timestamp, ...props }, ref) => {
3810
+ const joined = _optionalChain([JOINED, 'access', _57 => _57.exec, 'call', _58 => _58(text3), 'optionalAccess', _59 => _59[1]]);
3839
3811
  if (joined) {
3840
3812
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3841
3813
  AiAssistantInfo,
@@ -3849,13 +3821,13 @@ var SystemEventMessage = _react.forwardRef.call(void 0, ({ text: text2, timestam
3849
3821
  }
3850
3822
  );
3851
3823
  }
3852
- const left = _optionalChain([LEFT, 'access', _60 => _60.exec, 'call', _61 => _61(text2), 'optionalAccess', _62 => _62[1]]);
3824
+ const left = _optionalChain([LEFT, 'access', _60 => _60.exec, 'call', _61 => _61(text3), 'optionalAccess', _62 => _62[1]]);
3853
3825
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3854
3826
  AiAssistantInfo,
3855
3827
  {
3856
3828
  ref,
3857
3829
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRHC2FRVEcjs.InfoCircleIcon, { className: "size-6 text-ods-accent" }),
3858
- title: left ? "Technician Left" : text2,
3830
+ title: left ? "Technician Left" : text3,
3859
3831
  body: left ? `${left} left the conversation.` : void 0,
3860
3832
  timestamp,
3861
3833
  ...props
@@ -3925,6 +3897,65 @@ function errorDetailsMessage(details) {
3925
3897
  }
3926
3898
  var CHAT_OWNER_ADMIN = "ADMIN";
3927
3899
 
3900
+ // src/chat-protocol/wire-narrow.ts
3901
+ function isRecord(value) {
3902
+ return typeof value === "object" && value !== null;
3903
+ }
3904
+ function unwrapEnvelope(payload) {
3905
+ return isRecord(payload) && "data" in payload ? payload.data : payload;
3906
+ }
3907
+
3908
+ // src/chat-protocol/policy-review.ts
3909
+ var APPROVAL_LEVELS = /* @__PURE__ */ new Set(["ALLOW", "ASK_USER", "ASK_TECHNICIAN", "DENY"]);
3910
+ function text(value) {
3911
+ return typeof value === "string" && value.trim() ? value.trim() : void 0;
3912
+ }
3913
+ function level(value) {
3914
+ return typeof value === "string" && APPROVAL_LEVELS.has(value) ? value : void 0;
3915
+ }
3916
+ function rules(raw2) {
3917
+ if (!Array.isArray(raw2)) return [];
3918
+ return raw2.filter(isRecord).flatMap((rule) => {
3919
+ const code = text(rule.code);
3920
+ const label = _nullishCoalesce(text(rule.label), () => ( code));
3921
+ return label ? [{ code: _nullishCoalesce(code, () => ( label)), label }] : [];
3922
+ });
3923
+ }
3924
+ function codes(raw2) {
3925
+ if (!Array.isArray(raw2)) return [];
3926
+ return raw2.map(text).filter((code) => !!code);
3927
+ }
3928
+ function policyReviewField(raw2) {
3929
+ const policyReview = normalizePolicyReview(raw2);
3930
+ return policyReview ? { policyReview } : {};
3931
+ }
3932
+ function keptPolicyReview(...reviews) {
3933
+ const policyReview = reviews.find((review) => review !== void 0);
3934
+ return policyReview ? { policyReview } : {};
3935
+ }
3936
+ function normalizePolicyReview(raw2) {
3937
+ if (!isRecord(raw2)) return void 0;
3938
+ const source = text(raw2.source);
3939
+ const decision = text(raw2.decision);
3940
+ const approvalLevel = level(raw2.approvalLevel);
3941
+ const policyLevel = level(raw2.policyLevel);
3942
+ const reason = text(raw2.reason);
3943
+ const operationCodes = codes(raw2.operationCodes);
3944
+ const matchedRules = rules(raw2.matchedRules);
3945
+ if (!decision && !approvalLevel && !policyLevel && !reason && !operationCodes.length && !matchedRules.length) {
3946
+ return void 0;
3947
+ }
3948
+ return {
3949
+ ...source ? { source } : {},
3950
+ ...decision ? { decision } : {},
3951
+ ...approvalLevel ? { approvalLevel } : {},
3952
+ ...policyLevel ? { policyLevel } : {},
3953
+ operationCodes,
3954
+ matchedRules,
3955
+ ...reason ? { reason } : {}
3956
+ };
3957
+ }
3958
+
3928
3959
  // src/chat-protocol/card-marker.ts
3929
3960
  var CARD_TYPE = "[a-zA-Z0-9_-]+";
3930
3961
  var CARD_ID = "[^\\]\\r\\n)]+";
@@ -3932,10 +3963,10 @@ var CARD_REFERENCE = new RegExp(`^\\[card://(${CARD_TYPE}):(${CARD_ID})\\]$`);
3932
3963
  function createCardMarkerScanner() {
3933
3964
  return new RegExp(`\\[card://(${CARD_TYPE}):(${CARD_ID})[\\])]`, "g");
3934
3965
  }
3935
- function extractCardReferences(text2) {
3966
+ function extractCardReferences(text3) {
3936
3967
  const seen = /* @__PURE__ */ new Set();
3937
3968
  const out = [];
3938
- for (const match of text2.matchAll(createCardMarkerScanner())) {
3969
+ for (const match of text3.matchAll(createCardMarkerScanner())) {
3939
3970
  const key = `${match[1]}:${match[2]}`;
3940
3971
  if (seen.has(key)) continue;
3941
3972
  seen.add(key);
@@ -3944,27 +3975,19 @@ function extractCardReferences(text2) {
3944
3975
  return out;
3945
3976
  }
3946
3977
 
3947
- // src/chat-protocol/wire-narrow.ts
3948
- function isRecord(value) {
3949
- return typeof value === "object" && value !== null;
3950
- }
3951
- function unwrapEnvelope(payload) {
3952
- return isRecord(payload) && "data" in payload ? payload.data : payload;
3953
- }
3954
-
3955
3978
  // src/chat-protocol/source-metadata.ts
3956
3979
  var YOUTUBE_ID = /^[A-Za-z0-9_-]{11}$/;
3957
3980
  var VIDEO_URL_KEYS = ["videoUrl", "highlightVideoUrl", "videoPoster", "highlightVideoPoster"];
3958
- function text(value) {
3981
+ function text2(value) {
3959
3982
  if (typeof value !== "string") return void 0;
3960
3983
  const trimmed = value.trim();
3961
3984
  return trimmed || void 0;
3962
3985
  }
3963
3986
  function nullableText(value) {
3964
- return value === null ? null : text(value);
3987
+ return value === null ? null : text2(value);
3965
3988
  }
3966
3989
  function httpsUrl(value) {
3967
- const candidate = text(value);
3990
+ const candidate = text2(value);
3968
3991
  if (!candidate || _chunkMDLT6D46cjs.UNSAFE_URL_CHARS.test(candidate)) return void 0;
3969
3992
  try {
3970
3993
  return new URL(candidate).protocol === "https:" ? candidate : void 0;
@@ -3973,7 +3996,7 @@ function httpsUrl(value) {
3973
3996
  }
3974
3997
  }
3975
3998
  function youtubeVideoId(value) {
3976
- const candidate = text(value);
3999
+ const candidate = text2(value);
3977
4000
  if (!candidate) return void 0;
3978
4001
  if (YOUTUBE_ID.test(candidate)) return candidate;
3979
4002
  const url = httpsUrl(candidate);
@@ -3989,11 +4012,11 @@ function youtubeVideoId(value) {
3989
4012
  function sourceItems(value) {
3990
4013
  if (!Array.isArray(value)) return void 0;
3991
4014
  const items = value.filter(isRecord).flatMap((item) => {
3992
- const id = text(item.id);
3993
- const documentType = text(item.documentType);
3994
- const name = text(item.name);
4015
+ const id = text2(item.id);
4016
+ const documentType = text2(item.documentType);
4017
+ const name = text2(item.name);
3995
4018
  if (!id || !documentType || !name) return [];
3996
- const externalUrl = text(item.externalUrl);
4019
+ const externalUrl = text2(item.externalUrl);
3997
4020
  const targetPlatform = nullableText(item.targetPlatform);
3998
4021
  const path = nullableText(item.path);
3999
4022
  return [
@@ -4016,17 +4039,17 @@ function sources(value) {
4016
4039
  for (const candidate of value) {
4017
4040
  if (!isRecord(candidate)) continue;
4018
4041
  const index = candidate.index;
4019
- const name = text(candidate.name);
4042
+ const name = text2(candidate.name);
4020
4043
  const isUsableIndex = typeof index === "number" && Number.isInteger(index) && index > 0 && !claimed.has(index);
4021
4044
  if (!isUsableIndex || !name) continue;
4022
4045
  claimed.add(index);
4023
- const path = text(candidate.path);
4024
- const documentType = text(candidate.documentType);
4025
- const externalUrl = text(candidate.externalUrl);
4046
+ const path = text2(candidate.path);
4047
+ const documentType = text2(candidate.documentType);
4048
+ const externalUrl = text2(candidate.externalUrl);
4026
4049
  const targetPlatform = nullableText(candidate.targetPlatform);
4027
- const id = text(candidate.id);
4028
- const sourceRepo = text(candidate.sourceRepo);
4029
- const label = text(candidate.label);
4050
+ const id = text2(candidate.id);
4051
+ const sourceRepo = text2(candidate.sourceRepo);
4052
+ const label = text2(candidate.label);
4030
4053
  const items = sourceItems(candidate.items);
4031
4054
  decoded.push({
4032
4055
  index,
@@ -4074,13 +4097,13 @@ function videos(value) {
4074
4097
  if (!match || match[1] !== "video") return [];
4075
4098
  const id = match[2];
4076
4099
  const url = _nullishCoalesce(httpsUrl(video.url), () => ( null));
4077
- const sourceRepo = text(video.sourceRepo);
4100
+ const sourceRepo = text2(video.sourceRepo);
4078
4101
  const metadata = videoMetadata(video.metadata, url);
4079
4102
  return [
4080
4103
  {
4081
4104
  type: "video",
4082
4105
  id,
4083
- title: _nullishCoalesce(text(video.title), () => ( id)),
4106
+ title: _nullishCoalesce(text2(video.title), () => ( id)),
4084
4107
  url,
4085
4108
  ...sourceRepo ? { sourceRepo } : {},
4086
4109
  ...Object.keys(metadata).length > 0 ? { metadata } : {}
@@ -4093,8 +4116,8 @@ function cards(value, decodedSources) {
4093
4116
  return value.filter(isRecord).flatMap((card) => {
4094
4117
  const match = typeof card.ref === "string" ? CARD_REFERENCE.exec(card.ref) : null;
4095
4118
  if (!match || match[1] === "video") return [];
4096
- const type = text(card.entityType);
4097
- const id = text(card.entityId);
4119
+ const type = text2(card.entityType);
4120
+ const id = text2(card.entityId);
4098
4121
  if (!type || !id || type !== match[1] || id !== match[2]) return [];
4099
4122
  const source = decodedSources.find((candidate) => candidate.id === id && candidate.documentType === type);
4100
4123
  return [
@@ -4176,7 +4199,8 @@ function normalizeToolCalls(raw2) {
4176
4199
  toolType: typeof item.toolType === "string" ? item.toolType : void 0,
4177
4200
  requiresApproval: item.requiresApproval === true,
4178
4201
  approvalType: typeof item.approvalType === "string" ? item.approvalType : null,
4179
- toolCallArguments: isRecord(item.toolCallArguments) ? item.toolCallArguments : null
4202
+ toolCallArguments: isRecord(item.toolCallArguments) ? item.toolCallArguments : null,
4203
+ ...policyReviewField(item.policyReview)
4180
4204
  }));
4181
4205
  }
4182
4206
  function normalizeAskOptions(raw2) {
@@ -4261,6 +4285,8 @@ function decodeNatsChunk(chunk) {
4261
4285
  // the EXECUTING segment held. Dropping it here therefore blanks the
4262
4286
  // card for the whole lifetime of the run.
4263
4287
  toolExplanation: typeof data.toolExplanation === "string" ? data.toolExplanation : void 0,
4288
+ // Rides the EXECUTING chunk only, like the explanation: the merge keeps it on the EXECUTED row.
4289
+ ...policyReviewField(data.policyReview),
4264
4290
  parameters: isRecord(data.parameters) ? data.parameters : void 0,
4265
4291
  toolExecutionRequestId: typeof data.toolExecutionRequestId === "string" ? data.toolExecutionRequestId : void 0
4266
4292
  },
@@ -4426,8 +4452,8 @@ function decodeNatsChunk(chunk) {
4426
4452
  }
4427
4453
 
4428
4454
  // src/chat-protocol/leading-frames.ts
4429
- function escapeThinkingTags(text2) {
4430
- return text2.replace(/</g, "&lt;");
4455
+ function escapeThinkingTags(text3) {
4456
+ return text3.replace(/</g, "&lt;");
4431
4457
  }
4432
4458
  function frameStr(value) {
4433
4459
  return typeof value === "string" ? value : void 0;
@@ -4570,9 +4596,9 @@ var thoughtMdClasses = [
4570
4596
  "[&_.code-block-container_>div:last-child]:!p-3"
4571
4597
  ].join(" ");
4572
4598
  var ThinkingDisplay = _react.forwardRef.call(void 0,
4573
- ({ className, text: text2, isStreaming = false, ...props }, ref) => {
4599
+ ({ className, text: text3, isStreaming = false, ...props }, ref) => {
4574
4600
  const [expanded, setExpanded] = _react.useState.call(void 0, false);
4575
- const { innerRef, isOverflowing, containerStyle } = _chunk4YBS4HIOcjs.useCollapsible.call(void 0, {
4601
+ const { innerRef, isOverflowing, containerStyle } = _chunkLM7EL3UQcjs.useCollapsible.call(void 0, {
4576
4602
  expanded,
4577
4603
  collapsedHeight: 19,
4578
4604
  disableTransition: isStreaming
@@ -4587,7 +4613,7 @@ var ThinkingDisplay = _react.forwardRef.call(void 0,
4587
4613
  setExpanded(!expanded);
4588
4614
  }
4589
4615
  };
4590
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, className: _chunk63A4GZMBcjs.cn.call(void 0, _chunk4YBS4HIOcjs.CHAT_BLOCK_FRAME_CLASS, "p-1.5", className), ...props, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
4616
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, className: _chunk63A4GZMBcjs.cn.call(void 0, _chunkLM7EL3UQcjs.CHAT_BLOCK_FRAME_CLASS, "p-1.5", className), ...props, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
4591
4617
  "div",
4592
4618
  {
4593
4619
  role: "button",
@@ -4604,8 +4630,8 @@ var ThinkingDisplay = _react.forwardRef.call(void 0,
4604
4630
  ] }),
4605
4631
  isStreaming && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOEP5KAT6cjs.DotsLoaderIcon, { size: 16, className: "text-ods-text-secondary" })
4606
4632
  ] }),
4607
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1", style: containerStyle, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: innerRef, className: _chunk63A4GZMBcjs.cn.call(void 0, "text-sm leading-snug text-ods-text-secondary", thoughtMdClasses), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SimpleMarkdownRenderer, { content: escapeThinkingTags(text2), textSize: "compact" }) }) }),
4608
- canToggle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-[19px] shrink-0 items-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.ExpandChevron, { expanded }) })
4633
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1", style: containerStyle, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: innerRef, className: _chunk63A4GZMBcjs.cn.call(void 0, "text-sm leading-snug text-ods-text-secondary", thoughtMdClasses), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SimpleMarkdownRenderer, { content: escapeThinkingTags(text3), textSize: "compact" }) }) }),
4634
+ canToggle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-[19px] shrink-0 items-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.ExpandChevron, { expanded }) })
4609
4635
  ]
4610
4636
  }
4611
4637
  ) });
@@ -4956,9 +4982,9 @@ var iconTint = {
4956
4982
  var ErrorMessageDisplay = _react.forwardRef.call(void 0,
4957
4983
  ({ className, title, details, type = "error", ...props }, ref) => {
4958
4984
  const [expanded, setExpanded] = _react.useState.call(void 0, false);
4959
- const { innerRef, containerStyle } = _chunk4YBS4HIOcjs.useCollapsible.call(void 0, { expanded });
4985
+ const { innerRef, containerStyle } = _chunkLM7EL3UQcjs.useCollapsible.call(void 0, { expanded });
4960
4986
  const hasDetails = Boolean(details);
4961
- const isV2 = useChatAppearance() === _chunk3W4ASAXNcjs.CHAT_APPEARANCE.V2;
4987
+ const isV2 = useChatAppearance() === _chunkWYROOMUZcjs.CHAT_APPEARANCE.V2;
4962
4988
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
4963
4989
  "div",
4964
4990
  {
@@ -4992,7 +5018,7 @@ var ErrorMessageDisplay = _react.forwardRef.call(void 0,
4992
5018
  children: title
4993
5019
  }
4994
5020
  ),
4995
- hasDetails && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.ExpandChevron, { expanded })
5021
+ hasDetails && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.ExpandChevron, { expanded })
4996
5022
  ]
4997
5023
  }
4998
5024
  ),
@@ -5241,9 +5267,9 @@ var ChatHeader = _react.forwardRef.call(void 0,
5241
5267
  )
5242
5268
  ] }),
5243
5269
  (ticketInfo.status || ticketInfo.statusName) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
5244
- _chunk4YBS4HIOcjs.TicketStatusTag,
5270
+ _chunkLM7EL3UQcjs.TicketStatusTag,
5245
5271
  {
5246
- ..._chunk4YBS4HIOcjs.resolveStatusTagProps.call(void 0, {
5272
+ ..._chunkLM7EL3UQcjs.resolveStatusTagProps.call(void 0, {
5247
5273
  status: ticketInfo.status,
5248
5274
  statusKind: ticketInfo.statusKind,
5249
5275
  statusName: ticketInfo.statusName,
@@ -5806,16 +5832,16 @@ var remarkCardLinks = () => {
5806
5832
  return (tree) => {
5807
5833
  _unistutilvisit.visit.call(void 0, tree, "text", (node, index, parent) => {
5808
5834
  if (!parent || typeof index !== "number") return void 0;
5809
- const text2 = node.value;
5810
- if (!text2 || !text2.includes("[card://")) return void 0;
5835
+ const text3 = node.value;
5836
+ if (!text3 || !text3.includes("[card://")) return void 0;
5811
5837
  const parts = [];
5812
5838
  let lastIndex = 0;
5813
5839
  CARD_REGEX.lastIndex = 0;
5814
5840
  let match;
5815
- while ((match = CARD_REGEX.exec(text2)) !== null) {
5841
+ while ((match = CARD_REGEX.exec(text3)) !== null) {
5816
5842
  const matchStart = match.index;
5817
5843
  if (matchStart > lastIndex) {
5818
- parts.push({ type: "text", value: text2.slice(lastIndex, matchStart) });
5844
+ parts.push({ type: "text", value: text3.slice(lastIndex, matchStart) });
5819
5845
  }
5820
5846
  const cardType = match[1];
5821
5847
  const cardId = match[2];
@@ -5830,8 +5856,8 @@ var remarkCardLinks = () => {
5830
5856
  lastIndex = matchStart + match[0].length;
5831
5857
  }
5832
5858
  if (lastIndex === 0) return void 0;
5833
- if (lastIndex < text2.length) {
5834
- parts.push({ type: "text", value: text2.slice(lastIndex) });
5859
+ if (lastIndex < text3.length) {
5860
+ parts.push({ type: "text", value: text3.slice(lastIndex) });
5835
5861
  }
5836
5862
  parent.children.splice(index, 1, ...parts);
5837
5863
  return [_unistutilvisit.SKIP, index + parts.length];
@@ -5846,19 +5872,19 @@ var remarkMentionChips = () => {
5846
5872
  return (tree) => {
5847
5873
  _unistutilvisit.visit.call(void 0, tree, "text", (node, index, parent) => {
5848
5874
  if (!parent || typeof index !== "number") return void 0;
5849
- const text2 = node.value;
5850
- if (!text2 || !text2.includes("@")) return void 0;
5875
+ const text3 = node.value;
5876
+ if (!text3 || !text3.includes("@")) return void 0;
5851
5877
  const parts = [];
5852
5878
  let lastIndex = 0;
5853
5879
  MENTION_REGEX.lastIndex = 0;
5854
5880
  let match;
5855
- while ((match = MENTION_REGEX.exec(text2)) !== null) {
5881
+ while ((match = MENTION_REGEX.exec(text3)) !== null) {
5856
5882
  const lead = match[1];
5857
5883
  const marker = match[2];
5858
5884
  const id = match[3];
5859
5885
  const tokenStart = match.index + lead.length;
5860
5886
  if (tokenStart > lastIndex) {
5861
- parts.push({ type: "text", value: text2.slice(lastIndex, tokenStart) });
5887
+ parts.push({ type: "text", value: text3.slice(lastIndex, tokenStart) });
5862
5888
  }
5863
5889
  parts.push({
5864
5890
  type: "link",
@@ -5870,8 +5896,8 @@ var remarkMentionChips = () => {
5870
5896
  lastIndex = match.index + match[0].length;
5871
5897
  }
5872
5898
  if (lastIndex === 0) return void 0;
5873
- if (lastIndex < text2.length) {
5874
- parts.push({ type: "text", value: text2.slice(lastIndex) });
5899
+ if (lastIndex < text3.length) {
5900
+ parts.push({ type: "text", value: text3.slice(lastIndex) });
5875
5901
  }
5876
5902
  parent.children.splice(index, 1, ...parts);
5877
5903
  return [_unistutilvisit.SKIP, index + parts.length];
@@ -5882,11 +5908,11 @@ var remarkMentionChips = () => {
5882
5908
  // src/components/chat/tool-execution-display.tsx
5883
5909
 
5884
5910
 
5885
- var COMMAND_BODY_KEYS = new Set(_chunk4YBS4HIOcjs.COMMAND_BODY_ARG_KEYS);
5911
+ var COMMAND_BODY_KEYS = new Set(_chunkLM7EL3UQcjs.COMMAND_BODY_ARG_KEYS);
5886
5912
  var ToolExecutionDisplay = _react.forwardRef.call(void 0,
5887
5913
  ({ className, message, assistantType, variant = "admin", ...props }, ref) => {
5888
5914
  const [expanded, setExpanded] = _react.useState.call(void 0, false);
5889
- const { innerRef, containerStyle } = _chunk4YBS4HIOcjs.useCollapsible.call(void 0, { expanded });
5915
+ const { innerRef, containerStyle } = _chunkLM7EL3UQcjs.useCollapsible.call(void 0, { expanded });
5890
5916
  const isClient = assistantType === "fae";
5891
5917
  const isClientView = variant === "client";
5892
5918
  const isExecuting = message.type === "EXECUTING_TOOL";
@@ -5904,9 +5930,11 @@ var ToolExecutionDisplay = _react.forwardRef.call(void 0,
5904
5930
  return [...commandEntries, ...otherEntries];
5905
5931
  }, [message.parameters, variant]);
5906
5932
  const hasResult = isExecuted && typeof message.result === "string" && message.result.length > 0;
5907
- const isConciseRemoteRead = !message.integratedToolType && !!previewText && argEntries.length === 0 && !hasResult;
5933
+ const review = message.policyReview;
5934
+ const reviewRows = _chunkLM7EL3UQcjs.hasPolicyReviewRows.call(void 0, review);
5935
+ const isConciseRemoteRead = !message.integratedToolType && !!previewText && argEntries.length === 0 && !hasResult && !reviewRows && !_chunkLM7EL3UQcjs.isPolicyEscalated.call(void 0, review);
5908
5936
  const isStaticRow = isClientView || isConciseRemoteRead;
5909
- const hasBody = argEntries.length > 0 || hasResult || isExecuting;
5937
+ const hasBody = argEntries.length > 0 || reviewRows || hasResult || isExecuting;
5910
5938
  const isExpanded = expanded && hasBody;
5911
5939
  const renderStatusIcon = () => {
5912
5940
  if (isExecuting) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOEP5KAT6cjs.DotsLoaderIcon, { size: 16, className: "text-ods-text-secondary" });
@@ -5929,7 +5957,7 @@ var ToolExecutionDisplay = _react.forwardRef.call(void 0,
5929
5957
  }
5930
5958
  ),
5931
5959
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: renderStatusIcon() }),
5932
- !isStaticRow && hasBody && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.ExpandChevron, { expanded: isExpanded }) })
5960
+ !isStaticRow && hasBody && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.ExpandChevron, { expanded: isExpanded }) })
5933
5961
  ] });
5934
5962
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
5935
5963
  "div",
@@ -5939,7 +5967,7 @@ var ToolExecutionDisplay = _react.forwardRef.call(void 0,
5939
5967
  // The command running block keeps its bordered box in both chats
5940
5968
  // (Figma 1972-6109). CLIENT (Fae) only drops the tool icon below.
5941
5969
  "flex w-full flex-col overflow-hidden",
5942
- _chunk4YBS4HIOcjs.CHAT_BLOCK_FRAME_CLASS,
5970
+ _chunkLM7EL3UQcjs.CHAT_BLOCK_FRAME_CLASS,
5943
5971
  className
5944
5972
  ),
5945
5973
  ...props,
@@ -5950,7 +5978,7 @@ var ToolExecutionDisplay = _react.forwardRef.call(void 0,
5950
5978
  // It reads as a card: what was done, then one status line under it.
5951
5979
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-[var(--spacing-system-xsf)] p-[var(--spacing-system-sf)] text-left", children: [
5952
5980
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-w-0 whitespace-pre-wrap break-words text-ods-text-primary text-h4", children: previewText }),
5953
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.StatusLine, { tone: statusTone, label: statusLabel })
5981
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.StatusLine, { tone: statusTone, label: statusLabel })
5954
5982
  ] })
5955
5983
  ) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
5956
5984
  hasBody ? (
@@ -5969,12 +5997,19 @@ var ToolExecutionDisplay = _react.forwardRef.call(void 0,
5969
5997
  )
5970
5998
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex w-full items-start gap-[var(--spacing-system-xs)] p-[var(--spacing-system-s)] text-left", children: headerContent }),
5971
5999
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", style: containerStyle, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: innerRef, children: hasBody && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col items-start gap-0 border-t border-ods-border p-[var(--spacing-system-sf)] text-h6", children: [
5972
- argEntries.map(([key, value]) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.ArgRow, { argKey: key, value }, key)),
6000
+ argEntries.map(([key, value]) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.ArgRow, { argKey: key, value }, key)),
6001
+ reviewRows && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
6002
+ _chunkLM7EL3UQcjs.PolicyReviewRows,
6003
+ {
6004
+ review,
6005
+ className: argEntries.length > 0 ? "mt-[var(--spacing-system-xsf)]" : void 0
6006
+ }
6007
+ ),
5973
6008
  hasResult && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
5974
- _chunk4YBS4HIOcjs.ResultBlock,
6009
+ _chunkLM7EL3UQcjs.ResultBlock,
5975
6010
  {
5976
6011
  result: message.result,
5977
- className: argEntries.length > 0 ? "mt-[var(--spacing-system-xsf)]" : void 0
6012
+ className: argEntries.length > 0 || reviewRows ? "mt-[var(--spacing-system-xsf)]" : void 0
5978
6013
  }
5979
6014
  ),
5980
6015
  isExecuting && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -5982,7 +6017,7 @@ var ToolExecutionDisplay = _react.forwardRef.call(void 0,
5982
6017
  {
5983
6018
  className: _chunk63A4GZMBcjs.cn.call(void 0,
5984
6019
  "flex w-full flex-col items-start gap-[var(--spacing-system-xxs)]",
5985
- argEntries.length > 0 && "mt-[var(--spacing-system-xsf)]"
6020
+ (argEntries.length > 0 || reviewRows) && "mt-[var(--spacing-system-xsf)]"
5986
6021
  ),
5987
6022
  children: [
5988
6023
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-secondary", children: "Result:" }),
@@ -5990,7 +6025,8 @@ var ToolExecutionDisplay = _react.forwardRef.call(void 0,
5990
6025
  ]
5991
6026
  }
5992
6027
  )
5993
- ] }) }) })
6028
+ ] }) }) }),
6029
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.PolicyEscalationAlert, { review, className: "border-t border-ods-border" })
5994
6030
  ] })
5995
6031
  }
5996
6032
  );
@@ -6019,8 +6055,8 @@ function ChatMarkdownLink({
6019
6055
 
6020
6056
  // src/components/chat/chat-message-layout.ts
6021
6057
  var CHAT_MESSAGE_ROW_PADDING_CLASS = {
6022
- [_chunk3W4ASAXNcjs.CHAT_APPEARANCE.CLASSIC]: "py-[var(--spacing-system-s)]",
6023
- [_chunk3W4ASAXNcjs.CHAT_APPEARANCE.V2]: "py-[calc(var(--spacing-system-m)/2)]"
6058
+ [_chunkWYROOMUZcjs.CHAT_APPEARANCE.CLASSIC]: "py-[var(--spacing-system-s)]",
6059
+ [_chunkWYROOMUZcjs.CHAT_APPEARANCE.V2]: "py-[calc(var(--spacing-system-m)/2)]"
6024
6060
  };
6025
6061
  var CHAT_MESSAGE_STACK_CLASS = "grid min-w-0 grid-cols-1 gap-[var(--spacing-system-xxs)]";
6026
6062
  var CHAT_MESSAGE_HEADER_CLASS = "flex items-center gap-[var(--spacing-system-xs)]";
@@ -6045,12 +6081,12 @@ var CHIP = "\\[\\d{1,2}(?:\\s*,\\s*\\d{1,2})*\\]";
6045
6081
  function chipRunScanner() {
6046
6082
  return new RegExp(`(^|\\s)(?:${CHIP})+(?=[\\s.,;:!?)\\]]|$)`, "g");
6047
6083
  }
6048
- function stripCitationChips(text2) {
6049
- return text2.replace(chipRunScanner(), (_run, lead) => lead === " " || lead === " " ? "" : lead);
6084
+ function stripCitationChips(text3) {
6085
+ return text3.replace(chipRunScanner(), (_run, lead) => lead === " " || lead === " " ? "" : lead);
6050
6086
  }
6051
- function citedSourceNumbers(text2) {
6087
+ function citedSourceNumbers(text3) {
6052
6088
  const numbers = [];
6053
- for (const run of text2.matchAll(chipRunScanner())) {
6089
+ for (const run of text3.matchAll(chipRunScanner())) {
6054
6090
  for (const digits of run[0].matchAll(/\d+/g)) {
6055
6091
  const n = Number.parseInt(digits[0], 10);
6056
6092
  if (!numbers.includes(n)) numbers.push(n);
@@ -6077,8 +6113,8 @@ var remarkStripCitations = () => {
6077
6113
  var MENTION_MARKER_REGEX = /(^|[^\w@])@[a-zA-Z]+:([A-Za-z0-9_.+/=-]*[A-Za-z0-9_+/=])/g;
6078
6114
  var CARD_MARKER_REGEX = createCardMarkerScanner();
6079
6115
  function formatMessageTimestamp(timestamp) {
6080
- const time = _chunk3W4ASAXNcjs.formatTime.call(void 0, timestamp);
6081
- return _chunk4YBS4HIOcjs.isToday.call(void 0, timestamp) ? time : `${_chunk3W4ASAXNcjs.formatDate.call(void 0, timestamp)} ${time}`;
6116
+ const time = _chunkWYROOMUZcjs.formatTime.call(void 0, timestamp);
6117
+ return _chunkLM7EL3UQcjs.isToday.call(void 0, timestamp) ? time : `${_chunkWYROOMUZcjs.formatDate.call(void 0, timestamp)} ${time}`;
6082
6118
  }
6083
6119
  function normalizeContent(content) {
6084
6120
  if (typeof content === "string") {
@@ -6134,7 +6170,7 @@ var ChatMessageEnhanced = _react.forwardRef.call(void 0,
6134
6170
  const isError = role === "error";
6135
6171
  const inheritedAppearance = useChatAppearance();
6136
6172
  const appearance = _nullishCoalesce(appearanceProp, () => ( inheritedAppearance));
6137
- const isV2 = appearance === _chunk3W4ASAXNcjs.CHAT_APPEARANCE.V2;
6173
+ const isV2 = appearance === _chunkWYROOMUZcjs.CHAT_APPEARANCE.V2;
6138
6174
  const authorType = _nullishCoalesce(authorTypeProp, () => ( (isHuman ? "user" : assistantType === "mingo" ? "mingo" : "fae")));
6139
6175
  const isOtherPerson = isHuman && selfAuthorType !== void 0 && authorType !== "system" && authorType !== selfAuthorType;
6140
6176
  const isUser = isHuman && !isOtherPerson;
@@ -6181,12 +6217,12 @@ var ChatMessageEnhanced = _react.forwardRef.call(void 0,
6181
6217
  const emittedBlockKeys = /* @__PURE__ */ new Set();
6182
6218
  segments.forEach((segment, segIdx) => {
6183
6219
  if (segment.type !== "text") return;
6184
- const text2 = segment.text;
6220
+ const text3 = segment.text;
6185
6221
  const parts = [];
6186
6222
  let cursor = 0;
6187
6223
  CARD_MARKER_REGEX.lastIndex = 0;
6188
6224
  let match;
6189
- while ((match = CARD_MARKER_REGEX.exec(text2)) !== null) {
6225
+ while ((match = CARD_MARKER_REGEX.exec(text3)) !== null) {
6190
6226
  const cardType = match[1];
6191
6227
  const cardId = match[2];
6192
6228
  const key = `${cardType}:${cardId}`;
@@ -6207,7 +6243,7 @@ var ChatMessageEnhanced = _react.forwardRef.call(void 0,
6207
6243
  if (_react2.default.isValidElement(rendered) && rendered.type === BlockCard) {
6208
6244
  const cardProps = rendered.props;
6209
6245
  const markerEnd = match.index + match[0].length;
6210
- parts.push({ kind: "text", text: text2.slice(cursor, markerEnd) });
6246
+ parts.push({ kind: "text", text: text3.slice(cursor, markerEnd) });
6211
6247
  if (!emittedBlockKeys.has(key)) {
6212
6248
  emittedBlockKeys.add(key);
6213
6249
  parts.push({ kind: "block", key, node: cardProps.children });
@@ -6218,7 +6254,7 @@ var ChatMessageEnhanced = _react.forwardRef.call(void 0,
6218
6254
  cardProps.inline != null ? cardProps.inline : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "font-medium text-ods-text-primary", children: cardId })
6219
6255
  );
6220
6256
  } else if (rendered != null) {
6221
- parts.push({ kind: "text", text: text2.slice(cursor, match.index) });
6257
+ parts.push({ kind: "text", text: text3.slice(cursor, match.index) });
6222
6258
  if (!emittedBlockKeys.has(key)) {
6223
6259
  emittedBlockKeys.add(key);
6224
6260
  parts.push({ kind: "block", key, node: rendered });
@@ -6226,8 +6262,8 @@ var ChatMessageEnhanced = _react.forwardRef.call(void 0,
6226
6262
  cursor = match.index + match[0].length;
6227
6263
  }
6228
6264
  }
6229
- if (cursor < text2.length) {
6230
- parts.push({ kind: "text", text: text2.slice(cursor) });
6265
+ if (cursor < text3.length) {
6266
+ parts.push({ kind: "text", text: text3.slice(cursor) });
6231
6267
  }
6232
6268
  if (parts.some((p) => p.kind === "block")) {
6233
6269
  partsBySegment.set(segIdx, parts);
@@ -6283,13 +6319,13 @@ var ChatMessageEnhanced = _react.forwardRef.call(void 0,
6283
6319
  }
6284
6320
  };
6285
6321
  }, [hasMarkerSupport, hasMentionSupport, renderMention, NavLinkAnchor]);
6286
- const renderSegmentBody = (segIndex, text2, isStreaming) => {
6322
+ const renderSegmentBody = (segIndex, text3, isStreaming) => {
6287
6323
  const parts = _optionalChain([renderingPlan, 'optionalAccess', _111 => _111.partsBySegment, 'access', _112 => _112.get, 'call', _113 => _113(segIndex)]);
6288
6324
  if (!parts || parts.length === 0) {
6289
6325
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
6290
6326
  SimpleMarkdownRenderer,
6291
6327
  {
6292
- content: text2,
6328
+ content: text3,
6293
6329
  textSize: "compact",
6294
6330
  additionalRemarkPlugins: cardRemarkPlugins,
6295
6331
  componentOverrides: cardComponentOverrides,
@@ -6322,7 +6358,7 @@ var ChatMessageEnhanced = _react.forwardRef.call(void 0,
6322
6358
  const faceBox = "h-5 w-5 flex-shrink-0";
6323
6359
  const face = !showAvatar || isSystem ? null : !isHuman && !avatar && assistantIcon ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { title: displayName, className: _chunk63A4GZMBcjs.cn.call(void 0, "flex items-center justify-center", faceBox), children: assistantIcon }) : !isHuman && !avatar && assistantType ? (
6324
6360
  // An agent with no picture shows its packaged mark, never initials.
6325
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "img", "aria-label": displayName, title: displayName, className: _chunk63A4GZMBcjs.cn.call(void 0, "inline-flex", faceBox), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.AgentMark, { agent: assistantType, className: "h-full w-full rounded-full" }) })
6361
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "img", "aria-label": displayName, title: displayName, className: _chunk63A4GZMBcjs.cn.call(void 0, "inline-flex", faceBox), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.AgentMark, { agent: assistantType, className: "h-full w-full rounded-full" }) })
6326
6362
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { title: displayName, className: "inline-flex flex-shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
6327
6363
  _chunkW7OFAROYcjs.SquareAvatar,
6328
6364
  {
@@ -6340,7 +6376,7 @@ var ChatMessageEnhanced = _react.forwardRef.call(void 0,
6340
6376
  "div",
6341
6377
  {
6342
6378
  ref,
6343
- className: _chunk63A4GZMBcjs.cn.call(void 0, "relative", CHAT_MESSAGE_ROW_PADDING_CLASS[_chunk3W4ASAXNcjs.CHAT_APPEARANCE.V2], className),
6379
+ className: _chunk63A4GZMBcjs.cn.call(void 0, "relative", CHAT_MESSAGE_ROW_PADDING_CLASS[_chunkWYROOMUZcjs.CHAT_APPEARANCE.V2], className),
6344
6380
  ...props,
6345
6381
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChatAppearanceContext.Provider, { value: appearance, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SystemEventMessage, { text: name, timestamp }) })
6346
6382
  }
@@ -6352,7 +6388,7 @@ var ChatMessageEnhanced = _react.forwardRef.call(void 0,
6352
6388
  ref,
6353
6389
  className: _chunk63A4GZMBcjs.cn.call(void 0,
6354
6390
  "relative",
6355
- CHAT_MESSAGE_ROW_PADDING_CLASS[isV2 ? _chunk3W4ASAXNcjs.CHAT_APPEARANCE.V2 : _chunk3W4ASAXNcjs.CHAT_APPEARANCE.CLASSIC],
6391
+ CHAT_MESSAGE_ROW_PADDING_CLASS[isV2 ? _chunkWYROOMUZcjs.CHAT_APPEARANCE.V2 : _chunkWYROOMUZcjs.CHAT_APPEARANCE.CLASSIC],
6356
6392
  className
6357
6393
  ),
6358
6394
  ...props,
@@ -6409,7 +6445,7 @@ var ChatMessageEnhanced = _react.forwardRef.call(void 0,
6409
6445
  );
6410
6446
  } else if (segment.type === "approval_batch") {
6411
6447
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
6412
- _chunk4YBS4HIOcjs.ApprovalBatchMessage,
6448
+ _chunkLM7EL3UQcjs.ApprovalBatchMessage,
6413
6449
  {
6414
6450
  data: segment.data,
6415
6451
  status: segment.status,
@@ -6573,11 +6609,11 @@ var _usesticktobottom = require('use-stick-to-bottom');
6573
6609
 
6574
6610
  function CyclingPhrase({ words, className, charMs = 60, holdMs = 4500 }) {
6575
6611
  const [wordIndex, setWordIndex] = _react.useState.call(void 0, 0);
6576
- const [text2, setText] = _react.useState.call(void 0, "");
6612
+ const [text3, setText] = _react.useState.call(void 0, "");
6577
6613
  const [cursor, setCursor] = _react.useState.call(void 0, 0);
6578
6614
  const target = _nullishCoalesce(words[wordIndex], () => ( ""));
6579
- const holding2 = words.length > 0 && cursor >= Math.max(text2.length, target.length);
6580
- const shownText = holding2 ? target : text2;
6615
+ const holding2 = words.length > 0 && cursor >= Math.max(text3.length, target.length);
6616
+ const shownText = holding2 ? target : text3;
6581
6617
  const placeholder = _react.useMemo.call(void 0,
6582
6618
  () => words.reduce((longest, w) => w.length > longest.length ? w : longest, ""),
6583
6619
  [words]
@@ -6603,7 +6639,7 @@ function CyclingPhrase({ words, className, charMs = 60, holdMs = 4500 }) {
6603
6639
  setCursor((c) => c + 1);
6604
6640
  }, charMs);
6605
6641
  return () => clearTimeout(timeoutId);
6606
- }, [wordIndex, cursor, text2, holding2, target, words, charMs, holdMs]);
6642
+ }, [wordIndex, cursor, text3, holding2, target, words, charMs, holdMs]);
6607
6643
  if (words.length === 0) return null;
6608
6644
  const before = shownText.slice(0, cursor);
6609
6645
  const after = shownText.slice(cursor);
@@ -6683,7 +6719,7 @@ var ChatMessageList = _react.forwardRef.call(void 0,
6683
6719
  approvalVariant,
6684
6720
  selfAuthorType,
6685
6721
  nameEveryTurn,
6686
- appearance = _chunk3W4ASAXNcjs.CHAT_APPEARANCE.CLASSIC,
6722
+ appearance = _chunkWYROOMUZcjs.CHAT_APPEARANCE.CLASSIC,
6687
6723
  assistantIcon,
6688
6724
  pendingApprovals,
6689
6725
  hasNextPage,
@@ -7037,7 +7073,7 @@ var ChatMessageList = _react.forwardRef.call(void 0,
7037
7073
  const lastSegment = _optionalChain([lastSegments, 'optionalAccess', _135 => _135[lastSegments.length - 1]]);
7038
7074
  const isPausedOnApproval = !!lastSegment && (lastSegment.type === "approval_request" || lastSegment.type === "approval_batch" || lastSegment.type === "escalation_offer") && (lastSegment.status === void 0 || lastSegment.status === "pending");
7039
7075
  const showStreamingLoader = isTyping && !isPausedOnApproval && !(pendingApprovals && pendingApprovals.length > 0);
7040
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChatAppearanceContext.Provider, { value: appearance, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.OverlayOpenRegistryProvider, { onOpenChange: handleOverlayOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-h-0 flex-1 flex-col", children: [
7076
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChatAppearanceContext.Provider, { value: appearance, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.OverlayOpenRegistryProvider, { onOpenChange: handleOverlayOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-h-0 flex-1 flex-col", children: [
7041
7077
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative flex min-h-0 flex-1 flex-col", children: [
7042
7078
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
7043
7079
  "div",
@@ -7526,8 +7562,8 @@ var ANTHROPIC_SUPPORTED_IMAGE_MIME = ["image/jpeg", "image/png", "image/webp", "
7526
7562
  function buildChatAttachmentViewUrl(viewUrlPrefix, storagePath, viewToken) {
7527
7563
  return `${viewUrlPrefix}${storagePath}?${CHAT_ATTACHMENT_VIEW_TOKEN_QUERY_PARAM}=${encodeURIComponent(viewToken)}`;
7528
7564
  }
7529
- function escapeMarkdownInline(text2) {
7530
- return text2.replace(/[[\]()\\\n\r<>"]/g, (ch) => {
7565
+ function escapeMarkdownInline(text3) {
7566
+ return text3.replace(/[[\]()\\\n\r<>"]/g, (ch) => {
7531
7567
  switch (ch) {
7532
7568
  case "\n":
7533
7569
  return " ";
@@ -7553,10 +7589,10 @@ var CHAT_ATTACHMENT_MARKDOWN_PATTERN = new RegExp(
7553
7589
  `^\\s*!?\\[[^\\]]*\\]\\(${CHAT_ATTACHMENT_VIEW_URL_PREFIX_REGEX_ESCAPED}[^)]+\\)\\s*$`,
7554
7590
  "gm"
7555
7591
  );
7556
- function stripChatAttachmentMarkdown(text2) {
7592
+ function stripChatAttachmentMarkdown(text3) {
7557
7593
  const storagePaths = [];
7558
7594
  const pathExtract = new RegExp(`\\(${CHAT_ATTACHMENT_VIEW_URL_PREFIX_REGEX_ESCAPED}([^?)]+)`);
7559
- const stripped = text2.replace(CHAT_ATTACHMENT_MARKDOWN_PATTERN, (match) => {
7595
+ const stripped = text3.replace(CHAT_ATTACHMENT_MARKDOWN_PATTERN, (match) => {
7560
7596
  const m = match.match(pathExtract);
7561
7597
  if (m && m[1]) storagePaths.push(m[1]);
7562
7598
  return "";
@@ -8308,7 +8344,7 @@ function QuickActionSet({
8308
8344
  ) }) }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
8309
8345
  shown.map((chip) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Slot, { "data-loading-item": true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, QuickActionChipFromData, { chip, defaultTheme: theme, fill: true }) }, chip.id)),
8310
8346
  overflows && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Slot, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
8311
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
8347
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
8312
8348
  {
8313
8349
  groups: [{ items: moreItems }],
8314
8350
  align: "end",
@@ -8654,7 +8690,7 @@ function MingoChatHistoryRow({
8654
8690
  !loading && "cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ods-accent"
8655
8691
  ),
8656
8692
  children: [
8657
- loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPMUCEUFQcjs.TextLineSkeleton, { type: "h4", className: _chunk3W4ASAXNcjs.SKELETON_TITLE_WIDTHS[skeletonIndex % _chunk3W4ASAXNcjs.SKELETON_TITLE_WIDTHS.length] }) : null,
8693
+ loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPMUCEUFQcjs.TextLineSkeleton, { type: "h4", className: _chunkWYROOMUZcjs.SKELETON_TITLE_WIDTHS[skeletonIndex % _chunkWYROOMUZcjs.SKELETON_TITLE_WIDTHS.length] }) : null,
8658
8694
  !loading && unread > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex h-8 min-w-8 shrink-0 items-center justify-center rounded-md bg-ods-accent px-[var(--spacing-system-xsf)] text-ods-text-on-accent text-h5", children: unread > 99 ? "99+" : unread }) : null,
8659
8695
  loading ? null : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
8660
8696
  "span",
@@ -8688,7 +8724,7 @@ function MingoChatHistoryRow({
8688
8724
  menuOpen ? "opacity-100" : "opacity-0 focus-within:opacity-100 group-hover/row:opacity-100"
8689
8725
  ),
8690
8726
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
8691
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
8727
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
8692
8728
  {
8693
8729
  triggerAriaLabel: "Chat actions",
8694
8730
  groups: [{ items: menuItems }],
@@ -8781,7 +8817,7 @@ function MingoChatHistory({
8781
8817
  const isLoading = _chunk63A4GZMBcjs.useLoadingScope.call(void 0, ) || loading;
8782
8818
  const groups = _react.useMemo.call(void 0, () => groupDialogs(dialogs), [dialogs]);
8783
8819
  const noSearchResults = groups.length === 0 && !!_optionalChain([searchQuery, 'optionalAccess', _171 => _171.trim, 'call', _172 => _172()]);
8784
- const { scrollRef, fadeTop, fadeBottom, update: updateFade } = _chunk3W4ASAXNcjs.useScrollFade.call(void 0, );
8820
+ const { scrollRef, fadeTop, fadeBottom, update: updateFade } = _chunkWYROOMUZcjs.useScrollFade.call(void 0, );
8785
8821
  const onScroll = loadMore === "scroll";
8786
8822
  const sentinelRef = useLoadMoreSentinel({
8787
8823
  hasMore: hasMore && onScroll,
@@ -8844,8 +8880,8 @@ function MingoChatHistory({
8844
8880
  ]
8845
8881
  }
8846
8882
  ),
8847
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ScrollFadeOverlay, { edge: "top", visible: fadeTop, color: "var(--color-bg-card)", className: "h-12" }),
8848
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, color: "var(--color-bg-card)", className: "h-12" })
8883
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ScrollFadeOverlay, { edge: "top", visible: fadeTop, color: "var(--color-bg-card)", className: "h-12" }),
8884
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, color: "var(--color-bg-card)", className: "h-12" })
8849
8885
  ] }) });
8850
8886
  }
8851
8887
 
@@ -8899,7 +8935,7 @@ function MingoWelcome({
8899
8935
  } catch (e8) {
8900
8936
  }
8901
8937
  }, [promoStorage, promoStorageKey]);
8902
- const { scrollRef, fadeTop, fadeBottom, update: updateScrollFade } = _chunk3W4ASAXNcjs.useScrollFade.call(void 0, );
8938
+ const { scrollRef, fadeTop, fadeBottom, update: updateScrollFade } = _chunkWYROOMUZcjs.useScrollFade.call(void 0, );
8903
8939
  const showPinnedRegion = !!dialogHistory || !historyLoading && !loadError;
8904
8940
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
8905
8941
  "div",
@@ -8931,7 +8967,7 @@ function MingoWelcome({
8931
8967
  onScroll: updateScrollFade,
8932
8968
  className: "flex min-h-0 flex-1 flex-col gap-[var(--spacing-system-m)] overflow-y-auto overscroll-contain",
8933
8969
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-1 flex-col items-center justify-center gap-[var(--spacing-system-l)] px-[var(--spacing-system-l)] py-[var(--spacing-system-xxl)] text-center", children: [
8934
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.AgentMark, { agent: "mingo", className: "h-12 w-12" }),
8970
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.AgentMark, { agent: "mingo", className: "h-12 w-12" }),
8935
8971
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-[var(--spacing-system-l)]", children: [
8936
8972
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-primary text-h2", children: heading }),
8937
8973
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h4", children: subtitle })
@@ -8939,8 +8975,8 @@ function MingoWelcome({
8939
8975
  ] })
8940
8976
  }
8941
8977
  ),
8942
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ScrollFadeOverlay, { edge: "top", visible: fadeTop, className: "h-12" }),
8943
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, className: "h-12" })
8978
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ScrollFadeOverlay, { edge: "top", visible: fadeTop, className: "h-12" }),
8979
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, className: "h-12" })
8944
8980
  ] }) })))),
8945
8981
  showPinnedRegion && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex shrink-0 flex-col gap-[var(--spacing-system-m)]", children: [
8946
8982
  resolvedPromo && !promoDismissed && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative flex shrink-0 items-center gap-[var(--spacing-system-m)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-m)] pr-[var(--spacing-system-xl)]", children: [
@@ -9003,7 +9039,7 @@ function GuideWelcome({
9003
9039
  children,
9004
9040
  className
9005
9041
  }) {
9006
- const { scrollRef, fadeTop, fadeBottom, update: updateScrollFade } = _chunk3W4ASAXNcjs.useScrollFade.call(void 0, );
9042
+ const { scrollRef, fadeTop, fadeBottom, update: updateScrollFade } = _chunkWYROOMUZcjs.useScrollFade.call(void 0, );
9007
9043
  const inLoadingScope = _chunk63A4GZMBcjs.useLoadingScope.call(void 0, );
9008
9044
  const subtitleIsLoading = inLoadingScope || subtitleLoading && !subtitle;
9009
9045
  const chipsAreLoading = inLoadingScope || quickActionsLoading && quickActions.length === 0;
@@ -9040,7 +9076,7 @@ function GuideWelcome({
9040
9076
  // Agent-mode identity glyph (chat-config Identity tab). Sized to
9041
9077
  // match the default Mingo mark (48px).
9042
9078
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMDLT6D46cjs.EntityIcon, { icon: { name: icon.name, url: icon.url, props: icon.props }, size: 48 })
9043
- ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.AgentMark, { agent: "mingo", className: "h-12 w-12" }),
9079
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.AgentMark, { agent: "mingo", className: "h-12 w-12" }),
9044
9080
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-[var(--spacing-system-l)]", children: [
9045
9081
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-primary text-h2", children: title }),
9046
9082
  subtitleIsLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex w-full justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPMUCEUFQcjs.TextLineSkeleton, { type: "h4", className: "w-3/4 max-w-80" }) }) : subtitle ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h4", children: subtitle }) : null
@@ -9050,8 +9086,8 @@ function GuideWelcome({
9050
9086
  ]
9051
9087
  }
9052
9088
  ),
9053
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ScrollFadeOverlay, { edge: "top", visible: fadeTop, className: "h-12" }),
9054
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, className: "h-12" })
9089
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ScrollFadeOverlay, { edge: "top", visible: fadeTop, className: "h-12" }),
9090
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, className: "h-12" })
9055
9091
  ] }),
9056
9092
  (quickActions.length > 0 || chipsAreLoading) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, QuickActionSet, { chips: chipItems, loading: chipsAreLoading, showTopic: showTopicProp })
9057
9093
  ] });
@@ -9072,9 +9108,9 @@ function GuideModeBanner({ label = DEFAULT_LABEL, tooltip = DEFAULT_TOOLTIP, cla
9072
9108
  children: [
9073
9109
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFJDLJSIcjs.CompassIcon, { size: 16, className: "shrink-0 text-ods-text-on-accent" }),
9074
9110
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "flex-1 truncate uppercase text-ods-text-on-accent text-h5", children: label }),
9075
- tooltip != null && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYJZ7R3W5cjs.Tooltip, { children: [
9076
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "bare", size: "icon-inline", type: "button", "aria-label": "About Guide Mode", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFO6DOP6Mcjs.QuestionCircleIcon, { size: 16, className: "text-ods-text-on-accent" }) }) }),
9077
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipContent, { side: "bottom", align: "end", className: "max-w-[280px] normal-case text-h6", children: tooltip })
9111
+ tooltip != null && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkKXFIYO4Ocjs.Tooltip, { children: [
9112
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "bare", size: "icon-inline", type: "button", "aria-label": "About Guide Mode", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFO6DOP6Mcjs.QuestionCircleIcon, { size: 16, className: "text-ods-text-on-accent" }) }) }),
9113
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipContent, { side: "bottom", align: "end", className: "max-w-[280px] normal-case text-h6", children: tooltip })
9078
9114
  ] }) })
9079
9115
  ]
9080
9116
  }
@@ -9121,15 +9157,15 @@ function MingoArchiveList({
9121
9157
  className: "flex min-h-0 flex-1 flex-col gap-[var(--spacing-system-xxs)] px-[var(--spacing-system-xs)] pt-[var(--spacing-system-mf)]",
9122
9158
  children: [
9123
9159
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "shrink-0 px-[var(--spacing-system-xs)] pt-[var(--spacing-system-xs)] text-ods-text-secondary text-h5", children: "Archived Chats" }),
9124
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-h-0 flex-1 flex-col gap-[var(--spacing-system-xxs)] overflow-y-auto overscroll-contain pb-[var(--spacing-system-mf)]", children: loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ChatListItemLoadingPage, { count: pageSize, trailing: true }) : dialogs.length > 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
9160
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-h-0 flex-1 flex-col gap-[var(--spacing-system-xxs)] overflow-y-auto overscroll-contain pb-[var(--spacing-system-mf)]", children: loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ChatListItemLoadingPage, { count: pageSize, trailing: true }) : dialogs.length > 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
9125
9161
  dialogs.map((dialog) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
9126
- _chunk3W4ASAXNcjs.ChatListItem,
9162
+ _chunkWYROOMUZcjs.ChatListItem,
9127
9163
  {
9128
9164
  "data-loading-item": true,
9129
9165
  title: dialog.title || "Untitled Chat",
9130
9166
  onClick: () => _optionalChain([onSelectDialog, 'optionalCall', _178 => _178(dialog.id)]),
9131
9167
  trailing: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
9132
- dialog.timestamp && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "whitespace-nowrap text-ods-text-secondary text-h6", children: _chunk4YBS4HIOcjs.formatRelativeTime.call(void 0, dialog.timestamp) }),
9168
+ dialog.timestamp && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "whitespace-nowrap text-ods-text-secondary text-h6", children: _chunkLM7EL3UQcjs.formatRelativeTime.call(void 0, dialog.timestamp) }),
9133
9169
  dialog.owner && (dialog.owner.name || dialog.owner.avatarUrl) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
9134
9170
  _chunkW7OFAROYcjs.SquareAvatar,
9135
9171
  {
@@ -9277,7 +9313,7 @@ function MingoChatHeader({
9277
9313
  ] }),
9278
9314
  onRestore && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "cell", className: "w-14", onClick: onRestore, "aria-label": "Unarchive chat", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPPX2JK6Pcjs.Refresh01LeftIcon, { size: 24 }) }),
9279
9315
  menuGroups.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
9280
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
9316
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
9281
9317
  {
9282
9318
  triggerAriaLabel: "Chat actions",
9283
9319
  onCloseAutoFocus: (e) => e.preventDefault(),
@@ -9773,7 +9809,7 @@ function SearchInput({
9773
9809
  )
9774
9810
  ] }),
9775
9811
  showHiddenTags && hiddenCount > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
9776
- _chunk3W4ASAXNcjs.HiddenTagsPopup,
9812
+ _chunkWYROOMUZcjs.HiddenTagsPopup,
9777
9813
  {
9778
9814
  ref: hiddenTagsPopupRef,
9779
9815
  items: hiddenChips.map((chip) => ({ label: chip.label, value: chip.id })),
@@ -10000,7 +10036,7 @@ function MingoChatHistorySection({
10000
10036
  onClick: () => onScopeChange("all")
10001
10037
  }
10002
10038
  ] : [];
10003
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYJZ7R3W5cjs.TooltipProvider, { delayDuration: 300, children: [
10039
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkKXFIYO4Ocjs.TooltipProvider, { delayDuration: 300, children: [
10004
10040
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
10005
10041
  "section",
10006
10042
  {
@@ -10009,8 +10045,8 @@ function MingoChatHistorySection({
10009
10045
  children: [
10010
10046
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex shrink-0 items-center gap-[var(--spacing-system-xs)] px-[var(--spacing-system-xs)]", children: [
10011
10047
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { id: captionId, className: "min-w-0 flex-1 truncate text-ods-text-secondary text-h5", children: "Chat history" }),
10012
- onSearchChange && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYJZ7R3W5cjs.Tooltip, { children: [
10013
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10048
+ onSearchChange && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkKXFIYO4Ocjs.Tooltip, { children: [
10049
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10014
10050
  _chunkFCZAUK4Dcjs.Button,
10015
10051
  {
10016
10052
  variant: "transparent",
@@ -10022,16 +10058,16 @@ function MingoChatHistorySection({
10022
10058
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ74QE57Tcjs.SearchIcon, { size: 20 })
10023
10059
  }
10024
10060
  ) }),
10025
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipContent, { side: "bottom", children: shortcut ? `Search chats \xB7 ${shortcut}` : "Search chats" })
10061
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipContent, { side: "bottom", children: shortcut ? `Search chats \xB7 ${shortcut}` : "Search chats" })
10026
10062
  ] }),
10027
- scopeMenu.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYJZ7R3W5cjs.Tooltip, { children: [
10063
+ scopeMenu.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkKXFIYO4Ocjs.Tooltip, { children: [
10028
10064
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10029
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
10065
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
10030
10066
  {
10031
10067
  triggerAriaLabel: "Filter chats",
10032
10068
  groups: [{ items: scopeMenu }],
10033
10069
  onCloseAutoFocus: (e) => e.preventDefault(),
10034
- customTrigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10070
+ customTrigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10035
10071
  _chunkFCZAUK4Dcjs.Button,
10036
10072
  {
10037
10073
  variant: "transparent",
@@ -10043,19 +10079,19 @@ function MingoChatHistorySection({
10043
10079
  ) })
10044
10080
  }
10045
10081
  ),
10046
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipContent, { side: "bottom", children: scope === "all" ? "Showing all chats" : "Showing my chats" })
10082
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipContent, { side: "bottom", children: scope === "all" ? "Showing all chats" : "Showing my chats" })
10047
10083
  ] }),
10048
- moreMenu.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYJZ7R3W5cjs.Tooltip, { children: [
10084
+ moreMenu.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkKXFIYO4Ocjs.Tooltip, { children: [
10049
10085
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10050
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
10086
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
10051
10087
  {
10052
10088
  triggerAriaLabel: "More",
10053
10089
  groups: [{ items: moreMenu }],
10054
10090
  onCloseAutoFocus: (e) => e.preventDefault(),
10055
- customTrigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "transparent", size: "icon", "aria-label": "More", className: ICON_BUTTON_CLASS, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSWHUL32Wcjs.Ellipsis01Icon, { size: 20 }) }) })
10091
+ customTrigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "transparent", size: "icon", "aria-label": "More", className: ICON_BUTTON_CLASS, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSWHUL32Wcjs.Ellipsis01Icon, { size: 20 }) }) })
10056
10092
  }
10057
10093
  ),
10058
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipContent, { side: "bottom", children: "More" })
10094
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipContent, { side: "bottom", children: "More" })
10059
10095
  ] })
10060
10096
  ] }),
10061
10097
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -10138,8 +10174,8 @@ function SearchModalContent({ initialValue, onSearchChange, onClose, children })
10138
10174
  send("");
10139
10175
  onClose();
10140
10176
  };
10141
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk3W4ASAXNcjs.Modal, { isOpen: true, onClose: close, className: "md:max-w-[600px]", children: [
10142
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ModalTitle, { children: "Search chats" }) }),
10177
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWYROOMUZcjs.Modal, { isOpen: true, onClose: close, className: "md:max-w-[600px]", children: [
10178
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ModalTitle, { children: "Search chats" }) }),
10143
10179
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: fieldRef, role: "search", "aria-label": "Search chats", className: "w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10144
10180
  SearchInput,
10145
10181
  {
@@ -10195,7 +10231,7 @@ function SectionRow({
10195
10231
  // A row that lands in a day already on screen (the next page) fades in too.
10196
10232
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "group/row relative shrink-0 duration-300 animate-in fade-in motion-reduce:animate-none", children: [
10197
10233
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10198
- _chunk3W4ASAXNcjs.ChatListItem,
10234
+ _chunkWYROOMUZcjs.ChatListItem,
10199
10235
  {
10200
10236
  active,
10201
10237
  title,
@@ -10245,7 +10281,7 @@ function SectionRow({
10245
10281
  menuOpen ? "opacity-100" : "opacity-0 group-hover/row:opacity-100 group-has-[:focus-visible]/row:opacity-100"
10246
10282
  ),
10247
10283
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10248
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
10284
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
10249
10285
  {
10250
10286
  triggerAriaLabel: `Actions for ${title}`,
10251
10287
  groups: [{ items: menuItems }],
@@ -10362,7 +10398,7 @@ function MingoChatRailPanel({
10362
10398
  if (loadError) {
10363
10399
  list = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChatListLoadError, { onRetry, className: "px-[var(--spacing-system-xs)] py-[var(--spacing-system-l)]" });
10364
10400
  } else if (loading) {
10365
- list = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ChatListItemLoadingPage, { count: pageSize });
10401
+ list = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ChatListItemLoadingPage, { count: pageSize });
10366
10402
  } else if (dialogs.length === 0 && !draftTitle) {
10367
10403
  list = hasSearch ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "px-[var(--spacing-system-xs)] py-[var(--spacing-system-s)] text-ods-text-secondary text-h6", children: "No chats found" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10368
10404
  ChatListEmptyState,
@@ -10374,7 +10410,7 @@ function MingoChatRailPanel({
10374
10410
  );
10375
10411
  } else {
10376
10412
  list = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
10377
- draftTitle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ChatListItem, { active: true, title: draftTitle, tabIndex: -1, className: "cursor-default" }),
10413
+ draftTitle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ChatListItem, { active: true, title: draftTitle, tabIndex: -1, className: "cursor-default" }),
10378
10414
  dialogs.map((dialog) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10379
10415
  MingoChatRailRow,
10380
10416
  {
@@ -10396,13 +10432,13 @@ function MingoChatRailPanel({
10396
10432
  ] });
10397
10433
  }
10398
10434
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10399
- _chunk3W4ASAXNcjs.ChatNavSidebar,
10435
+ _chunkWYROOMUZcjs.ChatNavSidebar,
10400
10436
  {
10401
10437
  className,
10402
10438
  "data-accent": "mingo",
10403
10439
  "aria-label": "Mingo chats",
10404
10440
  logo: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-1 items-center justify-between", children: [
10405
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.AgentMark, { agent: "mingo", className: "size-6 text-ods-text-primary" }),
10441
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.AgentMark, { agent: "mingo", className: "size-6 text-ods-text-primary" }),
10406
10442
  onExpand && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10407
10443
  _chunkFCZAUK4Dcjs.Button,
10408
10444
  {
@@ -10418,7 +10454,7 @@ function MingoChatRailPanel({
10418
10454
  items,
10419
10455
  sectionLabel: "Your Current Chats",
10420
10456
  sectionActions: listMenu.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10421
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
10457
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
10422
10458
  {
10423
10459
  triggerAriaLabel: "Chat list options",
10424
10460
  groups: [{ items: listMenu }],
@@ -10455,7 +10491,7 @@ function MingoChatRailRow({ dialog, active, status, onSelect, menuItems, ...prop
10455
10491
  const title = dialog.title || "Untitled Chat";
10456
10492
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ..._chunk63A4GZMBcjs.loadingItemProps.call(void 0, props), className: "group/row relative shrink-0", children: [
10457
10493
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10458
- _chunk3W4ASAXNcjs.ChatListItem,
10494
+ _chunkWYROOMUZcjs.ChatListItem,
10459
10495
  {
10460
10496
  active,
10461
10497
  title,
@@ -10481,7 +10517,7 @@ function MingoChatRailRow({ dialog, active, status, onSelect, menuItems, ...prop
10481
10517
  menuOpen ? "opacity-100" : "opacity-0 focus-within:opacity-100 group-hover/row:opacity-100"
10482
10518
  ),
10483
10519
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10484
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
10520
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
10485
10521
  {
10486
10522
  triggerAriaLabel: `Actions for ${title}`,
10487
10523
  groups: [{ items: menuItems }],
@@ -10505,67 +10541,6 @@ function MingoChatRailRow({ dialog, active, status, onSelect, menuItems, ...prop
10505
10541
  ] });
10506
10542
  }
10507
10543
 
10508
- // src/components/ui/tab-selector.tsx
10509
-
10510
- function TabSelector({
10511
- value,
10512
- onValueChange,
10513
- items,
10514
- variant = "primary",
10515
- label,
10516
- disabled,
10517
- scrollable = false,
10518
- className
10519
- }) {
10520
- const flush = _chunkYJZ7R3W5cjs.useIsInActionsMenuHeader.call(void 0, );
10521
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
10522
- "div",
10523
- {
10524
- className: _chunk63A4GZMBcjs.cn.call(void 0, "flex flex-col gap-[var(--spacing-system-xxs)]", disabled && "opacity-50", className),
10525
- "aria-disabled": disabled || void 0,
10526
- children: [
10527
- label && // Label for family/color; 'large' (text-h4) is this component's
10528
- // long-standing label scale — neighbours opt into the same scale via
10529
- // their `labelVariant="large"` when a design puts them side by side.
10530
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3MBQRCQcjs.Label, { variant: "large", children: label }),
10531
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10532
- "div",
10533
- {
10534
- className: _chunk63A4GZMBcjs.cn.call(void 0,
10535
- "flex gap-[var(--spacing-system-xxs)] bg-ods-bg p-[var(--spacing-system-xxs)]",
10536
- flush ? "h-10 w-full" : _chunk63A4GZMBcjs.cn.call(void 0, "h-11 rounded-md border border-ods-border content-md:h-12", scrollable ? "overflow-x-auto" : "w-full")
10537
- ),
10538
- children: items.map((item) => {
10539
- const isActive = value === item.id;
10540
- const isDisabled = disabled || item.disabled;
10541
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
10542
- _chunkFCZAUK4Dcjs.Button,
10543
- {
10544
- variant: "segment",
10545
- type: "button",
10546
- disabled: isDisabled,
10547
- onClick: () => onValueChange(item.id),
10548
- "aria-label": !item.label ? item.ariaLabel : void 0,
10549
- "aria-pressed": isActive,
10550
- "data-state": isActive ? "active" : void 0,
10551
- "data-tone": variant === "primary" ? "accent" : void 0,
10552
- className: _chunk63A4GZMBcjs.cn.call(void 0, "h-full", scrollable ? "flex-none shrink-0 basis-auto" : "flex-1"),
10553
- children: [
10554
- item.icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex size-4 shrink-0 items-center justify-center content-md:size-6", children: item.icon }),
10555
- item.label,
10556
- item.badge && item.badge
10557
- ]
10558
- },
10559
- item.id
10560
- );
10561
- })
10562
- }
10563
- )
10564
- ]
10565
- }
10566
- );
10567
- }
10568
-
10569
10544
  // src/components/chat/mingo-history-rail.tsx
10570
10545
 
10571
10546
  function MingoHistoryRail({
@@ -10613,7 +10588,7 @@ function MingoHistoryRail({
10613
10588
  }
10614
10589
  ),
10615
10590
  scope && onScopeChange && !loadError ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10616
- TabSelector,
10591
+ _chunkLM7EL3UQcjs.TabSelector,
10617
10592
  {
10618
10593
  className: "shrink-0",
10619
10594
  value: scope,
@@ -10673,10 +10648,10 @@ function RenameChatModal({ isOpen, initialName = "", onClose, onSave }) {
10673
10648
  const save = () => {
10674
10649
  if (canSave) onSave(name.trim());
10675
10650
  };
10676
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk3W4ASAXNcjs.Modal, { isOpen, onClose, className: "md:max-w-[600px]", children: [
10677
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ModalTitle, { children: "Rename Chat" }) }),
10651
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWYROOMUZcjs.Modal, { isOpen, onClose, className: "md:max-w-[600px]", children: [
10652
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ModalTitle, { children: "Rename Chat" }) }),
10678
10653
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-[var(--spacing-system-xxs)]", children: [
10679
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3MBQRCQcjs.Label, { htmlFor: "rename-chat-input", variant: "large", children: "Chat Name" }),
10654
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVCFQHPOOcjs.Label, { htmlFor: "rename-chat-input", variant: "large", children: "Chat Name" }),
10680
10655
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10681
10656
  "input",
10682
10657
  {
@@ -10691,27 +10666,27 @@ function RenameChatModal({ isOpen, initialName = "", onClose, onSave }) {
10691
10666
  }
10692
10667
  )
10693
10668
  ] }),
10694
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk3W4ASAXNcjs.ModalFooter, { children: [
10669
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWYROOMUZcjs.ModalFooter, { children: [
10695
10670
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "outline", type: "button", onClick: onClose, className: footerBtn, children: "Cancel" }),
10696
10671
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "accent", type: "button", onClick: save, disabled: !canSave, className: footerBtn, children: "Save" })
10697
10672
  ] })
10698
10673
  ] });
10699
10674
  }
10700
10675
  function ArchiveChatModal({ isOpen, onClose, onConfirm }) {
10701
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk3W4ASAXNcjs.Modal, { isOpen, onClose, className: "md:max-w-[600px]", children: [
10702
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ModalTitle, { children: "Archive Chat" }) }),
10676
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWYROOMUZcjs.Modal, { isOpen, onClose, className: "md:max-w-[600px]", children: [
10677
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ModalTitle, { children: "Archive Chat" }) }),
10703
10678
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "w-full text-ods-text-primary text-h4", children: "This chat will be hidden from your current chats." }),
10704
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk3W4ASAXNcjs.ModalFooter, { children: [
10679
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWYROOMUZcjs.ModalFooter, { children: [
10705
10680
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "outline", type: "button", onClick: onClose, className: footerBtn, children: "Cancel" }),
10706
10681
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "destructive", type: "button", onClick: onConfirm, className: footerBtn, children: "Archive Chat" })
10707
10682
  ] })
10708
10683
  ] });
10709
10684
  }
10710
10685
  function UnarchiveChatModal({ isOpen, onClose, onConfirm }) {
10711
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk3W4ASAXNcjs.Modal, { isOpen, onClose, className: "md:max-w-[600px]", children: [
10712
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3W4ASAXNcjs.ModalTitle, { children: "Unarchive Chat" }) }),
10686
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWYROOMUZcjs.Modal, { isOpen, onClose, className: "md:max-w-[600px]", children: [
10687
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWYROOMUZcjs.ModalTitle, { children: "Unarchive Chat" }) }),
10713
10688
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "w-full text-ods-text-primary text-h4", children: "This chat will be moved back to your current chats." }),
10714
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk3W4ASAXNcjs.ModalFooter, { children: [
10689
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWYROOMUZcjs.ModalFooter, { children: [
10715
10690
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "outline", type: "button", onClick: onClose, className: footerBtn, children: "Cancel" }),
10716
10691
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "accent", type: "button", onClick: onConfirm, className: footerBtn, children: "Unarchive Chat" })
10717
10692
  ] })
@@ -10797,7 +10772,7 @@ function ChatPanelHeaderMobile({
10797
10772
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 items-end gap-[var(--spacing-system-m)] pt-[var(--spacing-system-xl)]", children: [
10798
10773
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xs)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "min-w-0 truncate text-ods-text-primary text-h2", title, children: title }) }),
10799
10774
  menuItems.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10800
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
10775
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
10801
10776
  {
10802
10777
  groups: [{ items: menuItems }],
10803
10778
  triggerAriaLabel: "Chat actions",
@@ -10900,7 +10875,7 @@ function ChatPanelHeader({
10900
10875
  ] }),
10901
10876
  isArchivedView && onRestore && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "cell", className: "w-14", onClick: onRestore, "aria-label": "Unarchive chat", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPPX2JK6Pcjs.Refresh01LeftIcon, { size: 24 }) }),
10902
10877
  showBack && !isArchivedView && menuItems.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10903
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
10878
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
10904
10879
  {
10905
10880
  triggerAriaLabel: "Chat actions",
10906
10881
  onCloseAutoFocus: (e) => e.preventDefault(),
@@ -11234,7 +11209,7 @@ var HoverCardContent = _react.forwardRef.call(void 0,
11234
11209
  }, ref) => (
11235
11210
  // Portalled so an `overflow: hidden` ancestor (a table cell, a card) cannot
11236
11211
  // clip it.
11237
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HoverCardPrimitive.Portal, { container: _chunkS3QXLD4Xcjs.usePortalContainer.call(void 0, ), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
11212
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HoverCardPrimitive.Portal, { container: _chunkVCFQHPOOcjs.usePortalContainer.call(void 0, ), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
11238
11213
  HoverCardPrimitive.Content,
11239
11214
  {
11240
11215
  ref,
@@ -11316,7 +11291,7 @@ var ModelDisplay = _react2.default.forwardRef(
11316
11291
  const isLoading = _chunk63A4GZMBcjs.useLoadingScope.call(void 0, ) || loading;
11317
11292
  const icon = getProviderIcon(provider);
11318
11293
  const name = displayName || modelName;
11319
- const isV2 = useChatAppearance() === _chunk3W4ASAXNcjs.CHAT_APPEARANCE.V2;
11294
+ const isV2 = useChatAppearance() === _chunkWYROOMUZcjs.CHAT_APPEARANCE.V2;
11320
11295
  const formatCount = (count) => isV2 ? count.toLocaleString("en-US") : formatTokenCount(count);
11321
11296
  if (isLoading) {
11322
11297
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref, "aria-hidden": true, className: _chunk63A4GZMBcjs.cn.call(void 0, MODEL_DISPLAY_ROW_CLASS, className), ...props, children: [
@@ -11344,20 +11319,20 @@ var ModelDisplay = _react2.default.forwardRef(
11344
11319
  // Neither: the same two spans the row always had.
11345
11320
  labelContent
11346
11321
  );
11347
- const labelWithTooltip = modelTooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipProvider, { delayDuration: 300, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYJZ7R3W5cjs.Tooltip, { children: [
11348
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipTrigger, { asChild: true, children: label }),
11349
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipContent, { side: "top", align: "start", children: modelTooltip })
11322
+ const labelWithTooltip = modelTooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipProvider, { delayDuration: 300, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkKXFIYO4Ocjs.Tooltip, { children: [
11323
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipTrigger, { asChild: true, children: label }),
11324
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipContent, { side: "top", align: "start", children: modelTooltip })
11350
11325
  ] }) }) : label;
11351
11326
  const inline = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref, className: _chunk63A4GZMBcjs.cn.call(void 0, MODEL_DISPLAY_ROW_CLASS, "text-ods-text-secondary", className), ...props, children: [
11352
11327
  labelWithTooltip,
11353
- contextWindow != null && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipProvider, { delayDuration: 300, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYJZ7R3W5cjs.Tooltip, { children: [
11354
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "ml-auto opacity-70 text-h6", children: [
11328
+ contextWindow != null && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipProvider, { delayDuration: 300, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkKXFIYO4Ocjs.Tooltip, { children: [
11329
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "ml-auto opacity-70 text-h6", children: [
11355
11330
  usedTokens != null ? formatCount(usedTokens) : "\u2014",
11356
11331
  isV2 ? " / " : "/",
11357
11332
  formatCount(contextWindow),
11358
11333
  " context budget"
11359
11334
  ] }) }),
11360
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYJZ7R3W5cjs.TooltipContent, { side: "top", align: "end", children: CONTEXT_BUDGET_HINT })
11335
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipContent, { side: "top", align: "end", children: CONTEXT_BUDGET_HINT })
11361
11336
  ] }) })
11362
11337
  ] });
11363
11338
  if (!hasAnyBreakdownRow(breakdown)) return inline;
@@ -11476,7 +11451,7 @@ function ChatComposer({
11476
11451
  }, [entityTypes]);
11477
11452
  const resolveContextIcon = _react.useCallback.call(void 0, (item) => iconByType.get(item.type), [iconByType]);
11478
11453
  const menu = menuItems && menuItems.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
11479
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
11454
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
11480
11455
  {
11481
11456
  triggerAriaLabel: "Composer actions",
11482
11457
  side: "top",
@@ -11502,7 +11477,7 @@ function ChatComposer({
11502
11477
  const showLegacyAttach = !contextEnabled && showAttachmentButton && !!onAddFiles;
11503
11478
  const showFooterRow = showLegacyAttach || !!model || !!footerActions;
11504
11479
  const inputNode = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
11505
- _chunk3W4ASAXNcjs.ChatInput,
11480
+ _chunkWYROOMUZcjs.ChatInput,
11506
11481
  {
11507
11482
  ref: inputRef,
11508
11483
  onSend,
@@ -11790,7 +11765,7 @@ function FooterAction({
11790
11765
  leftIcon: showLabel ? mark : void 0,
11791
11766
  rightIcon: trailingIcon ? mark : void 0,
11792
11767
  className: _chunk63A4GZMBcjs.cn.call(void 0, className, "pointer-events-none"),
11793
- children: showLabel ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TextHold, { children: label }) : mark
11768
+ children: showLabel ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.TextHold, { children: label }) : mark
11794
11769
  }
11795
11770
  ) });
11796
11771
  }
@@ -13080,7 +13055,7 @@ function ChatCardDisclosureButton({
13080
13055
  {
13081
13056
  label,
13082
13057
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Icon, { className: "!h-3 !w-3" }),
13083
- trailingIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.ExpandChevron, { expanded: open, className: "!h-3 !w-3" }),
13058
+ trailingIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.ExpandChevron, { expanded: open, className: "!h-3 !w-3" }),
13084
13059
  onClick: (e) => {
13085
13060
  e.preventDefault();
13086
13061
  e.stopPropagation();
@@ -13094,7 +13069,7 @@ function ChatCardDisclosureButton({
13094
13069
  );
13095
13070
  }
13096
13071
  function DisclosurePanel({ open, children }) {
13097
- const { innerRef, containerStyle } = _chunk4YBS4HIOcjs.useCollapsible.call(void 0, { expanded: open });
13072
+ const { innerRef, containerStyle } = _chunkLM7EL3UQcjs.useCollapsible.call(void 0, { expanded: open });
13098
13073
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { style: containerStyle, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: innerRef, children }) });
13099
13074
  }
13100
13075
  function useChatCardDisclosure(kind, chatRef, { reserve = false } = {}) {
@@ -13607,7 +13582,7 @@ function MingoInfoCard({
13607
13582
  }
13608
13583
  ),
13609
13584
  hasMenu && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13610
- _chunkYJZ7R3W5cjs.ActionsMenuDropdown,
13585
+ _chunkKXFIYO4Ocjs.ActionsMenuDropdown,
13611
13586
  {
13612
13587
  groups: menuGroups,
13613
13588
  triggerAriaLabel: menuAriaLabel,
@@ -14978,7 +14953,7 @@ function ChatCardLoader({ chatRef, onDiscuss, onDisplay, extras }) {
14978
14953
  const discussFn = useDisplay ? onDisplay : onDiscuss;
14979
14954
  const discuss = discussFn ? {
14980
14955
  label: useDisplay ? "Display" : "Ask Mingo",
14981
- icon: useDisplay ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkU4USZF42cjs.FileContentIcon, { size: 20 }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4YBS4HIOcjs.AgentMark, { agent: "mingo", className: "size-5" }),
14956
+ icon: useDisplay ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkU4USZF42cjs.FileContentIcon, { size: 20 }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7EL3UQcjs.AgentMark, { agent: "mingo", className: "size-5" }),
14982
14957
  run: () => discussFn(finalChatRef)
14983
14958
  } : void 0;
14984
14959
  const renderOpts = {
@@ -15077,19 +15052,19 @@ function makeSeqKey(messageType, chunkType, sequenceId) {
15077
15052
  function makeBatchDedupKey(item) {
15078
15053
  const seq = _nullishCoalesce(item.chunk.sequenceId, () => ( "na"));
15079
15054
  const type = typeof item.chunk.type === "string" ? item.chunk.type : "na";
15080
- const text2 = typeof item.chunk.text === "string" ? item.chunk.text : "";
15055
+ const text3 = typeof item.chunk.text === "string" ? item.chunk.text : "";
15081
15056
  const integratedToolType = typeof item.chunk.integratedToolType === "string" ? item.chunk.integratedToolType : "";
15082
15057
  const toolFunction = typeof item.chunk.toolFunction === "string" ? item.chunk.toolFunction : "";
15083
15058
  const approvalRequestId = typeof item.chunk.approvalRequestId === "string" ? item.chunk.approvalRequestId : typeof item.chunk.approval_request_id === "string" ? item.chunk.approval_request_id : "";
15084
- return `${item.messageType}:${seq}:${type}:${text2}:${integratedToolType}:${toolFunction}:${approvalRequestId}`;
15059
+ return `${item.messageType}:${seq}:${type}:${text3}:${integratedToolType}:${toolFunction}:${approvalRequestId}`;
15085
15060
  }
15086
15061
  function getChatTypeMessageType(chatType) {
15087
- return chatType === _chunk3W4ASAXNcjs.CHAT_TYPE.ADMIN ? "admin-message" : "message";
15062
+ return chatType === _chunkWYROOMUZcjs.CHAT_TYPE.ADMIN ? "admin-message" : "message";
15088
15063
  }
15089
15064
  function useChunkCatchup({
15090
15065
  dialogId,
15091
15066
  onChunkReceived,
15092
- chatTypes = [_chunk3W4ASAXNcjs.CHAT_TYPE.CLIENT],
15067
+ chatTypes = [_chunkWYROOMUZcjs.CHAT_TYPE.CLIENT],
15093
15068
  fetchChunks
15094
15069
  }) {
15095
15070
  const processedSequenceKeys = _react.useRef.call(void 0, /* @__PURE__ */ new Set());
@@ -16431,7 +16406,7 @@ function upsertTrailingCompaction(prev, segments) {
16431
16406
  return [...prev.slice(0, -1), { ...last, segments: merged }];
16432
16407
  }
16433
16408
  function sameToolData(a, b) {
16434
- return a.type === b.type && a.integratedToolType === b.integratedToolType && a.toolFunction === b.toolFunction && a.toolTitle === b.toolTitle && a.result === b.result && a.success === b.success && a.toolExecutionRequestId === b.toolExecutionRequestId && (a.parameters === b.parameters || JSON.stringify(_nullishCoalesce(a.parameters, () => ( null))) === JSON.stringify(_nullishCoalesce(b.parameters, () => ( null))));
16409
+ return a.type === b.type && a.integratedToolType === b.integratedToolType && a.toolFunction === b.toolFunction && a.toolTitle === b.toolTitle && (a.policyReview === b.policyReview || JSON.stringify(a.policyReview) === JSON.stringify(b.policyReview)) && a.result === b.result && a.success === b.success && a.toolExecutionRequestId === b.toolExecutionRequestId && (a.parameters === b.parameters || JSON.stringify(_nullishCoalesce(a.parameters, () => ( null))) === JSON.stringify(_nullishCoalesce(b.parameters, () => ( null))));
16435
16410
  }
16436
16411
  function sameExecutionState(a, b) {
16437
16412
  return !!a && a.status === b.status && a.result === b.result && a.success === b.success;
@@ -16469,6 +16444,8 @@ function mergeToolExecutionIfPresent(prev, segment) {
16469
16444
  const mergedData = {
16470
16445
  ...toolData,
16471
16446
  toolTitle: _nullishCoalesce(toolData.toolTitle, () => ( seg.data.toolTitle)),
16447
+ // The review rides the EXECUTING chunk only: the EXECUTED one keeps it.
16448
+ ...keptPolicyReview(toolData.policyReview, seg.data.policyReview),
16472
16449
  parameters: toolData.parameters || seg.data.parameters
16473
16450
  };
16474
16451
  if (sameToolData(seg.data, mergedData)) return prev;
@@ -16552,12 +16529,12 @@ var MessageSegmentAccumulator = class {
16552
16529
  * Append text to the current message
16553
16530
  * If the last segment is text, append to it; otherwise create a new text segment
16554
16531
  */
16555
- appendText(text2) {
16532
+ appendText(text3) {
16556
16533
  const lastSegment = this.segments[this.segments.length - 1];
16557
16534
  if (lastSegment && lastSegment.type === "text") {
16558
- this.segments[this.segments.length - 1] = { type: "text", text: lastSegment.text + text2 };
16535
+ this.segments[this.segments.length - 1] = { type: "text", text: lastSegment.text + text3 };
16559
16536
  } else {
16560
- this.segments.push({ type: "text", text: text2 });
16537
+ this.segments.push({ type: "text", text: text3 });
16561
16538
  }
16562
16539
  return this.getSegments();
16563
16540
  }
@@ -16565,12 +16542,12 @@ var MessageSegmentAccumulator = class {
16565
16542
  * Append thinking text to the current message.
16566
16543
  * If the last segment is thinking, append to it; otherwise start a new thinking segment.
16567
16544
  */
16568
- appendThinking(text2) {
16545
+ appendThinking(text3) {
16569
16546
  const lastSegment = this.segments[this.segments.length - 1];
16570
16547
  if (lastSegment && lastSegment.type === "thinking") {
16571
- this.segments[this.segments.length - 1] = { type: "thinking", text: lastSegment.text + text2 };
16548
+ this.segments[this.segments.length - 1] = { type: "thinking", text: lastSegment.text + text3 };
16572
16549
  } else {
16573
- this.segments.push({ type: "thinking", text: text2 });
16550
+ this.segments.push({ type: "thinking", text: text3 });
16574
16551
  }
16575
16552
  return this.getSegments();
16576
16553
  }
@@ -16610,6 +16587,7 @@ var MessageSegmentAccumulator = class {
16610
16587
  toolFunction: toolData.toolFunction,
16611
16588
  toolTitle: toolData.toolTitle,
16612
16589
  toolExplanation: toolData.toolExplanation,
16590
+ ...keptPolicyReview(toolData.policyReview),
16613
16591
  parameters: toolData.parameters
16614
16592
  });
16615
16593
  this.segments.push(segment);
@@ -16625,7 +16603,8 @@ var MessageSegmentAccumulator = class {
16625
16603
  ...toolData,
16626
16604
  toolTitle: _nullishCoalesce(_nullishCoalesce(toolData.toolTitle, () => ( _optionalChain([existingExecuting, 'optionalAccess', _539 => _539.data, 'access', _540 => _540.toolTitle]))), () => ( _optionalChain([executingTool, 'optionalAccess', _541 => _541.toolTitle]))),
16627
16605
  toolExplanation: _nullishCoalesce(_nullishCoalesce(toolData.toolExplanation, () => ( _optionalChain([existingExecuting, 'optionalAccess', _542 => _542.data, 'access', _543 => _543.toolExplanation]))), () => ( _optionalChain([executingTool, 'optionalAccess', _544 => _544.toolExplanation]))),
16628
- parameters: toolData.parameters || _optionalChain([executingTool, 'optionalAccess', _545 => _545.parameters])
16606
+ ...keptPolicyReview(toolData.policyReview, _optionalChain([existingExecuting, 'optionalAccess', _545 => _545.data, 'access', _546 => _546.policyReview]), _optionalChain([executingTool, 'optionalAccess', _547 => _547.policyReview])),
16607
+ parameters: toolData.parameters || _optionalChain([executingTool, 'optionalAccess', _548 => _548.parameters])
16629
16608
  }
16630
16609
  };
16631
16610
  if (existingIndex !== -1) {
@@ -16649,7 +16628,7 @@ var MessageSegmentAccumulator = class {
16649
16628
  if (seg.type !== "approval_batch") return seg;
16650
16629
  const hasCall = seg.data.toolCalls.some((c) => c.toolExecutionRequestId === execId);
16651
16630
  if (!hasCall) return seg;
16652
- const prev = _optionalChain([seg, 'access', _546 => _546.data, 'access', _547 => _547.executions, 'optionalAccess', _548 => _548[execId]]);
16631
+ const prev = _optionalChain([seg, 'access', _549 => _549.data, 'access', _550 => _550.executions, 'optionalAccess', _551 => _551[execId]]);
16653
16632
  const next = nextBatchExecution(prev, toolData);
16654
16633
  matched = true;
16655
16634
  if (next === null) return seg;
@@ -16783,8 +16762,8 @@ var MessageSegmentAccumulator = class {
16783
16762
  requestId,
16784
16763
  {
16785
16764
  ...pendingApproval,
16786
- command: _optionalChain([pendingApproval, 'optionalAccess', _549 => _549.command]) || "",
16787
- approvalType: _optionalChain([pendingApproval, 'optionalAccess', _550 => _550.approvalType]) || approvalType
16765
+ command: _optionalChain([pendingApproval, 'optionalAccess', _552 => _552.command]) || "",
16766
+ approvalType: _optionalChain([pendingApproval, 'optionalAccess', _553 => _553.approvalType]) || approvalType
16788
16767
  },
16789
16768
  status
16790
16769
  );
@@ -16800,7 +16779,7 @@ var MessageSegmentAccumulator = class {
16800
16779
  * `[existing..., new...]` back through `replaySegments`, which would
16801
16780
  * otherwise yield two cards for one offer.
16802
16781
  */
16803
- addEscalationOffer(offerId, text2, origin, status = "pending", resolvedByName) {
16782
+ addEscalationOffer(offerId, text3, origin, status = "pending", resolvedByName) {
16804
16783
  const existingIndex = this.segments.findIndex(
16805
16784
  (s) => s.type === "escalation_offer" && s.data.offerId === offerId
16806
16785
  );
@@ -16809,9 +16788,9 @@ var MessageSegmentAccumulator = class {
16809
16788
  type: "escalation_offer",
16810
16789
  // The resolved chunk carries no text/origin — a redelivered offer must
16811
16790
  // not blank the card the PENDING chunk already painted.
16812
- data: { offerId, text: text2 || _optionalChain([existing, 'optionalAccess', _551 => _551.data, 'access', _552 => _552.text]) || "", origin: _nullishCoalesce(origin, () => ( _optionalChain([existing, 'optionalAccess', _553 => _553.data, 'access', _554 => _554.origin]))) },
16791
+ data: { offerId, text: text3 || _optionalChain([existing, 'optionalAccess', _554 => _554.data, 'access', _555 => _555.text]) || "", origin: _nullishCoalesce(origin, () => ( _optionalChain([existing, 'optionalAccess', _556 => _556.data, 'access', _557 => _557.origin]))) },
16813
16792
  status,
16814
- resolvedByName: _nullishCoalesce(resolvedByName, () => ( _optionalChain([existing, 'optionalAccess', _555 => _555.resolvedByName]))),
16793
+ resolvedByName: _nullishCoalesce(resolvedByName, () => ( _optionalChain([existing, 'optionalAccess', _558 => _558.resolvedByName]))),
16815
16794
  onApprove: this.callbacks.onEscalationApprove,
16816
16795
  onReject: this.callbacks.onEscalationReject
16817
16796
  };
@@ -17097,12 +17076,12 @@ function createChatStreamReducer(options = {}) {
17097
17076
  let lastAppliedSeq = Number.NEGATIVE_INFINITY;
17098
17077
  let pendingEchoTexts = [];
17099
17078
  let turnStartedAt = 0;
17100
- function consumeOwnEcho(text2, authorMatched = false) {
17079
+ function consumeOwnEcho(text3, authorMatched = false) {
17101
17080
  if (pendingEchoTexts.length === 0) return false;
17102
17081
  const now = Date.now();
17103
17082
  pendingEchoTexts = pendingEchoTexts.filter((e) => now - e.at < OWN_ECHO_AUTHOR_TTL_MS);
17104
17083
  const ttl = authorMatched ? OWN_ECHO_AUTHOR_TTL_MS : OWN_ECHO_TTL_MS;
17105
- const idx = pendingEchoTexts.findIndex((e) => e.text === text2 && now - e.at < ttl);
17084
+ const idx = pendingEchoTexts.findIndex((e) => e.text === text3 && now - e.at < ttl);
17106
17085
  if (idx === -1) return false;
17107
17086
  pendingEchoTexts.splice(idx, 1);
17108
17087
  return true;
@@ -17133,7 +17112,7 @@ function createChatStreamReducer(options = {}) {
17133
17112
  let stateCache = null;
17134
17113
  function invalidate() {
17135
17114
  stateCache = null;
17136
- _optionalChain([onChange, 'optionalCall', _556 => _556()]);
17115
+ _optionalChain([onChange, 'optionalCall', _559 => _559()]);
17137
17116
  }
17138
17117
  function getState() {
17139
17118
  if (!stateCache) {
@@ -17149,7 +17128,7 @@ function createChatStreamReducer(options = {}) {
17149
17128
  return stateCache;
17150
17129
  }
17151
17130
  function emit(name, ...args) {
17152
- _optionalChain([onEffect, 'optionalCall', _557 => _557({ name, args })]);
17131
+ _optionalChain([onEffect, 'optionalCall', _560 => _560({ name, args })]);
17153
17132
  }
17154
17133
  function setMessagesInternal(next) {
17155
17134
  if (next !== messages) {
@@ -17192,12 +17171,12 @@ function createChatStreamReducer(options = {}) {
17192
17171
  return stampTrailingAssistantSourceMetadata(stampTrailingAssistantSeq(next, seq));
17193
17172
  }
17194
17173
  function applySegmentsToState(segments, meta) {
17195
- const seq = _optionalChain([meta, 'optionalAccess', _558 => _558.streamSeq]);
17196
- if (_optionalChain([meta, 'optionalAccess', _559 => _559.append]) && meta.isCompacting) {
17174
+ const seq = _optionalChain([meta, 'optionalAccess', _561 => _561.streamSeq]);
17175
+ if (_optionalChain([meta, 'optionalAccess', _562 => _562.append]) && meta.isCompacting) {
17197
17176
  setMessagesInternal(commitTrailingAssistant(upsertTrailingCompaction(messages, segments), seq));
17198
17177
  return;
17199
17178
  }
17200
- if (_optionalChain([meta, 'optionalAccess', _560 => _560.append])) {
17179
+ if (_optionalChain([meta, 'optionalAccess', _563 => _563.append])) {
17201
17180
  setMessagesInternal(commitTrailingAssistant(appendToTrailingAssistant(messages, segments), seq));
17202
17181
  return;
17203
17182
  }
@@ -17209,13 +17188,13 @@ function createChatStreamReducer(options = {}) {
17209
17188
  adoptTrailingAssistant = false;
17210
17189
  const last = messages[messages.length - 1];
17211
17190
  if (!last || last.role !== "assistant" || adoptTail) return;
17212
- const hasContent = (_nullishCoalesce(_optionalChain([last, 'access', _561 => _561.segments, 'optionalAccess', _562 => _562.length]), () => ( 0))) > 0 || last.content !== "";
17191
+ const hasContent = (_nullishCoalesce(_optionalChain([last, 'access', _564 => _564.segments, 'optionalAccess', _565 => _565.length]), () => ( 0))) > 0 || last.content !== "";
17213
17192
  if (!hasContent) return;
17214
17193
  setMessagesInternal([...messages, { id: nextId("assistant"), role: "assistant", content: "", segments: [] }]);
17215
17194
  }
17216
17195
  function applyUserMessageToState(ev) {
17217
- const text2 = ev.text;
17218
- if (!text2) return;
17196
+ const text3 = ev.text;
17197
+ if (!text3) return;
17219
17198
  const seq = ev.seq;
17220
17199
  const adminEchoAllowed = ev.ownerType !== CHAT_OWNER_ADMIN || options.ownEchoIncludesAdmin === true;
17221
17200
  const selfUserId = resolveSelfUserId();
@@ -17223,11 +17202,11 @@ function createChatStreamReducer(options = {}) {
17223
17202
  if (selfUserId !== void 0 && !authorDeclared) warnIdLessAuthor();
17224
17203
  const authorMatched = selfUserId !== void 0 && authorDeclared && ev.userId === selfUserId;
17225
17204
  const authorEchoAllowed = selfUserId === void 0 || !authorDeclared || authorMatched;
17226
- if (adminEchoAllowed && authorEchoAllowed && consumeOwnEcho(text2, authorMatched)) return;
17205
+ if (adminEchoAllowed && authorEchoAllowed && consumeOwnEcho(text3, authorMatched)) return;
17227
17206
  const authorType = ev.ownerType === CHAT_OWNER_ADMIN ? "admin" : "user";
17228
17207
  if (typeof seq !== "number" && hasRecentMessage(
17229
17208
  messages,
17230
- (m) => m.role === "user" && (_nullishCoalesce(m.authorType, () => ( "user"))) === authorType && m.content === text2,
17209
+ (m) => m.role === "user" && (_nullishCoalesce(m.authorType, () => ( "user"))) === authorType && m.content === text3,
17231
17210
  CONTENT_DEDUP_WINDOW
17232
17211
  )) {
17233
17212
  return;
@@ -17237,7 +17216,7 @@ function createChatStreamReducer(options = {}) {
17237
17216
  {
17238
17217
  id: nextId("user"),
17239
17218
  role: "user",
17240
- content: text2,
17219
+ content: text3,
17241
17220
  // Coverage signal for the history merge — see `streamSeq` on
17242
17221
  // `UnifiedChatMessage`. For `user-` rows it is also what tells a
17243
17222
  // REPLAYED echo (history already has its row) apart from a genuine new
@@ -17250,12 +17229,12 @@ function createChatStreamReducer(options = {}) {
17250
17229
  ]);
17251
17230
  }
17252
17231
  function applyDirectMessageToState(ev) {
17253
- const text2 = ev.text;
17254
- if (!text2) return;
17232
+ const text3 = ev.text;
17233
+ if (!text3) return;
17255
17234
  const seq = ev.seq;
17256
17235
  if (typeof seq !== "number" && hasRecentMessage(
17257
17236
  messages,
17258
- (m) => m.role === "user" && m.authorType === "admin" && m.content === text2,
17237
+ (m) => m.role === "user" && m.authorType === "admin" && m.content === text3,
17259
17238
  CONTENT_DEDUP_WINDOW
17260
17239
  )) {
17261
17240
  return;
@@ -17265,7 +17244,7 @@ function createChatStreamReducer(options = {}) {
17265
17244
  {
17266
17245
  id: `direct-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`,
17267
17246
  role: "user",
17268
- content: text2,
17247
+ content: text3,
17269
17248
  ...typeof seq === "number" ? { streamSeq: seq } : {},
17270
17249
  name: _nullishCoalesce(ev.displayName, () => ( "Admin")),
17271
17250
  authorType: "admin"
@@ -17273,10 +17252,10 @@ function createChatStreamReducer(options = {}) {
17273
17252
  ]);
17274
17253
  }
17275
17254
  function applySystemMessageToState(ev) {
17276
- const text2 = ev.text;
17277
- if (!text2) return;
17255
+ const text3 = ev.text;
17256
+ if (!text3) return;
17278
17257
  const seq = ev.seq;
17279
- if (typeof seq !== "number" && hasRecentMessage(messages, (m) => m.authorType === "system" && m.name === text2, SYSTEM_DEDUP_WINDOW)) {
17258
+ if (typeof seq !== "number" && hasRecentMessage(messages, (m) => m.authorType === "system" && m.name === text3, SYSTEM_DEDUP_WINDOW)) {
17280
17259
  return;
17281
17260
  }
17282
17261
  setMessagesInternal([
@@ -17286,7 +17265,7 @@ function createChatStreamReducer(options = {}) {
17286
17265
  role: "user",
17287
17266
  content: "",
17288
17267
  ...typeof seq === "number" ? { streamSeq: seq } : {},
17289
- name: text2,
17268
+ name: text3,
17290
17269
  authorType: "system"
17291
17270
  }
17292
17271
  ]);
@@ -17425,16 +17404,16 @@ function createChatStreamReducer(options = {}) {
17425
17404
  const status = approvalStatuses[requestId] || "pending";
17426
17405
  if (!displayInline(approvalType)) {
17427
17406
  const required = _nullishCoalesce(toolCalls.find((c) => c.requiresApproval), () => ( toolCalls[0]));
17428
- const summary = required ? _chunk4YBS4HIOcjs.getCommandText.call(void 0, required) : `Batch of ${toolCalls.length} tool calls`;
17407
+ const summary = required ? _chunkLM7EL3UQcjs.getCommandText.call(void 0, required) : `Batch of ${toolCalls.length} tool calls`;
17429
17408
  pendingEscalated.set(requestId, {
17430
17409
  command: summary,
17431
- explanation: _optionalChain([required, 'optionalAccess', _563 => _563.toolExplanation]),
17410
+ explanation: _optionalChain([required, 'optionalAccess', _566 => _566.toolExplanation]),
17432
17411
  approvalType,
17433
17412
  toolCalls
17434
17413
  });
17435
17414
  emit("onEscalatedApproval", requestId, {
17436
17415
  command: summary,
17437
- explanation: _optionalChain([required, 'optionalAccess', _564 => _564.toolExplanation]),
17416
+ explanation: _optionalChain([required, 'optionalAccess', _567 => _567.toolExplanation]),
17438
17417
  approvalType
17439
17418
  });
17440
17419
  break;
@@ -17458,7 +17437,7 @@ function createChatStreamReducer(options = {}) {
17458
17437
  if (!call.requiresApproval) continue;
17459
17438
  segments = accumulator.addApprovalRequest(
17460
17439
  requestId,
17461
- _chunk4YBS4HIOcjs.getCommandText.call(void 0, call),
17440
+ _chunkLM7EL3UQcjs.getCommandText.call(void 0, call),
17462
17441
  call.toolExplanation,
17463
17442
  approvalType,
17464
17443
  status,
@@ -17537,7 +17516,7 @@ function createChatStreamReducer(options = {}) {
17537
17516
  if (!call.requiresApproval) continue;
17538
17517
  segments = accumulator.addApprovalRequest(
17539
17518
  requestId,
17540
- _chunk4YBS4HIOcjs.getCommandText.call(void 0, call),
17519
+ _chunkLM7EL3UQcjs.getCommandText.call(void 0, call),
17541
17520
  call.toolExplanation,
17542
17521
  escalatedData.approvalType,
17543
17522
  status
@@ -17667,20 +17646,20 @@ function createChatStreamReducer(options = {}) {
17667
17646
  break;
17668
17647
  }
17669
17648
  }
17670
- function sseWriteTrailingText(text2) {
17649
+ function sseWriteTrailingText(text3) {
17671
17650
  const last = messages[messages.length - 1];
17672
17651
  if (!last || last.role !== "assistant") return;
17673
17652
  const segments = [..._nullishCoalesce(last.segments, () => ( []))];
17674
17653
  const tail = segments[segments.length - 1];
17675
17654
  if (tail && tail.type === "text") {
17676
- segments[segments.length - 1] = { type: "text", text: text2 };
17655
+ segments[segments.length - 1] = { type: "text", text: text3 };
17677
17656
  } else {
17678
- segments.push({ type: "text", text: text2 });
17657
+ segments.push({ type: "text", text: text3 });
17679
17658
  }
17680
17659
  setMessagesInternal([...messages.slice(0, -1), { ...last, segments }]);
17681
17660
  }
17682
- function sseAppendText(text2) {
17683
- sseCurrentText += text2;
17661
+ function sseAppendText(text3) {
17662
+ sseCurrentText += text3;
17684
17663
  sseWriteTrailingText(sseCurrentText);
17685
17664
  }
17686
17665
  function mergeTurnMeta(sendIdx, partial) {
@@ -17806,7 +17785,7 @@ function createChatStreamReducer(options = {}) {
17806
17785
  const resolveBatch = (status, confirm) => async () => {
17807
17786
  setMessagesInternal(projectBatchStatusToMessages(messages, anchorId, status));
17808
17787
  for (const id of ids) {
17809
- const ok = await _optionalChain([confirm, 'optionalCall', _565 => _565(id)]);
17788
+ const ok = await _optionalChain([confirm, 'optionalCall', _568 => _568(id)]);
17810
17789
  if (ok === false) {
17811
17790
  setMessagesInternal(projectBatchRowFailureToMessages(messages, id));
17812
17791
  }
@@ -17944,8 +17923,8 @@ function createChatStreamReducer(options = {}) {
17944
17923
  }
17945
17924
  }
17946
17925
  }
17947
- hasEverStreamed = hasEverStreamed || (_nullishCoalesce(_optionalChain([extras, 'optionalAccess', _566 => _566.resumed]), () => ( messages.length > 0)));
17948
- if (_optionalChain([extras, 'optionalAccess', _567 => _567.agentBusy])) agentBusyState();
17926
+ hasEverStreamed = hasEverStreamed || (_nullishCoalesce(_optionalChain([extras, 'optionalAccess', _569 => _569.resumed]), () => ( messages.length > 0)));
17927
+ if (_optionalChain([extras, 'optionalAccess', _570 => _570.agentBusy])) agentBusyState();
17949
17928
  invalidate();
17950
17929
  }
17951
17930
  return {
@@ -17963,19 +17942,19 @@ function createChatStreamReducer(options = {}) {
17963
17942
  messages = [...older, ...messages];
17964
17943
  invalidate();
17965
17944
  },
17966
- pushOptimisticSend(text2, hidden = false) {
17967
- pendingEchoTexts.push({ text: text2, at: Date.now() });
17945
+ pushOptimisticSend(text3, hidden = false) {
17946
+ pendingEchoTexts.push({ text: text3, at: Date.now() });
17968
17947
  if (pendingEchoTexts.length > MAX_PENDING_ECHOES) pendingEchoTexts.shift();
17969
17948
  messages = [
17970
17949
  ...messages,
17971
17950
  // An EMPTY-text send is out-of-band metadata (an approval decision),
17972
17951
  // not something the user said — see `beginSseSend` for the full
17973
17952
  // rationale. Never materialize a row for it.
17974
- ...text2.length > 0 ? [
17953
+ ...text3.length > 0 ? [
17975
17954
  {
17976
17955
  id: nextId("user"),
17977
17956
  role: "user",
17978
- content: text2,
17957
+ content: text3,
17979
17958
  ...hidden ? { hidden: true } : {}
17980
17959
  }
17981
17960
  ] : [],
@@ -17991,7 +17970,7 @@ function createChatStreamReducer(options = {}) {
17991
17970
  invalidate();
17992
17971
  },
17993
17972
  resetForDialogSwitch,
17994
- beginSseSend({ text: text2, hidden, userName = "You", assistantName, assistantAvatar }) {
17973
+ beginSseSend({ text: text3, hidden, userName = "You", assistantName, assistantAvatar }) {
17995
17974
  const now = Date.now();
17996
17975
  messages = [
17997
17976
  ...messages,
@@ -18003,12 +17982,12 @@ function createChatStreamReducer(options = {}) {
18003
17982
  // label with no body). So we never mint it. Hidden sends that DO carry
18004
17983
  // text (e.g. an auto-continuation directive) still become real state:
18005
17984
  // the LLM must see them, `Message.hidden` keeps them off screen.
18006
- ...text2.length > 0 ? [
17985
+ ...text3.length > 0 ? [
18007
17986
  {
18008
17987
  id: `user-${now}`,
18009
17988
  role: "user",
18010
17989
  name: userName,
18011
- content: text2,
17990
+ content: text3,
18012
17991
  timestamp: new Date(now),
18013
17992
  ...hidden ? { hidden: true } : {}
18014
17993
  }
@@ -18030,7 +18009,7 @@ function createChatStreamReducer(options = {}) {
18030
18009
  },
18031
18010
  endSseTurn() {
18032
18011
  const last = messages[messages.length - 1];
18033
- if (last && last.role === "assistant" && (_nullishCoalesce(_optionalChain([last, 'access', _568 => _568.segments, 'optionalAccess', _569 => _569.length]), () => ( 0))) === 0 && last.content === "") {
18012
+ if (last && last.role === "assistant" && (_nullishCoalesce(_optionalChain([last, 'access', _571 => _571.segments, 'optionalAccess', _572 => _572.length]), () => ( 0))) === 0 && last.content === "") {
18034
18013
  messages = messages.slice(0, -1);
18035
18014
  }
18036
18015
  sseCurrentText = "";
@@ -18183,10 +18162,10 @@ function createChatDialogStore(options = {}) {
18183
18162
  if (onEvict) {
18184
18163
  const sep = key.indexOf(KEY_SEP);
18185
18164
  onEvict(key.slice(0, sep), key.slice(sep + 1), {
18186
- messages: _nullishCoalesce(_optionalChain([dropped, 'optionalAccess', _570 => _570.state, 'access', _571 => _571.messages]), () => ( EMPTY_STATE.messages)),
18187
- approvalStatuses: _nullishCoalesce(_optionalChain([dropped, 'optionalAccess', _572 => _572.state, 'access', _573 => _573.approvalStatuses]), () => ( EMPTY_STATE.approvalStatuses)),
18188
- lastAppliedSeq: _nullishCoalesce(_optionalChain([dropped, 'optionalAccess', _574 => _574.getLastAppliedSeq, 'call', _575 => _575()]), () => ( Number.NEGATIVE_INFINITY)),
18189
- pendingEchoes: _nullishCoalesce(_optionalChain([dropped, 'optionalAccess', _576 => _576.getPendingEchoes, 'call', _577 => _577()]), () => ( EMPTY_PENDING_ECHOES))
18165
+ messages: _nullishCoalesce(_optionalChain([dropped, 'optionalAccess', _573 => _573.state, 'access', _574 => _574.messages]), () => ( EMPTY_STATE.messages)),
18166
+ approvalStatuses: _nullishCoalesce(_optionalChain([dropped, 'optionalAccess', _575 => _575.state, 'access', _576 => _576.approvalStatuses]), () => ( EMPTY_STATE.approvalStatuses)),
18167
+ lastAppliedSeq: _nullishCoalesce(_optionalChain([dropped, 'optionalAccess', _577 => _577.getLastAppliedSeq, 'call', _578 => _578()]), () => ( Number.NEGATIVE_INFINITY)),
18168
+ pendingEchoes: _nullishCoalesce(_optionalChain([dropped, 'optionalAccess', _579 => _579.getPendingEchoes, 'call', _580 => _580()]), () => ( EMPTY_PENDING_ECHOES))
18190
18169
  });
18191
18170
  }
18192
18171
  }
@@ -18196,12 +18175,12 @@ function createChatDialogStore(options = {}) {
18196
18175
  const key = keyOf(dialogId, side);
18197
18176
  let reducer = reducers.get(key);
18198
18177
  if (!reducer) {
18199
- const base = _nullishCoalesce(_optionalChain([(_nullishCoalesce(createOptions, () => ( defaultCreateOptions))), 'optionalCall', _578 => _578(dialogId, side)]), () => ( {}));
18178
+ const base = _nullishCoalesce(_optionalChain([(_nullishCoalesce(createOptions, () => ( defaultCreateOptions))), 'optionalCall', _581 => _581(dialogId, side)]), () => ( {}));
18200
18179
  const userOnChange = base.onChange;
18201
18180
  reducer = createChatStreamReducer({
18202
18181
  ...base,
18203
18182
  onChange: () => {
18204
- _optionalChain([userOnChange, 'optionalCall', _579 => _579()]);
18183
+ _optionalChain([userOnChange, 'optionalCall', _582 => _582()]);
18205
18184
  notify();
18206
18185
  }
18207
18186
  });
@@ -18246,7 +18225,7 @@ function createChatDialogStore(options = {}) {
18246
18225
  };
18247
18226
  }
18248
18227
  function getSnapshot2(dialogId, side = DEFAULT_DIALOG_SIDE) {
18249
- return _nullishCoalesce(_optionalChain([reducers, 'access', _580 => _580.get, 'call', _581 => _581(keyOf(dialogId, side)), 'optionalAccess', _582 => _582.state]), () => ( EMPTY_STATE));
18228
+ return _nullishCoalesce(_optionalChain([reducers, 'access', _583 => _583.get, 'call', _584 => _584(keyOf(dialogId, side)), 'optionalAccess', _585 => _585.state]), () => ( EMPTY_STATE));
18250
18229
  }
18251
18230
  function getServerSnapshot2() {
18252
18231
  return EMPTY_STATE;
@@ -18335,7 +18314,7 @@ function createDeltaBatcher({
18335
18314
  pending = [];
18336
18315
  const key = pendingKey;
18337
18316
  for (const delta of batch) applyOne(delta, key);
18338
- _optionalChain([onFlushed, 'optionalCall', _583 => _583(batch.length)]);
18317
+ _optionalChain([onFlushed, 'optionalCall', _586 => _586(batch.length)]);
18339
18318
  }
18340
18319
  function schedule() {
18341
18320
  if (raf !== null || timer !== null) return;
@@ -18359,7 +18338,7 @@ function createDeltaBatcher({
18359
18338
  }
18360
18339
  if (!isDeltaEvent(event)) return false;
18361
18340
  const tail = pending[pending.length - 1];
18362
- const seqAdvances = _optionalChain([tail, 'optionalAccess', _584 => _584.seq]) == null ? event.seq == null : event.seq != null && event.seq > tail.seq;
18341
+ const seqAdvances = _optionalChain([tail, 'optionalAccess', _587 => _587.seq]) == null ? event.seq == null : event.seq != null && event.seq > tail.seq;
18363
18342
  if (tail && seqAdvances && tail.type === event.type && (tail.type !== "text-delta" || tail.leading === event.leading)) {
18364
18343
  pending[pending.length - 1] = {
18365
18344
  ...tail,
@@ -18391,7 +18370,7 @@ function useChatStreamReducer({
18391
18370
  side = DEFAULT_DIALOG_SIDE,
18392
18371
  createReducerOptions
18393
18372
  }) {
18394
- const reducer = store.getReducer(dialogId, side, () => _nullishCoalesce(_optionalChain([createReducerOptions, 'optionalCall', _585 => _585()]), () => ( {})));
18373
+ const reducer = store.getReducer(dialogId, side, () => _nullishCoalesce(_optionalChain([createReducerOptions, 'optionalCall', _588 => _588()]), () => ( {})));
18395
18374
  const getSnapshot2 = _react.useCallback.call(void 0, () => store.getSnapshot(dialogId, side), [store, dialogId, side]);
18396
18375
  const getServerSnapshot2 = _react.useCallback.call(void 0, () => store.getServerSnapshot(), [store]);
18397
18376
  const subscribe2 = _react.useCallback.call(void 0, (listener) => store.subscribe(listener), [store]);
@@ -18436,7 +18415,7 @@ function buildConfirmToolBody(request) {
18436
18415
  async function readServerErrorMessage(response) {
18437
18416
  try {
18438
18417
  const body = await response.json();
18439
- if (typeof _optionalChain([body, 'optionalAccess', _586 => _586.error]) === "string" && body.error.length > 0) return body.error;
18418
+ if (typeof _optionalChain([body, 'optionalAccess', _589 => _589.error]) === "string" && body.error.length > 0) return body.error;
18440
18419
  } catch (e17) {
18441
18420
  }
18442
18421
  return null;
@@ -18599,7 +18578,7 @@ function useManagedDialogList({
18599
18578
  try {
18600
18579
  await deleteDialogCallback(id);
18601
18580
  removeLocal(id);
18602
- _optionalChain([onDialogRemovedRef, 'access', _587 => _587.current, 'optionalCall', _588 => _588(id, "deleted")]);
18581
+ _optionalChain([onDialogRemovedRef, 'access', _590 => _590.current, 'optionalCall', _591 => _591(id, "deleted")]);
18603
18582
  } catch (err) {
18604
18583
  console.error(`${logTag} deleteDialog failed:`, err);
18605
18584
  throw err;
@@ -18610,7 +18589,7 @@ function useManagedDialogList({
18610
18589
  const renameDialog = _react.useCallback.call(void 0,
18611
18590
  async (id, title) => {
18612
18591
  if (!renameDialogCallback) return;
18613
- const previous = _optionalChain([dialogsRef, 'access', _589 => _589.current, 'access', _590 => _590.find, 'call', _591 => _591((d) => d.id === id), 'optionalAccess', _592 => _592.title]);
18592
+ const previous = _optionalChain([dialogsRef, 'access', _592 => _592.current, 'access', _593 => _593.find, 'call', _594 => _594((d) => d.id === id), 'optionalAccess', _595 => _595.title]);
18614
18593
  setDialogs((prev) => prev.map((d) => d.id === id ? { ...d, title } : d));
18615
18594
  try {
18616
18595
  await renameDialogCallback(id, title);
@@ -18629,7 +18608,7 @@ function useManagedDialogList({
18629
18608
  try {
18630
18609
  await archiveDialogCallback(id);
18631
18610
  removeLocal(id);
18632
- _optionalChain([onDialogRemovedRef, 'access', _593 => _593.current, 'optionalCall', _594 => _594(id, "archived")]);
18611
+ _optionalChain([onDialogRemovedRef, 'access', _596 => _596.current, 'optionalCall', _597 => _597(id, "archived")]);
18633
18612
  } catch (err) {
18634
18613
  console.error(`${logTag} archiveDialog failed:`, err);
18635
18614
  throw err;
@@ -18818,7 +18797,7 @@ var STORAGE_KEY = "conversation";
18818
18797
  var namespaceFor = (source) => {
18819
18798
  const base = `mingo-chat-${source}`;
18820
18799
  const auth = _chunkGI3MMBP3cjs.getEmbedProxyAuth.call(void 0, );
18821
- return _optionalChain([auth, 'optionalAccess', _595 => _595.email]) ? `${base}-u-${encodeURIComponent(auth.email.toLowerCase())}` : base;
18800
+ return _optionalChain([auth, 'optionalAccess', _598 => _598.email]) ? `${base}-u-${encodeURIComponent(auth.email.toLowerCase())}` : base;
18822
18801
  };
18823
18802
  function createChatConversationStorage(source) {
18824
18803
  return _chunkGI3MMBP3cjs.createLocalStorageAdapter.call(void 0, {
@@ -18891,7 +18870,7 @@ function useChatHistoryHydration({
18891
18870
  if (cancelled) return;
18892
18871
  if (rows.length === 0) {
18893
18872
  const found = isRecord(body) ? body.found : void 0;
18894
- if (found === false) _optionalChain([onOrphanedConversation, 'optionalCall', _596 => _596(conversationId)]);
18873
+ if (found === false) _optionalChain([onOrphanedConversation, 'optionalCall', _599 => _599(conversationId)]);
18895
18874
  return;
18896
18875
  }
18897
18876
  const hydrated = [];
@@ -18968,7 +18947,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
18968
18947
  const { active = true } = runtimeOptions;
18969
18948
  const runtime = _chunkUJ7AXHRZcjs.useRequiredChatRuntime.call(void 0, );
18970
18949
  const source = runtime.source || DEFAULT_CHAT_SOURCE;
18971
- const tableIdForDocumentType = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _597 => _597.tableIdForDocumentType]), () => ( defaultTableIdForDocumentType));
18950
+ const tableIdForDocumentType = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _600 => _600.tableIdForDocumentType]), () => ( defaultTableIdForDocumentType));
18972
18951
  const sendMessageRef = _react.useRef.call(void 0,
18973
18952
  () => Promise.resolve(true)
18974
18953
  );
@@ -19004,7 +18983,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19004
18983
  if (!restoredConversationRef.current) {
19005
18984
  restoredConversationRef.current = true;
19006
18985
  pruneStaleChatConversationStorage(source);
19007
- conversationIdRef.current = _nullishCoalesce(_optionalChain([conversationStorage, 'access', _598 => _598.load, 'call', _599 => _599(), 'optionalAccess', _600 => _600.conversationId]), () => ( null));
18986
+ conversationIdRef.current = _nullishCoalesce(_optionalChain([conversationStorage, 'access', _601 => _601.load, 'call', _602 => _602(), 'optionalAccess', _603 => _603.conversationId]), () => ( null));
19008
18987
  }
19009
18988
  const [conversationId, setConversationId] = _react.useState.call(void 0, () => conversationIdRef.current);
19010
18989
  const commitConversationId = _react.useCallback.call(void 0,
@@ -19095,7 +19074,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19095
19074
  const abortControllerRef = _react.useRef.call(void 0, null);
19096
19075
  const switchConversation = _react.useCallback.call(void 0,
19097
19076
  (id) => {
19098
- _optionalChain([abortControllerRef, 'access', _601 => _601.current, 'optionalAccess', _602 => _602.abort, 'call', _603 => _603()]);
19077
+ _optionalChain([abortControllerRef, 'access', _604 => _604.current, 'optionalAccess', _605 => _605.abort, 'call', _606 => _606()]);
19099
19078
  flushDeltas();
19100
19079
  mutate((r) => r.reset());
19101
19080
  hydrationSendCountRef.current = 0;
@@ -19132,8 +19111,8 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19132
19111
  } = useManagedDialogList({
19133
19112
  autoLoad: active,
19134
19113
  fetchDialogs: fetchActiveDialogs,
19135
- renameDialog: _optionalChain([conversationsApi, 'optionalAccess', _604 => _604.renameDialog]),
19136
- archiveDialog: _optionalChain([conversationsApi, 'optionalAccess', _605 => _605.archiveDialog]),
19114
+ renameDialog: _optionalChain([conversationsApi, 'optionalAccess', _607 => _607.renameDialog]),
19115
+ archiveDialog: _optionalChain([conversationsApi, 'optionalAccess', _608 => _608.archiveDialog]),
19137
19116
  pageSize: CHAT_HISTORY_PAGE_SIZE,
19138
19117
  search: conversationsApi ? dialogSearch : void 0,
19139
19118
  logTag: "[useSseChatAdapter]",
@@ -19167,7 +19146,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19167
19146
  const sendMessage = _react.useCallback.call(void 0,
19168
19147
  // Resolves `true` on a clean turn, `false` when the request failed
19169
19148
  // (surfaced to batch approve-all loops via the card callbacks).
19170
- async (text2, sendOptions) => {
19149
+ async (text3, sendOptions) => {
19171
19150
  const { hidden, attachments, commandOverride, approvalAction } = _nullishCoalesce(sendOptions, () => ( {}));
19172
19151
  const echoedConversationId = conversationIdRef.current;
19173
19152
  const targetPath = approvalAction ? endpointsRef.current.approvalToolUrl : endpointsRef.current.chatStreamUrl;
@@ -19178,12 +19157,12 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19178
19157
  // established conversation (the proposal turn captured the id).
19179
19158
  buildConfirmToolBody({ ...approvalAction, conversationId: echoedConversationId })
19180
19159
  ) : {
19181
- messages: [{ role: "user", content: text2 }],
19160
+ messages: [{ role: "user", content: text3 }],
19182
19161
  ...commandOverride ? { commandOverride } : {},
19183
19162
  ...attachments && attachments.length > 0 ? { pendingAttachments: attachments } : {},
19184
19163
  ...echoedConversationId ? { conversationId: echoedConversationId } : {}
19185
19164
  };
19186
- mutate((r) => r.beginSseSend({ text: text2, hidden, userName: "You", assistantName: "Mingo AI" }));
19165
+ mutate((r) => r.beginSseSend({ text: text3, hidden, userName: "You", assistantName: "Mingo AI" }));
19187
19166
  const ctrl = new AbortController();
19188
19167
  abortControllerRef.current = ctrl;
19189
19168
  let mintedThisTurn = false;
@@ -19197,7 +19176,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19197
19176
  const serverMessage = await readServerErrorMessage(response);
19198
19177
  throw new Error(_nullishCoalesce(serverMessage, () => ( `Chat request failed: ${response.status}`)));
19199
19178
  }
19200
- const reader = _optionalChain([response, 'access', _606 => _606.body, 'optionalAccess', _607 => _607.getReader, 'call', _608 => _608()]);
19179
+ const reader = _optionalChain([response, 'access', _609 => _609.body, 'optionalAccess', _610 => _610.getReader, 'call', _611 => _611()]);
19201
19180
  if (!reader) throw new Error("No response body");
19202
19181
  const frameDecoder = createSseFrameDecoder();
19203
19182
  let finished = false;
@@ -19226,7 +19205,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19226
19205
  }
19227
19206
  return true;
19228
19207
  } catch (err) {
19229
- if (_optionalChain([err, 'optionalAccess', _609 => _609.name]) === "AbortError" || ctrl.signal.aborted) {
19208
+ if (_optionalChain([err, 'optionalAccess', _612 => _612.name]) === "AbortError" || ctrl.signal.aborted) {
19230
19209
  return true;
19231
19210
  }
19232
19211
  flushDeltas();
@@ -19262,7 +19241,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19262
19241
  );
19263
19242
  sendMessageRef.current = sendMessage;
19264
19243
  const stopMessage = _react.useCallback.call(void 0, () => {
19265
- _optionalChain([abortControllerRef, 'access', _610 => _610.current, 'optionalAccess', _611 => _611.abort, 'call', _612 => _612()]);
19244
+ _optionalChain([abortControllerRef, 'access', _613 => _613.current, 'optionalAccess', _614 => _614.abort, 'call', _615 => _615()]);
19266
19245
  flushDeltas();
19267
19246
  mutate((r) => r.setPhase("idle"));
19268
19247
  }, [mutate, flushDeltas]);
@@ -19298,7 +19277,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19298
19277
  let sendIdx = -1;
19299
19278
  return state.messages.map((m) => {
19300
19279
  const segments = m.segments;
19301
- const content = typeof m.content === "string" && !segments ? m.content : _nullishCoalesce(_optionalChain([segments, 'optionalAccess', _613 => _613.filter, 'call', _614 => _614((s) => s.type === "text"), 'access', _615 => _615.map, 'call', _616 => _616((s) => s.text), 'access', _617 => _617.join, 'call', _618 => _618("")]), () => ( ""));
19280
+ const content = typeof m.content === "string" && !segments ? m.content : _nullishCoalesce(_optionalChain([segments, 'optionalAccess', _616 => _616.filter, 'call', _617 => _617((s) => s.type === "text"), 'access', _618 => _618.map, 'call', _619 => _619((s) => s.text), 'access', _620 => _620.join, 'call', _621 => _621("")]), () => ( ""));
19302
19281
  let sources2;
19303
19282
  let scrollAnchor;
19304
19283
  if (m.role === "user" && !m.hidden) {
@@ -19307,7 +19286,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19307
19286
  if (m.role === "assistant") {
19308
19287
  const lookupIdx = sendIdx >= 0 ? sendIdx : 0;
19309
19288
  sources2 = sourcesMap.get(lookupIdx);
19310
- scrollAnchor = _nullishCoalesce(_optionalChain([meta, 'access', _619 => _619.get, 'call', _620 => _620(lookupIdx), 'optionalAccess', _621 => _621.scrollAnchor]), () => ( void 0));
19289
+ scrollAnchor = _nullishCoalesce(_optionalChain([meta, 'access', _622 => _622.get, 'call', _623 => _623(lookupIdx), 'optionalAccess', _624 => _624.scrollAnchor]), () => ( void 0));
19311
19290
  }
19312
19291
  return {
19313
19292
  id: m.id,
@@ -19334,11 +19313,11 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19334
19313
  );
19335
19314
  return;
19336
19315
  }
19337
- const refSlug = typeof _optionalChain([reference, 'access', _622 => _622.metadata, 'optionalAccess', _623 => _623.slug]) === "string" && reference.metadata.slug.length > 0 ? reference.metadata.slug : "";
19316
+ const refSlug = typeof _optionalChain([reference, 'access', _625 => _625.metadata, 'optionalAccess', _626 => _626.slug]) === "string" && reference.metadata.slug.length > 0 ? reference.metadata.slug : "";
19338
19317
  const queryValue = refSlug || sanitizeTitleForChat(reference.title) || reference.id;
19339
19318
  const escaped = queryValue.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
19340
- const text2 = `/${cmdId} display "${escaped}"`;
19341
- void sendMessage(text2);
19319
+ const text3 = `/${cmdId} display "${escaped}"`;
19320
+ void sendMessage(text3);
19342
19321
  },
19343
19322
  [sendMessage, source, cmdIdByTableId, tableIdForDocumentType]
19344
19323
  );
@@ -19380,18 +19359,18 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
19380
19359
  /** True while the mount-time rebuild from the server transcript runs. */
19381
19360
  isHydratingHistory,
19382
19361
  /** Provider key for the lib's `<ModelDisplay>` icon. */
19383
- currentProvider: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _624 => _624.provider]), () => ( null)),
19384
- currentModelLabel: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _625 => _625.modelLabel]), () => ( null)),
19385
- currentContextWindowMaxTokens: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _626 => _626.contextWindowMaxTokens]), () => ( null)),
19362
+ currentProvider: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _627 => _627.provider]), () => ( null)),
19363
+ currentModelLabel: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _628 => _628.modelLabel]), () => ( null)),
19364
+ currentContextWindowMaxTokens: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _629 => _629.contextWindowMaxTokens]), () => ( null)),
19386
19365
  /** Input tokens (known after server's message_start frame; null until). */
19387
- currentInputTokens: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _627 => _627.inputTokens]), () => ( null)),
19366
+ currentInputTokens: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _630 => _630.inputTokens]), () => ( null)),
19388
19367
  /** Output tokens (known only after server's trailing usage frame). */
19389
- currentOutputTokens: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _628 => _628.outputTokens]), () => ( null)),
19368
+ currentOutputTokens: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _631 => _631.outputTokens]), () => ( null)),
19390
19369
  /** Cache hit % (read / total-input × 100). null during streaming. */
19391
- currentCacheHitRatePct: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _629 => _629.cacheHitRatePct]), () => ( null)),
19370
+ currentCacheHitRatePct: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _632 => _632.cacheHitRatePct]), () => ( null)),
19392
19371
  /** Cross-call usage breakdown (Haiku rewriter/classifier/summarizer
19393
19372
  * token counts). null until the trailing usage frame lands. */
19394
- currentUsageBreakdown: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _630 => _630.breakdown]), () => ( null)),
19373
+ currentUsageBreakdown: _nullishCoalesce(_optionalChain([latestMeta, 'optionalAccess', _633 => _633.breakdown]), () => ( null)),
19395
19374
  // ─── Dialog management ───────────────────────────────────────────────
19396
19375
  // With `chatConversationsUrl` the server transcript store IS the dialog
19397
19376
  // list (shared `useManagedDialogList`); selecting a row re-hydrates through
@@ -19445,6 +19424,7 @@ function extractIncompleteMessageState(lastMessage) {
19445
19424
  toolFunction: segment.data.toolFunction,
19446
19425
  toolTitle: segment.data.toolTitle,
19447
19426
  toolExplanation: segment.data.toolExplanation,
19427
+ ...keptPolicyReview(segment.data.policyReview),
19448
19428
  parameters: segment.data.parameters
19449
19429
  });
19450
19430
  hasIncompleteState = true;
@@ -19465,7 +19445,7 @@ function extractIncompleteMessageState(lastMessage) {
19465
19445
  }
19466
19446
  break;
19467
19447
  case "approval_batch": {
19468
- const allDone = !!segment.data.executions && segment.data.toolCalls.every((c) => _optionalChain([segment, 'access', _631 => _631.data, 'access', _632 => _632.executions, 'optionalAccess', _633 => _633[c.toolExecutionRequestId], 'optionalAccess', _634 => _634.status]) === "done");
19448
+ const allDone = !!segment.data.executions && segment.data.toolCalls.every((c) => _optionalChain([segment, 'access', _634 => _634.data, 'access', _635 => _635.executions, 'optionalAccess', _636 => _636[c.toolExecutionRequestId], 'optionalAccess', _637 => _637.status]) === "done");
19469
19449
  if (segment.status !== "rejected" && !allDone) {
19470
19450
  hasIncompleteState = true;
19471
19451
  }
@@ -19529,11 +19509,11 @@ function extractIncompleteMessageState(lastMessage) {
19529
19509
  function extractIncompleteTailState(messages) {
19530
19510
  if (!messages || messages.length === 0) return void 0;
19531
19511
  let start = messages.length;
19532
- while (start > 0 && _optionalChain([messages, 'access', _635 => _635[start - 1], 'optionalAccess', _636 => _636.role]) === "assistant") start -= 1;
19512
+ while (start > 0 && _optionalChain([messages, 'access', _638 => _638[start - 1], 'optionalAccess', _639 => _639.role]) === "assistant") start -= 1;
19533
19513
  if (start === messages.length) return void 0;
19534
19514
  const segments = [];
19535
19515
  for (let i = start; i < messages.length; i += 1) {
19536
- const content = _optionalChain([messages, 'access', _637 => _637[i], 'optionalAccess', _638 => _638.content]);
19516
+ const content = _optionalChain([messages, 'access', _640 => _640[i], 'optionalAccess', _641 => _641.content]);
19537
19517
  if (Array.isArray(content)) segments.push(...content);
19538
19518
  }
19539
19519
  if (segments.length === 0) return void 0;
@@ -19545,16 +19525,20 @@ function extractIncompleteTailState(messages) {
19545
19525
  }
19546
19526
 
19547
19527
  // src/components/chat/utils/process-historical-messages.ts
19528
+ function withNormalizedReview(call) {
19529
+ const { policyReview: raw2, ...rest } = call;
19530
+ return { ...rest, ...policyReviewField(raw2) };
19531
+ }
19548
19532
  function getOwnerDisplayName(owner) {
19549
- if (_optionalChain([owner, 'optionalAccess', _639 => _639.type]) === _chunk3W4ASAXNcjs.OWNER_TYPE.ADMIN && owner.user) {
19533
+ if (_optionalChain([owner, 'optionalAccess', _642 => _642.type]) === _chunkWYROOMUZcjs.OWNER_TYPE.ADMIN && owner.user) {
19550
19534
  const { firstName, lastName } = owner.user;
19551
19535
  const name = [firstName, lastName].filter(Boolean).join(" ");
19552
19536
  if (name) return name;
19553
19537
  }
19554
- return _optionalChain([owner, 'optionalAccess', _640 => _640.type]) === _chunk3W4ASAXNcjs.OWNER_TYPE.ADMIN ? "Admin" : "You";
19538
+ return _optionalChain([owner, 'optionalAccess', _643 => _643.type]) === _chunkWYROOMUZcjs.OWNER_TYPE.ADMIN ? "Admin" : "You";
19555
19539
  }
19556
19540
  function getOwnerAvatar(owner) {
19557
- return _nullishCoalesce(_optionalChain([owner, 'optionalAccess', _641 => _641.user, 'optionalAccess', _642 => _642.image, 'optionalAccess', _643 => _643.imageUrl]), () => ( void 0));
19541
+ return _nullishCoalesce(_optionalChain([owner, 'optionalAccess', _644 => _644.user, 'optionalAccess', _645 => _645.image, 'optionalAccess', _646 => _646.imageUrl]), () => ( void 0));
19558
19542
  }
19559
19543
  function pushStandaloneMessages(processedMessages, msg, messageDataArray) {
19560
19544
  messageDataArray.forEach((data) => {
@@ -19619,6 +19603,7 @@ function decodeHistoricalMessageData(data) {
19619
19603
  // EXECUTING chunk only, so a history replay that drops it renders
19620
19604
  // an empty tool card even though the live stream showed one.
19621
19605
  toolExplanation: typeof data.toolExplanation === "string" ? data.toolExplanation : void 0,
19606
+ ...policyReviewField(data.policyReview),
19622
19607
  parameters: data.parameters,
19623
19608
  toolExecutionRequestId: data.toolExecutionRequestId
19624
19609
  }
@@ -19650,7 +19635,7 @@ function decodeHistoricalMessageData(data) {
19650
19635
  approvalType: data.approvalType || "CLIENT",
19651
19636
  command: data.command || "",
19652
19637
  explanation: data.explanation,
19653
- ...Array.isArray(data.toolCalls) ? { toolCalls: data.toolCalls } : {}
19638
+ ...Array.isArray(data.toolCalls) ? { toolCalls: data.toolCalls.map(withNormalizedReview) } : {}
19654
19639
  };
19655
19640
  }
19656
19641
  return null;
@@ -19746,7 +19731,7 @@ function applyHistoryEvent(event, accumulator, approvalStatuses, options, escala
19746
19731
  event.offerId,
19747
19732
  event.text,
19748
19733
  event.origin,
19749
- _nullishCoalesce(_optionalChain([escalationOfferStates, 'optionalAccess', _644 => _644[event.offerId]]), () => ( "pending"))
19734
+ _nullishCoalesce(_optionalChain([escalationOfferStates, 'optionalAccess', _647 => _647[event.offerId]]), () => ( "pending"))
19750
19735
  );
19751
19736
  break;
19752
19737
  case "ticket-escalated":
@@ -19780,7 +19765,7 @@ function applyHistoryEvent(event, accumulator, approvalStatuses, options, escala
19780
19765
  );
19781
19766
  break;
19782
19767
  case "escalation-offer-resolved":
19783
- _optionalChain([offerResolutions, 'optionalAccess', _645 => _645.set, 'call', _646 => _646(event.offerId, {
19768
+ _optionalChain([offerResolutions, 'optionalAccess', _648 => _648.set, 'call', _649 => _649(event.offerId, {
19784
19769
  status: event.status,
19785
19770
  resolvedByName: event.resolvedByName
19786
19771
  })]);
@@ -19814,7 +19799,7 @@ function applyHistoryEvent(event, accumulator, approvalStatuses, options, escala
19814
19799
  if (!call.requiresApproval) continue;
19815
19800
  accumulator.addApprovalRequest(
19816
19801
  event.requestId,
19817
- _chunk4YBS4HIOcjs.getCommandText.call(void 0, call),
19802
+ _chunkLM7EL3UQcjs.getCommandText.call(void 0, call),
19818
19803
  call.toolExplanation,
19819
19804
  approvalType,
19820
19805
  status,
@@ -19844,7 +19829,7 @@ function applyHistoryEvent(event, accumulator, approvalStatuses, options, escala
19844
19829
  }
19845
19830
  }
19846
19831
  } else {
19847
- _optionalChain([escalatedApprovals, 'optionalAccess', _647 => _647.set, 'call', _648 => _648(event.requestId, {
19832
+ _optionalChain([escalatedApprovals, 'optionalAccess', _650 => _650.set, 'call', _651 => _651(event.requestId, {
19848
19833
  command: event.command || "",
19849
19834
  explanation: event.explanation,
19850
19835
  approvalType,
@@ -19859,8 +19844,8 @@ function applyHistoryEvent(event, accumulator, approvalStatuses, options, escala
19859
19844
  const existingStatus = approvalStatuses[requestId];
19860
19845
  const status = existingStatus || event.status;
19861
19846
  const resolvedByName = event.resolvedByName;
19862
- const escalatedData = _optionalChain([escalatedApprovals, 'optionalAccess', _649 => _649.get, 'call', _650 => _650(requestId)]);
19863
- if (_optionalChain([escalatedData, 'optionalAccess', _651 => _651.toolCalls]) && escalatedData.toolCalls.length > 0) {
19847
+ const escalatedData = _optionalChain([escalatedApprovals, 'optionalAccess', _652 => _652.get, 'call', _653 => _653(requestId)]);
19848
+ if (_optionalChain([escalatedData, 'optionalAccess', _654 => _654.toolCalls]) && escalatedData.toolCalls.length > 0) {
19864
19849
  if (batchApprovalsEnabled) {
19865
19850
  accumulator.addApprovalBatch(
19866
19851
  requestId,
@@ -19875,14 +19860,14 @@ function applyHistoryEvent(event, accumulator, approvalStatuses, options, escala
19875
19860
  if (!call.requiresApproval) continue;
19876
19861
  accumulator.addApprovalRequest(
19877
19862
  requestId,
19878
- _chunk4YBS4HIOcjs.getCommandText.call(void 0, call),
19863
+ _chunkLM7EL3UQcjs.getCommandText.call(void 0, call),
19879
19864
  call.toolExplanation,
19880
19865
  escalatedData.approvalType,
19881
19866
  status
19882
19867
  );
19883
19868
  }
19884
19869
  }
19885
- _optionalChain([escalatedApprovals, 'optionalAccess', _652 => _652.delete, 'call', _653 => _653(requestId)]);
19870
+ _optionalChain([escalatedApprovals, 'optionalAccess', _655 => _655.delete, 'call', _656 => _656(requestId)]);
19886
19871
  break;
19887
19872
  }
19888
19873
  if (escalatedData) {
@@ -19891,7 +19876,7 @@ function applyHistoryEvent(event, accumulator, approvalStatuses, options, escala
19891
19876
  explanation: escalatedData.explanation,
19892
19877
  approvalType: escalatedData.approvalType
19893
19878
  });
19894
- _optionalChain([escalatedApprovals, 'optionalAccess', _654 => _654.delete, 'call', _655 => _655(requestId)]);
19879
+ _optionalChain([escalatedApprovals, 'optionalAccess', _657 => _657.delete, 'call', _658 => _658(requestId)]);
19895
19880
  }
19896
19881
  const before = accumulator.getSegments();
19897
19882
  const after = accumulator.updateApprovalStatus(requestId, status, resolvedByName);
@@ -19983,14 +19968,14 @@ function processHistoricalMessages(messages, options = {}) {
19983
19968
  pushStandaloneMessages(processedMessages, msg, messageDataArray);
19984
19969
  return;
19985
19970
  }
19986
- const isUserMessage = _optionalChain([msg, 'access', _656 => _656.owner, 'optionalAccess', _657 => _657.type]) === _chunk3W4ASAXNcjs.OWNER_TYPE.CLIENT || _optionalChain([msg, 'access', _658 => _658.owner, 'optionalAccess', _659 => _659.type]) === _chunk3W4ASAXNcjs.OWNER_TYPE.ADMIN;
19971
+ const isUserMessage = _optionalChain([msg, 'access', _659 => _659.owner, 'optionalAccess', _660 => _660.type]) === _chunkWYROOMUZcjs.OWNER_TYPE.CLIENT || _optionalChain([msg, 'access', _661 => _661.owner, 'optionalAccess', _662 => _662.type]) === _chunkWYROOMUZcjs.OWNER_TYPE.ADMIN;
19987
19972
  if (isUserMessage) {
19988
19973
  flushAssistantMessage();
19989
- const userAuthorType = _optionalChain([msg, 'access', _660 => _660.owner, 'optionalAccess', _661 => _661.type]) === _chunk3W4ASAXNcjs.OWNER_TYPE.ADMIN ? "admin" : "user";
19974
+ const userAuthorType = _optionalChain([msg, 'access', _663 => _663.owner, 'optionalAccess', _664 => _664.type]) === _chunkWYROOMUZcjs.OWNER_TYPE.ADMIN ? "admin" : "user";
19990
19975
  messageDataArray.forEach((data) => {
19991
19976
  if (data.type === MESSAGE_TYPE.TEXT && "text" in data && data.text) {
19992
19977
  const rawContext = data.contextItems;
19993
- const contextItems = Array.isArray(rawContext) ? rawContext.filter((c) => typeof _optionalChain([c, 'optionalAccess', _662 => _662.type]) === "string" && typeof _optionalChain([c, 'optionalAccess', _663 => _663.id]) === "string").map((c) => ({ type: c.type, id: c.id, label: c.id })) : void 0;
19978
+ const contextItems = Array.isArray(rawContext) ? rawContext.filter((c) => typeof _optionalChain([c, 'optionalAccess', _665 => _665.type]) === "string" && typeof _optionalChain([c, 'optionalAccess', _666 => _666.id]) === "string").map((c) => ({ type: c.type, id: c.id, label: c.id })) : void 0;
19994
19979
  processedMessages.push({
19995
19980
  id: msg.id,
19996
19981
  role: "user",
@@ -20037,7 +20022,7 @@ function processHistoricalMessages(messages, options = {}) {
20037
20022
  });
20038
20023
  const nextMsg = messages[index + 1];
20039
20024
  const isLastMessage = index === messages.length - 1;
20040
- const nextIsFromUser = nextMsg && (_optionalChain([nextMsg, 'access', _664 => _664.owner, 'optionalAccess', _665 => _665.type]) === _chunk3W4ASAXNcjs.OWNER_TYPE.CLIENT || _optionalChain([nextMsg, 'access', _666 => _666.owner, 'optionalAccess', _667 => _667.type]) === _chunk3W4ASAXNcjs.OWNER_TYPE.ADMIN);
20025
+ const nextIsFromUser = nextMsg && (_optionalChain([nextMsg, 'access', _667 => _667.owner, 'optionalAccess', _668 => _668.type]) === _chunkWYROOMUZcjs.OWNER_TYPE.CLIENT || _optionalChain([nextMsg, 'access', _669 => _669.owner, 'optionalAccess', _670 => _670.type]) === _chunkWYROOMUZcjs.OWNER_TYPE.ADMIN);
20041
20026
  if (isLastMessage || nextIsFromUser) {
20042
20027
  flushAssistantMessage();
20043
20028
  }
@@ -20420,10 +20405,10 @@ function useNatsChatAdapter(config, options = {}) {
20420
20405
  });
20421
20406
  const connectionState = !active || !dialogId ? "connected" : connectedForDialog === dialogId ? "connected" : "connecting";
20422
20407
  const sendMessage = _react.useCallback.call(void 0,
20423
- async (text2, sendOptions) => {
20424
- const hidden = _nullishCoalesce(_optionalChain([sendOptions, 'optionalAccess', _668 => _668.hidden]), () => ( false));
20425
- mutate((r) => r.pushOptimisticSend(text2, hidden));
20426
- await publishUserMessage(text2, { hidden, dialogId });
20408
+ async (text3, sendOptions) => {
20409
+ const hidden = _nullishCoalesce(_optionalChain([sendOptions, 'optionalAccess', _671 => _671.hidden]), () => ( false));
20410
+ mutate((r) => r.pushOptimisticSend(text3, hidden));
20411
+ await publishUserMessage(text3, { hidden, dialogId });
20427
20412
  },
20428
20413
  [mutate, publishUserMessage, dialogId]
20429
20414
  );
@@ -20514,11 +20499,11 @@ function useNatsChatAdapter(config, options = {}) {
20514
20499
  // Tokens: live `token_usage` frame / dialog snapshot (`dialogTokenUsage`).
20515
20500
  // contextWindow uses the dialog's `contextSize` (the "X / Y" denominator,
20516
20501
  // matching the /mingo page). cacheHitRate/breakdown are SSE-only → null.
20517
- currentProvider: _nullishCoalesce(_nullishCoalesce(_optionalChain([liveModel, 'optionalAccess', _669 => _669.provider]), () => ( modelProvider)), () => ( null)),
20518
- currentModelLabel: _nullishCoalesce(_nullishCoalesce(_optionalChain([liveModel, 'optionalAccess', _670 => _670.modelLabel]), () => ( modelLabel)), () => ( null)),
20519
- currentContextWindowMaxTokens: _nullishCoalesce(_nullishCoalesce(_optionalChain([dialogTokenUsage, 'optionalAccess', _671 => _671.contextSize]), () => ( _optionalChain([liveModel, 'optionalAccess', _672 => _672.contextWindowMaxTokens]))), () => ( null)),
20520
- currentInputTokens: _nullishCoalesce(_optionalChain([dialogTokenUsage, 'optionalAccess', _673 => _673.inputTokensSize]), () => ( null)),
20521
- currentOutputTokens: _nullishCoalesce(_optionalChain([dialogTokenUsage, 'optionalAccess', _674 => _674.outputTokensSize]), () => ( null)),
20502
+ currentProvider: _nullishCoalesce(_nullishCoalesce(_optionalChain([liveModel, 'optionalAccess', _672 => _672.provider]), () => ( modelProvider)), () => ( null)),
20503
+ currentModelLabel: _nullishCoalesce(_nullishCoalesce(_optionalChain([liveModel, 'optionalAccess', _673 => _673.modelLabel]), () => ( modelLabel)), () => ( null)),
20504
+ currentContextWindowMaxTokens: _nullishCoalesce(_nullishCoalesce(_optionalChain([dialogTokenUsage, 'optionalAccess', _674 => _674.contextSize]), () => ( _optionalChain([liveModel, 'optionalAccess', _675 => _675.contextWindowMaxTokens]))), () => ( null)),
20505
+ currentInputTokens: _nullishCoalesce(_optionalChain([dialogTokenUsage, 'optionalAccess', _676 => _676.inputTokensSize]), () => ( null)),
20506
+ currentOutputTokens: _nullishCoalesce(_optionalChain([dialogTokenUsage, 'optionalAccess', _677 => _677.outputTokensSize]), () => ( null)),
20522
20507
  currentCacheHitRatePct: null,
20523
20508
  currentUsageBreakdown: null,
20524
20509
  // Dialog management
@@ -20632,7 +20617,7 @@ function useUnifiedChat(options) {
20632
20617
  const stopMessage = _react.useCallback.call(void 0, () => activeStateRef.current.stopMessage(), []);
20633
20618
  const clearMessages = _react.useCallback.call(void 0, () => activeStateRef.current.clearMessages(), []);
20634
20619
  const sendMessage = _react.useCallback.call(void 0,
20635
- (text2, opts) => activeStateRef.current.sendMessage(text2, opts),
20620
+ (text3, opts) => activeStateRef.current.sendMessage(text3, opts),
20636
20621
  []
20637
20622
  );
20638
20623
  const discussRef = _react.useCallback.call(void 0,
@@ -20640,7 +20625,7 @@ function useUnifiedChat(options) {
20640
20625
  []
20641
20626
  );
20642
20627
  const displayRefForward = _react.useCallback.call(void 0,
20643
- (ref) => _optionalChain([activeStateRef, 'access', _675 => _675.current, 'access', _676 => _676.displayRef, 'optionalCall', _677 => _677(ref)]),
20628
+ (ref) => _optionalChain([activeStateRef, 'access', _678 => _678.current, 'access', _679 => _679.displayRef, 'optionalCall', _680 => _680(ref)]),
20644
20629
  []
20645
20630
  );
20646
20631
  const displayRef = activeState.displayRef ? displayRefForward : void 0;
@@ -20650,7 +20635,7 @@ function useUnifiedChat(options) {
20650
20635
  const renameDialog = _react.useCallback.call(void 0, (id, title) => activeStateRef.current.renameDialog(id, title), []);
20651
20636
  const archiveDialog = _react.useCallback.call(void 0, (id) => activeStateRef.current.archiveDialog(id), []);
20652
20637
  const loadMoreDialogs = _react.useCallback.call(void 0, () => activeStateRef.current.loadMoreDialogs(), []);
20653
- const setDialogScope = _react.useCallback.call(void 0, (scope) => _optionalChain([activeStateRef, 'access', _678 => _678.current, 'access', _679 => _679.setDialogScope, 'optionalCall', _680 => _680(scope)]), []);
20638
+ const setDialogScope = _react.useCallback.call(void 0, (scope) => _optionalChain([activeStateRef, 'access', _681 => _681.current, 'access', _682 => _682.setDialogScope, 'optionalCall', _683 => _683(scope)]), []);
20654
20639
  const reloadDialogs = _react.useCallback.call(void 0, () => activeStateRef.current.reloadDialogs(), []);
20655
20640
  const loadMoreMessages = _react.useCallback.call(void 0, () => activeStateRef.current.loadMoreMessages(), []);
20656
20641
  const approveRequest = _react.useCallback.call(void 0, (requestId) => activeStateRef.current.approveRequest(requestId), []);
@@ -20803,7 +20788,7 @@ function PanelResizeHandle({
20803
20788
  const handlePointerMove = (e) => {
20804
20789
  const start = startRef.current;
20805
20790
  if (!start) return;
20806
- if (!onDrag && !_optionalChain([panelRef, 'optionalAccess', _681 => _681.current])) return;
20791
+ if (!onDrag && !_optionalChain([panelRef, 'optionalAccess', _684 => _684.current])) return;
20807
20792
  const delta = isHorizontal ? e.clientX - start.x : e.clientY - start.y;
20808
20793
  const next = clampSize(start.size + delta * direction);
20809
20794
  dragSizeRef.current = next;
@@ -21179,6 +21164,4 @@ function PanelResizeHandle({
21179
21164
 
21180
21165
 
21181
21166
 
21182
-
21183
-
21184
- exports.PanelResizeGrip = PanelResizeGrip; exports.PanelResizeHandle = PanelResizeHandle; exports.Tabs = Tabs; exports.TabsList = TabsList; exports.TabsTrigger = TabsTrigger; exports.TabsContent = TabsContent; exports.TextHold = TextHold; exports.LayoutHold = LayoutHold; exports.AUTHORED_LINK_REL_TOKENS = AUTHORED_LINK_REL_TOKENS; exports.authoredRelTokens = authoredRelTokens; exports.isNofollowRel = isNofollowRel; exports.renderedLinkRel = renderedLinkRel; exports.findMarkdownLinkAt = findMarkdownLinkAt; exports.formatMarkdownLink = formatMarkdownLink; exports.stripInlineMarkdown = stripInlineMarkdown; exports.markdownToPlainText = markdownToPlainText; exports.buildHeadingIdMap = buildHeadingIdMap; exports.useHeadingIdMap = useHeadingIdMap; exports.extractText = extractText; exports.useIsHydrated = useIsHydrated; exports.MermaidDiagram = MermaidDiagram; exports.MARKDOWN_H1_CLASS = MARKDOWN_H1_CLASS; exports.MARKDOWN_H2_CLASS = MARKDOWN_H2_CLASS; exports.MARKDOWN_PARAGRAPH_CLASS = MARKDOWN_PARAGRAPH_CLASS; exports.hasRenderableSrc = hasRenderableSrc; exports.buildStandardLeafRenderers = buildStandardLeafRenderers; exports.SAFE_HTML_TAGS = SAFE_HTML_TAGS; exports.SVG_TAGS = SVG_TAGS; exports.buildEffectiveTagSet = buildEffectiveTagSet; exports.buildSanitizeSchema = buildSanitizeSchema; exports.rehypeStripUnsafe = rehypeStripUnsafe; exports.escapeUnknownHtmlTags = escapeUnknownHtmlTags; exports.cardAwareUrlTransform = cardAwareUrlTransform; exports.splitStreamingBlocks = splitStreamingBlocks; exports.completeStreamingTail = completeStreamingTail; exports.TEXT_SIZE_PRESETS = TEXT_SIZE_PRESETS; exports.resolveTextSizeConfig = resolveTextSizeConfig; exports.NO_BROKEN_LINKS = NO_BROKEN_LINKS; exports.MARKDOWN_SKELETON_LINES = MARKDOWN_SKELETON_LINES; exports.MarkdownEngine = MarkdownEngine; exports.MarkdownEngineSkeleton = MarkdownEngineSkeleton; exports.SimpleMarkdownRenderer = SimpleMarkdownRenderer; exports.ASK_AI_OPEN_EVENT = ASK_AI_OPEN_EVENT; exports.ASK_AI_OPEN_WITH_REF_EVENT = ASK_AI_OPEN_WITH_REF_EVENT; exports.ASK_AI_OPEN_EVENTS = ASK_AI_OPEN_EVENTS; exports.holdAskAiOpens = holdAskAiOpens; exports.askAiOpenIsHeld = askAiOpenIsHeld; exports.chatListensForAskAiOpens = chatListensForAskAiOpens; exports.ASK_AI_TRIGGER_ATTRIBUTE = ASK_AI_TRIGGER_ATTRIBUTE; exports.onAskAiIntent = onAskAiIntent; exports.ChatAppearanceContext = ChatAppearanceContext; exports.useChatAppearance = useChatAppearance; exports.ApprovalRequestMessage = ApprovalRequestMessage; exports.EscalationOfferMessage = EscalationOfferMessage; exports.AiAssistantInfo = AiAssistantInfo; exports.TicketEscalatedMessage = TicketEscalatedMessage; exports.MESSAGE_TYPE = MESSAGE_TYPE; exports.SCROLL_ANCHOR = SCROLL_ANCHOR; exports.TICKET_EVENT_KIND = TICKET_EVENT_KIND; exports.TicketEventMessage = TicketEventMessage; exports.SystemEventMessage = SystemEventMessage; exports.ContextCompactionDisplay = ContextCompactionDisplay; exports.extractCardReferences = extractCardReferences; exports.ThinkingDisplay = ThinkingDisplay; exports.AskDisplay = AskDisplay; exports.ChatPanelContext = ChatPanelContext; exports.getAgentAccent = getAgentAccent; exports.accentFromIdentityIcon = accentFromIdentityIcon; exports.isQuickActionIconSpec = isQuickActionIconSpec; exports.renderQuickActionIcon = renderQuickActionIcon; exports.QuickActionChipButton = QuickActionChipButton; exports.QuickActionChipFromData = QuickActionChipFromData; exports.SuggestionsDisplay = SuggestionsDisplay; exports.ErrorMessageDisplay = ErrorMessageDisplay; exports.MspOrganizationCard = MspOrganizationCard; exports.ChatContainer = ChatContainer; exports.ChatHeader = ChatHeader; exports.ChatContent = ChatContent; exports.ChatFooter = ChatFooter; exports.LoadingFallback = LoadingFallback; exports.LoadingSuspense = LoadingSuspense; exports.CONTEXT_ROW_CLASS = CONTEXT_ROW_CLASS; exports.CONTEXT_ICON_CLASS = CONTEXT_ICON_CLASS; exports.CONTEXT_LABEL_CLASS = CONTEXT_LABEL_CLASS; exports.CONTEXT_BACK_BAR_CLASS = CONTEXT_BACK_BAR_CLASS; exports.CONTEXT_STATE_CLASS = CONTEXT_STATE_CLASS; exports.ContextMenuRow = ContextMenuRow; exports.ContextItemsList = ContextItemsList; exports.ContextErrorBoundary = ContextErrorBoundary; exports.CHAT_CONTEXT_ITEMS_DEFAULT_MAX = CHAT_CONTEXT_ITEMS_DEFAULT_MAX; exports.ChatComposerPlusMenu = ChatComposerPlusMenu; exports.ChatContextPicker = ChatContextPicker; exports.ChatContextChipStrip = ChatContextChipStrip; exports.InlineChip = InlineChip; exports.BlockCard = BlockCard; exports.remarkCardLinks = remarkCardLinks; exports.remarkMentionChips = remarkMentionChips; exports.citedSourceNumbers = citedSourceNumbers; exports.ToolExecutionDisplay = ToolExecutionDisplay; exports.MemoizedChatMessageEnhanced = MemoizedChatMessageEnhanced; exports.CHAT_MESSAGE_LIST_SKELETON_MESSAGES = CHAT_MESSAGE_LIST_SKELETON_MESSAGES; exports.ChatMessageList = ChatMessageList; exports.designDocStatusDisplay = designDocStatusDisplay; exports.formatCompletionLabel = formatCompletionLabel; exports.formatCompletionLabelWithBlockers = formatCompletionLabelWithBlockers; exports.SOURCE_ICON_NAMES = SOURCE_ICON_NAMES; exports.getSourceIconName = getSourceIconName; exports.SOURCE_LABELS_BY_TABLE = SOURCE_LABELS_BY_TABLE; exports.getSourceLabel = getSourceLabel; exports.DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID = DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID; exports.defaultTableIdForDocumentType = defaultTableIdForDocumentType; exports.DOC_TABLE_TYPES = DOC_TABLE_TYPES; exports.groupsByTable = groupsByTable; exports.recordCountLabel = recordCountLabel; exports.buildGroupedSource = buildGroupedSource; exports.groupSourcesByTable = groupSourcesByTable; exports.formatCitationIndices = formatCitationIndices; exports.CHAT_ATTACHMENT_VIEW_URL_PREFIX = CHAT_ATTACHMENT_VIEW_URL_PREFIX; exports.CHAT_ATTACHMENT_VIEW_TOKEN_QUERY_PARAM = CHAT_ATTACHMENT_VIEW_TOKEN_QUERY_PARAM; exports.ANTHROPIC_SUPPORTED_IMAGE_MIME = ANTHROPIC_SUPPORTED_IMAGE_MIME; exports.buildChatAttachmentViewUrl = buildChatAttachmentViewUrl; exports.escapeMarkdownInline = escapeMarkdownInline; exports.formatChatAttachmentMarkdownForBubble = formatChatAttachmentMarkdownForBubble; exports.CHAT_ATTACHMENT_VIEW_URL_PREFIX_REGEX_ESCAPED = CHAT_ATTACHMENT_VIEW_URL_PREFIX_REGEX_ESCAPED; exports.CHAT_ATTACHMENT_MARKDOWN_PATTERN = CHAT_ATTACHMENT_MARKDOWN_PATTERN; exports.stripChatAttachmentMarkdown = stripChatAttachmentMarkdown; exports.AUTO_CONTINUATION_DIRECTIVE_PREFIX = AUTO_CONTINUATION_DIRECTIVE_PREFIX; exports.buildAutoContinuationDirective = buildAutoContinuationDirective; exports.flattenAssistantContent = flattenAssistantContent; exports.SCROLL_ANCHOR_WIRE_KEY = SCROLL_ANCHOR_WIRE_KEY; exports.parseScrollAnchor = parseScrollAnchor; exports.parseWireCommandOverride = parseWireCommandOverride; exports.sanitizeTitleForChat = sanitizeTitleForChat; exports.formatSingularLookupInvocation = formatSingularLookupInvocation; exports.extractEntityIdFilter = extractEntityIdFilter; exports.buildDiscussAddendum = buildDiscussAddendum; exports.clickupTaskUrl = clickupTaskUrl; exports.faqSectionSlug = faqSectionSlug; exports.faqItemAnchor = faqItemAnchor; exports.parseFaqHash = parseFaqHash; exports.MingoEdgeLight = MingoEdgeLight; exports.useMarqueeSync = useMarqueeSync; exports.getMarqueeTrackOffset = getMarqueeTrackOffset; exports.getMarqueeAppliedOffset = getMarqueeAppliedOffset; exports.getMarqueeCloneTwin = getMarqueeCloneTwin; exports.MarqueeWallFades = MarqueeWallFades; exports.MarqueeWall = MarqueeWall; exports.WALL_SKELETON_LABEL_CH = WALL_SKELETON_LABEL_CH; exports.interleave = interleave; exports.QuickActionWall = QuickActionWall; exports.PageTopicLabel = PageTopicLabel; exports.QUICK_ACTION_SET_SLOTS = QUICK_ACTION_SET_SLOTS; exports.QuickActionSet = QuickActionSet; exports.MingoQuickActionWall = MingoQuickActionWall; exports.chatDialogMenuItems = chatDialogMenuItems; exports.ChatListEmptyState = ChatListEmptyState; exports.chatDayLabel = chatDayLabel; exports.ChatListLoadError = ChatListLoadError; exports.CHAT_HISTORY_PAGE_SIZE = CHAT_HISTORY_PAGE_SIZE; exports.MingoChatHistory = MingoChatHistory; exports.MingoWelcome = MingoWelcome; exports.GuideWelcome = GuideWelcome; exports.GuideModeBanner = GuideModeBanner; exports.MingoArchiveList = MingoArchiveList; exports.MingoChatHeader = MingoChatHeader; exports.ChatHeaderSearchField = ChatHeaderSearchField; exports.SearchInput = SearchInput; exports.MingoChatSearchModal = MingoChatSearchModal; exports.MingoChatRail = MingoChatRail; exports.TabSelector = TabSelector; exports.MingoHistoryRail = MingoHistoryRail; exports.RenameChatModal = RenameChatModal; exports.ArchiveChatModal = ArchiveChatModal; exports.UnarchiveChatModal = UnarchiveChatModal; exports.ChatDialogModals = ChatDialogModals; exports.ChatPanelHeader = ChatPanelHeader; exports.CHAT_ATTACHMENT_MIME_TYPES = CHAT_ATTACHMENT_MIME_TYPES; exports.CHAT_ATTACHMENT_CONCURRENT_UPLOADS_PER_USER = CHAT_ATTACHMENT_CONCURRENT_UPLOADS_PER_USER; exports.ChatAttachmentAddButton = ChatAttachmentAddButton; exports.ChatAttachmentChipStrip = ChatAttachmentChipStrip; exports.ChatContextMemoryBar = ChatContextMemoryBar; exports.HoverCard = HoverCard; exports.HoverCardTrigger = HoverCardTrigger; exports.HoverCardContent = HoverCardContent; exports.ModelDisplay = ModelDisplay; exports.ChatComposer = ChatComposer; exports.ChatArchivePage = ChatArchivePage; exports.useNavLinkViaRuntime = useNavLinkViaRuntime; exports.useNavigateViaRuntime = useNavigateViaRuntime; exports.NavLinkAnchorViaRuntime = NavLinkAnchorViaRuntime; exports.SourceActionButton = SourceActionButton; exports.getCaptionsUrl = getCaptionsUrl; exports.rebaseCaptionsUrl = rebaseCaptionsUrl; exports.buildCaptionsUrl = buildCaptionsUrl; exports.getEntityCaptionUrls = getEntityCaptionUrls; exports.getEntityCaptionUrlsById = getEntityCaptionUrlsById; exports.captionsEntityTypeForDocType = captionsEntityTypeForDocType; exports.useCaptions = useCaptions; exports.UserDisplay = UserDisplay; exports.CardHitLayer = CardHitLayer; exports.STRIP_CELL_MAX_WIDTH = STRIP_CELL_MAX_WIDTH; exports.CardsStrip = CardsStrip; exports.RATIO_GRID_CLASS = RATIO_GRID_CLASS; exports.RATIO_TO_CSS_ASPECT = RATIO_TO_CSS_ASPECT; exports.RatioTabs = RatioTabs; exports.detectAspectRatio = detectAspectRatio; exports.ratioToCategory = ratioToCategory; exports.groupByAspectRatio = groupByAspectRatio; exports.VIDEO_BITES_CARD_HEIGHT_DESKTOP_PX = VIDEO_BITES_CARD_HEIGHT_DESKTOP_PX; exports.VIDEO_BITES_CARD_HEIGHT_MOBILE_PX = VIDEO_BITES_CARD_HEIGHT_MOBILE_PX; exports.STRIP_LINE_MAX_PX = STRIP_LINE_MAX_PX; exports.VIDEO_BITES_SKELETON_COUNT = VIDEO_BITES_SKELETON_COUNT; exports.VideoBitesStrip = VideoBitesStrip; exports.VideoBiteCard = VideoBiteCard; exports.EntityVideoSection = EntityVideoSection; exports.ChatVideoEntityCard = ChatVideoEntityCard; exports.CHAT_CARD_DISCLOSURE = CHAT_CARD_DISCLOSURE; exports.CHAT_CARD_DISCLOSURES = CHAT_CARD_DISCLOSURES; exports.chatCardDisclosureOf = chatCardDisclosureOf; exports.ChatCardDisclosureButton = ChatCardDisclosureButton; exports.useChatCardDisclosure = useChatCardDisclosure; exports.ChatCardDisclosureRow = ChatCardDisclosureRow; exports.designDocPeople = designDocPeople; exports.designDocMetaLine = designDocMetaLine; exports.DesignDocCard = DesignDocCard; exports.GitHubActivityCard = GitHubActivityCard; exports.getVendorLogo = getVendorLogo; exports.VendorIcon = VendorIcon; exports.useChatCardItem = useChatCardItem; exports.MingoInfoCardActionProvider = MingoInfoCardActionProvider; exports.readFetchedCardTitle = readFetchedCardTitle; exports.readFetchedCardPath = readFetchedCardPath; exports.resolveFetchedCardHref = resolveFetchedCardHref; exports.sourceRowCtxFromRuntime = sourceRowCtxFromRuntime; exports.resolveSourceRowCTA = resolveSourceRowCTA; exports.resolveSourceIcon = resolveSourceIcon; exports.resolveCardDestination = resolveCardDestination; exports.chatCardLabel = chatCardLabel; exports.ChatCardLoader = ChatCardLoader; exports.renderChatInlineEntityCard = renderChatInlineEntityCard; exports.EMPTY_DIALOG_CAPABILITIES = EMPTY_DIALOG_CAPABILITIES; exports.useChunkCatchup = useChunkCatchup; exports.useNatsDialogSubscription = useNatsDialogSubscription; exports.buildNatsWsUrl = buildNatsWsUrl; exports.fetchSlashCommands = fetchSlashCommands; exports.useSlashCommands = useSlashCommands; exports.useSlashCommandRegistry = useSlashCommandRegistry; exports.fetchEmptyStateConfig = fetchEmptyStateConfig; exports.emptyStateUrlForTopic = emptyStateUrlForTopic; exports.useEmptyStateConfig = useEmptyStateConfig; exports.useChatAttachments = useChatAttachments; exports.useChatAttachmentImageGallery = useChatAttachmentImageGallery; exports.ChatIdentityProvider = ChatIdentityProvider; exports.useChatIdentity = useChatIdentity; exports.useCloseOnNavigation = useCloseOnNavigation; exports.useWhatToAsk = useWhatToAsk; exports.awaitsDecision = awaitsDecision; exports.mergeByTime = mergeByTime; exports.approvalDisplaysInline = approvalDisplaysInline; exports.appendToTrailingAssistant = appendToTrailingAssistant; exports.upsertTrailingCompaction = upsertTrailingCompaction; exports.applyToolExecutionToMessages = applyToolExecutionToMessages; exports.MessageSegmentAccumulator = MessageSegmentAccumulator; exports.createMessageSegmentAccumulator = createMessageSegmentAccumulator; exports.createEmptyTurnMeta = createEmptyTurnMeta; exports.createChatStreamReducer = createChatStreamReducer; exports.DEFAULT_DIALOG_SIDE = DEFAULT_DIALOG_SIDE; exports.DEFAULT_MAX_REDUCERS = DEFAULT_MAX_REDUCERS; exports.MAX_PENDING_RETAIN_KEYS = MAX_PENDING_RETAIN_KEYS; exports.createChatDialogStore = createChatDialogStore; exports.createDeltaBatcher = createDeltaBatcher; exports.useChatStreamReducer = useChatStreamReducer; exports.createChatConversationsApi = createChatConversationsApi; exports.buildDiscussPrompt = buildDiscussPrompt; exports.useManagedDialogList = useManagedDialogList; exports.useSseChatAdapter = useSseChatAdapter; exports.extractIncompleteMessageState = extractIncompleteMessageState; exports.extractIncompleteTailState = extractIncompleteTailState; exports.decodeHistoricalMessageData = decodeHistoricalMessageData; exports.processHistoricalMessages = processHistoricalMessages; exports.extractErrorMessages = extractErrorMessages; exports.processHistoricalMessagesWithErrors = processHistoricalMessagesWithErrors; exports.mapProcessedToUnified = mapProcessedToUnified; exports.historicalToUnified = historicalToUnified; exports.useNatsChatAdapter = useNatsChatAdapter; exports.useStableShallow = useStableShallow; exports.useUnifiedChat = useUnifiedChat; exports.chatChipClass = chatChipClass; exports.MINGO_V2_RAIL_WIDTH = MINGO_V2_RAIL_WIDTH; exports.CHAT_BLOCK_MIN_WIDTH = CHAT_BLOCK_MIN_WIDTH; exports.MINGO_V2_SPLIT_WIDTH = MINGO_V2_SPLIT_WIDTH;
21167
+ exports.PanelResizeGrip = PanelResizeGrip; exports.PanelResizeHandle = PanelResizeHandle; exports.Tabs = Tabs; exports.TabsList = TabsList; exports.TabsTrigger = TabsTrigger; exports.TabsContent = TabsContent; exports.AUTHORED_LINK_REL_TOKENS = AUTHORED_LINK_REL_TOKENS; exports.authoredRelTokens = authoredRelTokens; exports.isNofollowRel = isNofollowRel; exports.renderedLinkRel = renderedLinkRel; exports.findMarkdownLinkAt = findMarkdownLinkAt; exports.formatMarkdownLink = formatMarkdownLink; exports.stripInlineMarkdown = stripInlineMarkdown; exports.markdownToPlainText = markdownToPlainText; exports.buildHeadingIdMap = buildHeadingIdMap; exports.useHeadingIdMap = useHeadingIdMap; exports.extractText = extractText; exports.useIsHydrated = useIsHydrated; exports.MermaidDiagram = MermaidDiagram; exports.MARKDOWN_H1_CLASS = MARKDOWN_H1_CLASS; exports.MARKDOWN_H2_CLASS = MARKDOWN_H2_CLASS; exports.MARKDOWN_PARAGRAPH_CLASS = MARKDOWN_PARAGRAPH_CLASS; exports.hasRenderableSrc = hasRenderableSrc; exports.buildStandardLeafRenderers = buildStandardLeafRenderers; exports.SAFE_HTML_TAGS = SAFE_HTML_TAGS; exports.SVG_TAGS = SVG_TAGS; exports.buildEffectiveTagSet = buildEffectiveTagSet; exports.buildSanitizeSchema = buildSanitizeSchema; exports.rehypeStripUnsafe = rehypeStripUnsafe; exports.escapeUnknownHtmlTags = escapeUnknownHtmlTags; exports.cardAwareUrlTransform = cardAwareUrlTransform; exports.splitStreamingBlocks = splitStreamingBlocks; exports.completeStreamingTail = completeStreamingTail; exports.TEXT_SIZE_PRESETS = TEXT_SIZE_PRESETS; exports.resolveTextSizeConfig = resolveTextSizeConfig; exports.NO_BROKEN_LINKS = NO_BROKEN_LINKS; exports.MARKDOWN_SKELETON_LINES = MARKDOWN_SKELETON_LINES; exports.MarkdownEngine = MarkdownEngine; exports.MarkdownEngineSkeleton = MarkdownEngineSkeleton; exports.SimpleMarkdownRenderer = SimpleMarkdownRenderer; exports.ASK_AI_OPEN_EVENT = ASK_AI_OPEN_EVENT; exports.ASK_AI_OPEN_WITH_REF_EVENT = ASK_AI_OPEN_WITH_REF_EVENT; exports.ASK_AI_OPEN_EVENTS = ASK_AI_OPEN_EVENTS; exports.holdAskAiOpens = holdAskAiOpens; exports.askAiOpenIsHeld = askAiOpenIsHeld; exports.chatListensForAskAiOpens = chatListensForAskAiOpens; exports.ASK_AI_TRIGGER_ATTRIBUTE = ASK_AI_TRIGGER_ATTRIBUTE; exports.onAskAiIntent = onAskAiIntent; exports.ChatAppearanceContext = ChatAppearanceContext; exports.useChatAppearance = useChatAppearance; exports.ApprovalRequestMessage = ApprovalRequestMessage; exports.EscalationOfferMessage = EscalationOfferMessage; exports.AiAssistantInfo = AiAssistantInfo; exports.TicketEscalatedMessage = TicketEscalatedMessage; exports.MESSAGE_TYPE = MESSAGE_TYPE; exports.SCROLL_ANCHOR = SCROLL_ANCHOR; exports.TICKET_EVENT_KIND = TICKET_EVENT_KIND; exports.TicketEventMessage = TicketEventMessage; exports.SystemEventMessage = SystemEventMessage; exports.ContextCompactionDisplay = ContextCompactionDisplay; exports.policyReviewField = policyReviewField; exports.extractCardReferences = extractCardReferences; exports.ThinkingDisplay = ThinkingDisplay; exports.AskDisplay = AskDisplay; exports.ChatPanelContext = ChatPanelContext; exports.getAgentAccent = getAgentAccent; exports.accentFromIdentityIcon = accentFromIdentityIcon; exports.isQuickActionIconSpec = isQuickActionIconSpec; exports.renderQuickActionIcon = renderQuickActionIcon; exports.QuickActionChipButton = QuickActionChipButton; exports.QuickActionChipFromData = QuickActionChipFromData; exports.SuggestionsDisplay = SuggestionsDisplay; exports.ErrorMessageDisplay = ErrorMessageDisplay; exports.MspOrganizationCard = MspOrganizationCard; exports.ChatContainer = ChatContainer; exports.ChatHeader = ChatHeader; exports.ChatContent = ChatContent; exports.ChatFooter = ChatFooter; exports.LoadingFallback = LoadingFallback; exports.LoadingSuspense = LoadingSuspense; exports.CONTEXT_ROW_CLASS = CONTEXT_ROW_CLASS; exports.CONTEXT_ICON_CLASS = CONTEXT_ICON_CLASS; exports.CONTEXT_LABEL_CLASS = CONTEXT_LABEL_CLASS; exports.CONTEXT_BACK_BAR_CLASS = CONTEXT_BACK_BAR_CLASS; exports.CONTEXT_STATE_CLASS = CONTEXT_STATE_CLASS; exports.ContextMenuRow = ContextMenuRow; exports.ContextItemsList = ContextItemsList; exports.ContextErrorBoundary = ContextErrorBoundary; exports.CHAT_CONTEXT_ITEMS_DEFAULT_MAX = CHAT_CONTEXT_ITEMS_DEFAULT_MAX; exports.ChatComposerPlusMenu = ChatComposerPlusMenu; exports.ChatContextPicker = ChatContextPicker; exports.ChatContextChipStrip = ChatContextChipStrip; exports.InlineChip = InlineChip; exports.BlockCard = BlockCard; exports.remarkCardLinks = remarkCardLinks; exports.remarkMentionChips = remarkMentionChips; exports.citedSourceNumbers = citedSourceNumbers; exports.ToolExecutionDisplay = ToolExecutionDisplay; exports.MemoizedChatMessageEnhanced = MemoizedChatMessageEnhanced; exports.CHAT_MESSAGE_LIST_SKELETON_MESSAGES = CHAT_MESSAGE_LIST_SKELETON_MESSAGES; exports.ChatMessageList = ChatMessageList; exports.designDocStatusDisplay = designDocStatusDisplay; exports.formatCompletionLabel = formatCompletionLabel; exports.formatCompletionLabelWithBlockers = formatCompletionLabelWithBlockers; exports.SOURCE_ICON_NAMES = SOURCE_ICON_NAMES; exports.getSourceIconName = getSourceIconName; exports.SOURCE_LABELS_BY_TABLE = SOURCE_LABELS_BY_TABLE; exports.getSourceLabel = getSourceLabel; exports.DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID = DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID; exports.defaultTableIdForDocumentType = defaultTableIdForDocumentType; exports.DOC_TABLE_TYPES = DOC_TABLE_TYPES; exports.groupsByTable = groupsByTable; exports.recordCountLabel = recordCountLabel; exports.buildGroupedSource = buildGroupedSource; exports.groupSourcesByTable = groupSourcesByTable; exports.formatCitationIndices = formatCitationIndices; exports.CHAT_ATTACHMENT_VIEW_URL_PREFIX = CHAT_ATTACHMENT_VIEW_URL_PREFIX; exports.CHAT_ATTACHMENT_VIEW_TOKEN_QUERY_PARAM = CHAT_ATTACHMENT_VIEW_TOKEN_QUERY_PARAM; exports.ANTHROPIC_SUPPORTED_IMAGE_MIME = ANTHROPIC_SUPPORTED_IMAGE_MIME; exports.buildChatAttachmentViewUrl = buildChatAttachmentViewUrl; exports.escapeMarkdownInline = escapeMarkdownInline; exports.formatChatAttachmentMarkdownForBubble = formatChatAttachmentMarkdownForBubble; exports.CHAT_ATTACHMENT_VIEW_URL_PREFIX_REGEX_ESCAPED = CHAT_ATTACHMENT_VIEW_URL_PREFIX_REGEX_ESCAPED; exports.CHAT_ATTACHMENT_MARKDOWN_PATTERN = CHAT_ATTACHMENT_MARKDOWN_PATTERN; exports.stripChatAttachmentMarkdown = stripChatAttachmentMarkdown; exports.AUTO_CONTINUATION_DIRECTIVE_PREFIX = AUTO_CONTINUATION_DIRECTIVE_PREFIX; exports.buildAutoContinuationDirective = buildAutoContinuationDirective; exports.flattenAssistantContent = flattenAssistantContent; exports.SCROLL_ANCHOR_WIRE_KEY = SCROLL_ANCHOR_WIRE_KEY; exports.parseScrollAnchor = parseScrollAnchor; exports.parseWireCommandOverride = parseWireCommandOverride; exports.sanitizeTitleForChat = sanitizeTitleForChat; exports.formatSingularLookupInvocation = formatSingularLookupInvocation; exports.extractEntityIdFilter = extractEntityIdFilter; exports.buildDiscussAddendum = buildDiscussAddendum; exports.clickupTaskUrl = clickupTaskUrl; exports.faqSectionSlug = faqSectionSlug; exports.faqItemAnchor = faqItemAnchor; exports.parseFaqHash = parseFaqHash; exports.MingoEdgeLight = MingoEdgeLight; exports.useMarqueeSync = useMarqueeSync; exports.getMarqueeTrackOffset = getMarqueeTrackOffset; exports.getMarqueeAppliedOffset = getMarqueeAppliedOffset; exports.getMarqueeCloneTwin = getMarqueeCloneTwin; exports.MarqueeWallFades = MarqueeWallFades; exports.MarqueeWall = MarqueeWall; exports.WALL_SKELETON_LABEL_CH = WALL_SKELETON_LABEL_CH; exports.interleave = interleave; exports.QuickActionWall = QuickActionWall; exports.PageTopicLabel = PageTopicLabel; exports.QUICK_ACTION_SET_SLOTS = QUICK_ACTION_SET_SLOTS; exports.QuickActionSet = QuickActionSet; exports.MingoQuickActionWall = MingoQuickActionWall; exports.chatDialogMenuItems = chatDialogMenuItems; exports.ChatListEmptyState = ChatListEmptyState; exports.chatDayLabel = chatDayLabel; exports.ChatListLoadError = ChatListLoadError; exports.CHAT_HISTORY_PAGE_SIZE = CHAT_HISTORY_PAGE_SIZE; exports.MingoChatHistory = MingoChatHistory; exports.MingoWelcome = MingoWelcome; exports.GuideWelcome = GuideWelcome; exports.GuideModeBanner = GuideModeBanner; exports.MingoArchiveList = MingoArchiveList; exports.MingoChatHeader = MingoChatHeader; exports.ChatHeaderSearchField = ChatHeaderSearchField; exports.SearchInput = SearchInput; exports.MingoChatSearchModal = MingoChatSearchModal; exports.MingoChatRail = MingoChatRail; exports.MingoHistoryRail = MingoHistoryRail; exports.RenameChatModal = RenameChatModal; exports.ArchiveChatModal = ArchiveChatModal; exports.UnarchiveChatModal = UnarchiveChatModal; exports.ChatDialogModals = ChatDialogModals; exports.ChatPanelHeader = ChatPanelHeader; exports.CHAT_ATTACHMENT_MIME_TYPES = CHAT_ATTACHMENT_MIME_TYPES; exports.CHAT_ATTACHMENT_CONCURRENT_UPLOADS_PER_USER = CHAT_ATTACHMENT_CONCURRENT_UPLOADS_PER_USER; exports.ChatAttachmentAddButton = ChatAttachmentAddButton; exports.ChatAttachmentChipStrip = ChatAttachmentChipStrip; exports.ChatContextMemoryBar = ChatContextMemoryBar; exports.HoverCard = HoverCard; exports.HoverCardTrigger = HoverCardTrigger; exports.HoverCardContent = HoverCardContent; exports.ModelDisplay = ModelDisplay; exports.ChatComposer = ChatComposer; exports.ChatArchivePage = ChatArchivePage; exports.useNavLinkViaRuntime = useNavLinkViaRuntime; exports.useNavigateViaRuntime = useNavigateViaRuntime; exports.NavLinkAnchorViaRuntime = NavLinkAnchorViaRuntime; exports.SourceActionButton = SourceActionButton; exports.getCaptionsUrl = getCaptionsUrl; exports.rebaseCaptionsUrl = rebaseCaptionsUrl; exports.buildCaptionsUrl = buildCaptionsUrl; exports.getEntityCaptionUrls = getEntityCaptionUrls; exports.getEntityCaptionUrlsById = getEntityCaptionUrlsById; exports.captionsEntityTypeForDocType = captionsEntityTypeForDocType; exports.useCaptions = useCaptions; exports.UserDisplay = UserDisplay; exports.CardHitLayer = CardHitLayer; exports.STRIP_CELL_MAX_WIDTH = STRIP_CELL_MAX_WIDTH; exports.CardsStrip = CardsStrip; exports.RATIO_GRID_CLASS = RATIO_GRID_CLASS; exports.RATIO_TO_CSS_ASPECT = RATIO_TO_CSS_ASPECT; exports.RatioTabs = RatioTabs; exports.detectAspectRatio = detectAspectRatio; exports.ratioToCategory = ratioToCategory; exports.groupByAspectRatio = groupByAspectRatio; exports.VIDEO_BITES_CARD_HEIGHT_DESKTOP_PX = VIDEO_BITES_CARD_HEIGHT_DESKTOP_PX; exports.VIDEO_BITES_CARD_HEIGHT_MOBILE_PX = VIDEO_BITES_CARD_HEIGHT_MOBILE_PX; exports.STRIP_LINE_MAX_PX = STRIP_LINE_MAX_PX; exports.VIDEO_BITES_SKELETON_COUNT = VIDEO_BITES_SKELETON_COUNT; exports.VideoBitesStrip = VideoBitesStrip; exports.VideoBiteCard = VideoBiteCard; exports.EntityVideoSection = EntityVideoSection; exports.ChatVideoEntityCard = ChatVideoEntityCard; exports.CHAT_CARD_DISCLOSURE = CHAT_CARD_DISCLOSURE; exports.CHAT_CARD_DISCLOSURES = CHAT_CARD_DISCLOSURES; exports.chatCardDisclosureOf = chatCardDisclosureOf; exports.ChatCardDisclosureButton = ChatCardDisclosureButton; exports.useChatCardDisclosure = useChatCardDisclosure; exports.ChatCardDisclosureRow = ChatCardDisclosureRow; exports.designDocPeople = designDocPeople; exports.designDocMetaLine = designDocMetaLine; exports.DesignDocCard = DesignDocCard; exports.GitHubActivityCard = GitHubActivityCard; exports.getVendorLogo = getVendorLogo; exports.VendorIcon = VendorIcon; exports.useChatCardItem = useChatCardItem; exports.MingoInfoCardActionProvider = MingoInfoCardActionProvider; exports.readFetchedCardTitle = readFetchedCardTitle; exports.readFetchedCardPath = readFetchedCardPath; exports.resolveFetchedCardHref = resolveFetchedCardHref; exports.sourceRowCtxFromRuntime = sourceRowCtxFromRuntime; exports.resolveSourceRowCTA = resolveSourceRowCTA; exports.resolveSourceIcon = resolveSourceIcon; exports.resolveCardDestination = resolveCardDestination; exports.chatCardLabel = chatCardLabel; exports.ChatCardLoader = ChatCardLoader; exports.renderChatInlineEntityCard = renderChatInlineEntityCard; exports.EMPTY_DIALOG_CAPABILITIES = EMPTY_DIALOG_CAPABILITIES; exports.useChunkCatchup = useChunkCatchup; exports.useNatsDialogSubscription = useNatsDialogSubscription; exports.buildNatsWsUrl = buildNatsWsUrl; exports.fetchSlashCommands = fetchSlashCommands; exports.useSlashCommands = useSlashCommands; exports.useSlashCommandRegistry = useSlashCommandRegistry; exports.fetchEmptyStateConfig = fetchEmptyStateConfig; exports.emptyStateUrlForTopic = emptyStateUrlForTopic; exports.useEmptyStateConfig = useEmptyStateConfig; exports.useChatAttachments = useChatAttachments; exports.useChatAttachmentImageGallery = useChatAttachmentImageGallery; exports.ChatIdentityProvider = ChatIdentityProvider; exports.useChatIdentity = useChatIdentity; exports.useCloseOnNavigation = useCloseOnNavigation; exports.useWhatToAsk = useWhatToAsk; exports.awaitsDecision = awaitsDecision; exports.mergeByTime = mergeByTime; exports.approvalDisplaysInline = approvalDisplaysInline; exports.appendToTrailingAssistant = appendToTrailingAssistant; exports.upsertTrailingCompaction = upsertTrailingCompaction; exports.applyToolExecutionToMessages = applyToolExecutionToMessages; exports.MessageSegmentAccumulator = MessageSegmentAccumulator; exports.createMessageSegmentAccumulator = createMessageSegmentAccumulator; exports.createEmptyTurnMeta = createEmptyTurnMeta; exports.createChatStreamReducer = createChatStreamReducer; exports.DEFAULT_DIALOG_SIDE = DEFAULT_DIALOG_SIDE; exports.DEFAULT_MAX_REDUCERS = DEFAULT_MAX_REDUCERS; exports.MAX_PENDING_RETAIN_KEYS = MAX_PENDING_RETAIN_KEYS; exports.createChatDialogStore = createChatDialogStore; exports.createDeltaBatcher = createDeltaBatcher; exports.useChatStreamReducer = useChatStreamReducer; exports.createChatConversationsApi = createChatConversationsApi; exports.buildDiscussPrompt = buildDiscussPrompt; exports.useManagedDialogList = useManagedDialogList; exports.useSseChatAdapter = useSseChatAdapter; exports.extractIncompleteMessageState = extractIncompleteMessageState; exports.extractIncompleteTailState = extractIncompleteTailState; exports.decodeHistoricalMessageData = decodeHistoricalMessageData; exports.processHistoricalMessages = processHistoricalMessages; exports.extractErrorMessages = extractErrorMessages; exports.processHistoricalMessagesWithErrors = processHistoricalMessagesWithErrors; exports.mapProcessedToUnified = mapProcessedToUnified; exports.historicalToUnified = historicalToUnified; exports.useNatsChatAdapter = useNatsChatAdapter; exports.useStableShallow = useStableShallow; exports.useUnifiedChat = useUnifiedChat; exports.chatChipClass = chatChipClass; exports.MINGO_V2_RAIL_WIDTH = MINGO_V2_RAIL_WIDTH; exports.CHAT_BLOCK_MIN_WIDTH = CHAT_BLOCK_MIN_WIDTH; exports.MINGO_V2_SPLIT_WIDTH = MINGO_V2_SPLIT_WIDTH;