@datalayer/agent-runtimes 1.3.89 → 1.3.90
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/lib/Agent.js +2 -18
- package/lib/AgentDocument.js +5 -55
- package/lib/AgentNode.js +31 -208
- package/lib/AgentNotebook.js +5 -59
- package/lib/agent-node/AgentNodeGallery.js +23 -111
- package/lib/agents/AgentDetails.js +36 -274
- package/lib/agents/AgentRuntimeChat.js +1 -8
- package/lib/chat/Chat.js +7 -46
- package/lib/chat/ChatFloating.js +15 -100
- package/lib/chat/ChatInline.js +5 -47
- package/lib/chat/ChatPopupStandalone.js +5 -53
- package/lib/chat/ChatSidebar.js +4 -51
- package/lib/chat/ChatStandalone.js +4 -45
- package/lib/chat/EphemeralSurfaceControl.js +5 -25
- package/lib/chat/assistant/AssistantContextMenu.d.ts +8 -0
- package/lib/chat/assistant/AssistantContextMenu.js +17 -1
- package/lib/chat/assistant/AssistantStage.js +6 -25
- package/lib/chat/assistant/BalloonParts.js +8 -40
- package/lib/chat/assistant/BalloonVisual.js +2 -2
- package/lib/chat/assistant/ConversationBalloon.js +2 -11
- package/lib/chat/assistant/DecisionAsk.js +3 -3
- package/lib/chat/assistant/SandboxDetailsDialog.js +3 -17
- package/lib/chat/assistant/SpeechBalloon.js +14 -78
- package/lib/chat/base/ChatBase.js +37 -172
- package/lib/chat/display/EmptyState.js +7 -35
- package/lib/chat/display/FloatingBrandButton.js +4 -34
- package/lib/chat/display/PoweredByTag.js +3 -14
- package/lib/chat/document/EphemeralDocument.js +3 -18
- package/lib/chat/header/ChatHeader.js +1 -17
- package/lib/chat/header/ChatHeaderBase.js +2 -24
- package/lib/chat/header/ChatViewModeToggle.js +7 -29
- package/lib/chat/indicators/McpStatusIndicator.js +3 -12
- package/lib/chat/indicators/SandboxStatusIndicator.js +6 -34
- package/lib/chat/indicators/SkillsStatusIndicator.js +3 -12
- package/lib/chat/indicators/TypingDots.js +1 -11
- package/lib/chat/messages/ChatMessageList.js +58 -185
- package/lib/chat/messages/ChatMessages.js +15 -79
- package/lib/chat/messages/FormSubmissionMessage.js +2 -33
- package/lib/chat/messages/NotebookToolSurfaces.js +12 -41
- package/lib/chat/messages/TurnFooter.js +4 -10
- package/lib/chat/notebook/EphemeralNotebook.js +2 -10
- package/lib/chat/parts/ReasoningPart.js +2 -16
- package/lib/chat/parts/TextPart.js +2 -12
- package/lib/chat/parts/ToolPart.js +16 -90
- package/lib/chat/presence/Presence.js +5 -33
- package/lib/chat/prompt/FloatingCard.js +1 -13
- package/lib/chat/prompt/InputPrompt.js +1 -6
- package/lib/chat/prompt/InputPromptBase.js +4 -17
- package/lib/chat/prompt/InputPromptLexical.js +44 -45
- package/lib/chat/prompt/InputPromptText.js +1 -1
- package/lib/chat/prompt/footer/InPromptFooter.js +1 -8
- package/lib/chat/prompt/menus/AgentsMenu.js +1 -1
- package/lib/chat/prompt/menus/InlineAgentsMenu.js +1 -1
- package/lib/chat/prompt/menus/ModelSelector.js +1 -5
- package/lib/chat/prompt/menus/SkillsMenu.js +3 -30
- package/lib/chat/prompt/menus/SuggestionsMenu.js +1 -1
- package/lib/chat/prompt/menus/ToolsMenu.js +4 -48
- package/lib/chat/prompt/plugins/AgentMentionPlugin.js +2 -9
- package/lib/chat/prompt/plugins/CommandPlugin.js +2 -9
- package/lib/chat/prompt/plugins/MentionChip.js +1 -15
- package/lib/chat/prompt/stack.js +1 -19
- package/lib/chat/tools/A2AAgentDialog.js +9 -42
- package/lib/chat/tools/SubagentActivity.js +5 -22
- package/lib/chat/tools/ToolApprovalBanner.js +4 -34
- package/lib/chat/tools/ToolApprovalDialog.js +4 -19
- package/lib/chat/tools/ToolCallDisplay.js +12 -97
- package/lib/chat/usage/ContextPie.js +4 -45
- package/lib/components/a2ui/datalayer/Chart.js +4 -10
- package/lib/components/a2ui/datalayer/Chat.js +2 -10
- package/lib/components/a2ui/datalayer/Download.js +1 -1
- package/lib/components/a2ui/datalayer/Evidence.js +1 -15
- package/lib/components/a2ui/datalayer/FileUpload.js +1 -12
- package/lib/components/a2ui/datalayer/Table.js +9 -17
- package/lib/components/a2ui/datalayer/formWidgets.js +3 -2
- package/lib/components/a2ui/datalayer/parts.js +1 -16
- package/lib/components/agents/AgentSummary.js +1 -51
- package/lib/components/cards/NotificationEventCard.js +6 -72
- package/lib/components/cards/OutputCard.js +4 -48
- package/lib/components/cards/ToolApprovalCard.js +2 -35
- package/lib/components/code-sandboxes/CodeSandboxCellVariables.js +1 -1
- package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.js +4 -14
- package/lib/components/code-sandboxes/CodeSandboxPicker.js +16 -21
- package/lib/components/code-sandboxes/CodeSandboxVariables.js +2 -2
- package/lib/components/scheduler/ScheduleMenu.js +5 -10
- package/lib/components/specs/SpecPayloadPreview.js +1 -26
- package/lib/components/teams/A2ATeamGraph.d.ts +4 -3
- package/lib/components/teams/A2ATeamGraph.js +25 -71
- package/lib/components/teams/AnswerSurfacesView.js +2 -2
- package/lib/components/teams/NotebookPreview.js +1 -10
- package/lib/components/teams/NotebookPreviewView.js +2 -3
- package/lib/components/teams/SceneTranscript.js +3 -17
- package/lib/components/teams/SceneView.js +1 -8
- package/lib/components/teams/TeamNotebook.js +5 -13
- package/lib/components/teams/TeamNotebookView.js +2 -12
- package/lib/components/teams/index.d.ts +1 -0
- package/lib/components/teams/index.js +1 -0
- package/lib/components/teams/useBalloonRoom.d.ts +39 -0
- package/lib/components/teams/useBalloonRoom.js +89 -0
- package/lib/config/AgentConfiguration.js +22 -225
- package/lib/context/ContextDistribution.js +7 -41
- package/lib/context/ContextInspector.js +9 -107
- package/lib/context/ContextPanel.js +11 -86
- package/lib/context/ContextUsage.js +6 -34
- package/lib/context/CostTracker.js +7 -42
- package/lib/context/MessageHistory.js +3 -37
- package/lib/context/TurnGraphChart.js +9 -41
- package/lib/examples/A2UiAgentExample.js +6 -108
- package/lib/examples/A2UiComponentsGalleryExample.js +1 -1
- package/lib/examples/A2UiContactCardExample.js +1 -1
- package/lib/examples/A2UiJupyterOutputExample.js +25 -125
- package/lib/examples/A2UiRestaurantExample.js +1 -1
- package/lib/examples/A2UiViewerExample.js +1 -1
- package/lib/examples/AgUiAgenticExample.js +3 -35
- package/lib/examples/AgUiBackendToolRenderingExample.js +2 -25
- package/lib/examples/AgUiHaikuGenUiExample.js +2 -32
- package/lib/examples/AgUiHumanInTheLoopExample.js +5 -59
- package/lib/examples/AgUiSharedStateExample.js +6 -56
- package/lib/examples/AgUiToolsBasedGenUiExample.js +25 -120
- package/lib/examples/AgentA2AExample.js +1 -15
- package/lib/examples/AgentA2ATeamExample.js +6 -30
- package/lib/examples/AgentCheckpointsExample.js +11 -145
- package/lib/examples/AgentCodeSandboxExample.js +5 -108
- package/lib/examples/AgentCodeSandboxesExample.js +3 -30
- package/lib/examples/AgentCodemodeExample.js +9 -85
- package/lib/examples/AgentCompactionExample.js +3 -64
- package/lib/examples/AgentDecideExample.js +1 -13
- package/lib/examples/AgentEvalsExample.js +5 -60
- package/lib/examples/AgentGuardrailsExample.js +4 -28
- package/lib/examples/AgentHooksExample.js +1 -1
- package/lib/examples/AgentInferenceProviderExample.js +5 -96
- package/lib/examples/AgentMCPExample.js +7 -105
- package/lib/examples/AgentMemoryExample.js +5 -74
- package/lib/examples/AgentMonitoringExample.js +7 -53
- package/lib/examples/AgentNotificationsExample.js +3 -61
- package/lib/examples/AgentOtelExample.js +3 -72
- package/lib/examples/AgentOutputsExample.js +6 -81
- package/lib/examples/AgentParametersExample.js +2 -37
- package/lib/examples/AgentSkillsExample.js +3 -45
- package/lib/examples/AgentSubagentsExample.js +6 -56
- package/lib/examples/AgentToolApprovalsExample.js +1 -11
- package/lib/examples/AgentTriggersExample.js +29 -239
- package/lib/examples/AgentspecsExample.js +6 -60
- package/lib/examples/AssistantExample.js +5 -5
- package/lib/examples/AssistantGalleryExample.js +8 -65
- package/lib/examples/CellExample.js +1 -6
- package/lib/examples/ChatCustomExample.js +2 -31
- package/lib/examples/ChatExample.js +1 -9
- package/lib/examples/ChatStandaloneExample.js +3 -37
- package/lib/examples/CopilotKitLexicalExample.js +1 -24
- package/lib/examples/DecksAgent.js +1 -1
- package/lib/examples/DocumentPageAgent.js +1 -1
- package/lib/examples/HomeExample.js +14 -62
- package/lib/examples/Lexical2Example.js +3 -32
- package/lib/examples/LexicalAgentExample.js +2 -34
- package/lib/examples/LexicalAgentSidebarExample.js +3 -34
- package/lib/examples/LoopAppComputerExample.js +1 -1
- package/lib/examples/LoopShellExample.js +2 -2
- package/lib/examples/LoopStrategyExample.js +15 -87
- package/lib/examples/LoopWorkspaceEmbed.js +2 -18
- package/lib/examples/LoopWorkspaceExample.js +2 -2
- package/lib/examples/NotebookAgentExample.js +2 -33
- package/lib/examples/NotebookAgentSidebarExample.js +3 -46
- package/lib/examples/NotebookCollaborationExample.js +1 -31
- package/lib/examples/NotebookExample.js +1 -18
- package/lib/examples/NotebookPageAgent.js +1 -1
- package/lib/examples/ScenesExample.js +5 -24
- package/lib/examples/VoiceChatExample.js +1 -1
- package/lib/examples/components/AuthRequiredView.js +1 -7
- package/lib/examples/components/ErrorView.js +1 -8
- package/lib/examples/components/ExampleErrorBoundary.js +1 -14
- package/lib/examples/components/FooterMetrics.js +1 -7
- package/lib/examples/components/Header.js +12 -51
- package/lib/examples/components/HeaderControls.js +1 -9
- package/lib/examples/components/LexicalEditor.js +1 -8
- package/lib/examples/components/MainContent.js +1 -13
- package/lib/examples/components/MockFileBrowser.js +4 -40
- package/lib/examples/components/SessionTabs.js +1 -1
- package/lib/examples/components/TimeTravel.js +1 -13
- package/lib/examples/main.js +13 -81
- package/lib/examples/scenes/A2UiComponentsGalleryScene.js +3 -34
- package/lib/examples/scenes/A2UiContactCardScene.js +3 -35
- package/lib/examples/scenes/A2UiRestaurantScene.js +3 -53
- package/lib/examples/scenes/A2UiViewerScene.js +3 -34
- package/lib/examples/utils/AssistantGalleryGrid.js +6 -35
- package/lib/examples2/DatalayerNotebookExample.js +3 -33
- package/lib/examples2/NativeNavigationExample.js +4 -10
- package/lib/examples2/NotebookMutationsKernel.js +2 -1
- package/lib/examples2/NotebookMutationsServiceManager.js +2 -1
- package/lib/examples2/ReactRouterExample.js +14 -42
- package/lib/hooks/useToolApprovals.d.ts +2 -34
- package/lib/hooks/useToolApprovals.js +1 -64
- package/lib/identity/AgentIdentity.js +17 -62
- package/lib/identity/IdentityConnect.js +13 -59
- package/lib/identity/OAuthCallback.js +6 -44
- package/lib/lexical/ChatInlinePlugin.js +6 -14
- package/lib/loop/apps/AppRenderer.d.ts +4 -3
- package/lib/loop/apps/AppRenderer.js +11 -12
- package/lib/loop/apps/appspec.js +6 -3
- package/lib/loop/embed/AppEmbed.d.ts +1 -1
- package/lib/loop/embed/AppEmbed.js +2 -1
- package/lib/loop/embed/LoopEmbed.js +1 -7
- package/lib/loop/embed/embedConfig.d.ts +3 -3
- package/lib/loop/embed/embedConfig.js +2 -3
- package/lib/loop/embed/embedTheme.d.ts +4 -4
- package/lib/loop/embed/embedTheme.js +11 -7
- package/lib/loop/plugins/a2a-sidebar/A2ASidebar.js +7 -34
- package/lib/loop/plugins/a2ui/A2uiView.js +4 -12
- package/lib/loop/plugins/a2ui-surface/InlineSurface.js +1 -16
- package/lib/loop/plugins/a2ui-surface/SurfaceToolResult.js +2 -12
- package/lib/loop/plugins/agents/AnonymousKeyBadge.js +3 -2
- package/lib/loop/plugins/agents/SandboxSelector.js +3 -7
- package/lib/loop/plugins/agents/SandboxView.js +4 -27
- package/lib/loop/plugins/agents/TeamMemberPicker.js +2 -2
- package/lib/loop/plugins/agentspecs/AgentspecPicker.js +3 -2
- package/lib/loop/plugins/app-activity/AppActivity.js +1 -1
- package/lib/loop/plugins/app-computer/AppComputer.js +5 -21
- package/lib/loop/plugins/app-elements/AppElements.js +2 -31
- package/lib/loop/plugins/app-page/AppPage.js +1 -1
- package/lib/loop/plugins/app-rules/AppRulesCard.js +4 -20
- package/lib/loop/plugins/assistant/index.js +1 -13
- package/lib/loop/plugins/chat/ChatView.js +40 -106
- package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.js +2 -13
- package/lib/loop/plugins/decks/DeckSurface.js +2 -2
- package/lib/loop/plugins/document/DocumentView.js +4 -12
- package/lib/loop/plugins/document-toolbar/SandboxStatusItem.js +3 -8
- package/lib/loop/plugins/graph/GraphView.js +2 -2
- package/lib/loop/plugins/input-prompt/ComposerView.js +1 -1
- package/lib/loop/plugins/notebook/NotebookView.js +3 -11
- package/lib/loop/plugins/page-layout/SplitLayout.js +11 -34
- package/lib/loop/plugins/page-layout/TurnPanel.js +9 -35
- package/lib/loop/plugins/shell/useEditorPreviews.js +3 -2
- package/lib/loop/plugins/subagent-activity/SubagentPulse.js +1 -13
- package/lib/loop/plugins/window-frame/WindowFrame.js +10 -44
- package/lib/loop/plugins/window-frame/index.js +1 -1
- package/lib/loop/shell/LoopWorkspace.js +34 -77
- package/lib/loop/shell/PluginToggles.js +4 -15
- package/lib/loop/shell/SidebarRail.js +8 -40
- package/lib/loop/shell/ViewSwitcher.js +4 -24
- package/lib/loop-main.js +2 -3
- package/lib/mcp/McpServerManager.js +6 -37
- package/lib/portable/index.d.ts +11 -0
- package/lib/portable/index.js +20 -0
- package/lib/protocols/AGUIAdapter.js +2 -2
- package/lib/protocols/BaseProtocolAdapter.d.ts +2 -0
- package/lib/protocols/BaseProtocolAdapter.js +4 -0
- package/lib/specs/apps.js +6 -0
- package/lib/specs/appspecSchema.js +11 -4
- package/lib/stories/loop/ReferenceScreens.js +17 -91
- package/lib/stories/loop/pictures-main.js +1 -1
- package/lib/types/agentspecs.d.ts +5 -2
- package/lib/types/protocol.d.ts +2 -0
- package/lib/utils/approvals.d.ts +59 -0
- package/lib/utils/approvals.js +101 -0
- package/lib/voice/VoiceInput.js +3 -39
- package/package.json +2 -2
- package/lib/shims/primerAddonsBox.d.ts +0 -1
- package/lib/shims/primerAddonsBox.js +0 -7
|
@@ -114,36 +114,14 @@ function IdentityConnectWithStatus({ identityProviders = {}, disabled = false, o
|
|
|
114
114
|
if (!hasContent) {
|
|
115
115
|
return null;
|
|
116
116
|
}
|
|
117
|
-
return (_jsxs(Box, {
|
|
117
|
+
return (_jsxs(Box, { display: "flex", flexDirection: "column", gap: 3, children: [connectedIdentities.length > 0 && (_jsx(Box, { display: "flex", flexDirection: "column", gap: 2, children: connectedIdentities.map(identity => (_jsx(IdentityCard, { identity: identity, providerConfig: identityProviders?.[identity.provider], showExpirationDetails: true, allowReconnect: !disabled && identity.authType !== 'token', onConnect: onConnect, onDisconnect: identity.authType === 'token'
|
|
118
118
|
? () => handleTokenDisconnect(identity.provider)
|
|
119
|
-
: onDisconnect }, identity.provider))) })), hasUnconnected && (_jsx(IdentityConnect, { providers: unconnectedProviders, layout: "list", showHeader: false, size: "medium", showDescriptions: true, disabled: disabled, onConnect: onConnect, onDisconnect: onDisconnect })), hasUnconnectedToken && !disabled && (_jsx(Box, {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
? tp.color
|
|
123
|
-
: 'border.default',
|
|
124
|
-
borderRadius: 2,
|
|
125
|
-
overflow: 'hidden',
|
|
126
|
-
}, children: [_jsxs(Box, { as: "button", onClick: () => {
|
|
119
|
+
: onDisconnect }, identity.provider))) })), hasUnconnected && (_jsx(IdentityConnect, { providers: unconnectedProviders, layout: "list", showHeader: false, size: "medium", showDescriptions: true, disabled: disabled, onConnect: onConnect, onDisconnect: onDisconnect })), hasUnconnectedToken && !disabled && (_jsx(Box, { display: "flex", flexDirection: "column", gap: 2, children: unconnectedTokenProviders.map(tp => (_jsxs(Box, { border: "1px solid", borderColor: expandedTokenProvider === tp.provider
|
|
120
|
+
? tp.color
|
|
121
|
+
: 'border.default', borderRadius: 2, overflow: "hidden", children: [_jsxs(Box, { as: "button", onClick: () => {
|
|
127
122
|
setExpandedTokenProvider(expandedTokenProvider === tp.provider ? null : tp.provider);
|
|
128
123
|
setTokenInput('');
|
|
129
|
-
}, sx: {
|
|
130
|
-
width: '100%',
|
|
131
|
-
display: 'flex',
|
|
132
|
-
alignItems: 'center',
|
|
133
|
-
gap: 2,
|
|
134
|
-
padding: 2,
|
|
135
|
-
backgroundColor: 'canvas.subtle',
|
|
136
|
-
border: 'none',
|
|
137
|
-
cursor: 'pointer',
|
|
138
|
-
'&:hover': {
|
|
139
|
-
backgroundColor: 'canvas.inset',
|
|
140
|
-
},
|
|
141
|
-
}, children: [tp.iconUrl ? (_jsx("img", { src: tp.iconUrl, alt: tp.name, style: { width: 20, height: 20 } })) : (_jsx(KeyIcon, { size: 20 })), _jsxs(Box, { sx: { flex: 1, textAlign: 'left' }, children: [_jsxs(Text, { sx: { fontWeight: 'semibold', display: 'block' }, children: ["Connect ", tp.name] }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: tp.description })] }), _jsx(PlusIcon, { size: 16 })] }), expandedTokenProvider === tp.provider && (_jsxs(Box, { sx: { padding: 3, backgroundColor: 'canvas.default' }, children: [_jsxs(Box, { sx: {
|
|
142
|
-
mb: 2,
|
|
143
|
-
display: 'flex',
|
|
144
|
-
alignItems: 'center',
|
|
145
|
-
gap: 1,
|
|
146
|
-
}, children: [_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: tp.helpText }), _jsx(Button, { as: "a", href: tp.helpUrl, target: "_blank", rel: "noopener noreferrer", variant: "invisible", size: "small", leadingVisual: LinkExternalIcon, sx: { fontSize: 0 }, children: "Get API Key" })] }), _jsxs(Box, { sx: { display: 'flex', gap: 2 }, children: [_jsx(TextInput, { type: "password", placeholder: tp.placeholder, value: tokenInput, onChange: e => setTokenInput(e.target.value), onKeyDown: e => {
|
|
124
|
+
}, width: "100%", display: "flex", alignItems: "center", gap: 2, padding: 2, backgroundColor: "canvas.subtle", border: "none", cursor: "pointer", hover: { backgroundColor: 'canvas.inset' }, children: [tp.iconUrl ? (_jsx("img", { src: tp.iconUrl, alt: tp.name, style: { width: 20, height: 20 } })) : (_jsx(KeyIcon, { size: 20 })), _jsxs(Box, { flex: 1, textAlign: "left", children: [_jsxs(Text, { sx: { fontWeight: 'semibold', display: 'block' }, children: ["Connect ", tp.name] }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: tp.description })] }), _jsx(PlusIcon, { size: 16 })] }), expandedTokenProvider === tp.provider && (_jsxs(Box, { padding: 3, backgroundColor: "canvas.default", children: [_jsxs(Box, { mb: 2, display: "flex", alignItems: "center", gap: 1, children: [_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: tp.helpText }), _jsx(Button, { as: "a", href: tp.helpUrl, target: "_blank", rel: "noopener noreferrer", variant: "invisible", size: "small", leadingVisual: LinkExternalIcon, sx: { fontSize: 0 }, children: "Get API Key" })] }), _jsxs(Box, { display: "flex", gap: 2, children: [_jsx(TextInput, { type: "password", placeholder: tp.placeholder, value: tokenInput, onChange: e => setTokenInput(e.target.value), onKeyDown: e => {
|
|
147
125
|
if (e.key === 'Enter' && tokenInput.trim()) {
|
|
148
126
|
handleTokenConnect(tp.provider, tp.name, tp.iconUrl);
|
|
149
127
|
}
|
|
@@ -591,25 +569,12 @@ export const AgentConfiguration = ({ agentLibrary, protocol: transport, extensio
|
|
|
591
569
|
onExtensionsChange(extensions.filter(e => e !== ext));
|
|
592
570
|
}
|
|
593
571
|
};
|
|
594
|
-
return (_jsxs(Box, { sx: {
|
|
595
|
-
padding: 3,
|
|
596
|
-
border: '1px solid',
|
|
597
|
-
borderColor: 'border.default',
|
|
598
|
-
borderRadius: 2,
|
|
599
|
-
backgroundColor: 'canvas.subtle',
|
|
600
|
-
}, children: [_jsx(Text, { sx: {
|
|
572
|
+
return (_jsxs(Box, { padding: 3, border: "1px solid", borderColor: "border.default", borderRadius: 2, backgroundColor: "canvas.subtle", children: [_jsx(Text, { sx: {
|
|
601
573
|
fontSize: 2,
|
|
602
574
|
fontWeight: 'bold',
|
|
603
575
|
display: 'block',
|
|
604
576
|
marginBottom: 3,
|
|
605
|
-
}, children: "Create a new Agent" }), _jsxs(FormControl, { sx: { marginBottom: 3 }, children: [_jsx(FormControl.Label, { children: "Available Agents" }), _jsxs(Box, {
|
|
606
|
-
mb: 2,
|
|
607
|
-
p: 2,
|
|
608
|
-
border: '1px solid',
|
|
609
|
-
borderColor: 'border.default',
|
|
610
|
-
borderRadius: 2,
|
|
611
|
-
bg: 'canvas.default',
|
|
612
|
-
}, children: [_jsx(Text, { sx: { display: 'block', fontSize: 0, color: 'fg.muted' }, children: "Launch URL" }), _jsx(Text, { sx: {
|
|
577
|
+
}, children: "Create a new Agent" }), _jsxs(FormControl, { sx: { marginBottom: 3 }, children: [_jsx(FormControl.Label, { children: "Available Agents" }), _jsxs(Box, { display: "flex", gap: 2, mb: 2, children: [_jsxs(Label, { variant: launchTarget === 'cloud' ? 'accent' : 'secondary', children: ["Target: ", launchTarget === 'cloud' ? 'Cloud' : 'Local'] }), _jsxs(Label, { variant: launchStatus === 'error' ? 'danger' : 'attention', children: ["Launch: ", launchStatus] })] }), launchBaseUrl ? (_jsxs(Box, { mb: 2, p: 2, border: "1px solid", borderColor: "border.default", borderRadius: 2, bg: "canvas.default", children: [_jsx(Text, { sx: { display: 'block', fontSize: 0, color: 'fg.muted' }, children: "Launch URL" }), _jsx(Text, { sx: {
|
|
613
578
|
display: 'block',
|
|
614
579
|
fontSize: 1,
|
|
615
580
|
fontFamily: 'mono',
|
|
@@ -627,197 +592,47 @@ export const AgentConfiguration = ({ agentLibrary, protocol: transport, extensio
|
|
|
627
592
|
? selectedSpec || selectedCloudSpec
|
|
628
593
|
? `Creating from spec: ${(selectedSpec || selectedCloudSpec)?.name} — capabilities are locked`
|
|
629
594
|
: 'Configure a new custom agent'
|
|
630
|
-
: 'Selected agent - form fields below are disabled', cloudLibraryError ? ` Cloud fetch error: ${cloudLibraryError}` : ''] })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Agent Name" }), _jsx(TextInput, { value: agentName, onChange: e => onAgentNameChange(e.target.value), placeholder: "demo-agent", sx: { width: '100%' } }), _jsx(FormControl.Caption, { children: "The name of the agent to connect to" })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Description" }), _jsx(Box, { as: "textarea", value: description, onChange: e => onDescriptionChange(e.target.value), placeholder: "Short agent description", disabled: isFormReadOnly, readOnly: isFormReadOnly, rows: 3, sx: {
|
|
631
|
-
width: '100%',
|
|
632
|
-
maxWidth: '100%',
|
|
633
|
-
minHeight: '88px',
|
|
634
|
-
resize: 'vertical',
|
|
635
|
-
border: '1px solid',
|
|
636
|
-
borderColor: 'border.default',
|
|
637
|
-
borderRadius: 2,
|
|
638
|
-
p: 2,
|
|
639
|
-
fontSize: 1,
|
|
640
|
-
whiteSpace: 'pre-wrap',
|
|
641
|
-
overflowWrap: 'anywhere',
|
|
642
|
-
bg: isFormReadOnly ? 'canvas.subtle' : 'canvas.default',
|
|
643
|
-
color: isFormReadOnly ? 'fg.muted' : 'fg.default',
|
|
644
|
-
} })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Goal" }), _jsx(Box, { as: "textarea", value: goal, onChange: e => onGoalChange(e.target.value), placeholder: "User-facing objective", disabled: isFormReadOnly, readOnly: isFormReadOnly, rows: 3, sx: {
|
|
645
|
-
width: '100%',
|
|
646
|
-
maxWidth: '100%',
|
|
647
|
-
minHeight: '88px',
|
|
648
|
-
resize: 'vertical',
|
|
649
|
-
border: '1px solid',
|
|
650
|
-
borderColor: 'border.default',
|
|
651
|
-
borderRadius: 2,
|
|
652
|
-
p: 2,
|
|
653
|
-
fontSize: 1,
|
|
654
|
-
whiteSpace: 'pre-wrap',
|
|
655
|
-
overflowWrap: 'anywhere',
|
|
656
|
-
bg: isFormReadOnly ? 'canvas.subtle' : 'canvas.default',
|
|
657
|
-
color: isFormReadOnly ? 'fg.muted' : 'fg.default',
|
|
658
|
-
} })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: transport === 'acp' ? 'WebSocket URL' : 'Base URL' }), _jsx(TextInput, { value: transport === 'acp' ? wsUrl : baseUrl, onChange: e => transport === 'acp'
|
|
595
|
+
: 'Selected agent - form fields below are disabled', cloudLibraryError ? ` Cloud fetch error: ${cloudLibraryError}` : ''] })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Agent Name" }), _jsx(TextInput, { value: agentName, onChange: e => onAgentNameChange(e.target.value), placeholder: "demo-agent", sx: { width: '100%' } }), _jsx(FormControl.Caption, { children: "The name of the agent to connect to" })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Description" }), _jsx(Box, { as: "textarea", value: description, onChange: e => onDescriptionChange(e.target.value), placeholder: "Short agent description", disabled: isFormReadOnly, readOnly: isFormReadOnly, rows: 3, width: "100%", maxWidth: "100%", minHeight: "88px", resize: "vertical", border: "1px solid", borderColor: "border.default", borderRadius: 2, p: 2, fontSize: 1, whiteSpace: "pre-wrap", overflowWrap: "anywhere", bg: isFormReadOnly ? 'canvas.subtle' : 'canvas.default', color: isFormReadOnly ? 'fg.muted' : 'fg.default' })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Goal" }), _jsx(Box, { as: "textarea", value: goal, onChange: e => onGoalChange(e.target.value), placeholder: "User-facing objective", disabled: isFormReadOnly, readOnly: isFormReadOnly, rows: 3, width: "100%", maxWidth: "100%", minHeight: "88px", resize: "vertical", border: "1px solid", borderColor: "border.default", borderRadius: 2, p: 2, fontSize: 1, whiteSpace: "pre-wrap", overflowWrap: "anywhere", bg: isFormReadOnly ? 'canvas.subtle' : 'canvas.default', color: isFormReadOnly ? 'fg.muted' : 'fg.default' })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: transport === 'acp' ? 'WebSocket URL' : 'Base URL' }), _jsx(TextInput, { value: transport === 'acp' ? wsUrl : baseUrl, onChange: e => transport === 'acp'
|
|
659
596
|
? onWsUrlChange(e.target.value)
|
|
660
597
|
: onBaseUrlChange(e.target.value), placeholder: transport === 'acp'
|
|
661
598
|
? 'ws://localhost:8000/api/v1/acp/ws'
|
|
662
599
|
: 'http://localhost:8000', sx: { width: '100%' } }), _jsx(FormControl.Caption, { children: transport === 'acp'
|
|
663
600
|
? 'The WebSocket endpoint of your agent-runtimes server'
|
|
664
|
-
: 'The base URL of your agent-runtimes server' })] }), _jsxs(Box, {
|
|
665
|
-
width: '100%',
|
|
666
|
-
maxWidth: '100%',
|
|
667
|
-
minHeight: '120px',
|
|
668
|
-
resize: 'vertical',
|
|
669
|
-
border: '1px solid',
|
|
670
|
-
borderColor: 'border.default',
|
|
671
|
-
borderRadius: 2,
|
|
672
|
-
p: 2,
|
|
673
|
-
fontFamily: 'mono',
|
|
674
|
-
fontSize: 1,
|
|
675
|
-
whiteSpace: 'pre-wrap',
|
|
676
|
-
overflowWrap: 'anywhere',
|
|
677
|
-
bg: isFormReadOnly ? 'canvas.subtle' : 'canvas.default',
|
|
678
|
-
color: isFormReadOnly ? 'fg.muted' : 'fg.default',
|
|
679
|
-
userSelect: isFormReadOnly ? 'none' : 'text',
|
|
680
|
-
cursor: isFormReadOnly ? 'not-allowed' : 'text',
|
|
681
|
-
} })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "System Prompt Codemode Addons" }), _jsx(Box, { as: "textarea", value: systemPromptCodemodeAddons, onChange: e => onSystemPromptCodemodeAddonsChange(e.target.value), placeholder: "Additional codemode instructions", disabled: isFormReadOnly, readOnly: isFormReadOnly, rows: 4, sx: {
|
|
682
|
-
width: '100%',
|
|
683
|
-
maxWidth: '100%',
|
|
684
|
-
minHeight: '110px',
|
|
685
|
-
resize: 'vertical',
|
|
686
|
-
border: '1px solid',
|
|
687
|
-
borderColor: 'border.default',
|
|
688
|
-
borderRadius: 2,
|
|
689
|
-
p: 2,
|
|
690
|
-
fontFamily: 'mono',
|
|
691
|
-
fontSize: 1,
|
|
692
|
-
whiteSpace: 'pre-wrap',
|
|
693
|
-
overflowWrap: 'anywhere',
|
|
694
|
-
bg: isFormReadOnly ? 'canvas.subtle' : 'canvas.default',
|
|
695
|
-
color: isFormReadOnly ? 'fg.muted' : 'fg.default',
|
|
696
|
-
userSelect: isFormReadOnly ? 'none' : 'text',
|
|
697
|
-
cursor: isFormReadOnly ? 'not-allowed' : 'text',
|
|
698
|
-
} })] }), _jsxs(Box, { sx: { display: 'flex', gap: 3, marginBottom: 3 }, children: [_jsxs(FormControl, { sx: { flex: 1 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Tools (comma-separated)" }), _jsx(TextInput, { value: toolsInputValue, onChange: e => onToolsChange(e.target.value
|
|
601
|
+
: 'The base URL of your agent-runtimes server' })] }), _jsxs(Box, { display: "flex", gap: 3, marginBottom: 3, children: [_jsxs(FormControl, { sx: { flex: 1 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Agent Library" }), _jsx(Select, { value: agentLibrary, onChange: e => onAgentLibraryChange(e.target.value), sx: { width: '100%' }, children: AGENT_LIBRARIES.map(lib => (_jsxs(Select.Option, { value: lib.value, disabled: lib.disabled, children: [lib.label, lib.disabled && ' (Coming Soon)'] }, lib.value))) })] }), _jsxs(FormControl, { sx: { flex: 1 }, disabled: isFormReadOnly || models.length === 0, children: [_jsx(FormControl.Label, { children: "Model" }), _jsx(Select, { value: model, onChange: e => onModelChange(e.target.value), sx: { width: '100%' }, children: models.length === 0 ? (_jsx(Select.Option, { value: "", children: "Loading models..." })) : (models.map(m => (_jsxs(Select.Option, { value: m.id, disabled: !m.isAvailable, children: [m.name, !m.isAvailable && ' (API key required)'] }, m.id)))) })] }), _jsxs(FormControl, { sx: { flex: 1 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Transport" }), _jsx(Select, { value: transport, onChange: e => onTransportChange(e.target.value), sx: { width: '100%' }, children: TRANSPORTS.map(t => (_jsx(Select.Option, { value: t.value, children: t.label }, t.value))) })] }), _jsxs(FormControl, { sx: { flex: 1 }, children: [_jsx(FormControl.Label, { children: "Extensions" }), _jsx(Box, { display: "flex", flexDirection: "column", gap: 2, children: EXTENSIONS.map(ext => (_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, children: [_jsx(Checkbox, { value: ext.value, checked: extensions.includes(ext.value), disabled: isFormReadOnly || !isExtensionEnabled(ext.value), onChange: e => handleExtensionChange(ext.value, e.target.checked) }), _jsx(Text, { children: ext.label })] }, ext.value))) })] })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "System Prompt" }), _jsx(Box, { as: "textarea", value: systemPrompt, onChange: e => onSystemPromptChange(e.target.value), placeholder: "You are a helpful AI assistant.", disabled: isFormReadOnly, readOnly: isFormReadOnly, rows: 5, width: "100%", maxWidth: "100%", minHeight: "120px", resize: "vertical", border: "1px solid", borderColor: "border.default", borderRadius: 2, p: 2, fontFamily: "mono", fontSize: 1, whiteSpace: "pre-wrap", overflowWrap: "anywhere", bg: isFormReadOnly ? 'canvas.subtle' : 'canvas.default', color: isFormReadOnly ? 'fg.muted' : 'fg.default', userSelect: isFormReadOnly ? 'none' : 'text', cursor: isFormReadOnly ? 'not-allowed' : 'text' })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "System Prompt Codemode Addons" }), _jsx(Box, { as: "textarea", value: systemPromptCodemodeAddons, onChange: e => onSystemPromptCodemodeAddonsChange(e.target.value), placeholder: "Additional codemode instructions", disabled: isFormReadOnly, readOnly: isFormReadOnly, rows: 4, width: "100%", maxWidth: "100%", minHeight: "110px", resize: "vertical", border: "1px solid", borderColor: "border.default", borderRadius: 2, p: 2, fontFamily: "mono", fontSize: 1, whiteSpace: "pre-wrap", overflowWrap: "anywhere", bg: isFormReadOnly ? 'canvas.subtle' : 'canvas.default', color: isFormReadOnly ? 'fg.muted' : 'fg.default', userSelect: isFormReadOnly ? 'none' : 'text', cursor: isFormReadOnly ? 'not-allowed' : 'text' })] }), _jsxs(Box, { display: "flex", gap: 3, marginBottom: 3, children: [_jsxs(FormControl, { sx: { flex: 1 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Tools (comma-separated)" }), _jsx(TextInput, { value: toolsInputValue, onChange: e => onToolsChange(e.target.value
|
|
699
602
|
.split(',')
|
|
700
603
|
.map(tool => tool.trim())
|
|
701
|
-
.filter(Boolean)), placeholder: toolsInputPlaceholder, sx: { width: '100%' } })] }), _jsxs(FormControl, { sx: { flex: 1 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Sandbox Variant" }), _jsxs(Select, { value: sandboxVariant, onChange: e => onSandboxVariantChange(e.target.value), sx: { width: '100%' }, children: [_jsx(Select.Option, { value: "", children: "Default" }), _jsx(Select.Option, { value: "eval", children: "eval" }), _jsx(Select.Option, { value: "jupyter", children: "jupyter" })] })] })] }), _jsxs(Box, { sx: {
|
|
702
|
-
marginBottom: 3,
|
|
703
|
-
padding: 3,
|
|
704
|
-
border: '1px solid',
|
|
705
|
-
borderColor: 'border.default',
|
|
706
|
-
borderRadius: 2,
|
|
707
|
-
backgroundColor: 'canvas.default',
|
|
708
|
-
opacity: isSpecMode ? 0.6 : 1,
|
|
709
|
-
}, children: [_jsxs(Box, { sx: {
|
|
710
|
-
display: 'flex',
|
|
711
|
-
alignItems: 'center',
|
|
712
|
-
gap: 2,
|
|
713
|
-
marginBottom: 2,
|
|
714
|
-
}, children: [_jsx(KeyIcon, { size: 16 }), _jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: "Connected Accounts" })] }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block', mb: 3 }, children: "Connect your accounts to give the agent access to external services like GitHub repositories, Google services, or Kaggle datasets." }), _jsx(IdentityConnectWithStatus, { identityProviders: identityProviders, disabled: !isNewAgentMode || isSpecMode, onConnect: onIdentityConnect, onDisconnect: onIdentityDisconnect })] }), _jsxs(Box, { sx: {
|
|
715
|
-
marginBottom: 3,
|
|
716
|
-
padding: 3,
|
|
717
|
-
border: '1px solid',
|
|
718
|
-
borderColor: 'border.default',
|
|
719
|
-
borderRadius: 2,
|
|
720
|
-
backgroundColor: 'canvas.default',
|
|
721
|
-
opacity: isSpecMode ? 0.6 : 1,
|
|
722
|
-
}, children: [_jsxs(Text, { sx: { fontSize: 1, fontWeight: 'bold', display: 'block', mb: 2 }, children: ["Agent Capabilities", isSpecMode && (_jsx(Text, { as: "span", sx: {
|
|
604
|
+
.filter(Boolean)), placeholder: toolsInputPlaceholder, sx: { width: '100%' } })] }), _jsxs(FormControl, { sx: { flex: 1 }, disabled: isFormReadOnly, children: [_jsx(FormControl.Label, { children: "Sandbox Variant" }), _jsxs(Select, { value: sandboxVariant, onChange: e => onSandboxVariantChange(e.target.value), sx: { width: '100%' }, children: [_jsx(Select.Option, { value: "", children: "Default" }), _jsx(Select.Option, { value: "eval", children: "eval" }), _jsx(Select.Option, { value: "jupyter", children: "jupyter" })] })] })] }), _jsxs(Box, { marginBottom: 3, padding: 3, border: "1px solid", borderColor: "border.default", borderRadius: 2, backgroundColor: "canvas.default", opacity: isSpecMode ? 0.6 : 1, children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, marginBottom: 2, children: [_jsx(KeyIcon, { size: 16 }), _jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: "Connected Accounts" })] }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block', mb: 3 }, children: "Connect your accounts to give the agent access to external services like GitHub repositories, Google services, or Kaggle datasets." }), _jsx(IdentityConnectWithStatus, { identityProviders: identityProviders, disabled: !isNewAgentMode || isSpecMode, onConnect: onIdentityConnect, onDisconnect: onIdentityDisconnect })] }), _jsxs(Box, { marginBottom: 3, padding: 3, border: "1px solid", borderColor: "border.default", borderRadius: 2, backgroundColor: "canvas.default", opacity: isSpecMode ? 0.6 : 1, children: [_jsxs(Text, { sx: { fontSize: 1, fontWeight: 'bold', display: 'block', mb: 2 }, children: ["Agent Capabilities", isSpecMode && (_jsx(Text, { as: "span", sx: {
|
|
723
605
|
fontSize: 0,
|
|
724
606
|
color: 'fg.muted',
|
|
725
607
|
fontWeight: 'normal',
|
|
726
608
|
ml: 2,
|
|
727
|
-
}, children: "\u2014 defined by spec" }))] }), _jsx(Box, {
|
|
728
|
-
marginBottom: 3,
|
|
729
|
-
padding: 3,
|
|
730
|
-
border: '1px solid',
|
|
731
|
-
borderColor: 'border.default',
|
|
732
|
-
borderRadius: 2,
|
|
733
|
-
backgroundColor: 'canvas.default',
|
|
734
|
-
opacity: isSpecMode ? 0.6 : 1,
|
|
735
|
-
}, children: [_jsxs(Box, { sx: {
|
|
736
|
-
display: 'flex',
|
|
737
|
-
alignItems: 'center',
|
|
738
|
-
gap: 2,
|
|
739
|
-
marginBottom: 2,
|
|
740
|
-
}, children: [_jsxs(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: ["Skills", isSpecMode && (_jsx(Text, { as: "span", sx: {
|
|
609
|
+
}, children: "\u2014 defined by spec" }))] }), _jsx(Box, { display: "flex", gap: 4, opacity: isSpecMode ? 0.6 : 1, children: _jsxs(Box, { display: "flex", alignItems: "center", gap: 2, children: [_jsx(Checkbox, { checked: enableCodemode, disabled: !isNewAgentMode || isSpecMode, onChange: e => onEnableCodemodeChange?.(e.target.checked) }), _jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 1 }, children: "Codemode" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block' }, children: "Execute code to compose tools" })] })] }) }), skillsEnabled && enableCodemode && (_jsx(Flash, { variant: "default", sx: { mt: 3 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Codemode composes tools with Python for multi-step execution." }) })), skillsEnabled && !enableCodemode && (_jsx(Flash, { variant: "default", sx: { mt: 3 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Skills will run with a standalone code sandbox for script execution. Enable Codemode to compose skills with other tools." }) })), enableCodemode && (_jsxs(Box, { mt: 3, display: "flex", flexDirection: "column", gap: 2, children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, children: [_jsx(Checkbox, { checked: allowDirectToolCalls, disabled: !isNewAgentMode || isSpecMode, onChange: e => onAllowDirectToolCallsChange?.(e.target.checked) }), _jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 1 }, children: "Allow direct tool calls" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block' }, children: "Expose call_tool for simple, single-tool operations" })] })] }), _jsxs(Box, { display: "flex", alignItems: "center", gap: 2, children: [_jsx(Checkbox, { checked: enableToolReranker, disabled: !isNewAgentMode || isSpecMode, onChange: e => onEnableToolRerankerChange?.(e.target.checked) }), _jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 1 }, children: "Enable tool reranker" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block' }, children: "Reorder search results using the configured reranker" })] })] }), _jsxs(Box, { display: "flex", alignItems: "center", gap: 2, children: [_jsx(Checkbox, { checked: useJupyterSandbox, disabled: !isNewAgentMode || isSpecMode, onChange: e => onUseJupyterSandboxChange?.(e.target.checked) }), _jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 1 }, children: "Use Jupyter Sandbox" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block' }, children: "Execute code in a Jupyter Sandbox instead of eval Sandbox" })] })] })] }))] }), _jsxs(Box, { marginBottom: 3, padding: 3, border: "1px solid", borderColor: "border.default", borderRadius: 2, backgroundColor: "canvas.default", opacity: isSpecMode ? 0.6 : 1, children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, marginBottom: 2, children: [_jsxs(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: ["Skills", isSpecMode && (_jsx(Text, { as: "span", sx: {
|
|
741
610
|
fontSize: 0,
|
|
742
611
|
color: 'fg.muted',
|
|
743
612
|
fontWeight: 'normal',
|
|
744
613
|
ml: 2,
|
|
745
|
-
}, children: "\u2014 defined by spec" }))] }), skillsQuery.isLoading && _jsx(Spinner, { size: "small" }), !skillsQuery.isLoading && (_jsx(Button, { variant: "invisible", size: "small", onClick: () => skillsQuery.refetch(), sx: { padding: 1 }, "aria-label": "Refresh skills", children: _jsx(SyncIcon, { size: 14 }) }))] }), skillsQuery.isError && !usingSpecSkills && (_jsx(Flash, { variant: "warning", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Unable to fetch runtime skills. Using built-in skill specs catalog." }) })), usingSpecSkills && (_jsx(Flash, { variant: "default", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Skills are sourced from the selected agent spec." }) })), usingCatalogFallback && !skillsQuery.isLoading && (_jsx(Flash, { variant: "default", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Skills are sourced from the local skill specs catalog." }) })), displaySkills.length === 0 && !skillsQuery.isLoading ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No skills available." })) : (_jsx(Box, {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
gap: 2,
|
|
749
|
-
padding: 2,
|
|
750
|
-
borderRadius: 1,
|
|
751
|
-
backgroundColor: 'canvas.subtle',
|
|
752
|
-
opacity: !isNewAgentMode || isSpecMode ? 0.6 : 1,
|
|
753
|
-
}, children: [_jsx(Checkbox, { checked: selectedSkills.includes(skill.id), disabled: !isNewAgentMode || isSpecMode, onChange: e => handleSkillChange(skill.id, e.target.checked) }), _jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 1 }, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: skill.name }), skill.description && (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: skill.description })), skill.requiredEnvVars &&
|
|
754
|
-
skill.requiredEnvVars.length > 0 && (_jsx(Box, { sx: { display: 'flex', flexWrap: 'wrap', gap: 1 }, children: skill.requiredEnvVars.map(envVar => (_jsx(Label, { size: "small", variant: skill.isAvailable ? 'success' : 'danger', children: envVar }, `${skill.id}-${envVar}`))) })), (!skill.requiredEnvVars ||
|
|
755
|
-
skill.requiredEnvVars.length === 0) && (_jsx(Label, { size: "small", variant: "success", children: "No env vars required" }))] })] }, skill.id))) }))] }), _jsxs(Box, { sx: {
|
|
756
|
-
marginBottom: 3,
|
|
757
|
-
padding: 3,
|
|
758
|
-
border: '1px solid',
|
|
759
|
-
borderColor: 'border.default',
|
|
760
|
-
borderRadius: 2,
|
|
761
|
-
backgroundColor: 'canvas.default',
|
|
762
|
-
opacity: isSpecMode ? 0.6 : 1,
|
|
763
|
-
}, children: [_jsxs(Box, { sx: {
|
|
764
|
-
display: 'flex',
|
|
765
|
-
alignItems: 'center',
|
|
766
|
-
gap: 2,
|
|
767
|
-
marginBottom: 2,
|
|
768
|
-
}, children: [_jsx(ToolsIcon, { size: 16 }), _jsxs(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: ["MCP Config Servers", isSpecMode && (_jsx(Text, { as: "span", sx: {
|
|
614
|
+
}, children: "\u2014 defined by spec" }))] }), skillsQuery.isLoading && _jsx(Spinner, { size: "small" }), !skillsQuery.isLoading && (_jsx(Button, { variant: "invisible", size: "small", onClick: () => skillsQuery.refetch(), sx: { padding: 1 }, "aria-label": "Refresh skills", children: _jsx(SyncIcon, { size: 14 }) }))] }), skillsQuery.isError && !usingSpecSkills && (_jsx(Flash, { variant: "warning", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Unable to fetch runtime skills. Using built-in skill specs catalog." }) })), usingSpecSkills && (_jsx(Flash, { variant: "default", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Skills are sourced from the selected agent spec." }) })), usingCatalogFallback && !skillsQuery.isLoading && (_jsx(Flash, { variant: "default", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Skills are sourced from the local skill specs catalog." }) })), displaySkills.length === 0 && !skillsQuery.isLoading ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No skills available." })) : (_jsx(Box, { display: "flex", flexDirection: "column", gap: 2, children: displaySkills.map(skill => (_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, padding: 2, borderRadius: 1, backgroundColor: "canvas.subtle", opacity: !isNewAgentMode || isSpecMode ? 0.6 : 1, children: [_jsx(Checkbox, { checked: selectedSkills.includes(skill.id), disabled: !isNewAgentMode || isSpecMode, onChange: e => handleSkillChange(skill.id, e.target.checked) }), _jsxs(Box, { display: "flex", flexDirection: "column", gap: 1, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: skill.name }), skill.description && (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: skill.description })), skill.requiredEnvVars &&
|
|
615
|
+
skill.requiredEnvVars.length > 0 && (_jsx(Box, { display: "flex", flexWrap: "wrap", gap: 1, children: skill.requiredEnvVars.map(envVar => (_jsx(Label, { size: "small", variant: skill.isAvailable ? 'success' : 'danger', children: envVar }, `${skill.id}-${envVar}`))) })), (!skill.requiredEnvVars ||
|
|
616
|
+
skill.requiredEnvVars.length === 0) && (_jsx(Label, { size: "small", variant: "success", children: "No env vars required" }))] })] }, skill.id))) }))] }), _jsxs(Box, { marginBottom: 3, padding: 3, border: "1px solid", borderColor: "border.default", borderRadius: 2, backgroundColor: "canvas.default", opacity: isSpecMode ? 0.6 : 1, children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, marginBottom: 2, children: [_jsx(ToolsIcon, { size: 16 }), _jsxs(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: ["MCP Config Servers", isSpecMode && (_jsx(Text, { as: "span", sx: {
|
|
769
617
|
fontSize: 0,
|
|
770
618
|
color: 'fg.muted',
|
|
771
619
|
fontWeight: 'normal',
|
|
772
620
|
ml: 2,
|
|
773
621
|
}, children: "\u2014 defined by spec" }))] }), mcpServersQuery.isLoading && _jsx(Spinner, { size: "small" }), !mcpServersQuery.isLoading && (_jsx(Button, { variant: "invisible", size: "small", onClick: () => mcpServersQuery.refetch(), disabled: mcpServersDisabled, sx: { padding: 1 }, "aria-label": "Refresh MCP config servers", children: _jsx(SyncIcon, { size: 14 }) }))] }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', marginBottom: 2 }, children: "Servers from your mcp.json configuration file. Started automatically." }), mcpServersQuery.isError && (_jsx(Flash, { variant: "warning", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Unable to fetch MCP config servers. Check that the server is running." }) })), configServers.length === 0 &&
|
|
774
622
|
!mcpServersQuery.isLoading &&
|
|
775
|
-
!mcpServersQuery.isError && (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No MCP config servers found. Add servers to ~/.datalayer/mcp.json" })), unresolvedSelectedMcpServers.length > 0 && (_jsx(Flash, { variant: "warning", sx: { marginTop: 2, marginBottom: 2 }, children: _jsxs(Text, { sx: { fontSize: 0 }, children: ["Selected in spec but not available in this environment:", ' ', unresolvedSelectedMcpServers.join(', ')] }) })), enableCodemode && (_jsx(Flash, { variant: "default", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "When Codemode is enabled, selected MCP servers are used to build the Codemode tool registry (tools are exposed via Codemode meta tools like search and execute_code)." }) })), enableCodemode && (_jsxs(Box, { sx: {
|
|
776
|
-
marginBottom: 2,
|
|
777
|
-
padding: 2,
|
|
778
|
-
borderRadius: 1,
|
|
779
|
-
border: '1px solid',
|
|
780
|
-
borderColor: 'border.default',
|
|
781
|
-
backgroundColor: 'canvas.subtle',
|
|
782
|
-
}, children: [_jsx(Text, { sx: { fontSize: 0, fontWeight: 'semibold', display: 'block' }, children: "Codemode registry preview" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', mb: 1 }, children: selectedConfigServers.length > 0 ||
|
|
623
|
+
!mcpServersQuery.isError && (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No MCP config servers found. Add servers to ~/.datalayer/mcp.json" })), unresolvedSelectedMcpServers.length > 0 && (_jsx(Flash, { variant: "warning", sx: { marginTop: 2, marginBottom: 2 }, children: _jsxs(Text, { sx: { fontSize: 0 }, children: ["Selected in spec but not available in this environment:", ' ', unresolvedSelectedMcpServers.join(', ')] }) })), enableCodemode && (_jsx(Flash, { variant: "default", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "When Codemode is enabled, selected MCP servers are used to build the Codemode tool registry (tools are exposed via Codemode meta tools like search and execute_code)." }) })), enableCodemode && (_jsxs(Box, { marginBottom: 2, padding: 2, borderRadius: 1, border: "1px solid", borderColor: "border.default", backgroundColor: "canvas.subtle", children: [_jsx(Text, { sx: { fontSize: 0, fontWeight: 'semibold', display: 'block' }, children: "Codemode registry preview" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', mb: 1 }, children: selectedConfigServers.length > 0 ||
|
|
783
624
|
selectedCatalogServers.length > 0
|
|
784
625
|
? 'Using selected MCP servers'
|
|
785
626
|
: 'No servers selected — select servers to scope Codemode tools.' }), previewConfigServers.length > 0 ||
|
|
786
|
-
previewCatalogServers.length > 0 ? (_jsxs(Box, {
|
|
627
|
+
previewCatalogServers.length > 0 ? (_jsxs(Box, { display: "flex", flexDirection: "column", gap: 1, children: [previewConfigServers.map(server => (_jsxs(Text, { sx: { fontSize: 0 }, children: [server.name, " \u2014", server.tools.length > 0
|
|
787
628
|
? ` ${server.tools.length} tools (config)`
|
|
788
629
|
: ' tools discovered when launched (config)'] }, server.id))), previewCatalogServers.map(server => (_jsxs(Text, { sx: { fontSize: 0 }, children: [server.name, " \u2014", (server.tools?.length || 0) > 0
|
|
789
630
|
? ` ${server.tools?.length || 0} tools (catalog)`
|
|
790
|
-
: ' tools discovered when launched (catalog)'] }, server.id)))] })) : (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No servers selected." })), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', mt: 2 }, children: "Exposed meta-tools: list_tool_names, search_tools, get_tool_details, list_servers, execute_code, call_tool (optional)" })] })), configServers.length > 0 && (_jsx(Box, {
|
|
791
|
-
display: 'flex',
|
|
792
|
-
alignItems: 'flex-start',
|
|
793
|
-
gap: 2,
|
|
794
|
-
padding: 2,
|
|
795
|
-
borderRadius: 1,
|
|
796
|
-
backgroundColor: 'canvas.subtle',
|
|
797
|
-
opacity: mcpServersDisabled ? 0.6 : 1,
|
|
798
|
-
}, children: [_jsx(Checkbox, { checked: selectedConfigServers.includes(server.id), disabled: mcpServersDisabled, onChange: e => handleConfigServerChange(server.id, e.target.checked) }), _jsxs(Box, { sx: {
|
|
799
|
-
display: 'flex',
|
|
800
|
-
flexDirection: 'column',
|
|
801
|
-
gap: 1,
|
|
802
|
-
flex: 1,
|
|
803
|
-
}, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: server.name }), _jsx(Label, { variant: "success", size: "small", children: "Running" })] }), server.tools.length > 0 && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["Tools: ", server.tools.map(t => t.name).join(', ')] }))] })] }, server.id))) }))] }), catalogServers.length > 0 && (_jsxs(Box, { sx: {
|
|
804
|
-
marginBottom: 3,
|
|
805
|
-
padding: 3,
|
|
806
|
-
border: '1px solid',
|
|
807
|
-
borderColor: 'border.default',
|
|
808
|
-
borderRadius: 2,
|
|
809
|
-
backgroundColor: 'canvas.default',
|
|
810
|
-
opacity: isSpecMode ? 0.6 : 1,
|
|
811
|
-
}, children: [_jsxs(Box, { sx: {
|
|
812
|
-
display: 'flex',
|
|
813
|
-
alignItems: 'center',
|
|
814
|
-
gap: 2,
|
|
815
|
-
marginBottom: 2,
|
|
816
|
-
}, children: [_jsx(ToolsIcon, { size: 16 }), _jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: "MCP Catalog Servers" })] }), _jsx(Text, { sx: {
|
|
631
|
+
: ' tools discovered when launched (catalog)'] }, server.id)))] })) : (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No servers selected." })), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', mt: 2 }, children: "Exposed meta-tools: list_tool_names, search_tools, get_tool_details, list_servers, execute_code, call_tool (optional)" })] })), configServers.length > 0 && (_jsx(Box, { display: "flex", flexDirection: "column", gap: 2, children: configServers.map(server => (_jsxs(Box, { display: "flex", alignItems: "flex-start", gap: 2, padding: 2, borderRadius: 1, backgroundColor: "canvas.subtle", opacity: mcpServersDisabled ? 0.6 : 1, children: [_jsx(Checkbox, { checked: selectedConfigServers.includes(server.id), disabled: mcpServersDisabled, onChange: e => handleConfigServerChange(server.id, e.target.checked) }), _jsxs(Box, { display: "flex", flexDirection: "column", gap: 1, flex: 1, children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: server.name }), _jsx(Label, { variant: "success", size: "small", children: "Running" })] }), server.tools.length > 0 && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["Tools: ", server.tools.map(t => t.name).join(', ')] }))] })] }, server.id))) }))] }), catalogServers.length > 0 && (_jsxs(Box, { marginBottom: 3, padding: 3, border: "1px solid", borderColor: "border.default", borderRadius: 2, backgroundColor: "canvas.default", opacity: isSpecMode ? 0.6 : 1, children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, marginBottom: 2, children: [_jsx(ToolsIcon, { size: 16 }), _jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: "MCP Catalog Servers" })] }), _jsx(Text, { sx: {
|
|
817
632
|
fontSize: 0,
|
|
818
633
|
color: 'fg.muted',
|
|
819
634
|
marginBottom: 2,
|
|
820
|
-
}, children: "Predefined servers that can be enabled on-demand. Select to start and add to your agent." }), _jsx(Box, {
|
|
635
|
+
}, children: "Predefined servers that can be enabled on-demand. Select to start and add to your agent." }), _jsx(Box, { display: "flex", flexDirection: "column", gap: 2, children: catalogServers.map(server => {
|
|
821
636
|
// If required env vars are not provided, treat as available
|
|
822
637
|
const hasRequiredEnvVars = (server.requiredEnvVars?.length || 0) > 0;
|
|
823
638
|
const envVarsAvailable = hasRequiredEnvVars
|
|
@@ -825,30 +640,12 @@ export const AgentConfiguration = ({ agentLibrary, protocol: transport, extensio
|
|
|
825
640
|
: true;
|
|
826
641
|
const isRunning = server.isRunning === true;
|
|
827
642
|
const canSelect = envVarsAvailable || isRunning;
|
|
828
|
-
return (_jsxs(Box, {
|
|
829
|
-
display: 'flex',
|
|
830
|
-
alignItems: 'flex-start',
|
|
831
|
-
gap: 2,
|
|
832
|
-
padding: 2,
|
|
833
|
-
borderRadius: 1,
|
|
834
|
-
backgroundColor: 'canvas.subtle',
|
|
835
|
-
opacity: mcpServersDisabled || !canSelect ? 0.6 : 1,
|
|
836
|
-
}, children: [_jsx(Checkbox, { checked: selectedCatalogServers.includes(server.id), disabled: mcpServersDisabled ||
|
|
643
|
+
return (_jsxs(Box, { display: "flex", alignItems: "flex-start", gap: 2, padding: 2, borderRadius: 1, backgroundColor: "canvas.subtle", opacity: mcpServersDisabled || !canSelect ? 0.6 : 1, children: [_jsx(Checkbox, { checked: selectedCatalogServers.includes(server.id), disabled: mcpServersDisabled ||
|
|
837
644
|
enableCatalogServerMutation.isPending ||
|
|
838
|
-
!canSelect, onChange: e => handleCatalogServerChange(server.id, e.target.checked, isRunning) }), _jsxs(Box, { sx: {
|
|
839
|
-
|
|
840
|
-
flexDirection: 'column',
|
|
841
|
-
gap: 1,
|
|
842
|
-
flex: 1,
|
|
843
|
-
}, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: server.name }), enableCatalogServerMutation.isPending &&
|
|
844
|
-
enableCatalogServerMutation.variables === server.id ? (_jsx(Label, { variant: "accent", size: "small", children: "Starting..." })) : server.isRunning ? (_jsx(Label, { variant: "success", size: "small", children: "Running" })) : (_jsx(Label, { variant: "secondary", size: "small", children: "Not Started" })), server.isConfig && (_jsx(Label, { variant: "secondary", size: "small", children: "From Config" }))] }), hasRequiredEnvVars ? (_jsx(Box, { sx: { display: 'flex', flexWrap: 'wrap', gap: 1 }, children: server.requiredEnvVars?.map(envVar => (_jsx(Label, { variant: envVarsAvailable ? 'success' : 'danger', size: "small", children: envVar }, envVar))) })) : (_jsx(Box, { sx: { display: 'flex' }, children: _jsx(Label, { variant: "success", size: "small", children: "No env vars required" }) })), server.tools && server.tools.length > 0 && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["Tools: ", server.tools.map(t => t.name).join(', ')] }))] })] }, server.id));
|
|
645
|
+
!canSelect, onChange: e => handleCatalogServerChange(server.id, e.target.checked, isRunning) }), _jsxs(Box, { display: "flex", flexDirection: "column", gap: 1, flex: 1, children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: server.name }), enableCatalogServerMutation.isPending &&
|
|
646
|
+
enableCatalogServerMutation.variables === server.id ? (_jsx(Label, { variant: "accent", size: "small", children: "Starting..." })) : server.isRunning ? (_jsx(Label, { variant: "success", size: "small", children: "Running" })) : (_jsx(Label, { variant: "secondary", size: "small", children: "Not Started" })), server.isConfig && (_jsx(Label, { variant: "secondary", size: "small", children: "From Config" }))] }), hasRequiredEnvVars ? (_jsx(Box, { display: "flex", flexWrap: "wrap", gap: 1, children: server.requiredEnvVars?.map(envVar => (_jsx(Label, { variant: envVarsAvailable ? 'success' : 'danger', size: "small", children: envVar }, envVar))) })) : (_jsx(Box, { display: "flex", children: _jsx(Label, { variant: "success", size: "small", children: "No env vars required" }) })), server.tools && server.tools.length > 0 && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["Tools: ", server.tools.map(t => t.name).join(', ')] }))] })] }, server.id));
|
|
845
647
|
}) })] })), createError && (_jsx(Flash, { variant: "danger", sx: { marginBottom: 3 }, children: createError })), _jsx(Button, { variant: "primary", onClick: onConnect, disabled: isCreatingAgent ||
|
|
846
648
|
!agentName ||
|
|
847
|
-
(transport === 'acp' ? !wsUrl : !baseUrl), sx: { width: '100%' }, children: isCreatingAgent ? (_jsxs(Box, {
|
|
848
|
-
display: 'flex',
|
|
849
|
-
alignItems: 'center',
|
|
850
|
-
justifyContent: 'center',
|
|
851
|
-
gap: 2,
|
|
852
|
-
}, children: [_jsx(Spinner, { size: "small" }), _jsx("span", { children: "Creating Agent..." })] })) : isNewAgentMode ? (selectedSpec ? (`Create from "${selectedSpec.name}"`) : ('Create the Agent')) : agents.find(a => a.id === selectedAgentId)?.status === 'running' ? ('Connect to the Agent') : ('Start and Connect to the Agent') })] }));
|
|
649
|
+
(transport === 'acp' ? !wsUrl : !baseUrl), sx: { width: '100%' }, children: isCreatingAgent ? (_jsxs(Box, { display: "flex", alignItems: "center", justifyContent: "center", gap: 2, children: [_jsx(Spinner, { size: "small" }), _jsx("span", { children: "Creating Agent..." })] })) : isNewAgentMode ? (selectedSpec ? (`Create from "${selectedSpec.name}"`) : ('Create the Agent')) : agents.find(a => a.id === selectedAgentId)?.status === 'running' ? ('Connect to the Agent') : ('Start and Connect to the Agent') })] }));
|
|
853
650
|
};
|
|
854
651
|
export { AGENT_LIBRARIES, TRANSPORTS, EXTENSIONS };
|
|
@@ -4,7 +4,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
4
4
|
/**
|
|
5
5
|
* ContextDistribution component - Shows context distribution as a treemap.
|
|
6
6
|
*/
|
|
7
|
-
import { Box
|
|
7
|
+
import { Box } from '@datalayer/primer-addons';
|
|
8
|
+
import { Text, Spinner, Button } from '@primer/react';
|
|
8
9
|
import { ListUnorderedIcon } from '@primer/octicons-react';
|
|
9
10
|
import ReactECharts from 'echarts-for-react';
|
|
10
11
|
import { useState } from 'react';
|
|
@@ -31,22 +32,10 @@ export function ContextDistribution({ agentId, height = '250px', liveData, }) {
|
|
|
31
32
|
const showLoading = !hasLiveData;
|
|
32
33
|
const hasError = false;
|
|
33
34
|
if (showLoading) {
|
|
34
|
-
return (_jsxs(Box, { sx: {
|
|
35
|
-
p: 3,
|
|
36
|
-
display: 'flex',
|
|
37
|
-
alignItems: 'center',
|
|
38
|
-
justifyContent: 'center',
|
|
39
|
-
height,
|
|
40
|
-
}, children: [_jsx(Spinner, { size: "small" }), _jsx(Text, { sx: { ml: 2, fontSize: 1, color: 'fg.muted' }, children: "Loading context distribution..." })] }));
|
|
35
|
+
return (_jsxs(Box, { p: 3, display: "flex", alignItems: "center", justifyContent: "center", height: height, children: [_jsx(Spinner, { size: "small" }), _jsx(Text, { sx: { ml: 2, fontSize: 1, color: 'fg.muted' }, children: "Loading context distribution..." })] }));
|
|
41
36
|
}
|
|
42
37
|
if (hasError || !snapshotData) {
|
|
43
|
-
return (_jsx(Box, { sx: {
|
|
44
|
-
p: 3,
|
|
45
|
-
bg: 'canvas.subtle',
|
|
46
|
-
borderRadius: 2,
|
|
47
|
-
border: '1px solid',
|
|
48
|
-
borderColor: 'border.default',
|
|
49
|
-
}, children: _jsx(Text, { sx: { fontSize: 1, color: 'fg.muted' }, children: "Failed to load context distribution" }) }));
|
|
38
|
+
return (_jsx(Box, { p: 3, bg: "canvas.subtle", borderRadius: 2, border: "1px solid", borderColor: "border.default", children: _jsx(Text, { sx: { fontSize: 1, color: 'fg.muted' }, children: "Failed to load context distribution" }) }));
|
|
50
39
|
}
|
|
51
40
|
const { distribution, totalTokens } = snapshotData;
|
|
52
41
|
const hasData = distribution.children && distribution.children.length > 0;
|
|
@@ -97,38 +86,15 @@ export function ContextDistribution({ agentId, height = '250px', liveData, }) {
|
|
|
97
86
|
},
|
|
98
87
|
],
|
|
99
88
|
};
|
|
100
|
-
return (_jsxs(Box, { children: [_jsxs(Box, { sx: {
|
|
101
|
-
display: 'flex',
|
|
102
|
-
justifyContent: 'space-between',
|
|
103
|
-
alignItems: 'center',
|
|
104
|
-
mb: 2,
|
|
105
|
-
}, children: [_jsxs(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: ["Current Context (", formatTokens(totalTokens), " total)"] }), _jsx(Button, { size: "small", variant: "invisible", onClick: () => setShowDetails(!showDetails), leadingVisual: ListUnorderedIcon, children: showDetails ? 'Hide Details' : 'Show Details' })] }), hasData ? (_jsx(ReactECharts, { option: chartOption, style: { height }, opts: { renderer: 'svg' } })) : (_jsx(Box, { sx: {
|
|
106
|
-
p: 4,
|
|
107
|
-
bg: 'canvas.subtle',
|
|
108
|
-
borderRadius: 2,
|
|
109
|
-
textAlign: 'center',
|
|
110
|
-
height,
|
|
111
|
-
display: 'flex',
|
|
112
|
-
alignItems: 'center',
|
|
113
|
-
justifyContent: 'center',
|
|
114
|
-
}, children: _jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: "No context data yet. Start a conversation to see context distribution." }) })), showDetails && hasData && (_jsxs(Box, { sx: {
|
|
115
|
-
mt: 3,
|
|
116
|
-
p: 2,
|
|
117
|
-
border: '1px solid',
|
|
118
|
-
borderColor: 'border.default',
|
|
119
|
-
borderRadius: 2,
|
|
120
|
-
bg: 'canvas.default',
|
|
121
|
-
fontFamily: 'mono',
|
|
122
|
-
fontSize: 0,
|
|
123
|
-
}, children: [_jsx(Text, { sx: { fontWeight: 'bold', display: 'block', mb: 2 }, children: "Context Breakdown:" }), snapshotData.systemPromptTokens > 0 && (_jsxs(Box, { sx: { mb: 2 }, children: [_jsxs(Text, { sx: { fontWeight: 'bold' }, children: ["System Prompts: ", formatTokens(snapshotData.systemPromptTokens), ' ', "tokens"] }), snapshotData.systemPrompts.map((prompt, idx) => (_jsxs(Text, { sx: { display: 'block', ml: 3, mt: 1, color: 'fg.muted' }, children: ["\u2022", ' ', prompt.length > 100 ? prompt.slice(0, 100) + '...' : prompt] }, idx)))] })), snapshotData.toolTokens > 0 && (_jsxs(Box, { sx: { mb: 2 }, children: [_jsxs(Text, { sx: { fontWeight: 'bold' }, children: ["Tool Definitions: ", formatTokens(snapshotData.toolTokens), " tokens (", snapshotData.tools.length, " tools)"] }), _jsxs(Box, { sx: { ml: 3, mt: 1 }, children: [snapshotData.tools.slice(0, 5).map((tool, idx) => (_jsxs(Text, { sx: { display: 'block', color: 'fg.muted' }, children: ["\u2022 ", tool.name, ": ", formatTokens(tool.totalTokens), " tokens"] }, idx))), snapshotData.tools.length > 5 && (_jsxs(Text, { sx: {
|
|
89
|
+
return (_jsxs(Box, { children: [_jsxs(Box, { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 2, children: [_jsxs(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: ["Current Context (", formatTokens(totalTokens), " total)"] }), _jsx(Button, { size: "small", variant: "invisible", onClick: () => setShowDetails(!showDetails), leadingVisual: ListUnorderedIcon, children: showDetails ? 'Hide Details' : 'Show Details' })] }), hasData ? (_jsx(ReactECharts, { option: chartOption, style: { height }, opts: { renderer: 'svg' } })) : (_jsx(Box, { p: 4, bg: "canvas.subtle", borderRadius: 2, textAlign: "center", height: height, display: "flex", alignItems: "center", justifyContent: "center", children: _jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: "No context data yet. Start a conversation to see context distribution." }) })), showDetails && hasData && (_jsxs(Box, { mt: 3, p: 2, border: "1px solid", borderColor: "border.default", borderRadius: 2, bg: "canvas.default", fontFamily: "mono", fontSize: 0, children: [_jsx(Text, { sx: { fontWeight: 'bold', display: 'block', mb: 2 }, children: "Context Breakdown:" }), snapshotData.systemPromptTokens > 0 && (_jsxs(Box, { mb: 2, children: [_jsxs(Text, { sx: { fontWeight: 'bold' }, children: ["System Prompts: ", formatTokens(snapshotData.systemPromptTokens), ' ', "tokens"] }), snapshotData.systemPrompts.map((prompt, idx) => (_jsxs(Text, { sx: { display: 'block', ml: 3, mt: 1, color: 'fg.muted' }, children: ["\u2022", ' ', prompt.length > 100 ? prompt.slice(0, 100) + '...' : prompt] }, idx)))] })), snapshotData.toolTokens > 0 && (_jsxs(Box, { mb: 2, children: [_jsxs(Text, { sx: { fontWeight: 'bold' }, children: ["Tool Definitions: ", formatTokens(snapshotData.toolTokens), " tokens (", snapshotData.tools.length, " tools)"] }), _jsxs(Box, { ml: 3, mt: 1, children: [snapshotData.tools.slice(0, 5).map((tool, idx) => (_jsxs(Text, { sx: { display: 'block', color: 'fg.muted' }, children: ["\u2022 ", tool.name, ": ", formatTokens(tool.totalTokens), " tokens"] }, idx))), snapshotData.tools.length > 5 && (_jsxs(Text, { sx: {
|
|
124
90
|
display: 'block',
|
|
125
91
|
color: 'fg.muted',
|
|
126
92
|
fontStyle: 'italic',
|
|
127
93
|
}, children: ["...and ", snapshotData.tools.length - 5, " more tools"] }))] })] })), (snapshotData.historyUserTokens > 0 ||
|
|
128
94
|
snapshotData.historyAssistantTokens > 0 ||
|
|
129
|
-
snapshotData.historyToolCallTokens > 0) && (_jsxs(Box, {
|
|
95
|
+
snapshotData.historyToolCallTokens > 0) && (_jsxs(Box, { mb: 2, children: [_jsxs(Text, { sx: { fontWeight: 'bold' }, children: ["History:", ' ', formatTokens(snapshotData.historyUserTokens +
|
|
130
96
|
snapshotData.historyAssistantTokens +
|
|
131
97
|
snapshotData.historyToolCallTokens +
|
|
132
|
-
snapshotData.historyToolReturnTokens), ' ', "tokens"] }), _jsxs(Box, {
|
|
98
|
+
snapshotData.historyToolReturnTokens), ' ', "tokens"] }), _jsxs(Box, { ml: 3, mt: 1, children: [_jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 User Messages:", ' ', formatTokens(snapshotData.historyUserTokens), " tokens"] }), _jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Assistant Responses:", ' ', formatTokens(snapshotData.historyAssistantTokens), " tokens"] }), snapshotData.historyToolCallTokens > 0 && (_jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Tool Calls:", ' ', formatTokens(snapshotData.historyToolCallTokens), " tokens"] })), snapshotData.historyToolReturnTokens > 0 && (_jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Tool Returns:", ' ', formatTokens(snapshotData.historyToolReturnTokens), " tokens"] }))] })] })), snapshotData.currentUserTokens > 0 && (_jsx(Box, { mb: 2, children: _jsxs(Text, { sx: { fontWeight: 'bold' }, children: ["Current User: ", formatTokens(snapshotData.currentUserTokens), ' ', "tokens"] }) })), snapshotData.turnUsage && (_jsxs(Box, { mb: 2, children: [_jsx(Text, { sx: { fontWeight: 'bold' }, children: "Turn Usage (model-reported):" }), _jsxs(Box, { ml: 3, mt: 1, children: [_jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Input: ", formatTokens(snapshotData.turnUsage.inputTokens), ' ', "tokens"] }), _jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Output: ", formatTokens(snapshotData.turnUsage.outputTokens), ' ', "tokens"] }), _jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Requests: ", snapshotData.turnUsage.requests] }), snapshotData.turnUsage.toolCalls > 0 && (_jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Tool Calls: ", snapshotData.turnUsage.toolCalls, snapshotData.turnUsage.toolNames.length > 0 && (_jsxs(_Fragment, { children: [" (", snapshotData.turnUsage.toolNames.join(', '), ")"] }))] }))] })] })), snapshotData.sessionUsage && (_jsxs(Box, { mb: 2, children: [_jsx(Text, { sx: { fontWeight: 'bold' }, children: "Session Totals:" }), _jsxs(Box, { ml: 3, mt: 1, children: [_jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Total Input:", ' ', formatTokens(snapshotData.sessionUsage.inputTokens), " tokens"] }), _jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Total Output:", ' ', formatTokens(snapshotData.sessionUsage.outputTokens), " tokens"] }), _jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Total Requests: ", snapshotData.sessionUsage.requests] }), snapshotData.sessionUsage.toolCalls > 0 && (_jsxs(Text, { sx: { display: 'block' }, children: ["\u2022 Total Tool Calls: ", snapshotData.sessionUsage.toolCalls] }))] })] }))] }))] }));
|
|
133
99
|
}
|
|
134
100
|
export default ContextDistribution;
|