@tutti-os/agent-gui 0.0.3
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/LICENSE +202 -0
- package/README.md +56 -0
- package/dist/agent-message-center/index.d.ts +218 -0
- package/dist/agent-message-center/index.js +1962 -0
- package/dist/agent-message-center/index.js.map +1 -0
- package/dist/agent-rich-text-at-provider.d.ts +49 -0
- package/dist/agent-rich-text-at-provider.js +7 -0
- package/dist/agent-rich-text-at-provider.js.map +1 -0
- package/dist/agent-title-text.d.ts +3 -0
- package/dist/agent-title-text.js +7 -0
- package/dist/agent-title-text.js.map +1 -0
- package/dist/app/renderer/agentactivity.css +6773 -0
- package/dist/app/renderer/assets/icons/agent-sessions-filled.svg +1 -0
- package/dist/app/renderer/assets/icons/agents/claude-rounded.png +0 -0
- package/dist/app/renderer/assets/icons/agents/codex-rounded.png +0 -0
- package/dist/app/renderer/assets/icons/agents/gemini-rounded.png +0 -0
- package/dist/app/renderer/assets/icons/agents/hermes-rounded.png +0 -0
- package/dist/app/renderer/assets/icons/agents/manage-agent-claude-code.png +0 -0
- package/dist/app/renderer/assets/icons/agents/manage-agent-codex.png +0 -0
- package/dist/app/renderer/assets/icons/agents/manage-agent-gemini.png +0 -0
- package/dist/app/renderer/assets/icons/agents/manage-agent-hermes.png +0 -0
- package/dist/app/renderer/assets/icons/agents/manage-agent-nextop.png +0 -0
- package/dist/app/renderer/assets/icons/agents/manage-agent-openclaw.png +0 -0
- package/dist/app/renderer/assets/icons/agents/nextop-doc-rounded.png +0 -0
- package/dist/app/renderer/assets/icons/agents/openclaw-rounded.png +0 -0
- package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-claude-code.png +0 -0
- package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-codex.png +0 -0
- package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-gemini.png +0 -0
- package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-nexight.png +0 -0
- package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-openclaw.png +0 -0
- package/dist/app/renderer/assets/icons/code-filled.svg +1 -0
- package/dist/app/renderer/assets/icons/doc-filled.svg +1 -0
- package/dist/app/renderer/assets/icons/folder-filled.svg +1 -0
- package/dist/app/renderer/assets/icons/image-filled.svg +1 -0
- package/dist/app/renderer/assets/icons/issue-filled.svg +1 -0
- package/dist/app/renderer/assets/icons/product-filled.svg +1 -0
- package/dist/app/renderer/assets/icons/user-avatar-placeholder.png +0 -0
- package/dist/app/renderer/assets/icons/video-filled.svg +1 -0
- package/dist/chunk-22L4VWUR.js +70 -0
- package/dist/chunk-22L4VWUR.js.map +1 -0
- package/dist/chunk-3D5VTIKP.js +93 -0
- package/dist/chunk-3D5VTIKP.js.map +1 -0
- package/dist/chunk-AF5CXBJN.js +3075 -0
- package/dist/chunk-AF5CXBJN.js.map +1 -0
- package/dist/chunk-BABBC24I.js +28 -0
- package/dist/chunk-BABBC24I.js.map +1 -0
- package/dist/chunk-GCBDIQDX.js +22 -0
- package/dist/chunk-GCBDIQDX.js.map +1 -0
- package/dist/chunk-HSR5DI6O.js +4695 -0
- package/dist/chunk-HSR5DI6O.js.map +1 -0
- package/dist/chunk-IVPB4MLI.js +7 -0
- package/dist/chunk-IVPB4MLI.js.map +1 -0
- package/dist/chunk-KCC3GNPB.js +13 -0
- package/dist/chunk-KCC3GNPB.js.map +1 -0
- package/dist/chunk-PJP5BUU6.js +18 -0
- package/dist/chunk-PJP5BUU6.js.map +1 -0
- package/dist/chunk-RORLLV27.js +144 -0
- package/dist/chunk-RORLLV27.js.map +1 -0
- package/dist/chunk-UJWUGMWC.js +128 -0
- package/dist/chunk-UJWUGMWC.js.map +1 -0
- package/dist/chunk-UKQIGNN3.js +921 -0
- package/dist/chunk-UKQIGNN3.js.map +1 -0
- package/dist/chunk-ZP7P7DYO.js +270 -0
- package/dist/chunk-ZP7P7DYO.js.map +1 -0
- package/dist/chunk-ZX5PDYAS.js +346 -0
- package/dist/chunk-ZX5PDYAS.js.map +1 -0
- package/dist/claude-rounded-F6VPQETB.png +0 -0
- package/dist/codex-rounded-SC63MZAW.png +0 -0
- package/dist/gemini-rounded-O4KAJFIM.png +0 -0
- package/dist/hermes-rounded-QGDHBNRJ.png +0 -0
- package/dist/i18n/index.d.ts +4580 -0
- package/dist/i18n/index.js +19 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +775 -0
- package/dist/index.js +33699 -0
- package/dist/index.js.map +1 -0
- package/dist/manage-agent-claude-code-F6VPQETB.png +0 -0
- package/dist/manage-agent-codex-SC63MZAW.png +0 -0
- package/dist/manage-agent-gemini-O4KAJFIM.png +0 -0
- package/dist/manage-agent-hermes-QGDHBNRJ.png +0 -0
- package/dist/manage-agent-nextop-UFAQ22K2.png +0 -0
- package/dist/manage-agent-openclaw-24U7O6CA.png +0 -0
- package/dist/mention-file-presentation.d.ts +16 -0
- package/dist/mention-file-presentation.js +10 -0
- package/dist/mention-file-presentation.js.map +1 -0
- package/dist/nextop-doc-rounded-UFAQ22K2.png +0 -0
- package/dist/openclaw-rounded-24U7O6CA.png +0 -0
- package/dist/user-avatar-placeholder-WP2373TS.png +0 -0
- package/dist/workbench/contribution.d.ts +42 -0
- package/dist/workbench/contribution.js +24 -0
- package/dist/workbench/contribution.js.map +1 -0
- package/dist/workbench/index.d.ts +24 -0
- package/dist/workbench/index.js +82 -0
- package/dist/workbench/index.js.map +1 -0
- package/dist/workbench/launch.d.ts +49 -0
- package/dist/workbench/launch.js +23 -0
- package/dist/workbench/launch.js.map +1 -0
- package/dist/workbench/providerCatalog.d.ts +15 -0
- package/dist/workbench/providerCatalog.js +27 -0
- package/dist/workbench/providerCatalog.js.map +1 -0
- package/dist/workbench/state.d.ts +22 -0
- package/dist/workbench/state.js +22 -0
- package/dist/workbench/state.js.map +1 -0
- package/dist/workbench/types.d.ts +43 -0
- package/dist/workbench/types.js +7 -0
- package/dist/workbench/types.js.map +1 -0
- package/dist/workspace-agent-generated-files.d.ts +2 -0
- package/dist/workspace-agent-generated-files.js +21 -0
- package/dist/workspace-agent-generated-files.js.map +1 -0
- package/dist/workspaceAgentActivityListViewModel-PvLQDj60.d.ts +309 -0
- package/dist/workspaceLinkActions-Bwa-phu8.d.ts +51 -0
- package/package.json +166 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import {
|
|
2
|
+
agentGuiWorkbenchDockEntryId,
|
|
3
|
+
agentGuiWorkbenchProviderFromIdentifier,
|
|
4
|
+
agentGuiWorkbenchTypeId,
|
|
5
|
+
createAgentGuiWorkbenchLaunchDescriptor
|
|
6
|
+
} from "./chunk-RORLLV27.js";
|
|
7
|
+
import {
|
|
8
|
+
agentGuiWorkbenchProviderFromInstanceId,
|
|
9
|
+
createAgentGuiWorkbenchNodeStateSource,
|
|
10
|
+
normalizeAgentGuiWorkbenchNodeState,
|
|
11
|
+
normalizeAgentGuiWorkbenchState
|
|
12
|
+
} from "./chunk-ZP7P7DYO.js";
|
|
13
|
+
import {
|
|
14
|
+
agentGuiWorkbenchProviderLabels,
|
|
15
|
+
agentGuiWorkbenchProviders,
|
|
16
|
+
isAgentGuiWorkbenchDefaultDockProvider,
|
|
17
|
+
resolveAgentGuiWorkbenchProviderLabel
|
|
18
|
+
} from "./chunk-22L4VWUR.js";
|
|
19
|
+
import {
|
|
20
|
+
agentGuiDockIconUrls,
|
|
21
|
+
resolveAgentGUIExpandedWindowFrame,
|
|
22
|
+
shouldAutoCollapseAgentGUIConversationRail
|
|
23
|
+
} from "./chunk-UJWUGMWC.js";
|
|
24
|
+
|
|
25
|
+
// workbench/contribution.ts
|
|
26
|
+
import { createElement as createElement2 } from "react";
|
|
27
|
+
import {
|
|
28
|
+
getWorkbenchLayoutFrame
|
|
29
|
+
} from "@tutti-os/workbench-surface";
|
|
30
|
+
|
|
31
|
+
// workbench/header.ts
|
|
32
|
+
import { createElement } from "react";
|
|
33
|
+
import { Button, PanelIcon, cn } from "@tutti-os/ui-system";
|
|
34
|
+
function AgentGuiWorkbenchHeader({
|
|
35
|
+
className,
|
|
36
|
+
copy,
|
|
37
|
+
defaultActions,
|
|
38
|
+
isConversationRailAutoCollapsed,
|
|
39
|
+
isConversationRailCollapsed,
|
|
40
|
+
onToggleConversationRail,
|
|
41
|
+
title,
|
|
42
|
+
...headerProps
|
|
43
|
+
}) {
|
|
44
|
+
const toggleLabel = isConversationRailCollapsed ? copy.expandConversationRail : copy.collapseConversationRail;
|
|
45
|
+
return createElement(
|
|
46
|
+
"header",
|
|
47
|
+
{
|
|
48
|
+
...headerProps,
|
|
49
|
+
className: cn(
|
|
50
|
+
"flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3",
|
|
51
|
+
className
|
|
52
|
+
)
|
|
53
|
+
},
|
|
54
|
+
createElement(
|
|
55
|
+
"div",
|
|
56
|
+
{ className: "flex min-w-0 items-center gap-2" },
|
|
57
|
+
createElement(
|
|
58
|
+
"span",
|
|
59
|
+
{
|
|
60
|
+
className: "min-w-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]"
|
|
61
|
+
},
|
|
62
|
+
title?.trim() || copy.fallbackAgentLabel
|
|
63
|
+
),
|
|
64
|
+
createElement(
|
|
65
|
+
Button,
|
|
66
|
+
{
|
|
67
|
+
"aria-label": toggleLabel,
|
|
68
|
+
className: "cursor-pointer rounded-md",
|
|
69
|
+
"data-agent-gui-conversation-rail-auto-collapsed": isConversationRailAutoCollapsed ? "true" : void 0,
|
|
70
|
+
"data-agent-gui-conversation-rail-collapsed": isConversationRailCollapsed ? "true" : void 0,
|
|
71
|
+
"data-testid": "agent-gui-toggle-conversation-rail",
|
|
72
|
+
size: "icon-sm",
|
|
73
|
+
title: toggleLabel,
|
|
74
|
+
type: "button",
|
|
75
|
+
variant: "ghost",
|
|
76
|
+
onClick: (event) => {
|
|
77
|
+
event.stopPropagation();
|
|
78
|
+
onToggleConversationRail(!isConversationRailCollapsed);
|
|
79
|
+
},
|
|
80
|
+
onDoubleClick: (event) => event.stopPropagation(),
|
|
81
|
+
onPointerDown: (event) => event.stopPropagation()
|
|
82
|
+
},
|
|
83
|
+
createElement(PanelIcon, { className: "size-[18px]" })
|
|
84
|
+
)
|
|
85
|
+
),
|
|
86
|
+
createElement(
|
|
87
|
+
"div",
|
|
88
|
+
{
|
|
89
|
+
className: "flex flex-none items-center gap-1",
|
|
90
|
+
onDoubleClick: (event) => event.stopPropagation(),
|
|
91
|
+
onPointerDown: (event) => event.stopPropagation()
|
|
92
|
+
},
|
|
93
|
+
defaultActions
|
|
94
|
+
)
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// workbench/contribution.ts
|
|
99
|
+
var agentGuiWorkbenchDefaultNodeFrame = {
|
|
100
|
+
height: 560,
|
|
101
|
+
width: 1040,
|
|
102
|
+
x: 140,
|
|
103
|
+
y: 48
|
|
104
|
+
};
|
|
105
|
+
var agentGuiWorkbenchDefaultUsableHeightRatio = 0.7;
|
|
106
|
+
var AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT = "nextop:agent-gui-workbench-conversation-rail-toggle";
|
|
107
|
+
var agentGuiWorkbenchDefaultCopy = {
|
|
108
|
+
collapseConversationRail: "Collapse conversation rail",
|
|
109
|
+
expandConversationRail: "Expand conversation rail",
|
|
110
|
+
fallbackAgentLabel: "Agent",
|
|
111
|
+
nodeTitle: "Agent"
|
|
112
|
+
};
|
|
113
|
+
function createAgentGuiWorkbenchContribution(input) {
|
|
114
|
+
const nodeStateSource = createAgentGuiWorkbenchNodeStateSource({
|
|
115
|
+
workspaceId: input.workspaceId
|
|
116
|
+
});
|
|
117
|
+
const frame = input.frame ?? agentGuiWorkbenchDefaultNodeFrame;
|
|
118
|
+
const copy = resolveAgentGuiWorkbenchContributionCopy(input.copy);
|
|
119
|
+
return {
|
|
120
|
+
dockEntries: agentGuiWorkbenchProviders.map(
|
|
121
|
+
(provider, index) => createAgentGuiWorkbenchDockEntry({
|
|
122
|
+
label: agentGuiWorkbenchProviderLabels[provider],
|
|
123
|
+
iconUrl: input.dockIconUrls?.[provider],
|
|
124
|
+
order: index,
|
|
125
|
+
provider,
|
|
126
|
+
sectionId: input.dockSectionId ?? "agents",
|
|
127
|
+
visibility: input.resolveDockEntryVisibility?.(provider) ?? (isAgentGuiWorkbenchDefaultDockProvider(provider) ? "always" : "never")
|
|
128
|
+
})
|
|
129
|
+
),
|
|
130
|
+
externalStateSource: nodeStateSource.externalStateSource,
|
|
131
|
+
id: input.id ?? "workspace-agent-gui",
|
|
132
|
+
nodes: [
|
|
133
|
+
{
|
|
134
|
+
frame,
|
|
135
|
+
instance: { mode: "multi" },
|
|
136
|
+
renderBody: (context) => input.renderBody(
|
|
137
|
+
context,
|
|
138
|
+
{
|
|
139
|
+
nodeTypeId: agentGuiWorkbenchTypeId,
|
|
140
|
+
onStateChange: (state) => {
|
|
141
|
+
nodeStateSource.writeNodeState({
|
|
142
|
+
instanceId: context.instanceId,
|
|
143
|
+
state,
|
|
144
|
+
typeId: agentGuiWorkbenchTypeId
|
|
145
|
+
});
|
|
146
|
+
},
|
|
147
|
+
provider: agentGuiWorkbenchProviderFromInstanceId(
|
|
148
|
+
context.instanceId
|
|
149
|
+
)
|
|
150
|
+
}
|
|
151
|
+
),
|
|
152
|
+
renderHeader: ({
|
|
153
|
+
defaultActions,
|
|
154
|
+
dragHandleProps,
|
|
155
|
+
externalNodeState,
|
|
156
|
+
instanceId,
|
|
157
|
+
isFocused,
|
|
158
|
+
node,
|
|
159
|
+
surfaceSize,
|
|
160
|
+
windowActions
|
|
161
|
+
}) => {
|
|
162
|
+
const provider = agentGuiWorkbenchProviderFromInstanceId(instanceId);
|
|
163
|
+
const title = resolveAgentGuiWorkbenchProviderLabel(provider);
|
|
164
|
+
const workbenchState = normalizeAgentGuiWorkbenchState(
|
|
165
|
+
externalNodeState ?? node.data.runtimeNodeState
|
|
166
|
+
);
|
|
167
|
+
const nodeState = normalizeAgentGuiWorkbenchNodeState(
|
|
168
|
+
workbenchState,
|
|
169
|
+
provider
|
|
170
|
+
);
|
|
171
|
+
const isConversationRailAutoCollapsed = shouldAutoCollapseAgentGUIConversationRail(node.frame.width);
|
|
172
|
+
const isConversationRailCollapsed = nodeState.conversationRailCollapsed === true || isConversationRailAutoCollapsed;
|
|
173
|
+
const persistConversationRailCollapsed = (collapsed) => {
|
|
174
|
+
nodeStateSource.writeNodeState({
|
|
175
|
+
instanceId,
|
|
176
|
+
state: {
|
|
177
|
+
...workbenchState,
|
|
178
|
+
conversationRailCollapsed: collapsed
|
|
179
|
+
},
|
|
180
|
+
typeId: agentGuiWorkbenchTypeId
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
const announceConversationRailCollapsed = (collapsed) => {
|
|
184
|
+
window.dispatchEvent(
|
|
185
|
+
new CustomEvent(
|
|
186
|
+
AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT,
|
|
187
|
+
{
|
|
188
|
+
detail: {
|
|
189
|
+
conversationRailCollapsed: collapsed,
|
|
190
|
+
instanceId
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
)
|
|
194
|
+
);
|
|
195
|
+
};
|
|
196
|
+
return createElement2(AgentGuiWorkbenchHeader, {
|
|
197
|
+
copy,
|
|
198
|
+
defaultActions,
|
|
199
|
+
isConversationRailAutoCollapsed,
|
|
200
|
+
isConversationRailCollapsed,
|
|
201
|
+
title,
|
|
202
|
+
...dragHandleProps,
|
|
203
|
+
onPointerDown: (event) => {
|
|
204
|
+
dragHandleProps.onPointerDown?.(event);
|
|
205
|
+
if (!isFocused) {
|
|
206
|
+
windowActions.focus();
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
onToggleConversationRail: (nextCollapsed) => {
|
|
210
|
+
announceConversationRailCollapsed(nextCollapsed);
|
|
211
|
+
if (isConversationRailCollapsed && nextCollapsed === false && node.displayMode !== "fullscreen") {
|
|
212
|
+
const expandedFrame = resolveAgentGUIExpandedWindowFrame({
|
|
213
|
+
conversationRailWidthPx: nodeState.conversationRailWidthPx,
|
|
214
|
+
desktopSize: surfaceSize,
|
|
215
|
+
height: node.frame.height,
|
|
216
|
+
position: {
|
|
217
|
+
x: node.frame.x,
|
|
218
|
+
y: node.frame.y
|
|
219
|
+
},
|
|
220
|
+
width: node.frame.width
|
|
221
|
+
});
|
|
222
|
+
windowActions.resize({
|
|
223
|
+
...node.frame,
|
|
224
|
+
height: expandedFrame.size.height,
|
|
225
|
+
width: expandedFrame.size.width,
|
|
226
|
+
x: expandedFrame.position.x,
|
|
227
|
+
y: expandedFrame.position.y
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
persistConversationRailCollapsed(nextCollapsed);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
},
|
|
234
|
+
title: copy.nodeTitle,
|
|
235
|
+
typeId: agentGuiWorkbenchTypeId,
|
|
236
|
+
window: {
|
|
237
|
+
closable: true,
|
|
238
|
+
defaultOpen: false,
|
|
239
|
+
minimizedDock: {
|
|
240
|
+
kind: "snapshot"
|
|
241
|
+
},
|
|
242
|
+
minimizable: true
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
],
|
|
246
|
+
onLaunchRequest: (request) => {
|
|
247
|
+
if (request.typeId !== agentGuiWorkbenchTypeId) {
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
const {
|
|
251
|
+
activation,
|
|
252
|
+
dockEntryId,
|
|
253
|
+
instanceId,
|
|
254
|
+
pendingHandoff,
|
|
255
|
+
provider,
|
|
256
|
+
reuseDockEntryNode,
|
|
257
|
+
targetAgentSessionId
|
|
258
|
+
} = createAgentGuiWorkbenchLaunchDescriptor(request);
|
|
259
|
+
const title = resolveAgentGuiWorkbenchProviderLabel(provider);
|
|
260
|
+
if (targetAgentSessionId || pendingHandoff) {
|
|
261
|
+
const previousState = nodeStateSource.readNodeState({
|
|
262
|
+
instanceId,
|
|
263
|
+
typeId: agentGuiWorkbenchTypeId
|
|
264
|
+
});
|
|
265
|
+
nodeStateSource.writeNodeState({
|
|
266
|
+
instanceId,
|
|
267
|
+
state: {
|
|
268
|
+
...previousState ?? normalizeAgentGuiWorkbenchState(null),
|
|
269
|
+
...targetAgentSessionId ? { lastActiveAgentSessionId: targetAgentSessionId } : {},
|
|
270
|
+
...pendingHandoff ? { pendingHandoff } : {}
|
|
271
|
+
},
|
|
272
|
+
typeId: agentGuiWorkbenchTypeId
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
activation,
|
|
277
|
+
defaultFrame: resolveAgentGuiWorkbenchDefaultLaunchFrame({
|
|
278
|
+
frame,
|
|
279
|
+
request
|
|
280
|
+
}),
|
|
281
|
+
dockEntryId,
|
|
282
|
+
framePolicy: "cascade-same-type-centered",
|
|
283
|
+
instanceId,
|
|
284
|
+
reuseDockEntryNode,
|
|
285
|
+
title,
|
|
286
|
+
typeId: agentGuiWorkbenchTypeId
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function resolveAgentGuiWorkbenchDefaultLaunchFrame(input) {
|
|
292
|
+
const layoutFrame = getWorkbenchLayoutFrame(
|
|
293
|
+
input.request.surfaceSize,
|
|
294
|
+
input.request.layoutConstraints
|
|
295
|
+
);
|
|
296
|
+
return {
|
|
297
|
+
...input.frame,
|
|
298
|
+
height: Math.round(
|
|
299
|
+
layoutFrame.height * agentGuiWorkbenchDefaultUsableHeightRatio
|
|
300
|
+
)
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
function resolveAgentGuiWorkbenchContributionCopy(copy) {
|
|
304
|
+
return {
|
|
305
|
+
...agentGuiWorkbenchDefaultCopy,
|
|
306
|
+
...copy
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
function createAgentGuiWorkbenchDockEntry(input) {
|
|
310
|
+
return {
|
|
311
|
+
icon: createElement2("img", {
|
|
312
|
+
alt: "",
|
|
313
|
+
draggable: false,
|
|
314
|
+
src: input.iconUrl ?? agentGuiDockIconUrls[input.provider]
|
|
315
|
+
}),
|
|
316
|
+
iconSize: "large",
|
|
317
|
+
id: agentGuiWorkbenchDockEntryId(input.provider),
|
|
318
|
+
label: input.label,
|
|
319
|
+
launchBehavior: "enabled",
|
|
320
|
+
launchPayload: { provider: input.provider },
|
|
321
|
+
matchNode: (node) => node.data.typeId === agentGuiWorkbenchTypeId && agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) === input.provider,
|
|
322
|
+
order: input.order,
|
|
323
|
+
resolvePopupItem: ({ externalNodeState }) => ({
|
|
324
|
+
title: resolveAgentGuiWorkbenchDockPopupTitle(externalNodeState)
|
|
325
|
+
}),
|
|
326
|
+
sectionId: input.sectionId,
|
|
327
|
+
typeId: agentGuiWorkbenchTypeId,
|
|
328
|
+
visibility: input.visibility
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
function resolveAgentGuiWorkbenchDockPopupTitle(state) {
|
|
332
|
+
const title = state?.lastActiveConversationTitle;
|
|
333
|
+
return typeof title === "string" && title.trim() ? title.trim() : null;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export {
|
|
337
|
+
AgentGuiWorkbenchHeader,
|
|
338
|
+
agentGuiWorkbenchDefaultNodeFrame,
|
|
339
|
+
agentGuiWorkbenchDefaultUsableHeightRatio,
|
|
340
|
+
AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT,
|
|
341
|
+
agentGuiWorkbenchDefaultCopy,
|
|
342
|
+
createAgentGuiWorkbenchContribution,
|
|
343
|
+
resolveAgentGuiWorkbenchDefaultLaunchFrame,
|
|
344
|
+
resolveAgentGuiWorkbenchContributionCopy
|
|
345
|
+
};
|
|
346
|
+
//# sourceMappingURL=chunk-ZX5PDYAS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../workbench/contribution.ts","../workbench/header.ts"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport {\n getWorkbenchLayoutFrame,\n type WorkbenchContribution,\n type WorkbenchFrame,\n type WorkbenchHostDockEntry,\n type WorkbenchHostLaunchRequest,\n type WorkbenchHostNodeBodyContext\n} from \"@tutti-os/workbench-surface\";\nimport {\n resolveAgentGUIExpandedWindowFrame,\n shouldAutoCollapseAgentGUIConversationRail\n} from \"../agent-gui/agentGuiNode/model/agentGuiRailLayout.ts\";\nimport { agentGuiDockIconUrls } from \"../dockIcons.ts\";\nimport { AgentGuiWorkbenchHeader } from \"./header.ts\";\nimport {\n agentGuiWorkbenchDockEntryId,\n agentGuiWorkbenchProviderFromIdentifier,\n agentGuiWorkbenchTypeId,\n createAgentGuiWorkbenchLaunchDescriptor\n} from \"./launch.ts\";\nimport {\n agentGuiWorkbenchProviderFromInstanceId,\n createAgentGuiWorkbenchNodeStateSource,\n normalizeAgentGuiWorkbenchNodeState,\n normalizeAgentGuiWorkbenchState\n} from \"./state.ts\";\nimport {\n agentGuiWorkbenchProviderLabels,\n agentGuiWorkbenchProviders,\n isAgentGuiWorkbenchDefaultDockProvider,\n resolveAgentGuiWorkbenchProviderLabel\n} from \"./providerCatalog.ts\";\nimport type {\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\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 agentGuiWorkbenchDefaultUsableHeightRatio = 0.7;\n\nexport const AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT =\n \"nextop:agent-gui-workbench-conversation-rail-toggle\";\n\nexport interface AgentGuiWorkbenchConversationRailToggleDetail {\n conversationRailCollapsed: boolean;\n instanceId: string;\n}\n\nexport interface AgentGuiWorkbenchContributionCopy {\n collapseConversationRail: string;\n expandConversationRail: string;\n fallbackAgentLabel: string;\n nodeTitle: string;\n}\n\nexport type AgentGuiWorkbenchContributionCopyOverrides =\n Partial<AgentGuiWorkbenchContributionCopy>;\n\nexport const agentGuiWorkbenchDefaultCopy: AgentGuiWorkbenchContributionCopy = {\n collapseConversationRail: \"Collapse conversation rail\",\n expandConversationRail: \"Expand conversation rail\",\n fallbackAgentLabel: \"Agent\",\n nodeTitle: \"Agent\"\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 dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n dockSectionId?: string;\n frame?: WorkbenchFrame;\n id?: string;\n renderBody(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n resolveDockEntryVisibility?: (\n provider: AgentGuiWorkbenchProvider\n ) => WorkbenchHostDockEntry[\"visibility\"];\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\n return {\n dockEntries: agentGuiWorkbenchProviders.map((provider, index) =>\n createAgentGuiWorkbenchDockEntry({\n label: agentGuiWorkbenchProviderLabels[provider],\n iconUrl: input.dockIconUrls?.[provider],\n order: index,\n provider,\n sectionId: input.dockSectionId ?? \"agents\",\n visibility:\n input.resolveDockEntryVisibility?.(provider) ??\n (isAgentGuiWorkbenchDefaultDockProvider(provider)\n ? \"always\"\n : \"never\")\n })\n ),\n externalStateSource: nodeStateSource.externalStateSource,\n id: input.id ?? \"workspace-agent-gui\",\n nodes: [\n {\n frame,\n instance: { mode: \"multi\" },\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 state,\n typeId: agentGuiWorkbenchTypeId\n });\n },\n provider: agentGuiWorkbenchProviderFromInstanceId(\n context.instanceId\n )\n }\n ),\n renderHeader: ({\n defaultActions,\n dragHandleProps,\n externalNodeState,\n instanceId,\n isFocused,\n node,\n surfaceSize,\n windowActions\n }) => {\n const provider = agentGuiWorkbenchProviderFromInstanceId(instanceId);\n const title = resolveAgentGuiWorkbenchProviderLabel(provider);\n const workbenchState = normalizeAgentGuiWorkbenchState(\n externalNodeState ?? node.data.runtimeNodeState\n );\n const nodeState = normalizeAgentGuiWorkbenchNodeState(\n workbenchState,\n provider\n );\n const isConversationRailAutoCollapsed =\n shouldAutoCollapseAgentGUIConversationRail(node.frame.width);\n const isConversationRailCollapsed =\n nodeState.conversationRailCollapsed === true ||\n isConversationRailAutoCollapsed;\n const persistConversationRailCollapsed = (collapsed: boolean) => {\n nodeStateSource.writeNodeState({\n instanceId,\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\n return createElement(AgentGuiWorkbenchHeader, {\n copy,\n defaultActions,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n title,\n ...dragHandleProps,\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: \"snapshot\"\n },\n minimizable: true\n }\n }\n ],\n onLaunchRequest: (request) => {\n if (request.typeId !== agentGuiWorkbenchTypeId) {\n return null;\n }\n\n const {\n activation,\n dockEntryId,\n instanceId,\n pendingHandoff,\n provider,\n reuseDockEntryNode,\n targetAgentSessionId\n } = createAgentGuiWorkbenchLaunchDescriptor(request);\n const title = resolveAgentGuiWorkbenchProviderLabel(provider);\n if (targetAgentSessionId || pendingHandoff) {\n const previousState = nodeStateSource.readNodeState({\n instanceId,\n typeId: agentGuiWorkbenchTypeId\n });\n nodeStateSource.writeNodeState({\n instanceId,\n state: {\n ...(previousState ?? normalizeAgentGuiWorkbenchState(null)),\n ...(targetAgentSessionId\n ? { lastActiveAgentSessionId: targetAgentSessionId }\n : {}),\n ...(pendingHandoff ? { pendingHandoff } : {})\n },\n typeId: agentGuiWorkbenchTypeId\n });\n }\n return {\n activation,\n defaultFrame: resolveAgentGuiWorkbenchDefaultLaunchFrame({\n frame,\n request\n }),\n dockEntryId,\n framePolicy: \"cascade-same-type-centered\",\n instanceId,\n reuseDockEntryNode,\n title,\n typeId: agentGuiWorkbenchTypeId\n };\n }\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\n return {\n ...input.frame,\n height: Math.round(\n layoutFrame.height * agentGuiWorkbenchDefaultUsableHeightRatio\n )\n };\n}\n\nexport function resolveAgentGuiWorkbenchContributionCopy(\n copy?: AgentGuiWorkbenchContributionCopyOverrides\n): AgentGuiWorkbenchContributionCopy {\n return {\n ...agentGuiWorkbenchDefaultCopy,\n ...copy\n };\n}\n\nfunction createAgentGuiWorkbenchDockEntry(input: {\n iconUrl?: string;\n label: string;\n order: number;\n provider: AgentGuiWorkbenchProvider;\n sectionId: string;\n visibility: WorkbenchHostDockEntry[\"visibility\"];\n}): WorkbenchHostDockEntry {\n return {\n icon: createElement(\"img\", {\n alt: \"\",\n draggable: false,\n src: input.iconUrl ?? agentGuiDockIconUrls[input.provider]\n }),\n iconSize: \"large\",\n id: agentGuiWorkbenchDockEntryId(input.provider),\n label: input.label,\n launchBehavior: \"enabled\",\n launchPayload: { provider: input.provider },\n matchNode: (node) =>\n node.data.typeId === agentGuiWorkbenchTypeId &&\n agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ===\n input.provider,\n order: input.order,\n resolvePopupItem: ({ externalNodeState }) => ({\n title: resolveAgentGuiWorkbenchDockPopupTitle(externalNodeState)\n }),\n sectionId: input.sectionId,\n typeId: agentGuiWorkbenchTypeId,\n visibility: input.visibility\n };\n}\n\nfunction resolveAgentGuiWorkbenchDockPopupTitle(state: unknown): string | null {\n const title = (state as Partial<AgentGuiWorkbenchState> | null)\n ?.lastActiveConversationTitle;\n return typeof title === \"string\" && title.trim() ? title.trim() : null;\n}\n","import { createElement, type HTMLAttributes, type ReactNode } from \"react\";\nimport { Button, PanelIcon, cn } from \"@tutti-os/ui-system\";\n\nexport interface AgentGuiWorkbenchHeaderCopy {\n collapseConversationRail: string;\n expandConversationRail: string;\n fallbackAgentLabel: string;\n}\n\nexport interface AgentGuiWorkbenchHeaderProps extends HTMLAttributes<HTMLElement> {\n copy: AgentGuiWorkbenchHeaderCopy;\n defaultActions?: ReactNode;\n isConversationRailAutoCollapsed: boolean;\n isConversationRailCollapsed: boolean;\n onToggleConversationRail: (nextCollapsed: boolean) => void;\n title?: string;\n}\n\nexport function AgentGuiWorkbenchHeader({\n className,\n copy,\n defaultActions,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n onToggleConversationRail,\n title,\n ...headerProps\n}: AgentGuiWorkbenchHeaderProps): ReactNode {\n const toggleLabel = isConversationRailCollapsed\n ? copy.expandConversationRail\n : copy.collapseConversationRail;\n\n return createElement(\n \"header\",\n {\n ...headerProps,\n className: cn(\n \"flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3\",\n className\n )\n },\n createElement(\n \"div\",\n { className: \"flex min-w-0 items-center gap-2\" },\n createElement(\n \"span\",\n {\n className:\n \"min-w-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\"\n },\n title?.trim() || copy.fallbackAgentLabel\n ),\n createElement(\n Button as never,\n {\n \"aria-label\": toggleLabel,\n className: \"cursor-pointer rounded-md\",\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: \"size-[18px]\" })\n )\n ),\n createElement(\n \"div\",\n {\n className: \"flex flex-none items-center gap-1\",\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n defaultActions\n )\n );\n}\n"],"mappings":"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","names":["createElement","createElement"]}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|