@qredence/fleet 0.5.10 → 0.5.11

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 (103) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/web/client/assets/agent-activity-CwMDU7aP.js +1 -0
  3. package/dist/web/client/assets/artifacts-panel-CQmFEF_H.js +1 -0
  4. package/dist/web/client/assets/{chat-command-palette-DfYSPPXI.js → chat-command-palette-CmHTS3rs.js} +1 -1
  5. package/dist/web/client/assets/{chat-C8XDWWXz.js → chat-yh02zgA7.js} +1 -1
  6. package/dist/web/client/assets/{citations-BQ_pr_9_.js → citations-C_tPOJE_.js} +1 -1
  7. package/dist/web/client/assets/{fleet-message-queue-zWM5-y18.js → fleet-message-queue-DUz6Hfrf.js} +1 -1
  8. package/dist/web/client/assets/{fleet-pi-tool-renderer-AJoMbXBa.js → fleet-pi-tool-renderer-BEDIO3al.js} +4 -4
  9. package/dist/web/client/assets/fleet-reasoning-panel-CbkO7u-v.js +1 -0
  10. package/dist/web/client/assets/{fleet-subagent-list-BnRnrWKS.js → fleet-subagent-list-iKUtLJKZ.js} +1 -1
  11. package/dist/web/client/assets/fleet-tool-timeline-C8heL7ae.js +1 -0
  12. package/dist/web/client/assets/{fork-picker-dialog-CkcSekBl.js → fork-picker-dialog-ByBOGVsa.js} +1 -1
  13. package/dist/web/client/assets/globals-B_I1Eq1u.css +2 -0
  14. package/dist/web/client/assets/horizontal-resize-qK6eRhIG.js +1 -0
  15. package/dist/web/client/assets/{index-DlnHLDpx.js → index-C1zOjrMK.js} +3 -3
  16. package/dist/web/client/assets/{ipython-tool-BrMePqD-.js → ipython-tool-ldJ9F1Cw.js} +1 -1
  17. package/dist/web/client/assets/model-selector-list-DsKTuAgS.js +1 -0
  18. package/dist/web/client/assets/{openui-renderer-DwYFJdbe.js → openui-renderer-J3dhPpL4.js} +5 -5
  19. package/dist/web/client/assets/prompt-input-qPIXZ-Rb.js +1 -0
  20. package/dist/web/client/assets/prompt-suggestions-Cc--lSNR.js +1 -0
  21. package/dist/web/client/assets/{provider-label-BCJh04J5.js → provider-label-Dpr7djG9.js} +1 -1
  22. package/dist/web/client/assets/repl-panel-DsPX04Xr.js +1 -0
  23. package/dist/web/client/assets/{resources-panel-Bo8dfUdm.js → resources-panel-D867-goy.js} +1 -1
  24. package/dist/web/client/assets/right-panel-registry-DewpBWHM.js +2 -0
  25. package/dist/web/client/assets/routes-vNkVToAF.js +16 -0
  26. package/dist/web/client/assets/safe-storage-s25GrfpH.js +1 -0
  27. package/dist/web/client/assets/session-insights-panel-YnaXvTpi.js +1 -0
  28. package/dist/web/client/assets/settings-dialog-B-v4me3Y.js +1 -0
  29. package/dist/web/client/assets/skeleton-loaders-C9vHwAYV.js +1 -0
  30. package/dist/web/client/assets/{subagent-chat-panel-DseoO31p.js → subagent-chat-panel-DkVUumrP.js} +1 -1
  31. package/dist/web/client/assets/subagent-transcript-D8wmQxXe.js +1 -0
  32. package/dist/web/client/assets/subagents-panel-BMp2Ego0.js +1 -0
  33. package/dist/web/client/assets/{surfaces-cW-gp56p.js → surfaces-DI-U-_2a.js} +1 -1
  34. package/dist/web/client/assets/tool-result-DfnPN0FQ.js +4 -0
  35. package/dist/web/client/assets/ui-preferences-CImQGZm_.js +1 -0
  36. package/dist/web/client/assets/virtualized-turn-list-DMJENRY0.js +6 -0
  37. package/dist/web/client/assets/{workspace-panel-DI1W3ce9.js → workspace-panel-G6yMpKJ8.js} +1 -1
  38. package/dist/web/client/bundle-budget.json +6 -6
  39. package/dist/web/server/{_tanstack-start-manifest_v-Cdx6hy2i-I7A5YJRU.js → _tanstack-start-manifest_v-po4woX6g-AUGCOEZ2.js} +14 -13
  40. package/dist/web/server/{agent-activity-B-JMvecd-SLE3GGY2.js → agent-activity-CS2rbF_C-A3R26CYH.js} +2 -2
  41. package/dist/web/server/{artifacts-panel-DLMK1O8P-42T45JMA.js → artifacts-panel-8GGUCtOd-X5TNKTY2.js} +12 -12
  42. package/dist/web/server/{chat-command-palette-CdYwoTMe-4LBAZF7K.js → chat-command-palette-Dgl5tqWn-72LLEWUD.js} +2 -2
  43. package/dist/web/server/{chunk-K5ESTT4A.js → chunk-7MDZVLIY.js} +11 -3
  44. package/dist/web/server/{chunk-EBCYJSBR.js → chunk-7SD2ZSEA.js} +3 -3
  45. package/dist/web/server/{chunk-M564UIEY.js → chunk-ABBWBBSS.js} +8 -8
  46. package/dist/web/server/{chunk-KNJUSMBT.js → chunk-BXWAUTTH.js} +2 -2
  47. package/dist/web/server/{chunk-54II5QXQ.js → chunk-ETTDO4UO.js} +6 -3
  48. package/dist/web/server/{chunk-EHNIN245.js → chunk-GETSIVNU.js} +5 -5
  49. package/dist/web/server/{chunk-NRDG2ISJ.js → chunk-GGT2ZKDB.js} +49 -49
  50. package/dist/web/server/{chunk-X2R5YPQZ.js → chunk-IJPCV6DH.js} +3 -2
  51. package/dist/web/server/{chunk-AJJ2S5FF.js → chunk-JQDLJ7KI.js} +20 -20
  52. package/dist/web/server/{chunk-VHBFU4TG.js → chunk-JUROEEWM.js} +43 -14
  53. package/dist/web/server/{chunk-TCH3U26B.js → chunk-MIW4LJTV.js} +2 -2
  54. package/dist/web/server/{chunk-2TRF62K5.js → chunk-N6NOTURM.js} +3 -3
  55. package/dist/web/server/{chunk-5XX7RKJ6.js → chunk-NXJ32VFR.js} +5 -5
  56. package/dist/web/server/{chunk-EOVMHQ2H.js → chunk-O4OTWWPF.js} +7 -7
  57. package/dist/web/server/{chunk-OB5OSYJK.js → chunk-RNOJACWQ.js} +53 -29
  58. package/dist/web/server/chunk-SZJUXVWG.js +40 -0
  59. package/dist/web/server/{chunk-6AW2XFTZ.js → chunk-WILCIZYU.js} +194 -10
  60. package/dist/web/server/{chunk-FED63ZHU.js → chunk-WKV2Z4KO.js} +10 -5
  61. package/dist/web/server/{chunk-ANL4B775.js → chunk-XLNCWZMZ.js} +2 -2
  62. package/dist/web/server/{chunk-GM32R7JW.js → chunk-YKVGQBZA.js} +10 -8
  63. package/dist/web/server/{chunk-3PIUR75R.js → chunk-YXXRP3NS.js} +9 -9
  64. package/dist/web/server/{fleet-message-queue-BxycG26e-2XLOTCLP.js → fleet-message-queue-j0DCU5Xy-5HKBHMPV.js} +2 -2
  65. package/dist/web/server/{fleet-pi-tool-renderer-RIeVlM9J-D6MISCQC.js → fleet-pi-tool-renderer-umKunT3K-O4GBH35V.js} +5 -5
  66. package/dist/web/server/{fleet-reasoning-panel-D_K48UOT-GN2PA6KT.js → fleet-reasoning-panel-BxC2COxi-GPLMQSTT.js} +9 -9
  67. package/dist/web/server/{fleet-subagent-list-5luKtpds-3OTVFHJQ.js → fleet-subagent-list-CpSYzCIq-JDH2LHSS.js} +1 -1
  68. package/dist/web/server/{fleet-tool-timeline-DwRqQgOj-HUFLGMDV.js → fleet-tool-timeline-IB36_PB2-XJENTO6I.js} +1 -1
  69. package/dist/web/server/{fork-picker-dialog-B9yGc8Au-IL63F2DN.js → fork-picker-dialog-DlINz9UQ-UWIXFDJX.js} +3 -3
  70. package/dist/web/server/{model-selector-list-cb2-ewoA-KIVU6LD3.js → model-selector-list-OYnzNbyu-HBGCNF2L.js} +5 -5
  71. package/dist/web/server/{openui-renderer-Czy5Vo2L-BLXPJD65.js → openui-renderer-Cj7kfqyL-EKJ6JTTQ.js} +4 -4
  72. package/dist/web/server/{prompt-suggestions-BOmHi4-J-C563CHFU.js → prompt-suggestions-D4AEEY7K-RZSP7PWV.js} +3 -3
  73. package/dist/web/server/{repl-panel-yyxhwe4c-7U6HXYPS.js → repl-panel-D5KsoJik-BQKO53JO.js} +9 -9
  74. package/dist/web/server/{resources-panel-j4fAIi9g-5C267IXV.js → resources-panel-CE5pD4vy-V5FXBTYC.js} +2 -2
  75. package/dist/web/server/{router-CgSWrAYc-5UBYSZTJ.js → router-Ci1wxI7I-E2AYMNON.js} +253 -76
  76. package/dist/web/server/{routes-CP_BBhD0-BAWQYGKY.js → routes-CRpm9-Sa-IYK6MUJO.js} +705 -537
  77. package/dist/web/server/server.js +2 -2
  78. package/dist/web/server/{session-insights-panel-BHZyKDTo-LRMAMA3O.js → session-insights-panel-CUhdgvRt-VB2HUCQP.js} +4 -4
  79. package/dist/web/server/{settings-dialog-CxHe8nym-KKXDPTIW.js → settings-dialog-BvkgNflv-GPJ6COQO.js} +14 -10
  80. package/dist/web/server/{subagent-chat-panel-DlSsM59d-DBW7DI3T.js → subagent-chat-panel-CMuvW9Sd-M5TEEGQW.js} +11 -11
  81. package/dist/web/server/{subagents-panel-Txzk8oDb-NRKLASYN.js → subagents-panel-DgfB6_Yy-4INEPE3Y.js} +13 -13
  82. package/dist/web/server/{workspace-panel-BOs-58Cv-SWQBMZSB.js → workspace-panel-bpwj-Veu-Q2CEJMN4.js} +4 -3
  83. package/package.json +1 -1
  84. package/dist/web/client/assets/agent-activity-CDcDNVC6.js +0 -1
  85. package/dist/web/client/assets/artifacts-panel-CObI-DMt.js +0 -1
  86. package/dist/web/client/assets/fleet-reasoning-panel-MtbSdoCv.js +0 -1
  87. package/dist/web/client/assets/fleet-tool-timeline-COzPrwr8.js +0 -1
  88. package/dist/web/client/assets/generative-text-renderer-CDKHv-v_.js +0 -6
  89. package/dist/web/client/assets/globals-DisQPFtV.css +0 -2
  90. package/dist/web/client/assets/horizontal-resize-Bl3AyBJg.js +0 -1
  91. package/dist/web/client/assets/model-selector-list-DQaPFUYt.js +0 -1
  92. package/dist/web/client/assets/prompt-input-DZ4cho_e.js +0 -1
  93. package/dist/web/client/assets/prompt-suggestions-CXM6knMK.js +0 -1
  94. package/dist/web/client/assets/repl-panel-BDQ5MEgV.js +0 -1
  95. package/dist/web/client/assets/right-panel-registry-VVRPktV3.js +0 -2
  96. package/dist/web/client/assets/routes-DAikUNzO.js +0 -16
  97. package/dist/web/client/assets/session-insights-panel-CQdT90Op.js +0 -1
  98. package/dist/web/client/assets/settings-dialog-DS64KmwC.js +0 -1
  99. package/dist/web/client/assets/skeleton-loaders-DjGv9LLA.js +0 -1
  100. package/dist/web/client/assets/subagent-transcript-cxVKYnh9.js +0 -1
  101. package/dist/web/client/assets/subagents-panel-CHC96I68.js +0 -1
  102. package/dist/web/client/assets/tool-result-Baj3CdL_.js +0 -4
  103. package/dist/web/client/assets/ui-preferences-DUEFuJFj.js +0 -1
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  LazyMarkdown,
9
9
  useHoverCapable
10
- } from "./chunk-2TRF62K5.js";
10
+ } from "./chunk-N6NOTURM.js";
11
11
  import {
12
12
  Copy
13
13
  } from "./chunk-2ATMSG7U.js";
@@ -42,8 +42,8 @@ import {
42
42
  cn
43
43
  } from "./chunk-DJMHPJBP.js";
44
44
 
45
- // web/app/dist/server/assets/generative-text-renderer-B3H8tWzp.js
46
- import { Suspense, cloneElement, createContext, lazy, memo, useCallback, useContext, useEffect, useEffectEvent, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
45
+ // web/app/dist/server/assets/virtualized-turn-list-CVAfBX0T.js
46
+ import { Fragment, Suspense, cloneElement, createContext, lazy, memo, useCallback, useContext, useEffect, useEffectEvent, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
47
47
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
48
48
  import { createPortal } from "react-dom";
49
49
  var ChevronLeft = createLucideIcon("chevron-left", [["path", {
@@ -669,7 +669,7 @@ function MessageScroller({ followOutput = true, followThreshold = 56, smooth = t
669
669
  children: /* @__PURE__ */ jsx("div", {
670
670
  ref: contentRef,
671
671
  role: "log",
672
- "aria-live": "polite",
672
+ "aria-live": busy ? "off" : "polite",
673
673
  "aria-relevant": "additions text",
674
674
  "aria-busy": busy,
675
675
  className: contentClassName,
@@ -971,7 +971,7 @@ function FileAttachment({ id, filename, size, isImage, url, onRemove, className,
971
971
  title: filename,
972
972
  children: filename
973
973
  }), size !== void 0 && /* @__PURE__ */ jsx("span", {
974
- className: "text-[10px] text-muted-foreground",
974
+ className: "text-[0.625rem] text-muted-foreground",
975
975
  children: formatFileSize(size)
976
976
  })]
977
977
  })] }),
@@ -1153,7 +1153,7 @@ function PayloadPart({ part }) {
1153
1153
  children: part.title
1154
1154
  }),
1155
1155
  part.text ? /* @__PURE__ */ jsx("pre", {
1156
- className: "m-0 whitespace-pre-wrap break-words px-3 py-3 font-mono text-xs leading-5 text-foreground/80",
1156
+ className: "m-0 whitespace-pre-wrap break-words p-3 font-mono text-xs leading-5 text-foreground/80",
1157
1157
  children: part.text
1158
1158
  }) : null,
1159
1159
  payload ? /* @__PURE__ */ jsxs("details", {
@@ -1257,7 +1257,7 @@ function CopyButton({ text, onCopied }) {
1257
1257
  onMouseDown: (event) => event.stopPropagation(),
1258
1258
  className: cn("flex size-6 items-center justify-center rounded-md transition-[background-color,opacity,transform] duration-150 ease-out active:scale-[0.97]", "bg-transparent opacity-50 hover:bg-an-foreground/10 hover:opacity-100"),
1259
1259
  children: /* @__PURE__ */ jsxs("div", {
1260
- className: "relative h-3.5 w-3.5",
1260
+ className: "relative size-3.5",
1261
1261
  children: [/* @__PURE__ */ jsx(Copy, { className: cn("absolute inset-0 h-3.5 w-3.5 text-an-foreground-muted transition-[opacity,transform] duration-150 ease-out", copied ? "scale-50 opacity-0" : "scale-100 opacity-100") }), /* @__PURE__ */ jsx(Check, { className: cn("absolute inset-0 h-3.5 w-3.5 text-an-foreground-muted transition-[opacity,transform] duration-150 ease-out", copied ? "scale-100 opacity-100" : "scale-50 opacity-0") })]
1262
1262
  })
1263
1263
  });
@@ -1416,7 +1416,7 @@ function buildAssistantElements(parts, opts) {
1416
1416
  }
1417
1417
  const text = textChunks.join("\n\n");
1418
1418
  if (text) elems.push(/* @__PURE__ */ jsx("div", {
1419
- className: "group/assistant-text text-[14px]",
1419
+ className: "group/assistant-text text-[0.875rem]",
1420
1420
  children: /* @__PURE__ */ jsx(TextRendererComponent, {
1421
1421
  content: text,
1422
1422
  isStreaming,
@@ -1487,7 +1487,7 @@ function groupMessages(messages) {
1487
1487
  if (current) turns.push(current);
1488
1488
  return turns;
1489
1489
  }
1490
- var LazyGenerativeTextRenderer = lazy(() => import("./openui-renderer-Czy5Vo2L-BLXPJD65.js").then((n) => n.n).then(({ GenerativeTextRenderer }) => ({ default: GenerativeTextRenderer })));
1490
+ var LazyGenerativeTextRenderer = lazy(() => import("./openui-renderer-Cj7kfqyL-EKJ6JTTQ.js").then((n) => n.n).then(({ GenerativeTextRenderer }) => ({ default: GenerativeTextRenderer })));
1491
1491
  function PlainTextFallback({ className, content }) {
1492
1492
  return /* @__PURE__ */ jsx("div", {
1493
1493
  className: className ? `${className} whitespace-pre-wrap` : "whitespace-pre-wrap",
@@ -1507,6 +1507,189 @@ function FleetGenerativeTextRenderer(props) {
1507
1507
  children: /* @__PURE__ */ jsx(LazyGenerativeTextRenderer, { ...props })
1508
1508
  });
1509
1509
  }
1510
+ function findItemAtOffset(offsets, target, itemCount) {
1511
+ if (itemCount === 0) return 0;
1512
+ let low = 0;
1513
+ let high = itemCount;
1514
+ while (low < high) {
1515
+ const middle = Math.floor((low + high) / 2);
1516
+ if (offsets[middle] <= target) low = middle + 1;
1517
+ else high = middle;
1518
+ }
1519
+ return Math.max(0, Math.min(itemCount - 1, low - 1));
1520
+ }
1521
+ function buildOffsets(itemKeys, measuredHeights, estimateSize, itemGap) {
1522
+ const offsets = [0];
1523
+ for (const [index, key] of itemKeys.entries()) offsets.push(offsets[offsets.length - 1] + (measuredHeights.get(key) ?? estimateSize) + (index < itemKeys.length - 1 ? itemGap : 0));
1524
+ return offsets;
1525
+ }
1526
+ function VirtualizedTurnList({ estimateSize, getItemKey, itemGap = 0, items, overscan = 1.5, renderItem, viewportRef }) {
1527
+ const itemKeys = useMemo(() => items.map((item, index) => getItemKey(item, index)), [getItemKey, items]);
1528
+ const shouldVirtualize = items.length >= 40;
1529
+ const [measuredHeights, setMeasuredHeights] = useState(() => /* @__PURE__ */ new Map());
1530
+ const [viewport, setViewport] = useState({
1531
+ height: 0,
1532
+ scrollTop: 0
1533
+ });
1534
+ const itemKeysRef = useRef(itemKeys);
1535
+ const measuredHeightsRef = useRef(measuredHeights);
1536
+ const estimateSizeRef = useRef(estimateSize);
1537
+ const itemGapRef = useRef(itemGap);
1538
+ const offsetsRef = useRef([0]);
1539
+ const pendingScrollAdjustmentRef = useRef(0);
1540
+ const rowNodesRef = useRef(/* @__PURE__ */ new Map());
1541
+ const rowKeysRef = useRef(/* @__PURE__ */ new WeakMap());
1542
+ const rowObserverRef = useRef(null);
1543
+ const updateViewport = useCallback(() => {
1544
+ const element = viewportRef.current;
1545
+ if (!element) return;
1546
+ const next = {
1547
+ height: element.clientHeight,
1548
+ scrollTop: element.scrollTop
1549
+ };
1550
+ setViewport((current) => current.height === next.height && current.scrollTop === next.scrollTop ? current : next);
1551
+ }, [viewportRef]);
1552
+ const setRowRef = useCallback((key, node) => {
1553
+ const previous = rowNodesRef.current.get(key);
1554
+ if (previous && previous !== node) {
1555
+ rowObserverRef.current?.unobserve(previous);
1556
+ rowNodesRef.current.delete(key);
1557
+ }
1558
+ if (!node) return;
1559
+ rowNodesRef.current.set(key, node);
1560
+ rowKeysRef.current.set(node, key);
1561
+ rowObserverRef.current?.observe(node);
1562
+ }, []);
1563
+ const offsets = useMemo(() => {
1564
+ return buildOffsets(itemKeys, measuredHeights, estimateSize, itemGap);
1565
+ }, [
1566
+ estimateSize,
1567
+ itemGap,
1568
+ itemKeys,
1569
+ measuredHeights
1570
+ ]);
1571
+ useLayoutEffect(() => {
1572
+ updateViewport();
1573
+ }, [items.length, updateViewport]);
1574
+ useLayoutEffect(() => {
1575
+ itemKeysRef.current = itemKeys;
1576
+ measuredHeightsRef.current = measuredHeights;
1577
+ estimateSizeRef.current = estimateSize;
1578
+ itemGapRef.current = itemGap;
1579
+ offsetsRef.current = offsets;
1580
+ }, [
1581
+ estimateSize,
1582
+ itemGap,
1583
+ itemKeys,
1584
+ measuredHeights,
1585
+ offsets
1586
+ ]);
1587
+ useEffect(() => {
1588
+ const element = viewportRef.current;
1589
+ if (!element) return;
1590
+ element.addEventListener("scroll", updateViewport, { passive: true });
1591
+ window.addEventListener("resize", updateViewport);
1592
+ updateViewport();
1593
+ let viewportObserver;
1594
+ if (typeof ResizeObserver !== "undefined") {
1595
+ viewportObserver = new ResizeObserver(updateViewport);
1596
+ viewportObserver.observe(element);
1597
+ }
1598
+ return () => {
1599
+ element.removeEventListener("scroll", updateViewport);
1600
+ window.removeEventListener("resize", updateViewport);
1601
+ viewportObserver?.disconnect();
1602
+ };
1603
+ }, [updateViewport, viewportRef]);
1604
+ const updateMeasuredHeights = useCallback((entries) => {
1605
+ const current = measuredHeightsRef.current;
1606
+ let next = current;
1607
+ for (const entry of entries) {
1608
+ const key = rowKeysRef.current.get(entry.target);
1609
+ const height = entry.contentRect.height;
1610
+ if (!key || height <= 0 || current.get(key) === height) continue;
1611
+ if (next === current) next = new Map(current);
1612
+ next.set(key, height);
1613
+ }
1614
+ if (next === current) return;
1615
+ const element = viewportRef.current;
1616
+ const itemKeys2 = itemKeysRef.current;
1617
+ const nextOffsets = buildOffsets(itemKeys2, next, estimateSizeRef.current, itemGapRef.current);
1618
+ if (element && itemKeys2.length > 0) {
1619
+ const beforeOffsets = offsetsRef.current;
1620
+ const anchorIndex = findItemAtOffset(beforeOffsets, Math.max(0, element.scrollTop), itemKeys2.length);
1621
+ const anchorKey = itemKeys2[anchorIndex];
1622
+ if (anchorKey && anchorIndex > 0) {
1623
+ const offsetDelta = (nextOffsets[itemKeys2.indexOf(anchorKey)] ?? 0) - (beforeOffsets[anchorIndex] ?? 0);
1624
+ if (offsetDelta !== 0) pendingScrollAdjustmentRef.current += offsetDelta;
1625
+ }
1626
+ }
1627
+ measuredHeightsRef.current = next;
1628
+ offsetsRef.current = nextOffsets;
1629
+ setMeasuredHeights(next);
1630
+ }, [viewportRef]);
1631
+ useLayoutEffect(() => {
1632
+ if (!shouldVirtualize || typeof ResizeObserver === "undefined") return;
1633
+ const observer = new ResizeObserver((entries) => updateMeasuredHeights(entries));
1634
+ rowObserverRef.current = observer;
1635
+ for (const node of rowNodesRef.current.values()) observer.observe(node);
1636
+ return () => {
1637
+ observer.disconnect();
1638
+ if (rowObserverRef.current === observer) rowObserverRef.current = null;
1639
+ };
1640
+ }, [shouldVirtualize, updateMeasuredHeights]);
1641
+ useEffect(() => {
1642
+ const current = measuredHeightsRef.current;
1643
+ if (current.size === 0) return;
1644
+ const validKeys = new Set(itemKeys);
1645
+ const next = new Map([...current].filter(([key]) => validKeys.has(key)));
1646
+ if (next.size === current.size) return;
1647
+ measuredHeightsRef.current = next;
1648
+ setMeasuredHeights(next);
1649
+ }, [itemKeys]);
1650
+ useLayoutEffect(() => {
1651
+ const adjustment = pendingScrollAdjustmentRef.current;
1652
+ const element = viewportRef.current;
1653
+ if (!element || adjustment === 0) return;
1654
+ element.scrollTop += adjustment;
1655
+ pendingScrollAdjustmentRef.current = 0;
1656
+ updateViewport();
1657
+ }, [
1658
+ measuredHeights,
1659
+ updateViewport,
1660
+ viewportRef
1661
+ ]);
1662
+ if (!shouldVirtualize) return /* @__PURE__ */ jsx(Fragment$1, { children: items.map((item, index) => /* @__PURE__ */ jsx(Fragment, { children: renderItem(item, index) }, itemKeys[index])) });
1663
+ const totalHeight = offsets[offsets.length - 1] ?? 0;
1664
+ const overscanDistance = Math.max(estimateSize, viewport.height * overscan);
1665
+ const firstVisible = findItemAtOffset(offsets, Math.max(0, viewport.scrollTop - overscanDistance), items.length);
1666
+ const lastVisible = Math.min(items.length - 1, findItemAtOffset(offsets, viewport.scrollTop + viewport.height + overscanDistance, items.length) + 1);
1667
+ return /* @__PURE__ */ jsx("div", {
1668
+ "data-rendered-turn-count": lastVisible - firstVisible + 1,
1669
+ "data-total-turn-count": items.length,
1670
+ "data-virtualized-transcript": "true",
1671
+ style: {
1672
+ height: totalHeight,
1673
+ position: "relative",
1674
+ width: "100%"
1675
+ },
1676
+ children: items.slice(firstVisible, lastVisible + 1).map((item, index) => {
1677
+ const itemIndex = firstVisible + index;
1678
+ const key = itemKeys[itemIndex];
1679
+ return /* @__PURE__ */ jsx("div", {
1680
+ ref: (node) => setRowRef(key, node),
1681
+ "data-virtualized-turn-index": itemIndex,
1682
+ style: {
1683
+ left: 0,
1684
+ position: "absolute",
1685
+ right: 0,
1686
+ top: offsets[itemIndex]
1687
+ },
1688
+ children: renderItem(item, itemIndex)
1689
+ }, key);
1690
+ })
1691
+ });
1692
+ }
1510
1693
 
1511
1694
  export {
1512
1695
  ChevronLeft,
@@ -1520,7 +1703,8 @@ export {
1520
1703
  normalizeAssistantToolParts,
1521
1704
  buildAssistantElements,
1522
1705
  groupMessages,
1523
- FleetGenerativeTextRenderer
1706
+ FleetGenerativeTextRenderer,
1707
+ VirtualizedTurnList
1524
1708
  };
1525
1709
  /**
1526
1710
  * @license lucide-react v1.38.0 - ISC
@@ -1,6 +1,10 @@
1
1
  import {
2
2
  redactSessionLabelSecrets
3
3
  } from "./chunk-QK4CHLVV.js";
4
+ import {
5
+ readStoredValue,
6
+ writeStoredValue
7
+ } from "./chunk-SZJUXVWG.js";
4
8
  import {
5
9
  AnimatePresence,
6
10
  useReducedMotion
@@ -16,7 +20,7 @@ import {
16
20
  cn
17
21
  } from "./chunk-DJMHPJBP.js";
18
22
 
19
- // web/app/dist/server/assets/horizontal-resize-Dy1Vuw1s.js
23
+ // web/app/dist/server/assets/horizontal-resize-2lm4rtju.js
20
24
  import { Children, cloneElement, forwardRef, isValidElement, useId, useState } from "react";
21
25
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
22
26
  var File = createLucideIcon("file", [["path", {
@@ -30,7 +34,7 @@ var FolderOpen = createLucideIcon("folder-open", [["path", {
30
34
  d: "m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",
31
35
  key: "usdka0"
32
36
  }]]);
33
- var RESOURCE_CANVAS_VIEWPORT_RATIO = 0.5;
37
+ var RESOURCE_CANVAS_VIEWPORT_RATIO = 0.4;
34
38
  var DESKTOP_PANEL_ONLY = "min-[960px]:hidden";
35
39
  var WORKSPACE_SPLIT_HIDDEN_BLOCK = "hidden min-[640px]:block";
36
40
  var WORKSPACE_SPLIT_GAP_RESET = "min-[640px]:gap-0";
@@ -184,12 +188,13 @@ function isDaytonaNotConnectedError(error) {
184
188
  }
185
189
  function readStoredWidth(storageKey, defaultWidth, clamp) {
186
190
  if (typeof window === "undefined") return defaultWidth;
187
- const value = Number(window.localStorage.getItem(storageKey));
191
+ const stored = readStoredValue(storageKey);
192
+ if (stored === null) return defaultWidth;
193
+ const value = Number(stored);
188
194
  return Number.isFinite(value) ? clamp(value) : defaultWidth;
189
195
  }
190
196
  function storeStoredWidth(storageKey, width) {
191
- if (typeof window === "undefined") return;
192
- window.localStorage.setItem(storageKey, String(Math.round(width)));
197
+ writeStoredValue(storageKey, String(Math.round(width)));
193
198
  }
194
199
  function startHorizontalResize({ event, getNextWidth, onWidthChange, startWidth, startX }) {
195
200
  event.preventDefault();
@@ -2,7 +2,7 @@ import {
2
2
  cn
3
3
  } from "./chunk-DJMHPJBP.js";
4
4
 
5
- // web/app/dist/server/assets/surfaces-BwzRUxHG.js
5
+ // web/app/dist/server/assets/surfaces-DlT92b6L.js
6
6
  import { useLayoutEffect, useRef, useState } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  var paper = "bg-background shadow-[0_1px_2px_rgba(0,0,0,0.04),0_12px_32px_-16px_rgba(0,0,0,0.12)] dark:bg-popover dark:shadow-none";
@@ -12,7 +12,7 @@ var labelSwap = "col-start-1 row-start-1 flex w-max items-center gap-1.5 leading
12
12
  var labelSwapIn = "opacity-100 blur-none";
13
13
  var labelSwapOut = "pointer-events-none select-none opacity-0 blur-[2px]";
14
14
  var collapsePanel = "h-(--collapsible-panel-height) overflow-hidden transition-[height] duration-200 ease-[cubic-bezier(0.32,0.72,0,1)] data-[ending-style]:h-0 data-[starting-style]:h-0 motion-reduce:transition-none";
15
- var mono = "font-mono text-[11px] tracking-tight";
15
+ var mono = "font-mono text-[0.6875rem] tracking-tight";
16
16
  function ShimmerLabel({ active = true, className, ...props }) {
17
17
  return /* @__PURE__ */ jsx("span", {
18
18
  className: cn(active && "shimmer motion-reduce:animate-none", className),
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-PVJCTQFK.js";
7
7
  import {
8
8
  useHoverCapable
9
- } from "./chunk-2TRF62K5.js";
9
+ } from "./chunk-N6NOTURM.js";
10
10
  import {
11
11
  LoaderCircle
12
12
  } from "./chunk-TNL4YV63.js";
@@ -50,7 +50,7 @@ import {
50
50
  cn
51
51
  } from "./chunk-DJMHPJBP.js";
52
52
 
53
- // web/app/dist/server/assets/prompt-input-JtVsQDA2.js
53
+ // web/app/dist/server/assets/prompt-input-CQuyIgBz.js
54
54
  import { cloneElement, createContext, forwardRef, isValidElement, useCallback, useContext, useEffect, useEffectEvent, useId, useInsertionEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
55
55
  import { jsx, jsxs } from "react/jsx-runtime";
56
56
  import { createPortal } from "react-dom";
@@ -498,15 +498,15 @@ forwardRef(function StatefulButton({ state = "idle", children, loadingText = "Lo
498
498
  children: [
499
499
  state === "loading" ? /* @__PURE__ */ jsx(IconSlot, {
500
500
  keyId: "loading-icon",
501
- children: /* @__PURE__ */ jsx(LoaderCircle, { className: "h-4 w-4 animate-spin" })
501
+ children: /* @__PURE__ */ jsx(LoaderCircle, { className: "size-4 animate-spin" })
502
502
  }) : null,
503
503
  state === "success" ? /* @__PURE__ */ jsx(IconSlot, {
504
504
  keyId: "success-icon",
505
- children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" })
505
+ children: /* @__PURE__ */ jsx(Check, { className: "size-4" })
506
506
  }) : null,
507
507
  state === "error" ? /* @__PURE__ */ jsx(IconSlot, {
508
508
  keyId: "error-icon",
509
- children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
509
+ children: /* @__PURE__ */ jsx(X, { className: "size-4" })
510
510
  }) : null
511
511
  ]
512
512
  }),
@@ -894,7 +894,7 @@ function AnimatedSelectTrigger({ className, children }) {
894
894
  animate: { rotate: ctx.open ? 180 : 0 },
895
895
  transition: ctx.reduce ? { duration: 0 } : CHEVRON_TRANSITION,
896
896
  className: "text-muted-foreground",
897
- children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4" })
897
+ children: /* @__PURE__ */ jsx(ChevronDown, { className: "size-4" })
898
898
  })]
899
899
  });
900
900
  }
@@ -1028,7 +1028,7 @@ function AnimatedSelectItem({ value, disabled = false, className, children }) {
1028
1028
  disabled,
1029
1029
  onClick: () => ctx.select(value),
1030
1030
  className: cn("flex w-full items-center justify-between gap-2 rounded-lg px-2.5 py-1.5 text-left text-sm outline-none transition-colors", selected ? "bg-muted text-foreground" : "text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:bg-muted", "disabled:pointer-events-none disabled:opacity-50", className),
1031
- children: [children, selected ? /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 shrink-0" }) : null]
1031
+ children: [children, selected ? /* @__PURE__ */ jsx(Check, { className: "size-3.5 shrink-0" }) : null]
1032
1032
  })
1033
1033
  });
1034
1034
  }
@@ -1059,7 +1059,9 @@ function PromptInput({ value, defaultValue = "", onValueChange, models = [], mod
1059
1059
  resizeTextarea();
1060
1060
  }, [resizeTextarea]);
1061
1061
  const resizeRef = useRef(resizeTextarea);
1062
- resizeRef.current = resizeTextarea;
1062
+ useEffect(() => {
1063
+ resizeRef.current = resizeTextarea;
1064
+ });
1063
1065
  useEffect(() => {
1064
1066
  const textarea = textareaRef.current;
1065
1067
  if (!textarea || typeof ResizeObserver === "undefined") return;
@@ -43,7 +43,7 @@ import {
43
43
  cn
44
44
  } from "./chunk-DJMHPJBP.js";
45
45
 
46
- // web/app/dist/server/assets/tool-result-BBMNKQkY.js
46
+ // web/app/dist/server/assets/tool-result-Dd8SJ9RU.js
47
47
  import { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
48
48
  import { jsx, jsxs } from "react/jsx-runtime";
49
49
  var Ban = createLucideIcon("ban", [["circle", {
@@ -226,11 +226,11 @@ function CodeBlock({ code, language = "typescript", languageLabel, filename, sta
226
226
  children: filename
227
227
  }) : null,
228
228
  /* @__PURE__ */ jsx("span", {
229
- className: "text-[10px] font-medium uppercase tracking-wide text-muted-foreground/55",
229
+ className: "text-[0.625rem] font-medium uppercase tracking-wide text-muted-foreground/55",
230
230
  children: resolvedLanguageLabel
231
231
  }),
232
232
  showStatus ? /* @__PURE__ */ jsxs("span", {
233
- className: cn("ml-auto inline-flex shrink-0 items-center gap-1 text-[10px] font-medium", streaming ? "text-blue-600 dark:text-blue-400" : "text-emerald-600 dark:text-emerald-400"),
233
+ className: cn("ml-auto inline-flex shrink-0 items-center gap-1 text-[0.625rem] font-medium", streaming ? "text-blue-600 dark:text-blue-400" : "text-emerald-600 dark:text-emerald-400"),
234
234
  children: [streaming ? /* @__PURE__ */ jsx(LoaderCircle, { className: cn("size-3", !reduce && "animate-spin") }) : /* @__PURE__ */ jsx(Check, { className: "size-3" }), streaming ? "Writing" : "Ready"]
235
235
  }) : null,
236
236
  copyable || onCopy ? /* @__PURE__ */ jsx(m.button, {
@@ -247,7 +247,7 @@ function CodeBlock({ code, language = "typescript", languageLabel, filename, sta
247
247
  }), /* @__PURE__ */ jsx("div", {
248
248
  ref: viewportRef,
249
249
  role: streaming ? "log" : void 0,
250
- "aria-live": streaming ? "polite" : void 0,
250
+ "aria-live": streaming ? "off" : void 0,
251
251
  className: "overflow-auto border-t border-foreground/[0.06] py-2 [scrollbar-color:color-mix(in_oklab,var(--muted-foreground)_35%,transparent)_transparent] [scrollbar-width:thin]",
252
252
  style: { maxHeight },
253
253
  children: /* @__PURE__ */ jsx("pre", {
@@ -395,7 +395,7 @@ function FileDiff({ file, lines, status = "streaming", open, defaultOpen = true,
395
395
  children: [/* @__PURE__ */ jsx("div", {
396
396
  ref: viewportRef,
397
397
  "data-slot": "file-diff-viewport",
398
- "aria-live": "polite",
398
+ "aria-live": streaming ? "off" : "polite",
399
399
  className: "scrollbar-hide overflow-auto",
400
400
  style: { maxHeight },
401
401
  children: /* @__PURE__ */ jsxs("div", {
@@ -490,7 +490,7 @@ function ToolResultOutput({ children, language: _language = "bash", label, class
490
490
  return /* @__PURE__ */ jsxs("div", {
491
491
  className: "space-y-1.5",
492
492
  children: [label ? /* @__PURE__ */ jsx("div", {
493
- className: "px-0.5 text-[10px] font-medium uppercase tracking-[0.12em] text-muted-foreground/60",
493
+ className: "px-0.5 text-[0.625rem] font-medium uppercase tracking-[0.12em] text-muted-foreground/60",
494
494
  children: label
495
495
  }) : null, /* @__PURE__ */ jsx("pre", {
496
496
  className: cn("m-0 whitespace-pre-wrap break-words font-mono text-xs leading-5 text-foreground/80", className),
@@ -585,7 +585,7 @@ function ToolResult({ tool, title, children, status = "running", kind = "custom"
585
585
  })
586
586
  }) : null,
587
587
  /* @__PURE__ */ jsx("span", {
588
- className: "min-w-0 truncate font-mono text-[11px] text-muted-foreground/55",
588
+ className: "min-w-0 truncate font-mono text-[0.6875rem] text-muted-foreground/55",
589
589
  children: /* @__PURE__ */ jsx(ActionSwapRollText, {
590
590
  value: toolKey,
591
591
  children: tool
@@ -594,7 +594,7 @@ function ToolResult({ tool, title, children, status = "running", kind = "custom"
594
594
  ]
595
595
  }),
596
596
  /* @__PURE__ */ jsxs("span", {
597
- className: cn("inline-flex shrink-0 items-center gap-1 text-[11px] font-medium", getStatusClass(status)),
597
+ className: cn("inline-flex shrink-0 items-center gap-1 text-[0.6875rem] font-medium", getStatusClass(status)),
598
598
  children: [/* @__PURE__ */ jsx(StatusIcon, {
599
599
  status,
600
600
  reduce
@@ -644,7 +644,7 @@ function ToolResult({ tool, title, children, status = "running", kind = "custom"
644
644
  children: /* @__PURE__ */ jsx(RotateCcw, { className: "size-3.5" })
645
645
  }) : null,
646
646
  /* @__PURE__ */ jsx("span", {
647
- className: "ml-auto text-[11px] text-muted-foreground/55",
647
+ className: "ml-auto text-[0.6875rem] text-muted-foreground/55",
648
648
  children: /* @__PURE__ */ jsx(ActionSwapRollText, {
649
649
  value: status,
650
650
  children: statusLabel
@@ -17,7 +17,7 @@ import "./chunk-JDCCC7A7.js";
17
17
  import "./chunk-L547YHC4.js";
18
18
  import "./chunk-MLKGABMK.js";
19
19
 
20
- // web/app/dist/server/assets/fleet-message-queue-BxycG26e.js
20
+ // web/app/dist/server/assets/fleet-message-queue-j0DCU5Xy.js
21
21
  import { jsx, jsxs } from "react/jsx-runtime";
22
22
  var LANES = [{
23
23
  key: "steering",
@@ -50,7 +50,7 @@ function FleetMessageQueue({ queue, onDelete, className }) {
50
50
  className: "flex min-w-0 items-center gap-2 rounded-lg bg-background/80 px-2 py-1.5 text-sm",
51
51
  children: [
52
52
  /* @__PURE__ */ jsx("span", {
53
- className: "shrink-0 text-[10px] font-medium uppercase tracking-wide text-muted-foreground",
53
+ className: "shrink-0 text-[0.625rem] font-medium uppercase tracking-wide text-muted-foreground",
54
54
  children: label
55
55
  }),
56
56
  /* @__PURE__ */ jsx("span", {
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  FleetPiToolRenderer,
3
3
  fleet_pi_tool_renderer_exports
4
- } from "./chunk-AJJ2S5FF.js";
5
- import "./chunk-2TRF62K5.js";
4
+ } from "./chunk-JQDLJ7KI.js";
5
+ import "./chunk-N6NOTURM.js";
6
6
  import "./chunk-QPNUGF3V.js";
7
7
  import "./chunk-V3S6BVXO.js";
8
- import "./chunk-ANL4B775.js";
8
+ import "./chunk-XLNCWZMZ.js";
9
9
  import "./chunk-2ST2ULW7.js";
10
10
  import "./chunk-BLSX7WHW.js";
11
11
  import "./chunk-3JMESBAT.js";
@@ -13,7 +13,7 @@ import "./chunk-XA42CHF2.js";
13
13
  import "./chunk-P66QQWUM.js";
14
14
  import "./chunk-JIULUYHT.js";
15
15
  import "./chunk-LY5XOHHU.js";
16
- import "./chunk-3PIUR75R.js";
16
+ import "./chunk-YXXRP3NS.js";
17
17
  import "./chunk-2ATMSG7U.js";
18
18
  import "./chunk-HFQTI7AX.js";
19
19
  import "./chunk-HSJMLO36.js";
@@ -36,7 +36,7 @@ import "./chunk-C5X6G26O.js";
36
36
  import "./chunk-ST5I2PLN.js";
37
37
  import "./chunk-AR7O7JXD.js";
38
38
  import "./chunk-ZCVWADNW.js";
39
- import "./chunk-5XX7RKJ6.js";
39
+ import "./chunk-NXJ32VFR.js";
40
40
  import "./chunk-X7D6GFQU.js";
41
41
  import "./chunk-BYXBJQAS.js";
42
42
  import "./chunk-4ZIEVI5O.js";
@@ -5,7 +5,7 @@ import {
5
5
  ShimmerLabel,
6
6
  SwapLabel,
7
7
  collapsePanel
8
- } from "./chunk-ANL4B775.js";
8
+ } from "./chunk-XLNCWZMZ.js";
9
9
  import {
10
10
  Collapsible,
11
11
  CollapsibleContent,
@@ -24,7 +24,7 @@ import {
24
24
  import "./chunk-JDCCC7A7.js";
25
25
  import "./chunk-MLKGABMK.js";
26
26
 
27
- // web/app/dist/server/assets/fleet-reasoning-panel-D_K48UOT.js
27
+ // web/app/dist/server/assets/fleet-reasoning-panel-BxC2COxi.js
28
28
  import { useMemo, useState } from "react";
29
29
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
30
30
  var CELL_SHAPES = {
@@ -66,7 +66,7 @@ function ThinkingIndicator({ label, elapsed, className, ...props }) {
66
66
  children: label
67
67
  }, label),
68
68
  elapsed !== void 0 && /* @__PURE__ */ jsx("span", {
69
- className: cn("font-mono text-[11px] tracking-tight", "text-foreground/30 tabular-nums"),
69
+ className: cn("font-mono text-[0.6875rem] tracking-tight", "text-foreground/30 tabular-nums"),
70
70
  children: elapsed
71
71
  })
72
72
  ]
@@ -80,7 +80,7 @@ function ReasoningPanel({ steps, visibleSteps, streaming, streamingLabel = "Thin
80
80
  onOpenChange,
81
81
  className: cn("w-full max-w-sm", className),
82
82
  children: [/* @__PURE__ */ jsxs(CollapsibleTrigger, {
83
- className: "group/trigger text-foreground/55 hover:text-foreground/90 flex items-center gap-1.5 py-1 text-[13.5px] transition-[color,scale] outline-none active:scale-[0.98]",
83
+ className: "group/trigger text-foreground/55 hover:text-foreground/90 flex items-center gap-1.5 py-1 text-[0.84375rem] transition-[color,scale] outline-none active:scale-[0.98]",
84
84
  children: [/* @__PURE__ */ jsxs(SwapLabel, {
85
85
  active: streaming ? 0 : 1,
86
86
  className: "text-start",
@@ -89,7 +89,7 @@ function ReasoningPanel({ steps, visibleSteps, streaming, streamingLabel = "Thin
89
89
  className: "relative inline-block leading-none",
90
90
  children: streamingLabel
91
91
  }), elapsed !== void 0 && /* @__PURE__ */ jsx("span", {
92
- className: cn("font-mono text-[11px] tracking-tight", "text-foreground/30 tabular-nums"),
92
+ className: cn("font-mono text-[0.6875rem] tracking-tight", "text-foreground/30 tabular-nums"),
93
93
  children: elapsed
94
94
  })] }), /* @__PURE__ */ jsx(Fragment$1, { children: restingLabel })]
95
95
  }), /* @__PURE__ */ jsx(ChevronDown, { className: "size-3.5 shrink-0 opacity-60 transition-transform duration-200 ease-[cubic-bezier(0.32,0.72,0,1)] group-data-open/trigger:rotate-180 group-data-panel-open/trigger:rotate-180 motion-reduce:transition-none" })]
@@ -107,10 +107,10 @@ function ReasoningPanel({ steps, visibleSteps, streaming, streamingLabel = "Thin
107
107
  }), /* @__PURE__ */ jsxs("span", {
108
108
  className: "flex min-w-0 flex-1 flex-col",
109
109
  children: [/* @__PURE__ */ jsx("p", {
110
- className: "text-foreground/90 text-[13.5px] font-medium",
110
+ className: "text-foreground/90 text-[0.84375rem] font-medium",
111
111
  children: step.title
112
112
  }), /* @__PURE__ */ jsx("p", {
113
- className: "text-foreground/50 mt-0.5 text-[13px] leading-relaxed break-words",
113
+ className: "text-foreground/50 mt-0.5 text-[0.8125rem] leading-relaxed break-words",
114
114
  children: step.body
115
115
  })]
116
116
  })]
@@ -143,7 +143,7 @@ function FleetReasoningPanel({ presentation, className, streamingOverride }) {
143
143
  children: activeStep?.body ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(ThinkingIndicator, {
144
144
  label: activeLabel,
145
145
  elapsed,
146
- className: "text-[13px]"
146
+ className: "text-[0.8125rem]"
147
147
  }), /* @__PURE__ */ jsx("p", {
148
148
  className: "pl-4 text-xs font-normal text-muted-foreground",
149
149
  children: activeStep.body
@@ -151,7 +151,7 @@ function FleetReasoningPanel({ presentation, className, streamingOverride }) {
151
151
  label: activeLabel,
152
152
  tick: Math.floor((presentation.elapsedMs ?? 0) / 250),
153
153
  variant: "dots",
154
- className: "items-start gap-2 px-1 py-1 text-left"
154
+ className: "items-start gap-2 p-1 text-left"
155
155
  })
156
156
  }) : null, /* @__PURE__ */ jsx(ReasoningPanel, {
157
157
  steps,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  FleetSubagentList,
3
3
  fleet_subagent_list_exports
4
- } from "./chunk-EBCYJSBR.js";
4
+ } from "./chunk-7SD2ZSEA.js";
5
5
  import "./chunk-42XU6WV7.js";
6
6
  import "./chunk-ON33WDZX.js";
7
7
  import "./chunk-TNL4YV63.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  FleetToolTimeline,
3
3
  fleet_tool_timeline_exports
4
- } from "./chunk-X2R5YPQZ.js";
4
+ } from "./chunk-IJPCV6DH.js";
5
5
  import "./chunk-XA42CHF2.js";
6
6
  import "./chunk-O2DUZJYK.js";
7
7
  import "./chunk-WWJF4RO2.js";
@@ -15,7 +15,7 @@ import "./chunk-JDCCC7A7.js";
15
15
  import "./chunk-L547YHC4.js";
16
16
  import "./chunk-MLKGABMK.js";
17
17
 
18
- // web/app/dist/server/assets/fork-picker-dialog-B9yGc8Au.js
18
+ // web/app/dist/server/assets/fork-picker-dialog-DlINz9UQ.js
19
19
  import { jsx, jsxs } from "react/jsx-runtime";
20
20
  function ForkPickerDialog({ entries, onOpenChange, onPick }) {
21
21
  const open = entries !== null && entries.length > 0;
@@ -28,7 +28,7 @@ function ForkPickerDialog({ entries, onOpenChange, onPick }) {
28
28
  className: "flex max-h-[min(420px,60vh)] flex-col gap-1 overflow-y-auto",
29
29
  children: (entries ?? []).map((entry) => /* @__PURE__ */ jsxs("button", {
30
30
  type: "button",
31
- className: "flex w-full cursor-pointer flex-col gap-0.5 rounded-md px-2 py-2 text-left text-[13px] leading-5 hover:bg-foreground/6",
31
+ className: "flex w-full cursor-pointer flex-col gap-0.5 rounded-md p-2 text-left text-[0.8125rem] leading-5 hover:bg-foreground/6",
32
32
  onClick: () => {
33
33
  onPick(entry.id);
34
34
  onOpenChange(false);
@@ -37,7 +37,7 @@ function ForkPickerDialog({ entries, onOpenChange, onPick }) {
37
37
  className: "truncate font-medium",
38
38
  children: entry.preview
39
39
  }), /* @__PURE__ */ jsx("span", {
40
- className: "truncate font-mono text-[11px] text-foreground/40",
40
+ className: "truncate font-mono text-[0.6875rem] text-foreground/40",
41
41
  children: entry.id
42
42
  })]
43
43
  }, entry.id))