@tutti-os/agent-gui 0.0.201 → 0.0.203

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 (35) hide show
  1. package/dist/agent-conversation/index.js +3 -3
  2. package/dist/agent-gui.d.ts +2 -1
  3. package/dist/agent-gui.js +8 -8
  4. package/dist/agent-message-center/index.js +3 -3
  5. package/dist/app/renderer/agentactivity.css +45 -115
  6. package/dist/{chunk-F5ARZZES.js → chunk-4OJSSUEU.js} +2 -2
  7. package/dist/{chunk-PWPVYNGO.js → chunk-FFMVDJOE.js} +2 -2
  8. package/dist/{chunk-3FA5JIDL.js → chunk-K5AOJ5DO.js} +1 -1
  9. package/dist/chunk-K5AOJ5DO.js.map +1 -0
  10. package/dist/{chunk-DAP74J63.js → chunk-LHT2UBPE.js} +302 -165
  11. package/dist/chunk-LHT2UBPE.js.map +1 -0
  12. package/dist/{chunk-ZADHMOME.js → chunk-NEH45ROF.js} +30 -16
  13. package/dist/chunk-NEH45ROF.js.map +1 -0
  14. package/dist/{chunk-MFQB4LR5.js → chunk-RD3ZAYNV.js} +3 -3
  15. package/dist/{chunk-5ZO3H4C5.js → chunk-VDTG6M6K.js} +2 -2
  16. package/dist/{chunk-7NUEEGAA.js → chunk-X5V6P2EB.js} +5 -1
  17. package/dist/chunk-X5V6P2EB.js.map +1 -0
  18. package/dist/context-mention-palette/index.js +3 -3
  19. package/dist/conversation-rail-runtime.d.ts +2 -1
  20. package/dist/index.d.ts +2 -1
  21. package/dist/index.js +8 -8
  22. package/dist/mention-search.js +2 -2
  23. package/dist/workbench/contribution.js +1 -1
  24. package/dist/workbench/index.js +1 -1
  25. package/dist/workbench/tool-sidebar/index.js +1 -1
  26. package/dist/workbench/tool-sidebar/index.js.map +1 -1
  27. package/package.json +14 -14
  28. package/dist/chunk-3FA5JIDL.js.map +0 -1
  29. package/dist/chunk-7NUEEGAA.js.map +0 -1
  30. package/dist/chunk-DAP74J63.js.map +0 -1
  31. package/dist/chunk-ZADHMOME.js.map +0 -1
  32. /package/dist/{chunk-F5ARZZES.js.map → chunk-4OJSSUEU.js.map} +0 -0
  33. /package/dist/{chunk-PWPVYNGO.js.map → chunk-FFMVDJOE.js.map} +0 -0
  34. /package/dist/{chunk-MFQB4LR5.js.map → chunk-RD3ZAYNV.js.map} +0 -0
  35. /package/dist/{chunk-5ZO3H4C5.js.map → chunk-VDTG6M6K.js.map} +0 -0
@@ -15,7 +15,7 @@ import {
15
15
  resolveAgentGuiSessionProviderFlatIconUrl,
16
16
  resolveNextAgentGUIConversationRailWidthPx,
17
17
  shouldAutoCollapseAgentGUIConversationRail
18
- } from "./chunk-7NUEEGAA.js";
18
+ } from "./chunk-X5V6P2EB.js";
19
19
  import {
20
20
  resolveAgentGuiWorkbenchProviderLabel
21
21
  } from "./chunk-MGSRWYRN.js";
@@ -69,7 +69,7 @@ import {
69
69
  toLocalShortDateTime,
70
70
  updateAgentComposerDraft,
71
71
  useProjectedAgentConversation
72
- } from "./chunk-ZADHMOME.js";
72
+ } from "./chunk-NEH45ROF.js";
73
73
  import {
74
74
  agentRichTextContentToPromptText,
75
75
  createAgentRichTextInputExtensions,
@@ -94,7 +94,7 @@ import {
94
94
  AgentFileMentionPalette,
95
95
  agentMentionItemKey,
96
96
  isAgentMentionItemDisabled
97
- } from "./chunk-5ZO3H4C5.js";
97
+ } from "./chunk-VDTG6M6K.js";
98
98
  import {
99
99
  normalizeAgentGUIAgents,
100
100
  projectAgentGUIAgentsToTargets
@@ -105,7 +105,7 @@ import {
105
105
  DEFAULT_AGENT_MENTION_FILTER,
106
106
  agentGuiScheduler,
107
107
  buildWorkspaceAgentActivityListViewModel
108
- } from "./chunk-F5ARZZES.js";
108
+ } from "./chunk-4OJSSUEU.js";
109
109
  import {
110
110
  AGENT_RICH_TEXT_CARET_ANCHOR,
111
111
  agentComposerFileMentionReferences,
@@ -134,7 +134,7 @@ import {
134
134
  normalizePlanIssueBudgetPreset,
135
135
  planImplementationPromptFromPlanTurn,
136
136
  planIssueBudgetPresetsEqual
137
- } from "./chunk-MFQB4LR5.js";
137
+ } from "./chunk-RD3ZAYNV.js";
138
138
  import {
139
139
  useEngineSelector
140
140
  } from "./chunk-EVQ4JY3N.js";
@@ -144,7 +144,7 @@ import {
144
144
  blobToBase64,
145
145
  normalizeAgentApprovalPurpose,
146
146
  resolveWorkspaceLinkAction
147
- } from "./chunk-PWPVYNGO.js";
147
+ } from "./chunk-FFMVDJOE.js";
148
148
  import {
149
149
  AgentTargetPresentationProvider,
150
150
  cn,
@@ -162,7 +162,7 @@ import {
162
162
  useAgentHostApi,
163
163
  useOptionalAgentActivityRuntime,
164
164
  useOptionalAgentHostApi
165
- } from "./chunk-3FA5JIDL.js";
165
+ } from "./chunk-K5AOJ5DO.js";
166
166
  import {
167
167
  MANAGED_AGENT_ICON_FALLBACK_URL,
168
168
  MANAGED_AGENT_ICON_URLS,
@@ -188,11 +188,11 @@ import {
188
188
  } from "./chunk-O433KXLK.js";
189
189
 
190
190
  // AgentGUI.tsx
191
- import { memo as memo15, useMemo as useMemo51 } from "react";
191
+ import { memo as memo16, useMemo as useMemo51 } from "react";
192
192
  import { TooltipProvider as TooltipProvider8 } from "@tutti-os/ui-system";
193
193
 
194
194
  // agent-gui/agentGuiNode/AgentGUINode.tsx
195
- import { memo as memo14, useCallback as useCallback69, useMemo as useMemo50, useRef as useRef61 } from "react";
195
+ import { memo as memo15, useCallback as useCallback69, useMemo as useMemo50, useRef as useRef61 } from "react";
196
196
  import { createWorkspaceUserProjectI18nRuntime } from "@tutti-os/workspace-user-project/i18n";
197
197
  import { createWorkspaceFileManagerI18nRuntime } from "@tutti-os/workspace-file-manager";
198
198
  import { useReferenceProvenanceFilterCatalog } from "@tutti-os/workspace-file-reference/react";
@@ -5887,6 +5887,7 @@ function useAgentGUIActivation({
5887
5887
  ...input.initialTurnExpected !== void 0 ? { initialTurnExpected: input.initialTurnExpected } : {},
5888
5888
  ...input.initialGoalControl ? { initialGoalControl: { ...input.initialGoalControl } } : {},
5889
5889
  ...input.railSectionKey?.trim() ? { railSectionKey: input.railSectionKey.trim() } : {},
5890
+ ...input.railPlacement ? { railPlacement: { ...input.railPlacement } } : {},
5890
5891
  ...input.initialDisplayPrompt ? { initialDisplayPrompt: input.initialDisplayPrompt } : {},
5891
5892
  ...input.runtimeContent ? { runtimeContent: input.runtimeContent } : {},
5892
5893
  ...input.submitDiagnostics ? { submitDiagnostics: input.submitDiagnostics } : {},
@@ -9154,6 +9155,30 @@ function normalizeOrchestrationIntensity(value) {
9154
9155
  if (typeof value !== "number" || !Number.isFinite(value)) return null;
9155
9156
  return Math.min(100, Math.max(0, Math.round(value)));
9156
9157
  }
9158
+ function resolveInitialRailPlacement(input) {
9159
+ const selectedProjectPath = input.selectedProjectPath?.trim() ?? "";
9160
+ if (!selectedProjectPath) {
9161
+ return {
9162
+ version: 1,
9163
+ kind: "conversations",
9164
+ sectionKey: "conversations"
9165
+ };
9166
+ }
9167
+ const selectedProject = resolveAgentGUIConversationProject(
9168
+ selectedProjectPath,
9169
+ input.userProjects
9170
+ );
9171
+ const sectionKey = selectedProject?.sectionKey?.trim() ?? "";
9172
+ if (!sectionKey) {
9173
+ return null;
9174
+ }
9175
+ return {
9176
+ version: 1,
9177
+ kind: "project",
9178
+ projectPath: selectedProjectPath,
9179
+ sectionKey
9180
+ };
9181
+ }
9157
9182
  function useAgentGUINewConversationActivation(input) {
9158
9183
  const {
9159
9184
  getCachedComposerOptions,
@@ -9222,11 +9247,14 @@ function useAgentGUINewConversationActivation(input) {
9222
9247
  }
9223
9248
  );
9224
9249
  const selectedProjectPath = selectedProjectPathRef.current;
9225
- const selectedProject = resolveAgentGUIConversationProject(
9250
+ const railPlacement = resolveInitialRailPlacement({
9226
9251
  selectedProjectPath,
9227
- userProjectsRef.current
9228
- );
9229
- const railSectionKey = !selectedProjectPath?.trim() ? "conversations" : selectedProject?.sectionKey?.trim() || void 0;
9252
+ userProjects: userProjectsRef.current
9253
+ });
9254
+ if (railPlacement === null) {
9255
+ return null;
9256
+ }
9257
+ const railSectionKey = railPlacement.sectionKey;
9230
9258
  const initialNodeSettings = readNodeDefaultDraftSettings({
9231
9259
  data: targetData.data,
9232
9260
  defaultReasoningEffort,
@@ -9287,7 +9315,8 @@ function useAgentGUINewConversationActivation(input) {
9287
9315
  ...submitOptions?.capabilityRefs?.length ? { capabilityRefs: submitOptions.capabilityRefs } : {},
9288
9316
  clientSubmitId: submitTrace.clientSubmitId,
9289
9317
  cwd: selectedProjectPath ?? "",
9290
- ...railSectionKey ? { railSectionKey } : {},
9318
+ railPlacement,
9319
+ railSectionKey,
9291
9320
  initialContent: normalizedInitialContent,
9292
9321
  ...initialTurnExpected !== void 0 ? { initialTurnExpected } : {},
9293
9322
  ...initialGoalControl ? { initialGoalControl } : {},
@@ -11508,7 +11537,8 @@ function useAgentGUIConversationDetail(input) {
11508
11537
  );
11509
11538
  const sessionTurns = useEngineSelector(
11510
11539
  input.sessionEngine,
11511
- (state) => selectEngineTurnsForSession(state, input.activeConversationId)
11540
+ (state) => selectEngineTurnsForSession(state, input.activeConversationId),
11541
+ referenceArrayEqual
11512
11542
  );
11513
11543
  const projectionConversation = useMemo11(() => {
11514
11544
  if (!input.activeConversation) {
@@ -11679,6 +11709,9 @@ function useAgentGUIConversationDetail(input) {
11679
11709
  serverInteractivePrompt: hasProviderSessionNotFoundError ? null : rawPendingInteractivePrompt
11680
11710
  };
11681
11711
  }
11712
+ function referenceArrayEqual(left, right) {
11713
+ return left.length === right.length && left.every((value, index) => value === right[index]);
11714
+ }
11682
11715
 
11683
11716
  // agent-gui/agentGuiNode/controller/useAgentGUIConversationPresentation.ts
11684
11717
  import { useEffect as useEffect9, useMemo as useMemo12, useRef as useRef15 } from "react";
@@ -24379,10 +24412,46 @@ function handleAgentRichTextKeyDownCapture(event, input) {
24379
24412
  input.onSubmitRef.current();
24380
24413
  }
24381
24414
 
24415
+ // agent-gui/agentGuiNode/agentRichText/agentRichTextControlledValue.ts
24416
+ function createAgentRichTextControlledValueTracker(scopeKey) {
24417
+ return { nextRevision: 0, pendingLocalEchoes: [], scopeKey };
24418
+ }
24419
+ function recordAgentRichTextLocalEdit(tracker, value) {
24420
+ tracker.nextRevision += 1;
24421
+ tracker.pendingLocalEchoes.push({
24422
+ revision: tracker.nextRevision,
24423
+ scopeKey: tracker.scopeKey,
24424
+ value
24425
+ });
24426
+ }
24427
+ function shouldApplyAgentRichTextControlledValue(input) {
24428
+ const { lastEmittedValue, scopeKey, tracker, value } = input;
24429
+ const scopeChanged = tracker.scopeKey !== scopeKey;
24430
+ if (scopeChanged) {
24431
+ tracker.scopeKey = scopeKey;
24432
+ tracker.pendingLocalEchoes = [];
24433
+ }
24434
+ const localEcho = tracker.pendingLocalEchoes.find(
24435
+ (candidate) => candidate.scopeKey === scopeKey && candidate.value === value
24436
+ );
24437
+ if (!scopeChanged && localEcho) {
24438
+ tracker.pendingLocalEchoes = tracker.pendingLocalEchoes.filter(
24439
+ (candidate) => candidate.scopeKey !== scopeKey || candidate.revision > localEcho.revision
24440
+ );
24441
+ return false;
24442
+ }
24443
+ if (!scopeChanged && value === lastEmittedValue) {
24444
+ return false;
24445
+ }
24446
+ tracker.pendingLocalEchoes = [];
24447
+ return true;
24448
+ }
24449
+
24382
24450
  // agent-gui/agentGuiNode/agentRichText/AgentRichTextEditor.tsx
24383
24451
  import { jsx as jsx31 } from "react/jsx-runtime";
24384
24452
  var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
24385
24453
  value,
24454
+ contentScopeKey = "default",
24386
24455
  disabled,
24387
24456
  placeholder,
24388
24457
  removeMentionLabel,
@@ -24411,7 +24480,9 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
24411
24480
  "use memo";
24412
24481
  const { t } = useTranslation();
24413
24482
  const lastEmittedPromptRef = useRef31(value);
24414
- const pendingLocalPromptEchoesRef = useRef31(/* @__PURE__ */ new Set());
24483
+ const controlledValueTrackerRef = useRef31(
24484
+ createAgentRichTextControlledValueTracker(contentScopeKey)
24485
+ );
24415
24486
  const editorRef = useRef31(null);
24416
24487
  const onChangeRef = useRef31(onChange);
24417
24488
  const onContentLayoutInvalidatedRef = useRef31(onContentLayoutInvalidated);
@@ -24843,7 +24914,10 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
24843
24914
  return;
24844
24915
  }
24845
24916
  lastEmittedPromptRef.current = nextPrompt;
24846
- pendingLocalPromptEchoesRef.current.add(nextPrompt);
24917
+ recordAgentRichTextLocalEdit(
24918
+ controlledValueTrackerRef.current,
24919
+ nextPrompt
24920
+ );
24847
24921
  if (isAgentRichTextUserContentInsertion(transaction)) {
24848
24922
  onUserContentChangeRef.current?.(nextPrompt);
24849
24923
  }
@@ -24924,16 +24998,14 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
24924
24998
  if (!editor || editor.isDestroyed) {
24925
24999
  return;
24926
25000
  }
24927
- if (pendingLocalPromptEchoesRef.current.has(value)) {
24928
- if (value === lastEmittedPromptRef.current) {
24929
- pendingLocalPromptEchoesRef.current.clear();
24930
- }
24931
- return;
24932
- }
24933
- if (value === lastEmittedPromptRef.current) {
25001
+ if (!shouldApplyAgentRichTextControlledValue({
25002
+ lastEmittedValue: lastEmittedPromptRef.current,
25003
+ scopeKey: contentScopeKey,
25004
+ tracker: controlledValueTrackerRef.current,
25005
+ value
25006
+ })) {
24934
25007
  return;
24935
25008
  }
24936
- pendingLocalPromptEchoesRef.current.clear();
24937
25009
  const nextDoc = plainTextToAgentRichTextDoc(value, {
24938
25010
  capabilities: availableCapabilities,
24939
25011
  skills: availableSkills
@@ -24946,7 +25018,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
24946
25018
  editor.commands.setTextSelection(editor.state.doc.content.size);
24947
25019
  lastEmittedPromptRef.current = value;
24948
25020
  onContentLayoutInvalidatedRef.current?.();
24949
- }, [availableCapabilities, availableSkills, editor, value]);
25021
+ }, [availableCapabilities, availableSkills, contentScopeKey, editor, value]);
24950
25022
  return /* @__PURE__ */ jsx31(
24951
25023
  AgentRichTextEditorSurface,
24952
25024
  {
@@ -28102,6 +28174,7 @@ function AgentComposerView(input) {
28102
28174
  {
28103
28175
  ref: input.editorHandleRef,
28104
28176
  value: input.paletteDraftPrompt,
28177
+ contentScopeKey: input.props.draftScopeKey,
28105
28178
  placeholder: effectivePlaceholder,
28106
28179
  disabled: inputDisabled,
28107
28180
  className: AgentGUINode_styles_default.composerTextarea,
@@ -36847,15 +36920,7 @@ var AgentGUIConversationRailController = memo9(
36847
36920
  );
36848
36921
 
36849
36922
  // agent-gui/agentGuiNode/view/AgentGUIDetailPane.tsx
36850
- import {
36851
- memo as memo12,
36852
- useCallback as useCallback61,
36853
- useEffect as useEffect35,
36854
- useMemo as useMemo44,
36855
- useRef as useRef53,
36856
- useState as useState48
36857
- } from "react";
36858
- import { ScrollArea as ScrollArea3 } from "@tutti-os/ui-system/components";
36923
+ import { memo as memo13, useCallback as useCallback61, useEffect as useEffect35, useMemo as useMemo44, useRef as useRef53, useState as useState48 } from "react";
36859
36924
 
36860
36925
  // agent-gui/agentGuiNode/view/agentGUIDetailModelHelpers.ts
36861
36926
  import { useRef as useRef50 } from "react";
@@ -39236,6 +39301,12 @@ function AgentGUIContentToast({
39236
39301
  ] });
39237
39302
  }
39238
39303
 
39304
+ // agent-gui/agentGuiNode/view/AgentGUIDetailTimeline.tsx
39305
+ import {
39306
+ memo as memo12
39307
+ } from "react";
39308
+ import { ScrollArea as ScrollArea3 } from "@tutti-os/ui-system/components";
39309
+
39239
39310
  // agent-gui/agentGuiNode/view/AgentGUIConversationTimelinePane.tsx
39240
39311
  import { memo as memo11 } from "react";
39241
39312
  import { Fragment as Fragment24, jsx as jsx77, jsxs as jsxs57 } from "react/jsx-runtime";
@@ -39304,6 +39375,65 @@ function setTimelineScrollTopWithUserTransition(element, top) {
39304
39375
  element.scrollTop = top;
39305
39376
  }
39306
39377
 
39378
+ // agent-gui/agentGuiNode/view/AgentGUIDetailTimeline.tsx
39379
+ import { jsx as jsx78 } from "react/jsx-runtime";
39380
+ var TIMELINE_CONTENT_STYLE = {
39381
+ width: "100%",
39382
+ minWidth: "100%",
39383
+ display: "grid",
39384
+ gridTemplateColumns: "minmax(0, 1fr)",
39385
+ gap: "24px"
39386
+ };
39387
+ var AgentGUIDetailTimeline = memo12(function AgentGUIDetailTimeline2({
39388
+ availableSkills,
39389
+ conversation,
39390
+ conversationFlowEmpty,
39391
+ conversationFlowLabels,
39392
+ hasActiveConversation,
39393
+ homeContent,
39394
+ isLoadingOlderMessages,
39395
+ isTimelineScrolledToTop,
39396
+ labels,
39397
+ onAuthLogin,
39398
+ onLinkAction,
39399
+ previewMode,
39400
+ showTimelineSkeleton,
39401
+ showUnavailableChatEmpty,
39402
+ timelineContentRef,
39403
+ timelineRef,
39404
+ workspaceAppIcons
39405
+ }) {
39406
+ "use memo";
39407
+ return /* @__PURE__ */ jsx78(
39408
+ ScrollArea3,
39409
+ {
39410
+ scrollbarMode: "native",
39411
+ className: "flex h-full min-h-0 flex-1 flex-col [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100",
39412
+ viewportRef: timelineRef,
39413
+ viewportContentRef: timelineContentRef,
39414
+ viewportTestId: "agent-gui-timeline",
39415
+ 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(),
39416
+ viewportContentStyle: TIMELINE_CONTENT_STYLE,
39417
+ children: hasActiveConversation ? /* @__PURE__ */ jsx78(
39418
+ AgentGUIConversationTimelinePane,
39419
+ {
39420
+ conversation,
39421
+ isLoading: showTimelineSkeleton,
39422
+ isLoadingOlderMessages,
39423
+ loadingLabel: labels.loadingConversation,
39424
+ empty: conversationFlowEmpty,
39425
+ onLinkAction,
39426
+ onAuthLogin,
39427
+ availableSkills,
39428
+ workspaceAppIcons,
39429
+ previewMode,
39430
+ labels: conversationFlowLabels
39431
+ }
39432
+ ) : homeContent
39433
+ }
39434
+ );
39435
+ });
39436
+
39307
39437
  // agent-gui/agentGuiNode/view/useAgentGUIDetailScroll.ts
39308
39438
  import {
39309
39439
  useCallback as useCallback60,
@@ -39699,10 +39829,10 @@ function useAgentGUIDetailScroll(input) {
39699
39829
  import { useMemo as useMemo43 } from "react";
39700
39830
 
39701
39831
  // app/renderer/components/icons/UnavailableChatIcon.tsx
39702
- import { jsx as jsx78 } from "react/jsx-runtime";
39832
+ import { jsx as jsx79 } from "react/jsx-runtime";
39703
39833
  function UnavailableChatIcon(props) {
39704
39834
  "use memo";
39705
- return /* @__PURE__ */ jsx78(
39835
+ return /* @__PURE__ */ jsx79(
39706
39836
  "svg",
39707
39837
  {
39708
39838
  xmlns: "http://www.w3.org/2000/svg",
@@ -39710,7 +39840,7 @@ function UnavailableChatIcon(props) {
39710
39840
  fill: "currentColor",
39711
39841
  "aria-hidden": true,
39712
39842
  ...props,
39713
- children: /* @__PURE__ */ jsx78("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" })
39843
+ children: /* @__PURE__ */ jsx79("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" })
39714
39844
  }
39715
39845
  );
39716
39846
  }
@@ -39756,7 +39886,7 @@ function useAgentGUITimelineTransition(input) {
39756
39886
  }
39757
39887
 
39758
39888
  // agent-gui/agentGuiNode/view/useAgentGUIDetailModel.tsx
39759
- import { Fragment as Fragment25, jsx as jsx79, jsxs as jsxs58 } from "react/jsx-runtime";
39889
+ import { Fragment as Fragment25, jsx as jsx80, jsxs as jsxs58 } from "react/jsx-runtime";
39760
39890
  function resolveTuttiModeUpdateInlineNotice(input) {
39761
39891
  if (input.status !== "failed" && input.status !== "uncertain") return null;
39762
39892
  const localizedMessage = input.status === "failed" ? input.failedMessage : input.uncertainMessage;
@@ -39950,11 +40080,11 @@ function useAgentGUIDetailModel(input) {
39950
40080
  className: AgentGUINode_styles_default.unavailableChatEmpty,
39951
40081
  "data-testid": "agent-gui-unavailable-chat-empty",
39952
40082
  children: [
39953
- /* @__PURE__ */ jsx79(UnavailableChatIcon, { className: AgentGUINode_styles_default.unavailableChatEmptyIcon }),
39954
- /* @__PURE__ */ jsx79("span", { className: AgentGUINode_styles_default.unavailableChatEmptyText, children: labels.conversationUnavailable })
40083
+ /* @__PURE__ */ jsx80(UnavailableChatIcon, { className: AgentGUINode_styles_default.unavailableChatEmptyIcon }),
40084
+ /* @__PURE__ */ jsx80("span", { className: AgentGUINode_styles_default.unavailableChatEmptyText, children: labels.conversationUnavailable })
39955
40085
  ]
39956
40086
  }
39957
- ) : /* @__PURE__ */ jsx79(Fragment25, {}),
40087
+ ) : /* @__PURE__ */ jsx80(Fragment25, {}),
39958
40088
  [labels.conversationUnavailable, showUnavailableChatEmpty]
39959
40089
  );
39960
40090
  const chromeLabels = useMemo43(
@@ -40625,17 +40755,16 @@ function useAgentGUITuttiWorkflow(input) {
40625
40755
  }
40626
40756
 
40627
40757
  // agent-gui/agentGuiNode/view/AgentGUIDetailPane.tsx
40628
- import { Fragment as Fragment26, jsx as jsx80, jsxs as jsxs59 } from "react/jsx-runtime";
40629
- var AGENT_GUI_TIMELINE_SCROLL_AREA_CONTENT_STYLE = {
40630
- width: "100%",
40631
- minWidth: "100%",
40632
- display: "grid",
40633
- gridTemplateColumns: "minmax(0, 1fr)",
40634
- gap: "24px"
40635
- };
40758
+ import { Fragment as Fragment26, jsx as jsx81, jsxs as jsxs59 } from "react/jsx-runtime";
40636
40759
  var EMPTY_WORKSPACE_APP_ICONS4 = [];
40637
- var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
40638
- viewModel,
40760
+ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
40761
+ shell,
40762
+ rail,
40763
+ detail,
40764
+ composer,
40765
+ interaction,
40766
+ readiness,
40767
+ operations,
40639
40768
  homeTargetProjection,
40640
40769
  referenceProvenanceFilter = null,
40641
40770
  composerEngagement,
@@ -40671,6 +40800,15 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
40671
40800
  renderProviderUnavailableState
40672
40801
  }) {
40673
40802
  "use memo";
40803
+ const viewModel = {
40804
+ shell,
40805
+ rail,
40806
+ detail,
40807
+ composer,
40808
+ interaction,
40809
+ readiness,
40810
+ operations
40811
+ };
40674
40812
  const timelineRef = useRef53(null);
40675
40813
  const timelineContentRef = useRef53(null);
40676
40814
  const bottomDockRef = useRef53(null);
@@ -41110,6 +41248,41 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
41110
41248
  timelineScrollAnchorRef,
41111
41249
  viewModel
41112
41250
  });
41251
+ const homeContent = !hasActiveConversation ? shouldRenderProviderUnavailableState && disabledProviderTarget ? /* @__PURE__ */ jsx81(Fragment26, { children: renderProviderUnavailableState?.({
41252
+ provider: disabledProviderTarget.provider,
41253
+ providerLabel: labels.emptyProviderForProvider?.(
41254
+ disabledProviderTarget.provider
41255
+ ) ?? resolveAgentGuiWorkbenchProviderLabel(
41256
+ disabledProviderTarget.provider
41257
+ ),
41258
+ target: disabledProviderTarget,
41259
+ iconUrl: resolveAgentGUIHeroIconUrl2(disabledProviderTarget.provider),
41260
+ unavailableReason: disabledProviderTarget.unavailableReason ?? null
41261
+ }) }) : /* @__PURE__ */ jsx81(
41262
+ AgentGUIEmptyHomePane,
41263
+ {
41264
+ provider: emptyHeroProvider,
41265
+ providerReadinessGate: emptyProviderReadinessGate,
41266
+ showAllProviders: viewModel.rail.conversationFilter.kind === "all",
41267
+ agentTargets: composerProviderTargets,
41268
+ selectedAgentTarget: composerSelectedProviderTarget,
41269
+ onProviderSelect: canSwitchComposerProvider && viewModel.rail.activeConversationId === null ? selectHomeComposerAgentTargetAndFocus : void 0,
41270
+ noticeChrome: homeNoticeChrome,
41271
+ isRespondingApproval: isInteractionPending,
41272
+ previewMode,
41273
+ onSubmitApprovalOption: submitApprovalOption,
41274
+ onRetryActivation: retryActivation,
41275
+ onAuthLogin: authLogin,
41276
+ onContinueInNewConversation: continueInNewConversation,
41277
+ chromeLabels,
41278
+ composerProps: emptyHeroComposerProps,
41279
+ labels,
41280
+ suggestions: labels.homeSuggestions ?? EMPTY_HOME_SUGGESTIONS,
41281
+ suggestionsCloseLabel: labels.homeSuggestionsClose,
41282
+ onSelectSuggestion: handleSelectHomeSuggestion,
41283
+ onSelectSuggestionAction: handleHomeSuggestionAction
41284
+ }
41285
+ ) : null;
41113
41286
  return /* @__PURE__ */ jsxs59(
41114
41287
  "main",
41115
41288
  {
@@ -41117,7 +41290,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
41117
41290
  "aria-busy": timelineInteractionLocked || void 0,
41118
41291
  inert: timelineInteractionLocked,
41119
41292
  children: [
41120
- viewModel.operations.goalClearNoticeSequence > 0 ? /* @__PURE__ */ jsx80(
41293
+ viewModel.operations.goalClearNoticeSequence > 0 ? /* @__PURE__ */ jsx81(
41121
41294
  AgentGUIContentToast,
41122
41295
  {
41123
41296
  insetTopPx: 16,
@@ -41125,71 +41298,29 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
41125
41298
  },
41126
41299
  viewModel.operations.goalClearNoticeSequence
41127
41300
  ) : null,
41128
- /* @__PURE__ */ jsx80(
41129
- ScrollArea3,
41301
+ /* @__PURE__ */ jsx81(
41302
+ AgentGUIDetailTimeline,
41130
41303
  {
41131
- scrollbarMode: "native",
41132
- className: "flex h-full min-h-0 flex-1 flex-col [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100",
41133
- viewportRef: timelineRef,
41134
- viewportContentRef: timelineContentRef,
41135
- viewportTestId: "agent-gui-timeline",
41136
- 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(),
41137
- viewportContentStyle: AGENT_GUI_TIMELINE_SCROLL_AREA_CONTENT_STYLE,
41138
- children: !hasActiveConversation ? shouldRenderProviderUnavailableState && disabledProviderTarget ? /* @__PURE__ */ jsx80(Fragment26, { children: renderProviderUnavailableState?.({
41139
- provider: disabledProviderTarget.provider,
41140
- providerLabel: labels.emptyProviderForProvider?.(
41141
- disabledProviderTarget.provider
41142
- ) ?? resolveAgentGuiWorkbenchProviderLabel(
41143
- disabledProviderTarget.provider
41144
- ),
41145
- target: disabledProviderTarget,
41146
- iconUrl: resolveAgentGUIHeroIconUrl2(
41147
- disabledProviderTarget.provider
41148
- ),
41149
- unavailableReason: disabledProviderTarget.unavailableReason ?? null
41150
- }) }) : /* @__PURE__ */ jsx80(
41151
- AgentGUIEmptyHomePane,
41152
- {
41153
- provider: emptyHeroProvider,
41154
- providerReadinessGate: emptyProviderReadinessGate,
41155
- showAllProviders: viewModel.rail.conversationFilter.kind === "all",
41156
- agentTargets: composerProviderTargets,
41157
- selectedAgentTarget: composerSelectedProviderTarget,
41158
- onProviderSelect: canSwitchComposerProvider && viewModel.rail.activeConversationId === null ? selectHomeComposerAgentTargetAndFocus : void 0,
41159
- noticeChrome: homeNoticeChrome,
41160
- isRespondingApproval: isInteractionPending,
41161
- previewMode,
41162
- onSubmitApprovalOption: submitApprovalOption,
41163
- onRetryActivation: retryActivation,
41164
- onAuthLogin: authLogin,
41165
- onContinueInNewConversation: continueInNewConversation,
41166
- chromeLabels,
41167
- composerProps: emptyHeroComposerProps,
41168
- labels,
41169
- suggestions: labels.homeSuggestions ?? EMPTY_HOME_SUGGESTIONS,
41170
- suggestionsCloseLabel: labels.homeSuggestionsClose,
41171
- onSelectSuggestion: handleSelectHomeSuggestion,
41172
- onSelectSuggestionAction: handleHomeSuggestionAction
41173
- }
41174
- ) : /* @__PURE__ */ jsx80(Fragment26, { children: /* @__PURE__ */ jsx80(
41175
- AgentGUIConversationTimelinePane,
41176
- {
41177
- conversation,
41178
- isLoading: showTimelineSkeleton,
41179
- isLoadingOlderMessages: viewModel.detail.isLoadingOlderMessages,
41180
- loadingLabel: labels.loadingConversation,
41181
- empty: conversationFlowEmpty,
41182
- onLinkAction: stableLinkAction,
41183
- onAuthLogin: authLogin,
41184
- availableSkills: viewModel.composer.availableSkills,
41185
- workspaceAppIcons,
41186
- previewMode,
41187
- labels: conversationFlowLabels
41188
- }
41189
- ) })
41304
+ availableSkills: viewModel.composer.availableSkills,
41305
+ conversation,
41306
+ conversationFlowEmpty,
41307
+ conversationFlowLabels,
41308
+ hasActiveConversation,
41309
+ homeContent,
41310
+ isLoadingOlderMessages: viewModel.detail.isLoadingOlderMessages,
41311
+ isTimelineScrolledToTop,
41312
+ labels,
41313
+ onAuthLogin: authLogin,
41314
+ onLinkAction: stableLinkAction,
41315
+ previewMode,
41316
+ showTimelineSkeleton,
41317
+ showUnavailableChatEmpty,
41318
+ timelineContentRef,
41319
+ timelineRef,
41320
+ workspaceAppIcons
41190
41321
  }
41191
41322
  ),
41192
- hasActiveConversation ? /* @__PURE__ */ jsx80(
41323
+ hasActiveConversation ? /* @__PURE__ */ jsx81(
41193
41324
  AgentGUIBottomDockPane,
41194
41325
  {
41195
41326
  bottomDockRef,
@@ -41226,10 +41357,10 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
41226
41357
  });
41227
41358
 
41228
41359
  // agent-gui/agentGuiNode/view/AgentGUIRenameConversationDialog.tsx
41229
- import { memo as memo13, useCallback as useCallback62, useEffect as useEffect36, useRef as useRef54, useState as useState49 } from "react";
41360
+ import { memo as memo14, useCallback as useCallback62, useEffect as useEffect36, useRef as useRef54, useState as useState49 } from "react";
41230
41361
  import { ConfirmationDialog as ConfirmationDialog4, Input as Input4 } from "@tutti-os/ui-system";
41231
- import { jsx as jsx81, jsxs as jsxs60 } from "react/jsx-runtime";
41232
- var AgentGUIRenameConversationDialog = memo13(
41362
+ import { jsx as jsx82, jsxs as jsxs60 } from "react/jsx-runtime";
41363
+ var AgentGUIRenameConversationDialog = memo14(
41233
41364
  function AgentGUIRenameConversationDialog2({
41234
41365
  conversation,
41235
41366
  open,
@@ -41284,7 +41415,7 @@ var AgentGUIRenameConversationDialog = memo13(
41284
41415
  setIsSaving(false);
41285
41416
  });
41286
41417
  }, [conversation, onOpenChange, onRename, trimmedTitle]);
41287
- return /* @__PURE__ */ jsx81(
41418
+ return /* @__PURE__ */ jsx82(
41288
41419
  ConfirmationDialog4,
41289
41420
  {
41290
41421
  cancelLabel: labels.cancel,
@@ -41294,7 +41425,7 @@ var AgentGUIRenameConversationDialog = memo13(
41294
41425
  confirmLabel: labels.renameSessionSave,
41295
41426
  description: labels.renameSessionDescription,
41296
41427
  footer: /* @__PURE__ */ jsxs60("div", { className: "flex justify-end gap-2", children: [
41297
- /* @__PURE__ */ jsx81(
41428
+ /* @__PURE__ */ jsx82(
41298
41429
  Button,
41299
41430
  {
41300
41431
  disabled: isSaving,
@@ -41332,7 +41463,7 @@ var AgentGUIRenameConversationDialog = memo13(
41332
41463
  children: labels.cancel
41333
41464
  }
41334
41465
  ),
41335
- /* @__PURE__ */ jsx81(
41466
+ /* @__PURE__ */ jsx82(
41336
41467
  Button,
41337
41468
  {
41338
41469
  className: "shadow-none",
@@ -41387,7 +41518,7 @@ var AgentGUIRenameConversationDialog = memo13(
41387
41518
  title: labels.renameSessionTitle,
41388
41519
  onConfirm: confirmRename,
41389
41520
  onOpenChange,
41390
- children: /* @__PURE__ */ jsx81(
41521
+ children: /* @__PURE__ */ jsx82(
41391
41522
  Input4,
41392
41523
  {
41393
41524
  ref: inputRef,
@@ -41415,7 +41546,7 @@ import {
41415
41546
  ReferenceSourcePicker,
41416
41547
  WorkspaceFileReferencePicker
41417
41548
  } from "@tutti-os/workspace-file-reference/ui";
41418
- import { jsx as jsx82 } from "react/jsx-runtime";
41549
+ import { jsx as jsx83 } from "react/jsx-runtime";
41419
41550
  function AgentGUIReferencePickerSurface({
41420
41551
  aggregator,
41421
41552
  copy,
@@ -41432,7 +41563,7 @@ function AgentGUIReferencePickerSurface({
41432
41563
  onConfirm,
41433
41564
  onConfirmBundles
41434
41565
  }) {
41435
- return aggregator ? /* @__PURE__ */ jsx82(
41566
+ return aggregator ? /* @__PURE__ */ jsx83(
41436
41567
  ReferenceSourcePicker,
41437
41568
  {
41438
41569
  aggregator,
@@ -41448,7 +41579,7 @@ function AgentGUIReferencePickerSurface({
41448
41579
  onConfirm,
41449
41580
  onConfirmBundles
41450
41581
  }
41451
- ) : /* @__PURE__ */ jsx82(
41582
+ ) : /* @__PURE__ */ jsx83(
41452
41583
  WorkspaceFileReferencePicker,
41453
41584
  {
41454
41585
  copy,
@@ -41465,7 +41596,7 @@ function AgentGUIReferencePickerSurface({
41465
41596
 
41466
41597
  // agent-gui/agentGuiNode/view/AgentTargetSetupRoot.tsx
41467
41598
  import { useCallback as useCallback63, useMemo as useMemo45 } from "react";
41468
- import { jsx as jsx83, jsxs as jsxs61 } from "react/jsx-runtime";
41599
+ import { jsx as jsx84, jsxs as jsxs61 } from "react/jsx-runtime";
41469
41600
  function useAgentTargetSetupRoot(input) {
41470
41601
  const { preferences } = useAgentGUIProviderRailPreferences();
41471
41602
  const homeTargetProjection = useMemo45(
@@ -41509,9 +41640,9 @@ function AgentTargetSetupRoot({
41509
41640
  controller,
41510
41641
  openEnvironmentSetup
41511
41642
  }) {
41512
- return /* @__PURE__ */ jsx83(AgentEnvPanelActionProvider, { openPanel: openEnvironmentSetup, children: /* @__PURE__ */ jsxs61(AgentTargetSetupControllerProvider, { controller, children: [
41643
+ return /* @__PURE__ */ jsx84(AgentEnvPanelActionProvider, { openPanel: openEnvironmentSetup, children: /* @__PURE__ */ jsxs61(AgentTargetSetupControllerProvider, { controller, children: [
41513
41644
  children,
41514
- /* @__PURE__ */ jsx83(
41645
+ /* @__PURE__ */ jsx84(
41515
41646
  AgentTargetSetupGate,
41516
41647
  {
41517
41648
  carouselMountedExternally: false,
@@ -42074,7 +42205,7 @@ function useAgentGUIExternalRequests(input) {
42074
42205
  }
42075
42206
 
42076
42207
  // agent-gui/agentGuiNode/AgentGUINodeView.tsx
42077
- import { jsx as jsx84, jsxs as jsxs62 } from "react/jsx-runtime";
42208
+ import { jsx as jsx85, jsxs as jsxs62 } from "react/jsx-runtime";
42078
42209
  function AgentGUINodeView({
42079
42210
  viewModel,
42080
42211
  referenceProvenanceFilter = null,
@@ -42503,7 +42634,7 @@ function AgentGUINodeView({
42503
42634
  }),
42504
42635
  [targetPresentationKey, viewModel.shell.workspaceId]
42505
42636
  );
42506
- const content = /* @__PURE__ */ jsx84(AgentTargetPresentationProvider, { agentTargets: agentTargetPresentations, children: /* @__PURE__ */ jsxs62(
42637
+ const content = /* @__PURE__ */ jsx85(AgentTargetPresentationProvider, { agentTargets: agentTargetPresentations, children: /* @__PURE__ */ jsxs62(
42507
42638
  AgentTargetSetupRoot,
42508
42639
  {
42509
42640
  controller: targetSetupController,
@@ -42527,7 +42658,7 @@ function AgentGUINodeView({
42527
42658
  "aria-hidden": conversationRailCollapsed ? "true" : void 0,
42528
42659
  inert: conversationRailCollapsed ? true : void 0,
42529
42660
  children: [
42530
- /* @__PURE__ */ jsx84(
42661
+ /* @__PURE__ */ jsx85(
42531
42662
  AgentGUIProviderRail,
42532
42663
  {
42533
42664
  activeConversation: viewModel.rail.activeConversation,
@@ -42551,7 +42682,7 @@ function AgentGUINodeView({
42551
42682
  onRequestComposerFocus: requestComposerFocus
42552
42683
  }
42553
42684
  ),
42554
- renderSidebarFooter ? /* @__PURE__ */ jsx84(
42685
+ renderSidebarFooter ? /* @__PURE__ */ jsx85(
42555
42686
  "div",
42556
42687
  {
42557
42688
  className: `${AgentGUINode_styles_default.providerRailFooter} ${AgentGUINode_styles_default.providerRailSidebarFooter} nodrag tsh-desktop-no-drag`,
@@ -42562,12 +42693,12 @@ function AgentGUINodeView({
42562
42693
  })
42563
42694
  }
42564
42695
  ) : null,
42565
- shouldShowProviderRailConfigButton ? /* @__PURE__ */ jsx84(
42696
+ shouldShowProviderRailConfigButton ? /* @__PURE__ */ jsx85(
42566
42697
  "div",
42567
42698
  {
42568
42699
  className: `${AgentGUINode_styles_default.providerRailFooter} ${AgentGUINode_styles_default.providerRailConfigFooter} nodrag tsh-desktop-no-drag`,
42569
42700
  "data-testid": "agent-gui-config-footer",
42570
- children: /* @__PURE__ */ jsx84(
42701
+ children: /* @__PURE__ */ jsx85(
42571
42702
  AgentGUIConfigMenu,
42572
42703
  {
42573
42704
  environmentSetupVisible,
@@ -42594,14 +42725,14 @@ function AgentGUINodeView({
42594
42725
  ]
42595
42726
  }
42596
42727
  ),
42597
- /* @__PURE__ */ jsx84(
42728
+ /* @__PURE__ */ jsx85(
42598
42729
  "aside",
42599
42730
  {
42600
42731
  id: "agent-gui-conversation-rail",
42601
42732
  className: `${AgentGUINode_styles_default.railPanel}${conversationRailCollapsed ? ` ${AgentGUINode_styles_default.railPanelCollapsed}` : ""}`,
42602
42733
  "aria-hidden": conversationRailCollapsed ? "true" : void 0,
42603
42734
  inert: conversationRailCollapsed ? true : void 0,
42604
- children: /* @__PURE__ */ jsx84(
42735
+ children: /* @__PURE__ */ jsx85(
42605
42736
  AgentGUIConversationRailController,
42606
42737
  {
42607
42738
  ...conversationRailStoreState,
@@ -42610,7 +42741,7 @@ function AgentGUINodeView({
42610
42741
  registerInteractionLockProbe: registerRailInteractionLockProbe,
42611
42742
  userProjects: viewModel.rail.userProjects,
42612
42743
  workspaceId: viewModel.shell.workspaceId,
42613
- footer: accountMenuState?.user ? /* @__PURE__ */ jsx84(
42744
+ footer: accountMenuState?.user ? /* @__PURE__ */ jsx85(
42614
42745
  AgentGUIAccountRailMenu,
42615
42746
  {
42616
42747
  accountMenuState,
@@ -42622,7 +42753,7 @@ function AgentGUINodeView({
42622
42753
  )
42623
42754
  }
42624
42755
  ),
42625
- /* @__PURE__ */ jsx84(
42756
+ /* @__PURE__ */ jsx85(
42626
42757
  "div",
42627
42758
  {
42628
42759
  id: "agent-gui-conversation-rail-resize",
@@ -42646,10 +42777,16 @@ function AgentGUINodeView({
42646
42777
  onPointerUp: endConversationRailResize
42647
42778
  }
42648
42779
  ),
42649
- /* @__PURE__ */ jsx84("section", { id: "agent-gui-detail", className: AgentGUINode_styles_default.detailPanel, children: /* @__PURE__ */ jsx84(
42780
+ /* @__PURE__ */ jsx85("section", { id: "agent-gui-detail", className: AgentGUINode_styles_default.detailPanel, children: /* @__PURE__ */ jsx85(
42650
42781
  AgentGUIDetailPane,
42651
42782
  {
42652
- viewModel,
42783
+ shell: viewModel.shell,
42784
+ rail: viewModel.rail,
42785
+ detail: viewModel.detail,
42786
+ composer: viewModel.composer,
42787
+ interaction: viewModel.interaction,
42788
+ readiness: viewModel.readiness,
42789
+ operations: viewModel.operations,
42653
42790
  homeTargetProjection,
42654
42791
  referenceProvenanceFilter,
42655
42792
  composerEngagement,
@@ -42688,7 +42825,7 @@ function AgentGUINodeView({
42688
42825
  ]
42689
42826
  }
42690
42827
  ),
42691
- /* @__PURE__ */ jsx84(
42828
+ /* @__PURE__ */ jsx85(
42692
42829
  AgentGUIReferencePickerSurface,
42693
42830
  {
42694
42831
  aggregator: workspaceReferencePickerAggregator,
@@ -42707,7 +42844,7 @@ function AgentGUINodeView({
42707
42844
  onConfirmBundles: workspaceReferencePickerPurpose === "reference" ? confirmWorkspaceReferenceBundles : void 0
42708
42845
  }
42709
42846
  ),
42710
- /* @__PURE__ */ jsx84(
42847
+ /* @__PURE__ */ jsx85(
42711
42848
  AgentGUIRenameConversationDialog,
42712
42849
  {
42713
42850
  conversation: renameConversationTarget,
@@ -42725,7 +42862,7 @@ function AgentGUINodeView({
42725
42862
  ]
42726
42863
  }
42727
42864
  ) });
42728
- return previewMode ? content : /* @__PURE__ */ jsx84(TooltipProvider7, { children: content });
42865
+ return previewMode ? content : /* @__PURE__ */ jsx85(TooltipProvider7, { children: content });
42729
42866
  }
42730
42867
 
42731
42868
  // agent-gui/workspaceDesktop/view/AgentProbeInfoPopover.tsx
@@ -42738,7 +42875,7 @@ import {
42738
42875
  useState as useState52
42739
42876
  } from "react";
42740
42877
  import { createPortal as createPortal5 } from "react-dom";
42741
- import { Fragment as Fragment27, jsx as jsx85, jsxs as jsxs63 } from "react/jsx-runtime";
42878
+ import { Fragment as Fragment27, jsx as jsx86, jsxs as jsxs63 } from "react/jsx-runtime";
42742
42879
  var POPOVER_MIN_VIEWPORT_INSET_PX = 16;
42743
42880
  var POPOVER_DEFAULT_WIDTH_PX = 260;
42744
42881
  function dockAgentProbeLineKey(line) {
@@ -42752,7 +42889,7 @@ function renderDockAgentProbeLine(line) {
42752
42889
  line.primary,
42753
42890
  line.secondary ? /* @__PURE__ */ jsxs63(Fragment27, { children: [
42754
42891
  " ",
42755
- /* @__PURE__ */ jsx85("span", { className: "desktop-dock-popup__agent-status-secondary", children: line.secondary })
42892
+ /* @__PURE__ */ jsx86("span", { className: "desktop-dock-popup__agent-status-secondary", children: line.secondary })
42756
42893
  ] }) : null
42757
42894
  ] });
42758
42895
  }
@@ -42845,7 +42982,7 @@ function AgentProbeInfoPopover({
42845
42982
  if (lines.length === 0) {
42846
42983
  return null;
42847
42984
  }
42848
- const popover = /* @__PURE__ */ jsx85(
42985
+ const popover = /* @__PURE__ */ jsx86(
42849
42986
  "div",
42850
42987
  {
42851
42988
  ref: popoverRef,
@@ -42854,7 +42991,7 @@ function AgentProbeInfoPopover({
42854
42991
  style: popoverStyle ?? void 0,
42855
42992
  onMouseEnter: openPopover,
42856
42993
  onMouseLeave: closeIfPointerLeavesPopover,
42857
- children: /* @__PURE__ */ jsx85("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
42994
+ children: /* @__PURE__ */ jsx86("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
42858
42995
  const label = getDockAgentProbeLineLabel(line);
42859
42996
  const valueText = formatDockAgentProbeLineText(line);
42860
42997
  return /* @__PURE__ */ jsxs63(
@@ -42863,8 +43000,8 @@ function AgentProbeInfoPopover({
42863
43000
  className: "desktop-dock-popup__agent-info-item",
42864
43001
  "data-has-label": label ? "true" : "false",
42865
43002
  children: [
42866
- label ? /* @__PURE__ */ jsx85("span", { className: "desktop-dock-popup__agent-info-label", children: label }) : null,
42867
- /* @__PURE__ */ jsx85(
43003
+ label ? /* @__PURE__ */ jsx86("span", { className: "desktop-dock-popup__agent-info-label", children: label }) : null,
43004
+ /* @__PURE__ */ jsx86(
42868
43005
  "span",
42869
43006
  {
42870
43007
  className: "desktop-dock-popup__agent-info-value",
@@ -42899,7 +43036,7 @@ function AgentProbeInfoPopover({
42899
43036
  },
42900
43037
  onBlur: closePopover,
42901
43038
  children: [
42902
- /* @__PURE__ */ jsx85(Info2, { size: 15, strokeWidth: 2.1, "aria-hidden": "true" }),
43039
+ /* @__PURE__ */ jsx86(Info2, { size: 15, strokeWidth: 2.1, "aria-hidden": "true" }),
42903
43040
  isOpen ? createPortal5(popover, document.body) : null
42904
43041
  ]
42905
43042
  }
@@ -43035,7 +43172,7 @@ function composeAgentGUIMentionService(input) {
43035
43172
  }
43036
43173
 
43037
43174
  // agent-gui/agentGuiNode/AgentGUIMentionServiceBoundary.tsx
43038
- import { jsx as jsx86 } from "react/jsx-runtime";
43175
+ import { jsx as jsx87 } from "react/jsx-runtime";
43039
43176
  function AgentGUIMentionServiceBoundary({
43040
43177
  children,
43041
43178
  service
@@ -43051,7 +43188,7 @@ function AgentGUIMentionServiceBoundary({
43051
43188
  if (!effectiveService || effectiveService === inheritedService) {
43052
43189
  return children;
43053
43190
  }
43054
- return /* @__PURE__ */ jsx86(RichTextMentionServiceProvider, { service: effectiveService, children });
43191
+ return /* @__PURE__ */ jsx87(RichTextMentionServiceProvider, { service: effectiveService, children });
43055
43192
  }
43056
43193
 
43057
43194
  // agent-gui/agentGuiNode/AgentGUINode.labels.ts
@@ -44209,13 +44346,13 @@ function useAgentGUIWorkspaceFileReferenceCopy(t) {
44209
44346
  }
44210
44347
 
44211
44348
  // agent-gui/agentGuiNode/AgentGUINode.tsx
44212
- import { jsx as jsx87, jsxs as jsxs64 } from "react/jsx-runtime";
44349
+ import { jsx as jsx88, jsxs as jsxs64 } from "react/jsx-runtime";
44213
44350
  var DISABLED_REFERENCE_PROVENANCE_CATALOG = {
44214
44351
  enabledDimensions: [],
44215
44352
  agentOptions: [],
44216
44353
  memberOptions: []
44217
44354
  };
44218
- var AgentGUINode = memo14(function AgentGUINode2({
44355
+ var AgentGUINode = memo15(function AgentGUINode2({
44219
44356
  identity,
44220
44357
  workspace,
44221
44358
  frame,
@@ -44523,7 +44660,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
44523
44660
  t,
44524
44661
  viewModel
44525
44662
  });
44526
- return /* @__PURE__ */ jsx87(AgentGUIMentionServiceBoundary, { service: mentionService, children: /* @__PURE__ */ jsx87(
44663
+ return /* @__PURE__ */ jsx88(AgentGUIMentionServiceBoundary, { service: mentionService, children: /* @__PURE__ */ jsx88(
44527
44664
  WorkspaceNodeWindow,
44528
44665
  {
44529
44666
  nodeId,
@@ -44540,7 +44677,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
44540
44677
  bodyClassName: `${AgentGUINode_styles_default.shell} nodrag size-full min-h-0 min-w-0 !bg-transparent p-0`,
44541
44678
  hideHeader: embedded,
44542
44679
  titleAccessory: /* @__PURE__ */ jsxs64("span", { className: "inline-flex flex-none items-center gap-1", children: [
44543
- /* @__PURE__ */ jsx87(
44680
+ /* @__PURE__ */ jsx88(
44544
44681
  AgentProbeInfoPopover,
44545
44682
  {
44546
44683
  lines: agentProbeLines,
@@ -44550,7 +44687,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
44550
44687
  onClose: handleAgentProbeInfoClose
44551
44688
  }
44552
44689
  ),
44553
- /* @__PURE__ */ jsx87(
44690
+ /* @__PURE__ */ jsx88(
44554
44691
  CanvasNodeGhostIconButton,
44555
44692
  {
44556
44693
  "aria-label": isConversationRailCollapsed ? t("agentHost.agentGui.expandConversationRail") : t("agentHost.agentGui.collapseConversationRail"),
@@ -44562,7 +44699,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
44562
44699
  event.stopPropagation();
44563
44700
  handleConversationRailToggle();
44564
44701
  },
44565
- children: /* @__PURE__ */ jsx87(
44702
+ children: /* @__PURE__ */ jsx88(
44566
44703
  CanvasNodePanelLinedIcon,
44567
44704
  {
44568
44705
  width: 18,
@@ -44586,7 +44723,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
44586
44723
  renderedWidth,
44587
44724
  railAutoCollapseWidthPx
44588
44725
  );
44589
- return /* @__PURE__ */ jsx87(
44726
+ return /* @__PURE__ */ jsx88(
44590
44727
  AgentGUINodeView,
44591
44728
  {
44592
44729
  viewModel,
@@ -44668,8 +44805,8 @@ var AgentGUINode = memo14(function AgentGUINode2({
44668
44805
  }, areAgentGUINodePropsEqual);
44669
44806
 
44670
44807
  // AgentGUI.tsx
44671
- import { jsx as jsx88 } from "react/jsx-runtime";
44672
- var AgentGUI = memo15(function AgentGUI2({
44808
+ import { jsx as jsx89 } from "react/jsx-runtime";
44809
+ var AgentGUI = memo16(function AgentGUI2({
44673
44810
  agentActivityRuntime,
44674
44811
  agentHostApi,
44675
44812
  tuttiModePlanReviewRuntime,
@@ -44740,15 +44877,15 @@ var AgentGUI = memo15(function AgentGUI2({
44740
44877
  hostCapabilities: nodeHostCapabilities,
44741
44878
  renderSlots: nodeRenderSlots
44742
44879
  };
44743
- const content = /* @__PURE__ */ jsx88(AgentGuiI18nProvider, { runtime: i18n, locale, children: /* @__PURE__ */ jsx88(TuttiModePlanReviewRuntimeProvider, { runtime: tuttiModePlanReviewRuntime, children: /* @__PURE__ */ jsx88(
44880
+ const content = /* @__PURE__ */ jsx89(AgentGuiI18nProvider, { runtime: i18n, locale, children: /* @__PURE__ */ jsx89(TuttiModePlanReviewRuntimeProvider, { runtime: tuttiModePlanReviewRuntime, children: /* @__PURE__ */ jsx89(
44744
44881
  AgentActivityHostProvider,
44745
44882
  {
44746
44883
  agentActivityRuntime,
44747
44884
  agentHostApi,
44748
- children: /* @__PURE__ */ jsx88(AgentGUINode, { ...nodeProps })
44885
+ children: /* @__PURE__ */ jsx89(AgentGUINode, { ...nodeProps })
44749
44886
  }
44750
44887
  ) }) });
44751
- return props.frame.previewMode ? content : /* @__PURE__ */ jsx88(TooltipProvider8, { delayDuration: 120, skipDelayDuration: 0, children: content });
44888
+ return props.frame.previewMode ? content : /* @__PURE__ */ jsx89(TooltipProvider8, { delayDuration: 120, skipDelayDuration: 0, children: content });
44752
44889
  });
44753
44890
 
44754
44891
  export {
@@ -44764,4 +44901,4 @@ export {
44764
44901
  AgentHandoffMenu,
44765
44902
  AgentGUI
44766
44903
  };
44767
- //# sourceMappingURL=chunk-DAP74J63.js.map
44904
+ //# sourceMappingURL=chunk-LHT2UBPE.js.map