@tutti-os/agent-gui 0.0.159 → 0.0.160

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 (47) hide show
  1. package/dist/{AgentRichTextReadonly-ZGW4IZ6O.js → AgentRichTextReadonly-PNUSXHOQ.js} +5 -5
  2. package/dist/agent-conversation/index.js +7 -7
  3. package/dist/agent-gui.d.ts +1 -0
  4. package/dist/agent-gui.js +14 -14
  5. package/dist/agent-message-center/index.js +6 -6
  6. package/dist/app/renderer/agentactivity.css +14 -2
  7. package/dist/{chunk-YRAKPTXS.js → chunk-2DGFRQEP.js} +3 -3
  8. package/dist/{chunk-YUJY75WA.js → chunk-52ANPJET.js} +3 -3
  9. package/dist/{chunk-PAVNEKRU.js → chunk-7ED6E444.js} +4 -4
  10. package/dist/{chunk-CBQMF744.js → chunk-C4Z4JLOJ.js} +2 -2
  11. package/dist/{chunk-EITAGUEN.js → chunk-DFQMEPM7.js} +2 -2
  12. package/dist/{chunk-GTSKTVVB.js → chunk-DSOWEIVN.js} +2 -2
  13. package/dist/{chunk-55UKPTLG.js → chunk-GUGOTL55.js} +4 -4
  14. package/dist/{chunk-YGBZKQ2S.js → chunk-HGMOBQKA.js} +2 -2
  15. package/dist/{chunk-UMJIM225.js → chunk-HP4RM2SM.js} +335 -253
  16. package/dist/chunk-HP4RM2SM.js.map +1 -0
  17. package/dist/{chunk-DB3PHOZC.js → chunk-ILSYNGFJ.js} +99 -77
  18. package/dist/chunk-ILSYNGFJ.js.map +1 -0
  19. package/dist/{chunk-3PSYZ53C.js → chunk-MOC5TDZU.js} +4 -4
  20. package/dist/{chunk-ABUBJDTO.js → chunk-QHSWRS4L.js} +6 -6
  21. package/dist/{chunk-VVB5N5ON.js → chunk-W5U7PGMH.js} +2 -2
  22. package/dist/{chunk-J4QLQETO.js → chunk-ZJWX36UL.js} +2 -2
  23. package/dist/context-mention-palette/index.js +7 -7
  24. package/dist/i18n/index.d.ts +220 -208
  25. package/dist/i18n/index.js +2 -2
  26. package/dist/index.d.ts +221 -208
  27. package/dist/index.js +14 -14
  28. package/dist/mention-search.js +5 -5
  29. package/dist/workbench/contribution.js +3 -3
  30. package/dist/workbench/index.js +3 -3
  31. package/dist/workbench/sessionTitle.js +2 -2
  32. package/package.json +13 -13
  33. package/dist/chunk-DB3PHOZC.js.map +0 -1
  34. package/dist/chunk-UMJIM225.js.map +0 -1
  35. /package/dist/{AgentRichTextReadonly-ZGW4IZ6O.js.map → AgentRichTextReadonly-PNUSXHOQ.js.map} +0 -0
  36. /package/dist/{chunk-YRAKPTXS.js.map → chunk-2DGFRQEP.js.map} +0 -0
  37. /package/dist/{chunk-YUJY75WA.js.map → chunk-52ANPJET.js.map} +0 -0
  38. /package/dist/{chunk-PAVNEKRU.js.map → chunk-7ED6E444.js.map} +0 -0
  39. /package/dist/{chunk-CBQMF744.js.map → chunk-C4Z4JLOJ.js.map} +0 -0
  40. /package/dist/{chunk-EITAGUEN.js.map → chunk-DFQMEPM7.js.map} +0 -0
  41. /package/dist/{chunk-GTSKTVVB.js.map → chunk-DSOWEIVN.js.map} +0 -0
  42. /package/dist/{chunk-55UKPTLG.js.map → chunk-GUGOTL55.js.map} +0 -0
  43. /package/dist/{chunk-YGBZKQ2S.js.map → chunk-HGMOBQKA.js.map} +0 -0
  44. /package/dist/{chunk-3PSYZ53C.js.map → chunk-MOC5TDZU.js.map} +0 -0
  45. /package/dist/{chunk-ABUBJDTO.js.map → chunk-QHSWRS4L.js.map} +0 -0
  46. /package/dist/{chunk-VVB5N5ON.js.map → chunk-W5U7PGMH.js.map} +0 -0
  47. /package/dist/{chunk-J4QLQETO.js.map → chunk-ZJWX36UL.js.map} +0 -0
@@ -12,7 +12,7 @@ import {
12
12
  resolveAgentGuiSessionProviderFlatIconUrl,
13
13
  resolveNextAgentGUIConversationRailWidthPx,
14
14
  shouldAutoCollapseAgentGUIConversationRail
15
- } from "./chunk-YRAKPTXS.js";
15
+ } from "./chunk-2DGFRQEP.js";
16
16
  import {
17
17
  resolveAgentGuiWorkbenchProviderLabel
18
18
  } from "./chunk-SZVHT57M.js";
@@ -31,7 +31,7 @@ import {
31
31
  resolveAgentGUIFirstUserMessageDisplayPrompt,
32
32
  resolveAgentGUIProviderDisplayLabel,
33
33
  resolveAgentGUIProviderIdentity
34
- } from "./chunk-YGBZKQ2S.js";
34
+ } from "./chunk-HGMOBQKA.js";
35
35
  import {
36
36
  AgentConversationFlow,
37
37
  Button,
@@ -65,7 +65,7 @@ import {
65
65
  toLocalShortDateTime,
66
66
  updateAgentComposerDraft,
67
67
  useProjectedAgentConversation
68
- } from "./chunk-ABUBJDTO.js";
68
+ } from "./chunk-QHSWRS4L.js";
69
69
  import {
70
70
  agentRichTextContentToPromptText,
71
71
  createAgentRichTextInputExtensions,
@@ -75,7 +75,7 @@ import {
75
75
  plainTextToAgentRichTextInlineContent,
76
76
  skillDescriptionForDisplay,
77
77
  skillTriggerForPrefix
78
- } from "./chunk-CBQMF744.js";
78
+ } from "./chunk-C4Z4JLOJ.js";
79
79
  import {
80
80
  AgentEnvPanelActionProvider
81
81
  } from "./chunk-THBCAUBR.js";
@@ -90,7 +90,7 @@ import {
90
90
  AgentFileMentionPalette,
91
91
  agentMentionItemKey,
92
92
  isAgentMentionItemDisabled
93
- } from "./chunk-PAVNEKRU.js";
93
+ } from "./chunk-7ED6E444.js";
94
94
  import {
95
95
  normalizeAgentGUIAgents,
96
96
  projectAgentGUIAgentsToTargets
@@ -101,7 +101,7 @@ import {
101
101
  DEFAULT_AGENT_MENTION_FILTER,
102
102
  agentGuiScheduler,
103
103
  buildWorkspaceAgentActivityListViewModel
104
- } from "./chunk-3PSYZ53C.js";
104
+ } from "./chunk-MOC5TDZU.js";
105
105
  import {
106
106
  AGENT_RICH_TEXT_CARET_ANCHOR,
107
107
  agentComposerFileMentionReferences,
@@ -118,7 +118,7 @@ import {
118
118
  parseMentionItemFromHref,
119
119
  remainingAgentComposerPromptAssetSlots,
120
120
  updateAgentComposerFileMentions
121
- } from "./chunk-J4QLQETO.js";
121
+ } from "./chunk-ZJWX36UL.js";
122
122
  import {
123
123
  AgentInteractivePromptSurface,
124
124
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
@@ -128,7 +128,7 @@ import {
128
128
  dispatchAgentPlanPromptAction,
129
129
  latestPlanTurnId,
130
130
  planImplementationPromptFromPlanTurn
131
- } from "./chunk-55UKPTLG.js";
131
+ } from "./chunk-GUGOTL55.js";
132
132
  import {
133
133
  useEngineSelector
134
134
  } from "./chunk-2RQM7PJN.js";
@@ -138,7 +138,7 @@ import {
138
138
  blobToBase64,
139
139
  normalizeAgentApprovalPurpose,
140
140
  resolveWorkspaceLinkAction
141
- } from "./chunk-YUJY75WA.js";
141
+ } from "./chunk-52ANPJET.js";
142
142
  import {
143
143
  AgentTargetPresentationProvider,
144
144
  cn,
@@ -156,7 +156,7 @@ import {
156
156
  useAgentHostApi,
157
157
  useOptionalAgentActivityRuntime,
158
158
  useOptionalAgentHostApi
159
- } from "./chunk-VVB5N5ON.js";
159
+ } from "./chunk-W5U7PGMH.js";
160
160
  import {
161
161
  MANAGED_AGENT_ICON_FALLBACK_URL,
162
162
  MANAGED_AGENT_ICON_URLS,
@@ -166,7 +166,7 @@ import {
166
166
  AgentGuiI18nProvider,
167
167
  translate,
168
168
  useTranslation
169
- } from "./chunk-EITAGUEN.js";
169
+ } from "./chunk-DFQMEPM7.js";
170
170
  import {
171
171
  isBetaAgentProvider,
172
172
  normalizeManagedAgentProvider
@@ -186,7 +186,7 @@ import { memo as memo15, useMemo as useMemo46 } from "react";
186
186
  import { TooltipProvider as TooltipProvider8 } from "@tutti-os/ui-system";
187
187
 
188
188
  // agent-gui/agentGuiNode/AgentGUINode.tsx
189
- import { memo as memo14, useCallback as useCallback62, useEffect as useEffect40, useMemo as useMemo45, useRef as useRef54 } from "react";
189
+ import { memo as memo14, useCallback as useCallback62, useEffect as useEffect40, useMemo as useMemo45, useRef as useRef55 } from "react";
190
190
  import { createWorkspaceUserProjectI18nRuntime } from "@tutti-os/workspace-user-project/i18n";
191
191
  import { createWorkspaceFileManagerI18nRuntime } from "@tutti-os/workspace-file-manager";
192
192
  import { useReferenceProvenanceFilterCatalog } from "@tutti-os/workspace-file-reference/react";
@@ -2041,7 +2041,7 @@ import {
2041
2041
  selectEngineSessionIsRespondingToInteraction as selectEngineSessionIsRespondingToInteraction2,
2042
2042
  selectWorkspaceAgentConsumerSessions as selectWorkspaceAgentConsumerSessions2
2043
2043
  } from "@tutti-os/agent-activity-core";
2044
- import { useCallback as useCallback27, useEffect as useEffect13, useMemo as useMemo18, useRef as useRef19 } from "react";
2044
+ import { useCallback as useCallback27, useEffect as useEffect13, useMemo as useMemo18, useRef as useRef20 } from "react";
2045
2045
 
2046
2046
  // host/agentHostAccountStore.ts
2047
2047
  import { create as create2 } from "zustand";
@@ -6233,11 +6233,16 @@ import {
6233
6233
  selectEngineSessionDetailHydrated,
6234
6234
  selectLatestActivationForSession as selectLatestActivationForSession3
6235
6235
  } from "@tutti-os/agent-activity-core";
6236
- import { useCallback as useCallback7, useEffect as useEffect4 } from "react";
6236
+ import { useCallback as useCallback7, useEffect as useEffect4, useRef as useRef7 } from "react";
6237
6237
  function clearFailedAgentGUIActivationSelection(current, failedAgentSessionId) {
6238
6238
  const normalized = failedAgentSessionId.trim();
6239
6239
  return normalized ? forgetAgentGUISessionMemories(current, /* @__PURE__ */ new Set([normalized])) : current;
6240
6240
  }
6241
+ function shouldMarkActiveConversationRead(input) {
6242
+ const { activeConversationId, previousActiveConversationId, record } = input;
6243
+ if (!record?.isUnread) return false;
6244
+ return !record.markedUnreadByUser || previousActiveConversationId !== activeConversationId;
6245
+ }
6241
6246
  function useAgentGUIConversationSelectionController(input) {
6242
6247
  const {
6243
6248
  activation,
@@ -6270,6 +6275,7 @@ function useAgentGUIConversationSelectionController(input) {
6270
6275
  transientConversation,
6271
6276
  workspaceId
6272
6277
  } = input;
6278
+ const previousAttentionActiveConversationIdRef = useRef7(null);
6273
6279
  useEffect4(() => {
6274
6280
  const userId = currentUserId?.trim() ?? "";
6275
6281
  const normalizedWorkspaceId = workspaceId.trim();
@@ -6300,10 +6306,20 @@ function useAgentGUIConversationSelectionController(input) {
6300
6306
  activePendingActivation.errorMessage || translate("agentHost.agentGui.sessionActivationFailed")
6301
6307
  );
6302
6308
  }
6309
+ previousAttentionActiveConversationIdRef.current = null;
6310
+ return;
6311
+ }
6312
+ if (!activeConversationId) {
6313
+ previousAttentionActiveConversationIdRef.current = null;
6303
6314
  return;
6304
6315
  }
6305
- if (!activeConversationId) return;
6306
- if (attentionReadRecordsBySessionId[activeConversationId]?.isUnread) {
6316
+ const previousActiveConversationId = previousAttentionActiveConversationIdRef.current;
6317
+ previousAttentionActiveConversationIdRef.current = activeConversationId;
6318
+ if (shouldMarkActiveConversationRead({
6319
+ activeConversationId,
6320
+ previousActiveConversationId,
6321
+ record: attentionReadRecordsBySessionId[activeConversationId]
6322
+ })) {
6307
6323
  sessionEngine.dispatch({
6308
6324
  type: "attention/read",
6309
6325
  agentSessionId: activeConversationId,
@@ -6480,7 +6496,7 @@ function useAgentGUIConversationSelectionController(input) {
6480
6496
  import {
6481
6497
  selectAttentionReadState
6482
6498
  } from "@tutti-os/agent-activity-core";
6483
- import { useMemo as useMemo6, useRef as useRef7, useState as useState3 } from "react";
6499
+ import { useMemo as useMemo6, useRef as useRef8, useState as useState3 } from "react";
6484
6500
 
6485
6501
  // contexts/workspace/presentation/renderer/agentGuiConversationList/useAgentGuiConversationList.ts
6486
6502
  import { useMemo as useMemo5 } from "react";
@@ -6752,7 +6768,7 @@ function useAgentGUIConversationListState({
6752
6768
  const [conversationFilter, setConversationFilter] = useState3(
6753
6769
  () => createAgentGUIConversationFilterState().filter
6754
6770
  );
6755
- const conversationFilterRef = useRef7(conversationFilter);
6771
+ const conversationFilterRef = useRef8(conversationFilter);
6756
6772
  conversationFilterRef.current = conversationFilter;
6757
6773
  const conversationListQuery = useMemo6(() => {
6758
6774
  const userId = currentUserId?.trim() ?? "";
@@ -7027,7 +7043,7 @@ function useAgentGUIComposerCapabilities(input) {
7027
7043
  import {
7028
7044
  selectLatestActivationForSession as selectLatestActivationForSession4
7029
7045
  } from "@tutti-os/agent-activity-core";
7030
- import { useCallback as useCallback8, useEffect as useEffect5, useRef as useRef8 } from "react";
7046
+ import { useCallback as useCallback8, useEffect as useEffect5, useRef as useRef9 } from "react";
7031
7047
 
7032
7048
  // host/agentHostEventBus.ts
7033
7049
  var LOG_PREFIX = "[agent-host-event-bus]";
@@ -7189,8 +7205,8 @@ function subscribeCoalesced(type, options, callback) {
7189
7205
 
7190
7206
  // agent-gui/agentGuiNode/controller/useAgentGUIComposerOptionsSync.ts
7191
7207
  function useAgentGUIComposerOptionsSync(input) {
7192
- const previousActiveConversationIdRef = useRef8(input.activeConversationId);
7193
- const previousIsCreatingConversationRef = useRef8(
7208
+ const previousActiveConversationIdRef = useRef9(input.activeConversationId);
7209
+ const previousIsCreatingConversationRef = useRef9(
7194
7210
  input.isCreatingConversation
7195
7211
  );
7196
7212
  const loadComposerOptionsForTarget = useCallback8(
@@ -7388,37 +7404,37 @@ function useAgentGUIComposerOptionsSync(input) {
7388
7404
  }
7389
7405
 
7390
7406
  // agent-gui/agentGuiNode/controller/useAgentGUIControllerRefs.ts
7391
- import { useRef as useRef9 } from "react";
7407
+ import { useRef as useRef10 } from "react";
7392
7408
  function useAgentGUIControllerRefs(input) {
7393
- const activeConversationIdRef = useRef9(input.activeConversationId);
7394
- const selectedProjectPathRef = useRef9(input.selectedProjectPath);
7395
- const userProjectsRef = useRef9(input.userProjects);
7396
- const isNoProjectPathRef = useRef9(input.isNoProjectPath);
7397
- const userProjectsLoadSeqRef = useRef9(0);
7398
- const conversationsRef = useRef9(input.conversations);
7399
- const isMountedRef = useRef9(true);
7400
- const agentActivitySnapshotRef = useRef9(input.agentActivitySnapshot);
7401
- const dataRef = useRef9(input.data);
7402
- const selectedAgentTargetRef = useRef9(input.effectiveSelectedProviderTarget);
7403
- const selectedAgentTargetIsExplicitRef = useRef9(
7409
+ const activeConversationIdRef = useRef10(input.activeConversationId);
7410
+ const selectedProjectPathRef = useRef10(input.selectedProjectPath);
7411
+ const userProjectsRef = useRef10(input.userProjects);
7412
+ const isNoProjectPathRef = useRef10(input.isNoProjectPath);
7413
+ const userProjectsLoadSeqRef = useRef10(0);
7414
+ const conversationsRef = useRef10(input.conversations);
7415
+ const isMountedRef = useRef10(true);
7416
+ const agentActivitySnapshotRef = useRef10(input.agentActivitySnapshot);
7417
+ const dataRef = useRef10(input.data);
7418
+ const selectedAgentTargetRef = useRef10(input.effectiveSelectedProviderTarget);
7419
+ const selectedAgentTargetIsExplicitRef = useRef10(
7404
7420
  input.homeComposerTargetOverride ? true : input.selectedAgentTargetIsExplicit
7405
7421
  );
7406
- const agentTargetsProvidedRef = useRef9(input.agentTargetsProvided);
7407
- const selectedComposerTargetDataRef = useRef9(
7422
+ const agentTargetsProvidedRef = useRef10(input.agentTargetsProvided);
7423
+ const selectedComposerTargetDataRef = useRef10(
7408
7424
  input.selectedComposerTargetData
7409
7425
  );
7410
- const draftByScopeKeyRef = useRef9(input.draftByScopeKey);
7411
- const draftSettingsBySessionIdRef = useRef9(input.draftSettingsBySessionId);
7412
- const onDataChangeRef = useRef9(input.onDataChange);
7413
- const onRememberComposerDefaultsRef = useRef9(
7426
+ const draftByScopeKeyRef = useRef10(input.draftByScopeKey);
7427
+ const draftSettingsBySessionIdRef = useRef10(input.draftSettingsBySessionId);
7428
+ const onDataChangeRef = useRef10(input.onDataChange);
7429
+ const onRememberComposerDefaultsRef = useRef10(
7414
7430
  input.onRememberComposerDefaults
7415
7431
  );
7416
- const onShowMessageRef = useRef9(input.onShowMessage);
7417
- const handledPrefillPromptSequenceRef = useRef9(null);
7418
- const handledComposerAppendSequenceRef = useRef9(null);
7419
- const loadDraftComposerOptionsRef = useRef9(() => {
7432
+ const onShowMessageRef = useRef10(input.onShowMessage);
7433
+ const handledPrefillPromptSequenceRef = useRef10(null);
7434
+ const handledComposerAppendSequenceRef = useRef10(null);
7435
+ const loadDraftComposerOptionsRef = useRef10(() => {
7420
7436
  });
7421
- const onComposerDefaultsAuthorityReloadedRef = useRef9({
7437
+ const onComposerDefaultsAuthorityReloadedRef = useRef10({
7422
7438
  prepareRead: (_target, settings) => ({
7423
7439
  force: false,
7424
7440
  receipt: null,
@@ -7427,22 +7443,22 @@ function useAgentGUIControllerRefs(input) {
7427
7443
  reloaded: () => {
7428
7444
  }
7429
7445
  });
7430
- const conversationIdsRef = useRef9(
7446
+ const conversationIdsRef = useRef10(
7431
7447
  new Set(input.conversations.map((conversation) => conversation.id))
7432
7448
  );
7433
- const lastRenderStateDiagnosticKeyRef = useRef9(null);
7434
- const handledOpenSessionSequenceRef = useRef9(null);
7435
- const pendingOpenSessionRequestRef = useRef9(null);
7436
- const executePromptRef = useRef9(() => {
7449
+ const lastRenderStateDiagnosticKeyRef = useRef10(null);
7450
+ const handledOpenSessionSequenceRef = useRef10(null);
7451
+ const pendingOpenSessionRequestRef = useRef10(null);
7452
+ const executePromptRef = useRef10(() => {
7437
7453
  });
7438
- const submitPromptRef = useRef9(() => {
7454
+ const submitPromptRef = useRef10(() => {
7439
7455
  });
7440
- const reloadSelectedConversationRef = useRef9(() => {
7456
+ const reloadSelectedConversationRef = useRef10(() => {
7441
7457
  });
7442
- const syncConversationListProjectionRef = useRef9(async () => {
7458
+ const syncConversationListProjectionRef = useRef10(async () => {
7443
7459
  });
7444
- const isComposerHomeRef = useRef9(input.isComposerHome);
7445
- const isCreatingConversationRef = useRef9(input.isCreatingConversation);
7460
+ const isComposerHomeRef = useRef10(input.isComposerHome);
7461
+ const isCreatingConversationRef = useRef10(input.isCreatingConversation);
7446
7462
  activeConversationIdRef.current = input.activeConversationId;
7447
7463
  selectedProjectPathRef.current = input.selectedProjectPath;
7448
7464
  userProjectsRef.current = input.userProjects;
@@ -7509,7 +7525,7 @@ import {
7509
7525
  selectEngineSession as selectEngineSession2,
7510
7526
  selectEngineSessionSettingsUpdate
7511
7527
  } from "@tutti-os/agent-activity-core";
7512
- import { useCallback as useCallback9, useRef as useRef10 } from "react";
7528
+ import { useCallback as useCallback9, useRef as useRef11 } from "react";
7513
7529
 
7514
7530
  // agent-gui/agentGuiNode/model/composerModeSelection.ts
7515
7531
  function normalizePermissionModeSelection(permissionModeId) {
@@ -7647,7 +7663,7 @@ function useAgentGUIComposerSettingsActions(input) {
7647
7663
  const composerSupport = {
7648
7664
  permissionModeChangeDeferred: input.composerSupportPermissionModeChangeDeferred
7649
7665
  };
7650
- const composerDefaultsLedgerRef = useRef10(
7666
+ const composerDefaultsLedgerRef = useRef11(
7651
7667
  createAgentGUIComposerDefaultsLedger()
7652
7668
  );
7653
7669
  const retireAcknowledgedDefaultsForRead = useCallback9(
@@ -7932,12 +7948,12 @@ function reconcileRetiredDraftMap(current, draftKey, retired) {
7932
7948
  }
7933
7949
 
7934
7950
  // agent-gui/agentGuiNode/controller/useAgentGUIContinueConversation.ts
7935
- import { useCallback as useCallback10, useRef as useRef11 } from "react";
7951
+ import { useCallback as useCallback10, useRef as useRef12 } from "react";
7936
7952
  function buildContinueInNewConversationDraft(input) {
7937
7953
  return updateAgentComposerDraft(input.sourceDraft, { prompt: input.prompt });
7938
7954
  }
7939
7955
  function useAgentGUIContinueConversation(input) {
7940
- const inputRef = useRef11(input);
7956
+ const inputRef = useRef12(input);
7941
7957
  inputRef.current = input;
7942
7958
  return useCallback10(() => {
7943
7959
  const current = inputRef.current;
@@ -9220,7 +9236,7 @@ function resolveAgentGUIInteractionTarget(interactions, requestId) {
9220
9236
  import {
9221
9237
  selectEngineSession as selectEngineSession3
9222
9238
  } from "@tutti-os/agent-activity-core";
9223
- import { useCallback as useCallback18, useRef as useRef12 } from "react";
9239
+ import { useCallback as useCallback18, useRef as useRef13 } from "react";
9224
9240
 
9225
9241
  // agent-gui/agentGuiNode/controller/agentGuiOptimisticGoal.ts
9226
9242
  function projectOptimisticGoalControl(currentGoal, action, objective) {
@@ -9259,7 +9275,7 @@ function unresolvedOptimisticGoalControl(optimisticGoalControl, agentSessionId,
9259
9275
 
9260
9276
  // agent-gui/agentGuiNode/controller/useAgentGUIGoalControlActions.ts
9261
9277
  function useAgentGUIGoalControlActions(input) {
9262
- const requestSequenceRef = useRef12(0);
9278
+ const requestSequenceRef = useRef13(0);
9263
9279
  const beginOptimisticGoalControl = useCallback18(
9264
9280
  (agentSessionId, action, objective, requestId, reconcileOnObjectiveMatch = false) => {
9265
9281
  const canonicalSession = selectEngineSession3(
@@ -10884,9 +10900,9 @@ import {
10884
10900
  selectEngineAvailableCommands,
10885
10901
  selectEngineTurnsForSession
10886
10902
  } from "@tutti-os/agent-activity-core";
10887
- import { useEffect as useEffect8, useMemo as useMemo11, useRef as useRef13 } from "react";
10903
+ import { useEffect as useEffect8, useMemo as useMemo11, useRef as useRef14 } from "react";
10888
10904
  function useAgentGUIConversationDetail(input) {
10889
- const projectionConversationRef = useRef13(null);
10905
+ const projectionConversationRef = useRef14(null);
10890
10906
  const activeCanonicalLiveTurn = Boolean(
10891
10907
  input.activeTurn && input.activeTurn.phase !== "settled"
10892
10908
  );
@@ -10976,7 +10992,7 @@ function useAgentGUIConversationDetail(input) {
10976
10992
  }
10977
10993
  return conversationModels.conversation;
10978
10994
  }, [conversationDetail, conversationModels.conversation]);
10979
- const diagnosticKeyRef = useRef13(null);
10995
+ const diagnosticKeyRef = useRef14(null);
10980
10996
  useEffect8(() => {
10981
10997
  if (!input.activeConversationId || !conversation) {
10982
10998
  diagnosticKeyRef.current = null;
@@ -11065,9 +11081,9 @@ function useAgentGUIConversationDetail(input) {
11065
11081
  }
11066
11082
 
11067
11083
  // agent-gui/agentGuiNode/controller/useAgentGUIConversationPresentation.ts
11068
- import { useEffect as useEffect9, useMemo as useMemo12, useRef as useRef14 } from "react";
11084
+ import { useEffect as useEffect9, useMemo as useMemo12, useRef as useRef15 } from "react";
11069
11085
  function useAgentGUIConversationPresentation(input) {
11070
- const visibleConversationsRef = useRef14(
11086
+ const visibleConversationsRef = useRef15(
11071
11087
  null
11072
11088
  );
11073
11089
  const conversationProjection = useMemo12(() => {
@@ -11098,7 +11114,7 @@ function useAgentGUIConversationPresentation(input) {
11098
11114
  input.userProjects
11099
11115
  ]);
11100
11116
  const visibleConversations = conversationProjection.visibleConversations;
11101
- const activeConversationRef = useRef14(
11117
+ const activeConversationRef = useRef15(
11102
11118
  null
11103
11119
  );
11104
11120
  const activeConversation = useMemo12(() => {
@@ -11249,14 +11265,14 @@ function useAgentGUIConversationPresentation(input) {
11249
11265
  import {
11250
11266
  useCallback as useCallback21,
11251
11267
  useEffect as useEffect10,
11252
- useRef as useRef15
11268
+ useRef as useRef16
11253
11269
  } from "react";
11254
11270
  import {
11255
11271
  selectEngineSession as selectEngineSession5,
11256
11272
  selectEngineSessionDeleted
11257
11273
  } from "@tutti-os/agent-activity-core";
11258
11274
  function useAgentGUIProviderHome(input) {
11259
- const inputRef = useRef15(input);
11275
+ const inputRef = useRef16(input);
11260
11276
  inputRef.current = input;
11261
11277
  const resolveDefaultHomeComposerTarget = useCallback21(() => {
11262
11278
  const current = inputRef.current;
@@ -12336,7 +12352,7 @@ import { useCallback as useCallback25, useMemo as useMemo17 } from "react";
12336
12352
  import { useCallback as useCallback24 } from "react";
12337
12353
 
12338
12354
  // contexts/workspace/presentation/renderer/agentSessions/useAgentSessionPagingState.ts
12339
- import { useCallback as useCallback22, useRef as useRef16, useState as useState5 } from "react";
12355
+ import { useCallback as useCallback22, useRef as useRef17, useState as useState5 } from "react";
12340
12356
  var EMPTY_ENTRY = {
12341
12357
  error: null,
12342
12358
  isLoadingMessages: false,
@@ -12344,7 +12360,7 @@ var EMPTY_ENTRY = {
12344
12360
  };
12345
12361
  function useAgentSessionPagingState() {
12346
12362
  const [entries, setEntries] = useState5({});
12347
- const entriesRef = useRef16(entries);
12363
+ const entriesRef = useRef17(entries);
12348
12364
  entriesRef.current = entries;
12349
12365
  const update = useCallback22(
12350
12366
  (ref, updater) => {
@@ -12390,7 +12406,7 @@ function sessionKey(ref) {
12390
12406
  }
12391
12407
 
12392
12408
  // contexts/workspace/presentation/renderer/agentSessions/useAgentSessionTransport.ts
12393
- import { useCallback as useCallback23, useRef as useRef17, useState as useState6 } from "react";
12409
+ import { useCallback as useCallback23, useRef as useRef18, useState as useState6 } from "react";
12394
12410
  var EMPTY_ENTRY2 = {
12395
12411
  olderMessages: [],
12396
12412
  hasOlderMessages: false,
@@ -12398,7 +12414,7 @@ var EMPTY_ENTRY2 = {
12398
12414
  };
12399
12415
  function useAgentSessionTransport() {
12400
12416
  const [entries, setEntries] = useState6({});
12401
- const entriesRef = useRef17(entries);
12417
+ const entriesRef = useRef18(entries);
12402
12418
  entriesRef.current = entries;
12403
12419
  const update = useCallback23(
12404
12420
  (ref, updater) => {
@@ -12675,7 +12691,7 @@ function useAgentGUISessionDetailTransport(input) {
12675
12691
  }
12676
12692
 
12677
12693
  // agent-gui/agentGuiNode/controller/useAgentGUILocalState.ts
12678
- import { useCallback as useCallback26, useRef as useRef18, useState as useState7 } from "react";
12694
+ import { useCallback as useCallback26, useRef as useRef19, useState as useState7 } from "react";
12679
12695
  function useAgentGUILocalState({
12680
12696
  data,
12681
12697
  userProjectsApi
@@ -12695,7 +12711,7 @@ function useAgentGUILocalState({
12695
12711
  data.lastActiveAgentSessionId === null
12696
12712
  );
12697
12713
  const [draftByScopeKey, setDraftByScopeKey] = useState7({});
12698
- const submittedDraftSnapshotsRef = useRef18({});
12714
+ const submittedDraftSnapshotsRef = useRef19({});
12699
12715
  const [draftSettingsBySessionId, setDraftSettingsBySessionId] = useState7({});
12700
12716
  const [isLoadingMessages, setIsLoadingMessages] = useState7(false);
12701
12717
  const [isDeletingConversation, setIsDeletingConversation] = useState7(false);
@@ -12709,7 +12725,7 @@ function useAgentGUILocalState({
12709
12725
  const [detailError, setDetailError] = useState7(null);
12710
12726
  const [goalClearNoticeSequence, setGoalClearNoticeSequence] = useState7(0);
12711
12727
  const [optimisticGoalControl, setOptimisticGoalControl] = useState7(null);
12712
- const railRevealRevisionRef = useRef18(0);
12728
+ const railRevealRevisionRef = useRef19(0);
12713
12729
  const [railRevealRequest, setRailRevealRequest] = useState7(null);
12714
12730
  const clearRailRevealRequest = useCallback26(() => {
12715
12731
  setRailRevealRequest(null);
@@ -12905,9 +12921,9 @@ function useAgentGUINodeController({
12905
12921
  )
12906
12922
  )
12907
12923
  );
12908
- const updateComposerSettingsRef = useRef19(() => {
12924
+ const updateComposerSettingsRef = useRef20(() => {
12909
12925
  });
12910
- const planActionsRef = useRef19({ implement: () => {
12926
+ const planActionsRef = useRef20({ implement: () => {
12911
12927
  }, feedback: () => {
12912
12928
  }, skip: () => {
12913
12929
  } });
@@ -12926,7 +12942,7 @@ function useAgentGUINodeController({
12926
12942
  defaultReasoningEffort,
12927
12943
  providerComposerOptions
12928
12944
  } = composerCapabilities;
12929
- const planImplementationTurnIdRef = useRef19(null);
12945
+ const planImplementationTurnIdRef = useRef20(null);
12930
12946
  const accountProfilesByUserId = useAccountStore(
12931
12947
  (state) => state.profilesByUserId
12932
12948
  );
@@ -13317,7 +13333,7 @@ import {
13317
13333
  useCallback as useCallback60,
13318
13334
  useEffect as useEffect38,
13319
13335
  useMemo as useMemo42,
13320
- useRef as useRef52,
13336
+ useRef as useRef53,
13321
13337
  useState as useState44
13322
13338
  } from "react";
13323
13339
  import { TooltipProvider as TooltipProvider7 } from "@tutti-os/ui-system";
@@ -13533,7 +13549,7 @@ var styles = {
13533
13549
  var AgentGUINode_styles_default = styles;
13534
13550
 
13535
13551
  // agent-gui/agentGuiNode/view/agentGUIViewUtils.ts
13536
- import { useCallback as useCallback28, useLayoutEffect, useMemo as useMemo19, useRef as useRef20 } from "react";
13552
+ import { useCallback as useCallback28, useLayoutEffect, useMemo as useMemo19, useRef as useRef21 } from "react";
13537
13553
  function objectRecord(value) {
13538
13554
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
13539
13555
  }
@@ -13551,14 +13567,14 @@ function stringValue3(value) {
13551
13567
  return typeof value === "string" ? value : "";
13552
13568
  }
13553
13569
  function useStableEventCallback(callback) {
13554
- const callbackRef = useRef20(callback);
13570
+ const callbackRef = useRef21(callback);
13555
13571
  useLayoutEffect(() => {
13556
13572
  callbackRef.current = callback;
13557
13573
  }, [callback]);
13558
13574
  return useCallback28((...args) => callbackRef.current(...args), []);
13559
13575
  }
13560
13576
  function useOptionalStableEventCallback(callback) {
13561
- const callbackRef = useRef20(callback);
13577
+ const callbackRef = useRef21(callback);
13562
13578
  useLayoutEffect(() => {
13563
13579
  callbackRef.current = callback;
13564
13580
  }, [callback]);
@@ -14242,7 +14258,7 @@ import {
14242
14258
  memo as memo4,
14243
14259
  useCallback as useCallback46,
14244
14260
  useMemo as useMemo33,
14245
- useRef as useRef39,
14261
+ useRef as useRef40,
14246
14262
  useState as useState30
14247
14263
  } from "react";
14248
14264
  import { Tooltip as Tooltip7, TooltipContent as TooltipContent7, TooltipTrigger as TooltipTrigger7 } from "@tutti-os/ui-system";
@@ -15817,7 +15833,7 @@ import {
15817
15833
  useCallback as useCallback30,
15818
15834
  useEffect as useEffect16,
15819
15835
  useImperativeHandle,
15820
- useRef as useRef21
15836
+ useRef as useRef22
15821
15837
  } from "react";
15822
15838
  import {
15823
15839
  motion as motion2,
@@ -15848,7 +15864,7 @@ var CastIcon = forwardRef2(
15848
15864
  }, ref) => {
15849
15865
  const controls = useAnimation();
15850
15866
  const reduceMotion = useReducedMotion();
15851
- const isControlledRef = useRef21(false);
15867
+ const isControlledRef = useRef22(false);
15852
15868
  const startAnimation = useCallback30(() => {
15853
15869
  if (reduceMotion) {
15854
15870
  return;
@@ -16168,7 +16184,7 @@ function AgentSessionChrome({
16168
16184
  }
16169
16185
 
16170
16186
  // agent-gui/agentGuiNode/AgentComposer.tsx
16171
- import { useCallback as useCallback43, useEffect as useEffect28, useRef as useRef36, useState as useState26 } from "react";
16187
+ import { useCallback as useCallback43, useEffect as useEffect28, useRef as useRef37, useState as useState26 } from "react";
16172
16188
  import { repairMentionPaletteHighlight } from "@tutti-os/ui-rich-text/at-panel";
16173
16189
 
16174
16190
  // agent-gui/agentGuiNode/AgentSlashStatusPanel.tsx
@@ -16299,7 +16315,7 @@ function AgentSlashStatusPanel({
16299
16315
  import { flushSync as flushSync3 } from "react-dom";
16300
16316
  import {
16301
16317
  useCallback as useCallback31,
16302
- useRef as useRef22
16318
+ useRef as useRef23
16303
16319
  } from "react";
16304
16320
 
16305
16321
  // agent-gui/agentGuiNode/model/agentComposerDraftFileReconciliation.ts
@@ -16379,7 +16395,7 @@ function agentComposerDevConsoleDiagnosticSinkEnabled(runtime) {
16379
16395
 
16380
16396
  // agent-gui/agentGuiNode/composer/useComposerDraftAttachments.ts
16381
16397
  function useStableEventCallback2(callback) {
16382
- const callbackRef = useRef22(callback);
16398
+ const callbackRef = useRef23(callback);
16383
16399
  callbackRef.current = callback;
16384
16400
  return useCallback31((...args) => callbackRef.current(...args), []);
16385
16401
  }
@@ -16411,7 +16427,7 @@ function useComposerDraftAttachments({
16411
16427
  }) {
16412
16428
  const agentHostApi = useOptionalAgentHostApi();
16413
16429
  const agentActivityRuntime = useOptionalAgentActivityRuntime();
16414
- const activeDraftScopeKeyRef = useRef22(draftScopeKey);
16430
+ const activeDraftScopeKeyRef = useRef23(draftScopeKey);
16415
16431
  activeDraftScopeKeyRef.current = draftScopeKey;
16416
16432
  const reportContentEntered = useStableEventCallback2(
16417
16433
  (contentType) => {
@@ -16444,7 +16460,7 @@ function useComposerDraftAttachments({
16444
16460
  return next;
16445
16461
  }
16446
16462
  );
16447
- const openReferencesForEntityRef = useRef22(null);
16463
+ const openReferencesForEntityRef = useRef23(null);
16448
16464
  const handleDraftChange = useStableEventCallback2(
16449
16465
  (nextDraft) => {
16450
16466
  if (isGoalModeActive) {
@@ -17519,7 +17535,7 @@ import {
17519
17535
  import {
17520
17536
  useCallback as useCallback32,
17521
17537
  useEffect as useEffect17,
17522
- useRef as useRef23,
17538
+ useRef as useRef24,
17523
17539
  useState as useState10
17524
17540
  } from "react";
17525
17541
  import {
@@ -17568,14 +17584,14 @@ function AgentUsageChip({
17568
17584
  }) {
17569
17585
  "use memo";
17570
17586
  const [usagePopoverOpen, setUsagePopoverOpen] = useState10(false);
17571
- const usagePopoverHoverTimerRef = useRef23(null);
17572
- const usagePopoverContentRef = useRef23(null);
17587
+ const usagePopoverHoverTimerRef = useRef24(null);
17588
+ const usagePopoverContentRef = useRef24(null);
17573
17589
  const clampedPercent = Math.max(0, Math.min(100, percentUsed));
17574
17590
  const chipLabel = labels.usageChipLabel({ percent: clampedPercent });
17575
17591
  const showTokens = usedTokens !== null && totalTokens !== null;
17576
17592
  const usageLevel = agentUsageChipLevel(clampedPercent);
17577
17593
  const ringColor = agentUsageRingColor(usageLevel);
17578
- const usagePopoverCloseTimerRef = useRef23(null);
17594
+ const usagePopoverCloseTimerRef = useRef24(null);
17579
17595
  const clearUsagePopoverHoverTimer = useCallback32(() => {
17580
17596
  if (usagePopoverHoverTimerRef.current) {
17581
17597
  clearTimeout(usagePopoverHoverTimerRef.current);
@@ -17957,10 +17973,10 @@ function useMentionPaletteFrame(inputShellRef, showFileMentionPalette) {
17957
17973
  import {
17958
17974
  useCallback as useCallback34,
17959
17975
  useMemo as useMemo23,
17960
- useRef as useRef24
17976
+ useRef as useRef25
17961
17977
  } from "react";
17962
17978
  function useStableEventCallback3(callback) {
17963
- const callbackRef = useRef24(callback);
17979
+ const callbackRef = useRef25(callback);
17964
17980
  callbackRef.current = callback;
17965
17981
  return useCallback34((...args) => callbackRef.current(...args), []);
17966
17982
  }
@@ -18408,7 +18424,7 @@ function useComposerSlashActions(input) {
18408
18424
  import {
18409
18425
  useCallback as useCallback35,
18410
18426
  useEffect as useEffect18,
18411
- useRef as useRef25
18427
+ useRef as useRef26
18412
18428
  } from "react";
18413
18429
  import {
18414
18430
  createMentionPaletteStateAdapter,
@@ -18428,7 +18444,7 @@ function isAgentRichTextImeComposing(event) {
18428
18444
 
18429
18445
  // agent-gui/agentGuiNode/composer/useComposerMentionActions.ts
18430
18446
  function useStableEventCallback4(callback) {
18431
- const callbackRef = useRef25(callback);
18447
+ const callbackRef = useRef26(callback);
18432
18448
  callbackRef.current = callback;
18433
18449
  return useCallback35((...args) => callbackRef.current(...args), []);
18434
18450
  }
@@ -19659,7 +19675,7 @@ import {
19659
19675
  import {
19660
19676
  Component as Component2,
19661
19677
  useLayoutEffect as useLayoutEffect4,
19662
- useRef as useRef26,
19678
+ useRef as useRef27,
19663
19679
  useState as useState15
19664
19680
  } from "react";
19665
19681
  import { ChevronRight } from "lucide-react";
@@ -19945,9 +19961,9 @@ function AgentQueuedPromptPanel({
19945
19961
  "use memo";
19946
19962
  const runtime = useOptionalAgentActivityRuntime();
19947
19963
  const [isExpanded, setIsExpanded] = useState15(false);
19948
- const singlePromptTextRef = useRef26(null);
19949
- const queuedPromptListRef = useRef26(null);
19950
- const pointerHandledEditPromptIdRef = useRef26(null);
19964
+ const singlePromptTextRef = useRef27(null);
19965
+ const queuedPromptListRef = useRef27(null);
19966
+ const pointerHandledEditPromptIdRef = useRef27(null);
19951
19967
  const [isSinglePromptOverflowing, setIsSinglePromptOverflowing] = useState15(false);
19952
19968
  const [expandedListMaxHeightPx, setExpandedListMaxHeightPx] = useState15(280);
19953
19969
  const singlePromptHasImages = queuedPrompts.length === 1 && queuedPromptImages(queuedPrompts[0]).length > 0;
@@ -20808,6 +20824,22 @@ import {
20808
20824
  NoWorkspaceLinedIcon,
20809
20825
  cn as cn2
20810
20826
  } from "@tutti-os/ui-system";
20827
+
20828
+ // agent-gui/agentGuiNode/agentGuiUserProjectSelectionApi.ts
20829
+ function createAgentGUIUserProjectSelectionApi({
20830
+ selectProjectDirectory,
20831
+ userProjects
20832
+ }) {
20833
+ if (!userProjects) {
20834
+ return null;
20835
+ }
20836
+ return {
20837
+ ...userProjects,
20838
+ selectDirectory: selectProjectDirectory
20839
+ };
20840
+ }
20841
+
20842
+ // agent-gui/agentGuiNode/AgentComposerProjectMenu.tsx
20811
20843
  import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
20812
20844
  function basenameProjectPath(path) {
20813
20845
  const normalized = path.trim().replaceAll("\\", "/").replace(/\/+$/, "");
@@ -20830,16 +20862,11 @@ function AgentProjectDropdown({
20830
20862
  [i18n, labels]
20831
20863
  );
20832
20864
  const userProjectApi = useMemo25(
20833
- () => !previewMode && agentHostApi.userProjects ? {
20834
- ...agentHostApi.userProjects,
20835
- selectDirectory: selectProjectDirectory ?? agentHostApi.workspace.selectDirectory
20836
- } : null,
20837
- [
20838
- agentHostApi.userProjects,
20839
- agentHostApi.workspace.selectDirectory,
20840
- previewMode,
20841
- selectProjectDirectory
20842
- ]
20865
+ () => createAgentGUIUserProjectSelectionApi({
20866
+ selectProjectDirectory,
20867
+ userProjects: previewMode ? null : agentHostApi.userProjects
20868
+ }),
20869
+ [agentHostApi.userProjects, previewMode, selectProjectDirectory]
20843
20870
  );
20844
20871
  if (previewMode) {
20845
20872
  const selectedPath = composerSettings.selectedProjectPath?.trim() ?? "";
@@ -21545,7 +21572,7 @@ import {
21545
21572
  useCallback as useCallback39,
21546
21573
  useEffect as useEffect23,
21547
21574
  useMemo as useMemo26,
21548
- useRef as useRef28,
21575
+ useRef as useRef29,
21549
21576
  useState as useState18
21550
21577
  } from "react";
21551
21578
  import { useEditor } from "@tiptap/react";
@@ -22142,7 +22169,7 @@ function useAgentRichTextEditorHandle(input) {
22142
22169
  // agent-gui/agentGuiNode/agentRichText/AgentRichTextEditorSurface.tsx
22143
22170
  import {
22144
22171
  useCallback as useCallback38,
22145
- useRef as useRef27
22172
+ useRef as useRef28
22146
22173
  } from "react";
22147
22174
  import { createPortal as createPortal2 } from "react-dom";
22148
22175
  import { EditorContent } from "@tiptap/react";
@@ -22230,7 +22257,7 @@ function AgentRichTextContextMenuButton({
22230
22257
  label,
22231
22258
  onSelect
22232
22259
  }) {
22233
- const selectionStartedRef = useRef27(false);
22260
+ const selectionStartedRef = useRef28(false);
22234
22261
  const select = useCallback38(() => {
22235
22262
  if (disabled || selectionStartedRef.current) return;
22236
22263
  selectionStartedRef.current = true;
@@ -22332,34 +22359,34 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
22332
22359
  }, ref) {
22333
22360
  "use memo";
22334
22361
  const { t } = useTranslation();
22335
- const lastEmittedPromptRef = useRef28(value);
22336
- const editorRef = useRef28(null);
22337
- const onChangeRef = useRef28(onChange);
22338
- const onFocusRef = useRef28(onFocus);
22339
- const onUserContentChangeRef = useRef28(onUserContentChange);
22340
- const pendingFocusMethodRef = useRef28(null);
22341
- const onSubmitRef = useRef28(onSubmit);
22342
- const onSubmitGuidanceRef = useRef28(onSubmitGuidance);
22343
- const onKeyDownForPaletteRef = useRef28(onKeyDownForPalette);
22344
- const onFileMentionSuggestionChangeRef = useRef28(
22362
+ const lastEmittedPromptRef = useRef29(value);
22363
+ const editorRef = useRef29(null);
22364
+ const onChangeRef = useRef29(onChange);
22365
+ const onFocusRef = useRef29(onFocus);
22366
+ const onUserContentChangeRef = useRef29(onUserContentChange);
22367
+ const pendingFocusMethodRef = useRef29(null);
22368
+ const onSubmitRef = useRef29(onSubmit);
22369
+ const onSubmitGuidanceRef = useRef29(onSubmitGuidance);
22370
+ const onKeyDownForPaletteRef = useRef29(onKeyDownForPalette);
22371
+ const onFileMentionSuggestionChangeRef = useRef29(
22345
22372
  onFileMentionSuggestionChange
22346
22373
  );
22347
- const onFileMentionSuggestionKeyDownRef = useRef28(
22374
+ const onFileMentionSuggestionKeyDownRef = useRef29(
22348
22375
  onFileMentionSuggestionKeyDown
22349
22376
  );
22350
- const onLinkClickRef = useRef28(onLinkClick);
22351
- const onPromptImagesUnsupportedRef = useRef28(onPromptImagesUnsupported);
22352
- const onPasteImagesRef = useRef28(onPasteImages);
22353
- const onPasteLargeTextRef = useRef28(onPasteLargeText);
22354
- const onPasteFilesRef = useRef28(onPasteFiles);
22355
- const onDropFilesRef = useRef28(onDropFiles);
22356
- const promptImagesSupportedRef = useRef28(promptImagesSupported);
22357
- const placeholderRef = useRef28(placeholder);
22358
- const removeMentionLabelRef = useRef28(removeMentionLabel);
22359
- const availableSkillsRef = useRef28(availableSkills);
22360
- const availableCapabilitiesRef = useRef28(availableCapabilities);
22361
- const suppressPastedAtSuggestionRef = useRef28(false);
22362
- const scrollFrameRef = useRef28(null);
22377
+ const onLinkClickRef = useRef29(onLinkClick);
22378
+ const onPromptImagesUnsupportedRef = useRef29(onPromptImagesUnsupported);
22379
+ const onPasteImagesRef = useRef29(onPasteImages);
22380
+ const onPasteLargeTextRef = useRef29(onPasteLargeText);
22381
+ const onPasteFilesRef = useRef29(onPasteFiles);
22382
+ const onDropFilesRef = useRef29(onDropFiles);
22383
+ const promptImagesSupportedRef = useRef29(promptImagesSupported);
22384
+ const placeholderRef = useRef29(placeholder);
22385
+ const removeMentionLabelRef = useRef29(removeMentionLabel);
22386
+ const availableSkillsRef = useRef29(availableSkills);
22387
+ const availableCapabilitiesRef = useRef29(availableCapabilities);
22388
+ const suppressPastedAtSuggestionRef = useRef29(false);
22389
+ const scrollFrameRef = useRef29(null);
22363
22390
  const [contextMenu, setContextMenu] = useState18(null);
22364
22391
  const closeContextMenu = useCallback39(() => {
22365
22392
  setContextMenu(null);
@@ -22913,7 +22940,7 @@ function AgentReferenceProvenanceFilterControl({
22913
22940
  }
22914
22941
 
22915
22942
  // agent-gui/agentGuiNode/AgentSlashCommandPalette.tsx
22916
- import { Fragment as Fragment8, useEffect as useEffect24, useRef as useRef29 } from "react";
22943
+ import { Fragment as Fragment8, useEffect as useEffect24, useRef as useRef30 } from "react";
22917
22944
  import { Spinner as Spinner3 } from "@tutti-os/ui-system";
22918
22945
  import {
22919
22946
  Globe,
@@ -22960,7 +22987,7 @@ function AgentSlashCommandPalette({
22960
22987
  onSelectSkill
22961
22988
  }) {
22962
22989
  "use memo";
22963
- const highlightedOptionRef = useRef29(null);
22990
+ const highlightedOptionRef = useRef30(null);
22964
22991
  useEffect24(() => {
22965
22992
  highlightedOptionRef.current?.scrollIntoView({ block: "nearest" });
22966
22993
  }, [highlightedIndex]);
@@ -23161,7 +23188,7 @@ function slashPaletteEntryIcon(entry) {
23161
23188
  }
23162
23189
 
23163
23190
  // agent-gui/agentGuiNode/AgentReviewPickerPanel.tsx
23164
- import { useCallback as useCallback40, useEffect as useEffect25, useMemo as useMemo27, useRef as useRef30, useState as useState19 } from "react";
23191
+ import { useCallback as useCallback40, useEffect as useEffect25, useMemo as useMemo27, useRef as useRef31, useState as useState19 } from "react";
23165
23192
  import { menuItemClassName } from "@tutti-os/ui-system";
23166
23193
 
23167
23194
  // agent-gui/agentGuiNode/AgentReviewBranchController.ts
@@ -23279,9 +23306,9 @@ function AgentReviewPickerPanel({
23279
23306
  const [stage, setStage] = useState19("root");
23280
23307
  const [query, setQuery] = useState19("");
23281
23308
  const [highlightedIndex, setHighlightedIndex] = useState19(0);
23282
- const searchInputRef = useRef30(null);
23283
- const highlightedOptionRef = useRef30(null);
23284
- const reviewBranchControllerRef = useRef30(
23309
+ const searchInputRef = useRef31(null);
23310
+ const highlightedOptionRef = useRef31(null);
23311
+ const reviewBranchControllerRef = useRef31(
23285
23312
  null
23286
23313
  );
23287
23314
  const [branchState, setBranchState] = useState19({
@@ -23526,7 +23553,7 @@ import {
23526
23553
  useEffect as useEffect26,
23527
23554
  useLayoutEffect as useLayoutEffect5,
23528
23555
  useMemo as useMemo28,
23529
- useRef as useRef31,
23556
+ useRef as useRef32,
23530
23557
  useState as useState20
23531
23558
  } from "react";
23532
23559
  import { createPortal as createPortal3 } from "react-dom";
@@ -23673,7 +23700,7 @@ var ComposerFloatingMenuSurface = forwardRef4(function ComposerFloatingMenuSurfa
23673
23700
  surfaceRef,
23674
23701
  testId
23675
23702
  }, forwardedRef) {
23676
- const localSurfaceRef = useRef31(null);
23703
+ const localSurfaceRef = useRef32(null);
23677
23704
  const frame = useComposerAnchoredMenuFrame({
23678
23705
  anchorRef,
23679
23706
  maxHeight,
@@ -24482,7 +24509,7 @@ function ComposerFooter({
24482
24509
  }
24483
24510
 
24484
24511
  // agent-gui/agentGuiNode/composer/quickPrompts/AgentQuickPromptPopover.tsx
24485
- import { useId, useRef as useRef33, useState as useState23 } from "react";
24512
+ import { useId, useRef as useRef34, useState as useState23 } from "react";
24486
24513
  import {
24487
24514
  Button as Button5,
24488
24515
  ConfirmationDialog as ConfirmationDialog2,
@@ -24509,7 +24536,7 @@ import {
24509
24536
  } from "@tutti-os/ui-system/icons";
24510
24537
 
24511
24538
  // agent-gui/agentGuiNode/composer/quickPrompts/AgentQuickPromptEditorDialog.tsx
24512
- import { useRef as useRef32, useState as useState22 } from "react";
24539
+ import { useRef as useRef33, useState as useState22 } from "react";
24513
24540
  import {
24514
24541
  Button as Button4,
24515
24542
  Dialog,
@@ -24534,7 +24561,7 @@ function AgentQuickPromptEditorDialog({
24534
24561
  () => controller.initialDraft ?? promptDraft(source)
24535
24562
  );
24536
24563
  const [validationError, setValidationError] = useState22(null);
24537
- const cancelRequestedOnPointerDownRef = useRef32(false);
24564
+ const cancelRequestedOnPointerDownRef = useRef33(false);
24538
24565
  const submit = async () => {
24539
24566
  const error = validateDraft(draft, labels);
24540
24567
  if (error) {
@@ -24681,12 +24708,12 @@ function AgentQuickPromptPopover({
24681
24708
  controller,
24682
24709
  disabled
24683
24710
  }) {
24684
- const searchRef = useRef33(null);
24685
- const rowRefs = useRef33(/* @__PURE__ */ new Map());
24686
- const firstTemplateRef = useRef33(null);
24687
- const preserveExternalFocusRef = useRef33(false);
24688
- const createRequestedOnPointerDownRef = useRef33(false);
24689
- const templateRequestedOnPointerDownRef = useRef33(false);
24711
+ const searchRef = useRef34(null);
24712
+ const rowRefs = useRef34(/* @__PURE__ */ new Map());
24713
+ const firstTemplateRef = useRef34(null);
24714
+ const preserveExternalFocusRef = useRef34(false);
24715
+ const createRequestedOnPointerDownRef = useRef34(false);
24716
+ const templateRequestedOnPointerDownRef = useRef34(false);
24690
24717
  const [view, setView] = useState23("prompts");
24691
24718
  const titleId = useId();
24692
24719
  const { labels, snapshot } = controller;
@@ -25057,7 +25084,7 @@ function TemplateEntry({
25057
25084
  );
25058
25085
  }
25059
25086
  function usePrimaryPointerAction(action) {
25060
- const actionRequestedOnPointerDownRef = useRef33(false);
25087
+ const actionRequestedOnPointerDownRef = useRef34(false);
25061
25088
  return {
25062
25089
  onPointerDown: (event) => {
25063
25090
  if (event.button !== 0) return;
@@ -25095,9 +25122,9 @@ function PromptRow({
25095
25122
  prompt,
25096
25123
  selectionRef
25097
25124
  }) {
25098
- const selectionRequestedOnPointerDownRef = useRef33(false);
25099
- const editRequestedOnPointerDownRef = useRef33(false);
25100
- const deleteRequestedOnPointerDownRef = useRef33(false);
25125
+ const selectionRequestedOnPointerDownRef = useRef34(false);
25126
+ const editRequestedOnPointerDownRef = useRef34(false);
25127
+ const deleteRequestedOnPointerDownRef = useRef34(false);
25101
25128
  return /* @__PURE__ */ jsxs29("div", { className: "group flex min-w-0 items-start gap-1 rounded-md hover:bg-[var(--transparency-hover)]", children: [
25102
25129
  /* @__PURE__ */ jsx39(
25103
25130
  Button5,
@@ -25763,7 +25790,7 @@ function AgentComposerView(input) {
25763
25790
  }
25764
25791
 
25765
25792
  // agent-gui/agentGuiNode/composer/useAgentMentionSearchController.ts
25766
- import { useEffect as useEffect27, useMemo as useMemo29, useRef as useRef34, useState as useState24 } from "react";
25793
+ import { useEffect as useEffect27, useMemo as useMemo29, useRef as useRef35, useState as useState24 } from "react";
25767
25794
  import { useRichTextMentionService } from "@tutti-os/ui-rich-text/editor";
25768
25795
  var EMPTY_AGENT_CONTEXT_MENTION_PROVIDERS = [];
25769
25796
  function useAgentMentionSearchController(referenceProvenanceFilter) {
@@ -25773,7 +25800,7 @@ function useAgentMentionSearchController(referenceProvenanceFilter) {
25773
25800
  [mentionService]
25774
25801
  );
25775
25802
  const [mentionSearchState, setMentionSearchState] = useState24(INITIAL_AGENT_MENTION_SEARCH_STATE);
25776
- const mentionControllerRef = useRef34(
25803
+ const mentionControllerRef = useRef35(
25777
25804
  null
25778
25805
  );
25779
25806
  useEffect27(() => {
@@ -25821,7 +25848,7 @@ var INITIAL_AGENT_MENTION_SEARCH_STATE = {
25821
25848
  };
25822
25849
 
25823
25850
  // agent-gui/agentGuiNode/composer/quickPrompts/useAgentQuickPromptLibrary.ts
25824
- import { useCallback as useCallback42, useMemo as useMemo30, useRef as useRef35, useState as useState25 } from "react";
25851
+ import { useCallback as useCallback42, useMemo as useMemo30, useRef as useRef36, useState as useState25 } from "react";
25825
25852
  var unavailableSnapshot = {
25826
25853
  enabled: false,
25827
25854
  status: "idle",
@@ -25844,7 +25871,7 @@ function useAgentQuickPromptLibrary(input) {
25844
25871
  selectQuickPromptSnapshot
25845
25872
  );
25846
25873
  const [mode, setMode] = useState25("closed");
25847
- const modeRef = useRef35(mode);
25874
+ const modeRef = useRef36(mode);
25848
25875
  modeRef.current = mode;
25849
25876
  const [searchQuery, setSearchQuery] = useState25("");
25850
25877
  const [selectedPrompt, setSelectedPrompt] = useState25(null);
@@ -25856,7 +25883,7 @@ function useAgentQuickPromptLibrary(input) {
25856
25883
  const capabilityAvailable = Boolean(quickPrompts && snapshot.enabled);
25857
25884
  const disclosureAvailable = capabilityAvailable && !disabled;
25858
25885
  const [previousDisclosureAvailable, setPreviousDisclosureAvailable] = useState25(disclosureAvailable);
25859
- const disclosureAvailableRef = useRef35(disclosureAvailable);
25886
+ const disclosureAvailableRef = useRef36(disclosureAvailable);
25860
25887
  disclosureAvailableRef.current = disclosureAvailable;
25861
25888
  if (previousDisclosureAvailable !== disclosureAvailable) {
25862
25889
  setPreviousDisclosureAvailable(disclosureAvailable);
@@ -26231,30 +26258,30 @@ function AgentComposer(props) {
26231
26258
  const [isSelectedProjectMissing, setIsSelectedProjectMissing] = useState26(false);
26232
26259
  const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] = useState26(false);
26233
26260
  const slashStatusAgentSessionId = slashStatus?.agentSessionId ?? null;
26234
- const previousSlashStatusAgentSessionIdRef = useRef36(
26261
+ const previousSlashStatusAgentSessionIdRef = useRef37(
26235
26262
  slashStatusAgentSessionId
26236
26263
  );
26237
26264
  const selectedProjectPath = composerSettings.selectedProjectPath?.trim() ?? "";
26238
26265
  const selectedProjectSectionKey = composerSettings.selectedProjectSectionKey?.trim() ?? "";
26239
- const previousSelectedProjectPathRef = useRef36(selectedProjectPath);
26240
- const composerRef = useRef36(null);
26241
- const inputShellRef = useRef36(null);
26242
- const promptInputAreaRef = useRef36(null);
26243
- const paletteContentRef = useRef36(null);
26244
- const draftPromptRef = useRef36(draftPrompt);
26245
- const draftImagesRef = useRef36(draftImages);
26246
- const draftFilesRef = useRef36(draftFiles);
26247
- const draftLargeTextsRef = useRef36(draftLargeTexts);
26248
- const draftByScopeKeyRef = useRef36({
26266
+ const previousSelectedProjectPathRef = useRef37(selectedProjectPath);
26267
+ const composerRef = useRef37(null);
26268
+ const inputShellRef = useRef37(null);
26269
+ const promptInputAreaRef = useRef37(null);
26270
+ const paletteContentRef = useRef37(null);
26271
+ const draftPromptRef = useRef37(draftPrompt);
26272
+ const draftImagesRef = useRef37(draftImages);
26273
+ const draftFilesRef = useRef37(draftFiles);
26274
+ const draftLargeTextsRef = useRef37(draftLargeTexts);
26275
+ const draftByScopeKeyRef = useRef37({
26249
26276
  [draftScopeKey]: draftContent
26250
26277
  });
26251
26278
  draftByScopeKeyRef.current[draftScopeKey] = draftContent;
26252
- const promptTipRef = useRef36(null);
26279
+ const promptTipRef = useRef37(null);
26253
26280
  const { mentionControllerRef, mentionSearchState } = useAgentMentionSearchController(referenceProvenanceFilter);
26254
- const editorHandleRef = useRef36(null);
26255
- const wasActiveRef = useRef36(isActive);
26256
- const lastComposerFocusRequestRef = useRef36(null);
26257
- const autoMentionHighlightedKeyRef = useRef36(null);
26281
+ const editorHandleRef = useRef37(null);
26282
+ const wasActiveRef = useRef37(isActive);
26283
+ const lastComposerFocusRequestRef = useRef37(null);
26284
+ const autoMentionHighlightedKeyRef = useRef37(null);
26258
26285
  const [isPromptTipOverflowing, setIsPromptTipOverflowing] = useState26(false);
26259
26286
  const [dockComposerInputHeight, setDockComposerInputHeight] = useState26(
26260
26287
  DOCK_COMPOSER_INPUT_MIN_HEIGHT2
@@ -27023,7 +27050,7 @@ import {
27023
27050
  useCallback as useCallback44,
27024
27051
  useContext,
27025
27052
  useMemo as useMemo31,
27026
- useRef as useRef37
27053
+ useRef as useRef38
27027
27054
  } from "react";
27028
27055
  import { toast as toast2 } from "@tutti-os/ui-system";
27029
27056
 
@@ -27111,7 +27138,7 @@ function useCreateAgentTargetSetupController(agentTarget) {
27111
27138
  },
27112
27139
  [agentTargetId, hostApi?.debug]
27113
27140
  );
27114
- const controllerRef = useRef37(null);
27141
+ const controllerRef = useRef38(null);
27115
27142
  const targetKey = enabled ? agentTargetId : "";
27116
27143
  const controllerEntry = useMemo31(() => {
27117
27144
  const previousState = controllerRef.current?.targetKey === targetKey ? controllerRef.current.controller.getSnapshot() : null;
@@ -28045,7 +28072,7 @@ function EmptyHeroTitle({
28045
28072
 
28046
28073
  // agent-gui/agentGuiNode/view/AgentGUIProviderManagerDialog.tsx
28047
28074
  import {
28048
- useRef as useRef38,
28075
+ useRef as useRef39,
28049
28076
  useState as useState28
28050
28077
  } from "react";
28051
28078
  import { CircleMinus, CirclePlus } from "lucide-react";
@@ -28087,12 +28114,12 @@ function AgentGUIProviderManagerDialog({
28087
28114
  null
28088
28115
  );
28089
28116
  const [dragPreview, setDragPreview] = useState28(null);
28090
- const dragStateRef = useRef38(null);
28091
- const dragPreviewRef = useRef38(null);
28117
+ const dragStateRef = useRef39(null);
28118
+ const dragPreviewRef = useRef39(null);
28092
28119
  const [longPressTargetId, setLongPressTargetId] = useState28(
28093
28120
  null
28094
28121
  );
28095
- const longPressOriginRef = useRef38(null);
28122
+ const longPressOriginRef = useRef39(null);
28096
28123
  const finalAvailableAgent = availableTargets.length === 1;
28097
28124
  const showRunningAgentBlocked = (targetId) => {
28098
28125
  const target = targets.find((candidate) => candidate.targetId === targetId);
@@ -28691,7 +28718,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
28691
28718
  preferences: providerRailPreferences
28692
28719
  } = useAgentGUIProviderRailPreferences();
28693
28720
  const [dragState, setDragState] = useState30(null);
28694
- const dragStateRef = useRef39(null);
28721
+ const dragStateRef = useRef40(null);
28695
28722
  const setProviderRailDragState = useCallback46(
28696
28723
  (nextDragState) => {
28697
28724
  dragStateRef.current = nextDragState;
@@ -29167,7 +29194,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
29167
29194
  import { memo as memo9, useState as useState36 } from "react";
29168
29195
 
29169
29196
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailPane.tsx
29170
- import { Fragment as Fragment18, memo as memo8, useEffect as useEffect30, useMemo as useMemo36, useRef as useRef42, useState as useState35 } from "react";
29197
+ import { Fragment as Fragment18, memo as memo8, useEffect as useEffect30, useMemo as useMemo36, useRef as useRef43, useState as useState35 } from "react";
29171
29198
  import { Button as SystemButton } from "@tutti-os/ui-system";
29172
29199
  import { ScrollArea as ScrollArea2 } from "@tutti-os/ui-system/components";
29173
29200
  import { CreateChatIcon as CreateChatIcon2 } from "@tutti-os/ui-system/icons";
@@ -30352,7 +30379,7 @@ import {
30352
30379
  Fragment as Fragment15,
30353
30380
  useCallback as useCallback48,
30354
30381
  useMemo as useMemo34,
30355
- useRef as useRef40,
30382
+ useRef as useRef41,
30356
30383
  useState as useState32
30357
30384
  } from "react";
30358
30385
  import {
@@ -30564,7 +30591,7 @@ function useConversationActionGroups({
30564
30591
  const agentActivityRuntime = useOptionalAgentActivityRuntime();
30565
30592
  const copyConversationValue = useAgentGUIConversationCopyAction(labels);
30566
30593
  const [resetKey, setResetKey] = useState32(0);
30567
- const pendingActionRef = useRef40(false);
30594
+ const pendingActionRef = useRef41(false);
30568
30595
  const run = useCallback48(
30569
30596
  (action) => {
30570
30597
  if (pendingActionRef.current) {
@@ -31042,15 +31069,11 @@ function AgentGUIProjectRailHeader({
31042
31069
  "use memo";
31043
31070
  const agentHostApi = useAgentHostApi();
31044
31071
  const userProjectApi = useMemo35(
31045
- () => agentHostApi.userProjects ? {
31046
- ...agentHostApi.userProjects,
31047
- selectDirectory: selectProjectDirectory ?? agentHostApi.workspace.selectDirectory
31048
- } : null,
31049
- [
31050
- agentHostApi.userProjects,
31051
- agentHostApi.workspace.selectDirectory,
31052
- selectProjectDirectory
31053
- ]
31072
+ () => createAgentGUIUserProjectSelectionApi({
31073
+ selectProjectDirectory,
31074
+ userProjects: agentHostApi.userProjects
31075
+ }),
31076
+ [agentHostApi.userProjects, selectProjectDirectory]
31054
31077
  );
31055
31078
  return /* @__PURE__ */ jsxs41("div", { className: AgentGUINode_styles_default.projectRailHeader, children: [
31056
31079
  /* @__PURE__ */ jsx57("div", { className: AgentGUINode_styles_default.projectRailTitle, children: /* @__PURE__ */ jsx57("span", { children: workspaceUserProjectI18n.tFirst(["projectSelect.projectLabel"]) }) }),
@@ -31919,7 +31942,7 @@ function AgentGUIProjectActionConfirmationDialog(props) {
31919
31942
  }
31920
31943
 
31921
31944
  // agent-gui/agentGuiNode/view/useAgentGUIConversationRailViewState.ts
31922
- import { useCallback as useCallback52, useLayoutEffect as useLayoutEffect6, useReducer, useRef as useRef41 } from "react";
31945
+ import { useCallback as useCallback52, useLayoutEffect as useLayoutEffect6, useReducer, useRef as useRef42 } from "react";
31923
31946
  function applyRailScrollNavigation(input) {
31924
31947
  const activeConversationId = input.activeConversationId?.trim() || null;
31925
31948
  const current = input.current.navigationKey === input.navigationKey ? input.current : {
@@ -31965,10 +31988,10 @@ function useAgentGUIConversationRailViewState(input) {
31965
31988
  reduceAgentGUIConversationRailViewState,
31966
31989
  /* @__PURE__ */ new Map()
31967
31990
  );
31968
- const conversationListRef = useRef41(null);
31969
- const conversationItemElementsRef = useRef41(/* @__PURE__ */ new Map());
31970
- const scrollTopByScopeRef = useRef41(/* @__PURE__ */ new Map());
31971
- const navigationRef = useRef41({
31991
+ const conversationListRef = useRef42(null);
31992
+ const conversationItemElementsRef = useRef42(/* @__PURE__ */ new Map());
31993
+ const scrollTopByScopeRef = useRef42(/* @__PURE__ */ new Map());
31994
+ const navigationRef = useRef42({
31972
31995
  handledRevealRevision: 0,
31973
31996
  navigationKey: null,
31974
31997
  phase: "scope-pending"
@@ -32141,9 +32164,9 @@ var AgentGUIConversationRailPane = memo8(
32141
32164
  const [pendingProjectAction, setPendingProjectAction] = useState35(null);
32142
32165
  const [isRequestingBatchDeletion, setIsRequestingBatchDeletion] = useState35(false);
32143
32166
  const { railSearch } = railQuery;
32144
- const railElementRef = useRef42(null);
32145
- const railActiveConversationRef = useRef42([]);
32146
- const groupedConversationsRef = useRef42(null);
32167
+ const railElementRef = useRef43(null);
32168
+ const railActiveConversationRef = useRef43([]);
32169
+ const groupedConversationsRef = useRef43(null);
32147
32170
  const {
32148
32171
  loadMoreSectionConversations,
32149
32172
  isInteractionLocked,
@@ -32575,7 +32598,7 @@ var AgentGUIConversationRailPane = memo8(
32575
32598
  );
32576
32599
 
32577
32600
  // agent-gui/agentGuiNode/controller/useAgentGUIConversationRailQuery.ts
32578
- import { useEffect as useEffect31, useMemo as useMemo37, useRef as useRef43 } from "react";
32601
+ import { useEffect as useEffect31, useMemo as useMemo37, useRef as useRef44 } from "react";
32579
32602
 
32580
32603
  // agent-gui/agentGuiNode/controller/agentGuiConversationRailDiagnostics.ts
32581
32604
  var CONVERSATION_RAIL_SLOW_DIAGNOSTIC_THRESHOLD_MS = 250;
@@ -33696,7 +33719,7 @@ function useAgentGUIConversationRailQuery({
33696
33719
  () => runtime.getSessionEngine(workspaceId),
33697
33720
  [runtime, workspaceId]
33698
33721
  );
33699
- const activeConversationIdRef = useRef43(activeConversationId);
33722
+ const activeConversationIdRef = useRef44(activeConversationId);
33700
33723
  activeConversationIdRef.current = activeConversationId;
33701
33724
  const controller = useMemo37(
33702
33725
  () => new AgentGUIConversationRailQueryController({
@@ -33804,13 +33827,13 @@ import {
33804
33827
  useCallback as useCallback55,
33805
33828
  useEffect as useEffect34,
33806
33829
  useMemo as useMemo39,
33807
- useRef as useRef46,
33830
+ useRef as useRef47,
33808
33831
  useState as useState41
33809
33832
  } from "react";
33810
33833
  import { ScrollArea as ScrollArea3 } from "@tutti-os/ui-system/components";
33811
33834
 
33812
33835
  // agent-gui/agentGuiNode/view/agentGUIDetailModelHelpers.ts
33813
- import { useRef as useRef44 } from "react";
33836
+ import { useRef as useRef45 } from "react";
33814
33837
  function commandAppSource(command) {
33815
33838
  if (!command || typeof command !== "object" || !("source" in command)) {
33816
33839
  return null;
@@ -33890,7 +33913,7 @@ function slashStatusesEqual(left, right) {
33890
33913
  return (left.agentSessionId ?? null) === (right.agentSessionId ?? null) && (left.baseUrl ?? null) === (right.baseUrl ?? null) && (left.contextWindow?.usedTokens ?? null) === (right.contextWindow?.usedTokens ?? null) && (left.contextWindow?.totalTokens ?? null) === (right.contextWindow?.totalTokens ?? null) && slashStatusLimitsEqual(left.limits, right.limits) && Boolean(left.limitsLoading) === Boolean(right.limitsLoading) && Boolean(left.limitsUnavailable) === Boolean(right.limitsUnavailable);
33891
33914
  }
33892
33915
  function useStableSlashStatus(status) {
33893
- const statusRef = useRef44(null);
33916
+ const statusRef = useRef45(null);
33894
33917
  if (statusRef.current === null || !slashStatusesEqual(statusRef.current, status)) {
33895
33918
  statusRef.current = status;
33896
33919
  }
@@ -34430,7 +34453,7 @@ import {
34430
34453
  useCallback as useCallback54,
34431
34454
  useEffect as useEffect33,
34432
34455
  useLayoutEffect as useLayoutEffect7,
34433
- useRef as useRef45,
34456
+ useRef as useRef46,
34434
34457
  useState as useState39
34435
34458
  } from "react";
34436
34459
  var AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX = 24;
@@ -34452,8 +34475,8 @@ function useAgentGUIDetailScroll(input) {
34452
34475
  } = input;
34453
34476
  const [isTimelineScrolledToTop, setIsTimelineScrolledToTop] = useState39(true);
34454
34477
  const [isTimelineScrolledToBottom, setIsTimelineScrolledToBottom] = useState39(true);
34455
- const bottomLockOwnerRef = useRef45(null);
34456
- const userScrollAwayIntentConversationRef = useRef45(null);
34478
+ const bottomLockOwnerRef = useRef46(null);
34479
+ const userScrollAwayIntentConversationRef = useRef46(null);
34457
34480
  useLayoutEffect7(() => {
34458
34481
  const timeline = timelineRef.current;
34459
34482
  if (!timeline) {
@@ -35450,11 +35473,11 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
35450
35473
  renderProviderUnavailableState
35451
35474
  }) {
35452
35475
  "use memo";
35453
- const timelineRef = useRef46(null);
35454
- const bottomDockRef = useRef46(null);
35455
- const timelineScrollAnchorRef = useRef46(null);
35456
- const submittedPromptScrollConversationRef = useRef46(null);
35457
- const pendingPrependScrollAnchorRef = useRef46(null);
35476
+ const timelineRef = useRef47(null);
35477
+ const bottomDockRef = useRef47(null);
35478
+ const timelineScrollAnchorRef = useRef47(null);
35479
+ const submittedPromptScrollConversationRef = useRef47(null);
35480
+ const pendingPrependScrollAnchorRef = useRef47(null);
35458
35481
  const [
35459
35482
  bottomDockDismissedPromptRequestId,
35460
35483
  setBottomDockDismissedPromptRequestId
@@ -35936,7 +35959,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
35936
35959
  });
35937
35960
 
35938
35961
  // agent-gui/agentGuiNode/view/AgentGUIRenameConversationDialog.tsx
35939
- import { memo as memo13, useCallback as useCallback56, useEffect as useEffect35, useRef as useRef47, useState as useState42 } from "react";
35962
+ import { memo as memo13, useCallback as useCallback56, useEffect as useEffect35, useRef as useRef48, useState as useState42 } from "react";
35940
35963
  import { ConfirmationDialog as ConfirmationDialog4, Input as Input4 } from "@tutti-os/ui-system";
35941
35964
  import { jsx as jsx71, jsxs as jsxs51 } from "react/jsx-runtime";
35942
35965
  var AgentGUIRenameConversationDialog = memo13(
@@ -35950,9 +35973,9 @@ var AgentGUIRenameConversationDialog = memo13(
35950
35973
  "use memo";
35951
35974
  const [title, setTitle] = useState42("");
35952
35975
  const [isSaving, setIsSaving] = useState42(false);
35953
- const isSavingRef = useRef47(false);
35954
- const armedPointerActionRef = useRef47(null);
35955
- const inputRef = useRef47(null);
35976
+ const isSavingRef = useRef48(false);
35977
+ const armedPointerActionRef = useRef48(null);
35978
+ const inputRef = useRef48(null);
35956
35979
  const trimmedTitle = title.trim();
35957
35980
  useEffect35(() => {
35958
35981
  if (!open || !conversation) {
@@ -36135,6 +36158,7 @@ function AgentGUIReferencePickerSurface({
36135
36158
  initialTarget,
36136
36159
  isNodeSelectable,
36137
36160
  open,
36161
+ purpose,
36138
36162
  provenanceFilter,
36139
36163
  resolveEntryIconUrl,
36140
36164
  workspaceId,
@@ -36151,6 +36175,7 @@ function AgentGUIReferencePickerSurface({
36151
36175
  isNodeSelectable,
36152
36176
  fileManagerCopy: fileManagerCopy ?? void 0,
36153
36177
  open,
36178
+ purpose,
36154
36179
  provenanceFilter: provenanceFilter?.snapshot.value,
36155
36180
  provenanceFilterControl: provenanceFilter ? /* @__PURE__ */ jsx72(
36156
36181
  AgentReferenceProvenanceFilterControl,
@@ -36240,12 +36265,13 @@ function AgentTargetSetupRoot({
36240
36265
  }
36241
36266
 
36242
36267
  // agent-gui/agentGuiNode/view/useAgentGUIWorkspaceReferencePicker.ts
36243
- import { useCallback as useCallback58, useMemo as useMemo41, useRef as useRef48, useState as useState43 } from "react";
36268
+ import { useCallback as useCallback58, useMemo as useMemo41, useRef as useRef49, useState as useState43 } from "react";
36244
36269
  import { createRichTextMentionHref } from "@tutti-os/ui-rich-text/core";
36245
36270
  function useAgentGUIWorkspaceReferencePicker(input) {
36246
36271
  const {
36247
36272
  onWorkspaceFileReferencesAdded,
36248
36273
  previewMode,
36274
+ projectDirectorySourceAggregator,
36249
36275
  referenceSourceAggregator,
36250
36276
  resolveMentionReferenceTarget,
36251
36277
  resolveWorkspaceReferenceInitialTarget,
@@ -36254,16 +36280,23 @@ function useAgentGUIWorkspaceReferencePicker(input) {
36254
36280
  workspaceFileReferenceCopy
36255
36281
  } = input;
36256
36282
  const [workspaceReferencePickerOpen, setWorkspaceReferencePickerOpen] = useState43(false);
36283
+ const [workspaceReferencePickerPurpose, setWorkspaceReferencePickerPurpose] = useState43("reference");
36257
36284
  const [workspaceReferencePickerTarget, setWorkspaceReferencePickerTarget] = useState43(null);
36258
- const workspaceReferencePickerResolverRef = useRef48(null);
36285
+ const workspaceReferencePickerResolverRef = useRef49(null);
36286
+ const projectDirectoryPickerResolverRef = useRef49(null);
36259
36287
  const emptyReferencePickResult = useMemo41(
36260
36288
  () => ({ files: [], mentionItems: [] }),
36261
36289
  []
36262
36290
  );
36263
36291
  const hostLocalFileSourceId = "host-local-file";
36264
36292
  const isWorkspaceReferencePickerNodeSelectable = useCallback58(
36265
- (node) => node.ref.sourceId !== hostLocalFileSourceId || node.kind === "file",
36266
- [hostLocalFileSourceId]
36293
+ (node) => {
36294
+ if (workspaceReferencePickerPurpose === "directory") {
36295
+ return node.kind === "folder";
36296
+ }
36297
+ return node.ref.sourceId !== hostLocalFileSourceId || node.kind === "file";
36298
+ },
36299
+ [hostLocalFileSourceId, workspaceReferencePickerPurpose]
36267
36300
  );
36268
36301
  const requestWorkspaceReferences = useCallback58(
36269
36302
  async (entity) => {
@@ -36279,8 +36312,12 @@ function useAgentGUIWorkspaceReferencePicker(input) {
36279
36312
  userProjects: viewModel.rail.userProjects
36280
36313
  }) ?? null : null;
36281
36314
  setWorkspaceReferencePickerTarget(target);
36315
+ setWorkspaceReferencePickerPurpose("reference");
36282
36316
  setWorkspaceReferencePickerOpen(true);
36283
36317
  return await new Promise((resolve) => {
36318
+ workspaceReferencePickerResolverRef.current?.(emptyReferencePickResult);
36319
+ projectDirectoryPickerResolverRef.current?.(null);
36320
+ projectDirectoryPickerResolverRef.current = null;
36284
36321
  workspaceReferencePickerResolverRef.current = resolve;
36285
36322
  });
36286
36323
  },
@@ -36297,11 +36334,28 @@ function useAgentGUIWorkspaceReferencePicker(input) {
36297
36334
  workspaceFileReferenceCopy
36298
36335
  ]
36299
36336
  );
36337
+ const requestProjectDirectory = useCallback58(async () => {
36338
+ if (previewMode || !projectDirectorySourceAggregator) {
36339
+ return null;
36340
+ }
36341
+ setWorkspaceReferencePickerTarget(null);
36342
+ setWorkspaceReferencePickerPurpose("directory");
36343
+ setWorkspaceReferencePickerOpen(true);
36344
+ return await new Promise((resolve) => {
36345
+ workspaceReferencePickerResolverRef.current?.(emptyReferencePickResult);
36346
+ workspaceReferencePickerResolverRef.current = null;
36347
+ projectDirectoryPickerResolverRef.current?.(null);
36348
+ projectDirectoryPickerResolverRef.current = resolve;
36349
+ });
36350
+ }, [emptyReferencePickResult, previewMode, projectDirectorySourceAggregator]);
36300
36351
  const closeWorkspaceReferencePicker = useCallback58(() => {
36301
36352
  workspaceReferencePickerResolverRef.current?.(emptyReferencePickResult);
36302
36353
  workspaceReferencePickerResolverRef.current = null;
36354
+ projectDirectoryPickerResolverRef.current?.(null);
36355
+ projectDirectoryPickerResolverRef.current = null;
36303
36356
  setWorkspaceReferencePickerOpen(false);
36304
36357
  setWorkspaceReferencePickerTarget(null);
36358
+ setWorkspaceReferencePickerPurpose("reference");
36305
36359
  }, [emptyReferencePickResult]);
36306
36360
  const settleReferencePicker = useCallback58(
36307
36361
  (result, addedFiles) => {
@@ -36309,6 +36363,7 @@ function useAgentGUIWorkspaceReferencePicker(input) {
36309
36363
  workspaceReferencePickerResolverRef.current = null;
36310
36364
  setWorkspaceReferencePickerOpen(false);
36311
36365
  setWorkspaceReferencePickerTarget(null);
36366
+ setWorkspaceReferencePickerPurpose("reference");
36312
36367
  if (addedFiles.length > 0) {
36313
36368
  void onWorkspaceFileReferencesAdded?.(addedFiles);
36314
36369
  }
@@ -36317,9 +36372,20 @@ function useAgentGUIWorkspaceReferencePicker(input) {
36317
36372
  );
36318
36373
  const confirmWorkspaceReferencePicker = useCallback58(
36319
36374
  (refs) => {
36375
+ if (workspaceReferencePickerPurpose === "directory") {
36376
+ const directory = refs.find((ref) => ref.kind === "folder") ?? null;
36377
+ projectDirectoryPickerResolverRef.current?.(
36378
+ directory ? { path: directory.path } : null
36379
+ );
36380
+ projectDirectoryPickerResolverRef.current = null;
36381
+ setWorkspaceReferencePickerOpen(false);
36382
+ setWorkspaceReferencePickerTarget(null);
36383
+ setWorkspaceReferencePickerPurpose("reference");
36384
+ return;
36385
+ }
36320
36386
  settleReferencePicker({ files: refs, mentionItems: [] }, refs);
36321
36387
  },
36322
- [settleReferencePicker]
36388
+ [settleReferencePicker, workspaceReferencePickerPurpose]
36323
36389
  );
36324
36390
  const confirmWorkspaceReferenceBundles = useCallback58(
36325
36391
  (result) => {
@@ -36363,14 +36429,17 @@ function useAgentGUIWorkspaceReferencePicker(input) {
36363
36429
  confirmWorkspaceReferenceBundles,
36364
36430
  confirmWorkspaceReferencePicker,
36365
36431
  isWorkspaceReferencePickerNodeSelectable,
36432
+ requestProjectDirectory,
36366
36433
  requestWorkspaceReferences,
36434
+ workspaceReferencePickerAggregator: workspaceReferencePickerPurpose === "directory" ? projectDirectorySourceAggregator ?? null : referenceSourceAggregator ?? null,
36367
36435
  workspaceReferencePickerOpen,
36436
+ workspaceReferencePickerPurpose,
36368
36437
  workspaceReferencePickerTarget
36369
36438
  };
36370
36439
  }
36371
36440
 
36372
36441
  // agent-gui/agentGuiNode/engagement/useAgentGUINodeEngagement.ts
36373
- import { useRef as useRef50 } from "react";
36442
+ import { useRef as useRef51 } from "react";
36374
36443
 
36375
36444
  // agent-gui/agentGuiNode/engagement/projectAgentGUIEngagementContext.ts
36376
36445
  function projectAgentGUIEngagementContext(viewModel, composerReady) {
@@ -36402,7 +36471,7 @@ function createAgentGUIEngagementContextKey(input) {
36402
36471
  }
36403
36472
 
36404
36473
  // agent-gui/agentGuiNode/engagement/useAgentGUIPanelEngagement.ts
36405
- import { useEffect as useEffect36, useRef as useRef49 } from "react";
36474
+ import { useEffect as useEffect36, useRef as useRef50 } from "react";
36406
36475
 
36407
36476
  // agent-gui/agentGuiNode/engagement/AgentGUIPanelEngagementController.ts
36408
36477
  var AGENT_GUI_PANEL_EXPOSURE_DWELL_MS = 1e3;
@@ -36556,10 +36625,10 @@ function documentIsVisible() {
36556
36625
 
36557
36626
  // agent-gui/agentGuiNode/engagement/useAgentGUIPanelEngagement.ts
36558
36627
  function useAgentGUIPanelEngagement(input) {
36559
- const inputRef = useRef49(input);
36560
- const controllerRef = useRef49(null);
36561
- const intersectionRatioRef = useRef49(0);
36562
- const engagementRef = useRef49(null);
36628
+ const inputRef = useRef50(input);
36629
+ const controllerRef = useRef50(null);
36630
+ const intersectionRatioRef = useRef50(0);
36631
+ const engagementRef = useRef50(null);
36563
36632
  inputRef.current = input;
36564
36633
  if (!engagementRef.current) {
36565
36634
  engagementRef.current = {
@@ -36599,7 +36668,7 @@ function useAgentGUIPanelEngagement(input) {
36599
36668
 
36600
36669
  // agent-gui/agentGuiNode/engagement/useAgentGUINodeEngagement.ts
36601
36670
  function useAgentGUINodeEngagement(input) {
36602
- const layoutElementRef = useRef50(null);
36671
+ const layoutElementRef = useRef51(null);
36603
36672
  const projected = projectAgentGUIEngagementContext(
36604
36673
  input.viewModel,
36605
36674
  input.composerReady
@@ -36618,7 +36687,7 @@ function useAgentGUINodeEngagement(input) {
36618
36687
  }
36619
36688
 
36620
36689
  // agent-gui/agentGuiNode/view/useAgentGUIExternalRequests.ts
36621
- import { useCallback as useCallback59, useEffect as useEffect37, useRef as useRef51 } from "react";
36690
+ import { useCallback as useCallback59, useEffect as useEffect37, useRef as useRef52 } from "react";
36622
36691
  function resolveSessionActionConversation(viewModel, agentSessionId) {
36623
36692
  const active = viewModel.rail.activeConversation;
36624
36693
  if (!agentSessionId) {
@@ -36644,17 +36713,17 @@ function useAgentGUIExternalRequests(input) {
36644
36713
  viewModel
36645
36714
  } = input;
36646
36715
  const agentHostApi = useOptionalAgentHostApi();
36647
- const railInteractionLockProbeRef = useRef51(null);
36716
+ const railInteractionLockProbeRef = useRef52(null);
36648
36717
  const registerRailInteractionLockProbe = useCallback59(
36649
36718
  (probe) => {
36650
36719
  railInteractionLockProbeRef.current = probe;
36651
36720
  },
36652
36721
  []
36653
36722
  );
36654
- const handledNewConversationRequestSequenceRef = useRef51(
36723
+ const handledNewConversationRequestSequenceRef = useRef52(
36655
36724
  newConversationRequestSequence
36656
36725
  );
36657
- const handledSessionActionRequestSequenceRef = useRef51(
36726
+ const handledSessionActionRequestSequenceRef = useRef52(
36658
36727
  sessionActionRequest?.sequence ?? null
36659
36728
  );
36660
36729
  const copyConversationValue = useAgentGUIConversationCopyAction(labels);
@@ -36756,6 +36825,7 @@ function AgentGUINodeView({
36756
36825
  selectProjectDirectory,
36757
36826
  workspaceFileReferenceCopy = null,
36758
36827
  onRequestGitBranches = null,
36828
+ projectDirectorySourceAggregator = null,
36759
36829
  referenceSourceAggregator = null,
36760
36830
  resolveWorkspaceReferenceEntryIconUrl,
36761
36831
  resolveMentionReferenceTarget = null,
@@ -36775,7 +36845,7 @@ function AgentGUINodeView({
36775
36845
  viewModel
36776
36846
  });
36777
36847
  const [providerManagerOpen, setProviderManagerOpen] = useState44(false);
36778
- const railResizeInteractionRef = useRef52(null);
36848
+ const railResizeInteractionRef = useRef53(null);
36779
36849
  const [isRailResizing, setIsRailResizing] = useState44(false);
36780
36850
  const [railResizeWidthPx, setRailResizeWidthPx] = useState44(
36781
36851
  null
@@ -36789,12 +36859,16 @@ function AgentGUINodeView({
36789
36859
  confirmWorkspaceReferenceBundles,
36790
36860
  confirmWorkspaceReferencePicker,
36791
36861
  isWorkspaceReferencePickerNodeSelectable,
36862
+ requestProjectDirectory,
36792
36863
  requestWorkspaceReferences,
36864
+ workspaceReferencePickerAggregator,
36793
36865
  workspaceReferencePickerOpen,
36866
+ workspaceReferencePickerPurpose,
36794
36867
  workspaceReferencePickerTarget
36795
36868
  } = useAgentGUIWorkspaceReferencePicker({
36796
36869
  onWorkspaceFileReferencesAdded,
36797
36870
  previewMode,
36871
+ projectDirectorySourceAggregator,
36798
36872
  referenceSourceAggregator,
36799
36873
  resolveMentionReferenceTarget,
36800
36874
  resolveWorkspaceReferenceInitialTarget,
@@ -36802,6 +36876,7 @@ function AgentGUINodeView({
36802
36876
  workspaceFileReferenceAdapter,
36803
36877
  workspaceFileReferenceCopy
36804
36878
  });
36879
+ const effectiveSelectProjectDirectory = projectDirectorySourceAggregator ? requestProjectDirectory : selectProjectDirectory;
36805
36880
  const createConversationDisabled = viewModel.rail.selectedAgentTarget.disabled === true;
36806
36881
  const createConversationAction = useStableEventCallback(
36807
36882
  actions.createConversation
@@ -37088,7 +37163,7 @@ function AgentGUINodeView({
37088
37163
  onConfirmDeleteConversation: confirmDeleteConversation,
37089
37164
  onOpenProjectFiles: openProjectFiles,
37090
37165
  onOpenConversationWindow: openConversationWindow,
37091
- selectProjectDirectory
37166
+ selectProjectDirectory: effectiveSelectProjectDirectory
37092
37167
  }),
37093
37168
  [
37094
37169
  cancelDeleteConversation,
@@ -37110,7 +37185,7 @@ function AgentGUINodeView({
37110
37185
  requestDeleteConversation,
37111
37186
  requestRenameConversation,
37112
37187
  selectConversation,
37113
- selectProjectDirectory,
37188
+ effectiveSelectProjectDirectory,
37114
37189
  sectionAgentTargetFallbackId,
37115
37190
  viewModel.rail.agentTargets,
37116
37191
  viewModel.rail.agentTargetsLoading,
@@ -37304,7 +37379,7 @@ function AgentGUINodeView({
37304
37379
  resolveExternalPromptEntries,
37305
37380
  prepareExternalPromptFiles,
37306
37381
  promptAssetLimit,
37307
- selectProjectDirectory,
37382
+ selectProjectDirectory: effectiveSelectProjectDirectory,
37308
37383
  onRequestGitBranches,
37309
37384
  onRequestComposerFocus: requestComposerFocus,
37310
37385
  workspaceAppIcons: effectiveWorkspaceAppIcons,
@@ -37319,7 +37394,7 @@ function AgentGUINodeView({
37319
37394
  /* @__PURE__ */ jsx74(
37320
37395
  AgentGUIReferencePickerSurface,
37321
37396
  {
37322
- aggregator: referenceSourceAggregator,
37397
+ aggregator: workspaceReferencePickerAggregator,
37323
37398
  copy: workspaceFileReferenceCopy ?? fallbackWorkspaceFileReferenceCopy,
37324
37399
  fileAdapter: workspaceFileReferenceAdapter,
37325
37400
  fileManagerCopy: workspaceFileManagerCopy,
@@ -37327,12 +37402,13 @@ function AgentGUINodeView({
37327
37402
  initialTarget: workspaceReferencePickerTarget,
37328
37403
  isNodeSelectable: isWorkspaceReferencePickerNodeSelectable,
37329
37404
  open: workspaceReferencePickerOpen,
37405
+ purpose: workspaceReferencePickerPurpose,
37330
37406
  provenanceFilter: referenceProvenanceFilter,
37331
37407
  resolveEntryIconUrl: resolveWorkspaceReferenceEntryIconUrl,
37332
37408
  workspaceId: viewModel.shell.workspaceId,
37333
37409
  onClose: closeWorkspaceReferencePicker,
37334
37410
  onConfirm: confirmWorkspaceReferencePicker,
37335
- onConfirmBundles: confirmWorkspaceReferenceBundles
37411
+ onConfirmBundles: workspaceReferencePickerPurpose === "reference" ? confirmWorkspaceReferenceBundles : void 0
37336
37412
  }
37337
37413
  ),
37338
37414
  /* @__PURE__ */ jsx74(
@@ -37530,7 +37606,7 @@ import {
37530
37606
  useCallback as useCallback61,
37531
37607
  useEffect as useEffect39,
37532
37608
  useLayoutEffect as useLayoutEffect9,
37533
- useRef as useRef53,
37609
+ useRef as useRef54,
37534
37610
  useState as useState45
37535
37611
  } from "react";
37536
37612
  import { createPortal as createPortal5 } from "react-dom";
@@ -37568,8 +37644,8 @@ function AgentProbeInfoPopover({
37568
37644
  onOpen
37569
37645
  }) {
37570
37646
  "use memo";
37571
- const anchorRef = useRef53(null);
37572
- const popoverRef = useRef53(null);
37647
+ const anchorRef = useRef54(null);
37648
+ const popoverRef = useRef54(null);
37573
37649
  const [isOpen, setIsOpen] = useState45(false);
37574
37650
  const [popoverStyle, setPopoverStyle] = useState45(null);
37575
37651
  const openPopover = useCallback61(() => {
@@ -37775,7 +37851,7 @@ function areAgentGUINodePropsEqual(previous, next) {
37775
37851
  const pc = previous.hostCapabilities, nc = next.hostCapabilities;
37776
37852
  const pa = previous.hostActions, na = next.hostActions;
37777
37853
  const ps = previous.renderSlots, ns = next.renderSlots;
37778
- return pi.nodeId === ni.nodeId && pi.workspaceId === ni.workspaceId && pi.currentUserId === ni.currentUserId && pi.title === ni.title && pw.path === nw.path && pw.fileReferenceAdapter === nw.fileReferenceAdapter && pw.onRequestGitBranches === nw.onRequestGitBranches && pw.selectProjectDirectory === nw.selectProjectDirectory && pw.resolveExternalPromptEntries === nw.resolveExternalPromptEntries && pw.prepareExternalPromptFiles === nw.prepareExternalPromptFiles && pw.promptAssetLimit === nw.promptAssetLimit && pw.referenceSourceAggregator === nw.referenceSourceAggregator && pw.resolveReferenceEntryIconUrl === nw.resolveReferenceEntryIconUrl && pw.resolveMentionReferenceTarget === nw.resolveMentionReferenceTarget && pw.resolveReferenceInitialTarget === nw.resolveReferenceInitialTarget && pw.onFileReferencesAdded === nw.onFileReferencesAdded && pw.agentSettings.avoidGroupingEdits === nw.agentSettings.avoidGroupingEdits && pc.referenceProvenanceFilterCatalog === nc.referenceProvenanceFilterCatalog && pc.referenceProvenanceFilterEnabled === nc.referenceProvenanceFilterEnabled && agentGuiStateEquals(previous.state, next.state) && pf.position.x === nf.position.x && pf.position.y === nf.position.y && pf.width === nf.width && pf.height === nf.height && pf.desktopSize.width === nf.desktopSize.width && pf.desktopSize.height === nf.desktopSize.height && pf.isMaximized === nf.isMaximized && pf.isActive === nf.isActive && pf.isVisible === nf.isVisible && pf.embedded === nf.embedded && pf.previewMode === nf.previewMode && pf.conversationRailAutoCollapseWidthPx === nf.conversationRailAutoCollapseWidthPx && pr.composerFocusSequence === nr.composerFocusSequence && pr.composerAppend === nr.composerAppend && pr.newConversationSequence === nr.newConversationSequence && pr.sessionAction === nr.sessionAction && pr.openSession === nr.openSession && pr.prefillPrompt === nr.prefillPrompt && pr.agentProbes === nr.agentProbes && pr.onProbeDemandChange === nr.onProbeDemandChange && pr.onProbeRefreshRequest === nr.onProbeRefreshRequest && pc.capabilityMenuState === nc.capabilityMenuState && pc.accountMenuState === nc.accountMenuState && pc.agentTargets === nc.agentTargets && pc.agentTargetsLoading === nc.agentTargetsLoading && pc.handoffAgentTargets === nc.handoffAgentTargets && pc.handoffAgentTargetsLoading === nc.handoffAgentTargetsLoading && pc.providerRailAllPresentation?.iconUrl === nc.providerRailAllPresentation?.iconUrl && pc.providerRailMode === nc.providerRailMode && pc.comingSoonProviders === nc.comingSoonProviders && pc.providerReadinessGates === nc.providerReadinessGates && pc.defaultAgentTargetId === nc.defaultAgentTargetId && pc.providerAuthAccountLabels === nc.providerAuthAccountLabels && pc.mentionService === nc.mentionService && pc.workspaceAppIcons === nc.workspaceAppIcons && pc.disabledHomeSuggestions === nc.disabledHomeSuggestions && pa.onLinkAction === na.onLinkAction && pa.onHandoffConversation === na.onHandoffConversation && pa.onCapabilitySettingsRequest === na.onCapabilitySettingsRequest && pa.onAgentProviderLogin === na.onAgentProviderLogin && pa.onAgentEnvPanelOpen === na.onAgentEnvPanelOpen && pa.onOpenConversationWindow === na.onOpenConversationWindow && pa.onClose === na.onClose && pa.onResize === na.onResize && pa.onUpdateNode === na.onUpdateNode && pa.onRememberComposerDefaults === na.onRememberComposerDefaults && pa.isMuted === na.isMuted && pa.onMinimize === na.onMinimize && pa.onToggleMaximize === na.onToggleMaximize && pa.onShowMessage === na.onShowMessage && pa.onEngagementEvent === na.onEngagementEvent && ps.providerRailEmpty === ns.providerRailEmpty && ps.providerUnavailableState === ns.providerUnavailableState && ps.sidebarFooter === ns.sidebarFooter;
37854
+ return pi.nodeId === ni.nodeId && pi.workspaceId === ni.workspaceId && pi.currentUserId === ni.currentUserId && pi.title === ni.title && pw.path === nw.path && pw.fileReferenceAdapter === nw.fileReferenceAdapter && pw.onRequestGitBranches === nw.onRequestGitBranches && pw.selectProjectDirectory === nw.selectProjectDirectory && pw.resolveExternalPromptEntries === nw.resolveExternalPromptEntries && pw.prepareExternalPromptFiles === nw.prepareExternalPromptFiles && pw.promptAssetLimit === nw.promptAssetLimit && pw.projectDirectorySourceAggregator === nw.projectDirectorySourceAggregator && pw.referenceSourceAggregator === nw.referenceSourceAggregator && pw.resolveReferenceEntryIconUrl === nw.resolveReferenceEntryIconUrl && pw.resolveMentionReferenceTarget === nw.resolveMentionReferenceTarget && pw.resolveReferenceInitialTarget === nw.resolveReferenceInitialTarget && pw.onFileReferencesAdded === nw.onFileReferencesAdded && pw.agentSettings.avoidGroupingEdits === nw.agentSettings.avoidGroupingEdits && pc.referenceProvenanceFilterCatalog === nc.referenceProvenanceFilterCatalog && pc.referenceProvenanceFilterEnabled === nc.referenceProvenanceFilterEnabled && agentGuiStateEquals(previous.state, next.state) && pf.position.x === nf.position.x && pf.position.y === nf.position.y && pf.width === nf.width && pf.height === nf.height && pf.desktopSize.width === nf.desktopSize.width && pf.desktopSize.height === nf.desktopSize.height && pf.isMaximized === nf.isMaximized && pf.isActive === nf.isActive && pf.isVisible === nf.isVisible && pf.embedded === nf.embedded && pf.previewMode === nf.previewMode && pf.conversationRailAutoCollapseWidthPx === nf.conversationRailAutoCollapseWidthPx && pr.composerFocusSequence === nr.composerFocusSequence && pr.composerAppend === nr.composerAppend && pr.newConversationSequence === nr.newConversationSequence && pr.sessionAction === nr.sessionAction && pr.openSession === nr.openSession && pr.prefillPrompt === nr.prefillPrompt && pr.agentProbes === nr.agentProbes && pr.onProbeDemandChange === nr.onProbeDemandChange && pr.onProbeRefreshRequest === nr.onProbeRefreshRequest && pc.capabilityMenuState === nc.capabilityMenuState && pc.accountMenuState === nc.accountMenuState && pc.agentTargets === nc.agentTargets && pc.agentTargetsLoading === nc.agentTargetsLoading && pc.handoffAgentTargets === nc.handoffAgentTargets && pc.handoffAgentTargetsLoading === nc.handoffAgentTargetsLoading && pc.providerRailAllPresentation?.iconUrl === nc.providerRailAllPresentation?.iconUrl && pc.providerRailMode === nc.providerRailMode && pc.comingSoonProviders === nc.comingSoonProviders && pc.providerReadinessGates === nc.providerReadinessGates && pc.defaultAgentTargetId === nc.defaultAgentTargetId && pc.providerAuthAccountLabels === nc.providerAuthAccountLabels && pc.mentionService === nc.mentionService && pc.workspaceAppIcons === nc.workspaceAppIcons && pc.disabledHomeSuggestions === nc.disabledHomeSuggestions && pa.onLinkAction === na.onLinkAction && pa.onHandoffConversation === na.onHandoffConversation && pa.onCapabilitySettingsRequest === na.onCapabilitySettingsRequest && pa.onAgentProviderLogin === na.onAgentProviderLogin && pa.onAgentEnvPanelOpen === na.onAgentEnvPanelOpen && pa.onOpenConversationWindow === na.onOpenConversationWindow && pa.onClose === na.onClose && pa.onResize === na.onResize && pa.onUpdateNode === na.onUpdateNode && pa.onRememberComposerDefaults === na.onRememberComposerDefaults && pa.isMuted === na.isMuted && pa.onMinimize === na.onMinimize && pa.onToggleMaximize === na.onToggleMaximize && pa.onShowMessage === na.onShowMessage && pa.onEngagementEvent === na.onEngagementEvent && ps.providerRailEmpty === ns.providerRailEmpty && ps.providerUnavailableState === ns.providerUnavailableState && ps.sidebarFooter === ns.sidebarFooter;
37779
37855
  }
37780
37856
 
37781
37857
  // agent-gui/agentGuiNode/AgentGUIMentionServiceBoundary.tsx
@@ -38126,6 +38202,10 @@ function useAgentGUIConversationRailLabels(t) {
38126
38202
  }
38127
38203
  var workspaceFileReferenceLocaleKeyByPickerKey = {
38128
38204
  "actions.cancel": "common.cancel",
38205
+ "directoryPicker.confirm": "agentHost.agentGui.directoryPicker.confirm",
38206
+ "directoryPicker.emptySearch": "agentHost.agentGui.directoryPicker.emptySearch",
38207
+ "directoryPicker.searchPlaceholder": "agentHost.agentGui.directoryPicker.searchPlaceholder",
38208
+ "directoryPicker.title": "agentHost.agentGui.directoryPicker.title",
38129
38209
  "referencePicker.confirm": "agentHost.agentGui.referencePicker.confirm",
38130
38210
  "referencePicker.clearFilter": "agentHost.agentGui.referencePicker.clearFilter",
38131
38211
  "referencePicker.emptyDirectory": "agentHost.agentGui.referencePicker.emptyDirectory",
@@ -38929,6 +39009,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38929
39009
  resolveExternalPromptEntries = null,
38930
39010
  prepareExternalPromptFiles = null,
38931
39011
  promptAssetLimit = null,
39012
+ projectDirectorySourceAggregator = null,
38932
39013
  referenceSourceAggregator = null,
38933
39014
  resolveReferenceEntryIconUrl: resolveWorkspaceReferenceEntryIconUrl,
38934
39015
  resolveMentionReferenceTarget = null,
@@ -38949,7 +39030,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38949
39030
  conversationRailAutoCollapseWidthPx = null
38950
39031
  } = frame;
38951
39032
  const railAutoCollapseWidthPx = conversationRailAutoCollapseWidthPx ?? void 0;
38952
- const widthRef = useRef54(width);
39033
+ const widthRef = useRef55(width);
38953
39034
  widthRef.current = width;
38954
39035
  const {
38955
39036
  composerAppend: composerAppendRequest = null,
@@ -39438,6 +39519,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
39438
39519
  onOpenConversationWindow,
39439
39520
  onRequestGitBranches,
39440
39521
  selectProjectDirectory,
39522
+ projectDirectorySourceAggregator,
39441
39523
  referenceSourceAggregator,
39442
39524
  resolveWorkspaceReferenceEntryIconUrl,
39443
39525
  resolveMentionReferenceTarget,
@@ -39546,4 +39628,4 @@ export {
39546
39628
  AgentHandoffMenu,
39547
39629
  AgentGUI
39548
39630
  };
39549
- //# sourceMappingURL=chunk-UMJIM225.js.map
39631
+ //# sourceMappingURL=chunk-HP4RM2SM.js.map