@tutti-os/agent-gui 0.0.210 → 0.0.212

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 (69) hide show
  1. package/README.md +3 -1
  2. package/dist/{AgentRichTextReadonly-DFWY2WYO.js → AgentRichTextReadonly-WWU4ZF7W.js} +5 -5
  3. package/dist/agent-conversation/index.d.ts +1 -1
  4. package/dist/agent-conversation/index.js +8 -8
  5. package/dist/agent-conversation/interactive-answer.d.ts +34 -0
  6. package/dist/agent-conversation/interactive-answer.js +11 -0
  7. package/dist/agent-conversation/interactive-answer.js.map +1 -0
  8. package/dist/agent-gui.d.ts +7 -4
  9. package/dist/agent-gui.js +16 -15
  10. package/dist/agent-message-center/index.js +8 -7
  11. package/dist/agent-message-center/index.js.map +1 -1
  12. package/dist/{agentFileMentionContracts-B0yQizXB.d.ts → agentFileMentionContracts-BeBex-Sf.d.ts} +5 -0
  13. package/dist/{agentGuiNodeTypes-DTeerTzS.d.ts → agentGuiNodeTypes-BMcpfKTn.d.ts} +5 -1
  14. package/dist/app/renderer/agentactivity.css +50 -0
  15. package/dist/app/renderer/assets/icons/agents/tutti-mode.png +0 -0
  16. package/dist/app/renderer/assets/icons/tutti-intensity-handle-balance.png +0 -0
  17. package/dist/app/renderer/assets/icons/tutti-intensity-handle-cost.png +0 -0
  18. package/dist/app/renderer/assets/icons/tutti-intensity-handle-powerful.png +0 -0
  19. package/dist/app/renderer/assets/icons/tutti-mode-lined.svg +3 -0
  20. package/dist/{chunk-6LXC5BME.js → chunk-4DAJ5SVX.js} +11 -5
  21. package/dist/chunk-4DAJ5SVX.js.map +1 -0
  22. package/dist/{chunk-Y6M27YYS.js → chunk-4IJYTGS2.js} +670 -619
  23. package/dist/chunk-4IJYTGS2.js.map +1 -0
  24. package/dist/{chunk-DKRX5IZS.js → chunk-5UOJCDLE.js} +8 -8
  25. package/dist/{chunk-M2VRYG7U.js → chunk-62LWOH3P.js} +13 -17
  26. package/dist/chunk-62LWOH3P.js.map +1 -0
  27. package/dist/{chunk-HXAOFFZJ.js → chunk-7LSLB7CN.js} +2 -2
  28. package/dist/{chunk-CKUR2VKA.js → chunk-BGNYUYLP.js} +2 -2
  29. package/dist/chunk-FMTWYOHM.js +25 -0
  30. package/dist/chunk-FMTWYOHM.js.map +1 -0
  31. package/dist/{chunk-JRYR2EA5.js → chunk-FRSV66P3.js} +171 -36
  32. package/dist/chunk-FRSV66P3.js.map +1 -0
  33. package/dist/{chunk-THRBLO2B.js → chunk-GXXPUEX6.js} +2 -2
  34. package/dist/{chunk-FWR5BZYR.js → chunk-JUL7J4VN.js} +2 -2
  35. package/dist/{chunk-RAO2PI3T.js → chunk-JVVLKTLR.js} +18 -32
  36. package/dist/chunk-JVVLKTLR.js.map +1 -0
  37. package/dist/{chunk-5RZVXSQQ.js → chunk-POU5WZNH.js} +7 -2
  38. package/dist/chunk-POU5WZNH.js.map +1 -0
  39. package/dist/{chunk-CCFYCSBK.js → chunk-RNBZBBI7.js} +13 -13
  40. package/dist/{chunk-VGPFDVSK.js → chunk-WSIGQG7C.js} +3 -3
  41. package/dist/{chunk-V2MU37VN.js → chunk-YJ27WHM3.js} +2 -2
  42. package/dist/context-mention-palette/index.d.ts +1 -1
  43. package/dist/context-mention-palette/index.js +8 -8
  44. package/dist/i18n/index.d.ts +12 -16
  45. package/dist/i18n/index.js +2 -2
  46. package/dist/index.d.ts +27 -21
  47. package/dist/index.js +17 -16
  48. package/dist/index.js.map +1 -1
  49. package/dist/mention-search.d.ts +2 -2
  50. package/dist/mention-search.js +6 -6
  51. package/dist/workbench/contribution.js +3 -3
  52. package/dist/workbench/index.js +6 -6
  53. package/dist/workbench/sessionTitle.js +2 -2
  54. package/package.json +21 -14
  55. package/dist/chunk-5RZVXSQQ.js.map +0 -1
  56. package/dist/chunk-6LXC5BME.js.map +0 -1
  57. package/dist/chunk-JRYR2EA5.js.map +0 -1
  58. package/dist/chunk-M2VRYG7U.js.map +0 -1
  59. package/dist/chunk-RAO2PI3T.js.map +0 -1
  60. package/dist/chunk-Y6M27YYS.js.map +0 -1
  61. /package/dist/{AgentRichTextReadonly-DFWY2WYO.js.map → AgentRichTextReadonly-WWU4ZF7W.js.map} +0 -0
  62. /package/dist/{chunk-DKRX5IZS.js.map → chunk-5UOJCDLE.js.map} +0 -0
  63. /package/dist/{chunk-HXAOFFZJ.js.map → chunk-7LSLB7CN.js.map} +0 -0
  64. /package/dist/{chunk-CKUR2VKA.js.map → chunk-BGNYUYLP.js.map} +0 -0
  65. /package/dist/{chunk-THRBLO2B.js.map → chunk-GXXPUEX6.js.map} +0 -0
  66. /package/dist/{chunk-FWR5BZYR.js.map → chunk-JUL7J4VN.js.map} +0 -0
  67. /package/dist/{chunk-CCFYCSBK.js.map → chunk-RNBZBBI7.js.map} +0 -0
  68. /package/dist/{chunk-VGPFDVSK.js.map → chunk-WSIGQG7C.js.map} +0 -0
  69. /package/dist/{chunk-V2MU37VN.js.map → chunk-YJ27WHM3.js.map} +0 -0
@@ -15,10 +15,7 @@ import {
15
15
  resolveAgentGuiSessionProviderFlatIconUrl,
16
16
  resolveNextAgentGUIConversationRailWidthPx,
17
17
  shouldAutoCollapseAgentGUIConversationRail
18
- } from "./chunk-DKRX5IZS.js";
19
- import {
20
- resolveAgentGuiWorkbenchProviderLabel
21
- } from "./chunk-MGSRWYRN.js";
18
+ } from "./chunk-5UOJCDLE.js";
22
19
  import {
23
20
  AGENT_PROVIDERS,
24
21
  AGENT_PROVIDER_LABEL,
@@ -34,7 +31,10 @@ import {
34
31
  resolveAgentGUIFirstUserMessageDisplayPrompt,
35
32
  resolveAgentGUIProviderDisplayLabel,
36
33
  resolveAgentGUIProviderIdentity
37
- } from "./chunk-V2MU37VN.js";
34
+ } from "./chunk-YJ27WHM3.js";
35
+ import {
36
+ resolveAgentGuiWorkbenchProviderLabel
37
+ } from "./chunk-MGSRWYRN.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-RNBZBBI7.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-7LSLB7CN.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-4DAJ5SVX.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-FRSV66P3.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-POU5WZNH.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-JVVLKTLR.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-WSIGQG7C.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-JUL7J4VN.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-GXXPUEX6.js";
177
177
  import {
178
178
  isBetaAgentProvider,
179
179
  normalizeManagedAgentProvider
@@ -4777,11 +4777,8 @@ function useAgentConversationMessagePaging(input) {
4777
4777
  if (!normalized) return;
4778
4778
  const ref = current.sessionViewRef(normalized);
4779
4779
  const view = current.view.get(ref);
4780
- const canonicalOldestVersion = current.projection.minVersion(
4781
- current.getCanonicalMessages(normalized)
4782
- );
4783
- const oldestLoadedVersion = view?.oldestLoadedVersion ?? canonicalOldestVersion;
4784
- const hasOlderMessages = view?.hasOlderMessages === true || view?.oldestLoadedVersion == null && canonicalOldestVersion !== null && canonicalOldestVersion > 1;
4780
+ const oldestLoadedVersion = view?.oldestLoadedVersion ?? current.projection.minVersion(current.getCanonicalMessages(normalized));
4781
+ const hasOlderMessages = view?.hasOlderMessages === true;
4785
4782
  if (!hasOlderMessages || view?.isLoadingOlderMessages === true || oldestLoadedVersion === null || current.getActiveSessionId() !== normalized) {
4786
4783
  current.diagnostics.page({
4787
4784
  agentSessionId: normalized,
@@ -4871,7 +4868,8 @@ function useAgentConversationMessagePaging(input) {
4871
4868
  return;
4872
4869
  }
4873
4870
  current.view.mergeOlder(ref, page.messages, {
4874
- hasOlderMessages: page.hasMore && page.messages.length > 0
4871
+ hasOlderMessages: page.hasMore && page.messages.length > 0,
4872
+ oldestLoadedVersion: current.projection.minVersion(page.messages) ?? oldestLoadedVersion
4875
4873
  });
4876
4874
  current.view.setOlderMessagesLoading(ref, false);
4877
4875
  } catch (error) {
@@ -7485,6 +7483,16 @@ function useAgentGUIComposerOptionsSync(input) {
7485
7483
  settings: requestSettings
7486
7484
  })
7487
7485
  ).then(() => {
7486
+ const loadedOptions = composerOptionsForTarget({
7487
+ snapshot: input.agentActivityRuntime.getSnapshot(input.workspaceId),
7488
+ target: targetData
7489
+ });
7490
+ if (loadedOptions) {
7491
+ input.onComposerDefaultsAuthorityReloadedRef.current.reconcileHomeDefaults(
7492
+ targetData,
7493
+ loadedOptions
7494
+ );
7495
+ }
7488
7496
  if (options?.reconcileAcknowledgedDefaults) {
7489
7497
  input.onComposerDefaultsAuthorityReloadedRef.current.reloaded(
7490
7498
  authorityRead.receipt
@@ -7686,6 +7694,8 @@ function useAgentGUIControllerRefs(input) {
7686
7694
  receipt: null,
7687
7695
  settings
7688
7696
  }),
7697
+ reconcileHomeDefaults: () => {
7698
+ },
7689
7699
  reloaded: () => {
7690
7700
  }
7691
7701
  });
@@ -7945,6 +7955,51 @@ function useAgentGUIComposerSettingsActions(input) {
7945
7955
  );
7946
7956
  onComposerDefaultsAuthorityReloadedRef.current = {
7947
7957
  prepareRead: prepareComposerDefaultsAuthorityRead,
7958
+ reconcileHomeDefaults: (target, options) => {
7959
+ if (!isMountedRef.current || activeConversationIdRef.current !== null || !nodeDataMatchesComposerTarget(
7960
+ selectedComposerTargetDataRef.current.data,
7961
+ target
7962
+ )) {
7963
+ return;
7964
+ }
7965
+ const draftKey = nodeDefaultDraftKey(
7966
+ target.provider,
7967
+ target.agentTargetId
7968
+ );
7969
+ const currentDraft = draftSettingsBySessionIdRef.current[draftKey];
7970
+ if (!currentDraft) {
7971
+ return;
7972
+ }
7973
+ const reconciledDraft = enforceComposerModelBindingForHomeDefaults(
7974
+ sanitizeComposerSettingsForTarget({
7975
+ settings: currentDraft,
7976
+ target,
7977
+ options
7978
+ }),
7979
+ options
7980
+ );
7981
+ if (sameComposerSettings(currentDraft, reconciledDraft)) {
7982
+ return;
7983
+ }
7984
+ draftSettingsBySessionIdRef.current = {
7985
+ ...draftSettingsBySessionIdRef.current,
7986
+ [draftKey]: reconciledDraft
7987
+ };
7988
+ setDraftSettingsBySessionId((current) => ({
7989
+ ...current,
7990
+ [draftKey]: reconciledDraft
7991
+ }));
7992
+ onDataChangeRef.current(
7993
+ (current) => nodeDataFromComposerSettings(
7994
+ {
7995
+ ...current,
7996
+ provider: target.provider,
7997
+ agentTargetId: target.agentTargetId
7998
+ },
7999
+ reconciledDraft
8000
+ )
8001
+ );
8002
+ },
7948
8003
  reloaded: retireAcknowledgedDefaultsForRead
7949
8004
  };
7950
8005
  const updateComposerSettings = useCallback9(
@@ -10613,7 +10668,8 @@ function useAgentGUIViewModel(candidate) {
10613
10668
  candidate.readiness.activeConversationBusy,
10614
10669
  candidate.readiness.activeLiveState,
10615
10670
  candidate.readiness.providerReadinessGate,
10616
- candidate.readiness.sessionRuntimeBlocked
10671
+ candidate.readiness.sessionRuntimeBlocked,
10672
+ candidate.readiness.sessionRuntimeBlockedReason
10617
10673
  ]
10618
10674
  );
10619
10675
  const operations = useMemo8(
@@ -12367,7 +12423,8 @@ function useAgentGUISessionPresentation(input) {
12367
12423
  input.activeConversationId && input.activeLatestPendingSubmitTurnId
12368
12424
  );
12369
12425
  const activeSubmitBlocked = input.activeEngineAvailability === "blocked";
12370
- const sessionRuntimeBlocked = input.activeEngineRuntimeAvailability?.state === "blocked";
12426
+ const sessionRuntimeBlockedReason = input.activeEngineRuntimeAvailability?.state === "blocked" ? input.activeEngineRuntimeAvailability.reason : null;
12427
+ const sessionRuntimeBlocked = sessionRuntimeBlockedReason !== null;
12371
12428
  const targetConnection = useAgentGUITargetConnectionState({
12372
12429
  agentTargetId: input.targetConnectionAgentTargetId,
12373
12430
  source: input.targetConnectionSource
@@ -12543,6 +12600,7 @@ function useAgentGUISessionPresentation(input) {
12543
12600
  isRespondingApproval,
12544
12601
  pendingInteractivePrompt,
12545
12602
  sessionRuntimeBlocked,
12603
+ sessionRuntimeBlockedReason,
12546
12604
  targetConnectionBlocked: targetConnection.blocked,
12547
12605
  sessionChrome
12548
12606
  };
@@ -12749,6 +12807,7 @@ function useAgentGUIViewAssembly(input) {
12749
12807
  activationError: detail.activationError,
12750
12808
  activeConversationBusy: session.activeConversationBusy,
12751
12809
  sessionRuntimeBlocked: session.sessionRuntimeBlocked,
12810
+ sessionRuntimeBlockedReason: session.sessionRuntimeBlockedReason,
12752
12811
  targetConnectionBlocked: session.targetConnectionBlocked,
12753
12812
  providerReadinessGate
12754
12813
  },
@@ -13306,7 +13365,7 @@ function oldestVersion(messages) {
13306
13365
  }
13307
13366
 
13308
13367
  // contexts/workspace/presentation/renderer/agentSessions/useAgentSessionControllerState.ts
13309
- function useAgentSessionControllerState(activeRef, canonicalMessages = []) {
13368
+ function useAgentSessionControllerState(activeRef, canonicalMessages = [], canonicalWindow = null) {
13310
13369
  const transport = useAgentSessionTransport();
13311
13370
  const paging = useAgentSessionPagingState();
13312
13371
  const getAgentSessionView = useCallback24(
@@ -13346,17 +13405,18 @@ function useAgentSessionControllerState(activeRef, canonicalMessages = []) {
13346
13405
  void transport.entries;
13347
13406
  void paging.entries;
13348
13407
  const storedActiveView = getAgentSessionView(activeRef);
13349
- const canonicalOldestVersion = oldestVersion2(canonicalMessages);
13408
+ const canonicalOldestVersion = canonicalWindow?.oldestLoadedVersion ?? oldestVersion2(canonicalMessages);
13409
+ const storedBoundaryIsAtLeastAsComplete = storedActiveView !== null && storedActiveView.oldestLoadedVersion !== null && (canonicalOldestVersion === null || storedActiveView.oldestLoadedVersion <= canonicalOldestVersion);
13350
13410
  const activeSessionView = storedActiveView ? {
13351
13411
  ...storedActiveView,
13352
- hasOlderMessages: storedActiveView.hasOlderMessages || storedActiveView.oldestLoadedVersion === null && canonicalOldestVersion !== null && canonicalOldestVersion > 1,
13412
+ hasOlderMessages: storedBoundaryIsAtLeastAsComplete ? storedActiveView.hasOlderMessages : canonicalWindow?.hasOlderMessages ?? false,
13353
13413
  oldestLoadedVersion: storedActiveView.oldestLoadedVersion === null ? canonicalOldestVersion : canonicalOldestVersion === null ? storedActiveView.oldestLoadedVersion : Math.min(
13354
13414
  storedActiveView.oldestLoadedVersion,
13355
13415
  canonicalOldestVersion
13356
13416
  )
13357
13417
  } : canonicalOldestVersion === null ? null : {
13358
13418
  error: null,
13359
- hasOlderMessages: canonicalOldestVersion > 1,
13419
+ hasOlderMessages: canonicalWindow?.hasOlderMessages ?? false,
13360
13420
  isLoadingMessages: false,
13361
13421
  isLoadingOlderMessages: false,
13362
13422
  olderMessages: [],
@@ -13404,7 +13464,8 @@ function useAgentGUISessionDetailTransport(input) {
13404
13464
  );
13405
13465
  const state = useAgentSessionControllerState(
13406
13466
  sessionViewRef(activeConversationId),
13407
- activeConversationId ? agentActivitySnapshot.sessionMessagesById[activeConversationId] ?? [] : []
13467
+ activeConversationId ? agentActivitySnapshot.sessionMessagesById[activeConversationId] ?? [] : [],
13468
+ activeConversationId ? agentActivitySnapshot.sessionMessageWindowsById?.[activeConversationId] ?? null : null
13408
13469
  );
13409
13470
  const resolveSessionMessages = useCallback25(
13410
13471
  (agentSessionId) => {
@@ -13479,7 +13540,7 @@ function useAgentGUISessionDetailTransport(input) {
13479
13540
  runtime: agentActivityRuntime,
13480
13541
  sessionViewRef,
13481
13542
  view: {
13482
- get: state.getAgentSessionView,
13543
+ get: (ref) => ref.agentSessionId?.trim() === activeConversationIdRef.current ? state.activeSessionView : state.getAgentSessionView(ref),
13483
13544
  mergeOlder: state.mergeAgentSessionViewOlderMessages,
13484
13545
  setOlderMessagesLoading: state.setAgentSessionViewOlderMessagesLoading
13485
13546
  },
@@ -15050,6 +15111,7 @@ var styles = {
15050
15111
  composerFooterRight: "agent-gui-node__composer-footer-right",
15051
15112
  composerHero: "agent-gui-node__composer-hero",
15052
15113
  composerFloatingPrompt: "agent-gui-node__composer-floating-prompt",
15114
+ composerDisclosurePanel: "agent-gui-chrome__composer-disclosure-panel",
15053
15115
  composerFileDropOverlay: "agent-gui-node__composer-file-drop-overlay",
15054
15116
  composerFileDropOverlayActive: "agent-gui-node__composer-file-drop-overlay--active",
15055
15117
  composerFileDropOverlayCard: "agent-gui-node__composer-file-drop-overlay-card",
@@ -15400,19 +15462,28 @@ function AgentUsageMeter({
15400
15462
  }
15401
15463
 
15402
15464
  // agent-gui/agentGuiNode/AccountMembershipBadge.tsx
15403
- import { Crown } from "lucide-react";
15404
15465
  import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
15405
15466
  function AccountMembershipBadge({
15406
15467
  label,
15468
+ iconUrl = null,
15407
15469
  className = ""
15408
15470
  }) {
15409
15471
  return /* @__PURE__ */ jsxs6(
15410
15472
  "span",
15411
15473
  {
15412
- className: `inline-flex max-w-full items-center gap-1 rounded-[5px] bg-[color-mix(in_srgb,var(--tutti-purple)_18%,transparent)] px-1.5 py-0.5 text-[11px] font-semibold leading-3 text-[var(--tutti-purple)] ${className}`,
15474
+ className: `inline-flex max-w-full items-center gap-1 text-[12px] font-semibold leading-4 text-[var(--text-secondary)] ${className}`,
15413
15475
  "data-account-membership-badge": "true",
15414
15476
  children: [
15415
- /* @__PURE__ */ jsx13(Crown, { "aria-hidden": "true", size: 11, strokeWidth: 1.9 }),
15477
+ iconUrl ? /* @__PURE__ */ jsx13(
15478
+ "img",
15479
+ {
15480
+ alt: "",
15481
+ "aria-hidden": "true",
15482
+ draggable: false,
15483
+ src: iconUrl,
15484
+ className: "size-3.5 shrink-0 object-contain"
15485
+ }
15486
+ ) : null,
15416
15487
  /* @__PURE__ */ jsx13("span", { className: "min-w-0 truncate", children: label })
15417
15488
  ]
15418
15489
  }
@@ -15461,7 +15532,7 @@ import { useCallback as useCallback31 } from "react";
15461
15532
  import {
15462
15533
  Coins,
15463
15534
  Copy,
15464
- Crown as Crown2,
15535
+ Crown,
15465
15536
  ExternalLink,
15466
15537
  LogIn,
15467
15538
  LogOut,
@@ -15512,8 +15583,8 @@ function AgentGUIAccountMenu({
15512
15583
  "data-testid": testId,
15513
15584
  onOpenAutoFocus: (event) => event.preventDefault(),
15514
15585
  children: /* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 flex-col", children: [
15515
- /* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 items-center gap-2 px-2 py-2", children: [
15516
- /* @__PURE__ */ jsx15(AgentGUIAccountAvatar, { state, label: labels.copyUserId, children: /* @__PURE__ */ jsx15("span", { className: "grid size-8 shrink-0 place-items-center overflow-hidden rounded-full bg-[var(--background-fronted)] text-[13px] font-semibold text-[var(--text-primary)]", children: state.user?.avatar ? /* @__PURE__ */ jsx15(
15586
+ /* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 items-center gap-2 px-2 pt-2", children: [
15587
+ /* @__PURE__ */ jsx15(AgentGUIAccountAvatar, { state, label: labels.copyUserId, children: /* @__PURE__ */ jsx15("span", { className: "grid size-9 shrink-0 place-items-center overflow-hidden rounded-full bg-[var(--background-fronted)] text-[13px] font-semibold text-[var(--text-primary)]", children: state.user?.avatar ? /* @__PURE__ */ jsx15(
15517
15588
  "img",
15518
15589
  {
15519
15590
  alt: "",
@@ -15527,12 +15598,19 @@ function AgentGUIAccountMenu({
15527
15598
  AccountMembershipBadge,
15528
15599
  {
15529
15600
  className: "mt-1",
15601
+ iconUrl: state.membershipIconUrl ?? null,
15530
15602
  label: membershipLabel
15531
15603
  }
15532
15604
  )
15533
15605
  ] })
15534
15606
  ] }),
15535
- /* @__PURE__ */ jsx15("span", { "aria-hidden": "true", className: "mx-2 h-px bg-[var(--border-1)]" }),
15607
+ /* @__PURE__ */ jsx15(
15608
+ "span",
15609
+ {
15610
+ "aria-hidden": "true",
15611
+ className: "mx-2 mb-1 mt-3 h-px bg-[var(--border-1)]"
15612
+ }
15613
+ ),
15536
15614
  state.user ? /* @__PURE__ */ jsxs8(Fragment2, { children: [
15537
15615
  /* @__PURE__ */ jsxs8(
15538
15616
  "button",
@@ -15542,7 +15620,7 @@ function AgentGUIAccountMenu({
15542
15620
  disabled: !state.links.planUrl.trim(),
15543
15621
  onClick: () => openExternal(state.links.planUrl),
15544
15622
  children: [
15545
- /* @__PURE__ */ jsx15(Crown2, { "aria-hidden": "true", size: 15, strokeWidth: 1.8 }),
15623
+ /* @__PURE__ */ jsx15(Crown, { "aria-hidden": "true", size: 15, strokeWidth: 1.8 }),
15546
15624
  /* @__PURE__ */ jsx15("span", { className: "min-w-0 flex-1 truncate text-left", children: labels.member }),
15547
15625
  /* @__PURE__ */ jsx15("span", { className: "shrink-0 text-[12px] text-[var(--tutti-purple)]", children: membershipActionLabel })
15548
15626
  ]
@@ -15807,6 +15885,7 @@ var AgentGUIAccountRailMenu = memo(function AgentGUIAccountRailMenu2({
15807
15885
  AccountMembershipBadge,
15808
15886
  {
15809
15887
  className: "mt-0.5",
15888
+ iconUrl: accountMenuState.membershipIconUrl ?? null,
15810
15889
  label: membershipLabel
15811
15890
  }
15812
15891
  )
@@ -15992,7 +16071,7 @@ import {
15992
16071
  useCallback as useCallback51,
15993
16072
  useMemo as useMemo37,
15994
16073
  useRef as useRef45,
15995
- useState as useState33
16074
+ useState as useState32
15996
16075
  } from "react";
15997
16076
  import { Tooltip as Tooltip9, TooltipContent as TooltipContent9, TooltipTrigger as TooltipTrigger9 } from "@tutti-os/ui-system";
15998
16077
 
@@ -16215,14 +16294,12 @@ function changeAgentGUIProviderManagerVisibility(input) {
16215
16294
  }
16216
16295
 
16217
16296
  // 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";
16297
+ import { memo as memo3, useMemo as useMemo36 } from "react";
16220
16298
  import {
16221
16299
  Select as Select5,
16222
16300
  SelectContent as SelectContent5,
16223
16301
  SelectItem as SelectItem5,
16224
16302
  SelectTrigger as SelectTrigger5,
16225
- Switch,
16226
16303
  cn as cn7
16227
16304
  } from "@tutti-os/ui-system";
16228
16305
 
@@ -17733,7 +17810,9 @@ var styles2 = {
17733
17810
  composerDisclosureChevron: "agent-gui-chrome__composer-disclosure-chevron",
17734
17811
  composerDisclosureChevronExpanded: "agent-gui-chrome__composer-disclosure-chevron--expanded",
17735
17812
  composerDisclosurePanel: "agent-gui-chrome__composer-disclosure-panel",
17736
- composerDisclosureTrigger: "agent-gui-chrome__composer-disclosure-trigger"
17813
+ composerDisclosureTrigger: "agent-gui-chrome__composer-disclosure-trigger",
17814
+ tuttiWorkflowBanner: "agent-gui-chrome__tutti-workflow-banner",
17815
+ tuttiWorkflowPanel: "agent-gui-chrome__tutti-workflow-panel"
17737
17816
  };
17738
17817
  var AgentGUIChrome_styles_default = styles2;
17739
17818
 
@@ -17925,7 +18004,7 @@ function AgentSessionChrome({
17925
18004
  }
17926
18005
 
17927
18006
  // agent-gui/agentGuiNode/AgentComposer.tsx
17928
- import { useCallback as useCallback48, useEffect as useEffect28, useRef as useRef42, useState as useState29 } from "react";
18007
+ import { useCallback as useCallback48, useEffect as useEffect28, useRef as useRef42, useState as useState28 } from "react";
17929
18008
  import { repairMentionPaletteHighlight } from "@tutti-os/ui-rich-text/at-panel";
17930
18009
 
17931
18010
  // agent-gui/agentGuiNode/AgentSlashStatusPanel.tsx
@@ -19601,7 +19680,7 @@ function AgentComposerMaskIcon({
19601
19680
  "span",
19602
19681
  {
19603
19682
  "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)]",
19683
+ 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
19684
  "data-agent-reference-add-icon": marker === "reference-add" ? "true" : void 0,
19606
19685
  style: {
19607
19686
  WebkitMaskImage: `url("${iconUrl}")`,
@@ -21523,7 +21602,7 @@ function useComposerPresentation(input) {
21523
21602
  // agent-gui/agentGuiNode/composer/AgentComposerView.tsx
21524
21603
  import { createPortal as createPortal4 } from "react-dom";
21525
21604
  import {
21526
- Popover as Popover6,
21605
+ Popover as Popover5,
21527
21606
  PopoverAnchor as PopoverAnchor2,
21528
21607
  Tooltip as Tooltip8,
21529
21608
  TooltipContent as TooltipContent8,
@@ -26095,7 +26174,7 @@ function ComposerDraftAttachments({
26095
26174
  }
26096
26175
 
26097
26176
  // agent-gui/agentGuiNode/composer/ComposerFooter.tsx
26098
- import { ListChecks as ListChecks2, Sparkles, Target as Target2, X as X5 } from "lucide-react";
26177
+ import { ListChecks as ListChecks2, Target as Target2, X as X5 } from "lucide-react";
26099
26178
  import {
26100
26179
  Select as Select3,
26101
26180
  SelectContent as SelectContent3,
@@ -26300,200 +26379,69 @@ function AgentHandoffMenu({
26300
26379
  );
26301
26380
  }
26302
26381
 
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";
26382
+ // agent-gui/agentGuiNode/composer/ComposerTuttiModeChip.tsx
26383
+ import { useId } from "react";
26384
+ import { Switch } from "@tutti-os/ui-system";
26313
26385
 
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
- }
26386
+ // app/renderer/assets/icons/tutti-mode-lined.svg
26387
+ 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
26388
 
26326
- // agent-gui/agentGuiNode/composer/TuttiBudgetPopover.tsx
26389
+ // agent-gui/agentGuiNode/composer/ComposerTuttiModeChip.tsx
26327
26390
  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
26391
+ function ComposerTuttiModeChip({
26392
+ active,
26393
+ updating,
26394
+ label,
26395
+ description,
26396
+ tuttiModeSupported,
26397
+ onTuttiModeChange
26347
26398
  }) {
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];
26399
+ const switchId = useId();
26400
+ if (!onTuttiModeChange || !tuttiModeSupported) {
26401
+ return null;
26402
+ }
26367
26403
  return /* @__PURE__ */ jsxs29(
26368
- Popover4,
26404
+ "label",
26369
26405
  {
26370
- open,
26371
- onOpenChange: (nextOpen) => {
26372
- if (nextOpen) {
26373
- setDraftIntensity(intensity);
26374
- }
26375
- setOpen(nextOpen);
26376
- },
26406
+ htmlFor: switchId,
26407
+ title: description ?? label,
26408
+ "data-testid": "agent-gui-composer-tutti-mode-toggle",
26409
+ "data-agent-tutti-mode-active": active ? "true" : void 0,
26410
+ className: cn(
26411
+ AgentGUINode_styles_default.composerMenuTrigger,
26412
+ "group w-auto !gap-1.5",
26413
+ updating ? "cursor-wait opacity-70" : "cursor-pointer"
26414
+ ),
26377
26415
  children: [
26378
- /* @__PURE__ */ jsx39(PopoverTrigger3, { asChild: true, children }),
26379
- /* @__PURE__ */ jsxs29(
26380
- PopoverContent4,
26416
+ /* @__PURE__ */ jsx39(
26417
+ "span",
26381
26418
  {
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
- ]
26419
+ "aria-hidden": true,
26420
+ className: "inline-block size-4 shrink-0 bg-current transition-colors",
26421
+ style: {
26422
+ WebkitMaskImage: `url("${tutti_mode_lined_default}")`,
26423
+ WebkitMaskPosition: "center",
26424
+ WebkitMaskRepeat: "no-repeat",
26425
+ WebkitMaskSize: "contain",
26426
+ maskImage: `url("${tutti_mode_lined_default}")`,
26427
+ maskPosition: "center",
26428
+ maskRepeat: "no-repeat",
26429
+ maskSize: "contain"
26430
+ }
26431
+ }
26432
+ ),
26433
+ /* @__PURE__ */ jsx39("span", { className: "min-w-0 truncate", children: label }),
26434
+ /* @__PURE__ */ jsx39(
26435
+ Switch,
26436
+ {
26437
+ id: switchId,
26438
+ size: "sm",
26439
+ checked: active,
26440
+ disabled: updating,
26441
+ "aria-label": label,
26442
+ className: "ml-0.5",
26443
+ "data-testid": "agent-gui-composer-tutti-mode-toggle-switch",
26444
+ onCheckedChange: (checked) => onTuttiModeChange(checked)
26497
26445
  }
26498
26446
  )
26499
26447
  ]
@@ -26522,7 +26470,8 @@ function ComposerFooter({
26522
26470
  isPlanModeActive,
26523
26471
  isTuttiModeActive,
26524
26472
  isTuttiModeUpdating,
26525
- tuttiModeOrchestrationIntensity,
26473
+ tuttiModeSupported,
26474
+ onTuttiModeChange,
26526
26475
  composerActionButton,
26527
26476
  quickPromptControl,
26528
26477
  showHandoffSelect,
@@ -26546,9 +26495,7 @@ function ComposerFooter({
26546
26495
  onSubmit,
26547
26496
  onClearGoalMode: clearGoalModeBadge,
26548
26497
  draftPrompt: _draftPrompt,
26549
- onClearPlanMode,
26550
- onClearTuttiMode,
26551
- onTuttiModeOrchestrationIntensityChange
26498
+ onClearPlanMode
26552
26499
  }) {
26553
26500
  const showSettingsLoadingPlaceholders = composerSettings.isSettingsLoading;
26554
26501
  return /* @__PURE__ */ jsx40(Fragment13, { children: /* @__PURE__ */ jsxs30("div", { className: AgentGUINode_styles_default.composerFooter, children: [
@@ -26634,7 +26581,7 @@ function ComposerFooter({
26634
26581
  "span",
26635
26582
  {
26636
26583
  "aria-hidden": true,
26637
- className: "inline-block size-3.5 bg-current transition-colors",
26584
+ className: "inline-block size-4 bg-current transition-colors",
26638
26585
  style: {
26639
26586
  WebkitMaskImage: `url("${lined_default}")`,
26640
26587
  WebkitMaskPosition: "center",
@@ -26652,6 +26599,17 @@ function ComposerFooter({
26652
26599
  /* @__PURE__ */ jsx40(TooltipContent5, { side: "top", children: labels.mentionPalette })
26653
26600
  ] }) })
26654
26601
  ] }),
26602
+ /* @__PURE__ */ jsx40(
26603
+ ComposerTuttiModeChip,
26604
+ {
26605
+ active: isTuttiModeActive,
26606
+ updating: isTuttiModeUpdating,
26607
+ label: labels.tuttiModeLabel,
26608
+ description: labels.tuttiModeDescription,
26609
+ tuttiModeSupported,
26610
+ onTuttiModeChange
26611
+ }
26612
+ ),
26655
26613
  showHandoffSelect ? /* @__PURE__ */ jsx40(
26656
26614
  AgentHandoffMenu,
26657
26615
  {
@@ -26771,70 +26729,6 @@ function ComposerFooter({
26771
26729
  ] })
26772
26730
  }
26773
26731
  ) : 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
26732
  isGoalModeActive ? /* @__PURE__ */ jsx40(
26839
26733
  "button",
26840
26734
  {
@@ -26983,15 +26877,15 @@ function RemovableBadgeIcon({ icon }) {
26983
26877
  }
26984
26878
 
26985
26879
  // agent-gui/agentGuiNode/composer/quickPrompts/AgentQuickPromptPopover.tsx
26986
- import { useId, useRef as useRef38, useState as useState25 } from "react";
26880
+ import { useId as useId2, useRef as useRef38, useState as useState24 } from "react";
26987
26881
  import {
26988
- Button as Button7,
26882
+ Button as Button6,
26989
26883
  ConfirmationDialog as ConfirmationDialog2,
26990
26884
  DialogFooter as DialogFooter2,
26991
26885
  Input as Input2,
26992
- Popover as Popover5,
26993
- PopoverContent as PopoverContent5,
26994
- PopoverTrigger as PopoverTrigger4,
26886
+ Popover as Popover4,
26887
+ PopoverContent as PopoverContent4,
26888
+ PopoverTrigger as PopoverTrigger3,
26995
26889
  ScrollArea,
26996
26890
  Spinner as Spinner6,
26997
26891
  Tooltip as Tooltip7,
@@ -27010,9 +26904,9 @@ import {
27010
26904
  } from "@tutti-os/ui-system/icons";
27011
26905
 
27012
26906
  // agent-gui/agentGuiNode/composer/quickPrompts/AgentQuickPromptEditorDialog.tsx
27013
- import { useRef as useRef35, useState as useState24 } from "react";
26907
+ import { useRef as useRef35, useState as useState23 } from "react";
27014
26908
  import {
27015
- Button as Button5,
26909
+ Button as Button4,
27016
26910
  Dialog,
27017
26911
  DialogContent,
27018
26912
  DialogDescription,
@@ -27031,10 +26925,10 @@ function AgentQuickPromptEditorDialog({
27031
26925
  }) {
27032
26926
  const { labels } = controller;
27033
26927
  const source = controller.mode === "edit" ? controller.selectedPrompt : null;
27034
- const [draft, setDraft] = useState24(
26928
+ const [draft, setDraft] = useState23(
27035
26929
  () => controller.initialDraft ?? promptDraft(source)
27036
26930
  );
27037
- const [validationError, setValidationError] = useState24(null);
26931
+ const [validationError, setValidationError] = useState23(null);
27038
26932
  const cancelRequestedOnPointerDownRef = useRef35(false);
27039
26933
  const submit = async () => {
27040
26934
  const error = validateDraft(draft, labels);
@@ -27124,7 +27018,7 @@ function AgentQuickPromptEditorDialog({
27124
27018
  validationError || mutationError ? /* @__PURE__ */ jsx41("p", { className: "text-[12px] text-[var(--state-danger)]", role: "alert", children: validationError ?? mutationError }) : null,
27125
27019
  /* @__PURE__ */ jsxs31(DialogFooter, { children: [
27126
27020
  /* @__PURE__ */ jsx41(
27127
- Button5,
27021
+ Button4,
27128
27022
  {
27129
27023
  disabled: controller.isSaving,
27130
27024
  size: "dialog",
@@ -27146,7 +27040,7 @@ function AgentQuickPromptEditorDialog({
27146
27040
  children: labels.cancel
27147
27041
  }
27148
27042
  ),
27149
- /* @__PURE__ */ jsxs31(Button5, { disabled: controller.isSaving, size: "dialog", type: "submit", children: [
27043
+ /* @__PURE__ */ jsxs31(Button4, { disabled: controller.isSaving, size: "dialog", type: "submit", children: [
27150
27044
  controller.isSaving ? /* @__PURE__ */ jsx41(Spinner5, { size: 14 }) : null,
27151
27045
  controller.isSaving ? labels.saving : labels.save
27152
27046
  ] })
@@ -27184,7 +27078,7 @@ import { Sortable, SortableContent, SortableItem } from "@tutti-os/ui-system";
27184
27078
  import { useRef as useRef36 } from "react";
27185
27079
  import {
27186
27080
  BareIconButton,
27187
- Button as Button6,
27081
+ Button as Button5,
27188
27082
  SortableItemHandle,
27189
27083
  Tooltip as Tooltip6,
27190
27084
  TooltipContent as TooltipContent6,
@@ -27240,7 +27134,7 @@ function AgentQuickPromptRow({
27240
27134
  }
27241
27135
  ) : null,
27242
27136
  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,
27137
+ Button5,
27244
27138
  {
27245
27139
  ...selectionAction,
27246
27140
  ref: selectionRef,
@@ -27446,8 +27340,8 @@ function AgentQuickPromptPopover({
27446
27340
  const preserveExternalFocusRef = useRef38(false);
27447
27341
  const createRequestedOnPointerDownRef = useRef38(false);
27448
27342
  const templateRequestedOnPointerDownRef = useRef38(false);
27449
- const [view, setView] = useState25("prompts");
27450
- const [sortingState, setSortingState] = useState25({
27343
+ const [view, setView] = useState24("prompts");
27344
+ const [sortingState, setSortingState] = useState24({
27451
27345
  isPopoverOpen: controller.isPopoverOpen,
27452
27346
  isSorting: false
27453
27347
  });
@@ -27465,7 +27359,7 @@ function AgentQuickPromptPopover({
27465
27359
  isSorting: next
27466
27360
  });
27467
27361
  };
27468
- const titleId = useId();
27362
+ const titleId = useId2();
27469
27363
  const { labels, snapshot } = controller;
27470
27364
  const templateEntryAction = usePrimaryPointerAction2(
27471
27365
  () => setView("templates")
@@ -27496,7 +27390,7 @@ function AgentQuickPromptPopover({
27496
27390
  const isTemplateView = view === "templates";
27497
27391
  return /* @__PURE__ */ jsxs33(Fragment15, { children: [
27498
27392
  /* @__PURE__ */ jsxs33(
27499
- Popover5,
27393
+ Popover4,
27500
27394
  {
27501
27395
  modal: false,
27502
27396
  open: controller.isPopoverOpen,
@@ -27509,8 +27403,8 @@ function AgentQuickPromptPopover({
27509
27403
  },
27510
27404
  children: [
27511
27405
  /* @__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,
27406
+ /* @__PURE__ */ jsx44(TooltipTrigger7, { asChild: true, children: /* @__PURE__ */ jsx44("span", { className: "inline-flex shrink-0", children: /* @__PURE__ */ jsx44(PopoverTrigger3, { asChild: true, children: /* @__PURE__ */ jsxs33(
27407
+ Button6,
27514
27408
  {
27515
27409
  "aria-label": labels.triggerTooltip,
27516
27410
  disabled,
@@ -27526,7 +27420,7 @@ function AgentQuickPromptPopover({
27526
27420
  /* @__PURE__ */ jsx44(TooltipContent7, { side: "top", children: labels.triggerTooltip })
27527
27421
  ] }) }),
27528
27422
  /* @__PURE__ */ jsxs33(
27529
- PopoverContent5,
27423
+ PopoverContent4,
27530
27424
  {
27531
27425
  "aria-labelledby": titleId,
27532
27426
  align: "start",
@@ -27560,7 +27454,7 @@ function AgentQuickPromptPopover({
27560
27454
  }
27561
27455
  ),
27562
27456
  isTemplateView ? /* @__PURE__ */ jsxs33(
27563
- Button7,
27457
+ Button6,
27564
27458
  {
27565
27459
  size: "sm",
27566
27460
  type: "button",
@@ -27572,7 +27466,7 @@ function AgentQuickPromptPopover({
27572
27466
  ]
27573
27467
  }
27574
27468
  ) : /* @__PURE__ */ jsx44("div", { className: "flex items-center gap-1", children: isSorting ? /* @__PURE__ */ jsxs33(
27575
- Button7,
27469
+ Button6,
27576
27470
  {
27577
27471
  disabled: controller.isInteractionLocked,
27578
27472
  size: "sm",
@@ -27586,7 +27480,7 @@ function AgentQuickPromptPopover({
27586
27480
  }
27587
27481
  ) : /* @__PURE__ */ jsxs33(Fragment15, { children: [
27588
27482
  /* @__PURE__ */ jsxs33(
27589
- Button7,
27483
+ Button6,
27590
27484
  {
27591
27485
  disabled: controller.isInteractionLocked || !controller.showReorderHandles,
27592
27486
  size: "sm",
@@ -27600,7 +27494,7 @@ function AgentQuickPromptPopover({
27600
27494
  }
27601
27495
  ),
27602
27496
  /* @__PURE__ */ jsxs33(
27603
- Button7,
27497
+ Button6,
27604
27498
  {
27605
27499
  disabled: controller.isInteractionLocked,
27606
27500
  size: "sm",
@@ -27661,7 +27555,7 @@ function AgentQuickPromptPopover({
27661
27555
  children: [
27662
27556
  /* @__PURE__ */ jsx44("span", { children: labels.loadError }),
27663
27557
  /* @__PURE__ */ jsx44(
27664
- Button7,
27558
+ Button6,
27665
27559
  {
27666
27560
  size: "xs",
27667
27561
  type: "button",
@@ -27681,7 +27575,7 @@ function AgentQuickPromptPopover({
27681
27575
  children: [
27682
27576
  /* @__PURE__ */ jsx44("span", { children: controller.reorderError === "conflict" ? labels.reorderConflict : labels.reorderError }),
27683
27577
  /* @__PURE__ */ jsx44(
27684
- Button7,
27578
+ Button6,
27685
27579
  {
27686
27580
  size: "xs",
27687
27581
  type: "button",
@@ -27719,7 +27613,7 @@ function AgentQuickPromptPopover({
27719
27613
  {
27720
27614
  label: labels.loadError,
27721
27615
  action: /* @__PURE__ */ jsx44(
27722
- Button7,
27616
+ Button6,
27723
27617
  {
27724
27618
  disabled: controller.isInteractionLocked,
27725
27619
  size: "sm",
@@ -27789,7 +27683,7 @@ function AgentQuickPromptPopover({
27789
27683
  description: controller.promptToDelete ? labels.deleteDescription(controller.promptToDelete.title) : void 0,
27790
27684
  footer: /* @__PURE__ */ jsxs33(DialogFooter2, { children: [
27791
27685
  /* @__PURE__ */ jsx44(
27792
- Button7,
27686
+ Button6,
27793
27687
  {
27794
27688
  ...deleteCancelAction,
27795
27689
  disabled: controller.isDeleting,
@@ -27800,7 +27694,7 @@ function AgentQuickPromptPopover({
27800
27694
  }
27801
27695
  ),
27802
27696
  /* @__PURE__ */ jsx44(
27803
- Button7,
27697
+ Button6,
27804
27698
  {
27805
27699
  ...deleteConfirmAction,
27806
27700
  disabled: controller.isDeleting,
@@ -27835,7 +27729,7 @@ function RecommendedTemplateList({
27835
27729
  /* @__PURE__ */ jsx44("p", { className: "pt-0.5 text-[12px] leading-[1.35] text-[var(--text-secondary)]", children: labels.recommendedTemplatesDescription })
27836
27730
  ] }),
27837
27731
  labels.recommendedTemplates.map((template, index) => /* @__PURE__ */ jsxs33(
27838
- Button7,
27732
+ Button6,
27839
27733
  {
27840
27734
  ref: index === 0 ? firstTemplateRef : void 0,
27841
27735
  className: "h-auto w-full justify-between px-2 py-2 text-left whitespace-normal",
@@ -27876,7 +27770,7 @@ function TemplateEntry({
27876
27770
  label
27877
27771
  }) {
27878
27772
  return /* @__PURE__ */ jsxs33(
27879
- Button7,
27773
+ Button6,
27880
27774
  {
27881
27775
  ...action,
27882
27776
  className: "mt-1 h-auto w-full justify-between px-2 py-2 text-left whitespace-normal",
@@ -28171,7 +28065,7 @@ function AgentComposerView(input) {
28171
28065
  style: inputShellStyle,
28172
28066
  children: [
28173
28067
  /* @__PURE__ */ jsxs34(
28174
- Popover6,
28068
+ Popover5,
28175
28069
  {
28176
28070
  open: input.showFileMentionPalette,
28177
28071
  onOpenChange: input.setIsPaletteOpen,
@@ -28425,10 +28319,9 @@ function AgentComposerView(input) {
28425
28319
  isPlanModeActive: input.isPlanModeActive,
28426
28320
  isTuttiModeActive: input.isTuttiModeActive,
28427
28321
  isTuttiModeUpdating: input.isTuttiModeUpdating,
28428
- tuttiModeOrchestrationIntensity: input.tuttiModeOrchestrationIntensity,
28322
+ tuttiModeSupported: input.props.capabilityMenuState?.tuttiMode?.enabled === true,
28323
+ onTuttiModeChange: input.props.onTuttiModeChange,
28429
28324
  onClearPlanMode: input.onClearPlanMode,
28430
- onClearTuttiMode: input.onClearTuttiMode,
28431
- onTuttiModeOrchestrationIntensityChange: input.onTuttiModeOrchestrationIntensityChange,
28432
28325
  composerActionButton,
28433
28326
  quickPromptControl: /* @__PURE__ */ jsx45(
28434
28327
  AgentQuickPromptPopover,
@@ -28516,7 +28409,7 @@ function AgentComposerView(input) {
28516
28409
  }
28517
28410
 
28518
28411
  // agent-gui/agentGuiNode/composer/useAgentMentionSearchController.ts
28519
- import { useEffect as useEffect27, useMemo as useMemo33, useRef as useRef39, useState as useState26 } from "react";
28412
+ import { useEffect as useEffect27, useMemo as useMemo33, useRef as useRef39, useState as useState25 } from "react";
28520
28413
  import { useRichTextMentionService } from "@tutti-os/ui-rich-text/editor";
28521
28414
  var EMPTY_AGENT_CONTEXT_MENTION_PROVIDERS = [];
28522
28415
  function useAgentMentionSearchController(referenceProvenanceFilter) {
@@ -28525,7 +28418,7 @@ function useAgentMentionSearchController(referenceProvenanceFilter) {
28525
28418
  () => mentionService?.listProviders().filter(isAgentContextMentionProvider) ?? EMPTY_AGENT_CONTEXT_MENTION_PROVIDERS,
28526
28419
  [mentionService]
28527
28420
  );
28528
- const [mentionSearchState, setMentionSearchState] = useState26(INITIAL_AGENT_MENTION_SEARCH_STATE);
28421
+ const [mentionSearchState, setMentionSearchState] = useState25(INITIAL_AGENT_MENTION_SEARCH_STATE);
28529
28422
  const mentionControllerRef = useRef39(
28530
28423
  null
28531
28424
  );
@@ -28574,7 +28467,7 @@ var INITIAL_AGENT_MENTION_SEARCH_STATE = {
28574
28467
  };
28575
28468
 
28576
28469
  // agent-gui/agentGuiNode/composer/quickPrompts/useAgentQuickPromptLibrary.ts
28577
- import { useCallback as useCallback46, useMemo as useMemo34, useRef as useRef40, useState as useState27 } from "react";
28470
+ import { useCallback as useCallback46, useMemo as useMemo34, useRef as useRef40, useState as useState26 } from "react";
28578
28471
  var unavailableSnapshot = {
28579
28472
  enabled: false,
28580
28473
  status: "idle",
@@ -28596,21 +28489,21 @@ function useAgentQuickPromptLibrary(input) {
28596
28489
  quickPrompts ?? unavailableQuickPromptStore,
28597
28490
  selectQuickPromptSnapshot
28598
28491
  );
28599
- const [mode, setMode] = useState27("closed");
28492
+ const [mode, setMode] = useState26("closed");
28600
28493
  const modeRef = useRef40(mode);
28601
28494
  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);
28495
+ const [searchQuery, setSearchQuery] = useState26("");
28496
+ const [selectedPrompt, setSelectedPrompt] = useState26(null);
28497
+ const [initialDraft, setInitialDraft] = useState26(null);
28498
+ const [promptToDelete, setPromptToDelete] = useState26(null);
28499
+ const [mutationError, setMutationError] = useState26(null);
28500
+ const [isSaving, setIsSaving] = useState26(false);
28501
+ const [isDeleting, setIsDeleting] = useState26(false);
28502
+ const [isReordering, setIsReordering] = useState26(false);
28503
+ const [reorderError, setReorderError] = useState26(null);
28611
28504
  const capabilityAvailable = Boolean(quickPrompts && snapshot.enabled);
28612
28505
  const disclosureAvailable = capabilityAvailable && !disabled;
28613
- const [previousDisclosureAvailable, setPreviousDisclosureAvailable] = useState27(disclosureAvailable);
28506
+ const [previousDisclosureAvailable, setPreviousDisclosureAvailable] = useState26(disclosureAvailable);
28614
28507
  const disclosureAvailableRef = useRef40(disclosureAvailable);
28615
28508
  disclosureAvailableRef.current = disclosureAvailable;
28616
28509
  if (previousDisclosureAvailable !== disclosureAvailable) {
@@ -28891,7 +28784,7 @@ function isVersionConflict(error) {
28891
28784
  }
28892
28785
 
28893
28786
  // agent-gui/agentGuiNode/composer/useScopedProjectMissingState.ts
28894
- import { useCallback as useCallback47, useRef as useRef41, useState as useState28 } from "react";
28787
+ import { useCallback as useCallback47, useRef as useRef41, useState as useState27 } from "react";
28895
28788
  function useScopedProjectMissingState(scopeKey) {
28896
28789
  const identityRef = useRef41({
28897
28790
  key: scopeKey,
@@ -28904,7 +28797,7 @@ function useScopedProjectMissingState(scopeKey) {
28904
28797
  };
28905
28798
  }
28906
28799
  const identity = identityRef.current;
28907
- const [result, setResult] = useState28({
28800
+ const [result, setResult] = useState27({
28908
28801
  identity,
28909
28802
  isMissing: false
28910
28803
  });
@@ -29091,8 +28984,8 @@ function AgentComposer(props) {
29091
28984
  hadPrefill: agentComposerDraftHasContent(draftContent)
29092
28985
  });
29093
28986
  };
29094
- const [isPaletteOpen, setIsPaletteOpen] = useState29(true);
29095
- const [isReviewPickerOpen, setIsReviewPickerOpen] = useState29(false);
28987
+ const [isPaletteOpen, setIsPaletteOpen] = useState28(true);
28988
+ const [isReviewPickerOpen, setIsReviewPickerOpen] = useState28(false);
29096
28989
  const submitWithComposerModifiers = (content, displayPrompt, options) => {
29097
28990
  onSubmit(
29098
28991
  content,
@@ -29113,19 +29006,19 @@ function AgentComposer(props) {
29113
29006
  } : void 0
29114
29007
  );
29115
29008
  };
29116
- const [highlightedIndex, setHighlightedIndex] = useState29(0);
29117
- const [mentionHighlightedKey, setMentionHighlightedKey] = useState29(null);
29118
- const [shouldCenterMentionHighlight, setShouldCenterMentionHighlight] = useState29(false);
29009
+ const [highlightedIndex, setHighlightedIndex] = useState28(0);
29010
+ const [mentionHighlightedKey, setMentionHighlightedKey] = useState28(null);
29011
+ const [shouldCenterMentionHighlight, setShouldCenterMentionHighlight] = useState28(false);
29119
29012
  const [
29120
29013
  shouldResetMentionHighlightToFilter,
29121
29014
  setShouldResetMentionHighlightToFilter
29122
- ] = useState29(false);
29123
- const [paletteDraftPrompt, setPaletteDraftPrompt] = useState29(
29015
+ ] = useState28(false);
29016
+ const [paletteDraftPrompt, setPaletteDraftPrompt] = useState28(
29124
29017
  goalDraftObjective ?? draftPrompt
29125
29018
  );
29126
- const [fileMentionSuggestion, setFileMentionSuggestion] = useState29(null);
29019
+ const [fileMentionSuggestion, setFileMentionSuggestion] = useState28(null);
29127
29020
  const [isSelectedProjectMissing, setIsSelectedProjectMissing] = useScopedProjectMissingState(draftScopeKey);
29128
- const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] = useState29(false);
29021
+ const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] = useState28(false);
29129
29022
  const slashStatusAgentSessionId = slashStatus?.agentSessionId ?? null;
29130
29023
  const previousSlashStatusAgentSessionIdRef = useRef42(
29131
29024
  slashStatusAgentSessionId
@@ -29151,8 +29044,8 @@ function AgentComposer(props) {
29151
29044
  const wasActiveRef = useRef42(isActive);
29152
29045
  const lastComposerFocusRequestRef = useRef42(null);
29153
29046
  const autoMentionHighlightedKeyRef = useRef42(null);
29154
- const [isPromptTipOverflowing, setIsPromptTipOverflowing] = useState29(false);
29155
- const [dockComposerMetrics, setDockComposerMetrics] = useState29(
29047
+ const [isPromptTipOverflowing, setIsPromptTipOverflowing] = useState28(false);
29048
+ const [dockComposerMetrics, setDockComposerMetrics] = useState28(
29156
29049
  INITIAL_DOCK_COMPOSER_METRICS
29157
29050
  );
29158
29051
  const paletteCatalog = useComposerPaletteCatalog({
@@ -29265,7 +29158,7 @@ function AgentComposer(props) {
29265
29158
  availableSkills,
29266
29159
  composerSettings,
29267
29160
  // Host-gated product capability: omit or enabled:false must hide Tutti Mode
29268
- // entries (hero toggle, badge activation, /tutti). Fail closed like other
29161
+ // entries (footer chip, badge activation, /tutti). Fail closed like other
29269
29162
  // unsupported host capabilities — do not treat a missing flag as enabled.
29270
29163
  tuttiModeSupported: capabilityMenuState?.tuttiMode?.enabled === true,
29271
29164
  capabilityControlsReadOnly,
@@ -29552,7 +29445,7 @@ function AgentComposer(props) {
29552
29445
  }
29553
29446
 
29554
29447
  // agent-gui/agentGuiNode/AgentHomeSuggestions.tsx
29555
- import { memo as memo2, useState as useState30 } from "react";
29448
+ import { memo as memo2, useState as useState29 } from "react";
29556
29449
  import { ArrowLeftRight, Code, Compass, Import, Pencil, X as X6 } from "lucide-react";
29557
29450
  import { jsx as jsx47, jsxs as jsxs35 } from "react/jsx-runtime";
29558
29451
  function TuttiIcon(props) {
@@ -29663,7 +29556,7 @@ var AgentHomeSuggestions = memo2(function AgentHomeSuggestions2({
29663
29556
  closeLabel
29664
29557
  }) {
29665
29558
  "use memo";
29666
- const [activeCategoryId, setActiveCategoryId] = useState30(null);
29559
+ const [activeCategoryId, setActiveCategoryId] = useState29(null);
29667
29560
  if (categories.length === 0) {
29668
29561
  return null;
29669
29562
  }
@@ -29925,7 +29818,7 @@ var AgentGUIEmptyHeroCarouselStage = class extends Component3 {
29925
29818
  // agent-gui/agentGuiNode/view/AgentTargetSetupGate.tsx
29926
29819
  import { useExternalStoreSnapshot } from "@tutti-os/ui-react-hooks";
29927
29820
  import {
29928
- Button as Button8,
29821
+ Button as Button7,
29929
29822
  RefreshIcon,
29930
29823
  Select as Select4,
29931
29824
  SelectContent as SelectContent4,
@@ -30220,7 +30113,7 @@ function AgentTargetSetupGate({
30220
30113
  }) }),
30221
30114
  /* @__PURE__ */ jsx50("p", { className: AgentGUINode_styles_default.emptyProviderGateDescription, children: setupDescription }),
30222
30115
  !setupChecking ? /* @__PURE__ */ jsx50(
30223
- Button8,
30116
+ Button7,
30224
30117
  {
30225
30118
  type: "button",
30226
30119
  className: AgentGUINode_styles_default.emptyProviderGateAction,
@@ -30241,7 +30134,7 @@ function AgentTargetSetupGate({
30241
30134
  }),
30242
30135
  description: setupDescription,
30243
30136
  footer: /* @__PURE__ */ jsxs37(
30244
- Button8,
30137
+ Button7,
30245
30138
  {
30246
30139
  size: "dialog",
30247
30140
  type: "button",
@@ -30276,7 +30169,7 @@ function AgentTargetSetupGate({
30276
30169
  warning: snapshot?.status === "not_installed",
30277
30170
  detail: snapshot?.plan ? `${snapshot.plan.packageName}@${snapshot.plan.packageVersion}` : void 0,
30278
30171
  action: (snapshot?.status === "not_installed" || installRetryAvailable) && snapshot.plan ? /* @__PURE__ */ jsx50(
30279
- Button8,
30172
+ Button7,
30280
30173
  {
30281
30174
  type: "button",
30282
30175
  size: "sm",
@@ -30300,7 +30193,7 @@ function AgentTargetSetupGate({
30300
30193
  warning: snapshot?.status === "auth_required",
30301
30194
  detail: snapshot?.status === "ready" ? accountDetail : void 0,
30302
30195
  action: authenticationAvailable && authMethods.length > 0 ? /* @__PURE__ */ jsx50(
30303
- Button8,
30196
+ Button7,
30304
30197
  {
30305
30198
  type: "button",
30306
30199
  size: "sm",
@@ -30658,7 +30551,6 @@ var AgentGUIEmptyHeroPane = memo3(function AgentGUIEmptyHeroPane2({
30658
30551
  }
30659
30552
  ) : null,
30660
30553
  /* @__PURE__ */ jsx52(AgentComposer, { ...composerProps }),
30661
- /* @__PURE__ */ jsx52(AgentGUIEmptyHeroTuttiToggle, { composerProps }),
30662
30554
  /* @__PURE__ */ jsx52(
30663
30555
  AgentHomeSuggestions,
30664
30556
  {
@@ -30670,61 +30562,6 @@ var AgentGUIEmptyHeroPane = memo3(function AgentGUIEmptyHeroPane2({
30670
30562
  )
30671
30563
  ] }) });
30672
30564
  });
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
30565
  var AgentGUIProviderReadinessGatePane = memo3(
30729
30566
  function AgentGUIProviderReadinessGatePane2({
30730
30567
  provider,
@@ -31020,11 +30857,11 @@ function EmptyHeroTitle({
31020
30857
  // agent-gui/agentGuiNode/view/AgentGUIProviderManagerDialog.tsx
31021
30858
  import {
31022
30859
  useRef as useRef44,
31023
- useState as useState31
30860
+ useState as useState30
31024
30861
  } from "react";
31025
30862
  import { CircleMinus, CirclePlus } from "lucide-react";
31026
30863
  import {
31027
- Button as Button9,
30864
+ Button as Button8,
31028
30865
  Dialog as Dialog2,
31029
30866
  DialogContent as DialogContent2,
31030
30867
  DialogDescription as DialogDescription2,
@@ -31053,17 +30890,17 @@ function AgentGUIProviderManagerDialog({
31053
30890
  const disabledTargets = targets.filter(
31054
30891
  (target) => hidden.has(target.targetId)
31055
30892
  );
31056
- const [editing, setEditing] = useState31(false);
31057
- const [dragState, setDragState] = useState31(
30893
+ const [editing, setEditing] = useState30(false);
30894
+ const [dragState, setDragState] = useState30(
31058
30895
  null
31059
30896
  );
31060
- const [dragOverZone, setDragOverZone] = useState31(
30897
+ const [dragOverZone, setDragOverZone] = useState30(
31061
30898
  null
31062
30899
  );
31063
- const [dragPreview, setDragPreview] = useState31(null);
30900
+ const [dragPreview, setDragPreview] = useState30(null);
31064
30901
  const dragStateRef = useRef44(null);
31065
30902
  const dragPreviewRef = useRef44(null);
31066
- const [longPressTargetId, setLongPressTargetId] = useState31(
30903
+ const [longPressTargetId, setLongPressTargetId] = useState30(
31067
30904
  null
31068
30905
  );
31069
30906
  const longPressOriginRef = useRef44(null);
@@ -31356,7 +31193,7 @@ function AgentGUIProviderManagerDialog({
31356
31193
  }
31357
31194
  ) : null,
31358
31195
  editing ? /* @__PURE__ */ jsx53(
31359
- Button9,
31196
+ Button8,
31360
31197
  {
31361
31198
  "aria-label": labels.removeAgentFromSidebar(label),
31362
31199
  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 +31315,7 @@ function AgentGUIProviderManagerDialog({
31478
31315
  }
31479
31316
  ) : null,
31480
31317
  editing ? /* @__PURE__ */ jsx53(
31481
- Button9,
31318
+ Button8,
31482
31319
  {
31483
31320
  "aria-label": labels.addAgentToSidebar(label),
31484
31321
  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 +31360,7 @@ function AgentGUIProviderManagerDialog({
31523
31360
  }
31524
31361
 
31525
31362
  // agent-gui/agentGuiNode/view/useAgentGUIProviderRailPreferences.ts
31526
- import { useCallback as useCallback50, useEffect as useEffect29, useState as useState32 } from "react";
31363
+ import { useCallback as useCallback50, useEffect as useEffect29, useState as useState31 } from "react";
31527
31364
  function readAgentGUIProviderRailPreferences(storageKey) {
31528
31365
  return parseAgentGUIProviderRailPreferences(
31529
31366
  globalThis.localStorage?.getItem(storageKey)
@@ -31531,7 +31368,7 @@ function readAgentGUIProviderRailPreferences(storageKey) {
31531
31368
  }
31532
31369
  function useAgentGUIProviderRailPreferences() {
31533
31370
  const storageKey = agentGUIProviderRailOrderStorageKey();
31534
- const [preferences, setPreferences] = useState32(
31371
+ const [preferences, setPreferences] = useState31(
31535
31372
  () => readAgentGUIProviderRailPreferences(storageKey)
31536
31373
  );
31537
31374
  useEffect29(() => {
@@ -31664,7 +31501,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
31664
31501
  persistPreferences: persistProviderRailPreferences,
31665
31502
  preferences: providerRailPreferences
31666
31503
  } = useAgentGUIProviderRailPreferences();
31667
- const [dragState, setDragState] = useState33(null);
31504
+ const [dragState, setDragState] = useState32(null);
31668
31505
  const dragStateRef = useRef45(null);
31669
31506
  const setProviderRailDragState = useCallback51(
31670
31507
  (nextDragState) => {
@@ -32138,10 +31975,10 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
32138
31975
  });
32139
31976
 
32140
31977
  // agent-gui/agentGuiNode/controller/AgentGUIConversationRailController.tsx
32141
- import { memo as memo9, useState as useState39 } from "react";
31978
+ import { memo as memo9, useState as useState38 } from "react";
32142
31979
 
32143
31980
  // 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";
31981
+ import { Fragment as Fragment22, memo as memo8, useEffect as useEffect30, useMemo as useMemo40, useRef as useRef48, useState as useState37 } from "react";
32145
31982
  import { Button as SystemButton } from "@tutti-os/ui-system";
32146
31983
  import { ScrollArea as ScrollArea2 } from "@tutti-os/ui-system/components";
32147
31984
  import { CreateChatIcon as CreateChatIcon2 } from "@tutti-os/ui-system/icons";
@@ -32884,7 +32721,7 @@ function reduceAgentGUIConversationRailViewState(state, action) {
32884
32721
  }
32885
32722
 
32886
32723
  // agent-gui/agentGuiNode/controller/useAgentGUIProjectDrag.ts
32887
- import { useCallback as useCallback52, useState as useState34 } from "react";
32724
+ import { useCallback as useCallback52, useState as useState33 } from "react";
32888
32725
  var PROJECT_DRAG_SCROLL_EDGE_PX = 40;
32889
32726
  function projectDragAutoScrollDelta(clientY, bounds) {
32890
32727
  if (clientY < bounds.top + PROJECT_DRAG_SCROLL_EDGE_PX) {
@@ -32902,9 +32739,9 @@ function projectDragAutoScrollDelta(clientY, bounds) {
32902
32739
  return 0;
32903
32740
  }
32904
32741
  function useAgentGUIProjectDrag(input) {
32905
- const [dragState, setDragState] = useState34(null);
32906
- const [isMovePending, setIsMovePending] = useState34(false);
32907
- const [runtime] = useState34(() => ({
32742
+ const [dragState, setDragState] = useState33(null);
32743
+ const [isMovePending, setIsMovePending] = useState33(false);
32744
+ const [runtime] = useState33(() => ({
32908
32745
  active: false,
32909
32746
  clientY: null,
32910
32747
  dragState: null,
@@ -33327,7 +33164,7 @@ import {
33327
33164
  useCallback as useCallback53,
33328
33165
  useMemo as useMemo38,
33329
33166
  useRef as useRef46,
33330
- useState as useState35
33167
+ useState as useState34
33331
33168
  } from "react";
33332
33169
  import {
33333
33170
  AtSign,
@@ -33537,7 +33374,7 @@ function useConversationActionGroups({
33537
33374
  const agentHostApi = useOptionalAgentHostApi();
33538
33375
  const agentActivityRuntime = useOptionalAgentActivityRuntime();
33539
33376
  const copyConversationValue = useAgentGUIConversationCopyAction(labels);
33540
- const [resetKey, setResetKey] = useState35(0);
33377
+ const [resetKey, setResetKey] = useState34(0);
33541
33378
  const pendingActionRef = useRef46(false);
33542
33379
  const run = useCallback53(
33543
33380
  (action) => {
@@ -33631,7 +33468,7 @@ function AgentGUIConversationActionsDropdown({
33631
33468
  menu,
33632
33469
  moreSessionActionsLabel
33633
33470
  }) {
33634
- const [open, setOpen] = useState35(false);
33471
+ const [open, setOpen] = useState34(false);
33635
33472
  return /* @__PURE__ */ jsxs44(DropdownMenu4, { onOpenChange: setOpen, children: [
33636
33473
  /* @__PURE__ */ jsx61(DropdownMenuTrigger4, { asChild: true, children: /* @__PURE__ */ jsx61(
33637
33474
  BareIconButton2,
@@ -33661,7 +33498,7 @@ function AgentGUIConversationActionsContextMenu({
33661
33498
  children,
33662
33499
  menu
33663
33500
  }) {
33664
- const [open, setOpen] = useState35(false);
33501
+ const [open, setOpen] = useState34(false);
33665
33502
  return /* @__PURE__ */ jsxs44(ContextMenu2, { onOpenChange: setOpen, children: [
33666
33503
  /* @__PURE__ */ jsx61(ContextMenuTrigger2, { asChild: true, children }),
33667
33504
  open ? /* @__PURE__ */ jsx61(ContextMenuContent2, { className: menuContentClassName, children: /* @__PURE__ */ jsx61(ContextActionGroups, { groups: menu.groups }) }) : null
@@ -34086,7 +33923,7 @@ function AgentGUIProjectRailHeader({
34086
33923
  }
34087
33924
 
34088
33925
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailSectionHeader.tsx
34089
- import { forwardRef as forwardRef5, memo as memo6, useCallback as useCallback55, useState as useState36 } from "react";
33926
+ import { forwardRef as forwardRef5, memo as memo6, useCallback as useCallback55, useState as useState35 } from "react";
34090
33927
  import { ChevronRight as ChevronRight2 } from "lucide-react";
34091
33928
  import {
34092
33929
  DropdownMenu as DropdownMenu5,
@@ -34500,8 +34337,8 @@ var AgentGUIConversationRailSectionHeader = memo6(
34500
34337
  sectionLabel
34501
34338
  }) {
34502
34339
  "use memo";
34503
- const [projectMenuOpen, setProjectMenuOpen] = useState36(false);
34504
- const [conversationMenuOpen, setConversationMenuOpen] = useState36(false);
34340
+ const [projectMenuOpen, setProjectMenuOpen] = useState35(false);
34341
+ const [conversationMenuOpen, setConversationMenuOpen] = useState35(false);
34505
34342
  const handleProjectMenuOpenChange = useCallback55(
34506
34343
  (open) => {
34507
34344
  setProjectMenuOpen(open);
@@ -35032,9 +34869,9 @@ function useAgentGUIConversationRailViewState(input) {
35032
34869
  }
35033
34870
 
35034
34871
  // agent-gui/agentGuiNode/view/useAgentGUIProjectMenuState.ts
35035
- import { useCallback as useCallback58, useState as useState37 } from "react";
34872
+ import { useCallback as useCallback58, useState as useState36 } from "react";
35036
34873
  function useAgentGUIProjectMenuState(isRailInteractionLocked, isUserProjectMutationPending) {
35037
- const [openSectionId, setOpenSectionId] = useState37(null);
34874
+ const [openSectionId, setOpenSectionId] = useState36(null);
35038
34875
  const isProjectActionLocked = useCallback58(
35039
34876
  () => isRailInteractionLocked() || isUserProjectMutationPending,
35040
34877
  [isRailInteractionLocked, isUserProjectMutationPending]
@@ -35057,7 +34894,7 @@ function useAgentGUIProjectMenuState(isRailInteractionLocked, isUserProjectMutat
35057
34894
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailPane.tsx
35058
34895
  import { jsx as jsx67, jsxs as jsxs48 } from "react/jsx-runtime";
35059
34896
  function useDelayedBoolean(value, delayMs) {
35060
- const [delayedValue, setDelayedValue] = useState38(false);
34897
+ const [delayedValue, setDelayedValue] = useState37(false);
35061
34898
  useEffect30(() => {
35062
34899
  if (!value) {
35063
34900
  setDelayedValue(false);
@@ -35111,8 +34948,8 @@ var AgentGUIConversationRailPane = memo8(
35111
34948
  onConversationQueryChange
35112
34949
  }) {
35113
34950
  "use memo";
35114
- const [pendingProjectAction, setPendingProjectAction] = useState38(null);
35115
- const [isRequestingBatchDeletion, setIsRequestingBatchDeletion] = useState38(false);
34951
+ const [pendingProjectAction, setPendingProjectAction] = useState37(null);
34952
+ const [isRequestingBatchDeletion, setIsRequestingBatchDeletion] = useState37(false);
35116
34953
  const { railSearch } = railQuery;
35117
34954
  const railElementRef = useRef48(null);
35118
34955
  const railActiveConversationRef = useRef48([]);
@@ -36934,7 +36771,7 @@ function identitySnapshot(snapshot) {
36934
36771
  import { jsx as jsx68 } from "react/jsx-runtime";
36935
36772
  var AgentGUIConversationRailController = memo9(
36936
36773
  function AgentGUIConversationRailController2(props) {
36937
- const [conversationQuery, setConversationQuery] = useState39("");
36774
+ const [conversationQuery, setConversationQuery] = useState38("");
36938
36775
  const railQuery = useAgentGUIConversationRailQuery({
36939
36776
  activeConversationId: props.activeConversationId,
36940
36777
  conversationFilter: props.conversationFilter,
@@ -37101,6 +36938,9 @@ function resolveAgentGUIStopControl(input) {
37101
36938
  visible: shouldShowAgentGUIStopButton(input)
37102
36939
  };
37103
36940
  }
36941
+ function resolveAgentGUIComposerDisabled(input) {
36942
+ return input.isCollaboratorConversation || input.runtimeBlocked || input.hasNonRetryableRecoveryFailure || !input.canQueueWhileBusy && (input.pendingApproval || input.pendingInteractivePrompt || input.isSubmitting || input.isInterrupting || input.isCreatingConversation);
36943
+ }
37104
36944
  function buildAgentConversationHandoffPrompt(input) {
37105
36945
  const conversation = input.activeConversation;
37106
36946
  if (!conversation) {
@@ -37196,7 +37036,7 @@ function AgentComposerRegion({
37196
37036
  }
37197
37037
 
37198
37038
  // agent-gui/agentGuiNode/AgentGoalBanner.tsx
37199
- import { useEffect as useEffect32, useState as useState40 } from "react";
37039
+ import { useEffect as useEffect32, useState as useState39 } from "react";
37200
37040
  import { CirclePause, CirclePlay, Pencil as Pencil3, Target as Target3, Trash2 } from "lucide-react";
37201
37041
  import { jsx as jsx69, jsxs as jsxs50 } from "react/jsx-runtime";
37202
37042
  var RESUMABLE_GOAL_STATUSES = /* @__PURE__ */ new Set([
@@ -37272,11 +37112,11 @@ function AgentGoalBanner({
37272
37112
  onClearGoal
37273
37113
  }) {
37274
37114
  "use memo";
37275
- const [editDraft, setEditDraft] = useState40(null);
37115
+ const [editDraft, setEditDraft] = useState39(null);
37276
37116
  const normalizedStatus = normalizeGoalStatus(status);
37277
37117
  const isActive = normalizedStatus === "" || normalizedStatus === "active";
37278
37118
  const serverSeconds = optimistic ? null : typeof durationMs === "number" && durationMs >= 0 ? Math.floor(durationMs / 1e3) : isActive ? 0 : null;
37279
- const [localElapsed, setLocalElapsed] = useState40(0);
37119
+ const [localElapsed, setLocalElapsed] = useState39(0);
37280
37120
  useEffect32(() => {
37281
37121
  setLocalElapsed(0);
37282
37122
  if (!isActive || serverSeconds === null) {
@@ -37422,9 +37262,9 @@ import {
37422
37262
  ListChecks as ListChecks4,
37423
37263
  LoaderCircle,
37424
37264
  RotateCcw,
37425
- Sparkles as Sparkles3,
37426
37265
  X as X7
37427
37266
  } from "lucide-react";
37267
+ import { TaskIcon } from "@tutti-os/ui-system/icons";
37428
37268
 
37429
37269
  // workspaceWorkflow/workspaceWorkflowRuntime.tsx
37430
37270
  import { createContext as createContext3, useContext as useContext3 } from "react";
@@ -37613,7 +37453,7 @@ import ReactMarkdown2 from "react-markdown";
37613
37453
  import rehypeSanitize from "rehype-sanitize";
37614
37454
  import remarkGfm2 from "remark-gfm";
37615
37455
  import {
37616
- Badge as Badge2,
37456
+ Badge,
37617
37457
  Card,
37618
37458
  CardContent,
37619
37459
  CardDescription,
@@ -37693,7 +37533,7 @@ function TuttiModePlanTaskAssignmentEditor({
37693
37533
  return /* @__PURE__ */ jsxs51(
37694
37534
  "div",
37695
37535
  {
37696
- className: "mt-3 flex flex-wrap items-center gap-0.5 border-t border-border/70 pt-2",
37536
+ className: "tutti-plan-task-assignment-row mt-3 flex flex-wrap items-center gap-3 border-t border-[var(--line-2)] pt-2",
37697
37537
  "data-testid": `tutti-plan-task-assignment-${task.id}`,
37698
37538
  children: [
37699
37539
  /* @__PURE__ */ jsxs51(
@@ -37784,7 +37624,7 @@ function TuttiModePlanTaskAssignmentEditor({
37784
37624
  "label",
37785
37625
  {
37786
37626
  className: cn9(
37787
- "flex min-h-[28px] w-auto shrink-0 items-center gap-1.5 px-2 text-[13px]",
37627
+ "flex min-h-[28px] w-auto shrink-0 items-center gap-1.5 text-[13px]",
37788
37628
  disabled ? "cursor-not-allowed text-[var(--agent-gui-text-tertiary)]" : "cursor-pointer text-[var(--agent-gui-text-secondary)]"
37789
37629
  ),
37790
37630
  htmlFor: `tutti-plan-task-parallel-${task.id}`,
@@ -37811,7 +37651,7 @@ function TuttiModePlanTaskAssignmentEditor({
37811
37651
  "label",
37812
37652
  {
37813
37653
  className: cn9(
37814
- "flex min-h-[28px] w-auto shrink-0 items-center gap-1.5 px-2 text-[13px]",
37654
+ "flex min-h-[28px] w-auto shrink-0 items-center gap-1.5 text-[13px]",
37815
37655
  disabled ? "cursor-not-allowed text-[var(--agent-gui-text-tertiary)]" : "cursor-pointer text-[var(--agent-gui-text-secondary)]"
37816
37656
  ),
37817
37657
  htmlFor: `tutti-plan-task-auto-accept-${task.id}`,
@@ -37862,7 +37702,7 @@ function AssignmentSelectTrigger({
37862
37702
  {
37863
37703
  className: cn9(
37864
37704
  "truncate",
37865
- value === null && "text-[var(--agent-gui-text-tertiary)]"
37705
+ value === null && "text-[var(--agent-gui-text-secondary)]"
37866
37706
  ),
37867
37707
  children: value ?? placeholder
37868
37708
  }
@@ -37970,7 +37810,7 @@ function TuttiModePlanPanel({
37970
37810
  /* @__PURE__ */ jsx72("ol", { className: "grid gap-2", children: panel.tasks.map((task) => /* @__PURE__ */ jsxs52(
37971
37811
  "li",
37972
37812
  {
37973
- className: "rounded-md bg-muted/60 px-3 py-2 text-sm",
37813
+ className: "rounded-lg border border-[var(--line-2)] bg-[var(--background-board-card)] px-4 pt-3 pb-2 text-sm",
37974
37814
  children: [
37975
37815
  /* @__PURE__ */ jsxs52("div", { className: "flex flex-wrap items-start justify-between gap-2", children: [
37976
37816
  /* @__PURE__ */ jsxs52("div", { className: "font-medium text-foreground", children: [
@@ -37978,7 +37818,7 @@ function TuttiModePlanPanel({
37978
37818
  ". ",
37979
37819
  task.title
37980
37820
  ] }),
37981
- /* @__PURE__ */ jsx72(Badge2, { variant: "secondary", children: priorityLabel(labels, task.priority) })
37821
+ /* @__PURE__ */ jsx72(Badge, { variant: "secondary", children: priorityLabel(labels, task.priority) })
37982
37822
  ] }),
37983
37823
  task.content ? /* @__PURE__ */ jsx72("p", { className: "mt-1 text-xs text-muted-foreground", children: task.content }) : null,
37984
37824
  editable && assignmentCatalog ? /* @__PURE__ */ jsx72(
@@ -38029,7 +37869,7 @@ function TaskAssignmentSummary({
38029
37869
  if (chips.length === 0) {
38030
37870
  return null;
38031
37871
  }
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(
37872
+ return /* @__PURE__ */ jsx72("div", { className: "tutti-plan-task-assignment-row mt-3 flex flex-wrap items-center gap-3 border-t border-[var(--line-2)] pt-2", children: chips.map((chip) => /* @__PURE__ */ jsx72(
38033
37873
  "span",
38034
37874
  {
38035
37875
  title: chip.label,
@@ -38055,9 +37895,9 @@ function priorityLabel(labels, priority) {
38055
37895
  }
38056
37896
 
38057
37897
  // workspaceWorkflow/tuttiModePlan/TuttiPlanIssuePanel.tsx
38058
- import { useState as useState41 } from "react";
37898
+ import { useState as useState40 } from "react";
38059
37899
  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";
37900
+ import { Button as Button9, Card as Card2, CardContent as CardContent2, CardHeader as CardHeader2, cn as cn11 } from "@tutti-os/ui-system";
38061
37901
  import { jsx as jsx73, jsxs as jsxs53 } from "react/jsx-runtime";
38062
37902
  var BOARD_STATUS_ORDER = [
38063
37903
  "not_started",
@@ -38134,9 +37974,9 @@ function TuttiPlanIssuePanel({
38134
37974
  onCancelExecution,
38135
37975
  onOpenTask
38136
37976
  }) {
38137
- const [viewMode, setViewMode] = useState41("board");
38138
- const [decidingTaskIds, setDecidingTaskIds] = useState41([]);
38139
- const [stopping, setStopping] = useState41(false);
37977
+ const [viewMode, setViewMode] = useState40("board");
37978
+ const [decidingTaskIds, setDecidingTaskIds] = useState40([]);
37979
+ const [stopping, setStopping] = useState40(false);
38140
37980
  const decideTask = onDecideTask ? (taskId, decision) => {
38141
37981
  setDecidingTaskIds(
38142
37982
  (current) => current.includes(taskId) ? current : [...current, taskId]
@@ -38204,7 +38044,7 @@ function TuttiPlanIssuePanel({
38204
38044
  mode
38205
38045
  )) }),
38206
38046
  stopExecution ? /* @__PURE__ */ jsxs53(
38207
- Button10,
38047
+ Button9,
38208
38048
  {
38209
38049
  type: "button",
38210
38050
  size: "sm",
@@ -38220,7 +38060,7 @@ function TuttiPlanIssuePanel({
38220
38060
  }
38221
38061
  ) : null,
38222
38062
  onOpenIssue ? /* @__PURE__ */ jsxs53(
38223
- Button10,
38063
+ Button9,
38224
38064
  {
38225
38065
  type: "button",
38226
38066
  size: "sm",
@@ -38272,7 +38112,7 @@ function TaskStructureChips({
38272
38112
  dependencies.length > 0 ? /* @__PURE__ */ jsxs53(
38273
38113
  "span",
38274
38114
  {
38275
- className: "min-w-0 truncate rounded-full border border-border/70 px-1.5 text-[10px] leading-4 text-muted-foreground",
38115
+ className: "min-w-0 truncate rounded-full border border-[var(--line-2)] px-1.5 text-[10px] leading-4 text-muted-foreground",
38276
38116
  title: dependencies.join(", "),
38277
38117
  children: [
38278
38118
  labels.dependencies,
@@ -38296,7 +38136,7 @@ function TaskDecisionActions({
38296
38136
  }
38297
38137
  return /* @__PURE__ */ jsxs53("span", { className: "flex shrink-0 items-center gap-1", children: [
38298
38138
  canAccept ? /* @__PURE__ */ jsx73(
38299
- Button10,
38139
+ Button9,
38300
38140
  {
38301
38141
  type: "button",
38302
38142
  size: "sm",
@@ -38311,7 +38151,7 @@ function TaskDecisionActions({
38311
38151
  }
38312
38152
  ) : null,
38313
38153
  /* @__PURE__ */ jsx73(
38314
- Button10,
38154
+ Button9,
38315
38155
  {
38316
38156
  type: "button",
38317
38157
  size: "sm",
@@ -38355,7 +38195,7 @@ function TuttiPlanIssueBoard({
38355
38195
  return /* @__PURE__ */ jsxs53(
38356
38196
  "div",
38357
38197
  {
38358
- className: "min-h-[220px] rounded-lg border border-border/70 bg-muted/30 px-2 py-2",
38198
+ className: "min-h-[220px] rounded-lg border border-[var(--line-2)] bg-muted/30 px-2 py-2",
38359
38199
  "data-testid": `tutti-plan-issue-column-${status}`,
38360
38200
  children: [
38361
38201
  /* @__PURE__ */ jsxs53("div", { className: "mb-1.5 flex items-center justify-between gap-2", children: [
@@ -38426,11 +38266,11 @@ function TuttiPlanIssueList({
38426
38266
  }) {
38427
38267
  const showStages = issue.tasks.some((task) => task.parallelizable);
38428
38268
  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: [
38269
+ return /* @__PURE__ */ jsx73("div", { className: "overflow-hidden rounded-lg border border-[var(--line-2)]", children: stages.map((stage, index) => /* @__PURE__ */ jsxs53("div", { children: [
38430
38270
  showStages ? /* @__PURE__ */ jsx73(
38431
38271
  "div",
38432
38272
  {
38433
- className: "border-b border-border/70 bg-muted/40 px-3 py-1 text-[10px] font-medium text-muted-foreground",
38273
+ className: "border-b border-[var(--line-2)] bg-muted/40 px-3 py-1 text-[10px] font-medium text-muted-foreground",
38434
38274
  "data-testid": `tutti-plan-issue-stage-${stage.kind}`,
38435
38275
  children: stage.kind === "parallel" ? labels.stageParallel(
38436
38276
  String(index + 1),
@@ -38448,7 +38288,7 @@ function TuttiPlanIssueList({
38448
38288
  tabIndex: openable ? 0 : void 0,
38449
38289
  "data-testid": `tutti-plan-issue-row-${task.taskId}`,
38450
38290
  className: cn11(
38451
- "flex items-start justify-between gap-3 border-b border-border/70 px-3 py-2 last:border-b-0",
38291
+ "flex items-start justify-between gap-3 border-b border-[var(--line-2)] px-3 py-2 last:border-b-0",
38452
38292
  openable && "cursor-pointer transition-colors hover:bg-muted/40"
38453
38293
  ),
38454
38294
  onClick: openable ? () => void openTask(task.taskId) : void 0,
@@ -38498,7 +38338,7 @@ function TuttiPlanIssueList({
38498
38338
  }
38499
38339
 
38500
38340
  // workspaceWorkflow/tuttiModePlan/useTuttiModePlanPanels.ts
38501
- import { useCallback as useCallback59, useEffect as useEffect33, useMemo as useMemo42, useRef as useRef51, useState as useState42 } from "react";
38341
+ import { useCallback as useCallback59, useEffect as useEffect33, useMemo as useMemo42, useRef as useRef51, useState as useState41 } from "react";
38502
38342
  function emptyState(scopeKey) {
38503
38343
  return {
38504
38344
  error: null,
@@ -38519,14 +38359,14 @@ var EMPTY_AGENT_DETAIL = {
38519
38359
  };
38520
38360
  function useTuttiModePlanPanels(input) {
38521
38361
  const runtime = useOptionalTuttiModePlanReviewRuntime();
38522
- const [state, setState] = useState42(() => emptyState(""));
38523
- const [assignmentState, setAssignmentState] = useState42(() => emptyAssignmentState(""));
38524
- const [planIssueState, setPlanIssueState] = useState42({
38362
+ const [state, setState] = useState41(() => emptyState(""));
38363
+ const [assignmentState, setAssignmentState] = useState41(() => emptyAssignmentState(""));
38364
+ const [planIssueState, setPlanIssueState] = useState41({
38525
38365
  result: null,
38526
38366
  scopeKey: ""
38527
38367
  });
38528
38368
  const requestSequenceRef = useRef51(0);
38529
- const [retrySequence, setRetrySequence] = useState42(0);
38369
+ const [retrySequence, setRetrySequence] = useState41(0);
38530
38370
  const enabled = input.enabled ?? true;
38531
38371
  const workspaceId = input.workspaceId.trim();
38532
38372
  const sourceSessionId = input.sourceSessionId?.trim() ?? "";
@@ -38862,11 +38702,13 @@ import { ChevronDown as ChevronDown4 } from "lucide-react";
38862
38702
  import { jsx as jsx74, jsxs as jsxs54 } from "react/jsx-runtime";
38863
38703
  function AgentComposerDisclosureCard({
38864
38704
  actions,
38705
+ bannerClassName,
38865
38706
  children,
38866
38707
  expanded,
38867
38708
  icon,
38868
38709
  labels,
38869
38710
  onExpandedChange,
38711
+ panelClassName,
38870
38712
  summary,
38871
38713
  testId,
38872
38714
  title
@@ -38884,7 +38726,7 @@ function AgentComposerDisclosureCard({
38884
38726
  "div",
38885
38727
  {
38886
38728
  id: panelId,
38887
- className: AgentGUIChrome_styles_default.composerDisclosurePanel,
38729
+ className: cn(AgentGUIChrome_styles_default.composerDisclosurePanel, panelClassName),
38888
38730
  "data-testid": `${testId}-panel`,
38889
38731
  children
38890
38732
  }
@@ -38895,7 +38737,8 @@ function AgentComposerDisclosureCard({
38895
38737
  className: cn(
38896
38738
  AgentGUIChrome_styles_default.chromeCard,
38897
38739
  AgentGUIChrome_styles_default.chromeCardMuted,
38898
- AgentGUIChrome_styles_default.composerDisclosureBanner
38740
+ AgentGUIChrome_styles_default.composerDisclosureBanner,
38741
+ bannerClassName
38899
38742
  ),
38900
38743
  children: [
38901
38744
  /* @__PURE__ */ jsxs54(
@@ -38950,8 +38793,187 @@ function AgentComposerDisclosureCard({
38950
38793
  ) });
38951
38794
  }
38952
38795
 
38796
+ // agent-gui/agentGuiNode/composer/TuttiBudgetPopover.tsx
38797
+ import { useState as useState42 } from "react";
38798
+ import {
38799
+ Popover as Popover6,
38800
+ PopoverContent as PopoverContent5,
38801
+ PopoverTrigger as PopoverTrigger4,
38802
+ Slider
38803
+ } from "@tutti-os/ui-system";
38804
+
38805
+ // app/renderer/assets/icons/tutti-intensity-handle-balance.png
38806
+ var tutti_intensity_handle_balance_default = "data:image/png;base64,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";
38807
+
38808
+ // app/renderer/assets/icons/tutti-intensity-handle-cost.png
38809
+ var tutti_intensity_handle_cost_default = "data:image/png;base64,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";
38810
+
38811
+ // app/renderer/assets/icons/tutti-intensity-handle-powerful.png
38812
+ var tutti_intensity_handle_powerful_default = "data:image/png;base64,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";
38813
+
38814
+ // agent-gui/agentGuiNode/composer/tuttiIntensityPreview.ts
38815
+ function projectTuttiIntensityPreview(intensity) {
38816
+ const normalized = Number.isFinite(intensity) ? Math.min(100, Math.max(0, Math.round(intensity))) : 50;
38817
+ const tier = normalized <= 33 ? "cost" : normalized <= 66 ? "balance" : "powerful";
38818
+ return {
38819
+ intensity: normalized,
38820
+ tier,
38821
+ modelStrength: tier === "cost" ? "economical" : tier === "balance" ? "balanced" : "mostCapable",
38822
+ agentCount: tier === "cost" ? "single" : tier === "balance" ? "smallGroup" : "maxParallel"
38823
+ };
38824
+ }
38825
+
38826
+ // agent-gui/agentGuiNode/composer/TuttiBudgetPopover.tsx
38827
+ import { jsx as jsx75, jsxs as jsxs55 } from "react/jsx-runtime";
38828
+ var tierTone = {
38829
+ cost: {
38830
+ sliderHandleUrl: tutti_intensity_handle_cost_default,
38831
+ valueClassName: "text-[var(--state-success)]"
38832
+ },
38833
+ balance: {
38834
+ sliderHandleUrl: tutti_intensity_handle_balance_default,
38835
+ valueClassName: "text-[var(--accent-codex)]"
38836
+ },
38837
+ powerful: {
38838
+ sliderHandleUrl: tutti_intensity_handle_powerful_default,
38839
+ valueClassName: "text-[var(--tutti-purple)]"
38840
+ }
38841
+ };
38842
+ function TuttiBudgetPopover({
38843
+ children,
38844
+ intensity,
38845
+ labels,
38846
+ onChange
38847
+ }) {
38848
+ const [open, setOpen] = useState42(false);
38849
+ const [draftIntensity, setDraftIntensity] = useState42(intensity);
38850
+ const preview = projectTuttiIntensityPreview(draftIntensity);
38851
+ const previewTone = tierTone[preview.tier];
38852
+ const modelStrength = {
38853
+ economical: labels.modelStrengthCost,
38854
+ balanced: labels.modelStrengthBalance,
38855
+ mostCapable: labels.modelStrengthPowerful
38856
+ }[preview.modelStrength];
38857
+ const agentCount = {
38858
+ single: labels.agentCountCost,
38859
+ smallGroup: labels.agentCountBalance,
38860
+ maxParallel: labels.agentCountPowerful
38861
+ }[preview.agentCount];
38862
+ return /* @__PURE__ */ jsxs55(
38863
+ Popover6,
38864
+ {
38865
+ open,
38866
+ onOpenChange: (nextOpen) => {
38867
+ if (nextOpen) {
38868
+ setDraftIntensity(intensity);
38869
+ }
38870
+ setOpen(nextOpen);
38871
+ },
38872
+ children: [
38873
+ /* @__PURE__ */ jsx75(PopoverTrigger4, { asChild: true, children }),
38874
+ /* @__PURE__ */ jsxs55(
38875
+ PopoverContent5,
38876
+ {
38877
+ align: "start",
38878
+ className: "nodrag",
38879
+ "data-agent-tutti-budget-popover": "true",
38880
+ onEscapeKeyDown: (event) => {
38881
+ event.preventDefault();
38882
+ setOpen(false);
38883
+ },
38884
+ children: [
38885
+ /* @__PURE__ */ jsx75("div", { className: "text-[13px] font-semibold text-[var(--text-primary)]", children: labels.title }),
38886
+ /* @__PURE__ */ jsxs55(
38887
+ "div",
38888
+ {
38889
+ className: "rounded-[8px] border border-[var(--line-2)] bg-[var(--transparency-block)] p-2.5",
38890
+ "data-agent-tutti-budget-preview": preview.tier,
38891
+ children: [
38892
+ /* @__PURE__ */ jsxs55("div", { className: "flex items-center justify-between gap-2 text-[12px] text-[var(--text-secondary)]", children: [
38893
+ /* @__PURE__ */ jsx75("span", { children: labels.intensityLabel }),
38894
+ /* @__PURE__ */ jsx75(
38895
+ "span",
38896
+ {
38897
+ className: "text-[var(--text-primary)] tabular-nums",
38898
+ "data-agent-tutti-budget-intensity-value": "true",
38899
+ children: draftIntensity
38900
+ }
38901
+ )
38902
+ ] }),
38903
+ /* @__PURE__ */ jsxs55("div", { className: "mt-3", children: [
38904
+ /* @__PURE__ */ jsx75(
38905
+ Slider,
38906
+ {
38907
+ "aria-label": labels.intensityLabel,
38908
+ className: `-mx-1 w-[calc(100%_+_8px)] [&_[data-slot=slider-range]]:bg-transparent [&_[data-slot=slider-track]]:mx-1 [&_[data-slot=slider-track]]:h-5 [&_[data-slot=slider-track]]:bg-[linear-gradient(90deg,var(--state-success)_0%,var(--accent-codex)_50%,var(--tutti-purple)_100%)] [&_[data-slot=slider-thumb]]:size-10 [&_[data-slot=slider-thumb]]:border-transparent [&_[data-slot=slider-thumb]]:bg-transparent [&_[data-slot=slider-thumb]]:bg-[image:var(--tutti-intensity-handle-url)] [&_[data-slot=slider-thumb]]:bg-contain [&_[data-slot=slider-thumb]]:bg-center [&_[data-slot=slider-thumb]]:bg-no-repeat [&_[data-slot=slider-thumb]]:shadow-none [&_[data-slot=slider-thumb]]:hover:ring-0 [&_[data-slot=slider-thumb]]:focus-visible:ring-0 [&_[data-slot=slider-thumb]]:-translate-y-1 [&_[data-slot=slider-thumb]]:cursor-grab [&_[data-slot=slider-thumb]]:active:cursor-grabbing`,
38909
+ style: {
38910
+ "--tutti-intensity-handle-url": `url("${previewTone.sliderHandleUrl}")`
38911
+ },
38912
+ "data-agent-tutti-budget-intensity-slider": "true",
38913
+ "data-agent-tutti-budget-slider-tone": preview.tier,
38914
+ max: 100,
38915
+ min: 0,
38916
+ step: 1,
38917
+ value: [draftIntensity],
38918
+ onValueChange: (values) => {
38919
+ const next = values[0] ?? draftIntensity;
38920
+ setDraftIntensity(next);
38921
+ onChange(next);
38922
+ }
38923
+ }
38924
+ ),
38925
+ /* @__PURE__ */ jsxs55("div", { className: "mt-3 flex items-center justify-between gap-2 text-[11px] font-medium", children: [
38926
+ /* @__PURE__ */ jsx75("span", { className: "text-[var(--state-success)]", children: labels.previewCost }),
38927
+ /* @__PURE__ */ jsx75("span", { className: "text-[var(--accent-codex)]", children: labels.previewBalance }),
38928
+ /* @__PURE__ */ jsx75("span", { className: "text-[var(--tutti-purple)]", children: labels.previewPowerful })
38929
+ ] })
38930
+ ] }),
38931
+ /* @__PURE__ */ jsx75(
38932
+ "div",
38933
+ {
38934
+ "aria-live": "polite",
38935
+ className: "mt-2 border-t border-[var(--line-2)] pt-2",
38936
+ children: /* @__PURE__ */ jsx75("span", { className: "text-[12px] font-medium text-[var(--text-secondary)]", children: labels.previewTitle })
38937
+ }
38938
+ ),
38939
+ /* @__PURE__ */ jsxs55("div", { className: "mt-2 grid grid-cols-2 gap-2 text-[11px]", children: [
38940
+ /* @__PURE__ */ jsxs55("div", { className: "min-w-0", children: [
38941
+ /* @__PURE__ */ jsx75("div", { className: "text-[var(--text-tertiary)]", children: labels.modelStrengthLabel }),
38942
+ /* @__PURE__ */ jsx75(
38943
+ "div",
38944
+ {
38945
+ className: `truncate text-[13px] font-medium ${previewTone.valueClassName}`,
38946
+ "data-agent-tutti-budget-model-strength": "true",
38947
+ children: modelStrength
38948
+ }
38949
+ )
38950
+ ] }),
38951
+ /* @__PURE__ */ jsxs55("div", { className: "min-w-0", children: [
38952
+ /* @__PURE__ */ jsx75("div", { className: "text-[var(--text-tertiary)]", children: labels.agentCountLabel }),
38953
+ /* @__PURE__ */ jsx75(
38954
+ "div",
38955
+ {
38956
+ className: "truncate text-[13px] font-medium text-[var(--text-primary)]",
38957
+ "data-agent-tutti-budget-agent-count": "true",
38958
+ children: agentCount
38959
+ }
38960
+ )
38961
+ ] })
38962
+ ] }),
38963
+ /* @__PURE__ */ jsx75("p", { className: "mt-2 mb-0 text-[11px] leading-[1.35] text-[var(--text-tertiary)]", children: labels.previewHint })
38964
+ ]
38965
+ }
38966
+ )
38967
+ ]
38968
+ }
38969
+ )
38970
+ ]
38971
+ }
38972
+ );
38973
+ }
38974
+
38953
38975
  // agent-gui/agentGuiNode/TuttiWorkflowDock.tsx
38954
- import { Fragment as Fragment23, jsx as jsx75, jsxs as jsxs55 } from "react/jsx-runtime";
38976
+ import { Fragment as Fragment23, jsx as jsx76, jsxs as jsxs56 } from "react/jsx-runtime";
38955
38977
  function countIssueTasks(issue, status) {
38956
38978
  return issue.tasks.filter((task) => task.status === status).length;
38957
38979
  }
@@ -38994,6 +39016,15 @@ function TuttiWorkflowDock({
38994
39016
  expanded: reviewPanelId !== null,
38995
39017
  reviewPanelId
38996
39018
  }));
39019
+ const [echoedIntensity, setEchoedIntensity] = useState43(null);
39020
+ if (echoedIntensity !== null && review?.intensity === echoedIntensity) {
39021
+ setEchoedIntensity(null);
39022
+ }
39023
+ const reviewDisplayIntensity = review !== null ? echoedIntensity ?? review.intensity : null;
39024
+ const handleIntensityChange = (value) => {
39025
+ setEchoedIntensity(value);
39026
+ onIntensityChange(value);
39027
+ };
38997
39028
  if (reviewPanelId !== null && reviewPanelId !== disclosure.reviewPanelId) {
38998
39029
  setDisclosure({ expanded: true, reviewPanelId });
38999
39030
  }
@@ -39004,35 +39035,46 @@ function TuttiWorkflowDock({
39004
39035
  };
39005
39036
  const title = review !== null ? labels.reviewTitle : phase.kind === "materializing" ? labels.materializingTitle : execution !== null ? execution.issue.title : labels.errorTitle;
39006
39037
  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(
39038
+ 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" });
39039
+ const reviewTier = reviewDisplayIntensity !== null ? projectTuttiIntensityPreview(reviewDisplayIntensity).tier : null;
39040
+ const reviewTierLabel = reviewTier !== null ? {
39041
+ cost: intensityPopoverLabels.previewCost,
39042
+ balance: intensityPopoverLabels.previewBalance,
39043
+ powerful: intensityPopoverLabels.previewPowerful
39044
+ }[reviewTier] : null;
39045
+ const actions = review !== null ? /* @__PURE__ */ jsxs56(Fragment23, { children: [
39046
+ /* @__PURE__ */ jsx76(
39010
39047
  TuttiBudgetPopover,
39011
39048
  {
39012
- intensity: review.intensity,
39049
+ intensity: reviewDisplayIntensity ?? review.intensity,
39013
39050
  labels: intensityPopoverLabels,
39014
- onConfirm: onIntensityChange,
39015
- children: /* @__PURE__ */ jsxs55(
39051
+ onChange: handleIntensityChange,
39052
+ children: /* @__PURE__ */ jsxs56(
39016
39053
  "button",
39017
39054
  {
39018
39055
  type: "button",
39019
39056
  disabled: review.submitting,
39020
39057
  title: intensityPopoverLabels.title,
39021
39058
  "aria-label": intensityPopoverLabels.intensityLabel,
39059
+ "data-agent-tutti-tier": reviewTier ?? void 0,
39022
39060
  "data-testid": "agent-gui-tutti-workflow-intensity",
39023
39061
  className: cn(
39024
- "flex items-center gap-1",
39025
- review.intensityDiverged && "text-[var(--tutti-purple)]"
39062
+ "flex items-center gap-1 rounded-md px-1.5 py-0.5 transition-colors",
39063
+ "hover:bg-[var(--transparency-hover)]",
39064
+ "data-[state=open]:bg-[color-mix(in_srgb,var(--tutti-purple)_12%,transparent)] data-[state=open]:text-[var(--tutti-purple)]"
39026
39065
  ),
39027
39066
  children: [
39028
- /* @__PURE__ */ jsx75(Gauge2, { "aria-hidden": true, className: "size-3.5" }),
39029
- /* @__PURE__ */ jsx75("span", { className: "text-[11px] tabular-nums", children: review.intensity })
39067
+ /* @__PURE__ */ jsx76(Gauge2, { "aria-hidden": true, className: "size-3.5" }),
39068
+ /* @__PURE__ */ jsxs56("span", { className: "flex items-center gap-0.5", children: [
39069
+ reviewTierLabel !== null ? /* @__PURE__ */ jsx76("span", { className: "text-[11px]", children: reviewTierLabel }) : null,
39070
+ /* @__PURE__ */ jsx76("span", { className: "inline-block w-[3ch] text-left text-[11px] tabular-nums", children: reviewDisplayIntensity ?? review.intensity })
39071
+ ] })
39030
39072
  ]
39031
39073
  }
39032
39074
  )
39033
39075
  }
39034
39076
  ),
39035
- /* @__PURE__ */ jsx75(
39077
+ /* @__PURE__ */ jsx76(
39036
39078
  "button",
39037
39079
  {
39038
39080
  type: "button",
@@ -39041,10 +39083,11 @@ function TuttiWorkflowDock({
39041
39083
  title: labels.cancel,
39042
39084
  "aria-label": labels.cancel,
39043
39085
  "data-testid": "agent-gui-tutti-workflow-cancel",
39044
- children: /* @__PURE__ */ jsx75(X7, { "aria-hidden": true, className: "size-3.5" })
39086
+ className: "flex size-5 items-center justify-center rounded-md transition-colors hover:bg-[var(--transparency-hover)]",
39087
+ children: /* @__PURE__ */ jsx76(X7, { "aria-hidden": true, className: "size-3.5" })
39045
39088
  }
39046
39089
  )
39047
- ] }) : phase.kind === "error" && phase.retryable ? /* @__PURE__ */ jsxs55(
39090
+ ] }) : phase.kind === "error" && phase.retryable ? /* @__PURE__ */ jsxs56(
39048
39091
  "button",
39049
39092
  {
39050
39093
  type: "button",
@@ -39053,23 +39096,25 @@ function TuttiWorkflowDock({
39053
39096
  "aria-label": labels.retry,
39054
39097
  "data-testid": "agent-gui-tutti-workflow-retry",
39055
39098
  children: [
39056
- /* @__PURE__ */ jsx75(RotateCcw, { "aria-hidden": true, className: "size-3.5" }),
39099
+ /* @__PURE__ */ jsx76(RotateCcw, { "aria-hidden": true, className: "size-3.5" }),
39057
39100
  labels.retry
39058
39101
  ]
39059
39102
  }
39060
39103
  ) : null;
39061
- return /* @__PURE__ */ jsx75(
39104
+ return /* @__PURE__ */ jsx76(
39062
39105
  AgentComposerDisclosureCard,
39063
39106
  {
39064
39107
  actions,
39108
+ bannerClassName: AgentGUIChrome_styles_default.tuttiWorkflowBanner,
39065
39109
  expanded: disclosure.expanded,
39066
39110
  icon,
39067
39111
  labels: { collapse: labels.collapse, expand: labels.expand },
39112
+ panelClassName: AgentGUIChrome_styles_default.tuttiWorkflowPanel,
39068
39113
  onExpandedChange: setExpanded,
39069
39114
  summary,
39070
39115
  testId: "agent-gui-tutti-workflow-dock",
39071
39116
  title,
39072
- children: review !== null ? /* @__PURE__ */ jsx75(
39117
+ children: review !== null ? /* @__PURE__ */ jsx76(
39073
39118
  TuttiModePlanPanel,
39074
39119
  {
39075
39120
  assignmentCatalog,
@@ -39080,23 +39125,23 @@ function TuttiWorkflowDock({
39080
39125
  submitting: review.submitting,
39081
39126
  onAssignmentDraftChange
39082
39127
  }
39083
- ) : phase.kind === "materializing" ? /* @__PURE__ */ jsxs55(
39128
+ ) : phase.kind === "materializing" ? /* @__PURE__ */ jsxs56(
39084
39129
  "div",
39085
39130
  {
39086
39131
  className: "grid min-h-28 place-items-center gap-2 text-center text-sm text-muted-foreground",
39087
39132
  role: "status",
39088
39133
  children: [
39089
- /* @__PURE__ */ jsx75(
39134
+ /* @__PURE__ */ jsx76(
39090
39135
  LoaderCircle,
39091
39136
  {
39092
39137
  "aria-hidden": true,
39093
39138
  className: "size-5 animate-spin text-[var(--tutti-purple)]"
39094
39139
  }
39095
39140
  ),
39096
- /* @__PURE__ */ jsx75("span", { children: labels.materializingHint })
39141
+ /* @__PURE__ */ jsx76("span", { children: labels.materializingHint })
39097
39142
  ]
39098
39143
  }
39099
- ) : execution !== null ? /* @__PURE__ */ jsx75(
39144
+ ) : execution !== null ? /* @__PURE__ */ jsx76(
39100
39145
  TuttiPlanIssuePanel,
39101
39146
  {
39102
39147
  embedded: true,
@@ -39107,7 +39152,7 @@ function TuttiWorkflowDock({
39107
39152
  onOpenIssue,
39108
39153
  onOpenTask
39109
39154
  }
39110
- ) : /* @__PURE__ */ jsx75(
39155
+ ) : /* @__PURE__ */ jsx76(
39111
39156
  "div",
39112
39157
  {
39113
39158
  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 +39165,7 @@ function TuttiWorkflowDock({
39120
39165
  }
39121
39166
 
39122
39167
  // agent-gui/agentGuiNode/view/AgentGUIBottomDockPane.tsx
39123
- import { Fragment as Fragment24, jsx as jsx76, jsxs as jsxs56 } from "react/jsx-runtime";
39168
+ import { Fragment as Fragment24, jsx as jsx77, jsxs as jsxs57 } from "react/jsx-runtime";
39124
39169
  var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39125
39170
  bottomDockRef,
39126
39171
  showScrollToBottom,
@@ -39160,11 +39205,11 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39160
39205
  const goalIsOptimistic = sessionChrome.rawState?.goalIsOptimistic === true;
39161
39206
  const showGoalBanner = isGoalBannerVisible(goalObjective, goalStatus);
39162
39207
  const workflowPhase = tuttiWorkflowDock.phase;
39163
- return /* @__PURE__ */ jsx76(
39208
+ return /* @__PURE__ */ jsx77(
39164
39209
  AgentComposerRegion,
39165
39210
  {
39166
39211
  regionRef: bottomDockRef,
39167
- floating: showScrollToBottom ? /* @__PURE__ */ jsx76(
39212
+ floating: showScrollToBottom ? /* @__PURE__ */ jsx77(
39168
39213
  "button",
39169
39214
  {
39170
39215
  type: "button",
@@ -39177,15 +39222,15 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39177
39222
  title: scrollToBottomLabel,
39178
39223
  onPointerDown: (event) => event.stopPropagation(),
39179
39224
  onClick: onScrollToBottom,
39180
- children: /* @__PURE__ */ jsx76(ChevronsDown, { "aria-hidden": "true", size: 15, strokeWidth: 2.2 })
39225
+ children: /* @__PURE__ */ jsx77(ChevronsDown, { "aria-hidden": "true", size: 15, strokeWidth: 2.2 })
39181
39226
  }
39182
39227
  ) : null,
39183
- lifted: bottomDockLiftedPrompt ? /* @__PURE__ */ jsx76(
39228
+ lifted: bottomDockLiftedPrompt ? /* @__PURE__ */ jsx77(
39184
39229
  "div",
39185
39230
  {
39186
39231
  className: AgentGUINode_styles_default.bottomDockPrompt,
39187
39232
  "data-testid": "agent-gui-bottom-dock-active-prompt",
39188
- children: /* @__PURE__ */ jsx76(
39233
+ children: /* @__PURE__ */ jsx77(
39189
39234
  AgentInteractivePromptSurface,
39190
39235
  {
39191
39236
  prompt: bottomDockLiftedPrompt,
@@ -39200,8 +39245,8 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39200
39245
  )
39201
39246
  }
39202
39247
  ) : null,
39203
- accessories: /* @__PURE__ */ jsxs56(Fragment24, { children: [
39204
- inlineNoticeChrome ? /* @__PURE__ */ jsx76(
39248
+ accessories: /* @__PURE__ */ jsxs57(Fragment24, { children: [
39249
+ inlineNoticeChrome ? /* @__PURE__ */ jsx77(
39205
39250
  AgentSessionChrome,
39206
39251
  {
39207
39252
  chrome: inlineNoticeChrome,
@@ -39213,7 +39258,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39213
39258
  labels: chromeLabels
39214
39259
  }
39215
39260
  ) : null,
39216
- /* @__PURE__ */ jsx76(
39261
+ /* @__PURE__ */ jsx77(
39217
39262
  AgentSessionChrome,
39218
39263
  {
39219
39264
  chrome: sessionChrome,
@@ -39225,7 +39270,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39225
39270
  labels: chromeLabels
39226
39271
  }
39227
39272
  ),
39228
- showGoalBanner ? /* @__PURE__ */ jsx76(
39273
+ showGoalBanner ? /* @__PURE__ */ jsx77(
39229
39274
  AgentGoalBanner,
39230
39275
  {
39231
39276
  objective: goalObjective,
@@ -39240,7 +39285,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39240
39285
  onClearGoal: () => onGoalControl("clear")
39241
39286
  }
39242
39287
  ) : null,
39243
- workflowPhase ? /* @__PURE__ */ jsx76(
39288
+ workflowPhase ? /* @__PURE__ */ jsx77(
39244
39289
  TuttiWorkflowDock,
39245
39290
  {
39246
39291
  assignmentCatalog: tuttiWorkflowDock.assignmentCatalog,
@@ -39260,9 +39305,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39260
39305
  agentCountLabel: composerProps.labels.tuttiBudgetAgentCountLabel,
39261
39306
  agentCountCost: composerProps.labels.tuttiBudgetAgentCountCost,
39262
39307
  agentCountBalance: composerProps.labels.tuttiBudgetAgentCountBalance,
39263
- agentCountPowerful: composerProps.labels.tuttiBudgetAgentCountPowerful,
39264
- confirm: composerProps.labels.tuttiBudgetConfirm,
39265
- cancel: composerProps.labels.tuttiBudgetCancel
39308
+ agentCountPowerful: composerProps.labels.tuttiBudgetAgentCountPowerful
39266
39309
  },
39267
39310
  labels: tuttiWorkflowDockLabels,
39268
39311
  phase: workflowPhase,
@@ -39279,12 +39322,12 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39279
39322
  }
39280
39323
  ) : null
39281
39324
  ] }),
39282
- primary: bottomDockReplacementPrompt ? /* @__PURE__ */ jsx76(
39325
+ primary: bottomDockReplacementPrompt ? /* @__PURE__ */ jsx77(
39283
39326
  "div",
39284
39327
  {
39285
39328
  className: AgentGUINode_styles_default.bottomDockPrompt,
39286
39329
  "data-testid": "agent-gui-bottom-dock-active-prompt",
39287
- children: /* @__PURE__ */ jsx76(
39330
+ children: /* @__PURE__ */ jsx77(
39288
39331
  AgentInteractivePromptSurface,
39289
39332
  {
39290
39333
  prompt: bottomDockReplacementPrompt,
@@ -39298,7 +39341,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
39298
39341
  }
39299
39342
  )
39300
39343
  }
39301
- ) : /* @__PURE__ */ jsx76(AgentComposer, { ...composerProps })
39344
+ ) : /* @__PURE__ */ jsx77(AgentComposer, { ...composerProps })
39302
39345
  }
39303
39346
  );
39304
39347
  });
@@ -39311,14 +39354,14 @@ import {
39311
39354
  ToastTitle,
39312
39355
  ToastViewport
39313
39356
  } from "@tutti-os/ui-system";
39314
- import { jsx as jsx77, jsxs as jsxs57 } from "react/jsx-runtime";
39357
+ import { jsx as jsx78, jsxs as jsxs58 } from "react/jsx-runtime";
39315
39358
  function AgentGUIContentToast({
39316
39359
  insetTopPx,
39317
39360
  message
39318
39361
  }) {
39319
39362
  const [open, setOpen] = useState44(true);
39320
- return /* @__PURE__ */ jsxs57(ToastProvider, { children: [
39321
- /* @__PURE__ */ jsx77(
39363
+ return /* @__PURE__ */ jsxs58(ToastProvider, { children: [
39364
+ /* @__PURE__ */ jsx78(
39322
39365
  ToastRoot,
39323
39366
  {
39324
39367
  open,
@@ -39326,10 +39369,10 @@ function AgentGUIContentToast({
39326
39369
  "data-testid": "agent-gui-content-toast",
39327
39370
  variant: "default",
39328
39371
  onOpenChange: setOpen,
39329
- children: /* @__PURE__ */ jsx77(ToastTitle, { children: message })
39372
+ children: /* @__PURE__ */ jsx78(ToastTitle, { children: message })
39330
39373
  }
39331
39374
  ),
39332
- /* @__PURE__ */ jsx77(
39375
+ /* @__PURE__ */ jsx78(
39333
39376
  ToastViewport,
39334
39377
  {
39335
39378
  className: "nodrag tsh-desktop-no-drag absolute left-0 w-full translate-x-0 px-4 [-webkit-app-region:no-drag]",
@@ -39348,7 +39391,7 @@ import { ScrollArea as ScrollArea3 } from "@tutti-os/ui-system/components";
39348
39391
 
39349
39392
  // agent-gui/agentGuiNode/view/AgentGUIConversationTimelinePane.tsx
39350
39393
  import { memo as memo11 } from "react";
39351
- import { Fragment as Fragment25, jsx as jsx78, jsxs as jsxs58 } from "react/jsx-runtime";
39394
+ import { Fragment as Fragment25, jsx as jsx79, jsxs as jsxs59 } from "react/jsx-runtime";
39352
39395
  var EMPTY_WORKSPACE_APP_ICONS3 = [];
39353
39396
  var AgentGUIConversationTimelinePane = memo11(
39354
39397
  function AgentGUIConversationTimelinePane2({
@@ -39368,17 +39411,17 @@ var AgentGUIConversationTimelinePane = memo11(
39368
39411
  labels
39369
39412
  }) {
39370
39413
  "use memo";
39371
- return /* @__PURE__ */ jsxs58(Fragment25, { children: [
39372
- isLoadingOlderMessages && !isLoading ? /* @__PURE__ */ jsx78(
39414
+ return /* @__PURE__ */ jsxs59(Fragment25, { children: [
39415
+ isLoadingOlderMessages && !isLoading ? /* @__PURE__ */ jsx79(
39373
39416
  "div",
39374
39417
  {
39375
39418
  className: "mx-auto flex h-8 items-center justify-center text-[12px] text-[var(--text-secondary)]",
39376
39419
  "data-testid": "agent-gui-older-messages-loading",
39377
39420
  role: "status",
39378
- children: /* @__PURE__ */ jsx78("span", { className: "tsh-inline-loading-ellipsis", children: loadingLabel })
39421
+ children: /* @__PURE__ */ jsx79("span", { className: "tsh-inline-loading-ellipsis", children: loadingLabel })
39379
39422
  }
39380
39423
  ) : null,
39381
- /* @__PURE__ */ jsx78(
39424
+ /* @__PURE__ */ jsx79(
39382
39425
  AgentConversationFlow,
39383
39426
  {
39384
39427
  conversation,
@@ -39415,7 +39458,7 @@ function setTimelineScrollTopWithUserTransition(element, top) {
39415
39458
  }
39416
39459
 
39417
39460
  // agent-gui/agentGuiNode/view/AgentGUIDetailTimeline.tsx
39418
- import { jsx as jsx79 } from "react/jsx-runtime";
39461
+ import { jsx as jsx80 } from "react/jsx-runtime";
39419
39462
  var TIMELINE_CONTENT_STYLE = {
39420
39463
  width: "100%",
39421
39464
  minWidth: "100%",
@@ -39443,7 +39486,7 @@ var AgentGUIDetailTimeline = memo12(function AgentGUIDetailTimeline2({
39443
39486
  workspaceAppIcons
39444
39487
  }) {
39445
39488
  "use memo";
39446
- return /* @__PURE__ */ jsx79(
39489
+ return /* @__PURE__ */ jsx80(
39447
39490
  ScrollArea3,
39448
39491
  {
39449
39492
  scrollbarMode: "native",
@@ -39453,7 +39496,7 @@ var AgentGUIDetailTimeline = memo12(function AgentGUIDetailTimeline2({
39453
39496
  viewportTestId: "agent-gui-timeline",
39454
39497
  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
39498
  viewportContentStyle: TIMELINE_CONTENT_STYLE,
39456
- children: hasActiveConversation ? /* @__PURE__ */ jsx79(
39499
+ children: hasActiveConversation ? /* @__PURE__ */ jsx80(
39457
39500
  AgentGUIConversationTimelinePane,
39458
39501
  {
39459
39502
  conversation,
@@ -39622,6 +39665,10 @@ function useAgentGUIDetailScroll(input) {
39622
39665
  }
39623
39666
  return;
39624
39667
  }
39668
+ if (element.closest(`.${AgentGUINode_styles_default.composerDisclosurePanel}`)) {
39669
+ floatingVisualTop = Math.min(floatingVisualTop, rect.top);
39670
+ return;
39671
+ }
39625
39672
  floatingVisualTop = Math.min(floatingVisualTop, rect.top);
39626
39673
  timelineVisualTop = Math.min(timelineVisualTop, rect.top);
39627
39674
  });
@@ -39868,10 +39915,10 @@ function useAgentGUIDetailScroll(input) {
39868
39915
  import { useMemo as useMemo43 } from "react";
39869
39916
 
39870
39917
  // app/renderer/components/icons/UnavailableChatIcon.tsx
39871
- import { jsx as jsx80 } from "react/jsx-runtime";
39918
+ import { jsx as jsx81 } from "react/jsx-runtime";
39872
39919
  function UnavailableChatIcon(props) {
39873
39920
  "use memo";
39874
- return /* @__PURE__ */ jsx80(
39921
+ return /* @__PURE__ */ jsx81(
39875
39922
  "svg",
39876
39923
  {
39877
39924
  xmlns: "http://www.w3.org/2000/svg",
@@ -39879,7 +39926,7 @@ function UnavailableChatIcon(props) {
39879
39926
  fill: "currentColor",
39880
39927
  "aria-hidden": true,
39881
39928
  ...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" })
39929
+ 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
39930
  }
39884
39931
  );
39885
39932
  }
@@ -39925,7 +39972,7 @@ function useAgentGUITimelineTransition(input) {
39925
39972
  }
39926
39973
 
39927
39974
  // agent-gui/agentGuiNode/view/useAgentGUIDetailModel.tsx
39928
- import { Fragment as Fragment26, jsx as jsx81, jsxs as jsxs59 } from "react/jsx-runtime";
39975
+ import { Fragment as Fragment26, jsx as jsx82, jsxs as jsxs60 } from "react/jsx-runtime";
39929
39976
  function resolveTuttiModeUpdateInlineNotice(input) {
39930
39977
  if (input.status !== "failed" && input.status !== "uncertain") return null;
39931
39978
  const localizedMessage = input.status === "failed" ? input.failedMessage : input.uncertainMessage;
@@ -40081,7 +40128,17 @@ function useAgentGUIDetailModel(input) {
40081
40128
  const hasNonRetryableRecoveryFailure = sessionChrome.recovery?.kind === "failed" && sessionChrome.recovery.canRetry === false || sessionChrome.recovery?.kind === "resume-unavailable";
40082
40129
  const runtimeBlocked = viewModel.readiness.sessionRuntimeBlocked || viewModel.readiness.targetConnectionBlocked;
40083
40130
  const submitDisabled = hasNonRetryableRecoveryFailure || isCollaboratorConversation || runtimeBlocked || !viewModel.composer.canSubmit && !canQueueWhileBusy;
40084
- const composerDisabled = isCollaboratorConversation || !runtimeBlocked && (hasNonRetryableRecoveryFailure || !canQueueWhileBusy && (viewModel.interaction.pendingApproval !== null || viewModel.interaction.pendingInteractivePrompt !== null || viewModel.composer.isSubmitting || viewModel.composer.isInterrupting || viewModel.composer.isCreatingConversation));
40131
+ const composerDisabled = resolveAgentGUIComposerDisabled({
40132
+ canQueueWhileBusy,
40133
+ hasNonRetryableRecoveryFailure,
40134
+ isCollaboratorConversation,
40135
+ isCreatingConversation: viewModel.composer.isCreatingConversation,
40136
+ isInterrupting: viewModel.composer.isInterrupting,
40137
+ isSubmitting: viewModel.composer.isSubmitting,
40138
+ pendingApproval: viewModel.interaction.pendingApproval !== null,
40139
+ pendingInteractivePrompt: viewModel.interaction.pendingInteractivePrompt !== null,
40140
+ runtimeBlocked
40141
+ });
40085
40142
  const stopControl = resolveAgentGUIStopControl({
40086
40143
  hasPendingApproval: viewModel.interaction.pendingApproval !== null,
40087
40144
  hasPendingInteractivePrompt: viewModel.interaction.pendingInteractivePrompt !== null,
@@ -40113,17 +40170,17 @@ function useAgentGUIDetailModel(input) {
40113
40170
  ]
40114
40171
  );
40115
40172
  const conversationFlowEmpty = useMemo43(
40116
- () => showUnavailableChatEmpty ? /* @__PURE__ */ jsxs59(
40173
+ () => showUnavailableChatEmpty ? /* @__PURE__ */ jsxs60(
40117
40174
  "div",
40118
40175
  {
40119
40176
  className: AgentGUINode_styles_default.unavailableChatEmpty,
40120
40177
  "data-testid": "agent-gui-unavailable-chat-empty",
40121
40178
  children: [
40122
- /* @__PURE__ */ jsx81(UnavailableChatIcon, { className: AgentGUINode_styles_default.unavailableChatEmptyIcon }),
40123
- /* @__PURE__ */ jsx81("span", { className: AgentGUINode_styles_default.unavailableChatEmptyText, children: labels.conversationUnavailable })
40179
+ /* @__PURE__ */ jsx82(UnavailableChatIcon, { className: AgentGUINode_styles_default.unavailableChatEmptyIcon }),
40180
+ /* @__PURE__ */ jsx82("span", { className: AgentGUINode_styles_default.unavailableChatEmptyText, children: labels.conversationUnavailable })
40124
40181
  ]
40125
40182
  }
40126
- ) : /* @__PURE__ */ jsx81(Fragment26, {}),
40183
+ ) : /* @__PURE__ */ jsx82(Fragment26, {}),
40127
40184
  [labels.conversationUnavailable, showUnavailableChatEmpty]
40128
40185
  );
40129
40186
  const chromeLabels = useMemo43(
@@ -40273,8 +40330,6 @@ function useAgentGUIDetailModel(input) {
40273
40330
  tuttiBudgetAgentCountCost: labels.tuttiBudgetAgentCountCost,
40274
40331
  tuttiBudgetAgentCountBalance: labels.tuttiBudgetAgentCountBalance,
40275
40332
  tuttiBudgetAgentCountPowerful: labels.tuttiBudgetAgentCountPowerful,
40276
- tuttiBudgetConfirm: labels.tuttiBudgetConfirm,
40277
- tuttiBudgetCancel: labels.tuttiBudgetCancel,
40278
40333
  planModeDescription: labels.planModeDescription,
40279
40334
  planModeOnLabel: labels.planModeOnLabel,
40280
40335
  planModeOffLabel: labels.planModeOffLabel,
@@ -40432,8 +40487,6 @@ function useAgentGUIDetailModel(input) {
40432
40487
  labels.tuttiBudgetAgentCountCost,
40433
40488
  labels.tuttiBudgetAgentCountBalance,
40434
40489
  labels.tuttiBudgetAgentCountPowerful,
40435
- labels.tuttiBudgetConfirm,
40436
- labels.tuttiBudgetCancel,
40437
40490
  labels.planModeDescription,
40438
40491
  labels.planModeOffLabel,
40439
40492
  labels.planModeOnLabel,
@@ -40794,7 +40847,7 @@ function useAgentGUITuttiWorkflow(input) {
40794
40847
  }
40795
40848
 
40796
40849
  // agent-gui/agentGuiNode/view/AgentGUIDetailPane.tsx
40797
- import { Fragment as Fragment27, jsx as jsx82, jsxs as jsxs60 } from "react/jsx-runtime";
40850
+ import { Fragment as Fragment27, jsx as jsx83, jsxs as jsxs61 } from "react/jsx-runtime";
40798
40851
  var EMPTY_WORKSPACE_APP_ICONS4 = [];
40799
40852
  var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
40800
40853
  shell,
@@ -41124,7 +41177,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41124
41177
  onSettingsChange: updateComposerSettings,
41125
41178
  onRetryComposerOptions: retryComposerOptions,
41126
41179
  // Only wire Tutti Mode callbacks when the host explicitly enables the
41127
- // capability. Empty hero toggle keys off callback presence; slash/badge
41180
+ // capability. Composer footer chip keys off callback presence; slash/badge
41128
41181
  // use capabilityMenuState.tuttiMode.enabled === true (fail closed).
41129
41182
  onTuttiModeChange: capabilityMenuState?.tuttiMode?.enabled === true ? tuttiWorkflowComposer.setTuttiModeActiveAndSettleReview : void 0,
41130
41183
  onTuttiModeOrchestrationIntensityChange: capabilityMenuState?.tuttiMode?.enabled === true ? setTuttiModeOrchestrationIntensity : void 0,
@@ -41287,7 +41340,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41287
41340
  timelineScrollAnchorRef,
41288
41341
  viewModel
41289
41342
  });
41290
- const homeContent = !hasActiveConversation ? shouldRenderProviderUnavailableState && disabledProviderTarget ? /* @__PURE__ */ jsx82(Fragment27, { children: renderProviderUnavailableState?.({
41343
+ const homeContent = !hasActiveConversation ? shouldRenderProviderUnavailableState && disabledProviderTarget ? /* @__PURE__ */ jsx83(Fragment27, { children: renderProviderUnavailableState?.({
41291
41344
  provider: disabledProviderTarget.provider,
41292
41345
  providerLabel: labels.emptyProviderForProvider?.(
41293
41346
  disabledProviderTarget.provider
@@ -41297,7 +41350,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41297
41350
  target: disabledProviderTarget,
41298
41351
  iconUrl: resolveAgentGUIHeroIconUrl2(disabledProviderTarget.provider),
41299
41352
  unavailableReason: disabledProviderTarget.unavailableReason ?? null
41300
- }) }) : /* @__PURE__ */ jsx82(
41353
+ }) }) : /* @__PURE__ */ jsx83(
41301
41354
  AgentGUIEmptyHomePane,
41302
41355
  {
41303
41356
  provider: emptyHeroProvider,
@@ -41322,14 +41375,14 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41322
41375
  onSelectSuggestionAction: handleHomeSuggestionAction
41323
41376
  }
41324
41377
  ) : null;
41325
- return /* @__PURE__ */ jsxs60(
41378
+ return /* @__PURE__ */ jsxs61(
41326
41379
  "main",
41327
41380
  {
41328
41381
  className: AgentGUINode_styles_default.detail,
41329
41382
  "aria-busy": timelineInteractionLocked || void 0,
41330
41383
  inert: timelineInteractionLocked,
41331
41384
  children: [
41332
- viewModel.operations.goalClearNoticeSequence > 0 ? /* @__PURE__ */ jsx82(
41385
+ viewModel.operations.goalClearNoticeSequence > 0 ? /* @__PURE__ */ jsx83(
41333
41386
  AgentGUIContentToast,
41334
41387
  {
41335
41388
  insetTopPx: 16,
@@ -41337,7 +41390,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41337
41390
  },
41338
41391
  viewModel.operations.goalClearNoticeSequence
41339
41392
  ) : null,
41340
- /* @__PURE__ */ jsx82(
41393
+ /* @__PURE__ */ jsx83(
41341
41394
  AgentGUIDetailTimeline,
41342
41395
  {
41343
41396
  availableSkills: viewModel.composer.availableSkills,
@@ -41359,7 +41412,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41359
41412
  workspaceAppIcons
41360
41413
  }
41361
41414
  ),
41362
- hasActiveConversation ? /* @__PURE__ */ jsx82(
41415
+ hasActiveConversation ? /* @__PURE__ */ jsx83(
41363
41416
  AgentGUIBottomDockPane,
41364
41417
  {
41365
41418
  bottomDockRef,
@@ -41398,7 +41451,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
41398
41451
  // agent-gui/agentGuiNode/view/AgentGUIRenameConversationDialog.tsx
41399
41452
  import { memo as memo14, useCallback as useCallback62, useEffect as useEffect36, useRef as useRef54, useState as useState49 } from "react";
41400
41453
  import { ConfirmationDialog as ConfirmationDialog4, Input as Input4 } from "@tutti-os/ui-system";
41401
- import { jsx as jsx83, jsxs as jsxs61 } from "react/jsx-runtime";
41454
+ import { jsx as jsx84, jsxs as jsxs62 } from "react/jsx-runtime";
41402
41455
  var AgentGUIRenameConversationDialog = memo14(
41403
41456
  function AgentGUIRenameConversationDialog2({
41404
41457
  conversation,
@@ -41454,7 +41507,7 @@ var AgentGUIRenameConversationDialog = memo14(
41454
41507
  setIsSaving(false);
41455
41508
  });
41456
41509
  }, [conversation, onOpenChange, onRename, trimmedTitle]);
41457
- return /* @__PURE__ */ jsx83(
41510
+ return /* @__PURE__ */ jsx84(
41458
41511
  ConfirmationDialog4,
41459
41512
  {
41460
41513
  cancelLabel: labels.cancel,
@@ -41463,8 +41516,8 @@ var AgentGUIRenameConversationDialog = memo14(
41463
41516
  confirmDisabled: !trimmedTitle,
41464
41517
  confirmLabel: labels.renameSessionSave,
41465
41518
  description: labels.renameSessionDescription,
41466
- footer: /* @__PURE__ */ jsxs61("div", { className: "flex justify-end gap-2", children: [
41467
- /* @__PURE__ */ jsx83(
41519
+ footer: /* @__PURE__ */ jsxs62("div", { className: "flex justify-end gap-2", children: [
41520
+ /* @__PURE__ */ jsx84(
41468
41521
  Button,
41469
41522
  {
41470
41523
  disabled: isSaving,
@@ -41502,7 +41555,7 @@ var AgentGUIRenameConversationDialog = memo14(
41502
41555
  children: labels.cancel
41503
41556
  }
41504
41557
  ),
41505
- /* @__PURE__ */ jsx83(
41558
+ /* @__PURE__ */ jsx84(
41506
41559
  Button,
41507
41560
  {
41508
41561
  className: "shadow-none",
@@ -41557,7 +41610,7 @@ var AgentGUIRenameConversationDialog = memo14(
41557
41610
  title: labels.renameSessionTitle,
41558
41611
  onConfirm: confirmRename,
41559
41612
  onOpenChange,
41560
- children: /* @__PURE__ */ jsx83(
41613
+ children: /* @__PURE__ */ jsx84(
41561
41614
  Input4,
41562
41615
  {
41563
41616
  ref: inputRef,
@@ -41585,7 +41638,7 @@ import {
41585
41638
  ReferenceSourcePicker,
41586
41639
  WorkspaceFileReferencePicker
41587
41640
  } from "@tutti-os/workspace-file-reference/ui";
41588
- import { jsx as jsx84 } from "react/jsx-runtime";
41641
+ import { jsx as jsx85 } from "react/jsx-runtime";
41589
41642
  function AgentGUIReferencePickerSurface({
41590
41643
  aggregator,
41591
41644
  copy,
@@ -41603,7 +41656,7 @@ function AgentGUIReferencePickerSurface({
41603
41656
  onConfirm,
41604
41657
  onConfirmBundles
41605
41658
  }) {
41606
- return aggregator ? /* @__PURE__ */ jsx84(
41659
+ return aggregator ? /* @__PURE__ */ jsx85(
41607
41660
  ReferenceSourcePicker,
41608
41661
  {
41609
41662
  aggregator,
@@ -41620,7 +41673,7 @@ function AgentGUIReferencePickerSurface({
41620
41673
  onConfirm,
41621
41674
  onConfirmBundles
41622
41675
  }
41623
- ) : /* @__PURE__ */ jsx84(
41676
+ ) : /* @__PURE__ */ jsx85(
41624
41677
  WorkspaceFileReferencePicker,
41625
41678
  {
41626
41679
  copy,
@@ -41637,7 +41690,7 @@ function AgentGUIReferencePickerSurface({
41637
41690
 
41638
41691
  // agent-gui/agentGuiNode/view/AgentTargetSetupRoot.tsx
41639
41692
  import { useCallback as useCallback63, useMemo as useMemo45 } from "react";
41640
- import { jsx as jsx85, jsxs as jsxs62 } from "react/jsx-runtime";
41693
+ import { jsx as jsx86, jsxs as jsxs63 } from "react/jsx-runtime";
41641
41694
  function useAgentTargetSetupRoot(input) {
41642
41695
  const { preferences } = useAgentGUIProviderRailPreferences();
41643
41696
  const homeTargetProjection = useMemo45(
@@ -41681,9 +41734,9 @@ function AgentTargetSetupRoot({
41681
41734
  controller,
41682
41735
  openEnvironmentSetup
41683
41736
  }) {
41684
- return /* @__PURE__ */ jsx85(AgentEnvPanelActionProvider, { openPanel: openEnvironmentSetup, children: /* @__PURE__ */ jsxs62(AgentTargetSetupControllerProvider, { controller, children: [
41737
+ return /* @__PURE__ */ jsx86(AgentEnvPanelActionProvider, { openPanel: openEnvironmentSetup, children: /* @__PURE__ */ jsxs63(AgentTargetSetupControllerProvider, { controller, children: [
41685
41738
  children,
41686
- /* @__PURE__ */ jsx85(
41739
+ /* @__PURE__ */ jsx86(
41687
41740
  AgentTargetSetupGate,
41688
41741
  {
41689
41742
  carouselMountedExternally: false,
@@ -42246,7 +42299,7 @@ function useAgentGUIExternalRequests(input) {
42246
42299
  }
42247
42300
 
42248
42301
  // agent-gui/agentGuiNode/AgentGUINodeView.tsx
42249
- import { jsx as jsx86, jsxs as jsxs63 } from "react/jsx-runtime";
42302
+ import { jsx as jsx87, jsxs as jsxs64 } from "react/jsx-runtime";
42250
42303
  function AgentGUINodeView({
42251
42304
  viewModel,
42252
42305
  referenceProvenanceFilter = null,
@@ -42676,13 +42729,13 @@ function AgentGUINodeView({
42676
42729
  }),
42677
42730
  [targetPresentationKey, viewModel.shell.workspaceId]
42678
42731
  );
42679
- const content = /* @__PURE__ */ jsx86(AgentTargetPresentationProvider, { agentTargets: agentTargetPresentations, children: /* @__PURE__ */ jsxs63(
42732
+ const content = /* @__PURE__ */ jsx87(AgentTargetPresentationProvider, { agentTargets: agentTargetPresentations, children: /* @__PURE__ */ jsxs64(
42680
42733
  AgentTargetSetupRoot,
42681
42734
  {
42682
42735
  controller: targetSetupController,
42683
42736
  openEnvironmentSetup: onAgentEnvPanelOpen,
42684
42737
  children: [
42685
- /* @__PURE__ */ jsxs63(
42738
+ /* @__PURE__ */ jsxs64(
42686
42739
  "div",
42687
42740
  {
42688
42741
  ref: layoutElementRef,
@@ -42692,7 +42745,7 @@ function AgentGUINodeView({
42692
42745
  inert: previewMode ? true : void 0,
42693
42746
  style: layoutStyle,
42694
42747
  children: [
42695
- /* @__PURE__ */ jsxs63(
42748
+ /* @__PURE__ */ jsxs64(
42696
42749
  "aside",
42697
42750
  {
42698
42751
  className: `${AgentGUINode_styles_default.providerRailPanel} nodrag tsh-desktop-no-drag`,
@@ -42700,7 +42753,7 @@ function AgentGUINodeView({
42700
42753
  "aria-hidden": conversationRailCollapsed ? "true" : void 0,
42701
42754
  inert: conversationRailCollapsed ? true : void 0,
42702
42755
  children: [
42703
- /* @__PURE__ */ jsx86(
42756
+ /* @__PURE__ */ jsx87(
42704
42757
  AgentGUIProviderRail,
42705
42758
  {
42706
42759
  activeConversation: viewModel.rail.activeConversation,
@@ -42724,7 +42777,7 @@ function AgentGUINodeView({
42724
42777
  onRequestComposerFocus: requestComposerFocus
42725
42778
  }
42726
42779
  ),
42727
- renderSidebarFooter ? /* @__PURE__ */ jsx86(
42780
+ renderSidebarFooter ? /* @__PURE__ */ jsx87(
42728
42781
  "div",
42729
42782
  {
42730
42783
  className: `${AgentGUINode_styles_default.providerRailFooter} ${AgentGUINode_styles_default.providerRailSidebarFooter} nodrag tsh-desktop-no-drag`,
@@ -42735,12 +42788,12 @@ function AgentGUINodeView({
42735
42788
  })
42736
42789
  }
42737
42790
  ) : null,
42738
- shouldShowProviderRailConfigButton ? /* @__PURE__ */ jsx86(
42791
+ shouldShowProviderRailConfigButton ? /* @__PURE__ */ jsx87(
42739
42792
  "div",
42740
42793
  {
42741
42794
  className: `${AgentGUINode_styles_default.providerRailFooter} ${AgentGUINode_styles_default.providerRailConfigFooter} nodrag tsh-desktop-no-drag`,
42742
42795
  "data-testid": "agent-gui-config-footer",
42743
- children: /* @__PURE__ */ jsx86(
42796
+ children: /* @__PURE__ */ jsx87(
42744
42797
  AgentGUIConfigMenu,
42745
42798
  {
42746
42799
  environmentSetupVisible,
@@ -42767,14 +42820,14 @@ function AgentGUINodeView({
42767
42820
  ]
42768
42821
  }
42769
42822
  ),
42770
- /* @__PURE__ */ jsx86(
42823
+ /* @__PURE__ */ jsx87(
42771
42824
  "aside",
42772
42825
  {
42773
42826
  id: "agent-gui-conversation-rail",
42774
42827
  className: `${AgentGUINode_styles_default.railPanel}${conversationRailCollapsed ? ` ${AgentGUINode_styles_default.railPanelCollapsed}` : ""}`,
42775
42828
  "aria-hidden": conversationRailCollapsed ? "true" : void 0,
42776
42829
  inert: conversationRailCollapsed ? true : void 0,
42777
- children: /* @__PURE__ */ jsx86(
42830
+ children: /* @__PURE__ */ jsx87(
42778
42831
  AgentGUIConversationRailController,
42779
42832
  {
42780
42833
  ...conversationRailStoreState,
@@ -42783,7 +42836,7 @@ function AgentGUINodeView({
42783
42836
  registerInteractionLockProbe: registerRailInteractionLockProbe,
42784
42837
  userProjects: viewModel.rail.userProjects,
42785
42838
  workspaceId: viewModel.shell.workspaceId,
42786
- footer: accountMenuState?.user ? /* @__PURE__ */ jsx86(
42839
+ footer: accountMenuState?.user ? /* @__PURE__ */ jsx87(
42787
42840
  AgentGUIAccountRailMenu,
42788
42841
  {
42789
42842
  accountMenuState,
@@ -42795,7 +42848,7 @@ function AgentGUINodeView({
42795
42848
  )
42796
42849
  }
42797
42850
  ),
42798
- /* @__PURE__ */ jsx86(
42851
+ /* @__PURE__ */ jsx87(
42799
42852
  "div",
42800
42853
  {
42801
42854
  id: "agent-gui-conversation-rail-resize",
@@ -42819,7 +42872,7 @@ function AgentGUINodeView({
42819
42872
  onPointerUp: endConversationRailResize
42820
42873
  }
42821
42874
  ),
42822
- /* @__PURE__ */ jsx86("section", { id: "agent-gui-detail", className: AgentGUINode_styles_default.detailPanel, children: /* @__PURE__ */ jsx86(
42875
+ /* @__PURE__ */ jsx87("section", { id: "agent-gui-detail", className: AgentGUINode_styles_default.detailPanel, children: /* @__PURE__ */ jsx87(
42823
42876
  AgentGUIDetailPane,
42824
42877
  {
42825
42878
  shell: viewModel.shell,
@@ -42867,7 +42920,7 @@ function AgentGUINodeView({
42867
42920
  ]
42868
42921
  }
42869
42922
  ),
42870
- /* @__PURE__ */ jsx86(
42923
+ /* @__PURE__ */ jsx87(
42871
42924
  AgentGUIReferencePickerSurface,
42872
42925
  {
42873
42926
  aggregator: workspaceReferencePickerAggregator,
@@ -42887,7 +42940,7 @@ function AgentGUINodeView({
42887
42940
  onConfirmBundles: workspaceReferencePickerPurpose === "reference" ? confirmWorkspaceReferenceBundles : void 0
42888
42941
  }
42889
42942
  ),
42890
- /* @__PURE__ */ jsx86(
42943
+ /* @__PURE__ */ jsx87(
42891
42944
  AgentGUIRenameConversationDialog,
42892
42945
  {
42893
42946
  conversation: renameConversationTarget,
@@ -42905,7 +42958,7 @@ function AgentGUINodeView({
42905
42958
  ]
42906
42959
  }
42907
42960
  ) });
42908
- return previewMode ? content : /* @__PURE__ */ jsx86(TooltipProvider7, { children: content });
42961
+ return previewMode ? content : /* @__PURE__ */ jsx87(TooltipProvider7, { children: content });
42909
42962
  }
42910
42963
 
42911
42964
  // agent-gui/workspaceDesktop/view/AgentProbeInfoPopover.tsx
@@ -42918,7 +42971,7 @@ import {
42918
42971
  useState as useState52
42919
42972
  } from "react";
42920
42973
  import { createPortal as createPortal5 } from "react-dom";
42921
- import { Fragment as Fragment28, jsx as jsx87, jsxs as jsxs64 } from "react/jsx-runtime";
42974
+ import { Fragment as Fragment28, jsx as jsx88, jsxs as jsxs65 } from "react/jsx-runtime";
42922
42975
  var POPOVER_MIN_VIEWPORT_INSET_PX = 16;
42923
42976
  var POPOVER_DEFAULT_WIDTH_PX = 260;
42924
42977
  function dockAgentProbeLineKey(line) {
@@ -42928,11 +42981,11 @@ function renderDockAgentProbeLine(line) {
42928
42981
  if (typeof line === "string") {
42929
42982
  return line;
42930
42983
  }
42931
- return /* @__PURE__ */ jsxs64(Fragment28, { children: [
42984
+ return /* @__PURE__ */ jsxs65(Fragment28, { children: [
42932
42985
  line.primary,
42933
- line.secondary ? /* @__PURE__ */ jsxs64(Fragment28, { children: [
42986
+ line.secondary ? /* @__PURE__ */ jsxs65(Fragment28, { children: [
42934
42987
  " ",
42935
- /* @__PURE__ */ jsx87("span", { className: "desktop-dock-popup__agent-status-secondary", children: line.secondary })
42988
+ /* @__PURE__ */ jsx88("span", { className: "desktop-dock-popup__agent-status-secondary", children: line.secondary })
42936
42989
  ] }) : null
42937
42990
  ] });
42938
42991
  }
@@ -43025,7 +43078,7 @@ function AgentProbeInfoPopover({
43025
43078
  if (lines.length === 0) {
43026
43079
  return null;
43027
43080
  }
43028
- const popover = /* @__PURE__ */ jsx87(
43081
+ const popover = /* @__PURE__ */ jsx88(
43029
43082
  "div",
43030
43083
  {
43031
43084
  ref: popoverRef,
@@ -43034,17 +43087,17 @@ function AgentProbeInfoPopover({
43034
43087
  style: popoverStyle ?? void 0,
43035
43088
  onMouseEnter: openPopover,
43036
43089
  onMouseLeave: closeIfPointerLeavesPopover,
43037
- children: /* @__PURE__ */ jsx87("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
43090
+ children: /* @__PURE__ */ jsx88("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
43038
43091
  const label = getDockAgentProbeLineLabel(line);
43039
43092
  const valueText = formatDockAgentProbeLineText(line);
43040
- return /* @__PURE__ */ jsxs64(
43093
+ return /* @__PURE__ */ jsxs65(
43041
43094
  "li",
43042
43095
  {
43043
43096
  className: "desktop-dock-popup__agent-info-item",
43044
43097
  "data-has-label": label ? "true" : "false",
43045
43098
  children: [
43046
- label ? /* @__PURE__ */ jsx87("span", { className: "desktop-dock-popup__agent-info-label", children: label }) : null,
43047
- /* @__PURE__ */ jsx87(
43099
+ label ? /* @__PURE__ */ jsx88("span", { className: "desktop-dock-popup__agent-info-label", children: label }) : null,
43100
+ /* @__PURE__ */ jsx88(
43048
43101
  "span",
43049
43102
  {
43050
43103
  className: "desktop-dock-popup__agent-info-value",
@@ -43059,7 +43112,7 @@ function AgentProbeInfoPopover({
43059
43112
  }) })
43060
43113
  }
43061
43114
  );
43062
- return /* @__PURE__ */ jsxs64(
43115
+ return /* @__PURE__ */ jsxs65(
43063
43116
  "div",
43064
43117
  {
43065
43118
  ref: anchorRef,
@@ -43079,7 +43132,7 @@ function AgentProbeInfoPopover({
43079
43132
  },
43080
43133
  onBlur: closePopover,
43081
43134
  children: [
43082
- /* @__PURE__ */ jsx87(Info2, { size: 15, strokeWidth: 2.1, "aria-hidden": "true" }),
43135
+ /* @__PURE__ */ jsx88(Info2, { size: 15, strokeWidth: 2.1, "aria-hidden": "true" }),
43083
43136
  isOpen ? createPortal5(popover, document.body) : null
43084
43137
  ]
43085
43138
  }
@@ -43215,7 +43268,7 @@ function composeAgentGUIMentionService(input) {
43215
43268
  }
43216
43269
 
43217
43270
  // agent-gui/agentGuiNode/AgentGUIMentionServiceBoundary.tsx
43218
- import { jsx as jsx88 } from "react/jsx-runtime";
43271
+ import { jsx as jsx89 } from "react/jsx-runtime";
43219
43272
  function AgentGUIMentionServiceBoundary({
43220
43273
  children,
43221
43274
  service
@@ -43231,7 +43284,7 @@ function AgentGUIMentionServiceBoundary({
43231
43284
  if (!effectiveService || effectiveService === inheritedService) {
43232
43285
  return children;
43233
43286
  }
43234
- return /* @__PURE__ */ jsx88(RichTextMentionServiceProvider, { service: effectiveService, children });
43287
+ return /* @__PURE__ */ jsx89(RichTextMentionServiceProvider, { service: effectiveService, children });
43235
43288
  }
43236
43289
 
43237
43290
  // agent-gui/agentGuiNode/AgentGUINode.labels.ts
@@ -43594,8 +43647,6 @@ function agentGUITuttiModeLabels(t) {
43594
43647
  tuttiBudgetAgentCountPowerful: t(
43595
43648
  "agentHost.agentGui.tuttiBudgetAgentCountPowerful"
43596
43649
  ),
43597
- tuttiBudgetConfirm: t("agentHost.agentGui.tuttiBudgetConfirm"),
43598
- tuttiBudgetCancel: t("agentHost.agentGui.tuttiBudgetCancel"),
43599
43650
  tuttiModeUpdateFailed: t("agentHost.agentGui.tuttiModeUpdateFailed"),
43600
43651
  tuttiModeUpdateUncertain: t("agentHost.agentGui.tuttiModeUpdateUncertain"),
43601
43652
  tuttiModePlanPanel: {
@@ -44391,7 +44442,7 @@ function useAgentGUIWorkspaceFileReferenceCopy(t) {
44391
44442
  }
44392
44443
 
44393
44444
  // agent-gui/agentGuiNode/AgentGUINode.tsx
44394
- import { jsx as jsx89, jsxs as jsxs65 } from "react/jsx-runtime";
44445
+ import { jsx as jsx90, jsxs as jsxs66 } from "react/jsx-runtime";
44395
44446
  var DISABLED_REFERENCE_PROVENANCE_CATALOG = {
44396
44447
  enabledDimensions: [],
44397
44448
  agentOptions: [],
@@ -44706,7 +44757,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44706
44757
  t,
44707
44758
  viewModel
44708
44759
  });
44709
- return /* @__PURE__ */ jsx89(AgentGUIMentionServiceBoundary, { service: mentionService, children: /* @__PURE__ */ jsx89(
44760
+ return /* @__PURE__ */ jsx90(AgentGUIMentionServiceBoundary, { service: mentionService, children: /* @__PURE__ */ jsx90(
44710
44761
  WorkspaceNodeWindow,
44711
44762
  {
44712
44763
  nodeId,
@@ -44722,8 +44773,8 @@ var AgentGUINode = memo15(function AgentGUINode2({
44722
44773
  className: "size-full bg-transparent",
44723
44774
  bodyClassName: `${AgentGUINode_styles_default.shell} nodrag size-full min-h-0 min-w-0 !bg-transparent p-0`,
44724
44775
  hideHeader: embedded,
44725
- titleAccessory: /* @__PURE__ */ jsxs65("span", { className: "inline-flex flex-none items-center gap-1", children: [
44726
- /* @__PURE__ */ jsx89(
44776
+ titleAccessory: /* @__PURE__ */ jsxs66("span", { className: "inline-flex flex-none items-center gap-1", children: [
44777
+ /* @__PURE__ */ jsx90(
44727
44778
  AgentProbeInfoPopover,
44728
44779
  {
44729
44780
  lines: agentProbeLines,
@@ -44733,7 +44784,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44733
44784
  onClose: handleAgentProbeInfoClose
44734
44785
  }
44735
44786
  ),
44736
- /* @__PURE__ */ jsx89(
44787
+ /* @__PURE__ */ jsx90(
44737
44788
  CanvasNodeGhostIconButton,
44738
44789
  {
44739
44790
  "aria-label": isConversationRailCollapsed ? t("agentHost.agentGui.expandConversationRail") : t("agentHost.agentGui.collapseConversationRail"),
@@ -44745,7 +44796,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44745
44796
  event.stopPropagation();
44746
44797
  handleConversationRailToggle();
44747
44798
  },
44748
- children: /* @__PURE__ */ jsx89(
44799
+ children: /* @__PURE__ */ jsx90(
44749
44800
  CanvasNodePanelLinedIcon,
44750
44801
  {
44751
44802
  width: 18,
@@ -44769,7 +44820,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44769
44820
  renderedWidth,
44770
44821
  railAutoCollapseWidthPx
44771
44822
  );
44772
- return /* @__PURE__ */ jsx89(
44823
+ return /* @__PURE__ */ jsx90(
44773
44824
  AgentGUINodeView,
44774
44825
  {
44775
44826
  viewModel,
@@ -44852,7 +44903,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
44852
44903
  }, areAgentGUINodePropsEqual);
44853
44904
 
44854
44905
  // AgentGUI.tsx
44855
- import { jsx as jsx90 } from "react/jsx-runtime";
44906
+ import { jsx as jsx91 } from "react/jsx-runtime";
44856
44907
  var AgentGUI = memo16(function AgentGUI2({
44857
44908
  agentActivityRuntime,
44858
44909
  agentHostApi,
@@ -44924,21 +44975,21 @@ var AgentGUI = memo16(function AgentGUI2({
44924
44975
  hostCapabilities: nodeHostCapabilities,
44925
44976
  renderSlots: nodeRenderSlots
44926
44977
  };
44927
- const content = /* @__PURE__ */ jsx90(AgentGuiI18nProvider, { runtime: i18n, locale, children: /* @__PURE__ */ jsx90(TuttiModePlanReviewRuntimeProvider, { runtime: tuttiModePlanReviewRuntime, children: /* @__PURE__ */ jsx90(
44978
+ const content = /* @__PURE__ */ jsx91(AgentGuiI18nProvider, { runtime: i18n, locale, children: /* @__PURE__ */ jsx91(TuttiModePlanReviewRuntimeProvider, { runtime: tuttiModePlanReviewRuntime, children: /* @__PURE__ */ jsx91(
44928
44979
  AgentActivityHostProvider,
44929
44980
  {
44930
44981
  agentActivityRuntime,
44931
44982
  agentHostApi,
44932
- children: /* @__PURE__ */ jsx90(
44983
+ children: /* @__PURE__ */ jsx91(
44933
44984
  AgentCommercePresentationProvider,
44934
44985
  {
44935
44986
  value: props.hostCapabilities?.commercePresentation,
44936
- children: /* @__PURE__ */ jsx90(AgentGUINode, { ...nodeProps })
44987
+ children: /* @__PURE__ */ jsx91(AgentGUINode, { ...nodeProps })
44937
44988
  }
44938
44989
  )
44939
44990
  }
44940
44991
  ) }) });
44941
- return props.frame.previewMode ? content : /* @__PURE__ */ jsx90(TooltipProvider8, { delayDuration: 120, skipDelayDuration: 0, children: content });
44992
+ return props.frame.previewMode ? content : /* @__PURE__ */ jsx91(TooltipProvider8, { delayDuration: 120, skipDelayDuration: 0, children: content });
44942
44993
  });
44943
44994
 
44944
44995
  export {
@@ -44958,4 +45009,4 @@ export {
44958
45009
  AgentHandoffMenu,
44959
45010
  AgentGUI
44960
45011
  };
44961
- //# sourceMappingURL=chunk-Y6M27YYS.js.map
45012
+ //# sourceMappingURL=chunk-4IJYTGS2.js.map