@tutti-os/agent-gui 0.0.65 → 0.0.66

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 (69) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +1 -1
  3. package/dist/agent-conversation/index.d.ts +2 -2
  4. package/dist/agent-conversation/index.js +5 -5
  5. package/dist/agent-message-center/index.js +7 -7
  6. package/dist/{agentGuiNodeTypes-CCjzXdTe.d.ts → agentGuiNodeTypes-B9Aq3UEU.d.ts} +3 -1
  7. package/dist/app/renderer/agentactivity.css +43 -0
  8. package/dist/{chunk-UWBX3DZK.js → chunk-6ULTMCKP.js} +2 -2
  9. package/dist/{chunk-HKKC2U6J.js → chunk-CTJQTUQ3.js} +5 -5
  10. package/dist/{chunk-HKKC2U6J.js.map → chunk-CTJQTUQ3.js.map} +1 -1
  11. package/dist/{chunk-R7PSPKBD.js → chunk-DXVMRZHH.js} +2 -6
  12. package/dist/chunk-DXVMRZHH.js.map +1 -0
  13. package/dist/{chunk-W3Q7B3DV.js → chunk-HNODQVG2.js} +2 -2
  14. package/dist/{chunk-N7BGNAA2.js → chunk-JTFWT6DK.js} +6 -8
  15. package/dist/chunk-JTFWT6DK.js.map +1 -0
  16. package/dist/{chunk-XLBJHHDX.js → chunk-KRJF7WLJ.js} +11 -1
  17. package/dist/chunk-KRJF7WLJ.js.map +1 -0
  18. package/dist/{chunk-TG3ZXLPM.js → chunk-MYD37I32.js} +27 -3
  19. package/dist/chunk-MYD37I32.js.map +1 -0
  20. package/dist/{chunk-XZPAU7FC.js → chunk-NOTZW5WH.js} +2 -2
  21. package/dist/{chunk-IDTB6OID.js → chunk-T3KGZV35.js} +49 -11
  22. package/dist/chunk-T3KGZV35.js.map +1 -0
  23. package/dist/{chunk-6OYLLPPN.js → chunk-UBBHWDMP.js} +12 -8
  24. package/dist/{chunk-6OYLLPPN.js.map → chunk-UBBHWDMP.js.map} +1 -1
  25. package/dist/{chunk-EIPQGFAE.js → chunk-VBTPXEFH.js} +2 -2
  26. package/dist/{chunk-QULZNKPA.js → chunk-Z26P2QNT.js} +2 -2
  27. package/dist/context-mention-palette/index.js +6 -6
  28. package/dist/i18n/index.d.ts +10 -0
  29. package/dist/i18n/index.js +2 -2
  30. package/dist/index.d.ts +20 -5
  31. package/dist/index.js +283 -523
  32. package/dist/index.js.map +1 -1
  33. package/dist/queued-prompt-runtime.d.ts +22 -3
  34. package/dist/queued-prompt-runtime.js +1 -1
  35. package/dist/{types-BAPEle8b.d.ts → types-Bxn8bLEp.d.ts} +14 -1
  36. package/dist/workbench/contribution.d.ts +1 -1
  37. package/dist/workbench/index.d.ts +1 -1
  38. package/dist/workbench/index.js +3 -3
  39. package/dist/workbench/launch.d.ts +1 -1
  40. package/dist/workbench/providerCatalog.d.ts +1 -1
  41. package/dist/workbench/sessionTitle.d.ts +1 -1
  42. package/dist/workbench/sessionTitle.js +3 -3
  43. package/dist/workbench/state.d.ts +1 -1
  44. package/dist/workbench/types.d.ts +1 -1
  45. package/dist/workspace-agent-generated-files.js +3 -3
  46. package/package.json +12 -12
  47. package/dist/app/renderer/assets/icons/@-lined-14px.svg +0 -3
  48. package/dist/app/renderer/assets/icons/agents/manage-agent-claude-code.png +0 -0
  49. package/dist/app/renderer/assets/icons/agents/manage-agent-codex.png +0 -0
  50. package/dist/app/renderer/assets/icons/agents/manage-agent-gemini.png +0 -0
  51. package/dist/app/renderer/assets/icons/agents/manage-agent-hermes.png +0 -0
  52. package/dist/app/renderer/assets/icons/agents/manage-agent-openclaw.png +0 -0
  53. package/dist/app/renderer/assets/icons/agents/tutti-doc-rounded.png +0 -0
  54. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-claude-code.png +0 -0
  55. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-codex.png +0 -0
  56. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-gemini.png +0 -0
  57. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-nexight.png +0 -0
  58. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-openclaw.png +0 -0
  59. package/dist/app/renderer/assets/icons/arrow-left-filled.svg +0 -1
  60. package/dist/chunk-IDTB6OID.js.map +0 -1
  61. package/dist/chunk-N7BGNAA2.js.map +0 -1
  62. package/dist/chunk-R7PSPKBD.js.map +0 -1
  63. package/dist/chunk-TG3ZXLPM.js.map +0 -1
  64. package/dist/chunk-XLBJHHDX.js.map +0 -1
  65. /package/dist/{chunk-UWBX3DZK.js.map → chunk-6ULTMCKP.js.map} +0 -0
  66. /package/dist/{chunk-W3Q7B3DV.js.map → chunk-HNODQVG2.js.map} +0 -0
  67. /package/dist/{chunk-XZPAU7FC.js.map → chunk-NOTZW5WH.js.map} +0 -0
  68. /package/dist/{chunk-EIPQGFAE.js.map → chunk-VBTPXEFH.js.map} +0 -0
  69. /package/dist/{chunk-QULZNKPA.js.map → chunk-Z26P2QNT.js.map} +0 -0
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ import {
26
26
  import {
27
27
  AgentInteractivePromptSurface,
28
28
  approvalOptionDisplayLabel
29
- } from "./chunk-N7BGNAA2.js";
29
+ } from "./chunk-JTFWT6DK.js";
30
30
  import {
31
31
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
32
32
  PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
@@ -45,7 +45,7 @@ import {
45
45
  resolveAgentGUIExplicitConversationTitle,
46
46
  resolveAgentGUIProviderDisplayLabel,
47
47
  resolveAgentGUIProviderIdentity
48
- } from "./chunk-W3Q7B3DV.js";
48
+ } from "./chunk-HNODQVG2.js";
49
49
  import {
50
50
  AgentConversationFlow,
51
51
  Button,
@@ -66,14 +66,14 @@ import {
66
66
  skillTriggerForPrefix,
67
67
  toLocalShortDateTime,
68
68
  useProjectedAgentConversation
69
- } from "./chunk-6OYLLPPN.js";
69
+ } from "./chunk-UBBHWDMP.js";
70
70
  import {
71
71
  AgentMessageMarkdown,
72
72
  AgentTargetPresentationProvider,
73
73
  ZoomableImage,
74
74
  cn,
75
75
  resolveWorkspaceLinkAction
76
- } from "./chunk-IDTB6OID.js";
76
+ } from "./chunk-T3KGZV35.js";
77
77
  import {
78
78
  openAgentEnvPanel
79
79
  } from "./chunk-PSLAWU25.js";
@@ -84,7 +84,7 @@ import {
84
84
  DEFAULT_AGENT_MENTION_FILTER,
85
85
  agentMentionItemKey,
86
86
  preloadAgentMentionBrowse
87
- } from "./chunk-HKKC2U6J.js";
87
+ } from "./chunk-CTJQTUQ3.js";
88
88
  import {
89
89
  WORKSPACE_AGENT_ACTIVITY_RUNTIME_SESSION_ORIGIN,
90
90
  buildWorkspaceAgentActivityListViewModel,
@@ -94,10 +94,8 @@ import {
94
94
  isWorkspaceAgentUntitledTask,
95
95
  mergeWorkspaceAgentActivityDurableAndOverlayMessages,
96
96
  selectWorkspaceAgentActivityOverlayMessages
97
- } from "./chunk-QULZNKPA.js";
98
- import {
99
- Spinner
100
- } from "./chunk-R7PSPKBD.js";
97
+ } from "./chunk-Z26P2QNT.js";
98
+ import "./chunk-DXVMRZHH.js";
101
99
  import {
102
100
  resolveWorkspaceAgentSessionSortTimeUnixMs
103
101
  } from "./chunk-IBIMGLCD.js";
@@ -108,7 +106,7 @@ import {
108
106
  mentionItemToAttrs,
109
107
  normalizeAgentSessionMentionTitle,
110
108
  parseMentionItemFromHref
111
- } from "./chunk-XZPAU7FC.js";
109
+ } from "./chunk-NOTZW5WH.js";
112
110
  import "./chunk-Y35GDLP2.js";
113
111
  import "./chunk-LUGELG5V.js";
114
112
  import {
@@ -138,21 +136,21 @@ import {
138
136
  agentGuiI18nResources,
139
137
  translate,
140
138
  useTranslation
141
- } from "./chunk-UWBX3DZK.js";
139
+ } from "./chunk-6ULTMCKP.js";
142
140
  import "./chunk-PJP5BUU6.js";
143
141
  import {
144
142
  agentColorfulUrl,
145
143
  cursorColorfulUrl,
146
144
  normalizeManagedAgentProvider
147
145
  } from "./chunk-R2NGSPQS.js";
148
- import "./chunk-XLBJHHDX.js";
146
+ import "./chunk-KRJF7WLJ.js";
149
147
  import {
150
148
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
151
149
  } from "./chunk-JM24HADP.js";
152
150
  import "./chunk-GCBDIQDX.js";
153
151
  import {
154
152
  createAgentQueuedPromptRuntime
155
- } from "./chunk-TG3ZXLPM.js";
153
+ } from "./chunk-MYD37I32.js";
156
154
 
157
155
  // shared/agentActivitySnapshotProjection.ts
158
156
  import {
@@ -315,7 +313,7 @@ function agentHostTurnPhaseFromDisplay(status) {
315
313
 
316
314
  // AgentGUI.tsx
317
315
  import { memo as memo3 } from "react";
318
- import { TooltipProvider as TooltipProvider3 } from "@tutti-os/ui-system";
316
+ import { TooltipProvider as TooltipProvider4 } from "@tutti-os/ui-system";
319
317
 
320
318
  // agent-gui/agentGuiNode/AgentGUINode.tsx
321
319
  import { memo as memo2, useCallback as useCallback12, useEffect as useEffect15, useMemo as useMemo11 } from "react";
@@ -457,22 +455,10 @@ function GridTopLinedIcon(props) {
457
455
  );
458
456
  }
459
457
 
460
- // app/renderer/components/ui/dropdown-menu.tsx
458
+ // agent-gui/workspaceDesktop/view/WindowLayoutMenuButton.tsx
461
459
  import {
462
460
  DropdownMenu,
463
- DropdownMenuCheckboxItem,
464
461
  DropdownMenuContent,
465
- DropdownMenuGroup,
466
- DropdownMenuItem,
467
- DropdownMenuLabel,
468
- DropdownMenuPortal,
469
- DropdownMenuRadioGroup,
470
- DropdownMenuRadioItem,
471
- DropdownMenuSeparator,
472
- DropdownMenuShortcut,
473
- DropdownMenuSub,
474
- DropdownMenuSubContent,
475
- DropdownMenuSubTrigger,
476
462
  DropdownMenuTrigger
477
463
  } from "@tutti-os/ui-system";
478
464
 
@@ -2252,6 +2238,7 @@ function getTestAgentQueuedPromptRuntime() {
2252
2238
 
2253
2239
  // agent-gui/agentGuiNode/controller/useAgentGUINodeController.ts
2254
2240
  import {
2241
+ resolveSubmitAvailability,
2255
2242
  resolveAgentActivityCapability as resolveAgentActivityCapability2,
2256
2243
  resolveAgentActivityUsage,
2257
2244
  selectSessionDisplayStatuses
@@ -6734,6 +6721,7 @@ var ACTIVITY_STREAM_STATE_RELOAD_DEBOUNCE_MS = 150;
6734
6721
  var AGENT_GUI_DETAIL_MESSAGES_PAGE_SIZE = 100;
6735
6722
  var AGENT_GUI_DETAIL_MISSING_USER_BACKFILL_PAGE_LIMIT = 3;
6736
6723
  var AGENT_GUI_SUBMIT_RETARGET_EARLY_MESSAGE_TOLERANCE_MS = 5e3;
6724
+ var GOAL_CLEAR_PROMPT = "/goal clear";
6737
6725
  function mergeAgentModelCatalogInvalidationEvents(events) {
6738
6726
  const providers = /* @__PURE__ */ new Set();
6739
6727
  let occurredAtUnixMs = 0;
@@ -8850,6 +8838,7 @@ function useAgentGUINodeController({
8850
8838
  data,
8851
8839
  providerTargets,
8852
8840
  providerTargetsLoading = false,
8841
+ providerRailMode = "catalog",
8853
8842
  comingSoonProviders,
8854
8843
  providerReadinessGates = null,
8855
8844
  defaultProviderTargetId = null,
@@ -8868,21 +8857,22 @@ function useAgentGUINodeController({
8868
8857
  () => comingSoonProviders && comingSoonProviders.length > 0 ? [...comingSoonProviders] : emptyComingSoonProviders,
8869
8858
  [comingSoonProviders]
8870
8859
  );
8871
- const normalizedExplicitProviderTargets = useMemo4(
8872
- () => applyComingSoonProviderTargets(
8873
- normalizeAgentGUIProviderTargets(providerTargets, {
8874
- includeDisabledPlaceholders: true,
8875
- useStaticCatalog: false
8876
- }),
8860
+ const isExactProviderRailMode = providerRailMode === "exact";
8861
+ const normalizedExplicitProviderTargets = useMemo4(() => {
8862
+ const normalized = normalizeAgentGUIProviderTargets(providerTargets, {
8863
+ includeDisabledPlaceholders: !isExactProviderRailMode,
8864
+ useStaticCatalog: false
8865
+ });
8866
+ return isExactProviderRailMode ? normalized : applyComingSoonProviderTargets(
8867
+ normalized,
8877
8868
  normalizedComingSoonProviders
8878
- ),
8879
- [normalizedComingSoonProviders, providerTargets]
8880
- );
8869
+ );
8870
+ }, [isExactProviderRailMode, normalizedComingSoonProviders, providerTargets]);
8881
8871
  const normalizedProviderTargets = useMemo4(() => {
8882
8872
  if (providerTargetsLoading) {
8883
8873
  return [];
8884
8874
  }
8885
- if (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0) {
8875
+ if (!isExactProviderRailMode && (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0)) {
8886
8876
  return applyComingSoonProviderTargets(
8887
8877
  normalizeAgentGUIProviderTargets(null, {
8888
8878
  includeDisabledPlaceholders: true
@@ -8892,12 +8882,13 @@ function useAgentGUINodeController({
8892
8882
  }
8893
8883
  return normalizedExplicitProviderTargets;
8894
8884
  }, [
8885
+ isExactProviderRailMode,
8895
8886
  normalizedExplicitProviderTargets,
8896
8887
  normalizedComingSoonProviders,
8897
8888
  providerTargets,
8898
8889
  providerTargetsLoading
8899
8890
  ]);
8900
- const shouldUseStaticProviderTargets = !providerTargetsLoading && (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0);
8891
+ const shouldUseStaticProviderTargets = !isExactProviderRailMode && !providerTargetsLoading && (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0);
8901
8892
  const selectedProviderTarget = useMemo4(() => {
8902
8893
  const resolved = resolveAgentGUIProviderTarget({
8903
8894
  agentTargetId: data.agentTargetId,
@@ -12440,7 +12431,7 @@ function useAgentGUINodeController({
12440
12431
  workspaceId
12441
12432
  ]);
12442
12433
  const executePrompt = useCallback4(
12443
- (agentSessionId, content, displayPrompt) => {
12434
+ (agentSessionId, content, displayPrompt, options) => {
12444
12435
  const normalizedContent = normalizeAgentPromptContentBlocks(content);
12445
12436
  if (!agentSessionId || normalizedContent.length === 0) {
12446
12437
  return;
@@ -12560,6 +12551,7 @@ function useAgentGUINodeController({
12560
12551
  agentSessionId,
12561
12552
  content: normalizedContent,
12562
12553
  displayPrompt: displayPrompt && displayPrompt.trim() ? displayPrompt : null,
12554
+ ...options?.guidance === true ? { guidance: true } : {},
12563
12555
  metadata: agentSubmitTraceMetadata(submitTrace)
12564
12556
  });
12565
12557
  }).then((result) => {
@@ -12792,7 +12784,12 @@ function useAgentGUINodeController({
12792
12784
  );
12793
12785
  return;
12794
12786
  }
12795
- if (shouldQueuePromptLocally(agentSessionId) && options?.bypassLocalQueue !== true) {
12787
+ const hasQueuedPrompts = agentQueuedPromptRuntime.getSessionSnapshot({
12788
+ workspaceId,
12789
+ agentSessionId
12790
+ }).prompts.length > 0;
12791
+ agentQueuedPromptRuntime.resumeQueue({ workspaceId, agentSessionId });
12792
+ if ((hasQueuedPrompts || shouldQueuePromptLocally(agentSessionId)) && options?.bypassLocalQueue !== true) {
12796
12793
  queuePromptLocally(
12797
12794
  agentSessionId,
12798
12795
  normalizedContent,
@@ -12800,14 +12797,18 @@ function useAgentGUINodeController({
12800
12797
  );
12801
12798
  return;
12802
12799
  }
12803
- executePrompt(agentSessionId, normalizedContent, displayPromptText);
12800
+ executePrompt(agentSessionId, normalizedContent, displayPromptText, {
12801
+ guidance: options?.guidance === true
12802
+ });
12804
12803
  },
12805
12804
  [
12806
12805
  activation,
12806
+ agentQueuedPromptRuntime,
12807
12807
  executePrompt,
12808
12808
  isSessionMarkedNonResumable,
12809
12809
  queuePromptLocally,
12810
- shouldQueuePromptLocally
12810
+ shouldQueuePromptLocally,
12811
+ workspaceId
12811
12812
  ]
12812
12813
  );
12813
12814
  const goalControl = useCallback4(
@@ -12820,6 +12821,14 @@ function useAgentGUINodeController({
12820
12821
  return;
12821
12822
  }
12822
12823
  setDetailError(null);
12824
+ if (action === "clear") {
12825
+ executePrompt(
12826
+ agentSessionId,
12827
+ textPromptContent(GOAL_CLEAR_PROMPT),
12828
+ GOAL_CLEAR_PROMPT
12829
+ );
12830
+ return;
12831
+ }
12823
12832
  void agentActivityRuntime.goalControl({
12824
12833
  workspaceId,
12825
12834
  agentSessionId,
@@ -12834,6 +12843,7 @@ function useAgentGUINodeController({
12834
12843
  },
12835
12844
  [
12836
12845
  agentActivityRuntime,
12846
+ executePrompt,
12837
12847
  isCurrentConversation,
12838
12848
  previewMode,
12839
12849
  setDetailError,
@@ -12933,7 +12943,7 @@ function useAgentGUINodeController({
12933
12943
  agentSessionId,
12934
12944
  normalizedContent,
12935
12945
  displayPromptText,
12936
- { bypassLocalQueue: true }
12946
+ { bypassLocalQueue: true, guidance: true }
12937
12947
  );
12938
12948
  },
12939
12949
  [
@@ -13051,6 +13061,11 @@ function useAgentGUINodeController({
13051
13061
  ...current,
13052
13062
  [agentSessionId]: true
13053
13063
  }));
13064
+ agentQueuedPromptRuntime.suspendQueue({
13065
+ workspaceId,
13066
+ agentSessionId,
13067
+ reason: "user_stop"
13068
+ });
13054
13069
  setDetailError(null);
13055
13070
  void Promise.resolve().then(() => {
13056
13071
  if (!isCurrentConversation(agentSessionId)) {
@@ -13128,6 +13143,7 @@ function useAgentGUINodeController({
13128
13143
  });
13129
13144
  },
13130
13145
  [
13146
+ agentQueuedPromptRuntime,
13131
13147
  interruptingSessionIds,
13132
13148
  isCurrentConversation,
13133
13149
  syncConversationListProjection,
@@ -14583,7 +14599,7 @@ function useAgentGUINodeController({
14583
14599
  ]);
14584
14600
  const activeActivityDisplayStatus = activeConversationId ? agentActivityDisplayStatuses.get(activeConversationId) ?? null : null;
14585
14601
  const activeHasPendingSubmittedTurn = activeConversationId ? Boolean(pendingTurnIdBySessionIdRef.current[activeConversationId]) : false;
14586
- const activeSubmitBlocked = activeSessionState?.submitAvailability?.state === "blocked";
14602
+ const activeSubmitBlocked = activeSessionState ? resolveSubmitAvailability(activeSessionState).state === "blocked" : false;
14587
14603
  const activeConversationBusy = agentActivityDisplayStatusBusy(activeActivityDisplayStatus) || activeHasPendingSubmittedTurn || activeSubmitBlocked;
14588
14604
  const activeSessionResumable = activeRuntimeSession?.resumable ?? activeConversation?.resumable ?? activeSessionState?.resumable;
14589
14605
  const normalizedActiveConversationId = activeConversationId ?? "";
@@ -15163,6 +15179,7 @@ function useAgentGUINodeController({
15163
15179
  selectedProviderTarget: effectiveSelectedProviderTarget,
15164
15180
  providerTargets: normalizedProviderTargets,
15165
15181
  providerTargetsLoading,
15182
+ providerRailMode,
15166
15183
  comingSoonProviders: normalizedComingSoonProviders,
15167
15184
  conversationFilter,
15168
15185
  conversations: visibleConversations,
@@ -15236,6 +15253,7 @@ function useAgentGUINodeController({
15236
15253
  effectiveSelectedProviderTarget,
15237
15254
  normalizedComingSoonProviders,
15238
15255
  normalizedProviderTargets,
15256
+ providerRailMode,
15239
15257
  providerReadinessGate,
15240
15258
  providerTargetsLoading,
15241
15259
  detailError,
@@ -15478,16 +15496,6 @@ import {
15478
15496
  Wrench
15479
15497
  } from "lucide-react";
15480
15498
 
15481
- // app/renderer/components/ui/popover.tsx
15482
- import {
15483
- Popover,
15484
- PopoverAnchor,
15485
- PopoverClose,
15486
- PopoverContent,
15487
- PopoverPortal,
15488
- PopoverTrigger
15489
- } from "@tutti-os/ui-system";
15490
-
15491
15499
  // agent-gui/agentGuiNode/model/agentUsageThresholds.ts
15492
15500
  var USAGE_WARN_PERCENT = 80;
15493
15501
  var USAGE_CRITICAL_PERCENT = 95;
@@ -15554,16 +15562,24 @@ import {
15554
15562
  WorkspaceFileReferencePicker
15555
15563
  } from "@tutti-os/workspace-file-reference/ui";
15556
15564
  import {
15557
- Tooltip as Tooltip3,
15558
- TooltipContent as TooltipContent3,
15559
- TooltipProvider as TooltipProvider2,
15560
- TooltipTrigger as TooltipTrigger3,
15565
+ Tooltip as Tooltip4,
15566
+ TooltipContent as TooltipContent4,
15567
+ TooltipProvider as TooltipProvider3,
15568
+ TooltipTrigger as TooltipTrigger4,
15561
15569
  Select as Select3,
15562
15570
  SelectContent as SelectContent3,
15563
15571
  SelectItem as SelectItem3,
15564
15572
  SelectTrigger as SelectTrigger3,
15565
15573
  NewWorkspaceLinedIcon as NewWorkspaceLinedIcon2,
15566
15574
  ConfirmationDialog,
15575
+ DropdownMenu as DropdownMenu4,
15576
+ DropdownMenuContent as DropdownMenuContent4,
15577
+ DropdownMenuItem as DropdownMenuItem3,
15578
+ DropdownMenuTrigger as DropdownMenuTrigger4,
15579
+ Popover as Popover2,
15580
+ PopoverContent as PopoverContent2,
15581
+ PopoverTrigger,
15582
+ StatusDot,
15567
15583
  toastVariants,
15568
15584
  cn as cn3
15569
15585
  } from "@tutti-os/ui-system";
@@ -15664,351 +15680,15 @@ function SettingsLinedIcon(props) {
15664
15680
  );
15665
15681
  }
15666
15682
 
15667
- // app/renderer/components/StatusDot.tsx
15668
- import { StatusDot } from "@tutti-os/ui-system";
15669
-
15670
15683
  // agent-gui/RoomIssueNode/TaskSearchField.tsx
15671
15684
  import { useComposedInputValue } from "@tutti-os/ui-react-hooks";
15672
-
15673
- // app/renderer/components/ui/input.tsx
15674
15685
  import { Input } from "@tutti-os/ui-system";
15675
15686
 
15676
15687
  // agent-gui/RoomIssueNode/RoomIssueNode.styles.ts
15677
15688
  var styles = {
15678
- actionGrid: "room-issue-node__action-grid",
15679
- actionRow: "room-issue-node__action-row",
15680
- actionStack: "room-issue-node__action-stack",
15681
- attachEmptyHint: "room-issue-node__attach-empty-hint",
15682
- attachSection: "room-issue-node__attach-section",
15683
- body: "room-issue-node__body",
15684
- compactLayout: "room-issue-node__compact-layout",
15685
- compactSummary: "room-issue-node__compact-summary",
15686
- confirmDialogFooter: "room-issue-node__confirm-dialog-footer",
15687
- confirmDialogLead: "room-issue-node__confirm-dialog-lead",
15688
- confirmDialogOverlayCard: "room-issue-node__confirm-dialog-overlay-card",
15689
- contentArea: "room-issue-node__content-area",
15690
- contextAttachmentBox: "room-issue-node__context-attachment-box",
15691
- contextCardMain: "room-issue-node__context-card-main",
15692
- contextCardMeta: "room-issue-node__context-card-meta",
15693
- contextCardTitle: "room-issue-node__context-card-title",
15694
- contextList: "room-issue-node__context-list",
15695
- contextListCompact: "room-issue-node__context-list-compact",
15696
- contextRow: "room-issue-node__context-row",
15697
- contextRowLeading: "room-issue-node__context-row-leading",
15698
- contextRowOpenButton: "room-issue-node__context-row-open-button",
15699
- createFooterBar: "room-issue-node__create-footer-bar",
15700
- createFormScroll: "room-issue-node__create-form-scroll",
15701
- createPanel: "room-issue-node__create-panel",
15702
- dangerMenuItem: "room-issue-node__danger-menu-item",
15703
- datePicker: "room-issue-node__date-picker",
15704
- detailBodyScroll: "room-issue-node__detail-body-scroll",
15705
- detailBodyStack: "room-issue-node__detail-body-stack",
15706
- detailExecutionActionsRow: "room-issue-node__detail-execution-actions-row",
15707
- detailExecutionFooter: "room-issue-node__detail-execution-footer",
15708
- detailExecutionHintWrap: "room-issue-node__detail-execution-hint-wrap",
15709
- detailHeaderEditButton: "room-issue-node__detail-header-edit-button",
15710
- detailPanel: "room-issue-node__detail-panel",
15711
- detailPanelStretchWithFooter: "room-issue-node__detail-panel-stretch-with-footer",
15712
- detailReadHeader: "room-issue-node__detail-read-header",
15713
- detailSectionPlain: "room-issue-node__detail-section-plain",
15714
- editFooterBar: "room-issue-node__edit-footer-bar",
15715
- editorActionGroup: "room-issue-node__editor-action-group",
15716
- editorTitleInput: "room-issue-node__editor-title-input",
15717
- emptyHint: "room-issue-node__empty-hint",
15718
- emptyState: "room-issue-node__empty-state",
15719
- emptyStateBody: "room-issue-node__empty-state-body",
15720
- emptyStateDescription: "room-issue-node__empty-state-description",
15721
- emptyStateTitle: "room-issue-node__empty-state-title",
15722
- executionActionGrid: "room-issue-node__execution-action-grid",
15723
- executionButtonIcon: "room-issue-node__execution-button-icon",
15724
- executionCardActions: "room-issue-node__execution-card-actions",
15725
- executionCardFooter: "room-issue-node__execution-card-footer",
15726
- executionCardFooterMeta: "room-issue-node__execution-card-footer-meta",
15727
- executionCardFooterTimestamp: "room-issue-node__execution-card-footer-timestamp",
15728
- executionCardHeader: "room-issue-node__execution-card-header",
15729
- executionCardHeaderMain: "room-issue-node__execution-card-header-main",
15730
- executionCardList: "room-issue-node__execution-card-list",
15731
- executionCardSummary: "room-issue-node__execution-card-summary",
15732
- executionCardTitle: "room-issue-node__execution-card-title",
15733
- executionCardTitleRow: "room-issue-node__execution-card-title-row",
15734
- executionContentCard: "room-issue-node__execution-content-card",
15735
- executionEmptyCard: "room-issue-node__execution-empty-card",
15736
- executionHeaderButton: "room-issue-node__execution-header-button",
15737
- executionHintText: "room-issue-node__execution-hint-text",
15738
- executionInfoBody: "room-issue-node__execution-info-body",
15739
- executionInfoCard: "room-issue-node__execution-info-card",
15740
- executionInfoEmpty: "room-issue-node__execution-info-empty",
15741
- executionInfoGrid: "room-issue-node__execution-info-grid",
15742
- executionInfoTitle: "room-issue-node__execution-info-title",
15743
- executionInviteTooltip: "room-issue-node__execution-invite-tooltip",
15744
- executionInviteTooltipWrap: "room-issue-node__execution-invite-tooltip-wrap",
15745
- executionLatestSection: "room-issue-node__execution-latest-section",
15746
- executionLoadingCard: "room-issue-node__execution-loading-card",
15747
- executionPrimaryButton: "room-issue-node__execution-primary-button",
15748
- executionSecondaryButton: "room-issue-node__execution-secondary-button",
15749
- fieldBlock: "room-issue-node__field-block",
15750
- fieldRow: "room-issue-node__field-row",
15751
- filePicker: "room-issue-node__file-picker",
15752
- filePickerActions: "room-issue-node__file-picker-actions",
15753
- filePickerFooter: "room-issue-node__file-picker-footer",
15754
- filePickerFooterActions: "room-issue-node__file-picker-footer-actions",
15755
- filePickerLayout: "room-issue-node__file-picker-layout",
15756
- filePickerListPane: "room-issue-node__file-picker-list-pane",
15757
- filePickerListPaneEmpty: "room-issue-node__file-picker-list-pane-empty",
15758
- filePickerLoadingState: "room-issue-node__file-picker-loading-state",
15759
- filePickerPreview: "room-issue-node__file-picker-preview",
15760
- filePickerPreviewBody: "room-issue-node__file-picker-preview-body",
15761
- filePickerSkeletonIcon: "room-issue-node__file-picker-skeleton-icon",
15762
- filePickerSkeletonName: "room-issue-node__file-picker-skeleton-name",
15763
- filePickerSkeletonRow: "room-issue-node__file-picker-skeleton-row",
15764
- filePickerScrollbar: "room-issue-node__file-picker-scrollbar",
15765
- filePickerScrollbarThumb: "workspace-agents-status-panel__scrollbar-thumb",
15766
- filePickerToolbar: "room-issue-node__file-picker-toolbar",
15767
- filePickerTree: "room-issue-node__file-picker-tree",
15768
- fileRow: "room-issue-node__file-row",
15769
- fileRowCheckbox: "room-issue-node__file-row-checkbox",
15770
- fileRowCheckboxButton: "room-issue-node__file-row-checkbox-button",
15771
- fileRowContainer: "room-issue-node__file-row-container",
15772
- fileRowExpand: "room-issue-node__file-row-expand",
15773
- fileRowExpandButton: "room-issue-node__file-row-expand-button",
15774
- fileRowExpandSpacer: "room-issue-node__file-row-expand-spacer",
15775
- fileRowGlyph: "room-issue-node__file-row-glyph",
15776
- fileRowLabel: "room-issue-node__file-row-label",
15777
- fileRowPath: "room-issue-node__file-row-path",
15778
- fileRowText: "room-issue-node__file-row-text",
15779
- filterCount: "room-issue-node__filter-count",
15780
- filterTab: "room-issue-node__filter-tab",
15781
- filterTabIndicator: "room-issue-node__filter-tab-indicator",
15782
- filterTabs: "room-issue-node__filter-tabs",
15783
- filterTabsMask: "room-issue-node__filter-tabs-mask",
15784
- filterTabsMaskLeft: "room-issue-node__filter-tabs-mask-left",
15785
- filterTabsMaskRight: "room-issue-node__filter-tabs-mask-right",
15786
- filterTabsRow: "room-issue-node__filter-tabs-row",
15787
- filterTabsScrollButton: "room-issue-node__filter-tabs-scroll-button",
15788
- filterTabsScrollButtonLeft: "room-issue-node__filter-tabs-scroll-button-left",
15789
- filterTabsScrollButtonRight: "room-issue-node__filter-tabs-scroll-button-right",
15790
- filterTabsViewport: "room-issue-node__filter-tabs-viewport",
15791
- footerActions: "room-issue-node__footer-actions",
15792
- formGrid: "room-issue-node__form-grid",
15793
- formGridCreateSpacing: "room-issue-node__form-grid-create-spacing",
15794
- formSelect: "room-issue-node__form-select",
15795
- header: "room-issue-node__header",
15796
- headerActions: "room-issue-node__header-actions",
15797
- headerSelect: "room-issue-node__header-select",
15798
- headerTitle: "room-issue-node__header-title",
15799
- headerTitleText: "room-issue-node__header-title-text",
15800
- // i18n-check-ignore: CSS class name.
15801
- helperText: "room-issue-node__helper-text",
15802
- inlineGhostButton: "room-issue-node__inline-ghost-button",
15803
- issueActivityCard: "room-issue-node__issue-activity-card",
15804
- issueDrawer: "room-issue-node__issue-drawer",
15805
- issueDrawerBody: "room-issue-node__issue-drawer-body",
15806
- issueDrawerClosing: "room-issue-node__issue-drawer-closing",
15807
- issueDrawerContent: "room-issue-node__issue-drawer-content",
15808
- issueDrawerFooter: "room-issue-node__issue-drawer-footer",
15809
- issueDrawerFooterActions: "room-issue-node__issue-drawer-footer-actions",
15810
- issueDrawerHeader: "room-issue-node__issue-drawer-header",
15811
- issueDrawerHeaderActions: "room-issue-node__issue-drawer-header-actions",
15812
- issueDrawerHeaderMain: "room-issue-node__issue-drawer-header-main",
15813
- issueDrawerOverlay: "room-issue-node__issue-drawer-overlay",
15814
- issueDrawerOverlayClosing: "room-issue-node__issue-drawer-overlay-closing",
15815
- issueDrawerRunSelect: "room-issue-node__issue-drawer-run-select",
15816
- issueDrawerRunTrigger: "room-issue-node__issue-drawer-run-trigger",
15817
- issueDrawerTitle: "room-issue-node__issue-drawer-title",
15818
- issueEditorDialogBody: "room-issue-node__issue-editor-dialog-body",
15819
- issueEditorDialogFooter: "room-issue-node__issue-editor-dialog-footer",
15820
- issueEditorOverlayCard: "room-issue-node__issue-editor-overlay-card",
15821
- issueExpandedToolbar: "room-issue-node__issue-expanded-toolbar",
15822
- issueId: "room-issue-node__issue-id",
15823
- issueInlineAction: "room-issue-node__issue-inline-action",
15824
- issueLaunchButton: "room-issue-node__issue-launch-button",
15825
- issueLaunchChevron: "room-issue-node__issue-launch-chevron",
15826
- issueList: "room-issue-node__issue-list",
15827
- issueListEmptyCell: "room-issue-node__issue-list-empty-cell",
15828
- issueListFooter: "room-issue-node__issue-list-footer",
15829
- issueListItem: "room-issue-node__issue-list-item",
15830
- issueListLoadingState: "room-issue-node__issue-list-loading-state",
15831
- issueListRow: "room-issue-node__issue-list-row",
15832
- issueListRowActions: "room-issue-node__issue-list-row-actions",
15833
- issueListRowActive: "room-issue-node__issue-list-row-active",
15834
- issueListRowHeader: "room-issue-node__issue-list-row-header",
15835
- issueListRowHeaderMeta: "room-issue-node__issue-list-row-header-meta",
15836
- issueListRowMain: "room-issue-node__issue-list-row-main",
15837
- issueListRowMeta: "room-issue-node__issue-list-row-meta",
15838
- issueListRowRunSelect: "room-issue-node__issue-list-row-run-select",
15839
- issueListRowSummary: "room-issue-node__issue-list-row-summary",
15840
- issueListRowTimestamp: "room-issue-node__issue-list-row-timestamp",
15841
- issueListRowTitle: "room-issue-node__issue-list-row-title",
15842
- issueListRowTitleWrap: "room-issue-node__issue-list-row-title-wrap",
15843
- issueListScrollRegion: "room-issue-node__issue-list-scroll-region",
15844
- issueListSkeletonCard: "room-issue-node__issue-list-skeleton-card",
15845
- issueListSpacer: "room-issue-node__issue-list-spacer",
15846
- issueListSurface: "room-issue-node__issue-list-surface",
15847
- issueListTitleRow: "room-issue-node__issue-list-title-row",
15848
- issueSectionSurface: "room-issue-node__issue-section-surface",
15849
- issueSectionSurfaceIdle: "room-issue-node__issue-section-surface-idle",
15850
- issueMainLoadingState: "room-issue-node__issue-main-loading-state",
15851
- issueMainSkeletonBlock: "room-issue-node__issue-main-skeleton-block",
15852
- issueMainSkeletonEyebrow: "room-issue-node__issue-main-skeleton-eyebrow",
15853
- issueMainSkeletonLineFull: "room-issue-node__issue-main-skeleton-line-full",
15854
- issueMainSkeletonLineMid: "room-issue-node__issue-main-skeleton-line-mid",
15855
- issueMainSkeletonLineShort: "room-issue-node__issue-main-skeleton-line-short",
15856
- issueMainSkeletonMeta: "room-issue-node__issue-main-skeleton-meta",
15857
- issueMainSkeletonMetaRow: "room-issue-node__issue-main-skeleton-meta-row",
15858
- issueMainSkeletonMetaShort: "room-issue-node__issue-main-skeleton-meta-short",
15859
- issueMainSkeletonPanel: "room-issue-node__issue-main-skeleton-panel",
15860
- issueMainSkeletonSection: "room-issue-node__issue-main-skeleton-section",
15861
- issueMainSkeletonTitle: "room-issue-node__issue-main-skeleton-title",
15862
- issueMeta: "room-issue-node__issue-meta",
15863
- issueMoreAction: "room-issue-node__issue-more-action",
15864
- issueMoreIconAction: "room-issue-node__issue-more-icon-action",
15865
- issuePrimaryAction: "room-issue-node__issue-primary-action",
15866
- issueSecondaryAction: "room-issue-node__issue-secondary-action",
15867
- issueSectionHeader: "room-issue-node__issue-section-header",
15868
- issueSectionTitle: "room-issue-node__issue-section-title",
15869
- issueSkeletonBar: "room-issue-node__issue-skeleton-bar",
15870
- issueSkeletonBarMeta: "room-issue-node__issue-skeleton-bar-meta",
15871
- issueSkeletonBarSummary: "room-issue-node__issue-skeleton-bar-summary",
15872
- issueSkeletonBarTitle: "room-issue-node__issue-skeleton-bar-title",
15873
- issueTaskShellSurface: "room-issue-node__issue-task-shell-surface",
15874
- issueTitle: "room-issue-node__issue-title",
15875
- loadingHint: "room-issue-node__loading-hint",
15876
- loadingMask: "room-issue-node__loading-mask",
15877
- metaRow: "room-issue-node__meta-row",
15878
- metaRowSeparator: "room-issue-node__meta-row-separator",
15879
- node: "room-issue-node__node",
15880
- nodeMaximized: "room-issue-node__node-maximized",
15881
- nodeMuted: "room-issue-node__node-muted",
15882
- outputAttachmentBox: "room-issue-node__output-attachment-box",
15883
- outputButton: "room-issue-node__output-button",
15884
- outputButtonPath: "room-issue-node__output-button-path",
15885
- outputButtonTitle: "room-issue-node__output-button-title",
15886
- outputCard: "room-issue-node__output-card",
15887
- outputCardMainButton: "room-issue-node__output-card-main-button",
15888
- outputList: "room-issue-node__output-list",
15889
- outputMeta: "room-issue-node__output-meta",
15890
- outputTitle: "room-issue-node__output-title",
15891
- outputsList: "room-issue-node__outputs-list",
15892
- overlay: "room-issue-node__overlay",
15893
- overlayCard: "room-issue-node__overlay-card",
15894
- overlayCardNarrow: "room-issue-node__overlay-card-narrow",
15895
- overlayNarrow: "room-issue-node__overlay-narrow",
15896
- panelDescription: "room-issue-node__panel-description",
15897
- panelEyebrow: "room-issue-node__panel-eyebrow",
15898
- panelHeader: "room-issue-node__panel-header",
15899
- panelTitle: "room-issue-node__panel-title",
15900
- panelTitleIssueName: "room-issue-node__panel-title-issue-name",
15901
- prioritySelectWrap: "room-issue-node__priority-select-wrap",
15902
- resultCard: "room-issue-node__result-card",
15903
- resultSessionDetail: "room-issue-node__result-session-detail",
15904
- resultStatusRow: "room-issue-node__result-status-row",
15905
- resultTitle: "room-issue-node__result-title",
15906
- richTextEditorCompact: "room-issue-node__rich-text-editor-compact",
15907
- richTextEditorRead: "room-issue-node__rich-text-editor-read",
15908
- richTextEditorTall: "room-issue-node__rich-text-editor-tall",
15909
- runActionSelect: "room-issue-node__run-action-select",
15910
- runActionSelectMenu: "room-issue-node__run-action-select-menu",
15911
- runActionTriggerLabel: "room-issue-node__run-action-trigger-label",
15912
- runActionTriggerLabelText: "room-issue-node__run-action-trigger-label-text",
15913
- runActionWrap: "room-issue-node__run-action-wrap",
15914
- searchBar: "room-issue-node__search-bar",
15915
15689
  searchClearButton: "room-issue-node__search-clear-button",
15916
15690
  searchField: "room-issue-node__search-field",
15917
- searchInput: "room-issue-node__search-input",
15918
- sectionHeader: "room-issue-node__section-header",
15919
- sectionHeaderActions: "room-issue-node__section-header-actions",
15920
- sectionLabel: "room-issue-node__section-label",
15921
- sectionTitle: "room-issue-node__section-title",
15922
- selectionHint: "room-issue-node__selection-hint",
15923
- sidebarCategoryEmptyHint: "room-issue-node__sidebar-category-empty-hint",
15924
- sidebarCreateButton: "room-issue-node__sidebar-create-button",
15925
- sidebarEmptyHint: "room-issue-node__sidebar-empty-hint",
15926
- sidebarEmptySkeleton: "room-issue-node__sidebar-empty-skeleton",
15927
- sidebarEmptySkeletonCard: "room-issue-node__sidebar-empty-skeleton-card",
15928
- sidebarEmptyText: "room-issue-node__sidebar-empty-text",
15929
- sidebarEmptyTitle: "room-issue-node__sidebar-empty-title",
15930
- sidebarHeader: "room-issue-node__sidebar-header",
15931
- standardLayout: "room-issue-node__standard-layout",
15932
- standardLayoutEmpty: "room-issue-node__standard-layout-empty",
15933
- standardLayoutNarrow: "room-issue-node__standard-layout-narrow",
15934
- standardLayoutSidebarCollapsed: "room-issue-node__standard-layout-sidebar-collapsed",
15935
- standardMain: "room-issue-node__standard-main",
15936
- standardMainScroll: "room-issue-node__standard-main-scroll",
15937
- standardMainStretch: "room-issue-node__standard-main-stretch",
15938
- standardSidebar: "room-issue-node__standard-sidebar",
15939
- standardSidebarResizer: "room-issue-node__standard-sidebar-resizer",
15940
- standardSidebarResizerLine: "room-issue-node__standard-sidebar-resizer-line",
15941
- statusBadge: "room-issue-node__status-badge",
15942
- statusBadgeCanceled: "room-issue-node__status-badge-canceled",
15943
- statusBadgeCompleted: "room-issue-node__status-badge-completed",
15944
- statusBadgeDefault: "room-issue-node__status-badge-default",
15945
- statusBadgeFailed: "room-issue-node__status-badge-failed",
15946
- statusBadgePending: "room-issue-node__status-badge-pending",
15947
- statusBadgeRunning: "room-issue-node__status-badge-running",
15948
- statusFieldSelectWrap: "room-issue-node__status-field-select-wrap",
15949
- statusSelectWrap: "room-issue-node__status-select-wrap",
15950
- summaryText: "room-issue-node__summary-text",
15951
- taskCardFooter: "room-issue-node__task-card-footer",
15952
- taskCardHeader: "room-issue-node__task-card-header",
15953
- taskCenterMain: "room-issue-node__task-center-main",
15954
- taskCenterMainEditing: "room-issue-node__task-center-main-editing",
15955
- taskContentGrid: "room-issue-node__task-content-grid",
15956
- taskExecutionPanelsGroup: "room-issue-node__task-execution-panels-group",
15957
- taskDescriptionBody: "room-issue-node__task-description-body",
15958
- taskDescriptionBodyWrap: "room-issue-node__task-description-body-wrap",
15959
- taskDescriptionScrollable: "room-issue-node__task-description-scrollable",
15960
- taskDescriptionContent: "room-issue-node__task-description-content",
15961
- taskDescriptionEmpty: "room-issue-node__task-description-empty",
15962
- taskDescriptionFadeMask: "room-issue-node__task-description-fade-mask",
15963
- taskDescriptionSurface: "room-issue-node__task-description-surface",
15964
- taskDescriptionSurfaceOverflowing: "room-issue-node__task-description-surface-overflowing",
15965
- taskDescriptionViewport: "room-issue-node__task-description-viewport",
15966
- taskEmptyStateBody: "room-issue-node__task-empty-state-body",
15967
- taskEmptyStateButton: "room-issue-node__task-empty-state-button",
15968
- taskEmptyStateDescription: "room-issue-node__task-empty-state-description",
15969
- taskEmptyStateIcon: "room-issue-node__task-empty-state-icon",
15970
- taskEmptyStatePanel: "room-issue-node__task-empty-state-panel",
15971
- taskEmptyStateTitle: "room-issue-node__task-empty-state-title",
15972
- taskHeader: "room-issue-node__task-header",
15973
- taskHeaderActions: "room-issue-node__task-header-actions",
15974
- taskHeaderDangerAction: "room-issue-node__task-header-danger-action",
15975
- taskHeaderMain: "room-issue-node__task-header-main",
15976
- taskHeaderMetaRow: "room-issue-node__task-header-meta-row",
15977
- taskHeaderStatusTag: "room-issue-node__task-header-status-tag",
15978
- taskHeaderTextAction: "room-issue-node__task-header-text-action",
15979
- taskOverviewCard: "room-issue-node__task-overview-card",
15980
- taskOverviewPill: "room-issue-node__task-overview-pill",
15981
- taskOverviewPills: "room-issue-node__task-overview-pills",
15982
- taskOverviewStatCard: "room-issue-node__task-overview-stat-card",
15983
- taskOverviewStatLabel: "room-issue-node__task-overview-stat-label",
15984
- taskOverviewStatValue: "room-issue-node__task-overview-stat-value",
15985
- taskOverviewStatsGrid: "room-issue-node__task-overview-stats-grid",
15986
- taskRefChip: "room-issue-node__task-ref-chip",
15987
- taskRefChips: "room-issue-node__task-ref-chips",
15988
- taskReferencePickerBody: "room-issue-node__task-reference-picker-body",
15989
- taskReferencePickerCard: "room-issue-node__task-reference-picker-card",
15990
- taskReferencePickerEmpty: "room-issue-node__task-reference-picker-empty",
15991
- taskReferencePickerFooter: "room-issue-node__task-reference-picker-footer",
15992
- taskReferencePickerHeader: "room-issue-node__task-reference-picker-header",
15993
- taskReferencePickerList: "room-issue-node__task-reference-picker-list",
15994
- taskReferencePickerOverlay: "room-issue-node__task-reference-picker-overlay",
15995
- taskReferencePickerOverlayCard: "room-issue-node__task-reference-picker-overlay-card",
15996
- taskReferencePickerRow: "room-issue-node__task-reference-picker-row",
15997
- taskReferencePickerSelection: "room-issue-node__task-reference-picker-selection",
15998
- taskReferencePickerSelectionChip: "room-issue-node__task-reference-picker-selection-chip",
15999
- taskReferencePickerSelectionList: "room-issue-node__task-reference-picker-selection-list",
16000
- taskReferencePickerSummary: "room-issue-node__task-reference-picker-summary",
16001
- taskRefsEmpty: "room-issue-node__task-refs-empty",
16002
- taskRefsSection: "room-issue-node__task-refs-section",
16003
- taskShellActions: "room-issue-node__task-shell-actions",
16004
- taskShellBottomBar: "room-issue-node__task-shell-bottom-bar",
16005
- taskShellCard: "room-issue-node__task-shell-card",
16006
- taskShellDescription: "room-issue-node__task-shell-description",
16007
- taskShellRunningHeader: "room-issue-node__task-shell-running-header",
16008
- taskShellTitle: "room-issue-node__task-shell-title",
16009
- taskTitle: "room-issue-node__task-title",
16010
- taskTitleRow: "room-issue-node__task-title-row",
16011
- textInput: "room-issue-node__text-input"
15691
+ searchInput: "room-issue-node__search-input"
16012
15692
  };
16013
15693
  var RoomIssueNode_styles_default = styles;
16014
15694
 
@@ -16082,7 +15762,13 @@ function isTaskSearchImeComposing(event) {
16082
15762
  }
16083
15763
 
16084
15764
  // agent-gui/agentGuiNode/AgentSessionChrome.tsx
16085
- import { Button as Button2 } from "@tutti-os/ui-system";
15765
+ import {
15766
+ Button as Button2,
15767
+ Tooltip,
15768
+ TooltipContent,
15769
+ TooltipProvider,
15770
+ TooltipTrigger
15771
+ } from "@tutti-os/ui-system";
16086
15772
 
16087
15773
  // app/renderer/components/icons/CastIcon.tsx
16088
15774
  import {
@@ -16225,15 +15911,6 @@ var CastIcon = forwardRef2(
16225
15911
  );
16226
15912
  CastIcon.displayName = "CastIcon";
16227
15913
 
16228
- // app/renderer/components/ui/tooltip.tsx
16229
- import {
16230
- Tooltip,
16231
- TooltipContent,
16232
- TooltipPortal,
16233
- TooltipProvider,
16234
- TooltipTrigger
16235
- } from "@tutti-os/ui-system";
16236
-
16237
15914
  // agent-gui/agentGuiNode/AgentGUIChrome.styles.ts
16238
15915
  var styles2 = {
16239
15916
  sessionChrome: "agent-gui-chrome__session-chrome",
@@ -16687,10 +16364,18 @@ import {
16687
16364
  import { createPortal as createPortal3, flushSync } from "react-dom";
16688
16365
  import {
16689
16366
  Button as Button3,
16367
+ Popover,
16368
+ PopoverAnchor,
16369
+ PopoverContent,
16690
16370
  Select as Select2,
16691
16371
  SelectContent as SelectContent2,
16692
16372
  SelectItem as SelectItem2,
16693
- SelectTrigger as SelectTrigger2
16373
+ SelectTrigger as SelectTrigger2,
16374
+ Spinner,
16375
+ Tooltip as Tooltip3,
16376
+ TooltipContent as TooltipContent3,
16377
+ TooltipProvider as TooltipProvider2,
16378
+ TooltipTrigger as TooltipTrigger3
16694
16379
  } from "@tutti-os/ui-system";
16695
16380
  import { ListChecks as ListChecks2, Target as Target3, X } from "lucide-react";
16696
16381
  import {
@@ -17348,6 +17033,12 @@ import {
17348
17033
  useState as useState6
17349
17034
  } from "react";
17350
17035
  import { ChevronRight } from "lucide-react";
17036
+ import {
17037
+ DropdownMenu as DropdownMenu2,
17038
+ DropdownMenuContent as DropdownMenuContent2,
17039
+ DropdownMenuItem,
17040
+ DropdownMenuTrigger as DropdownMenuTrigger2
17041
+ } from "@tutti-os/ui-system";
17351
17042
 
17352
17043
  // agent-gui/agentGuiNode/AgentGUINode.styles.ts
17353
17044
  var styles3 = {
@@ -17482,6 +17173,7 @@ var styles3 = {
17482
17173
  providerRailLaunchpadIcon: "agent-gui-node__provider-rail-launchpad-icon",
17483
17174
  emptyHeroLaunchpadIcon: "agent-gui-node__empty-hero-launchpad-icon",
17484
17175
  providerRailLaunchpadItem: "agent-gui-node__provider-rail-launchpad-item",
17176
+ providerRailFooter: "agent-gui-node__provider-rail-footer",
17485
17177
  providerRailPanel: "agent-gui-node__provider-rail-panel",
17486
17178
  providerRailSeparator: "agent-gui-node__provider-rail-separator",
17487
17179
  providerRailTile: "agent-gui-node__provider-rail-tile",
@@ -17730,8 +17422,8 @@ function AgentQueuedPromptPanel({
17730
17422
  children: /* @__PURE__ */ jsx22(CanvasNodeTrashLinedIcon, { "aria-hidden": "true" })
17731
17423
  }
17732
17424
  ),
17733
- /* @__PURE__ */ jsxs11(DropdownMenu, { children: [
17734
- /* @__PURE__ */ jsx22(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx22(
17425
+ /* @__PURE__ */ jsxs11(DropdownMenu2, { children: [
17426
+ /* @__PURE__ */ jsx22(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsx22(
17735
17427
  CanvasNodeGhostIconButton,
17736
17428
  {
17737
17429
  "aria-label": labels.queuedPromptMoreActions,
@@ -17742,7 +17434,7 @@ function AgentQueuedPromptPanel({
17742
17434
  }
17743
17435
  ) }),
17744
17436
  /* @__PURE__ */ jsx22(
17745
- DropdownMenuContent,
17437
+ DropdownMenuContent2,
17746
17438
  {
17747
17439
  align: "end",
17748
17440
  className: AgentGUINode_styles_default.composerMenuContent,
@@ -17796,15 +17488,15 @@ import {
17796
17488
  import { prepareWorkspaceUserProjectSelection } from "@tutti-os/workspace-user-project/core";
17797
17489
  import {
17798
17490
  CheckIcon,
17799
- DropdownMenu as DropdownMenu2,
17800
- DropdownMenuContent as DropdownMenuContent2,
17491
+ DropdownMenu as DropdownMenu3,
17492
+ DropdownMenuContent as DropdownMenuContent3,
17801
17493
  DropdownMenuItem as DropdownMenuItem2,
17802
- DropdownMenuLabel as DropdownMenuLabel2,
17803
- DropdownMenuSeparator as DropdownMenuSeparator2,
17804
- DropdownMenuSub as DropdownMenuSub2,
17805
- DropdownMenuSubContent as DropdownMenuSubContent2,
17806
- DropdownMenuSubTrigger as DropdownMenuSubTrigger2,
17807
- DropdownMenuTrigger as DropdownMenuTrigger2,
17494
+ DropdownMenuLabel,
17495
+ DropdownMenuSeparator,
17496
+ DropdownMenuSub,
17497
+ DropdownMenuSubContent,
17498
+ DropdownMenuSubTrigger,
17499
+ DropdownMenuTrigger as DropdownMenuTrigger3,
17808
17500
  FolderIcon,
17809
17501
  NewWorkspaceLinedIcon,
17810
17502
  NoWorkspaceLinedIcon,
@@ -18657,18 +18349,18 @@ function AgentModelReasoningDropdown({
18657
18349
  if (previewMode) {
18658
18350
  return trigger;
18659
18351
  }
18660
- return /* @__PURE__ */ jsxs12(DropdownMenu2, { open: menuOpen, onOpenChange: setMenuOpen, children: [
18352
+ return /* @__PURE__ */ jsxs12(DropdownMenu3, { open: menuOpen, onOpenChange: setMenuOpen, children: [
18661
18353
  isModelLoading ? (
18662
18354
  // The trigger is disabled while loading, so pointer events never reach
18663
18355
  // it. Target the tooltip at a focusable wrapper span (Radix's pattern
18664
18356
  // for disabled triggers) so hover/focus reliably surfaces the hint.
18665
18357
  /* @__PURE__ */ jsxs12(Tooltip2, { children: [
18666
- /* @__PURE__ */ jsx23(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ jsx23("span", { className: "inline-flex", tabIndex: 0, children: /* @__PURE__ */ jsx23(DropdownMenuTrigger2, { asChild: true, disabled: menuDisabled, children: trigger }) }) }),
18358
+ /* @__PURE__ */ jsx23(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ jsx23("span", { className: "inline-flex", tabIndex: 0, children: /* @__PURE__ */ jsx23(DropdownMenuTrigger3, { asChild: true, disabled: menuDisabled, children: trigger }) }) }),
18667
18359
  /* @__PURE__ */ jsx23(TooltipContent2, { side: "top", children: labels.loadingOptions })
18668
18360
  ] })
18669
- ) : /* @__PURE__ */ jsx23(DropdownMenuTrigger2, { asChild: true, disabled: menuDisabled, children: trigger }),
18361
+ ) : /* @__PURE__ */ jsx23(DropdownMenuTrigger3, { asChild: true, disabled: menuDisabled, children: trigger }),
18670
18362
  /* @__PURE__ */ jsxs12(
18671
- DropdownMenuContent2,
18363
+ DropdownMenuContent3,
18672
18364
  {
18673
18365
  align: "end",
18674
18366
  side: "top",
@@ -18681,9 +18373,9 @@ function AgentModelReasoningDropdown({
18681
18373
  "data-agent-composer-settings-layout": "model-primary",
18682
18374
  children: [
18683
18375
  menu.model.show ? /* @__PURE__ */ jsxs12(Fragment5, { children: [
18684
- /* @__PURE__ */ jsx23(DropdownMenuLabel2, { children: labels.modelSelectionLabel }),
18376
+ /* @__PURE__ */ jsx23(DropdownMenuLabel, { children: labels.modelSelectionLabel }),
18685
18377
  menu.model.groups.length > 0 ? menu.model.groups.map((group, index) => /* @__PURE__ */ jsxs12(Fragment4, { children: [
18686
- group.label !== null ? /* @__PURE__ */ jsx23(DropdownMenuLabel2, { className: "text-xs text-[var(--agent-gui-text-tertiary)]", children: group.label }) : null,
18378
+ group.label !== null ? /* @__PURE__ */ jsx23(DropdownMenuLabel, { className: "text-xs text-[var(--agent-gui-text-tertiary)]", children: group.label }) : null,
18687
18379
  /* @__PURE__ */ jsx23(
18688
18380
  ComposerMenuOptionItems,
18689
18381
  {
@@ -18705,10 +18397,10 @@ function AgentModelReasoningDropdown({
18705
18397
  }
18706
18398
  )
18707
18399
  ] }) : null,
18708
- menu.model.show && (menu.reasoning.show || menu.speed.show) ? /* @__PURE__ */ jsx23(DropdownMenuSeparator2, {}) : null,
18709
- menu.reasoning.show ? /* @__PURE__ */ jsxs12(DropdownMenuSub2, { children: [
18400
+ menu.model.show && (menu.reasoning.show || menu.speed.show) ? /* @__PURE__ */ jsx23(DropdownMenuSeparator, {}) : null,
18401
+ menu.reasoning.show ? /* @__PURE__ */ jsxs12(DropdownMenuSub, { children: [
18710
18402
  /* @__PURE__ */ jsxs12(
18711
- DropdownMenuSubTrigger2,
18403
+ DropdownMenuSubTrigger,
18712
18404
  {
18713
18405
  className: cn2(AgentGUINode_styles_default.composerMenuItem, "[&>svg]:!ml-0.5"),
18714
18406
  "data-agent-reasoning-submenu-trigger": "true",
@@ -18719,7 +18411,7 @@ function AgentModelReasoningDropdown({
18719
18411
  }
18720
18412
  ),
18721
18413
  /* @__PURE__ */ jsx23(
18722
- DropdownMenuSubContent2,
18414
+ DropdownMenuSubContent,
18723
18415
  {
18724
18416
  className: cn2(AgentGUINode_styles_default.composerMenuContent, "min-w-[132px]"),
18725
18417
  "data-agent-composer-settings-layout": "model-submenu",
@@ -18735,9 +18427,9 @@ function AgentModelReasoningDropdown({
18735
18427
  }
18736
18428
  )
18737
18429
  ] }) : null,
18738
- menu.speed.show ? /* @__PURE__ */ jsxs12(DropdownMenuSub2, { children: [
18430
+ menu.speed.show ? /* @__PURE__ */ jsxs12(DropdownMenuSub, { children: [
18739
18431
  /* @__PURE__ */ jsxs12(
18740
- DropdownMenuSubTrigger2,
18432
+ DropdownMenuSubTrigger,
18741
18433
  {
18742
18434
  className: cn2(AgentGUINode_styles_default.composerMenuItem, "[&>svg]:!ml-0.5"),
18743
18435
  "data-agent-speed-submenu-trigger": "true",
@@ -18748,7 +18440,7 @@ function AgentModelReasoningDropdown({
18748
18440
  }
18749
18441
  ),
18750
18442
  /* @__PURE__ */ jsx23(
18751
- DropdownMenuSubContent2,
18443
+ DropdownMenuSubContent,
18752
18444
  {
18753
18445
  className: cn2(AgentGUINode_styles_default.composerMenuContent, "w-[200px]"),
18754
18446
  "data-agent-composer-settings-layout": "model-submenu",
@@ -23507,8 +23199,8 @@ function AgentComposer({
23507
23199
  /* @__PURE__ */ jsxs16("div", { className: AgentGUINode_styles_default.composerFooter, children: [
23508
23200
  /* @__PURE__ */ jsxs16("div", { className: composerStyles.footerGroup, children: [
23509
23201
  /* @__PURE__ */ jsxs16("div", { className: "inline-flex shrink-0 items-center gap-1", children: [
23510
- previewMode ? /* @__PURE__ */ jsx28(TooltipProvider, { delayDuration: 120, children: /* @__PURE__ */ jsxs16(Tooltip, { children: [
23511
- /* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
23202
+ previewMode ? /* @__PURE__ */ jsx28(TooltipProvider2, { delayDuration: 120, children: /* @__PURE__ */ jsxs16(Tooltip3, { children: [
23203
+ /* @__PURE__ */ jsx28(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx28(
23512
23204
  "button",
23513
23205
  {
23514
23206
  type: "button",
@@ -23527,8 +23219,8 @@ function AgentComposer({
23527
23219
  )
23528
23220
  }
23529
23221
  ) }),
23530
- /* @__PURE__ */ jsx28(TooltipContent, { side: "top", children: labels.addContent })
23531
- ] }) }) : /* @__PURE__ */ jsx28(TooltipProvider, { delayDuration: 120, children: /* @__PURE__ */ jsxs16(Tooltip, { children: [
23222
+ /* @__PURE__ */ jsx28(TooltipContent3, { side: "top", children: labels.addContent })
23223
+ ] }) }) : /* @__PURE__ */ jsx28(TooltipProvider2, { delayDuration: 120, children: /* @__PURE__ */ jsxs16(Tooltip3, { children: [
23532
23224
  /* @__PURE__ */ jsx28(
23533
23225
  Select2,
23534
23226
  {
@@ -23545,7 +23237,7 @@ function AgentComposer({
23545
23237
  void handleWorkspaceReferencePicker();
23546
23238
  }
23547
23239
  },
23548
- children: /* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
23240
+ children: /* @__PURE__ */ jsx28(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx28(
23549
23241
  SelectTrigger2,
23550
23242
  {
23551
23243
  size: "sm",
@@ -23567,10 +23259,10 @@ function AgentComposer({
23567
23259
  ) })
23568
23260
  }
23569
23261
  ),
23570
- /* @__PURE__ */ jsx28(TooltipContent, { side: "top", children: labels.addContent })
23262
+ /* @__PURE__ */ jsx28(TooltipContent3, { side: "top", children: labels.addContent })
23571
23263
  ] }) }),
23572
- /* @__PURE__ */ jsx28(TooltipProvider, { delayDuration: 120, children: /* @__PURE__ */ jsxs16(Tooltip, { children: [
23573
- /* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
23264
+ /* @__PURE__ */ jsx28(TooltipProvider2, { delayDuration: 120, children: /* @__PURE__ */ jsxs16(Tooltip3, { children: [
23265
+ /* @__PURE__ */ jsx28(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx28(
23574
23266
  "button",
23575
23267
  {
23576
23268
  type: "button",
@@ -23602,7 +23294,7 @@ function AgentComposer({
23602
23294
  )
23603
23295
  }
23604
23296
  ) }),
23605
- /* @__PURE__ */ jsx28(TooltipContent, { side: "top", children: labels.mentionPalette })
23297
+ /* @__PURE__ */ jsx28(TooltipContent3, { side: "top", children: labels.mentionPalette })
23606
23298
  ] }) })
23607
23299
  ] }),
23608
23300
  showHandoffSelect ? /* @__PURE__ */ jsxs16(
@@ -23953,10 +23645,10 @@ function AgentComposer({
23953
23645
  {
23954
23646
  className: AgentGUINode_styles_default.composerPromptTips,
23955
23647
  "data-testid": "agent-gui-prompt-tips",
23956
- children: !previewMode && isPromptTipOverflowing && promptTipNode ? /* @__PURE__ */ jsx28(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs16(Tooltip, { children: [
23957
- /* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: promptTipNode }),
23648
+ children: !previewMode && isPromptTipOverflowing && promptTipNode ? /* @__PURE__ */ jsx28(TooltipProvider2, { delayDuration: 0, children: /* @__PURE__ */ jsxs16(Tooltip3, { children: [
23649
+ /* @__PURE__ */ jsx28(TooltipTrigger3, { asChild: true, children: promptTipNode }),
23958
23650
  /* @__PURE__ */ jsx28(
23959
- TooltipContent,
23651
+ TooltipContent3,
23960
23652
  {
23961
23653
  align: "end",
23962
23654
  className: AgentGUINode_styles_default.composerPromptTipTooltip,
@@ -24211,6 +23903,7 @@ function AgentConversationListSkeleton({
24211
23903
  }
24212
23904
 
24213
23905
  // agent-gui/agentGuiNode/agentGuiNodeViewConversation.tsx
23906
+ import { Spinner as Spinner2 } from "@tutti-os/ui-system";
24214
23907
  import { AskLinedIcon } from "@tutti-os/ui-system/icons";
24215
23908
  import { jsx as jsx30 } from "react/jsx-runtime";
24216
23909
  function ConversationMeta({
@@ -24445,7 +24138,7 @@ function formatConversationRelativeTime(updatedAtUnixMs, nowMs, labels) {
24445
24138
  function LoadingGlyph() {
24446
24139
  "use memo";
24447
24140
  return /* @__PURE__ */ jsx30(
24448
- Spinner,
24141
+ Spinner2,
24449
24142
  {
24450
24143
  className: AgentGUINode_styles_default.conversationStatusGlyph,
24451
24144
  size: 14,
@@ -24483,6 +24176,7 @@ var AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX = 24;
24483
24176
  var AGENT_GUI_TOP_HISTORY_PREFETCH_THRESHOLD_PX = 240;
24484
24177
  var AGENT_GUI_TOP_MASK_SCROLL_EPSILON_PX = 1;
24485
24178
  var AGENT_GUI_CONVERSATION_RAIL_SECTION_PAGE_SIZE = 5;
24179
+ var AGENT_GUI_CONVERSATION_RAIL_LOADING_SKELETON_DELAY_MS = 300;
24486
24180
  var AGENT_GUI_CONVERSATION_RAIL_PROJECTION_PROVIDER = "codex";
24487
24181
  var AGENT_GUI_TIMELINE_SCROLL_AREA_CONTENT_STYLE = {
24488
24182
  width: "100%",
@@ -24525,6 +24219,22 @@ var fallbackWorkspaceFileReferenceCopy = {
24525
24219
  function agentGuiPerfNowMs() {
24526
24220
  return globalThis.performance?.now?.() ?? Date.now();
24527
24221
  }
24222
+ function useDelayedBoolean(value, delayMs) {
24223
+ const [delayedValue, setDelayedValue] = useState12(false);
24224
+ useEffect13(() => {
24225
+ if (!value) {
24226
+ setDelayedValue(false);
24227
+ return void 0;
24228
+ }
24229
+ const timer = window.setTimeout(() => {
24230
+ setDelayedValue(true);
24231
+ }, delayMs);
24232
+ return () => {
24233
+ window.clearTimeout(timer);
24234
+ };
24235
+ }, [delayMs, value]);
24236
+ return delayedValue;
24237
+ }
24528
24238
  function roundAgentGuiPerfMs(value) {
24529
24239
  return Math.round(value * 100) / 100;
24530
24240
  }
@@ -24734,6 +24444,7 @@ function handoffProjectPathForConversation(conversation) {
24734
24444
  function AgentGUINodeView({
24735
24445
  viewModel,
24736
24446
  renderSidebarFooter,
24447
+ renderProviderRailEmpty,
24737
24448
  onLinkAction,
24738
24449
  onHandoffConversation,
24739
24450
  capabilityMenuState,
@@ -24930,6 +24641,9 @@ function AgentGUINodeView({
24930
24641
  );
24931
24642
  const openProjectFiles = useOptionalStableEventCallback(onLinkAction);
24932
24643
  const detailComposerFocusRequestSequence = localComposerFocusRequestSequence === 0 ? composerFocusRequestSequence : (composerFocusRequestSequence ?? 0) + localComposerFocusRequestSequence;
24644
+ const requestComposerFocus = useCallback10(() => {
24645
+ setLocalComposerFocusRequestSequence((current) => current + 1);
24646
+ }, []);
24933
24647
  const requestCreateConversation = useCallback10(
24934
24648
  (options) => {
24935
24649
  if (previewMode) {
@@ -24946,11 +24660,12 @@ function AgentGUINodeView({
24946
24660
  } else {
24947
24661
  createConversationAction({ source: source ?? "rail_toolbar" });
24948
24662
  }
24949
- setLocalComposerFocusRequestSequence((current) => current + 1);
24663
+ requestComposerFocus();
24950
24664
  },
24951
24665
  [
24952
24666
  createConversationAction,
24953
24667
  previewMode,
24668
+ requestComposerFocus,
24954
24669
  viewModel.composerSettings.selectedProjectPath
24955
24670
  ]
24956
24671
  );
@@ -25223,27 +24938,43 @@ function AgentGUINodeView({
25223
24938
  inert: previewMode ? true : void 0,
25224
24939
  style: layoutStyle,
25225
24940
  children: [
25226
- showProviderRail ? /* @__PURE__ */ jsx31(
24941
+ showProviderRail ? /* @__PURE__ */ jsxs18(
25227
24942
  "aside",
25228
24943
  {
25229
24944
  className: `${AgentGUINode_styles_default.providerRailPanel} nodrag tsh-desktop-no-drag`,
25230
24945
  "aria-label": labels.providerSwitchLabel,
25231
24946
  "aria-hidden": conversationRailCollapsed ? "true" : void 0,
25232
24947
  inert: conversationRailCollapsed ? true : void 0,
25233
- children: /* @__PURE__ */ jsx31(
25234
- AgentGUIProviderRail,
25235
- {
25236
- conversationFilter: viewModel.conversationFilter,
25237
- labels,
25238
- previewMode,
25239
- selectedProviderTarget: viewModel.selectedProviderTarget,
25240
- providerTargets: viewModel.providerTargets,
25241
- providerTargetsLoading: viewModel.providerTargetsLoading,
25242
- comingSoonProviders: viewModel.comingSoonProviders,
25243
- onSelectConversationFilterTarget: actions.selectConversationFilterTarget,
25244
- onUpdateConversationFilter: actions.updateConversationFilter
25245
- }
25246
- )
24948
+ children: [
24949
+ /* @__PURE__ */ jsx31(
24950
+ AgentGUIProviderRail,
24951
+ {
24952
+ conversationFilter: viewModel.conversationFilter,
24953
+ labels,
24954
+ previewMode,
24955
+ selectedProviderTarget: viewModel.selectedProviderTarget,
24956
+ providerTargets: viewModel.providerTargets,
24957
+ providerTargetsLoading: viewModel.providerTargetsLoading,
24958
+ providerRailMode: viewModel.providerRailMode,
24959
+ renderProviderRailEmpty,
24960
+ comingSoonProviders: viewModel.comingSoonProviders,
24961
+ onSelectConversationFilterTarget: actions.selectConversationFilterTarget,
24962
+ onUpdateConversationFilter: actions.updateConversationFilter,
24963
+ onRequestComposerFocus: requestComposerFocus
24964
+ }
24965
+ ),
24966
+ renderSidebarFooter ? /* @__PURE__ */ jsx31(
24967
+ "div",
24968
+ {
24969
+ className: `${AgentGUINode_styles_default.providerRailFooter} nodrag tsh-desktop-no-drag`,
24970
+ "data-testid": "agent-gui-sidebar-footer-slot",
24971
+ children: renderSidebarFooter({
24972
+ currentUserId: viewModel.currentUserId,
24973
+ activeConversation: viewModel.activeConversation
24974
+ })
24975
+ }
24976
+ ) : null
24977
+ ]
25247
24978
  }
25248
24979
  ) : null,
25249
24980
  /* @__PURE__ */ jsx31(
@@ -25257,9 +24988,6 @@ function AgentGUINodeView({
25257
24988
  AgentGUIConversationRailStorePane,
25258
24989
  {
25259
24990
  conversations: viewModel.conversations,
25260
- currentUserId: viewModel.currentUserId,
25261
- activeConversation: viewModel.activeConversation,
25262
- renderSidebarFooter,
25263
24991
  store: conversationRailStore,
25264
24992
  storeState: conversationRailStoreState,
25265
24993
  userProjects: viewModel.userProjects,
@@ -25353,7 +25081,7 @@ function AgentGUINodeView({
25353
25081
  }
25354
25082
  )
25355
25083
  ] });
25356
- return previewMode ? content : /* @__PURE__ */ jsx31(TooltipProvider2, { children: content });
25084
+ return previewMode ? content : /* @__PURE__ */ jsx31(TooltipProvider3, { children: content });
25357
25085
  }
25358
25086
  function mergeWorkspaceAppIconsFromCommands(input) {
25359
25087
  const seen = new Set(
@@ -26618,10 +26346,10 @@ function AgentRunPathInfo({
26618
26346
  if (previewMode) {
26619
26347
  return trigger;
26620
26348
  }
26621
- return /* @__PURE__ */ jsxs18(Tooltip3, { children: [
26622
- /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: trigger }),
26349
+ return /* @__PURE__ */ jsxs18(Tooltip4, { children: [
26350
+ /* @__PURE__ */ jsx31(TooltipTrigger4, { asChild: true, children: trigger }),
26623
26351
  /* @__PURE__ */ jsx31(
26624
- TooltipContent3,
26352
+ TooltipContent4,
26625
26353
  {
26626
26354
  side: "top",
26627
26355
  align: "start",
@@ -27114,7 +26842,6 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
27114
26842
  tokensUsed: goalTokensUsed ?? void 0,
27115
26843
  timeUsedSeconds: goalTimeUsedSeconds ?? void 0,
27116
26844
  labels: goalBannerLabels,
27117
- onEditObjective: (objective) => onGoalControl("set", objective),
27118
26845
  onPauseGoal: goalPauseSupported ? () => onGoalControl("pause") : void 0,
27119
26846
  onResumeGoal: goalPauseSupported ? () => onGoalControl("resume") : void 0,
27120
26847
  onClearGoal: () => onGoalControl("clear")
@@ -27158,10 +26885,7 @@ function agentGUIConversationRailStoreSnapshotsEqual(current, next) {
27158
26885
  }
27159
26886
  var AgentGUIConversationRailStorePane = memo(
27160
26887
  function AgentGUIConversationRailStorePane2({
27161
- activeConversation,
27162
26888
  conversations,
27163
- currentUserId,
27164
- renderSidebarFooter,
27165
26889
  store,
27166
26890
  storeState: _storeState,
27167
26891
  userProjects,
@@ -27173,10 +26897,7 @@ var AgentGUIConversationRailStorePane = memo(
27173
26897
  AgentGUIConversationRailPane,
27174
26898
  {
27175
26899
  ...state,
27176
- activeConversation,
27177
26900
  conversations,
27178
- currentUserId,
27179
- renderSidebarFooter,
27180
26901
  userProjects,
27181
26902
  workspaceId
27182
26903
  }
@@ -27513,10 +27234,13 @@ function agentGUIProviderRailLabel(provider, targetLabel, labels) {
27513
27234
  function agentGUIProviderTargetMatchesConversationFilter(target, filter) {
27514
27235
  return filter.kind === "agentTarget" && (target.agentTargetId?.trim() ?? "") === filter.agentTargetId;
27515
27236
  }
27516
- function agentGUIProviderRailTargets(providerTargets, providerTargetsLoading, comingSoonProviders) {
27237
+ function agentGUIProviderRailTargets(providerTargets, providerTargetsLoading, comingSoonProviders, providerRailMode) {
27517
27238
  if (providerTargetsLoading) {
27518
27239
  return [];
27519
27240
  }
27241
+ if (providerRailMode === "exact") {
27242
+ return providerTargets;
27243
+ }
27520
27244
  const comingSoon = new Set(comingSoonProviders);
27521
27245
  const source = providerTargets.length > 0 && !agentGUIProviderRailTargetsAreFullLocalFallback(providerTargets) ? providerTargets : [];
27522
27246
  const seenProviders = new Set(source.map((target) => target.provider));
@@ -27549,7 +27273,10 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27549
27273
  selectedProviderTarget,
27550
27274
  providerTargets,
27551
27275
  providerTargetsLoading,
27276
+ providerRailMode,
27277
+ renderProviderRailEmpty,
27552
27278
  comingSoonProviders,
27279
+ onRequestComposerFocus,
27553
27280
  onSelectConversationFilterTarget,
27554
27281
  onUpdateConversationFilter
27555
27282
  }) {
@@ -27558,12 +27285,21 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27558
27285
  () => agentGUIProviderRailTargets(
27559
27286
  providerTargets,
27560
27287
  providerTargetsLoading,
27561
- comingSoonProviders
27288
+ comingSoonProviders,
27289
+ providerRailMode
27562
27290
  ),
27563
- [comingSoonProviders, providerTargets, providerTargetsLoading]
27291
+ [
27292
+ comingSoonProviders,
27293
+ providerRailMode,
27294
+ providerTargets,
27295
+ providerTargetsLoading
27296
+ ]
27564
27297
  );
27565
27298
  const providerTiles = useMemo10(() => {
27566
27299
  const targets = [...railProviderTargets];
27300
+ if (providerRailMode === "exact") {
27301
+ return targets;
27302
+ }
27567
27303
  const originalIndexByTarget = /* @__PURE__ */ new Map();
27568
27304
  targets.forEach((target, index) => {
27569
27305
  originalIndexByTarget.set(
@@ -27580,7 +27316,7 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27580
27316
  `${right.provider}\0${right.targetId}`
27581
27317
  ) ?? 0);
27582
27318
  });
27583
- }, [railProviderTargets]);
27319
+ }, [providerRailMode, railProviderTargets]);
27584
27320
  const selectedProviderTargetIsPlaceholder = selectedProviderTarget?.disabled === true;
27585
27321
  const allTileSelected = conversationFilter.kind === "all" && !selectedProviderTargetIsPlaceholder;
27586
27322
  const selectAllProviders = useCallback10(() => {
@@ -27594,8 +27330,10 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27594
27330
  });
27595
27331
  }
27596
27332
  }
27333
+ onRequestComposerFocus();
27597
27334
  }, [
27598
27335
  onSelectConversationFilterTarget,
27336
+ onRequestComposerFocus,
27599
27337
  onUpdateConversationFilter,
27600
27338
  railProviderTargets,
27601
27339
  selectedProviderTargetIsPlaceholder
@@ -27606,9 +27344,23 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27606
27344
  provider: target.provider,
27607
27345
  providerTargetId: target.targetId
27608
27346
  });
27347
+ onRequestComposerFocus();
27609
27348
  },
27610
- [onSelectConversationFilterTarget]
27349
+ [onRequestComposerFocus, onSelectConversationFilterTarget]
27611
27350
  );
27351
+ if (providerRailMode === "exact" && !providerTargetsLoading && providerTiles.length === 0 && renderProviderRailEmpty) {
27352
+ return /* @__PURE__ */ jsx31(
27353
+ "div",
27354
+ {
27355
+ className: AgentGUINode_styles_default.providerRail,
27356
+ role: "tablist",
27357
+ "aria-label": labels.providerSwitchLabel,
27358
+ "aria-busy": providerTargetsLoading,
27359
+ "data-empty": "true",
27360
+ children: renderProviderRailEmpty()
27361
+ }
27362
+ );
27363
+ }
27612
27364
  return /* @__PURE__ */ jsxs18(
27613
27365
  "div",
27614
27366
  {
@@ -27689,9 +27441,9 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27689
27441
  if (previewMode) {
27690
27442
  return tile;
27691
27443
  }
27692
- return /* @__PURE__ */ jsxs18(Tooltip3, { children: [
27693
- /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: tile }),
27694
- /* @__PURE__ */ jsx31(TooltipContent3, { side: "right", sideOffset: -4, children: label })
27444
+ return /* @__PURE__ */ jsxs18(Tooltip4, { children: [
27445
+ /* @__PURE__ */ jsx31(TooltipTrigger4, { asChild: true, children: tile }),
27446
+ /* @__PURE__ */ jsx31(TooltipContent4, { side: "right", sideOffset: -4, children: label })
27695
27447
  ] }, `${target.provider}:${target.targetId}:tooltip`);
27696
27448
  })
27697
27449
  ]
@@ -27710,10 +27462,12 @@ function useAgentGUIConversationRail({
27710
27462
  }) {
27711
27463
  const agentActivityRuntime = useAgentActivityRuntime();
27712
27464
  const [runtimeRailSections, setRuntimeRailSections] = useState12(null);
27465
+ const [runtimeRailSectionsPending, setRuntimeRailSectionsPending] = useState12(false);
27713
27466
  const [sectionPageStates, setSectionPageStates] = useState12(() => /* @__PURE__ */ new Map());
27714
27467
  const conversationsRef = useRef12(conversations);
27715
27468
  const pagingRequestSequenceRef = useRef12(0);
27716
27469
  const pagingAbortControllersRef = useRef12(/* @__PURE__ */ new Map());
27470
+ const workspaceIdRef = useRef12(workspaceId);
27717
27471
  const runtimeListSessionSections = agentActivityRuntime.listSessionSections;
27718
27472
  const runtimeListSessionSectionPage = agentActivityRuntime.listSessionSectionPage;
27719
27473
  const runtimeSectionsEnabled = !previewMode && Boolean(runtimeListSessionSections) && Boolean(runtimeListSessionSectionPage);
@@ -27737,12 +27491,16 @@ function useAgentGUIConversationRail({
27737
27491
  conversationsRef.current = conversations;
27738
27492
  }, [conversations]);
27739
27493
  useEffect13(() => {
27494
+ const workspaceChanged = workspaceIdRef.current !== workspaceId;
27495
+ workspaceIdRef.current = workspaceId;
27740
27496
  pagingRequestSequenceRef.current += 1;
27741
27497
  for (const controller of pagingAbortControllersRef.current.values()) {
27742
27498
  controller.abort();
27743
27499
  }
27744
27500
  pagingAbortControllersRef.current.clear();
27745
- setRuntimeRailSections(null);
27501
+ if (workspaceChanged) {
27502
+ setRuntimeRailSections(null);
27503
+ }
27746
27504
  setSectionPageStates(/* @__PURE__ */ new Map());
27747
27505
  return () => {
27748
27506
  pagingRequestSequenceRef.current += 1;
@@ -27760,10 +27518,12 @@ function useAgentGUIConversationRail({
27760
27518
  );
27761
27519
  useEffect13(() => {
27762
27520
  if (!runtimeSectionsEnabled || !runtimeListSessionSections) {
27521
+ setRuntimeRailSectionsPending(false);
27763
27522
  return;
27764
27523
  }
27765
27524
  const requestSequence = pagingRequestSequenceRef.current;
27766
27525
  const abortController = new AbortController();
27526
+ setRuntimeRailSectionsPending(true);
27767
27527
  void runtimeListSessionSections({
27768
27528
  agentTargetId: sectionAgentTargetId || void 0,
27769
27529
  limitPerSection: AGENT_GUI_CONVERSATION_RAIL_SECTION_PAGE_SIZE,
@@ -27790,6 +27550,7 @@ function useAgentGUIConversationRail({
27790
27550
  sectionsWithSummaries ?? sections
27791
27551
  )
27792
27552
  );
27553
+ setRuntimeRailSectionsPending(false);
27793
27554
  setSectionPageStates(() => {
27794
27555
  const next = /* @__PURE__ */ new Map();
27795
27556
  for (const section of page.sections) {
@@ -27806,6 +27567,7 @@ function useAgentGUIConversationRail({
27806
27567
  return;
27807
27568
  }
27808
27569
  setRuntimeRailSections([]);
27570
+ setRuntimeRailSectionsPending(false);
27809
27571
  });
27810
27572
  return () => {
27811
27573
  abortController.abort();
@@ -27940,6 +27702,7 @@ function useAgentGUIConversationRail({
27940
27702
  loadMoreSectionConversations,
27941
27703
  runtimeSectionsEnabled,
27942
27704
  runtimeRailSections,
27705
+ runtimeRailSectionsPending,
27943
27706
  sectionPageStates
27944
27707
  };
27945
27708
  }
@@ -27948,9 +27711,6 @@ var AgentGUIConversationRailPane = memo(
27948
27711
  conversations,
27949
27712
  workspaceId,
27950
27713
  userProjects,
27951
- currentUserId,
27952
- activeConversation,
27953
- renderSidebarFooter,
27954
27714
  activeConversationId,
27955
27715
  pendingDeleteConversationId,
27956
27716
  isLoadingConversations,
@@ -28001,6 +27761,7 @@ var AgentGUIConversationRailPane = memo(
28001
27761
  loadMoreSectionConversations,
28002
27762
  runtimeSectionsEnabled,
28003
27763
  runtimeRailSections,
27764
+ runtimeRailSectionsPending,
28004
27765
  sectionPageStates
28005
27766
  } = useAgentGUIConversationRail({
28006
27767
  conversationFilter,
@@ -28099,7 +27860,13 @@ var AgentGUIConversationRailPane = memo(
28099
27860
  }
28100
27861
  return counts;
28101
27862
  }, [displayConversations]);
28102
- const isRuntimeRailLoading = runtimeSectionsEnabled && runtimeRailSections === null;
27863
+ const isRuntimeRailLoading = runtimeSectionsEnabled && (runtimeRailSections === null || runtimeRailSectionsPending);
27864
+ const isConversationRailListLoading = isRuntimeRailLoading || isLoadingConversations && conversations.length === 0;
27865
+ const shouldShowConversationSkeleton = useDelayedBoolean(
27866
+ isConversationRailListLoading,
27867
+ AGENT_GUI_CONVERSATION_RAIL_LOADING_SKELETON_DELAY_MS
27868
+ );
27869
+ const shouldShowConversationEmptyState = !isConversationRailListLoading && groupedConversations.length === 0;
28103
27870
  const registerConversationItemElement = useCallback10(
28104
27871
  (itemId, element) => {
28105
27872
  if (element) {
@@ -28194,12 +27961,12 @@ var AgentGUIConversationRailPane = memo(
28194
27961
  className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100",
28195
27962
  viewportRef: conversationListRef,
28196
27963
  viewportClassName: AgentGUINode_styles_default.conversationList,
28197
- children: isRuntimeRailLoading || isLoadingConversations && conversations.length === 0 ? /* @__PURE__ */ jsx31(
27964
+ children: shouldShowConversationSkeleton ? /* @__PURE__ */ jsx31(
28198
27965
  AgentConversationListSkeleton,
28199
27966
  {
28200
27967
  label: labels.loadingConversations
28201
27968
  }
28202
- ) : groupedConversations.length === 0 ? /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.emptyState, children: /* @__PURE__ */ jsx31("span", { children: conversations.length === 0 ? labels.noConversations : conversationQuery.trim() ? labels.searchNoConversations : labels.conversationUnavailable }) }) : groupedConversations.map((section, sectionIndex) => {
27969
+ ) : shouldShowConversationEmptyState ? /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.emptyState, children: /* @__PURE__ */ jsx31("span", { children: conversations.length === 0 ? labels.noConversations : conversationQuery.trim() ? labels.searchNoConversations : labels.conversationUnavailable }) }) : groupedConversations.map((section, sectionIndex) => {
28203
27970
  const projectPath = section.kind === "project" ? section.project?.path ?? "" : "";
28204
27971
  const normalizedProjectPath = normalizeConversationRailProjectPath(projectPath);
28205
27972
  const projectLabel = section.kind === "project" ? section.label : "";
@@ -28254,8 +28021,8 @@ var AgentGUIConversationRailPane = memo(
28254
28021
  })
28255
28022
  }
28256
28023
  ),
28257
- selectedProviderTarget?.disabled === true ? null : /* @__PURE__ */ jsx31("div", { className: "shrink-0 px-2 py-1.5", children: /* @__PURE__ */ jsxs18(
28258
- Popover,
28024
+ selectedProviderTarget?.disabled === true || conversationFilter.kind === "all" ? null : /* @__PURE__ */ jsx31("div", { className: "shrink-0 px-2 py-1.5", children: /* @__PURE__ */ jsxs18(
28025
+ Popover2,
28259
28026
  {
28260
28027
  onOpenChange: (open) => {
28261
28028
  if (open) {
@@ -28285,7 +28052,7 @@ var AgentGUIConversationRailPane = memo(
28285
28052
  }
28286
28053
  ) }),
28287
28054
  /* @__PURE__ */ jsx31(
28288
- PopoverContent,
28055
+ PopoverContent2,
28289
28056
  {
28290
28057
  side: "top",
28291
28058
  align: "start",
@@ -28350,17 +28117,6 @@ var AgentGUIConversationRailPane = memo(
28350
28117
  ]
28351
28118
  }
28352
28119
  ) }),
28353
- renderSidebarFooter ? /* @__PURE__ */ jsx31(
28354
- "div",
28355
- {
28356
- className: "shrink-0 px-2 py-1.5",
28357
- "data-testid": "agent-gui-sidebar-footer-slot",
28358
- children: renderSidebarFooter({
28359
- currentUserId,
28360
- activeConversation
28361
- })
28362
- }
28363
- ) : null,
28364
28120
  /* @__PURE__ */ jsx31(
28365
28121
  ConfirmationDialog,
28366
28122
  {
@@ -28553,8 +28309,8 @@ var AgentGUIConversationRailSection = memo(
28553
28309
  onClick: handleCreateConversation,
28554
28310
  children: /* @__PURE__ */ jsx31(CreateChatIcon, { "aria-hidden": "true" })
28555
28311
  }
28556
- ) }) : /* @__PURE__ */ jsxs18(Tooltip3, { children: [
28557
- /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx31(
28312
+ ) }) : /* @__PURE__ */ jsxs18(Tooltip4, { children: [
28313
+ /* @__PURE__ */ jsx31(TooltipTrigger4, { asChild: true, children: /* @__PURE__ */ jsx31(
28558
28314
  "span",
28559
28315
  {
28560
28316
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
@@ -28572,7 +28328,7 @@ var AgentGUIConversationRailSection = memo(
28572
28328
  }
28573
28329
  ) }),
28574
28330
  /* @__PURE__ */ jsx31(
28575
- TooltipContent3,
28331
+ TooltipContent4,
28576
28332
  {
28577
28333
  side: "top",
28578
28334
  sideOffset: 6,
@@ -28581,8 +28337,8 @@ var AgentGUIConversationRailSection = memo(
28581
28337
  }
28582
28338
  )
28583
28339
  ] }),
28584
- projectPath ? /* @__PURE__ */ jsxs18(DropdownMenu, { children: [
28585
- previewMode ? /* @__PURE__ */ jsx31(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx31(
28340
+ projectPath ? /* @__PURE__ */ jsxs18(DropdownMenu4, { children: [
28341
+ previewMode ? /* @__PURE__ */ jsx31(DropdownMenuTrigger4, { asChild: true, children: /* @__PURE__ */ jsx31(
28586
28342
  "span",
28587
28343
  {
28588
28344
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
@@ -28596,8 +28352,8 @@ var AgentGUIConversationRailSection = memo(
28596
28352
  }
28597
28353
  )
28598
28354
  }
28599
- ) }) : /* @__PURE__ */ jsxs18(Tooltip3, { children: [
28600
- /* @__PURE__ */ jsx31(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx31(
28355
+ ) }) : /* @__PURE__ */ jsxs18(Tooltip4, { children: [
28356
+ /* @__PURE__ */ jsx31(DropdownMenuTrigger4, { asChild: true, children: /* @__PURE__ */ jsx31(TooltipTrigger4, { asChild: true, children: /* @__PURE__ */ jsx31(
28601
28357
  "span",
28602
28358
  {
28603
28359
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
@@ -28613,7 +28369,7 @@ var AgentGUIConversationRailSection = memo(
28613
28369
  }
28614
28370
  ) }) }),
28615
28371
  /* @__PURE__ */ jsx31(
28616
- TooltipContent3,
28372
+ TooltipContent4,
28617
28373
  {
28618
28374
  side: "right",
28619
28375
  sideOffset: 6,
@@ -28623,14 +28379,14 @@ var AgentGUIConversationRailSection = memo(
28623
28379
  )
28624
28380
  ] }),
28625
28381
  /* @__PURE__ */ jsxs18(
28626
- DropdownMenuContent,
28382
+ DropdownMenuContent4,
28627
28383
  {
28628
28384
  align: "end",
28629
28385
  className: `${AgentGUINode_styles_default.composerMenuContent} nodrag [-webkit-app-region:no-drag]`,
28630
28386
  sideOffset: 6,
28631
28387
  children: [
28632
28388
  /* @__PURE__ */ jsx31(
28633
- DropdownMenuItem,
28389
+ DropdownMenuItem3,
28634
28390
  {
28635
28391
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
28636
28392
  disabled: !onOpenProjectFiles,
@@ -28648,7 +28404,7 @@ var AgentGUIConversationRailSection = memo(
28648
28404
  }
28649
28405
  ),
28650
28406
  projectConversationCount > 0 ? /* @__PURE__ */ jsx31(
28651
- DropdownMenuItem,
28407
+ DropdownMenuItem3,
28652
28408
  {
28653
28409
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
28654
28410
  onSelect: () => {
@@ -28664,7 +28420,7 @@ var AgentGUIConversationRailSection = memo(
28664
28420
  }
28665
28421
  ) : null,
28666
28422
  /* @__PURE__ */ jsx31(
28667
- DropdownMenuItem,
28423
+ DropdownMenuItem3,
28668
28424
  {
28669
28425
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
28670
28426
  onSelect: () => {
@@ -28682,8 +28438,8 @@ var AgentGUIConversationRailSection = memo(
28682
28438
  }
28683
28439
  )
28684
28440
  ] }) : null,
28685
- !projectPath && section.kind === "conversations" && section.items.length > 0 ? /* @__PURE__ */ jsxs18(DropdownMenu, { children: [
28686
- previewMode ? /* @__PURE__ */ jsx31(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx31(
28441
+ !projectPath && section.kind === "conversations" && section.items.length > 0 ? /* @__PURE__ */ jsxs18(DropdownMenu4, { children: [
28442
+ previewMode ? /* @__PURE__ */ jsx31(DropdownMenuTrigger4, { asChild: true, children: /* @__PURE__ */ jsx31(
28687
28443
  "span",
28688
28444
  {
28689
28445
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
@@ -28697,8 +28453,8 @@ var AgentGUIConversationRailSection = memo(
28697
28453
  }
28698
28454
  )
28699
28455
  }
28700
- ) }) : /* @__PURE__ */ jsxs18(Tooltip3, { children: [
28701
- /* @__PURE__ */ jsx31(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx31(
28456
+ ) }) : /* @__PURE__ */ jsxs18(Tooltip4, { children: [
28457
+ /* @__PURE__ */ jsx31(DropdownMenuTrigger4, { asChild: true, children: /* @__PURE__ */ jsx31(TooltipTrigger4, { asChild: true, children: /* @__PURE__ */ jsx31(
28702
28458
  "span",
28703
28459
  {
28704
28460
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
@@ -28714,7 +28470,7 @@ var AgentGUIConversationRailSection = memo(
28714
28470
  }
28715
28471
  ) }) }),
28716
28472
  /* @__PURE__ */ jsx31(
28717
- TooltipContent3,
28473
+ TooltipContent4,
28718
28474
  {
28719
28475
  side: "right",
28720
28476
  sideOffset: 6,
@@ -28724,13 +28480,13 @@ var AgentGUIConversationRailSection = memo(
28724
28480
  )
28725
28481
  ] }),
28726
28482
  /* @__PURE__ */ jsx31(
28727
- DropdownMenuContent,
28483
+ DropdownMenuContent4,
28728
28484
  {
28729
28485
  align: "end",
28730
28486
  className: `${AgentGUINode_styles_default.composerMenuContent} nodrag [-webkit-app-region:no-drag]`,
28731
28487
  sideOffset: 6,
28732
28488
  children: /* @__PURE__ */ jsx31(
28733
- DropdownMenuItem,
28489
+ DropdownMenuItem3,
28734
28490
  {
28735
28491
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
28736
28492
  onSelect: () => {
@@ -29815,7 +29571,7 @@ function composerOverridesByAgentTargetIdEqual(left, right) {
29815
29571
  return true;
29816
29572
  }
29817
29573
  function areAgentGUINodePropsEqual(previous, next) {
29818
- return previous.nodeId === next.nodeId && previous.workspaceId === next.workspaceId && previous.currentUserId === next.currentUserId && previous.workspacePath === next.workspacePath && previous.workspaceFileReferenceAdapter === next.workspaceFileReferenceAdapter && previous.resolveDroppedFileReferences === next.resolveDroppedFileReferences && previous.selectProjectDirectory === next.selectProjectDirectory && previous.referenceSourceAggregator === next.referenceSourceAggregator && previous.resolveWorkspaceReferenceEntryIconUrl === next.resolveWorkspaceReferenceEntryIconUrl && previous.resolveMentionReferenceTarget === next.resolveMentionReferenceTarget && previous.resolveWorkspaceReferenceInitialTarget === next.resolveWorkspaceReferenceInitialTarget && previous.onWorkspaceFileReferencesAdded === next.onWorkspaceFileReferencesAdded && previous.agentSettings.avoidGroupingEdits === next.agentSettings.avoidGroupingEdits && previous.title === next.title && agentGuiStateEquals(previous.state, next.state) && previous.position.x === next.position.x && previous.position.y === next.position.y && previous.width === next.width && previous.height === next.height && previous.desktopSize.width === next.desktopSize.width && previous.desktopSize.height === next.desktopSize.height && previous.onLinkAction === next.onLinkAction && previous.onHandoffConversation === next.onHandoffConversation && previous.onCapabilitySettingsRequest === next.onCapabilitySettingsRequest && previous.onAgentProviderLogin === next.onAgentProviderLogin && previous.providerTargets === next.providerTargets && previous.providerTargetsLoading === next.providerTargetsLoading && previous.renderSidebarFooter === next.renderSidebarFooter && previous.comingSoonProviders === next.comingSoonProviders && previous.providerReadinessGates === next.providerReadinessGates && previous.defaultProviderTargetId === next.defaultProviderTargetId && previous.onClose === next.onClose && previous.onResize === next.onResize && previous.onUpdateNode === next.onUpdateNode && previous.onRememberComposerDefaults === next.onRememberComposerDefaults && previous.onOpenConversationWindow === next.onOpenConversationWindow && previous.isMaximized === next.isMaximized && previous.isMuted === next.isMuted && previous.onMinimize === next.onMinimize && previous.onToggleMaximize === next.onToggleMaximize && previous.onShowMessage === next.onShowMessage && previous.workspaceAgentProbes === next.workspaceAgentProbes && previous.onAgentProbeDemandChange === next.onAgentProbeDemandChange && previous.onAgentProbeRefreshRequest === next.onAgentProbeRefreshRequest && previous.managedAgentsState === next.managedAgentsState && previous.contextMentionProviders === next.contextMentionProviders && previous.workspaceAppIcons === next.workspaceAppIcons && previous.embedded === next.embedded && previous.previewMode === next.previewMode && previous.isActive === next.isActive && previous.composerFocusRequestSequence === next.composerFocusRequestSequence && previous.newConversationRequestSequence === next.newConversationRequestSequence && previous.openSessionRequest === next.openSessionRequest && previous.prefillPromptRequest === next.prefillPromptRequest;
29574
+ return previous.nodeId === next.nodeId && previous.workspaceId === next.workspaceId && previous.currentUserId === next.currentUserId && previous.workspacePath === next.workspacePath && previous.workspaceFileReferenceAdapter === next.workspaceFileReferenceAdapter && previous.resolveDroppedFileReferences === next.resolveDroppedFileReferences && previous.selectProjectDirectory === next.selectProjectDirectory && previous.referenceSourceAggregator === next.referenceSourceAggregator && previous.resolveWorkspaceReferenceEntryIconUrl === next.resolveWorkspaceReferenceEntryIconUrl && previous.resolveMentionReferenceTarget === next.resolveMentionReferenceTarget && previous.resolveWorkspaceReferenceInitialTarget === next.resolveWorkspaceReferenceInitialTarget && previous.onWorkspaceFileReferencesAdded === next.onWorkspaceFileReferencesAdded && previous.agentSettings.avoidGroupingEdits === next.agentSettings.avoidGroupingEdits && previous.title === next.title && agentGuiStateEquals(previous.state, next.state) && previous.position.x === next.position.x && previous.position.y === next.position.y && previous.width === next.width && previous.height === next.height && previous.desktopSize.width === next.desktopSize.width && previous.desktopSize.height === next.desktopSize.height && previous.onLinkAction === next.onLinkAction && previous.onHandoffConversation === next.onHandoffConversation && previous.onCapabilitySettingsRequest === next.onCapabilitySettingsRequest && previous.onAgentProviderLogin === next.onAgentProviderLogin && previous.providerTargets === next.providerTargets && previous.providerTargetsLoading === next.providerTargetsLoading && previous.renderSidebarFooter === next.renderSidebarFooter && previous.providerRailMode === next.providerRailMode && previous.renderProviderRailEmpty === next.renderProviderRailEmpty && previous.comingSoonProviders === next.comingSoonProviders && previous.providerReadinessGates === next.providerReadinessGates && previous.defaultProviderTargetId === next.defaultProviderTargetId && previous.onClose === next.onClose && previous.onResize === next.onResize && previous.onUpdateNode === next.onUpdateNode && previous.onRememberComposerDefaults === next.onRememberComposerDefaults && previous.onOpenConversationWindow === next.onOpenConversationWindow && previous.isMaximized === next.isMaximized && previous.isMuted === next.isMuted && previous.onMinimize === next.onMinimize && previous.onToggleMaximize === next.onToggleMaximize && previous.onShowMessage === next.onShowMessage && previous.workspaceAgentProbes === next.workspaceAgentProbes && previous.onAgentProbeDemandChange === next.onAgentProbeDemandChange && previous.onAgentProbeRefreshRequest === next.onAgentProbeRefreshRequest && previous.managedAgentsState === next.managedAgentsState && previous.contextMentionProviders === next.contextMentionProviders && previous.workspaceAppIcons === next.workspaceAppIcons && previous.embedded === next.embedded && previous.previewMode === next.previewMode && previous.isActive === next.isActive && previous.composerFocusRequestSequence === next.composerFocusRequestSequence && previous.newConversationRequestSequence === next.newConversationRequestSequence && previous.openSessionRequest === next.openSessionRequest && previous.prefillPromptRequest === next.prefillPromptRequest;
29819
29575
  }
29820
29576
  var AgentGUINode = memo2(function AgentGUINode2({
29821
29577
  nodeId,
@@ -29844,6 +29600,8 @@ var AgentGUINode = memo2(function AgentGUINode2({
29844
29600
  onAgentProviderLogin,
29845
29601
  providerTargets,
29846
29602
  providerTargetsLoading = false,
29603
+ providerRailMode = "catalog",
29604
+ renderProviderRailEmpty,
29847
29605
  renderSidebarFooter,
29848
29606
  comingSoonProviders,
29849
29607
  providerReadinessGates = null,
@@ -30008,6 +29766,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
30008
29766
  prefillPromptRequest,
30009
29767
  providerTargets,
30010
29768
  providerTargetsLoading,
29769
+ providerRailMode,
30011
29770
  comingSoonProviders,
30012
29771
  providerReadinessGates,
30013
29772
  defaultProviderTargetId,
@@ -30804,6 +30563,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
30804
30563
  {
30805
30564
  viewModel,
30806
30565
  renderSidebarFooter,
30566
+ renderProviderRailEmpty,
30807
30567
  actions: viewActions,
30808
30568
  isActive,
30809
30569
  composerFocusRequestSequence,
@@ -30873,7 +30633,7 @@ var AgentGUI = memo3(function AgentGUI2({
30873
30633
  children: /* @__PURE__ */ jsx34(AgentQueuedPromptRuntimeProvider, { runtime: agentQueuedPromptRuntime, children: /* @__PURE__ */ jsx34(AgentGUINode, { ...props }) })
30874
30634
  }
30875
30635
  ) });
30876
- return props.previewMode ? content : /* @__PURE__ */ jsx34(TooltipProvider3, { delayDuration: 120, skipDelayDuration: 0, children: content });
30636
+ return props.previewMode ? content : /* @__PURE__ */ jsx34(TooltipProvider4, { delayDuration: 120, skipDelayDuration: 0, children: content });
30877
30637
  });
30878
30638
 
30879
30639
  // index.ts