@tutti-os/agent-gui 0.0.46 → 0.0.47

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 (60) hide show
  1. package/dist/{AgentMentionSearchController-D5ks45fN.d.ts → AgentMentionSearchController-CExFPobz.d.ts} +1 -1
  2. package/dist/AgentMessageMarkdown-DeYPURtF.d.ts +7 -0
  3. package/dist/agent-conversation/index.d.ts +4 -3
  4. package/dist/agent-conversation/index.js +8 -8
  5. package/dist/agent-message-center/index.d.ts +1 -1
  6. package/dist/agent-message-center/index.js +9 -9
  7. package/dist/{agentConversationVM-1QgRwvwZ.d.ts → agentConversationVM-BTMtRteS.d.ts} +14 -0
  8. package/dist/{AgentMessageMarkdown-Cts0dAIm.d.ts → agentGuiNodeTypes-B5Y6yDKy.d.ts} +43 -9
  9. package/dist/app/renderer/agentactivity.css +92 -9
  10. package/dist/{chunk-FRG36S6N.js → chunk-2FOBSURO.js} +5 -5
  11. package/dist/chunk-2FOBSURO.js.map +1 -0
  12. package/dist/{chunk-AMNXH4DJ.js → chunk-2RYZ4EBF.js} +2 -2
  13. package/dist/{chunk-EIC7XS3C.js → chunk-5QTC2L52.js} +2 -2
  14. package/dist/{chunk-ZJ7OSY4T.js → chunk-7NCWSH7U.js} +9 -9
  15. package/dist/{chunk-ZJ7OSY4T.js.map → chunk-7NCWSH7U.js.map} +1 -1
  16. package/dist/{chunk-62QOR3TC.js → chunk-HCS3HUUX.js} +5 -5
  17. package/dist/{chunk-OL54R6OL.js → chunk-J3SJZMI5.js} +2 -2
  18. package/dist/{chunk-VFQR7AZI.js → chunk-KACBTC7Y.js} +25 -3
  19. package/dist/chunk-KACBTC7Y.js.map +1 -0
  20. package/dist/{chunk-FJG2EH4V.js → chunk-KUCWRSXU.js} +2 -2
  21. package/dist/{chunk-D6IYEVDT.js → chunk-MCH35MAX.js} +2 -2
  22. package/dist/{chunk-NZ2BGOJU.js → chunk-Q4X6Q4E6.js} +2 -2
  23. package/dist/{chunk-EU7RWKHE.js → chunk-R6GOICRO.js} +5 -5
  24. package/dist/chunk-SD56WDSC.js +359 -0
  25. package/dist/chunk-SD56WDSC.js.map +1 -0
  26. package/dist/{chunk-TXXWUG2J.js → chunk-VE6JY2TH.js} +2 -1
  27. package/dist/{chunk-TXXWUG2J.js.map → chunk-VE6JY2TH.js.map} +1 -1
  28. package/dist/{chunk-QT45WUPQ.js → chunk-XJXSR5XI.js} +244 -21
  29. package/dist/chunk-XJXSR5XI.js.map +1 -0
  30. package/dist/{chunk-BAQTM6VS.js → chunk-ZAF4IVUT.js} +848 -102
  31. package/dist/chunk-ZAF4IVUT.js.map +1 -0
  32. package/dist/context-mention-palette/index.d.ts +3 -3
  33. package/dist/context-mention-palette/index.js +9 -9
  34. package/dist/i18n/index.d.ts +24 -2
  35. package/dist/i18n/index.js +2 -2
  36. package/dist/index.d.ts +22 -6
  37. package/dist/index.js +847 -812
  38. package/dist/index.js.map +1 -1
  39. package/dist/plan-decision-ops.d.ts +1 -1
  40. package/dist/queued-prompt-runtime.d.ts +97 -0
  41. package/dist/queued-prompt-runtime.js +9 -0
  42. package/dist/queued-prompt-runtime.js.map +1 -0
  43. package/dist/workbench/contribution.js +3 -3
  44. package/dist/workbench/index.js +9 -9
  45. package/dist/workbench/launch.js +2 -2
  46. package/dist/workbench/sessionTitle.js +3 -3
  47. package/dist/workspace-agent-generated-files.js +3 -3
  48. package/package.json +21 -14
  49. package/dist/chunk-BAQTM6VS.js.map +0 -1
  50. package/dist/chunk-FRG36S6N.js.map +0 -1
  51. package/dist/chunk-QT45WUPQ.js.map +0 -1
  52. package/dist/chunk-VFQR7AZI.js.map +0 -1
  53. /package/dist/{chunk-AMNXH4DJ.js.map → chunk-2RYZ4EBF.js.map} +0 -0
  54. /package/dist/{chunk-EIC7XS3C.js.map → chunk-5QTC2L52.js.map} +0 -0
  55. /package/dist/{chunk-62QOR3TC.js.map → chunk-HCS3HUUX.js.map} +0 -0
  56. /package/dist/{chunk-OL54R6OL.js.map → chunk-J3SJZMI5.js.map} +0 -0
  57. /package/dist/{chunk-FJG2EH4V.js.map → chunk-KUCWRSXU.js.map} +0 -0
  58. /package/dist/{chunk-D6IYEVDT.js.map → chunk-MCH35MAX.js.map} +0 -0
  59. /package/dist/{chunk-NZ2BGOJU.js.map → chunk-Q4X6Q4E6.js.map} +0 -0
  60. /package/dist/{chunk-EU7RWKHE.js.map → chunk-R6GOICRO.js.map} +0 -0
package/dist/index.js CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  import {
23
23
  AgentInteractivePromptSurface,
24
24
  approvalOptionDisplayLabel
25
- } from "./chunk-62QOR3TC.js";
25
+ } from "./chunk-HCS3HUUX.js";
26
26
  import {
27
27
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
28
28
  PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
@@ -41,7 +41,7 @@ import {
41
41
  resolveAgentGUIExplicitConversationTitle,
42
42
  resolveAgentGUIProviderDisplayLabel,
43
43
  resolveAgentGUIProviderIdentity
44
- } from "./chunk-FJG2EH4V.js";
44
+ } from "./chunk-KUCWRSXU.js";
45
45
  import {
46
46
  AgentConversationFlow,
47
47
  Button,
@@ -49,6 +49,7 @@ import {
49
49
  buildWorkspaceAgentSessionDetailViewModel,
50
50
  createAgentRichTextInputExtensions,
51
51
  editorToPromptText,
52
+ getAppErrorCode,
52
53
  labelForProviderSkill,
53
54
  openAgentEnvPanel,
54
55
  plainTextToAgentRichTextDoc,
@@ -57,14 +58,15 @@ import {
57
58
  promptForProviderSkills,
58
59
  skillDescriptionForDisplay,
59
60
  skillTriggerForPrefix,
61
+ toLocalShortDateTime,
60
62
  useProjectedAgentConversation
61
- } from "./chunk-BAQTM6VS.js";
63
+ } from "./chunk-ZAF4IVUT.js";
62
64
  import {
63
65
  AgentMessageMarkdown,
64
66
  ZoomableImage,
65
67
  cn,
66
68
  resolveWorkspaceLinkAction
67
- } from "./chunk-QT45WUPQ.js";
69
+ } from "./chunk-XJXSR5XI.js";
68
70
  import {
69
71
  AGENT_MENTION_FILTER_TAB_ORDER,
70
72
  AgentFileMentionPalette,
@@ -72,7 +74,7 @@ import {
72
74
  DEFAULT_AGENT_MENTION_FILTER,
73
75
  agentMentionItemKey,
74
76
  preloadAgentMentionBrowse
75
- } from "./chunk-ZJ7OSY4T.js";
77
+ } from "./chunk-7NCWSH7U.js";
76
78
  import {
77
79
  WORKSPACE_AGENT_ACTIVITY_RUNTIME_SESSION_ORIGIN,
78
80
  buildWorkspaceAgentActivityListViewModel,
@@ -82,13 +84,13 @@ import {
82
84
  isWorkspaceAgentUntitledTask,
83
85
  mergeWorkspaceAgentActivityDurableAndOverlayMessages,
84
86
  selectWorkspaceAgentActivityOverlayMessages
85
- } from "./chunk-D6IYEVDT.js";
87
+ } from "./chunk-MCH35MAX.js";
86
88
  import {
87
89
  MANAGED_AGENT_ICON_FALLBACK_URL,
88
90
  MANAGED_AGENT_ICON_URLS,
89
91
  Spinner,
90
92
  normalizeManagedAgentProvider
91
- } from "./chunk-NZ2BGOJU.js";
93
+ } from "./chunk-Q4X6Q4E6.js";
92
94
  import {
93
95
  resolveWorkspaceAgentSessionSortTimeUnixMs
94
96
  } from "./chunk-IBIMGLCD.js";
@@ -100,8 +102,9 @@ import {
100
102
  mentionItemToAttrs,
101
103
  normalizeAgentSessionMentionTitle,
102
104
  parseMentionItemFromHref
103
- } from "./chunk-FRG36S6N.js";
105
+ } from "./chunk-2FOBSURO.js";
104
106
  import "./chunk-Y35GDLP2.js";
107
+ import "./chunk-LUGELG5V.js";
105
108
  import {
106
109
  AgentActivityHostProvider,
107
110
  AgentActivityRuntimeProvider,
@@ -113,24 +116,26 @@ import {
113
116
  useAgentActivityRuntime,
114
117
  useAgentActivitySnapshot,
115
118
  useAgentHostApi,
116
- useOptionalAgentActivityRuntime
117
- } from "./chunk-TXXWUG2J.js";
119
+ useOptionalAgentActivityRuntime,
120
+ useOptionalAgentHostApi
121
+ } from "./chunk-VE6JY2TH.js";
118
122
  import "./chunk-TYGL25EL.js";
123
+ import "./chunk-PJP5BUU6.js";
119
124
  import {
120
125
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
121
126
  } from "./chunk-JM24HADP.js";
122
127
  import "./chunk-GCBDIQDX.js";
128
+ import {
129
+ createAgentQueuedPromptRuntime
130
+ } from "./chunk-SD56WDSC.js";
123
131
  import {
124
132
  AgentGuiI18nProvider,
125
133
  agentGuiI18nModule,
126
134
  agentGuiI18nResources,
127
- getActiveUiLanguage,
128
135
  translate,
129
136
  useTranslation
130
- } from "./chunk-EIC7XS3C.js";
131
- import "./chunk-VFQR7AZI.js";
132
- import "./chunk-LUGELG5V.js";
133
- import "./chunk-PJP5BUU6.js";
137
+ } from "./chunk-5QTC2L52.js";
138
+ import "./chunk-KACBTC7Y.js";
134
139
 
135
140
  // shared/agentActivitySnapshotProjection.ts
136
141
  import {
@@ -300,145 +305,6 @@ import { memo as memo2, useCallback as useCallback13, useEffect as useEffect14,
300
305
  import { createWorkspaceUserProjectI18nRuntime } from "@tutti-os/workspace-user-project/i18n";
301
306
  import { createWorkspaceFileManagerI18nRuntime } from "@tutti-os/workspace-file-manager";
302
307
 
303
- // shared/errors/appError.ts
304
- function createMessageMap() {
305
- return {
306
- "common.invalid_input": "The request was invalid.",
307
- "common.approved_path_required": "The selected path is outside approved workspaces.",
308
- "common.unavailable": "This feature is unavailable.",
309
- "common.unexpected": "Something went wrong. Please try again.",
310
- "session.not_found": "Session not found.",
311
- "control_surface.unauthorized": "Unauthorized request.",
312
- "workspace.select_directory_failed": "Unable to open the directory picker.",
313
- "workspace.select_files_failed": "Unable to open the file picker.",
314
- "workspace.ensure_directory_failed": "Unable to create the directory.",
315
- "workspace.import_files_failed": "Unable to import the selected files.",
316
- "workspace.read_file_failed": "Unable to load the selected file.",
317
- "workspace.write_file_failed": "Unable to save the selected file.",
318
- "workspace.export_file_failed": "Unable to export the selected file.",
319
- "workspace.copy_path_failed": "Unable to copy the path.",
320
- "workspace.host_unsupported": "This Mac cannot run the workspace environment required by tsh. Please use macOS 13 or later on Apple Silicon (or an Intel Mac that supports Apple Virtualization), and ensure virtualization is not blocked by MDM.",
321
- "workspace.runtime_artifact_unavailable": "Unable to prepare the workspace environment required by tsh. Check your network connection and try again.",
322
- "runtime.guest_agent_lane_unavailable": "The workspace environment connection is unavailable. Refresh and try again.",
323
- "workspace.room_full": "Room is full.",
324
- "workspace.room_delete_forbidden": "Only the space owner can delete this space.",
325
- "workspace.room_delete_not_found": "This space no longer exists.",
326
- "filesystem.create_directory_failed": "Unable to create the directory.",
327
- "filesystem.read_file_bytes_failed": "Unable to read the file.",
328
- "filesystem.read_file_text_failed": "Unable to read the file.",
329
- "filesystem.write_file_text_failed": "Unable to save the file.",
330
- "filesystem.copy_entry_failed": "Unable to copy the file or folder.",
331
- "filesystem.move_entry_failed": "Unable to move the file or folder.",
332
- "filesystem.rename_entry_failed": "Unable to rename the file or folder.",
333
- "filesystem.delete_entry_failed": "Unable to delete the file or folder.",
334
- "filesystem.read_directory_failed": "Unable to load the directory.",
335
- "filesystem.stat_failed": "Unable to read file details.",
336
- "terminal.spawn_failed": "Unable to start the terminal.",
337
- "terminal.write_failed": "Unable to write to the terminal.",
338
- "terminal.resize_failed": "Unable to resize the terminal.",
339
- "terminal.close_failed": "Unable to close the terminal.",
340
- "terminal.attach_failed": "Unable to attach the terminal session.",
341
- "terminal.detach_failed": "Unable to detach the terminal session.",
342
- "terminal.snapshot_failed": "Unable to read terminal output.",
343
- "agent.list_models_failed": "Unable to load models for this provider.",
344
- "agent.launch_failed": "Unable to start the agent.",
345
- "agent.read_last_message_failed": "Unable to read the last agent message.",
346
- "agent.provider_session_not_found": "The previous agent session can no longer be restored.",
347
- "agent.resume_session_not_local": "The previous agent session is not available on this machine.",
348
- "agent.resume_session_resolve_failed": "Unable to resolve the previous agent session.",
349
- "agent.settings_require_new_session": "This model can only be used in a new session to preserve context.",
350
- "task.suggest_title_failed": "Unable to generate task details.",
351
- "persistence.unavailable": "Storage is unavailable; changes will not be saved.",
352
- "persistence.quota_exceeded": "Storage quota was exceeded.",
353
- "persistence.payload_too_large": "Workspace state is too large to save.",
354
- "persistence.io_failed": "Unable to save data to storage.",
355
- "persistence.invalid_state": "The workspace state could not be saved.",
356
- "persistence.invalid_node_id": "The terminal history could not be saved.",
357
- "update.get_state_failed": "Unable to read the update status.",
358
- "update.configure_failed": "Unable to apply update settings.",
359
- "update.check_failed": "Unable to check for updates.",
360
- "update.download_failed": "Unable to download the update.",
361
- "update.install_failed": "Unable to install the update.",
362
- PACKAGE_DOWNLOAD_INTERRUPTED: "The agent package download was interrupted. Check your network connection and retry.",
363
- PACKAGE_DOWNLOAD_HTTP_STATUS: "The agent package server rejected the download. Retry later or contact support.",
364
- PACKAGE_DOWNLOAD_INVALID: "The downloaded agent package failed integrity checks. Retry the download.",
365
- PACKAGE_DOWNLOAD_DISK_ERROR: "Unable to write the agent package cache. Check disk permissions and free space."
366
- };
367
- }
368
- var APP_ERROR_MESSAGES = createMessageMap();
369
- function createAppErrorDescriptor(code, options = {}) {
370
- return {
371
- code,
372
- ...options.params ? { params: options.params } : {},
373
- ...options.debugMessage ? { debugMessage: options.debugMessage } : {}
374
- };
375
- }
376
- function isAppErrorDescriptor(value) {
377
- if (!value || typeof value !== "object") {
378
- return false;
379
- }
380
- const record = value;
381
- return typeof record.code === "string" && record.code in APP_ERROR_MESSAGES;
382
- }
383
- function getAppErrorCode(error) {
384
- if (error instanceof TshAppError) {
385
- return error.code;
386
- }
387
- if (isAppErrorDescriptor(error)) {
388
- return error.code;
389
- }
390
- if (error && typeof error === "object") {
391
- const code = error.code;
392
- if (typeof code === "string" && code in APP_ERROR_MESSAGES) {
393
- return code;
394
- }
395
- }
396
- return null;
397
- }
398
- var TshAppError = class extends Error {
399
- code;
400
- params;
401
- debugMessage;
402
- constructor(descriptor) {
403
- super(formatAppErrorMessage(descriptor));
404
- this.name = "TshAppError";
405
- this.code = descriptor.code;
406
- this.params = descriptor.params;
407
- this.debugMessage = descriptor.debugMessage;
408
- }
409
- toDescriptor() {
410
- return createAppErrorDescriptor(this.code, {
411
- params: this.params,
412
- debugMessage: this.debugMessage
413
- });
414
- }
415
- };
416
- function formatAppErrorMessage(error) {
417
- const descriptor = error instanceof TshAppError ? error.toDescriptor() : error;
418
- return APP_ERROR_MESSAGES[descriptor.code] ?? APP_ERROR_MESSAGES["common.unexpected"];
419
- }
420
-
421
- // app/renderer/shell/utils/format.ts
422
- var shortDateTimeFormatterByLanguage = /* @__PURE__ */ new Map();
423
- function getShortDateTimeFormatter(language) {
424
- const cached = shortDateTimeFormatterByLanguage.get(language);
425
- if (cached) {
426
- return cached;
427
- }
428
- const formatter = new Intl.DateTimeFormat(language, {
429
- month: language === "en" ? "short" : "numeric",
430
- day: "numeric",
431
- hour: "2-digit",
432
- minute: "2-digit",
433
- hourCycle: "h23"
434
- });
435
- shortDateTimeFormatterByLanguage.set(language, formatter);
436
- return formatter;
437
- }
438
- function toLocalShortDateTime(value, language = getActiveUiLanguage()) {
439
- return getShortDateTimeFormatter(language).format(value);
440
- }
441
-
442
308
  // utils/workspaceNodeSizing.ts
443
309
  var MIN_SIZE_BY_KIND = {
444
310
  terminal: { width: 400, height: 160 },
@@ -2307,6 +2173,67 @@ import {
2307
2173
  } from "react";
2308
2174
  import { debounce } from "lodash";
2309
2175
  import { toast } from "@tutti-os/ui-system";
2176
+
2177
+ // agentQueuedPromptRuntime.tsx
2178
+ import {
2179
+ createContext,
2180
+ useContext,
2181
+ useSyncExternalStore
2182
+ } from "react";
2183
+ import { jsx as jsx11 } from "react/jsx-runtime";
2184
+ var AgentQueuedPromptRuntimeContext = createContext(null);
2185
+ var currentAgentQueuedPromptRuntime = null;
2186
+ function AgentQueuedPromptRuntimeProvider({
2187
+ children,
2188
+ runtime
2189
+ }) {
2190
+ currentAgentQueuedPromptRuntime = runtime ?? null;
2191
+ return /* @__PURE__ */ jsx11(AgentQueuedPromptRuntimeContext.Provider, { value: runtime ?? null, children });
2192
+ }
2193
+ function useAgentQueuedPromptRuntime() {
2194
+ const runtime = useContext(AgentQueuedPromptRuntimeContext) ?? getTestAgentQueuedPromptRuntime();
2195
+ if (!runtime) {
2196
+ throw new Error(
2197
+ "AgentQueuedPromptRuntimeProvider is missing an AgentQueuedPromptRuntime instance."
2198
+ );
2199
+ }
2200
+ return runtime;
2201
+ }
2202
+ function useAgentQueuedPromptSessionSnapshot(input) {
2203
+ const runtime = useAgentQueuedPromptRuntime();
2204
+ const workspaceId = input.workspaceId.trim();
2205
+ const agentSessionId = input.agentSessionId?.trim() ?? "";
2206
+ return useSyncExternalStore(
2207
+ runtime.subscribe,
2208
+ () => agentSessionId ? runtime.getSessionSnapshot({ workspaceId, agentSessionId }) : null,
2209
+ () => agentSessionId ? runtime.getSessionSnapshot({ workspaceId, agentSessionId }) : null
2210
+ );
2211
+ }
2212
+ function resetAgentQueuedPromptRuntimeForTests() {
2213
+ if (process.env.NODE_ENV === "test") {
2214
+ currentAgentQueuedPromptRuntime = null;
2215
+ }
2216
+ }
2217
+ function setAgentQueuedPromptRuntimeForTests(runtime) {
2218
+ if (process.env.NODE_ENV === "test") {
2219
+ currentAgentQueuedPromptRuntime = runtime;
2220
+ }
2221
+ }
2222
+ function getTestAgentQueuedPromptRuntime() {
2223
+ if (process.env.NODE_ENV !== "test") {
2224
+ return null;
2225
+ }
2226
+ if (currentAgentQueuedPromptRuntime) {
2227
+ return currentAgentQueuedPromptRuntime;
2228
+ }
2229
+ if (typeof window === "undefined") {
2230
+ return null;
2231
+ }
2232
+ const testRuntime = window.agentQueuedPromptRuntime;
2233
+ return testRuntime ?? null;
2234
+ }
2235
+
2236
+ // agent-gui/agentGuiNode/controller/useAgentGUINodeController.ts
2310
2237
  import {
2311
2238
  resolveAgentActivityCapability as resolveAgentActivityCapability2,
2312
2239
  resolveAgentActivityUsage,
@@ -4022,7 +3949,7 @@ function subscribeCoalesced(type, options, callback) {
4022
3949
  }
4023
3950
 
4024
3951
  // contexts/workspace/presentation/renderer/agentSessions/agentSessionViewStore.ts
4025
- import { useSyncExternalStore } from "react";
3952
+ import { useSyncExternalStore as useSyncExternalStore2 } from "react";
4026
3953
  var STREAM_LINGER_MS = 15e3;
4027
3954
  var EMPTY_AGENT_SESSION_VIEW_STORE_SNAPSHOT = {
4028
3955
  sessionViewsBySessionKey: {}
@@ -4048,7 +3975,7 @@ function getAgentSessionView(ref) {
4048
3975
  }
4049
3976
  function useAgentSessionView(ref) {
4050
3977
  const sessionKey = createAgentSessionViewKey(ref);
4051
- return useSyncExternalStore(
3978
+ return useSyncExternalStore2(
4052
3979
  subscribeAgentSessionViewStore,
4053
3980
  () => sessionKey ? snapshot.sessionViewsBySessionKey[sessionKey] ?? null : null,
4054
3981
  () => sessionKey ? snapshot.sessionViewsBySessionKey[sessionKey] ?? null : null
@@ -6129,13 +6056,13 @@ function markLocalDeletedAgentGUIConversation(input) {
6129
6056
  }
6130
6057
 
6131
6058
  // contexts/workspace/presentation/renderer/agentGuiConversationList/useAgentGuiConversationList.ts
6132
- import { useCallback as useCallback2, useSyncExternalStore as useSyncExternalStore2 } from "react";
6059
+ import { useCallback as useCallback2, useSyncExternalStore as useSyncExternalStore3 } from "react";
6133
6060
  function useAgentGuiConversationList(query) {
6134
6061
  const getSnapshot = useCallback2(
6135
6062
  () => getOrCreateAgentGUIConversationListQuerySnapshot(query),
6136
6063
  [query]
6137
6064
  );
6138
- return useSyncExternalStore2(
6065
+ return useSyncExternalStore3(
6139
6066
  subscribeAgentGUIConversationListStore,
6140
6067
  getSnapshot,
6141
6068
  getSnapshot
@@ -7411,6 +7338,23 @@ function retargetOptimisticPromptMessages(messages, input) {
7411
7338
  });
7412
7339
  return { changed, messages: retargeted };
7413
7340
  }
7341
+ function removeOptimisticPromptMessagesByClientSubmitId(messages, clientSubmitId) {
7342
+ const normalizedClientSubmitId = clientSubmitId.trim();
7343
+ if (!normalizedClientSubmitId || messages.length === 0) {
7344
+ return { changed: false, messages: [...messages] };
7345
+ }
7346
+ const filtered = messages.filter((message) => {
7347
+ if (!isWorkspaceAgentActivityOptimisticMessage(message)) {
7348
+ return true;
7349
+ }
7350
+ const messageClientSubmitId = message.payload?.clientSubmitId;
7351
+ return typeof messageClientSubmitId !== "string" || messageClientSubmitId.trim() !== normalizedClientSubmitId;
7352
+ });
7353
+ return {
7354
+ changed: filtered.length !== messages.length,
7355
+ messages: filtered
7356
+ };
7357
+ }
7414
7358
  function shouldRetargetOptimisticPromptFromMessage(message, trace) {
7415
7359
  const turnId = message.turnId?.trim() ?? "";
7416
7360
  if (!turnId || trace.turnId) {
@@ -8124,11 +8068,11 @@ function permissionModeDescription(provider, option) {
8124
8068
  }
8125
8069
  return void 0;
8126
8070
  }
8127
- function removeQueuedPromptById(queue, queuedPromptId) {
8128
- return queue.filter((queuedPrompt) => queuedPrompt.id !== queuedPromptId);
8129
- }
8130
8071
  var NODE_DEFAULT_DRAFT_KEY = "__agent_gui_node_defaults__";
8131
8072
  var EMPTY_AGENT_COMPOSER_DRAFT = emptyAgentComposerDraft();
8073
+ var EMPTY_QUEUED_PROMPTS = Object.freeze(
8074
+ []
8075
+ );
8132
8076
  function areAgentComposerDraftsEqual(left, right) {
8133
8077
  const leftFiles = left.files ?? [];
8134
8078
  const rightFiles = right.files ?? [];
@@ -8442,6 +8386,7 @@ function useAgentGUINodeController({
8442
8386
  onShowMessage
8443
8387
  }) {
8444
8388
  const agentActivityRuntime = useAgentActivityRuntime();
8389
+ const agentQueuedPromptRuntime = useAgentQueuedPromptRuntime();
8445
8390
  const agentHostApi = useAgentHostApi();
8446
8391
  const agentActivitySnapshot = useAgentActivitySnapshot(workspaceId);
8447
8392
  const normalizedExplicitProviderTargets = useMemo4(
@@ -8506,6 +8451,15 @@ function useAgentGUINodeController({
8506
8451
  );
8507
8452
  const pendingCreateOwnerKey = nodeId?.trim() ?? "";
8508
8453
  const conversationListActiveOwnerKey = pendingCreateOwnerKey || generatedControllerOwnerKey;
8454
+ const queuedPromptOwnerId = conversationListActiveOwnerKey;
8455
+ useEffect4(() => {
8456
+ if (previewMode) {
8457
+ return;
8458
+ }
8459
+ return () => {
8460
+ agentQueuedPromptRuntime.releaseOwner(queuedPromptOwnerId);
8461
+ };
8462
+ }, [agentQueuedPromptRuntime, previewMode, queuedPromptOwnerId]);
8509
8463
  const resolvePendingCreateConversationId = useCallback4(
8510
8464
  () => conversationListQuery && pendingCreateOwnerKey ? getAgentGUIConversationCreatePending({
8511
8465
  query: conversationListQuery,
@@ -8532,7 +8486,6 @@ function useAgentGUINodeController({
8532
8486
  const [draftBySessionId, setDraftBySessionId] = useState4({});
8533
8487
  const draftBySessionIdRef = useRef4(draftBySessionId);
8534
8488
  const [draftSettingsBySessionId, setDraftSettingsBySessionId] = useState4({});
8535
- const [queuedPromptsBySessionId, setQueuedPromptsBySessionId] = useState4({});
8536
8489
  const hasLoadedConversations = conversationListState?.initialized ?? false;
8537
8490
  const isLoadingConversations = conversationListState?.isLoading ?? false;
8538
8491
  const [isLoadingMessages, setIsLoadingMessages] = useState4(false);
@@ -8549,16 +8502,15 @@ function useAgentGUINodeController({
8549
8502
  const [isPendingSubmit, setIsPendingSubmit] = useState4(resolvePendingSubmit);
8550
8503
  const [localIsSubmitting, setLocalIsSubmitting] = useState4(false);
8551
8504
  const isSubmitting = localIsSubmitting || isPendingSubmit;
8552
- const [drainingQueuedPromptSessionId, setDrainingQueuedPromptSessionId] = useState4(null);
8553
- const [
8554
- sendNextQueuedPromptIdBySessionId,
8555
- setSendNextQueuedPromptIdBySessionId
8556
- ] = useState4({});
8557
- const [failedQueuedPromptIdBySessionId, setFailedQueuedPromptIdBySessionId] = useState4({});
8558
- const [
8559
- queuedPromptRetryBlockBySessionId,
8560
- setQueuedPromptRetryBlockBySessionId
8561
- ] = useState4({});
8505
+ const activeQueuedPromptSnapshot = useAgentQueuedPromptSessionSnapshot({
8506
+ workspaceId,
8507
+ agentSessionId: activeConversationId
8508
+ });
8509
+ const activeQueuedPrompts = activeQueuedPromptSnapshot?.prompts ?? EMPTY_QUEUED_PROMPTS;
8510
+ const activeQueuedPromptClaim = activeQueuedPromptSnapshot?.claim ?? null;
8511
+ const activeFailedQueuedPromptId = activeQueuedPromptSnapshot?.failedPromptId ?? null;
8512
+ const activeQueuedPromptRetryBlock = activeQueuedPromptSnapshot?.retryBlock ?? null;
8513
+ const activeSendNextQueuedPromptId = activeQueuedPromptSnapshot?.sendNextPromptId ?? null;
8562
8514
  const [interruptingSessionIds, setInterruptingSessionIds] = useState4({});
8563
8515
  const [pendingInterruptSessionIds, setPendingInterruptSessionIds] = useState4({});
8564
8516
  const [
@@ -9428,6 +9380,7 @@ function useAgentGUINodeController({
9428
9380
  },
9429
9381
  [
9430
9382
  activation,
9383
+ agentQueuedPromptRuntime,
9431
9384
  agentActivityRuntime,
9432
9385
  conversationListQuery,
9433
9386
  currentUserId,
@@ -9900,6 +9853,10 @@ function useAgentGUINodeController({
9900
9853
  "local-delete"
9901
9854
  );
9902
9855
  }
9856
+ agentQueuedPromptRuntime.cleanupSession({
9857
+ workspaceId,
9858
+ agentSessionId
9859
+ });
9903
9860
  deleteAgentSessionView(sessionViewRef(agentSessionId));
9904
9861
  reportAgentGUIActiveConversationCleared({
9905
9862
  details: {
@@ -9934,6 +9891,7 @@ function useAgentGUINodeController({
9934
9891
  }
9935
9892
  },
9936
9893
  [
9894
+ agentQueuedPromptRuntime,
9937
9895
  agentActivityRuntime,
9938
9896
  applySessionStateSnapshot,
9939
9897
  clearFailedLiveState,
@@ -10666,6 +10624,41 @@ function useAgentGUINodeController({
10666
10624
  },
10667
10625
  [sessionViewRef]
10668
10626
  );
10627
+ const removeOptimisticPrompt = useCallback4(
10628
+ (agentSessionId, clientSubmitId) => {
10629
+ const normalizedAgentSessionId = agentSessionId.trim();
10630
+ if (!normalizedAgentSessionId || !clientSubmitId.trim()) {
10631
+ return;
10632
+ }
10633
+ const sessionView = getAgentSessionView(
10634
+ sessionViewRef(normalizedAgentSessionId)
10635
+ );
10636
+ if (!sessionView) {
10637
+ return;
10638
+ }
10639
+ const detail = removeOptimisticPromptMessagesByClientSubmitId(
10640
+ sessionView.detailMessages,
10641
+ clientSubmitId
10642
+ );
10643
+ if (detail.changed) {
10644
+ setAgentSessionViewDetailMessages(
10645
+ sessionViewRef(normalizedAgentSessionId),
10646
+ detail.messages
10647
+ );
10648
+ }
10649
+ const overlay = removeOptimisticPromptMessagesByClientSubmitId(
10650
+ sessionView.overlayMessages,
10651
+ clientSubmitId
10652
+ );
10653
+ if (overlay.changed) {
10654
+ setAgentSessionViewOverlayMessages(
10655
+ sessionViewRef(normalizedAgentSessionId),
10656
+ overlay.messages
10657
+ );
10658
+ }
10659
+ },
10660
+ [sessionViewRef]
10661
+ );
10669
10662
  const applyStatePatch = useCallback4(
10670
10663
  (patch) => {
10671
10664
  const agentSessionId = patch.agentSessionId.trim();
@@ -11614,7 +11607,7 @@ function useAgentGUINodeController({
11614
11607
  workspaceId
11615
11608
  ]);
11616
11609
  const executePrompt = useCallback4(
11617
- (agentSessionId, content, queuedPromptId, displayPrompt) => {
11610
+ (agentSessionId, content, queuedPromptId, displayPrompt, queuedPromptClaim) => {
11618
11611
  const normalizedContent = normalizeAgentPromptContentBlocks(content);
11619
11612
  if (!agentSessionId || normalizedContent.length === 0) {
11620
11613
  return;
@@ -11685,6 +11678,13 @@ function useAgentGUINodeController({
11685
11678
  )
11686
11679
  } : current
11687
11680
  );
11681
+ const pendingOptimisticTurnId = createPendingOptimisticTurnId(
11682
+ submitTrace.clientSubmitId
11683
+ );
11684
+ pendingTurnIdBySessionIdRef.current = {
11685
+ ...pendingTurnIdBySessionIdRef.current,
11686
+ [agentSessionId]: pendingOptimisticTurnId
11687
+ };
11688
11688
  applyStatePatch({
11689
11689
  agentSessionId,
11690
11690
  currentPhase: "working",
@@ -11696,10 +11696,29 @@ function useAgentGUINodeController({
11696
11696
  trace: submitTrace,
11697
11697
  workspaceId
11698
11698
  });
11699
+ let queuedPromptClaimCompleted = false;
11700
+ const shouldRecordPendingOptimisticPrompt = queuedPromptId === void 0;
11701
+ if (shouldRecordPendingOptimisticPrompt) {
11702
+ recordLocalMessages(agentSessionId, [
11703
+ createOptimisticPromptMessage({
11704
+ workspaceId,
11705
+ agentSessionId,
11706
+ turnId: pendingOptimisticTurnId,
11707
+ clientSubmitId: submitTrace.clientSubmitId,
11708
+ userId: currentUserId?.trim() || "user",
11709
+ prompt: submittedPromptText,
11710
+ content: normalizedContent,
11711
+ occurredAtUnixMs: submittedAtUnixMs
11712
+ })
11713
+ ]);
11714
+ reportAgentSubmitTraceDiagnostic({
11715
+ event: "optimistic_user_message_recorded",
11716
+ runtime: agentActivityRuntime,
11717
+ trace: submitTrace,
11718
+ workspaceId
11719
+ });
11720
+ }
11699
11721
  void Promise.resolve().then(() => {
11700
- if (!isCurrentConversation(agentSessionId)) {
11701
- return null;
11702
- }
11703
11722
  reportAgentSubmitTraceDiagnostic({
11704
11723
  event: "send_input.requested",
11705
11724
  runtime: agentActivityRuntime,
@@ -11714,7 +11733,7 @@ function useAgentGUINodeController({
11714
11733
  metadata: agentSubmitTraceMetadata(submitTrace)
11715
11734
  });
11716
11735
  }).then((result) => {
11717
- if (!result || !isCurrentConversation(agentSessionId)) {
11736
+ if (!result) {
11718
11737
  return;
11719
11738
  }
11720
11739
  submitTrace.turnId = result.turnId.trim() || null;
@@ -11774,34 +11793,14 @@ function useAgentGUINodeController({
11774
11793
  });
11775
11794
  }
11776
11795
  if (queuedPromptId) {
11777
- setQueuedPromptsBySessionId((current) => {
11778
- const queue = current[agentSessionId] ?? [];
11779
- if (queue.length === 0 || !queue.some((item) => item.id === queuedPromptId)) {
11780
- return current;
11781
- }
11782
- return {
11783
- ...current,
11784
- [agentSessionId]: removeQueuedPromptById(queue, queuedPromptId)
11785
- };
11786
- });
11787
- setSendNextQueuedPromptIdBySessionId((current) => {
11788
- if (current[agentSessionId] !== queuedPromptId) {
11789
- return current;
11790
- }
11791
- return { ...current, [agentSessionId]: null };
11792
- });
11793
- setFailedQueuedPromptIdBySessionId((current) => {
11794
- if (current[agentSessionId] !== queuedPromptId) {
11795
- return current;
11796
- }
11797
- return { ...current, [agentSessionId]: null };
11798
- });
11799
- setQueuedPromptRetryBlockBySessionId((current) => {
11800
- if (current[agentSessionId]?.queuedPromptId !== queuedPromptId) {
11801
- return current;
11802
- }
11803
- return { ...current, [agentSessionId]: null };
11804
- });
11796
+ if (queuedPromptClaim) {
11797
+ queuedPromptClaimCompleted = agentQueuedPromptRuntime.completeClaim({
11798
+ workspaceId,
11799
+ agentSessionId,
11800
+ ownerId: queuedPromptClaim.ownerId,
11801
+ claimId: queuedPromptClaim.claimId
11802
+ });
11803
+ }
11805
11804
  }
11806
11805
  const submittedTurnId = result.turnId.trim();
11807
11806
  if (submittedTurnId) {
@@ -11809,24 +11808,32 @@ function useAgentGUINodeController({
11809
11808
  ...pendingTurnIdBySessionIdRef.current,
11810
11809
  [agentSessionId]: submittedTurnId
11811
11810
  };
11812
- recordLocalMessages(agentSessionId, [
11813
- createOptimisticPromptMessage({
11814
- workspaceId,
11811
+ if (shouldRecordPendingOptimisticPrompt) {
11812
+ retargetOptimisticPromptTurn(
11815
11813
  agentSessionId,
11816
- turnId: submittedTurnId,
11817
- clientSubmitId: submitTrace.clientSubmitId,
11818
- userId: currentUserId?.trim() || "user",
11819
- prompt: submittedPromptText,
11820
- content: normalizedContent,
11821
- occurredAtUnixMs: Date.now()
11822
- })
11823
- ]);
11824
- reportAgentSubmitTraceDiagnostic({
11825
- event: "optimistic_user_message_recorded",
11826
- runtime: agentActivityRuntime,
11827
- trace: submitTrace,
11828
- workspaceId
11829
- });
11814
+ submitTrace.clientSubmitId,
11815
+ submittedTurnId
11816
+ );
11817
+ } else {
11818
+ recordLocalMessages(agentSessionId, [
11819
+ createOptimisticPromptMessage({
11820
+ workspaceId,
11821
+ agentSessionId,
11822
+ turnId: submittedTurnId,
11823
+ clientSubmitId: submitTrace.clientSubmitId,
11824
+ userId: currentUserId?.trim() || "user",
11825
+ prompt: submittedPromptText,
11826
+ content: normalizedContent,
11827
+ occurredAtUnixMs: Date.now()
11828
+ })
11829
+ ]);
11830
+ reportAgentSubmitTraceDiagnostic({
11831
+ event: "optimistic_user_message_recorded",
11832
+ runtime: agentActivityRuntime,
11833
+ trace: submitTrace,
11834
+ workspaceId
11835
+ });
11836
+ }
11830
11837
  scheduleAgentSubmitTracePaint({
11831
11838
  runtime: agentActivityRuntime,
11832
11839
  trace: submitTrace,
@@ -11844,6 +11851,12 @@ function useAgentGUINodeController({
11844
11851
  const nextTraces = { ...submitTraceBySessionIdRef.current };
11845
11852
  delete nextTraces[agentSessionId];
11846
11853
  submitTraceBySessionIdRef.current = nextTraces;
11854
+ if (shouldRecordPendingOptimisticPrompt) {
11855
+ removeOptimisticPrompt(agentSessionId, submitTrace.clientSubmitId);
11856
+ }
11857
+ const nextPendingTurns = { ...pendingTurnIdBySessionIdRef.current };
11858
+ delete nextPendingTurns[agentSessionId];
11859
+ pendingTurnIdBySessionIdRef.current = nextPendingTurns;
11847
11860
  reportAgentSubmitTraceDiagnostic({
11848
11861
  event: "submit.failed",
11849
11862
  runtime: agentActivityRuntime,
@@ -11894,19 +11907,21 @@ function useAgentGUINodeController({
11894
11907
  }
11895
11908
  if (queuedPromptId) {
11896
11909
  if (shouldRetryQueuedPromptOnNextActivity) {
11897
- setQueuedPromptRetryBlockBySessionId((current) => ({
11898
- ...current,
11899
- [agentSessionId]: {
11910
+ agentQueuedPromptRuntime.setRetryBlock({
11911
+ workspaceId,
11912
+ agentSessionId,
11913
+ retryBlock: {
11900
11914
  queuedPromptId,
11901
11915
  sessionStateUpdatedAtUnixMs: currentSessionState?.updatedAtUnixMs ?? null,
11902
11916
  conversationUpdatedAtUnixMs: currentConversationSummary?.updatedAtUnixMs ?? null
11903
11917
  }
11904
- }));
11918
+ });
11905
11919
  } else {
11906
- setFailedQueuedPromptIdBySessionId((current) => ({
11907
- ...current,
11908
- [agentSessionId]: queuedPromptId
11909
- }));
11920
+ agentQueuedPromptRuntime.markPromptFailed({
11921
+ workspaceId,
11922
+ agentSessionId,
11923
+ promptId: queuedPromptId
11924
+ });
11910
11925
  }
11911
11926
  }
11912
11927
  }).finally(() => {
@@ -11917,12 +11932,18 @@ function useAgentGUINodeController({
11917
11932
  });
11918
11933
  }
11919
11934
  setLocalIsSubmitting(false);
11920
- setDrainingQueuedPromptSessionId(
11921
- (current) => current === agentSessionId ? null : current
11922
- );
11935
+ if (queuedPromptClaim && !queuedPromptClaimCompleted) {
11936
+ agentQueuedPromptRuntime.releaseClaim({
11937
+ workspaceId,
11938
+ agentSessionId,
11939
+ ownerId: queuedPromptClaim.ownerId,
11940
+ claimId: queuedPromptClaim.claimId
11941
+ });
11942
+ }
11923
11943
  });
11924
11944
  },
11925
11945
  [
11946
+ agentQueuedPromptRuntime,
11926
11947
  currentUserId,
11927
11948
  isCurrentConversation,
11928
11949
  applyStatePatch,
@@ -11932,6 +11953,8 @@ function useAgentGUINodeController({
11932
11953
  loadSessionState,
11933
11954
  refreshMessagesFromSnapshot,
11934
11955
  recordLocalMessages,
11956
+ removeOptimisticPrompt,
11957
+ retargetOptimisticPromptTurn,
11935
11958
  sessionViewRef,
11936
11959
  setTransientConversation,
11937
11960
  patchConversation,
@@ -11954,17 +11977,18 @@ function useAgentGUINodeController({
11954
11977
  ...displayPrompt && displayPrompt.trim() ? { displayPrompt } : {},
11955
11978
  createdAtUnixMs: Date.now()
11956
11979
  };
11957
- setQueuedPromptsBySessionId((current) => ({
11958
- ...current,
11959
- [agentSessionId]: [...current[agentSessionId] ?? [], queuedPrompt]
11960
- }));
11980
+ agentQueuedPromptRuntime.enqueue({
11981
+ workspaceId,
11982
+ agentSessionId,
11983
+ prompt: queuedPrompt
11984
+ });
11961
11985
  setDraftBySessionId((current) => ({
11962
11986
  ...current,
11963
11987
  [agentSessionId]: emptyAgentComposerDraft()
11964
11988
  }));
11965
11989
  setDetailError(null);
11966
11990
  },
11967
- []
11991
+ [agentQueuedPromptRuntime, workspaceId]
11968
11992
  );
11969
11993
  const shouldQueuePromptLocally = useCallback4(
11970
11994
  (agentSessionId) => {
@@ -11978,11 +12002,20 @@ function useAgentGUINodeController({
11978
12002
  if (pendingTurnIdBySessionIdRef.current[normalizedAgentSessionId]) {
11979
12003
  return true;
11980
12004
  }
12005
+ const sessionState = getAgentSessionView(sessionViewRef(normalizedAgentSessionId))?.controlState ?? null;
12006
+ if (sessionState?.pendingInteractive) {
12007
+ return true;
12008
+ }
11981
12009
  return agentActivityDisplayStatusBusy(
11982
12010
  agentActivityDisplayStatuses.get(normalizedAgentSessionId)
11983
12011
  );
11984
12012
  },
11985
- [agentActivityDisplayStatuses, isRespondingApproval, isSubmitting]
12013
+ [
12014
+ agentActivityDisplayStatuses,
12015
+ isRespondingApproval,
12016
+ isSubmitting,
12017
+ sessionViewRef
12018
+ ]
11986
12019
  );
11987
12020
  const submitExistingPrompt = useCallback4(
11988
12021
  (agentSessionId, normalizedContent, displayPromptText, options) => {
@@ -12029,6 +12062,9 @@ function useAgentGUINodeController({
12029
12062
  );
12030
12063
  const submitPrompt = useCallback4(
12031
12064
  (content, displayPrompt) => {
12065
+ if (previewMode) {
12066
+ return;
12067
+ }
12032
12068
  const agentSessionId = activeConversationIdRef.current;
12033
12069
  const normalizedContent = normalizeAgentPromptContentBlocks(content);
12034
12070
  if (normalizedContent.length === 0) {
@@ -12089,6 +12125,7 @@ function useAgentGUINodeController({
12089
12125
  [
12090
12126
  agentActivityRuntime,
12091
12127
  conversationListQuery,
12128
+ previewMode,
12092
12129
  resolvedPromptImagesSupported,
12093
12130
  persistActiveConversation,
12094
12131
  startConversation,
@@ -12674,41 +12711,50 @@ function useAgentGUINodeController({
12674
12711
  if (!activeConversationId) {
12675
12712
  return;
12676
12713
  }
12677
- const queuedPrompt = (queuedPromptsBySessionId[activeConversationId] ?? [])[0] ?? null;
12678
- const failedQueuedPromptId = failedQueuedPromptIdBySessionId[activeConversationId] ?? null;
12679
- const queuedPromptRetryBlock = queuedPromptRetryBlockBySessionId[activeConversationId] ?? null;
12714
+ const queuedPrompt = activeQueuedPrompts[0] ?? null;
12680
12715
  const activeSessionState2 = getAgentSessionView(sessionViewRef(activeConversationId))?.controlState ?? null;
12681
12716
  const activeConversationSummary = resolveConversationSummaryById(
12682
12717
  conversations,
12683
12718
  activeConversationId,
12684
12719
  transientConversationRef.current
12685
12720
  );
12686
- const blockedByStaleActiveTurnConflict = queuedPrompt !== null && queuedPromptRetryBlock?.queuedPromptId === queuedPrompt.id && queuedPromptRetryBlock.sessionStateUpdatedAtUnixMs === (activeSessionState2?.updatedAtUnixMs ?? null) && queuedPromptRetryBlock.conversationUpdatedAtUnixMs === (activeConversationSummary?.updatedAtUnixMs ?? null);
12687
- const canDrainQueuedPrompt = queuedPrompt !== null && queuedPrompt.id !== failedQueuedPromptId && !blockedByStaleActiveTurnConflict && drainingQueuedPromptSessionId === null && !isSubmitting && !isRespondingApproval && !agentActivityDisplayStatusBusy(
12721
+ const blockedByStaleActiveTurnConflict = queuedPrompt !== null && activeQueuedPromptRetryBlock?.queuedPromptId === queuedPrompt.id && activeQueuedPromptRetryBlock.sessionStateUpdatedAtUnixMs === (activeSessionState2?.updatedAtUnixMs ?? null) && activeQueuedPromptRetryBlock.conversationUpdatedAtUnixMs === (activeConversationSummary?.updatedAtUnixMs ?? null);
12722
+ const canDrainQueuedPrompt = queuedPrompt !== null && queuedPrompt.id !== activeFailedQueuedPromptId && !blockedByStaleActiveTurnConflict && activeQueuedPromptClaim === null && !isSubmitting && !isRespondingApproval && !activeSessionState2?.pendingInteractive && !agentActivityDisplayStatusBusy(
12688
12723
  agentActivityDisplayStatuses.get(activeConversationId)
12689
12724
  );
12690
12725
  if (!canDrainQueuedPrompt) {
12691
12726
  return;
12692
12727
  }
12693
- setDrainingQueuedPromptSessionId(activeConversationId);
12728
+ const claimResult = agentQueuedPromptRuntime.claimNextToDrain({
12729
+ workspaceId,
12730
+ agentSessionId: activeConversationId,
12731
+ ownerId: queuedPromptOwnerId
12732
+ });
12733
+ if (!claimResult) {
12734
+ return;
12735
+ }
12694
12736
  executePrompt(
12695
12737
  activeConversationId,
12696
- queuedPrompt.content,
12697
- queuedPrompt.id,
12698
- queuedPrompt.displayPrompt
12738
+ claimResult.prompt.content,
12739
+ claimResult.prompt.id,
12740
+ claimResult.prompt.displayPrompt,
12741
+ claimResult.claim
12699
12742
  );
12700
12743
  }, [
12701
12744
  activeConversationId,
12745
+ activeFailedQueuedPromptId,
12746
+ activeQueuedPromptClaim,
12747
+ activeQueuedPromptRetryBlock,
12748
+ activeQueuedPrompts,
12749
+ agentQueuedPromptRuntime,
12702
12750
  agentActivityDisplayStatuses,
12703
12751
  conversations,
12704
- drainingQueuedPromptSessionId,
12705
12752
  executePrompt,
12706
12753
  isRespondingApproval,
12707
12754
  isSubmitting,
12708
- failedQueuedPromptIdBySessionId,
12709
12755
  previewMode,
12710
- queuedPromptRetryBlockBySessionId,
12711
- queuedPromptsBySessionId
12756
+ queuedPromptOwnerId,
12757
+ workspaceId
12712
12758
  ]);
12713
12759
  useEffect4(() => {
12714
12760
  if (previewMode) {
@@ -12717,9 +12763,7 @@ function useAgentGUINodeController({
12717
12763
  if (!activeConversationId) {
12718
12764
  return;
12719
12765
  }
12720
- const sendNextQueuedPromptId = sendNextQueuedPromptIdBySessionId[activeConversationId] ?? null;
12721
- const queuedPrompts2 = queuedPromptsBySessionId[activeConversationId] ?? [];
12722
- if (!sendNextQueuedPromptId || queuedPrompts2[0]?.id !== sendNextQueuedPromptId) {
12766
+ if (!activeSendNextQueuedPromptId || activeQueuedPrompts[0]?.id !== activeSendNextQueuedPromptId) {
12723
12767
  return;
12724
12768
  }
12725
12769
  const activeSessionState2 = getAgentSessionView(sessionViewRef(activeConversationId))?.controlState ?? null;
@@ -12729,7 +12773,7 @@ function useAgentGUINodeController({
12729
12773
  transientConversationRef.current
12730
12774
  );
12731
12775
  const activeActivityDisplayStatus2 = agentActivityDisplayStatuses.get(activeConversationId) ?? null;
12732
- const shouldInterrupt = drainingQueuedPromptSessionId === null && !isSubmitting && activeActivityDisplayStatus2 === "working";
12776
+ const shouldInterrupt = activeQueuedPromptClaim === null && !isSubmitting && activeActivityDisplayStatus2 === "working";
12733
12777
  if (!shouldInterrupt || interruptingSessionIds[activeConversationId]) {
12734
12778
  return;
12735
12779
  }
@@ -12792,9 +12836,11 @@ function useAgentGUINodeController({
12792
12836
  });
12793
12837
  }, [
12794
12838
  activeConversationId,
12839
+ activeQueuedPromptClaim,
12840
+ activeQueuedPrompts,
12841
+ activeSendNextQueuedPromptId,
12795
12842
  agentActivityDisplayStatuses,
12796
12843
  conversations,
12797
- drainingQueuedPromptSessionId,
12798
12844
  interruptingSessionIds,
12799
12845
  isCurrentConversation,
12800
12846
  isSubmitting,
@@ -12802,11 +12848,9 @@ function useAgentGUINodeController({
12802
12848
  loadSessionState,
12803
12849
  refreshMessagesFromSnapshot,
12804
12850
  previewMode,
12805
- queuedPromptsBySessionId,
12806
12851
  runtimeSessionsBySessionId,
12807
12852
  workspaceId,
12808
12853
  sessionViewRef,
12809
- sendNextQueuedPromptIdBySessionId,
12810
12854
  agentActivityRuntime
12811
12855
  ]);
12812
12856
  const requestDeleteConversation = useCallback4(
@@ -12832,64 +12876,39 @@ function useAgentGUINodeController({
12832
12876
  }
12833
12877
  setPendingDeleteConversation(null);
12834
12878
  }, [isDeletingConversation]);
12835
- const removeQueuedPrompt = useCallback4((queuedPromptId) => {
12836
- const agentSessionId = activeConversationIdRef.current;
12837
- const normalizedQueuedPromptId = queuedPromptId.trim();
12838
- if (!agentSessionId || !normalizedQueuedPromptId) {
12839
- return;
12840
- }
12841
- setQueuedPromptsBySessionId((current) => {
12842
- const queue = current[agentSessionId] ?? [];
12843
- const queuedPrompt = queue.find((item) => item.id === normalizedQueuedPromptId) ?? null;
12844
- if (!queuedPrompt) {
12845
- return current;
12846
- }
12847
- return {
12848
- ...current,
12849
- [agentSessionId]: removeQueuedPromptById(
12850
- queue,
12851
- normalizedQueuedPromptId
12852
- )
12853
- };
12854
- });
12855
- setSendNextQueuedPromptIdBySessionId((current) => {
12856
- if (current[agentSessionId] !== normalizedQueuedPromptId) {
12857
- return current;
12858
- }
12859
- return { ...current, [agentSessionId]: null };
12860
- });
12861
- setFailedQueuedPromptIdBySessionId((current) => {
12862
- if (current[agentSessionId] !== normalizedQueuedPromptId) {
12863
- return current;
12879
+ const removeQueuedPrompt = useCallback4(
12880
+ (queuedPromptId) => {
12881
+ if (previewMode) {
12882
+ return;
12864
12883
  }
12865
- return { ...current, [agentSessionId]: null };
12866
- });
12867
- setQueuedPromptRetryBlockBySessionId((current) => {
12868
- if (current[agentSessionId]?.queuedPromptId !== normalizedQueuedPromptId) {
12869
- return current;
12884
+ const agentSessionId = activeConversationIdRef.current;
12885
+ const normalizedQueuedPromptId = queuedPromptId.trim();
12886
+ if (!agentSessionId || !normalizedQueuedPromptId) {
12887
+ return;
12870
12888
  }
12871
- return { ...current, [agentSessionId]: null };
12872
- });
12873
- }, []);
12889
+ agentQueuedPromptRuntime.removePrompt({
12890
+ workspaceId,
12891
+ agentSessionId,
12892
+ promptId: normalizedQueuedPromptId
12893
+ });
12894
+ },
12895
+ [agentQueuedPromptRuntime, previewMode, workspaceId]
12896
+ );
12874
12897
  const editQueuedPrompt = useCallback4(
12875
12898
  (queuedPromptId) => {
12876
12899
  const agentSessionId = activeConversationIdRef.current;
12877
12900
  const normalizedQueuedPromptId = queuedPromptId.trim();
12878
- if (!agentSessionId || !normalizedQueuedPromptId) {
12901
+ if (previewMode || !agentSessionId || !normalizedQueuedPromptId) {
12879
12902
  return;
12880
12903
  }
12881
- const queue = queuedPromptsBySessionId[agentSessionId] ?? [];
12882
- const queuedPrompt = queue.find((item) => item.id === normalizedQueuedPromptId) ?? null;
12904
+ const queuedPrompt = agentQueuedPromptRuntime.removePrompt({
12905
+ workspaceId,
12906
+ agentSessionId,
12907
+ promptId: normalizedQueuedPromptId
12908
+ });
12883
12909
  if (!queuedPrompt) {
12884
12910
  return;
12885
12911
  }
12886
- setQueuedPromptsBySessionId((current) => ({
12887
- ...current,
12888
- [agentSessionId]: removeQueuedPromptById(
12889
- current[agentSessionId] ?? [],
12890
- normalizedQueuedPromptId
12891
- )
12892
- }));
12893
12912
  setDraftBySessionId((current) => ({
12894
12913
  ...current,
12895
12914
  [agentSessionId]: agentPromptContentToComposerDraft(
@@ -12897,67 +12916,23 @@ function useAgentGUINodeController({
12897
12916
  `restore-${queuedPrompt.id}`
12898
12917
  )
12899
12918
  }));
12900
- setSendNextQueuedPromptIdBySessionId((current) => {
12901
- if (current[agentSessionId] !== normalizedQueuedPromptId) {
12902
- return current;
12903
- }
12904
- return { ...current, [agentSessionId]: null };
12905
- });
12906
- setFailedQueuedPromptIdBySessionId((current) => {
12907
- if (current[agentSessionId] !== normalizedQueuedPromptId) {
12908
- return current;
12909
- }
12910
- return { ...current, [agentSessionId]: null };
12911
- });
12912
- setQueuedPromptRetryBlockBySessionId((current) => {
12913
- if (current[agentSessionId]?.queuedPromptId !== normalizedQueuedPromptId) {
12914
- return current;
12915
- }
12916
- return { ...current, [agentSessionId]: null };
12917
- });
12918
12919
  },
12919
- [queuedPromptsBySessionId]
12920
+ [agentQueuedPromptRuntime, previewMode, workspaceId]
12920
12921
  );
12921
12922
  const sendQueuedPromptNext = useCallback4(
12922
12923
  (queuedPromptId) => {
12923
12924
  const agentSessionId = activeConversationIdRef.current;
12924
12925
  const normalizedQueuedPromptId = queuedPromptId.trim();
12925
- if (!agentSessionId || !normalizedQueuedPromptId) {
12926
- return;
12927
- }
12928
- const queue = [...queuedPromptsBySessionId[agentSessionId] ?? []];
12929
- const queueIndex = queue.findIndex(
12930
- (item) => item.id === normalizedQueuedPromptId
12931
- );
12932
- if (queueIndex < 0) {
12926
+ if (previewMode || !agentSessionId || !normalizedQueuedPromptId) {
12933
12927
  return;
12934
12928
  }
12935
- if (queueIndex > 0) {
12936
- const [selected] = queue.splice(queueIndex, 1);
12937
- queue.unshift(selected);
12938
- }
12939
- setQueuedPromptsBySessionId((current) => ({
12940
- ...current,
12941
- [agentSessionId]: queue
12942
- }));
12943
- setSendNextQueuedPromptIdBySessionId((current) => ({
12944
- ...current,
12945
- [agentSessionId]: normalizedQueuedPromptId
12946
- }));
12947
- setFailedQueuedPromptIdBySessionId((current) => {
12948
- if (current[agentSessionId] !== normalizedQueuedPromptId) {
12949
- return current;
12950
- }
12951
- return { ...current, [agentSessionId]: null };
12952
- });
12953
- setQueuedPromptRetryBlockBySessionId((current) => {
12954
- if (current[agentSessionId]?.queuedPromptId !== normalizedQueuedPromptId) {
12955
- return current;
12956
- }
12957
- return { ...current, [agentSessionId]: null };
12929
+ agentQueuedPromptRuntime.promotePrompt({
12930
+ workspaceId,
12931
+ agentSessionId,
12932
+ promptId: normalizedQueuedPromptId
12958
12933
  });
12959
12934
  },
12960
- [queuedPromptsBySessionId]
12935
+ [agentQueuedPromptRuntime, previewMode, workspaceId]
12961
12936
  );
12962
12937
  const removeProject = useCallback4(
12963
12938
  (path) => {
@@ -13061,37 +13036,9 @@ function useAgentGUINodeController({
13061
13036
  delete next[target.id];
13062
13037
  return next;
13063
13038
  });
13064
- setQueuedPromptsBySessionId((current) => {
13065
- if (!current[target.id]) {
13066
- return current;
13067
- }
13068
- const next = { ...current };
13069
- delete next[target.id];
13070
- return next;
13071
- });
13072
- setSendNextQueuedPromptIdBySessionId((current) => {
13073
- if (!(target.id in current)) {
13074
- return current;
13075
- }
13076
- const next = { ...current };
13077
- delete next[target.id];
13078
- return next;
13079
- });
13080
- setFailedQueuedPromptIdBySessionId((current) => {
13081
- if (!(target.id in current)) {
13082
- return current;
13083
- }
13084
- const next = { ...current };
13085
- delete next[target.id];
13086
- return next;
13087
- });
13088
- setQueuedPromptRetryBlockBySessionId((current) => {
13089
- if (!(target.id in current)) {
13090
- return current;
13091
- }
13092
- const next = { ...current };
13093
- delete next[target.id];
13094
- return next;
13039
+ agentQueuedPromptRuntime.cleanupSession({
13040
+ workspaceId,
13041
+ agentSessionId: target.id
13095
13042
  });
13096
13043
  deleteAgentSessionView(sessionViewRef(target.id));
13097
13044
  const currentConversations = conversationsRef.current;
@@ -13147,6 +13094,7 @@ function useAgentGUINodeController({
13147
13094
  workspaceId,
13148
13095
  sessionViewRef,
13149
13096
  agentActivityRuntime,
13097
+ agentQueuedPromptRuntime,
13150
13098
  removeConversations
13151
13099
  ]);
13152
13100
  const finalizeConversationBatchDeletion = useCallback4(
@@ -13173,18 +13121,12 @@ function useAgentGUINodeController({
13173
13121
  setDraftBySessionId(
13174
13122
  (current) => omitConversationLocalState(current, targetIds)
13175
13123
  );
13176
- setQueuedPromptsBySessionId(
13177
- (current) => omitConversationLocalState(current, targetIds)
13178
- );
13179
- setSendNextQueuedPromptIdBySessionId(
13180
- (current) => omitConversationLocalState(current, targetIds)
13181
- );
13182
- setFailedQueuedPromptIdBySessionId(
13183
- (current) => omitConversationLocalState(current, targetIds)
13184
- );
13185
- setQueuedPromptRetryBlockBySessionId(
13186
- (current) => omitConversationLocalState(current, targetIds)
13187
- );
13124
+ for (const id of targetIds) {
13125
+ agentQueuedPromptRuntime.cleanupSession({
13126
+ workspaceId,
13127
+ agentSessionId: id
13128
+ });
13129
+ }
13188
13130
  const nextConversations = conversationsRef.current.filter(
13189
13131
  (conversation2) => !targetIds.has(conversation2.id)
13190
13132
  );
@@ -13210,8 +13152,10 @@ function useAgentGUINodeController({
13210
13152
  clearSelectedConversationNotFoundRetry,
13211
13153
  markSelectedConversationDetailPending,
13212
13154
  persistActiveConversation,
13155
+ agentQueuedPromptRuntime,
13213
13156
  sessionViewRef,
13214
13157
  setTransientConversation,
13158
+ workspaceId,
13215
13159
  removeConversations
13216
13160
  ]
13217
13161
  );
@@ -13743,11 +13687,8 @@ function useAgentGUINodeController({
13743
13687
  const serverInteractivePrompt = hasProviderSessionNotFoundError || isActivePromptSuppressed ? null : rawPendingInteractivePrompt;
13744
13688
  const isInterrupting = activeConversationId !== null && Boolean(interruptingSessionIds[activeConversationId]);
13745
13689
  const isCancelPending = activeConversationId !== null && Boolean(pendingInterruptSessionIds[activeConversationId]);
13746
- const queuedPrompts = useMemo4(
13747
- () => activeConversationId !== null ? queuedPromptsBySessionId[activeConversationId] ?? [] : [],
13748
- [activeConversationId, queuedPromptsBySessionId]
13749
- );
13750
- const drainingQueuedPromptId = drainingQueuedPromptSessionId === activeConversationId ? queuedPrompts[0]?.id ?? null : null;
13690
+ const queuedPrompts = activeConversationId ? [...activeQueuedPrompts] : [];
13691
+ const drainingQueuedPromptId = activeQueuedPromptClaim?.promptId ?? null;
13751
13692
  const sessionSettings = useStableComposerSettings(
13752
13693
  cloneComposerSettings(activeSessionState?.settings ?? null)
13753
13694
  );
@@ -13854,7 +13795,7 @@ function useAgentGUINodeController({
13854
13795
  pendingApproval
13855
13796
  ]);
13856
13797
  const canSubmit = activeLiveState !== "activating" && activeLiveState !== "failed" && !activeConversationResumeUnavailable && (activeConversationId !== null || selectedProviderTarget.disabled !== true) && (data.provider !== "openclaw" || openclawGateway?.status === "ready") && pendingApproval === null && pendingInteractivePrompt === null && sessionChrome.auth === null && !isCreatingConversation && !isSubmitting && !isInterrupting;
13857
- const canQueueWhileBusy = Boolean(activeConversationId) && (activeConversationBusy || isSubmitting);
13798
+ const canQueueWhileBusy = Boolean(activeConversationId) && (activeConversationBusy || isSubmitting || Boolean(activeSessionState?.pendingInteractive));
13858
13799
  useEffect4(() => {
13859
13800
  const firstVersion = minFiniteMessageVersion(activeMessages);
13860
13801
  const lastVersion = maxFiniteMessageVersion(activeMessages);
@@ -14469,7 +14410,7 @@ var USAGE_WARN_PERCENT = 80;
14469
14410
  var USAGE_CRITICAL_PERCENT = 95;
14470
14411
 
14471
14412
  // agent-gui/agentGuiNode/AgentUsageMeter.tsx
14472
- import { jsx as jsx11, jsxs as jsxs4 } from "react/jsx-runtime";
14413
+ import { jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
14473
14414
  function agentUsageBarColor(percentUsed) {
14474
14415
  if (percentUsed >= USAGE_CRITICAL_PERCENT) {
14475
14416
  return "var(--state-danger)";
@@ -14489,15 +14430,15 @@ function AgentUsageMeter({
14489
14430
  const clampedPercent = typeof percent === "number" && Number.isFinite(percent) ? Math.max(0, Math.min(100, percent)) : null;
14490
14431
  return /* @__PURE__ */ jsxs4("div", { className: "grid min-w-0 gap-1", "data-testid": testId, children: [
14491
14432
  /* @__PURE__ */ jsxs4("div", { className: "flex min-w-0 items-center justify-between gap-3", children: [
14492
- /* @__PURE__ */ jsx11("span", { className: "min-w-0 truncate text-[var(--text-secondary)]", children: label }),
14493
- /* @__PURE__ */ jsx11("span", { className: "shrink-0 whitespace-nowrap text-[var(--text-secondary)]", children: value })
14433
+ /* @__PURE__ */ jsx12("span", { className: "min-w-0 truncate text-[var(--text-secondary)]", children: label }),
14434
+ /* @__PURE__ */ jsx12("span", { className: "shrink-0 whitespace-nowrap text-[var(--text-secondary)]", children: value })
14494
14435
  ] }),
14495
- clampedPercent !== null ? /* @__PURE__ */ jsx11(
14436
+ clampedPercent !== null ? /* @__PURE__ */ jsx12(
14496
14437
  "span",
14497
14438
  {
14498
14439
  "aria-hidden": "true",
14499
14440
  className: "relative h-1.5 overflow-hidden rounded-full bg-[color-mix(in_srgb,var(--text-primary)_10%,transparent)]",
14500
- children: /* @__PURE__ */ jsx11(
14441
+ children: /* @__PURE__ */ jsx12(
14501
14442
  "span",
14502
14443
  {
14503
14444
  className: "absolute inset-y-0 left-0 min-w-0.5 rounded-full",
@@ -14536,10 +14477,10 @@ import {
14536
14477
  } from "@tutti-os/ui-system/icons";
14537
14478
 
14538
14479
  // app/renderer/components/icons/PinFilledIcon.tsx
14539
- import { jsx as jsx12 } from "react/jsx-runtime";
14480
+ import { jsx as jsx13 } from "react/jsx-runtime";
14540
14481
  function PinFilledIcon(props) {
14541
14482
  "use memo";
14542
- return /* @__PURE__ */ jsx12(
14483
+ return /* @__PURE__ */ jsx13(
14543
14484
  "svg",
14544
14485
  {
14545
14486
  xmlns: "http://www.w3.org/2000/svg",
@@ -14547,16 +14488,16 @@ function PinFilledIcon(props) {
14547
14488
  fill: "currentColor",
14548
14489
  "aria-hidden": true,
14549
14490
  ...props,
14550
- children: /* @__PURE__ */ jsx12("path", { d: "M21.6066 8.05025C22.1692 8.61286 22.4849 9.37592 22.4849 10.1716C22.4849 10.9672 22.1692 11.7303 21.6066 12.2929C21.044 12.8555 20.2809 13.1713 19.4853 13.1713C18.6896 13.1713 17.9266 12.8555 17.3639 12.2929L14.7054 14.9514L14.6142 15.0564C14.531 15.1669 14.4714 15.2943 14.4395 15.43C14.3972 15.6109 14.406 15.8 14.4651 15.9762L14.4678 15.9831L15.0873 17.8717L15.1466 18.072C15.2691 18.5425 15.2761 19.037 15.1646 19.5124C15.0372 20.0557 14.7607 20.5526 14.3663 20.9474L13.8284 21.4853C13.4533 21.8604 12.9446 22.0709 12.4142 22.0709C11.8838 22.0709 11.3751 21.8604 11 21.4853L7.46445 17.9497L4.63603 20.7782C4.2455 21.1687 3.61234 21.1687 3.22181 20.7782C2.83129 20.3877 2.83129 19.7545 3.22181 19.364L6.05024 16.5355L2.51471 13C2.13963 12.6249 1.92913 12.1162 1.92913 11.5858C1.92913 11.0554 2.13963 10.5466 2.51471 10.1716L3.05263 9.63365L3.20524 9.49209C3.57235 9.17309 4.01205 8.94693 4.48756 8.83539C5.03093 8.70798 5.59924 8.73494 6.12827 8.91273L8.01688 9.53214L8.02379 9.5349C8.19995 9.59404 8.38907 9.60282 8.57 9.56045C8.7057 9.52863 8.83304 9.46898 8.94358 9.38575L9.04854 9.2946L11.7071 6.63604C11.1445 6.07343 10.8287 5.31037 10.8287 4.51472C10.8287 3.71907 11.1445 2.95601 11.7071 2.3934C12.2697 1.83079 13.0328 1.51504 13.8284 1.51504C14.6241 1.51504 15.3871 1.83079 15.9497 2.3934L21.6066 8.05025Z" })
14491
+ children: /* @__PURE__ */ jsx13("path", { d: "M21.6066 8.05025C22.1692 8.61286 22.4849 9.37592 22.4849 10.1716C22.4849 10.9672 22.1692 11.7303 21.6066 12.2929C21.044 12.8555 20.2809 13.1713 19.4853 13.1713C18.6896 13.1713 17.9266 12.8555 17.3639 12.2929L14.7054 14.9514L14.6142 15.0564C14.531 15.1669 14.4714 15.2943 14.4395 15.43C14.3972 15.6109 14.406 15.8 14.4651 15.9762L14.4678 15.9831L15.0873 17.8717L15.1466 18.072C15.2691 18.5425 15.2761 19.037 15.1646 19.5124C15.0372 20.0557 14.7607 20.5526 14.3663 20.9474L13.8284 21.4853C13.4533 21.8604 12.9446 22.0709 12.4142 22.0709C11.8838 22.0709 11.3751 21.8604 11 21.4853L7.46445 17.9497L4.63603 20.7782C4.2455 21.1687 3.61234 21.1687 3.22181 20.7782C2.83129 20.3877 2.83129 19.7545 3.22181 19.364L6.05024 16.5355L2.51471 13C2.13963 12.6249 1.92913 12.1162 1.92913 11.5858C1.92913 11.0554 2.13963 10.5466 2.51471 10.1716L3.05263 9.63365L3.20524 9.49209C3.57235 9.17309 4.01205 8.94693 4.48756 8.83539C5.03093 8.70798 5.59924 8.73494 6.12827 8.91273L8.01688 9.53214L8.02379 9.5349C8.19995 9.59404 8.38907 9.60282 8.57 9.56045C8.7057 9.52863 8.83304 9.46898 8.94358 9.38575L9.04854 9.2946L11.7071 6.63604C11.1445 6.07343 10.8287 5.31037 10.8287 4.51472C10.8287 3.71907 11.1445 2.95601 11.7071 2.3934C12.2697 1.83079 13.0328 1.51504 13.8284 1.51504C14.6241 1.51504 15.3871 1.83079 15.9497 2.3934L21.6066 8.05025Z" })
14551
14492
  }
14552
14493
  );
14553
14494
  }
14554
14495
 
14555
14496
  // app/renderer/components/icons/PinLinedIcon.tsx
14556
- import { jsx as jsx13 } from "react/jsx-runtime";
14497
+ import { jsx as jsx14 } from "react/jsx-runtime";
14557
14498
  function PinLinedIcon(props) {
14558
14499
  "use memo";
14559
- return /* @__PURE__ */ jsx13(
14500
+ return /* @__PURE__ */ jsx14(
14560
14501
  "svg",
14561
14502
  {
14562
14503
  xmlns: "http://www.w3.org/2000/svg",
@@ -14564,16 +14505,16 @@ function PinLinedIcon(props) {
14564
14505
  fill: "currentColor",
14565
14506
  "aria-hidden": true,
14566
14507
  ...props,
14567
- children: /* @__PURE__ */ jsx13("path", { d: "M21.6066 8.05025C22.1692 8.61286 22.4849 9.37592 22.4849 10.1716C22.4849 10.9672 22.1692 11.7303 21.6066 12.2929C21.044 12.8555 20.2809 13.1713 19.4853 13.1713C18.6896 13.1713 17.9266 12.8555 17.3639 12.2929L14.7054 14.9514L14.6142 15.0564C14.531 15.1669 14.4714 15.2943 14.4395 15.43C14.3972 15.6109 14.406 15.8 14.4651 15.9762L14.4678 15.9831L15.0873 17.8717L15.1466 18.072C15.2691 18.5425 15.2761 19.037 15.1646 19.5124C15.0372 20.0557 14.7607 20.5526 14.3663 20.9474L13.8284 21.4853C13.4533 21.8604 12.9446 22.0709 12.4142 22.0709C11.8838 22.0709 11.3751 21.8604 11 21.4853L7.46445 17.9497L4.63603 20.7782C4.2455 21.1687 3.61234 21.1687 3.22181 20.7782C2.83129 20.3877 2.83129 19.7545 3.22181 19.364L6.05024 16.5355L2.51471 13C2.13963 12.6249 1.92913 12.1162 1.92913 11.5858C1.92913 11.0554 2.13963 10.5466 2.51471 10.1716L3.05263 9.63365L3.20524 9.49209C3.57235 9.17309 4.01205 8.94693 4.48756 8.83539C5.03093 8.70798 5.59924 8.73494 6.12827 8.91273L8.01688 9.53214L8.02379 9.5349C8.19995 9.59404 8.38907 9.60282 8.57 9.56045C8.7057 9.52863 8.83304 9.46898 8.94358 9.38575L9.04854 9.2946L11.7071 6.63604C11.1445 6.07343 10.8287 5.31037 10.8287 4.51472C10.8287 3.71907 11.1445 2.95601 11.7071 2.3934C12.2697 1.83079 13.0328 1.51504 13.8284 1.51504C14.6241 1.51504 15.3871 1.83079 15.9497 2.3934L21.6066 8.05025ZM14.5355 3.80761C14.348 3.62008 14.0936 3.51483 13.8284 3.51483C13.5632 3.51483 13.3088 3.62008 13.1213 3.80761C12.9338 3.99515 12.8285 4.2495 12.8285 4.51472C12.8285 4.74685 12.9091 4.97066 13.055 5.14863L13.2539 5.36822C13.5457 5.72416 13.7069 6.17177 13.7069 6.63604C13.7069 7.16647 13.4964 7.67518 13.1213 8.05025L10.4621 10.7095C10.0673 11.1038 9.57037 11.3803 9.02713 11.5078C8.48575 11.6347 7.92002 11.6071 7.39264 11.4311V11.4325L5.49781 10.811L5.49091 10.8082C5.31475 10.7491 5.12562 10.7403 4.94469 10.7827C4.76366 10.8251 4.59774 10.9172 4.46615 11.0486L3.92892 11.5858L12.4142 20.0711L12.9514 19.5338C13.0828 19.4022 13.1748 19.2363 13.2173 19.0553C13.2597 18.8744 13.2509 18.6852 13.1917 18.5091L13.189 18.5022L12.5675 16.6073L12.5682 16.6067C12.3924 16.0795 12.3654 15.514 12.4922 14.9729C12.6197 14.4296 12.8962 13.9327 13.2905 13.5379L15.9497 10.8787C16.3248 10.5036 16.8335 10.2931 17.3639 10.2931C17.8282 10.2931 18.2758 10.4543 18.6318 10.7461L18.8514 10.945C19.0293 11.0909 19.2531 11.1715 19.4853 11.1715C19.7505 11.1715 20.0048 11.0662 20.1924 10.8787C20.3799 10.6911 20.4852 10.4368 20.4852 10.1716C20.4852 9.90636 20.3799 9.652 20.1924 9.46447L14.5355 3.80761Z" })
14508
+ children: /* @__PURE__ */ jsx14("path", { d: "M21.6066 8.05025C22.1692 8.61286 22.4849 9.37592 22.4849 10.1716C22.4849 10.9672 22.1692 11.7303 21.6066 12.2929C21.044 12.8555 20.2809 13.1713 19.4853 13.1713C18.6896 13.1713 17.9266 12.8555 17.3639 12.2929L14.7054 14.9514L14.6142 15.0564C14.531 15.1669 14.4714 15.2943 14.4395 15.43C14.3972 15.6109 14.406 15.8 14.4651 15.9762L14.4678 15.9831L15.0873 17.8717L15.1466 18.072C15.2691 18.5425 15.2761 19.037 15.1646 19.5124C15.0372 20.0557 14.7607 20.5526 14.3663 20.9474L13.8284 21.4853C13.4533 21.8604 12.9446 22.0709 12.4142 22.0709C11.8838 22.0709 11.3751 21.8604 11 21.4853L7.46445 17.9497L4.63603 20.7782C4.2455 21.1687 3.61234 21.1687 3.22181 20.7782C2.83129 20.3877 2.83129 19.7545 3.22181 19.364L6.05024 16.5355L2.51471 13C2.13963 12.6249 1.92913 12.1162 1.92913 11.5858C1.92913 11.0554 2.13963 10.5466 2.51471 10.1716L3.05263 9.63365L3.20524 9.49209C3.57235 9.17309 4.01205 8.94693 4.48756 8.83539C5.03093 8.70798 5.59924 8.73494 6.12827 8.91273L8.01688 9.53214L8.02379 9.5349C8.19995 9.59404 8.38907 9.60282 8.57 9.56045C8.7057 9.52863 8.83304 9.46898 8.94358 9.38575L9.04854 9.2946L11.7071 6.63604C11.1445 6.07343 10.8287 5.31037 10.8287 4.51472C10.8287 3.71907 11.1445 2.95601 11.7071 2.3934C12.2697 1.83079 13.0328 1.51504 13.8284 1.51504C14.6241 1.51504 15.3871 1.83079 15.9497 2.3934L21.6066 8.05025ZM14.5355 3.80761C14.348 3.62008 14.0936 3.51483 13.8284 3.51483C13.5632 3.51483 13.3088 3.62008 13.1213 3.80761C12.9338 3.99515 12.8285 4.2495 12.8285 4.51472C12.8285 4.74685 12.9091 4.97066 13.055 5.14863L13.2539 5.36822C13.5457 5.72416 13.7069 6.17177 13.7069 6.63604C13.7069 7.16647 13.4964 7.67518 13.1213 8.05025L10.4621 10.7095C10.0673 11.1038 9.57037 11.3803 9.02713 11.5078C8.48575 11.6347 7.92002 11.6071 7.39264 11.4311V11.4325L5.49781 10.811L5.49091 10.8082C5.31475 10.7491 5.12562 10.7403 4.94469 10.7827C4.76366 10.8251 4.59774 10.9172 4.46615 11.0486L3.92892 11.5858L12.4142 20.0711L12.9514 19.5338C13.0828 19.4022 13.1748 19.2363 13.2173 19.0553C13.2597 18.8744 13.2509 18.6852 13.1917 18.5091L13.189 18.5022L12.5675 16.6073L12.5682 16.6067C12.3924 16.0795 12.3654 15.514 12.4922 14.9729C12.6197 14.4296 12.8962 13.9327 13.2905 13.5379L15.9497 10.8787C16.3248 10.5036 16.8335 10.2931 17.3639 10.2931C17.8282 10.2931 18.2758 10.4543 18.6318 10.7461L18.8514 10.945C19.0293 11.0909 19.2531 11.1715 19.4853 11.1715C19.7505 11.1715 20.0048 11.0662 20.1924 10.8787C20.3799 10.6911 20.4852 10.4368 20.4852 10.1716C20.4852 9.90636 20.3799 9.652 20.1924 9.46447L14.5355 3.80761Z" })
14568
14509
  }
14569
14510
  );
14570
14511
  }
14571
14512
 
14572
14513
  // app/renderer/components/icons/UnavailableChatIcon.tsx
14573
- import { jsx as jsx14 } from "react/jsx-runtime";
14514
+ import { jsx as jsx15 } from "react/jsx-runtime";
14574
14515
  function UnavailableChatIcon(props) {
14575
14516
  "use memo";
14576
- return /* @__PURE__ */ jsx14(
14517
+ return /* @__PURE__ */ jsx15(
14577
14518
  "svg",
14578
14519
  {
14579
14520
  xmlns: "http://www.w3.org/2000/svg",
@@ -14581,16 +14522,16 @@ function UnavailableChatIcon(props) {
14581
14522
  fill: "currentColor",
14582
14523
  "aria-hidden": true,
14583
14524
  ...props,
14584
- children: /* @__PURE__ */ jsx14("path", { d: "M20.833 2.125C21.6507 2.125 22.4355 2.45019 23.0137 3.02832C23.5916 3.60645 23.9159 4.39053 23.916 5.20801V17.708C23.916 18.5257 23.5918 19.3104 23.0137 19.8887C22.4355 20.4668 21.6507 20.792 20.833 20.792H7.1123C6.82516 20.7922 6.5497 20.9063 6.34668 21.1094L4.05273 23.4033C3.80954 23.6464 3.49934 23.8118 3.16211 23.8789C2.82492 23.9459 2.47487 23.9118 2.15723 23.7803C1.83953 23.6486 1.56707 23.4256 1.37598 23.1396C1.18489 22.8536 1.08305 22.5168 1.08301 22.1729V5.20801C1.08309 4.39045 1.40827 3.60647 1.98633 3.02832C2.56441 2.45024 3.3485 2.12517 4.16602 2.125H20.833ZM16.1533 7.80566C15.7628 7.41518 15.1298 7.41527 14.7393 7.80566L12.5 10.0439L10.2607 7.80469C9.87031 7.41464 9.23712 7.41465 8.84668 7.80469C8.45627 8.19509 8.45651 8.8282 8.84668 9.21875L11.0859 11.458L8.84668 13.6982C8.45651 14.0888 8.45627 14.7219 8.84668 15.1123C9.2371 15.5026 9.87024 15.5024 10.2607 15.1123L12.5 12.873L14.7393 15.1113C15.1298 15.5017 15.7628 15.5018 16.1533 15.1113C16.5434 14.7208 16.5436 14.0877 16.1533 13.6973L13.9141 11.458L16.1533 9.21973C16.5437 8.82924 16.5437 8.19616 16.1533 7.80566Z" })
14525
+ children: /* @__PURE__ */ jsx15("path", { d: "M20.833 2.125C21.6507 2.125 22.4355 2.45019 23.0137 3.02832C23.5916 3.60645 23.9159 4.39053 23.916 5.20801V17.708C23.916 18.5257 23.5918 19.3104 23.0137 19.8887C22.4355 20.4668 21.6507 20.792 20.833 20.792H7.1123C6.82516 20.7922 6.5497 20.9063 6.34668 21.1094L4.05273 23.4033C3.80954 23.6464 3.49934 23.8118 3.16211 23.8789C2.82492 23.9459 2.47487 23.9118 2.15723 23.7803C1.83953 23.6486 1.56707 23.4256 1.37598 23.1396C1.18489 22.8536 1.08305 22.5168 1.08301 22.1729V5.20801C1.08309 4.39045 1.40827 3.60647 1.98633 3.02832C2.56441 2.45024 3.3485 2.12517 4.16602 2.125H20.833ZM16.1533 7.80566C15.7628 7.41518 15.1298 7.41527 14.7393 7.80566L12.5 10.0439L10.2607 7.80469C9.87031 7.41464 9.23712 7.41465 8.84668 7.80469C8.45627 8.19509 8.45651 8.8282 8.84668 9.21875L11.0859 11.458L8.84668 13.6982C8.45651 14.0888 8.45627 14.7219 8.84668 15.1123C9.2371 15.5026 9.87024 15.5024 10.2607 15.1123L12.5 12.873L14.7393 15.1113C15.1298 15.5017 15.7628 15.5018 16.1533 15.1113C16.5434 14.7208 16.5436 14.0877 16.1533 13.6973L13.9141 11.458L16.1533 9.21973C16.5437 8.82924 16.5437 8.19616 16.1533 7.80566Z" })
14585
14526
  }
14586
14527
  );
14587
14528
  }
14588
14529
 
14589
14530
  // app/renderer/components/icons/EnvironmentLinedIcon.tsx
14590
- import { jsx as jsx15 } from "react/jsx-runtime";
14531
+ import { jsx as jsx16 } from "react/jsx-runtime";
14591
14532
  function EnvironmentLinedIcon(props) {
14592
14533
  "use memo";
14593
- return /* @__PURE__ */ jsx15(
14534
+ return /* @__PURE__ */ jsx16(
14594
14535
  "svg",
14595
14536
  {
14596
14537
  width: "24",
@@ -14599,7 +14540,7 @@ function EnvironmentLinedIcon(props) {
14599
14540
  fill: "none",
14600
14541
  xmlns: "http://www.w3.org/2000/svg",
14601
14542
  ...props,
14602
- children: /* @__PURE__ */ jsx15(
14543
+ children: /* @__PURE__ */ jsx16(
14603
14544
  "path",
14604
14545
  {
14605
14546
  d: "M2.0094 19.0001C2.56169 19.0001 3.0094 19.4478 3.0094 20.0001C3.0094 20.5523 2.56169 21.0001 2.0094 21.0001H1.99964C1.44752 20.9999 0.999635 20.5522 0.999635 20.0001C0.999635 19.4479 1.44752 19.0002 1.99964 19.0001H2.0094ZM1.01624 15.8174C1.1173 15.2748 1.63961 14.9161 2.18225 15.0166C3.37336 15.2385 4.47004 15.8162 5.32679 16.6729C6.18355 17.5297 6.76118 18.6263 6.98304 19.8174C7.08384 20.3602 6.72504 20.8824 6.18226 20.9835C5.63962 21.084 5.11731 20.7253 5.01624 20.1827C4.86826 19.3888 4.48377 18.658 3.91272 18.087C3.34169 17.516 2.61086 17.1314 1.81702 16.9834C1.27446 16.8822 0.915501 16.3601 1.01624 15.8174ZM2.1051 11.0059C4.37989 11.2473 6.50315 12.2614 8.12074 13.8789C9.73833 15.4965 10.7524 17.6197 10.9938 19.8946C11.052 20.4438 10.6543 20.9359 10.1051 20.9942C9.55607 21.0523 9.06377 20.6546 9.0055 20.1055C8.81236 18.2857 8.00074 16.5871 6.70667 15.293C5.41262 13.999 3.71397 13.1873 1.89417 12.9942C1.34517 12.9357 0.947265 12.4436 1.00549 11.8946C1.06376 11.3455 1.55606 10.9478 2.1051 11.0059ZM19.9997 3C20.7952 3 21.5582 3.31641 22.1208 3.87891C22.6834 4.44152 22.9997 5.20436 22.9997 6.00001V18.0001C22.9997 18.7957 22.6834 19.5585 22.1208 20.1212C21.5582 20.6837 20.7952 21.0001 19.9997 21.0001H13.9996C13.4475 20.9999 12.9996 20.5522 12.9996 20.0001C12.9996 19.4479 13.4475 19.0002 13.9996 19.0001H19.9997C20.2648 19.0001 20.5192 18.8945 20.7067 18.7071C20.8942 18.5195 20.9997 18.2653 20.9997 18.0001V6.00001C20.9997 5.73479 20.8942 5.48051 20.7067 5.29298C20.5192 5.10555 20.2648 5.00001 19.9997 5.00001H3.99964C3.73455 5.0001 3.48006 5.10552 3.29261 5.29298C3.10518 5.4805 2.99964 5.73488 2.99964 6.00001V8.00002C2.99964 8.5523 2.55192 9.00002 1.99964 9.00002C1.44752 8.99983 0.999635 8.55218 0.999635 8.00002V6.00001C0.999635 5.20444 1.31605 4.4415 1.87854 3.87891C2.44107 3.31638 3.20412 3.0001 3.99964 3H19.9997Z",
@@ -14959,7 +14900,7 @@ var styles = {
14959
14900
  var RoomIssueNode_styles_default = styles;
14960
14901
 
14961
14902
  // agent-gui/RoomIssueNode/TaskSearchField.tsx
14962
- import { jsx as jsx16, jsxs as jsxs5 } from "react/jsx-runtime";
14903
+ import { jsx as jsx17, jsxs as jsxs5 } from "react/jsx-runtime";
14963
14904
  function TaskSearchField({
14964
14905
  ariaLabel,
14965
14906
  className,
@@ -14979,7 +14920,7 @@ function TaskSearchField({
14979
14920
  className: `${RoomIssueNode_styles_default.searchField} ${className ?? ""}`.trim(),
14980
14921
  "data-has-value": searchInput.value ? "true" : "false",
14981
14922
  children: [
14982
- /* @__PURE__ */ jsx16(
14923
+ /* @__PURE__ */ jsx17(
14983
14924
  Input,
14984
14925
  {
14985
14926
  type: "search",
@@ -15002,7 +14943,7 @@ function TaskSearchField({
15002
14943
  "data-testid": dataTestId
15003
14944
  }
15004
14945
  ),
15005
- searchInput.value ? /* @__PURE__ */ jsx16(
14946
+ searchInput.value ? /* @__PURE__ */ jsx17(
15006
14947
  "button",
15007
14948
  {
15008
14949
  type: "button",
@@ -15010,7 +14951,7 @@ function TaskSearchField({
15010
14951
  "aria-label": clearAriaLabel ?? t("common.clear"),
15011
14952
  onMouseDown: (event) => event.preventDefault(),
15012
14953
  onClick: searchInput.clearValue,
15013
- children: /* @__PURE__ */ jsx16(CloseLinedIcon, { "aria-hidden": "true" })
14954
+ children: /* @__PURE__ */ jsx17(CloseLinedIcon, { "aria-hidden": "true" })
15014
14955
  }
15015
14956
  ) : null
15016
14957
  ]
@@ -15049,7 +14990,7 @@ import {
15049
14990
  useAnimation,
15050
14991
  useReducedMotion
15051
14992
  } from "framer-motion";
15052
- import { jsx as jsx17, jsxs as jsxs6 } from "react/jsx-runtime";
14993
+ import { jsx as jsx18, jsxs as jsxs6 } from "react/jsx-runtime";
15053
14994
  var CAST_VARIANTS = {
15054
14995
  normal: { opacity: 1 },
15055
14996
  animate: (custom) => ({
@@ -15117,7 +15058,7 @@ var CastIcon = forwardRef2(
15117
15058
  },
15118
15059
  [onMouseLeave, stopAnimation]
15119
15060
  );
15120
- return /* @__PURE__ */ jsx17(
15061
+ return /* @__PURE__ */ jsx18(
15121
15062
  "div",
15122
15063
  {
15123
15064
  className: cn("inline-flex items-center justify-center", className),
@@ -15137,8 +15078,8 @@ var CastIcon = forwardRef2(
15137
15078
  width: size,
15138
15079
  xmlns: "http://www.w3.org/2000/svg",
15139
15080
  children: [
15140
- /* @__PURE__ */ jsx17("path", { d: "M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6" }),
15141
- /* @__PURE__ */ jsx17(
15081
+ /* @__PURE__ */ jsx18("path", { d: "M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6" }),
15082
+ /* @__PURE__ */ jsx18(
15142
15083
  motion.path,
15143
15084
  {
15144
15085
  animate: controls,
@@ -15147,7 +15088,7 @@ var CastIcon = forwardRef2(
15147
15088
  variants: CAST_VARIANTS
15148
15089
  }
15149
15090
  ),
15150
- /* @__PURE__ */ jsx17(
15091
+ /* @__PURE__ */ jsx18(
15151
15092
  motion.path,
15152
15093
  {
15153
15094
  animate: controls,
@@ -15156,7 +15097,7 @@ var CastIcon = forwardRef2(
15156
15097
  variants: CAST_VARIANTS
15157
15098
  }
15158
15099
  ),
15159
- /* @__PURE__ */ jsx17(
15100
+ /* @__PURE__ */ jsx18(
15160
15101
  motion.line,
15161
15102
  {
15162
15103
  animate: controls,
@@ -15206,7 +15147,7 @@ var styles2 = {
15206
15147
  var AgentGUIChrome_styles_default = styles2;
15207
15148
 
15208
15149
  // agent-gui/agentGuiNode/AgentSessionChrome.tsx
15209
- import { Fragment as Fragment2, jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
15150
+ import { Fragment as Fragment2, jsx as jsx19, jsxs as jsxs7 } from "react/jsx-runtime";
15210
15151
  function splitTrailingEllipsis(message) {
15211
15152
  const match = message.match(/^(.*?)(\.{3}|…)\s*$/);
15212
15153
  if (!match) {
@@ -15220,9 +15161,9 @@ function splitTrailingEllipsis(message) {
15220
15161
  function LoadingEllipsis() {
15221
15162
  "use memo";
15222
15163
  return /* @__PURE__ */ jsxs7("span", { className: "tsh-inline-loading-ellipsis", "aria-hidden": "true", children: [
15223
- /* @__PURE__ */ jsx18("span", {}),
15224
- /* @__PURE__ */ jsx18("span", {}),
15225
- /* @__PURE__ */ jsx18("span", {})
15164
+ /* @__PURE__ */ jsx19("span", {}),
15165
+ /* @__PURE__ */ jsx19("span", {}),
15166
+ /* @__PURE__ */ jsx19("span", {})
15226
15167
  ] });
15227
15168
  }
15228
15169
  function AgentChromeNotice({
@@ -15235,7 +15176,7 @@ function AgentChromeNotice({
15235
15176
  }) {
15236
15177
  "use memo";
15237
15178
  const fullMessage = description ? `${title} ${description}` : title;
15238
- return /* @__PURE__ */ jsx18("div", { className: AgentGUIChrome_styles_default.sessionChrome, children: /* @__PURE__ */ jsx18(
15179
+ return /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.sessionChrome, children: /* @__PURE__ */ jsx19(
15239
15180
  "section",
15240
15181
  {
15241
15182
  className: cn(
@@ -15246,16 +15187,16 @@ function AgentChromeNotice({
15246
15187
  "data-expanded": "false",
15247
15188
  role,
15248
15189
  "data-testid": testId,
15249
- children: /* @__PURE__ */ jsx18("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
15250
- icon ? /* @__PURE__ */ jsx18("span", { className: AgentGUIChrome_styles_default.chromeIcon, children: icon }) : null,
15190
+ children: /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
15191
+ icon ? /* @__PURE__ */ jsx19("span", { className: AgentGUIChrome_styles_default.chromeIcon, children: icon }) : null,
15251
15192
  /* @__PURE__ */ jsxs7(
15252
15193
  "p",
15253
15194
  {
15254
15195
  className: cn(AgentGUIChrome_styles_default.chromeMessage, AgentGUIChrome_styles_default.chromeNoticeMessage),
15255
15196
  title: fullMessage,
15256
15197
  children: [
15257
- /* @__PURE__ */ jsx18("span", { className: AgentGUIChrome_styles_default.chromeNoticeTitle, children: title }),
15258
- description ? /* @__PURE__ */ jsx18("span", { className: AgentGUIChrome_styles_default.chromeNoticeDescription, children: description }) : null
15198
+ /* @__PURE__ */ jsx19("span", { className: AgentGUIChrome_styles_default.chromeNoticeTitle, children: title }),
15199
+ description ? /* @__PURE__ */ jsx19("span", { className: AgentGUIChrome_styles_default.chromeNoticeDescription, children: description }) : null
15259
15200
  ]
15260
15201
  }
15261
15202
  )
@@ -15404,7 +15345,7 @@ function AgentSessionChrome({
15404
15345
  event.stopPropagation();
15405
15346
  };
15406
15347
  return /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.sessionChrome, children: [
15407
- visibleAuth ? /* @__PURE__ */ jsx18(
15348
+ visibleAuth ? /* @__PURE__ */ jsx19(
15408
15349
  "section",
15409
15350
  {
15410
15351
  ref: authCardRef,
@@ -15416,7 +15357,7 @@ function AgentSessionChrome({
15416
15357
  onKeyDown: handleExpandableCardKeyDown("auth"),
15417
15358
  children: /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: [
15418
15359
  /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
15419
- /* @__PURE__ */ jsx18(
15360
+ /* @__PURE__ */ jsx19(
15420
15361
  "p",
15421
15362
  {
15422
15363
  ref: authMessageRef,
@@ -15425,7 +15366,7 @@ function AgentSessionChrome({
15425
15366
  children: visibleAuth.message
15426
15367
  }
15427
15368
  ),
15428
- /* @__PURE__ */ jsx18(
15369
+ /* @__PURE__ */ jsx19(
15429
15370
  ChevronDown,
15430
15371
  {
15431
15372
  "aria-hidden": "true",
@@ -15438,7 +15379,7 @@ function AgentSessionChrome({
15438
15379
  )
15439
15380
  ] }),
15440
15381
  /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeInlineActions, children: [
15441
- onAuthLogin ? /* @__PURE__ */ jsx18(
15382
+ onAuthLogin ? /* @__PURE__ */ jsx19(
15442
15383
  Button2,
15443
15384
  {
15444
15385
  type: "button",
@@ -15451,7 +15392,7 @@ function AgentSessionChrome({
15451
15392
  children: labels.authLogin ?? labels.retryActivation
15452
15393
  }
15453
15394
  ) : null,
15454
- /* @__PURE__ */ jsx18(
15395
+ /* @__PURE__ */ jsx19(
15455
15396
  Button2,
15456
15397
  {
15457
15398
  type: "button",
@@ -15469,9 +15410,9 @@ function AgentSessionChrome({
15469
15410
  }
15470
15411
  ) : null,
15471
15412
  chrome.approval ? /* @__PURE__ */ jsxs7("section", { className: cn(AgentGUIChrome_styles_default.chromeCard, AgentGUIChrome_styles_default.chromeCardAction), children: [
15472
- /* @__PURE__ */ jsx18("div", { className: AgentGUIChrome_styles_default.chromeTitle, children: labels.approvalRequired }),
15473
- /* @__PURE__ */ jsx18("p", { className: AgentGUIChrome_styles_default.chromeMessage, children: chrome.approval.title }),
15474
- /* @__PURE__ */ jsx18("div", { className: AgentGUIChrome_styles_default.chromeActions, children: chrome.approval.options.map((option) => /* @__PURE__ */ jsx18(
15413
+ /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.chromeTitle, children: labels.approvalRequired }),
15414
+ /* @__PURE__ */ jsx19("p", { className: AgentGUIChrome_styles_default.chromeMessage, children: chrome.approval.title }),
15415
+ /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.chromeActions, children: chrome.approval.options.map((option) => /* @__PURE__ */ jsx19(
15475
15416
  "button",
15476
15417
  {
15477
15418
  type: "button",
@@ -15485,7 +15426,7 @@ function AgentSessionChrome({
15485
15426
  option.id
15486
15427
  )) })
15487
15428
  ] }) : null,
15488
- visibleRecovery ? /* @__PURE__ */ jsx18(
15429
+ visibleRecovery ? /* @__PURE__ */ jsx19(
15489
15430
  "section",
15490
15431
  {
15491
15432
  ref: recoveryCardRef,
@@ -15503,7 +15444,7 @@ function AgentSessionChrome({
15503
15444
  onKeyDown: handleExpandableCardKeyDown("recovery"),
15504
15445
  children: /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: [
15505
15446
  /* @__PURE__ */ jsxs7("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
15506
- visibleRecovery.kind === "activating" ? /* @__PURE__ */ jsx18(
15447
+ visibleRecovery.kind === "activating" ? /* @__PURE__ */ jsx19(
15507
15448
  CastIcon,
15508
15449
  {
15509
15450
  active: true,
@@ -15513,7 +15454,7 @@ function AgentSessionChrome({
15513
15454
  size: 16
15514
15455
  }
15515
15456
  ) : null,
15516
- /* @__PURE__ */ jsx18(
15457
+ /* @__PURE__ */ jsx19(
15517
15458
  "p",
15518
15459
  {
15519
15460
  ref: recoveryMessageRef,
@@ -15521,12 +15462,12 @@ function AgentSessionChrome({
15521
15462
  "aria-label": visibleRecovery.kind === "activating" ? recoveryMessage : void 0,
15522
15463
  title: recoveryMessage,
15523
15464
  children: visibleRecovery.kind === "activating" ? /* @__PURE__ */ jsxs7(Fragment2, { children: [
15524
- /* @__PURE__ */ jsx18("span", { className: "tsh-inline-loading-label", children: activatingMessage.label }),
15525
- activatingMessage.ellipsis ? /* @__PURE__ */ jsx18(LoadingEllipsis, {}) : null
15465
+ /* @__PURE__ */ jsx19("span", { className: "tsh-inline-loading-label", children: activatingMessage.label }),
15466
+ activatingMessage.ellipsis ? /* @__PURE__ */ jsx19(LoadingEllipsis, {}) : null
15526
15467
  ] }) : recoveryMessage
15527
15468
  }
15528
15469
  ),
15529
- /* @__PURE__ */ jsx18(
15470
+ /* @__PURE__ */ jsx19(
15530
15471
  ChevronDown,
15531
15472
  {
15532
15473
  "aria-hidden": "true",
@@ -15538,7 +15479,7 @@ function AgentSessionChrome({
15538
15479
  }
15539
15480
  )
15540
15481
  ] }),
15541
- /* @__PURE__ */ jsx18("div", { className: AgentGUIChrome_styles_default.chromeInlineActions, children: visibleRecovery.kind === "failed" && visibleRecovery.followupAction === "continue-in-new-conversation" ? /* @__PURE__ */ jsx18(
15482
+ /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.chromeInlineActions, children: visibleRecovery.kind === "failed" && visibleRecovery.followupAction === "continue-in-new-conversation" ? /* @__PURE__ */ jsx19(
15542
15483
  Button2,
15543
15484
  {
15544
15485
  type: "button",
@@ -15551,7 +15492,7 @@ function AgentSessionChrome({
15551
15492
  },
15552
15493
  children: labels.continueInNewConversation
15553
15494
  }
15554
- ) : visibleRecovery.kind === "failed" && visibleRecovery.canRetry !== false ? /* @__PURE__ */ jsx18(
15495
+ ) : visibleRecovery.kind === "failed" && visibleRecovery.canRetry !== false ? /* @__PURE__ */ jsx19(
15555
15496
  Button2,
15556
15497
  {
15557
15498
  type: "button",
@@ -15573,7 +15514,7 @@ function AgentSessionChrome({
15573
15514
 
15574
15515
  // agent-gui/agentGuiNode/AgentGoalBanner.tsx
15575
15516
  import { Target } from "lucide-react";
15576
- import { jsx as jsx19, jsxs as jsxs8 } from "react/jsx-runtime";
15517
+ import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
15577
15518
  var TERMINAL_GOAL_STATUSES = /* @__PURE__ */ new Set(["complete", "completed", "done"]);
15578
15519
  function normalizeGoalStatus(status) {
15579
15520
  return (status ?? "").trim().toLowerCase();
@@ -15627,7 +15568,7 @@ function AgentGoalBanner({
15627
15568
  labels
15628
15569
  });
15629
15570
  const fullMessage = `${labels.goalLabel} ${description}`;
15630
- return /* @__PURE__ */ jsx19("div", { className: AgentGUIChrome_styles_default.sessionChrome, children: /* @__PURE__ */ jsx19(
15571
+ return /* @__PURE__ */ jsx20("div", { className: AgentGUIChrome_styles_default.sessionChrome, children: /* @__PURE__ */ jsx20(
15631
15572
  "section",
15632
15573
  {
15633
15574
  className: cn(AgentGUIChrome_styles_default.chromeCard, AgentGUIChrome_styles_default.chromeCardMuted),
@@ -15637,20 +15578,20 @@ function AgentGoalBanner({
15637
15578
  "data-testid": "agent-gui-goal-banner",
15638
15579
  children: /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: [
15639
15580
  /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
15640
- /* @__PURE__ */ jsx19("span", { className: AgentGUIChrome_styles_default.chromeIcon, children: /* @__PURE__ */ jsx19(Target, { "aria-hidden": true, className: "size-3.5" }) }),
15581
+ /* @__PURE__ */ jsx20("span", { className: AgentGUIChrome_styles_default.chromeIcon, children: /* @__PURE__ */ jsx20(Target, { "aria-hidden": true, className: "size-3.5" }) }),
15641
15582
  /* @__PURE__ */ jsxs8(
15642
15583
  "p",
15643
15584
  {
15644
15585
  className: cn(AgentGUIChrome_styles_default.chromeMessage, AgentGUIChrome_styles_default.chromeNoticeMessage),
15645
15586
  title: fullMessage,
15646
15587
  children: [
15647
- /* @__PURE__ */ jsx19("span", { className: AgentGUIChrome_styles_default.chromeNoticeTitle, children: labels.goalLabel }),
15648
- /* @__PURE__ */ jsx19("span", { className: AgentGUIChrome_styles_default.chromeNoticeDescription, children: description })
15588
+ /* @__PURE__ */ jsx20("span", { className: AgentGUIChrome_styles_default.chromeNoticeTitle, children: labels.goalLabel }),
15589
+ /* @__PURE__ */ jsx20("span", { className: AgentGUIChrome_styles_default.chromeNoticeDescription, children: description })
15649
15590
  ]
15650
15591
  }
15651
15592
  )
15652
15593
  ] }),
15653
- /* @__PURE__ */ jsx19(
15594
+ /* @__PURE__ */ jsx20(
15654
15595
  "span",
15655
15596
  {
15656
15597
  className: AgentGUIChrome_styles_default.chromeGoalHint,
@@ -16138,7 +16079,7 @@ import {
16138
16079
  Target as Target2,
16139
16080
  ZapIcon
16140
16081
  } from "lucide-react";
16141
- import { jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
16082
+ import { jsx as jsx21, jsxs as jsxs9 } from "react/jsx-runtime";
16142
16083
  var paletteStyles = {
16143
16084
  palette: "nodrag agent-gui-node__mention-palette flex h-full min-h-0 flex-col gap-1 overflow-y-auto px-1 pb-1 pt-2 [-webkit-app-region:no-drag]",
16144
16085
  option: "nodrag relative flex min-h-9 w-full min-w-0 cursor-pointer select-none items-center gap-2 overflow-hidden rounded-[6px] border-0 bg-transparent px-2.5 py-2 text-left text-[13px] text-[var(--text-primary)] outline-hidden transition-colors duration-200 [-webkit-app-region:no-drag] focus-visible:outline-none active:bg-[var(--transparency-active)] data-[highlighted]:bg-[var(--transparency-block)] data-[highlighted]:text-[var(--text-primary)] [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
@@ -16186,11 +16127,11 @@ function AgentSlashCommandPalette({
16186
16127
  firstEntryIndexByType.set(groupType, index);
16187
16128
  }
16188
16129
  });
16189
- return /* @__PURE__ */ jsx20("div", { className: paletteStyles.palette, role: "listbox", "aria-label": label, children: entries.map((entry, index) => {
16130
+ return /* @__PURE__ */ jsx21("div", { className: paletteStyles.palette, role: "listbox", "aria-label": label, children: entries.map((entry, index) => {
16190
16131
  const isHighlighted = index === highlightedIndex;
16191
16132
  const groupType = entryGroupType(entry);
16192
16133
  const entryIcon = slashPaletteEntryIcon(entry);
16193
- const groupHeader = showGroupHeaders && firstEntryIndexByType.get(groupType) === index ? /* @__PURE__ */ jsx20(
16134
+ const groupHeader = showGroupHeaders && firstEntryIndexByType.get(groupType) === index ? /* @__PURE__ */ jsx21(
16194
16135
  "div",
16195
16136
  {
16196
16137
  "aria-hidden": "true",
@@ -16239,15 +16180,15 @@ function AgentSlashCommandPalette({
16239
16180
  onSelectSkill(entry.skill);
16240
16181
  },
16241
16182
  children: [
16242
- entryIcon ? /* @__PURE__ */ jsx20("span", { "aria-hidden": "true", className: paletteStyles.icon, children: entryIcon }) : null,
16183
+ entryIcon ? /* @__PURE__ */ jsx21("span", { "aria-hidden": "true", className: paletteStyles.icon, children: entryIcon }) : null,
16243
16184
  /* @__PURE__ */ jsxs9("span", { className: paletteStyles.copy, children: [
16244
16185
  /* @__PURE__ */ jsxs9("span", { className: paletteStyles.name, children: [
16245
- /* @__PURE__ */ jsx20("span", { className: paletteStyles.primaryName, children: entry.type === "command" ? entry.primaryLabel ?? entry.label : entry.label }),
16246
- entry.type === "command" && entry.secondaryLabel ? /* @__PURE__ */ jsx20("span", { className: paletteStyles.secondaryName, children: entry.secondaryLabel }) : null
16186
+ /* @__PURE__ */ jsx21("span", { className: paletteStyles.primaryName, children: entry.type === "command" ? entry.primaryLabel ?? entry.label : entry.label }),
16187
+ entry.type === "command" && entry.secondaryLabel ? /* @__PURE__ */ jsx21("span", { className: paletteStyles.secondaryName, children: entry.secondaryLabel }) : null
16247
16188
  ] }),
16248
- entry.description ? /* @__PURE__ */ jsx20("span", { className: paletteStyles.descriptionText, children: entry.description }) : null
16189
+ entry.description ? /* @__PURE__ */ jsx21("span", { className: paletteStyles.descriptionText, children: entry.description }) : null
16249
16190
  ] }),
16250
- entry.type === "capability" && entry.settingsLabel && onSelectCapabilitySettings ? /* @__PURE__ */ jsx20(
16191
+ entry.type === "capability" && entry.settingsLabel && onSelectCapabilitySettings ? /* @__PURE__ */ jsx21(
16251
16192
  "button",
16252
16193
  {
16253
16194
  "aria-label": entry.settingsAriaLabel ?? entry.settingsLabel,
@@ -16302,24 +16243,24 @@ function labelForEntryGroupType(groupType, labels) {
16302
16243
  var SLASH_PALETTE_ICON_CLASS = "size-3";
16303
16244
  function slashPaletteEntryIcon(entry) {
16304
16245
  if (entry.type === "capability") {
16305
- return entry.capability.capability === "computerUse" ? /* @__PURE__ */ jsx20(Monitor, { className: SLASH_PALETTE_ICON_CLASS }) : /* @__PURE__ */ jsx20(Globe, { className: SLASH_PALETTE_ICON_CLASS });
16246
+ return entry.capability.capability === "computerUse" ? /* @__PURE__ */ jsx21(Monitor, { className: SLASH_PALETTE_ICON_CLASS }) : /* @__PURE__ */ jsx21(Globe, { className: SLASH_PALETTE_ICON_CLASS });
16306
16247
  }
16307
16248
  if (entry.type !== "command") {
16308
16249
  return null;
16309
16250
  }
16310
16251
  switch (entry.command.name.trim().toLowerCase()) {
16311
16252
  case "compact":
16312
- return /* @__PURE__ */ jsx20(Minimize2, { className: SLASH_PALETTE_ICON_CLASS });
16253
+ return /* @__PURE__ */ jsx21(Minimize2, { className: SLASH_PALETTE_ICON_CLASS });
16313
16254
  case "fast":
16314
- return /* @__PURE__ */ jsx20(ZapIcon, { className: SLASH_PALETTE_ICON_CLASS });
16255
+ return /* @__PURE__ */ jsx21(ZapIcon, { className: SLASH_PALETTE_ICON_CLASS });
16315
16256
  case "goal":
16316
- return /* @__PURE__ */ jsx20(Target2, { className: SLASH_PALETTE_ICON_CLASS });
16257
+ return /* @__PURE__ */ jsx21(Target2, { className: SLASH_PALETTE_ICON_CLASS });
16317
16258
  case "plan":
16318
- return /* @__PURE__ */ jsx20(ListChecks, { className: SLASH_PALETTE_ICON_CLASS });
16259
+ return /* @__PURE__ */ jsx21(ListChecks, { className: SLASH_PALETTE_ICON_CLASS });
16319
16260
  case "review":
16320
- return /* @__PURE__ */ jsx20(Search, { className: SLASH_PALETTE_ICON_CLASS });
16261
+ return /* @__PURE__ */ jsx21(Search, { className: SLASH_PALETTE_ICON_CLASS });
16321
16262
  case "status":
16322
- return /* @__PURE__ */ jsx20(Info, { className: SLASH_PALETTE_ICON_CLASS });
16263
+ return /* @__PURE__ */ jsx21(Info, { className: SLASH_PALETTE_ICON_CLASS });
16323
16264
  default:
16324
16265
  return null;
16325
16266
  }
@@ -16470,7 +16411,7 @@ var styles3 = {
16470
16411
  var AgentGUINode_styles_default = styles3;
16471
16412
 
16472
16413
  // agent-gui/agentGuiNode/AgentQueuedPromptPanel.tsx
16473
- import { jsx as jsx21, jsxs as jsxs10 } from "react/jsx-runtime";
16414
+ import { jsx as jsx22, jsxs as jsxs10 } from "react/jsx-runtime";
16474
16415
  var EMPTY_WORKSPACE_APP_ICONS = [];
16475
16416
  function queuedPromptImages(queuedPrompt) {
16476
16417
  return agentPromptContentImageBlocks(
@@ -16597,9 +16538,9 @@ function AgentQueuedPromptPanel({
16597
16538
  onKeyDown: handleKeyDown,
16598
16539
  children: [
16599
16540
  /* @__PURE__ */ jsxs10("div", { className: AgentGUINode_styles_default.composerQueuedPromptHeader, children: [
16600
- /* @__PURE__ */ jsx21("span", { className: AgentGUINode_styles_default.composerQueuedPromptLabel, children: labels.queuedLabel }),
16601
- /* @__PURE__ */ jsx21("span", { className: AgentGUINode_styles_default.composerQueuedPromptCount, children: queuedPrompts.length }),
16602
- canExpand ? /* @__PURE__ */ jsx21(
16541
+ /* @__PURE__ */ jsx22("span", { className: AgentGUINode_styles_default.composerQueuedPromptLabel, children: labels.queuedLabel }),
16542
+ /* @__PURE__ */ jsx22("span", { className: AgentGUINode_styles_default.composerQueuedPromptCount, children: queuedPrompts.length }),
16543
+ canExpand ? /* @__PURE__ */ jsx22(
16603
16544
  ChevronRight,
16604
16545
  {
16605
16546
  "aria-hidden": "true",
@@ -16610,7 +16551,7 @@ function AgentQueuedPromptPanel({
16610
16551
  }
16611
16552
  ) : null
16612
16553
  ] }),
16613
- /* @__PURE__ */ jsx21(
16554
+ /* @__PURE__ */ jsx22(
16614
16555
  "div",
16615
16556
  {
16616
16557
  ref: queuedPromptListRef,
@@ -16629,8 +16570,8 @@ function AgentQueuedPromptPanel({
16629
16570
  "data-testid": `agent-gui-composer-queued-prompt-${queuedPrompt.id}`,
16630
16571
  "data-draining": isDraining ? "true" : "false",
16631
16572
  children: [
16632
- /* @__PURE__ */ jsx21("div", { className: AgentGUINode_styles_default.composerQueuedPromptMain, children: /* @__PURE__ */ jsxs10("div", { className: AgentGUINode_styles_default.composerQueuedPromptBody, title, children: [
16633
- displayText ? /* @__PURE__ */ jsx21(
16573
+ /* @__PURE__ */ jsx22("div", { className: AgentGUINode_styles_default.composerQueuedPromptMain, children: /* @__PURE__ */ jsxs10("div", { className: AgentGUINode_styles_default.composerQueuedPromptBody, title, children: [
16574
+ displayText ? /* @__PURE__ */ jsx22(
16634
16575
  "div",
16635
16576
  {
16636
16577
  ref: queuedPrompts.length === 1 ? singlePromptTextRef : void 0,
@@ -16640,7 +16581,7 @@ function AgentQueuedPromptPanel({
16640
16581
  event.stopPropagation();
16641
16582
  }
16642
16583
  },
16643
- children: /* @__PURE__ */ jsx21(
16584
+ children: /* @__PURE__ */ jsx22(
16644
16585
  AgentMessageMarkdown,
16645
16586
  {
16646
16587
  content: displayText,
@@ -16652,53 +16593,58 @@ function AgentQueuedPromptPanel({
16652
16593
  )
16653
16594
  }
16654
16595
  ) : null,
16655
- images.length > 0 ? /* @__PURE__ */ jsx21("div", { className: AgentGUINode_styles_default.composerQueuedPromptImages, children: images.slice(0, 3).map((image, index) => /* @__PURE__ */ jsx21(
16656
- "img",
16657
- {
16658
- alt: "",
16659
- className: AgentGUINode_styles_default.composerQueuedPromptImage,
16660
- src: `data:${image.mimeType};base64,${image.data}`
16661
- },
16662
- `${queuedPrompt.id}:image:${index}`
16663
- )) }) : null
16596
+ images.length > 0 ? /* @__PURE__ */ jsx22("div", { className: AgentGUINode_styles_default.composerQueuedPromptImages, children: images.slice(0, 3).map((image, index) => {
16597
+ const src = `data:${image.mimeType};base64,${image.data}`;
16598
+ return /* @__PURE__ */ jsx22(
16599
+ ZoomableImage,
16600
+ {
16601
+ alt: image.name?.trim() || "",
16602
+ className: AgentGUINode_styles_default.composerQueuedPromptImage,
16603
+ draggable: false,
16604
+ src,
16605
+ wrapElement: "span"
16606
+ },
16607
+ `${queuedPrompt.id}:image:${index}`
16608
+ );
16609
+ }) }) : null
16664
16610
  ] }) }),
16665
16611
  /* @__PURE__ */ jsxs10("div", { className: AgentGUINode_styles_default.composerQueuedPromptActions, children: [
16666
- /* @__PURE__ */ jsx21(
16612
+ /* @__PURE__ */ jsx22(
16667
16613
  CanvasNodeGhostIconButton,
16668
16614
  {
16669
16615
  "aria-label": labels.sendQueuedPromptNext,
16670
16616
  disabled: isDraining,
16671
16617
  onClick: () => onSendQueuedPromptNext(queuedPrompt.id),
16672
- children: /* @__PURE__ */ jsx21(CanvasNodeGuideLinedIcon, { "aria-hidden": "true" })
16618
+ children: /* @__PURE__ */ jsx22(CanvasNodeGuideLinedIcon, { "aria-hidden": "true" })
16673
16619
  }
16674
16620
  ),
16675
- /* @__PURE__ */ jsx21(
16621
+ /* @__PURE__ */ jsx22(
16676
16622
  CanvasNodeGhostIconButton,
16677
16623
  {
16678
16624
  "aria-label": labels.deleteQueuedPrompt,
16679
16625
  disabled: isDraining,
16680
16626
  onClick: () => onRemoveQueuedPrompt(queuedPrompt.id),
16681
- children: /* @__PURE__ */ jsx21(CanvasNodeTrashLinedIcon, { "aria-hidden": "true" })
16627
+ children: /* @__PURE__ */ jsx22(CanvasNodeTrashLinedIcon, { "aria-hidden": "true" })
16682
16628
  }
16683
16629
  ),
16684
16630
  /* @__PURE__ */ jsxs10(DropdownMenu, { children: [
16685
- /* @__PURE__ */ jsx21(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx21(
16631
+ /* @__PURE__ */ jsx22(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx22(
16686
16632
  CanvasNodeGhostIconButton,
16687
16633
  {
16688
16634
  "aria-label": labels.queuedPromptMoreActions,
16689
16635
  disabled: isDraining,
16690
16636
  stopsEventPropagation: false,
16691
16637
  onClick: (event) => event.stopPropagation(),
16692
- children: /* @__PURE__ */ jsx21(CanvasNodeMoreLinedIcon, { "aria-hidden": "true" })
16638
+ children: /* @__PURE__ */ jsx22(CanvasNodeMoreLinedIcon, { "aria-hidden": "true" })
16693
16639
  }
16694
16640
  ) }),
16695
- /* @__PURE__ */ jsx21(
16641
+ /* @__PURE__ */ jsx22(
16696
16642
  DropdownMenuContent,
16697
16643
  {
16698
16644
  align: "end",
16699
16645
  className: AgentGUINode_styles_default.composerMenuContent,
16700
16646
  sideOffset: 8,
16701
- children: /* @__PURE__ */ jsx21(
16647
+ children: /* @__PURE__ */ jsx22(
16702
16648
  DropdownMenuItem,
16703
16649
  {
16704
16650
  className: AgentGUINode_styles_default.composerMenuItem,
@@ -16712,7 +16658,7 @@ function AgentQueuedPromptPanel({
16712
16658
  onSelect: () => {
16713
16659
  handleEditQueuedPromptSelect(queuedPrompt.id);
16714
16660
  },
16715
- children: /* @__PURE__ */ jsx21("span", { children: labels.editQueuedPrompt })
16661
+ children: /* @__PURE__ */ jsx22("span", { children: labels.editQueuedPrompt })
16716
16662
  }
16717
16663
  )
16718
16664
  }
@@ -17096,7 +17042,7 @@ function optionsWithSelectedValue(options, selectedValue) {
17096
17042
  }
17097
17043
 
17098
17044
  // agent-gui/agentGuiNode/AgentComposerSettingsMenus.tsx
17099
- import { Fragment as Fragment4, jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
17045
+ import { Fragment as Fragment4, jsx as jsx23, jsxs as jsxs11 } from "react/jsx-runtime";
17100
17046
  function basenameProjectPath(path) {
17101
17047
  const normalized = path.trim().replaceAll("\\", "/").replace(/\/+$/, "");
17102
17048
  return normalized.split("/").filter(Boolean).at(-1) ?? path;
@@ -17148,7 +17094,7 @@ function AgentProjectDropdown({
17148
17094
  className: "workspace-user-project-trigger-label",
17149
17095
  "data-workspace-user-project-trigger-label": "true",
17150
17096
  children: [
17151
- selectedPath ? /* @__PURE__ */ jsx22(FolderIcon, { "aria-hidden": true, className: "shrink-0", size: 15 }) : /* @__PURE__ */ jsx22(
17097
+ selectedPath ? /* @__PURE__ */ jsx23(FolderIcon, { "aria-hidden": true, className: "shrink-0", size: 15 }) : /* @__PURE__ */ jsx23(
17152
17098
  NoWorkspaceLinedIcon,
17153
17099
  {
17154
17100
  "aria-hidden": true,
@@ -17157,16 +17103,16 @@ function AgentProjectDropdown({
17157
17103
  size: 15
17158
17104
  }
17159
17105
  ),
17160
- /* @__PURE__ */ jsx22("span", { className: "min-w-0 truncate", children: triggerLabel })
17106
+ /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate", children: triggerLabel })
17161
17107
  ]
17162
17108
  }
17163
17109
  ),
17164
- /* @__PURE__ */ jsx22(ChevronDown2, { "aria-hidden": "true", className: "shrink-0", size: 16 })
17110
+ /* @__PURE__ */ jsx23(ChevronDown2, { "aria-hidden": "true", className: "shrink-0", size: 16 })
17165
17111
  ]
17166
17112
  }
17167
17113
  );
17168
17114
  }
17169
- return /* @__PURE__ */ jsx22(
17115
+ return /* @__PURE__ */ jsx23(
17170
17116
  WorkspaceUserProjectSelect,
17171
17117
  {
17172
17118
  api: userProjectApi,
@@ -17186,7 +17132,7 @@ function AgentProjectDropdown({
17186
17132
  i18n,
17187
17133
  labels,
17188
17134
  projectLocked: Boolean(composerSettings.projectLocked),
17189
- renderAddProjectIcon: () => /* @__PURE__ */ jsx22(
17135
+ renderAddProjectIcon: () => /* @__PURE__ */ jsx23(
17190
17136
  NewWorkspaceLinedIcon,
17191
17137
  {
17192
17138
  "aria-hidden": true,
@@ -17250,15 +17196,15 @@ function AgentPermissionModeDropdown({
17250
17196
  "aria-label": labels.permissionLabel,
17251
17197
  "data-permission-tone": triggerTone,
17252
17198
  children: [
17253
- /* @__PURE__ */ jsx22("span", { className: "flex min-w-0 flex-1 items-center", children: /* @__PURE__ */ jsx22("span", { className: "truncate", children: triggerLabel }) }),
17254
- /* @__PURE__ */ jsx22(ChevronDown2, { "aria-hidden": "true", className: "shrink-0", size: 16 })
17199
+ /* @__PURE__ */ jsx23("span", { className: "flex min-w-0 flex-1 items-center", children: /* @__PURE__ */ jsx23("span", { className: "truncate", children: triggerLabel }) }),
17200
+ /* @__PURE__ */ jsx23(ChevronDown2, { "aria-hidden": "true", className: "shrink-0", size: 16 })
17255
17201
  ]
17256
17202
  }
17257
17203
  );
17258
17204
  if (previewMode) {
17259
17205
  return trigger;
17260
17206
  }
17261
- const selectTrigger = /* @__PURE__ */ jsx22(
17207
+ const selectTrigger = /* @__PURE__ */ jsx23(
17262
17208
  SelectTrigger,
17263
17209
  {
17264
17210
  className: cn2(
@@ -17269,7 +17215,7 @@ function AgentPermissionModeDropdown({
17269
17215
  ),
17270
17216
  "aria-label": labels.permissionLabel,
17271
17217
  "data-permission-tone": triggerTone,
17272
- children: /* @__PURE__ */ jsx22("span", { className: "flex min-w-0 flex-1 items-center", children: /* @__PURE__ */ jsx22("span", { className: "truncate", children: triggerLabel }) })
17218
+ children: /* @__PURE__ */ jsx23("span", { className: "flex min-w-0 flex-1 items-center", children: /* @__PURE__ */ jsx23("span", { className: "truncate", children: triggerLabel }) })
17273
17219
  }
17274
17220
  );
17275
17221
  return /* @__PURE__ */ jsxs11(
@@ -17286,11 +17232,11 @@ function AgentPermissionModeDropdown({
17286
17232
  // it. Target the tooltip at a focusable wrapper span (Radix's pattern
17287
17233
  // for disabled triggers) so hover/focus reliably surfaces the hint.
17288
17234
  /* @__PURE__ */ jsxs11(Tooltip2, { children: [
17289
- /* @__PURE__ */ jsx22(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ jsx22("span", { className: "inline-flex", tabIndex: 0, children: selectTrigger }) }),
17290
- /* @__PURE__ */ jsx22(TooltipContent2, { side: "top", children: labels.loadingOptions })
17235
+ /* @__PURE__ */ jsx23(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ jsx23("span", { className: "inline-flex", tabIndex: 0, children: selectTrigger }) }),
17236
+ /* @__PURE__ */ jsx23(TooltipContent2, { side: "top", children: labels.loadingOptions })
17291
17237
  ] })
17292
17238
  ) : selectTrigger,
17293
- isSelectOpen ? /* @__PURE__ */ jsx22(
17239
+ isSelectOpen ? /* @__PURE__ */ jsx23(
17294
17240
  SelectContent,
17295
17241
  {
17296
17242
  align: "end",
@@ -17301,7 +17247,7 @@ function AgentPermissionModeDropdown({
17301
17247
  AgentGUINode_styles_default.composerMenuContent,
17302
17248
  "w-max min-w-[220px] max-w-[calc(100vw-32px)] data-[side=top]:!translate-y-0"
17303
17249
  ),
17304
- children: permissionOptions.map((option) => /* @__PURE__ */ jsx22(
17250
+ children: permissionOptions.map((option) => /* @__PURE__ */ jsx23(
17305
17251
  SelectItem,
17306
17252
  {
17307
17253
  value: option.value,
@@ -17309,8 +17255,8 @@ function AgentPermissionModeDropdown({
17309
17255
  className: cn2(AgentGUINode_styles_default.composerMenuItem, "group/composer-option"),
17310
17256
  onPointerDown: (event) => handleSelectedItemPointerDown(event, option.value),
17311
17257
  children: /* @__PURE__ */ jsxs11("span", { className: "flex min-w-0 items-center gap-1.5", children: [
17312
- /* @__PURE__ */ jsx22("span", { className: "min-w-0 truncate", children: option.label }),
17313
- option.description ? /* @__PURE__ */ jsx22(
17258
+ /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate", children: option.label }),
17259
+ option.description ? /* @__PURE__ */ jsx23(
17314
17260
  ComposerOptionInfoTooltip,
17315
17261
  {
17316
17262
  description: option.description,
@@ -17391,22 +17337,22 @@ function ComposerOptionInfoTooltip({
17391
17337
  event.preventDefault();
17392
17338
  event.stopPropagation();
17393
17339
  };
17394
- const trigger = /* @__PURE__ */ jsx22(
17340
+ const trigger = /* @__PURE__ */ jsx23(
17395
17341
  "span",
17396
17342
  {
17397
17343
  className: "pointer-events-none inline-flex shrink-0 cursor-help text-[var(--agent-gui-text-tertiary)] opacity-0 transition-opacity group-hover/composer-option:pointer-events-auto group-hover/composer-option:opacity-100 group-data-[highlighted]/composer-option:pointer-events-auto group-data-[highlighted]/composer-option:opacity-100",
17398
17344
  "data-agent-composer-option-info-trigger": "true",
17399
17345
  onClick: stopSelect,
17400
17346
  onPointerDown: stopSelect,
17401
- children: /* @__PURE__ */ jsx22(RoomsHintIcon, { "aria-hidden": true, className: "size-3" })
17347
+ children: /* @__PURE__ */ jsx23(RoomsHintIcon, { "aria-hidden": true, className: "size-3" })
17402
17348
  }
17403
17349
  );
17404
17350
  if (!tooltipsEnabled) {
17405
17351
  return trigger;
17406
17352
  }
17407
17353
  return /* @__PURE__ */ jsxs11(Tooltip2, { children: [
17408
- /* @__PURE__ */ jsx22(TooltipTrigger2, { asChild: true, children: trigger }),
17409
- /* @__PURE__ */ jsx22(TooltipContent2, { side: "right", className: "max-w-[240px] whitespace-normal", children: description })
17354
+ /* @__PURE__ */ jsx23(TooltipTrigger2, { asChild: true, children: trigger }),
17355
+ /* @__PURE__ */ jsx23(TooltipContent2, { side: "right", className: "max-w-[240px] whitespace-normal", children: description })
17410
17356
  ] });
17411
17357
  }
17412
17358
  function resolvePermissionModeTriggerTone(value) {
@@ -17461,7 +17407,7 @@ function AgentModelReasoningDropdown({
17461
17407
  "data-agent-model-reasoning-trigger": "true",
17462
17408
  children: [
17463
17409
  /* @__PURE__ */ jsxs11("span", { className: "flex min-w-0 flex-1 items-center gap-2 overflow-hidden", children: [
17464
- menu.speed.show && menu.trigger.isFast ? /* @__PURE__ */ jsx22(
17410
+ menu.speed.show && menu.trigger.isFast ? /* @__PURE__ */ jsx23(
17465
17411
  ZapIcon2,
17466
17412
  {
17467
17413
  "aria-hidden": true,
@@ -17470,12 +17416,12 @@ function AgentModelReasoningDropdown({
17470
17416
  strokeWidth: 2.5
17471
17417
  }
17472
17418
  ) : null,
17473
- menu.trigger.showCombined ? /* @__PURE__ */ jsx22("span", { className: "min-w-0 truncate", children: menu.trigger.combinedLabel }) : /* @__PURE__ */ jsxs11(Fragment4, { children: [
17474
- /* @__PURE__ */ jsx22("span", { className: "min-w-0 truncate", children: menu.trigger.modelLabel }),
17475
- /* @__PURE__ */ jsx22("span", { className: "shrink-0", children: menu.trigger.reasoningLabel })
17419
+ menu.trigger.showCombined ? /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate", children: menu.trigger.combinedLabel }) : /* @__PURE__ */ jsxs11(Fragment4, { children: [
17420
+ /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate", children: menu.trigger.modelLabel }),
17421
+ /* @__PURE__ */ jsx23("span", { className: "shrink-0", children: menu.trigger.reasoningLabel })
17476
17422
  ] })
17477
17423
  ] }),
17478
- /* @__PURE__ */ jsx22(ChevronDown2, { "aria-hidden": "true", className: "shrink-0", size: 16 })
17424
+ /* @__PURE__ */ jsx23(ChevronDown2, { "aria-hidden": "true", className: "shrink-0", size: 16 })
17479
17425
  ]
17480
17426
  }
17481
17427
  );
@@ -17488,10 +17434,10 @@ function AgentModelReasoningDropdown({
17488
17434
  // it. Target the tooltip at a focusable wrapper span (Radix's pattern
17489
17435
  // for disabled triggers) so hover/focus reliably surfaces the hint.
17490
17436
  /* @__PURE__ */ jsxs11(Tooltip2, { children: [
17491
- /* @__PURE__ */ jsx22(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ jsx22("span", { className: "inline-flex", tabIndex: 0, children: /* @__PURE__ */ jsx22(DropdownMenuTrigger2, { asChild: true, disabled: menuDisabled, children: trigger }) }) }),
17492
- /* @__PURE__ */ jsx22(TooltipContent2, { side: "top", children: labels.loadingOptions })
17437
+ /* @__PURE__ */ jsx23(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ jsx23("span", { className: "inline-flex", tabIndex: 0, children: /* @__PURE__ */ jsx23(DropdownMenuTrigger2, { asChild: true, disabled: menuDisabled, children: trigger }) }) }),
17438
+ /* @__PURE__ */ jsx23(TooltipContent2, { side: "top", children: labels.loadingOptions })
17493
17439
  ] })
17494
- ) : /* @__PURE__ */ jsx22(DropdownMenuTrigger2, { asChild: true, disabled: menuDisabled, children: trigger }),
17440
+ ) : /* @__PURE__ */ jsx23(DropdownMenuTrigger2, { asChild: true, disabled: menuDisabled, children: trigger }),
17495
17441
  /* @__PURE__ */ jsxs11(
17496
17442
  DropdownMenuContent2,
17497
17443
  {
@@ -17506,8 +17452,8 @@ function AgentModelReasoningDropdown({
17506
17452
  "data-agent-composer-settings-layout": "model-primary",
17507
17453
  children: [
17508
17454
  menu.model.show ? /* @__PURE__ */ jsxs11(Fragment4, { children: [
17509
- /* @__PURE__ */ jsx22(DropdownMenuLabel2, { children: labels.modelSelectionLabel }),
17510
- /* @__PURE__ */ jsx22(
17455
+ /* @__PURE__ */ jsx23(DropdownMenuLabel2, { children: labels.modelSelectionLabel }),
17456
+ /* @__PURE__ */ jsx23(
17511
17457
  ComposerMenuOptionItems,
17512
17458
  {
17513
17459
  options: menu.model.options,
@@ -17518,7 +17464,7 @@ function AgentModelReasoningDropdown({
17518
17464
  }
17519
17465
  )
17520
17466
  ] }) : null,
17521
- menu.model.show && (menu.reasoning.show || menu.speed.show) ? /* @__PURE__ */ jsx22(DropdownMenuSeparator2, {}) : null,
17467
+ menu.model.show && (menu.reasoning.show || menu.speed.show) ? /* @__PURE__ */ jsx23(DropdownMenuSeparator2, {}) : null,
17522
17468
  menu.reasoning.show ? /* @__PURE__ */ jsxs11(DropdownMenuSub2, { children: [
17523
17469
  /* @__PURE__ */ jsxs11(
17524
17470
  DropdownMenuSubTrigger2,
@@ -17526,17 +17472,17 @@ function AgentModelReasoningDropdown({
17526
17472
  className: cn2(AgentGUINode_styles_default.composerMenuItem, "[&>svg]:!ml-0.5"),
17527
17473
  "data-agent-reasoning-submenu-trigger": "true",
17528
17474
  children: [
17529
- /* @__PURE__ */ jsx22("span", { className: "min-w-0 flex-1 truncate", children: labels.reasoningLabel }),
17530
- /* @__PURE__ */ jsx22("span", { className: "text-[var(--text-tertiary)]", children: menu.reasoning.selectedLabel })
17475
+ /* @__PURE__ */ jsx23("span", { className: "min-w-0 flex-1 truncate", children: labels.reasoningLabel }),
17476
+ /* @__PURE__ */ jsx23("span", { className: "text-[var(--text-tertiary)]", children: menu.reasoning.selectedLabel })
17531
17477
  ]
17532
17478
  }
17533
17479
  ),
17534
- /* @__PURE__ */ jsx22(
17480
+ /* @__PURE__ */ jsx23(
17535
17481
  DropdownMenuSubContent2,
17536
17482
  {
17537
17483
  className: cn2(AgentGUINode_styles_default.composerMenuContent, "min-w-[132px]"),
17538
17484
  "data-agent-composer-settings-layout": "model-submenu",
17539
- children: /* @__PURE__ */ jsx22(
17485
+ children: /* @__PURE__ */ jsx23(
17540
17486
  ComposerMenuOptionItems,
17541
17487
  {
17542
17488
  options: menu.reasoning.options,
@@ -17555,17 +17501,17 @@ function AgentModelReasoningDropdown({
17555
17501
  className: cn2(AgentGUINode_styles_default.composerMenuItem, "[&>svg]:!ml-0.5"),
17556
17502
  "data-agent-speed-submenu-trigger": "true",
17557
17503
  children: [
17558
- /* @__PURE__ */ jsx22("span", { className: "min-w-0 flex-1 truncate", children: labels.speedLabel }),
17559
- /* @__PURE__ */ jsx22("span", { className: "text-[var(--text-tertiary)]", children: menu.speed.selectedLabel })
17504
+ /* @__PURE__ */ jsx23("span", { className: "min-w-0 flex-1 truncate", children: labels.speedLabel }),
17505
+ /* @__PURE__ */ jsx23("span", { className: "text-[var(--text-tertiary)]", children: menu.speed.selectedLabel })
17560
17506
  ]
17561
17507
  }
17562
17508
  ),
17563
- /* @__PURE__ */ jsx22(
17509
+ /* @__PURE__ */ jsx23(
17564
17510
  DropdownMenuSubContent2,
17565
17511
  {
17566
17512
  className: cn2(AgentGUINode_styles_default.composerMenuContent, "w-[200px]"),
17567
17513
  "data-agent-composer-settings-layout": "model-submenu",
17568
- children: /* @__PURE__ */ jsx22(
17514
+ children: /* @__PURE__ */ jsx23(
17569
17515
  ComposerMenuOptionItems,
17570
17516
  {
17571
17517
  options: menu.speed.options,
@@ -17590,7 +17536,7 @@ function ComposerMenuOptionItems({
17590
17536
  tooltipsEnabled = true,
17591
17537
  onSelect
17592
17538
  }) {
17593
- return /* @__PURE__ */ jsx22(Fragment4, { children: options.map((option) => {
17539
+ return /* @__PURE__ */ jsx23(Fragment4, { children: options.map((option) => {
17594
17540
  const hasDescription = Boolean(option.description);
17595
17541
  const showInlineDescription = descriptionPresentation === "inline" && hasDescription;
17596
17542
  const showModelTooltip = descriptionPresentation === "model-tooltip";
@@ -17616,8 +17562,8 @@ function ComposerMenuOptionItems({
17616
17562
  },
17617
17563
  children: [
17618
17564
  showModelTooltip ? /* @__PURE__ */ jsxs11("span", { className: "flex min-w-0 flex-1 items-baseline gap-2 overflow-hidden", children: [
17619
- /* @__PURE__ */ jsx22("span", { className: "min-w-0 truncate leading-[1.15]", children: option.label }),
17620
- option.summary && option.summary.length > 0 ? /* @__PURE__ */ jsx22("span", { className: "flex min-w-0 shrink-0 items-baseline gap-1.5 overflow-hidden text-[var(--agent-gui-text-tertiary)]", children: option.summary.map((summary) => /* @__PURE__ */ jsx22(
17565
+ /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate leading-[1.15]", children: option.label }),
17566
+ option.summary && option.summary.length > 0 ? /* @__PURE__ */ jsx23("span", { className: "flex min-w-0 shrink-0 items-baseline gap-1.5 overflow-hidden text-[var(--agent-gui-text-tertiary)]", children: option.summary.map((summary) => /* @__PURE__ */ jsx23(
17621
17567
  "span",
17622
17568
  {
17623
17569
  className: "max-w-[64px] truncate leading-[1.15]",
@@ -17634,8 +17580,8 @@ function ComposerMenuOptionItems({
17634
17580
  ),
17635
17581
  children: [
17636
17582
  /* @__PURE__ */ jsxs11("span", { className: "flex min-w-0 items-center gap-1.5", children: [
17637
- /* @__PURE__ */ jsx22("span", { className: "min-w-0 truncate leading-[1.15]", children: option.label }),
17638
- showTooltipDescription && option.description ? /* @__PURE__ */ jsx22(
17583
+ /* @__PURE__ */ jsx23("span", { className: "min-w-0 truncate leading-[1.15]", children: option.label }),
17584
+ showTooltipDescription && option.description ? /* @__PURE__ */ jsx23(
17639
17585
  ComposerOptionInfoTooltip,
17640
17586
  {
17641
17587
  description: option.description,
@@ -17643,11 +17589,11 @@ function ComposerMenuOptionItems({
17643
17589
  }
17644
17590
  ) : null
17645
17591
  ] }),
17646
- showInlineDescription && option.description ? /* @__PURE__ */ jsx22("span", { className: "whitespace-normal text-[11px] leading-[1.2] text-[var(--text-tertiary)]", children: option.description }) : null
17592
+ showInlineDescription && option.description ? /* @__PURE__ */ jsx23("span", { className: "whitespace-normal text-[11px] leading-[1.2] text-[var(--text-tertiary)]", children: option.description }) : null
17647
17593
  ]
17648
17594
  }
17649
17595
  ),
17650
- /* @__PURE__ */ jsx22(
17596
+ /* @__PURE__ */ jsx23(
17651
17597
  CheckIcon,
17652
17598
  {
17653
17599
  "aria-hidden": true,
@@ -17661,7 +17607,7 @@ function ComposerMenuOptionItems({
17661
17607
  },
17662
17608
  option.value
17663
17609
  );
17664
- return showModelTooltip ? /* @__PURE__ */ jsx22(
17610
+ return showModelTooltip ? /* @__PURE__ */ jsx23(
17665
17611
  ComposerModelOptionTooltip,
17666
17612
  {
17667
17613
  option,
@@ -17681,7 +17627,7 @@ function ComposerModelOptionTooltip({
17681
17627
  return children;
17682
17628
  }
17683
17629
  return /* @__PURE__ */ jsxs11(Tooltip2, { children: [
17684
- /* @__PURE__ */ jsx22(TooltipTrigger2, { asChild: true, children: cloneElement(children, {
17630
+ /* @__PURE__ */ jsx23(TooltipTrigger2, { asChild: true, children: cloneElement(children, {
17685
17631
  "data-agent-model-option-tooltip-trigger": "true"
17686
17632
  }) }),
17687
17633
  /* @__PURE__ */ jsxs11(
@@ -17693,10 +17639,10 @@ function ComposerModelOptionTooltip({
17693
17639
  className: "flex w-[320px] max-w-[calc(100vw-32px)] flex-col items-start gap-0 whitespace-normal rounded-lg border border-[var(--line-2)] bg-[var(--background-fronted)] px-4 py-3 text-[13px] leading-[1.3] text-[var(--text-primary)] shadow-lg",
17694
17640
  "data-agent-model-option-tooltip": "true",
17695
17641
  children: [
17696
- /* @__PURE__ */ jsx22("span", { className: "block text-[15px] font-semibold leading-[1.2]", children: option.tooltip.title }),
17697
- option.tooltip.description ? /* @__PURE__ */ jsx22("span", { className: "mt-1.5 block text-[13px] leading-[1.35]", children: option.tooltip.description }) : null,
17698
- option.tooltip.contextWindow ? /* @__PURE__ */ jsx22("span", { className: "mt-4 block", children: option.tooltip.contextWindow }) : null,
17699
- option.tooltip.version ? /* @__PURE__ */ jsx22("span", { className: "mt-4 block italic", children: option.tooltip.version }) : null
17642
+ /* @__PURE__ */ jsx23("span", { className: "block text-[15px] font-semibold leading-[1.2]", children: option.tooltip.title }),
17643
+ option.tooltip.description ? /* @__PURE__ */ jsx23("span", { className: "mt-1.5 block text-[13px] leading-[1.35]", children: option.tooltip.description }) : null,
17644
+ option.tooltip.contextWindow ? /* @__PURE__ */ jsx23("span", { className: "mt-4 block", children: option.tooltip.contextWindow }) : null,
17645
+ option.tooltip.version ? /* @__PURE__ */ jsx23("span", { className: "mt-4 block italic", children: option.tooltip.version }) : null
17700
17646
  ]
17701
17647
  }
17702
17648
  )
@@ -17887,11 +17833,49 @@ function imageFilesFromDataTransfer(dataTransfer) {
17887
17833
  files.push(file);
17888
17834
  }
17889
17835
  }
17836
+ if (files.length === 0) {
17837
+ return Array.from(dataTransfer.files ?? []).filter(
17838
+ (file) => supportedPromptImageMimeType(file.type)
17839
+ );
17840
+ }
17841
+ return files;
17842
+ }
17843
+ function nonImageFilesFromDataTransfer(dataTransfer) {
17844
+ if (!dataTransfer) {
17845
+ return [];
17846
+ }
17847
+ const files = [];
17848
+ const items = dataTransfer.items;
17849
+ if (!items) {
17850
+ return Array.from(dataTransfer.files ?? []).filter(
17851
+ (file) => !supportedPromptImageMimeType(file.type) && !supportedPromptImageFileName(file.name)
17852
+ );
17853
+ }
17854
+ for (const item of Array.from(items)) {
17855
+ if (item.kind !== "file" || supportedPromptImageMimeType(item.type)) {
17856
+ continue;
17857
+ }
17858
+ const file = item.getAsFile();
17859
+ if (file && supportedPromptImageFileName(file.name)) {
17860
+ continue;
17861
+ }
17862
+ if (file) {
17863
+ files.push(file);
17864
+ }
17865
+ }
17866
+ if (files.length === 0) {
17867
+ return Array.from(dataTransfer.files ?? []).filter(
17868
+ (file) => !supportedPromptImageMimeType(file.type) && !supportedPromptImageFileName(file.name)
17869
+ );
17870
+ }
17890
17871
  return files;
17891
17872
  }
17892
17873
  function supportedPromptImageMimeType(value) {
17893
17874
  return value === "image/png" || value === "image/jpeg" || value === "image/webp";
17894
17875
  }
17876
+ function supportedPromptImageFileName(value) {
17877
+ return /\.(png|jpe?g|webp)$/i.test(value.trim());
17878
+ }
17895
17879
  async function readAgentRichTextPromptImages(files) {
17896
17880
  const images = await Promise.all(
17897
17881
  files.map(async (file) => {
@@ -17923,7 +17907,7 @@ function fileToBase64(file) {
17923
17907
  }
17924
17908
 
17925
17909
  // agent-gui/agentGuiNode/agentRichText/AgentRichTextEditor.tsx
17926
- import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
17910
+ import { jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
17927
17911
  function buildWorkspaceFileMentionDropContent(entries, options = {}) {
17928
17912
  return entries.flatMap((entry, index) => [
17929
17913
  ...index === 0 && options.prefixCaretAnchor ? [
@@ -18195,7 +18179,8 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
18195
18179
  onLinkClick,
18196
18180
  promptImagesSupported = true,
18197
18181
  onPromptImagesUnsupported,
18198
- onPasteImages
18182
+ onPasteImages,
18183
+ getReferenceForFile
18199
18184
  }, ref) {
18200
18185
  "use memo";
18201
18186
  const { t } = useTranslation();
@@ -18215,6 +18200,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
18215
18200
  const onPromptImagesUnsupportedRef = useRef9(onPromptImagesUnsupported);
18216
18201
  const onPasteImagesRef = useRef9(onPasteImages);
18217
18202
  const promptImagesSupportedRef = useRef9(promptImagesSupported);
18203
+ const getReferenceForFileRef = useRef9(getReferenceForFile);
18218
18204
  const placeholderRef = useRef9(placeholder);
18219
18205
  const removeMentionLabelRef = useRef9(removeMentionLabel);
18220
18206
  const availableSkillsRef = useRef9(availableSkills);
@@ -18322,6 +18308,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
18322
18308
  onPromptImagesUnsupportedRef.current = onPromptImagesUnsupported;
18323
18309
  onPasteImagesRef.current = onPasteImages;
18324
18310
  promptImagesSupportedRef.current = promptImagesSupported;
18311
+ getReferenceForFileRef.current = getReferenceForFile;
18325
18312
  placeholderRef.current = placeholder;
18326
18313
  removeMentionLabelRef.current = removeMentionLabel;
18327
18314
  availableSkillsRef.current = availableSkills;
@@ -18432,6 +18419,44 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
18432
18419
  });
18433
18420
  return true;
18434
18421
  }
18422
+ const getReferenceForFileFn = getReferenceForFileRef.current;
18423
+ if (getReferenceForFileFn) {
18424
+ const nonImageFiles = nonImageFilesFromDataTransfer(
18425
+ event.clipboardData
18426
+ );
18427
+ if (nonImageFiles.length > 0) {
18428
+ const references = nonImageFiles.map((file) => {
18429
+ try {
18430
+ return getReferenceForFileFn(file);
18431
+ } catch {
18432
+ return null;
18433
+ }
18434
+ }).filter(
18435
+ (reference) => Boolean(reference?.path)
18436
+ );
18437
+ if (references.length > 0) {
18438
+ event.preventDefault();
18439
+ const currentEditor2 = editorRef.current;
18440
+ if (!currentEditor2) {
18441
+ return true;
18442
+ }
18443
+ if (!currentEditor2.isFocused) {
18444
+ currentEditor2.commands.setTextSelection(
18445
+ currentEditor2.state.doc.content.size
18446
+ );
18447
+ }
18448
+ currentEditor2.commands.insertContent(
18449
+ createAgentFileMentionContent(references, {
18450
+ prefixCaretAnchor: isPromptVisualLineStart(
18451
+ currentEditor2,
18452
+ currentEditor2.state.selection.from
18453
+ )
18454
+ })
18455
+ );
18456
+ return true;
18457
+ }
18458
+ }
18459
+ }
18435
18460
  const html = event.clipboardData?.getData("text/html") ?? "";
18436
18461
  if (html.includes("data-agent-file-mention")) {
18437
18462
  return false;
@@ -18758,7 +18783,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
18758
18783
  lastEmittedPromptRef.current = value;
18759
18784
  }, [availableCapabilities, availableSkills, editor, value]);
18760
18785
  return /* @__PURE__ */ jsxs12("div", { className: "relative min-w-0", onKeyDownCapture: handleKeyDownCapture, children: [
18761
- editor ? /* @__PURE__ */ jsx23(EditorContent, { editor }) : /* @__PURE__ */ jsx23(
18786
+ editor ? /* @__PURE__ */ jsx24(EditorContent, { editor }) : /* @__PURE__ */ jsx24(
18762
18787
  "div",
18763
18788
  {
18764
18789
  role: "textbox",
@@ -18786,7 +18811,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
18786
18811
  onContextMenu: (event) => event.preventDefault(),
18787
18812
  onPointerDown: (event) => event.stopPropagation(),
18788
18813
  children: [
18789
- /* @__PURE__ */ jsx23(
18814
+ /* @__PURE__ */ jsx24(
18790
18815
  AgentRichTextContextMenuButton,
18791
18816
  {
18792
18817
  disabled: !contextMenu.canEdit || !contextMenu.hasSelection,
@@ -18794,7 +18819,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
18794
18819
  onSelect: cutSelection
18795
18820
  }
18796
18821
  ),
18797
- /* @__PURE__ */ jsx23(
18822
+ /* @__PURE__ */ jsx24(
18798
18823
  AgentRichTextContextMenuButton,
18799
18824
  {
18800
18825
  disabled: !contextMenu.hasSelection,
@@ -18802,7 +18827,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
18802
18827
  onSelect: copySelection
18803
18828
  }
18804
18829
  ),
18805
- /* @__PURE__ */ jsx23(
18830
+ /* @__PURE__ */ jsx24(
18806
18831
  AgentRichTextContextMenuButton,
18807
18832
  {
18808
18833
  disabled: !contextMenu.canEdit,
@@ -18832,7 +18857,7 @@ function AgentRichTextContextMenuButton({
18832
18857
  selectionStartedRef.current = false;
18833
18858
  });
18834
18859
  }, [disabled, onSelect]);
18835
- return /* @__PURE__ */ jsx23(
18860
+ return /* @__PURE__ */ jsx24(
18836
18861
  "button",
18837
18862
  {
18838
18863
  role: "menuitem",
@@ -18857,7 +18882,7 @@ function AgentRichTextContextMenuButton({
18857
18882
 
18858
18883
  // agent-gui/agentGuiNode/AgentSlashStatusPanel.tsx
18859
18884
  import { Fragment as Fragment5 } from "react";
18860
- import { Fragment as Fragment6, jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
18885
+ import { Fragment as Fragment6, jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
18861
18886
  function formatSlashStatusTokenCount(value) {
18862
18887
  if (typeof value !== "number" || !Number.isFinite(value)) {
18863
18888
  return "";
@@ -18899,8 +18924,8 @@ function AgentSlashStatusPanel({
18899
18924
  role: "status",
18900
18925
  children: [
18901
18926
  /* @__PURE__ */ jsxs13("div", { className: "mb-2 flex items-center justify-between gap-2", children: [
18902
- /* @__PURE__ */ jsx24("h3", { className: "truncate text-[11px] font-semibold leading-4", children: labels.slashStatusTitle }),
18903
- /* @__PURE__ */ jsx24(
18927
+ /* @__PURE__ */ jsx25("h3", { className: "truncate text-[11px] font-semibold leading-4", children: labels.slashStatusTitle }),
18928
+ /* @__PURE__ */ jsx25(
18904
18929
  "button",
18905
18930
  {
18906
18931
  className: "nodrag shrink-0 rounded-[5px] px-1.5 py-0.5 text-[11px] leading-4 text-muted-foreground transition-colors hover:bg-background-hover hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [-webkit-app-region:no-drag]",
@@ -18916,32 +18941,32 @@ function AgentSlashStatusPanel({
18916
18941
  labels.slashStatusSession,
18917
18942
  ":"
18918
18943
  ] }),
18919
- /* @__PURE__ */ jsx24("dd", { className: "min-w-0 truncate", children: agentSessionId }),
18944
+ /* @__PURE__ */ jsx25("dd", { className: "min-w-0 truncate", children: agentSessionId }),
18920
18945
  baseUrl ? /* @__PURE__ */ jsxs13(Fragment6, { children: [
18921
18946
  /* @__PURE__ */ jsxs13("dt", { className: "text-muted-foreground", children: [
18922
18947
  labels.slashStatusBaseUrl,
18923
18948
  ":"
18924
18949
  ] }),
18925
- /* @__PURE__ */ jsx24("dd", { className: "min-w-0 truncate", children: baseUrl })
18950
+ /* @__PURE__ */ jsx25("dd", { className: "min-w-0 truncate", children: baseUrl })
18926
18951
  ] }) : null,
18927
18952
  /* @__PURE__ */ jsxs13("dt", { className: "text-muted-foreground", children: [
18928
18953
  labels.slashStatusContext,
18929
18954
  ":"
18930
18955
  ] }),
18931
- /* @__PURE__ */ jsx24("dd", { className: "min-w-0", children: slashStatusContextText(status, labels) })
18956
+ /* @__PURE__ */ jsx25("dd", { className: "min-w-0", children: slashStatusContextText(status, labels) })
18932
18957
  ] }) : null,
18933
18958
  limits.map((limit) => /* @__PURE__ */ jsxs13(Fragment5, { children: [
18934
18959
  /* @__PURE__ */ jsxs13("dt", { className: "text-muted-foreground", children: [
18935
18960
  limit.label,
18936
18961
  ":"
18937
18962
  ] }),
18938
- /* @__PURE__ */ jsx24("dd", { className: "min-w-0", children: /* @__PURE__ */ jsxs13("span", { className: "agent-gui-node__slash-status-limit", children: [
18939
- typeof limit.percentRemaining === "number" && Number.isFinite(limit.percentRemaining) ? /* @__PURE__ */ jsx24(
18963
+ /* @__PURE__ */ jsx25("dd", { className: "min-w-0", children: /* @__PURE__ */ jsxs13("span", { className: "agent-gui-node__slash-status-limit", children: [
18964
+ typeof limit.percentRemaining === "number" && Number.isFinite(limit.percentRemaining) ? /* @__PURE__ */ jsx25(
18940
18965
  "span",
18941
18966
  {
18942
18967
  "aria-hidden": "true",
18943
18968
  className: "agent-gui-node__slash-status-limit-meter",
18944
- children: /* @__PURE__ */ jsx24(
18969
+ children: /* @__PURE__ */ jsx25(
18945
18970
  "span",
18946
18971
  {
18947
18972
  className: "agent-gui-node__slash-status-limit-meter-fill",
@@ -18971,7 +18996,7 @@ function AgentSlashStatusPanel({
18971
18996
  labels.slashStatusLimits,
18972
18997
  ":"
18973
18998
  ] }),
18974
- /* @__PURE__ */ jsx24("dd", { className: "min-w-0 text-muted-foreground", children: labels.slashStatusLimitsUnavailable })
18999
+ /* @__PURE__ */ jsx25("dd", { className: "min-w-0 text-muted-foreground", children: labels.slashStatusLimitsUnavailable })
18975
19000
  ] }) : null
18976
19001
  ] })
18977
19002
  ]
@@ -19075,7 +19100,7 @@ var AgentReviewBranchController = class {
19075
19100
  };
19076
19101
 
19077
19102
  // agent-gui/agentGuiNode/AgentReviewPickerPanel.tsx
19078
- import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
19103
+ import { jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
19079
19104
  var reviewMenuStyles = {
19080
19105
  panel: "agent-gui-node__slash-status-panel nodrag flex max-h-[280px] flex-col gap-1 overflow-hidden [-webkit-app-region:no-drag]",
19081
19106
  search: "nodrag h-8 w-full shrink-0 rounded-[6px] border-0 bg-transparent px-2.5 text-[11px] leading-4 text-[var(--text-primary)] placeholder:text-[var(--text-secondary)] focus-visible:outline-none [-webkit-app-region:no-drag]",
@@ -19279,7 +19304,7 @@ function AgentReviewPickerPanel({
19279
19304
  role: "dialog",
19280
19305
  "aria-label": labels.title,
19281
19306
  children: [
19282
- /* @__PURE__ */ jsx25(
19307
+ /* @__PURE__ */ jsx26(
19283
19308
  "input",
19284
19309
  {
19285
19310
  ref: searchInputRef,
@@ -19295,15 +19320,15 @@ function AgentReviewPickerPanel({
19295
19320
  onKeyDown: handleKeyDown
19296
19321
  }
19297
19322
  ),
19298
- /* @__PURE__ */ jsx25(
19323
+ /* @__PURE__ */ jsx26(
19299
19324
  "div",
19300
19325
  {
19301
19326
  className: reviewMenuStyles.list,
19302
19327
  role: "listbox",
19303
19328
  "aria-label": labels.title,
19304
- children: entries.length === 0 ? /* @__PURE__ */ jsx25("div", { className: reviewMenuStyles.message, children: emptyMessage }) : entries.map((entry, index) => {
19329
+ children: entries.length === 0 ? /* @__PURE__ */ jsx26("div", { className: reviewMenuStyles.message, children: emptyMessage }) : entries.map((entry, index) => {
19305
19330
  const isHighlighted = index === safeHighlightedIndex;
19306
- return /* @__PURE__ */ jsx25(
19331
+ return /* @__PURE__ */ jsx26(
19307
19332
  "button",
19308
19333
  {
19309
19334
  ref: isHighlighted ? highlightedOptionRef : null,
@@ -19324,8 +19349,8 @@ function AgentReviewPickerPanel({
19324
19349
  }
19325
19350
  },
19326
19351
  children: /* @__PURE__ */ jsxs14("span", { className: reviewMenuStyles.copy, children: [
19327
- /* @__PURE__ */ jsx25("span", { className: reviewMenuStyles.name, children: entry.label }),
19328
- entry.description ? /* @__PURE__ */ jsx25("span", { className: reviewMenuStyles.description, children: entry.description }) : null
19352
+ /* @__PURE__ */ jsx26("span", { className: reviewMenuStyles.name, children: entry.label }),
19353
+ entry.description ? /* @__PURE__ */ jsx26("span", { className: reviewMenuStyles.description, children: entry.description }) : null
19329
19354
  ] })
19330
19355
  },
19331
19356
  entry.key
@@ -19349,7 +19374,7 @@ import {
19349
19374
  useState as useState10
19350
19375
  } from "react";
19351
19376
  import { createPortal as createPortal2 } from "react-dom";
19352
- import { jsx as jsx26 } from "react/jsx-runtime";
19377
+ import { jsx as jsx27 } from "react/jsx-runtime";
19353
19378
  var COMPOSER_MENU_GAP_PX = 8;
19354
19379
  var COMPOSER_MENU_VIEWPORT_PADDING_PX = 8;
19355
19380
  var COMPOSER_MENU_MIN_HEIGHT_PX = 280;
@@ -19567,7 +19592,7 @@ var ComposerFloatingMenuSurface = forwardRef4(function ComposerFloatingMenuSurfa
19567
19592
  }
19568
19593
  const portalTarget = frame?.portalTarget ?? (anchorRef.current ? resolveComposerMenuPortalTarget(anchorRef.current) : document.body);
19569
19594
  return createPortal2(
19570
- /* @__PURE__ */ jsx26(
19595
+ /* @__PURE__ */ jsx27(
19571
19596
  "div",
19572
19597
  {
19573
19598
  "data-testid": testId,
@@ -19578,7 +19603,7 @@ var ComposerFloatingMenuSurface = forwardRef4(function ComposerFloatingMenuSurfa
19578
19603
  className
19579
19604
  ),
19580
19605
  style,
19581
- children: contentClassName ? /* @__PURE__ */ jsx26("div", { className: contentClassName, children }) : children
19606
+ children: contentClassName ? /* @__PURE__ */ jsx27("div", { className: contentClassName, children }) : children
19582
19607
  }
19583
19608
  ),
19584
19609
  portalTarget
@@ -19586,7 +19611,7 @@ var ComposerFloatingMenuSurface = forwardRef4(function ComposerFloatingMenuSurfa
19586
19611
  });
19587
19612
 
19588
19613
  // agent-gui/agentGuiNode/AgentComposer.tsx
19589
- import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
19614
+ import { jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
19590
19615
  var USAGE_POPOVER_HOVER_DELAY_MS = 120;
19591
19616
  var DOCK_COMPOSER_INPUT_MIN_HEIGHT = 56;
19592
19617
  var DOCK_COMPOSER_TEXT_LINE_HEIGHT = 24;
@@ -19688,7 +19713,7 @@ function AgentUsageChip({
19688
19713
  },
19689
19714
  [clearUsagePopoverCloseTimer, clearUsagePopoverHoverTimer]
19690
19715
  );
19691
- const trigger = /* @__PURE__ */ jsx27(
19716
+ const trigger = /* @__PURE__ */ jsx28(
19692
19717
  "button",
19693
19718
  {
19694
19719
  type: "button",
@@ -19712,7 +19737,7 @@ function AgentUsageChip({
19712
19737
  style: {
19713
19738
  background: `conic-gradient(${ringColor} ${clampedPercent}%, color-mix(in srgb, ${ringColor} 16%, transparent) 0)`
19714
19739
  },
19715
- children: /* @__PURE__ */ jsx27(
19740
+ children: /* @__PURE__ */ jsx28(
19716
19741
  "span",
19717
19742
  {
19718
19743
  "aria-hidden": "true",
@@ -19730,8 +19755,8 @@ function AgentUsageChip({
19730
19755
  open: usagePopoverOpen,
19731
19756
  onOpenChange: handleUsagePopoverOpenChange,
19732
19757
  children: [
19733
- /* @__PURE__ */ jsx27(PopoverTrigger, { asChild: true, children: trigger }),
19734
- usagePopoverOpen ? /* @__PURE__ */ jsx27(
19758
+ /* @__PURE__ */ jsx28(PopoverTrigger, { asChild: true, children: trigger }),
19759
+ usagePopoverOpen ? /* @__PURE__ */ jsx28(
19735
19760
  PopoverContent,
19736
19761
  {
19737
19762
  side: "bottom",
@@ -19742,8 +19767,8 @@ function AgentUsageChip({
19742
19767
  onPointerEnter: openUsagePopover,
19743
19768
  onPointerLeave: scheduleUsagePopoverClose,
19744
19769
  children: /* @__PURE__ */ jsxs15("div", { className: "flex min-w-0 flex-col gap-3", children: [
19745
- /* @__PURE__ */ jsx27("span", { className: "text-[13px] font-semibold leading-4", children: labels.usagePopoverTitle }),
19746
- showTokens ? /* @__PURE__ */ jsx27(
19770
+ /* @__PURE__ */ jsx28("span", { className: "text-[13px] font-semibold leading-4", children: labels.usagePopoverTitle }),
19771
+ showTokens ? /* @__PURE__ */ jsx28(
19747
19772
  AgentUsageMeter,
19748
19773
  {
19749
19774
  label: labels.usageContextWindowLabel,
@@ -19753,7 +19778,7 @@ function AgentUsageChip({
19753
19778
  testId: "agent-gui-usage-context-meter"
19754
19779
  }
19755
19780
  ) : null,
19756
- compactSupported && onCompact ? /* @__PURE__ */ jsx27(
19781
+ compactSupported && onCompact ? /* @__PURE__ */ jsx28(
19757
19782
  Button3,
19758
19783
  {
19759
19784
  type: "button",
@@ -19896,6 +19921,8 @@ function AgentComposer({
19896
19921
  const draftImages = draftContent.images;
19897
19922
  const draftFiles = draftContent.files ?? [];
19898
19923
  const agentActivityRuntime = useOptionalAgentActivityRuntime();
19924
+ const agentHostApi = useOptionalAgentHostApi();
19925
+ const getReferenceForFile = agentHostApi?.workspace.getReferenceForFile;
19899
19926
  const [isPaletteOpen, setIsPaletteOpen] = useState11(true);
19900
19927
  const [isReviewPickerOpen, setIsReviewPickerOpen] = useState11(false);
19901
19928
  const [highlightedIndex, setHighlightedIndex] = useState11(0);
@@ -21418,7 +21445,7 @@ function AgentComposer({
21418
21445
  title: isInterrupting ? labels.stopping : labels.stop,
21419
21446
  onClick: onInterruptCurrentTurn,
21420
21447
  children: [
21421
- /* @__PURE__ */ jsx27(
21448
+ /* @__PURE__ */ jsx28(
21422
21449
  Spinner,
21423
21450
  {
21424
21451
  className: "size-7 text-[var(--text-primary)]",
@@ -21428,7 +21455,7 @@ function AgentComposer({
21428
21455
  testId: "agent-gui-composer-stop-spinner"
21429
21456
  }
21430
21457
  ),
21431
- /* @__PURE__ */ jsx27(
21458
+ /* @__PURE__ */ jsx28(
21432
21459
  "span",
21433
21460
  {
21434
21461
  "aria-hidden": "true",
@@ -21438,7 +21465,7 @@ function AgentComposer({
21438
21465
  )
21439
21466
  ]
21440
21467
  }
21441
- ) : /* @__PURE__ */ jsx27(
21468
+ ) : /* @__PURE__ */ jsx28(
21442
21469
  "button",
21443
21470
  {
21444
21471
  type: "submit",
@@ -21448,7 +21475,7 @@ function AgentComposer({
21448
21475
  "aria-label": labels.send,
21449
21476
  title: labels.send,
21450
21477
  "aria-busy": sendButtonBusy,
21451
- children: sendButtonBusy ? /* @__PURE__ */ jsx27(
21478
+ children: sendButtonBusy ? /* @__PURE__ */ jsx28(
21452
21479
  Spinner,
21453
21480
  {
21454
21481
  className: "text-[var(--text-primary)]",
@@ -21457,10 +21484,10 @@ function AgentComposer({
21457
21484
  trackColor: "var(--transparency-hover)",
21458
21485
  testId: "agent-gui-composer-send-spinner"
21459
21486
  }
21460
- ) : /* @__PURE__ */ jsx27(SendFilledIcon, {})
21487
+ ) : /* @__PURE__ */ jsx28(SendFilledIcon, {})
21461
21488
  }
21462
21489
  );
21463
- const promptTipNode = activePromptTip ? /* @__PURE__ */ jsx27(
21490
+ const promptTipNode = activePromptTip ? /* @__PURE__ */ jsx28(
21464
21491
  "span",
21465
21492
  {
21466
21493
  ref: promptTipRef,
@@ -21468,14 +21495,14 @@ function AgentComposer({
21468
21495
  "data-rotating": promptTips.length > 1 ? "true" : void 0,
21469
21496
  "data-testid": "agent-gui-prompt-tip",
21470
21497
  style: promptTipStyle,
21471
- children: /* @__PURE__ */ jsx27("span", { className: AgentGUINode_styles_default.composerPromptTipTrack, children: rotatingPromptTips.map((tip, index) => /* @__PURE__ */ jsxs15(
21498
+ children: /* @__PURE__ */ jsx28("span", { className: AgentGUINode_styles_default.composerPromptTipTrack, children: rotatingPromptTips.map((tip, index) => /* @__PURE__ */ jsxs15(
21472
21499
  "span",
21473
21500
  {
21474
21501
  className: AgentGUINode_styles_default.composerPromptTipItem,
21475
21502
  "aria-hidden": index >= promptTips.length ? true : void 0,
21476
21503
  children: [
21477
- /* @__PURE__ */ jsx27("span", { className: AgentGUINode_styles_default.composerPromptTipPrefix, children: labels.promptTipsPrefix }),
21478
- /* @__PURE__ */ jsx27("span", { className: AgentGUINode_styles_default.composerPromptTipLabel, children: tip.label }),
21504
+ /* @__PURE__ */ jsx28("span", { className: AgentGUINode_styles_default.composerPromptTipPrefix, children: labels.promptTipsPrefix }),
21505
+ /* @__PURE__ */ jsx28("span", { className: AgentGUINode_styles_default.composerPromptTipLabel, children: tip.label }),
21479
21506
  /* @__PURE__ */ jsxs15("span", { className: AgentGUINode_styles_default.composerPromptTipText, children: [
21480
21507
  " \xB7 ",
21481
21508
  tip.prompt
@@ -21495,12 +21522,12 @@ function AgentComposer({
21495
21522
  "data-layout": layoutMode,
21496
21523
  onSubmit: submit,
21497
21524
  children: [
21498
- visibleActivePrompt ? /* @__PURE__ */ jsx27(
21525
+ visibleActivePrompt ? /* @__PURE__ */ jsx28(
21499
21526
  "div",
21500
21527
  {
21501
21528
  className: AgentGUINode_styles_default.composerFloatingPrompt,
21502
21529
  "data-testid": "agent-gui-composer-floating-prompt",
21503
- children: /* @__PURE__ */ jsx27(
21530
+ children: /* @__PURE__ */ jsx28(
21504
21531
  AgentInteractivePromptSurface,
21505
21532
  {
21506
21533
  prompt: visibleActivePrompt,
@@ -21532,7 +21559,7 @@ function AgentComposer({
21532
21559
  )
21533
21560
  }
21534
21561
  ) : null,
21535
- queuedPrompts.length > 0 ? /* @__PURE__ */ jsx27(
21562
+ queuedPrompts.length > 0 ? /* @__PURE__ */ jsx28(
21536
21563
  "div",
21537
21564
  {
21538
21565
  className: cn(
@@ -21540,7 +21567,7 @@ function AgentComposer({
21540
21567
  AgentGUINode_styles_default.composerQueuedPromptFloating
21541
21568
  ),
21542
21569
  "data-testid": "agent-gui-composer-queued-prompts",
21543
- children: /* @__PURE__ */ jsx27(
21570
+ children: /* @__PURE__ */ jsx28(
21544
21571
  AgentQueuedPromptPanel,
21545
21572
  {
21546
21573
  queuedPrompts,
@@ -21561,7 +21588,7 @@ function AgentComposer({
21561
21588
  )
21562
21589
  }
21563
21590
  ) : null,
21564
- showProjectMissingProbe ? /* @__PURE__ */ jsx27(
21591
+ showProjectMissingProbe ? /* @__PURE__ */ jsx28(
21565
21592
  AgentProjectMissingStatusProbe,
21566
21593
  {
21567
21594
  composerSettings,
@@ -21577,7 +21604,7 @@ function AgentComposer({
21577
21604
  ),
21578
21605
  "data-edge-glow": showEdgeGlow ? "true" : void 0,
21579
21606
  children: [
21580
- isSelectedProjectMissing ? /* @__PURE__ */ jsx27(
21607
+ isSelectedProjectMissing ? /* @__PURE__ */ jsx28(
21581
21608
  AgentChromeNotice,
21582
21609
  {
21583
21610
  tone: "danger",
@@ -21606,7 +21633,7 @@ function AgentComposer({
21606
21633
  onOpenChange: setIsPaletteOpen,
21607
21634
  modal: false,
21608
21635
  children: [
21609
- /* @__PURE__ */ jsx27(PopoverAnchor, { asChild: true, children: /* @__PURE__ */ jsxs15(
21636
+ /* @__PURE__ */ jsx28(PopoverAnchor, { asChild: true, children: /* @__PURE__ */ jsxs15(
21610
21637
  "div",
21611
21638
  {
21612
21639
  ref: promptInputAreaRef,
@@ -21617,12 +21644,12 @@ function AgentComposer({
21617
21644
  "data-has-draft-images": draftImages.length > 0 ? "true" : void 0,
21618
21645
  style: promptInputAreaStyle,
21619
21646
  children: [
21620
- draftImages.length > 0 ? /* @__PURE__ */ jsx27(
21647
+ draftImages.length > 0 ? /* @__PURE__ */ jsx28(
21621
21648
  "div",
21622
21649
  {
21623
21650
  className: "mb-2 flex w-full max-w-full flex-wrap items-start gap-2",
21624
21651
  "data-testid": "agent-gui-composer-image-drafts",
21625
- children: draftImages.map((image) => /* @__PURE__ */ jsx27(
21652
+ children: draftImages.map((image) => /* @__PURE__ */ jsx28(
21626
21653
  AgentComposerDraftImagePreview,
21627
21654
  {
21628
21655
  image,
@@ -21633,7 +21660,7 @@ function AgentComposer({
21633
21660
  ))
21634
21661
  }
21635
21662
  ) : null,
21636
- visibleDraftFiles.length > 0 ? /* @__PURE__ */ jsx27(
21663
+ visibleDraftFiles.length > 0 ? /* @__PURE__ */ jsx28(
21637
21664
  "div",
21638
21665
  {
21639
21666
  className: "mb-2 flex max-w-[520px] flex-wrap gap-2",
@@ -21649,7 +21676,7 @@ function AgentComposer({
21649
21676
  "data-upload-error": file.uploadError ? "true" : void 0,
21650
21677
  title: file.hostPath ?? file.path ?? file.name,
21651
21678
  children: [
21652
- file.uploading ? /* @__PURE__ */ jsx27(
21679
+ file.uploading ? /* @__PURE__ */ jsx28(
21653
21680
  Spinner,
21654
21681
  {
21655
21682
  className: "shrink-0 text-[var(--text-primary)]",
@@ -21658,15 +21685,15 @@ function AgentComposer({
21658
21685
  trackColor: "var(--transparency-hover)",
21659
21686
  testId: "agent-gui-composer-file-upload-spinner"
21660
21687
  }
21661
- ) : /* @__PURE__ */ jsx27(
21688
+ ) : /* @__PURE__ */ jsx28(
21662
21689
  "span",
21663
21690
  {
21664
21691
  className: "size-2 shrink-0 rounded-full bg-[var(--text-tertiary)]",
21665
21692
  "aria-hidden": true
21666
21693
  }
21667
21694
  ),
21668
- /* @__PURE__ */ jsx27("span", { className: "min-w-0 max-w-[220px] truncate", children: file.name }),
21669
- /* @__PURE__ */ jsx27(
21695
+ /* @__PURE__ */ jsx28("span", { className: "min-w-0 max-w-[220px] truncate", children: file.name }),
21696
+ /* @__PURE__ */ jsx28(
21670
21697
  "button",
21671
21698
  {
21672
21699
  type: "button",
@@ -21674,7 +21701,7 @@ function AgentComposer({
21674
21701
  "aria-label": labels.removeMention,
21675
21702
  title: labels.removeMention,
21676
21703
  onClick: () => removeDraftFile(file.id),
21677
- children: /* @__PURE__ */ jsx27(X, { size: 12, strokeWidth: 2.4, "aria-hidden": true })
21704
+ children: /* @__PURE__ */ jsx28(X, { size: 12, strokeWidth: 2.4, "aria-hidden": true })
21678
21705
  }
21679
21706
  )
21680
21707
  ]
@@ -21691,7 +21718,7 @@ function AgentComposer({
21691
21718
  !isHeroLayout && "agent-gui-node__composer-prompt-input-line"
21692
21719
  ),
21693
21720
  children: [
21694
- /* @__PURE__ */ jsx27(
21721
+ /* @__PURE__ */ jsx28(
21695
21722
  AgentRichTextEditor,
21696
21723
  {
21697
21724
  ref: editorHandleRef,
@@ -21711,7 +21738,8 @@ function AgentComposer({
21711
21738
  onLinkClick: handleLinkClick,
21712
21739
  promptImagesSupported,
21713
21740
  onPromptImagesUnsupported,
21714
- onPasteImages: handlePastedImages
21741
+ onPasteImages: handlePastedImages,
21742
+ getReferenceForFile
21715
21743
  }
21716
21744
  ),
21717
21745
  !isHeroLayout ? composerActionButton : null
@@ -21722,7 +21750,7 @@ function AgentComposer({
21722
21750
  }
21723
21751
  ) }),
21724
21752
  showFileMentionPalette && mentionPaletteFrame ? createPortal3(
21725
- /* @__PURE__ */ jsx27(
21753
+ /* @__PURE__ */ jsx28(
21726
21754
  "div",
21727
21755
  {
21728
21756
  "data-testid": "agent-gui-mention-palette-surface",
@@ -21732,7 +21760,7 @@ function AgentComposer({
21732
21760
  "max-h-[320px] overflow-hidden border-[var(--line-1)] p-0"
21733
21761
  ),
21734
21762
  style: mentionPaletteStyle,
21735
- children: /* @__PURE__ */ jsx27(
21763
+ children: /* @__PURE__ */ jsx28(
21736
21764
  AgentFileMentionPalette,
21737
21765
  {
21738
21766
  state: mentionSearchState,
@@ -21758,7 +21786,7 @@ function AgentComposer({
21758
21786
  ),
21759
21787
  mentionPaletteFrame.portalTarget
21760
21788
  ) : null,
21761
- /* @__PURE__ */ jsx27(
21789
+ /* @__PURE__ */ jsx28(
21762
21790
  ComposerFloatingMenuSurface,
21763
21791
  {
21764
21792
  anchorRef: inputShellRef,
@@ -21771,7 +21799,7 @@ function AgentComposer({
21771
21799
  placement: "fixed-height",
21772
21800
  surfaceRef: paletteContentRef,
21773
21801
  testId: "agent-gui-slash-palette-surface",
21774
- children: /* @__PURE__ */ jsx27(
21802
+ children: /* @__PURE__ */ jsx28(
21775
21803
  AgentSlashCommandPalette,
21776
21804
  {
21777
21805
  entries: slashPaletteEntries,
@@ -21792,7 +21820,7 @@ function AgentComposer({
21792
21820
  )
21793
21821
  }
21794
21822
  ),
21795
- /* @__PURE__ */ jsx27(
21823
+ /* @__PURE__ */ jsx28(
21796
21824
  ComposerFloatingMenuSurface,
21797
21825
  {
21798
21826
  anchorRef: inputShellRef,
@@ -21804,7 +21832,7 @@ function AgentComposer({
21804
21832
  placement: "dynamic-above",
21805
21833
  surfaceRef: paletteContentRef,
21806
21834
  testId: "agent-gui-command-menu-surface",
21807
- children: /* @__PURE__ */ jsx27(
21835
+ children: /* @__PURE__ */ jsx28(
21808
21836
  AgentSlashStatusPanel,
21809
21837
  {
21810
21838
  status: slashStatus,
@@ -21824,7 +21852,7 @@ function AgentComposer({
21824
21852
  )
21825
21853
  }
21826
21854
  ),
21827
- /* @__PURE__ */ jsx27(
21855
+ /* @__PURE__ */ jsx28(
21828
21856
  ComposerFloatingMenuSurface,
21829
21857
  {
21830
21858
  anchorRef: inputShellRef,
@@ -21836,7 +21864,7 @@ function AgentComposer({
21836
21864
  placement: "dynamic-above",
21837
21865
  surfaceRef: paletteContentRef,
21838
21866
  testId: "agent-gui-command-menu-surface",
21839
- children: /* @__PURE__ */ jsx27(
21867
+ children: /* @__PURE__ */ jsx28(
21840
21868
  AgentReviewPickerPanel,
21841
21869
  {
21842
21870
  labels: labels.reviewPicker,
@@ -21852,7 +21880,7 @@ function AgentComposer({
21852
21880
  ),
21853
21881
  /* @__PURE__ */ jsxs15("div", { className: AgentGUINode_styles_default.composerFooter, children: [
21854
21882
  /* @__PURE__ */ jsxs15("div", { className: composerStyles.footerGroup, children: [
21855
- previewMode ? /* @__PURE__ */ jsx27(
21883
+ previewMode ? /* @__PURE__ */ jsx28(
21856
21884
  "button",
21857
21885
  {
21858
21886
  type: "button",
@@ -21863,7 +21891,7 @@ function AgentComposer({
21863
21891
  AgentGUINode_styles_default.composerReferenceTrigger,
21864
21892
  "w-auto justify-center text-[var(--agent-gui-text-secondary)] [&_svg]:shrink-0"
21865
21893
  ),
21866
- children: /* @__PURE__ */ jsx27(
21894
+ children: /* @__PURE__ */ jsx28(
21867
21895
  AddIcon,
21868
21896
  {
21869
21897
  "aria-hidden": true,
@@ -21872,7 +21900,7 @@ function AgentComposer({
21872
21900
  }
21873
21901
  )
21874
21902
  }
21875
- ) : /* @__PURE__ */ jsx27(
21903
+ ) : /* @__PURE__ */ jsx28(
21876
21904
  Select2,
21877
21905
  {
21878
21906
  open: false,
@@ -21888,7 +21916,7 @@ function AgentComposer({
21888
21916
  void handleWorkspaceReferencePicker();
21889
21917
  }
21890
21918
  },
21891
- children: /* @__PURE__ */ jsx27(
21919
+ children: /* @__PURE__ */ jsx28(
21892
21920
  SelectTrigger2,
21893
21921
  {
21894
21922
  size: "sm",
@@ -21899,7 +21927,7 @@ function AgentComposer({
21899
21927
  AgentGUINode_styles_default.composerReferenceTrigger,
21900
21928
  "w-auto justify-center text-[var(--agent-gui-text-secondary)] [&>svg:last-child]:hidden [&_svg]:shrink-0"
21901
21929
  ),
21902
- children: /* @__PURE__ */ jsx27(
21930
+ children: /* @__PURE__ */ jsx28(
21903
21931
  AddIcon,
21904
21932
  {
21905
21933
  "aria-hidden": true,
@@ -21911,7 +21939,7 @@ function AgentComposer({
21911
21939
  )
21912
21940
  }
21913
21941
  ),
21914
- composerSettings.supportsPlanMode && composerSettings.draftSettings.planMode ? /* @__PURE__ */ jsx27(
21942
+ composerSettings.supportsPlanMode && composerSettings.draftSettings.planMode ? /* @__PURE__ */ jsx28(
21915
21943
  "button",
21916
21944
  {
21917
21945
  type: "button",
@@ -21927,19 +21955,19 @@ function AgentComposer({
21927
21955
  onClick: () => onSettingsChange({ planMode: false }),
21928
21956
  children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5 overflow-hidden", children: [
21929
21957
  /* @__PURE__ */ jsxs15("span", { className: "relative flex size-3.5 shrink-0 items-center justify-center", children: [
21930
- /* @__PURE__ */ jsx27(
21958
+ /* @__PURE__ */ jsx28(
21931
21959
  ListChecks2,
21932
21960
  {
21933
21961
  "aria-hidden": true,
21934
21962
  className: "size-3.5 transition-opacity duration-150 group-hover:opacity-0 group-focus-visible:opacity-0"
21935
21963
  }
21936
21964
  ),
21937
- /* @__PURE__ */ jsx27(
21965
+ /* @__PURE__ */ jsx28(
21938
21966
  "span",
21939
21967
  {
21940
21968
  "aria-hidden": true,
21941
21969
  className: "absolute inset-0 flex items-center justify-center rounded-full bg-[var(--text-secondary)] opacity-0 transition-opacity duration-150 group-hover:opacity-100 group-focus-visible:opacity-100 group-disabled:opacity-0",
21942
- children: /* @__PURE__ */ jsx27(
21970
+ children: /* @__PURE__ */ jsx28(
21943
21971
  X,
21944
21972
  {
21945
21973
  className: "size-2.5 text-[var(--background-fronted)]",
@@ -21949,11 +21977,11 @@ function AgentComposer({
21949
21977
  }
21950
21978
  )
21951
21979
  ] }),
21952
- /* @__PURE__ */ jsx27("span", { className: "min-w-0 truncate", children: labels.planModeLabel })
21980
+ /* @__PURE__ */ jsx28("span", { className: "min-w-0 truncate", children: labels.planModeLabel })
21953
21981
  ] })
21954
21982
  }
21955
21983
  ) : null,
21956
- isGoalModeActive ? /* @__PURE__ */ jsx27(
21984
+ isGoalModeActive ? /* @__PURE__ */ jsx28(
21957
21985
  "button",
21958
21986
  {
21959
21987
  type: "button",
@@ -21969,19 +21997,19 @@ function AgentComposer({
21969
21997
  onClick: clearGoalModeBadge,
21970
21998
  children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5 overflow-hidden", children: [
21971
21999
  /* @__PURE__ */ jsxs15("span", { className: "relative flex size-3.5 shrink-0 items-center justify-center", children: [
21972
- /* @__PURE__ */ jsx27(
22000
+ /* @__PURE__ */ jsx28(
21973
22001
  Target3,
21974
22002
  {
21975
22003
  "aria-hidden": true,
21976
22004
  className: "size-3.5 transition-opacity duration-150 group-hover:opacity-0 group-focus-visible:opacity-0"
21977
22005
  }
21978
22006
  ),
21979
- /* @__PURE__ */ jsx27(
22007
+ /* @__PURE__ */ jsx28(
21980
22008
  "span",
21981
22009
  {
21982
22010
  "aria-hidden": true,
21983
22011
  className: "absolute inset-0 flex items-center justify-center rounded-full bg-[var(--text-secondary)] opacity-0 transition-opacity duration-150 group-hover:opacity-100 group-focus-visible:opacity-100 group-disabled:opacity-0",
21984
- children: /* @__PURE__ */ jsx27(
22012
+ children: /* @__PURE__ */ jsx28(
21985
22013
  X,
21986
22014
  {
21987
22015
  className: "size-2.5 text-[var(--background-fronted)]",
@@ -21991,13 +22019,13 @@ function AgentComposer({
21991
22019
  }
21992
22020
  )
21993
22021
  ] }),
21994
- /* @__PURE__ */ jsx27("span", { className: "min-w-0 truncate", children: labels.goalLabel })
22022
+ /* @__PURE__ */ jsx28("span", { className: "min-w-0 truncate", children: labels.goalLabel })
21995
22023
  ] })
21996
22024
  }
21997
22025
  ) : null
21998
22026
  ] }),
21999
22027
  /* @__PURE__ */ jsxs15("div", { className: composerStyles.footerGroupRight, children: [
22000
- usage && usage.percentUsed !== null ? /* @__PURE__ */ jsx27(
22028
+ usage && usage.percentUsed !== null ? /* @__PURE__ */ jsx28(
22001
22029
  AgentUsageChip,
22002
22030
  {
22003
22031
  percentUsed: usage.percentUsed,
@@ -22016,7 +22044,7 @@ function AgentComposer({
22016
22044
  }
22017
22045
  }
22018
22046
  ) : null,
22019
- composerSettings.supportsPermissionMode ? /* @__PURE__ */ jsx27(
22047
+ composerSettings.supportsPermissionMode ? /* @__PURE__ */ jsx28(
22020
22048
  AgentPermissionModeDropdown,
22021
22049
  {
22022
22050
  composerSettings,
@@ -22029,7 +22057,7 @@ function AgentComposer({
22029
22057
  onSettingsChange: (patch) => onSettingsChange(patch)
22030
22058
  }
22031
22059
  ) : null,
22032
- composerSettings.supportsModel || composerSettings.supportsReasoningEffort ? /* @__PURE__ */ jsx27(
22060
+ composerSettings.supportsModel || composerSettings.supportsReasoningEffort ? /* @__PURE__ */ jsx28(
22033
22061
  AgentModelReasoningDropdown,
22034
22062
  {
22035
22063
  composerSettings,
@@ -22077,7 +22105,7 @@ function AgentComposer({
22077
22105
  className: AgentGUINode_styles_default.composerProjectRow,
22078
22106
  "data-project-missing": isSelectedProjectMissing ? "true" : void 0,
22079
22107
  children: [
22080
- showHeroProjectSelector ? /* @__PURE__ */ jsx27(
22108
+ showHeroProjectSelector ? /* @__PURE__ */ jsx28(
22081
22109
  AgentProjectDropdown,
22082
22110
  {
22083
22111
  composerSettings,
@@ -22092,14 +22120,14 @@ function AgentComposer({
22092
22120
  onProjectPathChange
22093
22121
  }
22094
22122
  ) : null,
22095
- activePromptTip ? /* @__PURE__ */ jsx27(
22123
+ activePromptTip ? /* @__PURE__ */ jsx28(
22096
22124
  "div",
22097
22125
  {
22098
22126
  className: AgentGUINode_styles_default.composerPromptTips,
22099
22127
  "data-testid": "agent-gui-prompt-tips",
22100
- children: !previewMode && isPromptTipOverflowing && promptTipNode ? /* @__PURE__ */ jsx27(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs15(Tooltip, { children: [
22101
- /* @__PURE__ */ jsx27(TooltipTrigger, { asChild: true, children: promptTipNode }),
22102
- /* @__PURE__ */ jsx27(
22128
+ children: !previewMode && isPromptTipOverflowing && promptTipNode ? /* @__PURE__ */ jsx28(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs15(Tooltip, { children: [
22129
+ /* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: promptTipNode }),
22130
+ /* @__PURE__ */ jsx28(
22103
22131
  TooltipContent,
22104
22132
  {
22105
22133
  align: "end",
@@ -22154,7 +22182,7 @@ function AgentComposerDraftImagePreview({
22154
22182
  "data-upload-error": image.uploadError ? "true" : void 0,
22155
22183
  style: previewStyle,
22156
22184
  children: [
22157
- /* @__PURE__ */ jsx27(
22185
+ /* @__PURE__ */ jsx28(
22158
22186
  ZoomableImage,
22159
22187
  {
22160
22188
  src: image.previewUrl,
@@ -22177,12 +22205,12 @@ function AgentComposerDraftImagePreview({
22177
22205
  }
22178
22206
  }
22179
22207
  ),
22180
- image.uploading ? /* @__PURE__ */ jsx27(
22208
+ image.uploading ? /* @__PURE__ */ jsx28(
22181
22209
  "div",
22182
22210
  {
22183
22211
  className: "absolute inset-0 grid place-items-center bg-[color-mix(in_srgb,var(--background-fronted)_62%,transparent)]",
22184
22212
  "data-testid": "agent-gui-composer-image-uploading",
22185
- children: /* @__PURE__ */ jsx27(
22213
+ children: /* @__PURE__ */ jsx28(
22186
22214
  Spinner,
22187
22215
  {
22188
22216
  className: "text-[var(--text-primary)]",
@@ -22194,7 +22222,7 @@ function AgentComposerDraftImagePreview({
22194
22222
  )
22195
22223
  }
22196
22224
  ) : null,
22197
- /* @__PURE__ */ jsx27(
22225
+ /* @__PURE__ */ jsx28(
22198
22226
  "button",
22199
22227
  {
22200
22228
  type: "button",
@@ -22202,7 +22230,7 @@ function AgentComposerDraftImagePreview({
22202
22230
  "aria-label": removeLabel,
22203
22231
  title: removeLabel,
22204
22232
  onClick: () => onRemove(image.id),
22205
- children: /* @__PURE__ */ jsx27(X, { size: 12, strokeWidth: 2.4, "aria-hidden": true })
22233
+ children: /* @__PURE__ */ jsx28(X, { size: 12, strokeWidth: 2.4, "aria-hidden": true })
22206
22234
  }
22207
22235
  )
22208
22236
  ]
@@ -22282,7 +22310,7 @@ function useStableEventCallback(callback) {
22282
22310
  }
22283
22311
  function SendFilledIcon() {
22284
22312
  "use memo";
22285
- return /* @__PURE__ */ jsx27(
22313
+ return /* @__PURE__ */ jsx28(
22286
22314
  "svg",
22287
22315
  {
22288
22316
  width: "24",
@@ -22290,7 +22318,7 @@ function SendFilledIcon() {
22290
22318
  viewBox: "0 0 24 24",
22291
22319
  fill: "none",
22292
22320
  "aria-hidden": "true",
22293
- children: /* @__PURE__ */ jsx27(
22321
+ children: /* @__PURE__ */ jsx28(
22294
22322
  "path",
22295
22323
  {
22296
22324
  d: "M2.74311 8.80587C2.84592 8.40096 3.14571 8.08844 3.54551 7.97033L18.5197 3.51569C18.9336 3.39383 19.3809 3.5054 19.6881 3.81262C19.9951 4.11984 20.1076 4.56798 19.9857 4.9817L15.5311 19.9559C15.413 20.3557 15.1005 20.6555 14.6956 20.7583C14.2895 20.8597 13.869 20.7438 13.5721 20.4469L10.455 15.1823C10.8585 14.6483 12.1563 12.9094 14.3475 9.96528C14.6086 9.70419 14.6382 9.31168 14.4138 9.08692C14.1891 8.86221 13.796 8.8913 13.5348 9.15252L8.31088 13.0423L3.05316 9.92799C2.7562 9.63104 2.64049 9.21071 2.74311 8.80587Z",
@@ -22317,7 +22345,7 @@ function agentGUIBottomDockStoreSnapshotsEqual(current, next) {
22317
22345
  }
22318
22346
 
22319
22347
  // agent-gui/agentGuiNode/AgentConversationListSkeleton.tsx
22320
- import { jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
22348
+ import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
22321
22349
  var SKELETON_ROWS = [
22322
22350
  { id: "first", size: "long" },
22323
22351
  { id: "second", size: "medium" },
@@ -22329,7 +22357,7 @@ function AgentConversationListSkeleton({
22329
22357
  label
22330
22358
  }) {
22331
22359
  "use memo";
22332
- return /* @__PURE__ */ jsx28(
22360
+ return /* @__PURE__ */ jsx29(
22333
22361
  "div",
22334
22362
  {
22335
22363
  className: "agent-gui-node__conversation-list-skeleton",
@@ -22343,9 +22371,9 @@ function AgentConversationListSkeleton({
22343
22371
  "data-size": row.size,
22344
22372
  "aria-hidden": "true",
22345
22373
  children: [
22346
- /* @__PURE__ */ jsx28("span", { className: "agent-gui-node__conversation-list-skeleton-spine" }),
22347
- /* @__PURE__ */ jsx28("span", { className: "agent-gui-node__conversation-list-skeleton-rib agent-gui-node__conversation-list-skeleton-rib-primary" }),
22348
- /* @__PURE__ */ jsx28("span", { className: "agent-gui-node__conversation-list-skeleton-rib agent-gui-node__conversation-list-skeleton-rib-secondary" })
22374
+ /* @__PURE__ */ jsx29("span", { className: "agent-gui-node__conversation-list-skeleton-spine" }),
22375
+ /* @__PURE__ */ jsx29("span", { className: "agent-gui-node__conversation-list-skeleton-rib agent-gui-node__conversation-list-skeleton-rib-primary" }),
22376
+ /* @__PURE__ */ jsx29("span", { className: "agent-gui-node__conversation-list-skeleton-rib agent-gui-node__conversation-list-skeleton-rib-secondary" })
22349
22377
  ]
22350
22378
  },
22351
22379
  row.id
@@ -22356,7 +22384,7 @@ function AgentConversationListSkeleton({
22356
22384
 
22357
22385
  // agent-gui/agentGuiNode/agentGuiNodeViewConversation.tsx
22358
22386
  import { AskLinedIcon } from "@tutti-os/ui-system/icons";
22359
- import { jsx as jsx29 } from "react/jsx-runtime";
22387
+ import { jsx as jsx30 } from "react/jsx-runtime";
22360
22388
  function ConversationMeta({
22361
22389
  item,
22362
22390
  nowMs,
@@ -22365,24 +22393,24 @@ function ConversationMeta({
22365
22393
  "use memo";
22366
22394
  const kind = conversationMetaKind(item);
22367
22395
  if (kind === "loading") {
22368
- return /* @__PURE__ */ jsx29(
22396
+ return /* @__PURE__ */ jsx30(
22369
22397
  "span",
22370
22398
  {
22371
22399
  className: AgentGUINode_styles_default.conversationMeta,
22372
22400
  "data-kind": kind,
22373
22401
  "data-testid": `agent-gui-conversation-meta-${item.id}`,
22374
- children: /* @__PURE__ */ jsx29(LoadingGlyph, {})
22402
+ children: /* @__PURE__ */ jsx30(LoadingGlyph, {})
22375
22403
  }
22376
22404
  );
22377
22405
  }
22378
22406
  if (kind === "waiting") {
22379
- return /* @__PURE__ */ jsx29(
22407
+ return /* @__PURE__ */ jsx30(
22380
22408
  "span",
22381
22409
  {
22382
22410
  className: AgentGUINode_styles_default.conversationMeta,
22383
22411
  "data-kind": kind,
22384
22412
  "data-testid": `agent-gui-conversation-meta-${item.id}`,
22385
- children: /* @__PURE__ */ jsx29(
22413
+ children: /* @__PURE__ */ jsx30(
22386
22414
  AskLinedIcon,
22387
22415
  {
22388
22416
  "aria-hidden": "true",
@@ -22393,34 +22421,34 @@ function ConversationMeta({
22393
22421
  );
22394
22422
  }
22395
22423
  if (kind === "failed") {
22396
- return /* @__PURE__ */ jsx29(
22424
+ return /* @__PURE__ */ jsx30(
22397
22425
  "span",
22398
22426
  {
22399
22427
  className: AgentGUINode_styles_default.conversationMeta,
22400
22428
  "data-kind": kind,
22401
22429
  "data-testid": `agent-gui-conversation-meta-${item.id}`,
22402
- children: /* @__PURE__ */ jsx29(AttentionGlyph, {})
22430
+ children: /* @__PURE__ */ jsx30(AttentionGlyph, {})
22403
22431
  }
22404
22432
  );
22405
22433
  }
22406
22434
  if (kind === "unread-complete") {
22407
- return /* @__PURE__ */ jsx29(
22435
+ return /* @__PURE__ */ jsx30(
22408
22436
  "span",
22409
22437
  {
22410
22438
  className: AgentGUINode_styles_default.conversationMeta,
22411
22439
  "data-kind": kind,
22412
22440
  "data-testid": `agent-gui-conversation-meta-${item.id}`,
22413
- children: /* @__PURE__ */ jsx29("span", { className: AgentGUINode_styles_default.conversationUnreadLamp, "aria-hidden": "true" })
22441
+ children: /* @__PURE__ */ jsx30("span", { className: AgentGUINode_styles_default.conversationUnreadLamp, "aria-hidden": "true" })
22414
22442
  }
22415
22443
  );
22416
22444
  }
22417
- return /* @__PURE__ */ jsx29(
22445
+ return /* @__PURE__ */ jsx30(
22418
22446
  "span",
22419
22447
  {
22420
22448
  className: AgentGUINode_styles_default.conversationMeta,
22421
22449
  "data-kind": kind,
22422
22450
  "data-testid": `agent-gui-conversation-meta-${item.id}`,
22423
- children: /* @__PURE__ */ jsx29("span", { className: AgentGUINode_styles_default.conversationTime, children: formatConversationRelativeTime(
22451
+ children: /* @__PURE__ */ jsx30("span", { className: AgentGUINode_styles_default.conversationTime, children: formatConversationRelativeTime(
22424
22452
  resolveAgentGUIConversationSortTimeUnixMs(item),
22425
22453
  nowMs,
22426
22454
  labels
@@ -22588,7 +22616,7 @@ function formatConversationRelativeTime(updatedAtUnixMs, nowMs, labels) {
22588
22616
  }
22589
22617
  function LoadingGlyph() {
22590
22618
  "use memo";
22591
- return /* @__PURE__ */ jsx29(
22619
+ return /* @__PURE__ */ jsx30(
22592
22620
  Spinner,
22593
22621
  {
22594
22622
  className: AgentGUINode_styles_default.conversationStatusGlyph,
@@ -22602,14 +22630,14 @@ function LoadingGlyph() {
22602
22630
  }
22603
22631
  function AttentionGlyph() {
22604
22632
  "use memo";
22605
- return /* @__PURE__ */ jsx29(
22633
+ return /* @__PURE__ */ jsx30(
22606
22634
  "svg",
22607
22635
  {
22608
22636
  viewBox: "0 0 24 24",
22609
22637
  fill: "none",
22610
22638
  "aria-hidden": "true",
22611
22639
  className: AgentGUINode_styles_default.conversationStatusGlyph,
22612
- children: /* @__PURE__ */ jsx29(
22640
+ children: /* @__PURE__ */ jsx30(
22613
22641
  "path",
22614
22642
  {
22615
22643
  d: "M12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2ZM12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4ZM12.5 15C12.7761 15 13 15.2239 13 15.5V16.5C13 16.7761 12.7761 17 12.5 17H11.5C11.2239 17 11 16.7761 11 16.5V15.5C11 15.2239 11.2239 15 11.5 15H12.5ZM12.5 7C12.7761 7 13 7.22386 13 7.5V13.5C13 13.7761 12.7761 14 12.5 14H11.5C11.2239 14 11 13.7761 11 13.5V7.5C11 7.22386 11.2239 7 11.5 7H12.5Z",
@@ -22622,7 +22650,7 @@ function AttentionGlyph() {
22622
22650
 
22623
22651
  // agent-gui/agentGuiNode/AgentGUINodeView.tsx
22624
22652
  import { createRichTextMentionHref as createRichTextMentionHref2 } from "@tutti-os/ui-rich-text/core";
22625
- import { Fragment as Fragment8, jsx as jsx30, jsxs as jsxs17 } from "react/jsx-runtime";
22653
+ import { Fragment as Fragment8, jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
22626
22654
  var AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX = 24;
22627
22655
  var AGENT_GUI_TOP_HISTORY_PREFETCH_THRESHOLD_PX = 240;
22628
22656
  var AGENT_GUI_TOP_MASK_SCROLL_EPSILON_PX = 1;
@@ -23261,14 +23289,14 @@ function AgentGUINodeView({
23261
23289
  inert: previewMode ? true : void 0,
23262
23290
  style: layoutStyle,
23263
23291
  children: [
23264
- /* @__PURE__ */ jsx30(
23292
+ /* @__PURE__ */ jsx31(
23265
23293
  "aside",
23266
23294
  {
23267
23295
  id: "agent-gui-conversation-rail",
23268
23296
  className: `${AgentGUINode_styles_default.railPanel}${conversationRailCollapsed ? ` ${AgentGUINode_styles_default.railPanelCollapsed}` : ""}`,
23269
23297
  "aria-hidden": conversationRailCollapsed ? "true" : void 0,
23270
23298
  inert: conversationRailCollapsed ? true : void 0,
23271
- children: /* @__PURE__ */ jsx30(
23299
+ children: /* @__PURE__ */ jsx31(
23272
23300
  AgentGUIConversationRailStorePane,
23273
23301
  {
23274
23302
  conversations: viewModel.conversations,
@@ -23279,7 +23307,7 @@ function AgentGUINodeView({
23279
23307
  )
23280
23308
  }
23281
23309
  ),
23282
- /* @__PURE__ */ jsx30(
23310
+ /* @__PURE__ */ jsx31(
23283
23311
  "div",
23284
23312
  {
23285
23313
  id: "agent-gui-conversation-rail-resize",
@@ -23303,7 +23331,7 @@ function AgentGUINodeView({
23303
23331
  onPointerUp: endConversationRailResize
23304
23332
  }
23305
23333
  ),
23306
- /* @__PURE__ */ jsx30("section", { id: "agent-gui-detail", className: AgentGUINode_styles_default.detailPanel, children: /* @__PURE__ */ jsx30(
23334
+ /* @__PURE__ */ jsx31("section", { id: "agent-gui-detail", className: AgentGUINode_styles_default.detailPanel, children: /* @__PURE__ */ jsx31(
23307
23335
  AgentGUIDetailPane,
23308
23336
  {
23309
23337
  viewModel,
@@ -23332,7 +23360,7 @@ function AgentGUINodeView({
23332
23360
  ]
23333
23361
  }
23334
23362
  ),
23335
- referenceSourceAggregator ? /* @__PURE__ */ jsx30(
23363
+ referenceSourceAggregator ? /* @__PURE__ */ jsx31(
23336
23364
  ReferenceSourcePicker,
23337
23365
  {
23338
23366
  aggregator: referenceSourceAggregator,
@@ -23346,7 +23374,7 @@ function AgentGUINodeView({
23346
23374
  onConfirm: confirmWorkspaceReferencePicker,
23347
23375
  onConfirmBundles: confirmWorkspaceReferenceBundles
23348
23376
  }
23349
- ) : /* @__PURE__ */ jsx30(
23377
+ ) : /* @__PURE__ */ jsx31(
23350
23378
  WorkspaceFileReferencePicker,
23351
23379
  {
23352
23380
  copy: workspaceFileReferenceCopy ?? fallbackWorkspaceFileReferenceCopy,
@@ -23360,7 +23388,7 @@ function AgentGUINodeView({
23360
23388
  }
23361
23389
  )
23362
23390
  ] });
23363
- return previewMode ? content : /* @__PURE__ */ jsx30(TooltipProvider2, { children: content });
23391
+ return previewMode ? content : /* @__PURE__ */ jsx31(TooltipProvider2, { children: content });
23364
23392
  }
23365
23393
  function mergeWorkspaceAppIconsFromCommands(input) {
23366
23394
  const seen = new Set(
@@ -23573,8 +23601,8 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
23573
23601
  className: AgentGUINode_styles_default.unavailableChatEmpty,
23574
23602
  "data-testid": "agent-gui-unavailable-chat-empty",
23575
23603
  children: [
23576
- /* @__PURE__ */ jsx30(UnavailableChatIcon, { className: AgentGUINode_styles_default.unavailableChatEmptyIcon }),
23577
- /* @__PURE__ */ jsx30("span", { className: AgentGUINode_styles_default.unavailableChatEmptyText, children: labels.conversationUnavailable })
23604
+ /* @__PURE__ */ jsx31(UnavailableChatIcon, { className: AgentGUINode_styles_default.unavailableChatEmptyIcon }),
23605
+ /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.unavailableChatEmptyText, children: labels.conversationUnavailable })
23578
23606
  ]
23579
23607
  }
23580
23608
  ),
@@ -24273,7 +24301,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
24273
24301
  viewModel.isLoadingOlderMessages
24274
24302
  ]);
24275
24303
  return /* @__PURE__ */ jsxs17("main", { className: AgentGUINode_styles_default.detail, children: [
24276
- /* @__PURE__ */ jsx30(
24304
+ /* @__PURE__ */ jsx31(
24277
24305
  AgentGUIDetailHeader,
24278
24306
  {
24279
24307
  activeConversation: viewModel.activeConversation,
@@ -24298,8 +24326,8 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
24298
24326
  "data-testid": "agent-gui-provider-setup-notice",
24299
24327
  role: "status",
24300
24328
  children: [
24301
- /* @__PURE__ */ jsx30("span", { className: "inline-flex max-w-full items-center justify-center gap-[6px] text-center text-[13px] font-normal leading-normal", children: /* @__PURE__ */ jsx30("span", { className: "min-w-0 break-words", children: labels.installRequiredPlaceholder }) }),
24302
- /* @__PURE__ */ jsx30(
24329
+ /* @__PURE__ */ jsx31("span", { className: "inline-flex max-w-full items-center justify-center gap-[6px] text-center text-[13px] font-normal leading-normal", children: /* @__PURE__ */ jsx31("span", { className: "min-w-0 break-words", children: labels.installRequiredPlaceholder }) }),
24330
+ /* @__PURE__ */ jsx31(
24303
24331
  "button",
24304
24332
  {
24305
24333
  type: "button",
@@ -24319,7 +24347,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
24319
24347
  ]
24320
24348
  }
24321
24349
  ) : null,
24322
- /* @__PURE__ */ jsx30(
24350
+ /* @__PURE__ */ jsx31(
24323
24351
  ScrollArea,
24324
24352
  {
24325
24353
  scrollbarMode: "native",
@@ -24328,7 +24356,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
24328
24356
  viewportTestId: "agent-gui-timeline",
24329
24357
  viewportClassName: `${AgentGUINode_styles_default.timeline} ${hasActiveConversation ? AgentGUINode_styles_default.timelineWithComposer : AgentGUINode_styles_default.timelineCentered} ${!isTimelineScrolledToTop ? AgentGUINode_styles_default.timelineScrolledFromTop : ""} ${showUnavailableChatEmpty ? AgentGUINode_styles_default.timelineUnavailableChatEmpty : ""}`.trim(),
24330
24358
  viewportContentStyle: AGENT_GUI_TIMELINE_SCROLL_AREA_CONTENT_STYLE,
24331
- children: !hasActiveConversation ? /* @__PURE__ */ jsx30(
24359
+ children: !hasActiveConversation ? /* @__PURE__ */ jsx31(
24332
24360
  AgentGUIEmptyHeroPane,
24333
24361
  {
24334
24362
  provider: viewModel.data.provider,
@@ -24343,7 +24371,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
24343
24371
  chromeLabels,
24344
24372
  composerProps: emptyHeroComposerProps
24345
24373
  }
24346
- ) : /* @__PURE__ */ jsx30(
24374
+ ) : /* @__PURE__ */ jsx31(
24347
24375
  AgentGUIConversationTimelinePane,
24348
24376
  {
24349
24377
  conversation,
@@ -24361,7 +24389,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
24361
24389
  )
24362
24390
  }
24363
24391
  ),
24364
- hasActiveConversation ? /* @__PURE__ */ jsx30(
24392
+ hasActiveConversation ? /* @__PURE__ */ jsx31(
24365
24393
  AgentGUIBottomDockPane,
24366
24394
  {
24367
24395
  bottomDockRef,
@@ -24401,8 +24429,8 @@ var AgentGUIDetailHeader = memo(function AgentGUIDetailHeader2({
24401
24429
  const statusTitle = showSyncIndicator ? syncLabel : void 0;
24402
24430
  return /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.detailHeader, children: [
24403
24431
  /* @__PURE__ */ jsxs17("span", { className: AgentGUINode_styles_default.detailHeaderTitleGroup, children: [
24404
- /* @__PURE__ */ jsx30("span", { className: AgentGUINode_styles_default.detailHeaderTitle, children: conversationPlainTitle(activeConversation, labels, uiLanguage) }),
24405
- runPath ? /* @__PURE__ */ jsx30(AgentRunPathInfo, { path: runPath, previewMode }) : null
24432
+ /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.detailHeaderTitle, children: conversationPlainTitle(activeConversation, labels, uiLanguage) }),
24433
+ runPath ? /* @__PURE__ */ jsx31(AgentRunPathInfo, { path: runPath, previewMode }) : null
24406
24434
  ] }),
24407
24435
  /* @__PURE__ */ jsxs17(
24408
24436
  "span",
@@ -24410,7 +24438,7 @@ var AgentGUIDetailHeader = memo(function AgentGUIDetailHeader2({
24410
24438
  className: "inline-flex flex-none items-center gap-2 whitespace-nowrap",
24411
24439
  title: statusTitle,
24412
24440
  children: [
24413
- showSyncIndicator ? /* @__PURE__ */ jsx30(
24441
+ showSyncIndicator ? /* @__PURE__ */ jsx31(
24414
24442
  StatusDot,
24415
24443
  {
24416
24444
  tone: syncStateTone(syncStatus),
@@ -24420,7 +24448,7 @@ var AgentGUIDetailHeader = memo(function AgentGUIDetailHeader2({
24420
24448
  title: syncLabel
24421
24449
  }
24422
24450
  ) : null,
24423
- showFailedSyncLabel ? /* @__PURE__ */ jsx30("span", { className: "text-[13px] font-semibold leading-[18px] text-shell-warning", children: syncLabel }) : null
24451
+ showFailedSyncLabel ? /* @__PURE__ */ jsx31("span", { className: "text-[13px] font-semibold leading-[18px] text-shell-warning", children: syncLabel }) : null
24424
24452
  ]
24425
24453
  }
24426
24454
  )
@@ -24431,21 +24459,21 @@ function AgentRunPathInfo({
24431
24459
  previewMode
24432
24460
  }) {
24433
24461
  "use memo";
24434
- const trigger = /* @__PURE__ */ jsx30(
24462
+ const trigger = /* @__PURE__ */ jsx31(
24435
24463
  "button",
24436
24464
  {
24437
24465
  type: "button",
24438
24466
  className: AgentGUINode_styles_default.detailHeaderPathInfo,
24439
24467
  "aria-label": path,
24440
- children: /* @__PURE__ */ jsx30(Info2, { size: 14, strokeWidth: 2, "aria-hidden": "true" })
24468
+ children: /* @__PURE__ */ jsx31(Info2, { size: 14, strokeWidth: 2, "aria-hidden": "true" })
24441
24469
  }
24442
24470
  );
24443
24471
  if (previewMode) {
24444
24472
  return trigger;
24445
24473
  }
24446
24474
  return /* @__PURE__ */ jsxs17(Tooltip3, { children: [
24447
- /* @__PURE__ */ jsx30(TooltipTrigger3, { asChild: true, children: trigger }),
24448
- /* @__PURE__ */ jsx30(
24475
+ /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: trigger }),
24476
+ /* @__PURE__ */ jsx31(
24449
24477
  TooltipContent3,
24450
24478
  {
24451
24479
  side: "top",
@@ -24490,8 +24518,8 @@ var AgentGUIEmptyHeroPane = memo(function AgentGUIEmptyHeroPane2({
24490
24518
  }) {
24491
24519
  "use memo";
24492
24520
  const heroIconUrl = resolveAgentGUIHeroIconUrl(provider);
24493
- return /* @__PURE__ */ jsx30("div", { className: AgentGUINode_styles_default.emptyHero, children: /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.emptyHeroBody, children: [
24494
- /* @__PURE__ */ jsx30(
24521
+ return /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.emptyHero, children: /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.emptyHeroBody, children: [
24522
+ /* @__PURE__ */ jsx31(
24495
24523
  "img",
24496
24524
  {
24497
24525
  "aria-hidden": "true",
@@ -24501,8 +24529,8 @@ var AgentGUIEmptyHeroPane = memo(function AgentGUIEmptyHeroPane2({
24501
24529
  alt: ""
24502
24530
  }
24503
24531
  ),
24504
- /* @__PURE__ */ jsx30("h2", { className: AgentGUINode_styles_default.emptyHeroTitle, children: /* @__PURE__ */ jsx30(EmptyHeroTitle, { label: emptyLabel, providerLabel: emptyProvider }) }),
24505
- inlineNoticeChrome ? /* @__PURE__ */ jsx30(
24532
+ /* @__PURE__ */ jsx31("h2", { className: AgentGUINode_styles_default.emptyHeroTitle, children: /* @__PURE__ */ jsx31(EmptyHeroTitle, { label: emptyLabel, providerLabel: emptyProvider }) }),
24533
+ inlineNoticeChrome ? /* @__PURE__ */ jsx31(
24506
24534
  AgentSessionChrome,
24507
24535
  {
24508
24536
  chrome: inlineNoticeChrome,
@@ -24514,7 +24542,7 @@ var AgentGUIEmptyHeroPane = memo(function AgentGUIEmptyHeroPane2({
24514
24542
  labels: chromeLabels
24515
24543
  }
24516
24544
  ) : null,
24517
- /* @__PURE__ */ jsx30(AgentComposer, { ...composerProps })
24545
+ /* @__PURE__ */ jsx31(AgentComposer, { ...composerProps })
24518
24546
  ] }) });
24519
24547
  });
24520
24548
  function EmptyHeroTitle({
@@ -24523,12 +24551,12 @@ function EmptyHeroTitle({
24523
24551
  }) {
24524
24552
  const providerStart = providerLabel ? label.indexOf(providerLabel) : -1;
24525
24553
  if (!shouldEmphasizeEmptyHeroProvider(label) || providerStart < 0) {
24526
- return /* @__PURE__ */ jsx30(Fragment8, { children: label });
24554
+ return /* @__PURE__ */ jsx31(Fragment8, { children: label });
24527
24555
  }
24528
24556
  const providerEnd = providerStart + providerLabel.length;
24529
24557
  return /* @__PURE__ */ jsxs17(Fragment8, { children: [
24530
24558
  label.slice(0, providerStart),
24531
- /* @__PURE__ */ jsx30("span", { className: AgentGUINode_styles_default.emptyHeroProvider, children: label.slice(providerStart, providerEnd) }),
24559
+ /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.emptyHeroProvider, children: label.slice(providerStart, providerEnd) }),
24532
24560
  label.slice(providerEnd)
24533
24561
  ] });
24534
24562
  }
@@ -24570,12 +24598,12 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
24570
24598
  className: AgentGUINode_styles_default.bottomDock,
24571
24599
  "data-testid": "agent-gui-bottom-dock",
24572
24600
  children: [
24573
- bottomDockLiftedPrompt ? /* @__PURE__ */ jsx30(
24601
+ bottomDockLiftedPrompt ? /* @__PURE__ */ jsx31(
24574
24602
  "div",
24575
24603
  {
24576
24604
  className: AgentGUINode_styles_default.bottomDockPrompt,
24577
24605
  "data-testid": "agent-gui-bottom-dock-active-prompt",
24578
- children: /* @__PURE__ */ jsx30(
24606
+ children: /* @__PURE__ */ jsx31(
24579
24607
  AgentInteractivePromptSurface,
24580
24608
  {
24581
24609
  prompt: bottomDockLiftedPrompt,
@@ -24590,7 +24618,7 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
24590
24618
  )
24591
24619
  }
24592
24620
  ) : null,
24593
- inlineNoticeChrome ? /* @__PURE__ */ jsx30(
24621
+ inlineNoticeChrome ? /* @__PURE__ */ jsx31(
24594
24622
  AgentSessionChrome,
24595
24623
  {
24596
24624
  chrome: inlineNoticeChrome,
@@ -24602,7 +24630,7 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
24602
24630
  labels: chromeLabels
24603
24631
  }
24604
24632
  ) : null,
24605
- /* @__PURE__ */ jsx30(
24633
+ /* @__PURE__ */ jsx31(
24606
24634
  AgentSessionChrome,
24607
24635
  {
24608
24636
  chrome: sessionChrome,
@@ -24614,7 +24642,7 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
24614
24642
  labels: chromeLabels
24615
24643
  }
24616
24644
  ),
24617
- showGoalBanner ? /* @__PURE__ */ jsx30(
24645
+ showGoalBanner ? /* @__PURE__ */ jsx31(
24618
24646
  AgentGoalBanner,
24619
24647
  {
24620
24648
  objective: goalObjective,
@@ -24624,12 +24652,12 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
24624
24652
  labels: goalBannerLabels
24625
24653
  }
24626
24654
  ) : null,
24627
- bottomDockReplacementPrompt ? /* @__PURE__ */ jsx30(
24655
+ bottomDockReplacementPrompt ? /* @__PURE__ */ jsx31(
24628
24656
  "div",
24629
24657
  {
24630
24658
  className: AgentGUINode_styles_default.bottomDockPrompt,
24631
24659
  "data-testid": "agent-gui-bottom-dock-active-prompt",
24632
- children: /* @__PURE__ */ jsx30(
24660
+ children: /* @__PURE__ */ jsx31(
24633
24661
  AgentInteractivePromptSurface,
24634
24662
  {
24635
24663
  prompt: bottomDockReplacementPrompt,
@@ -24643,7 +24671,7 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
24643
24671
  }
24644
24672
  )
24645
24673
  }
24646
- ) : /* @__PURE__ */ jsx30(AgentComposer, { ...composerProps })
24674
+ ) : /* @__PURE__ */ jsx31(AgentComposer, { ...composerProps })
24647
24675
  ]
24648
24676
  }
24649
24677
  );
@@ -24669,7 +24697,7 @@ var AgentGUIConversationRailStorePane = memo(
24669
24697
  }) {
24670
24698
  "use memo";
24671
24699
  const state = useSnapshot(store);
24672
- return /* @__PURE__ */ jsx30(
24700
+ return /* @__PURE__ */ jsx31(
24673
24701
  AgentGUIConversationRailPane,
24674
24702
  {
24675
24703
  ...state,
@@ -24891,7 +24919,7 @@ var AgentGUIConversationRailPane = memo(
24891
24919
  "aria-hidden": isCollapsed ? "true" : void 0,
24892
24920
  children: [
24893
24921
  /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.railToolbar, children: [
24894
- /* @__PURE__ */ jsx30(
24922
+ /* @__PURE__ */ jsx31(
24895
24923
  TaskSearchField,
24896
24924
  {
24897
24925
  value: conversationQuery,
@@ -24910,14 +24938,14 @@ var AgentGUIConversationRailPane = memo(
24910
24938
  disabled: createConversationDisabled,
24911
24939
  onClick: () => onCreateConversation(),
24912
24940
  children: [
24913
- /* @__PURE__ */ jsx30(CreateChatIcon, { "aria-hidden": "true" }),
24914
- /* @__PURE__ */ jsx30("span", { children: labels.newConversation })
24941
+ /* @__PURE__ */ jsx31(CreateChatIcon, { "aria-hidden": "true" }),
24942
+ /* @__PURE__ */ jsx31("span", { children: labels.newConversation })
24915
24943
  ]
24916
24944
  }
24917
24945
  )
24918
24946
  ] }),
24919
24947
  openclawGateway?.status === "starting" ? /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.gatewayStatus, "data-state": "starting", children: [
24920
- /* @__PURE__ */ jsx30(
24948
+ /* @__PURE__ */ jsx31(
24921
24949
  StatusDot,
24922
24950
  {
24923
24951
  tone: "blue",
@@ -24926,10 +24954,10 @@ var AgentGUIConversationRailPane = memo(
24926
24954
  ariaLabel: labels.openclawGatewayStarting
24927
24955
  }
24928
24956
  ),
24929
- /* @__PURE__ */ jsx30("span", { children: labels.openclawGatewayStarting })
24957
+ /* @__PURE__ */ jsx31("span", { children: labels.openclawGatewayStarting })
24930
24958
  ] }) : openclawGateway?.status === "failed" ? /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.gatewayStatus, "data-state": "failed", children: [
24931
- /* @__PURE__ */ jsx30("span", { children: openclawGateway.error || labels.openclawGatewayFailed }),
24932
- /* @__PURE__ */ jsx30(
24959
+ /* @__PURE__ */ jsx31("span", { children: openclawGateway.error || labels.openclawGatewayFailed }),
24960
+ /* @__PURE__ */ jsx31(
24933
24961
  "button",
24934
24962
  {
24935
24963
  type: "button",
@@ -24939,19 +24967,19 @@ var AgentGUIConversationRailPane = memo(
24939
24967
  }
24940
24968
  )
24941
24969
  ] }) : null,
24942
- /* @__PURE__ */ jsx30(
24970
+ /* @__PURE__ */ jsx31(
24943
24971
  ScrollArea,
24944
24972
  {
24945
24973
  scrollbarMode: "native",
24946
24974
  className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100",
24947
24975
  viewportRef: conversationListRef,
24948
24976
  viewportClassName: AgentGUINode_styles_default.conversationList,
24949
- children: isLoadingConversations && conversations.length === 0 ? /* @__PURE__ */ jsx30(
24977
+ children: isLoadingConversations && conversations.length === 0 ? /* @__PURE__ */ jsx31(
24950
24978
  AgentConversationListSkeleton,
24951
24979
  {
24952
24980
  label: labels.loadingConversations
24953
24981
  }
24954
- ) : groupedConversations.length === 0 ? /* @__PURE__ */ jsx30("div", { className: AgentGUINode_styles_default.emptyState, children: /* @__PURE__ */ jsx30("span", { children: conversations.length === 0 ? labels.noConversations : conversationQuery.trim() ? labels.searchNoConversations : labels.conversationUnavailable }) }) : groupedConversations.map((section, sectionIndex) => {
24982
+ ) : groupedConversations.length === 0 ? /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.emptyState, children: /* @__PURE__ */ jsx31("span", { children: conversations.length === 0 ? labels.noConversations : conversationQuery.trim() ? labels.searchNoConversations : labels.conversationUnavailable }) }) : groupedConversations.map((section, sectionIndex) => {
24955
24983
  const projectPath = section.kind === "project" ? section.project?.path ?? "" : "";
24956
24984
  const normalizedProjectPath = normalizeConversationRailProjectPath(projectPath);
24957
24985
  const projectLabel = section.kind === "project" ? section.label : "";
@@ -24960,7 +24988,7 @@ var AgentGUIConversationRailPane = memo(
24960
24988
  const isSectionCollapsed = isProjectSection && collapsedProjectSectionIds.has(section.id);
24961
24989
  const projectConversationCount = normalizedProjectPath ? projectConversationCountsByPath.get(normalizedProjectPath) ?? 0 : 0;
24962
24990
  return /* @__PURE__ */ jsxs17(Fragment7, { children: [
24963
- showProjectRailHeader ? /* @__PURE__ */ jsx30(
24991
+ showProjectRailHeader ? /* @__PURE__ */ jsx31(
24964
24992
  AgentGUIProjectRailHeader,
24965
24993
  {
24966
24994
  labels,
@@ -24968,7 +24996,7 @@ var AgentGUIConversationRailPane = memo(
24968
24996
  workspaceUserProjectI18n
24969
24997
  }
24970
24998
  ) : null,
24971
- /* @__PURE__ */ jsx30(
24999
+ /* @__PURE__ */ jsx31(
24972
25000
  AgentGUIConversationRailSection,
24973
25001
  {
24974
25002
  activeConversationId,
@@ -25001,8 +25029,8 @@ var AgentGUIConversationRailPane = memo(
25001
25029
  })
25002
25030
  }
25003
25031
  ),
25004
- /* @__PURE__ */ jsx30("div", { className: "shrink-0 px-2 py-1.5", children: /* @__PURE__ */ jsxs17(Popover, { children: [
25005
- /* @__PURE__ */ jsx30(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs17(
25032
+ /* @__PURE__ */ jsx31("div", { className: "shrink-0 px-2 py-1.5", children: /* @__PURE__ */ jsxs17(Popover, { children: [
25033
+ /* @__PURE__ */ jsx31(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs17(
25006
25034
  Button,
25007
25035
  {
25008
25036
  type: "button",
@@ -25011,7 +25039,7 @@ var AgentGUIConversationRailPane = memo(
25011
25039
  title: labels.agentConfig,
25012
25040
  disabled: previewMode,
25013
25041
  children: [
25014
- /* @__PURE__ */ jsx30(
25042
+ /* @__PURE__ */ jsx31(
25015
25043
  EnvironmentLinedIcon,
25016
25044
  {
25017
25045
  "aria-hidden": "true",
@@ -25019,11 +25047,11 @@ var AgentGUIConversationRailPane = memo(
25019
25047
  height: 16
25020
25048
  }
25021
25049
  ),
25022
- /* @__PURE__ */ jsx30("span", { children: labels.agentConfig })
25050
+ /* @__PURE__ */ jsx31("span", { children: labels.agentConfig })
25023
25051
  ]
25024
25052
  }
25025
25053
  ) }),
25026
- /* @__PURE__ */ jsx30(
25054
+ /* @__PURE__ */ jsx31(
25027
25055
  PopoverContent,
25028
25056
  {
25029
25057
  side: "top",
@@ -25033,8 +25061,8 @@ var AgentGUIConversationRailPane = memo(
25033
25061
  children: /* @__PURE__ */ jsxs17("div", { className: "flex min-w-0 flex-col gap-3", children: [
25034
25062
  slashStatusLimits.length > 0 ? /* @__PURE__ */ jsxs17(Fragment8, { children: [
25035
25063
  /* @__PURE__ */ jsxs17("div", { className: "flex min-w-0 flex-col gap-2", children: [
25036
- /* @__PURE__ */ jsx30("span", { className: "text-[13px] font-semibold leading-4", children: labels.slashStatusLimits }),
25037
- slashStatusLimits.map((limit) => /* @__PURE__ */ jsx30(
25064
+ /* @__PURE__ */ jsx31("span", { className: "text-[13px] font-semibold leading-4", children: labels.slashStatusLimits }),
25065
+ slashStatusLimits.map((limit) => /* @__PURE__ */ jsx31(
25038
25066
  AgentUsageMeter,
25039
25067
  {
25040
25068
  label: limit.label,
@@ -25044,7 +25072,7 @@ var AgentGUIConversationRailPane = memo(
25044
25072
  limit.id
25045
25073
  ))
25046
25074
  ] }),
25047
- /* @__PURE__ */ jsx30("span", { className: "h-px bg-[var(--border-1)]" })
25075
+ /* @__PURE__ */ jsx31("span", { className: "h-px bg-[var(--border-1)]" })
25048
25076
  ] }) : null,
25049
25077
  /* @__PURE__ */ jsxs17(
25050
25078
  "button",
@@ -25055,8 +25083,8 @@ var AgentGUIConversationRailPane = memo(
25055
25083
  disabled: previewMode,
25056
25084
  onClick: () => onOpenAgentEnvSetup(),
25057
25085
  children: [
25058
- /* @__PURE__ */ jsx30(Wrench, { "aria-hidden": "true", size: 16, strokeWidth: 1.8 }),
25059
- /* @__PURE__ */ jsx30("span", { children: labels.agentEnvSetup })
25086
+ /* @__PURE__ */ jsx31(Wrench, { "aria-hidden": "true", size: 16, strokeWidth: 1.8 }),
25087
+ /* @__PURE__ */ jsx31("span", { children: labels.agentEnvSetup })
25060
25088
  ]
25061
25089
  }
25062
25090
  )
@@ -25064,7 +25092,7 @@ var AgentGUIConversationRailPane = memo(
25064
25092
  }
25065
25093
  )
25066
25094
  ] }) }),
25067
- /* @__PURE__ */ jsx30(
25095
+ /* @__PURE__ */ jsx31(
25068
25096
  ConfirmationDialog,
25069
25097
  {
25070
25098
  cancelLabel: labels.cancel,
@@ -25187,7 +25215,7 @@ var AgentGUIConversationRailSection = memo(
25187
25215
  "aria-expanded": !isSectionCollapsed,
25188
25216
  onClick: () => onToggleProjectSectionCollapsed(section.id),
25189
25217
  children: [
25190
- /* @__PURE__ */ jsx30(
25218
+ /* @__PURE__ */ jsx31(
25191
25219
  ChevronRight2,
25192
25220
  {
25193
25221
  "aria-hidden": "true",
@@ -25195,20 +25223,20 @@ var AgentGUIConversationRailSection = memo(
25195
25223
  }
25196
25224
  ),
25197
25225
  /* @__PURE__ */ jsxs17("span", { className: AgentGUINode_styles_default.conversationSectionLabel, children: [
25198
- /* @__PURE__ */ jsx30(
25226
+ /* @__PURE__ */ jsx31(
25199
25227
  FolderIcon2,
25200
25228
  {
25201
25229
  "aria-hidden": "true",
25202
25230
  className: AgentGUINode_styles_default.conversationSectionLabelIcon
25203
25231
  }
25204
25232
  ),
25205
- /* @__PURE__ */ jsx30("span", { children: section.label })
25233
+ /* @__PURE__ */ jsx31("span", { children: section.label })
25206
25234
  ] })
25207
25235
  ]
25208
25236
  }
25209
- ) : /* @__PURE__ */ jsx30("div", { className: AgentGUINode_styles_default.conversationSectionToggle, children: /* @__PURE__ */ jsx30("span", { className: AgentGUINode_styles_default.conversationSectionLabel, children: /* @__PURE__ */ jsx30("span", { children: section.label }) }) }),
25237
+ ) : /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.conversationSectionToggle, children: /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.conversationSectionLabel, children: /* @__PURE__ */ jsx31("span", { children: section.label }) }) }),
25210
25238
  canCreateConversationFromSection ? /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.conversationSectionActions, children: [
25211
- previewMode ? /* @__PURE__ */ jsx30("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: /* @__PURE__ */ jsx30(
25239
+ previewMode ? /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: /* @__PURE__ */ jsx31(
25212
25240
  BareIconButton,
25213
25241
  {
25214
25242
  className: AgentGUINode_styles_default.conversationSectionMoreButton,
@@ -25216,14 +25244,14 @@ var AgentGUIConversationRailSection = memo(
25216
25244
  size: "sm",
25217
25245
  disabled: createConversationDisabled,
25218
25246
  onClick: handleCreateConversation,
25219
- children: /* @__PURE__ */ jsx30(CreateChatIcon, { "aria-hidden": "true" })
25247
+ children: /* @__PURE__ */ jsx31(CreateChatIcon, { "aria-hidden": "true" })
25220
25248
  }
25221
25249
  ) }) : /* @__PURE__ */ jsxs17(Tooltip3, { children: [
25222
- /* @__PURE__ */ jsx30(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx30(
25250
+ /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx31(
25223
25251
  "span",
25224
25252
  {
25225
25253
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
25226
- children: /* @__PURE__ */ jsx30(
25254
+ children: /* @__PURE__ */ jsx31(
25227
25255
  BareIconButton,
25228
25256
  {
25229
25257
  className: AgentGUINode_styles_default.conversationSectionMoreButton,
@@ -25231,12 +25259,12 @@ var AgentGUIConversationRailSection = memo(
25231
25259
  size: "sm",
25232
25260
  disabled: createConversationDisabled,
25233
25261
  onClick: handleCreateConversation,
25234
- children: /* @__PURE__ */ jsx30(CreateChatIcon, { "aria-hidden": "true" })
25262
+ children: /* @__PURE__ */ jsx31(CreateChatIcon, { "aria-hidden": "true" })
25235
25263
  }
25236
25264
  )
25237
25265
  }
25238
25266
  ) }),
25239
- /* @__PURE__ */ jsx30(
25267
+ /* @__PURE__ */ jsx31(
25240
25268
  TooltipContent3,
25241
25269
  {
25242
25270
  side: "top",
@@ -25247,37 +25275,37 @@ var AgentGUIConversationRailSection = memo(
25247
25275
  )
25248
25276
  ] }),
25249
25277
  projectPath ? /* @__PURE__ */ jsxs17(DropdownMenu, { children: [
25250
- previewMode ? /* @__PURE__ */ jsx30(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx30(
25278
+ previewMode ? /* @__PURE__ */ jsx31(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx31(
25251
25279
  "span",
25252
25280
  {
25253
25281
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
25254
- children: /* @__PURE__ */ jsx30(
25282
+ children: /* @__PURE__ */ jsx31(
25255
25283
  BareIconButton,
25256
25284
  {
25257
25285
  className: AgentGUINode_styles_default.conversationSectionMoreButton,
25258
25286
  "aria-label": labels.projectSectionMoreActions,
25259
25287
  size: "sm",
25260
- children: /* @__PURE__ */ jsx30(MoreHorizontalIcon, { "aria-hidden": "true" })
25288
+ children: /* @__PURE__ */ jsx31(MoreHorizontalIcon, { "aria-hidden": "true" })
25261
25289
  }
25262
25290
  )
25263
25291
  }
25264
25292
  ) }) : /* @__PURE__ */ jsxs17(Tooltip3, { children: [
25265
- /* @__PURE__ */ jsx30(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx30(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx30(
25293
+ /* @__PURE__ */ jsx31(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx31(
25266
25294
  "span",
25267
25295
  {
25268
25296
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
25269
- children: /* @__PURE__ */ jsx30(
25297
+ children: /* @__PURE__ */ jsx31(
25270
25298
  BareIconButton,
25271
25299
  {
25272
25300
  className: AgentGUINode_styles_default.conversationSectionMoreButton,
25273
25301
  "aria-label": labels.projectSectionMoreActions,
25274
25302
  size: "sm",
25275
- children: /* @__PURE__ */ jsx30(MoreHorizontalIcon, { "aria-hidden": "true" })
25303
+ children: /* @__PURE__ */ jsx31(MoreHorizontalIcon, { "aria-hidden": "true" })
25276
25304
  }
25277
25305
  )
25278
25306
  }
25279
25307
  ) }) }),
25280
- /* @__PURE__ */ jsx30(
25308
+ /* @__PURE__ */ jsx31(
25281
25309
  TooltipContent3,
25282
25310
  {
25283
25311
  side: "right",
@@ -25294,7 +25322,7 @@ var AgentGUIConversationRailSection = memo(
25294
25322
  className: `${AgentGUINode_styles_default.composerMenuContent} nodrag [-webkit-app-region:no-drag]`,
25295
25323
  sideOffset: 6,
25296
25324
  children: [
25297
- /* @__PURE__ */ jsx30(
25325
+ /* @__PURE__ */ jsx31(
25298
25326
  DropdownMenuItem,
25299
25327
  {
25300
25328
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
@@ -25309,10 +25337,10 @@ var AgentGUIConversationRailSection = memo(
25309
25337
  workspaceRoot: projectPath
25310
25338
  });
25311
25339
  },
25312
- children: /* @__PURE__ */ jsx30("span", { children: labels.projectSectionViewFiles })
25340
+ children: /* @__PURE__ */ jsx31("span", { children: labels.projectSectionViewFiles })
25313
25341
  }
25314
25342
  ),
25315
- projectConversationCount > 0 ? /* @__PURE__ */ jsx30(
25343
+ projectConversationCount > 0 ? /* @__PURE__ */ jsx31(
25316
25344
  DropdownMenuItem,
25317
25345
  {
25318
25346
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
@@ -25325,10 +25353,10 @@ var AgentGUIConversationRailSection = memo(
25325
25353
  path: projectPath
25326
25354
  });
25327
25355
  },
25328
- children: /* @__PURE__ */ jsx30("span", { children: labels.batchDeleteProjectSessions })
25356
+ children: /* @__PURE__ */ jsx31("span", { children: labels.batchDeleteProjectSessions })
25329
25357
  }
25330
25358
  ) : null,
25331
- /* @__PURE__ */ jsx30(
25359
+ /* @__PURE__ */ jsx31(
25332
25360
  DropdownMenuItem,
25333
25361
  {
25334
25362
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
@@ -25340,7 +25368,7 @@ var AgentGUIConversationRailSection = memo(
25340
25368
  path: projectPath
25341
25369
  });
25342
25370
  },
25343
- children: /* @__PURE__ */ jsx30("span", { children: labels.removeProject })
25371
+ children: /* @__PURE__ */ jsx31("span", { children: labels.removeProject })
25344
25372
  }
25345
25373
  )
25346
25374
  ]
@@ -25348,37 +25376,37 @@ var AgentGUIConversationRailSection = memo(
25348
25376
  )
25349
25377
  ] }) : null,
25350
25378
  !projectPath && section.kind === "conversations" && section.items.length > 0 ? /* @__PURE__ */ jsxs17(DropdownMenu, { children: [
25351
- previewMode ? /* @__PURE__ */ jsx30(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx30(
25379
+ previewMode ? /* @__PURE__ */ jsx31(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx31(
25352
25380
  "span",
25353
25381
  {
25354
25382
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
25355
- children: /* @__PURE__ */ jsx30(
25383
+ children: /* @__PURE__ */ jsx31(
25356
25384
  BareIconButton,
25357
25385
  {
25358
25386
  className: AgentGUINode_styles_default.conversationSectionMoreButton,
25359
25387
  "aria-label": labels.conversationsSectionMoreActions,
25360
25388
  size: "sm",
25361
- children: /* @__PURE__ */ jsx30(MoreHorizontalIcon, { "aria-hidden": "true" })
25389
+ children: /* @__PURE__ */ jsx31(MoreHorizontalIcon, { "aria-hidden": "true" })
25362
25390
  }
25363
25391
  )
25364
25392
  }
25365
25393
  ) }) : /* @__PURE__ */ jsxs17(Tooltip3, { children: [
25366
- /* @__PURE__ */ jsx30(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx30(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx30(
25394
+ /* @__PURE__ */ jsx31(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx31(
25367
25395
  "span",
25368
25396
  {
25369
25397
  className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap,
25370
- children: /* @__PURE__ */ jsx30(
25398
+ children: /* @__PURE__ */ jsx31(
25371
25399
  BareIconButton,
25372
25400
  {
25373
25401
  className: AgentGUINode_styles_default.conversationSectionMoreButton,
25374
25402
  "aria-label": labels.conversationsSectionMoreActions,
25375
25403
  size: "sm",
25376
- children: /* @__PURE__ */ jsx30(MoreHorizontalIcon, { "aria-hidden": "true" })
25404
+ children: /* @__PURE__ */ jsx31(MoreHorizontalIcon, { "aria-hidden": "true" })
25377
25405
  }
25378
25406
  )
25379
25407
  }
25380
25408
  ) }) }),
25381
- /* @__PURE__ */ jsx30(
25409
+ /* @__PURE__ */ jsx31(
25382
25410
  TooltipContent3,
25383
25411
  {
25384
25412
  side: "right",
@@ -25388,13 +25416,13 @@ var AgentGUIConversationRailSection = memo(
25388
25416
  }
25389
25417
  )
25390
25418
  ] }),
25391
- /* @__PURE__ */ jsx30(
25419
+ /* @__PURE__ */ jsx31(
25392
25420
  DropdownMenuContent,
25393
25421
  {
25394
25422
  align: "end",
25395
25423
  className: `${AgentGUINode_styles_default.composerMenuContent} nodrag [-webkit-app-region:no-drag]`,
25396
25424
  sideOffset: 6,
25397
- children: /* @__PURE__ */ jsx30(
25425
+ children: /* @__PURE__ */ jsx31(
25398
25426
  DropdownMenuItem,
25399
25427
  {
25400
25428
  className: `${AgentGUINode_styles_default.composerMenuItem} nodrag [-webkit-app-region:no-drag]`,
@@ -25406,7 +25434,7 @@ var AgentGUIConversationRailSection = memo(
25406
25434
  sessionIds: section.items.map((item) => item.id)
25407
25435
  });
25408
25436
  },
25409
- children: /* @__PURE__ */ jsx30("span", { children: labels.batchDeleteConversations })
25437
+ children: /* @__PURE__ */ jsx31("span", { children: labels.batchDeleteConversations })
25410
25438
  }
25411
25439
  )
25412
25440
  }
@@ -25414,14 +25442,14 @@ var AgentGUIConversationRailSection = memo(
25414
25442
  ] }) : null
25415
25443
  ] }) : null
25416
25444
  ] }),
25417
- /* @__PURE__ */ jsx30(
25445
+ /* @__PURE__ */ jsx31(
25418
25446
  "div",
25419
25447
  {
25420
25448
  className: AgentGUINode_styles_default.conversationSectionItems,
25421
25449
  "aria-hidden": isSectionCollapsed ? "true" : void 0,
25422
25450
  children: /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.conversationSectionItemsInner, children: [
25423
- !isSectionCollapsed && section.items.length === 0 ? /* @__PURE__ */ jsx30("div", { className: AgentGUINode_styles_default.conversationSectionEmpty, children: labels.emptyProjectConversations }) : null,
25424
- visibleItems.map((item) => /* @__PURE__ */ jsx30(
25451
+ !isSectionCollapsed && section.items.length === 0 ? /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.conversationSectionEmpty, children: labels.emptyProjectConversations }) : null,
25452
+ visibleItems.map((item) => /* @__PURE__ */ jsx31(
25425
25453
  AgentGUIConversationRailItem,
25426
25454
  {
25427
25455
  active: item.id === activeConversationId,
@@ -25443,7 +25471,7 @@ var AgentGUIConversationRailSection = memo(
25443
25471
  item.id
25444
25472
  )),
25445
25473
  canShowMore || canShowLess ? /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.conversationSectionPagination, children: [
25446
- canShowMore ? /* @__PURE__ */ jsx30(
25474
+ canShowMore ? /* @__PURE__ */ jsx31(
25447
25475
  "button",
25448
25476
  {
25449
25477
  type: "button",
@@ -25452,7 +25480,7 @@ var AgentGUIConversationRailSection = memo(
25452
25480
  children: labels.showMoreConversations
25453
25481
  }
25454
25482
  ) : null,
25455
- canShowLess ? /* @__PURE__ */ jsx30(
25483
+ canShowLess ? /* @__PURE__ */ jsx31(
25456
25484
  "button",
25457
25485
  {
25458
25486
  type: "button",
@@ -25531,12 +25559,12 @@ var AgentGUIConversationRailItem = memo(
25531
25559
  className: AgentGUINode_styles_default.conversationSelect,
25532
25560
  onClick: handleSelect,
25533
25561
  children: [
25534
- /* @__PURE__ */ jsx30("span", { className: AgentGUINode_styles_default.conversationTitle, children: conversationPlainTitle(item, labels, uiLanguage) }),
25535
- /* @__PURE__ */ jsx30(ConversationMeta, { item, nowMs: currentTimeMs, labels })
25562
+ /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.conversationTitle, children: conversationPlainTitle(item, labels, uiLanguage) }),
25563
+ /* @__PURE__ */ jsx31(ConversationMeta, { item, nowMs: currentTimeMs, labels })
25536
25564
  ]
25537
25565
  }
25538
25566
  ),
25539
- previewMode ? null : /* @__PURE__ */ jsx30("div", { className: AgentGUINode_styles_default.conversationActions, children: isPendingDeleteConversation ? /* @__PURE__ */ jsx30(
25567
+ previewMode ? null : /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.conversationActions, children: isPendingDeleteConversation ? /* @__PURE__ */ jsx31(
25540
25568
  "button",
25541
25569
  {
25542
25570
  type: "button",
@@ -25548,10 +25576,10 @@ var AgentGUIConversationRailItem = memo(
25548
25576
  event.stopPropagation();
25549
25577
  onConfirmDeleteConversation();
25550
25578
  },
25551
- children: /* @__PURE__ */ jsx30("span", { className: AgentGUINode_styles_default.conversationDeleteConfirmText, children: labels.deleteSessionConfirm })
25579
+ children: /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.conversationDeleteConfirmText, children: labels.deleteSessionConfirm })
25552
25580
  }
25553
25581
  ) : /* @__PURE__ */ jsxs17(Fragment8, { children: [
25554
- onOpenConversationWindow ? /* @__PURE__ */ jsx30(
25582
+ onOpenConversationWindow ? /* @__PURE__ */ jsx31(
25555
25583
  BareIconButton,
25556
25584
  {
25557
25585
  className: AgentGUINode_styles_default.conversationOpenWindowButton,
@@ -25568,10 +25596,10 @@ var AgentGUIConversationRailItem = memo(
25568
25596
  event.stopPropagation();
25569
25597
  handleOpenConversationWindow();
25570
25598
  },
25571
- children: /* @__PURE__ */ jsx30(ExternalLink, { "aria-hidden": "true" })
25599
+ children: /* @__PURE__ */ jsx31(ExternalLink, { "aria-hidden": "true" })
25572
25600
  }
25573
25601
  ) : null,
25574
- /* @__PURE__ */ jsx30(
25602
+ /* @__PURE__ */ jsx31(
25575
25603
  BareIconButton,
25576
25604
  {
25577
25605
  className: AgentGUINode_styles_default.conversationPinButton,
@@ -25588,10 +25616,10 @@ var AgentGUIConversationRailItem = memo(
25588
25616
  event.stopPropagation();
25589
25617
  handleTogglePinned();
25590
25618
  },
25591
- children: pinned ? /* @__PURE__ */ jsx30(PinFilledIcon, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx30(PinLinedIcon, { "aria-hidden": "true" })
25619
+ children: pinned ? /* @__PURE__ */ jsx31(PinFilledIcon, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx31(PinLinedIcon, { "aria-hidden": "true" })
25592
25620
  }
25593
25621
  ),
25594
- /* @__PURE__ */ jsx30(
25622
+ /* @__PURE__ */ jsx31(
25595
25623
  BareIconButton,
25596
25624
  {
25597
25625
  className: AgentGUINode_styles_default.conversationDeleteButton,
@@ -25608,7 +25636,7 @@ var AgentGUIConversationRailItem = memo(
25608
25636
  event.stopPropagation();
25609
25637
  handleRequestDelete();
25610
25638
  },
25611
- children: /* @__PURE__ */ jsx30(CanvasNodeTrashLinedIcon, { "aria-hidden": "true" })
25639
+ children: /* @__PURE__ */ jsx31(CanvasNodeTrashLinedIcon, { "aria-hidden": "true" })
25612
25640
  }
25613
25641
  )
25614
25642
  ] }) })
@@ -25636,9 +25664,9 @@ function AgentGUIProjectRailHeader({
25636
25664
  ]
25637
25665
  );
25638
25666
  return /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.projectRailHeader, children: [
25639
- /* @__PURE__ */ jsx30("div", { className: AgentGUINode_styles_default.projectRailTitle, children: /* @__PURE__ */ jsx30("span", { children: workspaceUserProjectI18n.tFirst(["projectSelect.projectLabel"]) }) }),
25667
+ /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.projectRailTitle, children: /* @__PURE__ */ jsx31("span", { children: workspaceUserProjectI18n.tFirst(["projectSelect.projectLabel"]) }) }),
25640
25668
  /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.projectRailAddProject, children: [
25641
- /* @__PURE__ */ jsx30(
25669
+ /* @__PURE__ */ jsx31(
25642
25670
  WorkspaceUserProjectSelect2,
25643
25671
  {
25644
25672
  api: userProjectApi,
@@ -25668,7 +25696,7 @@ function AgentGUIProjectRailHeader({
25668
25696
  "projectSelect.addProject"
25669
25697
  ])
25670
25698
  },
25671
- renderAddProjectIcon: () => /* @__PURE__ */ jsx30(
25699
+ renderAddProjectIcon: () => /* @__PURE__ */ jsx31(
25672
25700
  NewWorkspaceLinedIcon2,
25673
25701
  {
25674
25702
  "aria-hidden": true,
@@ -25686,7 +25714,7 @@ function AgentGUIProjectRailHeader({
25686
25714
  }
25687
25715
  }
25688
25716
  ),
25689
- /* @__PURE__ */ jsx30(
25717
+ /* @__PURE__ */ jsx31(
25690
25718
  NewWorkspaceLinedIcon2,
25691
25719
  {
25692
25720
  "aria-hidden": true,
@@ -25712,16 +25740,16 @@ var AgentGUIConversationTimelinePane = memo(
25712
25740
  }) {
25713
25741
  "use memo";
25714
25742
  return /* @__PURE__ */ jsxs17(Fragment8, { children: [
25715
- isLoadingOlderMessages && !isLoading ? /* @__PURE__ */ jsx30(
25743
+ isLoadingOlderMessages && !isLoading ? /* @__PURE__ */ jsx31(
25716
25744
  "div",
25717
25745
  {
25718
25746
  className: "mx-auto flex h-8 items-center justify-center text-[12px] text-[var(--text-secondary)]",
25719
25747
  "data-testid": "agent-gui-older-messages-loading",
25720
25748
  role: "status",
25721
- children: /* @__PURE__ */ jsx30("span", { className: "tsh-inline-loading-ellipsis", children: loadingLabel })
25749
+ children: /* @__PURE__ */ jsx31("span", { className: "tsh-inline-loading-ellipsis", children: loadingLabel })
25722
25750
  }
25723
25751
  ) : null,
25724
- /* @__PURE__ */ jsx30(
25752
+ /* @__PURE__ */ jsx31(
25725
25753
  AgentConversationFlow,
25726
25754
  {
25727
25755
  conversation,
@@ -25942,7 +25970,7 @@ import {
25942
25970
  useState as useState13
25943
25971
  } from "react";
25944
25972
  import { createPortal as createPortal4 } from "react-dom";
25945
- import { Fragment as Fragment9, jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
25973
+ import { Fragment as Fragment9, jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
25946
25974
  var POPOVER_MIN_VIEWPORT_INSET_PX = 16;
25947
25975
  var POPOVER_DEFAULT_WIDTH_PX = 260;
25948
25976
  function dockAgentProbeLineKey(line) {
@@ -25956,7 +25984,7 @@ function renderDockAgentProbeLine(line) {
25956
25984
  line.primary,
25957
25985
  line.secondary ? /* @__PURE__ */ jsxs18(Fragment9, { children: [
25958
25986
  " ",
25959
- /* @__PURE__ */ jsx31("span", { className: "desktop-dock-popup__agent-status-secondary", children: line.secondary })
25987
+ /* @__PURE__ */ jsx32("span", { className: "desktop-dock-popup__agent-status-secondary", children: line.secondary })
25960
25988
  ] }) : null
25961
25989
  ] });
25962
25990
  }
@@ -26033,7 +26061,7 @@ function AgentProbeInfoPopover({
26033
26061
  if (lines.length === 0) {
26034
26062
  return null;
26035
26063
  }
26036
- const popover = /* @__PURE__ */ jsx31(
26064
+ const popover = /* @__PURE__ */ jsx32(
26037
26065
  "div",
26038
26066
  {
26039
26067
  ref: popoverRef,
@@ -26042,7 +26070,7 @@ function AgentProbeInfoPopover({
26042
26070
  style: popoverStyle ?? void 0,
26043
26071
  onMouseEnter: () => setIsOpen(true),
26044
26072
  onMouseLeave: closeIfPointerLeavesPopover,
26045
- children: /* @__PURE__ */ jsx31("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
26073
+ children: /* @__PURE__ */ jsx32("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
26046
26074
  const label = getDockAgentProbeLineLabel(line);
26047
26075
  const valueText = formatDockAgentProbeLineText(line);
26048
26076
  return /* @__PURE__ */ jsxs18(
@@ -26051,8 +26079,8 @@ function AgentProbeInfoPopover({
26051
26079
  className: "desktop-dock-popup__agent-info-item",
26052
26080
  "data-has-label": label ? "true" : "false",
26053
26081
  children: [
26054
- label ? /* @__PURE__ */ jsx31("span", { className: "desktop-dock-popup__agent-info-label", children: label }) : null,
26055
- /* @__PURE__ */ jsx31(
26082
+ label ? /* @__PURE__ */ jsx32("span", { className: "desktop-dock-popup__agent-info-label", children: label }) : null,
26083
+ /* @__PURE__ */ jsx32(
26056
26084
  "span",
26057
26085
  {
26058
26086
  className: "desktop-dock-popup__agent-info-value",
@@ -26087,7 +26115,7 @@ function AgentProbeInfoPopover({
26087
26115
  },
26088
26116
  onBlur: () => setIsOpen(false),
26089
26117
  children: [
26090
- /* @__PURE__ */ jsx31(Info3, { size: 15, strokeWidth: 2.1, "aria-hidden": "true" }),
26118
+ /* @__PURE__ */ jsx32(Info3, { size: 15, strokeWidth: 2.1, "aria-hidden": "true" }),
26091
26119
  isOpen ? createPortal4(popover, document.body) : null
26092
26120
  ]
26093
26121
  }
@@ -26230,7 +26258,7 @@ function getAgentHostManagedToolchainAgentByName(name) {
26230
26258
  }
26231
26259
 
26232
26260
  // agent-gui/agentGuiNode/AgentGUINode.tsx
26233
- import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
26261
+ import { jsx as jsx33, jsxs as jsxs19 } from "react/jsx-runtime";
26234
26262
  var workspaceFileReferenceLocaleKeyByPickerKey = {
26235
26263
  "actions.cancel": "common.cancel",
26236
26264
  "referencePicker.confirm": "agentHost.agentGui.referencePicker.confirm",
@@ -27208,13 +27236,13 @@ var AgentGUINode = memo2(function AgentGUINode2({
27208
27236
  onAgentProbeDemandChange(null, probeSourceId);
27209
27237
  };
27210
27238
  }, [activeProbeProvider, nodeId, onAgentProbeDemandChange, previewMode]);
27211
- return /* @__PURE__ */ jsx32(
27239
+ return /* @__PURE__ */ jsx33(
27212
27240
  WorkspaceNodeWindow,
27213
27241
  {
27214
27242
  nodeId,
27215
27243
  kind: "agentGui",
27216
27244
  title: windowTitle,
27217
- titleIcon: windowTitleIconUrl ? /* @__PURE__ */ jsx32(
27245
+ titleIcon: windowTitleIconUrl ? /* @__PURE__ */ jsx33(
27218
27246
  "img",
27219
27247
  {
27220
27248
  src: windowTitleIconUrl,
@@ -27235,7 +27263,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
27235
27263
  bodyClassName: `${AgentGUINode_styles_default.shell} nodrag size-full min-h-0 min-w-0 !bg-transparent p-0`,
27236
27264
  hideHeader: embedded,
27237
27265
  titleAccessory: /* @__PURE__ */ jsxs19("span", { className: "inline-flex flex-none items-center gap-1", children: [
27238
- /* @__PURE__ */ jsx32(
27266
+ /* @__PURE__ */ jsx33(
27239
27267
  AgentProbeInfoPopover,
27240
27268
  {
27241
27269
  lines: agentProbeLines,
@@ -27243,7 +27271,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
27243
27271
  className: AgentGUINode_styles_default.windowAgentInfo
27244
27272
  }
27245
27273
  ),
27246
- /* @__PURE__ */ jsx32(
27274
+ /* @__PURE__ */ jsx33(
27247
27275
  CanvasNodeGhostIconButton,
27248
27276
  {
27249
27277
  "aria-label": isConversationRailCollapsed ? t("agentHost.agentGui.expandConversationRail") : t("agentHost.agentGui.collapseConversationRail"),
@@ -27255,7 +27283,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
27255
27283
  event.stopPropagation();
27256
27284
  handleConversationRailToggle();
27257
27285
  },
27258
- children: /* @__PURE__ */ jsx32(
27286
+ children: /* @__PURE__ */ jsx33(
27259
27287
  CanvasNodePanelLinedIcon,
27260
27288
  {
27261
27289
  width: 18,
@@ -27276,7 +27304,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
27276
27304
  children: (renderFrame) => {
27277
27305
  const renderedWidth = renderFrame.size.width;
27278
27306
  const isRenderedConversationRailCollapsed = isConversationRailCollapsed || shouldAutoCollapseAgentGUIConversationRail(renderedWidth);
27279
- return /* @__PURE__ */ jsx32(
27307
+ return /* @__PURE__ */ jsx33(
27280
27308
  AgentGUINodeView,
27281
27309
  {
27282
27310
  viewModel,
@@ -27326,23 +27354,24 @@ var AgentGUINode = memo2(function AgentGUINode2({
27326
27354
  }, areAgentGUINodePropsEqual);
27327
27355
 
27328
27356
  // AgentGUI.tsx
27329
- import { jsx as jsx33 } from "react/jsx-runtime";
27357
+ import { jsx as jsx34 } from "react/jsx-runtime";
27330
27358
  var AgentGUI = memo3(function AgentGUI2({
27331
27359
  agentActivityRuntime,
27360
+ agentQueuedPromptRuntime,
27332
27361
  agentHostApi,
27333
27362
  i18n,
27334
27363
  locale,
27335
27364
  ...props
27336
27365
  }) {
27337
- const content = /* @__PURE__ */ jsx33(AgentGuiI18nProvider, { runtime: i18n, locale, children: /* @__PURE__ */ jsx33(
27366
+ const content = /* @__PURE__ */ jsx34(AgentGuiI18nProvider, { runtime: i18n, locale, children: /* @__PURE__ */ jsx34(
27338
27367
  AgentActivityHostProvider,
27339
27368
  {
27340
27369
  agentActivityRuntime,
27341
27370
  agentHostApi,
27342
- children: /* @__PURE__ */ jsx33(AgentGUINode, { ...props })
27371
+ children: /* @__PURE__ */ jsx34(AgentQueuedPromptRuntimeProvider, { runtime: agentQueuedPromptRuntime, children: /* @__PURE__ */ jsx34(AgentGUINode, { ...props }) })
27343
27372
  }
27344
27373
  ) });
27345
- return props.previewMode ? content : /* @__PURE__ */ jsx33(TooltipProvider3, { delayDuration: 120, skipDelayDuration: 0, children: content });
27374
+ return props.previewMode ? content : /* @__PURE__ */ jsx34(TooltipProvider3, { delayDuration: 120, skipDelayDuration: 0, children: content });
27346
27375
  });
27347
27376
 
27348
27377
  // index.ts
@@ -27356,6 +27385,7 @@ export {
27356
27385
  AgentActivityRuntimeProvider,
27357
27386
  AgentGUI,
27358
27387
  AgentGuiI18nProvider,
27388
+ AgentQueuedPromptRuntimeProvider,
27359
27389
  agentGUIDefaultTargetProviders,
27360
27390
  agentGuiDockIconUrl,
27361
27391
  agentGuiDockIconUrls,
@@ -27363,6 +27393,7 @@ export {
27363
27393
  agentGuiI18nResources,
27364
27394
  agentHostSnapshotFromAgentActivitySnapshot,
27365
27395
  buildAgentActivitySnapshotProjection,
27396
+ createAgentQueuedPromptRuntime,
27366
27397
  createLocalAgentGUIProviderTarget,
27367
27398
  createLocalAgentGUIProviderTargets,
27368
27399
  getAgentActivityRuntime,
@@ -27372,14 +27403,18 @@ export {
27372
27403
  preloadAgentMentionBrowse,
27373
27404
  projectCoreSessionStatus,
27374
27405
  resetAgentActivityRuntimeForTests,
27406
+ resetAgentQueuedPromptRuntimeForTests,
27375
27407
  resolveAgentGUIExpandedWindowFrame,
27376
27408
  resolveAgentGUIProviderTarget,
27377
27409
  selectNeedsAttentionCount2 as selectNeedsAttentionCount,
27378
27410
  selectNeedsAttentionItems2 as selectNeedsAttentionItems,
27379
27411
  setAgentActivityRuntimeForTests,
27412
+ setAgentQueuedPromptRuntimeForTests,
27380
27413
  shouldAutoCollapseAgentGUIConversationRail,
27381
27414
  useAgentActivityRuntime,
27382
27415
  useAgentActivitySnapshot,
27416
+ useAgentQueuedPromptRuntime,
27417
+ useAgentQueuedPromptSessionSnapshot,
27383
27418
  useOptionalAgentActivityRuntime
27384
27419
  };
27385
27420
  //# sourceMappingURL=index.js.map