@tutti-os/agent-gui 0.0.216 → 0.0.217
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.
- package/README.md +6 -0
- package/dist/{agentFileMentionContracts-BeBex-Sf.d.ts → AgentMentionSearchContracts-y1_u9cPi.d.ts} +73 -1
- package/dist/{AgentRichTextReadonly-IPPNAAWG.js → AgentRichTextReadonly-WZHUIARR.js} +7 -7
- package/dist/agent-conversation/index.js +9 -9
- package/dist/agent-gui.d.ts +16 -3
- package/dist/agent-gui.js +23 -22
- package/dist/agent-message-center/index.js +6 -6
- package/dist/app/renderer/agentactivity.css +93 -69
- package/dist/{chunk-VMPPZO5C.js → chunk-2QF3RBR4.js} +4 -4
- package/dist/{chunk-DTP2OMCE.js → chunk-44OCOBJS.js} +9 -11
- package/dist/chunk-44OCOBJS.js.map +1 -0
- package/dist/chunk-6GX57XB5.js +135 -0
- package/dist/chunk-6GX57XB5.js.map +1 -0
- package/dist/{chunk-EZRQMJTX.js → chunk-FS7EMOVD.js} +4 -4
- package/dist/{chunk-6A6OVD66.js → chunk-G2KRK7Z5.js} +44 -18
- package/dist/chunk-G2KRK7Z5.js.map +1 -0
- package/dist/{chunk-YY5WM3OE.js → chunk-GDLM6FLK.js} +90 -47
- package/dist/chunk-GDLM6FLK.js.map +1 -0
- package/dist/{chunk-UERICUWM.js → chunk-GLVENTN6.js} +2 -2
- package/dist/{chunk-B4TM2HYJ.js → chunk-JQOQETPN.js} +5 -5
- package/dist/{chunk-QFYOJMEQ.js → chunk-M6WEFXPL.js} +2 -2
- package/dist/{chunk-AOK22J62.js → chunk-N2M4B3G3.js} +2 -2
- package/dist/{chunk-DLN33TPF.js → chunk-NXQGAXIE.js} +8 -8
- package/dist/{chunk-MOCBHFJ2.js → chunk-O4QFGCLU.js} +42 -118
- package/dist/chunk-O4QFGCLU.js.map +1 -0
- package/dist/{chunk-Z5UJC4Q3.js → chunk-PPAV2TB4.js} +3 -3
- package/dist/{chunk-4CHBM3G3.js → chunk-SUVMLCED.js} +5 -5
- package/dist/{chunk-KJA3HHUJ.js → chunk-TKECUCUW.js} +529 -291
- package/dist/chunk-TKECUCUW.js.map +1 -0
- package/dist/{chunk-P2RIZAK5.js → chunk-ZXEICU6J.js} +3 -1
- package/dist/chunk-ZXEICU6J.js.map +1 -0
- package/dist/context-mention-palette/index.d.ts +3 -3
- package/dist/context-mention-palette/index.js +12 -12
- package/dist/headerLayout-CP4ujEbo.d.ts +14 -0
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +77 -46
- package/dist/index.js +46 -39
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +7 -0
- package/dist/layout.js +9 -0
- package/dist/layout.js.map +1 -0
- package/dist/mention-search.d.ts +6 -73
- package/dist/mention-search.js +8 -8
- package/dist/workbench/browser-element-context/index.js +2 -2
- package/dist/workbench/contribution.js +7 -6
- package/dist/workbench/index.d.ts +3 -1
- package/dist/workbench/index.js +10 -9
- package/dist/workbench/launch.js +2 -2
- package/dist/workbench/sessionTitle.js +2 -2
- package/dist/workbench/tool-sidebar/index.d.ts +14 -13
- package/dist/workbench/tool-sidebar/index.js +66 -55
- package/dist/workbench/tool-sidebar/index.js.map +1 -1
- package/package.json +23 -16
- package/dist/chunk-6A6OVD66.js.map +0 -1
- package/dist/chunk-DTP2OMCE.js.map +0 -1
- package/dist/chunk-KJA3HHUJ.js.map +0 -1
- package/dist/chunk-MOCBHFJ2.js.map +0 -1
- package/dist/chunk-P2RIZAK5.js.map +0 -1
- package/dist/chunk-YY5WM3OE.js.map +0 -1
- /package/dist/{AgentRichTextReadonly-IPPNAAWG.js.map → AgentRichTextReadonly-WZHUIARR.js.map} +0 -0
- /package/dist/{chunk-VMPPZO5C.js.map → chunk-2QF3RBR4.js.map} +0 -0
- /package/dist/{chunk-EZRQMJTX.js.map → chunk-FS7EMOVD.js.map} +0 -0
- /package/dist/{chunk-UERICUWM.js.map → chunk-GLVENTN6.js.map} +0 -0
- /package/dist/{chunk-B4TM2HYJ.js.map → chunk-JQOQETPN.js.map} +0 -0
- /package/dist/{chunk-QFYOJMEQ.js.map → chunk-M6WEFXPL.js.map} +0 -0
- /package/dist/{chunk-AOK22J62.js.map → chunk-N2M4B3G3.js.map} +0 -0
- /package/dist/{chunk-DLN33TPF.js.map → chunk-NXQGAXIE.js.map} +0 -0
- /package/dist/{chunk-Z5UJC4Q3.js.map → chunk-PPAV2TB4.js.map} +0 -0
- /package/dist/{chunk-4CHBM3G3.js.map → chunk-SUVMLCED.js.map} +0 -0
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn,
|
|
3
|
+
readParsedDocumentCache,
|
|
4
|
+
resolveAgentTargetPresentation,
|
|
5
|
+
useAgentTargetPresentations
|
|
6
|
+
} from "./chunk-LQMIEH4C.js";
|
|
1
7
|
import {
|
|
2
8
|
AGENT_RICH_TEXT_CARET_ANCHOR,
|
|
3
9
|
AgentMentionReadonlyView,
|
|
@@ -6,13 +12,7 @@ import {
|
|
|
6
12
|
formatAgentMentionMarkdown,
|
|
7
13
|
mentionItemToAttrs,
|
|
8
14
|
parseAgentMentionMarkdown
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import {
|
|
11
|
-
cn,
|
|
12
|
-
readParsedDocumentCache,
|
|
13
|
-
resolveAgentTargetPresentation,
|
|
14
|
-
useAgentTargetPresentations
|
|
15
|
-
} from "./chunk-LQMIEH4C.js";
|
|
15
|
+
} from "./chunk-JQOQETPN.js";
|
|
16
16
|
|
|
17
17
|
// shared/AgentRichTextReadonly.tsx
|
|
18
18
|
import { useMemo } from "react";
|
|
@@ -747,4 +747,4 @@ export {
|
|
|
747
747
|
agentRichTextContentToPromptText,
|
|
748
748
|
AgentRichTextReadonly
|
|
749
749
|
};
|
|
750
|
-
//# sourceMappingURL=chunk-
|
|
750
|
+
//# sourceMappingURL=chunk-NXQGAXIE.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
resolveAgentGUIConversationTitleDisplayPrompt,
|
|
4
4
|
resolveAgentGuiWorkbenchHeaderTitle,
|
|
5
5
|
resolveAgentGuiWorkbenchSessionTitle
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2QF3RBR4.js";
|
|
7
7
|
import {
|
|
8
8
|
createAgentGuiWorkbenchNodeStateSource,
|
|
9
9
|
migrateLegacyAgentGuiWorkbenchState,
|
|
@@ -15,11 +15,14 @@ import {
|
|
|
15
15
|
agentGuiWorkbenchTypeId,
|
|
16
16
|
agentGuiWorkbenchUnifiedDockEntryId,
|
|
17
17
|
createAgentGuiWorkbenchLaunchDescriptor
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-SUVMLCED.js";
|
|
19
19
|
import {
|
|
20
20
|
agentGuiWorkbenchDefaultDockProviders,
|
|
21
21
|
isAgentGuiWorkbenchProvider
|
|
22
22
|
} from "./chunk-MGSRWYRN.js";
|
|
23
|
+
import {
|
|
24
|
+
useEngineSelector
|
|
25
|
+
} from "./chunk-EVQ4JY3N.js";
|
|
23
26
|
import {
|
|
24
27
|
normalizeAgentGUIAgents,
|
|
25
28
|
projectAgentGUIAgentsToTargets
|
|
@@ -28,8 +31,10 @@ import {
|
|
|
28
31
|
agentGuiDockIconUrls
|
|
29
32
|
} from "./chunk-G7DS23D4.js";
|
|
30
33
|
import {
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
AGENT_GUI_PROVIDER_RAIL_WIDTH_PX,
|
|
35
|
+
resolveAgentGUIConversationRailPresentation,
|
|
36
|
+
resolveAgentGUIExpandedWindowFrame
|
|
37
|
+
} from "./chunk-6GX57XB5.js";
|
|
33
38
|
import {
|
|
34
39
|
normalizeManagedAgentProvider
|
|
35
40
|
} from "./chunk-AFUVWWQY.js";
|
|
@@ -43,88 +48,6 @@ import {
|
|
|
43
48
|
// workbench/contribution.ts
|
|
44
49
|
import { createElement as createElement3 } from "react";
|
|
45
50
|
|
|
46
|
-
// agent-gui/agentGuiNode/model/agentGuiRailLayout.ts
|
|
47
|
-
function clamp(value, min, max) {
|
|
48
|
-
return Math.min(max, Math.max(min, value));
|
|
49
|
-
}
|
|
50
|
-
var AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX = 280;
|
|
51
|
-
var AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX = 248;
|
|
52
|
-
var AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX = 520;
|
|
53
|
-
var AGENT_GUI_DETAIL_MIN_WIDTH_PX = 220;
|
|
54
|
-
var AGENT_GUI_HOME_COMPOSER_MIN_WIDTH_PX = 320;
|
|
55
|
-
var AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX = 10;
|
|
56
|
-
var AGENT_GUI_COLLAPSED_MIN_WIDTH_PX = 460;
|
|
57
|
-
var AGENT_GUI_EXPANDED_MIN_WIDTH_PX = AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX;
|
|
58
|
-
var AGENT_GUI_AUTO_COLLAPSE_WIDTH_PX = 610;
|
|
59
|
-
var AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX = AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX + AGENT_GUI_HOME_COMPOSER_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX + 52;
|
|
60
|
-
var AGENT_GUI_EXPANDED_TARGET_WIDTH_PX = 800;
|
|
61
|
-
function shouldAutoCollapseAgentGUIConversationRail(containerWidthPx, autoCollapseWidthPx = AGENT_GUI_AUTO_COLLAPSE_WIDTH_PX) {
|
|
62
|
-
return Number.isFinite(containerWidthPx) && containerWidthPx > 0 && containerWidthPx <= autoCollapseWidthPx;
|
|
63
|
-
}
|
|
64
|
-
function resolveAgentGUIConversationRailMaxWidthPx(containerWidthPx) {
|
|
65
|
-
const safeContainerWidth = Number.isFinite(containerWidthPx) && containerWidthPx > 0 ? containerWidthPx : AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX;
|
|
66
|
-
return Math.max(
|
|
67
|
-
AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
|
|
68
|
-
Math.min(
|
|
69
|
-
AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX,
|
|
70
|
-
safeContainerWidth - AGENT_GUI_DETAIL_MIN_WIDTH_PX - AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX
|
|
71
|
-
)
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
function clampAgentGUIConversationRailWidthPx(widthPx, containerWidthPx) {
|
|
75
|
-
const preferredWidthPx = typeof widthPx === "number" && Number.isFinite(widthPx) ? Math.round(widthPx) : null;
|
|
76
|
-
return clamp(
|
|
77
|
-
preferredWidthPx ?? AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX,
|
|
78
|
-
AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
|
|
79
|
-
resolveAgentGUIConversationRailMaxWidthPx(containerWidthPx)
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
function resolveNextAgentGUIConversationRailWidthPx(input) {
|
|
83
|
-
const nextWidthPx = clampAgentGUIConversationRailWidthPx(
|
|
84
|
-
input.requestedWidthPx,
|
|
85
|
-
input.containerWidthPx
|
|
86
|
-
);
|
|
87
|
-
if (input.currentWidthPx === nextWidthPx) {
|
|
88
|
-
return input.currentWidthPx;
|
|
89
|
-
}
|
|
90
|
-
if (input.currentWidthPx === null || input.currentWidthPx === void 0) {
|
|
91
|
-
const defaultWidthPx = clampAgentGUIConversationRailWidthPx(
|
|
92
|
-
null,
|
|
93
|
-
input.containerWidthPx
|
|
94
|
-
);
|
|
95
|
-
if (nextWidthPx === defaultWidthPx) {
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return nextWidthPx;
|
|
100
|
-
}
|
|
101
|
-
function resolveAgentGUIExpandedWindowFrame(input) {
|
|
102
|
-
const desiredRailWidthPx = clampAgentGUIConversationRailWidthPx(
|
|
103
|
-
input.conversationRailWidthPx,
|
|
104
|
-
AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX
|
|
105
|
-
);
|
|
106
|
-
const desiredWidthPx = Math.max(
|
|
107
|
-
Math.round(input.width),
|
|
108
|
-
desiredRailWidthPx + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX,
|
|
109
|
-
AGENT_GUI_EXPANDED_MIN_WIDTH_PX,
|
|
110
|
-
AGENT_GUI_EXPANDED_TARGET_WIDTH_PX
|
|
111
|
-
);
|
|
112
|
-
const desktopWidthPx = Number.isFinite(input.desktopSize.width) && input.desktopSize.width > 0 ? Math.round(input.desktopSize.width) : desiredWidthPx;
|
|
113
|
-
const nextWidthPx = Math.min(desiredWidthPx, desktopWidthPx);
|
|
114
|
-
const maxX = Math.max(0, desktopWidthPx - nextWidthPx);
|
|
115
|
-
const nextX = clamp(Math.round(input.position.x), 0, maxX);
|
|
116
|
-
return {
|
|
117
|
-
position: {
|
|
118
|
-
x: nextX,
|
|
119
|
-
y: input.position.y
|
|
120
|
-
},
|
|
121
|
-
size: {
|
|
122
|
-
width: nextWidthPx,
|
|
123
|
-
height: input.height
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
|
|
128
51
|
// workbench/AgentGuiWorkbenchReactiveHeader.tsx
|
|
129
52
|
import { useMemo } from "react";
|
|
130
53
|
|
|
@@ -399,7 +322,7 @@ function stopPointerPropagation(event) {
|
|
|
399
322
|
|
|
400
323
|
// workbench/header.ts
|
|
401
324
|
var LazyAgentRichTextReadonly = lazy(
|
|
402
|
-
() => import("./AgentRichTextReadonly-
|
|
325
|
+
() => import("./AgentRichTextReadonly-WZHUIARR.js").then((module) => ({
|
|
403
326
|
default: module.AgentRichTextReadonly
|
|
404
327
|
}))
|
|
405
328
|
);
|
|
@@ -422,6 +345,7 @@ function AgentGuiWorkbenchHeader({
|
|
|
422
345
|
providerRailWidthPx,
|
|
423
346
|
primaryAccessory,
|
|
424
347
|
secondaryAccessory,
|
|
348
|
+
toolSidebar,
|
|
425
349
|
sessionMenuAdditionalActions,
|
|
426
350
|
sessionMenuActions,
|
|
427
351
|
conversationTitle,
|
|
@@ -449,6 +373,7 @@ function AgentGuiWorkbenchHeader({
|
|
|
449
373
|
const hasExpandedIdentity = Boolean(
|
|
450
374
|
collapsedTitle || sessionIconUrl || sessionIconFallbackUrl
|
|
451
375
|
);
|
|
376
|
+
const resolvedSecondaryAccessory = toolSidebar?.actions ?? secondaryAccessory;
|
|
452
377
|
const sessionMenu = onSessionAction && copy.sessionMenu && sessionTitle && !hasBodyRenderError ? createElement(AgentGuiWorkbenchSessionMenu, {
|
|
453
378
|
actions: sessionMenuActions,
|
|
454
379
|
additionalActions: sessionMenuAdditionalActions,
|
|
@@ -468,6 +393,12 @@ function AgentGuiWorkbenchHeader({
|
|
|
468
393
|
"--agent-gui-workbench-header-rail-width": `${Math.round(
|
|
469
394
|
conversationRailWidthPx + (typeof providerRailWidthPx === "number" && Number.isFinite(providerRailWidthPx) ? providerRailWidthPx : 0)
|
|
470
395
|
)}px`
|
|
396
|
+
} : {},
|
|
397
|
+
...toolSidebar ? {
|
|
398
|
+
"--agent-gui-tool-sidebar-layout-width": `${Math.max(
|
|
399
|
+
0,
|
|
400
|
+
Math.round(toolSidebar.layoutWidthPx)
|
|
401
|
+
)}px`
|
|
471
402
|
} : {}
|
|
472
403
|
};
|
|
473
404
|
return createElement(
|
|
@@ -479,6 +410,7 @@ function AgentGuiWorkbenchHeader({
|
|
|
479
410
|
"data-agent-gui-workbench-header-body-error": hasBodyRenderError ? "true" : "false",
|
|
480
411
|
"data-agent-gui-workbench-header-collapsed": isConversationRailCollapsed ? "true" : "false",
|
|
481
412
|
"data-agent-gui-workbench-header-has-session": sessionTitle ? "true" : "false",
|
|
413
|
+
"data-agent-gui-workbench-header-tool-sidebar": toolSidebar ? "true" : "false",
|
|
482
414
|
style: headerStyle
|
|
483
415
|
},
|
|
484
416
|
createElement(
|
|
@@ -567,15 +499,15 @@ function AgentGuiWorkbenchHeader({
|
|
|
567
499
|
),
|
|
568
500
|
sessionMenu
|
|
569
501
|
) : null,
|
|
570
|
-
isConversationRailCollapsed &&
|
|
502
|
+
isConversationRailCollapsed && resolvedSecondaryAccessory ? createElement(
|
|
571
503
|
"div",
|
|
572
504
|
{
|
|
573
505
|
className: "agent-gui-workbench-header__secondary-accessory"
|
|
574
506
|
},
|
|
575
|
-
|
|
507
|
+
resolvedSecondaryAccessory
|
|
576
508
|
) : null
|
|
577
509
|
),
|
|
578
|
-
!isConversationRailCollapsed && (hasExpandedIdentity ||
|
|
510
|
+
!isConversationRailCollapsed && (hasExpandedIdentity || resolvedSecondaryAccessory) ? createElement(
|
|
579
511
|
"div",
|
|
580
512
|
{
|
|
581
513
|
className: "agent-gui-workbench-header__detail"
|
|
@@ -616,12 +548,12 @@ function AgentGuiWorkbenchHeader({
|
|
|
616
548
|
) : null,
|
|
617
549
|
sessionMenu
|
|
618
550
|
) : null,
|
|
619
|
-
|
|
551
|
+
resolvedSecondaryAccessory ? createElement(
|
|
620
552
|
"div",
|
|
621
553
|
{
|
|
622
554
|
className: "agent-gui-workbench-header__secondary-accessory"
|
|
623
555
|
},
|
|
624
|
-
|
|
556
|
+
resolvedSecondaryAccessory
|
|
625
557
|
) : null
|
|
626
558
|
) : null
|
|
627
559
|
);
|
|
@@ -924,7 +856,7 @@ var agentGuiWorkbenchDefaultUsableWidthRatio = 0.9;
|
|
|
924
856
|
var agentGuiWorkbenchDefaultUsableHeightRatio = 0.9;
|
|
925
857
|
var agentGuiWorkbenchCompactVisibleAreaRatio = 0.9;
|
|
926
858
|
var agentGuiWorkbenchNewWindowCascadeOffset = { x: 180, y: 88 };
|
|
927
|
-
var agentGuiWorkbenchProviderRailWidthPx =
|
|
859
|
+
var agentGuiWorkbenchProviderRailWidthPx = AGENT_GUI_PROVIDER_RAIL_WIDTH_PX;
|
|
928
860
|
var agentGuiWorkbenchUnifiedDockTileProviders = [
|
|
929
861
|
"codex",
|
|
930
862
|
"claude-code",
|
|
@@ -1240,16 +1172,15 @@ function createAgentGuiWorkbenchContribution(input) {
|
|
|
1240
1172
|
const workbenchState = normalizeAgentGuiWorkbenchState(
|
|
1241
1173
|
migrateLegacyAgentGuiWorkbenchState(rawWorkbenchState)
|
|
1242
1174
|
);
|
|
1243
|
-
const
|
|
1244
|
-
context.node.frame.width
|
|
1245
|
-
|
|
1246
|
-
|
|
1175
|
+
const railPresentation = resolveAgentGUIConversationRailPresentation({
|
|
1176
|
+
containerWidthPx: context.node.frame.width,
|
|
1177
|
+
conversationRailCollapsed: workbenchState.conversationRailCollapsed,
|
|
1178
|
+
conversationRailWidthPx: workbenchState.conversationRailWidthPx
|
|
1179
|
+
});
|
|
1180
|
+
if (railPresentation.isCollapsed) {
|
|
1247
1181
|
return "collapsed";
|
|
1248
1182
|
}
|
|
1249
|
-
return `expanded:${
|
|
1250
|
-
workbenchState.conversationRailWidthPx,
|
|
1251
|
-
context.node.frame.width
|
|
1252
|
-
)}`;
|
|
1183
|
+
return `expanded:${railPresentation.conversationRailWidthPx}`;
|
|
1253
1184
|
},
|
|
1254
1185
|
instance: { mode: "multi" },
|
|
1255
1186
|
onBodyRenderErrorChange: ({ hasError, node }) => {
|
|
@@ -1310,12 +1241,14 @@ function createAgentGuiWorkbenchContribution(input) {
|
|
|
1310
1241
|
migratedWorkbenchState,
|
|
1311
1242
|
provider
|
|
1312
1243
|
);
|
|
1313
|
-
const
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
nodeState.conversationRailWidthPx
|
|
1317
|
-
|
|
1318
|
-
|
|
1244
|
+
const railPresentation = resolveAgentGUIConversationRailPresentation({
|
|
1245
|
+
containerWidthPx: node.frame.width,
|
|
1246
|
+
conversationRailCollapsed: nodeState.conversationRailCollapsed,
|
|
1247
|
+
conversationRailWidthPx: nodeState.conversationRailWidthPx
|
|
1248
|
+
});
|
|
1249
|
+
const isConversationRailAutoCollapsed = railPresentation.isAutoCollapsed;
|
|
1250
|
+
const isConversationRailCollapsed = railPresentation.isCollapsed;
|
|
1251
|
+
const conversationRailWidthPx = railPresentation.conversationRailWidthPx;
|
|
1319
1252
|
const conversationIdentity = input.sessionEngine ? null : input.resolveDockPopupIdentity?.(workbenchState) ?? null;
|
|
1320
1253
|
const conversationTitle = input.sessionEngine ? null : conversationIdentity?.title ?? input.resolveDockPopupTitle?.(workbenchState) ?? null;
|
|
1321
1254
|
const hasConversation = Boolean(
|
|
@@ -1443,6 +1376,7 @@ function createAgentGuiWorkbenchContribution(input) {
|
|
|
1443
1376
|
closable: true,
|
|
1444
1377
|
defaultOpen: false,
|
|
1445
1378
|
header: {
|
|
1379
|
+
border: "none",
|
|
1446
1380
|
layout: "overlay"
|
|
1447
1381
|
},
|
|
1448
1382
|
minimizedDock: { kind: "snapshot" },
|
|
@@ -1568,16 +1502,6 @@ function hasAgentSessionId2(payload) {
|
|
|
1568
1502
|
|
|
1569
1503
|
export {
|
|
1570
1504
|
resolveAgentGuiSessionProviderFlatIconUrl,
|
|
1571
|
-
AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
|
|
1572
|
-
AGENT_GUI_DETAIL_MIN_WIDTH_PX,
|
|
1573
|
-
AGENT_GUI_COLLAPSED_MIN_WIDTH_PX,
|
|
1574
|
-
AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX,
|
|
1575
|
-
AGENT_GUI_EXPANDED_TARGET_WIDTH_PX,
|
|
1576
|
-
shouldAutoCollapseAgentGUIConversationRail,
|
|
1577
|
-
resolveAgentGUIConversationRailMaxWidthPx,
|
|
1578
|
-
clampAgentGUIConversationRailWidthPx,
|
|
1579
|
-
resolveNextAgentGUIConversationRailWidthPx,
|
|
1580
|
-
resolveAgentGUIExpandedWindowFrame,
|
|
1581
1505
|
resolveAgentGuiWorkbenchConversationIdentity,
|
|
1582
1506
|
agentGuiWorkbenchConversationIdentitiesEqual,
|
|
1583
1507
|
AgentGuiWorkbenchHeader,
|
|
@@ -1600,4 +1524,4 @@ export {
|
|
|
1600
1524
|
AGENT_GUI_WORKBENCH_OPEN_EXTERNAL_IMPORT_EVENT,
|
|
1601
1525
|
createAgentGuiWorkbenchContribution
|
|
1602
1526
|
};
|
|
1603
|
-
//# sourceMappingURL=chunk-
|
|
1527
|
+
//# sourceMappingURL=chunk-O4QFGCLU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../workbench/contribution.ts","../workbench/AgentGuiWorkbenchReactiveHeader.tsx","../workbench/conversationIdentity.ts","../agentGuiSessionProviderIconUrls.ts","../workbench/header.ts","../app/renderer/assets/icons/open-link-lined.svg","../workbench/bodyRenderErrorRegistry.ts","../workbench/AgentGuiWorkbenchSessionMenu.tsx","../workbench/sessionActions.ts","../workbench/contributionDock.tsx"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport type { AgentSessionEngine } from \"@tutti-os/agent-activity-core\";\nimport {\n type WorkbenchContribution,\n type WorkbenchFrame,\n type WorkbenchHostNodeBodyContext\n} from \"@tutti-os/workbench-surface\";\nimport {\n resolveAgentGUIConversationRailPresentation,\n resolveAgentGUIExpandedWindowFrame\n} from \"../agent-gui/agentGuiNode/model/agentGuiRailLayout.ts\";\nimport { AgentGuiWorkbenchReactiveHeader } from \"./AgentGuiWorkbenchReactiveHeader.tsx\";\nimport { setAgentGuiWorkbenchBodyRenderError } from \"./bodyRenderErrorRegistry.ts\";\nimport {\n AgentGuiWorkbenchHeader,\n type AgentGuiWorkbenchHeaderProps\n} from \"./header.ts\";\nimport type { AgentGuiWorkbenchConversationIdentity } from \"./conversationIdentity.ts\";\nimport {\n agentGuiWorkbenchTypeId,\n createAgentGuiWorkbenchLaunchDescriptor\n} from \"./launch.ts\";\nimport {\n createAgentGuiWorkbenchNodeStateSource,\n migrateLegacyAgentGuiWorkbenchState,\n normalizeAgentGuiWorkbenchNodeState,\n normalizeAgentGuiWorkbenchState\n} from \"./state.ts\";\nimport type {\n AgentGuiWorkbenchNodeState,\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\n} from \"./types.ts\";\nimport type { AgentGUIAgentDirectoryPort } from \"../types.ts\";\nimport {\n AGENT_GUI_WORKBENCH_SESSION_ACTION_EVENT,\n dispatchAgentGuiWorkbenchSessionAction,\n isAgentGuiWorkbenchSessionAction\n} from \"./sessionActions.ts\";\nimport type {\n AgentGuiWorkbenchSessionAction,\n AgentGuiWorkbenchSessionActionDetail,\n AgentGuiWorkbenchSessionActionRequest,\n AgentGuiWorkbenchSessionMenuCopy\n} from \"./sessionActions.ts\";\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\n/**\n * Fired when the empty-hero \"Import session\" suggestion is chosen. The host\n * chrome (which owns the external-agent import wizard state) listens for this\n * and opens the wizard.\n */\nexport const AGENT_GUI_WORKBENCH_OPEN_EXTERNAL_IMPORT_EVENT =\n \"tutti:agent-gui-workbench-open-external-import\";\n\nexport interface AgentGuiWorkbenchConversationRailToggleDetail {\n conversationRailCollapsed: boolean;\n instanceId: string;\n}\n\nexport interface AgentGuiWorkbenchNewConversationDetail {\n instanceId: string;\n}\n\nexport {\n AGENT_GUI_WORKBENCH_SESSION_ACTION_EVENT,\n dispatchAgentGuiWorkbenchSessionAction,\n isAgentGuiWorkbenchSessionAction\n};\nexport type {\n AgentGuiWorkbenchSessionAction,\n AgentGuiWorkbenchSessionActionDetail,\n AgentGuiWorkbenchSessionActionRequest,\n AgentGuiWorkbenchSessionMenuCopy\n};\n\nexport type { AgentGuiWorkbenchConversationIdentity } from \"./conversationIdentity.ts\";\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 openDetachedWindow: string;\n restore: string;\n untitledConversation: string;\n sessionMenu?: AgentGuiWorkbenchSessionMenuCopy | null;\n}\n\nexport type AgentGuiWorkbenchContributionCopyOverrides =\n Partial<AgentGuiWorkbenchContributionCopy>;\n\nexport interface AgentGuiWorkbenchRenderBodyHelpers {\n agentDirectory: AgentGUIAgentDirectoryPort;\n agentTargetId: string | null;\n nodeTypeId: string;\n onStateChange(state: AgentGuiWorkbenchState): void;\n provider: AgentGuiWorkbenchProvider | null;\n}\n\nexport interface CreateAgentGuiWorkbenchContributionInput {\n agentDirectory: AgentGUIAgentDirectoryPort;\n copy?: AgentGuiWorkbenchContributionCopyOverrides;\n defaultProvider?: AgentGuiWorkbenchProvider | null;\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n dockSectionId?: string;\n frame?: WorkbenchFrame;\n id?: string;\n providerAvailability?: AgentGuiWorkbenchProviderAvailability;\n renderBody(\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 sessionEngine?: AgentSessionEngine;\n onOpenDetachedWindow?: (input: {\n agentSessionId?: string | null;\n agentTargetId?: string | null;\n provider: AgentGuiWorkbenchProvider;\n workspaceId: string;\n }) => void | Promise<void>;\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 agentDirectory: input.agentDirectory,\n defaultProvider: input.defaultProvider,\n dockIconUrls: input.dockIconUrls,\n label: copy.nodeTitle,\n providerAvailability: input.providerAvailability,\n resolveDockPopupIdentity: input.resolveDockPopupIdentity,\n resolveDockPopupTitle: input.resolveDockPopupTitle,\n sectionId: input.dockSectionId ?? \"agents\",\n unifiedDockIconUrl: input.unifiedDockIconUrl\n }),\n externalStateSource: nodeStateSource.externalStateSource,\n id: input.id ?? \"workspace-agent-gui\",\n nodes: [\n {\n frame,\n getHeaderFrameRenderKey: (context) => {\n if (context.isDragging) {\n return \"dragging\";\n }\n const rawWorkbenchState = (context.externalNodeState ??\n context.node.data.runtimeNodeState) as\n | Partial<AgentGuiWorkbenchNodeState>\n | null\n | undefined;\n const workbenchState = normalizeAgentGuiWorkbenchState(\n migrateLegacyAgentGuiWorkbenchState(rawWorkbenchState)\n );\n const railPresentation = resolveAgentGUIConversationRailPresentation({\n containerWidthPx: context.node.frame.width,\n conversationRailCollapsed: workbenchState.conversationRailCollapsed,\n conversationRailWidthPx: workbenchState.conversationRailWidthPx\n });\n if (railPresentation.isCollapsed) {\n return \"collapsed\";\n }\n return `expanded:${railPresentation.conversationRailWidthPx}`;\n },\n instance: { mode: \"multi\" },\n onBodyRenderErrorChange: ({ hasError, node }) => {\n setAgentGuiWorkbenchBodyRenderError(node.id, hasError);\n },\n renderBody: (context) => {\n const persistedState = normalizeAgentGuiWorkbenchState(\n context.externalNodeState ?? context.node?.data.snapshotNodeState\n );\n const activationAgentTargetId = agentTargetIdFromActivation(\n context.activation\n );\n const state =\n activationAgentTargetId && !persistedState.agentTargetId\n ? { ...persistedState, agentTargetId: activationAgentTargetId }\n : persistedState;\n const agent = resolveAgentGuiWorkbenchStateAgent(\n state,\n input.agentDirectory\n );\n return input.renderBody(\n context as WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n {\n agentDirectory: input.agentDirectory,\n agentTargetId: state.agentTargetId ?? null,\n nodeTypeId: agentGuiWorkbenchTypeId,\n onStateChange: (nextState) => {\n nodeStateSource.writeNodeState({\n instanceId: context.instanceId,\n nodeId: context.node.id,\n state: nextState,\n typeId: agentGuiWorkbenchTypeId\n });\n },\n provider: agent?.provider ?? null\n }\n );\n },\n renderHeader: ({\n dragHandleProps,\n displayMode,\n externalNodeState,\n instanceId,\n isFocused,\n node,\n surfaceSize,\n windowActions\n }) => {\n const headerTitle = copy.nodeTitle;\n const rawWorkbenchState = (externalNodeState ??\n node.data.runtimeNodeState) as\n | Partial<AgentGuiWorkbenchNodeState>\n | null\n | undefined;\n const migratedWorkbenchState =\n migrateLegacyAgentGuiWorkbenchState(rawWorkbenchState);\n const workbenchState = normalizeAgentGuiWorkbenchState(\n migratedWorkbenchState\n );\n const selectedAgent = resolveAgentGuiWorkbenchStateAgent(\n workbenchState,\n input.agentDirectory\n );\n const provider = selectedAgent?.provider ?? \"unknown\";\n const nodeState = normalizeAgentGuiWorkbenchNodeState(\n migratedWorkbenchState,\n provider\n );\n const railPresentation = resolveAgentGUIConversationRailPresentation({\n containerWidthPx: node.frame.width,\n conversationRailCollapsed: nodeState.conversationRailCollapsed,\n conversationRailWidthPx: nodeState.conversationRailWidthPx\n });\n const isConversationRailAutoCollapsed =\n railPresentation.isAutoCollapsed;\n const isConversationRailCollapsed = railPresentation.isCollapsed;\n const conversationRailWidthPx =\n railPresentation.conversationRailWidthPx;\n const conversationIdentity = input.sessionEngine\n ? null\n : (input.resolveDockPopupIdentity?.(workbenchState) ?? null);\n const conversationTitle = input.sessionEngine\n ? null\n : (conversationIdentity?.title ??\n input.resolveDockPopupTitle?.(workbenchState) ??\n null);\n const hasConversation = Boolean(\n workbenchState.lastActiveAgentSessionId?.trim()\n );\n const conversationIconFallbackUrl = selectedAgent?.iconUrl ?? null;\n const conversationIconUrl =\n conversationIdentity?.iconUrl ?? conversationIconFallbackUrl;\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 const announceSessionAction = (\n action: AgentGuiWorkbenchSessionAction\n ) => {\n dispatchAgentGuiWorkbenchSessionAction({\n action,\n agentSessionId: workbenchState.lastActiveAgentSessionId,\n instanceId\n });\n };\n\n const headerProps = {\n copy,\n conversationIconFallbackUrl,\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 onSessionAction: announceSessionAction,\n onOpenDetachedWindow: input.onOpenDetachedWindow\n ? selectedAgent\n ? () => {\n void input.onOpenDetachedWindow?.({\n agentSessionId: workbenchState.lastActiveAgentSessionId,\n agentTargetId: selectedAgent.agentTargetId,\n provider: selectedAgent.provider,\n workspaceId: input.workspaceId\n });\n }\n : undefined\n : undefined,\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 currentFrame = windowActions.getFrame();\n const expandedFrame = resolveAgentGUIExpandedWindowFrame({\n conversationRailWidthPx: nodeState.conversationRailWidthPx,\n desktopSize: surfaceSize,\n height: currentFrame.height,\n position: {\n x: currentFrame.x,\n y: currentFrame.y\n },\n width: currentFrame.width\n });\n\n windowActions.resize({\n ...currentFrame,\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 } satisfies AgentGuiWorkbenchHeaderProps;\n return input.sessionEngine\n ? createElement(AgentGuiWorkbenchReactiveHeader, {\n ...headerProps,\n agentDirectory: input.agentDirectory,\n dockIconUrls: input.dockIconUrls,\n sessionEngine: input.sessionEngine,\n workbenchState\n })\n : createElement(AgentGuiWorkbenchHeader, {\n ...headerProps,\n agentTitle: conversationIdentity?.agentTitle,\n conversationIconUrl,\n conversationTitle,\n hasConversation\n });\n },\n title: copy.nodeTitle,\n typeId: agentGuiWorkbenchTypeId,\n window: {\n closable: true,\n defaultOpen: false,\n header: {\n border: \"none\",\n layout: \"overlay\"\n },\n minimizedDock: { kind: \"snapshot\" },\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 agentDirectory: input.agentDirectory,\n defaultProvider: input.defaultProvider,\n providerAvailability: input.providerAvailability\n });\n if (\n !hasAgentSessionId(launchPayload) &&\n !providerTargetLaunchPayloadFromRequest(\n launchPayload,\n providerFromState(launchPayload) ?? \"codex\"\n ).agentTargetId\n ) {\n return null;\n }\n if (!providerFromState(launchPayload)) {\n return null;\n }\n const {\n activation,\n dockEntryId,\n instanceId: descriptorInstanceId,\n openInNewWindow,\n provider,\n reusePolicy,\n targetAgentSessionId\n } = createAgentGuiWorkbenchLaunchDescriptor({\n ...request,\n payload: launchPayload\n });\n const providerTarget = providerTargetLaunchPayloadFromRequest(\n launchPayload,\n provider\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 reusePolicy.kind === \"current-session\"\n ? nodeStateSource.findInstanceIdByAgentSessionId(\n reusePolicy.agentSessionId\n )\n : null;\n const instanceId = existingInstanceId ?? descriptorInstanceId;\n const title = copy.nodeTitle;\n const launchAgentTargetId = providerTarget.agentTargetId;\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 agentTargetId: launchAgentTargetId ?? null\n },\n typeId: agentGuiWorkbenchTypeId\n });\n } else if (providerTarget.agentTargetId) {\n const previousState = nodeStateSource.readNodeState({\n instanceId,\n typeId: agentGuiWorkbenchTypeId\n });\n nodeStateSource.writeNodeState({\n instanceId,\n state: {\n ...normalizeAgentGuiWorkbenchState(previousState),\n lastActiveAgentSessionId: null,\n agentTargetId: providerTarget.agentTargetId\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: reusePolicy.kind === \"dock-entry\",\n title,\n typeId: agentGuiWorkbenchTypeId\n };\n }\n };\n}\n\nfunction resolveAgentGuiWorkbenchStateAgent(\n state: AgentGuiWorkbenchState | null,\n directory: AgentGUIAgentDirectoryPort\n) {\n const agentTargetId = state?.agentTargetId?.trim();\n if (!agentTargetId) {\n return null;\n }\n return (\n directory\n .getSnapshot()\n .agents.find((agent) => agent.agentTargetId === agentTargetId) ?? null\n );\n}\n\nfunction agentTargetIdFromActivation(activation: unknown): string | null {\n if (!activation || typeof activation !== \"object\") {\n return null;\n }\n const payload = (activation as { payload?: unknown }).payload;\n if (!payload || typeof payload !== \"object\") {\n return null;\n }\n const agentTargetId = (payload as { agentTargetId?: unknown }).agentTargetId;\n return typeof agentTargetId === \"string\" && agentTargetId.trim()\n ? agentTargetId.trim()\n : null;\n}\n\nfunction hasAgentSessionId(payload: unknown): boolean {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return false;\n }\n return (\n typeof (payload as { agentSessionId?: unknown }).agentSessionId ===\n \"string\" &&\n (payload as { agentSessionId: string }).agentSessionId.trim().length > 0\n );\n}\n\nimport {\n agentGuiWorkbenchDefaultNodeFrame,\n agentGuiWorkbenchNewWindowCascadeOffset,\n agentGuiWorkbenchProviderRailWidthPx,\n buildAgentGuiDockEntries,\n isAgentGuiWorkbenchCompactVisibleFrame,\n providerFromState,\n providerTargetLaunchPayloadFromRequest,\n resolveAgentGuiWorkbenchLaunchPayload,\n resolveAgentGuiWorkbenchContributionCopy,\n resolveAgentGuiWorkbenchDefaultLaunchFrame\n} from \"./contributionDock.tsx\";\nimport type { AgentGuiWorkbenchProviderAvailability } from \"./contributionDock.tsx\";\nexport {\n agentGuiWorkbenchCompactVisibleAreaRatio,\n agentGuiWorkbenchDefaultCopy,\n agentGuiWorkbenchDefaultNodeFrame,\n agentGuiWorkbenchDefaultUsableHeightRatio,\n agentGuiWorkbenchDefaultUsableWidthRatio,\n agentGuiWorkbenchNewWindowCascadeOffset,\n agentGuiWorkbenchProviderRailWidthPx,\n buildAgentGuiDockEntries,\n resolveAgentGuiUnifiedDockLaunchPayload,\n resolveAgentGuiWorkbenchContributionCopy,\n resolveAgentGuiWorkbenchDefaultLaunchFrame\n} from \"./contributionDock.tsx\";\nexport type {\n AgentGuiWorkbenchProviderAvailability,\n BuildAgentGuiDockEntriesInput\n} from \"./contributionDock.tsx\";\n","import { useMemo, type ReactNode } from \"react\";\nimport type { AgentSessionEngine } from \"@tutti-os/agent-activity-core\";\nimport type {\n AgentGUIAgentDirectoryPort,\n AgentGUIAgentDirectorySnapshot\n} from \"../types.ts\";\nimport { useEngineSelector } from \"../shared/engine/useEngineSelector.ts\";\nimport {\n agentGuiWorkbenchConversationIdentitiesEqual,\n resolveAgentGuiWorkbenchConversationIdentity\n} from \"./conversationIdentity.ts\";\nimport {\n AgentGuiWorkbenchHeader,\n type AgentGuiWorkbenchHeaderProps\n} from \"./header.ts\";\nimport type {\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\n} from \"./types.ts\";\n\ninterface AgentGuiWorkbenchReactiveHeaderProps extends Omit<\n AgentGuiWorkbenchHeaderProps,\n | \"agentTitle\"\n | \"conversationIconUrl\"\n | \"conversationTitle\"\n | \"conversationTitleDisplayPrompt\"\n | \"hasConversation\"\n> {\n agentDirectory: AgentGUIAgentDirectoryPort;\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n sessionEngine: AgentSessionEngine;\n workbenchState: AgentGuiWorkbenchState | null;\n}\n\nexport function AgentGuiWorkbenchReactiveHeader({\n agentDirectory,\n dockIconUrls,\n sessionEngine,\n workbenchState,\n ...headerProps\n}: AgentGuiWorkbenchReactiveHeaderProps): ReactNode {\n const directoryStore = useMemo(\n () => ({\n getSnapshot: () => agentDirectory.getSnapshot(),\n subscribe: (\n listener: (snapshot: AgentGUIAgentDirectorySnapshot) => void\n ) =>\n agentDirectory.subscribe(() => {\n listener(agentDirectory.getSnapshot());\n })\n }),\n [agentDirectory]\n );\n const agents = useEngineSelector(\n directoryStore,\n (snapshot) => snapshot.agents,\n Object.is\n );\n const conversationIdentity = useEngineSelector(\n sessionEngine,\n (engineState) =>\n resolveAgentGuiWorkbenchConversationIdentity({\n agents,\n dockIconUrls,\n engineState,\n workbenchState\n }),\n agentGuiWorkbenchConversationIdentitiesEqual\n );\n\n return (\n <AgentGuiWorkbenchHeader\n {...headerProps}\n agentTitle={conversationIdentity?.agentTitle}\n conversationIconUrl={\n conversationIdentity?.iconUrl ?? headerProps.conversationIconFallbackUrl\n }\n conversationTitle={conversationIdentity?.title}\n conversationTitleDisplayPrompt={conversationIdentity?.titleDisplayPrompt}\n hasConversation={Boolean(\n workbenchState?.lastActiveAgentSessionId?.trim()\n )}\n />\n );\n}\n","import {\n isPendingActivationViable,\n selectLatestActivationForSession,\n selectSessionMessages,\n selectWorkspaceAgentConsumerSession,\n type AgentActivityMessage,\n type AgentPromptContentBlock,\n type AgentSessionEngineState\n} from \"@tutti-os/agent-activity-core\";\nimport { resolveAgentGuiSessionProviderIconUrl } from \"../agentGuiSessionProviderIconUrls.ts\";\nimport {\n resolveAgentGUIConversationBrowserFreeTitle,\n resolveAgentGUIConversationTitleDisplayPrompt\n} from \"../shared/agentConversationTitleProjection.ts\";\nimport type { AgentGUIAgent } from \"../types.ts\";\nimport { isAgentGuiWorkbenchProvider } from \"./providerCatalog.ts\";\nimport {\n resolveAgentGuiWorkbenchHeaderTitle,\n resolveAgentGuiWorkbenchSessionTitle\n} from \"./sessionTitle.ts\";\nimport type {\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\n} from \"./types.ts\";\n\nexport interface AgentGuiWorkbenchConversationIdentity {\n agentTitle?: string | null;\n iconUrl?: string | null;\n title: string | null;\n titleDisplayPrompt?: string | null;\n}\n\nexport function resolveAgentGuiWorkbenchConversationIdentity(input: {\n agents: readonly AgentGUIAgent[];\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n engineState: AgentSessionEngineState;\n workbenchState: AgentGuiWorkbenchState | null;\n}): AgentGuiWorkbenchConversationIdentity | null {\n const agentSessionId =\n input.workbenchState?.lastActiveAgentSessionId?.trim() ?? \"\";\n if (!agentSessionId) {\n return null;\n }\n\n const session = selectWorkspaceAgentConsumerSession(\n input.engineState,\n agentSessionId\n )?.session;\n const activation = selectLatestActivationForSession(\n input.engineState,\n agentSessionId\n );\n const optimisticTitle =\n activation?.mode === \"new\" && isPendingActivationViable(activation)\n ? activation.optimisticTitle\n : null;\n const agentTargetId =\n session?.agentTargetId ?? input.workbenchState?.agentTargetId ?? null;\n const agent = agentTargetId\n ? (input.agents.find(\n (candidate) => candidate.agentTargetId === agentTargetId\n ) ?? null)\n : null;\n const provider = session?.provider ?? agent?.provider ?? null;\n const resolvedTitle = resolveAgentGuiWorkbenchSessionTitle({\n agentSessionId,\n fallbackTitle: null,\n optimisticTitle,\n session\n });\n const canonicalTitle = resolvedTitle.title;\n const messages = selectSessionMessages(input.engineState, agentSessionId);\n const titleDisplayPrompt = resolveAgentGuiWorkbenchTitleDisplayPrompt({\n activation,\n allowEmptyTitle: resolvedTitle.source === \"optimistic\",\n messages,\n title: canonicalTitle\n });\n // Keep browser context canonical in the message while omitting its tag from the visible header title.\n const title = resolveAgentGUIConversationBrowserFreeTitle({\n activation,\n allowEmptyTitle: resolvedTitle.source === \"optimistic\",\n messages,\n title: canonicalTitle\n });\n const agentTitle = resolveAgentGuiWorkbenchHeaderTitle({\n agentName: agent?.name,\n conversationTitle: title,\n provider\n });\n const iconUrl =\n agent?.iconUrl ??\n resolveAgentGuiSessionProviderIconUrl(provider ?? undefined) ??\n (isAgentGuiWorkbenchProvider(provider)\n ? (input.dockIconUrls?.[provider] ?? null)\n : null);\n\n return {\n agentTitle,\n iconUrl,\n title,\n titleDisplayPrompt\n };\n}\n\nexport function resolveAgentGuiWorkbenchTitleDisplayPrompt(input: {\n activation?: {\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n mode: \"existing\" | \"new\";\n status: import(\"@tutti-os/agent-activity-core\").PendingActivationStatus;\n } | null;\n allowEmptyTitle?: boolean;\n messages: readonly AgentActivityMessage[];\n title: string | null;\n}): string | null {\n return resolveAgentGUIConversationTitleDisplayPrompt(input);\n}\n\nexport function agentGuiWorkbenchConversationIdentitiesEqual(\n left: AgentGuiWorkbenchConversationIdentity | null,\n right: AgentGuiWorkbenchConversationIdentity | null\n): boolean {\n return (\n left === right ||\n (left !== null &&\n right !== null &&\n left.agentTitle === right.agentTitle &&\n left.iconUrl === right.iconUrl &&\n left.title === right.title &&\n left.titleDisplayPrompt === right.titleDisplayPrompt)\n );\n}\n","import {\n claudeCodeFlatFilledIconUrl,\n codexFlatFilledIconUrl,\n cursorFlatFilledIconUrl,\n opencodeFlatFilledIconUrl,\n resolveProviderIconAsset,\n tuttiFlatFilledIconUrl\n} from \"./providerIconAssets.ts\";\nimport { resolveAgentGUIProviderCatalogIdentity } from \"./providerIdentityCatalog.ts\";\nimport { cursorColorfulUrl } from \"./managedAgentIconAssets.ts\";\nimport { normalizeManagedAgentProvider } from \"./shared/managedAgentProviders\";\n\nexport {\n claudeCodeFlatFilledIconUrl,\n codexFlatFilledIconUrl,\n cursorColorfulUrl,\n cursorFlatFilledIconUrl,\n opencodeFlatFilledIconUrl,\n tuttiFlatFilledIconUrl\n};\n\n/**\n * Colorful session icons, used where the icon renders as a real <img> avatar\n * (collapsed workbench header, dock popup). Colorful assets keep their fill.\n */\nexport function resolveAgentGuiSessionProviderIconUrl(\n provider: string | undefined\n): string | null {\n const identity = resolveAgentGUIProviderCatalogIdentity(\n normalizeManagedAgentProvider(provider)\n );\n return resolveProviderIconAsset(identity?.iconKey, \"sessionColorful\");\n}\n\n/**\n * Flat monochrome session icons, used where the icon renders through a CSS\n * mask (e.g. the conversation rail rows). Colorful assets would collapse to a\n * solid square under a mask, so these must be single-color glyphs with a\n * transparent background.\n */\nexport function resolveAgentGuiSessionProviderFlatIconUrl(\n provider: string | undefined\n): string | null {\n const identity = resolveAgentGUIProviderCatalogIdentity(\n normalizeManagedAgentProvider(provider)\n );\n return resolveProviderIconAsset(identity?.iconKey, \"sessionFlat\");\n}\n","import {\n createElement,\n lazy,\n Suspense,\n useState,\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 openLinkLinedIconUrl from \"../app/renderer/assets/icons/open-link-lined.svg\";\nimport { useAgentGuiWorkbenchBodyRenderError } from \"./bodyRenderErrorRegistry.ts\";\nimport { AgentGuiWorkbenchSessionMenu } from \"./AgentGuiWorkbenchSessionMenu.tsx\";\nimport type {\n AgentGuiWorkbenchSessionAction,\n AgentGuiWorkbenchSessionMenuCopy\n} from \"./sessionActions.ts\";\nimport type { AgentGuiWorkbenchSessionMenuAdditionalAction } from \"./AgentGuiWorkbenchSessionMenu.tsx\";\nimport type { AgentToolSidebarHeaderLayout } from \"./tool-sidebar/headerLayout.ts\";\n\nconst LazyAgentRichTextReadonly = lazy(() =>\n import(\"../shared/AgentRichTextReadonly.tsx\").then((module) => ({\n default: module.AgentRichTextReadonly\n }))\n);\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 detachedWindowButtonClassName =\n \"agent-gui-workbench-header__icon-button agent-gui-workbench-header__detached-window\";\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 openDetachedWindow?: string;\n restore?: string;\n untitledConversation?: string;\n sessionMenu?: AgentGuiWorkbenchSessionMenuCopy | null;\n}\n\nexport interface AgentGuiWorkbenchHeaderProps extends HTMLAttributes<HTMLElement> {\n copy: AgentGuiWorkbenchHeaderCopy;\n agentTitle?: string | null;\n defaultActions?: ReactNode;\n displayMode?: WorkbenchDisplayMode;\n isConversationRailAutoCollapsed: boolean;\n isConversationRailCollapsed: boolean;\n conversationRailWidthPx?: number | null;\n conversationIconUrl?: string | null;\n conversationIconFallbackUrl?: string | null;\n hasConversation?: boolean;\n providerRailWidthPx?: number | null;\n primaryAccessory?: ReactNode;\n secondaryAccessory?: ReactNode;\n toolSidebar?: AgentToolSidebarHeaderLayout | null;\n sessionMenuAdditionalActions?: readonly AgentGuiWorkbenchSessionMenuAdditionalAction[];\n sessionMenuActions?: readonly AgentGuiWorkbenchSessionAction[];\n conversationTitle?: string | null;\n conversationTitleDisplayPrompt?: string | null;\n nodeId: string;\n onCreateConversation?: () => void;\n onOpenDetachedWindow?: () => void;\n onSessionAction?: (action: AgentGuiWorkbenchSessionAction) => void;\n onToggleConversationRail: (nextCollapsed: boolean) => void;\n showAppTitle?: boolean;\n showConversationRailToggle?: boolean;\n showWindowControls?: boolean;\n title?: string;\n windowActions?: Pick<\n WorkbenchHostNodeHeaderWindowActions,\n \"close\" | \"minimize\" | \"toggleDisplayMode\"\n >;\n}\n\nexport function AgentGuiWorkbenchHeader({\n className,\n copy,\n agentTitle,\n defaultActions: _defaultActions,\n displayMode,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n conversationRailWidthPx,\n conversationIconUrl,\n conversationIconFallbackUrl,\n hasConversation = false,\n providerRailWidthPx,\n primaryAccessory,\n secondaryAccessory,\n toolSidebar,\n sessionMenuAdditionalActions,\n sessionMenuActions,\n conversationTitle,\n conversationTitleDisplayPrompt,\n nodeId,\n onCreateConversation,\n onOpenDetachedWindow,\n onSessionAction,\n onToggleConversationRail,\n showAppTitle = true,\n showConversationRailToggle = true,\n showWindowControls = true,\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 // Conversation identity belongs to an actual or pending Session. Keep this\n // invariant at the shared Header boundary so hosts may pass fallback\n // presentation without recreating the empty-home visibility rule.\n const sessionTitle =\n !hasConversation || hasBodyRenderError\n ? \"\"\n : conversationTitle?.trim() || copy.untitledConversation?.trim() || \"\";\n const sessionTitleDisplayPrompt =\n !hasConversation || hasBodyRenderError\n ? \"\"\n : conversationTitleDisplayPrompt?.trim() || \"\";\n const collapsedTitle = hasConversation\n ? sessionTitle || agentTitle?.trim() || \"\"\n : \"\";\n const sessionIconUrl = hasConversation\n ? conversationIconUrl?.trim() || \"\"\n : \"\";\n const sessionIconFallbackUrl = hasConversation\n ? conversationIconFallbackUrl?.trim() || \"\"\n : \"\";\n const hasExpandedIdentity = Boolean(\n collapsedTitle || sessionIconUrl || sessionIconFallbackUrl\n );\n const resolvedSecondaryAccessory = toolSidebar?.actions ?? secondaryAccessory;\n const sessionMenu =\n onSessionAction && copy.sessionMenu && sessionTitle && !hasBodyRenderError\n ? createElement(AgentGuiWorkbenchSessionMenu, {\n actions: sessionMenuActions,\n additionalActions: sessionMenuAdditionalActions,\n copy: copy.sessionMenu,\n onAction: onSessionAction\n })\n : null;\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 ...(toolSidebar\n ? {\n \"--agent-gui-tool-sidebar-layout-width\": `${Math.max(\n 0,\n Math.round(toolSidebar.layoutWidthPx)\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-body-error\": hasBodyRenderError\n ? \"true\"\n : \"false\",\n \"data-agent-gui-workbench-header-collapsed\": isConversationRailCollapsed\n ? \"true\"\n : \"false\",\n \"data-agent-gui-workbench-header-has-session\": sessionTitle\n ? \"true\"\n : \"false\",\n \"data-agent-gui-workbench-header-tool-sidebar\": toolSidebar\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 showWindowControls\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 : null,\n showAppTitle && !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 primaryAccessory\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__primary-accessory\"\n },\n primaryAccessory\n )\n : null,\n onOpenDetachedWindow && !hasBodyRenderError\n ? createDetachedWindowButton({\n label: copy.openDetachedWindow ?? \"Open in detached window\",\n onOpenDetachedWindow\n })\n : null,\n showConversationRailToggle\n ? createConversationRailToggleButton({\n isAutoCollapsed: isConversationRailAutoCollapsed,\n isCollapsed: isConversationRailCollapsed,\n label: toggleLabel,\n onToggleConversationRail\n })\n : null,\n isConversationRailCollapsed && onCreateConversation\n ? createNewConversationButton({\n label: copy.newConversation,\n onCreateConversation\n })\n : null,\n isConversationRailCollapsed && collapsedTitle\n ? createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__session-title\"\n },\n createSessionHeaderIconSlot({\n fallbackSrc: sessionIconFallbackUrl,\n src: sessionIconUrl,\n testId: \"agent-gui-window-session-icon\"\n }),\n createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__title-text\"\n },\n collapsedTitle\n ),\n sessionMenu\n )\n : null,\n isConversationRailCollapsed && resolvedSecondaryAccessory\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__secondary-accessory\"\n },\n resolvedSecondaryAccessory\n )\n : null\n ),\n !isConversationRailCollapsed &&\n (hasExpandedIdentity || resolvedSecondaryAccessory)\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__detail\"\n },\n hasExpandedIdentity\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__detail-title\",\n \"data-testid\": \"agent-gui-window-detail-title\"\n },\n createSessionHeaderIconSlot({\n fallbackSrc: sessionIconFallbackUrl,\n src: sessionIconUrl,\n testId: \"agent-gui-window-detail-title-icon\"\n }),\n sessionTitleDisplayPrompt\n ? createElement(\n Suspense,\n {\n fallback: createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__title-text\"\n },\n sessionTitle\n )\n },\n createElement(LazyAgentRichTextReadonly, {\n className:\n \"agent-gui-workbench-header__title-text agent-gui-workbench-header__rich-title\",\n editorClassName:\n \"agent-gui-workbench-header__rich-title-editor\",\n value: sessionTitleDisplayPrompt\n })\n )\n : sessionTitle\n ? createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__title-text\"\n },\n sessionTitle\n )\n : null,\n sessionMenu\n )\n : null,\n resolvedSecondaryAccessory\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__secondary-accessory\"\n },\n resolvedSecondaryAccessory\n )\n : null\n )\n : null\n );\n}\n\nfunction createConversationRailToggleButton({\n isAutoCollapsed,\n isCollapsed,\n label,\n onToggleConversationRail\n}: {\n isAutoCollapsed: boolean;\n isCollapsed: boolean;\n label: string;\n onToggleConversationRail: (nextCollapsed: boolean) => void;\n}): ReactNode {\n const button = createElement(\n Button as never,\n {\n \"aria-label\": label,\n className: conversationRailToggleButtonClassName,\n \"data-agent-gui-conversation-rail-auto-collapsed\": isAutoCollapsed\n ? \"true\"\n : undefined,\n \"data-agent-gui-conversation-rail-collapsed\": isCollapsed\n ? \"true\"\n : undefined,\n \"data-testid\": \"agent-gui-toggle-conversation-rail\",\n size: \"icon-sm\",\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onToggleConversationRail(!isCollapsed);\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(PanelIcon, { className: headerChromeIconClassName })\n );\n\n return createElement(TooltipProvider, {\n children: createElement(\n Tooltip,\n null,\n createElement(TooltipTrigger, { asChild: true }, button),\n createElement(TooltipContent, { side: \"bottom\" }, label)\n ),\n delayDuration: 250,\n skipDelayDuration: 0\n });\n}\n\nfunction createDetachedWindowButton({\n label,\n onOpenDetachedWindow\n}: {\n label: string;\n onOpenDetachedWindow: () => void;\n}): ReactNode {\n const button = createElement(\n Button as never,\n {\n \"aria-label\": label,\n className: detachedWindowButtonClassName,\n \"data-testid\": \"agent-gui-open-detached-window\",\n size: \"icon-sm\",\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onOpenDetachedWindow();\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(\"span\", {\n \"aria-hidden\": true,\n className: headerChromeIconClassName,\n \"data-agent-gui-icon\": \"open-link-lined\",\n style: {\n backgroundColor: \"currentColor\",\n display: \"block\",\n WebkitMaskImage: `url(\"${openLinkLinedIconUrl}\")`,\n WebkitMaskPosition: \"center\",\n WebkitMaskRepeat: \"no-repeat\",\n WebkitMaskSize: \"contain\",\n maskImage: `url(\"${openLinkLinedIconUrl}\")`,\n maskPosition: \"center\",\n maskRepeat: \"no-repeat\",\n maskSize: \"contain\"\n }\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\" }, label)\n ),\n delayDuration: 250,\n skipDelayDuration: 0\n });\n}\n\nfunction createNewConversationButton({\n label,\n onCreateConversation\n}: {\n label: string;\n onCreateConversation: () => void;\n}): ReactNode {\n const button = createElement(\n Button as never,\n {\n \"aria-label\": label,\n className: headerChromeIconButtonClassName,\n size: \"icon-sm\",\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\n return createElement(TooltipProvider, {\n children: createElement(\n Tooltip,\n null,\n createElement(TooltipTrigger, { asChild: true }, button),\n createElement(TooltipContent, { side: \"bottom\" }, label)\n ),\n delayDuration: 250,\n skipDelayDuration: 0\n });\n}\n\nfunction createSessionHeaderIconSlot({\n src,\n fallbackSrc,\n testId\n}: {\n src: string;\n fallbackSrc: string;\n testId: string;\n}): ReactNode {\n // While the session's provider is still resolving (e.g. a freshly created\n // session) there is no icon URL yet. Render a neutral skeleton block rather\n // than flashing a wrong/default provider icon; it is replaced once the real\n // icon arrives.\n if (!src) {\n return createElement(\"span\", {\n \"aria-hidden\": \"true\",\n className:\n \"agent-gui-workbench-header__session-icon agent-gui-workbench-header__session-icon--pending\",\n \"data-testid\": `${testId}-pending`\n });\n }\n return createElement(SessionHeaderIcon, {\n key: `${src}::${fallbackSrc}`,\n fallbackSrc,\n src,\n testId\n });\n}\n\nfunction SessionHeaderIcon({\n src,\n fallbackSrc,\n testId\n}: {\n src: string;\n fallbackSrc?: string;\n testId: string;\n}): ReactNode {\n const [useFallback, setUseFallback] = useState(false);\n const [hidden, setHidden] = useState(false);\n\n const hasFallback = Boolean(fallbackSrc) && fallbackSrc !== src;\n const effectiveSrc = useFallback && fallbackSrc ? fallbackSrc : src;\n\n if (hidden) {\n return null;\n }\n\n return createElement(\"img\", {\n alt: \"\",\n className: \"agent-gui-workbench-header__session-icon\",\n \"data-testid\": testId,\n draggable: false,\n src: effectiveSrc,\n onError: () => {\n // On load failure, fall back to the bundled provider icon once; if that\n // also fails (or there is none), hide the img so the browser's broken\n // image glyph never shows.\n if (!useFallback && hasFallback) {\n setUseFallback(true);\n } else {\n setHidden(true);\n }\n }\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 return 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\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","export default \"data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Cpath%20d%3D%22M14%203H21V10M20%204L10%2014%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%20%20%3Cpath%20d%3D%22M19%2013V19C19%2020.1046%2018.1046%2021%2017%2021H5C3.89543%2021%203%2020.1046%203%2019V7C3%205.89543%203.89543%205%205%205H11%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3C%2Fsvg%3E%0A\";","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 useCallback,\n useRef,\n type MouseEvent,\n type PointerEvent,\n type ReactNode\n} from \"react\";\nimport { FileText, MoreHorizontal, Pencil, AtSign } from \"lucide-react\";\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from \"@tutti-os/ui-system\";\nimport type {\n AgentGuiWorkbenchSessionAction,\n AgentGuiWorkbenchSessionMenuCopy\n} from \"./sessionActions.ts\";\n\nconst menuContentClassName =\n \"w-max min-w-44 nodrag [-webkit-app-region:no-drag]\";\n\nexport interface AgentGuiWorkbenchSessionMenuAdditionalAction {\n id: string;\n label: string;\n icon?: ReactNode;\n onSelect: () => void;\n}\n\nexport interface AgentGuiWorkbenchSessionMenuProps {\n actions?: readonly AgentGuiWorkbenchSessionAction[];\n additionalActions?: readonly AgentGuiWorkbenchSessionMenuAdditionalAction[];\n copy: AgentGuiWorkbenchSessionMenuCopy;\n onAction: (action: AgentGuiWorkbenchSessionAction) => void;\n}\n\nexport function AgentGuiWorkbenchSessionMenu({\n actions = [\"rename\", \"copy-markdown\", \"copy-reference\"],\n additionalActions = [],\n copy,\n onAction\n}: AgentGuiWorkbenchSessionMenuProps): ReactNode {\n const showRename = actions.includes(\"rename\");\n const showCopyMarkdown = actions.includes(\"copy-markdown\");\n const showCopyReference = actions.includes(\"copy-reference\");\n const showCopyActions = showCopyMarkdown || showCopyReference;\n const showBuiltInActions = showRename || showCopyActions;\n const pendingActionRef = useRef(false);\n const select = useCallback((onSelect: () => void) => {\n if (pendingActionRef.current) {\n return;\n }\n pendingActionRef.current = true;\n // Radix renders the menu through a React portal. Portal events still\n // bubble through the React tree, so dispatching synchronously from\n // pointerup can update/unmount header chrome while its draggable region\n // is handling the same gesture. Let the menu gesture finish first.\n window.requestAnimationFrame(() => {\n pendingActionRef.current = false;\n onSelect();\n });\n }, []);\n const actionProps = useCallback(\n (onSelect: () => void) => ({\n onClick: () => select(onSelect),\n onPointerUp: (event: PointerEvent) => {\n if (event.button === 0) {\n select(onSelect);\n }\n },\n onSelect: () => select(onSelect)\n }),\n [select]\n );\n return (\n <DropdownMenu\n onOpenChange={(open) => {\n if (open) {\n pendingActionRef.current = false;\n }\n }}\n >\n <DropdownMenuTrigger asChild>\n <Button\n aria-label={copy.moreSessionActions}\n title={copy.moreSessionActions}\n className=\"agent-gui-workbench-header__icon-button agent-gui-workbench-header__session-menu-trigger\"\n data-testid=\"agent-gui-session-menu-trigger\"\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={(event) => event.stopPropagation()}\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <MoreHorizontal\n aria-hidden=\"true\"\n className=\"agent-gui-workbench-header__icon\"\n />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"start\"\n className={menuContentClassName}\n onClick={stopMousePropagation}\n onDoubleClick={stopMousePropagation}\n onPointerDown={stopPointerPropagation}\n onPointerUp={stopPointerPropagation}\n sideOffset={6}\n >\n {additionalActions.map((action) => (\n <DropdownMenuItem key={action.id} {...actionProps(action.onSelect)}>\n {action.icon}\n <span>{action.label}</span>\n </DropdownMenuItem>\n ))}\n {additionalActions.length > 0 && showBuiltInActions ? (\n <DropdownMenuSeparator />\n ) : null}\n {showRename ? (\n <DropdownMenuItem {...actionProps(() => onAction(\"rename\"))}>\n <Pencil aria-hidden=\"true\" />\n <span>{copy.renameSession}</span>\n </DropdownMenuItem>\n ) : null}\n {showRename && showCopyActions ? <DropdownMenuSeparator /> : null}\n {showCopyMarkdown ? (\n <DropdownMenuItem {...actionProps(() => onAction(\"copy-markdown\"))}>\n <FileText aria-hidden=\"true\" />\n <span>{copy.copyAsMarkdown}</span>\n </DropdownMenuItem>\n ) : null}\n {showCopyReference ? (\n <DropdownMenuItem {...actionProps(() => onAction(\"copy-reference\"))}>\n <AtSign aria-hidden=\"true\" />\n <span>{copy.copyAsReference}</span>\n </DropdownMenuItem>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nfunction stopMousePropagation(event: MouseEvent): void {\n event.stopPropagation();\n}\n\nfunction stopPointerPropagation(event: PointerEvent): void {\n event.stopPropagation();\n}\n","export const AGENT_GUI_WORKBENCH_SESSION_ACTION_EVENT =\n \"tutti:agent-gui-workbench-session-action\";\n\nexport type AgentGuiWorkbenchSessionAction =\n | \"rename\"\n | \"copy-markdown\"\n | \"copy-reference\";\n\nconst agentGuiWorkbenchSessionActions: readonly AgentGuiWorkbenchSessionAction[] =\n [\"rename\", \"copy-markdown\", \"copy-reference\"];\n\nexport function isAgentGuiWorkbenchSessionAction(\n value: unknown\n): value is AgentGuiWorkbenchSessionAction {\n return agentGuiWorkbenchSessionActions.includes(\n value as AgentGuiWorkbenchSessionAction\n );\n}\n\nexport interface AgentGuiWorkbenchSessionActionDetail {\n action: AgentGuiWorkbenchSessionAction;\n /**\n * Session the header menu was rendered for. Null lets the consumer fall\n * back to its active conversation; carrying the id pins the action to the\n * conversation the user saw when they clicked.\n */\n agentSessionId: string | null;\n instanceId: string;\n}\n\nexport interface AgentGuiWorkbenchSessionActionRequest {\n action: AgentGuiWorkbenchSessionAction;\n agentSessionId: string | null;\n sequence: number;\n}\n\nexport function dispatchAgentGuiWorkbenchSessionAction(\n detail: AgentGuiWorkbenchSessionActionDetail\n): void {\n window.dispatchEvent(\n new CustomEvent<AgentGuiWorkbenchSessionActionDetail>(\n AGENT_GUI_WORKBENCH_SESSION_ACTION_EVENT,\n { detail }\n )\n );\n}\n\nexport interface AgentGuiWorkbenchSessionMenuCopy {\n moreSessionActions: string;\n renameSession: string;\n copyAsMarkdown: string;\n copyAsReference: string;\n}\n","import { createElement, type ReactNode } from \"react\";\nimport {\n createMultiInstanceDockEntryOptions,\n getWorkbenchLayoutFrame,\n type WorkbenchFrame,\n type WorkbenchHostDockEntry,\n type WorkbenchHostLaunchRequest\n} from \"@tutti-os/workbench-surface\";\nimport { agentGuiDockIconUrls } from \"../dockIcons.ts\";\nimport {\n agentGuiWorkbenchDockIdentityFromIdentifier,\n agentGuiWorkbenchTypeId,\n agentGuiWorkbenchUnifiedDockEntryId\n} from \"./launch.ts\";\nimport { normalizeAgentGuiWorkbenchState } from \"./state.ts\";\nimport {\n agentGuiWorkbenchDefaultDockProviders,\n isAgentGuiWorkbenchProvider\n} from \"./providerCatalog.ts\";\nimport type { AgentGuiWorkbenchProvider } from \"./types.ts\";\nimport {\n normalizeAgentGUIAgents,\n projectAgentGUIAgentsToTargets\n} from \"../agents.ts\";\nimport { AGENT_GUI_PROVIDER_RAIL_WIDTH_PX } from \"../agent-gui/agentGuiNode/model/agentGuiRailLayout.ts\";\nimport type {\n AgentGUIAgentDirectoryPort,\n AgentGUIAgentTarget\n} from \"../types.ts\";\nimport type {\n AgentGuiWorkbenchContributionCopy,\n AgentGuiWorkbenchContributionCopyOverrides,\n CreateAgentGuiWorkbenchContributionInput\n} from \"./contribution.ts\";\n\nexport const agentGuiWorkbenchDefaultNodeFrame: WorkbenchFrame = {\n height: 560,\n width: 1040,\n x: 140,\n y: 48\n};\n\nexport const agentGuiWorkbenchDefaultUsableWidthRatio = 0.9;\nexport const agentGuiWorkbenchDefaultUsableHeightRatio = 0.9;\nexport const agentGuiWorkbenchCompactVisibleAreaRatio = 0.9;\nexport const agentGuiWorkbenchNewWindowCascadeOffset = { x: 180, y: 88 };\nexport const agentGuiWorkbenchProviderRailWidthPx =\n AGENT_GUI_PROVIDER_RAIL_WIDTH_PX;\nconst agentGuiWorkbenchUnifiedDockTileProviders = [\n \"codex\",\n \"claude-code\",\n \"tutti-agent\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\nexport const agentGuiWorkbenchDefaultCopy: AgentGuiWorkbenchContributionCopy = {\n collapseConversationRail: \"Hide sidebar\",\n close: \"Close\",\n expandConversationRail: \"Show sidebar\",\n fallbackAgentLabel: \"Agent\",\n maximize: \"Maximize\",\n minimize: \"Minimize\",\n newConversation: \"New conversation\",\n nodeTitle: \"Agent\",\n openDetachedWindow: \"Open in detached window\",\n restore: \"Restore\",\n untitledConversation: \"Untitled conversation\"\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 agentDirectory: AgentGUIAgentDirectoryPort;\n defaultProvider?: AgentGuiWorkbenchProvider | null;\n dockEntryId?: string;\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n label?: string;\n order?: number;\n providerAvailability?: AgentGuiWorkbenchProviderAvailability;\n resolveDockPopupIdentity?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupIdentity\"];\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n sectionId?: string;\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 agentDirectory: input.agentDirectory,\n dockEntryId: input.dockEntryId ?? agentGuiWorkbenchUnifiedDockEntryId(),\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: input.order ?? 0,\n provider,\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 \"agentDirectory\" | \"defaultProvider\" | \"providerAvailability\"\n >\n): {\n provider: AgentGuiWorkbenchProvider;\n agentTargetId?: string;\n} {\n const target = resolveUnifiedAgentGuiDockTarget(input);\n if (target) {\n return {\n provider: target.provider,\n agentTargetId: target.agentTargetId ?? target.targetId\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\nexport function 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 agentDirectory: AgentGUIAgentDirectoryPort;\n dockEntryId: string;\n icon: ReactNode;\n label: string;\n launchPayload?: Record<string, unknown>;\n order: number;\n provider: AgentGuiWorkbenchProvider;\n resolveDockPopupIdentity?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupIdentity\"];\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n sectionId: string;\n visibility: WorkbenchHostDockEntry[\"visibility\"];\n}): WorkbenchHostDockEntry {\n const launchPayload = input.launchPayload ?? { provider: input.provider };\n return {\n ...createMultiInstanceDockEntryOptions(launchPayload, {\n allowNewWindowInDockPopup: false\n }),\n icon: input.icon,\n iconSize: \"large\",\n id: input.dockEntryId,\n label: input.label,\n order: input.order,\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\nexport function resolveAgentGuiWorkbenchProviderIconUrl(input: {\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n provider: AgentGuiWorkbenchProvider;\n}): string {\n return (\n input.dockIconUrls?.[input.provider] ??\n agentGuiDockIconUrls[input.provider] ??\n \"\"\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\nexport function providerFromState(\n state: unknown\n): 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\nexport function 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\nexport function resolveAgentGuiWorkbenchLaunchPayload(\n request: WorkbenchHostLaunchRequest,\n input: {\n agentDirectory: AgentGUIAgentDirectoryPort;\n defaultProvider?: AgentGuiWorkbenchProvider | null;\n providerAvailability?: AgentGuiWorkbenchProviderAvailability;\n }\n): unknown | null {\n if (hasAgentSessionId(request.payload)) {\n return request.payload;\n }\n const snapshot = input.agentDirectory.getSnapshot();\n const agents = normalizeAgentGUIAgents(snapshot.agents);\n const payload = isRecord(request.payload) ? request.payload : {};\n const isUnifiedDockLaunch =\n request.reason === \"dock\" &&\n agentGuiWorkbenchDockIdentityFromIdentifier(request.dockEntryId)?.kind ===\n \"unifiedAggregate\";\n const explicitAgentTargetId = isUnifiedDockLaunch\n ? null\n : readTrimmedString(payload.agentTargetId);\n if (explicitAgentTargetId) {\n const explicitAgent = agents.find(\n (agent) =>\n agent.agentTargetId === explicitAgentTargetId &&\n agent.availability.status === \"ready\"\n );\n if (\n !explicitAgent ||\n !isAgentGuiWorkbenchProvider(explicitAgent.provider)\n ) {\n return null;\n }\n return {\n ...payload,\n agentTargetId: explicitAgent.agentTargetId,\n provider: explicitAgent.provider\n };\n }\n const requestedProvider = providerFromState(payload);\n const resolved = resolveAgentGuiUnifiedDockLaunchPayload({\n agentDirectory: input.agentDirectory,\n defaultProvider: requestedProvider ?? input.defaultProvider,\n providerAvailability: input.providerAvailability\n });\n if (!resolved.agentTargetId) {\n return null;\n }\n return { ...payload, ...resolved };\n}\n\nfunction hasAgentSessionId(payload: unknown): boolean {\n if (!isRecord(payload)) {\n return false;\n }\n return readTrimmedString(payload.agentSessionId) !== null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readTrimmedString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction resolveUnifiedAgentGuiDockTarget(\n input: Pick<\n BuildAgentGuiDockEntriesInput,\n \"agentDirectory\" | \"defaultProvider\" | \"providerAvailability\"\n >\n): AgentGUIAgentTarget | null {\n const targets = projectAgentGUIAgentsToTargets(\n normalizeAgentGUIAgents(input.agentDirectory.getSnapshot().agents)\n ).filter(\n (\n target\n ): target is AgentGUIAgentTarget & {\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 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 \"agentDirectory\" | \"defaultProvider\" | \"providerAvailability\"\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 AgentGUIAgentTarget[],\n provider: AgentGuiWorkbenchProvider\n): AgentGUIAgentTarget | null {\n const agentTargets = targets.filter((target) => target.provider === provider);\n return agentTargets[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\nexport function providerTargetLaunchPayloadFromRequest(\n payload: unknown,\n _expectedProvider: AgentGuiWorkbenchProvider\n): {\n agentTargetId: string | null;\n} {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return {\n agentTargetId: null\n };\n }\n const agentTargetId = (payload as { agentTargetId?: unknown }).agentTargetId;\n const providerTargetId = (payload as { providerTargetId?: unknown })\n .providerTargetId;\n return {\n agentTargetId:\n typeof agentTargetId === \"string\" && agentTargetId.trim()\n ? agentTargetId.trim()\n : typeof providerTargetId === \"string\" && providerTargetId.trim()\n ? providerTargetId.trim()\n : null\n };\n}\n"],"mappings":"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","names":["createElement","Button","Button","jsx","createElement","createElement","createElement","hasAgentSessionId"]}
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
getOptionalAgentHostApi,
|
|
9
9
|
useOptionalAgentHostApi
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-M6WEFXPL.js";
|
|
11
11
|
import {
|
|
12
12
|
managedAgentRoundedIconUrl
|
|
13
13
|
} from "./chunk-M6HTOCQK.js";
|
|
14
14
|
import {
|
|
15
15
|
translate,
|
|
16
16
|
useTranslation
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-GLVENTN6.js";
|
|
18
18
|
import {
|
|
19
19
|
resolveAgentWorkspaceFileVisualKind
|
|
20
20
|
} from "./chunk-5BJYO6X3.js";
|
|
@@ -3759,4 +3759,4 @@ export {
|
|
|
3759
3759
|
AgentMessageMarkdown,
|
|
3760
3760
|
CustomScrollArea
|
|
3761
3761
|
};
|
|
3762
|
-
//# sourceMappingURL=chunk-
|
|
3762
|
+
//# sourceMappingURL=chunk-PPAV2TB4.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
agentGuiWorkbenchOpenSessionActivationType,
|
|
3
|
-
agentGuiWorkbenchPrefillPromptActivationType
|
|
4
|
-
} from "./chunk-CBMWHQ7P.js";
|
|
5
1
|
import {
|
|
6
2
|
isAgentGuiWorkbenchProvider,
|
|
7
3
|
normalizeAgentGuiWorkbenchProvider
|
|
8
4
|
} from "./chunk-MGSRWYRN.js";
|
|
5
|
+
import {
|
|
6
|
+
agentGuiWorkbenchOpenSessionActivationType,
|
|
7
|
+
agentGuiWorkbenchPrefillPromptActivationType
|
|
8
|
+
} from "./chunk-CBMWHQ7P.js";
|
|
9
9
|
|
|
10
10
|
// workbench/launch.ts
|
|
11
11
|
var agentGuiWorkbenchTypeId = "agent-gui";
|
|
@@ -179,4 +179,4 @@ export {
|
|
|
179
179
|
createAgentGuiWorkbenchLaunchDescriptor,
|
|
180
180
|
resolveAgentGuiWorkbenchLaunchDockEntryId
|
|
181
181
|
};
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
182
|
+
//# sourceMappingURL=chunk-SUVMLCED.js.map
|