@tutti-os/agent-gui 0.0.140 → 0.0.142

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 (29) hide show
  1. package/dist/{AgentRichTextReadonly-ITYHQCN5.js → AgentRichTextReadonly-QIQCYZAG.js} +3 -3
  2. package/dist/agent-conversation/index.js +3 -3
  3. package/dist/agent-gui.d.ts +0 -5
  4. package/dist/agent-gui.js +7 -7
  5. package/dist/app/renderer/agentactivity.css +9 -1
  6. package/dist/{chunk-XUFVBZUT.js → chunk-4V3QEPKX.js} +3 -3
  7. package/dist/{chunk-OXCHXPBD.js → chunk-5ZZMG4ZB.js} +2 -2
  8. package/dist/{chunk-MMEHSIWJ.js → chunk-LIQWMDME.js} +2 -2
  9. package/dist/{chunk-AVXN6UMO.js → chunk-N2NZASIS.js} +2 -2
  10. package/dist/{chunk-WUMJJOK6.js → chunk-O764HQNF.js} +6 -3
  11. package/dist/chunk-O764HQNF.js.map +1 -0
  12. package/dist/{chunk-ORPU3AJK.js → chunk-QRBQ6OHG.js} +513 -446
  13. package/dist/chunk-QRBQ6OHG.js.map +1 -0
  14. package/dist/{chunk-WM63XUAL.js → chunk-TJW5NWWH.js} +2 -2
  15. package/dist/context-mention-palette/index.js +3 -3
  16. package/dist/index.d.ts +31 -33
  17. package/dist/index.js +7 -7
  18. package/dist/mention-search.js +2 -2
  19. package/dist/workbench/contribution.js +1 -1
  20. package/dist/workbench/index.js +1 -1
  21. package/package.json +13 -13
  22. package/dist/chunk-ORPU3AJK.js.map +0 -1
  23. package/dist/chunk-WUMJJOK6.js.map +0 -1
  24. /package/dist/{AgentRichTextReadonly-ITYHQCN5.js.map → AgentRichTextReadonly-QIQCYZAG.js.map} +0 -0
  25. /package/dist/{chunk-XUFVBZUT.js.map → chunk-4V3QEPKX.js.map} +0 -0
  26. /package/dist/{chunk-OXCHXPBD.js.map → chunk-5ZZMG4ZB.js.map} +0 -0
  27. /package/dist/{chunk-MMEHSIWJ.js.map → chunk-LIQWMDME.js.map} +0 -0
  28. /package/dist/{chunk-AVXN6UMO.js.map → chunk-N2NZASIS.js.map} +0 -0
  29. /package/dist/{chunk-WM63XUAL.js.map → chunk-TJW5NWWH.js.map} +0 -0
@@ -12,7 +12,7 @@ import {
12
12
  resolveAgentGuiSessionProviderFlatIconUrl,
13
13
  resolveNextAgentGUIConversationRailWidthPx,
14
14
  shouldAutoCollapseAgentGUIConversationRail
15
- } from "./chunk-MMEHSIWJ.js";
15
+ } from "./chunk-LIQWMDME.js";
16
16
  import {
17
17
  AGENT_PROVIDERS,
18
18
  AGENT_PROVIDER_LABEL,
@@ -63,7 +63,7 @@ import {
63
63
  toLocalShortDateTime,
64
64
  updateAgentComposerDraft,
65
65
  useProjectedAgentConversation
66
- } from "./chunk-XUFVBZUT.js";
66
+ } from "./chunk-4V3QEPKX.js";
67
67
  import {
68
68
  agentRichTextContentToPromptText,
69
69
  createAgentRichTextInputExtensions,
@@ -73,7 +73,7 @@ import {
73
73
  plainTextToAgentRichTextInlineContent,
74
74
  skillDescriptionForDisplay,
75
75
  skillTriggerForPrefix
76
- } from "./chunk-AVXN6UMO.js";
76
+ } from "./chunk-N2NZASIS.js";
77
77
  import {
78
78
  AgentEnvPanelActionProvider
79
79
  } from "./chunk-FM42UN2J.js";
@@ -85,7 +85,7 @@ import {
85
85
  AgentFileMentionPalette,
86
86
  agentMentionItemKey,
87
87
  isAgentMentionItemDisabled
88
- } from "./chunk-WM63XUAL.js";
88
+ } from "./chunk-TJW5NWWH.js";
89
89
  import {
90
90
  normalizeAgentGUIAgents,
91
91
  projectAgentGUIAgentsToInternalTargets
@@ -96,7 +96,7 @@ import {
96
96
  DEFAULT_AGENT_MENTION_FILTER,
97
97
  agentGuiScheduler,
98
98
  buildWorkspaceAgentActivityListViewModel
99
- } from "./chunk-OXCHXPBD.js";
99
+ } from "./chunk-5ZZMG4ZB.js";
100
100
  import {
101
101
  isLocalImagePath
102
102
  } from "./chunk-JDVP33S5.js";
@@ -116,7 +116,7 @@ import {
116
116
  parseMentionItemFromHref,
117
117
  remainingAgentComposerPromptAssetSlots,
118
118
  updateAgentComposerFileMentions
119
- } from "./chunk-WUMJJOK6.js";
119
+ } from "./chunk-O764HQNF.js";
120
120
  import {
121
121
  AgentInteractivePromptSurface,
122
122
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
@@ -180,11 +180,11 @@ import {
180
180
  } from "./chunk-QMMWKQOT.js";
181
181
 
182
182
  // AgentGUI.tsx
183
- import { memo as memo15, useMemo as useMemo43 } from "react";
183
+ import { memo as memo15, useMemo as useMemo45 } from "react";
184
184
  import { TooltipProvider as TooltipProvider6 } from "@tutti-os/ui-system";
185
185
 
186
186
  // agent-gui/agentGuiNode/AgentGUINode.tsx
187
- import { memo as memo14, useCallback as useCallback60, useEffect as useEffect39, useMemo as useMemo42, useRef as useRef50 } from "react";
187
+ import { memo as memo14, useCallback as useCallback60, useEffect as useEffect40, useMemo as useMemo44, useRef as useRef51 } from "react";
188
188
  import { createWorkspaceUserProjectI18nRuntime } from "@tutti-os/workspace-user-project/i18n";
189
189
  import { createWorkspaceFileManagerI18nRuntime } from "@tutti-os/workspace-file-manager";
190
190
  import { useReferenceProvenanceFilterCatalog } from "@tutti-os/workspace-file-reference/react";
@@ -9769,7 +9769,7 @@ function useAgentGUISubmitInteractionActions(input) {
9769
9769
  agentSessionId,
9770
9770
  normalizedContent,
9771
9771
  displayPromptText,
9772
- { sendNow: true }
9772
+ { sendNow: true, trackDraft: true }
9773
9773
  );
9774
9774
  },
9775
9775
  [
@@ -13316,10 +13316,10 @@ function useAgentGUINodeController({
13316
13316
  // agent-gui/agentGuiNode/AgentGUINodeView.tsx
13317
13317
  import {
13318
13318
  useCallback as useCallback58,
13319
- useEffect as useEffect37,
13320
- useMemo as useMemo40,
13321
- useRef as useRef48,
13322
- useState as useState39
13319
+ useEffect as useEffect38,
13320
+ useMemo as useMemo41,
13321
+ useRef as useRef49,
13322
+ useState as useState40
13323
13323
  } from "react";
13324
13324
  import { TooltipProvider as TooltipProvider5 } from "@tutti-os/ui-system";
13325
13325
 
@@ -13435,7 +13435,9 @@ var styles = {
13435
13435
  conversationList: "agent-gui-node__conversation-list",
13436
13436
  conversationMeta: "agent-gui-node__conversation-meta",
13437
13437
  conversationMoreButton: "agent-gui-node__conversation-more-button",
13438
+ conversationProviderImage: "agent-gui-node__conversation-provider-image",
13438
13439
  conversationProviderIcon: "agent-gui-node__conversation-provider-icon",
13440
+ conversationProviderMaskIcon: "agent-gui-node__conversation-provider-mask-icon",
13439
13441
  conversationOpenWindowButton: "agent-gui-node__conversation-open-window-button",
13440
13442
  conversationPinButton: "agent-gui-node__conversation-pin-button",
13441
13443
  conversationSection: "agent-gui-node__conversation-section",
@@ -14249,9 +14251,9 @@ function AgentGUIConfigMenu({
14249
14251
  import {
14250
14252
  memo as memo4,
14251
14253
  useCallback as useCallback44,
14252
- useMemo as useMemo31,
14253
- useRef as useRef35,
14254
- useState as useState25
14254
+ useMemo as useMemo32,
14255
+ useRef as useRef36,
14256
+ useState as useState26
14255
14257
  } from "react";
14256
14258
  import { Tooltip as Tooltip5, TooltipContent as TooltipContent5, TooltipTrigger as TooltipTrigger5 } from "@tutti-os/ui-system";
14257
14259
 
@@ -14474,7 +14476,7 @@ function changeAgentGUIProviderManagerVisibility(input) {
14474
14476
  }
14475
14477
 
14476
14478
  // agent-gui/agentGuiNode/view/AgentGUIEmptyState.tsx
14477
- import { memo as memo3, useMemo as useMemo30 } from "react";
14479
+ import { memo as memo3, useMemo as useMemo31 } from "react";
14478
14480
  import {
14479
14481
  Select as Select4,
14480
14482
  SelectContent as SelectContent4,
@@ -16180,7 +16182,7 @@ function AgentSessionChrome({
16180
16182
  }
16181
16183
 
16182
16184
  // agent-gui/agentGuiNode/AgentComposer.tsx
16183
- import { useEffect as useEffect27, useRef as useRef32, useState as useState21 } from "react";
16185
+ import { useEffect as useEffect28, useRef as useRef33, useState as useState22 } from "react";
16184
16186
  import { repairMentionPaletteHighlight } from "@tutti-os/ui-rich-text/at-panel";
16185
16187
 
16186
16188
  // agent-gui/agentGuiNode/AgentSlashStatusPanel.tsx
@@ -17764,7 +17766,6 @@ var DRAFT_IMAGE_PREVIEW_MIN_WIDTH_PX = 56;
17764
17766
  var DRAFT_IMAGE_PREVIEW_MAX_WIDTH_PX = 180;
17765
17767
  var DRAFT_IMAGE_PREVIEW_MIN_RATIO = 0.5;
17766
17768
  var DRAFT_IMAGE_PREVIEW_MAX_RATIO = 3;
17767
- var EMPTY_CONTEXT_MENTION_PROVIDERS = [];
17768
17769
  var EMPTY_PROMPT_TIPS = [];
17769
17770
  var EMPTY_PROVIDER_SKILLS = [];
17770
17771
  var EMPTY_WORKSPACE_APP_ICONS = [];
@@ -24969,6 +24970,64 @@ function AgentComposerView(input) {
24969
24970
  );
24970
24971
  }
24971
24972
 
24973
+ // agent-gui/agentGuiNode/composer/useAgentMentionSearchController.ts
24974
+ import { useEffect as useEffect27, useMemo as useMemo29, useRef as useRef32, useState as useState21 } from "react";
24975
+ import { useRichTextMentionService } from "@tutti-os/ui-rich-text/editor";
24976
+ var EMPTY_AGENT_CONTEXT_MENTION_PROVIDERS = [];
24977
+ function useAgentMentionSearchController(referenceProvenanceFilter) {
24978
+ const mentionService = useRichTextMentionService();
24979
+ const contextMentionProviders = useMemo29(
24980
+ () => mentionService?.listProviders().filter(isAgentContextMentionProvider) ?? EMPTY_AGENT_CONTEXT_MENTION_PROVIDERS,
24981
+ [mentionService]
24982
+ );
24983
+ const [mentionSearchState, setMentionSearchState] = useState21(INITIAL_AGENT_MENTION_SEARCH_STATE);
24984
+ const mentionControllerRef = useRef32(
24985
+ null
24986
+ );
24987
+ useEffect27(() => {
24988
+ const controller = new AgentMentionSearchController({
24989
+ contextMentionProviders
24990
+ });
24991
+ controller.setProvenanceCatalog(
24992
+ referenceProvenanceFilter?.snapshot.catalog ?? null
24993
+ );
24994
+ controller.setProvenanceFilter(
24995
+ referenceProvenanceFilter?.snapshot.value ?? null
24996
+ );
24997
+ mentionControllerRef.current = controller;
24998
+ const unsubscribe = controller.subscribe(setMentionSearchState);
24999
+ return () => {
25000
+ unsubscribe();
25001
+ controller.dispose();
25002
+ mentionControllerRef.current = null;
25003
+ };
25004
+ }, [contextMentionProviders]);
25005
+ useEffect27(() => {
25006
+ mentionControllerRef.current?.setProvenanceCatalog(
25007
+ referenceProvenanceFilter?.snapshot.catalog ?? null
25008
+ );
25009
+ mentionControllerRef.current?.setProvenanceFilter(
25010
+ referenceProvenanceFilter?.snapshot.value ?? null
25011
+ );
25012
+ }, [
25013
+ referenceProvenanceFilter?.snapshot.catalog,
25014
+ referenceProvenanceFilter?.snapshot.value
25015
+ ]);
25016
+ return { mentionControllerRef, mentionSearchState };
25017
+ }
25018
+ function isAgentContextMentionProvider(provider) {
25019
+ return provider.trigger === "@";
25020
+ }
25021
+ var INITIAL_AGENT_MENTION_SEARCH_STATE = {
25022
+ status: "idle",
25023
+ query: "",
25024
+ mode: "browse",
25025
+ filter: DEFAULT_AGENT_MENTION_FILTER,
25026
+ categories: [],
25027
+ groups: [],
25028
+ error: null
25029
+ };
25030
+
24972
25031
  // agent-gui/agentGuiNode/AgentComposer.tsx
24973
25032
  import { jsx as jsx38 } from "react/jsx-runtime";
24974
25033
  var DOCK_COMPOSER_INPUT_MIN_HEIGHT2 = 56;
@@ -25036,7 +25095,6 @@ function AgentComposer(props) {
25036
25095
  prepareExternalPromptFiles = null,
25037
25096
  promptAssetLimit = null,
25038
25097
  onRequestGitBranches = null,
25039
- contextMentionProviders = EMPTY_CONTEXT_MENTION_PROVIDERS,
25040
25098
  referenceProvenanceFilter = null
25041
25099
  } = props;
25042
25100
  const draftPrompt = agentComposerDraftPrompt(draftContent);
@@ -25060,67 +25118,56 @@ function AgentComposer(props) {
25060
25118
  hadPrefill: agentComposerDraftHasContent(draftContent)
25061
25119
  });
25062
25120
  };
25063
- const [isPaletteOpen, setIsPaletteOpen] = useState21(true);
25064
- const [isReviewPickerOpen, setIsReviewPickerOpen] = useState21(false);
25065
- const [isHandoffIconPlaying, setIsHandoffIconPlaying] = useState21(false);
25066
- const [highlightedIndex, setHighlightedIndex] = useState21(0);
25067
- const [mentionHighlightedKey, setMentionHighlightedKey] = useState21(null);
25068
- const [shouldCenterMentionHighlight, setShouldCenterMentionHighlight] = useState21(false);
25121
+ const [isPaletteOpen, setIsPaletteOpen] = useState22(true);
25122
+ const [isReviewPickerOpen, setIsReviewPickerOpen] = useState22(false);
25123
+ const [isHandoffIconPlaying, setIsHandoffIconPlaying] = useState22(false);
25124
+ const [highlightedIndex, setHighlightedIndex] = useState22(0);
25125
+ const [mentionHighlightedKey, setMentionHighlightedKey] = useState22(null);
25126
+ const [shouldCenterMentionHighlight, setShouldCenterMentionHighlight] = useState22(false);
25069
25127
  const [
25070
25128
  shouldResetMentionHighlightToFilter,
25071
25129
  setShouldResetMentionHighlightToFilter
25072
- ] = useState21(false);
25073
- const [paletteDraftPrompt, setPaletteDraftPrompt] = useState21(
25130
+ ] = useState22(false);
25131
+ const [paletteDraftPrompt, setPaletteDraftPrompt] = useState22(
25074
25132
  goalDraftObjective ?? draftPrompt
25075
25133
  );
25076
- const [fileMentionSuggestion, setFileMentionSuggestion] = useState21(null);
25077
- const [isSelectedProjectMissing, setIsSelectedProjectMissing] = useState21(false);
25078
- const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] = useState21(false);
25134
+ const [fileMentionSuggestion, setFileMentionSuggestion] = useState22(null);
25135
+ const [isSelectedProjectMissing, setIsSelectedProjectMissing] = useState22(false);
25136
+ const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] = useState22(false);
25079
25137
  const slashStatusAgentSessionId = slashStatus?.agentSessionId ?? null;
25080
- const previousSlashStatusAgentSessionIdRef = useRef32(
25138
+ const previousSlashStatusAgentSessionIdRef = useRef33(
25081
25139
  slashStatusAgentSessionId
25082
25140
  );
25083
25141
  const selectedProjectPath = composerSettings.selectedProjectPath?.trim() ?? "";
25084
25142
  const selectedProjectSectionKey = composerSettings.selectedProjectSectionKey?.trim() ?? "";
25085
- const previousSelectedProjectPathRef = useRef32(selectedProjectPath);
25086
- const [mentionSearchState, setMentionSearchState] = useState21({
25087
- status: "idle",
25088
- query: "",
25089
- mode: "browse",
25090
- filter: DEFAULT_AGENT_MENTION_FILTER,
25091
- categories: [],
25092
- groups: [],
25093
- error: null
25094
- });
25095
- const composerRef = useRef32(null);
25096
- const inputShellRef = useRef32(null);
25097
- const promptInputAreaRef = useRef32(null);
25098
- const paletteContentRef = useRef32(null);
25099
- const draftPromptRef = useRef32(draftPrompt);
25100
- const draftImagesRef = useRef32(draftImages);
25101
- const draftFilesRef = useRef32(draftFiles);
25102
- const draftLargeTextsRef = useRef32(draftLargeTexts);
25103
- const draftByScopeKeyRef = useRef32({
25143
+ const previousSelectedProjectPathRef = useRef33(selectedProjectPath);
25144
+ const composerRef = useRef33(null);
25145
+ const inputShellRef = useRef33(null);
25146
+ const promptInputAreaRef = useRef33(null);
25147
+ const paletteContentRef = useRef33(null);
25148
+ const draftPromptRef = useRef33(draftPrompt);
25149
+ const draftImagesRef = useRef33(draftImages);
25150
+ const draftFilesRef = useRef33(draftFiles);
25151
+ const draftLargeTextsRef = useRef33(draftLargeTexts);
25152
+ const draftByScopeKeyRef = useRef33({
25104
25153
  [draftScopeKey]: draftContent
25105
25154
  });
25106
25155
  draftByScopeKeyRef.current[draftScopeKey] = draftContent;
25107
- const promptTipRef = useRef32(null);
25108
- const mentionControllerRef = useRef32(
25109
- null
25110
- );
25111
- const editorHandleRef = useRef32(null);
25112
- const wasActiveRef = useRef32(isActive);
25113
- const lastComposerFocusRequestRef = useRef32(null);
25114
- const autoMentionHighlightedKeyRef = useRef32(null);
25115
- const [isPromptTipOverflowing, setIsPromptTipOverflowing] = useState21(false);
25116
- const [dockComposerInputHeight, setDockComposerInputHeight] = useState21(
25156
+ const promptTipRef = useRef33(null);
25157
+ const { mentionControllerRef, mentionSearchState } = useAgentMentionSearchController(referenceProvenanceFilter);
25158
+ const editorHandleRef = useRef33(null);
25159
+ const wasActiveRef = useRef33(isActive);
25160
+ const lastComposerFocusRequestRef = useRef33(null);
25161
+ const autoMentionHighlightedKeyRef = useRef33(null);
25162
+ const [isPromptTipOverflowing, setIsPromptTipOverflowing] = useState22(false);
25163
+ const [dockComposerInputHeight, setDockComposerInputHeight] = useState22(
25117
25164
  DOCK_COMPOSER_INPUT_MIN_HEIGHT2
25118
25165
  );
25119
- const [dockComposerInputMaxHeight, setDockComposerInputMaxHeight] = useState21(
25166
+ const [dockComposerInputMaxHeight, setDockComposerInputMaxHeight] = useState22(
25120
25167
  DOCK_COMPOSER_INPUT_MAX_HEIGHT2
25121
25168
  );
25122
- const [dockComposerAttachmentHeight, setDockComposerAttachmentHeight] = useState21(0);
25123
- const [dockComposerTextHeight, setDockComposerTextHeight] = useState21(
25169
+ const [dockComposerAttachmentHeight, setDockComposerAttachmentHeight] = useState22(0);
25170
+ const [dockComposerTextHeight, setDockComposerTextHeight] = useState22(
25124
25171
  DOCK_COMPOSER_INPUT_MIN_HEIGHT2
25125
25172
  );
25126
25173
  const paletteCatalog = useComposerPaletteCatalog({
@@ -25160,10 +25207,10 @@ function AgentComposer(props) {
25160
25207
  inputShellRef,
25161
25208
  showFileMentionPalette
25162
25209
  );
25163
- useEffect27(() => {
25210
+ useEffect28(() => {
25164
25211
  setHighlightedIndex(0);
25165
25212
  }, [skillQueryMatch?.prefix, skillQueryMatch?.query, slashQuery]);
25166
- useEffect27(() => {
25213
+ useEffect28(() => {
25167
25214
  const preferredKey = shouldResetMentionHighlightToFilter && mentionSearchState.mode === "browse" ? `category:${mentionSearchState.filter}` : null;
25168
25215
  if (shouldResetMentionHighlightToFilter) {
25169
25216
  const nextKey = repairMentionPaletteHighlight({
@@ -25197,25 +25244,7 @@ function AgentComposer(props) {
25197
25244
  mentionSearchState,
25198
25245
  shouldResetMentionHighlightToFilter
25199
25246
  ]);
25200
- useEffect27(() => {
25201
- const controller = new AgentMentionSearchController({
25202
- contextMentionProviders
25203
- });
25204
- controller.setProvenanceCatalog(
25205
- referenceProvenanceFilter?.snapshot.catalog ?? null
25206
- );
25207
- controller.setProvenanceFilter(
25208
- referenceProvenanceFilter?.snapshot.value ?? null
25209
- );
25210
- mentionControllerRef.current = controller;
25211
- const unsubscribe = controller.subscribe(setMentionSearchState);
25212
- return () => {
25213
- unsubscribe();
25214
- controller.dispose();
25215
- mentionControllerRef.current = null;
25216
- };
25217
- }, [contextMentionProviders]);
25218
- useEffect27(() => {
25247
+ useEffect28(() => {
25219
25248
  draftImagesRef.current = agentComposerDraftImages(draftContent);
25220
25249
  draftFilesRef.current = agentComposerDraftFiles(draftContent);
25221
25250
  draftLargeTextsRef.current = agentComposerDraftLargeTexts(draftContent);
@@ -25230,18 +25259,7 @@ function AgentComposer(props) {
25230
25259
  });
25231
25260
  }
25232
25261
  }, [draftContent, draftPrompt, goalDraftObjective]);
25233
- useEffect27(() => {
25234
- mentionControllerRef.current?.setProvenanceCatalog(
25235
- referenceProvenanceFilter?.snapshot.catalog ?? null
25236
- );
25237
- mentionControllerRef.current?.setProvenanceFilter(
25238
- referenceProvenanceFilter?.snapshot.value ?? null
25239
- );
25240
- }, [
25241
- referenceProvenanceFilter?.snapshot.catalog,
25242
- referenceProvenanceFilter?.snapshot.value
25243
- ]);
25244
- useEffect27(() => {
25262
+ useEffect28(() => {
25245
25263
  if (previousSlashStatusAgentSessionIdRef.current === slashStatusAgentSessionId) {
25246
25264
  return;
25247
25265
  }
@@ -25504,7 +25522,7 @@ function AgentComposer(props) {
25504
25522
  }
25505
25523
 
25506
25524
  // agent-gui/agentGuiNode/AgentHomeSuggestions.tsx
25507
- import { memo as memo2, useState as useState22 } from "react";
25525
+ import { memo as memo2, useState as useState23 } from "react";
25508
25526
  import { ArrowLeftRight, Code, Compass, Import, Pencil, X as X6 } from "lucide-react";
25509
25527
  import { jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
25510
25528
  function TuttiIcon(props) {
@@ -25615,7 +25633,7 @@ var AgentHomeSuggestions = memo2(function AgentHomeSuggestions2({
25615
25633
  closeLabel
25616
25634
  }) {
25617
25635
  "use memo";
25618
- const [activeCategoryId, setActiveCategoryId] = useState22(null);
25636
+ const [activeCategoryId, setActiveCategoryId] = useState23(null);
25619
25637
  if (categories.length === 0) {
25620
25638
  return null;
25621
25639
  }
@@ -25875,8 +25893,8 @@ import {
25875
25893
  createContext,
25876
25894
  useCallback as useCallback42,
25877
25895
  useContext,
25878
- useMemo as useMemo29,
25879
- useRef as useRef33
25896
+ useMemo as useMemo30,
25897
+ useRef as useRef34
25880
25898
  } from "react";
25881
25899
  import { toast as toast2 } from "@tutti-os/ui-system";
25882
25900
 
@@ -25933,7 +25951,7 @@ function useCreateAgentTargetSetupController(agentTarget) {
25933
25951
  const { t } = useTranslation();
25934
25952
  const agentTargetId = agentTarget?.agentTargetId?.trim() || agentTarget?.targetId.trim() || "";
25935
25953
  const enabled = agentTarget?.ref.setupKind === "target_runtime" && Boolean(hostApi?.agentTargetSetup && agentTargetId);
25936
- const stableAgentTarget = useMemo29(
25954
+ const stableAgentTarget = useMemo30(
25937
25955
  () => agentTarget,
25938
25956
  [
25939
25957
  agentTargetId,
@@ -25942,7 +25960,7 @@ function useCreateAgentTargetSetupController(agentTarget) {
25942
25960
  agentTarget?.ref.setupKind
25943
25961
  ]
25944
25962
  );
25945
- const watch = useMemo29(
25963
+ const watch = useMemo30(
25946
25964
  () => enabled ? hostApi?.agentTargetSetup?.watch({ agentTargetId }) ?? null : null,
25947
25965
  [agentTargetId, enabled, hostApi?.agentTargetSetup]
25948
25966
  );
@@ -25964,9 +25982,9 @@ function useCreateAgentTargetSetupController(agentTarget) {
25964
25982
  },
25965
25983
  [agentTargetId, hostApi?.debug]
25966
25984
  );
25967
- const controllerRef = useRef33(null);
25985
+ const controllerRef = useRef34(null);
25968
25986
  const targetKey = enabled ? agentTargetId : "";
25969
- const controllerEntry = useMemo29(() => {
25987
+ const controllerEntry = useMemo30(() => {
25970
25988
  const previousState = controllerRef.current?.targetKey === targetKey ? controllerRef.current.controller.getSnapshot() : null;
25971
25989
  return {
25972
25990
  controller: createAgentTargetSetupController({
@@ -26447,7 +26465,7 @@ var AgentGUIEmptyHomePane = memo3(function AgentGUIEmptyHomePane2({
26447
26465
  }).fullLabel : runtimeProviderLabel;
26448
26466
  const baseLabel = labels.emptyForProvider?.(provider) ?? labels.empty;
26449
26467
  const emptyLabel = runtimeProviderLabel ? baseLabel.replace(runtimeProviderLabel, providerLabel) : baseLabel;
26450
- const avatarPresentations = useMemo30(
26468
+ const avatarPresentations = useMemo31(
26451
26469
  () => agentTargets.length ? agentTargets.map(projectAgentGUIAgentTargetAvatar) : selectedAgentTarget ? [projectAgentGUIAgentTargetAvatar(selectedAgentTarget)] : [
26452
26470
  createFallbackAgentGUIAgentAvatar({
26453
26471
  provider,
@@ -26893,8 +26911,8 @@ function EmptyHeroTitle({
26893
26911
 
26894
26912
  // agent-gui/agentGuiNode/view/AgentGUIProviderManagerDialog.tsx
26895
26913
  import {
26896
- useRef as useRef34,
26897
- useState as useState23
26914
+ useRef as useRef35,
26915
+ useState as useState24
26898
26916
  } from "react";
26899
26917
  import { CircleMinus, CirclePlus } from "lucide-react";
26900
26918
  import {
@@ -26927,20 +26945,20 @@ function AgentGUIProviderManagerDialog({
26927
26945
  const disabledTargets = targets.filter(
26928
26946
  (target) => hidden.has(target.targetId)
26929
26947
  );
26930
- const [editing, setEditing] = useState23(false);
26931
- const [dragState, setDragState] = useState23(
26948
+ const [editing, setEditing] = useState24(false);
26949
+ const [dragState, setDragState] = useState24(
26932
26950
  null
26933
26951
  );
26934
- const [dragOverZone, setDragOverZone] = useState23(
26952
+ const [dragOverZone, setDragOverZone] = useState24(
26935
26953
  null
26936
26954
  );
26937
- const [dragPreview, setDragPreview] = useState23(null);
26938
- const dragStateRef = useRef34(null);
26939
- const dragPreviewRef = useRef34(null);
26940
- const [longPressTargetId, setLongPressTargetId] = useState23(
26955
+ const [dragPreview, setDragPreview] = useState24(null);
26956
+ const dragStateRef = useRef35(null);
26957
+ const dragPreviewRef = useRef35(null);
26958
+ const [longPressTargetId, setLongPressTargetId] = useState24(
26941
26959
  null
26942
26960
  );
26943
- const longPressOriginRef = useRef34(null);
26961
+ const longPressOriginRef = useRef35(null);
26944
26962
  const finalAvailableAgent = availableTargets.length === 1;
26945
26963
  const showRunningAgentBlocked = (targetId) => {
26946
26964
  const target = targets.find((candidate) => candidate.targetId === targetId);
@@ -27397,7 +27415,7 @@ function AgentGUIProviderManagerDialog({
27397
27415
  }
27398
27416
 
27399
27417
  // agent-gui/agentGuiNode/view/useAgentGUIProviderRailPreferences.ts
27400
- import { useCallback as useCallback43, useEffect as useEffect28, useState as useState24 } from "react";
27418
+ import { useCallback as useCallback43, useEffect as useEffect29, useState as useState25 } from "react";
27401
27419
  function readAgentGUIProviderRailPreferences(storageKey) {
27402
27420
  return parseAgentGUIProviderRailPreferences(
27403
27421
  globalThis.localStorage?.getItem(storageKey)
@@ -27405,10 +27423,10 @@ function readAgentGUIProviderRailPreferences(storageKey) {
27405
27423
  }
27406
27424
  function useAgentGUIProviderRailPreferences() {
27407
27425
  const storageKey = agentGUIProviderRailOrderStorageKey();
27408
- const [preferences, setPreferences] = useState24(
27426
+ const [preferences, setPreferences] = useState25(
27409
27427
  () => readAgentGUIProviderRailPreferences(storageKey)
27410
27428
  );
27411
- useEffect28(() => {
27429
+ useEffect29(() => {
27412
27430
  const refreshPreferences = () => {
27413
27431
  setPreferences(readAgentGUIProviderRailPreferences(storageKey));
27414
27432
  };
@@ -27538,8 +27556,8 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
27538
27556
  persistPreferences: persistProviderRailPreferences,
27539
27557
  preferences: providerRailPreferences
27540
27558
  } = useAgentGUIProviderRailPreferences();
27541
- const [dragState, setDragState] = useState25(null);
27542
- const dragStateRef = useRef35(null);
27559
+ const [dragState, setDragState] = useState26(null);
27560
+ const dragStateRef = useRef36(null);
27543
27561
  const setProviderRailDragState = useCallback44(
27544
27562
  (nextDragState) => {
27545
27563
  dragStateRef.current = nextDragState;
@@ -27547,7 +27565,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
27547
27565
  },
27548
27566
  []
27549
27567
  );
27550
- const railProviderTargets = useMemo31(
27568
+ const railProviderTargets = useMemo32(
27551
27569
  () => agentGUIProviderRailTargets(
27552
27570
  agentTargets,
27553
27571
  agentTargetsLoading,
@@ -27556,7 +27574,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
27556
27574
  ),
27557
27575
  [comingSoonProviders, providerRailMode, agentTargets, agentTargetsLoading]
27558
27576
  );
27559
- const providerTiles = useMemo31(() => {
27577
+ const providerTiles = useMemo32(() => {
27560
27578
  const targets = [...railProviderTargets];
27561
27579
  const orderedTargets = providerRailMode === "exact" ? targets : (() => {
27562
27580
  const originalIndexByTarget = /* @__PURE__ */ new Map();
@@ -27596,7 +27614,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
27596
27614
  agentTargets: providerTiles,
27597
27615
  conversations
27598
27616
  });
27599
- const visibleProviderTiles = useMemo31(
27617
+ const visibleProviderTiles = useMemo32(
27600
27618
  () => applyAgentGUIProviderRailVisibility(
27601
27619
  providerTiles,
27602
27620
  effectiveHiddenTargetIds
@@ -28012,10 +28030,10 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
28012
28030
  });
28013
28031
 
28014
28032
  // agent-gui/agentGuiNode/controller/AgentGUIConversationRailController.tsx
28015
- import { memo as memo9, useState as useState31 } from "react";
28033
+ import { memo as memo9, useState as useState32 } from "react";
28016
28034
 
28017
28035
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailPane.tsx
28018
- import { Fragment as Fragment17, memo as memo8, useEffect as useEffect29, useMemo as useMemo34, useRef as useRef38, useState as useState30 } from "react";
28036
+ import { Fragment as Fragment17, memo as memo8, useEffect as useEffect30, useMemo as useMemo35, useRef as useRef39, useState as useState31 } from "react";
28019
28037
  import { Button as SystemButton } from "@tutti-os/ui-system";
28020
28038
  import { ScrollArea } from "@tutti-os/ui-system/components";
28021
28039
  import { CreateChatIcon as CreateChatIcon2 } from "@tutti-os/ui-system/icons";
@@ -28758,7 +28776,7 @@ function reduceAgentGUIConversationRailViewState(state, action) {
28758
28776
  }
28759
28777
 
28760
28778
  // agent-gui/agentGuiNode/controller/useAgentGUIProjectDrag.ts
28761
- import { useCallback as useCallback45, useState as useState26 } from "react";
28779
+ import { useCallback as useCallback45, useState as useState27 } from "react";
28762
28780
  var PROJECT_DRAG_SCROLL_EDGE_PX = 40;
28763
28781
  function projectDragAutoScrollDelta(clientY, bounds) {
28764
28782
  if (clientY < bounds.top + PROJECT_DRAG_SCROLL_EDGE_PX) {
@@ -28776,9 +28794,9 @@ function projectDragAutoScrollDelta(clientY, bounds) {
28776
28794
  return 0;
28777
28795
  }
28778
28796
  function useAgentGUIProjectDrag(input) {
28779
- const [dragState, setDragState] = useState26(null);
28780
- const [isMovePending, setIsMovePending] = useState26(false);
28781
- const [runtime] = useState26(() => ({
28797
+ const [dragState, setDragState] = useState27(null);
28798
+ const [isMovePending, setIsMovePending] = useState27(false);
28799
+ const [runtime] = useState27(() => ({
28782
28800
  active: false,
28783
28801
  clientY: null,
28784
28802
  dragState: null,
@@ -28961,7 +28979,7 @@ function useAgentGUIProjectDrag(input) {
28961
28979
  import { memo as memo7, useCallback as useCallback49 } from "react";
28962
28980
 
28963
28981
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailItem.tsx
28964
- import { memo as memo5, useCallback as useCallback47, useMemo as useMemo33 } from "react";
28982
+ import { memo as memo5, useCallback as useCallback47, useMemo as useMemo34 } from "react";
28965
28983
  import { ExternalLink as ExternalLink3 } from "lucide-react";
28966
28984
  import { IssueIcon, NewWorkspaceLinedIcon as NewWorkspaceLinedIcon2, cn as cn7 } from "@tutti-os/ui-system";
28967
28985
  import { WorkspaceUserProjectSelect as WorkspaceUserProjectSelect2 } from "@tutti-os/workspace-user-project/ui";
@@ -29199,9 +29217,9 @@ function AgentGUIConversationRailRelativeTime({
29199
29217
  import {
29200
29218
  Fragment as Fragment14,
29201
29219
  useCallback as useCallback46,
29202
- useMemo as useMemo32,
29203
- useRef as useRef36,
29204
- useState as useState27
29220
+ useMemo as useMemo33,
29221
+ useRef as useRef37,
29222
+ useState as useState28
29205
29223
  } from "react";
29206
29224
  import {
29207
29225
  AtSign,
@@ -29777,8 +29795,8 @@ function useConversationActionGroups({
29777
29795
  const agentHostApi = useOptionalAgentHostApi();
29778
29796
  const agentActivityRuntime = useOptionalAgentActivityRuntime();
29779
29797
  const copyConversationValue = useAgentGUIConversationCopyAction(labels);
29780
- const [resetKey, setResetKey] = useState27(0);
29781
- const pendingActionRef = useRef36(false);
29798
+ const [resetKey, setResetKey] = useState28(0);
29799
+ const pendingActionRef = useRef37(false);
29782
29800
  const run = useCallback46(
29783
29801
  (action) => {
29784
29802
  if (pendingActionRef.current) {
@@ -29795,7 +29813,7 @@ function useConversationActionGroups({
29795
29813
  },
29796
29814
  [isInteractionLocked]
29797
29815
  );
29798
- const groups = useMemo32(() => {
29816
+ const groups = useMemo33(() => {
29799
29817
  const clipboardUnavailable = typeof agentHostApi?.clipboard?.writeText !== "function";
29800
29818
  const copyItem = (action, icon, label, disabled = false) => ({
29801
29819
  // copy-reference builds the mention link synchronously from the
@@ -29871,7 +29889,7 @@ function AgentGUIConversationActionsDropdown({
29871
29889
  menu,
29872
29890
  moreSessionActionsLabel
29873
29891
  }) {
29874
- const [open, setOpen] = useState27(false);
29892
+ const [open, setOpen] = useState28(false);
29875
29893
  return /* @__PURE__ */ jsxs37(DropdownMenu4, { onOpenChange: setOpen, children: [
29876
29894
  /* @__PURE__ */ jsx53(DropdownMenuTrigger4, { asChild: true, children: /* @__PURE__ */ jsx53(
29877
29895
  BareIconButton,
@@ -29901,7 +29919,7 @@ function AgentGUIConversationActionsContextMenu({
29901
29919
  children,
29902
29920
  menu
29903
29921
  }) {
29904
- const [open, setOpen] = useState27(false);
29922
+ const [open, setOpen] = useState28(false);
29905
29923
  return /* @__PURE__ */ jsxs37(ContextMenu, { onOpenChange: setOpen, children: [
29906
29924
  /* @__PURE__ */ jsx53(ContextMenuTrigger, { asChild: true, children }),
29907
29925
  open ? /* @__PURE__ */ jsx53(ContextMenuContent, { className: menuContentClassName, children: /* @__PURE__ */ jsx53(ContextActionGroups, { groups: menu.groups }) }) : null
@@ -29977,14 +29995,22 @@ function ContextActionGroups({
29977
29995
 
29978
29996
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailItem.tsx
29979
29997
  import { Fragment as Fragment16, jsx as jsx54, jsxs as jsxs38 } from "react/jsx-runtime";
29980
- function agentGUIConversationIconUrl(provider, agentTargetId, workspaceId, agentTargets) {
29998
+ function agentGUIConversationIconPresentation(provider, agentTargetId, workspaceId, agentTargets) {
29981
29999
  const targetPresentation = resolveAgentTargetPresentation({
29982
30000
  agentTargetId: agentTargetId ?? "",
29983
30001
  agentTargets,
29984
30002
  workspaceId
29985
30003
  });
29986
- const targetIconUrl = targetPresentation?.maskIconUrl?.trim() || targetPresentation?.iconUrl?.trim();
29987
- return targetIconUrl || resolveAgentGuiSessionProviderFlatIconUrl(provider);
30004
+ const maskIconUrl = targetPresentation?.maskIconUrl?.trim() ?? "";
30005
+ if (maskIconUrl) {
30006
+ return { kind: "mask", url: maskIconUrl };
30007
+ }
30008
+ const iconUrl = targetPresentation?.iconUrl?.trim() ?? "";
30009
+ if (iconUrl) {
30010
+ return { kind: "image", url: iconUrl };
30011
+ }
30012
+ const providerIconUrl = resolveAgentGuiSessionProviderFlatIconUrl(provider);
30013
+ return providerIconUrl ? { kind: "mask", url: providerIconUrl } : null;
29988
30014
  }
29989
30015
  function agentGUIConversationRailTitle(item, labels, uiLanguage) {
29990
30016
  const title = conversationPlainTitle(item, labels, uiLanguage);
@@ -30014,7 +30040,7 @@ var AgentGUIConversationRailItem = memo5(
30014
30040
  "use memo";
30015
30041
  const pinned = (item.pinnedAtUnixMs ?? 0) > 0;
30016
30042
  const agentTargets = useAgentTargetPresentations();
30017
- const conversationIconUrl = agentGUIConversationIconUrl(
30043
+ const conversationIcon = agentGUIConversationIconPresentation(
30018
30044
  item.provider,
30019
30045
  item.agentTargetId,
30020
30046
  workspaceId,
@@ -30103,16 +30129,31 @@ var AgentGUIConversationRailItem = memo5(
30103
30129
  },
30104
30130
  children: [
30105
30131
  /* @__PURE__ */ jsxs38("span", { className: AgentGUINode_styles_default.conversationTitleRow, children: [
30106
- conversationIconUrl ? /* @__PURE__ */ jsx54(
30132
+ conversationIcon?.kind === "mask" ? /* @__PURE__ */ jsx54(
30107
30133
  "span",
30108
30134
  {
30109
30135
  "aria-hidden": "true",
30110
- className: AgentGUINode_styles_default.conversationProviderIcon,
30136
+ className: cn7(
30137
+ AgentGUINode_styles_default.conversationProviderIcon,
30138
+ AgentGUINode_styles_default.conversationProviderMaskIcon
30139
+ ),
30111
30140
  style: {
30112
- WebkitMaskImage: `url("${conversationIconUrl}")`,
30113
- maskImage: `url("${conversationIconUrl}")`
30141
+ WebkitMaskImage: `url("${conversationIcon.url}")`,
30142
+ maskImage: `url("${conversationIcon.url}")`
30114
30143
  }
30115
30144
  }
30145
+ ) : conversationIcon ? /* @__PURE__ */ jsx54(
30146
+ "img",
30147
+ {
30148
+ alt: "",
30149
+ "aria-hidden": "true",
30150
+ className: cn7(
30151
+ AgentGUINode_styles_default.conversationProviderIcon,
30152
+ AgentGUINode_styles_default.conversationProviderImage
30153
+ ),
30154
+ draggable: false,
30155
+ src: conversationIcon.url
30156
+ }
30116
30157
  ) : null,
30117
30158
  item.titleLeadingMentionKind === "task" ? /* @__PURE__ */ jsx54(
30118
30159
  "span",
@@ -30232,7 +30273,7 @@ function AgentGUIProjectRailHeader({
30232
30273
  }) {
30233
30274
  "use memo";
30234
30275
  const agentHostApi = useAgentHostApi();
30235
- const userProjectApi = useMemo33(
30276
+ const userProjectApi = useMemo34(
30236
30277
  () => agentHostApi.userProjects ? {
30237
30278
  ...agentHostApi.userProjects,
30238
30279
  selectDirectory: selectProjectDirectory ?? agentHostApi.workspace.selectDirectory
@@ -30307,7 +30348,7 @@ function AgentGUIProjectRailHeader({
30307
30348
  }
30308
30349
 
30309
30350
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailSectionHeader.tsx
30310
- import { forwardRef as forwardRef5, memo as memo6, useCallback as useCallback48, useState as useState28 } from "react";
30351
+ import { forwardRef as forwardRef5, memo as memo6, useCallback as useCallback48, useState as useState29 } from "react";
30311
30352
  import { ChevronRight as ChevronRight2 } from "lucide-react";
30312
30353
  import {
30313
30354
  DropdownMenu as DropdownMenu5,
@@ -30717,8 +30758,8 @@ var AgentGUIConversationRailSectionHeader = memo6(
30717
30758
  sectionLabel
30718
30759
  }) {
30719
30760
  "use memo";
30720
- const [projectMenuOpen, setProjectMenuOpen] = useState28(false);
30721
- const [conversationMenuOpen, setConversationMenuOpen] = useState28(false);
30761
+ const [projectMenuOpen, setProjectMenuOpen] = useState29(false);
30762
+ const [conversationMenuOpen, setConversationMenuOpen] = useState29(false);
30722
30763
  const handleProjectMenuOpenChange = useCallback48(
30723
30764
  (open) => {
30724
30765
  setProjectMenuOpen(open);
@@ -31110,7 +31151,7 @@ function AgentGUIProjectActionConfirmationDialog(props) {
31110
31151
  }
31111
31152
 
31112
31153
  // agent-gui/agentGuiNode/view/useAgentGUIConversationRailViewState.ts
31113
- import { useCallback as useCallback50, useLayoutEffect as useLayoutEffect6, useReducer, useRef as useRef37 } from "react";
31154
+ import { useCallback as useCallback50, useLayoutEffect as useLayoutEffect6, useReducer, useRef as useRef38 } from "react";
31114
31155
  function applyRailScrollNavigation(input) {
31115
31156
  const activeConversationId = input.activeConversationId?.trim() || null;
31116
31157
  const current = input.current.navigationKey === input.navigationKey ? input.current : {
@@ -31156,10 +31197,10 @@ function useAgentGUIConversationRailViewState(input) {
31156
31197
  reduceAgentGUIConversationRailViewState,
31157
31198
  /* @__PURE__ */ new Map()
31158
31199
  );
31159
- const conversationListRef = useRef37(null);
31160
- const conversationItemElementsRef = useRef37(/* @__PURE__ */ new Map());
31161
- const scrollTopByScopeRef = useRef37(/* @__PURE__ */ new Map());
31162
- const navigationRef = useRef37({
31200
+ const conversationListRef = useRef38(null);
31201
+ const conversationItemElementsRef = useRef38(/* @__PURE__ */ new Map());
31202
+ const scrollTopByScopeRef = useRef38(/* @__PURE__ */ new Map());
31203
+ const navigationRef = useRef38({
31163
31204
  handledRevealRevision: 0,
31164
31205
  navigationKey: null,
31165
31206
  phase: "scope-pending"
@@ -31250,9 +31291,9 @@ function useAgentGUIConversationRailViewState(input) {
31250
31291
  }
31251
31292
 
31252
31293
  // agent-gui/agentGuiNode/view/useAgentGUIProjectMenuState.ts
31253
- import { useCallback as useCallback51, useState as useState29 } from "react";
31294
+ import { useCallback as useCallback51, useState as useState30 } from "react";
31254
31295
  function useAgentGUIProjectMenuState(isRailInteractionLocked, isUserProjectMutationPending) {
31255
- const [openSectionId, setOpenSectionId] = useState29(null);
31296
+ const [openSectionId, setOpenSectionId] = useState30(null);
31256
31297
  const isProjectActionLocked = useCallback51(
31257
31298
  () => isRailInteractionLocked() || isUserProjectMutationPending,
31258
31299
  [isRailInteractionLocked, isUserProjectMutationPending]
@@ -31275,8 +31316,8 @@ function useAgentGUIProjectMenuState(isRailInteractionLocked, isUserProjectMutat
31275
31316
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailPane.tsx
31276
31317
  import { jsx as jsx59, jsxs as jsxs41 } from "react/jsx-runtime";
31277
31318
  function useDelayedBoolean(value, delayMs) {
31278
- const [delayedValue, setDelayedValue] = useState30(false);
31279
- useEffect29(() => {
31319
+ const [delayedValue, setDelayedValue] = useState31(false);
31320
+ useEffect30(() => {
31280
31321
  if (!value) {
31281
31322
  setDelayedValue(false);
31282
31323
  return;
@@ -31329,12 +31370,12 @@ var AgentGUIConversationRailPane = memo8(
31329
31370
  onConversationQueryChange
31330
31371
  }) {
31331
31372
  "use memo";
31332
- const [pendingProjectAction, setPendingProjectAction] = useState30(null);
31333
- const [isRequestingBatchDeletion, setIsRequestingBatchDeletion] = useState30(false);
31373
+ const [pendingProjectAction, setPendingProjectAction] = useState31(null);
31374
+ const [isRequestingBatchDeletion, setIsRequestingBatchDeletion] = useState31(false);
31334
31375
  const { railSearch } = railQuery;
31335
- const railElementRef = useRef38(null);
31336
- const railActiveConversationRef = useRef38([]);
31337
- const groupedConversationsRef = useRef38(null);
31376
+ const railElementRef = useRef39(null);
31377
+ const railActiveConversationRef = useRef39([]);
31378
+ const groupedConversationsRef = useRef39(null);
31338
31379
  const {
31339
31380
  loadMoreSectionConversations,
31340
31381
  isInteractionLocked,
@@ -31402,7 +31443,7 @@ var AgentGUIConversationRailPane = memo8(
31402
31443
  userProjects
31403
31444
  });
31404
31445
  const railActiveOverlay = runtimeDisplayProjection.activeOverlay;
31405
- const displayConversations = useMemo34(() => {
31446
+ const displayConversations = useMemo35(() => {
31406
31447
  if (backendSearchActive) {
31407
31448
  return backendSearchConversations;
31408
31449
  }
@@ -31423,7 +31464,7 @@ var AgentGUIConversationRailPane = memo8(
31423
31464
  runtimeRailSections,
31424
31465
  runtimeSectionsEnabled
31425
31466
  ]);
31426
- const filteredConversationResult = useMemo34(() => {
31467
+ const filteredConversationResult = useMemo35(() => {
31427
31468
  const startedAtMs = agentGuiPerfNowMs();
31428
31469
  const query = conversationQuery.trim().toLowerCase();
31429
31470
  const items = backendSearchActive ? displayConversations : !query ? displayConversations : displayConversations.filter(
@@ -31441,7 +31482,7 @@ var AgentGUIConversationRailPane = memo8(
31441
31482
  uiLanguage
31442
31483
  ]);
31443
31484
  const filteredConversations = filteredConversationResult.items;
31444
- const groupedConversationResult = useMemo34(() => {
31485
+ const groupedConversationResult = useMemo35(() => {
31445
31486
  const startedAtMs = agentGuiPerfNowMs();
31446
31487
  const query = conversationQuery.trim();
31447
31488
  const rawGroups = backendSearchActive ? projectConversationRailSearchSections({
@@ -31494,7 +31535,7 @@ var AgentGUIConversationRailPane = memo8(
31494
31535
  sectionAgentTargetFallbackId,
31495
31536
  workspaceId
31496
31537
  });
31497
- const groupedConversationIdentityKey = useMemo34(
31538
+ const groupedConversationIdentityKey = useMemo35(
31498
31539
  () => `${groupedConversations.map(
31499
31540
  (section) => `${section.id}:${section.items.map((item) => item.id).join(",")}`
31500
31541
  ).join("|")}|active:${railActiveOverlay?.conversation.id ?? ""}`,
@@ -31559,7 +31600,7 @@ var AgentGUIConversationRailPane = memo8(
31559
31600
  userProjects
31560
31601
  });
31561
31602
  const projectDragLocked = projectDragBaseLocked || isProjectMovePending;
31562
- useEffect29(() => {
31603
+ useEffect30(() => {
31563
31604
  return installProjectDragGlobalListeners();
31564
31605
  }, [installProjectDragGlobalListeners]);
31565
31606
  return /* @__PURE__ */ jsxs41(
@@ -31766,7 +31807,7 @@ var AgentGUIConversationRailPane = memo8(
31766
31807
  );
31767
31808
 
31768
31809
  // agent-gui/agentGuiNode/controller/useAgentGUIConversationRailQuery.ts
31769
- import { useEffect as useEffect30, useMemo as useMemo35, useRef as useRef39 } from "react";
31810
+ import { useEffect as useEffect31, useMemo as useMemo36, useRef as useRef40 } from "react";
31770
31811
 
31771
31812
  // agent-gui/agentGuiNode/controller/agentGuiConversationRailDiagnostics.ts
31772
31813
  var CONVERSATION_RAIL_SLOW_DIAGNOSTIC_THRESHOLD_MS = 250;
@@ -32883,13 +32924,13 @@ function useAgentGUIConversationRailQuery({
32883
32924
  workspaceId
32884
32925
  }) {
32885
32926
  const runtime = useAgentActivityRuntime();
32886
- const engine = useMemo35(
32927
+ const engine = useMemo36(
32887
32928
  () => runtime.getSessionEngine(workspaceId),
32888
32929
  [runtime, workspaceId]
32889
32930
  );
32890
- const activeConversationIdRef = useRef39(activeConversationId);
32931
+ const activeConversationIdRef = useRef40(activeConversationId);
32891
32932
  activeConversationIdRef.current = activeConversationId;
32892
- const controller = useMemo35(
32933
+ const controller = useMemo36(
32893
32934
  () => new AgentGUIConversationRailQueryController({
32894
32935
  engine,
32895
32936
  getActiveConversationId: () => activeConversationIdRef.current,
@@ -32898,7 +32939,7 @@ function useAgentGUIConversationRailQuery({
32898
32939
  }),
32899
32940
  [engine, runtime, workspaceId]
32900
32941
  );
32901
- useEffect30(() => {
32942
+ useEffect31(() => {
32902
32943
  const detach = controller.attach();
32903
32944
  registerInteractionLockProbe?.(controller.isInteractionLocked);
32904
32945
  return () => {
@@ -32906,7 +32947,7 @@ function useAgentGUIConversationRailQuery({
32906
32947
  detach();
32907
32948
  };
32908
32949
  }, [controller, registerInteractionLockProbe]);
32909
- useEffect30(() => {
32950
+ useEffect31(() => {
32910
32951
  controller.configure({
32911
32952
  conversationFilter,
32912
32953
  previewMode,
@@ -32927,7 +32968,7 @@ function useAgentGUIConversationRailQuery({
32927
32968
  identitySnapshot,
32928
32969
  Object.is
32929
32970
  );
32930
- const requestedRailScopeKey = useMemo35(
32971
+ const requestedRailScopeKey = useMemo36(
32931
32972
  () => resolveConversationRailQueryScope(workspaceId, {
32932
32973
  conversationFilter,
32933
32974
  previewMode,
@@ -32942,7 +32983,7 @@ function useAgentGUIConversationRailQuery({
32942
32983
  workspaceId
32943
32984
  ]
32944
32985
  );
32945
- return useMemo35(
32986
+ return useMemo36(
32946
32987
  () => ({
32947
32988
  ...querySnapshot,
32948
32989
  isInteractionLocked: controller.isInteractionLocked,
@@ -32966,7 +33007,7 @@ function identitySnapshot(snapshot) {
32966
33007
  import { jsx as jsx60 } from "react/jsx-runtime";
32967
33008
  var AgentGUIConversationRailController = memo9(
32968
33009
  function AgentGUIConversationRailController2(props) {
32969
- const [conversationQuery, setConversationQuery] = useState31("");
33010
+ const [conversationQuery, setConversationQuery] = useState32("");
32970
33011
  const railQuery = useAgentGUIConversationRailQuery({
32971
33012
  activeConversationId: props.activeConversationId,
32972
33013
  conversationFilter: props.conversationFilter,
@@ -32993,15 +33034,15 @@ var AgentGUIConversationRailController = memo9(
32993
33034
  import {
32994
33035
  memo as memo12,
32995
33036
  useCallback as useCallback53,
32996
- useEffect as useEffect33,
32997
- useMemo as useMemo37,
32998
- useRef as useRef42,
32999
- useState as useState36
33037
+ useEffect as useEffect34,
33038
+ useMemo as useMemo38,
33039
+ useRef as useRef43,
33040
+ useState as useState37
33000
33041
  } from "react";
33001
33042
  import { ScrollArea as ScrollArea2 } from "@tutti-os/ui-system/components";
33002
33043
 
33003
33044
  // agent-gui/agentGuiNode/view/agentGUIDetailModelHelpers.ts
33004
- import { useRef as useRef40 } from "react";
33045
+ import { useRef as useRef41 } from "react";
33005
33046
  function commandAppSource(command) {
33006
33047
  if (!command || typeof command !== "object" || !("source" in command)) {
33007
33048
  return null;
@@ -33081,7 +33122,7 @@ function slashStatusesEqual(left, right) {
33081
33122
  return (left.agentSessionId ?? null) === (right.agentSessionId ?? null) && (left.baseUrl ?? null) === (right.baseUrl ?? null) && (left.contextWindow?.usedTokens ?? null) === (right.contextWindow?.usedTokens ?? null) && (left.contextWindow?.totalTokens ?? null) === (right.contextWindow?.totalTokens ?? null) && slashStatusLimitsEqual(left.limits, right.limits) && Boolean(left.limitsLoading) === Boolean(right.limitsLoading) && Boolean(left.limitsUnavailable) === Boolean(right.limitsUnavailable);
33082
33123
  }
33083
33124
  function useStableSlashStatus(status) {
33084
- const statusRef = useRef40(null);
33125
+ const statusRef = useRef41(null);
33085
33126
  if (statusRef.current === null || !slashStatusesEqual(statusRef.current, status)) {
33086
33127
  statusRef.current = status;
33087
33128
  }
@@ -33157,7 +33198,7 @@ import { ChevronsDown } from "lucide-react";
33157
33198
  import { cn as cn8 } from "@tutti-os/ui-system";
33158
33199
 
33159
33200
  // agent-gui/agentGuiNode/AgentGoalBanner.tsx
33160
- import { useEffect as useEffect31, useState as useState32 } from "react";
33201
+ import { useEffect as useEffect32, useState as useState33 } from "react";
33161
33202
  import { CirclePause, CirclePlay, Pencil as Pencil3, Target as Target3, Trash2 } from "lucide-react";
33162
33203
  import { jsx as jsx61, jsxs as jsxs42 } from "react/jsx-runtime";
33163
33204
  var RESUMABLE_GOAL_STATUSES = /* @__PURE__ */ new Set([
@@ -33233,12 +33274,12 @@ function AgentGoalBanner({
33233
33274
  onClearGoal
33234
33275
  }) {
33235
33276
  "use memo";
33236
- const [editDraft, setEditDraft] = useState32(null);
33277
+ const [editDraft, setEditDraft] = useState33(null);
33237
33278
  const normalizedStatus = normalizeGoalStatus(status);
33238
33279
  const isActive = normalizedStatus === "" || normalizedStatus === "active";
33239
33280
  const serverSeconds = optimistic ? null : typeof durationMs === "number" && durationMs >= 0 ? Math.floor(durationMs / 1e3) : isActive ? 0 : null;
33240
- const [localElapsed, setLocalElapsed] = useState32(0);
33241
- useEffect31(() => {
33281
+ const [localElapsed, setLocalElapsed] = useState33(0);
33282
+ useEffect32(() => {
33242
33283
  setLocalElapsed(0);
33243
33284
  if (!isActive || serverSeconds === null) {
33244
33285
  return;
@@ -33518,7 +33559,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
33518
33559
  });
33519
33560
 
33520
33561
  // agent-gui/agentGuiNode/view/AgentGUIContentToast.tsx
33521
- import { useState as useState33 } from "react";
33562
+ import { useState as useState34 } from "react";
33522
33563
  import {
33523
33564
  ToastProvider,
33524
33565
  ToastRoot,
@@ -33530,7 +33571,7 @@ function AgentGUIContentToast({
33530
33571
  insetTopPx,
33531
33572
  message
33532
33573
  }) {
33533
- const [open, setOpen] = useState33(true);
33574
+ const [open, setOpen] = useState34(true);
33534
33575
  return /* @__PURE__ */ jsxs44(ToastProvider, { children: [
33535
33576
  /* @__PURE__ */ jsx63(
33536
33577
  ToastRoot,
@@ -33619,10 +33660,10 @@ function setTimelineScrollTopWithUserTransition(element, top) {
33619
33660
  // agent-gui/agentGuiNode/view/useAgentGUIDetailScroll.ts
33620
33661
  import {
33621
33662
  useCallback as useCallback52,
33622
- useEffect as useEffect32,
33663
+ useEffect as useEffect33,
33623
33664
  useLayoutEffect as useLayoutEffect7,
33624
- useRef as useRef41,
33625
- useState as useState34
33665
+ useRef as useRef42,
33666
+ useState as useState35
33626
33667
  } from "react";
33627
33668
  var AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX = 24;
33628
33669
  var AGENT_GUI_TOP_HISTORY_PREFETCH_THRESHOLD_PX = 240;
@@ -33641,10 +33682,10 @@ function useAgentGUIDetailScroll(input) {
33641
33682
  timelineScrollAnchorRef,
33642
33683
  viewModel
33643
33684
  } = input;
33644
- const [isTimelineScrolledToTop, setIsTimelineScrolledToTop] = useState34(true);
33645
- const [isTimelineScrolledToBottom, setIsTimelineScrolledToBottom] = useState34(true);
33646
- const bottomLockOwnerRef = useRef41(null);
33647
- const userScrollAwayIntentConversationRef = useRef41(null);
33685
+ const [isTimelineScrolledToTop, setIsTimelineScrolledToTop] = useState35(true);
33686
+ const [isTimelineScrolledToBottom, setIsTimelineScrolledToBottom] = useState35(true);
33687
+ const bottomLockOwnerRef = useRef42(null);
33688
+ const userScrollAwayIntentConversationRef = useRef42(null);
33648
33689
  useLayoutEffect7(() => {
33649
33690
  const timeline = timelineRef.current;
33650
33691
  if (!timeline) {
@@ -33850,7 +33891,7 @@ function useAgentGUIDetailScroll(input) {
33850
33891
  timelineConversationId,
33851
33892
  viewModel.rail.activeConversationId
33852
33893
  ]);
33853
- useEffect32(() => {
33894
+ useEffect33(() => {
33854
33895
  const timeline = timelineRef.current;
33855
33896
  const activeConversationId = timelineConversationId;
33856
33897
  if (!timeline || !activeConversationId) {
@@ -33961,7 +34002,7 @@ function useAgentGUIDetailScroll(input) {
33961
34002
  }
33962
34003
 
33963
34004
  // agent-gui/agentGuiNode/view/useAgentGUIDetailModel.tsx
33964
- import { useMemo as useMemo36 } from "react";
34005
+ import { useMemo as useMemo37 } from "react";
33965
34006
 
33966
34007
  // app/renderer/components/icons/UnavailableChatIcon.tsx
33967
34008
  import { jsx as jsx65 } from "react/jsx-runtime";
@@ -33981,15 +34022,15 @@ function UnavailableChatIcon(props) {
33981
34022
  }
33982
34023
 
33983
34024
  // agent-gui/agentGuiNode/view/useAgentGUITimelineTransition.ts
33984
- import { useLayoutEffect as useLayoutEffect8, useState as useState35 } from "react";
34025
+ import { useLayoutEffect as useLayoutEffect8, useState as useState36 } from "react";
33985
34026
  var AGENT_GUI_TIMELINE_SKELETON_DELAY_MS = 300;
33986
34027
  function useAgentGUITimelineTransition(input) {
33987
34028
  const activeConversationId = input.activeConversationId;
33988
- const [committedTimeline, setCommittedTimeline] = useState35(() => ({
34029
+ const [committedTimeline, setCommittedTimeline] = useState36(() => ({
33989
34030
  conversation: input.conversation,
33990
34031
  conversationId: activeConversationId
33991
34032
  }));
33992
- const [revealedSkeletonConversationId, setRevealedSkeletonConversationId] = useState35(null);
34033
+ const [revealedSkeletonConversationId, setRevealedSkeletonConversationId] = useState36(null);
33993
34034
  const transitionPending = activeConversationId !== null && input.availability === "loading" && (!input.conversation || input.conversation.rows.length === 0);
33994
34035
  useLayoutEffect8(() => {
33995
34036
  if (!transitionPending || activeConversationId === null) {
@@ -34055,11 +34096,11 @@ function useAgentGUIDetailModel(input) {
34055
34096
  const emptyProviderReadinessGate = !hasActiveConversation ? selectedAgentTargetComingSoon ? { status: "coming_soon" } : viewModel.readiness.providerReadinessGate : null;
34056
34097
  const activePrompt = viewModel.interaction.pendingInteractivePrompt ?? viewModel.interaction.pendingApproval;
34057
34098
  const activePromptRequestId = activePrompt?.requestId ?? null;
34058
- const sessionChrome = useMemo36(
34099
+ const sessionChrome = useMemo37(
34059
34100
  () => ({ ...viewModel.interaction.sessionChrome, approval: null }),
34060
34101
  [viewModel.interaction.sessionChrome]
34061
34102
  );
34062
- const rawSlashStatus = useMemo36(
34103
+ const rawSlashStatus = useMemo37(
34063
34104
  () => resolveSlashStatus({
34064
34105
  rawState: viewModel.interaction.sessionChrome.rawState,
34065
34106
  limits: slashStatusLimits,
@@ -34076,7 +34117,7 @@ function useAgentGUIDetailModel(input) {
34076
34117
  ]
34077
34118
  );
34078
34119
  const slashStatus = useStableSlashStatus(rawSlashStatus);
34079
- const displayedInlineNotice = useMemo36(() => {
34120
+ const displayedInlineNotice = useMemo37(() => {
34080
34121
  const inlineNotice = viewModel.interaction.inlineNotice;
34081
34122
  const inlineNoticeMessage = inlineNotice?.message.trim() ?? "";
34082
34123
  if (!inlineNotice || inlineNoticeMessage === "") {
@@ -34100,7 +34141,7 @@ function useAgentGUIDetailModel(input) {
34100
34141
  viewModel.readiness.activeLiveState,
34101
34142
  viewModel.interaction.inlineNotice
34102
34143
  ]);
34103
- const inlineNoticeChrome = useMemo36(() => {
34144
+ const inlineNoticeChrome = useMemo37(() => {
34104
34145
  if (!displayedInlineNotice) {
34105
34146
  return null;
34106
34147
  }
@@ -34152,7 +34193,7 @@ function useAgentGUIDetailModel(input) {
34152
34193
  isSubmitting: viewModel.composer.isSubmitting,
34153
34194
  isUnavailable: viewModel.readiness.activeLiveState === "failed"
34154
34195
  });
34155
- const conversationFlowLabels = useMemo36(
34196
+ const conversationFlowLabels = useMemo37(
34156
34197
  () => ({
34157
34198
  thinkingLabel: labels.thinkingLabel,
34158
34199
  toolCallsLabel: labels.toolCallsLabel,
@@ -34168,7 +34209,7 @@ function useAgentGUIDetailModel(input) {
34168
34209
  labels.userMessageLocator
34169
34210
  ]
34170
34211
  );
34171
- const conversationFlowEmpty = useMemo36(
34212
+ const conversationFlowEmpty = useMemo37(
34172
34213
  () => showUnavailableChatEmpty ? /* @__PURE__ */ jsxs46(
34173
34214
  "div",
34174
34215
  {
@@ -34182,7 +34223,7 @@ function useAgentGUIDetailModel(input) {
34182
34223
  ) : /* @__PURE__ */ jsx66(Fragment19, {}),
34183
34224
  [labels.conversationUnavailable, showUnavailableChatEmpty]
34184
34225
  );
34185
- const chromeLabels = useMemo36(
34226
+ const chromeLabels = useMemo37(
34186
34227
  () => ({
34187
34228
  approvalRequired: labels.approvalRequired,
34188
34229
  authRequired: labels.authRequired,
@@ -34203,7 +34244,7 @@ function useAgentGUIDetailModel(input) {
34203
34244
  viewModel.composer.isCancelPending
34204
34245
  ]
34205
34246
  );
34206
- const goalBannerLabels = useMemo36(
34247
+ const goalBannerLabels = useMemo37(
34207
34248
  () => ({
34208
34249
  titleActive: labels.goalTitleActive,
34209
34250
  titlePaused: labels.goalTitlePaused,
@@ -34233,7 +34274,7 @@ function useAgentGUIDetailModel(input) {
34233
34274
  labels.goalClearAction
34234
34275
  ]
34235
34276
  );
34236
- const interactivePromptLabels = useMemo36(
34277
+ const interactivePromptLabels = useMemo37(
34237
34278
  () => ({
34238
34279
  approvalLead: labels.approvalRequired,
34239
34280
  fileChangeApprovalLead: labels.fileChangeApprovalRequired,
@@ -34273,7 +34314,7 @@ function useAgentGUIDetailModel(input) {
34273
34314
  labels.planImplementationSkip
34274
34315
  ]
34275
34316
  );
34276
- const composerLabels = useMemo36(
34317
+ const composerLabels = useMemo37(
34277
34318
  () => ({
34278
34319
  send: labels.send,
34279
34320
  modelLabel: labels.modelLabel,
@@ -34634,20 +34675,19 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34634
34675
  selectProjectDirectory,
34635
34676
  onRequestGitBranches,
34636
34677
  onRequestComposerFocus,
34637
- contextMentionProviders,
34638
34678
  workspaceAppIcons = EMPTY_WORKSPACE_APP_ICONS4,
34639
34679
  renderProviderUnavailableState
34640
34680
  }) {
34641
34681
  "use memo";
34642
- const timelineRef = useRef42(null);
34643
- const bottomDockRef = useRef42(null);
34644
- const timelineScrollAnchorRef = useRef42(null);
34645
- const submittedPromptScrollConversationRef = useRef42(null);
34646
- const pendingPrependScrollAnchorRef = useRef42(null);
34682
+ const timelineRef = useRef43(null);
34683
+ const bottomDockRef = useRef43(null);
34684
+ const timelineScrollAnchorRef = useRef43(null);
34685
+ const submittedPromptScrollConversationRef = useRef43(null);
34686
+ const pendingPrependScrollAnchorRef = useRef43(null);
34647
34687
  const [
34648
34688
  bottomDockDismissedPromptRequestId,
34649
34689
  setBottomDockDismissedPromptRequestId
34650
- ] = useState36(null);
34690
+ ] = useState37(null);
34651
34691
  const {
34652
34692
  activePromptRequestId,
34653
34693
  bottomDockLiftedPrompt,
@@ -34821,7 +34861,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34821
34861
  )
34822
34862
  }) : void 0
34823
34863
  );
34824
- const bottomDockComposerProps = useMemo37(
34864
+ const bottomDockComposerProps = useMemo38(
34825
34865
  () => ({
34826
34866
  workspaceId: viewModel.shell.workspaceId,
34827
34867
  workspacePath: viewModel.shell.workspacePath,
@@ -34893,8 +34933,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34893
34933
  prepareExternalPromptFiles,
34894
34934
  promptAssetLimit,
34895
34935
  selectProjectDirectory: stableSelectProjectDirectory,
34896
- onRequestGitBranches: stableRequestGitBranches,
34897
- contextMentionProviders
34936
+ onRequestGitBranches: stableRequestGitBranches
34898
34937
  }),
34899
34938
  [
34900
34939
  canQueueWhileBusy,
@@ -34927,7 +34966,6 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34927
34966
  composerActivePrompt,
34928
34967
  editQueuedPrompt,
34929
34968
  onCapabilitySettingsRequest,
34930
- contextMentionProviders,
34931
34969
  removeQueuedPrompt,
34932
34970
  prepareExternalPromptFiles,
34933
34971
  promptAssetLimit,
@@ -34973,7 +35011,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34973
35011
  selectHomeComposerAgentTargetAndFocus
34974
35012
  ]
34975
35013
  );
34976
- const emptyHeroComposerProps = useMemo37(
35014
+ const emptyHeroComposerProps = useMemo38(
34977
35015
  () => ({
34978
35016
  ...bottomDockComposerProps,
34979
35017
  layoutMode: "hero"
@@ -34995,7 +35033,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34995
35033
  viewModel.composer.drainingQueuedPromptId ?? "",
34996
35034
  viewModel.interaction.isRespondingApproval ? "1" : "0"
34997
35035
  ].join("|");
34998
- useEffect33(() => {
35036
+ useEffect34(() => {
34999
35037
  setBottomDockDismissedPromptRequestId(null);
35000
35038
  }, [activePromptRequestId]);
35001
35039
  const {
@@ -35124,7 +35162,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
35124
35162
  });
35125
35163
 
35126
35164
  // agent-gui/agentGuiNode/view/AgentGUIRenameConversationDialog.tsx
35127
- import { memo as memo13, useCallback as useCallback54, useEffect as useEffect34, useRef as useRef43, useState as useState37 } from "react";
35165
+ import { memo as memo13, useCallback as useCallback54, useEffect as useEffect35, useRef as useRef44, useState as useState38 } from "react";
35128
35166
  import { ConfirmationDialog as ConfirmationDialog3, Input as Input2 } from "@tutti-os/ui-system";
35129
35167
  import { jsx as jsx68, jsxs as jsxs48 } from "react/jsx-runtime";
35130
35168
  var AgentGUIRenameConversationDialog = memo13(
@@ -35136,13 +35174,13 @@ var AgentGUIRenameConversationDialog = memo13(
35136
35174
  onRename
35137
35175
  }) {
35138
35176
  "use memo";
35139
- const [title, setTitle] = useState37("");
35140
- const [isSaving, setIsSaving] = useState37(false);
35141
- const isSavingRef = useRef43(false);
35142
- const armedPointerActionRef = useRef43(null);
35143
- const inputRef = useRef43(null);
35177
+ const [title, setTitle] = useState38("");
35178
+ const [isSaving, setIsSaving] = useState38(false);
35179
+ const isSavingRef = useRef44(false);
35180
+ const armedPointerActionRef = useRef44(null);
35181
+ const inputRef = useRef44(null);
35144
35182
  const trimmedTitle = title.trim();
35145
- useEffect34(() => {
35183
+ useEffect35(() => {
35146
35184
  if (!open || !conversation) {
35147
35185
  isSavingRef.current = false;
35148
35186
  armedPointerActionRef.current = null;
@@ -35152,7 +35190,7 @@ var AgentGUIRenameConversationDialog = memo13(
35152
35190
  }
35153
35191
  setTitle(conversation.title);
35154
35192
  }, [conversation, open]);
35155
- useEffect34(() => {
35193
+ useEffect35(() => {
35156
35194
  if (!open) {
35157
35195
  return;
35158
35196
  }
@@ -35369,11 +35407,11 @@ function AgentGUIReferencePickerSurface({
35369
35407
  }
35370
35408
 
35371
35409
  // agent-gui/agentGuiNode/view/AgentTargetSetupRoot.tsx
35372
- import { useCallback as useCallback55, useMemo as useMemo38 } from "react";
35410
+ import { useCallback as useCallback55, useMemo as useMemo39 } from "react";
35373
35411
  import { jsx as jsx70, jsxs as jsxs49 } from "react/jsx-runtime";
35374
35412
  function useAgentTargetSetupRoot(input) {
35375
35413
  const { preferences } = useAgentGUIProviderRailPreferences();
35376
- const homeTargetProjection = useMemo38(
35414
+ const homeTargetProjection = useMemo39(
35377
35415
  () => projectAgentGUIManagedHomeTargets({
35378
35416
  agentTargets: input.agentTargets,
35379
35417
  preferences,
@@ -35428,7 +35466,7 @@ function AgentTargetSetupRoot({
35428
35466
  }
35429
35467
 
35430
35468
  // agent-gui/agentGuiNode/view/useAgentGUIWorkspaceReferencePicker.ts
35431
- import { useCallback as useCallback56, useMemo as useMemo39, useRef as useRef44, useState as useState38 } from "react";
35469
+ import { useCallback as useCallback56, useMemo as useMemo40, useRef as useRef45, useState as useState39 } from "react";
35432
35470
  import { createRichTextMentionHref } from "@tutti-os/ui-rich-text/core";
35433
35471
  function useAgentGUIWorkspaceReferencePicker(input) {
35434
35472
  const {
@@ -35441,10 +35479,10 @@ function useAgentGUIWorkspaceReferencePicker(input) {
35441
35479
  workspaceFileReferenceAdapter,
35442
35480
  workspaceFileReferenceCopy
35443
35481
  } = input;
35444
- const [workspaceReferencePickerOpen, setWorkspaceReferencePickerOpen] = useState38(false);
35445
- const [workspaceReferencePickerTarget, setWorkspaceReferencePickerTarget] = useState38(null);
35446
- const workspaceReferencePickerResolverRef = useRef44(null);
35447
- const emptyReferencePickResult = useMemo39(
35482
+ const [workspaceReferencePickerOpen, setWorkspaceReferencePickerOpen] = useState39(false);
35483
+ const [workspaceReferencePickerTarget, setWorkspaceReferencePickerTarget] = useState39(null);
35484
+ const workspaceReferencePickerResolverRef = useRef45(null);
35485
+ const emptyReferencePickResult = useMemo40(
35448
35486
  () => ({ files: [], mentionItems: [] }),
35449
35487
  []
35450
35488
  );
@@ -35558,7 +35596,7 @@ function useAgentGUIWorkspaceReferencePicker(input) {
35558
35596
  }
35559
35597
 
35560
35598
  // agent-gui/agentGuiNode/engagement/useAgentGUINodeEngagement.ts
35561
- import { useRef as useRef46 } from "react";
35599
+ import { useRef as useRef47 } from "react";
35562
35600
 
35563
35601
  // agent-gui/agentGuiNode/engagement/projectAgentGUIEngagementContext.ts
35564
35602
  function projectAgentGUIEngagementContext(viewModel, composerReady) {
@@ -35590,7 +35628,7 @@ function createAgentGUIEngagementContextKey(input) {
35590
35628
  }
35591
35629
 
35592
35630
  // agent-gui/agentGuiNode/engagement/useAgentGUIPanelEngagement.ts
35593
- import { useEffect as useEffect35, useRef as useRef45 } from "react";
35631
+ import { useEffect as useEffect36, useRef as useRef46 } from "react";
35594
35632
 
35595
35633
  // agent-gui/agentGuiNode/engagement/AgentGUIPanelEngagementController.ts
35596
35634
  var AGENT_GUI_PANEL_EXPOSURE_DWELL_MS = 1e3;
@@ -35744,10 +35782,10 @@ function documentIsVisible() {
35744
35782
 
35745
35783
  // agent-gui/agentGuiNode/engagement/useAgentGUIPanelEngagement.ts
35746
35784
  function useAgentGUIPanelEngagement(input) {
35747
- const inputRef = useRef45(input);
35748
- const controllerRef = useRef45(null);
35749
- const intersectionRatioRef = useRef45(0);
35750
- const engagementRef = useRef45(null);
35785
+ const inputRef = useRef46(input);
35786
+ const controllerRef = useRef46(null);
35787
+ const intersectionRatioRef = useRef46(0);
35788
+ const engagementRef = useRef46(null);
35751
35789
  inputRef.current = input;
35752
35790
  if (!engagementRef.current) {
35753
35791
  engagementRef.current = {
@@ -35760,7 +35798,7 @@ function useAgentGUIPanelEngagement(input) {
35760
35798
  };
35761
35799
  }
35762
35800
  const engagementEnabled = Boolean(input.onEvent) && !input.previewMode;
35763
- useEffect35(() => {
35801
+ useEffect36(() => {
35764
35802
  const element = input.elementRef.current;
35765
35803
  if (!engagementEnabled || !element) return void 0;
35766
35804
  const controller = new AgentGUIPanelEngagementController({
@@ -35787,7 +35825,7 @@ function useAgentGUIPanelEngagement(input) {
35787
35825
 
35788
35826
  // agent-gui/agentGuiNode/engagement/useAgentGUINodeEngagement.ts
35789
35827
  function useAgentGUINodeEngagement(input) {
35790
- const layoutElementRef = useRef46(null);
35828
+ const layoutElementRef = useRef47(null);
35791
35829
  const projected = projectAgentGUIEngagementContext(
35792
35830
  input.viewModel,
35793
35831
  input.composerReady
@@ -35806,7 +35844,7 @@ function useAgentGUINodeEngagement(input) {
35806
35844
  }
35807
35845
 
35808
35846
  // agent-gui/agentGuiNode/view/useAgentGUIExternalRequests.ts
35809
- import { useCallback as useCallback57, useEffect as useEffect36, useRef as useRef47 } from "react";
35847
+ import { useCallback as useCallback57, useEffect as useEffect37, useRef as useRef48 } from "react";
35810
35848
  function resolveSessionActionConversation(viewModel, agentSessionId) {
35811
35849
  const active = viewModel.rail.activeConversation;
35812
35850
  if (!agentSessionId) {
@@ -35832,21 +35870,21 @@ function useAgentGUIExternalRequests(input) {
35832
35870
  viewModel
35833
35871
  } = input;
35834
35872
  const agentHostApi = useOptionalAgentHostApi();
35835
- const railInteractionLockProbeRef = useRef47(null);
35873
+ const railInteractionLockProbeRef = useRef48(null);
35836
35874
  const registerRailInteractionLockProbe = useCallback57(
35837
35875
  (probe) => {
35838
35876
  railInteractionLockProbeRef.current = probe;
35839
35877
  },
35840
35878
  []
35841
35879
  );
35842
- const handledNewConversationRequestSequenceRef = useRef47(
35880
+ const handledNewConversationRequestSequenceRef = useRef48(
35843
35881
  newConversationRequestSequence
35844
35882
  );
35845
- const handledSessionActionRequestSequenceRef = useRef47(
35883
+ const handledSessionActionRequestSequenceRef = useRef48(
35846
35884
  sessionActionRequest?.sequence ?? null
35847
35885
  );
35848
35886
  const copyConversationValue = useAgentGUIConversationCopyAction(labels);
35849
- useEffect36(() => {
35887
+ useEffect37(() => {
35850
35888
  if (newConversationRequestSequence !== null && handledNewConversationRequestSequenceRef.current !== newConversationRequestSequence) {
35851
35889
  handledNewConversationRequestSequenceRef.current = newConversationRequestSequence;
35852
35890
  if (!createConversationDisabled) {
@@ -35943,7 +35981,6 @@ function AgentGUINodeView({
35943
35981
  selectProjectDirectory,
35944
35982
  workspaceFileReferenceCopy = null,
35945
35983
  onRequestGitBranches = null,
35946
- contextMentionProviders,
35947
35984
  referenceSourceAggregator = null,
35948
35985
  resolveWorkspaceReferenceEntryIconUrl,
35949
35986
  resolveMentionReferenceTarget = null,
@@ -35962,16 +35999,16 @@ function AgentGUINodeView({
35962
35999
  previewMode,
35963
36000
  viewModel
35964
36001
  });
35965
- const [providerManagerOpen, setProviderManagerOpen] = useState39(false);
35966
- const railResizeInteractionRef = useRef48(null);
35967
- const [isRailResizing, setIsRailResizing] = useState39(false);
35968
- const [railResizeWidthPx, setRailResizeWidthPx] = useState39(
36002
+ const [providerManagerOpen, setProviderManagerOpen] = useState40(false);
36003
+ const railResizeInteractionRef = useRef49(null);
36004
+ const [isRailResizing, setIsRailResizing] = useState40(false);
36005
+ const [railResizeWidthPx, setRailResizeWidthPx] = useState40(
35969
36006
  null
35970
36007
  );
35971
36008
  const [
35972
36009
  localComposerFocusRequestSequence,
35973
36010
  setLocalComposerFocusRequestSequence
35974
- ] = useState39(0);
36011
+ ] = useState40(0);
35975
36012
  const {
35976
36013
  closeWorkspaceReferencePicker,
35977
36014
  confirmWorkspaceReferenceBundles,
@@ -36051,7 +36088,7 @@ function AgentGUINodeView({
36051
36088
  viewModel.composer.composerSettings.selectedProjectPath
36052
36089
  ]
36053
36090
  );
36054
- const effectiveWorkspaceAppIcons = useMemo40(
36091
+ const effectiveWorkspaceAppIcons = useMemo41(
36055
36092
  () => mergeWorkspaceAppIconsFromCommands({
36056
36093
  commands: viewModel.composer.availableCommands,
36057
36094
  workspaceAppIcons,
@@ -36132,7 +36169,7 @@ function AgentGUINodeView({
36132
36169
  },
36133
36170
  [onConversationRailWidthChanged]
36134
36171
  );
36135
- useEffect37(() => {
36172
+ useEffect38(() => {
36136
36173
  if (isRailResizing || railResizeWidthPx === null) {
36137
36174
  return;
36138
36175
  }
@@ -36184,7 +36221,7 @@ function AgentGUINodeView({
36184
36221
  const effectiveRailConfigProvider = railConfigProvider === void 0 ? viewModel.shell.data.provider : railConfigProvider;
36185
36222
  const effectiveRailSlashStatusLimits = railSlashStatusLimits ?? slashStatusLimits;
36186
36223
  const shouldShowProviderRailConfigButton = viewModel.rail.conversationFilter.kind === "all" || viewModel.rail.selectedAgentTarget?.disabled !== true;
36187
- const effectiveProviderAuthAccountLabel = useMemo40(() => {
36224
+ const effectiveProviderAuthAccountLabel = useMemo41(() => {
36188
36225
  const provider = (effectiveRailConfigProvider ?? viewModel.shell.data.provider)?.trim() ?? "";
36189
36226
  if (!provider) {
36190
36227
  return null;
@@ -36215,8 +36252,8 @@ function AgentGUINodeView({
36215
36252
  const openAgentSettings = useCallback58(() => {
36216
36253
  openWorkspaceSettingsPanel({ section: "agent" });
36217
36254
  }, []);
36218
- const [renameConversationTarget, setRenameConversationTarget] = useState39(null);
36219
- const [renameConversationDialogOpen, setRenameConversationDialogOpen] = useState39(false);
36255
+ const [renameConversationTarget, setRenameConversationTarget] = useState40(null);
36256
+ const [renameConversationDialogOpen, setRenameConversationDialogOpen] = useState40(false);
36220
36257
  const requestRenameConversation = useCallback58(
36221
36258
  (conversation) => {
36222
36259
  setRenameConversationTarget(conversation);
@@ -36235,7 +36272,7 @@ function AgentGUINodeView({
36235
36272
  uiLanguage,
36236
36273
  viewModel
36237
36274
  });
36238
- const conversationRailStoreState = useMemo40(
36275
+ const conversationRailStoreState = useMemo41(
36239
36276
  () => ({
36240
36277
  activeConversation: viewModel.rail.activeConversation,
36241
36278
  activeConversationId: viewModel.rail.activeConversationId,
@@ -36315,7 +36352,7 @@ function AgentGUINodeView({
36315
36352
  const targetPresentationKey = agentTargetPresentationKey(
36316
36353
  viewModel.rail.agentTargets
36317
36354
  );
36318
- const agentTargetPresentations = useMemo40(
36355
+ const agentTargetPresentations = useMemo41(
36319
36356
  () => projectAgentTargetPresentations({
36320
36357
  agentTargets: viewModel.rail.agentTargets,
36321
36358
  workspaceId: viewModel.shell.workspaceId
@@ -36491,7 +36528,6 @@ function AgentGUINodeView({
36491
36528
  selectProjectDirectory,
36492
36529
  onRequestGitBranches,
36493
36530
  onRequestComposerFocus: requestComposerFocus,
36494
- contextMentionProviders,
36495
36531
  workspaceAppIcons: effectiveWorkspaceAppIcons,
36496
36532
  workspaceUserProjectI18n,
36497
36533
  renderProviderUnavailableState,
@@ -36713,10 +36749,10 @@ function appendDockProbeUsageLines(probe, lines, isLoadingUsage, t) {
36713
36749
  import { Info as Info2 } from "lucide-react";
36714
36750
  import {
36715
36751
  useCallback as useCallback59,
36716
- useEffect as useEffect38,
36752
+ useEffect as useEffect39,
36717
36753
  useLayoutEffect as useLayoutEffect9,
36718
- useRef as useRef49,
36719
- useState as useState40
36754
+ useRef as useRef50,
36755
+ useState as useState41
36720
36756
  } from "react";
36721
36757
  import { createPortal as createPortal5 } from "react-dom";
36722
36758
  import { Fragment as Fragment21, jsx as jsx72, jsxs as jsxs51 } from "react/jsx-runtime";
@@ -36753,10 +36789,10 @@ function AgentProbeInfoPopover({
36753
36789
  onOpen
36754
36790
  }) {
36755
36791
  "use memo";
36756
- const anchorRef = useRef49(null);
36757
- const popoverRef = useRef49(null);
36758
- const [isOpen, setIsOpen] = useState40(false);
36759
- const [popoverStyle, setPopoverStyle] = useState40(null);
36792
+ const anchorRef = useRef50(null);
36793
+ const popoverRef = useRef50(null);
36794
+ const [isOpen, setIsOpen] = useState41(false);
36795
+ const [popoverStyle, setPopoverStyle] = useState41(null);
36760
36796
  const openPopover = useCallback59(() => {
36761
36797
  if (!isOpen) {
36762
36798
  onOpen?.();
@@ -36796,7 +36832,7 @@ function AgentProbeInfoPopover({
36796
36832
  maxWidth: availableWidth
36797
36833
  });
36798
36834
  }, []);
36799
- useEffect38(() => {
36835
+ useEffect39(() => {
36800
36836
  if (!isOpen) {
36801
36837
  return;
36802
36838
  }
@@ -36960,34 +36996,74 @@ function areAgentGUINodePropsEqual(previous, next) {
36960
36996
  const pc = previous.hostCapabilities, nc = next.hostCapabilities;
36961
36997
  const pa = previous.hostActions, na = next.hostActions;
36962
36998
  const ps = previous.renderSlots, ns = next.renderSlots;
36963
- return pi.nodeId === ni.nodeId && pi.workspaceId === ni.workspaceId && pi.currentUserId === ni.currentUserId && pi.title === ni.title && pw.path === nw.path && pw.fileReferenceAdapter === nw.fileReferenceAdapter && pw.onRequestGitBranches === nw.onRequestGitBranches && pw.selectProjectDirectory === nw.selectProjectDirectory && pw.prepareExternalPromptFiles === nw.prepareExternalPromptFiles && pw.promptAssetLimit === nw.promptAssetLimit && pw.referenceSourceAggregator === nw.referenceSourceAggregator && pw.resolveReferenceEntryIconUrl === nw.resolveReferenceEntryIconUrl && pw.resolveMentionReferenceTarget === nw.resolveMentionReferenceTarget && pw.resolveReferenceInitialTarget === nw.resolveReferenceInitialTarget && pw.onFileReferencesAdded === nw.onFileReferencesAdded && pw.agentSettings.avoidGroupingEdits === nw.agentSettings.avoidGroupingEdits && pc.referenceProvenanceFilterCatalog === nc.referenceProvenanceFilterCatalog && pc.referenceProvenanceFilterEnabled === nc.referenceProvenanceFilterEnabled && agentGuiStateEquals(previous.state, next.state) && pf.position.x === nf.position.x && pf.position.y === nf.position.y && pf.width === nf.width && pf.height === nf.height && pf.desktopSize.width === nf.desktopSize.width && pf.desktopSize.height === nf.desktopSize.height && pf.isMaximized === nf.isMaximized && pf.isActive === nf.isActive && pf.isVisible === nf.isVisible && pf.embedded === nf.embedded && pf.previewMode === nf.previewMode && pf.conversationRailAutoCollapseWidthPx === nf.conversationRailAutoCollapseWidthPx && pr.composerFocusSequence === nr.composerFocusSequence && pr.composerAppend === nr.composerAppend && pr.newConversationSequence === nr.newConversationSequence && pr.sessionAction === nr.sessionAction && pr.openSession === nr.openSession && pr.prefillPrompt === nr.prefillPrompt && pr.agentProbes === nr.agentProbes && pr.onProbeDemandChange === nr.onProbeDemandChange && pr.onProbeRefreshRequest === nr.onProbeRefreshRequest && pc.capabilityMenuState === nc.capabilityMenuState && pc.accountMenuState === nc.accountMenuState && pc.agentTargets === nc.agentTargets && pc.agentTargetsLoading === nc.agentTargetsLoading && pc.handoffAgentTargets === nc.handoffAgentTargets && pc.handoffAgentTargetsLoading === nc.handoffAgentTargetsLoading && pc.providerRailAllPresentation?.iconUrl === nc.providerRailAllPresentation?.iconUrl && pc.providerRailMode === nc.providerRailMode && pc.comingSoonProviders === nc.comingSoonProviders && pc.providerReadinessGates === nc.providerReadinessGates && pc.defaultAgentTargetId === nc.defaultAgentTargetId && pc.providerAuthAccountLabels === nc.providerAuthAccountLabels && pc.contextMentionProviders === nc.contextMentionProviders && pc.mentionService === nc.mentionService && pc.workspaceAppIcons === nc.workspaceAppIcons && pc.disabledHomeSuggestions === nc.disabledHomeSuggestions && pa.onLinkAction === na.onLinkAction && pa.onHandoffConversation === na.onHandoffConversation && pa.onCapabilitySettingsRequest === na.onCapabilitySettingsRequest && pa.onAgentProviderLogin === na.onAgentProviderLogin && pa.onAgentEnvPanelOpen === na.onAgentEnvPanelOpen && pa.onOpenConversationWindow === na.onOpenConversationWindow && pa.onClose === na.onClose && pa.onResize === na.onResize && pa.onUpdateNode === na.onUpdateNode && pa.onRememberComposerDefaults === na.onRememberComposerDefaults && pa.isMuted === na.isMuted && pa.onMinimize === na.onMinimize && pa.onToggleMaximize === na.onToggleMaximize && pa.onShowMessage === na.onShowMessage && pa.onEngagementEvent === na.onEngagementEvent && ps.providerRailEmpty === ns.providerRailEmpty && ps.providerUnavailableState === ns.providerUnavailableState && ps.sidebarFooter === ns.sidebarFooter;
36999
+ return pi.nodeId === ni.nodeId && pi.workspaceId === ni.workspaceId && pi.currentUserId === ni.currentUserId && pi.title === ni.title && pw.path === nw.path && pw.fileReferenceAdapter === nw.fileReferenceAdapter && pw.onRequestGitBranches === nw.onRequestGitBranches && pw.selectProjectDirectory === nw.selectProjectDirectory && pw.prepareExternalPromptFiles === nw.prepareExternalPromptFiles && pw.promptAssetLimit === nw.promptAssetLimit && pw.referenceSourceAggregator === nw.referenceSourceAggregator && pw.resolveReferenceEntryIconUrl === nw.resolveReferenceEntryIconUrl && pw.resolveMentionReferenceTarget === nw.resolveMentionReferenceTarget && pw.resolveReferenceInitialTarget === nw.resolveReferenceInitialTarget && pw.onFileReferencesAdded === nw.onFileReferencesAdded && pw.agentSettings.avoidGroupingEdits === nw.agentSettings.avoidGroupingEdits && pc.referenceProvenanceFilterCatalog === nc.referenceProvenanceFilterCatalog && pc.referenceProvenanceFilterEnabled === nc.referenceProvenanceFilterEnabled && agentGuiStateEquals(previous.state, next.state) && pf.position.x === nf.position.x && pf.position.y === nf.position.y && pf.width === nf.width && pf.height === nf.height && pf.desktopSize.width === nf.desktopSize.width && pf.desktopSize.height === nf.desktopSize.height && pf.isMaximized === nf.isMaximized && pf.isActive === nf.isActive && pf.isVisible === nf.isVisible && pf.embedded === nf.embedded && pf.previewMode === nf.previewMode && pf.conversationRailAutoCollapseWidthPx === nf.conversationRailAutoCollapseWidthPx && pr.composerFocusSequence === nr.composerFocusSequence && pr.composerAppend === nr.composerAppend && pr.newConversationSequence === nr.newConversationSequence && pr.sessionAction === nr.sessionAction && pr.openSession === nr.openSession && pr.prefillPrompt === nr.prefillPrompt && pr.agentProbes === nr.agentProbes && pr.onProbeDemandChange === nr.onProbeDemandChange && pr.onProbeRefreshRequest === nr.onProbeRefreshRequest && pc.capabilityMenuState === nc.capabilityMenuState && pc.accountMenuState === nc.accountMenuState && pc.agentTargets === nc.agentTargets && pc.agentTargetsLoading === nc.agentTargetsLoading && pc.handoffAgentTargets === nc.handoffAgentTargets && pc.handoffAgentTargetsLoading === nc.handoffAgentTargetsLoading && pc.providerRailAllPresentation?.iconUrl === nc.providerRailAllPresentation?.iconUrl && pc.providerRailMode === nc.providerRailMode && pc.comingSoonProviders === nc.comingSoonProviders && pc.providerReadinessGates === nc.providerReadinessGates && pc.defaultAgentTargetId === nc.defaultAgentTargetId && pc.providerAuthAccountLabels === nc.providerAuthAccountLabels && pc.mentionService === nc.mentionService && pc.workspaceAppIcons === nc.workspaceAppIcons && pc.disabledHomeSuggestions === nc.disabledHomeSuggestions && pa.onLinkAction === na.onLinkAction && pa.onHandoffConversation === na.onHandoffConversation && pa.onCapabilitySettingsRequest === na.onCapabilitySettingsRequest && pa.onAgentProviderLogin === na.onAgentProviderLogin && pa.onAgentEnvPanelOpen === na.onAgentEnvPanelOpen && pa.onOpenConversationWindow === na.onOpenConversationWindow && pa.onClose === na.onClose && pa.onResize === na.onResize && pa.onUpdateNode === na.onUpdateNode && pa.onRememberComposerDefaults === na.onRememberComposerDefaults && pa.isMuted === na.isMuted && pa.onMinimize === na.onMinimize && pa.onToggleMaximize === na.onToggleMaximize && pa.onShowMessage === na.onShowMessage && pa.onEngagementEvent === na.onEngagementEvent && ps.providerRailEmpty === ns.providerRailEmpty && ps.providerUnavailableState === ns.providerUnavailableState && ps.sidebarFooter === ns.sidebarFooter;
36964
37000
  }
36965
37001
 
36966
37002
  // agent-gui/agentGuiNode/AgentGUIMentionServiceBoundary.tsx
37003
+ import { useMemo as useMemo42 } from "react";
36967
37004
  import {
36968
37005
  RichTextMentionServiceProvider,
36969
- useEffectiveRichTextMentionService,
36970
- useRichTextMentionService
37006
+ useRichTextMentionService as useRichTextMentionService2
36971
37007
  } from "@tutti-os/ui-rich-text/editor";
37008
+
37009
+ // agent-gui/agentGuiNode/composeAgentGUIMentionService.ts
37010
+ function composeAgentGUIMentionService(input) {
37011
+ const { inheritedService, surfaceService } = input;
37012
+ const inheritedProviderIds = new Set(
37013
+ inheritedService.listProviders().map((provider) => provider.id)
37014
+ );
37015
+ const serviceForIdentity = (identity) => inheritedProviderIds.has(identity.providerId) ? inheritedService : surfaceService;
37016
+ return {
37017
+ listProviders: () => surfaceService.listProviders(),
37018
+ getProvider: (providerId) => surfaceService.getProvider(providerId),
37019
+ listTriggerConfigs: () => surfaceService.listTriggerConfigs(),
37020
+ query: (queryInput) => surfaceService.query(queryInput),
37021
+ resolve: (identity) => serviceForIdentity(identity).resolve(identity),
37022
+ getSnapshot: (identity) => serviceForIdentity(identity).getSnapshot(identity),
37023
+ invalidate(selector) {
37024
+ inheritedService.invalidate(selector);
37025
+ surfaceService.invalidate(selector);
37026
+ },
37027
+ subscribe(listener, identity) {
37028
+ if (identity) {
37029
+ return serviceForIdentity(identity).subscribe(listener, identity);
37030
+ }
37031
+ const unsubscribeInherited = inheritedService.subscribe(listener);
37032
+ const unsubscribeSurface = surfaceService.subscribe(listener);
37033
+ return () => {
37034
+ unsubscribeInherited();
37035
+ unsubscribeSurface();
37036
+ };
37037
+ },
37038
+ // The boundary does not own either service. Their creators retain disposal
37039
+ // authority so composing a view cannot tear down workspace subscriptions.
37040
+ dispose() {
37041
+ }
37042
+ };
37043
+ }
37044
+
37045
+ // agent-gui/agentGuiNode/AgentGUIMentionServiceBoundary.tsx
36972
37046
  import { jsx as jsx73 } from "react/jsx-runtime";
36973
37047
  function AgentGUIMentionServiceBoundary({
36974
37048
  children,
36975
- legacyProviders,
36976
37049
  service
36977
37050
  }) {
36978
- const inheritedService = useRichTextMentionService();
36979
- const effectiveService = useEffectiveRichTextMentionService({
36980
- mentionService: service,
36981
- triggerProviders: legacyProviders
36982
- });
36983
- if (!service && !inheritedService && !legacyProviders?.length) {
37051
+ const inheritedService = useRichTextMentionService2();
37052
+ const effectiveService = useMemo42(
37053
+ () => service && inheritedService && service !== inheritedService ? composeAgentGUIMentionService({
37054
+ inheritedService,
37055
+ surfaceService: service
37056
+ }) : service,
37057
+ [inheritedService, service]
37058
+ );
37059
+ if (!effectiveService || effectiveService === inheritedService) {
36984
37060
  return children;
36985
37061
  }
36986
- return effectiveService !== inheritedService ? /* @__PURE__ */ jsx73(RichTextMentionServiceProvider, { service: effectiveService, children }) : children;
37062
+ return /* @__PURE__ */ jsx73(RichTextMentionServiceProvider, { service: effectiveService, children });
36987
37063
  }
36988
37064
 
36989
37065
  // agent-gui/agentGuiNode/AgentGUINode.labels.ts
36990
- import { useMemo as useMemo41 } from "react";
37066
+ import { useMemo as useMemo43 } from "react";
36991
37067
 
36992
37068
  // agent-gui/agentGuiNode/model/agentHomeSuggestions.ts
36993
37069
  import { createRichTextMentionHref as createRichTextMentionHref2 } from "@tutti-os/ui-rich-text/core";
@@ -37171,7 +37247,7 @@ function agentGUIProviderManagerLabels(t) {
37171
37247
 
37172
37248
  // agent-gui/agentGuiNode/AgentGUINode.labels.ts
37173
37249
  function useAgentGUIConversationRailLabels(t) {
37174
- return useMemo41(() => agentGUIConversationRailLabels(t), [t]);
37250
+ return useMemo43(() => agentGUIConversationRailLabels(t), [t]);
37175
37251
  }
37176
37252
  var workspaceFileReferenceLocaleKeyByPickerKey = {
37177
37253
  "actions.cancel": "common.cancel",
@@ -37221,7 +37297,7 @@ function useAgentGUIViewLabels(input) {
37221
37297
  workspaceAppIcons,
37222
37298
  workspaceId
37223
37299
  } = input;
37224
- return useMemo41(
37300
+ return useMemo43(
37225
37301
  () => ({
37226
37302
  initialPlaceholder: t("agentHost.agentGui.initialPlaceholder", {
37227
37303
  provider: displayProviderLabel
@@ -37853,7 +37929,7 @@ function useAgentGUIViewLabels(input) {
37853
37929
  );
37854
37930
  }
37855
37931
  function useAgentGUIWorkspaceFileReferenceCopy(t) {
37856
- return useMemo41(
37932
+ return useMemo43(
37857
37933
  () => ({
37858
37934
  t(key, values) {
37859
37935
  const localeKey = workspaceFileReferenceLocaleKeyByPickerKey[key];
@@ -37996,7 +38072,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
37996
38072
  conversationRailAutoCollapseWidthPx = null
37997
38073
  } = frame;
37998
38074
  const railAutoCollapseWidthPx = conversationRailAutoCollapseWidthPx ?? void 0;
37999
- const widthRef = useRef50(width);
38075
+ const widthRef = useRef51(width);
38000
38076
  widthRef.current = width;
38001
38077
  const {
38002
38078
  composerAppend: composerAppendRequest = null,
@@ -38022,7 +38098,6 @@ var AgentGUINode = memo14(function AgentGUINode2({
38022
38098
  providerReadinessGates = null,
38023
38099
  defaultAgentTargetId = null,
38024
38100
  providerAuthAccountLabels,
38025
- contextMentionProviders,
38026
38101
  mentionService,
38027
38102
  workspaceAppIcons,
38028
38103
  disabledHomeSuggestions,
@@ -38061,11 +38136,11 @@ var AgentGUINode = memo14(function AgentGUINode2({
38061
38136
  sidebarFooter: renderSidebarFooter
38062
38137
  } = renderSlots;
38063
38138
  const { i18n, locale, t } = useTranslation();
38064
- const workspaceUserProjectI18n = useMemo42(
38139
+ const workspaceUserProjectI18n = useMemo44(
38065
38140
  () => createWorkspaceUserProjectI18nRuntime(i18n),
38066
38141
  [i18n]
38067
38142
  );
38068
- const workspaceFileManagerI18n = useMemo42(
38143
+ const workspaceFileManagerI18n = useMemo44(
38069
38144
  () => typeof i18n?.t === "function" ? createWorkspaceFileManagerI18nRuntime(i18n) : null,
38070
38145
  [i18n]
38071
38146
  );
@@ -38127,7 +38202,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38127
38202
  const isConversationRailManuallyCollapsed = state.conversationRailCollapsed === true;
38128
38203
  const isConversationRailAutoCollapsed = shouldAutoCollapseAgentGUIConversationRail(width, railAutoCollapseWidthPx);
38129
38204
  const isConversationRailCollapsed = isConversationRailManuallyCollapsed || isConversationRailAutoCollapsed;
38130
- const minSize = useMemo42(
38205
+ const minSize = useMemo44(
38131
38206
  () => ({
38132
38207
  ...resolveCanonicalNodeMinSize("agentGui"),
38133
38208
  width: AGENT_GUI_COLLAPSED_MIN_WIDTH_PX
@@ -38218,7 +38293,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38218
38293
  },
38219
38294
  [actions, onUpdateNode, previewMode]
38220
38295
  );
38221
- const viewActions = useMemo42(
38296
+ const viewActions = useMemo44(
38222
38297
  () => ({
38223
38298
  ...actions,
38224
38299
  createConversation: handleCreateConversation
@@ -38241,21 +38316,21 @@ var AgentGUINode = memo14(function AgentGUINode2({
38241
38316
  const workspaceFileReferenceCopy = useAgentGUIWorkspaceFileReferenceCopy(t);
38242
38317
  const windowTitle = title;
38243
38318
  const activeProbeProvider = activeProvider;
38244
- const railStatusProvider = useMemo42(
38319
+ const railStatusProvider = useMemo44(
38245
38320
  () => resolveAgentGUIRailStatusProvider({
38246
38321
  conversationFilter: viewModel.rail.conversationFilter,
38247
38322
  agentTargets: viewModel.rail.agentTargets
38248
38323
  }),
38249
38324
  [viewModel.rail.conversationFilter, viewModel.rail.agentTargets]
38250
38325
  );
38251
- const activeAgentProbe = useMemo42(
38326
+ const activeAgentProbe = useMemo44(
38252
38327
  () => findWorkspaceAgentProbeForDockProvider(
38253
38328
  workspaceAgentProbes?.snapshot ?? null,
38254
38329
  activeProbeProvider
38255
38330
  ),
38256
38331
  [activeProbeProvider, workspaceAgentProbes?.snapshot]
38257
38332
  );
38258
- const railAgentProbe = useMemo42(
38333
+ const railAgentProbe = useMemo44(
38259
38334
  () => railStatusProvider ? findWorkspaceAgentProbeForDockProvider(
38260
38335
  workspaceAgentProbes?.snapshot ?? null,
38261
38336
  railStatusProvider
@@ -38264,7 +38339,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38264
38339
  );
38265
38340
  const canonicalSlashStatusQuotas = viewModel.detail.usage?.quotas ?? EMPTY_SLASH_STATUS_QUOTAS;
38266
38341
  const slashStatusQuotaSource = canonicalSlashStatusQuotas.length > 0 ? canonicalSlashStatusQuotas : activeAgentProbe?.usage?.quotas && activeAgentProbe.usage.quotas.length > 0 ? activeAgentProbe.usage.quotas : EMPTY_SLASH_STATUS_QUOTAS;
38267
- const slashStatusLimits = useMemo42(
38342
+ const slashStatusLimits = useMemo44(
38268
38343
  () => slashStatusLimitsFromQuotas(
38269
38344
  slashStatusQuotaSource,
38270
38345
  viewModel.composer.composerSettings.selectedModelValue ?? viewModel.composer.composerSettings.draftSettings.model,
@@ -38279,7 +38354,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38279
38354
  );
38280
38355
  const slashStatusLimitsUnavailable = slashStatusLimits.length === 0 && canonicalSlashStatusQuotas.length === 0 && !(workspaceAgentProbes?.isLoadingUsage ?? false) && (Boolean(activeAgentProbe?.usage) || Boolean(activeAgentProbe?.lastError));
38281
38356
  const railSlashStatusQuotaSource = railStatusProvider && railAgentProbe?.usage?.quotas && railAgentProbe.usage.quotas.length > 0 ? railAgentProbe.usage.quotas : EMPTY_SLASH_STATUS_QUOTAS;
38282
- const railSlashStatusLimits = useMemo42(
38357
+ const railSlashStatusLimits = useMemo44(
38283
38358
  () => slashStatusLimitsFromQuotas(railSlashStatusQuotaSource, null, t),
38284
38359
  [railSlashStatusQuotaSource, t]
38285
38360
  );
@@ -38287,7 +38362,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38287
38362
  const slashStatusUsageCapturedAtUnixMs = slashStatusUsageProbe?.usage?.capturedAtUnixMs ?? null;
38288
38363
  const slashStatusUsageDidFail = workspaceAgentProbes?.usageLoadFailed ?? false;
38289
38364
  const slashStatusUsageAttempted = Boolean(slashStatusUsageProbe?.usage) || Boolean(slashStatusUsageProbe?.lastError);
38290
- const agentProbeLines = useMemo42(() => {
38365
+ const agentProbeLines = useMemo44(() => {
38291
38366
  return buildDockAgentProbeTooltipLines(
38292
38367
  activeAgentProbe,
38293
38368
  workspaceAgentProbes?.isLoadingAvailability ?? false,
@@ -38303,7 +38378,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38303
38378
  workspaceAgentProbes?.isLoadingUsage,
38304
38379
  t
38305
38380
  ]);
38306
- useEffect39(() => {
38381
+ useEffect40(() => {
38307
38382
  if (previewMode || !onAgentProbeDemandChange) {
38308
38383
  return;
38309
38384
  }
@@ -38313,7 +38388,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38313
38388
  onAgentProbeDemandChange(null, probeSourceId);
38314
38389
  };
38315
38390
  }, [activeProbeProvider, nodeId, onAgentProbeDemandChange, previewMode]);
38316
- useEffect39(() => {
38391
+ useEffect40(() => {
38317
38392
  if (previewMode || !onAgentProbeDemandChange || !railStatusProvider || railStatusProvider === activeProbeProvider) {
38318
38393
  return;
38319
38394
  }
@@ -38365,146 +38440,138 @@ var AgentGUINode = memo14(function AgentGUINode2({
38365
38440
  previewMode,
38366
38441
  railStatusProvider
38367
38442
  ]);
38368
- return /* @__PURE__ */ jsx74(
38369
- AgentGUIMentionServiceBoundary,
38443
+ return /* @__PURE__ */ jsx74(AgentGUIMentionServiceBoundary, { service: mentionService, children: /* @__PURE__ */ jsx74(
38444
+ WorkspaceNodeWindow,
38370
38445
  {
38371
- legacyProviders: contextMentionProviders,
38372
- service: mentionService,
38373
- children: /* @__PURE__ */ jsx74(
38374
- WorkspaceNodeWindow,
38375
- {
38376
- nodeId,
38377
- kind: "agentGui",
38378
- title: windowTitle,
38379
- titleIcon: null,
38380
- position,
38381
- width,
38382
- height,
38383
- desktopSize,
38384
- minSize,
38385
- appearance: embedded ? "embedded" : "window",
38386
- className: "size-full bg-transparent",
38387
- bodyClassName: `${AgentGUINode_styles_default.shell} nodrag size-full min-h-0 min-w-0 !bg-transparent p-0`,
38388
- hideHeader: embedded,
38389
- titleAccessory: /* @__PURE__ */ jsxs52("span", { className: "inline-flex flex-none items-center gap-1", children: [
38390
- /* @__PURE__ */ jsx74(
38391
- AgentProbeInfoPopover,
38392
- {
38393
- lines: agentProbeLines,
38394
- testId: "agent-gui-window-agent-info",
38395
- className: AgentGUINode_styles_default.windowAgentInfo,
38396
- onOpen: handleAgentProbeInfoOpen
38397
- }
38398
- ),
38399
- /* @__PURE__ */ jsx74(
38400
- CanvasNodeGhostIconButton,
38446
+ nodeId,
38447
+ kind: "agentGui",
38448
+ title: windowTitle,
38449
+ titleIcon: null,
38450
+ position,
38451
+ width,
38452
+ height,
38453
+ desktopSize,
38454
+ minSize,
38455
+ appearance: embedded ? "embedded" : "window",
38456
+ className: "size-full bg-transparent",
38457
+ bodyClassName: `${AgentGUINode_styles_default.shell} nodrag size-full min-h-0 min-w-0 !bg-transparent p-0`,
38458
+ hideHeader: embedded,
38459
+ titleAccessory: /* @__PURE__ */ jsxs52("span", { className: "inline-flex flex-none items-center gap-1", children: [
38460
+ /* @__PURE__ */ jsx74(
38461
+ AgentProbeInfoPopover,
38462
+ {
38463
+ lines: agentProbeLines,
38464
+ testId: "agent-gui-window-agent-info",
38465
+ className: AgentGUINode_styles_default.windowAgentInfo,
38466
+ onOpen: handleAgentProbeInfoOpen
38467
+ }
38468
+ ),
38469
+ /* @__PURE__ */ jsx74(
38470
+ CanvasNodeGhostIconButton,
38471
+ {
38472
+ "aria-label": isConversationRailCollapsed ? t("agentHost.agentGui.expandConversationRail") : t("agentHost.agentGui.collapseConversationRail"),
38473
+ title: isConversationRailCollapsed ? t("agentHost.agentGui.expandConversationRail") : t("agentHost.agentGui.collapseConversationRail"),
38474
+ "data-testid": "agent-gui-toggle-conversation-rail",
38475
+ "data-agent-gui-conversation-rail-collapsed": isConversationRailCollapsed ? "true" : "false",
38476
+ "data-agent-gui-conversation-rail-auto-collapsed": isConversationRailAutoCollapsed ? "true" : "false",
38477
+ onClick: (event) => {
38478
+ event.stopPropagation();
38479
+ handleConversationRailToggle();
38480
+ },
38481
+ children: /* @__PURE__ */ jsx74(
38482
+ CanvasNodePanelLinedIcon,
38401
38483
  {
38402
- "aria-label": isConversationRailCollapsed ? t("agentHost.agentGui.expandConversationRail") : t("agentHost.agentGui.collapseConversationRail"),
38403
- title: isConversationRailCollapsed ? t("agentHost.agentGui.expandConversationRail") : t("agentHost.agentGui.collapseConversationRail"),
38404
- "data-testid": "agent-gui-toggle-conversation-rail",
38405
- "data-agent-gui-conversation-rail-collapsed": isConversationRailCollapsed ? "true" : "false",
38406
- "data-agent-gui-conversation-rail-auto-collapsed": isConversationRailAutoCollapsed ? "true" : "false",
38407
- onClick: (event) => {
38408
- event.stopPropagation();
38409
- handleConversationRailToggle();
38410
- },
38411
- children: /* @__PURE__ */ jsx74(
38412
- CanvasNodePanelLinedIcon,
38413
- {
38414
- width: 18,
38415
- height: 18,
38416
- "aria-hidden": "true"
38417
- }
38418
- )
38484
+ width: 18,
38485
+ height: 18,
38486
+ "aria-hidden": "true"
38419
38487
  }
38420
38488
  )
38421
- ] }),
38422
- onClose,
38423
- onResize,
38424
- isMaximized,
38425
- isMuted,
38426
- hideMaximizeButton: true,
38427
- onMinimize,
38428
- onToggleMaximize,
38429
- children: (renderFrame) => {
38430
- const renderedWidth = renderFrame.size.width;
38431
- const isRenderedConversationRailCollapsed = isConversationRailCollapsed || shouldAutoCollapseAgentGUIConversationRail(
38432
- renderedWidth,
38433
- railAutoCollapseWidthPx
38434
- );
38435
- return /* @__PURE__ */ jsx74(
38436
- AgentGUINodeView,
38437
- {
38438
- viewModel,
38439
- renderSidebarFooter,
38440
- renderProviderRailEmpty,
38441
- renderProviderUnavailableState,
38442
- providerRailAllPresentation,
38443
- actions: viewActions,
38444
- isActive,
38445
- isVisible,
38446
- onEngagementEvent,
38447
- composerFocusRequestSequence,
38448
- newConversationRequestSequence,
38449
- sessionActionRequest,
38450
- slashStatusLimits,
38451
- slashStatusLimitsLoading: workspaceAgentProbes?.isLoadingUsage ?? false,
38452
- slashStatusLimitsUnavailable,
38453
- railConfigProvider: railStatusProvider,
38454
- railSlashStatusLimits,
38455
- slashStatusUsageCapturedAtUnixMs,
38456
- slashStatusUsageDidFail,
38457
- slashStatusUsageAttempted,
38458
- providerAuthAccountLabels,
38459
- onAgentConfigMenuOpen: handleAgentConfigMenuOpen,
38460
- onAgentUsageRefresh: handleAgentUsageRefresh,
38461
- onSlashStatusOpen: handleAgentProbeInfoOpen,
38462
- previewMode,
38463
- onLinkAction: handleLinkAction,
38464
- onHandoffConversation,
38465
- capabilityMenuState,
38466
- onCapabilitySettingsRequest,
38467
- onAgentProviderLogin: onAgentProviderLogin ? handleAgentProviderLogin : void 0,
38468
- onAgentEnvPanelOpen,
38469
- accountMenuState,
38470
- conversationRailCollapsed: isRenderedConversationRailCollapsed,
38471
- conversationRailWidthPx: clampAgentGUIConversationRailWidthPx(
38472
- state.conversationRailWidthPx,
38473
- renderedWidth
38474
- ),
38475
- conversationRailMinWidthPx: AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
38476
- conversationRailMaxWidthPx: resolveAgentGUIConversationRailMaxWidthPx(
38477
- renderedWidth
38478
- ),
38479
- detailMinWidthPx: AGENT_GUI_DETAIL_MIN_WIDTH_PX,
38480
- uiLanguage: locale,
38481
- onWorkspaceFileReferencesAdded: onWorkspaceFileReferencesAdded ? handleWorkspaceFileReferencesAdded : void 0,
38482
- prepareExternalPromptFiles,
38483
- promptAssetLimit,
38484
- onConversationRailWidthChanged: handleConversationRailWidthChanged,
38485
- labels,
38486
- conversationRailLabels,
38487
- workspaceUserProjectI18n,
38488
- workspaceFileManagerCopy: workspaceFileManagerI18n,
38489
- workspaceFileReferenceAdapter,
38490
- onOpenConversationWindow,
38491
- onRequestGitBranches,
38492
- selectProjectDirectory,
38493
- referenceSourceAggregator,
38494
- resolveWorkspaceReferenceEntryIconUrl,
38495
- resolveMentionReferenceTarget,
38496
- resolveWorkspaceReferenceInitialTarget,
38497
- workspaceFileReferenceCopy,
38498
- contextMentionProviders,
38499
- workspaceAppIcons,
38500
- referenceProvenanceFilter
38501
- }
38502
- );
38503
38489
  }
38504
- }
38505
- )
38490
+ )
38491
+ ] }),
38492
+ onClose,
38493
+ onResize,
38494
+ isMaximized,
38495
+ isMuted,
38496
+ hideMaximizeButton: true,
38497
+ onMinimize,
38498
+ onToggleMaximize,
38499
+ children: (renderFrame) => {
38500
+ const renderedWidth = renderFrame.size.width;
38501
+ const isRenderedConversationRailCollapsed = isConversationRailCollapsed || shouldAutoCollapseAgentGUIConversationRail(
38502
+ renderedWidth,
38503
+ railAutoCollapseWidthPx
38504
+ );
38505
+ return /* @__PURE__ */ jsx74(
38506
+ AgentGUINodeView,
38507
+ {
38508
+ viewModel,
38509
+ renderSidebarFooter,
38510
+ renderProviderRailEmpty,
38511
+ renderProviderUnavailableState,
38512
+ providerRailAllPresentation,
38513
+ actions: viewActions,
38514
+ isActive,
38515
+ isVisible,
38516
+ onEngagementEvent,
38517
+ composerFocusRequestSequence,
38518
+ newConversationRequestSequence,
38519
+ sessionActionRequest,
38520
+ slashStatusLimits,
38521
+ slashStatusLimitsLoading: workspaceAgentProbes?.isLoadingUsage ?? false,
38522
+ slashStatusLimitsUnavailable,
38523
+ railConfigProvider: railStatusProvider,
38524
+ railSlashStatusLimits,
38525
+ slashStatusUsageCapturedAtUnixMs,
38526
+ slashStatusUsageDidFail,
38527
+ slashStatusUsageAttempted,
38528
+ providerAuthAccountLabels,
38529
+ onAgentConfigMenuOpen: handleAgentConfigMenuOpen,
38530
+ onAgentUsageRefresh: handleAgentUsageRefresh,
38531
+ onSlashStatusOpen: handleAgentProbeInfoOpen,
38532
+ previewMode,
38533
+ onLinkAction: handleLinkAction,
38534
+ onHandoffConversation,
38535
+ capabilityMenuState,
38536
+ onCapabilitySettingsRequest,
38537
+ onAgentProviderLogin: onAgentProviderLogin ? handleAgentProviderLogin : void 0,
38538
+ onAgentEnvPanelOpen,
38539
+ accountMenuState,
38540
+ conversationRailCollapsed: isRenderedConversationRailCollapsed,
38541
+ conversationRailWidthPx: clampAgentGUIConversationRailWidthPx(
38542
+ state.conversationRailWidthPx,
38543
+ renderedWidth
38544
+ ),
38545
+ conversationRailMinWidthPx: AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
38546
+ conversationRailMaxWidthPx: resolveAgentGUIConversationRailMaxWidthPx(
38547
+ renderedWidth
38548
+ ),
38549
+ detailMinWidthPx: AGENT_GUI_DETAIL_MIN_WIDTH_PX,
38550
+ uiLanguage: locale,
38551
+ onWorkspaceFileReferencesAdded: onWorkspaceFileReferencesAdded ? handleWorkspaceFileReferencesAdded : void 0,
38552
+ prepareExternalPromptFiles,
38553
+ promptAssetLimit,
38554
+ onConversationRailWidthChanged: handleConversationRailWidthChanged,
38555
+ labels,
38556
+ conversationRailLabels,
38557
+ workspaceUserProjectI18n,
38558
+ workspaceFileManagerCopy: workspaceFileManagerI18n,
38559
+ workspaceFileReferenceAdapter,
38560
+ onOpenConversationWindow,
38561
+ onRequestGitBranches,
38562
+ selectProjectDirectory,
38563
+ referenceSourceAggregator,
38564
+ resolveWorkspaceReferenceEntryIconUrl,
38565
+ resolveMentionReferenceTarget,
38566
+ resolveWorkspaceReferenceInitialTarget,
38567
+ workspaceFileReferenceCopy,
38568
+ workspaceAppIcons,
38569
+ referenceProvenanceFilter
38570
+ }
38571
+ );
38572
+ }
38506
38573
  }
38507
- );
38574
+ ) });
38508
38575
  }, areAgentGUINodePropsEqual);
38509
38576
 
38510
38577
  // AgentGUI.tsx
@@ -38521,16 +38588,16 @@ var AgentGUI = memo15(function AgentGUI2({
38521
38588
  locale,
38522
38589
  ...props
38523
38590
  }) {
38524
- const normalizedAgents = useMemo43(
38591
+ const normalizedAgents = useMemo45(
38525
38592
  () => normalizeAgentGUIAgents(agentDirectory.agents),
38526
38593
  [agentDirectory.agents]
38527
38594
  );
38528
- const agentTargets = useMemo43(
38595
+ const agentTargets = useMemo45(
38529
38596
  () => projectAgentGUIAgentsToInternalTargets(normalizedAgents),
38530
38597
  [normalizedAgents]
38531
38598
  );
38532
38599
  const effectiveHandoffAgentDirectory = handoffAgentDirectory ?? agentDirectory;
38533
- const normalizedHandoffAgents = useMemo43(
38600
+ const normalizedHandoffAgents = useMemo45(
38534
38601
  () => effectiveHandoffAgentDirectory.agents === agentDirectory.agents ? normalizedAgents : normalizeAgentGUIAgents(effectiveHandoffAgentDirectory.agents),
38535
38602
  [
38536
38603
  agentDirectory.agents,
@@ -38538,13 +38605,13 @@ var AgentGUI = memo15(function AgentGUI2({
38538
38605
  normalizedAgents
38539
38606
  ]
38540
38607
  );
38541
- const handoffAgentTargets = useMemo43(
38608
+ const handoffAgentTargets = useMemo45(
38542
38609
  () => normalizedHandoffAgents === normalizedAgents ? agentTargets : projectAgentGUIAgentsToInternalTargets(normalizedHandoffAgents),
38543
38610
  [agentTargets, normalizedAgents, normalizedHandoffAgents]
38544
38611
  );
38545
38612
  const hostCapabilities = props.hostCapabilities;
38546
38613
  const renderSlots = props.renderSlots;
38547
- const nodeHostCapabilities = useMemo43(
38614
+ const nodeHostCapabilities = useMemo45(
38548
38615
  () => ({
38549
38616
  ...hostCapabilities,
38550
38617
  agentTargets,
@@ -38567,7 +38634,7 @@ var AgentGUI = memo15(function AgentGUI2({
38567
38634
  hostCapabilities
38568
38635
  ]
38569
38636
  );
38570
- const nodeRenderSlots = useMemo43(
38637
+ const nodeRenderSlots = useMemo45(
38571
38638
  () => ({
38572
38639
  ...renderSlots,
38573
38640
  providerRailEmpty: renderAgentsEmpty
@@ -38600,4 +38667,4 @@ export {
38600
38667
  resolveAgentGUIAgentTarget,
38601
38668
  AgentGUI
38602
38669
  };
38603
- //# sourceMappingURL=chunk-ORPU3AJK.js.map
38670
+ //# sourceMappingURL=chunk-QRBQ6OHG.js.map