@tutti-os/agent-gui 0.0.131 → 0.0.132

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.
@@ -6,7 +6,7 @@ import {
6
6
  projectAgentConversationVM,
7
7
  reconcileProjectedAgentConversationVM,
8
8
  useProjectedAgentConversation
9
- } from "../chunk-2RSNLVOX.js";
9
+ } from "../chunk-JZS4SWFJ.js";
10
10
  import "../chunk-XNE2ROCP.js";
11
11
  import "../chunk-VMQNG2KI.js";
12
12
  import "../chunk-FGLQZ6I4.js";
package/dist/agent-gui.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AgentGUI
3
- } from "./chunk-WVWSFGBU.js";
3
+ } from "./chunk-G75CPIVV.js";
4
4
  import "./chunk-A4WCTHWS.js";
5
5
  import "./chunk-GCQYN7BR.js";
6
6
  import "./chunk-TUWQV2MC.js";
@@ -8,7 +8,7 @@ import "./chunk-MHOYBRCY.js";
8
8
  import "./chunk-PVTAFUDS.js";
9
9
  import "./chunk-5HIF53K5.js";
10
10
  import "./chunk-R2ZADXRB.js";
11
- import "./chunk-2RSNLVOX.js";
11
+ import "./chunk-JZS4SWFJ.js";
12
12
  import "./chunk-XNE2ROCP.js";
13
13
  import "./chunk-VMQNG2KI.js";
14
14
  import "./chunk-UP3ZDYTN.js";
@@ -63,7 +63,7 @@ import {
63
63
  toLocalShortDateTime,
64
64
  updateAgentComposerDraft,
65
65
  useProjectedAgentConversation
66
- } from "./chunk-2RSNLVOX.js";
66
+ } from "./chunk-JZS4SWFJ.js";
67
67
  import {
68
68
  agentRichTextContentToPromptText,
69
69
  createAgentRichTextInputExtensions,
@@ -37231,4 +37231,4 @@ export {
37231
37231
  resolveAgentGUIAgentTarget,
37232
37232
  AgentGUI
37233
37233
  };
37234
- //# sourceMappingURL=chunk-WVWSFGBU.js.map
37234
+ //# sourceMappingURL=chunk-G75CPIVV.js.map
@@ -5012,11 +5012,11 @@ function AgentTranscriptSkeleton({
5012
5012
  import {
5013
5013
  Fragment as Fragment7,
5014
5014
  memo as memo4,
5015
- useCallback as useCallback11,
5015
+ useCallback as useCallback13,
5016
5016
  useLayoutEffect as useLayoutEffect4,
5017
5017
  useMemo as useMemo7,
5018
- useRef as useRef10,
5019
- useState as useState23
5018
+ useRef as useRef12,
5019
+ useState as useState24
5020
5020
  } from "react";
5021
5021
  import { useVirtualizer } from "@tanstack/react-virtual";
5022
5022
 
@@ -5452,6 +5452,7 @@ function CollapsibleReveal({
5452
5452
  children,
5453
5453
  className,
5454
5454
  innerClassName,
5455
+ onHeightTransitionEnd,
5455
5456
  preMountOnIdle = false
5456
5457
  }) {
5457
5458
  "use memo";
@@ -5463,6 +5464,17 @@ function CollapsibleReveal({
5463
5464
  const heightRef = useRef2(height);
5464
5465
  const measuredHeightRef = useRef2(null);
5465
5466
  const previousExpandedRef = useRef2(expanded);
5467
+ const heightTransitionPendingRef = useRef2(false);
5468
+ const setRootRef = useCallback2(
5469
+ (node) => {
5470
+ if (rootRef.current !== null && node === null && heightTransitionPendingRef.current) {
5471
+ heightTransitionPendingRef.current = false;
5472
+ onHeightTransitionEnd?.();
5473
+ }
5474
+ rootRef.current = node;
5475
+ },
5476
+ [onHeightTransitionEnd]
5477
+ );
5466
5478
  const setRevealHeight = useCallback2((nextHeight) => {
5467
5479
  heightRef.current = nextHeight;
5468
5480
  setHeight(nextHeight);
@@ -5475,11 +5487,18 @@ function CollapsibleReveal({
5475
5487
  setMounted(true);
5476
5488
  return void 0;
5477
5489
  }
5490
+ let mountFrameStarted = false;
5478
5491
  const animationFrame = requestAnimationFrame(() => {
5492
+ mountFrameStarted = true;
5479
5493
  setMounted(true);
5480
5494
  });
5481
- return () => cancelAnimationFrame(animationFrame);
5482
- }, [expanded, mounted, preMountOnIdle]);
5495
+ return () => {
5496
+ cancelAnimationFrame(animationFrame);
5497
+ if (!mountFrameStarted) {
5498
+ onHeightTransitionEnd?.();
5499
+ }
5500
+ };
5501
+ }, [expanded, mounted, onHeightTransitionEnd, preMountOnIdle]);
5483
5502
  useEffect2(() => {
5484
5503
  if (!preMountOnIdle || mounted || expanded) {
5485
5504
  return void 0;
@@ -5508,6 +5527,7 @@ function CollapsibleReveal({
5508
5527
  if (wasExpanded && visible && height === "auto") {
5509
5528
  return void 0;
5510
5529
  }
5530
+ heightTransitionPendingRef.current = true;
5511
5531
  setVisible(false);
5512
5532
  setRevealHeight("0px");
5513
5533
  const animationFrame2 = requestAnimationFrame(() => {
@@ -5518,6 +5538,7 @@ function CollapsibleReveal({
5518
5538
  return () => cancelAnimationFrame(animationFrame2);
5519
5539
  }
5520
5540
  if (!wasExpanded) {
5541
+ heightTransitionPendingRef.current = false;
5521
5542
  setVisible(false);
5522
5543
  setRevealHeight("0px");
5523
5544
  return void 0;
@@ -5526,6 +5547,7 @@ function CollapsibleReveal({
5526
5547
  const cachedHeight = measuredHeightRef.current;
5527
5548
  const measuredHeight = renderedHeight > 0 ? renderedHeight : cachedHeight ?? root.scrollHeight;
5528
5549
  measuredHeightRef.current = measuredHeight;
5550
+ heightTransitionPendingRef.current = true;
5529
5551
  setRevealHeight(`${measuredHeight}px`);
5530
5552
  setVisible(false);
5531
5553
  const animationFrame = requestAnimationFrame(() => {
@@ -5583,17 +5605,19 @@ function CollapsibleReveal({
5583
5605
  }
5584
5606
  if (visible) {
5585
5607
  setRevealHeight("auto");
5586
- return;
5587
- }
5588
- if (!expanded && !preMountOnIdle) {
5608
+ } else if (!expanded && !preMountOnIdle) {
5589
5609
  setMounted(false);
5590
5610
  }
5611
+ if (heightTransitionPendingRef.current) {
5612
+ heightTransitionPendingRef.current = false;
5613
+ onHeightTransitionEnd?.();
5614
+ }
5591
5615
  };
5592
5616
  const rootStyle = { height };
5593
5617
  return /* @__PURE__ */ jsx5(
5594
5618
  "div",
5595
5619
  {
5596
- ref: rootRef,
5620
+ ref: setRootRef,
5597
5621
  className: ["agent-collapsible-reveal", className ?? ""].filter(Boolean).join(" "),
5598
5622
  "data-expanded": preMountOnIdle && expanded ? "true" : visible ? "true" : "false",
5599
5623
  "aria-hidden": visible ? void 0 : true,
@@ -12864,7 +12888,8 @@ function useAgentTurnDisclosureStoreState() {
12864
12888
  }
12865
12889
 
12866
12890
  // shared/agentConversation/components/AgentTurnWorkSection.tsx
12867
- import { BareIconButton } from "@tutti-os/ui-system/components";
12891
+ import { useCallback as useCallback11, useRef as useRef8 } from "react";
12892
+ import { Button as Button2 } from "@tutti-os/ui-system/components";
12868
12893
  import { ChevronDownIcon } from "@tutti-os/ui-system/icons";
12869
12894
 
12870
12895
  // shared/agentConversation/components/agentTurnWorkSectionModel.ts
@@ -13069,12 +13094,47 @@ function AgentTurnWorkSection({
13069
13094
  turnKey,
13070
13095
  showDivider = false,
13071
13096
  disclosureStore,
13097
+ onDisclosureMotionChange,
13072
13098
  renderRow
13073
13099
  }) {
13074
13100
  const { t } = useTranslation();
13075
13101
  const disclosureKey = `${sessionId}:${turnKey}`;
13076
13102
  const expanded = model.collapseEligible ? disclosureStore.expandedOverrides[disclosureKey] ?? false : true;
13077
13103
  const toggleLabel = expanded ? t("agentHost.agentGui.collapseTurnWork") : t("agentHost.agentGui.expandTurnWork");
13104
+ const pendingRevealTransitionsRef = useRef8(0);
13105
+ const disclosureMotionActiveRef = useRef8(false);
13106
+ const collapsibleSectionCount = model.sections.reduce(
13107
+ (count, section) => count + (section.kind === "work" && model.collapseEligible ? 1 : 0),
13108
+ 0
13109
+ );
13110
+ const finishDisclosureMotion = useCallback11(() => {
13111
+ if (!disclosureMotionActiveRef.current) {
13112
+ return;
13113
+ }
13114
+ disclosureMotionActiveRef.current = false;
13115
+ pendingRevealTransitionsRef.current = 0;
13116
+ onDisclosureMotionChange?.(turnKey, false);
13117
+ }, [onDisclosureMotionChange, turnKey]);
13118
+ const startDisclosureMotion = useCallback11(
13119
+ (anchorElement) => {
13120
+ pendingRevealTransitionsRef.current = collapsibleSectionCount;
13121
+ if (collapsibleSectionCount === 0) {
13122
+ return;
13123
+ }
13124
+ disclosureMotionActiveRef.current = true;
13125
+ onDisclosureMotionChange?.(turnKey, true, anchorElement);
13126
+ },
13127
+ [collapsibleSectionCount, onDisclosureMotionChange, turnKey]
13128
+ );
13129
+ const handleRevealTransitionEnd = useCallback11(() => {
13130
+ if (!disclosureMotionActiveRef.current) {
13131
+ return;
13132
+ }
13133
+ pendingRevealTransitionsRef.current -= 1;
13134
+ if (pendingRevealTransitionsRef.current <= 0) {
13135
+ finishDisclosureMotion();
13136
+ }
13137
+ }, [finishDisclosureMotion]);
13078
13138
  return /* @__PURE__ */ jsxs45("div", { className: "grid min-w-0", "data-agent-turn-work-section": turnKey, children: [
13079
13139
  showDivider ? /* @__PURE__ */ jsx64(
13080
13140
  "div",
@@ -13085,31 +13145,42 @@ function AgentTurnWorkSection({
13085
13145
  }
13086
13146
  ) : null,
13087
13147
  model.leadingRows.length > 0 ? /* @__PURE__ */ jsx64("div", { className: "mb-4 grid gap-4", children: renderRows(model.leadingRows, renderRow) }) : null,
13088
- /* @__PURE__ */ jsxs45(
13148
+ /* @__PURE__ */ jsx64(
13089
13149
  "div",
13090
13150
  {
13091
13151
  className: "flex min-h-6 items-center gap-0.5 text-[12px] text-[var(--text-tertiary)]",
13092
13152
  "data-agent-turn-work-header": turnKey,
13093
- children: [
13094
- /* @__PURE__ */ jsx64(AgentTurnDurationLabel, { timing: model.timing }),
13095
- model.collapseEligible ? /* @__PURE__ */ jsx64(
13096
- BareIconButton,
13097
- {
13098
- size: "sm",
13099
- "aria-label": toggleLabel,
13100
- "aria-expanded": expanded,
13101
- title: toggleLabel,
13102
- onClick: () => disclosureStore.setExpandedOverride(disclosureKey, !expanded),
13103
- children: /* @__PURE__ */ jsx64(
13153
+ children: model.collapseEligible ? /* @__PURE__ */ jsxs45(
13154
+ Button2,
13155
+ {
13156
+ type: "button",
13157
+ variant: "chrome",
13158
+ size: "xs",
13159
+ className: "-ml-2 gap-0.5 px-2 text-[12px] font-normal",
13160
+ "aria-label": toggleLabel,
13161
+ "aria-expanded": expanded,
13162
+ title: toggleLabel,
13163
+ onClick: (event) => {
13164
+ startDisclosureMotion(
13165
+ event.currentTarget.closest(
13166
+ "[data-agent-turn-work-header]"
13167
+ )
13168
+ );
13169
+ disclosureStore.setExpandedOverride(disclosureKey, !expanded);
13170
+ },
13171
+ children: [
13172
+ /* @__PURE__ */ jsx64(AgentTurnDurationLabel, { timing: model.timing }),
13173
+ /* @__PURE__ */ jsx64(
13104
13174
  ChevronDownIcon,
13105
13175
  {
13106
13176
  "aria-hidden": "true",
13177
+ "data-icon": "inline-end",
13107
13178
  className: `transition-transform duration-150 ${expanded ? "rotate-0" : "-rotate-90"}`
13108
13179
  }
13109
13180
  )
13110
- }
13111
- ) : null
13112
- ]
13181
+ ]
13182
+ }
13183
+ ) : /* @__PURE__ */ jsx64(AgentTurnDurationLabel, { timing: model.timing })
13113
13184
  }
13114
13185
  ),
13115
13186
  model.sections.map((section, sectionIndex) => {
@@ -13131,6 +13202,7 @@ function AgentTurnWorkSection({
13131
13202
  {
13132
13203
  expanded,
13133
13204
  innerClassName: "grid gap-4 pt-4",
13205
+ onHeightTransitionEnd: handleRevealTransitionEnd,
13134
13206
  children: content
13135
13207
  },
13136
13208
  `work:${firstRow?.renderKey ?? firstRow?.row.id ?? sectionIndex}`
@@ -13314,18 +13386,21 @@ function looksLikeTableSeparator(line) {
13314
13386
  });
13315
13387
  }
13316
13388
 
13389
+ // shared/agentConversation/components/useTurnDisclosureMotion.ts
13390
+ import { useCallback as useCallback12, useRef as useRef11, useState as useState23 } from "react";
13391
+
13317
13392
  // shared/agentConversation/components/AgentMessageLocatorRail.tsx
13318
13393
  import {
13319
13394
  useEffect as useEffect13,
13320
13395
  useLayoutEffect as useLayoutEffect3,
13321
- useRef as useRef9,
13396
+ useRef as useRef10,
13322
13397
  useState as useState22
13323
13398
  } from "react";
13324
13399
 
13325
13400
  // shared/agentConversation/components/agentTranscriptModel.ts
13326
- import { useLayoutEffect as useLayoutEffect2, useRef as useRef8 } from "react";
13401
+ import { useLayoutEffect as useLayoutEffect2, useRef as useRef9 } from "react";
13327
13402
  function useEnteringTranscriptRows(rowKeys) {
13328
- const previousKeysRef = useRef8(null);
13403
+ const previousKeysRef = useRef9(null);
13329
13404
  const previousKeys = previousKeysRef.current;
13330
13405
  const enteringRowKeys = /* @__PURE__ */ new Set();
13331
13406
  if (previousKeys) {
@@ -13464,14 +13539,14 @@ function AgentMessageLocatorRail({
13464
13539
  label,
13465
13540
  onLocate
13466
13541
  }) {
13467
- const locatorRef = useRef9(null);
13468
- const locatorViewportRef = useRef9(null);
13469
- const closePanelTimeoutRef = useRef9(null);
13542
+ const locatorRef = useRef10(null);
13543
+ const locatorViewportRef = useRef10(null);
13544
+ const closePanelTimeoutRef = useRef10(null);
13470
13545
  const [isPanelOpen, setIsPanelOpen] = useState22(false);
13471
13546
  const [shouldRenderPanel, setShouldRenderPanel] = useState22(false);
13472
13547
  const [activeKey, setActiveKey] = useState22(null);
13473
13548
  const [selectedKey, setSelectedKey] = useState22(null);
13474
- const previousAgentResponseByKeyRef = useRef9(null);
13549
+ const previousAgentResponseByKeyRef = useRef10(null);
13475
13550
  const [unreadAgentResponseKeys, setUnreadAgentResponseKeys] = useState22(/* @__PURE__ */ new Set());
13476
13551
  const [visibleFrame, setVisibleFrame] = useState22(null);
13477
13552
  useEffect13(() => {
@@ -13938,6 +14013,83 @@ function selectMessageLocatorItemAtViewportCenter(scrollParent, items) {
13938
14013
  return nearest?.key ?? null;
13939
14014
  }
13940
14015
 
14016
+ // shared/agentConversation/components/useTurnDisclosureMotion.ts
14017
+ var TurnDisclosureMotionController = class {
14018
+ movingTurnKeys = /* @__PURE__ */ new Set();
14019
+ scrollAnchor = null;
14020
+ setTurnMotionActive(turnKey, active, anchorElement) {
14021
+ if (active) {
14022
+ this.movingTurnKeys.add(turnKey);
14023
+ if (anchorElement) {
14024
+ this.scrollAnchor?.release();
14025
+ this.scrollAnchor = lockDisclosureRowPosition(anchorElement);
14026
+ }
14027
+ } else {
14028
+ this.movingTurnKeys.delete(turnKey);
14029
+ if (this.movingTurnKeys.size === 0) {
14030
+ this.scrollAnchor?.release();
14031
+ this.scrollAnchor = null;
14032
+ }
14033
+ }
14034
+ return this.movingTurnKeys.size > 0;
14035
+ }
14036
+ };
14037
+ function lockDisclosureRowPosition(anchorElement) {
14038
+ const scrollParent = findMessageLocatorScrollParent(anchorElement);
14039
+ if (!scrollParent) {
14040
+ return null;
14041
+ }
14042
+ const anchorTop = anchorElement.getBoundingClientRect().top;
14043
+ const previousOverflowAnchor = scrollParent.style.getPropertyValue("overflow-anchor");
14044
+ const previousOverflowAnchorPriority = scrollParent.style.getPropertyPriority("overflow-anchor");
14045
+ scrollParent.style.setProperty("overflow-anchor", "none");
14046
+ const preserveAnchorTop = () => {
14047
+ if (!anchorElement.isConnected) {
14048
+ return;
14049
+ }
14050
+ const topDelta = anchorElement.getBoundingClientRect().top - anchorTop;
14051
+ if (Math.abs(topDelta) < 0.5) {
14052
+ return;
14053
+ }
14054
+ scrollParent.scrollTop += topDelta;
14055
+ };
14056
+ scrollParent.addEventListener("scroll", preserveAnchorTop);
14057
+ return {
14058
+ release: () => {
14059
+ preserveAnchorTop();
14060
+ scrollParent.removeEventListener("scroll", preserveAnchorTop);
14061
+ if (previousOverflowAnchor) {
14062
+ scrollParent.style.setProperty(
14063
+ "overflow-anchor",
14064
+ previousOverflowAnchor,
14065
+ previousOverflowAnchorPriority
14066
+ );
14067
+ } else {
14068
+ scrollParent.style.removeProperty("overflow-anchor");
14069
+ }
14070
+ }
14071
+ };
14072
+ }
14073
+ function useTurnDisclosureMotion() {
14074
+ const motionControllerRef = useRef11(
14075
+ null
14076
+ );
14077
+ if (!motionControllerRef.current) {
14078
+ motionControllerRef.current = new TurnDisclosureMotionController();
14079
+ }
14080
+ const motionController = motionControllerRef.current;
14081
+ const [active, setActive] = useState23(false);
14082
+ const setTurnMotionActive = useCallback12(
14083
+ (turnKey, moving, anchorElement) => {
14084
+ setActive(
14085
+ motionController.setTurnMotionActive(turnKey, moving, anchorElement)
14086
+ );
14087
+ },
14088
+ [motionController]
14089
+ );
14090
+ return [active, setTurnMotionActive];
14091
+ }
14092
+
13941
14093
  // shared/agentConversation/components/AgentTranscriptView.tsx
13942
14094
  import { Fragment as Fragment8, jsx as jsx66, jsxs as jsxs47 } from "react/jsx-runtime";
13943
14095
  var AGENT_TRANSCRIPT_VIRTUALIZATION_OVERSCAN = 6;
@@ -13945,6 +14097,7 @@ var AGENT_TRANSCRIPT_ESTIMATED_TURN_HEIGHT_PX = 280;
13945
14097
  var AGENT_TRANSCRIPT_DISCLOSURE_TURN_GAP_PX = 24;
13946
14098
  var AGENT_TRANSCRIPT_LEGACY_TURN_GAP_PX = 12;
13947
14099
  var AGENT_TRANSCRIPT_FALLBACK_TURN_COUNT = 3;
14100
+ var preventVirtualScrollAdjustment = () => false;
13948
14101
  function transcriptLabelsEqual(previous, next) {
13949
14102
  return previous === next || previous.thinkingLabel === next.thinkingLabel && previous.processing === next.processing && previous.turnSummary === next.turnSummary && previous.rawTimelineJson === next.rawTimelineJson && previous.userMessageLocator === next.userMessageLocator && previous.toolCallsLabel === next.toolCallsLabel;
13950
14103
  }
@@ -13983,10 +14136,11 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
13983
14136
  labels
13984
14137
  }) {
13985
14138
  "use memo";
13986
- const [expandedToolRows, setExpandedToolRows] = useState23({});
14139
+ const [expandedToolRows, setExpandedToolRows] = useState24({});
14140
+ const [hasMovingTurnDisclosure, handleDisclosureMotionChange] = useTurnDisclosureMotion();
13987
14141
  const turnDisclosureStore = useAgentTurnDisclosureStore();
13988
- const virtualizerHostRef = useRef10(null);
13989
- const [virtualScrollElement, setVirtualScrollElement] = useState23(null);
14142
+ const virtualizerHostRef = useRef12(null);
14143
+ const [virtualScrollElement, setVirtualScrollElement] = useState24(null);
13990
14144
  const rowKeys = useMemo7(
13991
14145
  () => conversation.rows.map(transcriptRowKey),
13992
14146
  [conversation.rows]
@@ -14008,7 +14162,7 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
14008
14162
  [conversation.rows, rowKeys, turnGroupIndexByRowIndex]
14009
14163
  );
14010
14164
  const enteringRowKeys = useEnteringTranscriptRows(rowKeys);
14011
- const handleToolGroupExpandedChange = useCallback11(
14165
+ const handleToolGroupExpandedChange = useCallback13(
14012
14166
  (key, expanded) => {
14013
14167
  setExpandedToolRows((previous) => {
14014
14168
  if (previous[key] === expanded) {
@@ -14062,7 +14216,7 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
14062
14216
  [turnGroups]
14063
14217
  );
14064
14218
  const rowVirtualizer = useVirtualizer({
14065
- anchorTo: "end",
14219
+ anchorTo: shouldVirtualize && hasMovingTurnDisclosure ? "start" : "end",
14066
14220
  count: turnGroups.length,
14067
14221
  estimateSize: () => AGENT_TRANSCRIPT_ESTIMATED_TURN_HEIGHT_PX,
14068
14222
  getItemKey: (index) => turnGroups[index]?.key ?? index,
@@ -14070,7 +14224,8 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
14070
14224
  overscan: AGENT_TRANSCRIPT_VIRTUALIZATION_OVERSCAN,
14071
14225
  scrollEndThreshold: 24
14072
14226
  });
14073
- const handleLocateUserMessage = useCallback11(
14227
+ rowVirtualizer.shouldAdjustScrollPositionOnItemSizeChange = shouldVirtualize && hasMovingTurnDisclosure ? preventVirtualScrollAdjustment : void 0;
14228
+ const handleLocateUserMessage = useCallback13(
14074
14229
  (item) => {
14075
14230
  const scrollParent = virtualizerHostRef.current ? findMessageLocatorScrollParent(virtualizerHostRef.current) : null;
14076
14231
  const scrollToRenderedRow = () => {
@@ -14169,6 +14324,7 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
14169
14324
  ({ rowIndex }) => dividerRowIndexes.has(rowIndex)
14170
14325
  ),
14171
14326
  disclosureStore: turnDisclosureStore,
14327
+ onDisclosureMotionChange: handleDisclosureMotionChange,
14172
14328
  renderRow
14173
14329
  },
14174
14330
  group.key
@@ -14282,13 +14438,13 @@ var AgentConversationFlow = memo5(function AgentConversationFlow2({
14282
14438
  });
14283
14439
 
14284
14440
  // shared/agentConversation/projection/useProjectedAgentConversation.ts
14285
- import { useMemo as useMemo8, useRef as useRef11 } from "react";
14441
+ import { useMemo as useMemo8, useRef as useRef13 } from "react";
14286
14442
  function useProjectedAgentConversation({
14287
14443
  conversation,
14288
14444
  detail,
14289
14445
  avoidGroupingEdits = false
14290
14446
  }) {
14291
- const previousConversationRef = useRef11(null);
14447
+ const previousConversationRef = useRef13(null);
14292
14448
  return useMemo8(() => {
14293
14449
  if (!conversation && !detail) {
14294
14450
  previousConversationRef.current = null;
@@ -14344,4 +14500,4 @@ export {
14344
14500
  AgentConversationFlow,
14345
14501
  useProjectedAgentConversation
14346
14502
  };
14347
- //# sourceMappingURL=chunk-2RSNLVOX.js.map
14503
+ //# sourceMappingURL=chunk-JZS4SWFJ.js.map