@tutti-os/agent-gui 0.0.209 → 0.0.211

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 (53) hide show
  1. package/README.md +10 -1
  2. package/dist/{AgentRichTextReadonly-DFWY2WYO.js → AgentRichTextReadonly-GEGDM5UJ.js} +5 -5
  3. package/dist/agent-conversation/index.js +7 -7
  4. package/dist/agent-gui.d.ts +2 -0
  5. package/dist/agent-gui.js +14 -14
  6. package/dist/agent-message-center/index.js +6 -6
  7. package/dist/app/renderer/agentactivity.css +5 -0
  8. package/dist/app/renderer/assets/icons/agents/tutti-mode.png +0 -0
  9. package/dist/app/renderer/assets/icons/tutti-intensity-handle-balance.png +0 -0
  10. package/dist/app/renderer/assets/icons/tutti-intensity-handle-cost.png +0 -0
  11. package/dist/app/renderer/assets/icons/tutti-intensity-handle-powerful.png +0 -0
  12. package/dist/app/renderer/assets/icons/tutti-mode-lined.svg +3 -0
  13. package/dist/{chunk-CKUR2VKA.js → chunk-3MMKYY6R.js} +2 -2
  14. package/dist/{chunk-RAO2PI3T.js → chunk-4VXUWPPZ.js} +4 -4
  15. package/dist/{chunk-5RZVXSQQ.js → chunk-7CJEFNHW.js} +2 -2
  16. package/dist/{chunk-RTKIOE4R.js → chunk-AT4DII34.js} +548 -578
  17. package/dist/chunk-AT4DII34.js.map +1 -0
  18. package/dist/{chunk-HXAOFFZJ.js → chunk-CVGUT36H.js} +2 -2
  19. package/dist/{chunk-FWR5BZYR.js → chunk-HH5EWBH2.js} +2 -2
  20. package/dist/{chunk-6LXC5BME.js → chunk-KY2IYJXK.js} +4 -4
  21. package/dist/{chunk-DKRX5IZS.js → chunk-P4LVBSFC.js} +3 -3
  22. package/dist/{chunk-JRYR2EA5.js → chunk-PLAOIDNY.js} +4 -4
  23. package/dist/{chunk-CCFYCSBK.js → chunk-SXZJ3MDI.js} +6 -6
  24. package/dist/{chunk-V2MU37VN.js → chunk-U5NVLMW2.js} +2 -2
  25. package/dist/{chunk-THRBLO2B.js → chunk-X2LSVRRX.js} +2 -2
  26. package/dist/{chunk-M2VRYG7U.js → chunk-Y2VQMPUR.js} +9 -9
  27. package/dist/chunk-Y2VQMPUR.js.map +1 -0
  28. package/dist/{chunk-VGPFDVSK.js → chunk-Z23HCYYR.js} +3 -3
  29. package/dist/context-mention-palette/index.js +7 -7
  30. package/dist/i18n/index.d.ts +8 -8
  31. package/dist/i18n/index.js +2 -2
  32. package/dist/index.d.ts +10 -8
  33. package/dist/index.js +14 -14
  34. package/dist/mention-search.js +5 -5
  35. package/dist/workbench/contribution.js +3 -3
  36. package/dist/workbench/index.js +3 -3
  37. package/dist/workbench/sessionTitle.js +2 -2
  38. package/package.json +16 -16
  39. package/dist/chunk-M2VRYG7U.js.map +0 -1
  40. package/dist/chunk-RTKIOE4R.js.map +0 -1
  41. /package/dist/{AgentRichTextReadonly-DFWY2WYO.js.map → AgentRichTextReadonly-GEGDM5UJ.js.map} +0 -0
  42. /package/dist/{chunk-CKUR2VKA.js.map → chunk-3MMKYY6R.js.map} +0 -0
  43. /package/dist/{chunk-RAO2PI3T.js.map → chunk-4VXUWPPZ.js.map} +0 -0
  44. /package/dist/{chunk-5RZVXSQQ.js.map → chunk-7CJEFNHW.js.map} +0 -0
  45. /package/dist/{chunk-HXAOFFZJ.js.map → chunk-CVGUT36H.js.map} +0 -0
  46. /package/dist/{chunk-FWR5BZYR.js.map → chunk-HH5EWBH2.js.map} +0 -0
  47. /package/dist/{chunk-6LXC5BME.js.map → chunk-KY2IYJXK.js.map} +0 -0
  48. /package/dist/{chunk-DKRX5IZS.js.map → chunk-P4LVBSFC.js.map} +0 -0
  49. /package/dist/{chunk-JRYR2EA5.js.map → chunk-PLAOIDNY.js.map} +0 -0
  50. /package/dist/{chunk-CCFYCSBK.js.map → chunk-SXZJ3MDI.js.map} +0 -0
  51. /package/dist/{chunk-V2MU37VN.js.map → chunk-U5NVLMW2.js.map} +0 -0
  52. /package/dist/{chunk-THRBLO2B.js.map → chunk-X2LSVRRX.js.map} +0 -0
  53. /package/dist/{chunk-VGPFDVSK.js.map → chunk-Z23HCYYR.js.map} +0 -0
@@ -15,7 +15,7 @@ import {
15
15
  resolveAgentGuiSessionProviderFlatIconUrl,
16
16
  resolveNextAgentGUIConversationRailWidthPx,
17
17
  shouldAutoCollapseAgentGUIConversationRail
18
- } from "./chunk-DKRX5IZS.js";
18
+ } from "./chunk-P4LVBSFC.js";
19
19
  import {
20
20
  resolveAgentGuiWorkbenchProviderLabel
21
21
  } from "./chunk-MGSRWYRN.js";
@@ -34,7 +34,7 @@ import {
34
34
  resolveAgentGUIFirstUserMessageDisplayPrompt,
35
35
  resolveAgentGUIProviderDisplayLabel,
36
36
  resolveAgentGUIProviderIdentity
37
- } from "./chunk-V2MU37VN.js";
37
+ } from "./chunk-U5NVLMW2.js";
38
38
  import {
39
39
  AgentCommercePresentationProvider,
40
40
  AgentConversationFlow,
@@ -70,7 +70,7 @@ import {
70
70
  toLocalShortDateTime,
71
71
  updateAgentComposerDraft,
72
72
  useProjectedAgentConversation
73
- } from "./chunk-CCFYCSBK.js";
73
+ } from "./chunk-SXZJ3MDI.js";
74
74
  import {
75
75
  agentRichTextContentToPromptText,
76
76
  createAgentRichTextInputExtensions,
@@ -80,7 +80,7 @@ import {
80
80
  plainTextToAgentRichTextInlineContent,
81
81
  skillDescriptionForDisplay,
82
82
  skillTriggerForPrefix
83
- } from "./chunk-HXAOFFZJ.js";
83
+ } from "./chunk-CVGUT36H.js";
84
84
  import {
85
85
  AgentEnvPanelActionProvider
86
86
  } from "./chunk-JZ6KUUDY.js";
@@ -95,7 +95,7 @@ import {
95
95
  AgentFileMentionPalette,
96
96
  agentMentionItemKey,
97
97
  isAgentMentionItemDisabled
98
- } from "./chunk-6LXC5BME.js";
98
+ } from "./chunk-KY2IYJXK.js";
99
99
  import {
100
100
  normalizeAgentGUIAgents,
101
101
  projectAgentGUIAgentsToTargets
@@ -106,7 +106,7 @@ import {
106
106
  DEFAULT_AGENT_MENTION_FILTER,
107
107
  agentGuiScheduler,
108
108
  buildWorkspaceAgentActivityListViewModel
109
- } from "./chunk-JRYR2EA5.js";
109
+ } from "./chunk-PLAOIDNY.js";
110
110
  import {
111
111
  AGENT_RICH_TEXT_CARET_ANCHOR,
112
112
  agentComposerFileMentionReferences,
@@ -123,7 +123,7 @@ import {
123
123
  parseMentionItemFromHref,
124
124
  remainingAgentComposerPromptAssetSlots,
125
125
  updateAgentComposerFileMentions
126
- } from "./chunk-5RZVXSQQ.js";
126
+ } from "./chunk-7CJEFNHW.js";
127
127
  import {
128
128
  AgentInteractivePromptSurface,
129
129
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
@@ -135,7 +135,7 @@ import {
135
135
  normalizePlanIssueBudgetPreset,
136
136
  planImplementationPromptFromPlanTurn,
137
137
  planIssueBudgetPresetsEqual
138
- } from "./chunk-RAO2PI3T.js";
138
+ } from "./chunk-4VXUWPPZ.js";
139
139
  import {
140
140
  useEngineSelector
141
141
  } from "./chunk-EVQ4JY3N.js";
@@ -145,7 +145,7 @@ import {
145
145
  blobToBase64,
146
146
  normalizeAgentApprovalPurpose,
147
147
  resolveWorkspaceLinkAction
148
- } from "./chunk-VGPFDVSK.js";
148
+ } from "./chunk-Z23HCYYR.js";
149
149
  import {
150
150
  AgentTargetPresentationProvider,
151
151
  cn,
@@ -163,7 +163,7 @@ import {
163
163
  useAgentHostApi,
164
164
  useOptionalAgentActivityRuntime,
165
165
  useOptionalAgentHostApi
166
- } from "./chunk-FWR5BZYR.js";
166
+ } from "./chunk-HH5EWBH2.js";
167
167
  import {
168
168
  MANAGED_AGENT_ICON_FALLBACK_URL,
169
169
  MANAGED_AGENT_ICON_URLS,
@@ -173,7 +173,7 @@ import {
173
173
  AgentGuiI18nProvider,
174
174
  translate,
175
175
  useTranslation
176
- } from "./chunk-THRBLO2B.js";
176
+ } from "./chunk-X2LSVRRX.js";
177
177
  import {
178
178
  isBetaAgentProvider,
179
179
  normalizeManagedAgentProvider
@@ -15050,6 +15050,7 @@ var styles = {
15050
15050
  composerFooterRight: "agent-gui-node__composer-footer-right",
15051
15051
  composerHero: "agent-gui-node__composer-hero",
15052
15052
  composerFloatingPrompt: "agent-gui-node__composer-floating-prompt",
15053
+ composerDisclosurePanel: "agent-gui-chrome__composer-disclosure-panel",
15053
15054
  composerFileDropOverlay: "agent-gui-node__composer-file-drop-overlay",
15054
15055
  composerFileDropOverlayActive: "agent-gui-node__composer-file-drop-overlay--active",
15055
15056
  composerFileDropOverlayCard: "agent-gui-node__composer-file-drop-overlay-card",
@@ -15992,7 +15993,7 @@ import {
15992
15993
  useCallback as useCallback51,
15993
15994
  useMemo as useMemo37,
15994
15995
  useRef as useRef45,
15995
- useState as useState33
15996
+ useState as useState32
15996
15997
  } from "react";
15997
15998
  import { Tooltip as Tooltip9, TooltipContent as TooltipContent9, TooltipTrigger as TooltipTrigger9 } from "@tutti-os/ui-system";
15998
15999
 
@@ -16215,14 +16216,12 @@ function changeAgentGUIProviderManagerVisibility(input) {
16215
16216
  }
16216
16217
 
16217
16218
  // agent-gui/agentGuiNode/view/AgentGUIEmptyState.tsx
16218
- import { memo as memo3, useId as useId2, useMemo as useMemo36 } from "react";
16219
- import { Sparkles as Sparkles2 } from "lucide-react";
16219
+ import { memo as memo3, useMemo as useMemo36 } from "react";
16220
16220
  import {
16221
16221
  Select as Select5,
16222
16222
  SelectContent as SelectContent5,
16223
16223
  SelectItem as SelectItem5,
16224
16224
  SelectTrigger as SelectTrigger5,
16225
- Switch,
16226
16225
  cn as cn7
16227
16226
  } from "@tutti-os/ui-system";
16228
16227
 
@@ -17925,7 +17924,7 @@ function AgentSessionChrome({
17925
17924
  }
17926
17925
 
17927
17926
  // agent-gui/agentGuiNode/AgentComposer.tsx
17928
- import { useCallback as useCallback48, useEffect as useEffect28, useRef as useRef42, useState as useState29 } from "react";
17927
+ import { useCallback as useCallback48, useEffect as useEffect28, useRef as useRef42, useState as useState28 } from "react";
17929
17928
  import { repairMentionPaletteHighlight } from "@tutti-os/ui-rich-text/at-panel";
17930
17929
 
17931
17930
  // agent-gui/agentGuiNode/AgentSlashStatusPanel.tsx
@@ -19601,7 +19600,7 @@ function AgentComposerMaskIcon({
19601
19600
  "span",
19602
19601
  {
19603
19602
  "aria-hidden": true,
19604
- className: "inline-block size-3.5 bg-[var(--text-secondary)] transition-colors group-hover:bg-[var(--text-primary)] group-focus-visible:bg-[var(--text-primary)]",
19603
+ className: "inline-block size-4 bg-[var(--text-secondary)] transition-colors group-hover:bg-[var(--text-primary)] group-focus-visible:bg-[var(--text-primary)]",
19605
19604
  "data-agent-reference-add-icon": marker === "reference-add" ? "true" : void 0,
19606
19605
  style: {
19607
19606
  WebkitMaskImage: `url("${iconUrl}")`,
@@ -21523,7 +21522,7 @@ function useComposerPresentation(input) {
21523
21522
  // agent-gui/agentGuiNode/composer/AgentComposerView.tsx
21524
21523
  import { createPortal as createPortal4 } from "react-dom";
21525
21524
  import {
21526
- Popover as Popover6,
21525
+ Popover as Popover5,
21527
21526
  PopoverAnchor as PopoverAnchor2,
21528
21527
  Tooltip as Tooltip8,
21529
21528
  TooltipContent as TooltipContent8,
@@ -26095,7 +26094,7 @@ function ComposerDraftAttachments({
26095
26094
  }
26096
26095
 
26097
26096
  // agent-gui/agentGuiNode/composer/ComposerFooter.tsx
26098
- import { ListChecks as ListChecks2, Sparkles, Target as Target2, X as X5 } from "lucide-react";
26097
+ import { ListChecks as ListChecks2, Target as Target2, X as X5 } from "lucide-react";
26099
26098
  import {
26100
26099
  Select as Select3,
26101
26100
  SelectContent as SelectContent3,
@@ -26300,200 +26299,69 @@ function AgentHandoffMenu({
26300
26299
  );
26301
26300
  }
26302
26301
 
26303
- // agent-gui/agentGuiNode/composer/TuttiBudgetPopover.tsx
26304
- import { useState as useState23 } from "react";
26305
- import {
26306
- Badge,
26307
- Button as Button4,
26308
- Popover as Popover4,
26309
- PopoverContent as PopoverContent4,
26310
- PopoverTrigger as PopoverTrigger3,
26311
- Slider
26312
- } from "@tutti-os/ui-system";
26302
+ // agent-gui/agentGuiNode/composer/ComposerTuttiModeChip.tsx
26303
+ import { useId } from "react";
26304
+ import { Switch } from "@tutti-os/ui-system";
26313
26305
 
26314
- // agent-gui/agentGuiNode/composer/tuttiIntensityPreview.ts
26315
- function projectTuttiIntensityPreview(intensity) {
26316
- const normalized = Number.isFinite(intensity) ? Math.min(100, Math.max(0, Math.round(intensity))) : 50;
26317
- const tier = normalized <= 33 ? "cost" : normalized <= 66 ? "balance" : "powerful";
26318
- return {
26319
- intensity: normalized,
26320
- tier,
26321
- modelStrength: tier === "cost" ? "economical" : tier === "balance" ? "balanced" : "mostCapable",
26322
- agentCount: tier === "cost" ? "single" : tier === "balance" ? "smallGroup" : "maxParallel"
26323
- };
26324
- }
26306
+ // app/renderer/assets/icons/tutti-mode-lined.svg
26307
+ var tutti_mode_lined_default = "data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%3Cpath%20d%3D%22M6.2525%202.29982C7.33705%201.67365%208.42639%201.76315%209.30719%202.19923C10.1442%202.61379%2010.7869%203.32997%2011.1783%204.00782C11.182%204.01417%2011.1865%204.02092%2011.19%204.02735L14.6041%2010.2568C14.8975%209.82469%2015.2682%209.41791%2015.6949%209.08398C16.562%208.40562%2017.7709%207.94423%2019.1187%208.30273C20.0625%208.55396%2020.6751%209.17174%2020.9293%2010.0039C21.1566%2010.7488%2021.0723%2011.5815%2020.9039%2012.3262C20.5644%2013.8263%2019.7411%2015.5353%2019.1636%2016.7519C18.1461%2018.8959%2016.5837%2020.9345%2014.6656%2022.2089C12.7211%2023.5006%2010.3591%2024.0285%207.92243%2022.9794C6.53406%2022.3816%205.11984%2021.3547%204.02984%2020.1396C2.95362%2018.9398%202.08969%2017.4375%202.0191%2015.8711C2.00256%2015.5011%202.07428%2015.0786%202.21051%2014.707C2.32007%2014.4085%202.5283%2013.9859%202.9107%2013.6933L3.08551%2013.5761C3.52116%2013.3247%204.00247%2013.2136%204.47613%2013.2246C4.56029%2012.337%205.00243%2011.5023%205.92926%2010.9639C6.24585%2010.78%206.59784%2010.6401%206.96442%2010.5586L5.18121%207.4707C4.77623%206.76922%204.50913%205.83092%204.59723%204.89063C4.68916%203.91106%205.17521%202.92193%206.2525%202.29982ZM8.4195%203.99219C8.0585%203.81354%207.68432%203.78292%207.2525%204.03223C6.81383%204.28569%206.62867%204.64873%206.58844%205.07715C6.54458%205.54507%206.6839%206.07275%206.91364%206.4707L9.6861%2011.2724C9.72481%2011.3395%209.75419%2011.4094%209.77594%2011.4805C9.83692%2011.5617%209.89457%2011.649%209.94782%2011.7412C10.2235%2012.2194%2010.0596%2012.8313%209.58161%2013.1074C9.10351%2013.3833%208.49163%2013.219%208.2154%2012.7412C8.13017%2012.5938%208.00116%2012.508%207.78668%2012.4844C7.54655%2012.458%207.22985%2012.5217%206.93414%2012.6933C6.47716%2012.9588%206.21644%2013.6335%206.75055%2014.5586C6.80212%2014.648%206.8383%2014.7422%206.85993%2014.8379C6.88169%2014.9341%206.88921%2015.0325%206.88239%2015.1289C6.88011%2015.1605%206.87591%2015.1924%206.87067%2015.2236C6.84953%2015.3497%206.80398%2015.4712%206.73688%2015.581C6.71999%2015.6086%206.70182%2015.6361%206.68219%2015.6621C6.604%2015.7655%206.50365%2015.8558%206.38434%2015.9248C6.26484%2015.9937%206.13622%2016.0358%206.00739%2016.0517C5.97532%2016.0557%205.94278%2016.0567%205.91071%2016.0576C5.78181%2016.0609%205.65369%2016.0399%205.53375%2015.9951C5.50399%2015.984%205.47451%2015.9719%205.44586%2015.958C5.38803%2015.9299%205.33274%2015.8956%205.28082%2015.8564C5.22884%2015.8172%205.17952%2015.7725%205.13531%2015.7226C5.0915%2015.6731%205.05248%2015.618%205.01813%2015.5586C4.84584%2015.2603%204.44767%2015.1429%204.13824%2015.2851C4.12447%2015.3096%204.10645%2015.3465%204.08844%2015.3955C4.06324%2015.4643%204.04336%2015.542%204.03082%2015.6172C4.01804%2015.6941%204.01585%2015.7518%204.01715%2015.7812C4.05847%2016.6992%204.59721%2017.777%205.5191%2018.8046C6.42748%2019.8172%207.60728%2020.6662%208.71344%2021.1425C10.3938%2021.8659%2012.0425%2021.5504%2013.5592%2020.5429C15.1019%2019.5179%2016.4527%2017.7999%2017.357%2015.8945C17.965%2014.6134%2018.6735%2013.1231%2018.9537%2011.8847C19.0949%2011.2602%2019.0921%2010.8367%2019.0162%2010.5879C18.967%2010.4271%2018.8907%2010.3115%2018.6051%2010.2353C18.0234%2010.0806%2017.4482%2010.2526%2016.9283%2010.6592C16.3901%2011.0803%2016.0271%2011.6697%2015.9146%2012.0888C15.8847%2012.2004%2015.8355%2012.3022%2015.774%2012.3926L15.8941%2012.6133C16.1594%2013.0975%2015.9828%2013.7052%2015.4986%2013.9707C15.0144%2014.236%2014.4067%2014.0583%2014.1412%2013.5742L9.44196%204.99903C9.19845%204.58079%208.82143%204.19137%208.4195%203.99219ZM16.8004%201.13869C16.8688%200.95384%2017.1302%200.953926%2017.1988%201.13869L17.5113%201.98243C17.7695%202.67996%2018.3197%203.22996%2019.0172%203.48829L19.8609%203.80079C20.0458%203.86929%2020.0458%204.13073%2019.8609%204.19922L19.0172%204.51172C18.3197%204.77005%2017.7695%205.32004%2017.5113%206.01758L17.1988%206.86133C17.1302%207.04606%2016.8689%207.04614%2016.8004%206.86133L16.4879%206.01758C16.2296%205.31999%2015.6796%204.76998%2014.982%204.51172L14.1383%204.19922C13.9538%204.13058%2013.9538%203.86944%2014.1383%203.80079L14.982%203.48829C15.6796%203.23003%2016.2296%202.68002%2016.4879%201.98243L16.8004%201.13869Z%22%20fill%3D%22black%22%2F%3E%0A%3C%2Fsvg%3E%0A";
26325
26308
 
26326
- // agent-gui/agentGuiNode/composer/TuttiBudgetPopover.tsx
26309
+ // agent-gui/agentGuiNode/composer/ComposerTuttiModeChip.tsx
26327
26310
  import { jsx as jsx39, jsxs as jsxs29 } from "react/jsx-runtime";
26328
- var tierTone = {
26329
- cost: {
26330
- badgeVariant: "success",
26331
- sliderClassName: "[&_[data-slot=slider-thumb]]:border-[var(--state-success)]"
26332
- },
26333
- balance: {
26334
- badgeVariant: "warning",
26335
- sliderClassName: "[&_[data-slot=slider-thumb]]:border-[var(--state-warning)]"
26336
- },
26337
- powerful: {
26338
- badgeVariant: "pending",
26339
- sliderClassName: "[&_[data-slot=slider-thumb]]:border-[var(--tutti-purple)]"
26340
- }
26341
- };
26342
- function TuttiBudgetPopover({
26343
- children,
26344
- intensity,
26345
- labels,
26346
- onConfirm
26311
+ function ComposerTuttiModeChip({
26312
+ active,
26313
+ updating,
26314
+ label,
26315
+ description,
26316
+ tuttiModeSupported,
26317
+ onTuttiModeChange
26347
26318
  }) {
26348
- const [open, setOpen] = useState23(false);
26349
- const [draftIntensity, setDraftIntensity] = useState23(intensity);
26350
- const preview = projectTuttiIntensityPreview(draftIntensity);
26351
- const previewTone = tierTone[preview.tier];
26352
- const previewLabel = {
26353
- cost: labels.previewCost,
26354
- balance: labels.previewBalance,
26355
- powerful: labels.previewPowerful
26356
- }[preview.tier];
26357
- const modelStrength = {
26358
- economical: labels.modelStrengthCost,
26359
- balanced: labels.modelStrengthBalance,
26360
- mostCapable: labels.modelStrengthPowerful
26361
- }[preview.modelStrength];
26362
- const agentCount = {
26363
- single: labels.agentCountCost,
26364
- smallGroup: labels.agentCountBalance,
26365
- maxParallel: labels.agentCountPowerful
26366
- }[preview.agentCount];
26319
+ const switchId = useId();
26320
+ if (!onTuttiModeChange || !tuttiModeSupported) {
26321
+ return null;
26322
+ }
26367
26323
  return /* @__PURE__ */ jsxs29(
26368
- Popover4,
26324
+ "label",
26369
26325
  {
26370
- open,
26371
- onOpenChange: (nextOpen) => {
26372
- if (nextOpen) {
26373
- setDraftIntensity(intensity);
26374
- }
26375
- setOpen(nextOpen);
26376
- },
26326
+ htmlFor: switchId,
26327
+ title: description ?? label,
26328
+ "data-testid": "agent-gui-composer-tutti-mode-toggle",
26329
+ "data-agent-tutti-mode-active": active ? "true" : void 0,
26330
+ className: cn(
26331
+ AgentGUINode_styles_default.composerMenuTrigger,
26332
+ "group w-auto !gap-1.5",
26333
+ updating ? "cursor-wait opacity-70" : "cursor-pointer"
26334
+ ),
26377
26335
  children: [
26378
- /* @__PURE__ */ jsx39(PopoverTrigger3, { asChild: true, children }),
26379
- /* @__PURE__ */ jsxs29(
26380
- PopoverContent4,
26336
+ /* @__PURE__ */ jsx39(
26337
+ "span",
26381
26338
  {
26382
- align: "start",
26383
- className: "nodrag",
26384
- "data-agent-tutti-budget-popover": "true",
26385
- onEscapeKeyDown: (event) => {
26386
- event.preventDefault();
26387
- setOpen(false);
26388
- },
26389
- onInteractOutside: (event) => event.preventDefault(),
26390
- onPointerDownOutside: (event) => event.preventDefault(),
26391
- children: [
26392
- /* @__PURE__ */ jsx39("div", { className: "text-[13px] font-semibold text-[var(--text-primary)]", children: labels.title }),
26393
- /* @__PURE__ */ jsxs29(
26394
- "div",
26395
- {
26396
- className: "rounded-[8px] border border-[var(--line-2)] bg-[var(--transparency-block)] p-2.5",
26397
- "data-agent-tutti-budget-preview": preview.tier,
26398
- children: [
26399
- /* @__PURE__ */ jsxs29("div", { className: "flex items-center justify-between gap-2 text-[12px] text-[var(--text-secondary)]", children: [
26400
- /* @__PURE__ */ jsx39("span", { children: labels.intensityLabel }),
26401
- /* @__PURE__ */ jsx39(
26402
- "span",
26403
- {
26404
- className: "text-[var(--text-primary)] tabular-nums",
26405
- "data-agent-tutti-budget-intensity-value": "true",
26406
- children: draftIntensity
26407
- }
26408
- )
26409
- ] }),
26410
- /* @__PURE__ */ jsxs29("div", { className: "mt-2", children: [
26411
- /* @__PURE__ */ jsx39(
26412
- Slider,
26413
- {
26414
- "aria-label": labels.intensityLabel,
26415
- className: `[&_[data-slot=slider-range]]:bg-transparent [&_[data-slot=slider-track]]:bg-[linear-gradient(90deg,var(--state-success)_0%,var(--state-warning)_50%,var(--tutti-purple)_100%)] ${previewTone.sliderClassName}`,
26416
- "data-agent-tutti-budget-intensity-slider": "true",
26417
- "data-agent-tutti-budget-slider-tone": preview.tier,
26418
- max: 100,
26419
- min: 0,
26420
- step: 1,
26421
- value: [draftIntensity],
26422
- onValueChange: (values) => setDraftIntensity(values[0] ?? draftIntensity)
26423
- }
26424
- ),
26425
- /* @__PURE__ */ jsxs29("div", { className: "mt-1 flex items-center justify-between gap-2 text-[10px] font-medium", children: [
26426
- /* @__PURE__ */ jsx39("span", { className: "text-[var(--state-success)]", children: labels.previewCost }),
26427
- /* @__PURE__ */ jsx39("span", { className: "text-[var(--state-warning)]", children: labels.previewBalance }),
26428
- /* @__PURE__ */ jsx39("span", { className: "text-[var(--tutti-purple)]", children: labels.previewPowerful })
26429
- ] })
26430
- ] }),
26431
- /* @__PURE__ */ jsxs29(
26432
- "div",
26433
- {
26434
- "aria-live": "polite",
26435
- className: "mt-2 flex items-center justify-between gap-2 border-t border-[var(--line-2)] pt-2",
26436
- children: [
26437
- /* @__PURE__ */ jsx39("span", { className: "text-[11px] font-medium text-[var(--text-secondary)]", children: labels.previewTitle }),
26438
- /* @__PURE__ */ jsx39(Badge, { size: "sm", variant: previewTone.badgeVariant, children: previewLabel })
26439
- ]
26440
- }
26441
- ),
26442
- /* @__PURE__ */ jsxs29("div", { className: "mt-2 grid grid-cols-2 gap-2 text-[10px]", children: [
26443
- /* @__PURE__ */ jsxs29("div", { className: "min-w-0", children: [
26444
- /* @__PURE__ */ jsx39("div", { className: "text-[var(--text-tertiary)]", children: labels.modelStrengthLabel }),
26445
- /* @__PURE__ */ jsx39(
26446
- "div",
26447
- {
26448
- className: "truncate font-medium text-[var(--text-primary)]",
26449
- "data-agent-tutti-budget-model-strength": "true",
26450
- children: modelStrength
26451
- }
26452
- )
26453
- ] }),
26454
- /* @__PURE__ */ jsxs29("div", { className: "min-w-0", children: [
26455
- /* @__PURE__ */ jsx39("div", { className: "text-[var(--text-tertiary)]", children: labels.agentCountLabel }),
26456
- /* @__PURE__ */ jsx39(
26457
- "div",
26458
- {
26459
- className: "truncate font-medium text-[var(--text-primary)]",
26460
- "data-agent-tutti-budget-agent-count": "true",
26461
- children: agentCount
26462
- }
26463
- )
26464
- ] })
26465
- ] }),
26466
- /* @__PURE__ */ jsx39("p", { className: "mt-2 mb-0 text-[10px] leading-[1.35] text-[var(--text-tertiary)]", children: labels.previewHint })
26467
- ]
26468
- }
26469
- ),
26470
- /* @__PURE__ */ jsxs29("div", { className: "flex items-center justify-end gap-2", children: [
26471
- /* @__PURE__ */ jsx39(
26472
- Button4,
26473
- {
26474
- "data-agent-tutti-budget-cancel": "true",
26475
- size: "sm",
26476
- type: "button",
26477
- variant: "secondary",
26478
- onClick: () => setOpen(false),
26479
- children: labels.cancel
26480
- }
26481
- ),
26482
- /* @__PURE__ */ jsx39(
26483
- Button4,
26484
- {
26485
- "data-agent-tutti-budget-confirm": "true",
26486
- size: "sm",
26487
- type: "button",
26488
- onClick: () => {
26489
- onConfirm(draftIntensity);
26490
- setOpen(false);
26491
- },
26492
- children: labels.confirm
26493
- }
26494
- )
26495
- ] })
26496
- ]
26339
+ "aria-hidden": true,
26340
+ className: "inline-block size-4 shrink-0 bg-current transition-colors",
26341
+ style: {
26342
+ WebkitMaskImage: `url("${tutti_mode_lined_default}")`,
26343
+ WebkitMaskPosition: "center",
26344
+ WebkitMaskRepeat: "no-repeat",
26345
+ WebkitMaskSize: "contain",
26346
+ maskImage: `url("${tutti_mode_lined_default}")`,
26347
+ maskPosition: "center",
26348
+ maskRepeat: "no-repeat",
26349
+ maskSize: "contain"
26350
+ }
26351
+ }
26352
+ ),
26353
+ /* @__PURE__ */ jsx39("span", { className: "min-w-0 truncate", children: label }),
26354
+ /* @__PURE__ */ jsx39(
26355
+ Switch,
26356
+ {
26357
+ id: switchId,
26358
+ size: "sm",
26359
+ checked: active,
26360
+ disabled: updating,
26361
+ "aria-label": label,
26362
+ className: "ml-0.5",
26363
+ "data-testid": "agent-gui-composer-tutti-mode-toggle-switch",
26364
+ onCheckedChange: (checked) => onTuttiModeChange(checked)
26497
26365
  }
26498
26366
  )
26499
26367
  ]
@@ -26522,7 +26390,8 @@ function ComposerFooter({
26522
26390
  isPlanModeActive,
26523
26391
  isTuttiModeActive,
26524
26392
  isTuttiModeUpdating,
26525
- tuttiModeOrchestrationIntensity,
26393
+ tuttiModeSupported,
26394
+ onTuttiModeChange,
26526
26395
  composerActionButton,
26527
26396
  quickPromptControl,
26528
26397
  showHandoffSelect,
@@ -26546,9 +26415,7 @@ function ComposerFooter({
26546
26415
  onSubmit,
26547
26416
  onClearGoalMode: clearGoalModeBadge,
26548
26417
  draftPrompt: _draftPrompt,
26549
- onClearPlanMode,
26550
- onClearTuttiMode,
26551
- onTuttiModeOrchestrationIntensityChange
26418
+ onClearPlanMode
26552
26419
  }) {
26553
26420
  const showSettingsLoadingPlaceholders = composerSettings.isSettingsLoading;
26554
26421
  return /* @__PURE__ */ jsx40(Fragment13, { children: /* @__PURE__ */ jsxs30("div", { className: AgentGUINode_styles_default.composerFooter, children: [
@@ -26634,7 +26501,7 @@ function ComposerFooter({
26634
26501
  "span",
26635
26502
  {
26636
26503
  "aria-hidden": true,
26637
- className: "inline-block size-3.5 bg-current transition-colors",
26504
+ className: "inline-block size-4 bg-current transition-colors",
26638
26505
  style: {
26639
26506
  WebkitMaskImage: `url("${lined_default}")`,
26640
26507
  WebkitMaskPosition: "center",
@@ -26652,6 +26519,17 @@ function ComposerFooter({
26652
26519
  /* @__PURE__ */ jsx40(TooltipContent5, { side: "top", children: labels.mentionPalette })
26653
26520
  ] }) })
26654
26521
  ] }),
26522
+ /* @__PURE__ */ jsx40(
26523
+ ComposerTuttiModeChip,
26524
+ {
26525
+ active: isTuttiModeActive,
26526
+ updating: isTuttiModeUpdating,
26527
+ label: labels.tuttiModeLabel,
26528
+ description: labels.tuttiModeDescription,
26529
+ tuttiModeSupported,
26530
+ onTuttiModeChange
26531
+ }
26532
+ ),
26655
26533
  showHandoffSelect ? /* @__PURE__ */ jsx40(
26656
26534
  AgentHandoffMenu,
26657
26535
  {
@@ -26771,70 +26649,6 @@ function ComposerFooter({
26771
26649
  ] })
26772
26650
  }
26773
26651
  ) : null,
26774
- isTuttiModeActive ? /* @__PURE__ */ jsxs30("span", { className: "inline-flex shrink-0 items-center gap-0.5", children: [
26775
- /* @__PURE__ */ jsx40(
26776
- TuttiBudgetPopover,
26777
- {
26778
- intensity: tuttiModeOrchestrationIntensity,
26779
- labels: {
26780
- title: labels.tuttiBudgetTitle,
26781
- intensityLabel: labels.tuttiBudgetIntensityLabel,
26782
- previewTitle: labels.tuttiBudgetPreviewTitle,
26783
- previewHint: labels.tuttiBudgetPreviewHint,
26784
- previewCost: labels.tuttiBudgetPreviewCost,
26785
- previewBalance: labels.tuttiBudgetPreviewBalance,
26786
- previewPowerful: labels.tuttiBudgetPreviewPowerful,
26787
- modelStrengthLabel: labels.tuttiBudgetModelStrengthLabel,
26788
- modelStrengthCost: labels.tuttiBudgetModelStrengthCost,
26789
- modelStrengthBalance: labels.tuttiBudgetModelStrengthBalance,
26790
- modelStrengthPowerful: labels.tuttiBudgetModelStrengthPowerful,
26791
- agentCountLabel: labels.tuttiBudgetAgentCountLabel,
26792
- agentCountCost: labels.tuttiBudgetAgentCountCost,
26793
- agentCountBalance: labels.tuttiBudgetAgentCountBalance,
26794
- agentCountPowerful: labels.tuttiBudgetAgentCountPowerful,
26795
- confirm: labels.tuttiBudgetConfirm,
26796
- cancel: labels.tuttiBudgetCancel
26797
- },
26798
- onConfirm: onTuttiModeOrchestrationIntensityChange,
26799
- children: /* @__PURE__ */ jsx40(
26800
- "button",
26801
- {
26802
- type: "button",
26803
- disabled: isTuttiModeUpdating,
26804
- "aria-label": labels.tuttiModeLabel,
26805
- title: labels.tuttiModeDescription,
26806
- "data-agent-tutti-mode-badge": "true",
26807
- className: cn(
26808
- AgentGUINode_styles_default.composerMenuTrigger,
26809
- "group w-auto",
26810
- "disabled:cursor-not-allowed disabled:opacity-60"
26811
- ),
26812
- children: /* @__PURE__ */ jsxs30("span", { className: "flex min-w-0 items-center gap-1.5 overflow-hidden", children: [
26813
- /* @__PURE__ */ jsx40(Sparkles, { "aria-hidden": true, className: "size-3.5 shrink-0" }),
26814
- /* @__PURE__ */ jsx40("span", { className: "min-w-0 truncate", children: labels.tuttiModeLabel })
26815
- ] })
26816
- }
26817
- )
26818
- }
26819
- ),
26820
- /* @__PURE__ */ jsx40(
26821
- "button",
26822
- {
26823
- type: "button",
26824
- disabled: isTuttiModeUpdating,
26825
- "aria-label": labels.tuttiModeRemove,
26826
- title: labels.tuttiModeRemove,
26827
- "data-agent-tutti-mode-remove": "true",
26828
- className: cn(
26829
- AgentGUINode_styles_default.composerMenuTrigger,
26830
- "group w-auto justify-center",
26831
- "disabled:cursor-not-allowed disabled:opacity-60"
26832
- ),
26833
- onClick: onClearTuttiMode,
26834
- children: /* @__PURE__ */ jsx40(X5, { "aria-hidden": true, className: "size-3", strokeWidth: 3 })
26835
- }
26836
- )
26837
- ] }) : null,
26838
26652
  isGoalModeActive ? /* @__PURE__ */ jsx40(
26839
26653
  "button",
26840
26654
  {
@@ -26983,15 +26797,15 @@ function RemovableBadgeIcon({ icon }) {
26983
26797
  }
26984
26798
 
26985
26799
  // agent-gui/agentGuiNode/composer/quickPrompts/AgentQuickPromptPopover.tsx
26986
- import { useId, useRef as useRef38, useState as useState25 } from "react";
26800
+ import { useId as useId2, useRef as useRef38, useState as useState24 } from "react";
26987
26801
  import {
26988
- Button as Button7,
26802
+ Button as Button6,
26989
26803
  ConfirmationDialog as ConfirmationDialog2,
26990
26804
  DialogFooter as DialogFooter2,
26991
26805
  Input as Input2,
26992
- Popover as Popover5,
26993
- PopoverContent as PopoverContent5,
26994
- PopoverTrigger as PopoverTrigger4,
26806
+ Popover as Popover4,
26807
+ PopoverContent as PopoverContent4,
26808
+ PopoverTrigger as PopoverTrigger3,
26995
26809
  ScrollArea,
26996
26810
  Spinner as Spinner6,
26997
26811
  Tooltip as Tooltip7,
@@ -27010,9 +26824,9 @@ import {
27010
26824
  } from "@tutti-os/ui-system/icons";
27011
26825
 
27012
26826
  // agent-gui/agentGuiNode/composer/quickPrompts/AgentQuickPromptEditorDialog.tsx
27013
- import { useRef as useRef35, useState as useState24 } from "react";
26827
+ import { useRef as useRef35, useState as useState23 } from "react";
27014
26828
  import {
27015
- Button as Button5,
26829
+ Button as Button4,
27016
26830
  Dialog,
27017
26831
  DialogContent,
27018
26832
  DialogDescription,
@@ -27031,10 +26845,10 @@ function AgentQuickPromptEditorDialog({
27031
26845
  }) {
27032
26846
  const { labels } = controller;
27033
26847
  const source = controller.mode === "edit" ? controller.selectedPrompt : null;
27034
- const [draft, setDraft] = useState24(
26848
+ const [draft, setDraft] = useState23(
27035
26849
  () => controller.initialDraft ?? promptDraft(source)
27036
26850
  );
27037
- const [validationError, setValidationError] = useState24(null);
26851
+ const [validationError, setValidationError] = useState23(null);
27038
26852
  const cancelRequestedOnPointerDownRef = useRef35(false);
27039
26853
  const submit = async () => {
27040
26854
  const error = validateDraft(draft, labels);
@@ -27124,7 +26938,7 @@ function AgentQuickPromptEditorDialog({
27124
26938
  validationError || mutationError ? /* @__PURE__ */ jsx41("p", { className: "text-[12px] text-[var(--state-danger)]", role: "alert", children: validationError ?? mutationError }) : null,
27125
26939
  /* @__PURE__ */ jsxs31(DialogFooter, { children: [
27126
26940
  /* @__PURE__ */ jsx41(
27127
- Button5,
26941
+ Button4,
27128
26942
  {
27129
26943
  disabled: controller.isSaving,
27130
26944
  size: "dialog",
@@ -27146,7 +26960,7 @@ function AgentQuickPromptEditorDialog({
27146
26960
  children: labels.cancel
27147
26961
  }
27148
26962
  ),
27149
- /* @__PURE__ */ jsxs31(Button5, { disabled: controller.isSaving, size: "dialog", type: "submit", children: [
26963
+ /* @__PURE__ */ jsxs31(Button4, { disabled: controller.isSaving, size: "dialog", type: "submit", children: [
27150
26964
  controller.isSaving ? /* @__PURE__ */ jsx41(Spinner5, { size: 14 }) : null,
27151
26965
  controller.isSaving ? labels.saving : labels.save
27152
26966
  ] })
@@ -27184,7 +26998,7 @@ import { Sortable, SortableContent, SortableItem } from "@tutti-os/ui-system";
27184
26998
  import { useRef as useRef36 } from "react";
27185
26999
  import {
27186
27000
  BareIconButton,
27187
- Button as Button6,
27001
+ Button as Button5,
27188
27002
  SortableItemHandle,
27189
27003
  Tooltip as Tooltip6,
27190
27004
  TooltipContent as TooltipContent6,
@@ -27240,7 +27054,7 @@ function AgentQuickPromptRow({
27240
27054
  }
27241
27055
  ) : null,
27242
27056
  isSorting ? /* @__PURE__ */ jsx42("div", { className: "h-auto min-w-0 flex-1 px-1 py-2 text-left whitespace-normal", children: promptContent }) : /* @__PURE__ */ jsx42(
27243
- Button6,
27057
+ Button5,
27244
27058
  {
27245
27059
  ...selectionAction,
27246
27060
  ref: selectionRef,
@@ -27446,8 +27260,8 @@ function AgentQuickPromptPopover({
27446
27260
  const preserveExternalFocusRef = useRef38(false);
27447
27261
  const createRequestedOnPointerDownRef = useRef38(false);
27448
27262
  const templateRequestedOnPointerDownRef = useRef38(false);
27449
- const [view, setView] = useState25("prompts");
27450
- const [sortingState, setSortingState] = useState25({
27263
+ const [view, setView] = useState24("prompts");
27264
+ const [sortingState, setSortingState] = useState24({
27451
27265
  isPopoverOpen: controller.isPopoverOpen,
27452
27266
  isSorting: false
27453
27267
  });
@@ -27465,7 +27279,7 @@ function AgentQuickPromptPopover({
27465
27279
  isSorting: next
27466
27280
  });
27467
27281
  };
27468
- const titleId = useId();
27282
+ const titleId = useId2();
27469
27283
  const { labels, snapshot } = controller;
27470
27284
  const templateEntryAction = usePrimaryPointerAction2(
27471
27285
  () => setView("templates")
@@ -27496,7 +27310,7 @@ function AgentQuickPromptPopover({
27496
27310
  const isTemplateView = view === "templates";
27497
27311
  return /* @__PURE__ */ jsxs33(Fragment15, { children: [
27498
27312
  /* @__PURE__ */ jsxs33(
27499
- Popover5,
27313
+ Popover4,
27500
27314
  {
27501
27315
  modal: false,
27502
27316
  open: controller.isPopoverOpen,
@@ -27509,8 +27323,8 @@ function AgentQuickPromptPopover({
27509
27323
  },
27510
27324
  children: [
27511
27325
  /* @__PURE__ */ jsx44(TooltipProvider5, { delayDuration: 120, children: /* @__PURE__ */ jsxs33(Tooltip7, { children: [
27512
- /* @__PURE__ */ jsx44(TooltipTrigger7, { asChild: true, children: /* @__PURE__ */ jsx44("span", { className: "inline-flex shrink-0", children: /* @__PURE__ */ jsx44(PopoverTrigger4, { asChild: true, children: /* @__PURE__ */ jsxs33(
27513
- Button7,
27326
+ /* @__PURE__ */ jsx44(TooltipTrigger7, { asChild: true, children: /* @__PURE__ */ jsx44("span", { className: "inline-flex shrink-0", children: /* @__PURE__ */ jsx44(PopoverTrigger3, { asChild: true, children: /* @__PURE__ */ jsxs33(
27327
+ Button6,
27514
27328
  {
27515
27329
  "aria-label": labels.triggerTooltip,
27516
27330
  disabled,
@@ -27526,7 +27340,7 @@ function AgentQuickPromptPopover({
27526
27340
  /* @__PURE__ */ jsx44(TooltipContent7, { side: "top", children: labels.triggerTooltip })
27527
27341
  ] }) }),
27528
27342
  /* @__PURE__ */ jsxs33(
27529
- PopoverContent5,
27343
+ PopoverContent4,
27530
27344
  {
27531
27345
  "aria-labelledby": titleId,
27532
27346
  align: "start",
@@ -27560,7 +27374,7 @@ function AgentQuickPromptPopover({
27560
27374
  }
27561
27375
  ),
27562
27376
  isTemplateView ? /* @__PURE__ */ jsxs33(
27563
- Button7,
27377
+ Button6,
27564
27378
  {
27565
27379
  size: "sm",
27566
27380
  type: "button",
@@ -27572,7 +27386,7 @@ function AgentQuickPromptPopover({
27572
27386
  ]
27573
27387
  }
27574
27388
  ) : /* @__PURE__ */ jsx44("div", { className: "flex items-center gap-1", children: isSorting ? /* @__PURE__ */ jsxs33(
27575
- Button7,
27389
+ Button6,
27576
27390
  {
27577
27391
  disabled: controller.isInteractionLocked,
27578
27392
  size: "sm",
@@ -27586,7 +27400,7 @@ function AgentQuickPromptPopover({
27586
27400
  }
27587
27401
  ) : /* @__PURE__ */ jsxs33(Fragment15, { children: [
27588
27402
  /* @__PURE__ */ jsxs33(
27589
- Button7,
27403
+ Button6,
27590
27404
  {
27591
27405
  disabled: controller.isInteractionLocked || !controller.showReorderHandles,
27592
27406
  size: "sm",
@@ -27600,7 +27414,7 @@ function AgentQuickPromptPopover({
27600
27414
  }
27601
27415
  ),
27602
27416
  /* @__PURE__ */ jsxs33(
27603
- Button7,
27417
+ Button6,
27604
27418
  {
27605
27419
  disabled: controller.isInteractionLocked,
27606
27420
  size: "sm",
@@ -27661,7 +27475,7 @@ function AgentQuickPromptPopover({
27661
27475
  children: [
27662
27476
  /* @__PURE__ */ jsx44("span", { children: labels.loadError }),
27663
27477
  /* @__PURE__ */ jsx44(
27664
- Button7,
27478
+ Button6,
27665
27479
  {
27666
27480
  size: "xs",
27667
27481
  type: "button",
@@ -27681,7 +27495,7 @@ function AgentQuickPromptPopover({
27681
27495
  children: [
27682
27496
  /* @__PURE__ */ jsx44("span", { children: controller.reorderError === "conflict" ? labels.reorderConflict : labels.reorderError }),
27683
27497
  /* @__PURE__ */ jsx44(
27684
- Button7,
27498
+ Button6,
27685
27499
  {
27686
27500
  size: "xs",
27687
27501
  type: "button",
@@ -27719,7 +27533,7 @@ function AgentQuickPromptPopover({
27719
27533
  {
27720
27534
  label: labels.loadError,
27721
27535
  action: /* @__PURE__ */ jsx44(
27722
- Button7,
27536
+ Button6,
27723
27537
  {
27724
27538
  disabled: controller.isInteractionLocked,
27725
27539
  size: "sm",
@@ -27789,7 +27603,7 @@ function AgentQuickPromptPopover({
27789
27603
  description: controller.promptToDelete ? labels.deleteDescription(controller.promptToDelete.title) : void 0,
27790
27604
  footer: /* @__PURE__ */ jsxs33(DialogFooter2, { children: [
27791
27605
  /* @__PURE__ */ jsx44(
27792
- Button7,
27606
+ Button6,
27793
27607
  {
27794
27608
  ...deleteCancelAction,
27795
27609
  disabled: controller.isDeleting,
@@ -27800,7 +27614,7 @@ function AgentQuickPromptPopover({
27800
27614
  }
27801
27615
  ),
27802
27616
  /* @__PURE__ */ jsx44(
27803
- Button7,
27617
+ Button6,
27804
27618
  {
27805
27619
  ...deleteConfirmAction,
27806
27620
  disabled: controller.isDeleting,
@@ -27835,7 +27649,7 @@ function RecommendedTemplateList({
27835
27649
  /* @__PURE__ */ jsx44("p", { className: "pt-0.5 text-[12px] leading-[1.35] text-[var(--text-secondary)]", children: labels.recommendedTemplatesDescription })
27836
27650
  ] }),
27837
27651
  labels.recommendedTemplates.map((template, index) => /* @__PURE__ */ jsxs33(
27838
- Button7,
27652
+ Button6,
27839
27653
  {
27840
27654
  ref: index === 0 ? firstTemplateRef : void 0,
27841
27655
  className: "h-auto w-full justify-between px-2 py-2 text-left whitespace-normal",
@@ -27876,7 +27690,7 @@ function TemplateEntry({
27876
27690
  label
27877
27691
  }) {
27878
27692
  return /* @__PURE__ */ jsxs33(
27879
- Button7,
27693
+ Button6,
27880
27694
  {
27881
27695
  ...action,
27882
27696
  className: "mt-1 h-auto w-full justify-between px-2 py-2 text-left whitespace-normal",
@@ -28171,7 +27985,7 @@ function AgentComposerView(input) {
28171
27985
  style: inputShellStyle,
28172
27986
  children: [
28173
27987
  /* @__PURE__ */ jsxs34(
28174
- Popover6,
27988
+ Popover5,
28175
27989
  {
28176
27990
  open: input.showFileMentionPalette,
28177
27991
  onOpenChange: input.setIsPaletteOpen,
@@ -28425,10 +28239,9 @@ function AgentComposerView(input) {
28425
28239
  isPlanModeActive: input.isPlanModeActive,
28426
28240
  isTuttiModeActive: input.isTuttiModeActive,
28427
28241
  isTuttiModeUpdating: input.isTuttiModeUpdating,
28428
- tuttiModeOrchestrationIntensity: input.tuttiModeOrchestrationIntensity,
28242
+ tuttiModeSupported: input.props.capabilityMenuState?.tuttiMode?.enabled === true,
28243
+ onTuttiModeChange: input.props.onTuttiModeChange,
28429
28244
  onClearPlanMode: input.onClearPlanMode,
28430
- onClearTuttiMode: input.onClearTuttiMode,
28431
- onTuttiModeOrchestrationIntensityChange: input.onTuttiModeOrchestrationIntensityChange,
28432
28245
  composerActionButton,
28433
28246
  quickPromptControl: /* @__PURE__ */ jsx45(
28434
28247
  AgentQuickPromptPopover,
@@ -28516,7 +28329,7 @@ function AgentComposerView(input) {
28516
28329
  }
28517
28330
 
28518
28331
  // agent-gui/agentGuiNode/composer/useAgentMentionSearchController.ts
28519
- import { useEffect as useEffect27, useMemo as useMemo33, useRef as useRef39, useState as useState26 } from "react";
28332
+ import { useEffect as useEffect27, useMemo as useMemo33, useRef as useRef39, useState as useState25 } from "react";
28520
28333
  import { useRichTextMentionService } from "@tutti-os/ui-rich-text/editor";
28521
28334
  var EMPTY_AGENT_CONTEXT_MENTION_PROVIDERS = [];
28522
28335
  function useAgentMentionSearchController(referenceProvenanceFilter) {
@@ -28525,7 +28338,7 @@ function useAgentMentionSearchController(referenceProvenanceFilter) {
28525
28338
  () => mentionService?.listProviders().filter(isAgentContextMentionProvider) ?? EMPTY_AGENT_CONTEXT_MENTION_PROVIDERS,
28526
28339
  [mentionService]
28527
28340
  );
28528
- const [mentionSearchState, setMentionSearchState] = useState26(INITIAL_AGENT_MENTION_SEARCH_STATE);
28341
+ const [mentionSearchState, setMentionSearchState] = useState25(INITIAL_AGENT_MENTION_SEARCH_STATE);
28529
28342
  const mentionControllerRef = useRef39(
28530
28343
  null
28531
28344
  );
@@ -28574,7 +28387,7 @@ var INITIAL_AGENT_MENTION_SEARCH_STATE = {
28574
28387
  };
28575
28388
 
28576
28389
  // agent-gui/agentGuiNode/composer/quickPrompts/useAgentQuickPromptLibrary.ts
28577
- import { useCallback as useCallback46, useMemo as useMemo34, useRef as useRef40, useState as useState27 } from "react";
28390
+ import { useCallback as useCallback46, useMemo as useMemo34, useRef as useRef40, useState as useState26 } from "react";
28578
28391
  var unavailableSnapshot = {
28579
28392
  enabled: false,
28580
28393
  status: "idle",
@@ -28596,21 +28409,21 @@ function useAgentQuickPromptLibrary(input) {
28596
28409
  quickPrompts ?? unavailableQuickPromptStore,
28597
28410
  selectQuickPromptSnapshot
28598
28411
  );
28599
- const [mode, setMode] = useState27("closed");
28412
+ const [mode, setMode] = useState26("closed");
28600
28413
  const modeRef = useRef40(mode);
28601
28414
  modeRef.current = mode;
28602
- const [searchQuery, setSearchQuery] = useState27("");
28603
- const [selectedPrompt, setSelectedPrompt] = useState27(null);
28604
- const [initialDraft, setInitialDraft] = useState27(null);
28605
- const [promptToDelete, setPromptToDelete] = useState27(null);
28606
- const [mutationError, setMutationError] = useState27(null);
28607
- const [isSaving, setIsSaving] = useState27(false);
28608
- const [isDeleting, setIsDeleting] = useState27(false);
28609
- const [isReordering, setIsReordering] = useState27(false);
28610
- const [reorderError, setReorderError] = useState27(null);
28415
+ const [searchQuery, setSearchQuery] = useState26("");
28416
+ const [selectedPrompt, setSelectedPrompt] = useState26(null);
28417
+ const [initialDraft, setInitialDraft] = useState26(null);
28418
+ const [promptToDelete, setPromptToDelete] = useState26(null);
28419
+ const [mutationError, setMutationError] = useState26(null);
28420
+ const [isSaving, setIsSaving] = useState26(false);
28421
+ const [isDeleting, setIsDeleting] = useState26(false);
28422
+ const [isReordering, setIsReordering] = useState26(false);
28423
+ const [reorderError, setReorderError] = useState26(null);
28611
28424
  const capabilityAvailable = Boolean(quickPrompts && snapshot.enabled);
28612
28425
  const disclosureAvailable = capabilityAvailable && !disabled;
28613
- const [previousDisclosureAvailable, setPreviousDisclosureAvailable] = useState27(disclosureAvailable);
28426
+ const [previousDisclosureAvailable, setPreviousDisclosureAvailable] = useState26(disclosureAvailable);
28614
28427
  const disclosureAvailableRef = useRef40(disclosureAvailable);
28615
28428
  disclosureAvailableRef.current = disclosureAvailable;
28616
28429
  if (previousDisclosureAvailable !== disclosureAvailable) {
@@ -28891,7 +28704,7 @@ function isVersionConflict(error) {
28891
28704
  }
28892
28705
 
28893
28706
  // agent-gui/agentGuiNode/composer/useScopedProjectMissingState.ts
28894
- import { useCallback as useCallback47, useRef as useRef41, useState as useState28 } from "react";
28707
+ import { useCallback as useCallback47, useRef as useRef41, useState as useState27 } from "react";
28895
28708
  function useScopedProjectMissingState(scopeKey) {
28896
28709
  const identityRef = useRef41({
28897
28710
  key: scopeKey,
@@ -28904,7 +28717,7 @@ function useScopedProjectMissingState(scopeKey) {
28904
28717
  };
28905
28718
  }
28906
28719
  const identity = identityRef.current;
28907
- const [result, setResult] = useState28({
28720
+ const [result, setResult] = useState27({
28908
28721
  identity,
28909
28722
  isMissing: false
28910
28723
  });
@@ -29091,8 +28904,8 @@ function AgentComposer(props) {
29091
28904
  hadPrefill: agentComposerDraftHasContent(draftContent)
29092
28905
  });
29093
28906
  };
29094
- const [isPaletteOpen, setIsPaletteOpen] = useState29(true);
29095
- const [isReviewPickerOpen, setIsReviewPickerOpen] = useState29(false);
28907
+ const [isPaletteOpen, setIsPaletteOpen] = useState28(true);
28908
+ const [isReviewPickerOpen, setIsReviewPickerOpen] = useState28(false);
29096
28909
  const submitWithComposerModifiers = (content, displayPrompt, options) => {
29097
28910
  onSubmit(
29098
28911
  content,
@@ -29113,19 +28926,19 @@ function AgentComposer(props) {
29113
28926
  } : void 0
29114
28927
  );
29115
28928
  };
29116
- const [highlightedIndex, setHighlightedIndex] = useState29(0);
29117
- const [mentionHighlightedKey, setMentionHighlightedKey] = useState29(null);
29118
- const [shouldCenterMentionHighlight, setShouldCenterMentionHighlight] = useState29(false);
28929
+ const [highlightedIndex, setHighlightedIndex] = useState28(0);
28930
+ const [mentionHighlightedKey, setMentionHighlightedKey] = useState28(null);
28931
+ const [shouldCenterMentionHighlight, setShouldCenterMentionHighlight] = useState28(false);
29119
28932
  const [
29120
28933
  shouldResetMentionHighlightToFilter,
29121
28934
  setShouldResetMentionHighlightToFilter
29122
- ] = useState29(false);
29123
- const [paletteDraftPrompt, setPaletteDraftPrompt] = useState29(
28935
+ ] = useState28(false);
28936
+ const [paletteDraftPrompt, setPaletteDraftPrompt] = useState28(
29124
28937
  goalDraftObjective ?? draftPrompt
29125
28938
  );
29126
- const [fileMentionSuggestion, setFileMentionSuggestion] = useState29(null);
28939
+ const [fileMentionSuggestion, setFileMentionSuggestion] = useState28(null);
29127
28940
  const [isSelectedProjectMissing, setIsSelectedProjectMissing] = useScopedProjectMissingState(draftScopeKey);
29128
- const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] = useState29(false);
28941
+ const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] = useState28(false);
29129
28942
  const slashStatusAgentSessionId = slashStatus?.agentSessionId ?? null;
29130
28943
  const previousSlashStatusAgentSessionIdRef = useRef42(
29131
28944
  slashStatusAgentSessionId
@@ -29151,8 +28964,8 @@ function AgentComposer(props) {
29151
28964
  const wasActiveRef = useRef42(isActive);
29152
28965
  const lastComposerFocusRequestRef = useRef42(null);
29153
28966
  const autoMentionHighlightedKeyRef = useRef42(null);
29154
- const [isPromptTipOverflowing, setIsPromptTipOverflowing] = useState29(false);
29155
- const [dockComposerMetrics, setDockComposerMetrics] = useState29(
28967
+ const [isPromptTipOverflowing, setIsPromptTipOverflowing] = useState28(false);
28968
+ const [dockComposerMetrics, setDockComposerMetrics] = useState28(
29156
28969
  INITIAL_DOCK_COMPOSER_METRICS
29157
28970
  );
29158
28971
  const paletteCatalog = useComposerPaletteCatalog({
@@ -29265,7 +29078,7 @@ function AgentComposer(props) {
29265
29078
  availableSkills,
29266
29079
  composerSettings,
29267
29080
  // Host-gated product capability: omit or enabled:false must hide Tutti Mode
29268
- // entries (hero toggle, badge activation, /tutti). Fail closed like other
29081
+ // entries (footer chip, badge activation, /tutti). Fail closed like other
29269
29082
  // unsupported host capabilities — do not treat a missing flag as enabled.
29270
29083
  tuttiModeSupported: capabilityMenuState?.tuttiMode?.enabled === true,
29271
29084
  capabilityControlsReadOnly,
@@ -29552,7 +29365,7 @@ function AgentComposer(props) {
29552
29365
  }
29553
29366
 
29554
29367
  // agent-gui/agentGuiNode/AgentHomeSuggestions.tsx
29555
- import { memo as memo2, useState as useState30 } from "react";
29368
+ import { memo as memo2, useState as useState29 } from "react";
29556
29369
  import { ArrowLeftRight, Code, Compass, Import, Pencil, X as X6 } from "lucide-react";
29557
29370
  import { jsx as jsx47, jsxs as jsxs35 } from "react/jsx-runtime";
29558
29371
  function TuttiIcon(props) {
@@ -29663,7 +29476,7 @@ var AgentHomeSuggestions = memo2(function AgentHomeSuggestions2({
29663
29476
  closeLabel
29664
29477
  }) {
29665
29478
  "use memo";
29666
- const [activeCategoryId, setActiveCategoryId] = useState30(null);
29479
+ const [activeCategoryId, setActiveCategoryId] = useState29(null);
29667
29480
  if (categories.length === 0) {
29668
29481
  return null;
29669
29482
  }
@@ -29925,7 +29738,7 @@ var AgentGUIEmptyHeroCarouselStage = class extends Component3 {
29925
29738
  // agent-gui/agentGuiNode/view/AgentTargetSetupGate.tsx
29926
29739
  import { useExternalStoreSnapshot } from "@tutti-os/ui-react-hooks";
29927
29740
  import {
29928
- Button as Button8,
29741
+ Button as Button7,
29929
29742
  RefreshIcon,
29930
29743
  Select as Select4,
29931
29744
  SelectContent as SelectContent4,
@@ -30220,7 +30033,7 @@ function AgentTargetSetupGate({
30220
30033
  }) }),
30221
30034
  /* @__PURE__ */ jsx50("p", { className: AgentGUINode_styles_default.emptyProviderGateDescription, children: setupDescription }),
30222
30035
  !setupChecking ? /* @__PURE__ */ jsx50(
30223
- Button8,
30036
+ Button7,
30224
30037
  {
30225
30038
  type: "button",
30226
30039
  className: AgentGUINode_styles_default.emptyProviderGateAction,
@@ -30241,7 +30054,7 @@ function AgentTargetSetupGate({
30241
30054
  }),
30242
30055
  description: setupDescription,
30243
30056
  footer: /* @__PURE__ */ jsxs37(
30244
- Button8,
30057
+ Button7,
30245
30058
  {
30246
30059
  size: "dialog",
30247
30060
  type: "button",
@@ -30276,7 +30089,7 @@ function AgentTargetSetupGate({
30276
30089
  warning: snapshot?.status === "not_installed",
30277
30090
  detail: snapshot?.plan ? `${snapshot.plan.packageName}@${snapshot.plan.packageVersion}` : void 0,
30278
30091
  action: (snapshot?.status === "not_installed" || installRetryAvailable) && snapshot.plan ? /* @__PURE__ */ jsx50(
30279
- Button8,
30092
+ Button7,
30280
30093
  {
30281
30094
  type: "button",
30282
30095
  size: "sm",
@@ -30300,7 +30113,7 @@ function AgentTargetSetupGate({
30300
30113
  warning: snapshot?.status === "auth_required",
30301
30114
  detail: snapshot?.status === "ready" ? accountDetail : void 0,
30302
30115
  action: authenticationAvailable && authMethods.length > 0 ? /* @__PURE__ */ jsx50(
30303
- Button8,
30116
+ Button7,
30304
30117
  {
30305
30118
  type: "button",
30306
30119
  size: "sm",
@@ -30658,7 +30471,6 @@ var AgentGUIEmptyHeroPane = memo3(function AgentGUIEmptyHeroPane2({
30658
30471
  }
30659
30472
  ) : null,
30660
30473
  /* @__PURE__ */ jsx52(AgentComposer, { ...composerProps }),
30661
- /* @__PURE__ */ jsx52(AgentGUIEmptyHeroTuttiToggle, { composerProps }),
30662
30474
  /* @__PURE__ */ jsx52(
30663
30475
  AgentHomeSuggestions,
30664
30476
  {
@@ -30670,61 +30482,6 @@ var AgentGUIEmptyHeroPane = memo3(function AgentGUIEmptyHeroPane2({
30670
30482
  )
30671
30483
  ] }) });
30672
30484
  });
30673
- function AgentGUIEmptyHeroTuttiToggle({
30674
- composerProps
30675
- }) {
30676
- const switchId = useId2();
30677
- const onTuttiModeChange = composerProps.onTuttiModeChange;
30678
- const tuttiModeEnabled = composerProps.capabilityMenuState?.tuttiMode?.enabled === true;
30679
- if (!onTuttiModeChange || !tuttiModeEnabled) {
30680
- return null;
30681
- }
30682
- const active = composerProps.tuttiModeActive === true;
30683
- const updating = composerProps.tuttiModeUpdating === true;
30684
- const label = composerProps.labels.tuttiModeLabel;
30685
- const description = composerProps.labels.tuttiModeDescription;
30686
- return /* @__PURE__ */ jsxs39(
30687
- "label",
30688
- {
30689
- className: cn7(
30690
- "mx-auto flex w-full max-w-[560px] items-center gap-2.5 rounded-xl border px-3 py-2 transition-colors",
30691
- active ? "border-[var(--tutti-purple)] bg-[color-mix(in_srgb,var(--tutti-purple)_8%,transparent)]" : "border-[var(--line-2)] hover:border-[var(--tutti-purple)]",
30692
- updating ? "cursor-wait opacity-70" : "cursor-pointer"
30693
- ),
30694
- htmlFor: switchId,
30695
- title: description,
30696
- "data-testid": "agent-gui-hero-tutti-toggle",
30697
- children: [
30698
- /* @__PURE__ */ jsx52(
30699
- Sparkles2,
30700
- {
30701
- "aria-hidden": true,
30702
- className: cn7(
30703
- "size-4 shrink-0",
30704
- active ? "text-[var(--tutti-purple)]" : "text-[var(--agent-gui-text-secondary)]"
30705
- )
30706
- }
30707
- ),
30708
- /* @__PURE__ */ jsxs39("span", { className: "flex min-w-0 flex-1 flex-col text-left", children: [
30709
- /* @__PURE__ */ jsx52("span", { className: "text-[13px] font-medium text-[var(--text-primary)]", children: label }),
30710
- description ? /* @__PURE__ */ jsx52("span", { className: "truncate text-[11px] text-[var(--agent-gui-text-tertiary)]", children: description }) : null
30711
- ] }),
30712
- /* @__PURE__ */ jsx52(
30713
- Switch,
30714
- {
30715
- id: switchId,
30716
- size: "sm",
30717
- checked: active,
30718
- disabled: updating,
30719
- "aria-label": label,
30720
- "data-testid": "agent-gui-hero-tutti-toggle-switch",
30721
- onCheckedChange: (checked) => onTuttiModeChange(checked)
30722
- }
30723
- )
30724
- ]
30725
- }
30726
- );
30727
- }
30728
30485
  var AgentGUIProviderReadinessGatePane = memo3(
30729
30486
  function AgentGUIProviderReadinessGatePane2({
30730
30487
  provider,
@@ -31020,11 +30777,11 @@ function EmptyHeroTitle({
31020
30777
  // agent-gui/agentGuiNode/view/AgentGUIProviderManagerDialog.tsx
31021
30778
  import {
31022
30779
  useRef as useRef44,
31023
- useState as useState31
30780
+ useState as useState30
31024
30781
  } from "react";
31025
30782
  import { CircleMinus, CirclePlus } from "lucide-react";
31026
30783
  import {
31027
- Button as Button9,
30784
+ Button as Button8,
31028
30785
  Dialog as Dialog2,
31029
30786
  DialogContent as DialogContent2,
31030
30787
  DialogDescription as DialogDescription2,
@@ -31053,17 +30810,17 @@ function AgentGUIProviderManagerDialog({
31053
30810
  const disabledTargets = targets.filter(
31054
30811
  (target) => hidden.has(target.targetId)
31055
30812
  );
31056
- const [editing, setEditing] = useState31(false);
31057
- const [dragState, setDragState] = useState31(
30813
+ const [editing, setEditing] = useState30(false);
30814
+ const [dragState, setDragState] = useState30(
31058
30815
  null
31059
30816
  );
31060
- const [dragOverZone, setDragOverZone] = useState31(
30817
+ const [dragOverZone, setDragOverZone] = useState30(
31061
30818
  null
31062
30819
  );
31063
- const [dragPreview, setDragPreview] = useState31(null);
30820
+ const [dragPreview, setDragPreview] = useState30(null);
31064
30821
  const dragStateRef = useRef44(null);
31065
30822
  const dragPreviewRef = useRef44(null);
31066
- const [longPressTargetId, setLongPressTargetId] = useState31(
30823
+ const [longPressTargetId, setLongPressTargetId] = useState30(
31067
30824
  null
31068
30825
  );
31069
30826
  const longPressOriginRef = useRef44(null);
@@ -31356,7 +31113,7 @@ function AgentGUIProviderManagerDialog({
31356
31113
  }
31357
31114
  ) : null,
31358
31115
  editing ? /* @__PURE__ */ jsx53(
31359
- Button9,
31116
+ Button8,
31360
31117
  {
31361
31118
  "aria-label": labels.removeAgentFromSidebar(label),
31362
31119
  className: "absolute right-0.5 top-0 z-10 size-5 rounded-full bg-[var(--background-panel)] p-0 text-[var(--state-danger)] shadow-sm hover:bg-[var(--transparency-hover)] hover:text-[var(--state-danger-hover)]",
@@ -31478,7 +31235,7 @@ function AgentGUIProviderManagerDialog({
31478
31235
  }
31479
31236
  ) : null,
31480
31237
  editing ? /* @__PURE__ */ jsx53(
31481
- Button9,
31238
+ Button8,
31482
31239
  {
31483
31240
  "aria-label": labels.addAgentToSidebar(label),
31484
31241
  className: "absolute right-0.5 top-0 z-10 size-5 rounded-full bg-[var(--background-panel)] p-0 text-[var(--state-success)] shadow-sm hover:bg-[var(--transparency-hover)] hover:text-[var(--state-success)]",
@@ -31523,7 +31280,7 @@ function AgentGUIProviderManagerDialog({
31523
31280
  }
31524
31281
 
31525
31282
  // agent-gui/agentGuiNode/view/useAgentGUIProviderRailPreferences.ts
31526
- import { useCallback as useCallback50, useEffect as useEffect29, useState as useState32 } from "react";
31283
+ import { useCallback as useCallback50, useEffect as useEffect29, useState as useState31 } from "react";
31527
31284
  function readAgentGUIProviderRailPreferences(storageKey) {
31528
31285
  return parseAgentGUIProviderRailPreferences(
31529
31286
  globalThis.localStorage?.getItem(storageKey)
@@ -31531,7 +31288,7 @@ function readAgentGUIProviderRailPreferences(storageKey) {
31531
31288
  }
31532
31289
  function useAgentGUIProviderRailPreferences() {
31533
31290
  const storageKey = agentGUIProviderRailOrderStorageKey();
31534
- const [preferences, setPreferences] = useState32(
31291
+ const [preferences, setPreferences] = useState31(
31535
31292
  () => readAgentGUIProviderRailPreferences(storageKey)
31536
31293
  );
31537
31294
  useEffect29(() => {
@@ -31664,7 +31421,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
31664
31421
  persistPreferences: persistProviderRailPreferences,
31665
31422
  preferences: providerRailPreferences
31666
31423
  } = useAgentGUIProviderRailPreferences();
31667
- const [dragState, setDragState] = useState33(null);
31424
+ const [dragState, setDragState] = useState32(null);
31668
31425
  const dragStateRef = useRef45(null);
31669
31426
  const setProviderRailDragState = useCallback51(
31670
31427
  (nextDragState) => {
@@ -32138,10 +31895,10 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
32138
31895
  });
32139
31896
 
32140
31897
  // agent-gui/agentGuiNode/controller/AgentGUIConversationRailController.tsx
32141
- import { memo as memo9, useState as useState39 } from "react";
31898
+ import { memo as memo9, useState as useState38 } from "react";
32142
31899
 
32143
31900
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailPane.tsx
32144
- import { Fragment as Fragment22, memo as memo8, useEffect as useEffect30, useMemo as useMemo40, useRef as useRef48, useState as useState38 } from "react";
31901
+ import { Fragment as Fragment22, memo as memo8, useEffect as useEffect30, useMemo as useMemo40, useRef as useRef48, useState as useState37 } from "react";
32145
31902
  import { Button as SystemButton } from "@tutti-os/ui-system";
32146
31903
  import { ScrollArea as ScrollArea2 } from "@tutti-os/ui-system/components";
32147
31904
  import { CreateChatIcon as CreateChatIcon2 } from "@tutti-os/ui-system/icons";
@@ -32884,7 +32641,7 @@ function reduceAgentGUIConversationRailViewState(state, action) {
32884
32641
  }
32885
32642
 
32886
32643
  // agent-gui/agentGuiNode/controller/useAgentGUIProjectDrag.ts
32887
- import { useCallback as useCallback52, useState as useState34 } from "react";
32644
+ import { useCallback as useCallback52, useState as useState33 } from "react";
32888
32645
  var PROJECT_DRAG_SCROLL_EDGE_PX = 40;
32889
32646
  function projectDragAutoScrollDelta(clientY, bounds) {
32890
32647
  if (clientY < bounds.top + PROJECT_DRAG_SCROLL_EDGE_PX) {
@@ -32902,9 +32659,9 @@ function projectDragAutoScrollDelta(clientY, bounds) {
32902
32659
  return 0;
32903
32660
  }
32904
32661
  function useAgentGUIProjectDrag(input) {
32905
- const [dragState, setDragState] = useState34(null);
32906
- const [isMovePending, setIsMovePending] = useState34(false);
32907
- const [runtime] = useState34(() => ({
32662
+ const [dragState, setDragState] = useState33(null);
32663
+ const [isMovePending, setIsMovePending] = useState33(false);
32664
+ const [runtime] = useState33(() => ({
32908
32665
  active: false,
32909
32666
  clientY: null,
32910
32667
  dragState: null,
@@ -33327,7 +33084,7 @@ import {
33327
33084
  useCallback as useCallback53,
33328
33085
  useMemo as useMemo38,
33329
33086
  useRef as useRef46,
33330
- useState as useState35
33087
+ useState as useState34
33331
33088
  } from "react";
33332
33089
  import {
33333
33090
  AtSign,
@@ -33537,7 +33294,7 @@ function useConversationActionGroups({
33537
33294
  const agentHostApi = useOptionalAgentHostApi();
33538
33295
  const agentActivityRuntime = useOptionalAgentActivityRuntime();
33539
33296
  const copyConversationValue = useAgentGUIConversationCopyAction(labels);
33540
- const [resetKey, setResetKey] = useState35(0);
33297
+ const [resetKey, setResetKey] = useState34(0);
33541
33298
  const pendingActionRef = useRef46(false);
33542
33299
  const run = useCallback53(
33543
33300
  (action) => {
@@ -33631,7 +33388,7 @@ function AgentGUIConversationActionsDropdown({
33631
33388
  menu,
33632
33389
  moreSessionActionsLabel
33633
33390
  }) {
33634
- const [open, setOpen] = useState35(false);
33391
+ const [open, setOpen] = useState34(false);
33635
33392
  return /* @__PURE__ */ jsxs44(DropdownMenu4, { onOpenChange: setOpen, children: [
33636
33393
  /* @__PURE__ */ jsx61(DropdownMenuTrigger4, { asChild: true, children: /* @__PURE__ */ jsx61(
33637
33394
  BareIconButton2,
@@ -33661,7 +33418,7 @@ function AgentGUIConversationActionsContextMenu({
33661
33418
  children,
33662
33419
  menu
33663
33420
  }) {
33664
- const [open, setOpen] = useState35(false);
33421
+ const [open, setOpen] = useState34(false);
33665
33422
  return /* @__PURE__ */ jsxs44(ContextMenu2, { onOpenChange: setOpen, children: [
33666
33423
  /* @__PURE__ */ jsx61(ContextMenuTrigger2, { asChild: true, children }),
33667
33424
  open ? /* @__PURE__ */ jsx61(ContextMenuContent2, { className: menuContentClassName, children: /* @__PURE__ */ jsx61(ContextActionGroups, { groups: menu.groups }) }) : null
@@ -34086,7 +33843,7 @@ function AgentGUIProjectRailHeader({
34086
33843
  }
34087
33844
 
34088
33845
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailSectionHeader.tsx
34089
- import { forwardRef as forwardRef5, memo as memo6, useCallback as useCallback55, useState as useState36 } from "react";
33846
+ import { forwardRef as forwardRef5, memo as memo6, useCallback as useCallback55, useState as useState35 } from "react";
34090
33847
  import { ChevronRight as ChevronRight2 } from "lucide-react";
34091
33848
  import {
34092
33849
  DropdownMenu as DropdownMenu5,
@@ -34500,8 +34257,8 @@ var AgentGUIConversationRailSectionHeader = memo6(
34500
34257
  sectionLabel
34501
34258
  }) {
34502
34259
  "use memo";
34503
- const [projectMenuOpen, setProjectMenuOpen] = useState36(false);
34504
- const [conversationMenuOpen, setConversationMenuOpen] = useState36(false);
34260
+ const [projectMenuOpen, setProjectMenuOpen] = useState35(false);
34261
+ const [conversationMenuOpen, setConversationMenuOpen] = useState35(false);
34505
34262
  const handleProjectMenuOpenChange = useCallback55(
34506
34263
  (open) => {
34507
34264
  setProjectMenuOpen(open);
@@ -35032,9 +34789,9 @@ function useAgentGUIConversationRailViewState(input) {
35032
34789
  }
35033
34790
 
35034
34791
  // agent-gui/agentGuiNode/view/useAgentGUIProjectMenuState.ts
35035
- import { useCallback as useCallback58, useState as useState37 } from "react";
34792
+ import { useCallback as useCallback58, useState as useState36 } from "react";
35036
34793
  function useAgentGUIProjectMenuState(isRailInteractionLocked, isUserProjectMutationPending) {
35037
- const [openSectionId, setOpenSectionId] = useState37(null);
34794
+ const [openSectionId, setOpenSectionId] = useState36(null);
35038
34795
  const isProjectActionLocked = useCallback58(
35039
34796
  () => isRailInteractionLocked() || isUserProjectMutationPending,
35040
34797
  [isRailInteractionLocked, isUserProjectMutationPending]
@@ -35057,7 +34814,7 @@ function useAgentGUIProjectMenuState(isRailInteractionLocked, isUserProjectMutat
35057
34814
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailPane.tsx
35058
34815
  import { jsx as jsx67, jsxs as jsxs48 } from "react/jsx-runtime";
35059
34816
  function useDelayedBoolean(value, delayMs) {
35060
- const [delayedValue, setDelayedValue] = useState38(false);
34817
+ const [delayedValue, setDelayedValue] = useState37(false);
35061
34818
  useEffect30(() => {
35062
34819
  if (!value) {
35063
34820
  setDelayedValue(false);
@@ -35111,8 +34868,8 @@ var AgentGUIConversationRailPane = memo8(
35111
34868
  onConversationQueryChange
35112
34869
  }) {
35113
34870
  "use memo";
35114
- const [pendingProjectAction, setPendingProjectAction] = useState38(null);
35115
- const [isRequestingBatchDeletion, setIsRequestingBatchDeletion] = useState38(false);
34871
+ const [pendingProjectAction, setPendingProjectAction] = useState37(null);
34872
+ const [isRequestingBatchDeletion, setIsRequestingBatchDeletion] = useState37(false);
35116
34873
  const { railSearch } = railQuery;
35117
34874
  const railElementRef = useRef48(null);
35118
34875
  const railActiveConversationRef = useRef48([]);
@@ -36934,7 +36691,7 @@ function identitySnapshot(snapshot) {
36934
36691
  import { jsx as jsx68 } from "react/jsx-runtime";
36935
36692
  var AgentGUIConversationRailController = memo9(
36936
36693
  function AgentGUIConversationRailController2(props) {
36937
- const [conversationQuery, setConversationQuery] = useState39("");
36694
+ const [conversationQuery, setConversationQuery] = useState38("");
36938
36695
  const railQuery = useAgentGUIConversationRailQuery({
36939
36696
  activeConversationId: props.activeConversationId,
36940
36697
  conversationFilter: props.conversationFilter,
@@ -37196,7 +36953,7 @@ function AgentComposerRegion({
37196
36953
  }
37197
36954
 
37198
36955
  // agent-gui/agentGuiNode/AgentGoalBanner.tsx
37199
- import { useEffect as useEffect32, useState as useState40 } from "react";
36956
+ import { useEffect as useEffect32, useState as useState39 } from "react";
37200
36957
  import { CirclePause, CirclePlay, Pencil as Pencil3, Target as Target3, Trash2 } from "lucide-react";
37201
36958
  import { jsx as jsx69, jsxs as jsxs50 } from "react/jsx-runtime";
37202
36959
  var RESUMABLE_GOAL_STATUSES = /* @__PURE__ */ new Set([
@@ -37272,11 +37029,11 @@ function AgentGoalBanner({
37272
37029
  onClearGoal
37273
37030
  }) {
37274
37031
  "use memo";
37275
- const [editDraft, setEditDraft] = useState40(null);
37032
+ const [editDraft, setEditDraft] = useState39(null);
37276
37033
  const normalizedStatus = normalizeGoalStatus(status);
37277
37034
  const isActive = normalizedStatus === "" || normalizedStatus === "active";
37278
37035
  const serverSeconds = optimistic ? null : typeof durationMs === "number" && durationMs >= 0 ? Math.floor(durationMs / 1e3) : isActive ? 0 : null;
37279
- const [localElapsed, setLocalElapsed] = useState40(0);
37036
+ const [localElapsed, setLocalElapsed] = useState39(0);
37280
37037
  useEffect32(() => {
37281
37038
  setLocalElapsed(0);
37282
37039
  if (!isActive || serverSeconds === null) {
@@ -37422,9 +37179,9 @@ import {
37422
37179
  ListChecks as ListChecks4,
37423
37180
  LoaderCircle,
37424
37181
  RotateCcw,
37425
- Sparkles as Sparkles3,
37426
37182
  X as X7
37427
37183
  } from "lucide-react";
37184
+ import { TaskIcon } from "@tutti-os/ui-system/icons";
37428
37185
 
37429
37186
  // workspaceWorkflow/workspaceWorkflowRuntime.tsx
37430
37187
  import { createContext as createContext3, useContext as useContext3 } from "react";
@@ -37613,7 +37370,7 @@ import ReactMarkdown2 from "react-markdown";
37613
37370
  import rehypeSanitize from "rehype-sanitize";
37614
37371
  import remarkGfm2 from "remark-gfm";
37615
37372
  import {
37616
- Badge as Badge2,
37373
+ Badge,
37617
37374
  Card,
37618
37375
  CardContent,
37619
37376
  CardDescription,
@@ -37693,7 +37450,7 @@ function TuttiModePlanTaskAssignmentEditor({
37693
37450
  return /* @__PURE__ */ jsxs51(
37694
37451
  "div",
37695
37452
  {
37696
- className: "mt-3 flex flex-wrap items-center gap-0.5 border-t border-border/70 pt-2",
37453
+ className: "tutti-plan-task-assignment-row mt-3 flex flex-wrap items-center gap-1 border-t border-[var(--line-2)] pt-2",
37697
37454
  "data-testid": `tutti-plan-task-assignment-${task.id}`,
37698
37455
  children: [
37699
37456
  /* @__PURE__ */ jsxs51(
@@ -37784,7 +37541,7 @@ function TuttiModePlanTaskAssignmentEditor({
37784
37541
  "label",
37785
37542
  {
37786
37543
  className: cn9(
37787
- "flex min-h-[28px] w-auto shrink-0 items-center gap-1.5 px-2 text-[13px]",
37544
+ "flex min-h-[28px] w-auto shrink-0 items-center gap-1.5 px-1 text-[13px]",
37788
37545
  disabled ? "cursor-not-allowed text-[var(--agent-gui-text-tertiary)]" : "cursor-pointer text-[var(--agent-gui-text-secondary)]"
37789
37546
  ),
37790
37547
  htmlFor: `tutti-plan-task-parallel-${task.id}`,
@@ -37811,7 +37568,7 @@ function TuttiModePlanTaskAssignmentEditor({
37811
37568
  "label",
37812
37569
  {
37813
37570
  className: cn9(
37814
- "flex min-h-[28px] w-auto shrink-0 items-center gap-1.5 px-2 text-[13px]",
37571
+ "flex min-h-[28px] w-auto shrink-0 items-center gap-1.5 px-1 text-[13px]",
37815
37572
  disabled ? "cursor-not-allowed text-[var(--agent-gui-text-tertiary)]" : "cursor-pointer text-[var(--agent-gui-text-secondary)]"
37816
37573
  ),
37817
37574
  htmlFor: `tutti-plan-task-auto-accept-${task.id}`,
@@ -37970,7 +37727,7 @@ function TuttiModePlanPanel({
37970
37727
  /* @__PURE__ */ jsx72("ol", { className: "grid gap-2", children: panel.tasks.map((task) => /* @__PURE__ */ jsxs52(
37971
37728
  "li",
37972
37729
  {
37973
- className: "rounded-md bg-muted/60 px-3 py-2 text-sm",
37730
+ className: "rounded-lg border border-[var(--line-2)] bg-[var(--background-board-card)] px-4 pt-3 pb-2 text-sm",
37974
37731
  children: [
37975
37732
  /* @__PURE__ */ jsxs52("div", { className: "flex flex-wrap items-start justify-between gap-2", children: [
37976
37733
  /* @__PURE__ */ jsxs52("div", { className: "font-medium text-foreground", children: [
@@ -37978,7 +37735,7 @@ function TuttiModePlanPanel({
37978
37735
  ". ",
37979
37736
  task.title
37980
37737
  ] }),
37981
- /* @__PURE__ */ jsx72(Badge2, { variant: "secondary", children: priorityLabel(labels, task.priority) })
37738
+ /* @__PURE__ */ jsx72(Badge, { variant: "secondary", children: priorityLabel(labels, task.priority) })
37982
37739
  ] }),
37983
37740
  task.content ? /* @__PURE__ */ jsx72("p", { className: "mt-1 text-xs text-muted-foreground", children: task.content }) : null,
37984
37741
  editable && assignmentCatalog ? /* @__PURE__ */ jsx72(
@@ -38029,7 +37786,7 @@ function TaskAssignmentSummary({
38029
37786
  if (chips.length === 0) {
38030
37787
  return null;
38031
37788
  }
38032
- return /* @__PURE__ */ jsx72("div", { className: "mt-3 flex flex-wrap items-center gap-0.5 border-t border-border/70 pt-2", children: chips.map((chip) => /* @__PURE__ */ jsx72(
37789
+ return /* @__PURE__ */ jsx72("div", { className: "mt-3 flex flex-wrap items-center gap-0.5 border-t border-[var(--line-2)] pt-2", children: chips.map((chip) => /* @__PURE__ */ jsx72(
38033
37790
  "span",
38034
37791
  {
38035
37792
  title: chip.label,
@@ -38055,9 +37812,9 @@ function priorityLabel(labels, priority) {
38055
37812
  }
38056
37813
 
38057
37814
  // workspaceWorkflow/tuttiModePlan/TuttiPlanIssuePanel.tsx
38058
- import { useState as useState41 } from "react";
37815
+ import { useState as useState40 } from "react";
38059
37816
  import { ExternalLink as ExternalLink4, ListChecks as ListChecks3, Square } from "lucide-react";
38060
- import { Button as Button10, Card as Card2, CardContent as CardContent2, CardHeader as CardHeader2, cn as cn11 } from "@tutti-os/ui-system";
37817
+ import { Button as Button9, Card as Card2, CardContent as CardContent2, CardHeader as CardHeader2, cn as cn11 } from "@tutti-os/ui-system";
38061
37818
  import { jsx as jsx73, jsxs as jsxs53 } from "react/jsx-runtime";
38062
37819
  var BOARD_STATUS_ORDER = [
38063
37820
  "not_started",
@@ -38134,9 +37891,9 @@ function TuttiPlanIssuePanel({
38134
37891
  onCancelExecution,
38135
37892
  onOpenTask
38136
37893
  }) {
38137
- const [viewMode, setViewMode] = useState41("board");
38138
- const [decidingTaskIds, setDecidingTaskIds] = useState41([]);
38139
- const [stopping, setStopping] = useState41(false);
37894
+ const [viewMode, setViewMode] = useState40("board");
37895
+ const [decidingTaskIds, setDecidingTaskIds] = useState40([]);
37896
+ const [stopping, setStopping] = useState40(false);
38140
37897
  const decideTask = onDecideTask ? (taskId, decision) => {
38141
37898
  setDecidingTaskIds(
38142
37899
  (current) => current.includes(taskId) ? current : [...current, taskId]
@@ -38204,7 +37961,7 @@ function TuttiPlanIssuePanel({
38204
37961
  mode
38205
37962
  )) }),
38206
37963
  stopExecution ? /* @__PURE__ */ jsxs53(
38207
- Button10,
37964
+ Button9,
38208
37965
  {
38209
37966
  type: "button",
38210
37967
  size: "sm",
@@ -38220,7 +37977,7 @@ function TuttiPlanIssuePanel({
38220
37977
  }
38221
37978
  ) : null,
38222
37979
  onOpenIssue ? /* @__PURE__ */ jsxs53(
38223
- Button10,
37980
+ Button9,
38224
37981
  {
38225
37982
  type: "button",
38226
37983
  size: "sm",
@@ -38272,7 +38029,7 @@ function TaskStructureChips({
38272
38029
  dependencies.length > 0 ? /* @__PURE__ */ jsxs53(
38273
38030
  "span",
38274
38031
  {
38275
- className: "min-w-0 truncate rounded-full border border-border/70 px-1.5 text-[10px] leading-4 text-muted-foreground",
38032
+ className: "min-w-0 truncate rounded-full border border-[var(--line-2)] px-1.5 text-[10px] leading-4 text-muted-foreground",
38276
38033
  title: dependencies.join(", "),
38277
38034
  children: [
38278
38035
  labels.dependencies,
@@ -38296,7 +38053,7 @@ function TaskDecisionActions({
38296
38053
  }
38297
38054
  return /* @__PURE__ */ jsxs53("span", { className: "flex shrink-0 items-center gap-1", children: [
38298
38055
  canAccept ? /* @__PURE__ */ jsx73(
38299
- Button10,
38056
+ Button9,
38300
38057
  {
38301
38058
  type: "button",
38302
38059
  size: "sm",
@@ -38311,7 +38068,7 @@ function TaskDecisionActions({
38311
38068
  }
38312
38069
  ) : null,
38313
38070
  /* @__PURE__ */ jsx73(
38314
- Button10,
38071
+ Button9,
38315
38072
  {
38316
38073
  type: "button",
38317
38074
  size: "sm",
@@ -38355,7 +38112,7 @@ function TuttiPlanIssueBoard({
38355
38112
  return /* @__PURE__ */ jsxs53(
38356
38113
  "div",
38357
38114
  {
38358
- className: "min-h-[220px] rounded-lg border border-border/70 bg-muted/30 px-2 py-2",
38115
+ className: "min-h-[220px] rounded-lg border border-[var(--line-2)] bg-muted/30 px-2 py-2",
38359
38116
  "data-testid": `tutti-plan-issue-column-${status}`,
38360
38117
  children: [
38361
38118
  /* @__PURE__ */ jsxs53("div", { className: "mb-1.5 flex items-center justify-between gap-2", children: [
@@ -38426,11 +38183,11 @@ function TuttiPlanIssueList({
38426
38183
  }) {
38427
38184
  const showStages = issue.tasks.some((task) => task.parallelizable);
38428
38185
  const stages = showStages ? groupTuttiPlanIssueTasksIntoStages(issue.tasks) : [{ kind: "sequential", tasks: [...issue.tasks] }];
38429
- return /* @__PURE__ */ jsx73("div", { className: "overflow-hidden rounded-lg border border-border/70", children: stages.map((stage, index) => /* @__PURE__ */ jsxs53("div", { children: [
38186
+ return /* @__PURE__ */ jsx73("div", { className: "overflow-hidden rounded-lg border border-[var(--line-2)]", children: stages.map((stage, index) => /* @__PURE__ */ jsxs53("div", { children: [
38430
38187
  showStages ? /* @__PURE__ */ jsx73(
38431
38188
  "div",
38432
38189
  {
38433
- className: "border-b border-border/70 bg-muted/40 px-3 py-1 text-[10px] font-medium text-muted-foreground",
38190
+ className: "border-b border-[var(--line-2)] bg-muted/40 px-3 py-1 text-[10px] font-medium text-muted-foreground",
38434
38191
  "data-testid": `tutti-plan-issue-stage-${stage.kind}`,
38435
38192
  children: stage.kind === "parallel" ? labels.stageParallel(
38436
38193
  String(index + 1),
@@ -38448,7 +38205,7 @@ function TuttiPlanIssueList({
38448
38205
  tabIndex: openable ? 0 : void 0,
38449
38206
  "data-testid": `tutti-plan-issue-row-${task.taskId}`,
38450
38207
  className: cn11(
38451
- "flex items-start justify-between gap-3 border-b border-border/70 px-3 py-2 last:border-b-0",
38208
+ "flex items-start justify-between gap-3 border-b border-[var(--line-2)] px-3 py-2 last:border-b-0",
38452
38209
  openable && "cursor-pointer transition-colors hover:bg-muted/40"
38453
38210
  ),
38454
38211
  onClick: openable ? () => void openTask(task.taskId) : void 0,
@@ -38498,7 +38255,7 @@ function TuttiPlanIssueList({
38498
38255
  }
38499
38256
 
38500
38257
  // workspaceWorkflow/tuttiModePlan/useTuttiModePlanPanels.ts
38501
- import { useCallback as useCallback59, useEffect as useEffect33, useMemo as useMemo42, useRef as useRef51, useState as useState42 } from "react";
38258
+ import { useCallback as useCallback59, useEffect as useEffect33, useMemo as useMemo42, useRef as useRef51, useState as useState41 } from "react";
38502
38259
  function emptyState(scopeKey) {
38503
38260
  return {
38504
38261
  error: null,
@@ -38519,14 +38276,14 @@ var EMPTY_AGENT_DETAIL = {
38519
38276
  };
38520
38277
  function useTuttiModePlanPanels(input) {
38521
38278
  const runtime = useOptionalTuttiModePlanReviewRuntime();
38522
- const [state, setState] = useState42(() => emptyState(""));
38523
- const [assignmentState, setAssignmentState] = useState42(() => emptyAssignmentState(""));
38524
- const [planIssueState, setPlanIssueState] = useState42({
38279
+ const [state, setState] = useState41(() => emptyState(""));
38280
+ const [assignmentState, setAssignmentState] = useState41(() => emptyAssignmentState(""));
38281
+ const [planIssueState, setPlanIssueState] = useState41({
38525
38282
  result: null,
38526
38283
  scopeKey: ""
38527
38284
  });
38528
38285
  const requestSequenceRef = useRef51(0);
38529
- const [retrySequence, setRetrySequence] = useState42(0);
38286
+ const [retrySequence, setRetrySequence] = useState41(0);
38530
38287
  const enabled = input.enabled ?? true;
38531
38288
  const workspaceId = input.workspaceId.trim();
38532
38289
  const sourceSessionId = input.sourceSessionId?.trim() ?? "";
@@ -38950,8 +38707,209 @@ function AgentComposerDisclosureCard({
38950
38707
  ) });
38951
38708
  }
38952
38709
 
38710
+ // agent-gui/agentGuiNode/composer/TuttiBudgetPopover.tsx
38711
+ import { useState as useState42 } from "react";
38712
+ import {
38713
+ Badge as Badge2,
38714
+ Button as Button10,
38715
+ Popover as Popover6,
38716
+ PopoverContent as PopoverContent5,
38717
+ PopoverTrigger as PopoverTrigger4,
38718
+ Slider
38719
+ } from "@tutti-os/ui-system";
38720
+
38721
+ // agent-gui/agentGuiNode/composer/tuttiIntensityPreview.ts
38722
+ function projectTuttiIntensityPreview(intensity) {
38723
+ const normalized = Number.isFinite(intensity) ? Math.min(100, Math.max(0, Math.round(intensity))) : 50;
38724
+ const tier = normalized <= 33 ? "cost" : normalized <= 66 ? "balance" : "powerful";
38725
+ return {
38726
+ intensity: normalized,
38727
+ tier,
38728
+ modelStrength: tier === "cost" ? "economical" : tier === "balance" ? "balanced" : "mostCapable",
38729
+ agentCount: tier === "cost" ? "single" : tier === "balance" ? "smallGroup" : "maxParallel"
38730
+ };
38731
+ }
38732
+
38733
+ // agent-gui/agentGuiNode/composer/TuttiBudgetPopover.tsx
38734
+ import { jsx as jsx75, jsxs as jsxs55 } from "react/jsx-runtime";
38735
+ var tierTone = {
38736
+ cost: {
38737
+ badgeVariant: "success",
38738
+ sliderClassName: "[&_[data-slot=slider-thumb]]:border-[var(--state-success)]"
38739
+ },
38740
+ balance: {
38741
+ badgeVariant: "warning",
38742
+ sliderClassName: "[&_[data-slot=slider-thumb]]:border-[var(--state-warning)]"
38743
+ },
38744
+ powerful: {
38745
+ badgeVariant: "pending",
38746
+ sliderClassName: "[&_[data-slot=slider-thumb]]:border-[var(--tutti-purple)]"
38747
+ }
38748
+ };
38749
+ function TuttiBudgetPopover({
38750
+ children,
38751
+ intensity,
38752
+ labels,
38753
+ onConfirm
38754
+ }) {
38755
+ const [open, setOpen] = useState42(false);
38756
+ const [draftIntensity, setDraftIntensity] = useState42(intensity);
38757
+ const preview = projectTuttiIntensityPreview(draftIntensity);
38758
+ const previewTone = tierTone[preview.tier];
38759
+ const previewLabel = {
38760
+ cost: labels.previewCost,
38761
+ balance: labels.previewBalance,
38762
+ powerful: labels.previewPowerful
38763
+ }[preview.tier];
38764
+ const modelStrength = {
38765
+ economical: labels.modelStrengthCost,
38766
+ balanced: labels.modelStrengthBalance,
38767
+ mostCapable: labels.modelStrengthPowerful
38768
+ }[preview.modelStrength];
38769
+ const agentCount = {
38770
+ single: labels.agentCountCost,
38771
+ smallGroup: labels.agentCountBalance,
38772
+ maxParallel: labels.agentCountPowerful
38773
+ }[preview.agentCount];
38774
+ return /* @__PURE__ */ jsxs55(
38775
+ Popover6,
38776
+ {
38777
+ open,
38778
+ onOpenChange: (nextOpen) => {
38779
+ if (nextOpen) {
38780
+ setDraftIntensity(intensity);
38781
+ }
38782
+ setOpen(nextOpen);
38783
+ },
38784
+ children: [
38785
+ /* @__PURE__ */ jsx75(PopoverTrigger4, { asChild: true, children }),
38786
+ /* @__PURE__ */ jsxs55(
38787
+ PopoverContent5,
38788
+ {
38789
+ align: "start",
38790
+ className: "nodrag",
38791
+ "data-agent-tutti-budget-popover": "true",
38792
+ onEscapeKeyDown: (event) => {
38793
+ event.preventDefault();
38794
+ setOpen(false);
38795
+ },
38796
+ onInteractOutside: (event) => event.preventDefault(),
38797
+ onPointerDownOutside: (event) => event.preventDefault(),
38798
+ children: [
38799
+ /* @__PURE__ */ jsx75("div", { className: "text-[13px] font-semibold text-[var(--text-primary)]", children: labels.title }),
38800
+ /* @__PURE__ */ jsxs55(
38801
+ "div",
38802
+ {
38803
+ className: "rounded-[8px] border border-[var(--line-2)] bg-[var(--transparency-block)] p-2.5",
38804
+ "data-agent-tutti-budget-preview": preview.tier,
38805
+ children: [
38806
+ /* @__PURE__ */ jsxs55("div", { className: "flex items-center justify-between gap-2 text-[12px] text-[var(--text-secondary)]", children: [
38807
+ /* @__PURE__ */ jsx75("span", { children: labels.intensityLabel }),
38808
+ /* @__PURE__ */ jsx75(
38809
+ "span",
38810
+ {
38811
+ className: "text-[var(--text-primary)] tabular-nums",
38812
+ "data-agent-tutti-budget-intensity-value": "true",
38813
+ children: draftIntensity
38814
+ }
38815
+ )
38816
+ ] }),
38817
+ /* @__PURE__ */ jsxs55("div", { className: "mt-2", children: [
38818
+ /* @__PURE__ */ jsx75(
38819
+ Slider,
38820
+ {
38821
+ "aria-label": labels.intensityLabel,
38822
+ className: `[&_[data-slot=slider-range]]:bg-transparent [&_[data-slot=slider-track]]:bg-[linear-gradient(90deg,var(--state-success)_0%,var(--state-warning)_50%,var(--tutti-purple)_100%)] ${previewTone.sliderClassName} [&_[data-slot=slider-thumb]]:cursor-grab [&_[data-slot=slider-thumb]]:active:cursor-grabbing`,
38823
+ "data-agent-tutti-budget-intensity-slider": "true",
38824
+ "data-agent-tutti-budget-slider-tone": preview.tier,
38825
+ max: 100,
38826
+ min: 0,
38827
+ step: 1,
38828
+ value: [draftIntensity],
38829
+ onValueChange: (values) => setDraftIntensity(values[0] ?? draftIntensity)
38830
+ }
38831
+ ),
38832
+ /* @__PURE__ */ jsxs55("div", { className: "mt-1 flex items-center justify-between gap-2 text-[10px] font-medium", children: [
38833
+ /* @__PURE__ */ jsx75("span", { className: "text-[var(--state-success)]", children: labels.previewCost }),
38834
+ /* @__PURE__ */ jsx75("span", { className: "text-[var(--state-warning)]", children: labels.previewBalance }),
38835
+ /* @__PURE__ */ jsx75("span", { className: "text-[var(--tutti-purple)]", children: labels.previewPowerful })
38836
+ ] })
38837
+ ] }),
38838
+ /* @__PURE__ */ jsxs55(
38839
+ "div",
38840
+ {
38841
+ "aria-live": "polite",
38842
+ className: "mt-2 flex items-center justify-between gap-2 border-t border-[var(--line-2)] pt-2",
38843
+ children: [
38844
+ /* @__PURE__ */ jsx75("span", { className: "text-[11px] font-medium text-[var(--text-secondary)]", children: labels.previewTitle }),
38845
+ /* @__PURE__ */ jsx75(Badge2, { size: "sm", variant: previewTone.badgeVariant, children: previewLabel })
38846
+ ]
38847
+ }
38848
+ ),
38849
+ /* @__PURE__ */ jsxs55("div", { className: "mt-2 grid grid-cols-2 gap-2 text-[10px]", children: [
38850
+ /* @__PURE__ */ jsxs55("div", { className: "min-w-0", children: [
38851
+ /* @__PURE__ */ jsx75("div", { className: "text-[var(--text-tertiary)]", children: labels.modelStrengthLabel }),
38852
+ /* @__PURE__ */ jsx75(
38853
+ "div",
38854
+ {
38855
+ className: "truncate font-medium text-[var(--text-primary)]",
38856
+ "data-agent-tutti-budget-model-strength": "true",
38857
+ children: modelStrength
38858
+ }
38859
+ )
38860
+ ] }),
38861
+ /* @__PURE__ */ jsxs55("div", { className: "min-w-0", children: [
38862
+ /* @__PURE__ */ jsx75("div", { className: "text-[var(--text-tertiary)]", children: labels.agentCountLabel }),
38863
+ /* @__PURE__ */ jsx75(
38864
+ "div",
38865
+ {
38866
+ className: "truncate font-medium text-[var(--text-primary)]",
38867
+ "data-agent-tutti-budget-agent-count": "true",
38868
+ children: agentCount
38869
+ }
38870
+ )
38871
+ ] })
38872
+ ] }),
38873
+ /* @__PURE__ */ jsx75("p", { className: "mt-2 mb-0 text-[10px] leading-[1.35] text-[var(--text-tertiary)]", children: labels.previewHint })
38874
+ ]
38875
+ }
38876
+ ),
38877
+ /* @__PURE__ */ jsxs55("div", { className: "flex items-center justify-end gap-2", children: [
38878
+ /* @__PURE__ */ jsx75(
38879
+ Button10,
38880
+ {
38881
+ "data-agent-tutti-budget-cancel": "true",
38882
+ size: "sm",
38883
+ type: "button",
38884
+ variant: "secondary",
38885
+ onClick: () => setOpen(false),
38886
+ children: labels.cancel
38887
+ }
38888
+ ),
38889
+ /* @__PURE__ */ jsx75(
38890
+ Button10,
38891
+ {
38892
+ "data-agent-tutti-budget-confirm": "true",
38893
+ size: "sm",
38894
+ type: "button",
38895
+ onClick: () => {
38896
+ onConfirm(draftIntensity);
38897
+ setOpen(false);
38898
+ },
38899
+ children: labels.confirm
38900
+ }
38901
+ )
38902
+ ] })
38903
+ ]
38904
+ }
38905
+ )
38906
+ ]
38907
+ }
38908
+ );
38909
+ }
38910
+
38953
38911
  // agent-gui/agentGuiNode/TuttiWorkflowDock.tsx
38954
- import { Fragment as Fragment23, jsx as jsx75, jsxs as jsxs55 } from "react/jsx-runtime";
38912
+ import { Fragment as Fragment23, jsx as jsx76, jsxs as jsxs56 } from "react/jsx-runtime";
38955
38913
  function countIssueTasks(issue, status) {
38956
38914
  return issue.tasks.filter((task) => task.status === status).length;
38957
38915
  }
@@ -39004,15 +38962,15 @@ function TuttiWorkflowDock({
39004
38962
  };
39005
38963
  const title = review !== null ? labels.reviewTitle : phase.kind === "materializing" ? labels.materializingTitle : execution !== null ? execution.issue.title : labels.errorTitle;
39006
38964
  const summary = review !== null ? `${review.panel.title} \xB7 ${review.intensityDiverged ? labels.reviewHintReplan : labels.reviewHint}` : phase.kind === "materializing" ? `${phase.title} \xB7 ${labels.materializingHint}` : execution !== null ? issueSummary(labels, execution.issue) : failure?.message ?? "";
39007
- const icon = review !== null ? /* @__PURE__ */ jsx75(Sparkles3, { "aria-hidden": true, className: "size-3.5" }) : phase.kind === "materializing" ? /* @__PURE__ */ jsx75(LoaderCircle, { "aria-hidden": true, className: "size-3.5 animate-spin" }) : execution !== null ? countIssueTasks(execution.issue, "running") > 0 ? /* @__PURE__ */ jsx75(LoaderCircle, { "aria-hidden": true, className: "size-3.5 animate-spin" }) : /* @__PURE__ */ jsx75(ListChecks4, { "aria-hidden": true, className: "size-3.5" }) : /* @__PURE__ */ jsx75(AlertTriangle, { "aria-hidden": true, className: "size-3.5" });
39008
- const actions = review !== null ? /* @__PURE__ */ jsxs55(Fragment23, { children: [
39009
- /* @__PURE__ */ jsx75(
38965
+ const icon = review !== null ? /* @__PURE__ */ jsx76(TaskIcon, { "aria-hidden": true, className: "size-3.5" }) : phase.kind === "materializing" ? /* @__PURE__ */ jsx76(LoaderCircle, { "aria-hidden": true, className: "size-3.5 animate-spin" }) : execution !== null ? countIssueTasks(execution.issue, "running") > 0 ? /* @__PURE__ */ jsx76(LoaderCircle, { "aria-hidden": true, className: "size-3.5 animate-spin" }) : /* @__PURE__ */ jsx76(ListChecks4, { "aria-hidden": true, className: "size-3.5" }) : /* @__PURE__ */ jsx76(AlertTriangle, { "aria-hidden": true, className: "size-3.5" });
38966
+ const actions = review !== null ? /* @__PURE__ */ jsxs56(Fragment23, { children: [
38967
+ /* @__PURE__ */ jsx76(
39010
38968
  TuttiBudgetPopover,
39011
38969
  {
39012
38970
  intensity: review.intensity,
39013
38971
  labels: intensityPopoverLabels,
39014
38972
  onConfirm: onIntensityChange,
39015
- children: /* @__PURE__ */ jsxs55(
38973
+ children: /* @__PURE__ */ jsxs56(
39016
38974
  "button",
39017
38975
  {
39018
38976
  type: "button",
@@ -39021,18 +38979,20 @@ function TuttiWorkflowDock({
39021
38979
  "aria-label": intensityPopoverLabels.intensityLabel,
39022
38980
  "data-testid": "agent-gui-tutti-workflow-intensity",
39023
38981
  className: cn(
39024
- "flex items-center gap-1",
38982
+ "flex items-center gap-1 rounded-md px-1.5 py-0.5 transition-colors",
38983
+ "hover:bg-[var(--transparency-hover)]",
38984
+ "data-[state=open]:bg-[color-mix(in_srgb,var(--tutti-purple)_12%,transparent)] data-[state=open]:text-[var(--tutti-purple)]",
39025
38985
  review.intensityDiverged && "text-[var(--tutti-purple)]"
39026
38986
  ),
39027
38987
  children: [
39028
- /* @__PURE__ */ jsx75(Gauge2, { "aria-hidden": true, className: "size-3.5" }),
39029
- /* @__PURE__ */ jsx75("span", { className: "text-[11px] tabular-nums", children: review.intensity })
38988
+ /* @__PURE__ */ jsx76(Gauge2, { "aria-hidden": true, className: "size-3.5" }),
38989
+ /* @__PURE__ */ jsx76("span", { className: "text-[11px] tabular-nums", children: review.intensity })
39030
38990
  ]
39031
38991
  }
39032
38992
  )
39033
38993
  }
39034
38994
  ),
39035
- /* @__PURE__ */ jsx75(
38995
+ /* @__PURE__ */ jsx76(
39036
38996
  "button",
39037
38997
  {
39038
38998
  type: "button",
@@ -39041,10 +39001,10 @@ function TuttiWorkflowDock({
39041
39001
  title: labels.cancel,
39042
39002
  "aria-label": labels.cancel,
39043
39003
  "data-testid": "agent-gui-tutti-workflow-cancel",
39044
- children: /* @__PURE__ */ jsx75(X7, { "aria-hidden": true, className: "size-3.5" })
39004
+ children: /* @__PURE__ */ jsx76(X7, { "aria-hidden": true, className: "size-3.5" })
39045
39005
  }
39046
39006
  )
39047
- ] }) : phase.kind === "error" && phase.retryable ? /* @__PURE__ */ jsxs55(
39007
+ ] }) : phase.kind === "error" && phase.retryable ? /* @__PURE__ */ jsxs56(
39048
39008
  "button",
39049
39009
  {
39050
39010
  type: "button",
@@ -39053,12 +39013,12 @@ function TuttiWorkflowDock({
39053
39013
  "aria-label": labels.retry,
39054
39014
  "data-testid": "agent-gui-tutti-workflow-retry",
39055
39015
  children: [
39056
- /* @__PURE__ */ jsx75(RotateCcw, { "aria-hidden": true, className: "size-3.5" }),
39016
+ /* @__PURE__ */ jsx76(RotateCcw, { "aria-hidden": true, className: "size-3.5" }),
39057
39017
  labels.retry
39058
39018
  ]
39059
39019
  }
39060
39020
  ) : null;
39061
- return /* @__PURE__ */ jsx75(
39021
+ return /* @__PURE__ */ jsx76(
39062
39022
  AgentComposerDisclosureCard,
39063
39023
  {
39064
39024
  actions,
@@ -39069,7 +39029,7 @@ function TuttiWorkflowDock({
39069
39029
  summary,
39070
39030
  testId: "agent-gui-tutti-workflow-dock",
39071
39031
  title,
39072
- children: review !== null ? /* @__PURE__ */ jsx75(
39032
+ children: review !== null ? /* @__PURE__ */ jsx76(
39073
39033
  TuttiModePlanPanel,
39074
39034
  {
39075
39035
  assignmentCatalog,
@@ -39080,23 +39040,23 @@ function TuttiWorkflowDock({
39080
39040
  submitting: review.submitting,
39081
39041
  onAssignmentDraftChange
39082
39042
  }
39083
- ) : phase.kind === "materializing" ? /* @__PURE__ */ jsxs55(
39043
+ ) : phase.kind === "materializing" ? /* @__PURE__ */ jsxs56(
39084
39044
  "div",
39085
39045
  {
39086
39046
  className: "grid min-h-28 place-items-center gap-2 text-center text-sm text-muted-foreground",
39087
39047
  role: "status",
39088
39048
  children: [
39089
- /* @__PURE__ */ jsx75(
39049
+ /* @__PURE__ */ jsx76(
39090
39050
  LoaderCircle,
39091
39051
  {
39092
39052
  "aria-hidden": true,
39093
39053
  className: "size-5 animate-spin text-[var(--tutti-purple)]"
39094
39054
  }
39095
39055
  ),
39096
- /* @__PURE__ */ jsx75("span", { children: labels.materializingHint })
39056
+ /* @__PURE__ */ jsx76("span", { children: labels.materializingHint })
39097
39057
  ]
39098
39058
  }
39099
- ) : execution !== null ? /* @__PURE__ */ jsx75(
39059
+ ) : execution !== null ? /* @__PURE__ */ jsx76(
39100
39060
  TuttiPlanIssuePanel,
39101
39061
  {
39102
39062
  embedded: true,
@@ -39107,7 +39067,7 @@ function TuttiWorkflowDock({
39107
39067
  onOpenIssue,
39108
39068
  onOpenTask
39109
39069
  }
39110
- ) : /* @__PURE__ */ jsx75(
39070
+ ) : /* @__PURE__ */ jsx76(
39111
39071
  "div",
39112
39072
  {
39113
39073
  className: "rounded-md border border-[color-mix(in_srgb,var(--state-danger)_45%,transparent)] px-4 py-3 text-sm text-muted-foreground",
@@ -39120,7 +39080,7 @@ function TuttiWorkflowDock({
39120
39080
  }
39121
39081
 
39122
39082
  // agent-gui/agentGuiNode/view/AgentGUIBottomDockPane.tsx
39123
- import { Fragment as Fragment24, jsx as jsx76, jsxs as jsxs56 } from "react/jsx-runtime";
39083
+ import { Fragment as Fragment24, jsx as jsx77, jsxs as jsxs57 } from "react/jsx-runtime";
39124
39084
  var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39125
39085
  bottomDockRef,
39126
39086
  showScrollToBottom,
@@ -39160,11 +39120,11 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39160
39120
  const goalIsOptimistic = sessionChrome.rawState?.goalIsOptimistic === true;
39161
39121
  const showGoalBanner = isGoalBannerVisible(goalObjective, goalStatus);
39162
39122
  const workflowPhase = tuttiWorkflowDock.phase;
39163
- return /* @__PURE__ */ jsx76(
39123
+ return /* @__PURE__ */ jsx77(
39164
39124
  AgentComposerRegion,
39165
39125
  {
39166
39126
  regionRef: bottomDockRef,
39167
- floating: showScrollToBottom ? /* @__PURE__ */ jsx76(
39127
+ floating: showScrollToBottom ? /* @__PURE__ */ jsx77(
39168
39128
  "button",
39169
39129
  {
39170
39130
  type: "button",
@@ -39177,15 +39137,15 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39177
39137
  title: scrollToBottomLabel,
39178
39138
  onPointerDown: (event) => event.stopPropagation(),
39179
39139
  onClick: onScrollToBottom,
39180
- children: /* @__PURE__ */ jsx76(ChevronsDown, { "aria-hidden": "true", size: 15, strokeWidth: 2.2 })
39140
+ children: /* @__PURE__ */ jsx77(ChevronsDown, { "aria-hidden": "true", size: 15, strokeWidth: 2.2 })
39181
39141
  }
39182
39142
  ) : null,
39183
- lifted: bottomDockLiftedPrompt ? /* @__PURE__ */ jsx76(
39143
+ lifted: bottomDockLiftedPrompt ? /* @__PURE__ */ jsx77(
39184
39144
  "div",
39185
39145
  {
39186
39146
  className: AgentGUINode_styles_default.bottomDockPrompt,
39187
39147
  "data-testid": "agent-gui-bottom-dock-active-prompt",
39188
- children: /* @__PURE__ */ jsx76(
39148
+ children: /* @__PURE__ */ jsx77(
39189
39149
  AgentInteractivePromptSurface,
39190
39150
  {
39191
39151
  prompt: bottomDockLiftedPrompt,
@@ -39200,8 +39160,8 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39200
39160
  )
39201
39161
  }
39202
39162
  ) : null,
39203
- accessories: /* @__PURE__ */ jsxs56(Fragment24, { children: [
39204
- inlineNoticeChrome ? /* @__PURE__ */ jsx76(
39163
+ accessories: /* @__PURE__ */ jsxs57(Fragment24, { children: [
39164
+ inlineNoticeChrome ? /* @__PURE__ */ jsx77(
39205
39165
  AgentSessionChrome,
39206
39166
  {
39207
39167
  chrome: inlineNoticeChrome,
@@ -39213,7 +39173,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39213
39173
  labels: chromeLabels
39214
39174
  }
39215
39175
  ) : null,
39216
- /* @__PURE__ */ jsx76(
39176
+ /* @__PURE__ */ jsx77(
39217
39177
  AgentSessionChrome,
39218
39178
  {
39219
39179
  chrome: sessionChrome,
@@ -39225,7 +39185,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39225
39185
  labels: chromeLabels
39226
39186
  }
39227
39187
  ),
39228
- showGoalBanner ? /* @__PURE__ */ jsx76(
39188
+ showGoalBanner ? /* @__PURE__ */ jsx77(
39229
39189
  AgentGoalBanner,
39230
39190
  {
39231
39191
  objective: goalObjective,
@@ -39240,7 +39200,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39240
39200
  onClearGoal: () => onGoalControl("clear")
39241
39201
  }
39242
39202
  ) : null,
39243
- workflowPhase ? /* @__PURE__ */ jsx76(
39203
+ workflowPhase ? /* @__PURE__ */ jsx77(
39244
39204
  TuttiWorkflowDock,
39245
39205
  {
39246
39206
  assignmentCatalog: tuttiWorkflowDock.assignmentCatalog,
@@ -39279,12 +39239,12 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39279
39239
  }
39280
39240
  ) : null
39281
39241
  ] }),
39282
- primary: bottomDockReplacementPrompt ? /* @__PURE__ */ jsx76(
39242
+ primary: bottomDockReplacementPrompt ? /* @__PURE__ */ jsx77(
39283
39243
  "div",
39284
39244
  {
39285
39245
  className: AgentGUINode_styles_default.bottomDockPrompt,
39286
39246
  "data-testid": "agent-gui-bottom-dock-active-prompt",
39287
- children: /* @__PURE__ */ jsx76(
39247
+ children: /* @__PURE__ */ jsx77(
39288
39248
  AgentInteractivePromptSurface,
39289
39249
  {
39290
39250
  prompt: bottomDockReplacementPrompt,
@@ -39298,7 +39258,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39298
39258
  }
39299
39259
  )
39300
39260
  }
39301
- ) : /* @__PURE__ */ jsx76(AgentComposer, { ...composerProps })
39261
+ ) : /* @__PURE__ */ jsx77(AgentComposer, { ...composerProps })
39302
39262
  }
39303
39263
  );
39304
39264
  });
@@ -39311,14 +39271,14 @@ import {
39311
39271
  ToastTitle,
39312
39272
  ToastViewport
39313
39273
  } from "@tutti-os/ui-system";
39314
- import { jsx as jsx77, jsxs as jsxs57 } from "react/jsx-runtime";
39274
+ import { jsx as jsx78, jsxs as jsxs58 } from "react/jsx-runtime";
39315
39275
  function AgentGUIContentToast({
39316
39276
  insetTopPx,
39317
39277
  message
39318
39278
  }) {
39319
39279
  const [open, setOpen] = useState44(true);
39320
- return /* @__PURE__ */ jsxs57(ToastProvider, { children: [
39321
- /* @__PURE__ */ jsx77(
39280
+ return /* @__PURE__ */ jsxs58(ToastProvider, { children: [
39281
+ /* @__PURE__ */ jsx78(
39322
39282
  ToastRoot,
39323
39283
  {
39324
39284
  open,
@@ -39326,10 +39286,10 @@ function AgentGUIContentToast({
39326
39286
  "data-testid": "agent-gui-content-toast",
39327
39287
  variant: "default",
39328
39288
  onOpenChange: setOpen,
39329
- children: /* @__PURE__ */ jsx77(ToastTitle, { children: message })
39289
+ children: /* @__PURE__ */ jsx78(ToastTitle, { children: message })
39330
39290
  }
39331
39291
  ),
39332
- /* @__PURE__ */ jsx77(
39292
+ /* @__PURE__ */ jsx78(
39333
39293
  ToastViewport,
39334
39294
  {
39335
39295
  className: "nodrag tsh-desktop-no-drag absolute left-0 w-full translate-x-0 px-4 [-webkit-app-region:no-drag]",
@@ -39348,7 +39308,7 @@ import { ScrollArea as ScrollArea3 } from "@tutti-os/ui-system/components";
39348
39308
 
39349
39309
  // agent-gui/agentGuiNode/view/AgentGUIConversationTimelinePane.tsx
39350
39310
  import { memo as memo11 } from "react";
39351
- import { Fragment as Fragment25, jsx as jsx78, jsxs as jsxs58 } from "react/jsx-runtime";
39311
+ import { Fragment as Fragment25, jsx as jsx79, jsxs as jsxs59 } from "react/jsx-runtime";
39352
39312
  var EMPTY_WORKSPACE_APP_ICONS3 = [];
39353
39313
  var AgentGUIConversationTimelinePane = memo11(
39354
39314
  function AgentGUIConversationTimelinePane2({
@@ -39368,17 +39328,17 @@ var AgentGUIConversationTimelinePane = memo11(
39368
39328
  labels
39369
39329
  }) {
39370
39330
  "use memo";
39371
- return /* @__PURE__ */ jsxs58(Fragment25, { children: [
39372
- isLoadingOlderMessages && !isLoading ? /* @__PURE__ */ jsx78(
39331
+ return /* @__PURE__ */ jsxs59(Fragment25, { children: [
39332
+ isLoadingOlderMessages && !isLoading ? /* @__PURE__ */ jsx79(
39373
39333
  "div",
39374
39334
  {
39375
39335
  className: "mx-auto flex h-8 items-center justify-center text-[12px] text-[var(--text-secondary)]",
39376
39336
  "data-testid": "agent-gui-older-messages-loading",
39377
39337
  role: "status",
39378
- children: /* @__PURE__ */ jsx78("span", { className: "tsh-inline-loading-ellipsis", children: loadingLabel })
39338
+ children: /* @__PURE__ */ jsx79("span", { className: "tsh-inline-loading-ellipsis", children: loadingLabel })
39379
39339
  }
39380
39340
  ) : null,
39381
- /* @__PURE__ */ jsx78(
39341
+ /* @__PURE__ */ jsx79(
39382
39342
  AgentConversationFlow,
39383
39343
  {
39384
39344
  conversation,
@@ -39415,7 +39375,7 @@ function setTimelineScrollTopWithUserTransition(element, top) {
39415
39375
  }
39416
39376
 
39417
39377
  // agent-gui/agentGuiNode/view/AgentGUIDetailTimeline.tsx
39418
- import { jsx as jsx79 } from "react/jsx-runtime";
39378
+ import { jsx as jsx80 } from "react/jsx-runtime";
39419
39379
  var TIMELINE_CONTENT_STYLE = {
39420
39380
  width: "100%",
39421
39381
  minWidth: "100%",
@@ -39443,7 +39403,7 @@ var AgentGUIDetailTimeline = memo12(function AgentGUIDetailTimeline2({
39443
39403
  workspaceAppIcons
39444
39404
  }) {
39445
39405
  "use memo";
39446
- return /* @__PURE__ */ jsx79(
39406
+ return /* @__PURE__ */ jsx80(
39447
39407
  ScrollArea3,
39448
39408
  {
39449
39409
  scrollbarMode: "native",
@@ -39453,7 +39413,7 @@ var AgentGUIDetailTimeline = memo12(function AgentGUIDetailTimeline2({
39453
39413
  viewportTestId: "agent-gui-timeline",
39454
39414
  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(),
39455
39415
  viewportContentStyle: TIMELINE_CONTENT_STYLE,
39456
- children: hasActiveConversation ? /* @__PURE__ */ jsx79(
39416
+ children: hasActiveConversation ? /* @__PURE__ */ jsx80(
39457
39417
  AgentGUIConversationTimelinePane,
39458
39418
  {
39459
39419
  conversation,
@@ -39622,6 +39582,10 @@ function useAgentGUIDetailScroll(input) {
39622
39582
  }
39623
39583
  return;
39624
39584
  }
39585
+ if (element.closest(`.${AgentGUINode_styles_default.composerDisclosurePanel}`)) {
39586
+ floatingVisualTop = Math.min(floatingVisualTop, rect.top);
39587
+ return;
39588
+ }
39625
39589
  floatingVisualTop = Math.min(floatingVisualTop, rect.top);
39626
39590
  timelineVisualTop = Math.min(timelineVisualTop, rect.top);
39627
39591
  });
@@ -39868,10 +39832,10 @@ function useAgentGUIDetailScroll(input) {
39868
39832
  import { useMemo as useMemo43 } from "react";
39869
39833
 
39870
39834
  // app/renderer/components/icons/UnavailableChatIcon.tsx
39871
- import { jsx as jsx80 } from "react/jsx-runtime";
39835
+ import { jsx as jsx81 } from "react/jsx-runtime";
39872
39836
  function UnavailableChatIcon(props) {
39873
39837
  "use memo";
39874
- return /* @__PURE__ */ jsx80(
39838
+ return /* @__PURE__ */ jsx81(
39875
39839
  "svg",
39876
39840
  {
39877
39841
  xmlns: "http://www.w3.org/2000/svg",
@@ -39879,7 +39843,7 @@ function UnavailableChatIcon(props) {
39879
39843
  fill: "currentColor",
39880
39844
  "aria-hidden": true,
39881
39845
  ...props,
39882
- children: /* @__PURE__ */ jsx80("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" })
39846
+ children: /* @__PURE__ */ jsx81("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" })
39883
39847
  }
39884
39848
  );
39885
39849
  }
@@ -39925,7 +39889,7 @@ function useAgentGUITimelineTransition(input) {
39925
39889
  }
39926
39890
 
39927
39891
  // agent-gui/agentGuiNode/view/useAgentGUIDetailModel.tsx
39928
- import { Fragment as Fragment26, jsx as jsx81, jsxs as jsxs59 } from "react/jsx-runtime";
39892
+ import { Fragment as Fragment26, jsx as jsx82, jsxs as jsxs60 } from "react/jsx-runtime";
39929
39893
  function resolveTuttiModeUpdateInlineNotice(input) {
39930
39894
  if (input.status !== "failed" && input.status !== "uncertain") return null;
39931
39895
  const localizedMessage = input.status === "failed" ? input.failedMessage : input.uncertainMessage;
@@ -40113,17 +40077,17 @@ function useAgentGUIDetailModel(input) {
40113
40077
  ]
40114
40078
  );
40115
40079
  const conversationFlowEmpty = useMemo43(
40116
- () => showUnavailableChatEmpty ? /* @__PURE__ */ jsxs59(
40080
+ () => showUnavailableChatEmpty ? /* @__PURE__ */ jsxs60(
40117
40081
  "div",
40118
40082
  {
40119
40083
  className: AgentGUINode_styles_default.unavailableChatEmpty,
40120
40084
  "data-testid": "agent-gui-unavailable-chat-empty",
40121
40085
  children: [
40122
- /* @__PURE__ */ jsx81(UnavailableChatIcon, { className: AgentGUINode_styles_default.unavailableChatEmptyIcon }),
40123
- /* @__PURE__ */ jsx81("span", { className: AgentGUINode_styles_default.unavailableChatEmptyText, children: labels.conversationUnavailable })
40086
+ /* @__PURE__ */ jsx82(UnavailableChatIcon, { className: AgentGUINode_styles_default.unavailableChatEmptyIcon }),
40087
+ /* @__PURE__ */ jsx82("span", { className: AgentGUINode_styles_default.unavailableChatEmptyText, children: labels.conversationUnavailable })
40124
40088
  ]
40125
40089
  }
40126
- ) : /* @__PURE__ */ jsx81(Fragment26, {}),
40090
+ ) : /* @__PURE__ */ jsx82(Fragment26, {}),
40127
40091
  [labels.conversationUnavailable, showUnavailableChatEmpty]
40128
40092
  );
40129
40093
  const chromeLabels = useMemo43(
@@ -40794,7 +40758,7 @@ function useAgentGUITuttiWorkflow(input) {
40794
40758
  }
40795
40759
 
40796
40760
  // agent-gui/agentGuiNode/view/AgentGUIDetailPane.tsx
40797
- import { Fragment as Fragment27, jsx as jsx82, jsxs as jsxs60 } from "react/jsx-runtime";
40761
+ import { Fragment as Fragment27, jsx as jsx83, jsxs as jsxs61 } from "react/jsx-runtime";
40798
40762
  var EMPTY_WORKSPACE_APP_ICONS4 = [];
40799
40763
  var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
40800
40764
  shell,
@@ -41124,7 +41088,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41124
41088
  onSettingsChange: updateComposerSettings,
41125
41089
  onRetryComposerOptions: retryComposerOptions,
41126
41090
  // Only wire Tutti Mode callbacks when the host explicitly enables the
41127
- // capability. Empty hero toggle keys off callback presence; slash/badge
41091
+ // capability. Composer footer chip keys off callback presence; slash/badge
41128
41092
  // use capabilityMenuState.tuttiMode.enabled === true (fail closed).
41129
41093
  onTuttiModeChange: capabilityMenuState?.tuttiMode?.enabled === true ? tuttiWorkflowComposer.setTuttiModeActiveAndSettleReview : void 0,
41130
41094
  onTuttiModeOrchestrationIntensityChange: capabilityMenuState?.tuttiMode?.enabled === true ? setTuttiModeOrchestrationIntensity : void 0,
@@ -41287,7 +41251,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41287
41251
  timelineScrollAnchorRef,
41288
41252
  viewModel
41289
41253
  });
41290
- const homeContent = !hasActiveConversation ? shouldRenderProviderUnavailableState && disabledProviderTarget ? /* @__PURE__ */ jsx82(Fragment27, { children: renderProviderUnavailableState?.({
41254
+ const homeContent = !hasActiveConversation ? shouldRenderProviderUnavailableState && disabledProviderTarget ? /* @__PURE__ */ jsx83(Fragment27, { children: renderProviderUnavailableState?.({
41291
41255
  provider: disabledProviderTarget.provider,
41292
41256
  providerLabel: labels.emptyProviderForProvider?.(
41293
41257
  disabledProviderTarget.provider
@@ -41297,7 +41261,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41297
41261
  target: disabledProviderTarget,
41298
41262
  iconUrl: resolveAgentGUIHeroIconUrl2(disabledProviderTarget.provider),
41299
41263
  unavailableReason: disabledProviderTarget.unavailableReason ?? null
41300
- }) }) : /* @__PURE__ */ jsx82(
41264
+ }) }) : /* @__PURE__ */ jsx83(
41301
41265
  AgentGUIEmptyHomePane,
41302
41266
  {
41303
41267
  provider: emptyHeroProvider,
@@ -41322,14 +41286,14 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41322
41286
  onSelectSuggestionAction: handleHomeSuggestionAction
41323
41287
  }
41324
41288
  ) : null;
41325
- return /* @__PURE__ */ jsxs60(
41289
+ return /* @__PURE__ */ jsxs61(
41326
41290
  "main",
41327
41291
  {
41328
41292
  className: AgentGUINode_styles_default.detail,
41329
41293
  "aria-busy": timelineInteractionLocked || void 0,
41330
41294
  inert: timelineInteractionLocked,
41331
41295
  children: [
41332
- viewModel.operations.goalClearNoticeSequence > 0 ? /* @__PURE__ */ jsx82(
41296
+ viewModel.operations.goalClearNoticeSequence > 0 ? /* @__PURE__ */ jsx83(
41333
41297
  AgentGUIContentToast,
41334
41298
  {
41335
41299
  insetTopPx: 16,
@@ -41337,7 +41301,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41337
41301
  },
41338
41302
  viewModel.operations.goalClearNoticeSequence
41339
41303
  ) : null,
41340
- /* @__PURE__ */ jsx82(
41304
+ /* @__PURE__ */ jsx83(
41341
41305
  AgentGUIDetailTimeline,
41342
41306
  {
41343
41307
  availableSkills: viewModel.composer.availableSkills,
@@ -41359,7 +41323,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41359
41323
  workspaceAppIcons
41360
41324
  }
41361
41325
  ),
41362
- hasActiveConversation ? /* @__PURE__ */ jsx82(
41326
+ hasActiveConversation ? /* @__PURE__ */ jsx83(
41363
41327
  AgentGUIBottomDockPane,
41364
41328
  {
41365
41329
  bottomDockRef,
@@ -41398,7 +41362,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41398
41362
  // agent-gui/agentGuiNode/view/AgentGUIRenameConversationDialog.tsx
41399
41363
  import { memo as memo14, useCallback as useCallback62, useEffect as useEffect36, useRef as useRef54, useState as useState49 } from "react";
41400
41364
  import { ConfirmationDialog as ConfirmationDialog4, Input as Input4 } from "@tutti-os/ui-system";
41401
- import { jsx as jsx83, jsxs as jsxs61 } from "react/jsx-runtime";
41365
+ import { jsx as jsx84, jsxs as jsxs62 } from "react/jsx-runtime";
41402
41366
  var AgentGUIRenameConversationDialog = memo14(
41403
41367
  function AgentGUIRenameConversationDialog2({
41404
41368
  conversation,
@@ -41454,7 +41418,7 @@ var AgentGUIRenameConversationDialog = memo14(
41454
41418
  setIsSaving(false);
41455
41419
  });
41456
41420
  }, [conversation, onOpenChange, onRename, trimmedTitle]);
41457
- return /* @__PURE__ */ jsx83(
41421
+ return /* @__PURE__ */ jsx84(
41458
41422
  ConfirmationDialog4,
41459
41423
  {
41460
41424
  cancelLabel: labels.cancel,
@@ -41463,8 +41427,8 @@ var AgentGUIRenameConversationDialog = memo14(
41463
41427
  confirmDisabled: !trimmedTitle,
41464
41428
  confirmLabel: labels.renameSessionSave,
41465
41429
  description: labels.renameSessionDescription,
41466
- footer: /* @__PURE__ */ jsxs61("div", { className: "flex justify-end gap-2", children: [
41467
- /* @__PURE__ */ jsx83(
41430
+ footer: /* @__PURE__ */ jsxs62("div", { className: "flex justify-end gap-2", children: [
41431
+ /* @__PURE__ */ jsx84(
41468
41432
  Button,
41469
41433
  {
41470
41434
  disabled: isSaving,
@@ -41502,7 +41466,7 @@ var AgentGUIRenameConversationDialog = memo14(
41502
41466
  children: labels.cancel
41503
41467
  }
41504
41468
  ),
41505
- /* @__PURE__ */ jsx83(
41469
+ /* @__PURE__ */ jsx84(
41506
41470
  Button,
41507
41471
  {
41508
41472
  className: "shadow-none",
@@ -41557,7 +41521,7 @@ var AgentGUIRenameConversationDialog = memo14(
41557
41521
  title: labels.renameSessionTitle,
41558
41522
  onConfirm: confirmRename,
41559
41523
  onOpenChange,
41560
- children: /* @__PURE__ */ jsx83(
41524
+ children: /* @__PURE__ */ jsx84(
41561
41525
  Input4,
41562
41526
  {
41563
41527
  ref: inputRef,
@@ -41585,7 +41549,7 @@ import {
41585
41549
  ReferenceSourcePicker,
41586
41550
  WorkspaceFileReferencePicker
41587
41551
  } from "@tutti-os/workspace-file-reference/ui";
41588
- import { jsx as jsx84 } from "react/jsx-runtime";
41552
+ import { jsx as jsx85 } from "react/jsx-runtime";
41589
41553
  function AgentGUIReferencePickerSurface({
41590
41554
  aggregator,
41591
41555
  copy,
@@ -41596,13 +41560,14 @@ function AgentGUIReferencePickerSurface({
41596
41560
  isNodeSelectable,
41597
41561
  open,
41598
41562
  purpose,
41563
+ resolveContentErrorAction,
41599
41564
  resolveEntryIconUrl,
41600
41565
  workspaceId,
41601
41566
  onClose,
41602
41567
  onConfirm,
41603
41568
  onConfirmBundles
41604
41569
  }) {
41605
- return aggregator ? /* @__PURE__ */ jsx84(
41570
+ return aggregator ? /* @__PURE__ */ jsx85(
41606
41571
  ReferenceSourcePicker,
41607
41572
  {
41608
41573
  aggregator,
@@ -41612,13 +41577,14 @@ function AgentGUIReferencePickerSurface({
41612
41577
  fileManagerCopy: fileManagerCopy ?? void 0,
41613
41578
  open,
41614
41579
  purpose,
41580
+ resolveContentErrorAction,
41615
41581
  resolveEntryIconUrl,
41616
41582
  workspaceId,
41617
41583
  onClose,
41618
41584
  onConfirm,
41619
41585
  onConfirmBundles
41620
41586
  }
41621
- ) : /* @__PURE__ */ jsx84(
41587
+ ) : /* @__PURE__ */ jsx85(
41622
41588
  WorkspaceFileReferencePicker,
41623
41589
  {
41624
41590
  copy,
@@ -41635,7 +41601,7 @@ function AgentGUIReferencePickerSurface({
41635
41601
 
41636
41602
  // agent-gui/agentGuiNode/view/AgentTargetSetupRoot.tsx
41637
41603
  import { useCallback as useCallback63, useMemo as useMemo45 } from "react";
41638
- import { jsx as jsx85, jsxs as jsxs62 } from "react/jsx-runtime";
41604
+ import { jsx as jsx86, jsxs as jsxs63 } from "react/jsx-runtime";
41639
41605
  function useAgentTargetSetupRoot(input) {
41640
41606
  const { preferences } = useAgentGUIProviderRailPreferences();
41641
41607
  const homeTargetProjection = useMemo45(
@@ -41679,9 +41645,9 @@ function AgentTargetSetupRoot({
41679
41645
  controller,
41680
41646
  openEnvironmentSetup
41681
41647
  }) {
41682
- return /* @__PURE__ */ jsx85(AgentEnvPanelActionProvider, { openPanel: openEnvironmentSetup, children: /* @__PURE__ */ jsxs62(AgentTargetSetupControllerProvider, { controller, children: [
41648
+ return /* @__PURE__ */ jsx86(AgentEnvPanelActionProvider, { openPanel: openEnvironmentSetup, children: /* @__PURE__ */ jsxs63(AgentTargetSetupControllerProvider, { controller, children: [
41683
41649
  children,
41684
- /* @__PURE__ */ jsx85(
41650
+ /* @__PURE__ */ jsx86(
41685
41651
  AgentTargetSetupGate,
41686
41652
  {
41687
41653
  carouselMountedExternally: false,
@@ -42244,7 +42210,7 @@ function useAgentGUIExternalRequests(input) {
42244
42210
  }
42245
42211
 
42246
42212
  // agent-gui/agentGuiNode/AgentGUINodeView.tsx
42247
- import { jsx as jsx86, jsxs as jsxs63 } from "react/jsx-runtime";
42213
+ import { jsx as jsx87, jsxs as jsxs64 } from "react/jsx-runtime";
42248
42214
  function AgentGUINodeView({
42249
42215
  viewModel,
42250
42216
  referenceProvenanceFilter = null,
@@ -42308,6 +42274,7 @@ function AgentGUINodeView({
42308
42274
  onRequestGitBranches = null,
42309
42275
  projectDirectorySourceAggregator = null,
42310
42276
  referenceSourceAggregator = null,
42277
+ resolveReferenceContentErrorAction,
42311
42278
  resolveWorkspaceReferenceEntryIconUrl,
42312
42279
  resolveMentionReferenceTarget = null,
42313
42280
  resolveWorkspaceReferenceInitialTarget = null,
@@ -42673,13 +42640,13 @@ function AgentGUINodeView({
42673
42640
  }),
42674
42641
  [targetPresentationKey, viewModel.shell.workspaceId]
42675
42642
  );
42676
- const content = /* @__PURE__ */ jsx86(AgentTargetPresentationProvider, { agentTargets: agentTargetPresentations, children: /* @__PURE__ */ jsxs63(
42643
+ const content = /* @__PURE__ */ jsx87(AgentTargetPresentationProvider, { agentTargets: agentTargetPresentations, children: /* @__PURE__ */ jsxs64(
42677
42644
  AgentTargetSetupRoot,
42678
42645
  {
42679
42646
  controller: targetSetupController,
42680
42647
  openEnvironmentSetup: onAgentEnvPanelOpen,
42681
42648
  children: [
42682
- /* @__PURE__ */ jsxs63(
42649
+ /* @__PURE__ */ jsxs64(
42683
42650
  "div",
42684
42651
  {
42685
42652
  ref: layoutElementRef,
@@ -42689,7 +42656,7 @@ function AgentGUINodeView({
42689
42656
  inert: previewMode ? true : void 0,
42690
42657
  style: layoutStyle,
42691
42658
  children: [
42692
- /* @__PURE__ */ jsxs63(
42659
+ /* @__PURE__ */ jsxs64(
42693
42660
  "aside",
42694
42661
  {
42695
42662
  className: `${AgentGUINode_styles_default.providerRailPanel} nodrag tsh-desktop-no-drag`,
@@ -42697,7 +42664,7 @@ function AgentGUINodeView({
42697
42664
  "aria-hidden": conversationRailCollapsed ? "true" : void 0,
42698
42665
  inert: conversationRailCollapsed ? true : void 0,
42699
42666
  children: [
42700
- /* @__PURE__ */ jsx86(
42667
+ /* @__PURE__ */ jsx87(
42701
42668
  AgentGUIProviderRail,
42702
42669
  {
42703
42670
  activeConversation: viewModel.rail.activeConversation,
@@ -42721,7 +42688,7 @@ function AgentGUINodeView({
42721
42688
  onRequestComposerFocus: requestComposerFocus
42722
42689
  }
42723
42690
  ),
42724
- renderSidebarFooter ? /* @__PURE__ */ jsx86(
42691
+ renderSidebarFooter ? /* @__PURE__ */ jsx87(
42725
42692
  "div",
42726
42693
  {
42727
42694
  className: `${AgentGUINode_styles_default.providerRailFooter} ${AgentGUINode_styles_default.providerRailSidebarFooter} nodrag tsh-desktop-no-drag`,
@@ -42732,12 +42699,12 @@ function AgentGUINodeView({
42732
42699
  })
42733
42700
  }
42734
42701
  ) : null,
42735
- shouldShowProviderRailConfigButton ? /* @__PURE__ */ jsx86(
42702
+ shouldShowProviderRailConfigButton ? /* @__PURE__ */ jsx87(
42736
42703
  "div",
42737
42704
  {
42738
42705
  className: `${AgentGUINode_styles_default.providerRailFooter} ${AgentGUINode_styles_default.providerRailConfigFooter} nodrag tsh-desktop-no-drag`,
42739
42706
  "data-testid": "agent-gui-config-footer",
42740
- children: /* @__PURE__ */ jsx86(
42707
+ children: /* @__PURE__ */ jsx87(
42741
42708
  AgentGUIConfigMenu,
42742
42709
  {
42743
42710
  environmentSetupVisible,
@@ -42764,14 +42731,14 @@ function AgentGUINodeView({
42764
42731
  ]
42765
42732
  }
42766
42733
  ),
42767
- /* @__PURE__ */ jsx86(
42734
+ /* @__PURE__ */ jsx87(
42768
42735
  "aside",
42769
42736
  {
42770
42737
  id: "agent-gui-conversation-rail",
42771
42738
  className: `${AgentGUINode_styles_default.railPanel}${conversationRailCollapsed ? ` ${AgentGUINode_styles_default.railPanelCollapsed}` : ""}`,
42772
42739
  "aria-hidden": conversationRailCollapsed ? "true" : void 0,
42773
42740
  inert: conversationRailCollapsed ? true : void 0,
42774
- children: /* @__PURE__ */ jsx86(
42741
+ children: /* @__PURE__ */ jsx87(
42775
42742
  AgentGUIConversationRailController,
42776
42743
  {
42777
42744
  ...conversationRailStoreState,
@@ -42780,7 +42747,7 @@ function AgentGUINodeView({
42780
42747
  registerInteractionLockProbe: registerRailInteractionLockProbe,
42781
42748
  userProjects: viewModel.rail.userProjects,
42782
42749
  workspaceId: viewModel.shell.workspaceId,
42783
- footer: accountMenuState?.user ? /* @__PURE__ */ jsx86(
42750
+ footer: accountMenuState?.user ? /* @__PURE__ */ jsx87(
42784
42751
  AgentGUIAccountRailMenu,
42785
42752
  {
42786
42753
  accountMenuState,
@@ -42792,7 +42759,7 @@ function AgentGUINodeView({
42792
42759
  )
42793
42760
  }
42794
42761
  ),
42795
- /* @__PURE__ */ jsx86(
42762
+ /* @__PURE__ */ jsx87(
42796
42763
  "div",
42797
42764
  {
42798
42765
  id: "agent-gui-conversation-rail-resize",
@@ -42816,7 +42783,7 @@ function AgentGUINodeView({
42816
42783
  onPointerUp: endConversationRailResize
42817
42784
  }
42818
42785
  ),
42819
- /* @__PURE__ */ jsx86("section", { id: "agent-gui-detail", className: AgentGUINode_styles_default.detailPanel, children: /* @__PURE__ */ jsx86(
42786
+ /* @__PURE__ */ jsx87("section", { id: "agent-gui-detail", className: AgentGUINode_styles_default.detailPanel, children: /* @__PURE__ */ jsx87(
42820
42787
  AgentGUIDetailPane,
42821
42788
  {
42822
42789
  shell: viewModel.shell,
@@ -42864,7 +42831,7 @@ function AgentGUINodeView({
42864
42831
  ]
42865
42832
  }
42866
42833
  ),
42867
- /* @__PURE__ */ jsx86(
42834
+ /* @__PURE__ */ jsx87(
42868
42835
  AgentGUIReferencePickerSurface,
42869
42836
  {
42870
42837
  aggregator: workspaceReferencePickerAggregator,
@@ -42876,6 +42843,7 @@ function AgentGUINodeView({
42876
42843
  isNodeSelectable: isWorkspaceReferencePickerNodeSelectable,
42877
42844
  open: workspaceReferencePickerOpen,
42878
42845
  purpose: workspaceReferencePickerPurpose,
42846
+ resolveContentErrorAction: resolveReferenceContentErrorAction,
42879
42847
  resolveEntryIconUrl: resolveWorkspaceReferenceEntryIconUrl,
42880
42848
  workspaceId: viewModel.shell.workspaceId,
42881
42849
  onClose: closeWorkspaceReferencePicker,
@@ -42883,7 +42851,7 @@ function AgentGUINodeView({
42883
42851
  onConfirmBundles: workspaceReferencePickerPurpose === "reference" ? confirmWorkspaceReferenceBundles : void 0
42884
42852
  }
42885
42853
  ),
42886
- /* @__PURE__ */ jsx86(
42854
+ /* @__PURE__ */ jsx87(
42887
42855
  AgentGUIRenameConversationDialog,
42888
42856
  {
42889
42857
  conversation: renameConversationTarget,
@@ -42901,7 +42869,7 @@ function AgentGUINodeView({
42901
42869
  ]
42902
42870
  }
42903
42871
  ) });
42904
- return previewMode ? content : /* @__PURE__ */ jsx86(TooltipProvider7, { children: content });
42872
+ return previewMode ? content : /* @__PURE__ */ jsx87(TooltipProvider7, { children: content });
42905
42873
  }
42906
42874
 
42907
42875
  // agent-gui/workspaceDesktop/view/AgentProbeInfoPopover.tsx
@@ -42914,7 +42882,7 @@ import {
42914
42882
  useState as useState52
42915
42883
  } from "react";
42916
42884
  import { createPortal as createPortal5 } from "react-dom";
42917
- import { Fragment as Fragment28, jsx as jsx87, jsxs as jsxs64 } from "react/jsx-runtime";
42885
+ import { Fragment as Fragment28, jsx as jsx88, jsxs as jsxs65 } from "react/jsx-runtime";
42918
42886
  var POPOVER_MIN_VIEWPORT_INSET_PX = 16;
42919
42887
  var POPOVER_DEFAULT_WIDTH_PX = 260;
42920
42888
  function dockAgentProbeLineKey(line) {
@@ -42924,11 +42892,11 @@ function renderDockAgentProbeLine(line) {
42924
42892
  if (typeof line === "string") {
42925
42893
  return line;
42926
42894
  }
42927
- return /* @__PURE__ */ jsxs64(Fragment28, { children: [
42895
+ return /* @__PURE__ */ jsxs65(Fragment28, { children: [
42928
42896
  line.primary,
42929
- line.secondary ? /* @__PURE__ */ jsxs64(Fragment28, { children: [
42897
+ line.secondary ? /* @__PURE__ */ jsxs65(Fragment28, { children: [
42930
42898
  " ",
42931
- /* @__PURE__ */ jsx87("span", { className: "desktop-dock-popup__agent-status-secondary", children: line.secondary })
42899
+ /* @__PURE__ */ jsx88("span", { className: "desktop-dock-popup__agent-status-secondary", children: line.secondary })
42932
42900
  ] }) : null
42933
42901
  ] });
42934
42902
  }
@@ -43021,7 +42989,7 @@ function AgentProbeInfoPopover({
43021
42989
  if (lines.length === 0) {
43022
42990
  return null;
43023
42991
  }
43024
- const popover = /* @__PURE__ */ jsx87(
42992
+ const popover = /* @__PURE__ */ jsx88(
43025
42993
  "div",
43026
42994
  {
43027
42995
  ref: popoverRef,
@@ -43030,17 +42998,17 @@ function AgentProbeInfoPopover({
43030
42998
  style: popoverStyle ?? void 0,
43031
42999
  onMouseEnter: openPopover,
43032
43000
  onMouseLeave: closeIfPointerLeavesPopover,
43033
- children: /* @__PURE__ */ jsx87("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
43001
+ children: /* @__PURE__ */ jsx88("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
43034
43002
  const label = getDockAgentProbeLineLabel(line);
43035
43003
  const valueText = formatDockAgentProbeLineText(line);
43036
- return /* @__PURE__ */ jsxs64(
43004
+ return /* @__PURE__ */ jsxs65(
43037
43005
  "li",
43038
43006
  {
43039
43007
  className: "desktop-dock-popup__agent-info-item",
43040
43008
  "data-has-label": label ? "true" : "false",
43041
43009
  children: [
43042
- label ? /* @__PURE__ */ jsx87("span", { className: "desktop-dock-popup__agent-info-label", children: label }) : null,
43043
- /* @__PURE__ */ jsx87(
43010
+ label ? /* @__PURE__ */ jsx88("span", { className: "desktop-dock-popup__agent-info-label", children: label }) : null,
43011
+ /* @__PURE__ */ jsx88(
43044
43012
  "span",
43045
43013
  {
43046
43014
  className: "desktop-dock-popup__agent-info-value",
@@ -43055,7 +43023,7 @@ function AgentProbeInfoPopover({
43055
43023
  }) })
43056
43024
  }
43057
43025
  );
43058
- return /* @__PURE__ */ jsxs64(
43026
+ return /* @__PURE__ */ jsxs65(
43059
43027
  "div",
43060
43028
  {
43061
43029
  ref: anchorRef,
@@ -43075,7 +43043,7 @@ function AgentProbeInfoPopover({
43075
43043
  },
43076
43044
  onBlur: closePopover,
43077
43045
  children: [
43078
- /* @__PURE__ */ jsx87(Info2, { size: 15, strokeWidth: 2.1, "aria-hidden": "true" }),
43046
+ /* @__PURE__ */ jsx88(Info2, { size: 15, strokeWidth: 2.1, "aria-hidden": "true" }),
43079
43047
  isOpen ? createPortal5(popover, document.body) : null
43080
43048
  ]
43081
43049
  }
@@ -43164,7 +43132,7 @@ function areAgentGUINodePropsEqual(previous, next) {
43164
43132
  const pc = previous.hostCapabilities, nc = next.hostCapabilities;
43165
43133
  const pa = previous.hostActions, na = next.hostActions;
43166
43134
  const ps = previous.renderSlots, ns = next.renderSlots;
43167
- return pi.nodeId === ni.nodeId && pi.workspaceId === ni.workspaceId && pi.currentUserId === ni.currentUserId && pi.title === ni.title && pw.path === nw.path && pw.fileReferenceAdapter === nw.fileReferenceAdapter && pw.onRequestGitBranches === nw.onRequestGitBranches && pw.selectProjectDirectory === nw.selectProjectDirectory && pw.resolveExternalPromptEntries === nw.resolveExternalPromptEntries && pw.prepareExternalPromptFiles === nw.prepareExternalPromptFiles && pw.promptAssetLimit === nw.promptAssetLimit && pw.projectDirectorySourceAggregator === nw.projectDirectorySourceAggregator && pw.referenceSourceAggregator === nw.referenceSourceAggregator && pw.resolveReferenceEntryIconUrl === nw.resolveReferenceEntryIconUrl && pw.resolveMentionReferenceTarget === nw.resolveMentionReferenceTarget && pw.resolveReferenceInitialTarget === nw.resolveReferenceInitialTarget && pw.onFileReferencesAdded === nw.onFileReferencesAdded && pw.agentSettings.avoidGroupingEdits === nw.agentSettings.avoidGroupingEdits && pc.referenceProvenanceFilterCatalog === nc.referenceProvenanceFilterCatalog && pc.referenceProvenanceFilterEnabled === nc.referenceProvenanceFilterEnabled && agentGuiStateEquals(previous.state, next.state) && pf.position.x === nf.position.x && pf.position.y === nf.position.y && pf.width === nf.width && pf.height === nf.height && pf.desktopSize.width === nf.desktopSize.width && pf.desktopSize.height === nf.desktopSize.height && pf.isMaximized === nf.isMaximized && pf.isActive === nf.isActive && pf.isVisible === nf.isVisible && pf.embedded === nf.embedded && pf.previewMode === nf.previewMode && pf.conversationRailAutoCollapseWidthPx === nf.conversationRailAutoCollapseWidthPx && pr.composerFocusSequence === nr.composerFocusSequence && pr.composerAppend === nr.composerAppend && pr.newConversationSequence === nr.newConversationSequence && pr.sessionAction === nr.sessionAction && pr.openSession === nr.openSession && pr.prefillPrompt === nr.prefillPrompt && pr.agentStatusController === nr.agentStatusController && pc.capabilityMenuState === nc.capabilityMenuState && pc.capabilityControlsReadOnly === nc.capabilityControlsReadOnly && 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.targetConnectionSource === nc.targetConnectionSource && 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 && pa.onConversationRailLayoutChange === na.onConversationRailLayoutChange && ps.providerRailEmpty === ns.providerRailEmpty && ps.providerUnavailableState === ns.providerUnavailableState && ps.sidebarFooter === ns.sidebarFooter;
43135
+ return pi.nodeId === ni.nodeId && pi.workspaceId === ni.workspaceId && pi.currentUserId === ni.currentUserId && pi.title === ni.title && pw.path === nw.path && pw.fileReferenceAdapter === nw.fileReferenceAdapter && pw.onRequestGitBranches === nw.onRequestGitBranches && pw.selectProjectDirectory === nw.selectProjectDirectory && pw.resolveExternalPromptEntries === nw.resolveExternalPromptEntries && pw.prepareExternalPromptFiles === nw.prepareExternalPromptFiles && pw.promptAssetLimit === nw.promptAssetLimit && pw.projectDirectorySourceAggregator === nw.projectDirectorySourceAggregator && pw.referenceSourceAggregator === nw.referenceSourceAggregator && pw.resolveReferenceContentErrorAction === nw.resolveReferenceContentErrorAction && 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.agentStatusController === nr.agentStatusController && pc.capabilityMenuState === nc.capabilityMenuState && pc.capabilityControlsReadOnly === nc.capabilityControlsReadOnly && 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.targetConnectionSource === nc.targetConnectionSource && 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 && pa.onConversationRailLayoutChange === na.onConversationRailLayoutChange && ps.providerRailEmpty === ns.providerRailEmpty && ps.providerUnavailableState === ns.providerUnavailableState && ps.sidebarFooter === ns.sidebarFooter;
43168
43136
  }
43169
43137
 
43170
43138
  // agent-gui/agentGuiNode/AgentGUIMentionServiceBoundary.tsx
@@ -43211,7 +43179,7 @@ function composeAgentGUIMentionService(input) {
43211
43179
  }
43212
43180
 
43213
43181
  // agent-gui/agentGuiNode/AgentGUIMentionServiceBoundary.tsx
43214
- import { jsx as jsx88 } from "react/jsx-runtime";
43182
+ import { jsx as jsx89 } from "react/jsx-runtime";
43215
43183
  function AgentGUIMentionServiceBoundary({
43216
43184
  children,
43217
43185
  service
@@ -43227,7 +43195,7 @@ function AgentGUIMentionServiceBoundary({
43227
43195
  if (!effectiveService || effectiveService === inheritedService) {
43228
43196
  return children;
43229
43197
  }
43230
- return /* @__PURE__ */ jsx88(RichTextMentionServiceProvider, { service: effectiveService, children });
43198
+ return /* @__PURE__ */ jsx89(RichTextMentionServiceProvider, { service: effectiveService, children });
43231
43199
  }
43232
43200
 
43233
43201
  // agent-gui/agentGuiNode/AgentGUINode.labels.ts
@@ -44387,7 +44355,7 @@ function useAgentGUIWorkspaceFileReferenceCopy(t) {
44387
44355
  }
44388
44356
 
44389
44357
  // agent-gui/agentGuiNode/AgentGUINode.tsx
44390
- import { jsx as jsx89, jsxs as jsxs65 } from "react/jsx-runtime";
44358
+ import { jsx as jsx90, jsxs as jsxs66 } from "react/jsx-runtime";
44391
44359
  var DISABLED_REFERENCE_PROVENANCE_CATALOG = {
44392
44360
  enabledDimensions: [],
44393
44361
  agentOptions: [],
@@ -44415,6 +44383,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44415
44383
  promptAssetLimit = null,
44416
44384
  projectDirectorySourceAggregator = null,
44417
44385
  referenceSourceAggregator = null,
44386
+ resolveReferenceContentErrorAction: resolveWorkspaceReferenceContentErrorAction,
44418
44387
  resolveReferenceEntryIconUrl: resolveWorkspaceReferenceEntryIconUrl,
44419
44388
  resolveMentionReferenceTarget = null,
44420
44389
  resolveReferenceInitialTarget: resolveWorkspaceReferenceInitialTarget = null,
@@ -44701,7 +44670,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44701
44670
  t,
44702
44671
  viewModel
44703
44672
  });
44704
- return /* @__PURE__ */ jsx89(AgentGUIMentionServiceBoundary, { service: mentionService, children: /* @__PURE__ */ jsx89(
44673
+ return /* @__PURE__ */ jsx90(AgentGUIMentionServiceBoundary, { service: mentionService, children: /* @__PURE__ */ jsx90(
44705
44674
  WorkspaceNodeWindow,
44706
44675
  {
44707
44676
  nodeId,
@@ -44717,8 +44686,8 @@ var AgentGUINode = memo15(function AgentGUINode2({
44717
44686
  className: "size-full bg-transparent",
44718
44687
  bodyClassName: `${AgentGUINode_styles_default.shell} nodrag size-full min-h-0 min-w-0 !bg-transparent p-0`,
44719
44688
  hideHeader: embedded,
44720
- titleAccessory: /* @__PURE__ */ jsxs65("span", { className: "inline-flex flex-none items-center gap-1", children: [
44721
- /* @__PURE__ */ jsx89(
44689
+ titleAccessory: /* @__PURE__ */ jsxs66("span", { className: "inline-flex flex-none items-center gap-1", children: [
44690
+ /* @__PURE__ */ jsx90(
44722
44691
  AgentProbeInfoPopover,
44723
44692
  {
44724
44693
  lines: agentProbeLines,
@@ -44728,7 +44697,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44728
44697
  onClose: handleAgentProbeInfoClose
44729
44698
  }
44730
44699
  ),
44731
- /* @__PURE__ */ jsx89(
44700
+ /* @__PURE__ */ jsx90(
44732
44701
  CanvasNodeGhostIconButton,
44733
44702
  {
44734
44703
  "aria-label": isConversationRailCollapsed ? t("agentHost.agentGui.expandConversationRail") : t("agentHost.agentGui.collapseConversationRail"),
@@ -44740,7 +44709,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44740
44709
  event.stopPropagation();
44741
44710
  handleConversationRailToggle();
44742
44711
  },
44743
- children: /* @__PURE__ */ jsx89(
44712
+ children: /* @__PURE__ */ jsx90(
44744
44713
  CanvasNodePanelLinedIcon,
44745
44714
  {
44746
44715
  width: 18,
@@ -44764,7 +44733,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44764
44733
  renderedWidth,
44765
44734
  railAutoCollapseWidthPx
44766
44735
  );
44767
- return /* @__PURE__ */ jsx89(
44736
+ return /* @__PURE__ */ jsx90(
44768
44737
  AgentGUINodeView,
44769
44738
  {
44770
44739
  viewModel,
@@ -44832,6 +44801,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44832
44801
  selectProjectDirectory,
44833
44802
  projectDirectorySourceAggregator,
44834
44803
  referenceSourceAggregator,
44804
+ resolveReferenceContentErrorAction: resolveWorkspaceReferenceContentErrorAction,
44835
44805
  resolveWorkspaceReferenceEntryIconUrl,
44836
44806
  resolveMentionReferenceTarget,
44837
44807
  resolveWorkspaceReferenceInitialTarget,
@@ -44846,7 +44816,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44846
44816
  }, areAgentGUINodePropsEqual);
44847
44817
 
44848
44818
  // AgentGUI.tsx
44849
- import { jsx as jsx90 } from "react/jsx-runtime";
44819
+ import { jsx as jsx91 } from "react/jsx-runtime";
44850
44820
  var AgentGUI = memo16(function AgentGUI2({
44851
44821
  agentActivityRuntime,
44852
44822
  agentHostApi,
@@ -44918,21 +44888,21 @@ var AgentGUI = memo16(function AgentGUI2({
44918
44888
  hostCapabilities: nodeHostCapabilities,
44919
44889
  renderSlots: nodeRenderSlots
44920
44890
  };
44921
- const content = /* @__PURE__ */ jsx90(AgentGuiI18nProvider, { runtime: i18n, locale, children: /* @__PURE__ */ jsx90(TuttiModePlanReviewRuntimeProvider, { runtime: tuttiModePlanReviewRuntime, children: /* @__PURE__ */ jsx90(
44891
+ const content = /* @__PURE__ */ jsx91(AgentGuiI18nProvider, { runtime: i18n, locale, children: /* @__PURE__ */ jsx91(TuttiModePlanReviewRuntimeProvider, { runtime: tuttiModePlanReviewRuntime, children: /* @__PURE__ */ jsx91(
44922
44892
  AgentActivityHostProvider,
44923
44893
  {
44924
44894
  agentActivityRuntime,
44925
44895
  agentHostApi,
44926
- children: /* @__PURE__ */ jsx90(
44896
+ children: /* @__PURE__ */ jsx91(
44927
44897
  AgentCommercePresentationProvider,
44928
44898
  {
44929
44899
  value: props.hostCapabilities?.commercePresentation,
44930
- children: /* @__PURE__ */ jsx90(AgentGUINode, { ...nodeProps })
44900
+ children: /* @__PURE__ */ jsx91(AgentGUINode, { ...nodeProps })
44931
44901
  }
44932
44902
  )
44933
44903
  }
44934
44904
  ) }) });
44935
- return props.frame.previewMode ? content : /* @__PURE__ */ jsx90(TooltipProvider8, { delayDuration: 120, skipDelayDuration: 0, children: content });
44905
+ return props.frame.previewMode ? content : /* @__PURE__ */ jsx91(TooltipProvider8, { delayDuration: 120, skipDelayDuration: 0, children: content });
44936
44906
  });
44937
44907
 
44938
44908
  export {
@@ -44952,4 +44922,4 @@ export {
44952
44922
  AgentHandoffMenu,
44953
44923
  AgentGUI
44954
44924
  };
44955
- //# sourceMappingURL=chunk-RTKIOE4R.js.map
44925
+ //# sourceMappingURL=chunk-AT4DII34.js.map