@tutti-os/agent-gui 0.0.145 → 0.0.147

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.
@@ -12,7 +12,7 @@ import {
12
12
  resolveAgentGuiSessionProviderFlatIconUrl,
13
13
  resolveNextAgentGUIConversationRailWidthPx,
14
14
  shouldAutoCollapseAgentGUIConversationRail
15
- } from "./chunk-EGEYJLG2.js";
15
+ } from "./chunk-ZF65NZ4B.js";
16
16
  import {
17
17
  AGENT_PROVIDERS,
18
18
  AGENT_PROVIDER_LABEL,
@@ -51,6 +51,7 @@ import {
51
51
  emptyAgentComposerDraft,
52
52
  getAppErrorCode,
53
53
  isWorkspaceAgentToolCallItem,
54
+ loadCompleteAgentConversationMessages,
54
55
  materializePastedTextInstructions,
55
56
  normalizeAgentPromptContentBlocks,
56
57
  pastedTextPreview,
@@ -58,12 +59,13 @@ import {
58
59
  projectAgentConversationVM,
59
60
  resolveWorkspaceAgentNoticeCommandSemantics,
60
61
  resolveWorkspaceAgentToolName,
62
+ serializeAgentConversationForClipboard,
61
63
  snapshotAgentComposerDraft,
62
64
  textPromptContent,
63
65
  toLocalShortDateTime,
64
66
  updateAgentComposerDraft,
65
67
  useProjectedAgentConversation
66
- } from "./chunk-4DIYEFHH.js";
68
+ } from "./chunk-3CZYC2YN.js";
67
69
  import {
68
70
  agentRichTextContentToPromptText,
69
71
  createAgentRichTextInputExtensions,
@@ -97,9 +99,6 @@ import {
97
99
  agentGuiScheduler,
98
100
  buildWorkspaceAgentActivityListViewModel
99
101
  } from "./chunk-HMSN264L.js";
100
- import {
101
- isLocalImagePath
102
- } from "./chunk-JDVP33S5.js";
103
102
  import {
104
103
  AGENT_RICH_TEXT_CARET_ANCHOR,
105
104
  agentComposerFileMentionReferences,
@@ -181,10 +180,10 @@ import {
181
180
 
182
181
  // AgentGUI.tsx
183
182
  import { memo as memo15, useMemo as useMemo45 } from "react";
184
- import { TooltipProvider as TooltipProvider6 } from "@tutti-os/ui-system";
183
+ import { TooltipProvider as TooltipProvider7 } from "@tutti-os/ui-system";
185
184
 
186
185
  // agent-gui/agentGuiNode/AgentGUINode.tsx
187
- import { memo as memo14, useCallback as useCallback60, useEffect as useEffect40, useMemo as useMemo44, useRef as useRef51 } from "react";
186
+ import { memo as memo14, useCallback as useCallback61, useEffect as useEffect40, useMemo as useMemo44, useRef as useRef51 } from "react";
188
187
  import { createWorkspaceUserProjectI18nRuntime } from "@tutti-os/workspace-user-project/i18n";
189
188
  import { createWorkspaceFileManagerI18nRuntime } from "@tutti-os/workspace-file-manager";
190
189
  import { useReferenceProvenanceFilterCatalog } from "@tutti-os/workspace-file-reference/react";
@@ -13315,13 +13314,13 @@ function useAgentGUINodeController({
13315
13314
 
13316
13315
  // agent-gui/agentGuiNode/AgentGUINodeView.tsx
13317
13316
  import {
13318
- useCallback as useCallback58,
13317
+ useCallback as useCallback59,
13319
13318
  useEffect as useEffect38,
13320
13319
  useMemo as useMemo41,
13321
13320
  useRef as useRef49,
13322
13321
  useState as useState41
13323
13322
  } from "react";
13324
- import { TooltipProvider as TooltipProvider5 } from "@tutti-os/ui-system";
13323
+ import { TooltipProvider as TooltipProvider6 } from "@tutti-os/ui-system";
13325
13324
 
13326
13325
  // shared/workspaceSettingsPanel/workspaceSettingsPanelStore.ts
13327
13326
  import { useSnapshot } from "valtio";
@@ -14250,12 +14249,12 @@ function AgentGUIConfigMenu({
14250
14249
  // agent-gui/agentGuiNode/view/AgentGUIProviderRail.tsx
14251
14250
  import {
14252
14251
  memo as memo4,
14253
- useCallback as useCallback44,
14252
+ useCallback as useCallback45,
14254
14253
  useMemo as useMemo32,
14255
14254
  useRef as useRef36,
14256
14255
  useState as useState27
14257
14256
  } from "react";
14258
- import { Tooltip as Tooltip5, TooltipContent as TooltipContent5, TooltipTrigger as TooltipTrigger5 } from "@tutti-os/ui-system";
14257
+ import { Tooltip as Tooltip6, TooltipContent as TooltipContent6, TooltipTrigger as TooltipTrigger6 } from "@tutti-os/ui-system";
14259
14258
 
14260
14259
  // agent-gui/agentGuiNode/model/agentGuiProviderRailOrder.ts
14261
14260
  var AGENT_GUI_PROVIDER_RAIL_PREFERENCES_STORAGE_KEY = "agent-gui:provider-rail-preferences";
@@ -16182,7 +16181,7 @@ function AgentSessionChrome({
16182
16181
  }
16183
16182
 
16184
16183
  // agent-gui/agentGuiNode/AgentComposer.tsx
16185
- import { useEffect as useEffect28, useRef as useRef33, useState as useState23 } from "react";
16184
+ import { useCallback as useCallback42, useEffect as useEffect28, useRef as useRef33, useState as useState23 } from "react";
16186
16185
  import { repairMentionPaletteHighlight } from "@tutti-os/ui-rich-text/at-panel";
16187
16186
 
16188
16187
  // agent-gui/agentGuiNode/AgentSlashStatusPanel.tsx
@@ -19663,10 +19662,10 @@ import { createPortal as createPortal4 } from "react-dom";
19663
19662
  import {
19664
19663
  Popover as Popover3,
19665
19664
  PopoverAnchor as PopoverAnchor2,
19666
- Tooltip as Tooltip4,
19667
- TooltipContent as TooltipContent4,
19668
- TooltipProvider as TooltipProvider4,
19669
- TooltipTrigger as TooltipTrigger4
19665
+ Tooltip as Tooltip5,
19666
+ TooltipContent as TooltipContent5,
19667
+ TooltipProvider as TooltipProvider5,
19668
+ TooltipTrigger as TooltipTrigger5
19670
19669
  } from "@tutti-os/ui-system";
19671
19670
 
19672
19671
  // agent-gui/agentGuiNode/AgentQueuedPromptPanel.tsx
@@ -23890,10 +23889,10 @@ import {
23890
23889
  SelectContent as SelectContent3,
23891
23890
  SelectItem as SelectItem3,
23892
23891
  SelectTrigger as SelectTrigger3,
23893
- Tooltip as Tooltip3,
23894
- TooltipContent as TooltipContent3,
23895
- TooltipProvider as TooltipProvider3,
23896
- TooltipTrigger as TooltipTrigger3
23892
+ Tooltip as Tooltip4,
23893
+ TooltipContent as TooltipContent4,
23894
+ TooltipProvider as TooltipProvider4,
23895
+ TooltipTrigger as TooltipTrigger4
23897
23896
  } from "@tutti-os/ui-system";
23898
23897
 
23899
23898
  // app/renderer/assets/icons/add-lined.svg
@@ -23908,7 +23907,11 @@ import {
23908
23907
  Select as Select2,
23909
23908
  SelectContent as SelectContent2,
23910
23909
  SelectItem as SelectItem2,
23911
- SelectTrigger as SelectTrigger2
23910
+ SelectTrigger as SelectTrigger2,
23911
+ Tooltip as Tooltip3,
23912
+ TooltipContent as TooltipContent3,
23913
+ TooltipProvider as TooltipProvider3,
23914
+ TooltipTrigger as TooltipTrigger3
23912
23915
  } from "@tutti-os/ui-system";
23913
23916
 
23914
23917
  // agent-gui/agentGuiNode/composer/handoffTargetPresentation.ts
@@ -23968,53 +23971,55 @@ function AgentHandoffMenu({
23968
23971
  onSelect(target);
23969
23972
  },
23970
23973
  children: [
23971
- /* @__PURE__ */ jsx36(
23972
- SelectTrigger2,
23973
- {
23974
- size: "sm",
23975
- "aria-label": labels.action,
23976
- title: labels.tooltip,
23977
- "data-testid": testId,
23978
- onClick: isolateTriggerEvents ? (event) => {
23979
- event.stopPropagation();
23980
- } : void 0,
23981
- onKeyDown: isolateTriggerEvents ? (event) => {
23982
- event.stopPropagation();
23983
- } : void 0,
23984
- onPointerDown: isolateTriggerEvents ? (event) => {
23985
- event.stopPropagation();
23986
- } : void 0,
23987
- onBlur: () => {
23988
- setIsIconPlaying(false);
23989
- },
23990
- onFocus: () => {
23991
- setIsIconPlaying(true);
23992
- },
23993
- onMouseEnter: () => {
23994
- setIsIconPlaying(true);
23995
- },
23996
- onMouseLeave: () => {
23997
- setIsIconPlaying(false);
23998
- },
23999
- className: cn(
24000
- AgentGUINode_styles_default.composerMenuTrigger,
24001
- AgentGUINode_styles_default.composerProviderSelect,
24002
- AgentGUINode_styles_default.composerHandoffTrigger,
24003
- "w-auto max-w-[180px] [&>svg:last-child]:hidden",
24004
- triggerClassName
24005
- ),
24006
- children: /* @__PURE__ */ jsxs26("span", { className: "flex min-w-0 items-center gap-1.5", children: [
24007
- /* @__PURE__ */ jsx36(
24008
- AgentComposerHandoffIcon,
24009
- {
24010
- disabled: menuDisabled,
24011
- isPlaying: isIconPlaying
24012
- }
23974
+ /* @__PURE__ */ jsx36(TooltipProvider3, { delayDuration: 120, children: /* @__PURE__ */ jsxs26(Tooltip3, { children: [
23975
+ /* @__PURE__ */ jsx36(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx36("span", { className: "inline-flex", children: /* @__PURE__ */ jsx36(
23976
+ SelectTrigger2,
23977
+ {
23978
+ size: "sm",
23979
+ "aria-label": labels.action,
23980
+ "data-testid": testId,
23981
+ onClick: isolateTriggerEvents ? (event) => {
23982
+ event.stopPropagation();
23983
+ } : void 0,
23984
+ onKeyDown: isolateTriggerEvents ? (event) => {
23985
+ event.stopPropagation();
23986
+ } : void 0,
23987
+ onPointerDown: isolateTriggerEvents ? (event) => {
23988
+ event.stopPropagation();
23989
+ } : void 0,
23990
+ onBlur: () => {
23991
+ setIsIconPlaying(false);
23992
+ },
23993
+ onFocus: () => {
23994
+ setIsIconPlaying(true);
23995
+ },
23996
+ onMouseEnter: () => {
23997
+ setIsIconPlaying(true);
23998
+ },
23999
+ onMouseLeave: () => {
24000
+ setIsIconPlaying(false);
24001
+ },
24002
+ className: cn(
24003
+ AgentGUINode_styles_default.composerMenuTrigger,
24004
+ AgentGUINode_styles_default.composerProviderSelect,
24005
+ AgentGUINode_styles_default.composerHandoffTrigger,
24006
+ "w-auto max-w-[180px] [&>svg:last-child]:hidden",
24007
+ triggerClassName
24013
24008
  ),
24014
- !iconOnly ? /* @__PURE__ */ jsx36("span", { className: "min-w-0 truncate", children: triggerLabel }) : null
24015
- ] })
24016
- }
24017
- ),
24009
+ children: /* @__PURE__ */ jsxs26("span", { className: "flex min-w-0 items-center gap-1.5", children: [
24010
+ /* @__PURE__ */ jsx36(
24011
+ AgentComposerHandoffIcon,
24012
+ {
24013
+ disabled: menuDisabled,
24014
+ isPlaying: isIconPlaying
24015
+ }
24016
+ ),
24017
+ !iconOnly ? /* @__PURE__ */ jsx36("span", { className: "min-w-0 truncate", children: triggerLabel }) : null
24018
+ ] })
24019
+ }
24020
+ ) }) }),
24021
+ /* @__PURE__ */ jsx36(TooltipContent3, { side: "top", children: labels.tooltip })
24022
+ ] }) }),
24018
24023
  /* @__PURE__ */ jsx36(
24019
24024
  SelectContent2,
24020
24025
  {
@@ -24119,8 +24124,8 @@ function ComposerFooter({
24119
24124
  return /* @__PURE__ */ jsx37(Fragment10, { children: /* @__PURE__ */ jsxs27("div", { className: AgentGUINode_styles_default.composerFooter, children: [
24120
24125
  /* @__PURE__ */ jsxs27("div", { className: composerStyles.footerGroup, children: [
24121
24126
  /* @__PURE__ */ jsxs27("div", { className: "inline-flex shrink-0 items-center gap-1", children: [
24122
- previewMode ? /* @__PURE__ */ jsx37(TooltipProvider3, { delayDuration: 120, children: /* @__PURE__ */ jsxs27(Tooltip3, { children: [
24123
- /* @__PURE__ */ jsx37(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx37(
24127
+ previewMode ? /* @__PURE__ */ jsx37(TooltipProvider4, { delayDuration: 120, children: /* @__PURE__ */ jsxs27(Tooltip4, { children: [
24128
+ /* @__PURE__ */ jsx37(TooltipTrigger4, { asChild: true, children: /* @__PURE__ */ jsx37(
24124
24129
  "button",
24125
24130
  {
24126
24131
  type: "button",
@@ -24139,7 +24144,7 @@ function ComposerFooter({
24139
24144
  )
24140
24145
  }
24141
24146
  ) }),
24142
- /* @__PURE__ */ jsx37(TooltipContent3, { side: "top", children: labels.addContent })
24147
+ /* @__PURE__ */ jsx37(TooltipContent4, { side: "top", children: labels.addContent })
24143
24148
  ] }) }) : /* @__PURE__ */ jsx37(
24144
24149
  Select3,
24145
24150
  {
@@ -24156,30 +24161,32 @@ function ComposerFooter({
24156
24161
  void handleWorkspaceReferencePicker();
24157
24162
  }
24158
24163
  },
24159
- children: /* @__PURE__ */ jsx37(
24160
- SelectTrigger3,
24161
- {
24162
- size: "sm",
24163
- "aria-label": labels.referenceWorkspaceFiles,
24164
- title: labels.addContent,
24165
- className: cn(
24166
- AgentGUINode_styles_default.composerMenuTrigger,
24167
- AgentGUINode_styles_default.composerReferenceTrigger,
24168
- "group w-auto justify-center text-[var(--agent-gui-text-secondary)] [&>svg:last-child]:hidden"
24169
- ),
24170
- children: /* @__PURE__ */ jsx37(
24171
- AgentComposerMaskIcon,
24172
- {
24173
- iconUrl: add_lined_default,
24174
- marker: "reference-add"
24175
- }
24176
- )
24177
- }
24178
- )
24164
+ children: /* @__PURE__ */ jsx37(TooltipProvider4, { delayDuration: 120, children: /* @__PURE__ */ jsxs27(Tooltip4, { children: [
24165
+ /* @__PURE__ */ jsx37(TooltipTrigger4, { asChild: true, children: /* @__PURE__ */ jsx37("span", { className: "inline-flex", children: /* @__PURE__ */ jsx37(
24166
+ SelectTrigger3,
24167
+ {
24168
+ size: "sm",
24169
+ "aria-label": labels.referenceWorkspaceFiles,
24170
+ className: cn(
24171
+ AgentGUINode_styles_default.composerMenuTrigger,
24172
+ AgentGUINode_styles_default.composerReferenceTrigger,
24173
+ "group w-auto justify-center text-[var(--agent-gui-text-secondary)] [&>svg:last-child]:hidden"
24174
+ ),
24175
+ children: /* @__PURE__ */ jsx37(
24176
+ AgentComposerMaskIcon,
24177
+ {
24178
+ iconUrl: add_lined_default,
24179
+ marker: "reference-add"
24180
+ }
24181
+ )
24182
+ }
24183
+ ) }) }),
24184
+ /* @__PURE__ */ jsx37(TooltipContent4, { side: "top", children: labels.addContent })
24185
+ ] }) })
24179
24186
  }
24180
24187
  ),
24181
- /* @__PURE__ */ jsx37(TooltipProvider3, { delayDuration: 120, children: /* @__PURE__ */ jsxs27(Tooltip3, { children: [
24182
- /* @__PURE__ */ jsx37(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx37(
24188
+ /* @__PURE__ */ jsx37(TooltipProvider4, { delayDuration: 120, children: /* @__PURE__ */ jsxs27(Tooltip4, { children: [
24189
+ /* @__PURE__ */ jsx37(TooltipTrigger4, { asChild: true, children: /* @__PURE__ */ jsx37(
24183
24190
  "button",
24184
24191
  {
24185
24192
  type: "button",
@@ -24211,7 +24218,7 @@ function ComposerFooter({
24211
24218
  )
24212
24219
  }
24213
24220
  ) }),
24214
- /* @__PURE__ */ jsx37(TooltipContent3, { side: "top", children: labels.mentionPalette })
24221
+ /* @__PURE__ */ jsx37(TooltipContent4, { side: "top", children: labels.mentionPalette })
24215
24222
  ] }) })
24216
24223
  ] }),
24217
24224
  showHandoffSelect ? /* @__PURE__ */ jsx37(
@@ -24540,7 +24547,6 @@ function AgentComposerView(input) {
24540
24547
  selectFileMention
24541
24548
  } = input.mentionActions;
24542
24549
  const {
24543
- addDraftFiles,
24544
24550
  clearGoalModeBadge,
24545
24551
  expandDraftLargeTextToPrompt,
24546
24552
  handleDraftChange,
@@ -24791,8 +24797,8 @@ function AgentComposerView(input) {
24791
24797
  onPromptImagesUnsupported,
24792
24798
  onPasteImages: handlePastedImages,
24793
24799
  onPasteLargeText: handlePastedLargeText,
24794
- onPasteFiles: input.promptFilesSupported ? addDraftFiles : void 0,
24795
- onDropFiles: input.promptFilesSupported ? addDraftFiles : void 0
24800
+ onPasteFiles: input.externalPromptEntriesSupported ? input.addExternalPromptEntries : void 0,
24801
+ onDropFiles: input.externalPromptEntriesSupported ? input.addExternalPromptEntries : void 0
24796
24802
  }
24797
24803
  ),
24798
24804
  !isHeroLayout ? composerActionButton : null
@@ -25012,10 +25018,10 @@ function AgentComposerView(input) {
25012
25018
  {
25013
25019
  className: AgentGUINode_styles_default.composerPromptTips,
25014
25020
  "data-testid": "agent-gui-prompt-tips",
25015
- children: !previewMode && input.isPromptTipOverflowing && promptTipNode ? /* @__PURE__ */ jsx38(TooltipProvider4, { delayDuration: 0, children: /* @__PURE__ */ jsxs28(Tooltip4, { children: [
25016
- /* @__PURE__ */ jsx38(TooltipTrigger4, { asChild: true, children: promptTipNode }),
25021
+ children: !previewMode && input.isPromptTipOverflowing && promptTipNode ? /* @__PURE__ */ jsx38(TooltipProvider5, { delayDuration: 0, children: /* @__PURE__ */ jsxs28(Tooltip5, { children: [
25022
+ /* @__PURE__ */ jsx38(TooltipTrigger5, { asChild: true, children: promptTipNode }),
25017
25023
  /* @__PURE__ */ jsx38(
25018
- TooltipContent4,
25024
+ TooltipContent5,
25019
25025
  {
25020
25026
  align: "end",
25021
25027
  className: AgentGUINode_styles_default.composerPromptTipTooltip,
@@ -25095,6 +25101,58 @@ var INITIAL_AGENT_MENTION_SEARCH_STATE = {
25095
25101
  error: null
25096
25102
  };
25097
25103
 
25104
+ // agent-gui/agentGuiNode/model/agentExternalPromptEntries.ts
25105
+ function resolveAgentExternalPromptEntries(files, resolver) {
25106
+ if (!resolver) return files.map(preparedEntry);
25107
+ let resolved;
25108
+ try {
25109
+ resolved = resolver(files);
25110
+ } catch {
25111
+ return files.map(preparedEntry);
25112
+ }
25113
+ const resultByIndex = /* @__PURE__ */ new Map();
25114
+ for (const result of resolved) {
25115
+ if (!Number.isInteger(result.sourceIndex) || result.sourceIndex < 0 || result.sourceIndex >= files.length || resultByIndex.has(result.sourceIndex)) {
25116
+ return files.map(preparedEntry);
25117
+ }
25118
+ if (result.disposition === "reference" && !result.reference.path.trim()) {
25119
+ return files.map(preparedEntry);
25120
+ }
25121
+ resultByIndex.set(result.sourceIndex, result);
25122
+ }
25123
+ if (resultByIndex.size !== files.length) return files.map(preparedEntry);
25124
+ return files.map((file, sourceIndex) => {
25125
+ const result = resultByIndex.get(sourceIndex);
25126
+ return result.disposition === "reference" ? {
25127
+ disposition: "reference",
25128
+ reference: result.reference,
25129
+ sourceIndex
25130
+ } : preparedEntry(file, sourceIndex);
25131
+ });
25132
+ }
25133
+ function groupAgentExternalPromptEntryInsertions(entries) {
25134
+ const insertions = [];
25135
+ for (const entry of entries) {
25136
+ if (entry.disposition === "reference") {
25137
+ insertions.push({
25138
+ disposition: "reference",
25139
+ reference: entry.reference
25140
+ });
25141
+ continue;
25142
+ }
25143
+ const previous = insertions.at(-1);
25144
+ if (previous?.disposition === "prepare") {
25145
+ previous.files.push(entry.file);
25146
+ } else {
25147
+ insertions.push({ disposition: "prepare", files: [entry.file] });
25148
+ }
25149
+ }
25150
+ return insertions;
25151
+ }
25152
+ function preparedEntry(file, sourceIndex) {
25153
+ return { disposition: "prepare", file, sourceIndex };
25154
+ }
25155
+
25098
25156
  // agent-gui/agentGuiNode/AgentComposer.tsx
25099
25157
  import { jsx as jsx39 } from "react/jsx-runtime";
25100
25158
  var DOCK_COMPOSER_INPUT_MIN_HEIGHT2 = 56;
@@ -25159,6 +25217,7 @@ function AgentComposer(props) {
25159
25217
  onSlashStatusOpen,
25160
25218
  onLinkAction,
25161
25219
  onRequestWorkspaceReferences = null,
25220
+ resolveExternalPromptEntries = null,
25162
25221
  prepareExternalPromptFiles = null,
25163
25222
  promptAssetLimit = null,
25164
25223
  onRequestGitBranches = null,
@@ -25176,6 +25235,9 @@ function AgentComposer(props) {
25176
25235
  const promptFilesSupported = Boolean(
25177
25236
  canUploadAttachment && prepareExternalPromptFiles
25178
25237
  );
25238
+ const externalPromptEntriesSupported = Boolean(
25239
+ resolveExternalPromptEntries || promptFilesSupported
25240
+ );
25179
25241
  const pastedTextStagingSupported = Boolean(
25180
25242
  canUploadAttachment && agentActivityRuntime?.stagePastedText
25181
25243
  );
@@ -25444,6 +25506,26 @@ function AgentComposer(props) {
25444
25506
  onLinkAction
25445
25507
  });
25446
25508
  const { addDraftFiles, addDraftImages } = attachments;
25509
+ const addExternalPromptEntries = useCallback42(
25510
+ (files) => {
25511
+ const entries = resolveAgentExternalPromptEntries(
25512
+ files,
25513
+ resolveExternalPromptEntries
25514
+ );
25515
+ for (const insertion of groupAgentExternalPromptEntryInsertions(
25516
+ entries
25517
+ )) {
25518
+ if (insertion.disposition === "prepare") {
25519
+ addDraftFiles(insertion.files);
25520
+ } else {
25521
+ editorHandleRef.current?.insertWorkspaceReferences([
25522
+ insertion.reference
25523
+ ]);
25524
+ }
25525
+ }
25526
+ },
25527
+ [addDraftFiles, editorHandleRef, resolveExternalPromptEntries]
25528
+ );
25447
25529
  const providerState = useComposerProviderTargets({
25448
25530
  layoutMode,
25449
25531
  previewMode,
@@ -25479,10 +25561,10 @@ function AgentComposer(props) {
25479
25561
  lastComposerFocusRequestRef,
25480
25562
  isActive,
25481
25563
  composerFocusRequestSequence,
25482
- promptFilesSupported,
25564
+ promptFilesSupported: externalPromptEntriesSupported,
25483
25565
  promptImagesSupported: canUploadAttachment && promptImagesSupported,
25484
25566
  addDraftImages,
25485
- addDraftFiles,
25567
+ addDraftFiles: addExternalPromptEntries,
25486
25568
  onPromptImagesUnsupported
25487
25569
  });
25488
25570
  const { fileDropOverlayActive, fileDropOverlayHost } = focusAndDrop;
@@ -25564,7 +25646,8 @@ function AgentComposer(props) {
25564
25646
  promptTipRef,
25565
25647
  editorHandleRef,
25566
25648
  mentionControllerRef,
25567
- promptFilesSupported,
25649
+ externalPromptEntriesSupported,
25650
+ addExternalPromptEntries,
25568
25651
  onDismissProjectMenuAutoFocus: restoreComposerCaretAfterProjectMenu,
25569
25652
  paletteDraftPrompt,
25570
25653
  showFileMentionPalette,
@@ -25955,7 +26038,7 @@ import {
25955
26038
  // shared/agentEnv/agentTargetSetupController.tsx
25956
26039
  import {
25957
26040
  createContext,
25958
- useCallback as useCallback42,
26041
+ useCallback as useCallback43,
25959
26042
  useContext,
25960
26043
  useMemo as useMemo30,
25961
26044
  useRef as useRef34
@@ -26028,7 +26111,7 @@ function useCreateAgentTargetSetupController(agentTarget) {
26028
26111
  () => enabled ? hostApi?.agentTargetSetup?.watch({ agentTargetId }) ?? null : null,
26029
26112
  [agentTargetId, enabled, hostApi?.agentTargetSetup]
26030
26113
  );
26031
- const showNotification = useCallback42(
26114
+ const showNotification = useCallback43(
26032
26115
  (notification) => showTargetSetupFailureNotification({
26033
26116
  hostToast: hostApi?.toast,
26034
26117
  notification,
@@ -26036,7 +26119,7 @@ function useCreateAgentTargetSetupController(agentTarget) {
26036
26119
  }),
26037
26120
  [hostApi?.toast, t]
26038
26121
  );
26039
- const logCommandError = useCallback42(
26122
+ const logCommandError = useCallback43(
26040
26123
  (command, error) => {
26041
26124
  hostApi?.debug?.logRuntimeDiagnostics({
26042
26125
  agentTargetId,
@@ -27479,7 +27562,7 @@ function AgentGUIProviderManagerDialog({
27479
27562
  }
27480
27563
 
27481
27564
  // agent-gui/agentGuiNode/view/useAgentGUIProviderRailPreferences.ts
27482
- import { useCallback as useCallback43, useEffect as useEffect29, useState as useState26 } from "react";
27565
+ import { useCallback as useCallback44, useEffect as useEffect29, useState as useState26 } from "react";
27483
27566
  function readAgentGUIProviderRailPreferences(storageKey) {
27484
27567
  return parseAgentGUIProviderRailPreferences(
27485
27568
  globalThis.localStorage?.getItem(storageKey)
@@ -27512,7 +27595,7 @@ function useAgentGUIProviderRailPreferences() {
27512
27595
  );
27513
27596
  };
27514
27597
  }, [storageKey]);
27515
- const persistPreferences = useCallback43(
27598
+ const persistPreferences = useCallback44(
27516
27599
  (nextPreferences) => {
27517
27600
  setPreferences(nextPreferences);
27518
27601
  globalThis.localStorage?.setItem(
@@ -27622,7 +27705,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
27622
27705
  } = useAgentGUIProviderRailPreferences();
27623
27706
  const [dragState, setDragState] = useState27(null);
27624
27707
  const dragStateRef = useRef36(null);
27625
- const setProviderRailDragState = useCallback44(
27708
+ const setProviderRailDragState = useCallback45(
27626
27709
  (nextDragState) => {
27627
27710
  dragStateRef.current = nextDragState;
27628
27711
  setDragState(nextDragState);
@@ -27686,11 +27769,11 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
27686
27769
  [effectiveHiddenTargetIds, providerTiles]
27687
27770
  );
27688
27771
  const allTileSelected = conversationFilter.kind === "all";
27689
- const selectAllProviders = useCallback44(() => {
27772
+ const selectAllProviders = useCallback45(() => {
27690
27773
  onUpdateConversationFilter({ kind: "all" });
27691
27774
  onRequestComposerFocus();
27692
27775
  }, [onRequestComposerFocus, onUpdateConversationFilter]);
27693
- const selectAgentTargetTile = useCallback44(
27776
+ const selectAgentTargetTile = useCallback45(
27694
27777
  (target) => {
27695
27778
  const agentTargetId = target.agentTargetId?.trim() ?? "";
27696
27779
  if (!agentTargetId) {
@@ -27704,10 +27787,10 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
27704
27787
  },
27705
27788
  [onRequestComposerFocus, onSelectConversationFilterTarget]
27706
27789
  );
27707
- const clearProviderRailDragState = useCallback44(() => {
27790
+ const clearProviderRailDragState = useCallback45(() => {
27708
27791
  setProviderRailDragState(null);
27709
27792
  }, [setProviderRailDragState]);
27710
- const handleProviderRailDragStart = useCallback44(
27793
+ const handleProviderRailDragStart = useCallback45(
27711
27794
  (event, target) => {
27712
27795
  if (previewMode || agentTargetsLoading) {
27713
27796
  event.preventDefault();
@@ -27723,7 +27806,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
27723
27806
  },
27724
27807
  [previewMode, agentTargetsLoading, setProviderRailDragState]
27725
27808
  );
27726
- const handleProviderRailDragOver = useCallback44(
27809
+ const handleProviderRailDragOver = useCallback45(
27727
27810
  (event, target) => {
27728
27811
  if (previewMode || agentTargetsLoading || !dragState) {
27729
27812
  return;
@@ -27755,7 +27838,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
27755
27838
  },
27756
27839
  [dragState, previewMode, agentTargetsLoading, setProviderRailDragState]
27757
27840
  );
27758
- const commitProviderRailDragDrop = useCallback44(
27841
+ const commitProviderRailDragDrop = useCallback45(
27759
27842
  (event) => {
27760
27843
  const fallbackDraggedTargetId = event.dataTransfer.getData("text/plain").trim();
27761
27844
  const activeDragState = dragStateRef.current ?? dragState ?? (fallbackDraggedTargetId ? {
@@ -27884,7 +27967,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
27884
27967
  onUpdateConversationFilter({ kind: "all" });
27885
27968
  }
27886
27969
  };
27887
- const handleProviderRailContainerDragOver = useCallback44(
27970
+ const handleProviderRailContainerDragOver = useCallback45(
27888
27971
  (event) => {
27889
27972
  const activeDragState = dragStateRef.current ?? dragState;
27890
27973
  if (!activeDragState || previewMode || agentTargetsLoading) {
@@ -28081,9 +28164,9 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
28081
28164
  if (previewMode) {
28082
28165
  return tile;
28083
28166
  }
28084
- return /* @__PURE__ */ jsxs35(Tooltip5, { children: [
28085
- /* @__PURE__ */ jsx47(TooltipTrigger5, { asChild: true, children: tile }),
28086
- /* @__PURE__ */ jsx47(TooltipContent5, { side: "right", sideOffset: -4, children: label })
28167
+ return /* @__PURE__ */ jsxs35(Tooltip6, { children: [
28168
+ /* @__PURE__ */ jsx47(TooltipTrigger6, { asChild: true, children: tile }),
28169
+ /* @__PURE__ */ jsx47(TooltipContent6, { side: "right", sideOffset: -4, children: label })
28087
28170
  ] }, `${target.provider}:${target.targetId}:tooltip`);
28088
28171
  })
28089
28172
  ]
@@ -28840,7 +28923,7 @@ function reduceAgentGUIConversationRailViewState(state, action) {
28840
28923
  }
28841
28924
 
28842
28925
  // agent-gui/agentGuiNode/controller/useAgentGUIProjectDrag.ts
28843
- import { useCallback as useCallback45, useState as useState28 } from "react";
28926
+ import { useCallback as useCallback46, useState as useState28 } from "react";
28844
28927
  var PROJECT_DRAG_SCROLL_EDGE_PX = 40;
28845
28928
  function projectDragAutoScrollDelta(clientY, bounds) {
28846
28929
  if (clientY < bounds.top + PROJECT_DRAG_SCROLL_EDGE_PX) {
@@ -28868,14 +28951,14 @@ function useAgentGUIProjectDrag(input) {
28868
28951
  image: null,
28869
28952
  viewport: null
28870
28953
  }));
28871
- const stopAutoScroll = useCallback45(() => {
28954
+ const stopAutoScroll = useCallback46(() => {
28872
28955
  if (runtime.frame !== null) {
28873
28956
  window.cancelAnimationFrame(runtime.frame);
28874
28957
  runtime.frame = null;
28875
28958
  }
28876
28959
  runtime.clientY = null;
28877
28960
  }, [runtime]);
28878
- const clear = useCallback45(() => {
28961
+ const clear = useCallback46(() => {
28879
28962
  stopAutoScroll();
28880
28963
  runtime.image?.remove();
28881
28964
  runtime.image = null;
@@ -28884,7 +28967,7 @@ function useAgentGUIProjectDrag(input) {
28884
28967
  runtime.viewport = null;
28885
28968
  setDragState(null);
28886
28969
  }, [runtime, stopAutoScroll]);
28887
- const runAutoScroll = useCallback45(() => {
28970
+ const runAutoScroll = useCallback46(() => {
28888
28971
  runtime.frame = null;
28889
28972
  const viewport = runtime.viewport ?? input.scrollViewportRef.current;
28890
28973
  if (!runtime.active || !viewport || runtime.clientY === null) return;
@@ -28895,7 +28978,7 @@ function useAgentGUIProjectDrag(input) {
28895
28978
  runtime.frame = window.requestAnimationFrame(runAutoScroll);
28896
28979
  }
28897
28980
  }, [input.scrollViewportRef, runtime]);
28898
- const trackPosition = useCallback45(
28981
+ const trackPosition = useCallback46(
28899
28982
  (clientY) => {
28900
28983
  if (!runtime.active) return;
28901
28984
  runtime.clientY = clientY;
@@ -28905,7 +28988,7 @@ function useAgentGUIProjectDrag(input) {
28905
28988
  },
28906
28989
  [runAutoScroll, runtime]
28907
28990
  );
28908
- const start = useCallback45(
28991
+ const start = useCallback46(
28909
28992
  (section, event) => {
28910
28993
  const projectId = section.project?.id?.trim() ?? "";
28911
28994
  if (input.disabled || isMovePending || !projectId) {
@@ -28946,7 +29029,7 @@ function useAgentGUIProjectDrag(input) {
28946
29029
  },
28947
29030
  [input.disabled, isMovePending, runtime]
28948
29031
  );
28949
- const updateTarget = useCallback45(
29032
+ const updateTarget = useCallback46(
28950
29033
  (section, edge, event) => {
28951
29034
  const targetId = section.project?.id?.trim() ?? "";
28952
29035
  const currentDragState = runtime.dragState;
@@ -28986,7 +29069,7 @@ function useAgentGUIProjectDrag(input) {
28986
29069
  },
28987
29070
  [input.userProjects, runtime, trackPosition]
28988
29071
  );
28989
- const drop = useCallback45(
29072
+ const drop = useCallback46(
28990
29073
  async (event) => {
28991
29074
  const currentDragState = runtime.dragState;
28992
29075
  if (!currentDragState || !runtime.active) return;
@@ -29006,7 +29089,7 @@ function useAgentGUIProjectDrag(input) {
29006
29089
  },
29007
29090
  [clear, input.onMoveProject, runtime]
29008
29091
  );
29009
- const keepValidDropTarget = useCallback45(
29092
+ const keepValidDropTarget = useCallback46(
29010
29093
  (event) => {
29011
29094
  if (!runtime.active || !runtime.dragState?.canDrop) return;
29012
29095
  event.preventDefault();
@@ -29014,7 +29097,7 @@ function useAgentGUIProjectDrag(input) {
29014
29097
  },
29015
29098
  [runtime]
29016
29099
  );
29017
- const installGlobalListeners = useCallback45(() => {
29100
+ const installGlobalListeners = useCallback46(() => {
29018
29101
  const clearOnGlobalEnd = () => clear();
29019
29102
  const trackGlobalPosition = (event) => trackPosition(event.clientY);
29020
29103
  document.addEventListener("dragend", clearOnGlobalEnd, true);
@@ -29040,10 +29123,10 @@ function useAgentGUIProjectDrag(input) {
29040
29123
  }
29041
29124
 
29042
29125
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailSection.tsx
29043
- import { memo as memo7, useCallback as useCallback49 } from "react";
29126
+ import { memo as memo7, useCallback as useCallback50 } from "react";
29044
29127
 
29045
29128
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailItem.tsx
29046
- import { memo as memo5, useCallback as useCallback47, useMemo as useMemo34 } from "react";
29129
+ import { memo as memo5, useCallback as useCallback48, useMemo as useMemo34 } from "react";
29047
29130
  import { ExternalLink as ExternalLink3 } from "lucide-react";
29048
29131
  import { IssueIcon, NewWorkspaceLinedIcon as NewWorkspaceLinedIcon2, cn as cn7 } from "@tutti-os/ui-system";
29049
29132
  import { WorkspaceUserProjectSelect as WorkspaceUserProjectSelect2 } from "@tutti-os/workspace-user-project/ui";
@@ -29280,7 +29363,7 @@ function AgentGUIConversationRailRelativeTime({
29280
29363
  // agent-gui/agentGuiNode/view/AgentGUIConversationActionsMenu.tsx
29281
29364
  import {
29282
29365
  Fragment as Fragment14,
29283
- useCallback as useCallback46,
29366
+ useCallback as useCallback47,
29284
29367
  useMemo as useMemo33,
29285
29368
  useRef as useRef37,
29286
29369
  useState as useState29
@@ -29308,372 +29391,6 @@ import {
29308
29391
  import { BareIconButton } from "@tutti-os/ui-system/components";
29309
29392
  import { resolveWorkspaceImageMimeType } from "@tutti-os/workspace-file-manager/services";
29310
29393
 
29311
- // agent-gui/agentGuiNode/model/agentConversationCopy.ts
29312
- var COPY_PAGE_SIZE = 200;
29313
- var MAX_COPY_PAGES = 1e3;
29314
- var AGENT_CONVERSATION_COPY_MAX_EMBEDDED_IMAGE_BYTES = 2 * 1024 * 1024;
29315
- async function loadCompleteAgentConversationMessages(input) {
29316
- const messagesById = /* @__PURE__ */ new Map();
29317
- let beforeVersion;
29318
- for (let pageIndex = 0; pageIndex < MAX_COPY_PAGES; pageIndex += 1) {
29319
- const page = await input.runtime.listSessionMessages({
29320
- agentSessionId: input.agentSessionId,
29321
- ...beforeVersion === void 0 ? {} : { beforeVersion },
29322
- cache: false,
29323
- limit: COPY_PAGE_SIZE,
29324
- order: "desc",
29325
- workspaceId: input.workspaceId
29326
- });
29327
- for (const message of page.messages) {
29328
- const key = message.messageId.trim() || `${message.version}`;
29329
- const existing = messagesById.get(key);
29330
- if (!existing || message.version >= existing.version) {
29331
- messagesById.set(key, message);
29332
- }
29333
- }
29334
- if (!page.hasMore) {
29335
- return [...messagesById.values()].sort(compareMessagesAscending);
29336
- }
29337
- const nextBeforeVersion = minimumPositiveVersion(page.messages);
29338
- if (nextBeforeVersion === null || beforeVersion !== void 0 && nextBeforeVersion >= beforeVersion) {
29339
- throw new Error("Conversation message pagination did not advance.");
29340
- }
29341
- beforeVersion = nextBeforeVersion;
29342
- }
29343
- throw new Error("Conversation message pagination exceeded the safety limit.");
29344
- }
29345
- async function serializeAgentConversationForClipboard(input) {
29346
- const context = {
29347
- labels: input.labels,
29348
- readAttachment: input.readAttachment,
29349
- readLocalImage: input.readLocalImage,
29350
- stats: { omittedImages: 0 }
29351
- };
29352
- const kept = [];
29353
- for (const message of [...input.messages].sort(compareMessagesAscending)) {
29354
- if (isSystemNoticeMessage(message)) {
29355
- continue;
29356
- }
29357
- if (isToolMessage(message)) {
29358
- const body2 = await serializeImagesOnly(message.payload ?? {}, context);
29359
- if (body2.plain) {
29360
- kept.push({ body: body2, isToolImage: true, role: "assistant" });
29361
- }
29362
- continue;
29363
- }
29364
- const role = keptMessageRole(message);
29365
- if (!role) {
29366
- continue;
29367
- }
29368
- const body = await serializeMessageContent(message.payload ?? {}, context);
29369
- if (body.plain) {
29370
- kept.push({ body, role });
29371
- }
29372
- }
29373
- const markdownBlocks = [`# ${singleLine(input.title)}`];
29374
- const hydratedBlocks = [`# ${singleLine(input.title)}`];
29375
- const pushBlock = (plain, hydrated) => {
29376
- markdownBlocks.push(plain);
29377
- hydratedBlocks.push(hydrated);
29378
- };
29379
- let index = 0;
29380
- while (index < kept.length) {
29381
- const entry = kept[index];
29382
- if (entry.role === "user") {
29383
- pushBlock(
29384
- blockquoteMarkdown(entry.body.plain),
29385
- blockquoteMarkdown(entry.body.hydrated)
29386
- );
29387
- index += 1;
29388
- continue;
29389
- }
29390
- let last = index;
29391
- while (last + 1 < kept.length && kept[last + 1].role === "assistant") {
29392
- last += 1;
29393
- }
29394
- const run = kept.slice(index, last + 1);
29395
- const textEntries = run.filter((item) => !item.isToolImage);
29396
- const interim = textEntries.slice(0, -1);
29397
- const finalText = textEntries.at(-1);
29398
- if (interim.length > 0) {
29399
- const summary = input.labels.previousMessages.replace(
29400
- "{{count}}",
29401
- `${interim.length}`
29402
- );
29403
- const detailsBlock = (side) => [
29404
- `<details><summary>${summary}</summary>`,
29405
- ...interim.map((item) => blockquoteMarkdown(item.body[side])),
29406
- "</details>"
29407
- ].join("\n\n");
29408
- pushBlock(detailsBlock("plain"), detailsBlock("hydrated"));
29409
- }
29410
- for (const item of run) {
29411
- if (item.isToolImage || item === finalText) {
29412
- pushBlock(item.body.plain, item.body.hydrated);
29413
- }
29414
- }
29415
- index = last + 1;
29416
- }
29417
- return {
29418
- hydratedMarkdown: hydratedBlocks.join("\n\n").trim(),
29419
- markdown: markdownBlocks.join("\n\n").trim(),
29420
- omittedImages: context.stats.omittedImages
29421
- };
29422
- }
29423
- function sameBody(value) {
29424
- return { hydrated: value, plain: value };
29425
- }
29426
- function joinBodies(bodies) {
29427
- return {
29428
- hydrated: bodies.map((body) => body.hydrated).filter(Boolean).join("\n\n").trim(),
29429
- plain: bodies.map((body) => body.plain).filter(Boolean).join("\n\n").trim()
29430
- };
29431
- }
29432
- function keptMessageRole(message) {
29433
- const role = normalizedRole(message.role);
29434
- if (role === "user") {
29435
- return "user";
29436
- }
29437
- if (role === "assistant" || role === "agent") {
29438
- return "assistant";
29439
- }
29440
- return null;
29441
- }
29442
- function blockquoteMarkdown(value) {
29443
- const quoted = value.replace(
29444
- /\n(.?)/g,
29445
- (_match, next) => next ? `
29446
- > ${next}` : "\n>"
29447
- );
29448
- return `> ${quoted}`;
29449
- }
29450
- async function serializeMessageContent(payload, context) {
29451
- const content = payload.content;
29452
- if (Array.isArray(content)) {
29453
- const blocks = await Promise.all(
29454
- content.map((block) => serializeContentValue(block, context))
29455
- );
29456
- const serialized = joinBodies(blocks);
29457
- if (serialized.plain) {
29458
- return serialized;
29459
- }
29460
- } else if (typeof content === "string" && content.trim()) {
29461
- return sameBody(content.trim());
29462
- }
29463
- return sameBody(
29464
- firstString2(
29465
- payload.displayPrompt,
29466
- payload.text,
29467
- payload.detail,
29468
- payload.title,
29469
- payload.summary
29470
- ) ?? ""
29471
- );
29472
- }
29473
- async function serializeContentValue(value, context) {
29474
- if (typeof value === "string") {
29475
- return sameBody(value.trim());
29476
- }
29477
- if (!isRecord3(value)) {
29478
- return sameBody("");
29479
- }
29480
- if (value.type === "content" && value.content !== void 0) {
29481
- return serializeContentValue(value.content, context);
29482
- }
29483
- const block = value;
29484
- switch (block.type) {
29485
- case "text":
29486
- return sameBody(typeof block.text === "string" ? block.text.trim() : "");
29487
- case "image":
29488
- return serializeImageBlock(block, context);
29489
- case "file":
29490
- return sameBody(serializeFileBlock(block, context.labels));
29491
- case "mention":
29492
- return sameBody(serializeMentionBlock(block, context.labels));
29493
- case "skill":
29494
- return sameBody(serializeSkillBlock(block));
29495
- default: {
29496
- const nested = await Promise.all(
29497
- [value.content, value.output, value.result].filter((candidate) => candidate !== void 0).map((candidate) => serializeContentValue(candidate, context))
29498
- );
29499
- return joinBodies(nested);
29500
- }
29501
- }
29502
- }
29503
- async function serializeImagesOnly(value, context) {
29504
- if (Array.isArray(value)) {
29505
- const nested = await Promise.all(
29506
- value.map((item) => serializeImagesOnly(item, context))
29507
- );
29508
- return joinBodies(nested);
29509
- }
29510
- if (!isRecord3(value)) {
29511
- return sameBody("");
29512
- }
29513
- if (value.type === "content" && value.content !== void 0) {
29514
- return serializeImagesOnly(value.content, context);
29515
- }
29516
- const block = value;
29517
- switch (block.type) {
29518
- case "image":
29519
- return serializeImageBlock(block, context);
29520
- case "text":
29521
- case "file":
29522
- case "mention":
29523
- case "skill":
29524
- return sameBody("");
29525
- default: {
29526
- const nested = await Promise.all(
29527
- [value.content, value.output, value.result].filter((candidate) => candidate !== void 0).map((candidate) => serializeImagesOnly(candidate, context))
29528
- );
29529
- return joinBodies(nested);
29530
- }
29531
- }
29532
- }
29533
- async function serializeImageBlock(block, context) {
29534
- const attachmentId = firstString2(block.attachmentId);
29535
- const blockMimeType = firstString2(block.mimeType);
29536
- const name = firstString2(block.name) ?? context.labels.image;
29537
- const source = firstString2(block.url, block.uri, block.path, block.hostPath);
29538
- const inlineData = typeof block.data === "string" && block.data.trim() ? block.data.trim() : null;
29539
- const isDataSource = source?.startsWith("data:") ?? false;
29540
- const plain = source && !isDataSource ? imageLinkMarkdown(name, source) : attachmentId ? imageLinkMarkdown(name, `attachment:${attachmentId}`) : `**${name}**`;
29541
- let hydrated = plain;
29542
- if (source && isDataSource) {
29543
- const payload = source.slice(source.indexOf(",") + 1);
29544
- if (base64BinaryByteSize(payload) <= AGENT_CONVERSATION_COPY_MAX_EMBEDDED_IMAGE_BYTES) {
29545
- hydrated = imageLinkMarkdown(name, source);
29546
- } else {
29547
- context.stats.omittedImages += 1;
29548
- }
29549
- } else if (source) {
29550
- const localPath = localImagePathFromSource(source);
29551
- if (localPath && context.readLocalImage) {
29552
- try {
29553
- const attachment = await context.readLocalImage({
29554
- mimeType: blockMimeType,
29555
- path: localPath
29556
- });
29557
- hydrated = embedWithinLimit(name, attachment, plain, context);
29558
- } catch {
29559
- context.stats.omittedImages += 1;
29560
- }
29561
- }
29562
- } else if (inlineData) {
29563
- const dataUri = inlineData.startsWith("data:") ? inlineData : `data:${blockMimeType ?? "image/png"};base64,${inlineData}`;
29564
- const payload = dataUri.slice(dataUri.indexOf(",") + 1);
29565
- if (base64BinaryByteSize(payload) <= AGENT_CONVERSATION_COPY_MAX_EMBEDDED_IMAGE_BYTES) {
29566
- hydrated = imageLinkMarkdown(name, dataUri);
29567
- } else {
29568
- context.stats.omittedImages += 1;
29569
- }
29570
- } else if (attachmentId && context.readAttachment) {
29571
- try {
29572
- const attachment = await context.readAttachment(attachmentId);
29573
- hydrated = embedWithinLimit(name, attachment, plain, context);
29574
- } catch {
29575
- context.stats.omittedImages += 1;
29576
- }
29577
- }
29578
- return { hydrated, plain };
29579
- }
29580
- function embedWithinLimit(name, attachment, fallback, context) {
29581
- if (base64BinaryByteSize(attachment.data) > AGENT_CONVERSATION_COPY_MAX_EMBEDDED_IMAGE_BYTES) {
29582
- context.stats.omittedImages += 1;
29583
- return fallback;
29584
- }
29585
- return imageLinkMarkdown(
29586
- name,
29587
- `data:${attachment.mimeType};base64,${attachment.data}`
29588
- );
29589
- }
29590
- function imageLinkMarkdown(name, target) {
29591
- return `![${escapeMarkdownLabel(name)}](<${escapeMarkdownTarget(target)}>)`;
29592
- }
29593
- function base64BinaryByteSize(value) {
29594
- const trimmed = value.trim();
29595
- const padding = trimmed.endsWith("==") ? 2 : trimmed.endsWith("=") ? 1 : 0;
29596
- return Math.max(0, Math.floor(trimmed.length * 3 / 4) - padding);
29597
- }
29598
- function localImagePathFromSource(source) {
29599
- const trimmed = source.trim();
29600
- if (isLocalImagePath(trimmed)) {
29601
- return trimmed;
29602
- }
29603
- if (!/^file:\/\//i.test(trimmed)) {
29604
- return null;
29605
- }
29606
- try {
29607
- const pathname = decodeURIComponent(new URL(trimmed).pathname);
29608
- return /^\/[a-zA-Z]:[\\/]/.test(pathname) ? pathname.slice(1) : pathname;
29609
- } catch {
29610
- return null;
29611
- }
29612
- }
29613
- function serializeFileBlock(block, labels) {
29614
- const source = firstString2(block.uri, block.path, block.hostPath, block.url);
29615
- const name = firstString2(block.name) ?? source ?? labels.file;
29616
- return source ? `[${escapeMarkdownLabel(name)}](<${escapeMarkdownTarget(source)}>)` : `**${labels.file}:** ${escapeMarkdownLabel(name)}`;
29617
- }
29618
- function serializeMentionBlock(block, labels) {
29619
- const text = firstString2(block.text, block.name);
29620
- if (text) {
29621
- return text.startsWith(labels.mentionPrefix) ? text : `${labels.mentionPrefix}${text}`;
29622
- }
29623
- return firstString2(block.uri, block.path) ?? "";
29624
- }
29625
- function serializeSkillBlock(block) {
29626
- const name = firstString2(block.name, block.text);
29627
- return name ? name.startsWith("/") ? name : `/${name}` : "";
29628
- }
29629
- function isSystemNoticeMessage(message) {
29630
- return firstString2(message.payload.kind) === "agent_system_notice";
29631
- }
29632
- function isToolMessage(message) {
29633
- const kind = message.kind.trim().toLowerCase();
29634
- return kind.includes("tool") || kind.includes("call") || firstString2(message.payload.callType, message.payload.toolName) !== null;
29635
- }
29636
- function compareMessagesAscending(left, right) {
29637
- const leftSequence = left.sequence ?? 0;
29638
- const rightSequence = right.sequence ?? 0;
29639
- if (leftSequence > 0 && rightSequence > 0 && leftSequence !== rightSequence) {
29640
- return leftSequence - rightSequence;
29641
- }
29642
- return left.occurredAtUnixMs - right.occurredAtUnixMs || left.version - right.version || left.messageId.localeCompare(right.messageId);
29643
- }
29644
- function minimumPositiveVersion(messages) {
29645
- let minimum = Number.POSITIVE_INFINITY;
29646
- for (const message of messages) {
29647
- if (Number.isFinite(message.version) && message.version > 0) {
29648
- minimum = Math.min(minimum, message.version);
29649
- }
29650
- }
29651
- return Number.isFinite(minimum) ? minimum : null;
29652
- }
29653
- function normalizedRole(role) {
29654
- return role.trim().toLowerCase();
29655
- }
29656
- function firstString2(...values) {
29657
- for (const value of values) {
29658
- if (typeof value === "string" && value.trim()) {
29659
- return value.trim();
29660
- }
29661
- }
29662
- return null;
29663
- }
29664
- function singleLine(value) {
29665
- return value.trim().replace(/\s+/g, " ");
29666
- }
29667
- function escapeMarkdownLabel(value) {
29668
- return value.replaceAll("\\", "\\\\").replaceAll("[", "\\[").replaceAll("]", "\\]");
29669
- }
29670
- function escapeMarkdownTarget(value) {
29671
- return value.replace(/>/g, "%3E");
29672
- }
29673
- function isRecord3(value) {
29674
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
29675
- }
29676
-
29677
29394
  // agent-gui/agentGuiNode/model/agentConversationCopyHtml.ts
29678
29395
  import { createElement } from "react";
29679
29396
  import { renderToStaticMarkup } from "react-dom/server";
@@ -29730,7 +29447,7 @@ async function readWorkspaceImageAsAttachment(readFile, input) {
29730
29447
  }
29731
29448
  function useAgentGUIClipboardWriter(labels) {
29732
29449
  const agentHostApi = useOptionalAgentHostApi();
29733
- return useCallback46(
29450
+ return useCallback47(
29734
29451
  (value, toastHandle) => {
29735
29452
  const payload = typeof value === "string" ? { text: value } : value;
29736
29453
  const clipboard = agentHostApi?.clipboard;
@@ -29766,7 +29483,7 @@ function useAgentGUIConversationCopyAction(labels) {
29766
29483
  const agentHostApi = useOptionalAgentHostApi();
29767
29484
  const agentActivityRuntime = useOptionalAgentActivityRuntime();
29768
29485
  const writeClipboardValue = useAgentGUIClipboardWriter(labels);
29769
- return useCallback46(
29486
+ return useCallback47(
29770
29487
  (action, { conversation, uiLanguage, workspaceId }) => {
29771
29488
  if (action === "copy-reference") {
29772
29489
  writeClipboardValue(
@@ -29861,7 +29578,7 @@ function useConversationActionGroups({
29861
29578
  const copyConversationValue = useAgentGUIConversationCopyAction(labels);
29862
29579
  const [resetKey, setResetKey] = useState29(0);
29863
29580
  const pendingActionRef = useRef37(false);
29864
- const run = useCallback46(
29581
+ const run = useCallback47(
29865
29582
  (action) => {
29866
29583
  if (pendingActionRef.current) {
29867
29584
  return;
@@ -30110,13 +29827,13 @@ var AgentGUIConversationRailItem = memo5(
30110
29827
  workspaceId,
30111
29828
  agentTargets
30112
29829
  );
30113
- const setItemElement = useCallback47(
29830
+ const setItemElement = useCallback48(
30114
29831
  (element) => {
30115
29832
  registerItemElement(item.id, element);
30116
29833
  },
30117
29834
  [item.id, registerItemElement]
30118
29835
  );
30119
- const handleMouseLeave = useCallback47(() => {
29836
+ const handleMouseLeave = useCallback48(() => {
30120
29837
  if (isPendingDeleteConversation && !isRailInteractionLocked()) {
30121
29838
  onCancelDeleteConversation();
30122
29839
  }
@@ -30412,16 +30129,16 @@ function AgentGUIProjectRailHeader({
30412
30129
  }
30413
30130
 
30414
30131
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailSectionHeader.tsx
30415
- import { forwardRef as forwardRef5, memo as memo6, useCallback as useCallback48, useState as useState30 } from "react";
30132
+ import { forwardRef as forwardRef5, memo as memo6, useCallback as useCallback49, useState as useState30 } from "react";
30416
30133
  import { ChevronRight as ChevronRight2 } from "lucide-react";
30417
30134
  import {
30418
30135
  DropdownMenu as DropdownMenu5,
30419
30136
  DropdownMenuContent as DropdownMenuContent5,
30420
30137
  DropdownMenuItem as DropdownMenuItem4,
30421
30138
  DropdownMenuTrigger as DropdownMenuTrigger5,
30422
- Tooltip as Tooltip6,
30423
- TooltipContent as TooltipContent6,
30424
- TooltipTrigger as TooltipTrigger6
30139
+ Tooltip as Tooltip7,
30140
+ TooltipContent as TooltipContent7,
30141
+ TooltipTrigger as TooltipTrigger7
30425
30142
  } from "@tutti-os/ui-system";
30426
30143
  import {
30427
30144
  BareIconButton as BareIconButton3
@@ -30581,10 +30298,10 @@ var CreateAction = memo6(function CreateAction2({
30581
30298
  if (previewMode) {
30582
30299
  return /* @__PURE__ */ jsx57("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: button });
30583
30300
  }
30584
- return /* @__PURE__ */ jsxs40(Tooltip6, { children: [
30585
- /* @__PURE__ */ jsx57(TooltipTrigger6, { asChild: true, children: /* @__PURE__ */ jsx57("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: button }) }),
30301
+ return /* @__PURE__ */ jsxs40(Tooltip7, { children: [
30302
+ /* @__PURE__ */ jsx57(TooltipTrigger7, { asChild: true, children: /* @__PURE__ */ jsx57("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: button }) }),
30586
30303
  /* @__PURE__ */ jsx57(
30587
- TooltipContent6,
30304
+ TooltipContent7,
30588
30305
  {
30589
30306
  side: "top",
30590
30307
  sideOffset: 6,
@@ -30620,10 +30337,10 @@ function ProjectMenuTrigger({
30620
30337
  if (previewMode) {
30621
30338
  return /* @__PURE__ */ jsx57(DropdownMenuTrigger5, { asChild: true, children: /* @__PURE__ */ jsx57("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: /* @__PURE__ */ jsx57(ProjectMenuButton, { accessibleName }) }) });
30622
30339
  }
30623
- return /* @__PURE__ */ jsxs40(Tooltip6, { children: [
30624
- /* @__PURE__ */ jsx57(TooltipTrigger6, { asChild: true, children: /* @__PURE__ */ jsx57("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: /* @__PURE__ */ jsx57(DropdownMenuTrigger5, { asChild: true, children: /* @__PURE__ */ jsx57(ProjectMenuButton, { accessibleName }) }) }) }),
30340
+ return /* @__PURE__ */ jsxs40(Tooltip7, { children: [
30341
+ /* @__PURE__ */ jsx57(TooltipTrigger7, { asChild: true, children: /* @__PURE__ */ jsx57("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: /* @__PURE__ */ jsx57(DropdownMenuTrigger5, { asChild: true, children: /* @__PURE__ */ jsx57(ProjectMenuButton, { accessibleName }) }) }) }),
30625
30342
  /* @__PURE__ */ jsx57(
30626
- TooltipContent6,
30343
+ TooltipContent7,
30627
30344
  {
30628
30345
  side: "right",
30629
30346
  sideOffset: 6,
@@ -30736,8 +30453,8 @@ function ConversationMenuTrigger({
30736
30453
  }
30737
30454
  ) }) });
30738
30455
  }
30739
- return /* @__PURE__ */ jsxs40(Tooltip6, { children: [
30740
- /* @__PURE__ */ jsx57(TooltipTrigger6, { asChild: true, children: /* @__PURE__ */ jsx57("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: /* @__PURE__ */ jsx57(DropdownMenuTrigger5, { asChild: true, children: /* @__PURE__ */ jsx57(
30456
+ return /* @__PURE__ */ jsxs40(Tooltip7, { children: [
30457
+ /* @__PURE__ */ jsx57(TooltipTrigger7, { asChild: true, children: /* @__PURE__ */ jsx57("span", { className: AgentGUINode_styles_default.conversationSectionActionTooltipWrap, children: /* @__PURE__ */ jsx57(DropdownMenuTrigger5, { asChild: true, children: /* @__PURE__ */ jsx57(
30741
30458
  BareIconButton3,
30742
30459
  {
30743
30460
  className: AgentGUINode_styles_default.conversationSectionMoreButton,
@@ -30747,7 +30464,7 @@ function ConversationMenuTrigger({
30747
30464
  }
30748
30465
  ) }) }) }),
30749
30466
  /* @__PURE__ */ jsx57(
30750
- TooltipContent6,
30467
+ TooltipContent7,
30751
30468
  {
30752
30469
  side: "right",
30753
30470
  sideOffset: 6,
@@ -30824,7 +30541,7 @@ var AgentGUIConversationRailSectionHeader = memo6(
30824
30541
  "use memo";
30825
30542
  const [projectMenuOpen, setProjectMenuOpen] = useState30(false);
30826
30543
  const [conversationMenuOpen, setConversationMenuOpen] = useState30(false);
30827
- const handleProjectMenuOpenChange = useCallback48(
30544
+ const handleProjectMenuOpenChange = useCallback49(
30828
30545
  (open) => {
30829
30546
  setProjectMenuOpen(open);
30830
30547
  onProjectMenuOpenChange(open);
@@ -30976,7 +30693,7 @@ var AgentGUIConversationRailSection = memo7(
30976
30693
  const visibleCountTowardTotal = visiblePageableIds.size + (activeConversationCountsTowardTotal && activeConversation && visibleItems.some((item) => item.id === activeConversation.id) && !visiblePageableIds.has(activeConversation.id) ? 1 : 0);
30977
30694
  const canShowMore = !isSectionCollapsed && visibleCountTowardTotal < sectionTotalCount && (visibleItemCount < pageableItems.length || sectionHasMore);
30978
30695
  const canShowLess = !isSectionCollapsed && visibleItemCount > AGENT_GUI_CONVERSATION_RAIL_SECTION_PAGE_SIZE;
30979
- const showMoreConversations = useCallback49(() => {
30696
+ const showMoreConversations = useCallback50(() => {
30980
30697
  if (isRailInteractionLocked()) return;
30981
30698
  if (visibleItemCount >= pageableItems.length && sectionHasMore) {
30982
30699
  onLoadMoreConversations(section);
@@ -31003,7 +30720,7 @@ var AgentGUIConversationRailSection = memo7(
31003
30720
  visibleItemCount,
31004
30721
  visibleItemLimit
31005
30722
  ]);
31006
- const showLessConversations = useCallback49(() => {
30723
+ const showLessConversations = useCallback50(() => {
31007
30724
  if (isRailInteractionLocked()) return;
31008
30725
  onVisibleItemLimitChange(
31009
30726
  section.id,
@@ -31215,7 +30932,7 @@ function AgentGUIProjectActionConfirmationDialog(props) {
31215
30932
  }
31216
30933
 
31217
30934
  // agent-gui/agentGuiNode/view/useAgentGUIConversationRailViewState.ts
31218
- import { useCallback as useCallback50, useLayoutEffect as useLayoutEffect6, useReducer, useRef as useRef38 } from "react";
30935
+ import { useCallback as useCallback51, useLayoutEffect as useLayoutEffect6, useReducer, useRef as useRef38 } from "react";
31219
30936
  function applyRailScrollNavigation(input) {
31220
30937
  const activeConversationId = input.activeConversationId?.trim() || null;
31221
30938
  const current = input.current.navigationKey === input.navigationKey ? input.current : {
@@ -31315,7 +31032,7 @@ function useAgentGUIConversationRailViewState(input) {
31315
31032
  navigationKey,
31316
31033
  searchActive
31317
31034
  ]);
31318
- const registerConversationItemElement = useCallback50(
31035
+ const registerConversationItemElement = useCallback51(
31319
31036
  (itemId, element) => {
31320
31037
  if (element) {
31321
31038
  conversationItemElementsRef.current.set(itemId, element);
@@ -31355,14 +31072,14 @@ function useAgentGUIConversationRailViewState(input) {
31355
31072
  }
31356
31073
 
31357
31074
  // agent-gui/agentGuiNode/view/useAgentGUIProjectMenuState.ts
31358
- import { useCallback as useCallback51, useState as useState31 } from "react";
31075
+ import { useCallback as useCallback52, useState as useState31 } from "react";
31359
31076
  function useAgentGUIProjectMenuState(isRailInteractionLocked, isUserProjectMutationPending) {
31360
31077
  const [openSectionId, setOpenSectionId] = useState31(null);
31361
- const isProjectActionLocked = useCallback51(
31078
+ const isProjectActionLocked = useCallback52(
31362
31079
  () => isRailInteractionLocked() || isUserProjectMutationPending,
31363
31080
  [isRailInteractionLocked, isUserProjectMutationPending]
31364
31081
  );
31365
- const onProjectMenuOpenChange = useCallback51(
31082
+ const onProjectMenuOpenChange = useCallback52(
31366
31083
  (sectionId, open) => {
31367
31084
  setOpenSectionId(
31368
31085
  (current) => open ? sectionId : current === sectionId ? null : current
@@ -33097,7 +32814,7 @@ var AgentGUIConversationRailController = memo9(
33097
32814
  // agent-gui/agentGuiNode/view/AgentGUIDetailPane.tsx
33098
32815
  import {
33099
32816
  memo as memo12,
33100
- useCallback as useCallback53,
32817
+ useCallback as useCallback54,
33101
32818
  useEffect as useEffect34,
33102
32819
  useMemo as useMemo38,
33103
32820
  useRef as useRef43,
@@ -33723,7 +33440,7 @@ function setTimelineScrollTopWithUserTransition(element, top) {
33723
33440
 
33724
33441
  // agent-gui/agentGuiNode/view/useAgentGUIDetailScroll.ts
33725
33442
  import {
33726
- useCallback as useCallback52,
33443
+ useCallback as useCallback53,
33727
33444
  useEffect as useEffect33,
33728
33445
  useLayoutEffect as useLayoutEffect7,
33729
33446
  useRef as useRef42,
@@ -34031,7 +33748,7 @@ function useAgentGUIDetailScroll(input) {
34031
33748
  viewModel.detail.hasOlderMessages,
34032
33749
  viewModel.detail.isLoadingOlderMessages
34033
33750
  ]);
34034
- const scrollTimelineToBottom = useCallback52(() => {
33751
+ const scrollTimelineToBottom = useCallback53(() => {
34035
33752
  const timeline = timelineRef.current;
34036
33753
  const activeConversationId = timelineConversationId;
34037
33754
  if (!timeline || !activeConversationId) {
@@ -34734,6 +34451,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34734
34451
  onCapabilitySettingsRequest,
34735
34452
  onAgentProviderLogin,
34736
34453
  onRequestWorkspaceReferences,
34454
+ resolveExternalPromptEntries = null,
34737
34455
  prepareExternalPromptFiles = null,
34738
34456
  promptAssetLimit = null,
34739
34457
  selectProjectDirectory,
@@ -34788,7 +34506,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34788
34506
  slashStatusLimitsUnavailable,
34789
34507
  viewModel
34790
34508
  });
34791
- const handleInterruptCurrentTurn = useCallback53(() => {
34509
+ const handleInterruptCurrentTurn = useCallback54(() => {
34792
34510
  actions.interruptCurrentTurn(labels.noRunningResponse);
34793
34511
  }, [actions.interruptCurrentTurn, labels.noRunningResponse]);
34794
34512
  const submitApprovalOption = useStableEventCallback(
@@ -34808,14 +34526,14 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34808
34526
  const selectHomeComposerAgentTarget = useStableEventCallback(
34809
34527
  actions.selectHomeComposerAgentTarget
34810
34528
  );
34811
- const selectHomeComposerAgentTargetAndFocus = useCallback53(
34529
+ const selectHomeComposerAgentTargetAndFocus = useCallback54(
34812
34530
  (input) => {
34813
34531
  selectHomeComposerAgentTarget(input);
34814
34532
  onRequestComposerFocus();
34815
34533
  },
34816
34534
  [onRequestComposerFocus, selectHomeComposerAgentTarget]
34817
34535
  );
34818
- const handleSelectHomeSuggestion = useCallback53(
34536
+ const handleSelectHomeSuggestion = useCallback54(
34819
34537
  (prompt) => {
34820
34538
  updateDraftContent(
34821
34539
  updateAgentComposerDraft(viewModel.composer.draftContent, { prompt })
@@ -34823,7 +34541,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34823
34541
  },
34824
34542
  [updateDraftContent, viewModel.composer.draftContent]
34825
34543
  );
34826
- const handleHomeSuggestionAction = useCallback53(
34544
+ const handleHomeSuggestionAction = useCallback54(
34827
34545
  (action) => {
34828
34546
  if (action === "import-session") {
34829
34547
  window.dispatchEvent(
@@ -34838,7 +34556,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34838
34556
  const submitGuidancePrompt = useStableEventCallback(
34839
34557
  actions.submitGuidancePrompt
34840
34558
  );
34841
- const requestSubmittedPromptScrollToBottom = useCallback53(() => {
34559
+ const requestSubmittedPromptScrollToBottom = useCallback54(() => {
34842
34560
  const activeConversationId = viewModel.rail.activeConversationId;
34843
34561
  if (!activeConversationId) {
34844
34562
  return;
@@ -34846,7 +34564,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34846
34564
  submittedPromptScrollConversationRef.current = activeConversationId;
34847
34565
  pendingPrependScrollAnchorRef.current = null;
34848
34566
  }, [viewModel.rail.activeConversationId]);
34849
- const submitPromptAndScrollToBottom = useCallback53(
34567
+ const submitPromptAndScrollToBottom = useCallback54(
34850
34568
  (content, displayPrompt, options) => {
34851
34569
  requestSubmittedPromptScrollToBottom();
34852
34570
  if (displayPrompt === void 0) {
@@ -34857,7 +34575,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34857
34575
  },
34858
34576
  [requestSubmittedPromptScrollToBottom, submitPrompt]
34859
34577
  );
34860
- const submitGuidancePromptAndScrollToBottom = useCallback53(
34578
+ const submitGuidancePromptAndScrollToBottom = useCallback54(
34861
34579
  (content, displayPrompt) => {
34862
34580
  requestSubmittedPromptScrollToBottom();
34863
34581
  if (displayPrompt === void 0) {
@@ -34888,7 +34606,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34888
34606
  );
34889
34607
  const stableRequestGitBranches = useOptionalStableEventCallback(onRequestGitBranches);
34890
34608
  const authLogin = useOptionalStableEventCallback(onAgentProviderLogin);
34891
- const submitBottomDockInteractivePrompt = useCallback53(
34609
+ const submitBottomDockInteractivePrompt = useCallback54(
34892
34610
  (input) => {
34893
34611
  submitInteractivePrompt(input);
34894
34612
  setBottomDockDismissedPromptRequestId(input.requestId);
@@ -34994,6 +34712,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
34994
34712
  onLinkAction: stableLinkAction,
34995
34713
  onHandoffConversation: stableHandoffConversation,
34996
34714
  onRequestWorkspaceReferences: stableRequestWorkspaceReferences,
34715
+ resolveExternalPromptEntries,
34997
34716
  prepareExternalPromptFiles,
34998
34717
  promptAssetLimit,
34999
34718
  selectProjectDirectory: stableSelectProjectDirectory,
@@ -35031,6 +34750,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
35031
34750
  editQueuedPrompt,
35032
34751
  onCapabilitySettingsRequest,
35033
34752
  removeQueuedPrompt,
34753
+ resolveExternalPromptEntries,
35034
34754
  prepareExternalPromptFiles,
35035
34755
  promptAssetLimit,
35036
34756
  sendQueuedPromptNext,
@@ -35226,7 +34946,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
35226
34946
  });
35227
34947
 
35228
34948
  // agent-gui/agentGuiNode/view/AgentGUIRenameConversationDialog.tsx
35229
- import { memo as memo13, useCallback as useCallback54, useEffect as useEffect35, useRef as useRef44, useState as useState39 } from "react";
34949
+ import { memo as memo13, useCallback as useCallback55, useEffect as useEffect35, useRef as useRef44, useState as useState39 } from "react";
35230
34950
  import { ConfirmationDialog as ConfirmationDialog3, Input as Input2 } from "@tutti-os/ui-system";
35231
34951
  import { jsx as jsx69, jsxs as jsxs49 } from "react/jsx-runtime";
35232
34952
  var AgentGUIRenameConversationDialog = memo13(
@@ -35264,12 +34984,12 @@ var AgentGUIRenameConversationDialog = memo13(
35264
34984
  }, 0);
35265
34985
  return () => window.clearTimeout(timer);
35266
34986
  }, [open, conversation?.id]);
35267
- const closeRenameDialog = useCallback54(() => {
34987
+ const closeRenameDialog = useCallback55(() => {
35268
34988
  if (!isSavingRef.current) {
35269
34989
  onOpenChange(false);
35270
34990
  }
35271
34991
  }, [onOpenChange]);
35272
- const confirmRename = useCallback54(() => {
34992
+ const confirmRename = useCallback55(() => {
35273
34993
  if (!conversation || isSavingRef.current || !trimmedTitle) {
35274
34994
  return;
35275
34995
  }
@@ -35471,7 +35191,7 @@ function AgentGUIReferencePickerSurface({
35471
35191
  }
35472
35192
 
35473
35193
  // agent-gui/agentGuiNode/view/AgentTargetSetupRoot.tsx
35474
- import { useCallback as useCallback55, useMemo as useMemo39 } from "react";
35194
+ import { useCallback as useCallback56, useMemo as useMemo39 } from "react";
35475
35195
  import { jsx as jsx71, jsxs as jsxs50 } from "react/jsx-runtime";
35476
35196
  function useAgentTargetSetupRoot(input) {
35477
35197
  const { preferences } = useAgentGUIProviderRailPreferences();
@@ -35489,7 +35209,7 @@ function useAgentTargetSetupRoot(input) {
35489
35209
  );
35490
35210
  const targetRuntimeSetupVisible = effectiveSelectedTarget.ref.setupKind === "target_runtime";
35491
35211
  const environmentSetupVisible = targetRuntimeSetupVisible || !!resolveAgentGUIProviderCatalogIdentity(input.environmentProvider ?? "");
35492
- const openAgentEnvSetup = useCallback55(() => {
35212
+ const openAgentEnvSetup = useCallback56(() => {
35493
35213
  if (targetRuntimeSetupVisible) {
35494
35214
  controller.setDialogOpen(true);
35495
35215
  return;
@@ -35530,7 +35250,7 @@ function AgentTargetSetupRoot({
35530
35250
  }
35531
35251
 
35532
35252
  // agent-gui/agentGuiNode/view/useAgentGUIWorkspaceReferencePicker.ts
35533
- import { useCallback as useCallback56, useMemo as useMemo40, useRef as useRef45, useState as useState40 } from "react";
35253
+ import { useCallback as useCallback57, useMemo as useMemo40, useRef as useRef45, useState as useState40 } from "react";
35534
35254
  import { createRichTextMentionHref } from "@tutti-os/ui-rich-text/core";
35535
35255
  function useAgentGUIWorkspaceReferencePicker(input) {
35536
35256
  const {
@@ -35551,11 +35271,11 @@ function useAgentGUIWorkspaceReferencePicker(input) {
35551
35271
  []
35552
35272
  );
35553
35273
  const hostLocalFileSourceId = "host-local-file";
35554
- const isWorkspaceReferencePickerNodeSelectable = useCallback56(
35274
+ const isWorkspaceReferencePickerNodeSelectable = useCallback57(
35555
35275
  (node) => node.ref.sourceId !== hostLocalFileSourceId || node.kind === "file",
35556
35276
  [hostLocalFileSourceId]
35557
35277
  );
35558
- const requestWorkspaceReferences = useCallback56(
35278
+ const requestWorkspaceReferences = useCallback57(
35559
35279
  async (entity) => {
35560
35280
  if (previewMode) {
35561
35281
  return emptyReferencePickResult;
@@ -35587,13 +35307,13 @@ function useAgentGUIWorkspaceReferencePicker(input) {
35587
35307
  workspaceFileReferenceCopy
35588
35308
  ]
35589
35309
  );
35590
- const closeWorkspaceReferencePicker = useCallback56(() => {
35310
+ const closeWorkspaceReferencePicker = useCallback57(() => {
35591
35311
  workspaceReferencePickerResolverRef.current?.(emptyReferencePickResult);
35592
35312
  workspaceReferencePickerResolverRef.current = null;
35593
35313
  setWorkspaceReferencePickerOpen(false);
35594
35314
  setWorkspaceReferencePickerTarget(null);
35595
35315
  }, [emptyReferencePickResult]);
35596
- const settleReferencePicker = useCallback56(
35316
+ const settleReferencePicker = useCallback57(
35597
35317
  (result, addedFiles) => {
35598
35318
  workspaceReferencePickerResolverRef.current?.(result);
35599
35319
  workspaceReferencePickerResolverRef.current = null;
@@ -35605,13 +35325,13 @@ function useAgentGUIWorkspaceReferencePicker(input) {
35605
35325
  },
35606
35326
  [onWorkspaceFileReferencesAdded]
35607
35327
  );
35608
- const confirmWorkspaceReferencePicker = useCallback56(
35328
+ const confirmWorkspaceReferencePicker = useCallback57(
35609
35329
  (refs) => {
35610
35330
  settleReferencePicker({ files: refs, mentionItems: [] }, refs);
35611
35331
  },
35612
35332
  [settleReferencePicker]
35613
35333
  );
35614
- const confirmWorkspaceReferenceBundles = useCallback56(
35334
+ const confirmWorkspaceReferenceBundles = useCallback57(
35615
35335
  (result) => {
35616
35336
  const workspaceRefs = result.files.filter(
35617
35337
  (ref) => ref.sourceId !== hostLocalFileSourceId
@@ -35908,7 +35628,7 @@ function useAgentGUINodeEngagement(input) {
35908
35628
  }
35909
35629
 
35910
35630
  // agent-gui/agentGuiNode/view/useAgentGUIExternalRequests.ts
35911
- import { useCallback as useCallback57, useEffect as useEffect37, useRef as useRef48 } from "react";
35631
+ import { useCallback as useCallback58, useEffect as useEffect37, useRef as useRef48 } from "react";
35912
35632
  function resolveSessionActionConversation(viewModel, agentSessionId) {
35913
35633
  const active = viewModel.rail.activeConversation;
35914
35634
  if (!agentSessionId) {
@@ -35935,7 +35655,7 @@ function useAgentGUIExternalRequests(input) {
35935
35655
  } = input;
35936
35656
  const agentHostApi = useOptionalAgentHostApi();
35937
35657
  const railInteractionLockProbeRef = useRef48(null);
35938
- const registerRailInteractionLockProbe = useCallback57(
35658
+ const registerRailInteractionLockProbe = useCallback58(
35939
35659
  (probe) => {
35940
35660
  railInteractionLockProbeRef.current = probe;
35941
35661
  },
@@ -36033,6 +35753,7 @@ function AgentGUINodeView({
36033
35753
  detailMinWidthPx,
36034
35754
  uiLanguage,
36035
35755
  onWorkspaceFileReferencesAdded,
35756
+ resolveExternalPromptEntries = null,
36036
35757
  prepareExternalPromptFiles = null,
36037
35758
  promptAssetLimit = null,
36038
35759
  onConversationRailWidthChanged,
@@ -36124,10 +35845,10 @@ function AgentGUINodeView({
36124
35845
  );
36125
35846
  const openProjectFiles = useOptionalStableEventCallback(onLinkAction);
36126
35847
  const detailComposerFocusRequestSequence = localComposerFocusRequestSequence === 0 ? composerFocusRequestSequence : (composerFocusRequestSequence ?? 0) + localComposerFocusRequestSequence;
36127
- const requestComposerFocus = useCallback58(() => {
35848
+ const requestComposerFocus = useCallback59(() => {
36128
35849
  setLocalComposerFocusRequestSequence((current) => current + 1);
36129
35850
  }, []);
36130
- const requestCreateConversation = useCallback58(
35851
+ const requestCreateConversation = useCallback59(
36131
35852
  (options) => {
36132
35853
  if (previewMode) {
36133
35854
  return;
@@ -36164,14 +35885,14 @@ function AgentGUINodeView({
36164
35885
  workspaceAppIcons
36165
35886
  ]
36166
35887
  );
36167
- const clampConversationRailWidth = useCallback58(
35888
+ const clampConversationRailWidth = useCallback59(
36168
35889
  (widthPx) => Math.min(
36169
35890
  conversationRailMaxWidthPx,
36170
35891
  Math.max(conversationRailMinWidthPx, widthPx)
36171
35892
  ),
36172
35893
  [conversationRailMaxWidthPx, conversationRailMinWidthPx]
36173
35894
  );
36174
- const handleConversationRailResizePointerDown = useCallback58(
35895
+ const handleConversationRailResizePointerDown = useCallback59(
36175
35896
  (event) => {
36176
35897
  if (previewMode) {
36177
35898
  return;
@@ -36192,7 +35913,7 @@ function AgentGUINodeView({
36192
35913
  },
36193
35914
  [conversationRailCollapsed, conversationRailWidthPx, previewMode]
36194
35915
  );
36195
- const handleConversationRailResizePointerMove = useCallback58(
35916
+ const handleConversationRailResizePointerMove = useCallback59(
36196
35917
  (event) => {
36197
35918
  if (previewMode) {
36198
35919
  return;
@@ -36215,7 +35936,7 @@ function AgentGUINodeView({
36215
35936
  },
36216
35937
  [clampConversationRailWidth, previewMode]
36217
35938
  );
36218
- const endConversationRailResize = useCallback58(
35939
+ const endConversationRailResize = useCallback59(
36219
35940
  (event) => {
36220
35941
  const resizeState = railResizeInteractionRef.current;
36221
35942
  if (event && resizeState?.pointerId === event.pointerId && event.currentTarget.hasPointerCapture?.(event.pointerId)) {
@@ -36246,7 +35967,7 @@ function AgentGUINodeView({
36246
35967
  isRailResizing,
36247
35968
  railResizeWidthPx
36248
35969
  ]);
36249
- const handleConversationRailResizeKeyDown = useCallback58(
35970
+ const handleConversationRailResizeKeyDown = useCallback59(
36250
35971
  (event) => {
36251
35972
  if (previewMode) {
36252
35973
  return;
@@ -36313,12 +36034,12 @@ function AgentGUINodeView({
36313
36034
  openEnvironmentSetup: onAgentEnvPanelOpen,
36314
36035
  selectedAgentTarget: viewModel.rail.selectedAgentTarget
36315
36036
  });
36316
- const openAgentSettings = useCallback58(() => {
36037
+ const openAgentSettings = useCallback59(() => {
36317
36038
  openWorkspaceSettingsPanel({ section: "agent" });
36318
36039
  }, []);
36319
36040
  const [renameConversationTarget, setRenameConversationTarget] = useState41(null);
36320
36041
  const [renameConversationDialogOpen, setRenameConversationDialogOpen] = useState41(false);
36321
- const requestRenameConversation = useCallback58(
36042
+ const requestRenameConversation = useCallback59(
36322
36043
  (conversation) => {
36323
36044
  setRenameConversationTarget(conversation);
36324
36045
  setRenameConversationDialogOpen(true);
@@ -36587,6 +36308,7 @@ function AgentGUINodeView({
36587
36308
  onCapabilitySettingsRequest,
36588
36309
  onAgentProviderLogin,
36589
36310
  onRequestWorkspaceReferences: requestWorkspaceReferences,
36311
+ resolveExternalPromptEntries,
36590
36312
  prepareExternalPromptFiles,
36591
36313
  promptAssetLimit,
36592
36314
  selectProjectDirectory,
@@ -36638,7 +36360,7 @@ function AgentGUINodeView({
36638
36360
  ]
36639
36361
  }
36640
36362
  ) });
36641
- return previewMode ? content : /* @__PURE__ */ jsx72(TooltipProvider5, { children: content });
36363
+ return previewMode ? content : /* @__PURE__ */ jsx72(TooltipProvider6, { children: content });
36642
36364
  }
36643
36365
 
36644
36366
  // agent-gui/workspaceDesktop/view/desktopDockAgentProbeTooltipModel.ts
@@ -36812,7 +36534,7 @@ function appendDockProbeUsageLines(probe, lines, isLoadingUsage, t) {
36812
36534
  // agent-gui/workspaceDesktop/view/AgentProbeInfoPopover.tsx
36813
36535
  import { Info as Info2 } from "lucide-react";
36814
36536
  import {
36815
- useCallback as useCallback59,
36537
+ useCallback as useCallback60,
36816
36538
  useEffect as useEffect39,
36817
36539
  useLayoutEffect as useLayoutEffect9,
36818
36540
  useRef as useRef50,
@@ -36857,20 +36579,20 @@ function AgentProbeInfoPopover({
36857
36579
  const popoverRef = useRef50(null);
36858
36580
  const [isOpen, setIsOpen] = useState42(false);
36859
36581
  const [popoverStyle, setPopoverStyle] = useState42(null);
36860
- const openPopover = useCallback59(() => {
36582
+ const openPopover = useCallback60(() => {
36861
36583
  if (!isOpen) {
36862
36584
  onOpen?.();
36863
36585
  }
36864
36586
  setIsOpen(true);
36865
36587
  }, [isOpen, onOpen]);
36866
- const closeIfPointerLeavesPopover = useCallback59((event) => {
36588
+ const closeIfPointerLeavesPopover = useCallback60((event) => {
36867
36589
  const nextTarget = event.relatedTarget;
36868
36590
  if (nextTarget instanceof Node && (anchorRef.current?.contains(nextTarget) || popoverRef.current?.contains(nextTarget))) {
36869
36591
  return;
36870
36592
  }
36871
36593
  setIsOpen(false);
36872
36594
  }, []);
36873
- const updatePopoverPosition = useCallback59(() => {
36595
+ const updatePopoverPosition = useCallback60(() => {
36874
36596
  const anchor = anchorRef.current;
36875
36597
  if (!anchor) {
36876
36598
  return;
@@ -37060,7 +36782,7 @@ function areAgentGUINodePropsEqual(previous, next) {
37060
36782
  const pc = previous.hostCapabilities, nc = next.hostCapabilities;
37061
36783
  const pa = previous.hostActions, na = next.hostActions;
37062
36784
  const ps = previous.renderSlots, ns = next.renderSlots;
37063
- return pi.nodeId === ni.nodeId && pi.workspaceId === ni.workspaceId && pi.currentUserId === ni.currentUserId && pi.title === ni.title && pw.path === nw.path && pw.fileReferenceAdapter === nw.fileReferenceAdapter && pw.onRequestGitBranches === nw.onRequestGitBranches && pw.selectProjectDirectory === nw.selectProjectDirectory && pw.prepareExternalPromptFiles === nw.prepareExternalPromptFiles && pw.promptAssetLimit === nw.promptAssetLimit && pw.referenceSourceAggregator === nw.referenceSourceAggregator && pw.resolveReferenceEntryIconUrl === nw.resolveReferenceEntryIconUrl && pw.resolveMentionReferenceTarget === nw.resolveMentionReferenceTarget && pw.resolveReferenceInitialTarget === nw.resolveReferenceInitialTarget && pw.onFileReferencesAdded === nw.onFileReferencesAdded && pw.agentSettings.avoidGroupingEdits === nw.agentSettings.avoidGroupingEdits && pc.referenceProvenanceFilterCatalog === nc.referenceProvenanceFilterCatalog && pc.referenceProvenanceFilterEnabled === nc.referenceProvenanceFilterEnabled && agentGuiStateEquals(previous.state, next.state) && pf.position.x === nf.position.x && pf.position.y === nf.position.y && pf.width === nf.width && pf.height === nf.height && pf.desktopSize.width === nf.desktopSize.width && pf.desktopSize.height === nf.desktopSize.height && pf.isMaximized === nf.isMaximized && pf.isActive === nf.isActive && pf.isVisible === nf.isVisible && pf.embedded === nf.embedded && pf.previewMode === nf.previewMode && pf.conversationRailAutoCollapseWidthPx === nf.conversationRailAutoCollapseWidthPx && pr.composerFocusSequence === nr.composerFocusSequence && pr.composerAppend === nr.composerAppend && pr.newConversationSequence === nr.newConversationSequence && pr.sessionAction === nr.sessionAction && pr.openSession === nr.openSession && pr.prefillPrompt === nr.prefillPrompt && pr.agentProbes === nr.agentProbes && pr.onProbeDemandChange === nr.onProbeDemandChange && pr.onProbeRefreshRequest === nr.onProbeRefreshRequest && pc.capabilityMenuState === nc.capabilityMenuState && pc.accountMenuState === nc.accountMenuState && pc.agentTargets === nc.agentTargets && pc.agentTargetsLoading === nc.agentTargetsLoading && pc.handoffAgentTargets === nc.handoffAgentTargets && pc.handoffAgentTargetsLoading === nc.handoffAgentTargetsLoading && pc.providerRailAllPresentation?.iconUrl === nc.providerRailAllPresentation?.iconUrl && pc.providerRailMode === nc.providerRailMode && pc.comingSoonProviders === nc.comingSoonProviders && pc.providerReadinessGates === nc.providerReadinessGates && pc.defaultAgentTargetId === nc.defaultAgentTargetId && pc.providerAuthAccountLabels === nc.providerAuthAccountLabels && pc.mentionService === nc.mentionService && pc.workspaceAppIcons === nc.workspaceAppIcons && pc.disabledHomeSuggestions === nc.disabledHomeSuggestions && pa.onLinkAction === na.onLinkAction && pa.onHandoffConversation === na.onHandoffConversation && pa.onCapabilitySettingsRequest === na.onCapabilitySettingsRequest && pa.onAgentProviderLogin === na.onAgentProviderLogin && pa.onAgentEnvPanelOpen === na.onAgentEnvPanelOpen && pa.onOpenConversationWindow === na.onOpenConversationWindow && pa.onClose === na.onClose && pa.onResize === na.onResize && pa.onUpdateNode === na.onUpdateNode && pa.onRememberComposerDefaults === na.onRememberComposerDefaults && pa.isMuted === na.isMuted && pa.onMinimize === na.onMinimize && pa.onToggleMaximize === na.onToggleMaximize && pa.onShowMessage === na.onShowMessage && pa.onEngagementEvent === na.onEngagementEvent && ps.providerRailEmpty === ns.providerRailEmpty && ps.providerUnavailableState === ns.providerUnavailableState && ps.sidebarFooter === ns.sidebarFooter;
36785
+ return pi.nodeId === ni.nodeId && pi.workspaceId === ni.workspaceId && pi.currentUserId === ni.currentUserId && pi.title === ni.title && pw.path === nw.path && pw.fileReferenceAdapter === nw.fileReferenceAdapter && pw.onRequestGitBranches === nw.onRequestGitBranches && pw.selectProjectDirectory === nw.selectProjectDirectory && pw.resolveExternalPromptEntries === nw.resolveExternalPromptEntries && pw.prepareExternalPromptFiles === nw.prepareExternalPromptFiles && pw.promptAssetLimit === nw.promptAssetLimit && pw.referenceSourceAggregator === nw.referenceSourceAggregator && pw.resolveReferenceEntryIconUrl === nw.resolveReferenceEntryIconUrl && pw.resolveMentionReferenceTarget === nw.resolveMentionReferenceTarget && pw.resolveReferenceInitialTarget === nw.resolveReferenceInitialTarget && pw.onFileReferencesAdded === nw.onFileReferencesAdded && pw.agentSettings.avoidGroupingEdits === nw.agentSettings.avoidGroupingEdits && pc.referenceProvenanceFilterCatalog === nc.referenceProvenanceFilterCatalog && pc.referenceProvenanceFilterEnabled === nc.referenceProvenanceFilterEnabled && agentGuiStateEquals(previous.state, next.state) && pf.position.x === nf.position.x && pf.position.y === nf.position.y && pf.width === nf.width && pf.height === nf.height && pf.desktopSize.width === nf.desktopSize.width && pf.desktopSize.height === nf.desktopSize.height && pf.isMaximized === nf.isMaximized && pf.isActive === nf.isActive && pf.isVisible === nf.isVisible && pf.embedded === nf.embedded && pf.previewMode === nf.previewMode && pf.conversationRailAutoCollapseWidthPx === nf.conversationRailAutoCollapseWidthPx && pr.composerFocusSequence === nr.composerFocusSequence && pr.composerAppend === nr.composerAppend && pr.newConversationSequence === nr.newConversationSequence && pr.sessionAction === nr.sessionAction && pr.openSession === nr.openSession && pr.prefillPrompt === nr.prefillPrompt && pr.agentProbes === nr.agentProbes && pr.onProbeDemandChange === nr.onProbeDemandChange && pr.onProbeRefreshRequest === nr.onProbeRefreshRequest && pc.capabilityMenuState === nc.capabilityMenuState && pc.accountMenuState === nc.accountMenuState && pc.agentTargets === nc.agentTargets && pc.agentTargetsLoading === nc.agentTargetsLoading && pc.handoffAgentTargets === nc.handoffAgentTargets && pc.handoffAgentTargetsLoading === nc.handoffAgentTargetsLoading && pc.providerRailAllPresentation?.iconUrl === nc.providerRailAllPresentation?.iconUrl && pc.providerRailMode === nc.providerRailMode && pc.comingSoonProviders === nc.comingSoonProviders && pc.providerReadinessGates === nc.providerReadinessGates && pc.defaultAgentTargetId === nc.defaultAgentTargetId && pc.providerAuthAccountLabels === nc.providerAuthAccountLabels && pc.mentionService === nc.mentionService && pc.workspaceAppIcons === nc.workspaceAppIcons && pc.disabledHomeSuggestions === nc.disabledHomeSuggestions && pa.onLinkAction === na.onLinkAction && pa.onHandoffConversation === na.onHandoffConversation && pa.onCapabilitySettingsRequest === na.onCapabilitySettingsRequest && pa.onAgentProviderLogin === na.onAgentProviderLogin && pa.onAgentEnvPanelOpen === na.onAgentEnvPanelOpen && pa.onOpenConversationWindow === na.onOpenConversationWindow && pa.onClose === na.onClose && pa.onResize === na.onResize && pa.onUpdateNode === na.onUpdateNode && pa.onRememberComposerDefaults === na.onRememberComposerDefaults && pa.isMuted === na.isMuted && pa.onMinimize === na.onMinimize && pa.onToggleMaximize === na.onToggleMaximize && pa.onShowMessage === na.onShowMessage && pa.onEngagementEvent === na.onEngagementEvent && ps.providerRailEmpty === ns.providerRailEmpty && ps.providerUnavailableState === ns.providerUnavailableState && ps.sidebarFooter === ns.sidebarFooter;
37064
36786
  }
37065
36787
 
37066
36788
  // agent-gui/agentGuiNode/AgentGUIMentionServiceBoundary.tsx
@@ -38114,6 +37836,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38114
37836
  fileReferenceAdapter: workspaceFileReferenceAdapter = null,
38115
37837
  onRequestGitBranches = null,
38116
37838
  selectProjectDirectory,
37839
+ resolveExternalPromptEntries = null,
38117
37840
  prepareExternalPromptFiles = null,
38118
37841
  promptAssetLimit = null,
38119
37842
  referenceSourceAggregator = null,
@@ -38208,13 +37931,13 @@ var AgentGUINode = memo14(function AgentGUINode2({
38208
37931
  () => typeof i18n?.t === "function" ? createWorkspaceFileManagerI18nRuntime(i18n) : null,
38209
37932
  [i18n]
38210
37933
  );
38211
- const handleLinkAction = useCallback60(
37934
+ const handleLinkAction = useCallback61(
38212
37935
  (action) => {
38213
37936
  onLinkAction?.(action);
38214
37937
  },
38215
37938
  [onLinkAction]
38216
37939
  );
38217
- const handleAgentProviderLogin = useCallback60(
37940
+ const handleAgentProviderLogin = useCallback61(
38218
37941
  (provider) => {
38219
37942
  const resolvedProvider = normalizeAgentGUIProviderIdentity(provider);
38220
37943
  onAgentProviderLogin?.(
@@ -38223,7 +37946,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38223
37946
  },
38224
37947
  [onAgentProviderLogin, state.provider]
38225
37948
  );
38226
- const handleWorkspaceFileReferencesAdded = useCallback60(
37949
+ const handleWorkspaceFileReferencesAdded = useCallback61(
38227
37950
  (references) => {
38228
37951
  onWorkspaceFileReferencesAdded?.({
38229
37952
  provider: state.provider,
@@ -38232,7 +37955,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38232
37955
  },
38233
37956
  [onWorkspaceFileReferencesAdded, state.provider]
38234
37957
  );
38235
- const handleDataChange = useCallback60(
37958
+ const handleDataChange = useCallback61(
38236
37959
  (updater) => {
38237
37960
  if (previewMode) {
38238
37961
  return;
@@ -38241,7 +37964,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38241
37964
  },
38242
37965
  [onUpdateNode, previewMode]
38243
37966
  );
38244
- const handleConversationRailWidthChanged = useCallback60(
37967
+ const handleConversationRailWidthChanged = useCallback61(
38245
37968
  (widthPx) => {
38246
37969
  if (previewMode) {
38247
37970
  return;
@@ -38273,7 +37996,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38273
37996
  }),
38274
37997
  []
38275
37998
  );
38276
- const toggleConversationRailCollapsed = useCallback60(() => {
37999
+ const toggleConversationRailCollapsed = useCallback61(() => {
38277
38000
  if (previewMode) {
38278
38001
  return;
38279
38002
  }
@@ -38282,7 +38005,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38282
38005
  conversationRailCollapsed: current.conversationRailCollapsed !== true
38283
38006
  }));
38284
38007
  }, [onUpdateNode, previewMode]);
38285
- const handleConversationRailToggle = useCallback60(() => {
38008
+ const handleConversationRailToggle = useCallback61(() => {
38286
38009
  if (previewMode) {
38287
38010
  return;
38288
38011
  }
@@ -38343,7 +38066,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38343
38066
  onRememberComposerDefaults,
38344
38067
  onShowMessage
38345
38068
  });
38346
- const handleCreateConversation = useCallback60(
38069
+ const handleCreateConversation = useCallback61(
38347
38070
  (...args) => {
38348
38071
  if (!previewMode) {
38349
38072
  onUpdateNode(
@@ -38468,13 +38191,13 @@ var AgentGUINode = memo14(function AgentGUINode2({
38468
38191
  previewMode,
38469
38192
  railStatusProvider
38470
38193
  ]);
38471
- const handleAgentProbeInfoOpen = useCallback60(() => {
38194
+ const handleAgentProbeInfoOpen = useCallback61(() => {
38472
38195
  if (previewMode || !onAgentProbeRefreshRequest) {
38473
38196
  return;
38474
38197
  }
38475
38198
  onAgentProbeRefreshRequest(activeProbeProvider, `agent-gui:${nodeId}`);
38476
38199
  }, [activeProbeProvider, nodeId, onAgentProbeRefreshRequest, previewMode]);
38477
- const handleAgentConfigMenuOpen = useCallback60(() => {
38200
+ const handleAgentConfigMenuOpen = useCallback61(() => {
38478
38201
  if (previewMode || !onAgentProbeRefreshRequest) {
38479
38202
  return;
38480
38203
  }
@@ -38489,7 +38212,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38489
38212
  previewMode,
38490
38213
  railStatusProvider
38491
38214
  ]);
38492
- const handleAgentUsageRefresh = useCallback60(() => {
38215
+ const handleAgentUsageRefresh = useCallback61(() => {
38493
38216
  if (previewMode || !onAgentProbeRefreshRequest) {
38494
38217
  return;
38495
38218
  }
@@ -38613,6 +38336,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
38613
38336
  detailMinWidthPx: AGENT_GUI_DETAIL_MIN_WIDTH_PX,
38614
38337
  uiLanguage: locale,
38615
38338
  onWorkspaceFileReferencesAdded: onWorkspaceFileReferencesAdded ? handleWorkspaceFileReferencesAdded : void 0,
38339
+ resolveExternalPromptEntries,
38616
38340
  prepareExternalPromptFiles,
38617
38341
  promptAssetLimit,
38618
38342
  onConversationRailWidthChanged: handleConversationRailWidthChanged,
@@ -38718,7 +38442,7 @@ var AgentGUI = memo15(function AgentGUI2({
38718
38442
  children: /* @__PURE__ */ jsx76(AgentGUINode, { ...nodeProps })
38719
38443
  }
38720
38444
  ) });
38721
- return props.frame.previewMode ? content : /* @__PURE__ */ jsx76(TooltipProvider6, { delayDuration: 120, skipDelayDuration: 0, children: content });
38445
+ return props.frame.previewMode ? content : /* @__PURE__ */ jsx76(TooltipProvider7, { delayDuration: 120, skipDelayDuration: 0, children: content });
38722
38446
  });
38723
38447
 
38724
38448
  export {
@@ -38732,4 +38456,4 @@ export {
38732
38456
  AgentHandoffMenu,
38733
38457
  AgentGUI
38734
38458
  };
38735
- //# sourceMappingURL=chunk-57W6N7EW.js.map
38459
+ //# sourceMappingURL=chunk-LWXHBRDO.js.map