@tutti-os/agent-gui 0.0.64 → 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 (89) 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 +6 -6
  5. package/dist/agent-message-center/index.js +8 -8
  6. package/dist/{agentGuiNodeTypes-CCjzXdTe.d.ts → agentGuiNodeTypes-B9Aq3UEU.d.ts} +3 -1
  7. package/dist/app/renderer/agentactivity.css +46 -3
  8. package/dist/{chunk-IIXCU2UU.js → chunk-6ULTMCKP.js} +2 -2
  9. package/dist/{chunk-52VZ54WH.js → chunk-CTJQTUQ3.js} +6 -6
  10. package/dist/{chunk-52VZ54WH.js.map → chunk-CTJQTUQ3.js.map} +1 -1
  11. package/dist/{chunk-PVVM7MZZ.js → chunk-DL6BMEHI.js} +2 -2
  12. package/dist/{chunk-TFPKI4XJ.js → chunk-DXVMRZHH.js} +2 -6
  13. package/dist/chunk-DXVMRZHH.js.map +1 -0
  14. package/dist/{chunk-76GTKO4Q.js → chunk-HNODQVG2.js} +2 -2
  15. package/dist/{chunk-RDRKIMAC.js → chunk-JTFWT6DK.js} +7 -9
  16. package/dist/chunk-JTFWT6DK.js.map +1 -0
  17. package/dist/{chunk-MQ6RKXXW.js → chunk-KRJF7WLJ.js} +15 -3
  18. package/dist/chunk-KRJF7WLJ.js.map +1 -0
  19. package/dist/{chunk-FUJ73PTH.js → chunk-LJE2W4EM.js} +3 -5
  20. package/dist/chunk-LJE2W4EM.js.map +1 -0
  21. package/dist/{chunk-YFTQK2G4.js → chunk-LQHYHF36.js} +7 -7
  22. package/dist/chunk-LQHYHF36.js.map +1 -0
  23. package/dist/{chunk-TG3ZXLPM.js → chunk-MYD37I32.js} +27 -3
  24. package/dist/chunk-MYD37I32.js.map +1 -0
  25. package/dist/{chunk-ERWDRI3F.js → chunk-N4I3TD4G.js} +2 -2
  26. package/dist/{chunk-ERWDRI3F.js.map → chunk-N4I3TD4G.js.map} +1 -1
  27. package/dist/{chunk-FLTLZGIN.js → chunk-NOTZW5WH.js} +3 -3
  28. package/dist/{chunk-YUMHFZ5A.js → chunk-P5C3ED3V.js} +3 -2
  29. package/dist/chunk-P5C3ED3V.js.map +1 -0
  30. package/dist/{chunk-TT2YJNEP.js → chunk-T3KGZV35.js} +50 -12
  31. package/dist/chunk-T3KGZV35.js.map +1 -0
  32. package/dist/{chunk-F6GDUU4X.js → chunk-UBBHWDMP.js} +13 -9
  33. package/dist/{chunk-F6GDUU4X.js.map → chunk-UBBHWDMP.js.map} +1 -1
  34. package/dist/{chunk-3NSUJ7OF.js → chunk-UI3YDJTC.js} +39 -5
  35. package/dist/chunk-UI3YDJTC.js.map +1 -0
  36. package/dist/{chunk-C465B7WK.js → chunk-VBTPXEFH.js} +2 -2
  37. package/dist/{chunk-ZTZ6STJZ.js → chunk-Z26P2QNT.js} +2 -2
  38. package/dist/context-mention-palette/index.js +7 -7
  39. package/dist/i18n/index.d.ts +14 -2
  40. package/dist/i18n/index.js +2 -2
  41. package/dist/index.d.ts +37 -5
  42. package/dist/index.js +750 -774
  43. package/dist/index.js.map +1 -1
  44. package/dist/queued-prompt-runtime.d.ts +22 -3
  45. package/dist/queued-prompt-runtime.js +1 -1
  46. package/dist/{types-BAPEle8b.d.ts → types-Bxn8bLEp.d.ts} +14 -1
  47. package/dist/workbench/contribution.d.ts +1 -1
  48. package/dist/workbench/contribution.js +5 -5
  49. package/dist/workbench/index.d.ts +1 -1
  50. package/dist/workbench/index.js +8 -8
  51. package/dist/workbench/launch.d.ts +3 -1
  52. package/dist/workbench/launch.js +1 -1
  53. package/dist/workbench/providerCatalog.d.ts +1 -1
  54. package/dist/workbench/sessionTitle.d.ts +1 -1
  55. package/dist/workbench/sessionTitle.js +3 -3
  56. package/dist/workbench/state.d.ts +1 -1
  57. package/dist/workbench/state.js +2 -2
  58. package/dist/workbench/types.d.ts +1 -1
  59. package/dist/workspace-agent-generated-files.js +3 -3
  60. package/package.json +12 -12
  61. package/dist/app/renderer/assets/icons/@-lined-14px.svg +0 -3
  62. package/dist/app/renderer/assets/icons/agents/manage-agent-claude-code.png +0 -0
  63. package/dist/app/renderer/assets/icons/agents/manage-agent-codex.png +0 -0
  64. package/dist/app/renderer/assets/icons/agents/manage-agent-gemini.png +0 -0
  65. package/dist/app/renderer/assets/icons/agents/manage-agent-hermes.png +0 -0
  66. package/dist/app/renderer/assets/icons/agents/manage-agent-openclaw.png +0 -0
  67. package/dist/app/renderer/assets/icons/agents/tutti-doc-rounded.png +0 -0
  68. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-claude-code.png +0 -0
  69. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-codex.png +0 -0
  70. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-gemini.png +0 -0
  71. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-nexight.png +0 -0
  72. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-openclaw.png +0 -0
  73. package/dist/app/renderer/assets/icons/arrow-left-filled.svg +0 -1
  74. package/dist/chunk-3NSUJ7OF.js.map +0 -1
  75. package/dist/chunk-FUJ73PTH.js.map +0 -1
  76. package/dist/chunk-MQ6RKXXW.js.map +0 -1
  77. package/dist/chunk-RDRKIMAC.js.map +0 -1
  78. package/dist/chunk-TFPKI4XJ.js.map +0 -1
  79. package/dist/chunk-TG3ZXLPM.js.map +0 -1
  80. package/dist/chunk-TT2YJNEP.js.map +0 -1
  81. package/dist/chunk-YFTQK2G4.js.map +0 -1
  82. package/dist/chunk-YUMHFZ5A.js.map +0 -1
  83. package/dist/cursor-flat-filled-CL7N3BTZ.svg +0 -3
  84. /package/dist/{chunk-IIXCU2UU.js.map → chunk-6ULTMCKP.js.map} +0 -0
  85. /package/dist/{chunk-PVVM7MZZ.js.map → chunk-DL6BMEHI.js.map} +0 -0
  86. /package/dist/{chunk-76GTKO4Q.js.map → chunk-HNODQVG2.js.map} +0 -0
  87. /package/dist/{chunk-FLTLZGIN.js.map → chunk-NOTZW5WH.js.map} +0 -0
  88. /package/dist/{chunk-C465B7WK.js.map → chunk-VBTPXEFH.js.map} +0 -0
  89. /package/dist/{chunk-ZTZ6STJZ.js.map → chunk-Z26P2QNT.js.map} +0 -0
package/dist/index.js CHANGED
@@ -10,22 +10,23 @@ import {
10
10
  resolveAgentGuiSessionProviderIconUrl,
11
11
  resolveNextAgentGUIConversationRailWidthPx,
12
12
  shouldAutoCollapseAgentGUIConversationRail
13
- } from "./chunk-FUJ73PTH.js";
13
+ } from "./chunk-LJE2W4EM.js";
14
14
  import {
15
15
  agentGUIDefaultTargetProviders,
16
16
  agentGUIProviderTargetRefsEqual,
17
17
  createDisabledPlaceholderAgentGUIProviderTarget,
18
18
  createLocalAgentGUIProviderTarget,
19
19
  createLocalAgentGUIProviderTargets,
20
+ createSharedAgentGUIProviderTarget,
20
21
  localAgentGUIAgentTargetId,
21
22
  localAgentGUIProviderTargetId,
22
23
  normalizeAgentGUIProviderTargets,
23
24
  resolveAgentGUIProviderTarget
24
- } from "./chunk-3NSUJ7OF.js";
25
+ } from "./chunk-UI3YDJTC.js";
25
26
  import {
26
27
  AgentInteractivePromptSurface,
27
28
  approvalOptionDisplayLabel
28
- } from "./chunk-RDRKIMAC.js";
29
+ } from "./chunk-JTFWT6DK.js";
29
30
  import {
30
31
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
31
32
  PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
@@ -44,7 +45,7 @@ import {
44
45
  resolveAgentGUIExplicitConversationTitle,
45
46
  resolveAgentGUIProviderDisplayLabel,
46
47
  resolveAgentGUIProviderIdentity
47
- } from "./chunk-76GTKO4Q.js";
48
+ } from "./chunk-HNODQVG2.js";
48
49
  import {
49
50
  AgentConversationFlow,
50
51
  Button,
@@ -65,14 +66,14 @@ import {
65
66
  skillTriggerForPrefix,
66
67
  toLocalShortDateTime,
67
68
  useProjectedAgentConversation
68
- } from "./chunk-F6GDUU4X.js";
69
+ } from "./chunk-UBBHWDMP.js";
69
70
  import {
70
71
  AgentMessageMarkdown,
71
72
  AgentTargetPresentationProvider,
72
73
  ZoomableImage,
73
74
  cn,
74
75
  resolveWorkspaceLinkAction
75
- } from "./chunk-TT2YJNEP.js";
76
+ } from "./chunk-T3KGZV35.js";
76
77
  import {
77
78
  openAgentEnvPanel
78
79
  } from "./chunk-PSLAWU25.js";
@@ -83,7 +84,7 @@ import {
83
84
  DEFAULT_AGENT_MENTION_FILTER,
84
85
  agentMentionItemKey,
85
86
  preloadAgentMentionBrowse
86
- } from "./chunk-52VZ54WH.js";
87
+ } from "./chunk-CTJQTUQ3.js";
87
88
  import {
88
89
  WORKSPACE_AGENT_ACTIVITY_RUNTIME_SESSION_ORIGIN,
89
90
  buildWorkspaceAgentActivityListViewModel,
@@ -93,10 +94,8 @@ import {
93
94
  isWorkspaceAgentUntitledTask,
94
95
  mergeWorkspaceAgentActivityDurableAndOverlayMessages,
95
96
  selectWorkspaceAgentActivityOverlayMessages
96
- } from "./chunk-ZTZ6STJZ.js";
97
- import {
98
- Spinner
99
- } from "./chunk-TFPKI4XJ.js";
97
+ } from "./chunk-Z26P2QNT.js";
98
+ import "./chunk-DXVMRZHH.js";
100
99
  import {
101
100
  resolveWorkspaceAgentSessionSortTimeUnixMs
102
101
  } from "./chunk-IBIMGLCD.js";
@@ -107,7 +106,7 @@ import {
107
106
  mentionItemToAttrs,
108
107
  normalizeAgentSessionMentionTitle,
109
108
  parseMentionItemFromHref
110
- } from "./chunk-FLTLZGIN.js";
109
+ } from "./chunk-NOTZW5WH.js";
111
110
  import "./chunk-Y35GDLP2.js";
112
111
  import "./chunk-LUGELG5V.js";
113
112
  import {
@@ -129,7 +128,7 @@ import {
129
128
  useAgentHostApi,
130
129
  useOptionalAgentActivityRuntime,
131
130
  useOptionalAgentHostApi
132
- } from "./chunk-ERWDRI3F.js";
131
+ } from "./chunk-N4I3TD4G.js";
133
132
  import "./chunk-TYGL25EL.js";
134
133
  import {
135
134
  AgentGuiI18nProvider,
@@ -137,21 +136,21 @@ import {
137
136
  agentGuiI18nResources,
138
137
  translate,
139
138
  useTranslation
140
- } from "./chunk-IIXCU2UU.js";
139
+ } from "./chunk-6ULTMCKP.js";
141
140
  import "./chunk-PJP5BUU6.js";
142
141
  import {
143
142
  agentColorfulUrl,
144
143
  cursorColorfulUrl,
145
144
  normalizeManagedAgentProvider
146
145
  } from "./chunk-R2NGSPQS.js";
147
- import "./chunk-MQ6RKXXW.js";
146
+ import "./chunk-KRJF7WLJ.js";
148
147
  import {
149
148
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
150
149
  } from "./chunk-JM24HADP.js";
151
150
  import "./chunk-GCBDIQDX.js";
152
151
  import {
153
152
  createAgentQueuedPromptRuntime
154
- } from "./chunk-TG3ZXLPM.js";
153
+ } from "./chunk-MYD37I32.js";
155
154
 
156
155
  // shared/agentActivitySnapshotProjection.ts
157
156
  import {
@@ -314,7 +313,7 @@ function agentHostTurnPhaseFromDisplay(status) {
314
313
 
315
314
  // AgentGUI.tsx
316
315
  import { memo as memo3 } from "react";
317
- import { TooltipProvider as TooltipProvider3 } from "@tutti-os/ui-system";
316
+ import { TooltipProvider as TooltipProvider4 } from "@tutti-os/ui-system";
318
317
 
319
318
  // agent-gui/agentGuiNode/AgentGUINode.tsx
320
319
  import { memo as memo2, useCallback as useCallback12, useEffect as useEffect15, useMemo as useMemo11 } from "react";
@@ -456,22 +455,10 @@ function GridTopLinedIcon(props) {
456
455
  );
457
456
  }
458
457
 
459
- // app/renderer/components/ui/dropdown-menu.tsx
458
+ // agent-gui/workspaceDesktop/view/WindowLayoutMenuButton.tsx
460
459
  import {
461
460
  DropdownMenu,
462
- DropdownMenuCheckboxItem,
463
461
  DropdownMenuContent,
464
- DropdownMenuGroup,
465
- DropdownMenuItem,
466
- DropdownMenuLabel,
467
- DropdownMenuPortal,
468
- DropdownMenuRadioGroup,
469
- DropdownMenuRadioItem,
470
- DropdownMenuSeparator,
471
- DropdownMenuShortcut,
472
- DropdownMenuSub,
473
- DropdownMenuSubContent,
474
- DropdownMenuSubTrigger,
475
462
  DropdownMenuTrigger
476
463
  } from "@tutti-os/ui-system";
477
464
 
@@ -2251,6 +2238,7 @@ function getTestAgentQueuedPromptRuntime() {
2251
2238
 
2252
2239
  // agent-gui/agentGuiNode/controller/useAgentGUINodeController.ts
2253
2240
  import {
2241
+ resolveSubmitAvailability,
2254
2242
  resolveAgentActivityCapability as resolveAgentActivityCapability2,
2255
2243
  resolveAgentActivityUsage,
2256
2244
  selectSessionDisplayStatuses
@@ -2766,7 +2754,7 @@ function resolveConversationProject(session, projectResolver) {
2766
2754
  }
2767
2755
  function isExternalImportNoProjectSession(session) {
2768
2756
  const runtimeContext = session && "runtimeContext" in session ? session.runtimeContext : void 0;
2769
- return runtimeContext?.externalImportNoProject === true;
2757
+ return runtimeContext?.noProject === true || runtimeContext?.externalImportNoProject === true;
2770
2758
  }
2771
2759
  function isImportedWorkspaceAgentSession(session) {
2772
2760
  return session?.runtimeContext?.imported === true;
@@ -6733,6 +6721,7 @@ var ACTIVITY_STREAM_STATE_RELOAD_DEBOUNCE_MS = 150;
6733
6721
  var AGENT_GUI_DETAIL_MESSAGES_PAGE_SIZE = 100;
6734
6722
  var AGENT_GUI_DETAIL_MISSING_USER_BACKFILL_PAGE_LIMIT = 3;
6735
6723
  var AGENT_GUI_SUBMIT_RETARGET_EARLY_MESSAGE_TOLERANCE_MS = 5e3;
6724
+ var GOAL_CLEAR_PROMPT = "/goal clear";
6736
6725
  function mergeAgentModelCatalogInvalidationEvents(events) {
6737
6726
  const providers = /* @__PURE__ */ new Set();
6738
6727
  let occurredAtUnixMs = 0;
@@ -8849,6 +8838,7 @@ function useAgentGUINodeController({
8849
8838
  data,
8850
8839
  providerTargets,
8851
8840
  providerTargetsLoading = false,
8841
+ providerRailMode = "catalog",
8852
8842
  comingSoonProviders,
8853
8843
  providerReadinessGates = null,
8854
8844
  defaultProviderTargetId = null,
@@ -8867,21 +8857,22 @@ function useAgentGUINodeController({
8867
8857
  () => comingSoonProviders && comingSoonProviders.length > 0 ? [...comingSoonProviders] : emptyComingSoonProviders,
8868
8858
  [comingSoonProviders]
8869
8859
  );
8870
- const normalizedExplicitProviderTargets = useMemo4(
8871
- () => applyComingSoonProviderTargets(
8872
- normalizeAgentGUIProviderTargets(providerTargets, {
8873
- includeDisabledPlaceholders: true,
8874
- useStaticCatalog: false
8875
- }),
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,
8876
8868
  normalizedComingSoonProviders
8877
- ),
8878
- [normalizedComingSoonProviders, providerTargets]
8879
- );
8869
+ );
8870
+ }, [isExactProviderRailMode, normalizedComingSoonProviders, providerTargets]);
8880
8871
  const normalizedProviderTargets = useMemo4(() => {
8881
8872
  if (providerTargetsLoading) {
8882
8873
  return [];
8883
8874
  }
8884
- if (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0) {
8875
+ if (!isExactProviderRailMode && (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0)) {
8885
8876
  return applyComingSoonProviderTargets(
8886
8877
  normalizeAgentGUIProviderTargets(null, {
8887
8878
  includeDisabledPlaceholders: true
@@ -8891,12 +8882,13 @@ function useAgentGUINodeController({
8891
8882
  }
8892
8883
  return normalizedExplicitProviderTargets;
8893
8884
  }, [
8885
+ isExactProviderRailMode,
8894
8886
  normalizedExplicitProviderTargets,
8895
8887
  normalizedComingSoonProviders,
8896
8888
  providerTargets,
8897
8889
  providerTargetsLoading
8898
8890
  ]);
8899
- const shouldUseStaticProviderTargets = !providerTargetsLoading && (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0);
8891
+ const shouldUseStaticProviderTargets = !isExactProviderRailMode && !providerTargetsLoading && (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0);
8900
8892
  const selectedProviderTarget = useMemo4(() => {
8901
8893
  const resolved = resolveAgentGUIProviderTarget({
8902
8894
  agentTargetId: data.agentTargetId,
@@ -9395,6 +9387,8 @@ function useAgentGUINodeController({
9395
9387
  );
9396
9388
  const handledOpenSessionSequenceRef = useRef4(null);
9397
9389
  const pendingOpenSessionRequestRef = useRef4(null);
9390
+ const explicitlyOpenedConversationIdsRef = useRef4(/* @__PURE__ */ new Set());
9391
+ const railPinnedTransientConversationIdsRef = useRef4(/* @__PURE__ */ new Set());
9398
9392
  const selectedConversationNotFoundRetryIdsRef = useRef4(/* @__PURE__ */ new Set());
9399
9393
  const selectedConversationNotFoundRetryTimerRef = useRef4(null);
9400
9394
  const sessionStateSnapshotCauseBySessionIdRef = useRef4({});
@@ -9496,6 +9490,78 @@ function useAgentGUINodeController({
9496
9490
  },
9497
9491
  []
9498
9492
  );
9493
+ const conversationSummaryFromRuntimeSession = useCallback4(
9494
+ (session) => {
9495
+ const updatedAtUnixMs = session.updatedAtUnixMs ?? Date.now();
9496
+ const projectedSession = {
9497
+ workspaceId: session.workspaceId,
9498
+ agentSessionId: session.agentSessionId,
9499
+ agentTargetId: session.agentTargetId ?? null,
9500
+ provider: session.provider,
9501
+ providerSessionId: session.providerSessionId ?? session.agentSessionId,
9502
+ resumable: session.resumable,
9503
+ cwd: session.cwd,
9504
+ status: session.status,
9505
+ title: session.title,
9506
+ pinnedAtUnixMs: session.pinnedAtUnixMs ?? null,
9507
+ createdAtUnixMs: session.createdAtUnixMs ?? updatedAtUnixMs,
9508
+ updatedAtUnixMs
9509
+ };
9510
+ return conversationSummaryFromAgentSession(projectedSession, {
9511
+ isNoProjectPath: isNoProjectPathRef.current,
9512
+ userProjects: userProjectsRef.current
9513
+ });
9514
+ },
9515
+ []
9516
+ );
9517
+ const ensureTransientOpenSessionConversation = useCallback4(
9518
+ (agentSessionId) => {
9519
+ const normalizedAgentSessionId = agentSessionId.trim();
9520
+ if (!normalizedAgentSessionId) {
9521
+ return;
9522
+ }
9523
+ if (resolveConversationSummaryById(
9524
+ conversationsRef.current,
9525
+ normalizedAgentSessionId,
9526
+ transientConversationRef.current
9527
+ )) {
9528
+ return;
9529
+ }
9530
+ const snapshotSession = agentActivitySnapshotRef.current.sessions.find(
9531
+ (session) => session.agentSessionId.trim() === normalizedAgentSessionId && session.visible !== false
9532
+ );
9533
+ if (snapshotSession) {
9534
+ setTransientConversation(
9535
+ conversationSummaryFromRuntimeSession(snapshotSession)
9536
+ );
9537
+ return;
9538
+ }
9539
+ void agentActivityRuntime.getSession(workspaceId, normalizedAgentSessionId).then((session) => {
9540
+ const shouldKeepTransient = explicitlyOpenedConversationIdsRef.current.has(
9541
+ normalizedAgentSessionId
9542
+ ) || railPinnedTransientConversationIdsRef.current.has(
9543
+ normalizedAgentSessionId
9544
+ );
9545
+ if (!isMountedRef.current || activeConversationIdRef.current !== normalizedAgentSessionId || !shouldKeepTransient || resolveConversationSummaryById(
9546
+ conversationsRef.current,
9547
+ normalizedAgentSessionId,
9548
+ transientConversationRef.current
9549
+ )) {
9550
+ return;
9551
+ }
9552
+ setTransientConversation(
9553
+ conversationSummaryFromRuntimeSession(session)
9554
+ );
9555
+ }).catch(() => {
9556
+ });
9557
+ },
9558
+ [
9559
+ agentActivityRuntime,
9560
+ conversationSummaryFromRuntimeSession,
9561
+ setTransientConversation,
9562
+ workspaceId
9563
+ ]
9564
+ );
9499
9565
  const ensureOpenclawGateway = useCallback4(() => {
9500
9566
  if (dataRef.current.provider !== "openclaw") {
9501
9567
  setOpenclawGateway(null);
@@ -9909,6 +9975,8 @@ function useAgentGUINodeController({
9909
9975
  setTransientConversation(
9910
9976
  (current) => current?.id === normalized ? { ...current, hasUnreadCompletion: false } : current
9911
9977
  );
9978
+ } else if (transientConversationRef.current) {
9979
+ setTransientConversation(null);
9912
9980
  }
9913
9981
  persistActiveConversation(normalized);
9914
9982
  },
@@ -9917,7 +9985,8 @@ function useAgentGUINodeController({
9917
9985
  clearSelectedConversationNotFoundRetry,
9918
9986
  conversationListQuery,
9919
9987
  markSelectedConversationDetailPending,
9920
- persistActiveConversation
9988
+ persistActiveConversation,
9989
+ setTransientConversation
9921
9990
  ]
9922
9991
  );
9923
9992
  const syncConversationListProjection = useCallback4(
@@ -10050,42 +10119,41 @@ function useAgentGUINodeController({
10050
10119
  id,
10051
10120
  transientConversationRef.current
10052
10121
  ) !== null;
10122
+ const resolveCanonicalId = (id) => resolveConversationSummaryById(conversations, id, null) !== null;
10053
10123
  const inSnapshot = (id) => agentActivitySnapshotRef.current.sessions.some(
10054
10124
  (s) => s.agentSessionId.trim() === id && s.visible !== false
10055
10125
  );
10056
10126
  if (hasExplicitOpenSessionRequest) {
10057
10127
  const requestedId = pendingOpenSessionRequest.agentSessionId.trim();
10058
- if (resolveId(requestedId)) {
10059
- pendingOpenSessionRequestRef.current = null;
10060
- selectConversation(requestedId, { reloadConversations: false });
10061
- return;
10062
- }
10063
10128
  if (!hasLoadedConversations) return;
10064
- if (inSnapshot(requestedId)) return;
10065
- if (intent.tag !== "resolving" || intent.id !== requestedId) {
10066
- setIntent({ tag: "resolving", id: requestedId });
10067
- void syncConversationListProjection(requestedId);
10068
- return;
10069
- }
10070
- if (!isAgentGUIConversationListRefreshing(conversationListQuery)) {
10071
- pendingOpenSessionRequestRef.current = null;
10072
- const fallback = selectAgentGUIConversationId(
10073
- conversations,
10074
- activeConversationIdRef.current
10075
- );
10076
- if (fallback) {
10077
- selectConversation(fallback, { reloadConversations: false });
10078
- } else {
10079
- setIntent({ tag: "home" });
10080
- }
10081
- }
10129
+ explicitlyOpenedConversationIdsRef.current.add(requestedId);
10130
+ railPinnedTransientConversationIdsRef.current.add(requestedId);
10131
+ pendingOpenSessionRequestRef.current = null;
10132
+ selectConversation(requestedId, { reloadConversations: false });
10133
+ ensureTransientOpenSessionConversation(requestedId);
10082
10134
  return;
10083
10135
  }
10084
10136
  switch (intent.tag) {
10085
10137
  case "home":
10086
10138
  return;
10087
10139
  case "active":
10088
- if (resolveId(intent.id) || !hasLoadedConversations) return;
10140
+ if (resolveCanonicalId(intent.id)) {
10141
+ explicitlyOpenedConversationIdsRef.current.delete(intent.id);
10142
+ railPinnedTransientConversationIdsRef.current.delete(intent.id);
10143
+ return;
10144
+ }
10145
+ if (resolveId(intent.id)) {
10146
+ return;
10147
+ }
10148
+ if (!hasLoadedConversations) return;
10149
+ if (inSnapshot(intent.id) && activeConversationIdRef.current === intent.id) {
10150
+ railPinnedTransientConversationIdsRef.current.add(intent.id);
10151
+ ensureTransientOpenSessionConversation(intent.id);
10152
+ return;
10153
+ }
10154
+ if (explicitlyOpenedConversationIdsRef.current.has(intent.id) && activeConversationIdRef.current === intent.id) {
10155
+ return;
10156
+ }
10089
10157
  setIntent({ tag: "requested", id: intent.id });
10090
10158
  return;
10091
10159
  case "requested": {
@@ -10098,7 +10166,14 @@ function useAgentGUINodeController({
10098
10166
  selectConversation(intent.id, { reloadConversations: false });
10099
10167
  return;
10100
10168
  }
10101
- if (inSnapshot(intent.id)) return;
10169
+ if (inSnapshot(intent.id)) {
10170
+ if (activeConversationIdRef.current === intent.id) {
10171
+ railPinnedTransientConversationIdsRef.current.add(intent.id);
10172
+ ensureTransientOpenSessionConversation(intent.id);
10173
+ setIntent({ tag: "active", id: intent.id });
10174
+ }
10175
+ return;
10176
+ }
10102
10177
  setIntent({ tag: "resolving", id: intent.id });
10103
10178
  void syncConversationListProjection(intent.id);
10104
10179
  return;
@@ -10125,6 +10200,7 @@ function useAgentGUINodeController({
10125
10200
  intent,
10126
10201
  conversations,
10127
10202
  hasLoadedConversations,
10203
+ ensureTransientOpenSessionConversation,
10128
10204
  openSessionRequest,
10129
10205
  previewMode,
10130
10206
  syncConversationListProjection,
@@ -12355,7 +12431,7 @@ function useAgentGUINodeController({
12355
12431
  workspaceId
12356
12432
  ]);
12357
12433
  const executePrompt = useCallback4(
12358
- (agentSessionId, content, displayPrompt) => {
12434
+ (agentSessionId, content, displayPrompt, options) => {
12359
12435
  const normalizedContent = normalizeAgentPromptContentBlocks(content);
12360
12436
  if (!agentSessionId || normalizedContent.length === 0) {
12361
12437
  return;
@@ -12475,6 +12551,7 @@ function useAgentGUINodeController({
12475
12551
  agentSessionId,
12476
12552
  content: normalizedContent,
12477
12553
  displayPrompt: displayPrompt && displayPrompt.trim() ? displayPrompt : null,
12554
+ ...options?.guidance === true ? { guidance: true } : {},
12478
12555
  metadata: agentSubmitTraceMetadata(submitTrace)
12479
12556
  });
12480
12557
  }).then((result) => {
@@ -12707,7 +12784,12 @@ function useAgentGUINodeController({
12707
12784
  );
12708
12785
  return;
12709
12786
  }
12710
- 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) {
12711
12793
  queuePromptLocally(
12712
12794
  agentSessionId,
12713
12795
  normalizedContent,
@@ -12715,14 +12797,18 @@ function useAgentGUINodeController({
12715
12797
  );
12716
12798
  return;
12717
12799
  }
12718
- executePrompt(agentSessionId, normalizedContent, displayPromptText);
12800
+ executePrompt(agentSessionId, normalizedContent, displayPromptText, {
12801
+ guidance: options?.guidance === true
12802
+ });
12719
12803
  },
12720
12804
  [
12721
12805
  activation,
12806
+ agentQueuedPromptRuntime,
12722
12807
  executePrompt,
12723
12808
  isSessionMarkedNonResumable,
12724
12809
  queuePromptLocally,
12725
- shouldQueuePromptLocally
12810
+ shouldQueuePromptLocally,
12811
+ workspaceId
12726
12812
  ]
12727
12813
  );
12728
12814
  const goalControl = useCallback4(
@@ -12735,6 +12821,14 @@ function useAgentGUINodeController({
12735
12821
  return;
12736
12822
  }
12737
12823
  setDetailError(null);
12824
+ if (action === "clear") {
12825
+ executePrompt(
12826
+ agentSessionId,
12827
+ textPromptContent(GOAL_CLEAR_PROMPT),
12828
+ GOAL_CLEAR_PROMPT
12829
+ );
12830
+ return;
12831
+ }
12738
12832
  void agentActivityRuntime.goalControl({
12739
12833
  workspaceId,
12740
12834
  agentSessionId,
@@ -12749,6 +12843,7 @@ function useAgentGUINodeController({
12749
12843
  },
12750
12844
  [
12751
12845
  agentActivityRuntime,
12846
+ executePrompt,
12752
12847
  isCurrentConversation,
12753
12848
  previewMode,
12754
12849
  setDetailError,
@@ -12848,7 +12943,7 @@ function useAgentGUINodeController({
12848
12943
  agentSessionId,
12849
12944
  normalizedContent,
12850
12945
  displayPromptText,
12851
- { bypassLocalQueue: true }
12946
+ { bypassLocalQueue: true, guidance: true }
12852
12947
  );
12853
12948
  },
12854
12949
  [
@@ -12966,6 +13061,11 @@ function useAgentGUINodeController({
12966
13061
  ...current,
12967
13062
  [agentSessionId]: true
12968
13063
  }));
13064
+ agentQueuedPromptRuntime.suspendQueue({
13065
+ workspaceId,
13066
+ agentSessionId,
13067
+ reason: "user_stop"
13068
+ });
12969
13069
  setDetailError(null);
12970
13070
  void Promise.resolve().then(() => {
12971
13071
  if (!isCurrentConversation(agentSessionId)) {
@@ -13043,6 +13143,7 @@ function useAgentGUINodeController({
13043
13143
  });
13044
13144
  },
13045
13145
  [
13146
+ agentQueuedPromptRuntime,
13046
13147
  interruptingSessionIds,
13047
13148
  isCurrentConversation,
13048
13149
  syncConversationListProjection,
@@ -14146,10 +14247,8 @@ function useAgentGUINodeController({
14146
14247
  null
14147
14248
  );
14148
14249
  const visibleConversations = useMemo4(() => {
14149
- const source = mergeVisibleConversations(
14150
- conversations,
14151
- transientConversationRef.current
14152
- );
14250
+ const transient = transientConversationRef.current;
14251
+ const source = transient && (isLoadingConversations || explicitlyOpenedConversationIdsRef.current.has(transient.id) || railPinnedTransientConversationIdsRef.current.has(transient.id)) ? mergeVisibleConversations(conversations, transient) : conversations;
14153
14252
  const mapped = source.map((conversation2) => {
14154
14253
  const withRuntime = mergeConversationSummaryWithRuntimeSession({
14155
14254
  conversation: conversation2,
@@ -14500,7 +14599,7 @@ function useAgentGUINodeController({
14500
14599
  ]);
14501
14600
  const activeActivityDisplayStatus = activeConversationId ? agentActivityDisplayStatuses.get(activeConversationId) ?? null : null;
14502
14601
  const activeHasPendingSubmittedTurn = activeConversationId ? Boolean(pendingTurnIdBySessionIdRef.current[activeConversationId]) : false;
14503
- const activeSubmitBlocked = activeSessionState?.submitAvailability?.state === "blocked";
14602
+ const activeSubmitBlocked = activeSessionState ? resolveSubmitAvailability(activeSessionState).state === "blocked" : false;
14504
14603
  const activeConversationBusy = agentActivityDisplayStatusBusy(activeActivityDisplayStatus) || activeHasPendingSubmittedTurn || activeSubmitBlocked;
14505
14604
  const activeSessionResumable = activeRuntimeSession?.resumable ?? activeConversation?.resumable ?? activeSessionState?.resumable;
14506
14605
  const normalizedActiveConversationId = activeConversationId ?? "";
@@ -15080,6 +15179,7 @@ function useAgentGUINodeController({
15080
15179
  selectedProviderTarget: effectiveSelectedProviderTarget,
15081
15180
  providerTargets: normalizedProviderTargets,
15082
15181
  providerTargetsLoading,
15182
+ providerRailMode,
15083
15183
  comingSoonProviders: normalizedComingSoonProviders,
15084
15184
  conversationFilter,
15085
15185
  conversations: visibleConversations,
@@ -15153,6 +15253,7 @@ function useAgentGUINodeController({
15153
15253
  effectiveSelectedProviderTarget,
15154
15254
  normalizedComingSoonProviders,
15155
15255
  normalizedProviderTargets,
15256
+ providerRailMode,
15156
15257
  providerReadinessGate,
15157
15258
  providerTargetsLoading,
15158
15259
  detailError,
@@ -15385,8 +15486,8 @@ import {
15385
15486
  useRef as useRef12,
15386
15487
  useState as useState12
15387
15488
  } from "react";
15388
- import { useSnapshot } from "valtio";
15389
- import { proxy as proxy2 } from "valtio/vanilla";
15489
+ import { useSnapshot as useSnapshot2 } from "valtio";
15490
+ import { proxy as proxy3 } from "valtio/vanilla";
15390
15491
  import {
15391
15492
  ChevronRight as ChevronRight2,
15392
15493
  ChevronsDown,
@@ -15395,16 +15496,6 @@ import {
15395
15496
  Wrench
15396
15497
  } from "lucide-react";
15397
15498
 
15398
- // app/renderer/components/ui/popover.tsx
15399
- import {
15400
- Popover,
15401
- PopoverAnchor,
15402
- PopoverClose,
15403
- PopoverContent,
15404
- PopoverPortal,
15405
- PopoverTrigger
15406
- } from "@tutti-os/ui-system";
15407
-
15408
15499
  // agent-gui/agentGuiNode/model/agentUsageThresholds.ts
15409
15500
  var USAGE_WARN_PERCENT = 80;
15410
15501
  var USAGE_CRITICAL_PERCENT = 95;
@@ -15453,22 +15544,42 @@ function AgentUsageMeter({
15453
15544
  ] });
15454
15545
  }
15455
15546
 
15547
+ // shared/workspaceSettingsPanel/workspaceSettingsPanelStore.ts
15548
+ import { useSnapshot } from "valtio";
15549
+ import { proxy } from "valtio/vanilla";
15550
+ var workspaceSettingsPanelStore = proxy({
15551
+ section: null,
15552
+ requestSequence: 0
15553
+ });
15554
+ function openWorkspaceSettingsPanel(input) {
15555
+ workspaceSettingsPanelStore.section = input?.section ?? null;
15556
+ workspaceSettingsPanelStore.requestSequence += 1;
15557
+ }
15558
+
15456
15559
  // agent-gui/agentGuiNode/AgentGUINodeView.tsx
15457
15560
  import {
15458
15561
  ReferenceSourcePicker,
15459
15562
  WorkspaceFileReferencePicker
15460
15563
  } from "@tutti-os/workspace-file-reference/ui";
15461
15564
  import {
15462
- Tooltip as Tooltip3,
15463
- TooltipContent as TooltipContent3,
15464
- TooltipProvider as TooltipProvider2,
15465
- TooltipTrigger as TooltipTrigger3,
15565
+ Tooltip as Tooltip4,
15566
+ TooltipContent as TooltipContent4,
15567
+ TooltipProvider as TooltipProvider3,
15568
+ TooltipTrigger as TooltipTrigger4,
15466
15569
  Select as Select3,
15467
15570
  SelectContent as SelectContent3,
15468
15571
  SelectItem as SelectItem3,
15469
15572
  SelectTrigger as SelectTrigger3,
15470
15573
  NewWorkspaceLinedIcon as NewWorkspaceLinedIcon2,
15471
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,
15472
15583
  toastVariants,
15473
15584
  cn as cn3
15474
15585
  } from "@tutti-os/ui-system";
@@ -15532,11 +15643,11 @@ function UnavailableChatIcon(props) {
15532
15643
  );
15533
15644
  }
15534
15645
 
15535
- // app/renderer/components/icons/EnvironmentLinedIcon.tsx
15536
- import { jsx as jsx16 } from "react/jsx-runtime";
15537
- function EnvironmentLinedIcon(props) {
15646
+ // app/renderer/components/icons/SettingsLinedIcon.tsx
15647
+ import { jsx as jsx16, jsxs as jsxs5 } from "react/jsx-runtime";
15648
+ function SettingsLinedIcon(props) {
15538
15649
  "use memo";
15539
- return /* @__PURE__ */ jsx16(
15650
+ return /* @__PURE__ */ jsxs5(
15540
15651
  "svg",
15541
15652
  {
15542
15653
  width: "24",
@@ -15545,367 +15656,44 @@ function EnvironmentLinedIcon(props) {
15545
15656
  fill: "none",
15546
15657
  xmlns: "http://www.w3.org/2000/svg",
15547
15658
  ...props,
15548
- children: /* @__PURE__ */ jsx16(
15549
- "path",
15550
- {
15551
- d: "M2.0094 19.0001C2.56169 19.0001 3.0094 19.4478 3.0094 20.0001C3.0094 20.5523 2.56169 21.0001 2.0094 21.0001H1.99964C1.44752 20.9999 0.999635 20.5522 0.999635 20.0001C0.999635 19.4479 1.44752 19.0002 1.99964 19.0001H2.0094ZM1.01624 15.8174C1.1173 15.2748 1.63961 14.9161 2.18225 15.0166C3.37336 15.2385 4.47004 15.8162 5.32679 16.6729C6.18355 17.5297 6.76118 18.6263 6.98304 19.8174C7.08384 20.3602 6.72504 20.8824 6.18226 20.9835C5.63962 21.084 5.11731 20.7253 5.01624 20.1827C4.86826 19.3888 4.48377 18.658 3.91272 18.087C3.34169 17.516 2.61086 17.1314 1.81702 16.9834C1.27446 16.8822 0.915501 16.3601 1.01624 15.8174ZM2.1051 11.0059C4.37989 11.2473 6.50315 12.2614 8.12074 13.8789C9.73833 15.4965 10.7524 17.6197 10.9938 19.8946C11.052 20.4438 10.6543 20.9359 10.1051 20.9942C9.55607 21.0523 9.06377 20.6546 9.0055 20.1055C8.81236 18.2857 8.00074 16.5871 6.70667 15.293C5.41262 13.999 3.71397 13.1873 1.89417 12.9942C1.34517 12.9357 0.947265 12.4436 1.00549 11.8946C1.06376 11.3455 1.55606 10.9478 2.1051 11.0059ZM19.9997 3C20.7952 3 21.5582 3.31641 22.1208 3.87891C22.6834 4.44152 22.9997 5.20436 22.9997 6.00001V18.0001C22.9997 18.7957 22.6834 19.5585 22.1208 20.1212C21.5582 20.6837 20.7952 21.0001 19.9997 21.0001H13.9996C13.4475 20.9999 12.9996 20.5522 12.9996 20.0001C12.9996 19.4479 13.4475 19.0002 13.9996 19.0001H19.9997C20.2648 19.0001 20.5192 18.8945 20.7067 18.7071C20.8942 18.5195 20.9997 18.2653 20.9997 18.0001V6.00001C20.9997 5.73479 20.8942 5.48051 20.7067 5.29298C20.5192 5.10555 20.2648 5.00001 19.9997 5.00001H3.99964C3.73455 5.0001 3.48006 5.10552 3.29261 5.29298C3.10518 5.4805 2.99964 5.73488 2.99964 6.00001V8.00002C2.99964 8.5523 2.55192 9.00002 1.99964 9.00002C1.44752 8.99983 0.999635 8.55218 0.999635 8.00002V6.00001C0.999635 5.20444 1.31605 4.4415 1.87854 3.87891C2.44107 3.31638 3.20412 3.0001 3.99964 3H19.9997Z",
15552
- fill: "currentColor"
15553
- }
15554
- )
15659
+ children: [
15660
+ /* @__PURE__ */ jsx16(
15661
+ "path",
15662
+ {
15663
+ fillRule: "evenodd",
15664
+ clipRule: "evenodd",
15665
+ d: "M12 8C9.79088 8 8.00002 9.79086 8.00002 12C8.00002 14.2091 9.79088 16 12 16C14.2092 16 16 14.2091 16 12C16 9.79086 14.2092 8 12 8ZM10 12C10 10.8954 10.8955 10 12 10C13.1046 10 14 10.8954 14 12C14 13.1046 13.1046 14 12 14C10.8955 14 10 13.1046 10 12Z",
15666
+ fill: "currentColor"
15667
+ }
15668
+ ),
15669
+ /* @__PURE__ */ jsx16(
15670
+ "path",
15671
+ {
15672
+ fillRule: "evenodd",
15673
+ clipRule: "evenodd",
15674
+ d: "M12.5147 2.08484C12.1951 1.90505 11.8048 1.90505 11.4852 2.08484L3.48518 6.58484C3.15456 6.77082 2.94995 7.12066 2.94995 7.5V16.5C2.94995 16.8793 3.15456 17.2292 3.48518 17.4152L11.4852 21.9152C11.8048 22.0949 12.1951 22.0949 12.5147 21.9152L20.5147 17.4152C20.8453 17.2292 21.0499 16.8793 21.0499 16.5V7.5C21.0499 7.12066 20.8453 6.77082 20.5147 6.58484L12.5147 2.08484ZM5.04995 15.8859V8.11409L12 4.20471L18.95 8.11409V15.8859L12 19.7953L5.04995 15.8859Z",
15675
+ fill: "currentColor"
15676
+ }
15677
+ )
15678
+ ]
15555
15679
  }
15556
15680
  );
15557
15681
  }
15558
15682
 
15559
- // app/renderer/components/StatusDot.tsx
15560
- import { StatusDot } from "@tutti-os/ui-system";
15561
-
15562
15683
  // agent-gui/RoomIssueNode/TaskSearchField.tsx
15563
15684
  import { useComposedInputValue } from "@tutti-os/ui-react-hooks";
15564
-
15565
- // app/renderer/components/ui/input.tsx
15566
15685
  import { Input } from "@tutti-os/ui-system";
15567
15686
 
15568
15687
  // agent-gui/RoomIssueNode/RoomIssueNode.styles.ts
15569
15688
  var styles = {
15570
- actionGrid: "room-issue-node__action-grid",
15571
- actionRow: "room-issue-node__action-row",
15572
- actionStack: "room-issue-node__action-stack",
15573
- attachEmptyHint: "room-issue-node__attach-empty-hint",
15574
- attachSection: "room-issue-node__attach-section",
15575
- body: "room-issue-node__body",
15576
- compactLayout: "room-issue-node__compact-layout",
15577
- compactSummary: "room-issue-node__compact-summary",
15578
- confirmDialogFooter: "room-issue-node__confirm-dialog-footer",
15579
- confirmDialogLead: "room-issue-node__confirm-dialog-lead",
15580
- confirmDialogOverlayCard: "room-issue-node__confirm-dialog-overlay-card",
15581
- contentArea: "room-issue-node__content-area",
15582
- contextAttachmentBox: "room-issue-node__context-attachment-box",
15583
- contextCardMain: "room-issue-node__context-card-main",
15584
- contextCardMeta: "room-issue-node__context-card-meta",
15585
- contextCardTitle: "room-issue-node__context-card-title",
15586
- contextList: "room-issue-node__context-list",
15587
- contextListCompact: "room-issue-node__context-list-compact",
15588
- contextRow: "room-issue-node__context-row",
15589
- contextRowLeading: "room-issue-node__context-row-leading",
15590
- contextRowOpenButton: "room-issue-node__context-row-open-button",
15591
- createFooterBar: "room-issue-node__create-footer-bar",
15592
- createFormScroll: "room-issue-node__create-form-scroll",
15593
- createPanel: "room-issue-node__create-panel",
15594
- dangerMenuItem: "room-issue-node__danger-menu-item",
15595
- datePicker: "room-issue-node__date-picker",
15596
- detailBodyScroll: "room-issue-node__detail-body-scroll",
15597
- detailBodyStack: "room-issue-node__detail-body-stack",
15598
- detailExecutionActionsRow: "room-issue-node__detail-execution-actions-row",
15599
- detailExecutionFooter: "room-issue-node__detail-execution-footer",
15600
- detailExecutionHintWrap: "room-issue-node__detail-execution-hint-wrap",
15601
- detailHeaderEditButton: "room-issue-node__detail-header-edit-button",
15602
- detailPanel: "room-issue-node__detail-panel",
15603
- detailPanelStretchWithFooter: "room-issue-node__detail-panel-stretch-with-footer",
15604
- detailReadHeader: "room-issue-node__detail-read-header",
15605
- detailSectionPlain: "room-issue-node__detail-section-plain",
15606
- editFooterBar: "room-issue-node__edit-footer-bar",
15607
- editorActionGroup: "room-issue-node__editor-action-group",
15608
- editorTitleInput: "room-issue-node__editor-title-input",
15609
- emptyHint: "room-issue-node__empty-hint",
15610
- emptyState: "room-issue-node__empty-state",
15611
- emptyStateBody: "room-issue-node__empty-state-body",
15612
- emptyStateDescription: "room-issue-node__empty-state-description",
15613
- emptyStateTitle: "room-issue-node__empty-state-title",
15614
- executionActionGrid: "room-issue-node__execution-action-grid",
15615
- executionButtonIcon: "room-issue-node__execution-button-icon",
15616
- executionCardActions: "room-issue-node__execution-card-actions",
15617
- executionCardFooter: "room-issue-node__execution-card-footer",
15618
- executionCardFooterMeta: "room-issue-node__execution-card-footer-meta",
15619
- executionCardFooterTimestamp: "room-issue-node__execution-card-footer-timestamp",
15620
- executionCardHeader: "room-issue-node__execution-card-header",
15621
- executionCardHeaderMain: "room-issue-node__execution-card-header-main",
15622
- executionCardList: "room-issue-node__execution-card-list",
15623
- executionCardSummary: "room-issue-node__execution-card-summary",
15624
- executionCardTitle: "room-issue-node__execution-card-title",
15625
- executionCardTitleRow: "room-issue-node__execution-card-title-row",
15626
- executionContentCard: "room-issue-node__execution-content-card",
15627
- executionEmptyCard: "room-issue-node__execution-empty-card",
15628
- executionHeaderButton: "room-issue-node__execution-header-button",
15629
- executionHintText: "room-issue-node__execution-hint-text",
15630
- executionInfoBody: "room-issue-node__execution-info-body",
15631
- executionInfoCard: "room-issue-node__execution-info-card",
15632
- executionInfoEmpty: "room-issue-node__execution-info-empty",
15633
- executionInfoGrid: "room-issue-node__execution-info-grid",
15634
- executionInfoTitle: "room-issue-node__execution-info-title",
15635
- executionInviteTooltip: "room-issue-node__execution-invite-tooltip",
15636
- executionInviteTooltipWrap: "room-issue-node__execution-invite-tooltip-wrap",
15637
- executionLatestSection: "room-issue-node__execution-latest-section",
15638
- executionLoadingCard: "room-issue-node__execution-loading-card",
15639
- executionPrimaryButton: "room-issue-node__execution-primary-button",
15640
- executionSecondaryButton: "room-issue-node__execution-secondary-button",
15641
- fieldBlock: "room-issue-node__field-block",
15642
- fieldRow: "room-issue-node__field-row",
15643
- filePicker: "room-issue-node__file-picker",
15644
- filePickerActions: "room-issue-node__file-picker-actions",
15645
- filePickerFooter: "room-issue-node__file-picker-footer",
15646
- filePickerFooterActions: "room-issue-node__file-picker-footer-actions",
15647
- filePickerLayout: "room-issue-node__file-picker-layout",
15648
- filePickerListPane: "room-issue-node__file-picker-list-pane",
15649
- filePickerListPaneEmpty: "room-issue-node__file-picker-list-pane-empty",
15650
- filePickerLoadingState: "room-issue-node__file-picker-loading-state",
15651
- filePickerPreview: "room-issue-node__file-picker-preview",
15652
- filePickerPreviewBody: "room-issue-node__file-picker-preview-body",
15653
- filePickerSkeletonIcon: "room-issue-node__file-picker-skeleton-icon",
15654
- filePickerSkeletonName: "room-issue-node__file-picker-skeleton-name",
15655
- filePickerSkeletonRow: "room-issue-node__file-picker-skeleton-row",
15656
- filePickerScrollbar: "room-issue-node__file-picker-scrollbar",
15657
- filePickerScrollbarThumb: "workspace-agents-status-panel__scrollbar-thumb",
15658
- filePickerToolbar: "room-issue-node__file-picker-toolbar",
15659
- filePickerTree: "room-issue-node__file-picker-tree",
15660
- fileRow: "room-issue-node__file-row",
15661
- fileRowCheckbox: "room-issue-node__file-row-checkbox",
15662
- fileRowCheckboxButton: "room-issue-node__file-row-checkbox-button",
15663
- fileRowContainer: "room-issue-node__file-row-container",
15664
- fileRowExpand: "room-issue-node__file-row-expand",
15665
- fileRowExpandButton: "room-issue-node__file-row-expand-button",
15666
- fileRowExpandSpacer: "room-issue-node__file-row-expand-spacer",
15667
- fileRowGlyph: "room-issue-node__file-row-glyph",
15668
- fileRowLabel: "room-issue-node__file-row-label",
15669
- fileRowPath: "room-issue-node__file-row-path",
15670
- fileRowText: "room-issue-node__file-row-text",
15671
- filterCount: "room-issue-node__filter-count",
15672
- filterTab: "room-issue-node__filter-tab",
15673
- filterTabIndicator: "room-issue-node__filter-tab-indicator",
15674
- filterTabs: "room-issue-node__filter-tabs",
15675
- filterTabsMask: "room-issue-node__filter-tabs-mask",
15676
- filterTabsMaskLeft: "room-issue-node__filter-tabs-mask-left",
15677
- filterTabsMaskRight: "room-issue-node__filter-tabs-mask-right",
15678
- filterTabsRow: "room-issue-node__filter-tabs-row",
15679
- filterTabsScrollButton: "room-issue-node__filter-tabs-scroll-button",
15680
- filterTabsScrollButtonLeft: "room-issue-node__filter-tabs-scroll-button-left",
15681
- filterTabsScrollButtonRight: "room-issue-node__filter-tabs-scroll-button-right",
15682
- filterTabsViewport: "room-issue-node__filter-tabs-viewport",
15683
- footerActions: "room-issue-node__footer-actions",
15684
- formGrid: "room-issue-node__form-grid",
15685
- formGridCreateSpacing: "room-issue-node__form-grid-create-spacing",
15686
- formSelect: "room-issue-node__form-select",
15687
- header: "room-issue-node__header",
15688
- headerActions: "room-issue-node__header-actions",
15689
- headerSelect: "room-issue-node__header-select",
15690
- headerTitle: "room-issue-node__header-title",
15691
- headerTitleText: "room-issue-node__header-title-text",
15692
- // i18n-check-ignore: CSS class name.
15693
- helperText: "room-issue-node__helper-text",
15694
- inlineGhostButton: "room-issue-node__inline-ghost-button",
15695
- issueActivityCard: "room-issue-node__issue-activity-card",
15696
- issueDrawer: "room-issue-node__issue-drawer",
15697
- issueDrawerBody: "room-issue-node__issue-drawer-body",
15698
- issueDrawerClosing: "room-issue-node__issue-drawer-closing",
15699
- issueDrawerContent: "room-issue-node__issue-drawer-content",
15700
- issueDrawerFooter: "room-issue-node__issue-drawer-footer",
15701
- issueDrawerFooterActions: "room-issue-node__issue-drawer-footer-actions",
15702
- issueDrawerHeader: "room-issue-node__issue-drawer-header",
15703
- issueDrawerHeaderActions: "room-issue-node__issue-drawer-header-actions",
15704
- issueDrawerHeaderMain: "room-issue-node__issue-drawer-header-main",
15705
- issueDrawerOverlay: "room-issue-node__issue-drawer-overlay",
15706
- issueDrawerOverlayClosing: "room-issue-node__issue-drawer-overlay-closing",
15707
- issueDrawerRunSelect: "room-issue-node__issue-drawer-run-select",
15708
- issueDrawerRunTrigger: "room-issue-node__issue-drawer-run-trigger",
15709
- issueDrawerTitle: "room-issue-node__issue-drawer-title",
15710
- issueEditorDialogBody: "room-issue-node__issue-editor-dialog-body",
15711
- issueEditorDialogFooter: "room-issue-node__issue-editor-dialog-footer",
15712
- issueEditorOverlayCard: "room-issue-node__issue-editor-overlay-card",
15713
- issueExpandedToolbar: "room-issue-node__issue-expanded-toolbar",
15714
- issueId: "room-issue-node__issue-id",
15715
- issueInlineAction: "room-issue-node__issue-inline-action",
15716
- issueLaunchButton: "room-issue-node__issue-launch-button",
15717
- issueLaunchChevron: "room-issue-node__issue-launch-chevron",
15718
- issueList: "room-issue-node__issue-list",
15719
- issueListEmptyCell: "room-issue-node__issue-list-empty-cell",
15720
- issueListFooter: "room-issue-node__issue-list-footer",
15721
- issueListItem: "room-issue-node__issue-list-item",
15722
- issueListLoadingState: "room-issue-node__issue-list-loading-state",
15723
- issueListRow: "room-issue-node__issue-list-row",
15724
- issueListRowActions: "room-issue-node__issue-list-row-actions",
15725
- issueListRowActive: "room-issue-node__issue-list-row-active",
15726
- issueListRowHeader: "room-issue-node__issue-list-row-header",
15727
- issueListRowHeaderMeta: "room-issue-node__issue-list-row-header-meta",
15728
- issueListRowMain: "room-issue-node__issue-list-row-main",
15729
- issueListRowMeta: "room-issue-node__issue-list-row-meta",
15730
- issueListRowRunSelect: "room-issue-node__issue-list-row-run-select",
15731
- issueListRowSummary: "room-issue-node__issue-list-row-summary",
15732
- issueListRowTimestamp: "room-issue-node__issue-list-row-timestamp",
15733
- issueListRowTitle: "room-issue-node__issue-list-row-title",
15734
- issueListRowTitleWrap: "room-issue-node__issue-list-row-title-wrap",
15735
- issueListScrollRegion: "room-issue-node__issue-list-scroll-region",
15736
- issueListSkeletonCard: "room-issue-node__issue-list-skeleton-card",
15737
- issueListSpacer: "room-issue-node__issue-list-spacer",
15738
- issueListSurface: "room-issue-node__issue-list-surface",
15739
- issueListTitleRow: "room-issue-node__issue-list-title-row",
15740
- issueSectionSurface: "room-issue-node__issue-section-surface",
15741
- issueSectionSurfaceIdle: "room-issue-node__issue-section-surface-idle",
15742
- issueMainLoadingState: "room-issue-node__issue-main-loading-state",
15743
- issueMainSkeletonBlock: "room-issue-node__issue-main-skeleton-block",
15744
- issueMainSkeletonEyebrow: "room-issue-node__issue-main-skeleton-eyebrow",
15745
- issueMainSkeletonLineFull: "room-issue-node__issue-main-skeleton-line-full",
15746
- issueMainSkeletonLineMid: "room-issue-node__issue-main-skeleton-line-mid",
15747
- issueMainSkeletonLineShort: "room-issue-node__issue-main-skeleton-line-short",
15748
- issueMainSkeletonMeta: "room-issue-node__issue-main-skeleton-meta",
15749
- issueMainSkeletonMetaRow: "room-issue-node__issue-main-skeleton-meta-row",
15750
- issueMainSkeletonMetaShort: "room-issue-node__issue-main-skeleton-meta-short",
15751
- issueMainSkeletonPanel: "room-issue-node__issue-main-skeleton-panel",
15752
- issueMainSkeletonSection: "room-issue-node__issue-main-skeleton-section",
15753
- issueMainSkeletonTitle: "room-issue-node__issue-main-skeleton-title",
15754
- issueMeta: "room-issue-node__issue-meta",
15755
- issueMoreAction: "room-issue-node__issue-more-action",
15756
- issueMoreIconAction: "room-issue-node__issue-more-icon-action",
15757
- issuePrimaryAction: "room-issue-node__issue-primary-action",
15758
- issueSecondaryAction: "room-issue-node__issue-secondary-action",
15759
- issueSectionHeader: "room-issue-node__issue-section-header",
15760
- issueSectionTitle: "room-issue-node__issue-section-title",
15761
- issueSkeletonBar: "room-issue-node__issue-skeleton-bar",
15762
- issueSkeletonBarMeta: "room-issue-node__issue-skeleton-bar-meta",
15763
- issueSkeletonBarSummary: "room-issue-node__issue-skeleton-bar-summary",
15764
- issueSkeletonBarTitle: "room-issue-node__issue-skeleton-bar-title",
15765
- issueTaskShellSurface: "room-issue-node__issue-task-shell-surface",
15766
- issueTitle: "room-issue-node__issue-title",
15767
- loadingHint: "room-issue-node__loading-hint",
15768
- loadingMask: "room-issue-node__loading-mask",
15769
- metaRow: "room-issue-node__meta-row",
15770
- metaRowSeparator: "room-issue-node__meta-row-separator",
15771
- node: "room-issue-node__node",
15772
- nodeMaximized: "room-issue-node__node-maximized",
15773
- nodeMuted: "room-issue-node__node-muted",
15774
- outputAttachmentBox: "room-issue-node__output-attachment-box",
15775
- outputButton: "room-issue-node__output-button",
15776
- outputButtonPath: "room-issue-node__output-button-path",
15777
- outputButtonTitle: "room-issue-node__output-button-title",
15778
- outputCard: "room-issue-node__output-card",
15779
- outputCardMainButton: "room-issue-node__output-card-main-button",
15780
- outputList: "room-issue-node__output-list",
15781
- outputMeta: "room-issue-node__output-meta",
15782
- outputTitle: "room-issue-node__output-title",
15783
- outputsList: "room-issue-node__outputs-list",
15784
- overlay: "room-issue-node__overlay",
15785
- overlayCard: "room-issue-node__overlay-card",
15786
- overlayCardNarrow: "room-issue-node__overlay-card-narrow",
15787
- overlayNarrow: "room-issue-node__overlay-narrow",
15788
- panelDescription: "room-issue-node__panel-description",
15789
- panelEyebrow: "room-issue-node__panel-eyebrow",
15790
- panelHeader: "room-issue-node__panel-header",
15791
- panelTitle: "room-issue-node__panel-title",
15792
- panelTitleIssueName: "room-issue-node__panel-title-issue-name",
15793
- prioritySelectWrap: "room-issue-node__priority-select-wrap",
15794
- resultCard: "room-issue-node__result-card",
15795
- resultSessionDetail: "room-issue-node__result-session-detail",
15796
- resultStatusRow: "room-issue-node__result-status-row",
15797
- resultTitle: "room-issue-node__result-title",
15798
- richTextEditorCompact: "room-issue-node__rich-text-editor-compact",
15799
- richTextEditorRead: "room-issue-node__rich-text-editor-read",
15800
- richTextEditorTall: "room-issue-node__rich-text-editor-tall",
15801
- runActionSelect: "room-issue-node__run-action-select",
15802
- runActionSelectMenu: "room-issue-node__run-action-select-menu",
15803
- runActionTriggerLabel: "room-issue-node__run-action-trigger-label",
15804
- runActionTriggerLabelText: "room-issue-node__run-action-trigger-label-text",
15805
- runActionWrap: "room-issue-node__run-action-wrap",
15806
- searchBar: "room-issue-node__search-bar",
15807
15689
  searchClearButton: "room-issue-node__search-clear-button",
15808
15690
  searchField: "room-issue-node__search-field",
15809
- searchInput: "room-issue-node__search-input",
15810
- sectionHeader: "room-issue-node__section-header",
15811
- sectionHeaderActions: "room-issue-node__section-header-actions",
15812
- sectionLabel: "room-issue-node__section-label",
15813
- sectionTitle: "room-issue-node__section-title",
15814
- selectionHint: "room-issue-node__selection-hint",
15815
- sidebarCategoryEmptyHint: "room-issue-node__sidebar-category-empty-hint",
15816
- sidebarCreateButton: "room-issue-node__sidebar-create-button",
15817
- sidebarEmptyHint: "room-issue-node__sidebar-empty-hint",
15818
- sidebarEmptySkeleton: "room-issue-node__sidebar-empty-skeleton",
15819
- sidebarEmptySkeletonCard: "room-issue-node__sidebar-empty-skeleton-card",
15820
- sidebarEmptyText: "room-issue-node__sidebar-empty-text",
15821
- sidebarEmptyTitle: "room-issue-node__sidebar-empty-title",
15822
- sidebarHeader: "room-issue-node__sidebar-header",
15823
- standardLayout: "room-issue-node__standard-layout",
15824
- standardLayoutEmpty: "room-issue-node__standard-layout-empty",
15825
- standardLayoutNarrow: "room-issue-node__standard-layout-narrow",
15826
- standardLayoutSidebarCollapsed: "room-issue-node__standard-layout-sidebar-collapsed",
15827
- standardMain: "room-issue-node__standard-main",
15828
- standardMainScroll: "room-issue-node__standard-main-scroll",
15829
- standardMainStretch: "room-issue-node__standard-main-stretch",
15830
- standardSidebar: "room-issue-node__standard-sidebar",
15831
- standardSidebarResizer: "room-issue-node__standard-sidebar-resizer",
15832
- standardSidebarResizerLine: "room-issue-node__standard-sidebar-resizer-line",
15833
- statusBadge: "room-issue-node__status-badge",
15834
- statusBadgeCanceled: "room-issue-node__status-badge-canceled",
15835
- statusBadgeCompleted: "room-issue-node__status-badge-completed",
15836
- statusBadgeDefault: "room-issue-node__status-badge-default",
15837
- statusBadgeFailed: "room-issue-node__status-badge-failed",
15838
- statusBadgePending: "room-issue-node__status-badge-pending",
15839
- statusBadgeRunning: "room-issue-node__status-badge-running",
15840
- statusFieldSelectWrap: "room-issue-node__status-field-select-wrap",
15841
- statusSelectWrap: "room-issue-node__status-select-wrap",
15842
- summaryText: "room-issue-node__summary-text",
15843
- taskCardFooter: "room-issue-node__task-card-footer",
15844
- taskCardHeader: "room-issue-node__task-card-header",
15845
- taskCenterMain: "room-issue-node__task-center-main",
15846
- taskCenterMainEditing: "room-issue-node__task-center-main-editing",
15847
- taskContentGrid: "room-issue-node__task-content-grid",
15848
- taskExecutionPanelsGroup: "room-issue-node__task-execution-panels-group",
15849
- taskDescriptionBody: "room-issue-node__task-description-body",
15850
- taskDescriptionBodyWrap: "room-issue-node__task-description-body-wrap",
15851
- taskDescriptionScrollable: "room-issue-node__task-description-scrollable",
15852
- taskDescriptionContent: "room-issue-node__task-description-content",
15853
- taskDescriptionEmpty: "room-issue-node__task-description-empty",
15854
- taskDescriptionFadeMask: "room-issue-node__task-description-fade-mask",
15855
- taskDescriptionSurface: "room-issue-node__task-description-surface",
15856
- taskDescriptionSurfaceOverflowing: "room-issue-node__task-description-surface-overflowing",
15857
- taskDescriptionViewport: "room-issue-node__task-description-viewport",
15858
- taskEmptyStateBody: "room-issue-node__task-empty-state-body",
15859
- taskEmptyStateButton: "room-issue-node__task-empty-state-button",
15860
- taskEmptyStateDescription: "room-issue-node__task-empty-state-description",
15861
- taskEmptyStateIcon: "room-issue-node__task-empty-state-icon",
15862
- taskEmptyStatePanel: "room-issue-node__task-empty-state-panel",
15863
- taskEmptyStateTitle: "room-issue-node__task-empty-state-title",
15864
- taskHeader: "room-issue-node__task-header",
15865
- taskHeaderActions: "room-issue-node__task-header-actions",
15866
- taskHeaderDangerAction: "room-issue-node__task-header-danger-action",
15867
- taskHeaderMain: "room-issue-node__task-header-main",
15868
- taskHeaderMetaRow: "room-issue-node__task-header-meta-row",
15869
- taskHeaderStatusTag: "room-issue-node__task-header-status-tag",
15870
- taskHeaderTextAction: "room-issue-node__task-header-text-action",
15871
- taskOverviewCard: "room-issue-node__task-overview-card",
15872
- taskOverviewPill: "room-issue-node__task-overview-pill",
15873
- taskOverviewPills: "room-issue-node__task-overview-pills",
15874
- taskOverviewStatCard: "room-issue-node__task-overview-stat-card",
15875
- taskOverviewStatLabel: "room-issue-node__task-overview-stat-label",
15876
- taskOverviewStatValue: "room-issue-node__task-overview-stat-value",
15877
- taskOverviewStatsGrid: "room-issue-node__task-overview-stats-grid",
15878
- taskRefChip: "room-issue-node__task-ref-chip",
15879
- taskRefChips: "room-issue-node__task-ref-chips",
15880
- taskReferencePickerBody: "room-issue-node__task-reference-picker-body",
15881
- taskReferencePickerCard: "room-issue-node__task-reference-picker-card",
15882
- taskReferencePickerEmpty: "room-issue-node__task-reference-picker-empty",
15883
- taskReferencePickerFooter: "room-issue-node__task-reference-picker-footer",
15884
- taskReferencePickerHeader: "room-issue-node__task-reference-picker-header",
15885
- taskReferencePickerList: "room-issue-node__task-reference-picker-list",
15886
- taskReferencePickerOverlay: "room-issue-node__task-reference-picker-overlay",
15887
- taskReferencePickerOverlayCard: "room-issue-node__task-reference-picker-overlay-card",
15888
- taskReferencePickerRow: "room-issue-node__task-reference-picker-row",
15889
- taskReferencePickerSelection: "room-issue-node__task-reference-picker-selection",
15890
- taskReferencePickerSelectionChip: "room-issue-node__task-reference-picker-selection-chip",
15891
- taskReferencePickerSelectionList: "room-issue-node__task-reference-picker-selection-list",
15892
- taskReferencePickerSummary: "room-issue-node__task-reference-picker-summary",
15893
- taskRefsEmpty: "room-issue-node__task-refs-empty",
15894
- taskRefsSection: "room-issue-node__task-refs-section",
15895
- taskShellActions: "room-issue-node__task-shell-actions",
15896
- taskShellBottomBar: "room-issue-node__task-shell-bottom-bar",
15897
- taskShellCard: "room-issue-node__task-shell-card",
15898
- taskShellDescription: "room-issue-node__task-shell-description",
15899
- taskShellRunningHeader: "room-issue-node__task-shell-running-header",
15900
- taskShellTitle: "room-issue-node__task-shell-title",
15901
- taskTitle: "room-issue-node__task-title",
15902
- taskTitleRow: "room-issue-node__task-title-row",
15903
- textInput: "room-issue-node__text-input"
15691
+ searchInput: "room-issue-node__search-input"
15904
15692
  };
15905
15693
  var RoomIssueNode_styles_default = styles;
15906
15694
 
15907
15695
  // agent-gui/RoomIssueNode/TaskSearchField.tsx
15908
- import { jsx as jsx17, jsxs as jsxs5 } from "react/jsx-runtime";
15696
+ import { jsx as jsx17, jsxs as jsxs6 } from "react/jsx-runtime";
15909
15697
  function TaskSearchField({
15910
15698
  ariaLabel,
15911
15699
  className,
@@ -15919,7 +15707,7 @@ function TaskSearchField({
15919
15707
  "use memo";
15920
15708
  const { t } = useTranslation();
15921
15709
  const searchInput = useComposedInputValue({ onCommit: onChange, value });
15922
- return /* @__PURE__ */ jsxs5(
15710
+ return /* @__PURE__ */ jsxs6(
15923
15711
  "div",
15924
15712
  {
15925
15713
  className: `${RoomIssueNode_styles_default.searchField} ${className ?? ""}`.trim(),
@@ -15974,7 +15762,13 @@ function isTaskSearchImeComposing(event) {
15974
15762
  }
15975
15763
 
15976
15764
  // agent-gui/agentGuiNode/AgentSessionChrome.tsx
15977
- 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";
15978
15772
 
15979
15773
  // app/renderer/components/icons/CastIcon.tsx
15980
15774
  import {
@@ -15989,7 +15783,7 @@ import {
15989
15783
  useAnimation,
15990
15784
  useReducedMotion
15991
15785
  } from "framer-motion";
15992
- import { jsx as jsx18, jsxs as jsxs6 } from "react/jsx-runtime";
15786
+ import { jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
15993
15787
  var CAST_VARIANTS = {
15994
15788
  normal: { opacity: 1 },
15995
15789
  animate: (custom) => ({
@@ -16064,7 +15858,7 @@ var CastIcon = forwardRef2(
16064
15858
  onMouseEnter: handleMouseEnter,
16065
15859
  onMouseLeave: handleMouseLeave,
16066
15860
  ...props,
16067
- children: /* @__PURE__ */ jsxs6(
15861
+ children: /* @__PURE__ */ jsxs7(
16068
15862
  "svg",
16069
15863
  {
16070
15864
  fill: "none",
@@ -16117,15 +15911,6 @@ var CastIcon = forwardRef2(
16117
15911
  );
16118
15912
  CastIcon.displayName = "CastIcon";
16119
15913
 
16120
- // app/renderer/components/ui/tooltip.tsx
16121
- import {
16122
- Tooltip,
16123
- TooltipContent,
16124
- TooltipPortal,
16125
- TooltipProvider,
16126
- TooltipTrigger
16127
- } from "@tutti-os/ui-system";
16128
-
16129
15914
  // agent-gui/agentGuiNode/AgentGUIChrome.styles.ts
16130
15915
  var styles2 = {
16131
15916
  sessionChrome: "agent-gui-chrome__session-chrome",
@@ -16154,7 +15939,7 @@ var styles2 = {
16154
15939
  var AgentGUIChrome_styles_default = styles2;
16155
15940
 
16156
15941
  // agent-gui/agentGuiNode/AgentSessionChrome.tsx
16157
- import { Fragment as Fragment2, jsx as jsx19, jsxs as jsxs7 } from "react/jsx-runtime";
15942
+ import { Fragment as Fragment2, jsx as jsx19, jsxs as jsxs8 } from "react/jsx-runtime";
16158
15943
  function splitTrailingEllipsis(message) {
16159
15944
  const match = message.match(/^(.*?)(\.{3}|…)\s*$/);
16160
15945
  if (!match) {
@@ -16167,7 +15952,7 @@ function splitTrailingEllipsis(message) {
16167
15952
  }
16168
15953
  function LoadingEllipsis() {
16169
15954
  "use memo";
16170
- return /* @__PURE__ */ jsxs7("span", { className: "tsh-inline-loading-ellipsis", "aria-hidden": "true", children: [
15955
+ return /* @__PURE__ */ jsxs8("span", { className: "tsh-inline-loading-ellipsis", "aria-hidden": "true", children: [
16171
15956
  /* @__PURE__ */ jsx19("span", {}),
16172
15957
  /* @__PURE__ */ jsx19("span", {}),
16173
15958
  /* @__PURE__ */ jsx19("span", {})
@@ -16178,7 +15963,7 @@ function ChromeMessageTooltip({
16178
15963
  children
16179
15964
  }) {
16180
15965
  "use memo";
16181
- return /* @__PURE__ */ jsx19(TooltipProvider, { delayDuration: 250, children: /* @__PURE__ */ jsxs7(Tooltip, { children: [
15966
+ return /* @__PURE__ */ jsx19(TooltipProvider, { delayDuration: 250, children: /* @__PURE__ */ jsxs8(Tooltip, { children: [
16182
15967
  /* @__PURE__ */ jsx19(TooltipTrigger, { asChild: true, children }),
16183
15968
  /* @__PURE__ */ jsx19(
16184
15969
  TooltipContent,
@@ -16208,9 +15993,9 @@ function AgentChromeNotice({
16208
15993
  className: cn(AgentGUIChrome_styles_default.chromeCard, toneClassName),
16209
15994
  role,
16210
15995
  "data-testid": testId,
16211
- children: /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
15996
+ children: /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
16212
15997
  icon ? /* @__PURE__ */ jsx19("span", { className: AgentGUIChrome_styles_default.chromeIcon, children: icon }) : null,
16213
- /* @__PURE__ */ jsxs7(
15998
+ /* @__PURE__ */ jsxs8(
16214
15999
  "p",
16215
16000
  {
16216
16001
  className: cn(AgentGUIChrome_styles_default.chromeMessage, AgentGUIChrome_styles_default.chromeNoticeMessage),
@@ -16244,10 +16029,10 @@ function AgentSessionChrome({
16244
16029
  if (!hasContent) {
16245
16030
  return null;
16246
16031
  }
16247
- return /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.sessionChrome, children: [
16248
- visibleAuth ? /* @__PURE__ */ jsx19("section", { className: cn(AgentGUIChrome_styles_default.chromeCard, AgentGUIChrome_styles_default.chromeCardWarning), children: /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: [
16032
+ return /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.sessionChrome, children: [
16033
+ visibleAuth ? /* @__PURE__ */ jsx19("section", { className: cn(AgentGUIChrome_styles_default.chromeCard, AgentGUIChrome_styles_default.chromeCardWarning), children: /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: [
16249
16034
  /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: /* @__PURE__ */ jsx19(ChromeMessageTooltip, { message: visibleAuth.message, children: /* @__PURE__ */ jsx19("p", { className: AgentGUIChrome_styles_default.chromeMessage, tabIndex: 0, children: visibleAuth.message }) }) }),
16250
- /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeInlineActions, children: [
16035
+ /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeInlineActions, children: [
16251
16036
  onAuthLogin ? /* @__PURE__ */ jsx19(
16252
16037
  Button2,
16253
16038
  {
@@ -16270,7 +16055,7 @@ function AgentSessionChrome({
16270
16055
  )
16271
16056
  ] })
16272
16057
  ] }) }) : null,
16273
- chrome.approval ? /* @__PURE__ */ jsxs7("section", { className: cn(AgentGUIChrome_styles_default.chromeCard, AgentGUIChrome_styles_default.chromeCardAction), children: [
16058
+ chrome.approval ? /* @__PURE__ */ jsxs8("section", { className: cn(AgentGUIChrome_styles_default.chromeCard, AgentGUIChrome_styles_default.chromeCardAction), children: [
16274
16059
  /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.chromeTitle, children: labels.approvalRequired }),
16275
16060
  /* @__PURE__ */ jsx19("p", { className: AgentGUIChrome_styles_default.chromeMessage, children: chrome.approval.title }),
16276
16061
  /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.chromeActions, children: chrome.approval.options.map((option) => /* @__PURE__ */ jsx19(
@@ -16297,8 +16082,8 @@ function AgentSessionChrome({
16297
16082
  AgentGUIChrome_styles_default.chromeCard,
16298
16083
  visibleRecovery.kind === "failed" ? AgentGUIChrome_styles_default.chromeCardDanger : visibleRecovery.kind === "warning" ? AgentGUIChrome_styles_default.chromeCardDanger : visibleRecovery.kind === "activating" ? AgentGUIChrome_styles_default.chromeCardConnecting : AgentGUIChrome_styles_default.chromeCardMuted
16299
16084
  ),
16300
- children: /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: [
16301
- /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
16085
+ children: /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: [
16086
+ /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
16302
16087
  visibleRecovery.kind === "activating" ? /* @__PURE__ */ jsx19(
16303
16088
  CastIcon,
16304
16089
  {
@@ -16315,7 +16100,7 @@ function AgentSessionChrome({
16315
16100
  className: AgentGUIChrome_styles_default.chromeMessage,
16316
16101
  "aria-label": visibleRecovery.kind === "activating" ? recoveryMessage : void 0,
16317
16102
  tabIndex: 0,
16318
- children: visibleRecovery.kind === "activating" ? /* @__PURE__ */ jsxs7(Fragment2, { children: [
16103
+ children: visibleRecovery.kind === "activating" ? /* @__PURE__ */ jsxs8(Fragment2, { children: [
16319
16104
  /* @__PURE__ */ jsx19("span", { className: "tsh-inline-loading-label", children: activatingMessage.label }),
16320
16105
  activatingMessage.ellipsis ? /* @__PURE__ */ jsx19(LoadingEllipsis, {}) : null
16321
16106
  ] }) : recoveryMessage
@@ -16352,7 +16137,7 @@ function AgentSessionChrome({
16352
16137
  // agent-gui/agentGuiNode/AgentGoalBanner.tsx
16353
16138
  import { useEffect as useEffect6, useState as useState5 } from "react";
16354
16139
  import { CirclePause, CirclePlay, Pencil, Target, Trash2 } from "lucide-react";
16355
- import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
16140
+ import { jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
16356
16141
  var RESUMABLE_GOAL_STATUSES = /* @__PURE__ */ new Set([
16357
16142
  "paused",
16358
16143
  "blocked",
@@ -16467,8 +16252,8 @@ function AgentGoalBanner({
16467
16252
  className: cn(AgentGUIChrome_styles_default.chromeCard, AgentGUIChrome_styles_default.chromeCardMuted),
16468
16253
  role: "status",
16469
16254
  "data-testid": "agent-gui-goal-banner",
16470
- children: /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: [
16471
- /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
16255
+ children: /* @__PURE__ */ jsxs9("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: [
16256
+ /* @__PURE__ */ jsxs9("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
16472
16257
  /* @__PURE__ */ jsx20("span", { className: AgentGUIChrome_styles_default.chromeIcon, children: /* @__PURE__ */ jsx20(Target, { "aria-hidden": true, className: "size-3.5" }) }),
16473
16258
  editDraft !== null ? /* @__PURE__ */ jsx20(
16474
16259
  "input",
@@ -16490,7 +16275,7 @@ function AgentGoalBanner({
16490
16275
  },
16491
16276
  onBlur: () => setEditDraft(null)
16492
16277
  }
16493
- ) : /* @__PURE__ */ jsxs8(
16278
+ ) : /* @__PURE__ */ jsxs9(
16494
16279
  "p",
16495
16280
  {
16496
16281
  className: cn(AgentGUIChrome_styles_default.chromeMessage, AgentGUIChrome_styles_default.chromeNoticeMessage),
@@ -16509,7 +16294,7 @@ function AgentGoalBanner({
16509
16294
  }
16510
16295
  )
16511
16296
  ] }),
16512
- hasActions ? /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeGoalActions, children: [
16297
+ hasActions ? /* @__PURE__ */ jsxs9("div", { className: AgentGUIChrome_styles_default.chromeGoalActions, children: [
16513
16298
  onEditObjective !== void 0 && editDraft === null ? /* @__PURE__ */ jsx20(
16514
16299
  "button",
16515
16300
  {
@@ -16579,10 +16364,18 @@ import {
16579
16364
  import { createPortal as createPortal3, flushSync } from "react-dom";
16580
16365
  import {
16581
16366
  Button as Button3,
16367
+ Popover,
16368
+ PopoverAnchor,
16369
+ PopoverContent,
16582
16370
  Select as Select2,
16583
16371
  SelectContent as SelectContent2,
16584
16372
  SelectItem as SelectItem2,
16585
- 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
16586
16379
  } from "@tutti-os/ui-system";
16587
16380
  import { ListChecks as ListChecks2, Target as Target3, X } from "lucide-react";
16588
16381
  import {
@@ -17046,7 +16839,7 @@ import {
17046
16839
  Target as Target2,
17047
16840
  ZapIcon
17048
16841
  } from "lucide-react";
17049
- import { jsx as jsx21, jsxs as jsxs9 } from "react/jsx-runtime";
16842
+ import { jsx as jsx21, jsxs as jsxs10 } from "react/jsx-runtime";
17050
16843
  var paletteStyles = {
17051
16844
  palette: "nodrag agent-gui-node__mention-palette flex h-full min-h-0 flex-col gap-1 overflow-y-auto px-1 pb-1 pt-2 [-webkit-app-region:no-drag]",
17052
16845
  option: "nodrag relative flex min-h-9 w-full min-w-0 cursor-pointer select-none items-center gap-2 overflow-hidden rounded-[6px] border-0 bg-transparent px-2.5 py-2 text-left text-[13px] text-[var(--text-primary)] outline-hidden transition-colors duration-200 [-webkit-app-region:no-drag] hover:bg-[var(--transparency-block)] focus-visible:bg-[var(--transparency-block)] focus-visible:outline-none active:bg-[var(--transparency-active)] data-[highlighted]:bg-[var(--transparency-block)] data-[highlighted]:text-[var(--text-primary)] [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
@@ -17116,9 +16909,9 @@ function AgentSlashCommandPalette({
17116
16909
  })
17117
16910
  }
17118
16911
  ) : null;
17119
- return /* @__PURE__ */ jsxs9(Fragment3, { children: [
16912
+ return /* @__PURE__ */ jsxs10(Fragment3, { children: [
17120
16913
  groupHeader,
17121
- /* @__PURE__ */ jsxs9(
16914
+ /* @__PURE__ */ jsxs10(
17122
16915
  "div",
17123
16916
  {
17124
16917
  ref: isHighlighted ? highlightedOptionRef : null,
@@ -17148,8 +16941,8 @@ function AgentSlashCommandPalette({
17148
16941
  },
17149
16942
  children: [
17150
16943
  entryIcon ? /* @__PURE__ */ jsx21("span", { "aria-hidden": "true", className: paletteStyles.icon, children: entryIcon }) : null,
17151
- /* @__PURE__ */ jsxs9("span", { className: paletteStyles.copy, children: [
17152
- /* @__PURE__ */ jsxs9("span", { className: paletteStyles.name, children: [
16944
+ /* @__PURE__ */ jsxs10("span", { className: paletteStyles.copy, children: [
16945
+ /* @__PURE__ */ jsxs10("span", { className: paletteStyles.name, children: [
17153
16946
  /* @__PURE__ */ jsx21("span", { className: paletteStyles.primaryName, children: entry.type === "command" ? entry.primaryLabel ?? entry.label : entry.label }),
17154
16947
  entry.type === "command" && entry.secondaryLabel ? /* @__PURE__ */ jsx21("span", { className: paletteStyles.secondaryName, children: entry.secondaryLabel }) : null
17155
16948
  ] }),
@@ -17240,6 +17033,12 @@ import {
17240
17033
  useState as useState6
17241
17034
  } from "react";
17242
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";
17243
17042
 
17244
17043
  // agent-gui/agentGuiNode/AgentGUINode.styles.ts
17245
17044
  var styles3 = {
@@ -17374,6 +17173,7 @@ var styles3 = {
17374
17173
  providerRailLaunchpadIcon: "agent-gui-node__provider-rail-launchpad-icon",
17375
17174
  emptyHeroLaunchpadIcon: "agent-gui-node__empty-hero-launchpad-icon",
17376
17175
  providerRailLaunchpadItem: "agent-gui-node__provider-rail-launchpad-item",
17176
+ providerRailFooter: "agent-gui-node__provider-rail-footer",
17377
17177
  providerRailPanel: "agent-gui-node__provider-rail-panel",
17378
17178
  providerRailSeparator: "agent-gui-node__provider-rail-separator",
17379
17179
  providerRailTile: "agent-gui-node__provider-rail-tile",
@@ -17406,7 +17206,7 @@ var styles3 = {
17406
17206
  var AgentGUINode_styles_default = styles3;
17407
17207
 
17408
17208
  // agent-gui/agentGuiNode/AgentQueuedPromptPanel.tsx
17409
- import { jsx as jsx22, jsxs as jsxs10 } from "react/jsx-runtime";
17209
+ import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
17410
17210
  var EMPTY_WORKSPACE_APP_ICONS = [];
17411
17211
  function queuedPromptImages(queuedPrompt) {
17412
17212
  return agentPromptContentImageBlocks(
@@ -17521,7 +17321,7 @@ function AgentQueuedPromptPanel({
17521
17321
  window.removeEventListener("resize", measure);
17522
17322
  };
17523
17323
  }, [queuedPrompts]);
17524
- return /* @__PURE__ */ jsxs10(
17324
+ return /* @__PURE__ */ jsxs11(
17525
17325
  "div",
17526
17326
  {
17527
17327
  className: AgentGUINode_styles_default.composerQueuedPromptPanel,
@@ -17532,7 +17332,7 @@ function AgentQueuedPromptPanel({
17532
17332
  onClick: toggleExpanded,
17533
17333
  onKeyDown: handleKeyDown,
17534
17334
  children: [
17535
- /* @__PURE__ */ jsxs10("div", { className: AgentGUINode_styles_default.composerQueuedPromptHeader, children: [
17335
+ /* @__PURE__ */ jsxs11("div", { className: AgentGUINode_styles_default.composerQueuedPromptHeader, children: [
17536
17336
  /* @__PURE__ */ jsx22("span", { className: AgentGUINode_styles_default.composerQueuedPromptLabel, children: labels.queuedLabel }),
17537
17337
  /* @__PURE__ */ jsx22("span", { className: AgentGUINode_styles_default.composerQueuedPromptCount, children: queuedPrompts.length }),
17538
17338
  canExpand ? /* @__PURE__ */ jsx22(
@@ -17558,14 +17358,14 @@ function AgentQueuedPromptPanel({
17558
17358
  queuedPrompt.content
17559
17359
  );
17560
17360
  const title = queuedPromptTitle(queuedPrompt);
17561
- return /* @__PURE__ */ jsxs10(
17361
+ return /* @__PURE__ */ jsxs11(
17562
17362
  "div",
17563
17363
  {
17564
17364
  className: AgentGUINode_styles_default.composerQueuedPromptRow,
17565
17365
  "data-testid": `agent-gui-composer-queued-prompt-${queuedPrompt.id}`,
17566
17366
  "data-draining": isDraining ? "true" : "false",
17567
17367
  children: [
17568
- /* @__PURE__ */ jsx22("div", { className: AgentGUINode_styles_default.composerQueuedPromptMain, children: /* @__PURE__ */ jsxs10("div", { className: AgentGUINode_styles_default.composerQueuedPromptBody, title, children: [
17368
+ /* @__PURE__ */ jsx22("div", { className: AgentGUINode_styles_default.composerQueuedPromptMain, children: /* @__PURE__ */ jsxs11("div", { className: AgentGUINode_styles_default.composerQueuedPromptBody, title, children: [
17569
17369
  displayText ? /* @__PURE__ */ jsx22(
17570
17370
  "div",
17571
17371
  {
@@ -17603,7 +17403,7 @@ function AgentQueuedPromptPanel({
17603
17403
  );
17604
17404
  }) }) : null
17605
17405
  ] }) }),
17606
- /* @__PURE__ */ jsxs10("div", { className: AgentGUINode_styles_default.composerQueuedPromptActions, children: [
17406
+ /* @__PURE__ */ jsxs11("div", { className: AgentGUINode_styles_default.composerQueuedPromptActions, children: [
17607
17407
  /* @__PURE__ */ jsx22(
17608
17408
  CanvasNodeGhostIconButton,
17609
17409
  {
@@ -17622,8 +17422,8 @@ function AgentQueuedPromptPanel({
17622
17422
  children: /* @__PURE__ */ jsx22(CanvasNodeTrashLinedIcon, { "aria-hidden": "true" })
17623
17423
  }
17624
17424
  ),
17625
- /* @__PURE__ */ jsxs10(DropdownMenu, { children: [
17626
- /* @__PURE__ */ jsx22(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx22(
17425
+ /* @__PURE__ */ jsxs11(DropdownMenu2, { children: [
17426
+ /* @__PURE__ */ jsx22(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsx22(
17627
17427
  CanvasNodeGhostIconButton,
17628
17428
  {
17629
17429
  "aria-label": labels.queuedPromptMoreActions,
@@ -17634,7 +17434,7 @@ function AgentQueuedPromptPanel({
17634
17434
  }
17635
17435
  ) }),
17636
17436
  /* @__PURE__ */ jsx22(
17637
- DropdownMenuContent,
17437
+ DropdownMenuContent2,
17638
17438
  {
17639
17439
  align: "end",
17640
17440
  className: AgentGUINode_styles_default.composerMenuContent,
@@ -17688,15 +17488,15 @@ import {
17688
17488
  import { prepareWorkspaceUserProjectSelection } from "@tutti-os/workspace-user-project/core";
17689
17489
  import {
17690
17490
  CheckIcon,
17691
- DropdownMenu as DropdownMenu2,
17692
- DropdownMenuContent as DropdownMenuContent2,
17491
+ DropdownMenu as DropdownMenu3,
17492
+ DropdownMenuContent as DropdownMenuContent3,
17693
17493
  DropdownMenuItem as DropdownMenuItem2,
17694
- DropdownMenuLabel as DropdownMenuLabel2,
17695
- DropdownMenuSeparator as DropdownMenuSeparator2,
17696
- DropdownMenuSub as DropdownMenuSub2,
17697
- DropdownMenuSubContent as DropdownMenuSubContent2,
17698
- DropdownMenuSubTrigger as DropdownMenuSubTrigger2,
17699
- DropdownMenuTrigger as DropdownMenuTrigger2,
17494
+ DropdownMenuLabel,
17495
+ DropdownMenuSeparator,
17496
+ DropdownMenuSub,
17497
+ DropdownMenuSubContent,
17498
+ DropdownMenuSubTrigger,
17499
+ DropdownMenuTrigger as DropdownMenuTrigger3,
17700
17500
  FolderIcon,
17701
17501
  NewWorkspaceLinedIcon,
17702
17502
  NoWorkspaceLinedIcon,
@@ -18163,7 +17963,7 @@ function optionsWithSelectedValue(options, selectedValue) {
18163
17963
  }
18164
17964
 
18165
17965
  // agent-gui/agentGuiNode/AgentComposerSettingsMenus.tsx
18166
- import { Fragment as Fragment5, jsx as jsx23, jsxs as jsxs11 } from "react/jsx-runtime";
17966
+ import { Fragment as Fragment5, jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
18167
17967
  function basenameProjectPath(path) {
18168
17968
  const normalized = path.trim().replaceAll("\\", "/").replace(/\/+$/, "");
18169
17969
  return normalized.split("/").filter(Boolean).at(-1) ?? path;
@@ -18198,7 +17998,7 @@ function AgentProjectDropdown({
18198
17998
  if (previewMode) {
18199
17999
  const selectedPath = composerSettings.selectedProjectPath?.trim() ?? "";
18200
18000
  const triggerLabel = selectedPath ? basenameProjectPath(selectedPath) : resolvedLabels.noProject;
18201
- return /* @__PURE__ */ jsxs11(
18001
+ return /* @__PURE__ */ jsxs12(
18202
18002
  "button",
18203
18003
  {
18204
18004
  type: "button",
@@ -18209,7 +18009,7 @@ function AgentProjectDropdown({
18209
18009
  "text-[var(--agent-gui-text-tertiary)]"
18210
18010
  ),
18211
18011
  children: [
18212
- /* @__PURE__ */ jsxs11(
18012
+ /* @__PURE__ */ jsxs12(
18213
18013
  "span",
18214
18014
  {
18215
18015
  className: "workspace-user-project-trigger-label",
@@ -18304,7 +18104,7 @@ function AgentPermissionModeDropdown({
18304
18104
  }
18305
18105
  applyPermissionModeId(permissionModeId);
18306
18106
  };
18307
- const trigger = /* @__PURE__ */ jsxs11(
18107
+ const trigger = /* @__PURE__ */ jsxs12(
18308
18108
  "button",
18309
18109
  {
18310
18110
  type: "button",
@@ -18339,7 +18139,7 @@ function AgentPermissionModeDropdown({
18339
18139
  children: /* @__PURE__ */ jsx23("span", { className: "flex min-w-0 flex-1 items-center", children: /* @__PURE__ */ jsx23("span", { className: "truncate", children: triggerLabel }) })
18340
18140
  }
18341
18141
  );
18342
- return /* @__PURE__ */ jsxs11(
18142
+ return /* @__PURE__ */ jsxs12(
18343
18143
  Select,
18344
18144
  {
18345
18145
  open: isSelectOpen,
@@ -18352,7 +18152,7 @@ function AgentPermissionModeDropdown({
18352
18152
  // The trigger is disabled while loading, so pointer events never reach
18353
18153
  // it. Target the tooltip at a focusable wrapper span (Radix's pattern
18354
18154
  // for disabled triggers) so hover/focus reliably surfaces the hint.
18355
- /* @__PURE__ */ jsxs11(Tooltip2, { children: [
18155
+ /* @__PURE__ */ jsxs12(Tooltip2, { children: [
18356
18156
  /* @__PURE__ */ jsx23(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ jsx23("span", { className: "inline-flex", tabIndex: 0, children: selectTrigger }) }),
18357
18157
  /* @__PURE__ */ jsx23(TooltipContent2, { side: "top", children: labels.loadingOptions })
18358
18158
  ] })
@@ -18375,7 +18175,7 @@ function AgentPermissionModeDropdown({
18375
18175
  disabled: selectDisabled,
18376
18176
  className: cn2(AgentGUINode_styles_default.composerMenuItem, "group/composer-option"),
18377
18177
  onPointerDown: (event) => handleSelectedItemPointerDown(event, option.value),
18378
- children: /* @__PURE__ */ jsxs11("span", { className: "flex min-w-0 items-center gap-1.5", children: [
18178
+ children: /* @__PURE__ */ jsxs12("span", { className: "flex min-w-0 items-center gap-1.5", children: [
18379
18179
  /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate", children: option.label }),
18380
18180
  option.description ? /* @__PURE__ */ jsx23(
18381
18181
  ComposerOptionInfoTooltip,
@@ -18471,7 +18271,7 @@ function ComposerOptionInfoTooltip({
18471
18271
  if (!tooltipsEnabled) {
18472
18272
  return trigger;
18473
18273
  }
18474
- return /* @__PURE__ */ jsxs11(Tooltip2, { children: [
18274
+ return /* @__PURE__ */ jsxs12(Tooltip2, { children: [
18475
18275
  /* @__PURE__ */ jsx23(TooltipTrigger2, { asChild: true, children: trigger }),
18476
18276
  /* @__PURE__ */ jsx23(TooltipContent2, { side: "right", className: "max-w-[240px] whitespace-normal", children: description })
18477
18277
  ] });
@@ -18514,7 +18314,7 @@ function AgentModelReasoningDropdown({
18514
18314
  onSettingsChange(patch);
18515
18315
  setMenuOpen(false);
18516
18316
  };
18517
- const trigger = /* @__PURE__ */ jsxs11(
18317
+ const trigger = /* @__PURE__ */ jsxs12(
18518
18318
  "button",
18519
18319
  {
18520
18320
  type: "button",
@@ -18527,7 +18327,7 @@ function AgentModelReasoningDropdown({
18527
18327
  "aria-label": `${labels.modelLabel} / ${labels.reasoningLabel}`,
18528
18328
  "data-agent-model-reasoning-trigger": "true",
18529
18329
  children: [
18530
- /* @__PURE__ */ jsxs11("span", { className: "flex min-w-0 flex-1 items-center gap-2 overflow-hidden", children: [
18330
+ /* @__PURE__ */ jsxs12("span", { className: "flex min-w-0 flex-1 items-center gap-2 overflow-hidden", children: [
18531
18331
  menu.speed.show && menu.trigger.isFast ? /* @__PURE__ */ jsx23(
18532
18332
  ZapIcon2,
18533
18333
  {
@@ -18537,7 +18337,7 @@ function AgentModelReasoningDropdown({
18537
18337
  strokeWidth: 2.5
18538
18338
  }
18539
18339
  ) : null,
18540
- menu.trigger.showCombined ? /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate", children: menu.trigger.combinedLabel }) : /* @__PURE__ */ jsxs11(Fragment5, { children: [
18340
+ menu.trigger.showCombined ? /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate", children: menu.trigger.combinedLabel }) : /* @__PURE__ */ jsxs12(Fragment5, { children: [
18541
18341
  /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate", children: menu.trigger.modelLabel }),
18542
18342
  /* @__PURE__ */ jsx23("span", { className: "shrink-0", children: menu.trigger.reasoningLabel })
18543
18343
  ] })
@@ -18549,18 +18349,18 @@ function AgentModelReasoningDropdown({
18549
18349
  if (previewMode) {
18550
18350
  return trigger;
18551
18351
  }
18552
- return /* @__PURE__ */ jsxs11(DropdownMenu2, { open: menuOpen, onOpenChange: setMenuOpen, children: [
18352
+ return /* @__PURE__ */ jsxs12(DropdownMenu3, { open: menuOpen, onOpenChange: setMenuOpen, children: [
18553
18353
  isModelLoading ? (
18554
18354
  // The trigger is disabled while loading, so pointer events never reach
18555
18355
  // it. Target the tooltip at a focusable wrapper span (Radix's pattern
18556
18356
  // for disabled triggers) so hover/focus reliably surfaces the hint.
18557
- /* @__PURE__ */ jsxs11(Tooltip2, { children: [
18558
- /* @__PURE__ */ jsx23(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ jsx23("span", { className: "inline-flex", tabIndex: 0, children: /* @__PURE__ */ jsx23(DropdownMenuTrigger2, { asChild: true, disabled: menuDisabled, children: trigger }) }) }),
18357
+ /* @__PURE__ */ jsxs12(Tooltip2, { children: [
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 }) }) }),
18559
18359
  /* @__PURE__ */ jsx23(TooltipContent2, { side: "top", children: labels.loadingOptions })
18560
18360
  ] })
18561
- ) : /* @__PURE__ */ jsx23(DropdownMenuTrigger2, { asChild: true, disabled: menuDisabled, children: trigger }),
18562
- /* @__PURE__ */ jsxs11(
18563
- DropdownMenuContent2,
18361
+ ) : /* @__PURE__ */ jsx23(DropdownMenuTrigger3, { asChild: true, disabled: menuDisabled, children: trigger }),
18362
+ /* @__PURE__ */ jsxs12(
18363
+ DropdownMenuContent3,
18564
18364
  {
18565
18365
  align: "end",
18566
18366
  side: "top",
@@ -18572,10 +18372,10 @@ function AgentModelReasoningDropdown({
18572
18372
  ),
18573
18373
  "data-agent-composer-settings-layout": "model-primary",
18574
18374
  children: [
18575
- menu.model.show ? /* @__PURE__ */ jsxs11(Fragment5, { children: [
18576
- /* @__PURE__ */ jsx23(DropdownMenuLabel2, { children: labels.modelSelectionLabel }),
18577
- menu.model.groups.length > 0 ? menu.model.groups.map((group, index) => /* @__PURE__ */ jsxs11(Fragment4, { children: [
18578
- group.label !== null ? /* @__PURE__ */ jsx23(DropdownMenuLabel2, { className: "text-xs text-[var(--agent-gui-text-tertiary)]", children: group.label }) : null,
18375
+ menu.model.show ? /* @__PURE__ */ jsxs12(Fragment5, { children: [
18376
+ /* @__PURE__ */ jsx23(DropdownMenuLabel, { children: labels.modelSelectionLabel }),
18377
+ menu.model.groups.length > 0 ? menu.model.groups.map((group, index) => /* @__PURE__ */ jsxs12(Fragment4, { children: [
18378
+ group.label !== null ? /* @__PURE__ */ jsx23(DropdownMenuLabel, { className: "text-xs text-[var(--agent-gui-text-tertiary)]", children: group.label }) : null,
18579
18379
  /* @__PURE__ */ jsx23(
18580
18380
  ComposerMenuOptionItems,
18581
18381
  {
@@ -18597,10 +18397,10 @@ function AgentModelReasoningDropdown({
18597
18397
  }
18598
18398
  )
18599
18399
  ] }) : null,
18600
- menu.model.show && (menu.reasoning.show || menu.speed.show) ? /* @__PURE__ */ jsx23(DropdownMenuSeparator2, {}) : null,
18601
- menu.reasoning.show ? /* @__PURE__ */ jsxs11(DropdownMenuSub2, { children: [
18602
- /* @__PURE__ */ jsxs11(
18603
- DropdownMenuSubTrigger2,
18400
+ menu.model.show && (menu.reasoning.show || menu.speed.show) ? /* @__PURE__ */ jsx23(DropdownMenuSeparator, {}) : null,
18401
+ menu.reasoning.show ? /* @__PURE__ */ jsxs12(DropdownMenuSub, { children: [
18402
+ /* @__PURE__ */ jsxs12(
18403
+ DropdownMenuSubTrigger,
18604
18404
  {
18605
18405
  className: cn2(AgentGUINode_styles_default.composerMenuItem, "[&>svg]:!ml-0.5"),
18606
18406
  "data-agent-reasoning-submenu-trigger": "true",
@@ -18611,7 +18411,7 @@ function AgentModelReasoningDropdown({
18611
18411
  }
18612
18412
  ),
18613
18413
  /* @__PURE__ */ jsx23(
18614
- DropdownMenuSubContent2,
18414
+ DropdownMenuSubContent,
18615
18415
  {
18616
18416
  className: cn2(AgentGUINode_styles_default.composerMenuContent, "min-w-[132px]"),
18617
18417
  "data-agent-composer-settings-layout": "model-submenu",
@@ -18627,9 +18427,9 @@ function AgentModelReasoningDropdown({
18627
18427
  }
18628
18428
  )
18629
18429
  ] }) : null,
18630
- menu.speed.show ? /* @__PURE__ */ jsxs11(DropdownMenuSub2, { children: [
18631
- /* @__PURE__ */ jsxs11(
18632
- DropdownMenuSubTrigger2,
18430
+ menu.speed.show ? /* @__PURE__ */ jsxs12(DropdownMenuSub, { children: [
18431
+ /* @__PURE__ */ jsxs12(
18432
+ DropdownMenuSubTrigger,
18633
18433
  {
18634
18434
  className: cn2(AgentGUINode_styles_default.composerMenuItem, "[&>svg]:!ml-0.5"),
18635
18435
  "data-agent-speed-submenu-trigger": "true",
@@ -18640,7 +18440,7 @@ function AgentModelReasoningDropdown({
18640
18440
  }
18641
18441
  ),
18642
18442
  /* @__PURE__ */ jsx23(
18643
- DropdownMenuSubContent2,
18443
+ DropdownMenuSubContent,
18644
18444
  {
18645
18445
  className: cn2(AgentGUINode_styles_default.composerMenuContent, "w-[200px]"),
18646
18446
  "data-agent-composer-settings-layout": "model-submenu",
@@ -18674,7 +18474,7 @@ function ComposerMenuOptionItems({
18674
18474
  const showInlineDescription = descriptionPresentation === "inline" && hasDescription;
18675
18475
  const showModelTooltip = descriptionPresentation === "model-tooltip";
18676
18476
  const showTooltipDescription = descriptionPresentation === "tooltip" && hasDescription;
18677
- const item = /* @__PURE__ */ jsxs11(
18477
+ const item = /* @__PURE__ */ jsxs12(
18678
18478
  DropdownMenuItem2,
18679
18479
  {
18680
18480
  className: cn2(
@@ -18694,7 +18494,7 @@ function ComposerMenuOptionItems({
18694
18494
  onSelect(option.value);
18695
18495
  },
18696
18496
  children: [
18697
- showModelTooltip ? /* @__PURE__ */ jsxs11("span", { className: "flex min-w-0 flex-1 items-baseline gap-2 overflow-hidden", children: [
18497
+ showModelTooltip ? /* @__PURE__ */ jsxs12("span", { className: "flex min-w-0 flex-1 items-baseline gap-2 overflow-hidden", children: [
18698
18498
  /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate leading-[1.15]", children: option.label }),
18699
18499
  option.summary && option.summary.length > 0 ? /* @__PURE__ */ jsx23("span", { className: "flex min-w-0 shrink-0 items-baseline gap-1.5 overflow-hidden text-[var(--agent-gui-text-tertiary)]", children: option.summary.map((summary) => /* @__PURE__ */ jsx23(
18700
18500
  "span",
@@ -18704,7 +18504,7 @@ function ComposerMenuOptionItems({
18704
18504
  },
18705
18505
  summary
18706
18506
  )) }) : null
18707
- ] }) : /* @__PURE__ */ jsxs11(
18507
+ ] }) : /* @__PURE__ */ jsxs12(
18708
18508
  "span",
18709
18509
  {
18710
18510
  className: cn2(
@@ -18712,7 +18512,7 @@ function ComposerMenuOptionItems({
18712
18512
  showInlineDescription ? "gap-0.5" : "gap-0"
18713
18513
  ),
18714
18514
  children: [
18715
- /* @__PURE__ */ jsxs11("span", { className: "flex min-w-0 items-center gap-1.5", children: [
18515
+ /* @__PURE__ */ jsxs12("span", { className: "flex min-w-0 items-center gap-1.5", children: [
18716
18516
  /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate leading-[1.15]", children: option.label }),
18717
18517
  showTooltipDescription && option.description ? /* @__PURE__ */ jsx23(
18718
18518
  ComposerOptionInfoTooltip,
@@ -18759,11 +18559,11 @@ function ComposerModelOptionTooltip({
18759
18559
  if (!tooltipsEnabled || !option.tooltip) {
18760
18560
  return children;
18761
18561
  }
18762
- return /* @__PURE__ */ jsxs11(Tooltip2, { children: [
18562
+ return /* @__PURE__ */ jsxs12(Tooltip2, { children: [
18763
18563
  /* @__PURE__ */ jsx23(TooltipTrigger2, { asChild: true, children: cloneElement(children, {
18764
18564
  "data-agent-model-option-tooltip-trigger": "true"
18765
18565
  }) }),
18766
- /* @__PURE__ */ jsxs11(
18566
+ /* @__PURE__ */ jsxs12(
18767
18567
  TooltipContent2,
18768
18568
  {
18769
18569
  side: "right",
@@ -19071,7 +18871,7 @@ function fileToBase64(file) {
19071
18871
  }
19072
18872
 
19073
18873
  // agent-gui/agentGuiNode/agentRichText/AgentRichTextEditor.tsx
19074
- import { jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
18874
+ import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
19075
18875
  function buildWorkspaceFileMentionDropContent(entries, options = {}) {
19076
18876
  return entries.flatMap((entry, index) => [
19077
18877
  ...index === 0 && options.prefixCaretAnchor ? [
@@ -20006,7 +19806,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
20006
19806
  editor.commands.setTextSelection(editor.state.doc.content.size);
20007
19807
  lastEmittedPromptRef.current = value;
20008
19808
  }, [availableCapabilities, availableSkills, editor, value]);
20009
- return /* @__PURE__ */ jsxs12("div", { className: "relative min-w-0", onKeyDownCapture: handleKeyDownCapture, children: [
19809
+ return /* @__PURE__ */ jsxs13("div", { className: "relative min-w-0", onKeyDownCapture: handleKeyDownCapture, children: [
20010
19810
  editor ? /* @__PURE__ */ jsx24(EditorContent, { editor }) : /* @__PURE__ */ jsx24(
20011
19811
  "div",
20012
19812
  {
@@ -20021,7 +19821,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
20021
19821
  }
20022
19822
  ),
20023
19823
  contextMenu ? createPortal(
20024
- /* @__PURE__ */ jsxs12(
19824
+ /* @__PURE__ */ jsxs13(
20025
19825
  "div",
20026
19826
  {
20027
19827
  role: "menu",
@@ -20106,7 +19906,7 @@ function AgentRichTextContextMenuButton({
20106
19906
 
20107
19907
  // agent-gui/agentGuiNode/AgentSlashStatusPanel.tsx
20108
19908
  import { Fragment as Fragment6 } from "react";
20109
- import { Fragment as Fragment7, jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
19909
+ import { Fragment as Fragment7, jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
20110
19910
  function formatSlashStatusTokenCount(value) {
20111
19911
  if (typeof value !== "number" || !Number.isFinite(value)) {
20112
19912
  return "";
@@ -20140,14 +19940,14 @@ function AgentSlashStatusPanel({
20140
19940
  const agentSessionId = status?.agentSessionId?.trim() ?? "";
20141
19941
  const baseUrl = status?.baseUrl?.trim() ?? "";
20142
19942
  const showSessionDetails = agentSessionId.length > 0;
20143
- return /* @__PURE__ */ jsxs13(
19943
+ return /* @__PURE__ */ jsxs14(
20144
19944
  "section",
20145
19945
  {
20146
19946
  className: "agent-gui-node__slash-status-panel",
20147
19947
  "data-testid": "agent-gui-slash-status-panel",
20148
19948
  role: "status",
20149
19949
  children: [
20150
- /* @__PURE__ */ jsxs13("div", { className: "mb-2 flex items-center justify-between gap-2", children: [
19950
+ /* @__PURE__ */ jsxs14("div", { className: "mb-2 flex items-center justify-between gap-2", children: [
20151
19951
  /* @__PURE__ */ jsx25("h3", { className: "truncate text-[11px] font-semibold leading-4", children: labels.slashStatusTitle }),
20152
19952
  /* @__PURE__ */ jsx25(
20153
19953
  "button",
@@ -20159,32 +19959,32 @@ function AgentSlashStatusPanel({
20159
19959
  }
20160
19960
  )
20161
19961
  ] }),
20162
- /* @__PURE__ */ jsxs13("dl", { className: "grid grid-cols-[max-content_minmax(0,1fr)] gap-x-3 gap-y-1 font-mono text-[11px] leading-4", children: [
20163
- showSessionDetails ? /* @__PURE__ */ jsxs13(Fragment7, { children: [
20164
- /* @__PURE__ */ jsxs13("dt", { className: "text-muted-foreground", children: [
19962
+ /* @__PURE__ */ jsxs14("dl", { className: "grid grid-cols-[max-content_minmax(0,1fr)] gap-x-3 gap-y-1 font-mono text-[11px] leading-4", children: [
19963
+ showSessionDetails ? /* @__PURE__ */ jsxs14(Fragment7, { children: [
19964
+ /* @__PURE__ */ jsxs14("dt", { className: "text-muted-foreground", children: [
20165
19965
  labels.slashStatusSession,
20166
19966
  ":"
20167
19967
  ] }),
20168
19968
  /* @__PURE__ */ jsx25("dd", { className: "min-w-0 truncate", children: agentSessionId }),
20169
- baseUrl ? /* @__PURE__ */ jsxs13(Fragment7, { children: [
20170
- /* @__PURE__ */ jsxs13("dt", { className: "text-muted-foreground", children: [
19969
+ baseUrl ? /* @__PURE__ */ jsxs14(Fragment7, { children: [
19970
+ /* @__PURE__ */ jsxs14("dt", { className: "text-muted-foreground", children: [
20171
19971
  labels.slashStatusBaseUrl,
20172
19972
  ":"
20173
19973
  ] }),
20174
19974
  /* @__PURE__ */ jsx25("dd", { className: "min-w-0 truncate", children: baseUrl })
20175
19975
  ] }) : null,
20176
- /* @__PURE__ */ jsxs13("dt", { className: "text-muted-foreground", children: [
19976
+ /* @__PURE__ */ jsxs14("dt", { className: "text-muted-foreground", children: [
20177
19977
  labels.slashStatusContext,
20178
19978
  ":"
20179
19979
  ] }),
20180
19980
  /* @__PURE__ */ jsx25("dd", { className: "min-w-0", children: slashStatusContextText(status, labels) })
20181
19981
  ] }) : null,
20182
- limits.map((limit) => /* @__PURE__ */ jsxs13(Fragment6, { children: [
20183
- /* @__PURE__ */ jsxs13("dt", { className: "text-muted-foreground", children: [
19982
+ limits.map((limit) => /* @__PURE__ */ jsxs14(Fragment6, { children: [
19983
+ /* @__PURE__ */ jsxs14("dt", { className: "text-muted-foreground", children: [
20184
19984
  limit.label,
20185
19985
  ":"
20186
19986
  ] }),
20187
- /* @__PURE__ */ jsx25("dd", { className: "min-w-0", children: /* @__PURE__ */ jsxs13("span", { className: "agent-gui-node__slash-status-limit", children: [
19987
+ /* @__PURE__ */ jsx25("dd", { className: "min-w-0", children: /* @__PURE__ */ jsxs14("span", { className: "agent-gui-node__slash-status-limit", children: [
20188
19988
  typeof limit.percentRemaining === "number" && Number.isFinite(limit.percentRemaining) ? /* @__PURE__ */ jsx25(
20189
19989
  "span",
20190
19990
  {
@@ -20204,9 +20004,9 @@ function AgentSlashStatusPanel({
20204
20004
  )
20205
20005
  }
20206
20006
  ) : null,
20207
- /* @__PURE__ */ jsxs13("span", { className: "agent-gui-node__slash-status-limit-value", children: [
20007
+ /* @__PURE__ */ jsxs14("span", { className: "agent-gui-node__slash-status-limit-value", children: [
20208
20008
  limit.value,
20209
- limit.reset ? /* @__PURE__ */ jsxs13("span", { className: "text-muted-foreground", children: [
20009
+ limit.reset ? /* @__PURE__ */ jsxs14("span", { className: "text-muted-foreground", children: [
20210
20010
  " ",
20211
20011
  "(",
20212
20012
  limit.reset,
@@ -20215,8 +20015,8 @@ function AgentSlashStatusPanel({
20215
20015
  ] })
20216
20016
  ] }) })
20217
20017
  ] }, limit.id)),
20218
- limits.length === 0 && status?.limitsLoading ? /* @__PURE__ */ jsxs13(Fragment7, { children: [
20219
- /* @__PURE__ */ jsxs13("dt", { className: "text-muted-foreground", children: [
20018
+ limits.length === 0 && status?.limitsLoading ? /* @__PURE__ */ jsxs14(Fragment7, { children: [
20019
+ /* @__PURE__ */ jsxs14("dt", { className: "text-muted-foreground", children: [
20220
20020
  labels.slashStatusLimits,
20221
20021
  ":"
20222
20022
  ] }),
@@ -20324,7 +20124,7 @@ var AgentReviewBranchController = class {
20324
20124
  };
20325
20125
 
20326
20126
  // agent-gui/agentGuiNode/AgentReviewPickerPanel.tsx
20327
- import { jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
20127
+ import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
20328
20128
  var reviewMenuStyles = {
20329
20129
  panel: "agent-gui-node__slash-status-panel nodrag flex max-h-[280px] flex-col gap-1 overflow-hidden [-webkit-app-region:no-drag]",
20330
20130
  search: "nodrag h-8 w-full shrink-0 rounded-[6px] border-0 bg-transparent px-2.5 text-[11px] leading-4 text-[var(--text-primary)] placeholder:text-[var(--text-secondary)] focus-visible:outline-none [-webkit-app-region:no-drag]",
@@ -20520,7 +20320,7 @@ function AgentReviewPickerPanel({
20520
20320
  },
20521
20321
  [entries, safeHighlightedIndex, stage, query, onClose, goBackToRoot]
20522
20322
  );
20523
- return /* @__PURE__ */ jsxs14(
20323
+ return /* @__PURE__ */ jsxs15(
20524
20324
  "section",
20525
20325
  {
20526
20326
  className: reviewMenuStyles.panel,
@@ -20572,7 +20372,7 @@ function AgentReviewPickerPanel({
20572
20372
  entry.onSelect();
20573
20373
  }
20574
20374
  },
20575
- children: /* @__PURE__ */ jsxs14("span", { className: reviewMenuStyles.copy, children: [
20375
+ children: /* @__PURE__ */ jsxs15("span", { className: reviewMenuStyles.copy, children: [
20576
20376
  /* @__PURE__ */ jsx26("span", { className: reviewMenuStyles.name, children: entry.label }),
20577
20377
  entry.description ? /* @__PURE__ */ jsx26("span", { className: reviewMenuStyles.description, children: entry.description }) : null
20578
20378
  ] })
@@ -20859,7 +20659,7 @@ var bold_lined_default = "./@-bold-lined-BLLFKBFI.svg";
20859
20659
  var handoff_lined_default = "./handoff-lined-4WQUBVG3.svg";
20860
20660
 
20861
20661
  // agent-gui/agentGuiNode/AgentComposer.tsx
20862
- import { jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
20662
+ import { jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
20863
20663
  var USAGE_POPOVER_HOVER_DELAY_MS = 120;
20864
20664
  var HANDOFF_LOTTIE_PLAYER_SCRIPT_SRC = "https://unpkg.com/@lottiefiles/dotlottie-wc@0.9.14/dist/dotlottie-wc.js";
20865
20665
  var HANDOFF_LOTTIE_ANIMATION_SRC = "https://lottie.host/03d75946-52e5-4ccf-97df-174919a13ced/Av6piqVmPa.lottie";
@@ -21015,7 +20815,7 @@ function AgentUsageChip({
21015
20815
  if (!tooltipsEnabled) {
21016
20816
  return trigger;
21017
20817
  }
21018
- return /* @__PURE__ */ jsxs15(
20818
+ return /* @__PURE__ */ jsxs16(
21019
20819
  Popover,
21020
20820
  {
21021
20821
  open: usagePopoverOpen,
@@ -21033,7 +20833,7 @@ function AgentUsageChip({
21033
20833
  onOpenAutoFocus: (event) => event.preventDefault(),
21034
20834
  onPointerEnter: openUsagePopover,
21035
20835
  onPointerLeave: scheduleUsagePopoverClose,
21036
- children: /* @__PURE__ */ jsxs15("div", { className: "flex min-w-0 flex-col gap-3", children: [
20836
+ children: /* @__PURE__ */ jsxs16("div", { className: "flex min-w-0 flex-col gap-3", children: [
21037
20837
  /* @__PURE__ */ jsx28("span", { className: "text-[13px] font-semibold leading-4", children: labels.usagePopoverTitle }),
21038
20838
  showTokens ? /* @__PURE__ */ jsx28(
21039
20839
  AgentUsageMeter,
@@ -21208,7 +21008,7 @@ function AgentComposerHandoffIcon({
21208
21008
  };
21209
21009
  }, []);
21210
21010
  const shouldShowAnimation = !disabled && isPlaying && isLottieReady;
21211
- return /* @__PURE__ */ jsxs15(
21011
+ return /* @__PURE__ */ jsxs16(
21212
21012
  "span",
21213
21013
  {
21214
21014
  "aria-hidden": "true",
@@ -22942,7 +22742,7 @@ function AgentComposer({
22942
22742
  },
22943
22743
  [onSubmitInteractivePrompt]
22944
22744
  );
22945
- const composerActionButton = shouldShowStopButton ? /* @__PURE__ */ jsxs15(
22745
+ const composerActionButton = shouldShowStopButton ? /* @__PURE__ */ jsxs16(
22946
22746
  "button",
22947
22747
  {
22948
22748
  type: "button",
@@ -23002,7 +22802,7 @@ function AgentComposer({
23002
22802
  "data-rotating": promptTips.length > 1 ? "true" : void 0,
23003
22803
  "data-testid": "agent-gui-prompt-tip",
23004
22804
  style: promptTipStyle,
23005
- children: /* @__PURE__ */ jsx28("span", { className: AgentGUINode_styles_default.composerPromptTipTrack, children: rotatingPromptTips.map((tip, index) => /* @__PURE__ */ jsxs15(
22805
+ children: /* @__PURE__ */ jsx28("span", { className: AgentGUINode_styles_default.composerPromptTipTrack, children: rotatingPromptTips.map((tip, index) => /* @__PURE__ */ jsxs16(
23006
22806
  "span",
23007
22807
  {
23008
22808
  className: AgentGUINode_styles_default.composerPromptTipItem,
@@ -23010,7 +22810,7 @@ function AgentComposer({
23010
22810
  children: [
23011
22811
  /* @__PURE__ */ jsx28("span", { className: AgentGUINode_styles_default.composerPromptTipPrefix, children: labels.promptTipsPrefix }),
23012
22812
  /* @__PURE__ */ jsx28("span", { className: AgentGUINode_styles_default.composerPromptTipLabel, children: tip.label }),
23013
- /* @__PURE__ */ jsxs15("span", { className: AgentGUINode_styles_default.composerPromptTipText, children: [
22813
+ /* @__PURE__ */ jsxs16("span", { className: AgentGUINode_styles_default.composerPromptTipText, children: [
23014
22814
  " \xB7 ",
23015
22815
  tip.prompt
23016
22816
  ] })
@@ -23021,7 +22821,7 @@ function AgentComposer({
23021
22821
  },
23022
22822
  activePromptTip.id
23023
22823
  ) : null;
23024
- return /* @__PURE__ */ jsxs15(
22824
+ return /* @__PURE__ */ jsxs16(
23025
22825
  "form",
23026
22826
  {
23027
22827
  ref: composerRef,
@@ -23102,7 +22902,7 @@ function AgentComposer({
23102
22902
  onProjectMissingChange: setIsSelectedProjectMissing
23103
22903
  }
23104
22904
  ) : null,
23105
- /* @__PURE__ */ jsxs15(
22905
+ /* @__PURE__ */ jsxs16(
23106
22906
  "div",
23107
22907
  {
23108
22908
  className: cn(
@@ -23133,7 +22933,7 @@ function AgentComposer({
23133
22933
  description: labels.projectMissingDescription
23134
22934
  }
23135
22935
  ) : null,
23136
- /* @__PURE__ */ jsxs15(
22936
+ /* @__PURE__ */ jsxs16(
23137
22937
  "div",
23138
22938
  {
23139
22939
  ref: inputShellRef,
@@ -23143,14 +22943,14 @@ function AgentComposer({
23143
22943
  title: inputDisabled && disabledReasonText ? disabledReasonText : void 0,
23144
22944
  style: inputShellStyle,
23145
22945
  children: [
23146
- /* @__PURE__ */ jsxs15(
22946
+ /* @__PURE__ */ jsxs16(
23147
22947
  Popover,
23148
22948
  {
23149
22949
  open: showFileMentionPalette,
23150
22950
  onOpenChange: setIsPaletteOpen,
23151
22951
  modal: false,
23152
22952
  children: [
23153
- /* @__PURE__ */ jsx28(PopoverAnchor, { asChild: true, children: /* @__PURE__ */ jsxs15(
22953
+ /* @__PURE__ */ jsx28(PopoverAnchor, { asChild: true, children: /* @__PURE__ */ jsxs16(
23154
22954
  "div",
23155
22955
  {
23156
22956
  ref: promptInputAreaRef,
@@ -23182,7 +22982,7 @@ function AgentComposer({
23182
22982
  {
23183
22983
  className: "mb-2 flex max-w-[520px] flex-wrap gap-2",
23184
22984
  "data-testid": "agent-gui-composer-file-drafts",
23185
- children: visibleDraftFiles.map((file) => /* @__PURE__ */ jsxs15(
22985
+ children: visibleDraftFiles.map((file) => /* @__PURE__ */ jsxs16(
23186
22986
  "div",
23187
22987
  {
23188
22988
  className: cn(
@@ -23227,7 +23027,7 @@ function AgentComposer({
23227
23027
  ))
23228
23028
  }
23229
23029
  ) : null,
23230
- /* @__PURE__ */ jsxs15(
23030
+ /* @__PURE__ */ jsxs16(
23231
23031
  "div",
23232
23032
  {
23233
23033
  className: cn(
@@ -23396,11 +23196,11 @@ function AgentComposer({
23396
23196
  ]
23397
23197
  }
23398
23198
  ),
23399
- /* @__PURE__ */ jsxs15("div", { className: AgentGUINode_styles_default.composerFooter, children: [
23400
- /* @__PURE__ */ jsxs15("div", { className: composerStyles.footerGroup, children: [
23401
- /* @__PURE__ */ jsxs15("div", { className: "inline-flex shrink-0 items-center gap-1", children: [
23402
- previewMode ? /* @__PURE__ */ jsx28(TooltipProvider, { delayDuration: 120, children: /* @__PURE__ */ jsxs15(Tooltip, { children: [
23403
- /* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
23199
+ /* @__PURE__ */ jsxs16("div", { className: AgentGUINode_styles_default.composerFooter, children: [
23200
+ /* @__PURE__ */ jsxs16("div", { className: composerStyles.footerGroup, children: [
23201
+ /* @__PURE__ */ jsxs16("div", { className: "inline-flex shrink-0 items-center gap-1", children: [
23202
+ previewMode ? /* @__PURE__ */ jsx28(TooltipProvider2, { delayDuration: 120, children: /* @__PURE__ */ jsxs16(Tooltip3, { children: [
23203
+ /* @__PURE__ */ jsx28(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx28(
23404
23204
  "button",
23405
23205
  {
23406
23206
  type: "button",
@@ -23419,8 +23219,8 @@ function AgentComposer({
23419
23219
  )
23420
23220
  }
23421
23221
  ) }),
23422
- /* @__PURE__ */ jsx28(TooltipContent, { side: "top", children: labels.addContent })
23423
- ] }) }) : /* @__PURE__ */ jsx28(TooltipProvider, { delayDuration: 120, children: /* @__PURE__ */ jsxs15(Tooltip, { children: [
23222
+ /* @__PURE__ */ jsx28(TooltipContent3, { side: "top", children: labels.addContent })
23223
+ ] }) }) : /* @__PURE__ */ jsx28(TooltipProvider2, { delayDuration: 120, children: /* @__PURE__ */ jsxs16(Tooltip3, { children: [
23424
23224
  /* @__PURE__ */ jsx28(
23425
23225
  Select2,
23426
23226
  {
@@ -23437,7 +23237,7 @@ function AgentComposer({
23437
23237
  void handleWorkspaceReferencePicker();
23438
23238
  }
23439
23239
  },
23440
- children: /* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
23240
+ children: /* @__PURE__ */ jsx28(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx28(
23441
23241
  SelectTrigger2,
23442
23242
  {
23443
23243
  size: "sm",
@@ -23459,10 +23259,10 @@ function AgentComposer({
23459
23259
  ) })
23460
23260
  }
23461
23261
  ),
23462
- /* @__PURE__ */ jsx28(TooltipContent, { side: "top", children: labels.addContent })
23262
+ /* @__PURE__ */ jsx28(TooltipContent3, { side: "top", children: labels.addContent })
23463
23263
  ] }) }),
23464
- /* @__PURE__ */ jsx28(TooltipProvider, { delayDuration: 120, children: /* @__PURE__ */ jsxs15(Tooltip, { children: [
23465
- /* @__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(
23466
23266
  "button",
23467
23267
  {
23468
23268
  type: "button",
@@ -23494,10 +23294,10 @@ function AgentComposer({
23494
23294
  )
23495
23295
  }
23496
23296
  ) }),
23497
- /* @__PURE__ */ jsx28(TooltipContent, { side: "top", children: labels.mentionPalette })
23297
+ /* @__PURE__ */ jsx28(TooltipContent3, { side: "top", children: labels.mentionPalette })
23498
23298
  ] }) })
23499
23299
  ] }),
23500
- showHandoffSelect ? /* @__PURE__ */ jsxs15(
23300
+ showHandoffSelect ? /* @__PURE__ */ jsxs16(
23501
23301
  Select2,
23502
23302
  {
23503
23303
  value: HANDOFF_SELECT_IDLE_VALUE,
@@ -23536,7 +23336,7 @@ function AgentComposer({
23536
23336
  AgentGUINode_styles_default.composerHandoffTrigger,
23537
23337
  "w-auto max-w-[180px] [&>svg:last-child]:hidden"
23538
23338
  ),
23539
- children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5", children: [
23339
+ children: /* @__PURE__ */ jsxs16("span", { className: "flex min-w-0 items-center gap-1.5", children: [
23540
23340
  /* @__PURE__ */ jsx28(
23541
23341
  AgentComposerHandoffIcon,
23542
23342
  {
@@ -23564,7 +23364,7 @@ function AgentComposer({
23564
23364
  value: target.targetId,
23565
23365
  className: cn(AgentGUINode_styles_default.composerMenuItem, "gap-2"),
23566
23366
  disabled: target.disabled === true,
23567
- children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5", children: [
23367
+ children: /* @__PURE__ */ jsxs16("span", { className: "flex min-w-0 items-center gap-1.5", children: [
23568
23368
  /* @__PURE__ */ jsx28(
23569
23369
  "img",
23570
23370
  {
@@ -23583,7 +23383,7 @@ function AgentComposer({
23583
23383
  )
23584
23384
  ]
23585
23385
  }
23586
- ) : showProviderSelect && selectedProviderSwitchTarget ? /* @__PURE__ */ jsxs15(
23386
+ ) : showProviderSelect && selectedProviderSwitchTarget ? /* @__PURE__ */ jsxs16(
23587
23387
  Select2,
23588
23388
  {
23589
23389
  value: selectedProviderSwitchTarget.targetId,
@@ -23612,7 +23412,7 @@ function AgentComposer({
23612
23412
  AgentGUINode_styles_default.composerProviderSelect,
23613
23413
  "w-auto max-w-[180px]"
23614
23414
  ),
23615
- children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5", children: [
23415
+ children: /* @__PURE__ */ jsxs16("span", { className: "flex min-w-0 items-center gap-1.5", children: [
23616
23416
  /* @__PURE__ */ jsx28(
23617
23417
  "img",
23618
23418
  {
@@ -23639,7 +23439,7 @@ function AgentComposer({
23639
23439
  value: target.targetId,
23640
23440
  className: cn(AgentGUINode_styles_default.composerMenuItem, "gap-2"),
23641
23441
  disabled: target.disabled === true,
23642
- children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5", children: [
23442
+ children: /* @__PURE__ */ jsxs16("span", { className: "flex min-w-0 items-center gap-1.5", children: [
23643
23443
  /* @__PURE__ */ jsx28(
23644
23444
  "img",
23645
23445
  {
@@ -23673,8 +23473,8 @@ function AgentComposer({
23673
23473
  "disabled:cursor-not-allowed disabled:opacity-60"
23674
23474
  ),
23675
23475
  onClick: () => onSettingsChange({ planMode: false }),
23676
- children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5 overflow-hidden", children: [
23677
- /* @__PURE__ */ jsxs15("span", { className: "relative flex size-3.5 shrink-0 items-center justify-center", children: [
23476
+ children: /* @__PURE__ */ jsxs16("span", { className: "flex min-w-0 items-center gap-1.5 overflow-hidden", children: [
23477
+ /* @__PURE__ */ jsxs16("span", { className: "relative flex size-3.5 shrink-0 items-center justify-center", children: [
23678
23478
  /* @__PURE__ */ jsx28(
23679
23479
  ListChecks2,
23680
23480
  {
@@ -23715,8 +23515,8 @@ function AgentComposer({
23715
23515
  "disabled:cursor-not-allowed disabled:opacity-60"
23716
23516
  ),
23717
23517
  onClick: clearGoalModeBadge,
23718
- children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5 overflow-hidden", children: [
23719
- /* @__PURE__ */ jsxs15("span", { className: "relative flex size-3.5 shrink-0 items-center justify-center", children: [
23518
+ children: /* @__PURE__ */ jsxs16("span", { className: "flex min-w-0 items-center gap-1.5 overflow-hidden", children: [
23519
+ /* @__PURE__ */ jsxs16("span", { className: "relative flex size-3.5 shrink-0 items-center justify-center", children: [
23720
23520
  /* @__PURE__ */ jsx28(
23721
23521
  Target3,
23722
23522
  {
@@ -23744,7 +23544,7 @@ function AgentComposer({
23744
23544
  }
23745
23545
  ) : null
23746
23546
  ] }),
23747
- /* @__PURE__ */ jsxs15("div", { className: composerStyles.footerGroupRight, children: [
23547
+ /* @__PURE__ */ jsxs16("div", { className: composerStyles.footerGroupRight, children: [
23748
23548
  usage && usage.percentUsed !== null ? /* @__PURE__ */ jsx28(
23749
23549
  AgentUsageChip,
23750
23550
  {
@@ -23819,7 +23619,7 @@ function AgentComposer({
23819
23619
  ]
23820
23620
  }
23821
23621
  ),
23822
- showProjectRow ? /* @__PURE__ */ jsxs15(
23622
+ showProjectRow ? /* @__PURE__ */ jsxs16(
23823
23623
  "div",
23824
23624
  {
23825
23625
  className: AgentGUINode_styles_default.composerProjectRow,
@@ -23845,10 +23645,10 @@ function AgentComposer({
23845
23645
  {
23846
23646
  className: AgentGUINode_styles_default.composerPromptTips,
23847
23647
  "data-testid": "agent-gui-prompt-tips",
23848
- children: !previewMode && isPromptTipOverflowing && promptTipNode ? /* @__PURE__ */ jsx28(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs15(Tooltip, { children: [
23849
- /* @__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 }),
23850
23650
  /* @__PURE__ */ jsx28(
23851
- TooltipContent,
23651
+ TooltipContent3,
23852
23652
  {
23853
23653
  align: "end",
23854
23654
  className: AgentGUINode_styles_default.composerPromptTipTooltip,
@@ -23888,7 +23688,7 @@ function AgentComposerDraftImagePreview({
23888
23688
  aspectRatio: String(aspectRatio),
23889
23689
  width: `${previewWidth}px`
23890
23690
  };
23891
- return /* @__PURE__ */ jsxs15(
23691
+ return /* @__PURE__ */ jsxs16(
23892
23692
  "div",
23893
23693
  {
23894
23694
  className: cn(
@@ -24050,9 +23850,9 @@ function SendFilledIcon() {
24050
23850
  }
24051
23851
 
24052
23852
  // agent-gui/agentGuiNode/AgentGUIBottomDockStore.ts
24053
- import { proxy } from "valtio/vanilla";
23853
+ import { proxy as proxy2 } from "valtio/vanilla";
24054
23854
  function createAgentGUIBottomDockStore(initialState) {
24055
- return proxy(initialState);
23855
+ return proxy2(initialState);
24056
23856
  }
24057
23857
  function syncAgentGUIBottomDockStore(store, next) {
24058
23858
  if (agentGUIBottomDockStoreSnapshotsEqual(store, next)) {
@@ -24065,7 +23865,7 @@ function agentGUIBottomDockStoreSnapshotsEqual(current, next) {
24065
23865
  }
24066
23866
 
24067
23867
  // agent-gui/agentGuiNode/AgentConversationListSkeleton.tsx
24068
- import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
23868
+ import { jsx as jsx29, jsxs as jsxs17 } from "react/jsx-runtime";
24069
23869
  var SKELETON_ROWS = [
24070
23870
  { id: "first", size: "long" },
24071
23871
  { id: "second", size: "medium" },
@@ -24084,7 +23884,7 @@ function AgentConversationListSkeleton({
24084
23884
  role: "status",
24085
23885
  "aria-label": label,
24086
23886
  "data-testid": "agent-gui-conversation-list-loading-skeleton",
24087
- children: SKELETON_ROWS.map((row) => /* @__PURE__ */ jsxs16(
23887
+ children: SKELETON_ROWS.map((row) => /* @__PURE__ */ jsxs17(
24088
23888
  "div",
24089
23889
  {
24090
23890
  className: "agent-gui-node__conversation-list-skeleton-row",
@@ -24103,6 +23903,7 @@ function AgentConversationListSkeleton({
24103
23903
  }
24104
23904
 
24105
23905
  // agent-gui/agentGuiNode/agentGuiNodeViewConversation.tsx
23906
+ import { Spinner as Spinner2 } from "@tutti-os/ui-system";
24106
23907
  import { AskLinedIcon } from "@tutti-os/ui-system/icons";
24107
23908
  import { jsx as jsx30 } from "react/jsx-runtime";
24108
23909
  function ConversationMeta({
@@ -24337,7 +24138,7 @@ function formatConversationRelativeTime(updatedAtUnixMs, nowMs, labels) {
24337
24138
  function LoadingGlyph() {
24338
24139
  "use memo";
24339
24140
  return /* @__PURE__ */ jsx30(
24340
- Spinner,
24141
+ Spinner2,
24341
24142
  {
24342
24143
  className: AgentGUINode_styles_default.conversationStatusGlyph,
24343
24144
  size: 14,
@@ -24370,11 +24171,12 @@ function AttentionGlyph() {
24370
24171
 
24371
24172
  // agent-gui/agentGuiNode/AgentGUINodeView.tsx
24372
24173
  import { createRichTextMentionHref as createRichTextMentionHref2 } from "@tutti-os/ui-rich-text/core";
24373
- import { Fragment as Fragment9, jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
24174
+ import { Fragment as Fragment9, jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
24374
24175
  var AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX = 24;
24375
24176
  var AGENT_GUI_TOP_HISTORY_PREFETCH_THRESHOLD_PX = 240;
24376
24177
  var AGENT_GUI_TOP_MASK_SCROLL_EPSILON_PX = 1;
24377
24178
  var AGENT_GUI_CONVERSATION_RAIL_SECTION_PAGE_SIZE = 5;
24179
+ var AGENT_GUI_CONVERSATION_RAIL_LOADING_SKELETON_DELAY_MS = 300;
24378
24180
  var AGENT_GUI_CONVERSATION_RAIL_PROJECTION_PROVIDER = "codex";
24379
24181
  var AGENT_GUI_TIMELINE_SCROLL_AREA_CONTENT_STYLE = {
24380
24182
  width: "100%",
@@ -24417,6 +24219,22 @@ var fallbackWorkspaceFileReferenceCopy = {
24417
24219
  function agentGuiPerfNowMs() {
24418
24220
  return globalThis.performance?.now?.() ?? Date.now();
24419
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
+ }
24420
24238
  function roundAgentGuiPerfMs(value) {
24421
24239
  return Math.round(value * 100) / 100;
24422
24240
  }
@@ -24625,6 +24443,8 @@ function handoffProjectPathForConversation(conversation) {
24625
24443
  }
24626
24444
  function AgentGUINodeView({
24627
24445
  viewModel,
24446
+ renderSidebarFooter,
24447
+ renderProviderRailEmpty,
24628
24448
  onLinkAction,
24629
24449
  onHandoffConversation,
24630
24450
  capabilityMenuState,
@@ -24821,6 +24641,9 @@ function AgentGUINodeView({
24821
24641
  );
24822
24642
  const openProjectFiles = useOptionalStableEventCallback(onLinkAction);
24823
24643
  const detailComposerFocusRequestSequence = localComposerFocusRequestSequence === 0 ? composerFocusRequestSequence : (composerFocusRequestSequence ?? 0) + localComposerFocusRequestSequence;
24644
+ const requestComposerFocus = useCallback10(() => {
24645
+ setLocalComposerFocusRequestSequence((current) => current + 1);
24646
+ }, []);
24824
24647
  const requestCreateConversation = useCallback10(
24825
24648
  (options) => {
24826
24649
  if (previewMode) {
@@ -24837,11 +24660,12 @@ function AgentGUINodeView({
24837
24660
  } else {
24838
24661
  createConversationAction({ source: source ?? "rail_toolbar" });
24839
24662
  }
24840
- setLocalComposerFocusRequestSequence((current) => current + 1);
24663
+ requestComposerFocus();
24841
24664
  },
24842
24665
  [
24843
24666
  createConversationAction,
24844
24667
  previewMode,
24668
+ requestComposerFocus,
24845
24669
  viewModel.composerSettings.selectedProjectPath
24846
24670
  ]
24847
24671
  );
@@ -24992,11 +24816,11 @@ function AgentGUINodeView({
24992
24816
  );
24993
24817
  const sectionAgentTargetFallbackId = enabledProviderTargets.length <= 1 ? viewModel.selectedProviderTarget.agentTargetId?.trim() || viewModel.selectedProviderTarget.targetId?.trim() || null : null;
24994
24818
  const openAgentEnvSetup = useCallback10(() => {
24995
- if (!effectiveRailConfigProvider) {
24996
- return;
24997
- }
24998
24819
  openAgentEnvPanel({ provider: effectiveRailConfigProvider, focus: null });
24999
24820
  }, [effectiveRailConfigProvider]);
24821
+ const openAgentSettings = useCallback10(() => {
24822
+ openWorkspaceSettingsPanel({ section: "agent" });
24823
+ }, []);
25000
24824
  const conversationRailStoreState = useMemo10(
25001
24825
  () => ({
25002
24826
  activeConversationId: viewModel.activeConversationId,
@@ -25022,6 +24846,7 @@ function AgentGUINodeView({
25022
24846
  onUpdateConversationFilter: actions.updateConversationFilter,
25023
24847
  onSelectConversationFilterTarget: actions.selectConversationFilterTarget,
25024
24848
  onOpenAgentEnvSetup: openAgentEnvSetup,
24849
+ onOpenAgentSettings: openAgentSettings,
25025
24850
  onAgentConfigMenuOpen,
25026
24851
  onRetryOpenclawGateway: retryOpenclawGateway,
25027
24852
  onSelectConversation: selectConversation,
@@ -25046,6 +24871,7 @@ function AgentGUINodeView({
25046
24871
  labels,
25047
24872
  onAgentConfigMenuOpen,
25048
24873
  openAgentEnvSetup,
24874
+ openAgentSettings,
25049
24875
  openConversationWindow,
25050
24876
  openProjectFiles,
25051
24877
  openclawGateway,
@@ -25101,8 +24927,8 @@ function AgentGUINodeView({
25101
24927
  ),
25102
24928
  [viewModel.providerTargets, viewModel.workspaceId]
25103
24929
  );
25104
- const content = /* @__PURE__ */ jsxs17(AgentTargetPresentationProvider, { agentTargets: agentTargetPresentations, children: [
25105
- /* @__PURE__ */ jsxs17(
24930
+ const content = /* @__PURE__ */ jsxs18(AgentTargetPresentationProvider, { agentTargets: agentTargetPresentations, children: [
24931
+ /* @__PURE__ */ jsxs18(
25106
24932
  "div",
25107
24933
  {
25108
24934
  ref: layoutElementRef,
@@ -25112,27 +24938,43 @@ function AgentGUINodeView({
25112
24938
  inert: previewMode ? true : void 0,
25113
24939
  style: layoutStyle,
25114
24940
  children: [
25115
- showProviderRail ? /* @__PURE__ */ jsx31(
24941
+ showProviderRail ? /* @__PURE__ */ jsxs18(
25116
24942
  "aside",
25117
24943
  {
25118
24944
  className: `${AgentGUINode_styles_default.providerRailPanel} nodrag tsh-desktop-no-drag`,
25119
24945
  "aria-label": labels.providerSwitchLabel,
25120
24946
  "aria-hidden": conversationRailCollapsed ? "true" : void 0,
25121
24947
  inert: conversationRailCollapsed ? true : void 0,
25122
- children: /* @__PURE__ */ jsx31(
25123
- AgentGUIProviderRail,
25124
- {
25125
- conversationFilter: viewModel.conversationFilter,
25126
- labels,
25127
- previewMode,
25128
- selectedProviderTarget: viewModel.selectedProviderTarget,
25129
- providerTargets: viewModel.providerTargets,
25130
- providerTargetsLoading: viewModel.providerTargetsLoading,
25131
- comingSoonProviders: viewModel.comingSoonProviders,
25132
- onSelectConversationFilterTarget: actions.selectConversationFilterTarget,
25133
- onUpdateConversationFilter: actions.updateConversationFilter
25134
- }
25135
- )
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
+ ]
25136
24978
  }
25137
24979
  ) : null,
25138
24980
  /* @__PURE__ */ jsx31(
@@ -25239,7 +25081,7 @@ function AgentGUINodeView({
25239
25081
  }
25240
25082
  )
25241
25083
  ] });
25242
- return previewMode ? content : /* @__PURE__ */ jsx31(TooltipProvider2, { children: content });
25084
+ return previewMode ? content : /* @__PURE__ */ jsx31(TooltipProvider3, { children: content });
25243
25085
  }
25244
25086
  function mergeWorkspaceAppIconsFromCommands(input) {
25245
25087
  const seen = new Set(
@@ -25455,7 +25297,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
25455
25297
  ]
25456
25298
  );
25457
25299
  const conversationFlowEmpty = useMemo10(
25458
- () => /* @__PURE__ */ jsxs17(
25300
+ () => /* @__PURE__ */ jsxs18(
25459
25301
  "div",
25460
25302
  {
25461
25303
  className: AgentGUINode_styles_default.unavailableChatEmpty,
@@ -26315,7 +26157,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
26315
26157
  );
26316
26158
  setIsTimelineScrolledToBottom(true);
26317
26159
  }, [viewModel.activeConversationId]);
26318
- return /* @__PURE__ */ jsxs17("main", { className: AgentGUINode_styles_default.detail, children: [
26160
+ return /* @__PURE__ */ jsxs18("main", { className: AgentGUINode_styles_default.detail, children: [
26319
26161
  /* @__PURE__ */ jsx31(
26320
26162
  AgentGUIDetailHeader,
26321
26163
  {
@@ -26330,7 +26172,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
26330
26172
  previewMode
26331
26173
  }
26332
26174
  ),
26333
- showProviderSetupNotice ? /* @__PURE__ */ jsxs17(
26175
+ showProviderSetupNotice ? /* @__PURE__ */ jsxs18(
26334
26176
  "div",
26335
26177
  {
26336
26178
  className: cn3(
@@ -26460,12 +26302,12 @@ var AgentGUIDetailHeader = memo(function AgentGUIDetailHeader2({
26460
26302
  }
26461
26303
  const runPath = activeConversation.cwd.trim();
26462
26304
  const statusTitle = showSyncIndicator ? syncLabel : void 0;
26463
- return /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.detailHeader, children: [
26464
- /* @__PURE__ */ jsxs17("span", { className: AgentGUINode_styles_default.detailHeaderTitleGroup, children: [
26305
+ return /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.detailHeader, children: [
26306
+ /* @__PURE__ */ jsxs18("span", { className: AgentGUINode_styles_default.detailHeaderTitleGroup, children: [
26465
26307
  /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.detailHeaderTitle, children: conversationPlainTitle(activeConversation, labels, uiLanguage) }),
26466
26308
  runPath ? /* @__PURE__ */ jsx31(AgentRunPathInfo, { path: runPath, previewMode }) : null
26467
26309
  ] }),
26468
- /* @__PURE__ */ jsxs17(
26310
+ /* @__PURE__ */ jsxs18(
26469
26311
  "span",
26470
26312
  {
26471
26313
  className: "inline-flex flex-none items-center gap-2 whitespace-nowrap",
@@ -26504,10 +26346,10 @@ function AgentRunPathInfo({
26504
26346
  if (previewMode) {
26505
26347
  return trigger;
26506
26348
  }
26507
- return /* @__PURE__ */ jsxs17(Tooltip3, { children: [
26508
- /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: trigger }),
26349
+ return /* @__PURE__ */ jsxs18(Tooltip4, { children: [
26350
+ /* @__PURE__ */ jsx31(TooltipTrigger4, { asChild: true, children: trigger }),
26509
26351
  /* @__PURE__ */ jsx31(
26510
- TooltipContent3,
26352
+ TooltipContent4,
26511
26353
  {
26512
26354
  side: "top",
26513
26355
  align: "start",
@@ -26557,7 +26399,7 @@ var AgentGUIEmptyHeroPane = memo(function AgentGUIEmptyHeroPane2({
26557
26399
  "use memo";
26558
26400
  const heroIconPresentations = iconPresentations.length > 0 ? iconPresentations : [agentGUIProviderIconPresentation(provider)];
26559
26401
  const heroIconAnimationKey = heroIconPresentations.map((icon) => `${icon.provider}:${icon.iconUrl}`).join("|");
26560
- return /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.emptyHero, children: /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.emptyHeroBody, children: [
26402
+ return /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.emptyHero, children: /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.emptyHeroBody, children: [
26561
26403
  heroIconPresentations.length > 1 ? /* @__PURE__ */ jsx31(
26562
26404
  AgentGUIAllProviderGridIcon,
26563
26405
  {
@@ -26622,7 +26464,7 @@ var AgentGUIProviderReadinessGatePane = memo(
26622
26464
  });
26623
26465
  const action = providerGateAction(gate.status);
26624
26466
  const pendingLabel = pendingAction === "install" ? labels.providerGatePendingInstall : pendingAction === "login" ? labels.providerGatePendingLogin : pendingAction === "refresh" ? labels.providerGatePendingRefresh : null;
26625
- return /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.emptyHero, children: /* @__PURE__ */ jsxs17(
26467
+ return /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.emptyHero, children: /* @__PURE__ */ jsxs18(
26626
26468
  "div",
26627
26469
  {
26628
26470
  className: cn3(AgentGUINode_styles_default.emptyHeroBody, AgentGUINode_styles_default.emptyProviderGate),
@@ -26822,9 +26664,9 @@ function EmptyHeroTitle({
26822
26664
  );
26823
26665
  const canSwitchProvider = enabledProviderTargets.length > 1 && selectedProviderTarget && onProviderSelect;
26824
26666
  const providerName = label.slice(providerStart, providerEnd);
26825
- return /* @__PURE__ */ jsxs17(Fragment9, { children: [
26667
+ return /* @__PURE__ */ jsxs18(Fragment9, { children: [
26826
26668
  label.slice(0, providerStart),
26827
- canSwitchProvider ? /* @__PURE__ */ jsxs17(
26669
+ canSwitchProvider ? /* @__PURE__ */ jsxs18(
26828
26670
  Select3,
26829
26671
  {
26830
26672
  value: selectedProviderTargetId,
@@ -26861,7 +26703,7 @@ function EmptyHeroTitle({
26861
26703
  {
26862
26704
  value: target.targetId,
26863
26705
  className: cn3(AgentGUINode_styles_default.composerMenuItem, "gap-2"),
26864
- children: /* @__PURE__ */ jsxs17("span", { className: "flex min-w-0 items-center gap-1.5", children: [
26706
+ children: /* @__PURE__ */ jsxs18("span", { className: "flex min-w-0 items-center gap-1.5", children: [
26865
26707
  /* @__PURE__ */ jsx31(
26866
26708
  "img",
26867
26709
  {
@@ -26909,7 +26751,7 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
26909
26751
  goalPauseSupported
26910
26752
  }) {
26911
26753
  "use memo";
26912
- const state = useSnapshot(store);
26754
+ const state = useSnapshot2(store);
26913
26755
  const {
26914
26756
  composerProps,
26915
26757
  inlineNoticeChrome,
@@ -26924,7 +26766,7 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
26924
26766
  const goalTokensUsed = goal ? numberValue2(goal.tokensUsed) : null;
26925
26767
  const goalTimeUsedSeconds = goal ? numberValue2(goal.timeUsedSeconds) : null;
26926
26768
  const showGoalBanner = isGoalBannerVisible(goalObjective, goalStatus);
26927
- return /* @__PURE__ */ jsxs17(
26769
+ return /* @__PURE__ */ jsxs18(
26928
26770
  "div",
26929
26771
  {
26930
26772
  ref: bottomDockRef,
@@ -27000,7 +26842,6 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
27000
26842
  tokensUsed: goalTokensUsed ?? void 0,
27001
26843
  timeUsedSeconds: goalTimeUsedSeconds ?? void 0,
27002
26844
  labels: goalBannerLabels,
27003
- onEditObjective: (objective) => onGoalControl("set", objective),
27004
26845
  onPauseGoal: goalPauseSupported ? () => onGoalControl("pause") : void 0,
27005
26846
  onResumeGoal: goalPauseSupported ? () => onGoalControl("resume") : void 0,
27006
26847
  onClearGoal: () => onGoalControl("clear")
@@ -27031,7 +26872,7 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
27031
26872
  );
27032
26873
  });
27033
26874
  function createAgentGUIConversationRailStore(initialState) {
27034
- return proxy2(initialState);
26875
+ return proxy3(initialState);
27035
26876
  }
27036
26877
  function syncAgentGUIConversationRailStore(store, next) {
27037
26878
  if (agentGUIConversationRailStoreSnapshotsEqual(store, next)) {
@@ -27040,7 +26881,7 @@ function syncAgentGUIConversationRailStore(store, next) {
27040
26881
  Object.assign(store, next);
27041
26882
  }
27042
26883
  function agentGUIConversationRailStoreSnapshotsEqual(current, next) {
27043
- return current.activeConversationId === next.activeConversationId && current.pendingDeleteConversationId === next.pendingDeleteConversationId && current.isLoadingConversations === next.isLoadingConversations && current.isDeletingConversation === next.isDeletingConversation && current.isDeletingProjectConversations === next.isDeletingProjectConversations && current.labels === next.labels && current.workspaceUserProjectI18n === next.workspaceUserProjectI18n && current.uiLanguage === next.uiLanguage && current.previewMode === next.previewMode && current.createConversationDisabled === next.createConversationDisabled && current.openclawGateway === next.openclawGateway && current.isCollapsed === next.isCollapsed && current.railConfigProvider === next.railConfigProvider && current.slashStatusLimits === next.slashStatusLimits && current.selectedProviderTarget === next.selectedProviderTarget && current.providerTargets === next.providerTargets && current.providerTargetsLoading === next.providerTargetsLoading && current.conversationFilter === next.conversationFilter && current.sectionAgentTargetFallbackId === next.sectionAgentTargetFallbackId && current.onUpdateConversationFilter === next.onUpdateConversationFilter && current.onSelectConversationFilterTarget === next.onSelectConversationFilterTarget && current.onCreateConversation === next.onCreateConversation && current.onOpenAgentEnvSetup === next.onOpenAgentEnvSetup && current.onAgentConfigMenuOpen === next.onAgentConfigMenuOpen && current.onRetryOpenclawGateway === next.onRetryOpenclawGateway && current.onSelectConversation === next.onSelectConversation && current.onToggleConversationPinned === next.onToggleConversationPinned && current.onOpenProjectFiles === next.onOpenProjectFiles && current.onOpenConversationWindow === next.onOpenConversationWindow && current.selectProjectDirectory === next.selectProjectDirectory && current.onRemoveProject === next.onRemoveProject && current.onConfirmDeleteProjectConversations === next.onConfirmDeleteProjectConversations && current.onRequestDeleteConversation === next.onRequestDeleteConversation && current.onCancelDeleteConversation === next.onCancelDeleteConversation && current.onConfirmDeleteConversation === next.onConfirmDeleteConversation;
26884
+ return current.activeConversationId === next.activeConversationId && current.pendingDeleteConversationId === next.pendingDeleteConversationId && current.isLoadingConversations === next.isLoadingConversations && current.isDeletingConversation === next.isDeletingConversation && current.isDeletingProjectConversations === next.isDeletingProjectConversations && current.labels === next.labels && current.workspaceUserProjectI18n === next.workspaceUserProjectI18n && current.uiLanguage === next.uiLanguage && current.previewMode === next.previewMode && current.createConversationDisabled === next.createConversationDisabled && current.openclawGateway === next.openclawGateway && current.isCollapsed === next.isCollapsed && current.railConfigProvider === next.railConfigProvider && current.slashStatusLimits === next.slashStatusLimits && current.selectedProviderTarget === next.selectedProviderTarget && current.providerTargets === next.providerTargets && current.providerTargetsLoading === next.providerTargetsLoading && current.conversationFilter === next.conversationFilter && current.sectionAgentTargetFallbackId === next.sectionAgentTargetFallbackId && current.onUpdateConversationFilter === next.onUpdateConversationFilter && current.onSelectConversationFilterTarget === next.onSelectConversationFilterTarget && current.onCreateConversation === next.onCreateConversation && current.onOpenAgentEnvSetup === next.onOpenAgentEnvSetup && current.onOpenAgentSettings === next.onOpenAgentSettings && current.onAgentConfigMenuOpen === next.onAgentConfigMenuOpen && current.onRetryOpenclawGateway === next.onRetryOpenclawGateway && current.onSelectConversation === next.onSelectConversation && current.onToggleConversationPinned === next.onToggleConversationPinned && current.onOpenProjectFiles === next.onOpenProjectFiles && current.onOpenConversationWindow === next.onOpenConversationWindow && current.selectProjectDirectory === next.selectProjectDirectory && current.onRemoveProject === next.onRemoveProject && current.onConfirmDeleteProjectConversations === next.onConfirmDeleteProjectConversations && current.onRequestDeleteConversation === next.onRequestDeleteConversation && current.onCancelDeleteConversation === next.onCancelDeleteConversation && current.onConfirmDeleteConversation === next.onConfirmDeleteConversation;
27044
26885
  }
27045
26886
  var AgentGUIConversationRailStorePane = memo(
27046
26887
  function AgentGUIConversationRailStorePane2({
@@ -27051,7 +26892,7 @@ var AgentGUIConversationRailStorePane = memo(
27051
26892
  workspaceId
27052
26893
  }) {
27053
26894
  "use memo";
27054
- const state = useSnapshot(store);
26895
+ const state = useSnapshot2(store);
27055
26896
  return /* @__PURE__ */ jsx31(
27056
26897
  AgentGUIConversationRailPane,
27057
26898
  {
@@ -27171,37 +27012,81 @@ function updateConversationSectionsFromSummaries(previous, conversations, option
27171
27012
  const summariesById = new Map(
27172
27013
  conversations.map((conversation) => [conversation.id, conversation])
27173
27014
  );
27015
+ const summarySectionItemsById = /* @__PURE__ */ new Map();
27016
+ for (const conversation of conversations) {
27017
+ if ((conversation.pinnedAtUnixMs ?? 0) > 0) {
27018
+ continue;
27019
+ }
27020
+ const sectionId = conversation.project ? `project:${normalizeConversationProjectPath(conversation.project.path)}` : "conversations";
27021
+ const items = summarySectionItemsById.get(sectionId) ?? [];
27022
+ items.push(conversation);
27023
+ summarySectionItemsById.set(sectionId, items);
27024
+ }
27174
27025
  const seenIds = /* @__PURE__ */ new Set();
27175
27026
  let changed = false;
27176
27027
  const nextSections = previous.map((section) => {
27177
27028
  let sectionChanged = false;
27029
+ const summaryItems = summarySectionItemsById.get(section.id) ?? [];
27030
+ const summaryIdsForSection = new Set(summaryItems.map((item) => item.id));
27178
27031
  const items = section.items.map((item) => {
27179
27032
  seenIds.add(item.id);
27180
27033
  const summary = summariesById.get(item.id);
27181
27034
  if (!summary) {
27182
27035
  return item;
27183
27036
  }
27184
- const nextItem = {
27037
+ const nextItem = section.project ? {
27185
27038
  ...summary,
27186
- project: item.project
27187
- };
27039
+ project: section.project
27040
+ } : summary;
27188
27041
  if (conversationSummariesRenderEqual2(item, nextItem)) {
27189
27042
  return item;
27190
27043
  }
27191
27044
  sectionChanged = true;
27192
27045
  return nextItem;
27046
+ }).filter((item) => {
27047
+ const summary = summariesById.get(item.id);
27048
+ if (!summary || summaryIdsForSection.has(item.id)) {
27049
+ return true;
27050
+ }
27051
+ sectionChanged = true;
27052
+ return false;
27193
27053
  });
27194
- if (!sectionChanged) {
27195
- return section;
27054
+ const nextSection = sectionChanged ? {
27055
+ ...section,
27056
+ items
27057
+ } : section;
27058
+ if (section.kind === "pinned" || summaryItems.length === 0) {
27059
+ if (sectionChanged) {
27060
+ changed = true;
27061
+ }
27062
+ return nextSection;
27063
+ }
27064
+ const summaryIds = new Set(summaryItems.map((item) => item.id));
27065
+ const mergedItems = [
27066
+ ...summaryItems.map(
27067
+ (item) => section.project ? { ...item, project: section.project } : item
27068
+ ),
27069
+ ...items.filter((item) => !summaryIds.has(item.id))
27070
+ ];
27071
+ const stableItems = stabilizeConversationSectionItems(
27072
+ section.items,
27073
+ mergedItems
27074
+ );
27075
+ if (stableItems === section.items) {
27076
+ if (sectionChanged) {
27077
+ changed = true;
27078
+ }
27079
+ return nextSection;
27196
27080
  }
27197
27081
  changed = true;
27198
27082
  return {
27199
- ...section,
27200
- items
27083
+ ...nextSection,
27084
+ items: stableItems
27201
27085
  };
27202
27086
  });
27203
- const newConversations = conversations.filter(
27204
- (conversation) => !seenIds.has(conversation.id) && (conversation.pinnedAtUnixMs ?? 0) <= 0
27087
+ const existingSectionIds = new Set(nextSections.map((section) => section.id));
27088
+ const newConversations = [...summarySectionItemsById.entries()].flatMap(
27089
+ ([sectionId, items]) => existingSectionIds.has(sectionId) ? [] : items.filter((conversation) => !seenIds.has(conversation.id))
27205
27090
  );
27206
27091
  if (newConversations.length === 0) {
27207
27092
  return changed ? nextSections : previous;
@@ -27216,7 +27101,7 @@ function updateConversationSectionsFromSummaries(previous, conversations, option
27216
27101
  if (targetIndex !== -1 && target) {
27217
27102
  sectionsWithInsertions[targetIndex] = {
27218
27103
  ...target,
27219
- items: [conversation, ...target.items]
27104
+ items: [...target.items, conversation]
27220
27105
  };
27221
27106
  continue;
27222
27107
  }
@@ -27349,10 +27234,13 @@ function agentGUIProviderRailLabel(provider, targetLabel, labels) {
27349
27234
  function agentGUIProviderTargetMatchesConversationFilter(target, filter) {
27350
27235
  return filter.kind === "agentTarget" && (target.agentTargetId?.trim() ?? "") === filter.agentTargetId;
27351
27236
  }
27352
- function agentGUIProviderRailTargets(providerTargets, providerTargetsLoading, comingSoonProviders) {
27237
+ function agentGUIProviderRailTargets(providerTargets, providerTargetsLoading, comingSoonProviders, providerRailMode) {
27353
27238
  if (providerTargetsLoading) {
27354
27239
  return [];
27355
27240
  }
27241
+ if (providerRailMode === "exact") {
27242
+ return providerTargets;
27243
+ }
27356
27244
  const comingSoon = new Set(comingSoonProviders);
27357
27245
  const source = providerTargets.length > 0 && !agentGUIProviderRailTargetsAreFullLocalFallback(providerTargets) ? providerTargets : [];
27358
27246
  const seenProviders = new Set(source.map((target) => target.provider));
@@ -27385,7 +27273,10 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27385
27273
  selectedProviderTarget,
27386
27274
  providerTargets,
27387
27275
  providerTargetsLoading,
27276
+ providerRailMode,
27277
+ renderProviderRailEmpty,
27388
27278
  comingSoonProviders,
27279
+ onRequestComposerFocus,
27389
27280
  onSelectConversationFilterTarget,
27390
27281
  onUpdateConversationFilter
27391
27282
  }) {
@@ -27394,12 +27285,21 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27394
27285
  () => agentGUIProviderRailTargets(
27395
27286
  providerTargets,
27396
27287
  providerTargetsLoading,
27397
- comingSoonProviders
27288
+ comingSoonProviders,
27289
+ providerRailMode
27398
27290
  ),
27399
- [comingSoonProviders, providerTargets, providerTargetsLoading]
27291
+ [
27292
+ comingSoonProviders,
27293
+ providerRailMode,
27294
+ providerTargets,
27295
+ providerTargetsLoading
27296
+ ]
27400
27297
  );
27401
27298
  const providerTiles = useMemo10(() => {
27402
27299
  const targets = [...railProviderTargets];
27300
+ if (providerRailMode === "exact") {
27301
+ return targets;
27302
+ }
27403
27303
  const originalIndexByTarget = /* @__PURE__ */ new Map();
27404
27304
  targets.forEach((target, index) => {
27405
27305
  originalIndexByTarget.set(
@@ -27416,7 +27316,7 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27416
27316
  `${right.provider}\0${right.targetId}`
27417
27317
  ) ?? 0);
27418
27318
  });
27419
- }, [railProviderTargets]);
27319
+ }, [providerRailMode, railProviderTargets]);
27420
27320
  const selectedProviderTargetIsPlaceholder = selectedProviderTarget?.disabled === true;
27421
27321
  const allTileSelected = conversationFilter.kind === "all" && !selectedProviderTargetIsPlaceholder;
27422
27322
  const selectAllProviders = useCallback10(() => {
@@ -27430,8 +27330,10 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27430
27330
  });
27431
27331
  }
27432
27332
  }
27333
+ onRequestComposerFocus();
27433
27334
  }, [
27434
27335
  onSelectConversationFilterTarget,
27336
+ onRequestComposerFocus,
27435
27337
  onUpdateConversationFilter,
27436
27338
  railProviderTargets,
27437
27339
  selectedProviderTargetIsPlaceholder
@@ -27442,10 +27344,24 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27442
27344
  provider: target.provider,
27443
27345
  providerTargetId: target.targetId
27444
27346
  });
27347
+ onRequestComposerFocus();
27445
27348
  },
27446
- [onSelectConversationFilterTarget]
27349
+ [onRequestComposerFocus, onSelectConversationFilterTarget]
27447
27350
  );
27448
- return /* @__PURE__ */ jsxs17(
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
+ }
27364
+ return /* @__PURE__ */ jsxs18(
27449
27365
  "div",
27450
27366
  {
27451
27367
  className: AgentGUINode_styles_default.providerRail,
@@ -27453,7 +27369,7 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27453
27369
  "aria-label": labels.providerSwitchLabel,
27454
27370
  "aria-busy": providerTargetsLoading,
27455
27371
  children: [
27456
- /* @__PURE__ */ jsxs17(
27372
+ /* @__PURE__ */ jsxs18(
27457
27373
  "button",
27458
27374
  {
27459
27375
  type: "button",
@@ -27525,9 +27441,9 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
27525
27441
  if (previewMode) {
27526
27442
  return tile;
27527
27443
  }
27528
- return /* @__PURE__ */ jsxs17(Tooltip3, { children: [
27529
- /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: tile }),
27530
- /* @__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 })
27531
27447
  ] }, `${target.provider}:${target.targetId}:tooltip`);
27532
27448
  })
27533
27449
  ]
@@ -27546,9 +27462,12 @@ function useAgentGUIConversationRail({
27546
27462
  }) {
27547
27463
  const agentActivityRuntime = useAgentActivityRuntime();
27548
27464
  const [runtimeRailSections, setRuntimeRailSections] = useState12(null);
27465
+ const [runtimeRailSectionsPending, setRuntimeRailSectionsPending] = useState12(false);
27549
27466
  const [sectionPageStates, setSectionPageStates] = useState12(() => /* @__PURE__ */ new Map());
27467
+ const conversationsRef = useRef12(conversations);
27550
27468
  const pagingRequestSequenceRef = useRef12(0);
27551
27469
  const pagingAbortControllersRef = useRef12(/* @__PURE__ */ new Map());
27470
+ const workspaceIdRef = useRef12(workspaceId);
27552
27471
  const runtimeListSessionSections = agentActivityRuntime.listSessionSections;
27553
27472
  const runtimeListSessionSectionPage = agentActivityRuntime.listSessionSectionPage;
27554
27473
  const runtimeSectionsEnabled = !previewMode && Boolean(runtimeListSessionSections) && Boolean(runtimeListSessionSectionPage);
@@ -27569,12 +27488,19 @@ function useAgentGUIConversationRail({
27569
27488
  [labels.sectionConversations, labels.sectionPinned]
27570
27489
  );
27571
27490
  useEffect13(() => {
27491
+ conversationsRef.current = conversations;
27492
+ }, [conversations]);
27493
+ useEffect13(() => {
27494
+ const workspaceChanged = workspaceIdRef.current !== workspaceId;
27495
+ workspaceIdRef.current = workspaceId;
27572
27496
  pagingRequestSequenceRef.current += 1;
27573
27497
  for (const controller of pagingAbortControllersRef.current.values()) {
27574
27498
  controller.abort();
27575
27499
  }
27576
27500
  pagingAbortControllersRef.current.clear();
27577
- setRuntimeRailSections(null);
27501
+ if (workspaceChanged) {
27502
+ setRuntimeRailSections(null);
27503
+ }
27578
27504
  setSectionPageStates(/* @__PURE__ */ new Map());
27579
27505
  return () => {
27580
27506
  pagingRequestSequenceRef.current += 1;
@@ -27592,10 +27518,12 @@ function useAgentGUIConversationRail({
27592
27518
  );
27593
27519
  useEffect13(() => {
27594
27520
  if (!runtimeSectionsEnabled || !runtimeListSessionSections) {
27521
+ setRuntimeRailSectionsPending(false);
27595
27522
  return;
27596
27523
  }
27597
27524
  const requestSequence = pagingRequestSequenceRef.current;
27598
27525
  const abortController = new AbortController();
27526
+ setRuntimeRailSectionsPending(true);
27599
27527
  void runtimeListSessionSections({
27600
27528
  agentTargetId: sectionAgentTargetId || void 0,
27601
27529
  limitPerSection: AGENT_GUI_CONVERSATION_RAIL_SECTION_PAGE_SIZE,
@@ -27611,9 +27539,18 @@ function useAgentGUIConversationRail({
27611
27539
  sections: page.sections,
27612
27540
  workspaceId: page.workspaceId
27613
27541
  });
27542
+ const sectionsWithSummaries = updateConversationSectionsFromSummaries(
27543
+ sections,
27544
+ conversationsRef.current,
27545
+ { sectionConversationsLabel: labels.sectionConversations }
27546
+ );
27614
27547
  setRuntimeRailSections(
27615
- (current) => stabilizeConversationSections(current, sections)
27548
+ (current) => stabilizeConversationSections(
27549
+ current,
27550
+ sectionsWithSummaries ?? sections
27551
+ )
27616
27552
  );
27553
+ setRuntimeRailSectionsPending(false);
27617
27554
  setSectionPageStates(() => {
27618
27555
  const next = /* @__PURE__ */ new Map();
27619
27556
  for (const section of page.sections) {
@@ -27630,6 +27567,7 @@ function useAgentGUIConversationRail({
27630
27567
  return;
27631
27568
  }
27632
27569
  setRuntimeRailSections([]);
27570
+ setRuntimeRailSectionsPending(false);
27633
27571
  });
27634
27572
  return () => {
27635
27573
  abortController.abort();
@@ -27637,6 +27575,7 @@ function useAgentGUIConversationRail({
27637
27575
  }, [
27638
27576
  conversationFilter,
27639
27577
  conversationMembershipKey,
27578
+ labels.sectionConversations,
27640
27579
  runtimeListSessionSections,
27641
27580
  runtimeSectionsEnabled,
27642
27581
  sectionProjectionLabels,
@@ -27763,6 +27702,7 @@ function useAgentGUIConversationRail({
27763
27702
  loadMoreSectionConversations,
27764
27703
  runtimeSectionsEnabled,
27765
27704
  runtimeRailSections,
27705
+ runtimeRailSectionsPending,
27766
27706
  sectionPageStates
27767
27707
  };
27768
27708
  }
@@ -27783,12 +27723,13 @@ var AgentGUIConversationRailPane = memo(
27783
27723
  createConversationDisabled,
27784
27724
  openclawGateway,
27785
27725
  isCollapsed,
27786
- railConfigProvider,
27787
27726
  slashStatusLimits,
27727
+ selectedProviderTarget,
27788
27728
  conversationFilter,
27789
27729
  sectionAgentTargetFallbackId,
27790
27730
  onCreateConversation,
27791
27731
  onOpenAgentEnvSetup,
27732
+ onOpenAgentSettings,
27792
27733
  onAgentConfigMenuOpen,
27793
27734
  onRetryOpenclawGateway,
27794
27735
  onSelectConversation,
@@ -27820,6 +27761,7 @@ var AgentGUIConversationRailPane = memo(
27820
27761
  loadMoreSectionConversations,
27821
27762
  runtimeSectionsEnabled,
27822
27763
  runtimeRailSections,
27764
+ runtimeRailSectionsPending,
27823
27765
  sectionPageStates
27824
27766
  } = useAgentGUIConversationRail({
27825
27767
  conversationFilter,
@@ -27918,7 +27860,13 @@ var AgentGUIConversationRailPane = memo(
27918
27860
  }
27919
27861
  return counts;
27920
27862
  }, [displayConversations]);
27921
- 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;
27922
27870
  const registerConversationItemElement = useCallback10(
27923
27871
  (itemId, element) => {
27924
27872
  if (element) {
@@ -27950,14 +27898,14 @@ var AgentGUIConversationRailPane = memo(
27950
27898
  activeElement.scrollIntoView({ block: "nearest" });
27951
27899
  activeConversationScrollCompletedRef.current = activeId;
27952
27900
  }, [activeConversationId, groupedConversationIdentityKey]);
27953
- return /* @__PURE__ */ jsxs17(
27901
+ return /* @__PURE__ */ jsxs18(
27954
27902
  "aside",
27955
27903
  {
27956
27904
  ref: railElementRef,
27957
27905
  className: AgentGUINode_styles_default.rail,
27958
27906
  "aria-hidden": isCollapsed ? "true" : void 0,
27959
27907
  children: [
27960
- /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.railToolbar, children: [
27908
+ /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.railToolbar, children: [
27961
27909
  /* @__PURE__ */ jsx31(
27962
27910
  TaskSearchField,
27963
27911
  {
@@ -27966,7 +27914,7 @@ var AgentGUIConversationRailPane = memo(
27966
27914
  onChange: setConversationQuery
27967
27915
  }
27968
27916
  ),
27969
- /* @__PURE__ */ jsxs17(
27917
+ /* @__PURE__ */ jsxs18(
27970
27918
  Button,
27971
27919
  {
27972
27920
  type: "button",
@@ -27983,7 +27931,7 @@ var AgentGUIConversationRailPane = memo(
27983
27931
  }
27984
27932
  )
27985
27933
  ] }),
27986
- openclawGateway?.status === "starting" ? /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.gatewayStatus, "data-state": "starting", children: [
27934
+ openclawGateway?.status === "starting" ? /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.gatewayStatus, "data-state": "starting", children: [
27987
27935
  /* @__PURE__ */ jsx31(
27988
27936
  StatusDot,
27989
27937
  {
@@ -27994,7 +27942,7 @@ var AgentGUIConversationRailPane = memo(
27994
27942
  }
27995
27943
  ),
27996
27944
  /* @__PURE__ */ jsx31("span", { children: labels.openclawGatewayStarting })
27997
- ] }) : openclawGateway?.status === "failed" ? /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.gatewayStatus, "data-state": "failed", children: [
27945
+ ] }) : openclawGateway?.status === "failed" ? /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.gatewayStatus, "data-state": "failed", children: [
27998
27946
  /* @__PURE__ */ jsx31("span", { children: openclawGateway.error || labels.openclawGatewayFailed }),
27999
27947
  /* @__PURE__ */ jsx31(
28000
27948
  "button",
@@ -28013,12 +27961,12 @@ var AgentGUIConversationRailPane = memo(
28013
27961
  className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100",
28014
27962
  viewportRef: conversationListRef,
28015
27963
  viewportClassName: AgentGUINode_styles_default.conversationList,
28016
- children: isRuntimeRailLoading || isLoadingConversations && conversations.length === 0 ? /* @__PURE__ */ jsx31(
27964
+ children: shouldShowConversationSkeleton ? /* @__PURE__ */ jsx31(
28017
27965
  AgentConversationListSkeleton,
28018
27966
  {
28019
27967
  label: labels.loadingConversations
28020
27968
  }
28021
- ) : 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) => {
28022
27970
  const projectPath = section.kind === "project" ? section.project?.path ?? "" : "";
28023
27971
  const normalizedProjectPath = normalizeConversationRailProjectPath(projectPath);
28024
27972
  const projectLabel = section.kind === "project" ? section.label : "";
@@ -28028,7 +27976,7 @@ var AgentGUIConversationRailPane = memo(
28028
27976
  const projectConversationCount = normalizedProjectPath ? projectConversationCountsByPath.get(normalizedProjectPath) ?? 0 : 0;
28029
27977
  const sectionPageState = sectionPageStates.get(section.id);
28030
27978
  const sectionHasMore = !conversationQuery.trim() && section.kind !== "pinned" && sectionPageState?.hasMore === true;
28031
- return /* @__PURE__ */ jsxs17(Fragment8, { children: [
27979
+ return /* @__PURE__ */ jsxs18(Fragment8, { children: [
28032
27980
  showProjectRailHeader ? /* @__PURE__ */ jsx31(
28033
27981
  AgentGUIProjectRailHeader,
28034
27982
  {
@@ -28073,8 +28021,8 @@ var AgentGUIConversationRailPane = memo(
28073
28021
  })
28074
28022
  }
28075
28023
  ),
28076
- railConfigProvider ? /* @__PURE__ */ jsx31("div", { className: "shrink-0 px-2 py-1.5", children: slashStatusLimits.length > 0 ? /* @__PURE__ */ jsxs17(
28077
- 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,
28078
28026
  {
28079
28027
  onOpenChange: (open) => {
28080
28028
  if (open) {
@@ -28082,7 +28030,7 @@ var AgentGUIConversationRailPane = memo(
28082
28030
  }
28083
28031
  },
28084
28032
  children: [
28085
- /* @__PURE__ */ jsx31(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs17(
28033
+ /* @__PURE__ */ jsx31(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs18(
28086
28034
  Button,
28087
28035
  {
28088
28036
  type: "button",
@@ -28092,7 +28040,7 @@ var AgentGUIConversationRailPane = memo(
28092
28040
  disabled: previewMode,
28093
28041
  children: [
28094
28042
  /* @__PURE__ */ jsx31(
28095
- EnvironmentLinedIcon,
28043
+ SettingsLinedIcon,
28096
28044
  {
28097
28045
  "aria-hidden": "true",
28098
28046
  width: 16,
@@ -28104,67 +28052,71 @@ var AgentGUIConversationRailPane = memo(
28104
28052
  }
28105
28053
  ) }),
28106
28054
  /* @__PURE__ */ jsx31(
28107
- PopoverContent,
28055
+ PopoverContent2,
28108
28056
  {
28109
28057
  side: "top",
28110
28058
  align: "start",
28111
28059
  className: "w-[300px] max-w-[calc(100vw-32px)] gap-3 p-1 text-xs",
28112
28060
  "data-testid": "agent-gui-config-menu",
28113
- children: /* @__PURE__ */ jsxs17("div", { className: "flex min-w-0 flex-col gap-3", children: [
28114
- /* @__PURE__ */ jsxs17("div", { className: "flex min-w-0 flex-col gap-2 p-2", children: [
28115
- /* @__PURE__ */ jsx31("span", { className: "text-[13px] font-semibold leading-4", children: labels.slashStatusLimits }),
28116
- slashStatusLimits.map((limit) => /* @__PURE__ */ jsx31(
28117
- AgentUsageMeter,
28061
+ children: /* @__PURE__ */ jsxs18("div", { className: "flex min-w-0 flex-col gap-3", children: [
28062
+ slashStatusLimits.length > 0 ? /* @__PURE__ */ jsxs18(Fragment9, { children: [
28063
+ /* @__PURE__ */ jsxs18("div", { className: "flex min-w-0 flex-col gap-2 p-2", children: [
28064
+ /* @__PURE__ */ jsx31("span", { className: "text-[13px] font-semibold leading-4", children: labels.slashStatusLimits }),
28065
+ slashStatusLimits.map((limit) => /* @__PURE__ */ jsx31(
28066
+ AgentUsageMeter,
28067
+ {
28068
+ label: limit.label,
28069
+ value: `${limit.value}${limit.reset ? ` (${limit.reset})` : ""}`,
28070
+ percent: typeof limit.percentRemaining === "number" && Number.isFinite(limit.percentRemaining) ? limit.percentRemaining : null
28071
+ },
28072
+ limit.id
28073
+ ))
28074
+ ] }),
28075
+ /* @__PURE__ */ jsx31("div", { className: "px-2", children: /* @__PURE__ */ jsx31("span", { className: "block h-px bg-[var(--border-1)]" }) })
28076
+ ] }) : null,
28077
+ /* @__PURE__ */ jsxs18("div", { className: "flex min-w-0 flex-col gap-1", children: [
28078
+ /* @__PURE__ */ jsxs18(
28079
+ "button",
28118
28080
  {
28119
- label: limit.label,
28120
- value: `${limit.value}${limit.reset ? ` (${limit.reset})` : ""}`,
28121
- percent: typeof limit.percentRemaining === "number" && Number.isFinite(limit.percentRemaining) ? limit.percentRemaining : null
28122
- },
28123
- limit.id
28124
- ))
28125
- ] }),
28126
- /* @__PURE__ */ jsx31("div", { className: "px-2", children: /* @__PURE__ */ jsx31("span", { className: "block h-px bg-[var(--border-1)]" }) }),
28127
- /* @__PURE__ */ jsxs17(
28128
- "button",
28129
- {
28130
- type: "button",
28131
- "data-testid": "agent-gui-config-env-setup",
28132
- className: "nodrag flex h-7 w-full items-center gap-2 rounded-[6px] px-2 text-[13px] text-[var(--text-primary)] transition-colors hover:bg-[var(--transparency-hover)] hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)] disabled:text-[var(--text-tertiary)] [-webkit-app-region:no-drag]",
28133
- disabled: previewMode,
28134
- onClick: () => onOpenAgentEnvSetup(),
28135
- children: [
28136
- /* @__PURE__ */ jsx31(Wrench, { "aria-hidden": "true", size: 16, strokeWidth: 1.8 }),
28137
- /* @__PURE__ */ jsx31("span", { children: labels.agentEnvSetup })
28138
- ]
28139
- }
28140
- )
28081
+ type: "button",
28082
+ "data-testid": "agent-gui-config-settings",
28083
+ className: "nodrag flex h-7 w-full items-center gap-2 rounded-[6px] px-2 text-[13px] text-[var(--text-primary)] transition-colors hover:bg-[var(--transparency-hover)] hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)] disabled:text-[var(--text-tertiary)] [-webkit-app-region:no-drag]",
28084
+ disabled: previewMode,
28085
+ onClick: () => onOpenAgentSettings(),
28086
+ children: [
28087
+ /* @__PURE__ */ jsx31(
28088
+ SettingsLinedIcon,
28089
+ {
28090
+ "aria-hidden": "true",
28091
+ width: 16,
28092
+ height: 16
28093
+ }
28094
+ ),
28095
+ /* @__PURE__ */ jsx31("span", { children: labels.agentSettingsMenu })
28096
+ ]
28097
+ }
28098
+ ),
28099
+ /* @__PURE__ */ jsxs18(
28100
+ "button",
28101
+ {
28102
+ type: "button",
28103
+ "data-testid": "agent-gui-config-env-setup",
28104
+ className: "nodrag flex h-7 w-full items-center gap-2 rounded-[6px] px-2 text-[13px] text-[var(--text-primary)] transition-colors hover:bg-[var(--transparency-hover)] hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)] disabled:text-[var(--text-tertiary)] [-webkit-app-region:no-drag]",
28105
+ disabled: previewMode,
28106
+ onClick: () => onOpenAgentEnvSetup(),
28107
+ children: [
28108
+ /* @__PURE__ */ jsx31(Wrench, { "aria-hidden": "true", size: 16, strokeWidth: 1.8 }),
28109
+ /* @__PURE__ */ jsx31("span", { children: labels.agentEnvSetup })
28110
+ ]
28111
+ }
28112
+ )
28113
+ ] })
28141
28114
  ] })
28142
28115
  }
28143
28116
  )
28144
28117
  ]
28145
28118
  }
28146
- ) : /* @__PURE__ */ jsxs17(
28147
- Button,
28148
- {
28149
- type: "button",
28150
- variant: "ghost",
28151
- className: "flex w-full items-center justify-start gap-2 text-[13px] text-[var(--text-secondary)] hover:text-[var(--text-primary)]",
28152
- title: labels.agentEnvSetup,
28153
- disabled: previewMode,
28154
- onClick: () => onOpenAgentEnvSetup(),
28155
- children: [
28156
- /* @__PURE__ */ jsx31(
28157
- EnvironmentLinedIcon,
28158
- {
28159
- "aria-hidden": "true",
28160
- width: 16,
28161
- height: 16
28162
- }
28163
- ),
28164
- /* @__PURE__ */ jsx31("span", { children: labels.agentEnvSetup })
28165
- ]
28166
- }
28167
- ) }) : null,
28119
+ ) }),
28168
28120
  /* @__PURE__ */ jsx31(
28169
28121
  ConfirmationDialog,
28170
28122
  {
@@ -28249,7 +28201,23 @@ var AgentGUIConversationRailSection = memo(
28249
28201
  AGENT_GUI_CONVERSATION_RAIL_SECTION_PAGE_SIZE
28250
28202
  );
28251
28203
  const visibleItemCount = isSectionCollapsed ? 0 : Math.min(visibleItemLimit, section.items.length);
28252
- const visibleItems = isSectionCollapsed ? [] : section.items.slice(0, visibleItemCount);
28204
+ const visibleItems = useMemo10(() => {
28205
+ if (isSectionCollapsed) {
28206
+ return [];
28207
+ }
28208
+ const baseItems = section.items.slice(0, visibleItemCount);
28209
+ const activeId = activeConversationId?.trim() ?? "";
28210
+ if (!activeId || baseItems.some((item) => item.id === activeId)) {
28211
+ return baseItems;
28212
+ }
28213
+ const activeItem = section.items.find((item) => item.id === activeId);
28214
+ return activeItem ? [...baseItems, activeItem] : baseItems;
28215
+ }, [
28216
+ activeConversationId,
28217
+ isSectionCollapsed,
28218
+ section.items,
28219
+ visibleItemCount
28220
+ ]);
28253
28221
  const canShowMore = !isSectionCollapsed && (visibleItemCount < section.items.length || sectionHasMore);
28254
28222
  const canShowLess = !isSectionCollapsed && visibleItemCount > AGENT_GUI_CONVERSATION_RAIL_SECTION_PAGE_SIZE;
28255
28223
  const showMoreConversations = useCallback10(() => {
@@ -28288,15 +28256,15 @@ var AgentGUIConversationRailSection = memo(
28288
28256
  source: "unscoped_section"
28289
28257
  });
28290
28258
  }, [onCreateConversation, projectPath]);
28291
- return /* @__PURE__ */ jsxs17(
28259
+ return /* @__PURE__ */ jsxs18(
28292
28260
  "section",
28293
28261
  {
28294
28262
  className: AgentGUINode_styles_default.conversationSection,
28295
28263
  "data-collapsed": isSectionCollapsed,
28296
28264
  "data-kind": section.kind,
28297
28265
  children: [
28298
- /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.conversationSectionHeader, children: [
28299
- isProjectSection ? /* @__PURE__ */ jsxs17(
28266
+ /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.conversationSectionHeader, children: [
28267
+ isProjectSection ? /* @__PURE__ */ jsxs18(
28300
28268
  "button",
28301
28269
  {
28302
28270
  type: "button",
@@ -28311,7 +28279,7 @@ var AgentGUIConversationRailSection = memo(
28311
28279
  className: AgentGUINode_styles_default.conversationSectionChevron
28312
28280
  }
28313
28281
  ),
28314
- /* @__PURE__ */ jsxs17("span", { className: AgentGUINode_styles_default.conversationSectionLabel, children: [
28282
+ /* @__PURE__ */ jsxs18("span", { className: AgentGUINode_styles_default.conversationSectionLabel, children: [
28315
28283
  isSectionCollapsed ? /* @__PURE__ */ jsx31(
28316
28284
  FolderIcon2,
28317
28285
  {
@@ -28330,7 +28298,7 @@ var AgentGUIConversationRailSection = memo(
28330
28298
  ]
28331
28299
  }
28332
28300
  ) : /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.conversationSectionToggle, children: /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.conversationSectionLabel, children: /* @__PURE__ */ jsx31("span", { children: section.label }) }) }),
28333
- canCreateConversationFromSection ? /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.conversationSectionActions, children: [
28301
+ canCreateConversationFromSection ? /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.conversationSectionActions, children: [
28334
28302
  previewMode ? /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: /* @__PURE__ */ jsx31(
28335
28303
  BareIconButton,
28336
28304
  {
@@ -28341,8 +28309,8 @@ var AgentGUIConversationRailSection = memo(
28341
28309
  onClick: handleCreateConversation,
28342
28310
  children: /* @__PURE__ */ jsx31(CreateChatIcon, { "aria-hidden": "true" })
28343
28311
  }
28344
- ) }) : /* @__PURE__ */ jsxs17(Tooltip3, { children: [
28345
- /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx31(
28312
+ ) }) : /* @__PURE__ */ jsxs18(Tooltip4, { children: [
28313
+ /* @__PURE__ */ jsx31(TooltipTrigger4, { asChild: true, children: /* @__PURE__ */ jsx31(
28346
28314
  "span",
28347
28315
  {
28348
28316
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
@@ -28360,7 +28328,7 @@ var AgentGUIConversationRailSection = memo(
28360
28328
  }
28361
28329
  ) }),
28362
28330
  /* @__PURE__ */ jsx31(
28363
- TooltipContent3,
28331
+ TooltipContent4,
28364
28332
  {
28365
28333
  side: "top",
28366
28334
  sideOffset: 6,
@@ -28369,8 +28337,8 @@ var AgentGUIConversationRailSection = memo(
28369
28337
  }
28370
28338
  )
28371
28339
  ] }),
28372
- projectPath ? /* @__PURE__ */ jsxs17(DropdownMenu, { children: [
28373
- 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(
28374
28342
  "span",
28375
28343
  {
28376
28344
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
@@ -28384,8 +28352,8 @@ var AgentGUIConversationRailSection = memo(
28384
28352
  }
28385
28353
  )
28386
28354
  }
28387
- ) }) : /* @__PURE__ */ jsxs17(Tooltip3, { children: [
28388
- /* @__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(
28389
28357
  "span",
28390
28358
  {
28391
28359
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
@@ -28401,7 +28369,7 @@ var AgentGUIConversationRailSection = memo(
28401
28369
  }
28402
28370
  ) }) }),
28403
28371
  /* @__PURE__ */ jsx31(
28404
- TooltipContent3,
28372
+ TooltipContent4,
28405
28373
  {
28406
28374
  side: "right",
28407
28375
  sideOffset: 6,
@@ -28410,15 +28378,15 @@ var AgentGUIConversationRailSection = memo(
28410
28378
  }
28411
28379
  )
28412
28380
  ] }),
28413
- /* @__PURE__ */ jsxs17(
28414
- DropdownMenuContent,
28381
+ /* @__PURE__ */ jsxs18(
28382
+ DropdownMenuContent4,
28415
28383
  {
28416
28384
  align: "end",
28417
28385
  className: `${AgentGUINode_styles_default.composerMenuContent} nodrag [-webkit-app-region:no-drag]`,
28418
28386
  sideOffset: 6,
28419
28387
  children: [
28420
28388
  /* @__PURE__ */ jsx31(
28421
- DropdownMenuItem,
28389
+ DropdownMenuItem3,
28422
28390
  {
28423
28391
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
28424
28392
  disabled: !onOpenProjectFiles,
@@ -28436,7 +28404,7 @@ var AgentGUIConversationRailSection = memo(
28436
28404
  }
28437
28405
  ),
28438
28406
  projectConversationCount > 0 ? /* @__PURE__ */ jsx31(
28439
- DropdownMenuItem,
28407
+ DropdownMenuItem3,
28440
28408
  {
28441
28409
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
28442
28410
  onSelect: () => {
@@ -28452,7 +28420,7 @@ var AgentGUIConversationRailSection = memo(
28452
28420
  }
28453
28421
  ) : null,
28454
28422
  /* @__PURE__ */ jsx31(
28455
- DropdownMenuItem,
28423
+ DropdownMenuItem3,
28456
28424
  {
28457
28425
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
28458
28426
  onSelect: () => {
@@ -28470,8 +28438,8 @@ var AgentGUIConversationRailSection = memo(
28470
28438
  }
28471
28439
  )
28472
28440
  ] }) : null,
28473
- !projectPath && section.kind === "conversations" && section.items.length > 0 ? /* @__PURE__ */ jsxs17(DropdownMenu, { children: [
28474
- 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(
28475
28443
  "span",
28476
28444
  {
28477
28445
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
@@ -28485,8 +28453,8 @@ var AgentGUIConversationRailSection = memo(
28485
28453
  }
28486
28454
  )
28487
28455
  }
28488
- ) }) : /* @__PURE__ */ jsxs17(Tooltip3, { children: [
28489
- /* @__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(
28490
28458
  "span",
28491
28459
  {
28492
28460
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
@@ -28502,7 +28470,7 @@ var AgentGUIConversationRailSection = memo(
28502
28470
  }
28503
28471
  ) }) }),
28504
28472
  /* @__PURE__ */ jsx31(
28505
- TooltipContent3,
28473
+ TooltipContent4,
28506
28474
  {
28507
28475
  side: "right",
28508
28476
  sideOffset: 6,
@@ -28512,13 +28480,13 @@ var AgentGUIConversationRailSection = memo(
28512
28480
  )
28513
28481
  ] }),
28514
28482
  /* @__PURE__ */ jsx31(
28515
- DropdownMenuContent,
28483
+ DropdownMenuContent4,
28516
28484
  {
28517
28485
  align: "end",
28518
28486
  className: `${AgentGUINode_styles_default.composerMenuContent} nodrag [-webkit-app-region:no-drag]`,
28519
28487
  sideOffset: 6,
28520
28488
  children: /* @__PURE__ */ jsx31(
28521
- DropdownMenuItem,
28489
+ DropdownMenuItem3,
28522
28490
  {
28523
28491
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
28524
28492
  onSelect: () => {
@@ -28542,7 +28510,7 @@ var AgentGUIConversationRailSection = memo(
28542
28510
  {
28543
28511
  className: AgentGUINode_styles_default.conversationSectionItems,
28544
28512
  "aria-hidden": isSectionCollapsed ? "true" : void 0,
28545
- children: /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.conversationSectionItemsInner, children: [
28513
+ children: /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.conversationSectionItemsInner, children: [
28546
28514
  !isSectionCollapsed && section.items.length === 0 ? /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.conversationSectionEmpty, children: labels.emptyProjectConversations }) : null,
28547
28515
  visibleItems.map((item) => /* @__PURE__ */ jsx31(
28548
28516
  AgentGUIConversationRailItem,
@@ -28565,7 +28533,7 @@ var AgentGUIConversationRailSection = memo(
28565
28533
  },
28566
28534
  item.id
28567
28535
  )),
28568
- canShowMore || canShowLess ? /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.conversationSectionPagination, children: [
28536
+ canShowMore || canShowLess ? /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.conversationSectionPagination, children: [
28569
28537
  canShowMore ? /* @__PURE__ */ jsx31(
28570
28538
  "button",
28571
28539
  {
@@ -28638,7 +28606,7 @@ var AgentGUIConversationRailItem = memo(
28638
28606
  const handleRequestDelete = useCallback10(() => {
28639
28607
  onRequestDeleteConversation(item.id);
28640
28608
  }, [item.id, onRequestDeleteConversation]);
28641
- return /* @__PURE__ */ jsxs17(
28609
+ return /* @__PURE__ */ jsxs18(
28642
28610
  "div",
28643
28611
  {
28644
28612
  ref: setItemElement,
@@ -28649,14 +28617,14 @@ var AgentGUIConversationRailItem = memo(
28649
28617
  "data-testid": `agent-gui-conversation-item-${item.id}`,
28650
28618
  onMouseLeave: handleMouseLeave,
28651
28619
  children: [
28652
- /* @__PURE__ */ jsxs17(
28620
+ /* @__PURE__ */ jsxs18(
28653
28621
  "button",
28654
28622
  {
28655
28623
  type: "button",
28656
28624
  className: AgentGUINode_styles_default.conversationSelect,
28657
28625
  onClick: handleSelect,
28658
28626
  children: [
28659
- /* @__PURE__ */ jsxs17("span", { className: AgentGUINode_styles_default.conversationTitleRow, children: [
28627
+ /* @__PURE__ */ jsxs18("span", { className: AgentGUINode_styles_default.conversationTitleRow, children: [
28660
28628
  providerIconUrl ? /* @__PURE__ */ jsx31(
28661
28629
  "span",
28662
28630
  {
@@ -28687,7 +28655,7 @@ var AgentGUIConversationRailItem = memo(
28687
28655
  },
28688
28656
  children: /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.conversationDeleteConfirmText, children: labels.deleteSessionConfirm })
28689
28657
  }
28690
- ) : /* @__PURE__ */ jsxs17(Fragment9, { children: [
28658
+ ) : /* @__PURE__ */ jsxs18(Fragment9, { children: [
28691
28659
  onOpenConversationWindow ? /* @__PURE__ */ jsx31(
28692
28660
  BareIconButton,
28693
28661
  {
@@ -28772,9 +28740,9 @@ function AgentGUIProjectRailHeader({
28772
28740
  selectProjectDirectory
28773
28741
  ]
28774
28742
  );
28775
- return /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.projectRailHeader, children: [
28743
+ return /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.projectRailHeader, children: [
28776
28744
  /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.projectRailTitle, children: /* @__PURE__ */ jsx31("span", { children: workspaceUserProjectI18n.tFirst(["projectSelect.projectLabel"]) }) }),
28777
- /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.projectRailAddProject, children: [
28745
+ /* @__PURE__ */ jsxs18("div", { className: AgentGUINode_styles_default.projectRailAddProject, children: [
28778
28746
  /* @__PURE__ */ jsx31(
28779
28747
  WorkspaceUserProjectSelect2,
28780
28748
  {
@@ -28848,7 +28816,7 @@ var AgentGUIConversationTimelinePane = memo(
28848
28816
  labels
28849
28817
  }) {
28850
28818
  "use memo";
28851
- return /* @__PURE__ */ jsxs17(Fragment9, { children: [
28819
+ return /* @__PURE__ */ jsxs18(Fragment9, { children: [
28852
28820
  isLoadingOlderMessages && !isLoading ? /* @__PURE__ */ jsx31(
28853
28821
  "div",
28854
28822
  {
@@ -29069,7 +29037,7 @@ import {
29069
29037
  useState as useState13
29070
29038
  } from "react";
29071
29039
  import { createPortal as createPortal4 } from "react-dom";
29072
- import { Fragment as Fragment10, jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
29040
+ import { Fragment as Fragment10, jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
29073
29041
  var POPOVER_MIN_VIEWPORT_INSET_PX = 16;
29074
29042
  var POPOVER_DEFAULT_WIDTH_PX = 260;
29075
29043
  function dockAgentProbeLineKey(line) {
@@ -29079,9 +29047,9 @@ function renderDockAgentProbeLine(line) {
29079
29047
  if (typeof line === "string") {
29080
29048
  return line;
29081
29049
  }
29082
- return /* @__PURE__ */ jsxs18(Fragment10, { children: [
29050
+ return /* @__PURE__ */ jsxs19(Fragment10, { children: [
29083
29051
  line.primary,
29084
- line.secondary ? /* @__PURE__ */ jsxs18(Fragment10, { children: [
29052
+ line.secondary ? /* @__PURE__ */ jsxs19(Fragment10, { children: [
29085
29053
  " ",
29086
29054
  /* @__PURE__ */ jsx32("span", { className: "desktop-dock-popup__agent-status-secondary", children: line.secondary })
29087
29055
  ] }) : null
@@ -29179,7 +29147,7 @@ function AgentProbeInfoPopover({
29179
29147
  children: /* @__PURE__ */ jsx32("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
29180
29148
  const label = getDockAgentProbeLineLabel(line);
29181
29149
  const valueText = formatDockAgentProbeLineText(line);
29182
- return /* @__PURE__ */ jsxs18(
29150
+ return /* @__PURE__ */ jsxs19(
29183
29151
  "li",
29184
29152
  {
29185
29153
  className: "desktop-dock-popup__agent-info-item",
@@ -29201,7 +29169,7 @@ function AgentProbeInfoPopover({
29201
29169
  }) })
29202
29170
  }
29203
29171
  );
29204
- return /* @__PURE__ */ jsxs18(
29172
+ return /* @__PURE__ */ jsxs19(
29205
29173
  "div",
29206
29174
  {
29207
29175
  ref: anchorRef,
@@ -29374,7 +29342,7 @@ function getAgentHostManagedToolchainAgentByName(name) {
29374
29342
  }
29375
29343
 
29376
29344
  // agent-gui/agentGuiNode/AgentGUINode.tsx
29377
- import { jsx as jsx33, jsxs as jsxs19 } from "react/jsx-runtime";
29345
+ import { jsx as jsx33, jsxs as jsxs20 } from "react/jsx-runtime";
29378
29346
  var workspaceFileReferenceLocaleKeyByPickerKey = {
29379
29347
  "actions.cancel": "common.cancel",
29380
29348
  "referencePicker.confirm": "agentHost.agentGui.referencePicker.confirm",
@@ -29603,7 +29571,7 @@ function composerOverridesByAgentTargetIdEqual(left, right) {
29603
29571
  return true;
29604
29572
  }
29605
29573
  function areAgentGUINodePropsEqual(previous, next) {
29606
- 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.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;
29607
29575
  }
29608
29576
  var AgentGUINode = memo2(function AgentGUINode2({
29609
29577
  nodeId,
@@ -29632,6 +29600,9 @@ var AgentGUINode = memo2(function AgentGUINode2({
29632
29600
  onAgentProviderLogin,
29633
29601
  providerTargets,
29634
29602
  providerTargetsLoading = false,
29603
+ providerRailMode = "catalog",
29604
+ renderProviderRailEmpty,
29605
+ renderSidebarFooter,
29635
29606
  comingSoonProviders,
29636
29607
  providerReadinessGates = null,
29637
29608
  defaultProviderTargetId = null,
@@ -29795,6 +29766,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
29795
29766
  prefillPromptRequest,
29796
29767
  providerTargets,
29797
29768
  providerTargetsLoading,
29769
+ providerRailMode,
29798
29770
  comingSoonProviders,
29799
29771
  providerReadinessGates,
29800
29772
  defaultProviderTargetId,
@@ -30051,6 +30023,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
30051
30023
  conversations: t("agentHost.agentGui.conversations"),
30052
30024
  newConversation: t("agentHost.agentGui.newConversation"),
30053
30025
  agentConfig: t("agentHost.agentGui.agentConfig"),
30026
+ agentSettingsMenu: t("agentHost.agentGui.agentSettingsMenu"),
30054
30027
  agentEnvSetup: t("agentHost.agentGui.agentEnvSetup"),
30055
30028
  noConversations: t("agentHost.agentGui.noConversations"),
30056
30029
  emptyProjectConversations: t(
@@ -30542,7 +30515,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
30542
30515
  className: "size-full bg-transparent",
30543
30516
  bodyClassName: `${AgentGUINode_styles_default.shell} nodrag size-full min-h-0 min-w-0 !bg-transparent p-0`,
30544
30517
  hideHeader: embedded,
30545
- titleAccessory: /* @__PURE__ */ jsxs19("span", { className: "inline-flex flex-none items-center gap-1", children: [
30518
+ titleAccessory: /* @__PURE__ */ jsxs20("span", { className: "inline-flex flex-none items-center gap-1", children: [
30546
30519
  /* @__PURE__ */ jsx33(
30547
30520
  AgentProbeInfoPopover,
30548
30521
  {
@@ -30589,6 +30562,8 @@ var AgentGUINode = memo2(function AgentGUINode2({
30589
30562
  AgentGUINodeView,
30590
30563
  {
30591
30564
  viewModel,
30565
+ renderSidebarFooter,
30566
+ renderProviderRailEmpty,
30592
30567
  actions: viewActions,
30593
30568
  isActive,
30594
30569
  composerFocusRequestSequence,
@@ -30658,7 +30633,7 @@ var AgentGUI = memo3(function AgentGUI2({
30658
30633
  children: /* @__PURE__ */ jsx34(AgentQueuedPromptRuntimeProvider, { runtime: agentQueuedPromptRuntime, children: /* @__PURE__ */ jsx34(AgentGUINode, { ...props }) })
30659
30634
  }
30660
30635
  ) });
30661
- 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 });
30662
30637
  });
30663
30638
 
30664
30639
  // index.ts
@@ -30683,6 +30658,7 @@ export {
30683
30658
  createAgentQueuedPromptRuntime,
30684
30659
  createLocalAgentGUIProviderTarget,
30685
30660
  createLocalAgentGUIProviderTargets,
30661
+ createSharedAgentGUIProviderTarget,
30686
30662
  getAgentActivityRuntime,
30687
30663
  getAgentCustomMentionKind,
30688
30664
  getOptionalAgentActivityRuntime,