@tutti-os/agent-gui 0.0.167 → 0.0.169

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 (62) hide show
  1. package/README.md +5 -2
  2. package/dist/{AgentRichTextReadonly-PLUYTH5Y.js → AgentRichTextReadonly-WOIEQ673.js} +5 -5
  3. package/dist/agent-conversation/index.d.ts +2 -2
  4. package/dist/agent-conversation/index.js +7 -7
  5. package/dist/agent-gui.d.ts +3 -2
  6. package/dist/agent-gui.js +15 -15
  7. package/dist/agent-message-center/index.js +6 -6
  8. package/dist/{agentGuiNodeTypes-BXaOdqzS.d.ts → agentGuiNodeTypes-CXL3ISqC.d.ts} +1 -1
  9. package/dist/agents.d.ts +1 -1
  10. package/dist/agents.js +1 -1
  11. package/dist/{chunk-W3EI5EWM.js → chunk-42KTGN4W.js} +2 -2
  12. package/dist/{chunk-GJBSQWIA.js → chunk-42W6JENH.js} +52 -72
  13. package/dist/chunk-42W6JENH.js.map +1 -0
  14. package/dist/{chunk-T7DN6RYO.js → chunk-5EHKHIFG.js} +3 -3
  15. package/dist/{chunk-7W4WEFAY.js → chunk-7M6STXDS.js} +111 -88
  16. package/dist/chunk-7M6STXDS.js.map +1 -0
  17. package/dist/{chunk-HIPSKKXB.js → chunk-BHLX4ZFU.js} +2 -2
  18. package/dist/{chunk-YB5DZYLI.js → chunk-C7RY5XMJ.js} +61 -16
  19. package/dist/chunk-C7RY5XMJ.js.map +1 -0
  20. package/dist/{chunk-66JZ7BQM.js → chunk-CX6XXG6R.js} +4 -1
  21. package/dist/chunk-CX6XXG6R.js.map +1 -0
  22. package/dist/{chunk-W4UPFP2N.js → chunk-EZ6E3LVP.js} +2 -2
  23. package/dist/{chunk-A6UMKVKW.js → chunk-GMALB4L6.js} +4 -4
  24. package/dist/{chunk-OXCWE3B5.js → chunk-J4RQ2RTM.js} +3 -1
  25. package/dist/chunk-J4RQ2RTM.js.map +1 -0
  26. package/dist/{chunk-FVACDLAJ.js → chunk-KDRU3NBW.js} +4 -4
  27. package/dist/{chunk-4SLHS5X5.js → chunk-LQ6CK4GS.js} +95 -93
  28. package/dist/chunk-LQ6CK4GS.js.map +1 -0
  29. package/dist/{chunk-ZEYVTTUK.js → chunk-OUOVA353.js} +4 -4
  30. package/dist/{chunk-KUTB4EGX.js → chunk-QEOAZW53.js} +2 -2
  31. package/dist/{chunk-MJNX2SC6.js → chunk-Y3K2YTLD.js} +29 -9
  32. package/dist/chunk-Y3K2YTLD.js.map +1 -0
  33. package/dist/context-mention-palette/index.js +7 -7
  34. package/dist/{contribution--lqIXGqn.d.ts → contribution-DfA5SxBL.d.ts} +2 -0
  35. package/dist/i18n/index.d.ts +2 -0
  36. package/dist/i18n/index.js +2 -2
  37. package/dist/index.d.ts +8 -0
  38. package/dist/index.js +15 -15
  39. package/dist/mention-search.js +5 -5
  40. package/dist/{types-DVmB_kyD.d.ts → types-CWFDZVkv.d.ts} +3 -0
  41. package/dist/workbench/contribution.d.ts +1 -1
  42. package/dist/workbench/contribution.js +4 -4
  43. package/dist/workbench/index.d.ts +2 -2
  44. package/dist/workbench/index.js +4 -4
  45. package/dist/workbench/sessionTitle.js +2 -2
  46. package/package.json +15 -13
  47. package/dist/chunk-4SLHS5X5.js.map +0 -1
  48. package/dist/chunk-66JZ7BQM.js.map +0 -1
  49. package/dist/chunk-7W4WEFAY.js.map +0 -1
  50. package/dist/chunk-GJBSQWIA.js.map +0 -1
  51. package/dist/chunk-MJNX2SC6.js.map +0 -1
  52. package/dist/chunk-OXCWE3B5.js.map +0 -1
  53. package/dist/chunk-YB5DZYLI.js.map +0 -1
  54. /package/dist/{AgentRichTextReadonly-PLUYTH5Y.js.map → AgentRichTextReadonly-WOIEQ673.js.map} +0 -0
  55. /package/dist/{chunk-W3EI5EWM.js.map → chunk-42KTGN4W.js.map} +0 -0
  56. /package/dist/{chunk-T7DN6RYO.js.map → chunk-5EHKHIFG.js.map} +0 -0
  57. /package/dist/{chunk-HIPSKKXB.js.map → chunk-BHLX4ZFU.js.map} +0 -0
  58. /package/dist/{chunk-W4UPFP2N.js.map → chunk-EZ6E3LVP.js.map} +0 -0
  59. /package/dist/{chunk-A6UMKVKW.js.map → chunk-GMALB4L6.js.map} +0 -0
  60. /package/dist/{chunk-FVACDLAJ.js.map → chunk-KDRU3NBW.js.map} +0 -0
  61. /package/dist/{chunk-ZEYVTTUK.js.map → chunk-OUOVA353.js.map} +0 -0
  62. /package/dist/{chunk-KUTB4EGX.js.map → chunk-QEOAZW53.js.map} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
  agentMentionFilterLabel,
6
6
  agentMentionGroupLabel,
7
7
  mentionGroupExpandCount
8
- } from "./chunk-A6UMKVKW.js";
8
+ } from "./chunk-GMALB4L6.js";
9
9
  import {
10
10
  resolveAgentMentionFileThumbnailUrl,
11
11
  resolveAgentMentionFileVisualKind
@@ -13,13 +13,13 @@ import {
13
13
  import {
14
14
  userAvatarPlaceholderUrl,
15
15
  workspaceAgentActivityStatusLabel
16
- } from "./chunk-HIPSKKXB.js";
16
+ } from "./chunk-BHLX4ZFU.js";
17
17
  import {
18
18
  managedAgentRoundedIconUrl
19
19
  } from "./chunk-ZWLWT3TZ.js";
20
20
  import {
21
21
  translate
22
- } from "./chunk-W4UPFP2N.js";
22
+ } from "./chunk-EZ6E3LVP.js";
23
23
 
24
24
  // agent-gui/agentGuiNode/AgentFileMentionPalette.tsx
25
25
  import {
@@ -517,4 +517,4 @@ export {
517
517
  AgentFileMentionPalette,
518
518
  AgentContextMentionPalette
519
519
  };
520
- //# sourceMappingURL=chunk-FVACDLAJ.js.map
520
+ //# sourceMappingURL=chunk-KDRU3NBW.js.map
@@ -12,7 +12,7 @@ import {
12
12
  resolveAgentGuiSessionProviderFlatIconUrl,
13
13
  resolveNextAgentGUIConversationRailWidthPx,
14
14
  shouldAutoCollapseAgentGUIConversationRail
15
- } from "./chunk-MJNX2SC6.js";
15
+ } from "./chunk-Y3K2YTLD.js";
16
16
  import {
17
17
  resolveAgentGuiWorkbenchProviderLabel
18
18
  } from "./chunk-SZVHT57M.js";
@@ -31,7 +31,7 @@ import {
31
31
  resolveAgentGUIFirstUserMessageDisplayPrompt,
32
32
  resolveAgentGUIProviderDisplayLabel,
33
33
  resolveAgentGUIProviderIdentity
34
- } from "./chunk-W3EI5EWM.js";
34
+ } from "./chunk-42KTGN4W.js";
35
35
  import {
36
36
  AgentConversationFlow,
37
37
  Button,
@@ -65,7 +65,7 @@ import {
65
65
  toLocalShortDateTime,
66
66
  updateAgentComposerDraft,
67
67
  useProjectedAgentConversation
68
- } from "./chunk-YB5DZYLI.js";
68
+ } from "./chunk-C7RY5XMJ.js";
69
69
  import {
70
70
  agentRichTextContentToPromptText,
71
71
  createAgentRichTextInputExtensions,
@@ -75,7 +75,7 @@ import {
75
75
  plainTextToAgentRichTextInlineContent,
76
76
  skillDescriptionForDisplay,
77
77
  skillTriggerForPrefix
78
- } from "./chunk-GJBSQWIA.js";
78
+ } from "./chunk-42W6JENH.js";
79
79
  import {
80
80
  AgentEnvPanelActionProvider
81
81
  } from "./chunk-THBCAUBR.js";
@@ -90,18 +90,18 @@ import {
90
90
  AgentFileMentionPalette,
91
91
  agentMentionItemKey,
92
92
  isAgentMentionItemDisabled
93
- } from "./chunk-FVACDLAJ.js";
93
+ } from "./chunk-KDRU3NBW.js";
94
94
  import {
95
95
  normalizeAgentGUIAgents,
96
96
  projectAgentGUIAgentsToTargets
97
- } from "./chunk-66JZ7BQM.js";
97
+ } from "./chunk-CX6XXG6R.js";
98
98
  import {
99
99
  AGENT_MENTION_FILTER_TAB_ORDER,
100
100
  AgentMentionSearchController,
101
101
  DEFAULT_AGENT_MENTION_FILTER,
102
102
  agentGuiScheduler,
103
103
  buildWorkspaceAgentActivityListViewModel
104
- } from "./chunk-A6UMKVKW.js";
104
+ } from "./chunk-GMALB4L6.js";
105
105
  import {
106
106
  AGENT_RICH_TEXT_CARET_ANCHOR,
107
107
  agentComposerFileMentionReferences,
@@ -118,7 +118,7 @@ import {
118
118
  parseMentionItemFromHref,
119
119
  remainingAgentComposerPromptAssetSlots,
120
120
  updateAgentComposerFileMentions
121
- } from "./chunk-7W4WEFAY.js";
121
+ } from "./chunk-7M6STXDS.js";
122
122
  import {
123
123
  AgentInteractivePromptSurface,
124
124
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
@@ -128,7 +128,7 @@ import {
128
128
  dispatchAgentPlanPromptAction,
129
129
  latestPlanTurnId,
130
130
  planImplementationPromptFromPlanTurn
131
- } from "./chunk-ZEYVTTUK.js";
131
+ } from "./chunk-OUOVA353.js";
132
132
  import {
133
133
  useEngineSelector
134
134
  } from "./chunk-2RQM7PJN.js";
@@ -138,7 +138,7 @@ import {
138
138
  blobToBase64,
139
139
  normalizeAgentApprovalPurpose,
140
140
  resolveWorkspaceLinkAction
141
- } from "./chunk-T7DN6RYO.js";
141
+ } from "./chunk-5EHKHIFG.js";
142
142
  import {
143
143
  AgentTargetPresentationProvider,
144
144
  cn,
@@ -156,7 +156,7 @@ import {
156
156
  useAgentHostApi,
157
157
  useOptionalAgentActivityRuntime,
158
158
  useOptionalAgentHostApi
159
- } from "./chunk-KUTB4EGX.js";
159
+ } from "./chunk-QEOAZW53.js";
160
160
  import {
161
161
  MANAGED_AGENT_ICON_FALLBACK_URL,
162
162
  MANAGED_AGENT_ICON_URLS,
@@ -166,7 +166,7 @@ import {
166
166
  AgentGuiI18nProvider,
167
167
  translate,
168
168
  useTranslation
169
- } from "./chunk-W4UPFP2N.js";
169
+ } from "./chunk-EZ6E3LVP.js";
170
170
  import {
171
171
  isBetaAgentProvider,
172
172
  normalizeManagedAgentProvider
@@ -3717,6 +3717,7 @@ function createSharedAgentGUIAgentTarget(input) {
3717
3717
  label: input.label,
3718
3718
  ...badge ? { badge } : {},
3719
3719
  ...input.ownerLabel?.trim() ? { ownerLabel: input.ownerLabel.trim() } : {},
3720
+ ...input.ownerDeviceLabel?.trim() ? { ownerDeviceLabel: input.ownerDeviceLabel.trim() } : {},
3720
3721
  ...input.iconUrl?.trim() ? { iconUrl: input.iconUrl.trim() } : {},
3721
3722
  ...input.maskIconUrl?.trim() ? { maskIconUrl: input.maskIconUrl.trim() } : {},
3722
3723
  ...input.unavailableReason?.trim() ? { unavailableReason: input.unavailableReason.trim() } : {},
@@ -3823,6 +3824,7 @@ function normalizeAgentGUIAgentTarget(target) {
3823
3824
  maskIconUrl,
3824
3825
  heroImageUrl,
3825
3826
  ownerLabel,
3827
+ ownerDeviceLabel,
3826
3828
  unavailableReason,
3827
3829
  ...rest
3828
3830
  } = target;
@@ -3851,6 +3853,7 @@ function normalizeAgentGUIAgentTarget(target) {
3851
3853
  ...maskIconUrl?.trim() ? { maskIconUrl: maskIconUrl.trim() } : {},
3852
3854
  ...heroImageUrl?.trim() ? { heroImageUrl: heroImageUrl.trim() } : {},
3853
3855
  ...ownerLabel?.trim() ? { ownerLabel: ownerLabel.trim() } : {},
3856
+ ...ownerDeviceLabel?.trim() ? { ownerDeviceLabel: ownerDeviceLabel.trim() } : {},
3854
3857
  ...unavailableReason?.trim() ? { unavailableReason: unavailableReason.trim() } : {}
3855
3858
  };
3856
3859
  }
@@ -17034,7 +17037,6 @@ function hasInlineOverflow(element) {
17034
17037
  function useComposerLayout({
17035
17038
  isHeroLayout,
17036
17039
  inputDisabled,
17037
- paletteDraftPrompt,
17038
17040
  showFileMentionPalette,
17039
17041
  showFloatingCommandMenu,
17040
17042
  previewMode,
@@ -17205,24 +17207,20 @@ function useComposerLayout({
17205
17207
  (currentHeight) => currentHeight === textHeight ? currentHeight : textHeight
17206
17208
  );
17207
17209
  };
17208
- measure();
17209
17210
  const resizeObserver = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(measure);
17210
17211
  resizeObserver?.observe(inputArea);
17211
17212
  resizeObserver?.observe(editor);
17212
- for (const child of Array.from(inputArea.querySelectorAll("*"))) {
17213
- resizeObserver?.observe(child);
17213
+ for (const attachmentArea of Array.from(
17214
+ inputArea.querySelectorAll(
17215
+ '[data-testid="agent-gui-composer-image-drafts"], [data-testid="agent-gui-composer-file-drafts"]'
17216
+ )
17217
+ )) {
17218
+ resizeObserver?.observe(attachmentArea);
17214
17219
  }
17215
- window.addEventListener("resize", measure);
17216
17220
  return () => {
17217
17221
  resizeObserver?.disconnect();
17218
- window.removeEventListener("resize", measure);
17219
17222
  };
17220
- }, [
17221
- draftImages.length,
17222
- draftLargeTexts.length,
17223
- isHeroLayout,
17224
- paletteDraftPrompt
17225
- ]);
17223
+ }, [draftImages.length, draftLargeTexts.length, isHeroLayout]);
17226
17224
  const composerStyle = useMemo20(
17227
17225
  () => isHeroLayout ? void 0 : {
17228
17226
  // The dock keeps only the collapsed 56px input row in flow; a
@@ -23967,6 +23965,53 @@ function AgentHandoffMenu({
23967
23965
  }) {
23968
23966
  const [isIconPlaying, setIsIconPlaying] = useState21(false);
23969
23967
  const menuDisabled = disabled || targets.length === 0;
23968
+ const tooltip = labels.tooltip.trim();
23969
+ const trigger = /* @__PURE__ */ jsx36("span", { className: "inline-flex", children: /* @__PURE__ */ jsx36(
23970
+ SelectTrigger2,
23971
+ {
23972
+ size: "sm",
23973
+ "aria-label": labels.action,
23974
+ "data-testid": testId,
23975
+ onClick: isolateTriggerEvents ? (event) => {
23976
+ event.stopPropagation();
23977
+ } : void 0,
23978
+ onKeyDown: isolateTriggerEvents ? (event) => {
23979
+ event.stopPropagation();
23980
+ } : void 0,
23981
+ onPointerDown: isolateTriggerEvents ? (event) => {
23982
+ event.stopPropagation();
23983
+ } : void 0,
23984
+ onBlur: () => {
23985
+ setIsIconPlaying(false);
23986
+ },
23987
+ onFocus: () => {
23988
+ setIsIconPlaying(true);
23989
+ },
23990
+ onMouseEnter: () => {
23991
+ setIsIconPlaying(true);
23992
+ },
23993
+ onMouseLeave: () => {
23994
+ setIsIconPlaying(false);
23995
+ },
23996
+ className: cn(
23997
+ AgentGUINode_styles_default.composerMenuTrigger,
23998
+ AgentGUINode_styles_default.composerProviderSelect,
23999
+ AgentGUINode_styles_default.composerHandoffTrigger,
24000
+ "w-auto max-w-[180px] [&>svg:last-child]:hidden",
24001
+ triggerClassName
24002
+ ),
24003
+ children: /* @__PURE__ */ jsxs26("span", { className: "flex min-w-0 items-center gap-1.5", children: [
24004
+ /* @__PURE__ */ jsx36(
24005
+ AgentComposerHandoffIcon,
24006
+ {
24007
+ disabled: menuDisabled,
24008
+ isPlaying: isIconPlaying
24009
+ }
24010
+ ),
24011
+ !iconOnly ? /* @__PURE__ */ jsx36("span", { className: "min-w-0 truncate", children: triggerLabel }) : null
24012
+ ] })
24013
+ }
24014
+ ) });
23970
24015
  return /* @__PURE__ */ jsx36(
23971
24016
  "span",
23972
24017
  {
@@ -23995,55 +24040,10 @@ function AgentHandoffMenu({
23995
24040
  onSelect(target);
23996
24041
  },
23997
24042
  children: [
23998
- /* @__PURE__ */ jsx36(TooltipProvider3, { delayDuration: 120, children: /* @__PURE__ */ jsxs26(Tooltip3, { children: [
23999
- /* @__PURE__ */ jsx36(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx36("span", { className: "inline-flex", children: /* @__PURE__ */ jsx36(
24000
- SelectTrigger2,
24001
- {
24002
- size: "sm",
24003
- "aria-label": labels.action,
24004
- "data-testid": testId,
24005
- onClick: isolateTriggerEvents ? (event) => {
24006
- event.stopPropagation();
24007
- } : void 0,
24008
- onKeyDown: isolateTriggerEvents ? (event) => {
24009
- event.stopPropagation();
24010
- } : void 0,
24011
- onPointerDown: isolateTriggerEvents ? (event) => {
24012
- event.stopPropagation();
24013
- } : void 0,
24014
- onBlur: () => {
24015
- setIsIconPlaying(false);
24016
- },
24017
- onFocus: () => {
24018
- setIsIconPlaying(true);
24019
- },
24020
- onMouseEnter: () => {
24021
- setIsIconPlaying(true);
24022
- },
24023
- onMouseLeave: () => {
24024
- setIsIconPlaying(false);
24025
- },
24026
- className: cn(
24027
- AgentGUINode_styles_default.composerMenuTrigger,
24028
- AgentGUINode_styles_default.composerProviderSelect,
24029
- AgentGUINode_styles_default.composerHandoffTrigger,
24030
- "w-auto max-w-[180px] [&>svg:last-child]:hidden",
24031
- triggerClassName
24032
- ),
24033
- children: /* @__PURE__ */ jsxs26("span", { className: "flex min-w-0 items-center gap-1.5", children: [
24034
- /* @__PURE__ */ jsx36(
24035
- AgentComposerHandoffIcon,
24036
- {
24037
- disabled: menuDisabled,
24038
- isPlaying: isIconPlaying
24039
- }
24040
- ),
24041
- !iconOnly ? /* @__PURE__ */ jsx36("span", { className: "min-w-0 truncate", children: triggerLabel }) : null
24042
- ] })
24043
- }
24044
- ) }) }),
24045
- /* @__PURE__ */ jsx36(TooltipContent3, { side: "top", children: labels.tooltip })
24046
- ] }) }),
24043
+ tooltip ? /* @__PURE__ */ jsx36(TooltipProvider3, { delayDuration: 120, children: /* @__PURE__ */ jsxs26(Tooltip3, { children: [
24044
+ /* @__PURE__ */ jsx36(TooltipTrigger3, { asChild: true, children: trigger }),
24045
+ /* @__PURE__ */ jsx36(TooltipContent3, { side: "top", children: tooltip })
24046
+ ] }) }) : trigger,
24047
24047
  /* @__PURE__ */ jsx36(
24048
24048
  SelectContent2,
24049
24049
  {
@@ -24060,6 +24060,8 @@ function AgentHandoffMenu({
24060
24060
  self: labels.self,
24061
24061
  shared: labels.shared
24062
24062
  });
24063
+ const ownerDeviceLabel = target.ownerDeviceLabel?.trim() ?? "";
24064
+ const deviceSourceLabel = ownerDeviceLabel ? labels.deviceSource?.(ownerDeviceLabel) ?? ownerDeviceLabel : null;
24063
24065
  return /* @__PURE__ */ jsx36(
24064
24066
  SelectItem2,
24065
24067
  {
@@ -24089,7 +24091,10 @@ function AgentHandoffMenu({
24089
24091
  ] }),
24090
24092
  /* @__PURE__ */ jsxs26("span", { className: "flex min-w-0 flex-col gap-0.5", children: [
24091
24093
  /* @__PURE__ */ jsx36("span", { className: "min-w-0 truncate", children: target.label }),
24092
- ownershipLabel ? /* @__PURE__ */ jsx36("span", { className: "min-w-0 truncate text-[11px] leading-none text-[var(--agent-gui-text-secondary)]", children: ownershipLabel }) : null
24094
+ ownershipLabel || deviceSourceLabel ? /* @__PURE__ */ jsxs26("span", { className: "flex min-w-0 items-center gap-1.5 truncate text-[11px] leading-none text-[var(--agent-gui-text-secondary)]", children: [
24095
+ ownershipLabel ? /* @__PURE__ */ jsx36("span", { children: ownershipLabel }) : null,
24096
+ deviceSourceLabel ? /* @__PURE__ */ jsx36("span", { children: deviceSourceLabel }) : null
24097
+ ] }) : null
24093
24098
  ] })
24094
24099
  ] })
24095
24100
  },
@@ -24253,6 +24258,7 @@ function ComposerFooter({
24253
24258
  disabled: handoffDisabled,
24254
24259
  labels: {
24255
24260
  action: effectiveHandoffLabel,
24261
+ deviceSource: labels.handoffTargetDeviceSource,
24256
24262
  menu: effectiveHandoffMenuLabel,
24257
24263
  self: labels.handoffTargetSelf,
24258
24264
  shared: labels.handoffTargetShared,
@@ -26870,7 +26876,6 @@ function AgentComposer(props) {
26870
26876
  const layout = useComposerLayout({
26871
26877
  isHeroLayout,
26872
26878
  inputDisabled,
26873
- paletteDraftPrompt,
26874
26879
  showFileMentionPalette,
26875
26880
  showFloatingCommandMenu,
26876
26881
  previewMode,
@@ -34989,32 +34994,24 @@ function useAgentGUIDetailScroll(input) {
34989
34994
  return;
34990
34995
  }
34991
34996
  const captureScrollAnchor = () => {
34992
- let scrollTop = timeline.scrollTop;
34993
34997
  const previousAnchor = timelineScrollAnchorRef.current;
34994
- const geometryChanged = previousAnchor?.conversationId !== activeConversationId || previousAnchor.scrollHeight !== timeline.scrollHeight || previousAnchor.clientHeight !== timeline.clientHeight;
34995
- const inferredUserScrollAway = previousAnchor?.conversationId === activeConversationId && !geometryChanged && scrollTop < previousAnchor.scrollTop - 1;
34998
+ if (!previousAnchor || previousAnchor.conversationId !== activeConversationId) {
34999
+ return;
35000
+ }
35001
+ const scrollTop = timeline.scrollTop;
35002
+ const inferredUserScrollAway = scrollTop < previousAnchor.scrollTop - 1;
34996
35003
  const explicitUserScrollAway = userScrollAwayIntentConversationRef.current === activeConversationId;
34997
35004
  if (explicitUserScrollAway || inferredUserScrollAway) {
34998
35005
  bottomLockOwnerRef.current = null;
34999
35006
  userScrollAwayIntentConversationRef.current = null;
35000
35007
  }
35001
- if (geometryChanged && bottomLockOwnerRef.current === activeConversationId) {
35002
- const maxScrollTop = Math.max(
35003
- 0,
35004
- timeline.scrollHeight - timeline.clientHeight
35005
- );
35006
- if (maxScrollTop - scrollTop > AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX) {
35007
- setTimelineScrollTopInstantly(timeline, maxScrollTop);
35008
- scrollTop = maxScrollTop;
35009
- }
35010
- }
35011
35008
  timelineScrollAnchorRef.current = {
35012
35009
  conversationId: activeConversationId,
35013
- scrollHeight: timeline.scrollHeight,
35010
+ scrollHeight: previousAnchor.scrollHeight,
35014
35011
  scrollTop,
35015
- clientHeight: timeline.clientHeight
35012
+ clientHeight: previousAnchor.clientHeight
35016
35013
  };
35017
- const atBottom = timeline.scrollHeight - scrollTop - timeline.clientHeight <= AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX;
35014
+ const atBottom = previousAnchor.scrollHeight - scrollTop - previousAnchor.clientHeight <= AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX;
35018
35015
  if (atBottom) {
35019
35016
  bottomLockOwnerRef.current = activeConversationId;
35020
35017
  }
@@ -35026,7 +35023,7 @@ function useAgentGUIDetailScroll(input) {
35026
35023
  if (activeConversationId === viewModel.rail.activeConversationId && viewModel.detail.hasOlderMessages && !viewModel.detail.isLoadingOlderMessages && scrollTop <= AGENT_GUI_TOP_HISTORY_PREFETCH_THRESHOLD_PX) {
35027
35024
  pendingPrependScrollAnchorRef.current = {
35028
35025
  conversationId: activeConversationId,
35029
- scrollHeight: timeline.scrollHeight,
35026
+ scrollHeight: previousAnchor.scrollHeight,
35030
35027
  scrollTop
35031
35028
  };
35032
35029
  actions.loadOlderConversationMessages();
@@ -35558,6 +35555,7 @@ function useAgentGUIDetailModel(input) {
35558
35555
  handoffConversation: labels.handoffConversation,
35559
35556
  handoffConversationTooltip: labels.handoffConversationTooltip,
35560
35557
  handoffConversationMenu: labels.handoffConversationMenu,
35558
+ handoffTargetDeviceSource: labels.handoffTargetDeviceSource,
35561
35559
  handoffTargetSelf: labels.handoffTargetSelf,
35562
35560
  handoffTargetShared: labels.handoffTargetShared,
35563
35561
  providerSwitchLabel: labels.providerSwitchLabel,
@@ -35584,6 +35582,7 @@ function useAgentGUIDetailModel(input) {
35584
35582
  labels.handoffConversation,
35585
35583
  labels.handoffConversationTooltip,
35586
35584
  labels.handoffConversationMenu,
35585
+ labels.handoffTargetDeviceSource,
35587
35586
  labels.handoffTargetSelf,
35588
35587
  labels.handoffTargetShared,
35589
35588
  labels.inheritedUnavailable,
@@ -39281,6 +39280,9 @@ function useAgentGUIViewLabels(input) {
39281
39280
  "agentHost.agentGui.handoffConversationTooltip"
39282
39281
  ),
39283
39282
  handoffConversationMenu: t("agentHost.agentGui.handoffConversationMenu"),
39283
+ handoffTargetDeviceSource: (deviceLabel) => t("agentHost.agentGui.handoffTargetDeviceSource", {
39284
+ device: deviceLabel
39285
+ }),
39284
39286
  handoffTargetSelf: t("agentHost.agentGui.handoffTargetSelf"),
39285
39287
  handoffTargetShared: t("agentHost.agentGui.handoffTargetShared")
39286
39288
  }),
@@ -40040,4 +40042,4 @@ export {
40040
40042
  AgentHandoffMenu,
40041
40043
  AgentGUI
40042
40044
  };
40043
- //# sourceMappingURL=chunk-4SLHS5X5.js.map
40045
+ //# sourceMappingURL=chunk-LQ6CK4GS.js.map