@tutti-os/agent-gui 0.0.62 → 0.0.64

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 (88) hide show
  1. package/dist/agent-conversation/index.d.ts +2 -2
  2. package/dist/agent-conversation/index.js +7 -7
  3. package/dist/agent-env/index.js +2 -1
  4. package/dist/agent-env/index.js.map +1 -1
  5. package/dist/agent-message-center/index.js +9 -9
  6. package/dist/{agentGuiNodeTypes-CC52zXAV.d.ts → agentGuiNodeTypes-CCjzXdTe.d.ts} +4 -1
  7. package/dist/app/renderer/agentactivity.css +38 -4
  8. package/dist/app/renderer/assets/icons/agents/agent-colorful.png +0 -0
  9. package/dist/app/renderer/assets/icons/agents/cursor-colorful.png +0 -0
  10. package/dist/app/renderer/assets/icons/agents/cursor-flat-filled.svg +3 -0
  11. package/dist/app/renderer/assets/icons/agents/cursor-rounded.png +0 -0
  12. package/dist/{chunk-IIVHPXAB.js → chunk-2IMBPRKV.js} +1 -1
  13. package/dist/chunk-2IMBPRKV.js.map +1 -0
  14. package/dist/{chunk-4UTWOSHP.js → chunk-3NSUJ7OF.js} +5 -1
  15. package/dist/chunk-3NSUJ7OF.js.map +1 -0
  16. package/dist/{chunk-SGXYVGQT.js → chunk-52VZ54WH.js} +5 -5
  17. package/dist/{chunk-CVSCZ3CK.js → chunk-76GTKO4Q.js} +7 -2
  18. package/dist/chunk-76GTKO4Q.js.map +1 -0
  19. package/dist/{chunk-G6UO6JVM.js → chunk-C465B7WK.js} +2 -2
  20. package/dist/{chunk-22L4VWUR.js → chunk-CKCUEHBW.js} +3 -1
  21. package/dist/chunk-CKCUEHBW.js.map +1 -0
  22. package/dist/{chunk-FRCIPTUD.js → chunk-ERWDRI3F.js} +8 -18
  23. package/dist/chunk-ERWDRI3F.js.map +1 -0
  24. package/dist/{chunk-6MUKWI6Z.js → chunk-F6GDUU4X.js} +167 -113
  25. package/dist/chunk-F6GDUU4X.js.map +1 -0
  26. package/dist/{chunk-FQQDBBNI.js → chunk-FLTLZGIN.js} +3 -3
  27. package/dist/{chunk-5WB3NGIN.js → chunk-FUJ73PTH.js} +29 -2
  28. package/dist/chunk-FUJ73PTH.js.map +1 -0
  29. package/dist/{chunk-RO6KQD3J.js → chunk-IIXCU2UU.js} +2 -2
  30. package/dist/{chunk-CA25GD5Q.js → chunk-MQ6RKXXW.js} +34 -4
  31. package/dist/chunk-MQ6RKXXW.js.map +1 -0
  32. package/dist/{chunk-NZN43XT5.js → chunk-PVVM7MZZ.js} +8 -6
  33. package/dist/chunk-PVVM7MZZ.js.map +1 -0
  34. package/dist/{chunk-V4JGVBUN.js → chunk-R2NGSPQS.js} +32 -1
  35. package/dist/chunk-R2NGSPQS.js.map +1 -0
  36. package/dist/{chunk-QC642RAG.js → chunk-RDRKIMAC.js} +15 -8
  37. package/dist/chunk-RDRKIMAC.js.map +1 -0
  38. package/dist/{chunk-ZUVEBW5T.js → chunk-TFPKI4XJ.js} +2 -2
  39. package/dist/{chunk-SW6JCJCO.js → chunk-TT2YJNEP.js} +3 -3
  40. package/dist/{chunk-K4UUEG7X.js → chunk-YFTQK2G4.js} +113 -34
  41. package/dist/chunk-YFTQK2G4.js.map +1 -0
  42. package/dist/{chunk-3KS22CG2.js → chunk-YUMHFZ5A.js} +3 -3
  43. package/dist/{chunk-7P6CUYQT.js → chunk-ZTZ6STJZ.js} +2 -2
  44. package/dist/context-mention-palette/index.js +8 -8
  45. package/dist/cursor-flat-filled-CL7N3BTZ.svg +3 -0
  46. package/dist/i18n/index.d.ts +33 -3
  47. package/dist/i18n/index.js +2 -2
  48. package/dist/index.d.ts +7 -5
  49. package/dist/index.js +666 -214
  50. package/dist/index.js.map +1 -1
  51. package/dist/queued-prompt-runtime.d.ts +2 -2
  52. package/dist/{types-DSc2ta3s.d.ts → types-BAPEle8b.d.ts} +3 -3
  53. package/dist/workbench/contribution.d.ts +10 -3
  54. package/dist/workbench/contribution.js +10 -8
  55. package/dist/workbench/index.d.ts +4 -2
  56. package/dist/workbench/index.js +11 -11
  57. package/dist/workbench/launch.d.ts +1 -1
  58. package/dist/workbench/launch.js +3 -3
  59. package/dist/workbench/providerCatalog.d.ts +2 -2
  60. package/dist/workbench/providerCatalog.js +1 -1
  61. package/dist/workbench/sessionTitle.d.ts +1 -1
  62. package/dist/workbench/sessionTitle.js +3 -3
  63. package/dist/workbench/state.d.ts +1 -1
  64. package/dist/workbench/state.js +3 -3
  65. package/dist/workbench/types.d.ts +3 -2
  66. package/dist/workbench/types.js +1 -1
  67. package/dist/workspace-agent-generated-files.js +3 -3
  68. package/package.json +12 -12
  69. package/dist/chunk-22L4VWUR.js.map +0 -1
  70. package/dist/chunk-4UTWOSHP.js.map +0 -1
  71. package/dist/chunk-5WB3NGIN.js.map +0 -1
  72. package/dist/chunk-6MUKWI6Z.js.map +0 -1
  73. package/dist/chunk-CA25GD5Q.js.map +0 -1
  74. package/dist/chunk-CVSCZ3CK.js.map +0 -1
  75. package/dist/chunk-FRCIPTUD.js.map +0 -1
  76. package/dist/chunk-IIVHPXAB.js.map +0 -1
  77. package/dist/chunk-K4UUEG7X.js.map +0 -1
  78. package/dist/chunk-NZN43XT5.js.map +0 -1
  79. package/dist/chunk-QC642RAG.js.map +0 -1
  80. package/dist/chunk-V4JGVBUN.js.map +0 -1
  81. /package/dist/{chunk-SGXYVGQT.js.map → chunk-52VZ54WH.js.map} +0 -0
  82. /package/dist/{chunk-G6UO6JVM.js.map → chunk-C465B7WK.js.map} +0 -0
  83. /package/dist/{chunk-FQQDBBNI.js.map → chunk-FLTLZGIN.js.map} +0 -0
  84. /package/dist/{chunk-RO6KQD3J.js.map → chunk-IIXCU2UU.js.map} +0 -0
  85. /package/dist/{chunk-ZUVEBW5T.js.map → chunk-TFPKI4XJ.js.map} +0 -0
  86. /package/dist/{chunk-SW6JCJCO.js.map → chunk-TT2YJNEP.js.map} +0 -0
  87. /package/dist/{chunk-3KS22CG2.js.map → chunk-YUMHFZ5A.js.map} +0 -0
  88. /package/dist/{chunk-7P6CUYQT.js.map → chunk-ZTZ6STJZ.js.map} +0 -0
@@ -3,11 +3,11 @@ import {
3
3
  getOptionalAgentHostApi,
4
4
  managedAgentRoundedIconUrl,
5
5
  useOptionalAgentHostApi
6
- } from "./chunk-FRCIPTUD.js";
6
+ } from "./chunk-ERWDRI3F.js";
7
7
  import {
8
8
  translate,
9
9
  useTranslation
10
- } from "./chunk-RO6KQD3J.js";
10
+ } from "./chunk-IIXCU2UU.js";
11
11
  import {
12
12
  resolveAgentWorkspaceFileVisualKind
13
13
  } from "./chunk-PJP5BUU6.js";
@@ -3659,4 +3659,4 @@ export {
3659
3659
  CustomScrollArea,
3660
3660
  MessageSquareMoreIcon
3661
3661
  };
3662
- //# sourceMappingURL=chunk-SW6JCJCO.js.map
3662
+ //# sourceMappingURL=chunk-TT2YJNEP.js.map
@@ -3,28 +3,29 @@ import {
3
3
  createAgentGuiWorkbenchNodeStateSource,
4
4
  normalizeAgentGuiWorkbenchNodeState,
5
5
  normalizeAgentGuiWorkbenchState
6
- } from "./chunk-NZN43XT5.js";
6
+ } from "./chunk-PVVM7MZZ.js";
7
7
  import {
8
8
  agentGuiWorkbenchDockIdentityFromIdentifier,
9
9
  agentGuiWorkbenchProviderFromIdentifier,
10
10
  agentGuiWorkbenchTypeId,
11
11
  agentGuiWorkbenchUnifiedDockEntryId,
12
12
  createAgentGuiWorkbenchLaunchDescriptor
13
- } from "./chunk-3KS22CG2.js";
13
+ } from "./chunk-YUMHFZ5A.js";
14
14
  import {
15
15
  agentGuiWorkbenchDefaultDockProviders,
16
16
  isAgentGuiWorkbenchProvider,
17
17
  resolveAgentGuiWorkbenchProviderLabel
18
- } from "./chunk-22L4VWUR.js";
18
+ } from "./chunk-CKCUEHBW.js";
19
19
  import {
20
20
  agentGuiDockIconUrls,
21
21
  clampAgentGUIConversationRailWidthPx,
22
22
  resolveAgentGUIExpandedWindowFrame,
23
+ resolveAgentGuiSessionProviderIconUrl,
23
24
  shouldAutoCollapseAgentGUIConversationRail
24
- } from "./chunk-5WB3NGIN.js";
25
+ } from "./chunk-FUJ73PTH.js";
25
26
  import {
26
27
  normalizeAgentGUIProviderTargets
27
- } from "./chunk-4UTWOSHP.js";
28
+ } from "./chunk-3NSUJ7OF.js";
28
29
 
29
30
  // workbench/contribution.ts
30
31
  import { createElement as createElement2 } from "react";
@@ -32,6 +33,48 @@ import {
32
33
  getWorkbenchLayoutFrame
33
34
  } from "@tutti-os/workbench-surface";
34
35
 
36
+ // workbench/bodyRenderErrorRegistry.ts
37
+ import { useSyncExternalStore } from "react";
38
+ var listenersByNodeId = /* @__PURE__ */ new Map();
39
+ var errorNodeIds = /* @__PURE__ */ new Set();
40
+ function setAgentGuiWorkbenchBodyRenderError(nodeId, hasError) {
41
+ const hadError = errorNodeIds.has(nodeId);
42
+ if (hadError === hasError) {
43
+ return;
44
+ }
45
+ if (hasError) {
46
+ errorNodeIds.add(nodeId);
47
+ } else {
48
+ errorNodeIds.delete(nodeId);
49
+ }
50
+ for (const listener of listenersByNodeId.get(nodeId) ?? []) {
51
+ listener();
52
+ }
53
+ }
54
+ function subscribeAgentGuiWorkbenchBodyRenderError(nodeId, listener) {
55
+ let listeners = listenersByNodeId.get(nodeId);
56
+ if (!listeners) {
57
+ listeners = /* @__PURE__ */ new Set();
58
+ listenersByNodeId.set(nodeId, listeners);
59
+ }
60
+ listeners.add(listener);
61
+ return () => {
62
+ listeners?.delete(listener);
63
+ if (listeners?.size === 0) {
64
+ listenersByNodeId.delete(nodeId);
65
+ }
66
+ };
67
+ }
68
+ function getAgentGuiWorkbenchBodyRenderErrorSnapshot(nodeId) {
69
+ return errorNodeIds.has(nodeId);
70
+ }
71
+ function useAgentGuiWorkbenchBodyRenderError(nodeId) {
72
+ return useSyncExternalStore(
73
+ (listener) => subscribeAgentGuiWorkbenchBodyRenderError(nodeId, listener),
74
+ () => getAgentGuiWorkbenchBodyRenderErrorSnapshot(nodeId)
75
+ );
76
+ }
77
+
35
78
  // workbench/header.ts
36
79
  import {
37
80
  createElement
@@ -57,17 +100,21 @@ function AgentGuiWorkbenchHeader({
57
100
  isConversationRailAutoCollapsed,
58
101
  isConversationRailCollapsed,
59
102
  conversationRailWidthPx,
103
+ conversationIconUrl,
60
104
  providerRailWidthPx,
61
105
  conversationTitle,
106
+ nodeId,
62
107
  onCreateConversation,
63
108
  onToggleConversationRail,
64
- title,
109
+ title: _title,
65
110
  windowActions,
66
111
  ...headerProps
67
112
  }) {
113
+ const hasBodyRenderError = useAgentGuiWorkbenchBodyRenderError(nodeId);
68
114
  const toggleLabel = isConversationRailCollapsed ? copy.expandConversationRail : copy.collapseConversationRail;
69
- const appTitle = title?.trim() || copy.fallbackAgentLabel;
70
- const sessionTitle = conversationTitle?.trim() || "";
115
+ const appTitle = _title?.trim() || copy.fallbackAgentLabel;
116
+ const sessionTitle = hasBodyRenderError ? "" : conversationTitle?.trim() || "";
117
+ const sessionIconUrl = conversationIconUrl?.trim() || "";
71
118
  const safeDisplayMode = displayMode ?? "floating";
72
119
  const safeWindowActions = windowActions ?? {
73
120
  close: () => void 0,
@@ -125,7 +172,7 @@ function AgentGuiWorkbenchHeader({
125
172
  tone: "maximize"
126
173
  })
127
174
  ),
128
- createElement(
175
+ !isConversationRailCollapsed ? createElement(
129
176
  "div",
130
177
  {
131
178
  className: "agent-gui-workbench-header__agent-brand"
@@ -137,7 +184,7 @@ function AgentGuiWorkbenchHeader({
137
184
  },
138
185
  appTitle
139
186
  )
140
- ),
187
+ ) : null,
141
188
  createElement(
142
189
  Button,
143
190
  {
@@ -185,6 +232,13 @@ function AgentGuiWorkbenchHeader({
185
232
  {
186
233
  className: "agent-gui-workbench-header__session-title"
187
234
  },
235
+ sessionIconUrl ? createElement("img", {
236
+ alt: "",
237
+ className: "agent-gui-workbench-header__session-icon",
238
+ "data-testid": "agent-gui-window-session-icon",
239
+ draggable: false,
240
+ src: sessionIconUrl
241
+ }) : null,
188
242
  createElement(
189
243
  "span",
190
244
  {
@@ -277,7 +331,8 @@ var agentGuiWorkbenchDefaultNodeFrame = {
277
331
  x: 140,
278
332
  y: 48
279
333
  };
280
- var agentGuiWorkbenchDefaultUsableHeightRatio = 0.7;
334
+ var agentGuiWorkbenchDefaultUsableWidthRatio = 0.8;
335
+ var agentGuiWorkbenchDefaultUsableHeightRatio = 0.9;
281
336
  var agentGuiWorkbenchCompactVisibleAreaRatio = 0.9;
282
337
  var agentGuiWorkbenchNewWindowCascadeOffset = { x: 180, y: 88 };
283
338
  var agentGuiWorkbenchProviderRailWidthPx = 52;
@@ -315,6 +370,7 @@ function createAgentGuiWorkbenchContribution(input) {
315
370
  providerAvailability: input.providerAvailability,
316
371
  providerTargetsLoading: input.providerTargetsLoading,
317
372
  renderPreview: input.renderPreview,
373
+ resolveDockPopupIdentity: input.resolveDockPopupIdentity,
318
374
  resolveDockPopupTitle: input.resolveDockPopupTitle,
319
375
  sectionId: input.dockSectionId ?? "agents",
320
376
  targets: input.providerTargets,
@@ -326,6 +382,9 @@ function createAgentGuiWorkbenchContribution(input) {
326
382
  {
327
383
  frame,
328
384
  instance: { mode: "multi" },
385
+ onBodyRenderErrorChange: ({ hasError, node }) => {
386
+ setAgentGuiWorkbenchBodyRenderError(node.id, hasError);
387
+ },
329
388
  renderBody: (context) => input.renderBody(
330
389
  context,
331
390
  {
@@ -366,7 +425,12 @@ function createAgentGuiWorkbenchContribution(input) {
366
425
  nodeState.conversationRailWidthPx,
367
426
  node.frame.width
368
427
  );
369
- const conversationTitle = input.resolveDockPopupTitle?.(workbenchState) ?? null;
428
+ const conversationIdentity = input.resolveDockPopupIdentity?.(workbenchState) ?? null;
429
+ const conversationTitle = conversationIdentity?.title ?? input.resolveDockPopupTitle?.(workbenchState) ?? workbenchState.lastActiveConversationTitle ?? null;
430
+ const conversationIconUrl = conversationIdentity?.iconUrl ?? resolveAgentGuiSessionProviderIconUrl(provider) ?? resolveAgentGuiWorkbenchProviderIconUrl({
431
+ dockIconUrls: input.dockIconUrls,
432
+ provider
433
+ });
370
434
  const persistConversationRailCollapsed = (collapsed) => {
371
435
  nodeStateSource.writeNodeState({
372
436
  instanceId,
@@ -405,11 +469,13 @@ function createAgentGuiWorkbenchContribution(input) {
405
469
  };
406
470
  return createElement2(AgentGuiWorkbenchHeader, {
407
471
  copy,
472
+ conversationIconUrl,
408
473
  conversationTitle,
409
474
  conversationRailWidthPx,
410
475
  displayMode,
411
476
  isConversationRailAutoCollapsed,
412
477
  isConversationRailCollapsed,
478
+ nodeId: node.id,
413
479
  providerRailWidthPx: agentGuiWorkbenchProviderRailWidthPx,
414
480
  title: headerTitle,
415
481
  windowActions: {
@@ -556,7 +622,9 @@ function buildAgentGuiDockEntries(input) {
556
622
  return [
557
623
  createAgentGuiWorkbenchDockEntry({
558
624
  aggregateProviders: agentGuiWorkbenchDefaultDockProviders,
559
- icon: createAgentGuiWorkbenchLaunchpadStyleDockIcon({
625
+ icon: input.unifiedDockIconUrl ? createAgentGuiWorkbenchUnifiedDockIcon({
626
+ iconUrl: input.unifiedDockIconUrl
627
+ }) : createAgentGuiWorkbenchLaunchpadStyleDockIcon({
560
628
  tileIconUrls: unifiedTileIconUrls
561
629
  }),
562
630
  label: input.label ?? agentGuiWorkbenchDefaultCopy.nodeTitle,
@@ -564,6 +632,7 @@ function buildAgentGuiDockEntries(input) {
564
632
  order: 0,
565
633
  provider,
566
634
  renderPreview: input.renderPreview,
635
+ resolveDockPopupIdentity: input.resolveDockPopupIdentity,
567
636
  resolveDockPopupTitle: input.resolveDockPopupTitle,
568
637
  sectionId,
569
638
  visibility: "always"
@@ -592,23 +661,15 @@ function resolveAgentGuiWorkbenchDefaultLaunchFrame(input) {
592
661
  const defaultHeight = Math.round(
593
662
  layoutFrame.height * agentGuiWorkbenchDefaultUsableHeightRatio
594
663
  );
595
- const shouldUseCompactWidth = layoutFrame.width < input.frame.width;
596
- const shouldUseCompactHeight = layoutFrame.height < input.frame.height / agentGuiWorkbenchCompactVisibleAreaRatio;
597
- if (shouldUseCompactWidth || shouldUseCompactHeight) {
598
- const width = shouldUseCompactWidth ? Math.round(layoutFrame.width * agentGuiWorkbenchCompactVisibleAreaRatio) : input.frame.width;
599
- const height = Math.round(
600
- layoutFrame.height * agentGuiWorkbenchCompactVisibleAreaRatio
601
- );
602
- return {
603
- height,
604
- width,
605
- x: Math.round(layoutFrame.x + (layoutFrame.width - width) / 2),
606
- y: Math.round(layoutFrame.y + (layoutFrame.height - height) / 2)
607
- };
608
- }
664
+ const defaultWidth = Math.round(
665
+ layoutFrame.width * agentGuiWorkbenchDefaultUsableWidthRatio
666
+ );
609
667
  return {
610
668
  ...input.frame,
611
- height: defaultHeight
669
+ height: defaultHeight,
670
+ width: defaultWidth,
671
+ x: Math.round(layoutFrame.x + (layoutFrame.width - defaultWidth) / 2),
672
+ y: Math.round(layoutFrame.y + (layoutFrame.height - defaultHeight) / 2)
612
673
  };
613
674
  }
614
675
  function isAgentGuiWorkbenchCompactVisibleFrame(frame, defaultFrame) {
@@ -637,12 +698,12 @@ function createAgentGuiWorkbenchDockEntry(input) {
637
698
  label: input.label,
638
699
  provider: input.provider,
639
700
  renderPreview: input.renderPreview,
701
+ resolveDockPopupIdentity: input.resolveDockPopupIdentity,
640
702
  resolveDockPopupTitle: input.resolveDockPopupTitle
641
703
  }) : null,
642
704
  resolvePopupItem: ({ externalNodeState }) => {
643
- const title = input.resolveDockPopupTitle?.(
644
- normalizeAgentGuiWorkbenchState(externalNodeState)
645
- ) ?? null;
705
+ const state = normalizeAgentGuiWorkbenchState(externalNodeState);
706
+ const title = input.resolveDockPopupIdentity?.(state)?.title ?? input.resolveDockPopupTitle?.(state) ?? null;
646
707
  return {
647
708
  revision: `${input.provider}
648
709
  ${title ?? ""}`,
@@ -656,9 +717,12 @@ ${title ?? ""}`,
656
717
  }
657
718
  function resolveAgentGuiUnifiedDockTileIconUrls(dockIconUrls) {
658
719
  return agentGuiWorkbenchUnifiedDockTileProviders.map(
659
- (provider) => dockIconUrls?.[provider] ?? agentGuiDockIconUrls[provider]
720
+ (provider) => resolveAgentGuiWorkbenchProviderIconUrl({ dockIconUrls, provider })
660
721
  );
661
722
  }
723
+ function resolveAgentGuiWorkbenchProviderIconUrl(input) {
724
+ return input.dockIconUrls?.[input.provider] ?? agentGuiDockIconUrls[input.provider];
725
+ }
662
726
  function createAgentGuiWorkbenchLaunchpadStyleDockIcon(input) {
663
727
  return createElement2(
664
728
  "span",
@@ -682,6 +746,20 @@ function createAgentGuiWorkbenchLaunchpadStyleDockIcon(input) {
682
746
  )
683
747
  );
684
748
  }
749
+ function createAgentGuiWorkbenchUnifiedDockIcon(input) {
750
+ return createElement2(
751
+ "span",
752
+ {
753
+ "aria-hidden": "true",
754
+ className: "agent-gui-workbench-dock-icon agent-gui-workbench-dock-icon--single"
755
+ },
756
+ createElement2("img", {
757
+ alt: "",
758
+ draggable: false,
759
+ src: input.iconUrl
760
+ })
761
+ );
762
+ }
685
763
  function resolveAgentGuiWorkbenchProviderFromNode(node) {
686
764
  return agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ?? agentGuiWorkbenchProviderFromIdentifier(node.data.dockEntryId) ?? providerFromState(node.data.snapshotNodeState) ?? providerFromState(node.data.runtimeNodeState) ?? agentGuiWorkbenchProviderFromIdentifier(node.data.typeId) ?? "codex";
687
765
  }
@@ -811,7 +889,7 @@ function providerTargetLaunchPayloadFromRequest(payload, expectedProvider) {
811
889
  function createAgentGuiWorkbenchPreviewContent(input) {
812
890
  const { externalNodeState, node } = input.item;
813
891
  const state = normalizeAgentGuiWorkbenchState(externalNodeState);
814
- const title = input.resolveDockPopupTitle?.(state) ?? node.title;
892
+ const title = input.resolveDockPopupIdentity?.(state)?.title ?? input.resolveDockPopupTitle?.(state) ?? node.title;
815
893
  const provider = input.provider ?? agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ?? agentGuiWorkbenchProviderFromInstanceId(node.data.instanceId);
816
894
  const label = input.label ?? resolveAgentGuiWorkbenchProviderLabel(provider);
817
895
  const lines = [label, state.lastActiveAgentSessionId].filter(
@@ -853,6 +931,7 @@ function createAgentGuiWorkbenchPreviewBodyContext(input) {
853
931
  export {
854
932
  AgentGuiWorkbenchHeader,
855
933
  agentGuiWorkbenchDefaultNodeFrame,
934
+ agentGuiWorkbenchDefaultUsableWidthRatio,
856
935
  agentGuiWorkbenchDefaultUsableHeightRatio,
857
936
  agentGuiWorkbenchCompactVisibleAreaRatio,
858
937
  agentGuiWorkbenchNewWindowCascadeOffset,
@@ -866,4 +945,4 @@ export {
866
945
  resolveAgentGuiWorkbenchDefaultLaunchFrame,
867
946
  resolveAgentGuiWorkbenchContributionCopy
868
947
  };
869
- //# sourceMappingURL=chunk-K4UUEG7X.js.map
948
+ //# sourceMappingURL=chunk-YFTQK2G4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../workbench/contribution.ts","../workbench/bodyRenderErrorRegistry.ts","../workbench/header.ts"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport {\n getWorkbenchLayoutFrame,\n type WorkbenchContribution,\n type WorkbenchDockPreviewContent,\n type WorkbenchFrame,\n type WorkbenchHostDockEntry,\n type WorkbenchHostDockPopupItemInput,\n type WorkbenchHostLaunchRequest,\n type WorkbenchHostNodeBodyContext\n} from \"@tutti-os/workbench-surface\";\nimport {\n clampAgentGUIConversationRailWidthPx,\n resolveAgentGUIExpandedWindowFrame,\n shouldAutoCollapseAgentGUIConversationRail\n} from \"../agent-gui/agentGuiNode/model/agentGuiRailLayout.ts\";\nimport { agentGuiDockIconUrls } from \"../dockIcons.ts\";\nimport { resolveAgentGuiSessionProviderIconUrl } from \"../agentGuiSessionProviderIconUrls.ts\";\nimport { setAgentGuiWorkbenchBodyRenderError } from \"./bodyRenderErrorRegistry.ts\";\nimport { AgentGuiWorkbenchHeader } from \"./header.ts\";\nimport {\n agentGuiWorkbenchDockIdentityFromIdentifier,\n agentGuiWorkbenchProviderFromIdentifier,\n agentGuiWorkbenchTypeId,\n agentGuiWorkbenchUnifiedDockEntryId,\n createAgentGuiWorkbenchLaunchDescriptor\n} from \"./launch.ts\";\nimport {\n agentGuiWorkbenchProviderFromInstanceId,\n createAgentGuiWorkbenchNodeStateSource,\n normalizeAgentGuiWorkbenchNodeState,\n normalizeAgentGuiWorkbenchState\n} from \"./state.ts\";\nimport {\n agentGuiWorkbenchDefaultDockProviders,\n isAgentGuiWorkbenchProvider,\n resolveAgentGuiWorkbenchProviderLabel\n} from \"./providerCatalog.ts\";\nimport type {\n AgentGuiWorkbenchNodeState,\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\n} from \"./types.ts\";\nimport { normalizeAgentGUIProviderTargets } from \"../providerTargets.ts\";\nimport type {\n AgentGUIProviderTarget,\n AgentGUIProviderTargetRef\n} from \"../types.ts\";\n\nexport const agentGuiWorkbenchDefaultNodeFrame: WorkbenchFrame = {\n height: 560,\n width: 1040,\n x: 140,\n y: 48\n};\n\nexport const agentGuiWorkbenchDefaultUsableWidthRatio = 0.8;\nexport const agentGuiWorkbenchDefaultUsableHeightRatio = 0.9;\nexport const agentGuiWorkbenchCompactVisibleAreaRatio = 0.9;\nexport const agentGuiWorkbenchNewWindowCascadeOffset = { x: 180, y: 88 };\nexport const agentGuiWorkbenchProviderRailWidthPx = 52;\nconst agentGuiWorkbenchUnifiedDockTileProviders = [\n \"codex\",\n \"claude-code\",\n \"nexight\",\n \"hermes\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nexport const AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT =\n \"tutti:agent-gui-workbench-conversation-rail-toggle\";\n\nexport const AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT =\n \"tutti:agent-gui-workbench-new-conversation\";\n\nexport interface AgentGuiWorkbenchConversationRailToggleDetail {\n conversationRailCollapsed: boolean;\n instanceId: string;\n}\n\nexport interface AgentGuiWorkbenchNewConversationDetail {\n instanceId: string;\n}\n\nexport interface AgentGuiWorkbenchConversationIdentity {\n iconUrl?: string | null;\n title: string | null;\n}\n\nexport interface AgentGuiWorkbenchContributionCopy {\n collapseConversationRail: string;\n close: string;\n expandConversationRail: string;\n fallbackAgentLabel: string;\n maximize: string;\n minimize: string;\n newConversation: string;\n nodeTitle: string;\n restore: string;\n}\n\nexport type AgentGuiWorkbenchContributionCopyOverrides =\n Partial<AgentGuiWorkbenchContributionCopy>;\n\nexport const agentGuiWorkbenchDefaultCopy: AgentGuiWorkbenchContributionCopy = {\n collapseConversationRail: \"Collapse conversation rail\",\n close: \"Close\",\n expandConversationRail: \"Expand conversation rail\",\n fallbackAgentLabel: \"Agent\",\n maximize: \"Maximize\",\n minimize: \"Minimize\",\n newConversation: \"New conversation\",\n nodeTitle: \"Agent\",\n restore: \"Restore\"\n};\n\nexport interface AgentGuiWorkbenchRenderBodyHelpers {\n nodeTypeId: string;\n onStateChange(state: AgentGuiWorkbenchState): void;\n provider: AgentGuiWorkbenchProvider;\n}\n\nexport interface CreateAgentGuiWorkbenchContributionInput {\n copy?: AgentGuiWorkbenchContributionCopyOverrides;\n defaultProvider?: AgentGuiWorkbenchProvider | null;\n defaultProviderTargetId?: string | null;\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n dockSectionId?: string;\n frame?: WorkbenchFrame;\n id?: string;\n providerAvailability?: AgentGuiWorkbenchProviderAvailability;\n providerTargets?: readonly AgentGUIProviderTarget[] | null;\n providerTargetsLoading?: boolean;\n renderBody(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n renderPreview?(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n renderMinimizedPreview(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n resolveDockPopupTitle?: (\n state: AgentGuiWorkbenchState | null\n ) => string | null;\n resolveDockPopupIdentity?: (\n state: AgentGuiWorkbenchState | null\n ) => AgentGuiWorkbenchConversationIdentity | null;\n resolveDockLaunchPayload?: (input: {\n dockEntryId?: string | null;\n payload: unknown;\n reason: WorkbenchHostLaunchRequest[\"reason\"];\n }) => unknown | null | undefined;\n unifiedDockIconUrl?: string;\n workspaceId: string;\n}\n\nexport function createAgentGuiWorkbenchContribution(\n input: CreateAgentGuiWorkbenchContributionInput\n): WorkbenchContribution {\n const nodeStateSource = createAgentGuiWorkbenchNodeStateSource({\n workspaceId: input.workspaceId\n });\n const frame = input.frame ?? agentGuiWorkbenchDefaultNodeFrame;\n const copy = resolveAgentGuiWorkbenchContributionCopy(input.copy);\n return {\n dockEntries: buildAgentGuiDockEntries({\n defaultProvider: input.defaultProvider,\n defaultProviderTargetId: input.defaultProviderTargetId,\n dockIconUrls: input.dockIconUrls,\n label: copy.nodeTitle,\n providerAvailability: input.providerAvailability,\n providerTargetsLoading: input.providerTargetsLoading,\n renderPreview: input.renderPreview,\n resolveDockPopupIdentity: input.resolveDockPopupIdentity,\n resolveDockPopupTitle: input.resolveDockPopupTitle,\n sectionId: input.dockSectionId ?? \"agents\",\n targets: input.providerTargets,\n unifiedDockIconUrl: input.unifiedDockIconUrl\n }),\n externalStateSource: nodeStateSource.externalStateSource,\n id: input.id ?? \"workspace-agent-gui\",\n nodes: [\n {\n frame,\n instance: { mode: \"multi\" },\n onBodyRenderErrorChange: ({ hasError, node }) => {\n setAgentGuiWorkbenchBodyRenderError(node.id, hasError);\n },\n renderBody: (context) =>\n input.renderBody(\n context as WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n {\n nodeTypeId: agentGuiWorkbenchTypeId,\n onStateChange: (state) => {\n nodeStateSource.writeNodeState({\n instanceId: context.instanceId,\n nodeId: context.node.id,\n state,\n typeId: agentGuiWorkbenchTypeId\n });\n },\n provider:\n providerFromActivation(context.activation) ??\n agentGuiWorkbenchProviderFromInstanceId(context.instanceId)\n }\n ),\n renderHeader: ({\n activation,\n dragHandleProps,\n displayMode,\n externalNodeState,\n instanceId,\n isFocused,\n node,\n surfaceSize,\n windowActions\n }) => {\n const provider =\n providerFromActivation(activation) ??\n agentGuiWorkbenchProviderFromInstanceId(instanceId);\n const headerTitle = copy.nodeTitle;\n const rawWorkbenchState = (externalNodeState ??\n node.data.runtimeNodeState) as\n | Partial<AgentGuiWorkbenchNodeState>\n | null\n | undefined;\n const workbenchState =\n normalizeAgentGuiWorkbenchState(rawWorkbenchState);\n const nodeState = normalizeAgentGuiWorkbenchNodeState(\n rawWorkbenchState,\n provider\n );\n const isConversationRailAutoCollapsed =\n shouldAutoCollapseAgentGUIConversationRail(node.frame.width);\n const isConversationRailCollapsed =\n nodeState.conversationRailCollapsed === true ||\n isConversationRailAutoCollapsed;\n const conversationRailWidthPx = clampAgentGUIConversationRailWidthPx(\n nodeState.conversationRailWidthPx,\n node.frame.width\n );\n const conversationIdentity =\n input.resolveDockPopupIdentity?.(workbenchState) ?? null;\n const conversationTitle =\n conversationIdentity?.title ??\n input.resolveDockPopupTitle?.(workbenchState) ??\n workbenchState.lastActiveConversationTitle ??\n null;\n const conversationIconUrl =\n conversationIdentity?.iconUrl ??\n resolveAgentGuiSessionProviderIconUrl(provider) ??\n resolveAgentGuiWorkbenchProviderIconUrl({\n dockIconUrls: input.dockIconUrls,\n provider\n });\n const persistConversationRailCollapsed = (collapsed: boolean) => {\n nodeStateSource.writeNodeState({\n instanceId,\n nodeId: node.id,\n state: {\n ...workbenchState,\n conversationRailCollapsed: collapsed\n },\n typeId: agentGuiWorkbenchTypeId\n });\n };\n const announceConversationRailCollapsed = (collapsed: boolean) => {\n window.dispatchEvent(\n new CustomEvent<AgentGuiWorkbenchConversationRailToggleDetail>(\n AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT,\n {\n detail: {\n conversationRailCollapsed: collapsed,\n instanceId\n }\n }\n )\n );\n };\n const announceNewConversation = () => {\n window.dispatchEvent(\n new CustomEvent<AgentGuiWorkbenchNewConversationDetail>(\n AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT,\n {\n detail: {\n instanceId\n }\n }\n )\n );\n };\n\n return createElement(AgentGuiWorkbenchHeader, {\n copy,\n conversationIconUrl,\n conversationTitle,\n conversationRailWidthPx,\n displayMode,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n nodeId: node.id,\n providerRailWidthPx: agentGuiWorkbenchProviderRailWidthPx,\n title: headerTitle,\n windowActions: {\n close: windowActions.close,\n minimize: windowActions.minimize,\n toggleDisplayMode: windowActions.toggleDisplayMode\n },\n ...dragHandleProps,\n onCreateConversation: announceNewConversation,\n onPointerDown: (event) => {\n dragHandleProps.onPointerDown?.(event);\n if (!isFocused) {\n windowActions.focus();\n }\n },\n onToggleConversationRail: (nextCollapsed) => {\n announceConversationRailCollapsed(nextCollapsed);\n if (\n isConversationRailCollapsed &&\n nextCollapsed === false &&\n node.displayMode !== \"fullscreen\"\n ) {\n const expandedFrame = resolveAgentGUIExpandedWindowFrame({\n conversationRailWidthPx: nodeState.conversationRailWidthPx,\n desktopSize: surfaceSize,\n height: node.frame.height,\n position: {\n x: node.frame.x,\n y: node.frame.y\n },\n width: node.frame.width\n });\n\n windowActions.resize({\n ...node.frame,\n height: expandedFrame.size.height,\n width: expandedFrame.size.width,\n x: expandedFrame.position.x,\n y: expandedFrame.position.y\n });\n }\n\n persistConversationRailCollapsed(nextCollapsed);\n }\n });\n },\n title: copy.nodeTitle,\n typeId: agentGuiWorkbenchTypeId,\n window: {\n closable: true,\n defaultOpen: false,\n minimizedDock: {\n kind: \"component\",\n providePreview: (item) =>\n createAgentGuiWorkbenchPreviewContent({\n item,\n renderPreview: input.renderMinimizedPreview,\n resolveDockPopupTitle: input.resolveDockPopupTitle\n })\n },\n minimizable: true\n }\n }\n ],\n onLaunchRequest: (request) => {\n if (request.typeId !== agentGuiWorkbenchTypeId) {\n return null;\n }\n\n const launchPayload = resolveAgentGuiWorkbenchLaunchPayload(request, {\n resolveDockLaunchPayload: input.resolveDockLaunchPayload\n });\n const {\n activation,\n dockEntryId,\n instanceId: descriptorInstanceId,\n openInNewWindow,\n provider,\n reuseDockEntryNode,\n reuseExistingSessionNode,\n targetAgentSessionId\n } = createAgentGuiWorkbenchLaunchDescriptor({\n ...request,\n payload: launchPayload\n });\n // Locate an already-open node currently showing this session (its launch\n // instanceId may differ from the session-keyed one, e.g. a conversation\n // started fresh as a draft) so we focus it instead of opening a duplicate.\n const existingInstanceId =\n targetAgentSessionId && reuseExistingSessionNode\n ? nodeStateSource.findInstanceIdByAgentSessionId(targetAgentSessionId)\n : null;\n const instanceId = existingInstanceId ?? descriptorInstanceId;\n const title = copy.nodeTitle;\n const providerTarget = providerTargetLaunchPayloadFromRequest(\n launchPayload,\n provider\n );\n if (targetAgentSessionId) {\n const previousState = nodeStateSource.readNodeState({\n instanceId,\n typeId: agentGuiWorkbenchTypeId\n });\n nodeStateSource.writeNodeState({\n instanceId,\n state: {\n ...normalizeAgentGuiWorkbenchState(previousState),\n ...(targetAgentSessionId\n ? { lastActiveAgentSessionId: targetAgentSessionId }\n : {}),\n ...(providerTarget.agentTargetId\n ? { agentTargetId: providerTarget.agentTargetId }\n : {}),\n ...(providerTarget.providerTargetId\n ? { agentTargetId: providerTarget.providerTargetId }\n : {})\n },\n typeId: agentGuiWorkbenchTypeId\n });\n } else if (\n providerTarget.agentTargetId ||\n providerTarget.providerTargetId ||\n providerTarget.providerTargetRef\n ) {\n const previousState = nodeStateSource.readNodeState({\n instanceId,\n typeId: agentGuiWorkbenchTypeId\n });\n nodeStateSource.writeNodeState({\n instanceId,\n state: {\n ...normalizeAgentGuiWorkbenchState(previousState),\n ...(providerTarget.agentTargetId\n ? { agentTargetId: providerTarget.agentTargetId }\n : {}),\n ...(providerTarget.providerTargetId\n ? { agentTargetId: providerTarget.providerTargetId }\n : {})\n },\n typeId: agentGuiWorkbenchTypeId\n });\n }\n const defaultFrame = resolveAgentGuiWorkbenchDefaultLaunchFrame({\n frame,\n request\n });\n return {\n activation,\n ...(openInNewWindow\n ? { cascadeOffset: agentGuiWorkbenchNewWindowCascadeOffset }\n : {}),\n defaultFrame,\n dockEntryId,\n framePolicy:\n !openInNewWindow &&\n isAgentGuiWorkbenchCompactVisibleFrame(defaultFrame, frame)\n ? \"absolute\"\n : \"cascade-same-type-centered\",\n instanceId,\n // Reusing the window already showing this specific conversation\n // (e.g. clicking a completion notification) should just focus it,\n // not reset it back to the default size/position.\n preserveExistingNodeFrame: existingInstanceId !== null,\n reuseDockEntryNode,\n title,\n typeId: agentGuiWorkbenchTypeId\n };\n }\n };\n}\n\nexport type AgentGuiWorkbenchProviderAvailability = Partial<\n Record<\n AgentGuiWorkbenchProvider,\n | boolean\n | \"available\"\n | \"ready\"\n | \"unavailable\"\n | {\n available?: boolean | null;\n status?: string | null;\n }\n | null\n | undefined\n >\n>;\n\nexport interface BuildAgentGuiDockEntriesInput {\n defaultProvider?: AgentGuiWorkbenchProvider | null;\n defaultProviderTargetId?: string | null;\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n label?: string;\n providerAvailability?: AgentGuiWorkbenchProviderAvailability;\n providerTargetsLoading?: boolean;\n renderPreview?: CreateAgentGuiWorkbenchContributionInput[\"renderPreview\"];\n resolveDockPopupIdentity?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupIdentity\"];\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n sectionId?: string;\n targets?: readonly AgentGUIProviderTarget[] | null;\n unifiedDockIconUrl?: string;\n}\n\nexport function buildAgentGuiDockEntries(\n input: BuildAgentGuiDockEntriesInput\n): WorkbenchHostDockEntry[] {\n const sectionId = input.sectionId ?? \"agents\";\n const launchPayload = resolveAgentGuiUnifiedDockLaunchPayload(input);\n const provider = launchPayload.provider;\n const unifiedTileIconUrls = resolveAgentGuiUnifiedDockTileIconUrls(\n input.dockIconUrls\n );\n return [\n createAgentGuiWorkbenchDockEntry({\n aggregateProviders: agentGuiWorkbenchDefaultDockProviders,\n icon: input.unifiedDockIconUrl\n ? createAgentGuiWorkbenchUnifiedDockIcon({\n iconUrl: input.unifiedDockIconUrl\n })\n : createAgentGuiWorkbenchLaunchpadStyleDockIcon({\n tileIconUrls: unifiedTileIconUrls\n }),\n label: input.label ?? agentGuiWorkbenchDefaultCopy.nodeTitle,\n launchPayload,\n order: 0,\n provider,\n renderPreview: input.renderPreview,\n resolveDockPopupIdentity: input.resolveDockPopupIdentity,\n resolveDockPopupTitle: input.resolveDockPopupTitle,\n sectionId,\n visibility: \"always\"\n })\n ];\n}\n\nexport function resolveAgentGuiUnifiedDockLaunchPayload(\n input: Pick<\n BuildAgentGuiDockEntriesInput,\n | \"defaultProvider\"\n | \"defaultProviderTargetId\"\n | \"providerAvailability\"\n | \"providerTargetsLoading\"\n | \"targets\"\n >\n): {\n provider: AgentGuiWorkbenchProvider;\n agentTargetId?: string;\n providerTargetId?: string;\n providerTargetRef?: AgentGUIProviderTargetRef;\n} {\n const target = resolveUnifiedAgentGuiDockTarget(input);\n if (target) {\n return {\n provider: target.provider,\n ...(target.agentTargetId ? { agentTargetId: target.agentTargetId } : {}),\n providerTargetId: target.targetId,\n providerTargetRef: target.ref\n };\n }\n return {\n provider: resolveUnifiedAgentGuiDockProvider(input)\n };\n}\n\nexport function resolveAgentGuiWorkbenchDefaultLaunchFrame(input: {\n frame: WorkbenchFrame;\n request: Pick<\n WorkbenchHostLaunchRequest,\n \"layoutConstraints\" | \"surfaceSize\"\n >;\n}): WorkbenchFrame {\n const layoutFrame = getWorkbenchLayoutFrame(\n input.request.surfaceSize,\n input.request.layoutConstraints\n );\n const defaultHeight = Math.round(\n layoutFrame.height * agentGuiWorkbenchDefaultUsableHeightRatio\n );\n const defaultWidth = Math.round(\n layoutFrame.width * agentGuiWorkbenchDefaultUsableWidthRatio\n );\n\n return {\n ...input.frame,\n height: defaultHeight,\n width: defaultWidth,\n x: Math.round(layoutFrame.x + (layoutFrame.width - defaultWidth) / 2),\n y: Math.round(layoutFrame.y + (layoutFrame.height - defaultHeight) / 2)\n };\n}\n\nfunction isAgentGuiWorkbenchCompactVisibleFrame(\n frame: WorkbenchFrame,\n defaultFrame: WorkbenchFrame\n): boolean {\n return frame.width !== defaultFrame.width || frame.x !== defaultFrame.x;\n}\n\nexport function resolveAgentGuiWorkbenchContributionCopy(\n copy?: AgentGuiWorkbenchContributionCopyOverrides\n): AgentGuiWorkbenchContributionCopy {\n return {\n ...agentGuiWorkbenchDefaultCopy,\n ...copy\n };\n}\n\nfunction createAgentGuiWorkbenchDockEntry(input: {\n aggregateProviders?: readonly AgentGuiWorkbenchProvider[];\n icon: ReactNode;\n label: string;\n launchPayload?: Record<string, unknown>;\n order: number;\n provider: AgentGuiWorkbenchProvider;\n renderPreview?: CreateAgentGuiWorkbenchContributionInput[\"renderPreview\"];\n resolveDockPopupIdentity?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupIdentity\"];\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n sectionId: string;\n visibility: WorkbenchHostDockEntry[\"visibility\"];\n}): WorkbenchHostDockEntry {\n return {\n icon: input.icon,\n iconSize: \"large\",\n id: agentGuiWorkbenchUnifiedDockEntryId(),\n label: input.label,\n launchBehavior: \"enabled\",\n launchPayload: input.launchPayload ?? { provider: input.provider },\n matchNode: (node) =>\n node.data.typeId === agentGuiWorkbenchTypeId &&\n (input.aggregateProviders\n ? input.aggregateProviders.includes(\n resolveAgentGuiWorkbenchProviderFromNode(node)\n )\n : resolveAgentGuiWorkbenchProviderFromNode(node) === input.provider),\n order: input.order,\n providePopupItemPreview: (item) =>\n input.renderPreview\n ? createAgentGuiWorkbenchPreviewContent({\n item,\n label: input.label,\n provider: input.provider,\n renderPreview: input.renderPreview,\n resolveDockPopupIdentity: input.resolveDockPopupIdentity,\n resolveDockPopupTitle: input.resolveDockPopupTitle\n })\n : null,\n resolvePopupItem: ({ externalNodeState }) => {\n const state = normalizeAgentGuiWorkbenchState(externalNodeState);\n const title =\n input.resolveDockPopupIdentity?.(state)?.title ??\n input.resolveDockPopupTitle?.(state) ??\n null;\n return {\n revision: `${input.provider}\\n${title ?? \"\"}`,\n title\n };\n },\n sectionId: input.sectionId,\n typeId: agentGuiWorkbenchTypeId,\n visibility: input.visibility\n };\n}\n\nfunction resolveAgentGuiUnifiedDockTileIconUrls(\n dockIconUrls: Partial<Record<AgentGuiWorkbenchProvider, string>> | undefined\n): readonly string[] {\n return agentGuiWorkbenchUnifiedDockTileProviders.map((provider) =>\n resolveAgentGuiWorkbenchProviderIconUrl({ dockIconUrls, provider })\n );\n}\n\nfunction resolveAgentGuiWorkbenchProviderIconUrl(input: {\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n provider: AgentGuiWorkbenchProvider;\n}): string {\n return (\n input.dockIconUrls?.[input.provider] ?? agentGuiDockIconUrls[input.provider]\n );\n}\n\nfunction createAgentGuiWorkbenchLaunchpadStyleDockIcon(input: {\n tileIconUrls: readonly string[];\n}): ReactNode {\n return createElement(\n \"span\",\n {\n \"aria-hidden\": \"true\",\n className: \"agent-gui-workbench-dock-icon\"\n },\n input.tileIconUrls.map((src, index) =>\n createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-dock-icon__tile\",\n key: `${src}:${index}`\n },\n createElement(\"img\", {\n alt: \"\",\n draggable: false,\n src\n })\n )\n )\n );\n}\n\nfunction createAgentGuiWorkbenchUnifiedDockIcon(input: {\n iconUrl: string;\n}): ReactNode {\n return createElement(\n \"span\",\n {\n \"aria-hidden\": \"true\",\n className:\n \"agent-gui-workbench-dock-icon agent-gui-workbench-dock-icon--single\"\n },\n createElement(\"img\", {\n alt: \"\",\n draggable: false,\n src: input.iconUrl\n })\n );\n}\n\nfunction resolveAgentGuiWorkbenchProviderFromNode(\n node: Parameters<NonNullable<WorkbenchHostDockEntry[\"matchNode\"]>>[0]\n): AgentGuiWorkbenchProvider {\n return (\n agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ??\n agentGuiWorkbenchProviderFromIdentifier(node.data.dockEntryId) ??\n providerFromState(node.data.snapshotNodeState) ??\n providerFromState(node.data.runtimeNodeState) ??\n agentGuiWorkbenchProviderFromIdentifier(node.data.typeId) ??\n \"codex\"\n );\n}\n\nfunction providerFromState(state: unknown): AgentGuiWorkbenchProvider | null {\n if (!state || typeof state !== \"object\") {\n return null;\n }\n const provider = (state as { provider?: unknown }).provider;\n return isAgentGuiWorkbenchProvider(provider) ? provider : null;\n}\n\nfunction providerFromActivation(\n activation: unknown\n): AgentGuiWorkbenchProvider | null {\n if (!activation || typeof activation !== \"object\") {\n return null;\n }\n const payload = (activation as { payload?: unknown }).payload;\n return providerFromState(payload);\n}\n\nfunction resolveAgentGuiWorkbenchLaunchPayload(\n request: WorkbenchHostLaunchRequest,\n input: Pick<\n CreateAgentGuiWorkbenchContributionInput,\n \"resolveDockLaunchPayload\"\n >\n): unknown {\n if (\n request.reason !== \"dock\" ||\n agentGuiWorkbenchDockIdentityFromIdentifier(request.dockEntryId)?.kind !==\n \"unifiedAggregate\" ||\n !isEmptyAgentGuiWorkbenchDockLaunchPayload(request.payload)\n ) {\n return request.payload;\n }\n return (\n input.resolveDockLaunchPayload?.({\n dockEntryId: request.dockEntryId,\n payload: request.payload,\n reason: request.reason\n }) ?? request.payload\n );\n}\n\nfunction isEmptyAgentGuiWorkbenchDockLaunchPayload(payload: unknown): boolean {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return true;\n }\n const typed = payload as Record<string, unknown>;\n return (\n typeof typed.agentSessionId !== \"string\" &&\n typeof typed.draftPrompt !== \"string\"\n );\n}\n\nfunction resolveUnifiedAgentGuiDockTarget(\n input: Pick<\n BuildAgentGuiDockEntriesInput,\n | \"defaultProvider\"\n | \"defaultProviderTargetId\"\n | \"providerAvailability\"\n | \"providerTargetsLoading\"\n | \"targets\"\n >\n): AgentGUIProviderTarget | null {\n const targets = normalizeAgentGUIProviderTargets(input.targets, {\n useStaticCatalog:\n input.providerTargetsLoading !== true && input.targets == null\n }).filter(\n (\n target\n ): target is AgentGUIProviderTarget & {\n provider: (typeof agentGuiWorkbenchDefaultDockProviders)[number];\n } =>\n isAgentGuiWorkbenchProvider(target.provider) &&\n isUnifiedAgentGuiDockProvider(target.provider) &&\n target.disabled !== true &&\n isAgentGuiProviderAvailable(target.provider, input.providerAvailability)\n );\n const defaultProviderTargetId = input.defaultProviderTargetId?.trim();\n if (defaultProviderTargetId) {\n const explicitTarget = targets.find(\n (target) => target.targetId === defaultProviderTargetId\n );\n if (explicitTarget) {\n return explicitTarget;\n }\n }\n\n if (\n input.defaultProvider &&\n isUnifiedAgentGuiDockProvider(input.defaultProvider) &&\n isAgentGuiProviderAvailable(\n input.defaultProvider,\n input.providerAvailability\n )\n ) {\n const target = preferredAgentGuiDockTargetForProvider(\n targets,\n input.defaultProvider\n );\n if (target) {\n return target;\n }\n }\n\n return targets[0] ?? null;\n}\n\nfunction resolveUnifiedAgentGuiDockProvider(\n input: Pick<\n BuildAgentGuiDockEntriesInput,\n \"defaultProvider\" | \"providerAvailability\" | \"targets\"\n >\n): AgentGuiWorkbenchProvider {\n if (\n input.defaultProvider &&\n isUnifiedAgentGuiDockProvider(input.defaultProvider) &&\n isAgentGuiProviderAvailable(\n input.defaultProvider,\n input.providerAvailability\n )\n ) {\n return input.defaultProvider;\n }\n const target = resolveUnifiedAgentGuiDockTarget(input);\n if (target) {\n return target.provider;\n }\n return (\n agentGuiWorkbenchDefaultDockProviders.find((provider) =>\n isAgentGuiProviderAvailable(provider, input.providerAvailability)\n ) ?? \"codex\"\n );\n}\n\nfunction isUnifiedAgentGuiDockProvider(\n provider: AgentGuiWorkbenchProvider\n): provider is (typeof agentGuiWorkbenchDefaultDockProviders)[number] {\n return agentGuiWorkbenchDefaultDockProviders.includes(\n provider as (typeof agentGuiWorkbenchDefaultDockProviders)[number]\n );\n}\n\nfunction preferredAgentGuiDockTargetForProvider(\n targets: readonly AgentGUIProviderTarget[],\n provider: AgentGuiWorkbenchProvider\n): AgentGUIProviderTarget | null {\n const providerTargets = targets.filter(\n (target) => target.provider === provider\n );\n return providerTargets[0] ?? null;\n}\n\nfunction isAgentGuiProviderAvailable(\n provider: AgentGuiWorkbenchProvider,\n availability: AgentGuiWorkbenchProviderAvailability | null | undefined\n): boolean {\n const value = availability?.[provider];\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\") {\n return value === \"ready\" || value === \"available\";\n }\n if (typeof value.available === \"boolean\") {\n return value.available;\n }\n return value.status === \"ready\" || value.status === \"available\";\n}\n\nfunction providerTargetLaunchPayloadFromRequest(\n payload: unknown,\n expectedProvider: AgentGuiWorkbenchProvider\n): {\n agentTargetId: string | null;\n providerTargetId: string | null;\n providerTargetRef: AgentGUIProviderTargetRef | null;\n} {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return {\n agentTargetId: null,\n providerTargetId: null,\n providerTargetRef: null\n };\n }\n const agentTargetId = (payload as { agentTargetId?: unknown }).agentTargetId;\n const providerTargetId = (payload as { providerTargetId?: unknown })\n .providerTargetId;\n const providerTargetRef = (payload as { providerTargetRef?: unknown })\n .providerTargetRef;\n return {\n agentTargetId:\n typeof agentTargetId === \"string\" && agentTargetId.trim()\n ? agentTargetId.trim()\n : null,\n providerTargetId:\n typeof providerTargetId === \"string\" && providerTargetId.trim()\n ? providerTargetId.trim()\n : null,\n providerTargetRef:\n providerTargetRef &&\n typeof providerTargetRef === \"object\" &&\n !Array.isArray(providerTargetRef) &&\n (providerTargetRef as { provider?: unknown }).provider ===\n expectedProvider &&\n typeof (providerTargetRef as { kind?: unknown }).kind === \"string\" &&\n (providerTargetRef as { kind: string }).kind.trim()\n ? {\n ...(providerTargetRef as AgentGUIProviderTargetRef),\n kind: (providerTargetRef as { kind: string }).kind.trim(),\n provider: expectedProvider\n }\n : null\n };\n}\n\nfunction createAgentGuiWorkbenchPreviewContent(input: {\n item: WorkbenchHostDockPopupItemInput;\n label?: string;\n provider?: AgentGuiWorkbenchProvider;\n renderPreview: NonNullable<\n CreateAgentGuiWorkbenchContributionInput[\"renderPreview\"]\n >;\n resolveDockPopupIdentity?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupIdentity\"];\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n}): WorkbenchDockPreviewContent {\n const { externalNodeState, node } = input.item;\n const state = normalizeAgentGuiWorkbenchState(externalNodeState);\n const title =\n input.resolveDockPopupIdentity?.(state)?.title ??\n input.resolveDockPopupTitle?.(state) ??\n node.title;\n const provider =\n input.provider ??\n agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ??\n agentGuiWorkbenchProviderFromInstanceId(node.data.instanceId);\n const label = input.label ?? resolveAgentGuiWorkbenchProviderLabel(provider);\n const lines = [label, state.lastActiveAgentSessionId].filter(\n (line): line is string => Boolean(line?.trim())\n );\n return {\n element: input.renderPreview(\n createAgentGuiWorkbenchPreviewBodyContext(input.item),\n {\n nodeTypeId: agentGuiWorkbenchTypeId,\n onStateChange: () => undefined,\n provider\n }\n ),\n kind: \"component\",\n revision: `${provider}\\n${title}\\n${lines.join(\"\\n\")}`\n };\n}\n\nfunction createAgentGuiWorkbenchPreviewBodyContext(\n input: WorkbenchHostDockPopupItemInput\n): WorkbenchHostNodeBodyContext<AgentGuiWorkbenchState | null, unknown> {\n return {\n activation: null,\n displayMode: input.node.displayMode,\n externalNodeState: input.externalNodeState as AgentGuiWorkbenchState | null,\n externalWorkspaceState: input.externalWorkspaceState,\n focus: () => undefined,\n host: input.host,\n instanceId: input.node.data.instanceId,\n instanceKey: input.node.data.instanceKey ?? null,\n isFocused: false,\n node: input.node,\n previewViewport: input.previewViewport,\n setNodeRuntimeState: () => undefined,\n setSnapshotNodeState: () => undefined\n };\n}\n","import { useSyncExternalStore } from \"react\";\n\nconst listenersByNodeId = new Map<string, Set<() => void>>();\nconst errorNodeIds = new Set<string>();\n\nexport function setAgentGuiWorkbenchBodyRenderError(\n nodeId: string,\n hasError: boolean\n): void {\n const hadError = errorNodeIds.has(nodeId);\n if (hadError === hasError) {\n return;\n }\n if (hasError) {\n errorNodeIds.add(nodeId);\n } else {\n errorNodeIds.delete(nodeId);\n }\n for (const listener of listenersByNodeId.get(nodeId) ?? []) {\n listener();\n }\n}\n\nfunction subscribeAgentGuiWorkbenchBodyRenderError(\n nodeId: string,\n listener: () => void\n): () => void {\n let listeners = listenersByNodeId.get(nodeId);\n if (!listeners) {\n listeners = new Set();\n listenersByNodeId.set(nodeId, listeners);\n }\n listeners.add(listener);\n return () => {\n listeners?.delete(listener);\n if (listeners?.size === 0) {\n listenersByNodeId.delete(nodeId);\n }\n };\n}\n\nfunction getAgentGuiWorkbenchBodyRenderErrorSnapshot(nodeId: string): boolean {\n return errorNodeIds.has(nodeId);\n}\n\nexport function useAgentGuiWorkbenchBodyRenderError(nodeId: string): boolean {\n return useSyncExternalStore(\n (listener) => subscribeAgentGuiWorkbenchBodyRenderError(nodeId, listener),\n () => getAgentGuiWorkbenchBodyRenderErrorSnapshot(nodeId)\n );\n}\n","import {\n createElement,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode\n} from \"react\";\nimport type {\n WorkbenchDisplayMode,\n WorkbenchHostNodeHeaderWindowActions\n} from \"@tutti-os/workbench-surface\";\nimport {\n Button,\n PanelIcon,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n cn\n} from \"@tutti-os/ui-system\";\nimport { CreateChatIcon } from \"@tutti-os/ui-system/icons\";\nimport { useAgentGuiWorkbenchBodyRenderError } from \"./bodyRenderErrorRegistry.ts\";\n\nconst headerChromeIconButtonClassName =\n \"agent-gui-workbench-header__icon-button\";\n\nconst conversationRailToggleButtonClassName =\n \"agent-gui-workbench-header__icon-button agent-gui-workbench-header__rail-toggle\";\n\nconst headerChromeIconClassName = \"agent-gui-workbench-header__icon\";\n\nexport interface AgentGuiWorkbenchHeaderCopy {\n collapseConversationRail: string;\n close?: string;\n expandConversationRail: string;\n fallbackAgentLabel: string;\n maximize?: string;\n minimize?: string;\n newConversation: string;\n restore?: string;\n}\n\nexport interface AgentGuiWorkbenchHeaderProps extends HTMLAttributes<HTMLElement> {\n copy: AgentGuiWorkbenchHeaderCopy;\n defaultActions?: ReactNode;\n displayMode?: WorkbenchDisplayMode;\n isConversationRailAutoCollapsed: boolean;\n isConversationRailCollapsed: boolean;\n conversationRailWidthPx?: number | null;\n conversationIconUrl?: string | null;\n providerRailWidthPx?: number | null;\n conversationTitle?: string | null;\n nodeId: string;\n onCreateConversation?: () => void;\n onToggleConversationRail: (nextCollapsed: boolean) => void;\n title?: string;\n windowActions?: Pick<\n WorkbenchHostNodeHeaderWindowActions,\n \"close\" | \"minimize\" | \"toggleDisplayMode\"\n >;\n}\n\nexport function AgentGuiWorkbenchHeader({\n className,\n copy,\n defaultActions: _defaultActions,\n displayMode,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n conversationRailWidthPx,\n conversationIconUrl,\n providerRailWidthPx,\n conversationTitle,\n nodeId,\n onCreateConversation,\n onToggleConversationRail,\n title: _title,\n windowActions,\n ...headerProps\n}: AgentGuiWorkbenchHeaderProps): ReactNode {\n const hasBodyRenderError = useAgentGuiWorkbenchBodyRenderError(nodeId);\n const toggleLabel = isConversationRailCollapsed\n ? copy.expandConversationRail\n : copy.collapseConversationRail;\n const appTitle = _title?.trim() || copy.fallbackAgentLabel;\n const sessionTitle = hasBodyRenderError\n ? \"\"\n : conversationTitle?.trim() || \"\";\n const sessionIconUrl = conversationIconUrl?.trim() || \"\";\n const safeDisplayMode = displayMode ?? \"floating\";\n const safeWindowActions = windowActions ?? {\n close: () => undefined,\n minimize: () => undefined,\n toggleDisplayMode: () => undefined\n };\n const displayModeLabel =\n safeDisplayMode === \"fullscreen\"\n ? (copy.restore ?? \"Restore\")\n : (copy.maximize ?? \"Maximize\");\n const headerStyle = {\n ...(headerProps.style ?? {}),\n ...(typeof conversationRailWidthPx === \"number\" &&\n Number.isFinite(conversationRailWidthPx)\n ? {\n \"--agent-gui-workbench-header-rail-width\": `${Math.round(\n conversationRailWidthPx +\n (typeof providerRailWidthPx === \"number\" &&\n Number.isFinite(providerRailWidthPx)\n ? providerRailWidthPx\n : 0)\n )}px`\n }\n : {})\n } as CSSProperties;\n\n return createElement(\n \"header\",\n {\n ...headerProps,\n className: cn(\"agent-gui-workbench-header\", className),\n \"data-agent-gui-workbench-header\": \"true\",\n \"data-agent-gui-workbench-header-collapsed\": isConversationRailCollapsed\n ? \"true\"\n : \"false\",\n style: headerStyle\n },\n createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__primary\",\n \"data-agent-gui-workbench-header-primary\": \"true\"\n },\n createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__traffic-lights\",\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createTrafficLightButton({\n label: copy.close ?? \"Close\",\n onClick: safeWindowActions.close,\n testId: \"agent-gui-window-close\",\n tone: \"close\"\n }),\n createTrafficLightButton({\n label: copy.minimize ?? \"Minimize\",\n onClick: safeWindowActions.minimize,\n testId: \"agent-gui-window-minimize\",\n tone: \"minimize\"\n }),\n createTrafficLightButton({\n label: displayModeLabel,\n onClick: safeWindowActions.toggleDisplayMode,\n pressed: safeDisplayMode === \"fullscreen\",\n testId: \"agent-gui-window-toggle-display-mode\",\n tone: \"maximize\"\n })\n ),\n !isConversationRailCollapsed\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__agent-brand\"\n },\n createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__agent-name\"\n },\n appTitle\n )\n )\n : null,\n createElement(\n Button as never,\n {\n \"aria-label\": toggleLabel,\n className: conversationRailToggleButtonClassName,\n \"data-agent-gui-conversation-rail-auto-collapsed\":\n isConversationRailAutoCollapsed ? \"true\" : undefined,\n \"data-agent-gui-conversation-rail-collapsed\":\n isConversationRailCollapsed ? \"true\" : undefined,\n \"data-testid\": \"agent-gui-toggle-conversation-rail\",\n size: \"icon-sm\",\n title: toggleLabel,\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onToggleConversationRail(!isConversationRailCollapsed);\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(PanelIcon, { className: headerChromeIconClassName })\n ),\n isConversationRailCollapsed && onCreateConversation\n ? createElement(\n Button as never,\n {\n \"aria-label\": copy.newConversation,\n className: headerChromeIconButtonClassName,\n size: \"icon-sm\",\n title: copy.newConversation,\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onCreateConversation();\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(CreateChatIcon, {\n \"aria-hidden\": true,\n className: headerChromeIconClassName\n })\n )\n : null,\n isConversationRailCollapsed && sessionTitle\n ? createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__session-title\"\n },\n sessionIconUrl\n ? createElement(\"img\", {\n alt: \"\",\n className: \"agent-gui-workbench-header__session-icon\",\n \"data-testid\": \"agent-gui-window-session-icon\",\n draggable: false,\n src: sessionIconUrl\n })\n : null,\n createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__title-text\"\n },\n sessionTitle\n )\n )\n : null\n ),\n !isConversationRailCollapsed && sessionTitle\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__detail-title\",\n \"data-testid\": \"agent-gui-window-detail-title\"\n },\n createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__title-text\"\n },\n sessionTitle\n )\n )\n : null\n );\n}\n\nfunction createTrafficLightButton(input: {\n label: string;\n onClick: () => void;\n pressed?: boolean;\n testId: string;\n tone: \"close\" | \"minimize\" | \"maximize\";\n}): ReactNode {\n const iconName =\n input.tone === \"maximize\"\n ? input.pressed\n ? \"unfullscreen\"\n : \"fullscreen\"\n : input.tone;\n const button = createElement(\n \"button\",\n {\n \"aria-label\": input.label,\n \"aria-pressed\": input.pressed,\n className: \"agent-gui-workbench-header__traffic-light\",\n \"data-agent-gui-workbench-traffic-light\": input.tone,\n \"data-testid\": input.testId,\n type: \"button\",\n onClick: (event) => {\n event.stopPropagation();\n input.onClick();\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(TrafficLightIcon, {\n \"aria-hidden\": true,\n className: \"agent-gui-workbench-header__traffic-light-icon\",\n \"data-agent-gui-workbench-traffic-light-icon\": iconName,\n iconName\n })\n );\n\n return createElement(TooltipProvider, {\n children: createElement(\n Tooltip,\n null,\n createElement(TooltipTrigger, { asChild: true }, button),\n createElement(TooltipContent, { side: \"bottom\" }, input.label)\n ),\n delayDuration: 250,\n skipDelayDuration: 0\n });\n}\n\nfunction TrafficLightIcon({\n className,\n iconName,\n ...props\n}: {\n className: string;\n iconName: \"close\" | \"fullscreen\" | \"minimize\" | \"unfullscreen\";\n \"aria-hidden\": true;\n \"data-agent-gui-workbench-traffic-light-icon\": string;\n}): ReactNode {\n return createElement(\n \"svg\",\n {\n ...props,\n className,\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n },\n createElement(\"path\", { d: trafficLightIconPathByName[iconName] })\n );\n}\n\nconst trafficLightIconPathByName = {\n close:\n \"M16.9395 4.93953C17.5253 4.35374 18.4748 4.35374 19.0606 4.93953C19.6463 5.52532 19.6464 6.47486 19.0606 7.06062L14.1212 12.0001L19.0606 16.9395C19.6463 17.5253 19.6464 18.4749 19.0606 19.0606C18.4749 19.6464 17.5253 19.6463 16.9395 19.0606L12.0001 14.1212L7.06062 19.0606C6.47486 19.6464 5.52532 19.6463 4.93953 19.0606C4.35374 18.4748 4.35374 17.5253 4.93953 16.9395L9.87898 12.0001L4.93953 7.06062C4.35374 6.47484 4.35374 5.52532 4.93953 4.93953C5.52532 4.35374 6.47484 4.35374 7.06062 4.93953L12.0001 9.87898L16.9395 4.93953Z\",\n fullscreen:\n \"M18.1465 7.85352C18.4615 7.53861 18.9999 7.76165 19 8.20703V18.5C19 18.7761 18.7761 19 18.5 19H8.20703C7.76165 18.9999 7.53861 18.4615 7.85352 18.1465L18.1465 7.85352ZM15.793 5C16.2384 5.00006 16.4614 5.53855 16.1465 5.85352L5.85352 16.1465C5.53855 16.4614 5.00006 16.2384 5 15.793V5.5C5 5.22386 5.22386 5 5.5 5H15.793Z\",\n minimize:\n \"M5 10.5H19C19.8284 10.5 20.5 11.1716 20.5 12C20.5 12.8284 19.8284 13.5 19 13.5H5C4.17157 13.5 3.5 12.8284 3.5 12C3.5 11.1716 4.17157 10.5 5 10.5Z\",\n unfullscreen:\n \"M20.793 12C21.2384 12.0001 21.4614 12.5386 21.1465 12.8536L12.8536 21.1465C12.5386 21.4614 12.0001 21.2384 12.0001 20.793V12.5C12.0001 12.2239 12.2239 12 12.5001 12H20.793ZM11.1465 2.85356C11.4615 2.53864 12 2.76166 12.0001 3.20708V11.5C12 11.7761 11.7762 12 11.5001 12H3.20708C2.76166 12 2.53864 11.4615 2.85357 11.1465L11.1465 2.85356Z\"\n} as const;\n"],"mappings":"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","names":["createElement","createElement"]}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  agentGuiWorkbenchOpenSessionActivationType,
3
3
  agentGuiWorkbenchPrefillPromptActivationType
4
- } from "./chunk-IIVHPXAB.js";
4
+ } from "./chunk-2IMBPRKV.js";
5
5
  import {
6
6
  isAgentGuiWorkbenchProvider,
7
7
  normalizeAgentGuiWorkbenchProvider
8
- } from "./chunk-22L4VWUR.js";
8
+ } from "./chunk-CKCUEHBW.js";
9
9
 
10
10
  // workbench/launch.ts
11
11
  var agentGuiWorkbenchTypeId = "agent-gui";
@@ -236,4 +236,4 @@ export {
236
236
  resolveAgentGuiWorkbenchLaunchDockEntryId,
237
237
  shouldReuseAgentGuiWorkbenchDockEntryNode
238
238
  };
239
- //# sourceMappingURL=chunk-3KS22CG2.js.map
239
+ //# sourceMappingURL=chunk-YUMHFZ5A.js.map
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  translate,
13
13
  translateInUiLanguage
14
- } from "./chunk-RO6KQD3J.js";
14
+ } from "./chunk-IIXCU2UU.js";
15
15
  import {
16
16
  normalizeAgentTitleText
17
17
  } from "./chunk-GCBDIQDX.js";
@@ -1007,4 +1007,4 @@ export {
1007
1007
  resolveWorkspaceAgentActivityStatus,
1008
1008
  resolveWorkspaceAgentActivityTitle
1009
1009
  };
1010
- //# sourceMappingURL=chunk-7P6CUYQT.js.map
1010
+ //# sourceMappingURL=chunk-ZTZ6STJZ.js.map
@@ -4,19 +4,19 @@ import {
4
4
  AgentMentionSearchController,
5
5
  flattenAgentMentionPaletteEntries,
6
6
  groupStartKeys
7
- } from "../chunk-SGXYVGQT.js";
8
- import "../chunk-7P6CUYQT.js";
9
- import "../chunk-ZUVEBW5T.js";
7
+ } from "../chunk-52VZ54WH.js";
8
+ import "../chunk-ZTZ6STJZ.js";
9
+ import "../chunk-TFPKI4XJ.js";
10
10
  import "../chunk-IBIMGLCD.js";
11
- import "../chunk-FQQDBBNI.js";
11
+ import "../chunk-FLTLZGIN.js";
12
12
  import "../chunk-Y35GDLP2.js";
13
13
  import "../chunk-LUGELG5V.js";
14
- import "../chunk-FRCIPTUD.js";
14
+ import "../chunk-ERWDRI3F.js";
15
15
  import "../chunk-TYGL25EL.js";
16
- import "../chunk-RO6KQD3J.js";
16
+ import "../chunk-IIXCU2UU.js";
17
17
  import "../chunk-PJP5BUU6.js";
18
- import "../chunk-V4JGVBUN.js";
19
- import "../chunk-CA25GD5Q.js";
18
+ import "../chunk-R2NGSPQS.js";
19
+ import "../chunk-MQ6RKXXW.js";
20
20
  import {
21
21
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
22
22
  } from "../chunk-JM24HADP.js";
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M11.6938 1.10116C11.8436 1.07739 12.2047 1.20319 12.3256 1.27792C13.6093 2.07185 20.4975 5.75063 21.2211 6.50644C21.4804 7.31389 21.5087 16.4896 21.2211 17.3853C21.1677 17.5512 21.0501 17.6349 20.9145 17.732C19.9505 18.4215 18.8218 18.9741 17.7914 19.568C15.9244 20.6441 14.0655 21.7399 12.182 22.7867C12.0256 22.8329 11.8387 22.8879 11.6752 22.8844C11.2559 22.8754 2.71449 17.9184 2.24259 17.4273C2.22213 16.8742 2.2107 16.3135 2.21818 15.7603C2.25977 12.6902 2.14029 9.57721 2.24161 6.51132C2.69694 6.095 5.27095 4.64421 6.00528 4.23593C7.77292 3.25319 9.70198 2.02797 11.4799 1.108C11.5237 1.1053 11.6696 1.10474 11.6938 1.10116ZM8.39298 6.82577C7.44715 6.82998 3.72595 6.75303 3.08341 6.87167C3.377 7.20472 4.6331 7.88441 5.07657 8.13925L9.35196 10.5934C9.98708 10.9578 11.1863 11.6042 11.7455 12.0318L11.7436 18.5055C11.7436 19.6583 11.7074 21.0779 11.7729 22.2096C12.851 20.5502 14.0633 18.3 15.0707 16.5514L18.3627 10.8658C18.7576 10.1857 20.2944 7.64865 20.4311 7.06894C20.1775 6.80839 19.7582 6.81209 19.3949 6.81503C15.7403 6.84455 12.0423 6.80939 8.39298 6.82577Z" fill="black"/>
3
+ </svg>
@@ -347,7 +347,7 @@ declare const agentGuiI18nResources: {
347
347
  readonly providerGateLoginAction: "Connect";
348
348
  readonly providerGateComingSoonTitle: "{{provider}} is coming soon";
349
349
  readonly providerGateComingSoonDescription: "{{provider}} is not available yet. We will enable this agent when it is ready.";
350
- readonly providerGateComingSoonAction: "comming soon";
350
+ readonly providerGateComingSoonAction: "coming soon";
351
351
  readonly providerGateUnavailableTitle: "{{provider}} is not ready yet";
352
352
  readonly providerGateUnavailableDescription: "We could not confirm that {{provider}} is ready. Try checking again.";
353
353
  readonly providerGateRetryAction: "Check again";
@@ -420,6 +420,20 @@ declare const agentGuiI18nResources: {
420
420
  readonly description: "Unrestricted access to the internet and any file on your computer";
421
421
  };
422
422
  };
423
+ readonly cursor: {
424
+ readonly "read-only": {
425
+ readonly label: "Read-only";
426
+ readonly description: "Cursor plans and reads only. Proposes changes without making them.";
427
+ };
428
+ readonly agent: {
429
+ readonly label: "Ask for approval";
430
+ readonly description: "Full tool access. Cursor asks before running commands or other risky actions.";
431
+ };
432
+ readonly "full-access": {
433
+ readonly label: "Full access";
434
+ readonly description: "Runs commands without asking, unless explicitly denied by your Cursor permission rules.";
435
+ };
436
+ };
423
437
  readonly nexight: {
424
438
  readonly "read-only": {
425
439
  readonly label: "Ask for approval";
@@ -491,7 +505,7 @@ declare const agentGuiI18nResources: {
491
505
  readonly slashStatusSession: "Session";
492
506
  readonly slashStatusBaseUrl: "Base URL";
493
507
  readonly slashStatusContext: "Context";
494
- readonly slashStatusLimits: "Limits";
508
+ readonly slashStatusLimits: "Usage Limits";
495
509
  readonly slashStatusClose: "Close";
496
510
  readonly slashStatusFiveHourLimit: "5h limit";
497
511
  readonly slashStatusWeeklyLimit: "7d limit";
@@ -1289,6 +1303,7 @@ declare const agentGuiI18nResources: {
1289
1303
  readonly subAgentProgress: "PROGRESS";
1290
1304
  readonly missingFailureDetails: "The provider reported failure without details.";
1291
1305
  readonly noMatches: "No matches";
1306
+ readonly stepLabel: "Step {{index}}";
1292
1307
  readonly noMatchingTools: "No matching tools";
1293
1308
  readonly loadedAvailable: "{{loaded}} loaded · {{available}} available";
1294
1309
  readonly contentTruncated: "Content truncated";
@@ -2841,7 +2856,7 @@ declare const agentGuiI18nResources: {
2841
2856
  readonly providerGateLoginAction: "连接";
2842
2857
  readonly providerGateComingSoonTitle: "{{provider}} 即将上线";
2843
2858
  readonly providerGateComingSoonDescription: "{{provider}} 暂未开放。准备好后即可在这里使用这个 Agent。";
2844
- readonly providerGateComingSoonAction: "comming soon";
2859
+ readonly providerGateComingSoonAction: "coming soon";
2845
2860
  readonly providerGateUnavailableTitle: "{{provider}} 暂时还不可用";
2846
2861
  readonly providerGateUnavailableDescription: "我们还不能确认 {{provider}} 已准备好,可以再检测一次。";
2847
2862
  readonly providerGateRetryAction: "重新检测";
@@ -2914,6 +2929,20 @@ declare const agentGuiI18nResources: {
2914
2929
  readonly description: "可不受限制地访问互联网和您电脑上的任何文件";
2915
2930
  };
2916
2931
  };
2932
+ readonly cursor: {
2933
+ readonly "read-only": {
2934
+ readonly label: "只读";
2935
+ readonly description: "Cursor 只读取和规划,提出修改建议但不做任何更改。";
2936
+ };
2937
+ readonly agent: {
2938
+ readonly label: "请求批准";
2939
+ readonly description: "完整工具权限;Cursor 在运行命令等高风险操作前会先询问你。";
2940
+ };
2941
+ readonly "full-access": {
2942
+ readonly label: "完全访问";
2943
+ readonly description: "无需询问直接运行命令,除非被你的 Cursor 权限规则明确拒绝。";
2944
+ };
2945
+ };
2917
2946
  readonly nexight: {
2918
2947
  readonly "read-only": {
2919
2948
  readonly label: "请求批准";
@@ -3784,6 +3813,7 @@ declare const agentGuiI18nResources: {
3784
3813
  readonly subAgentProgress: "进展";
3785
3814
  readonly missingFailureDetails: "Provider 报告失败,但没有返回失败详情。";
3786
3815
  readonly noMatches: "没有匹配结果";
3816
+ readonly stepLabel: "步骤 {{index}}";
3787
3817
  readonly noMatchingTools: "没有匹配的工具";
3788
3818
  readonly loadedAvailable: "已加载 {{loaded}} 个 · 共 {{available}} 个";
3789
3819
  readonly contentTruncated: "内容已截断";