@datalayer/agent-runtimes 1.3.89 → 1.3.91
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/chat/words.d.ts +7 -0
- package/lib/chat/words.js +12 -0
- 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/a2ui/styles.js +16 -5
- 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/AppFeedback.js +12 -3
- 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/apps/feedback.d.ts +3 -2
- package/lib/loop/apps/feedback.js +4 -2
- package/lib/loop/core/index.d.ts +19 -0
- package/lib/loop/core/index.js +27 -0
- 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 +32 -27
- package/lib/loop/plugins/app-elements/AppElements.js +2 -31
- package/lib/loop/plugins/app-page/AppPage.js +26 -8
- 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 +89 -130
- 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
|
@@ -786,14 +786,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
786
786
|
}, [agentBaseUrl, agentId, streamRunMessages, ensureRuntimeReady]);
|
|
787
787
|
// ── Loading / Error ──────────────────────────────────────────────────────
|
|
788
788
|
if (runtimeStatus === 'launching') {
|
|
789
|
-
return (_jsxs(Box, { sx: {
|
|
790
|
-
display: 'flex',
|
|
791
|
-
flexDirection: 'column',
|
|
792
|
-
alignItems: 'center',
|
|
793
|
-
justifyContent: 'center',
|
|
794
|
-
height: '100%',
|
|
795
|
-
gap: 3,
|
|
796
|
-
}, children: [_jsx(Spinner, { size: "large" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Launching runtime for trigger agent..." })] }));
|
|
789
|
+
return (_jsxs(Box, { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", height: "100%", gap: 3, children: [_jsx(Spinner, { size: "large" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Launching runtime for trigger agent..." })] }));
|
|
797
790
|
}
|
|
798
791
|
if (runtimeStatus === 'error' || hookError) {
|
|
799
792
|
return _jsx(ErrorView, { error: hookError, onLogout: onLogout });
|
|
@@ -805,20 +798,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
805
798
|
margin: 0,
|
|
806
799
|
padding: 0,
|
|
807
800
|
minWidth: 0,
|
|
808
|
-
}, children: _jsxs(Box, { sx: {
|
|
809
|
-
height: '100%',
|
|
810
|
-
display: 'flex',
|
|
811
|
-
flexDirection: 'column',
|
|
812
|
-
}, children: [_jsxs(Box, { sx: {
|
|
813
|
-
display: 'flex',
|
|
814
|
-
alignItems: 'center',
|
|
815
|
-
gap: 2,
|
|
816
|
-
px: 3,
|
|
817
|
-
py: 2,
|
|
818
|
-
borderBottom: '1px solid',
|
|
819
|
-
borderColor: 'border.default',
|
|
820
|
-
flexShrink: 0,
|
|
821
|
-
}, children: [_jsx(ClockIcon, { size: 16 }), _jsxs(Heading, { as: "h3", sx: { fontSize: 2, flex: 1 }, children: ["Triggers \u2014 ", agentId] }), !isReady && (_jsx(Button, { size: "small", variant: "primary", onClick: () => void createAgent(), children: "Start Runtime" })), _jsxs(Label, { variant: aiAgentsConnectionState === 'connected' ? 'success' : 'secondary', children: ["Approvals WS: ", aiAgentsConnectionState] })] }), _jsx(ToolApprovalBanner, { pendingApprovals: pendingApprovals, onReview: approval => {
|
|
801
|
+
}, children: _jsxs(Box, { height: "100%", display: "flex", flexDirection: "column", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, px: 3, py: 2, borderBottom: "1px solid", borderColor: "border.default", flexShrink: 0, children: [_jsx(ClockIcon, { size: 16 }), _jsxs(Heading, { as: "h3", sx: { fontSize: 2, flex: 1 }, children: ["Triggers \u2014 ", agentId] }), !isReady && (_jsx(Button, { size: "small", variant: "primary", onClick: () => void createAgent(), children: "Start Runtime" })), _jsxs(Label, { variant: aiAgentsConnectionState === 'connected' ? 'success' : 'secondary', children: ["Approvals WS: ", aiAgentsConnectionState] })] }), _jsx(ToolApprovalBanner, { pendingApprovals: pendingApprovals, onReview: approval => {
|
|
822
802
|
const req = approvals.find(a => a.id === approval.id) || null;
|
|
823
803
|
setActiveApproval(req);
|
|
824
804
|
}, onApproveAll: async () => {
|
|
@@ -839,25 +819,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
839
819
|
setActiveApproval(null);
|
|
840
820
|
}
|
|
841
821
|
}
|
|
842
|
-
}, onClose: () => setActiveApproval(null) }), approvalError && (_jsx(Box, {
|
|
843
|
-
height: '100%',
|
|
844
|
-
display: 'flex',
|
|
845
|
-
alignItems: 'center',
|
|
846
|
-
justifyContent: 'center',
|
|
847
|
-
p: 4,
|
|
848
|
-
}, children: _jsx(Text, { sx: { color: 'fg.muted' }, children: "Runtime is not started yet. Use Start Runtime or launch a trigger to start it." }) })) }), _jsxs(Box, { sx: {
|
|
849
|
-
width: 380,
|
|
850
|
-
borderLeft: '1px solid',
|
|
851
|
-
borderColor: 'border.default',
|
|
852
|
-
display: 'flex',
|
|
853
|
-
flexDirection: 'column',
|
|
854
|
-
overflow: 'auto',
|
|
855
|
-
}, children: [_jsx(Box, { sx: {
|
|
856
|
-
display: 'flex',
|
|
857
|
-
borderBottom: '1px solid',
|
|
858
|
-
borderColor: 'border.default',
|
|
859
|
-
flexShrink: 0,
|
|
860
|
-
}, children: [
|
|
822
|
+
}, onClose: () => setActiveApproval(null) }), approvalError && (_jsx(Box, { px: 3, py: 1, children: _jsx(Text, { sx: { color: 'danger.fg', fontSize: 0 }, children: approvalError }) })), _jsxs(Box, { flex: 1, minHeight: 0, display: "flex", children: [_jsx(Box, { flex: 1, minWidth: 0, children: isReady ? (_jsx(LoopEmbed, { serverUrl: agentBaseUrl, target: "local", showAgentVariants: true, agentId: agentId, editors: false, showHeader: true, plugins: LOOP_PLUGINS_AGENTTRI })) : (_jsx(Box, { height: "100%", display: "flex", alignItems: "center", justifyContent: "center", p: 4, children: _jsx(Text, { sx: { color: 'fg.muted' }, children: "Runtime is not started yet. Use Start Runtime or launch a trigger to start it." }) })) }), _jsxs(Box, { width: 380, borderLeft: "1px solid", borderColor: "border.default", display: "flex", flexDirection: "column", overflow: "auto", children: [_jsx(Box, { display: "flex", borderBottom: "1px solid", borderColor: "border.default", flexShrink: 0, children: [
|
|
861
823
|
{ key: 'once', icon: ZapIcon, label: 'Once' },
|
|
862
824
|
{ key: 'cron', icon: ClockIcon, label: 'Cron' },
|
|
863
825
|
{
|
|
@@ -879,20 +841,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
879
841
|
: '2px solid transparent',
|
|
880
842
|
borderColor: activeTab === t.key ? 'accent.fg' : 'transparent',
|
|
881
843
|
fontWeight: activeTab === t.key ? 'bold' : 'normal',
|
|
882
|
-
}, children: t.label }, t.key))) }), activeTab === 'once' && (_jsxs(Box, { sx: {
|
|
883
|
-
p: 3,
|
|
884
|
-
borderBottom: '1px solid',
|
|
885
|
-
borderColor: 'border.default',
|
|
886
|
-
}, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1, mb: 2 }, children: [_jsx(ZapIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2 }, children: "Once Trigger" })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 3 }, children: "Launch a single streaming run for the once-trigger prompt and watch tool calls, tool results, and assistant text update in real time." }), _jsxs(Box, { sx: {
|
|
887
|
-
bg: 'canvas.default',
|
|
888
|
-
border: '1px solid',
|
|
889
|
-
borderColor: 'border.default',
|
|
890
|
-
borderRadius: 2,
|
|
891
|
-
p: 2,
|
|
892
|
-
mb: 2,
|
|
893
|
-
display: 'grid',
|
|
894
|
-
gap: 1,
|
|
895
|
-
}, children: [_jsxs(Text, { sx: { fontSize: 0 }, children: [_jsx("strong", { children: "Agent ID:" }), " ", agentId] }), _jsxs(Text, { sx: { fontSize: 0 }, children: [_jsx("strong", { children: "Base URL:" }), " ", agentBaseUrl] }), lastOnceStartedAt && (_jsxs(Text, { sx: { fontSize: 0 }, children: [_jsx("strong", { children: "Last once launch:" }), ' ', new Date(lastOnceStartedAt).toLocaleString()] }))] }), _jsx(Button, { size: "small", variant: "primary", leadingVisual: ZapIcon, onClick: handleLaunchOnce, disabled: isLaunchingOnce, sx: { width: '100%' }, children: isLaunchingOnce ? 'Launching…' : 'Launch Once' }), _jsx(Button, { size: "small", variant: "danger", leadingVisual: ZapIcon, onClick: handleLaunchOnceApproval, disabled: isLaunchingApproval, sx: { width: '100%', mt: 2 }, children: isLaunchingApproval
|
|
844
|
+
}, children: t.label }, t.key))) }), activeTab === 'once' && (_jsxs(Box, { p: 3, borderBottom: "1px solid", borderColor: "border.default", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 1, mb: 2, children: [_jsx(ZapIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2 }, children: "Once Trigger" })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 3 }, children: "Launch a single streaming run for the once-trigger prompt and watch tool calls, tool results, and assistant text update in real time." }), _jsxs(Box, { bg: "canvas.default", border: "1px solid", borderColor: "border.default", borderRadius: 2, p: 2, mb: 2, display: "grid", gap: 1, children: [_jsxs(Text, { sx: { fontSize: 0 }, children: [_jsx("strong", { children: "Agent ID:" }), " ", agentId] }), _jsxs(Text, { sx: { fontSize: 0 }, children: [_jsx("strong", { children: "Base URL:" }), " ", agentBaseUrl] }), lastOnceStartedAt && (_jsxs(Text, { sx: { fontSize: 0 }, children: [_jsx("strong", { children: "Last once launch:" }), ' ', new Date(lastOnceStartedAt).toLocaleString()] }))] }), _jsx(Button, { size: "small", variant: "primary", leadingVisual: ZapIcon, onClick: handleLaunchOnce, disabled: isLaunchingOnce, sx: { width: '100%' }, children: isLaunchingOnce ? 'Launching…' : 'Launch Once' }), _jsx(Button, { size: "small", variant: "danger", leadingVisual: ZapIcon, onClick: handleLaunchOnceApproval, disabled: isLaunchingApproval, sx: { width: '100%', mt: 2 }, children: isLaunchingApproval
|
|
896
845
|
? 'Launching…'
|
|
897
846
|
: 'Launch Once with Approval' }), onceFlash && (_jsx(Flash, { variant: onceFlash.includes('launched') ? 'success' : 'danger', sx: { mt: 2, fontSize: 0 }, children: onceFlash })), approvalFlash && (_jsx(Flash, { variant: approvalFlash.includes('launched') ? 'success' : 'danger', sx: { mt: 2, fontSize: 0 }, children: approvalFlash })), hasTriggeredOnce && (_jsxs(_Fragment, { children: [_jsx(Heading, { as: "h4", sx: { fontSize: 1, mt: 3, mb: 2 }, children: "Generated Output" }), (() => {
|
|
898
847
|
const outputEvent = lastOnceStartedAt
|
|
@@ -907,12 +856,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
907
856
|
!isLaunchingOnce &&
|
|
908
857
|
streamedOnceOutput !== null;
|
|
909
858
|
if (!outputEvent && !hasStreamFallback) {
|
|
910
|
-
return (_jsxs(Box, { sx: {
|
|
911
|
-
display: 'flex',
|
|
912
|
-
alignItems: 'center',
|
|
913
|
-
gap: 2,
|
|
914
|
-
mb: 2,
|
|
915
|
-
}, children: [_jsx(Spinner, { size: "small" }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "Waiting for agent output\u2026" })] }));
|
|
859
|
+
return (_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, mb: 2, children: [_jsx(Spinner, { size: "small" }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "Waiting for agent output\u2026" })] }));
|
|
916
860
|
}
|
|
917
861
|
const p = outputEvent?.payload;
|
|
918
862
|
const outputText = outputEvent
|
|
@@ -932,38 +876,18 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
932
876
|
const endedAt = outputEvent
|
|
933
877
|
? p?.ended_at
|
|
934
878
|
: streamedOnceEndedAt;
|
|
935
|
-
return (_jsxs(Box, {
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
overflow: 'hidden',
|
|
943
|
-
}, children: [_jsxs(Box, { sx: {
|
|
944
|
-
display: 'flex',
|
|
945
|
-
alignItems: 'center',
|
|
946
|
-
gap: 1,
|
|
947
|
-
px: 2,
|
|
948
|
-
py: 1,
|
|
949
|
-
bg: exitStatus === 'error'
|
|
950
|
-
? 'danger.subtle'
|
|
951
|
-
: 'success.subtle',
|
|
952
|
-
borderBottom: '1px solid',
|
|
953
|
-
borderColor: exitStatus === 'error'
|
|
954
|
-
? 'danger.muted'
|
|
955
|
-
: 'success.muted',
|
|
956
|
-
}, children: [_jsx(Label, { variant: exitStatus === 'error' ? 'danger' : 'success', size: "small", children: exitStatus ?? 'completed' }), durationMs != null && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: [(Number(durationMs) / 1000).toFixed(1), "s"] })), endedAt && (_jsx(Text, { sx: {
|
|
879
|
+
return (_jsxs(Box, { mb: 2, border: "1px solid", borderColor: exitStatus === 'error'
|
|
880
|
+
? 'danger.muted'
|
|
881
|
+
: 'success.muted', borderRadius: 2, overflow: "hidden", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 1, px: 2, py: 1, bg: exitStatus === 'error'
|
|
882
|
+
? 'danger.subtle'
|
|
883
|
+
: 'success.subtle', borderBottom: "1px solid", borderColor: exitStatus === 'error'
|
|
884
|
+
? 'danger.muted'
|
|
885
|
+
: 'success.muted', children: [_jsx(Label, { variant: exitStatus === 'error' ? 'danger' : 'success', size: "small", children: exitStatus ?? 'completed' }), durationMs != null && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: [(Number(durationMs) / 1000).toFixed(1), "s"] })), endedAt && (_jsx(Text, { sx: {
|
|
957
886
|
fontSize: 0,
|
|
958
887
|
color: 'fg.muted',
|
|
959
888
|
ml: 'auto',
|
|
960
889
|
whiteSpace: 'nowrap',
|
|
961
|
-
}, children: new Date(endedAt).toLocaleString() })), _jsx(Button, { size: "small", variant: "invisible", sx: { p: 1 }, onClick: () => navigator.clipboard.writeText(outputText), children: _jsx(CopyIcon, { size: 12 }) })] }), _jsx(Box, { sx: {
|
|
962
|
-
p: 2,
|
|
963
|
-
bg: 'canvas.default',
|
|
964
|
-
maxHeight: 300,
|
|
965
|
-
overflow: 'auto',
|
|
966
|
-
}, children: _jsx(Text, { sx: {
|
|
890
|
+
}, children: new Date(endedAt).toLocaleString() })), _jsx(Button, { size: "small", variant: "invisible", sx: { p: 1 }, onClick: () => navigator.clipboard.writeText(outputText), children: _jsx(CopyIcon, { size: 12 }) })] }), _jsx(Box, { p: 2, bg: "canvas.default", maxHeight: 300, overflow: "auto", children: _jsx(Text, { sx: {
|
|
967
891
|
fontSize: 0,
|
|
968
892
|
color: 'fg.default',
|
|
969
893
|
display: 'block',
|
|
@@ -979,22 +903,12 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
979
903
|
minWidth: 14,
|
|
980
904
|
minHeight: 14,
|
|
981
905
|
} }))] }), sidebarMessagesError ? (_jsx(Flash, { variant: "danger", sx: { fontSize: 0, mb: 2 }, children: sidebarMessagesError })) : sidebarMessages.filter(msg => msg.role !== 'user')
|
|
982
|
-
.length === 0 ? (_jsxs(Box, { sx: {
|
|
983
|
-
display: 'flex',
|
|
984
|
-
alignItems: 'center',
|
|
985
|
-
gap: 2,
|
|
986
|
-
mb: 2,
|
|
987
|
-
}, children: [_jsx(Spinner, { size: "small", sx: {
|
|
906
|
+
.length === 0 ? (_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, mb: 2, children: [_jsx(Spinner, { size: "small", sx: {
|
|
988
907
|
width: 16,
|
|
989
908
|
height: 16,
|
|
990
909
|
minWidth: 16,
|
|
991
910
|
minHeight: 16,
|
|
992
|
-
} }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "Waiting for streaming messages\u2026" })] })) : (_jsx(Box, {
|
|
993
|
-
display: 'flex',
|
|
994
|
-
flexDirection: 'column',
|
|
995
|
-
gap: 2,
|
|
996
|
-
mb: 2,
|
|
997
|
-
}, children: sidebarMessages
|
|
911
|
+
} }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "Waiting for streaming messages\u2026" })] })) : (_jsx(Box, { display: "flex", flexDirection: "column", gap: 2, mb: 2, children: sidebarMessages
|
|
998
912
|
.slice()
|
|
999
913
|
.filter(msg => msg.role !== 'user')
|
|
1000
914
|
.sort((a, b) => {
|
|
@@ -1011,18 +925,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
1011
925
|
const content = typeof msg.content === 'string'
|
|
1012
926
|
? msg.content
|
|
1013
927
|
: JSON.stringify(msg.content);
|
|
1014
|
-
return (_jsxs(Box, {
|
|
1015
|
-
p: 2,
|
|
1016
|
-
bg: 'canvas.default',
|
|
1017
|
-
borderRadius: 2,
|
|
1018
|
-
border: '1px solid',
|
|
1019
|
-
borderColor: 'border.default',
|
|
1020
|
-
}, children: [_jsxs(Box, { sx: {
|
|
1021
|
-
display: 'flex',
|
|
1022
|
-
alignItems: 'center',
|
|
1023
|
-
gap: 1,
|
|
1024
|
-
mb: 1,
|
|
1025
|
-
}, children: [_jsx(Label, { size: "small", variant: msg.role === 'assistant'
|
|
928
|
+
return (_jsxs(Box, { p: 2, bg: "canvas.default", borderRadius: 2, border: "1px solid", borderColor: "border.default", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 1, mb: 1, children: [_jsx(Label, { size: "small", variant: msg.role === 'assistant'
|
|
1026
929
|
? 'accent'
|
|
1027
930
|
: msg.role === 'tool'
|
|
1028
931
|
? 'success'
|
|
@@ -1040,18 +943,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
1040
943
|
}, children: content.length > 320
|
|
1041
944
|
? `${content.slice(0, 320)}…`
|
|
1042
945
|
: content })] }, `once-msg-${msg.id}`));
|
|
1043
|
-
}) }))] })), hasTriggeredApproval && approvals.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Heading, { as: "h4", sx: { fontSize: 1, mt: 3, mb: 2 }, children: "Pending Tool Approvals" }), _jsx(Box, { sx: {
|
|
1044
|
-
display: 'flex',
|
|
1045
|
-
flexDirection: 'column',
|
|
1046
|
-
gap: 2,
|
|
1047
|
-
mb: 2,
|
|
1048
|
-
}, children: approvals.map(a => (_jsxs(Box, { sx: {
|
|
1049
|
-
p: 2,
|
|
1050
|
-
border: '1px solid',
|
|
1051
|
-
borderColor: 'attention.muted',
|
|
1052
|
-
borderRadius: 2,
|
|
1053
|
-
bg: 'attention.subtle',
|
|
1054
|
-
}, children: [_jsxs(Text, { sx: {
|
|
946
|
+
}) }))] })), hasTriggeredApproval && approvals.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Heading, { as: "h4", sx: { fontSize: 1, mt: 3, mb: 2 }, children: "Pending Tool Approvals" }), _jsx(Box, { display: "flex", flexDirection: "column", gap: 2, mb: 2, children: approvals.map(a => (_jsxs(Box, { p: 2, border: "1px solid", borderColor: "attention.muted", borderRadius: 2, bg: "attention.subtle", children: [_jsxs(Text, { sx: {
|
|
1055
947
|
fontWeight: 600,
|
|
1056
948
|
fontSize: 1,
|
|
1057
949
|
display: 'block',
|
|
@@ -1062,7 +954,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
1062
954
|
display: 'block',
|
|
1063
955
|
mb: 2,
|
|
1064
956
|
fontFamily: 'mono',
|
|
1065
|
-
}, children: JSON.stringify(a.tool_args) })), _jsxs(Box, {
|
|
957
|
+
}, children: JSON.stringify(a.tool_args) })), _jsxs(Box, { display: "flex", gap: 1, children: [_jsx(Button, { size: "small", variant: "primary", onClick: () => void handleApprove(a.id), disabled: approvalLoading === a.id, children: approvalLoading === a.id
|
|
1066
958
|
? 'Approving…'
|
|
1067
959
|
: 'Approve' }), _jsx(Button, { size: "small", variant: "danger", onClick: () => void handleReject(a.id, 'Rejected from trigger panel'), disabled: approvalLoading === a.id, children: "Reject" })] })] }, a.id))) })] })), hasTriggeredApproval && (_jsxs(_Fragment, { children: [_jsxs(Heading, { as: "h4", sx: { fontSize: 1, mt: 3, mb: 2 }, children: ["Approval Agent Messages", isLaunchingApproval && (_jsx(Spinner, { size: "small", sx: {
|
|
1068
960
|
ml: 2,
|
|
@@ -1084,12 +976,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
1084
976
|
return tb - ta;
|
|
1085
977
|
})[0];
|
|
1086
978
|
if (!latestAssistantOutput) {
|
|
1087
|
-
return (_jsxs(Box, { sx: {
|
|
1088
|
-
display: 'flex',
|
|
1089
|
-
alignItems: 'center',
|
|
1090
|
-
gap: 2,
|
|
1091
|
-
mb: 2,
|
|
1092
|
-
}, children: [_jsx(Spinner, { size: "small", sx: {
|
|
979
|
+
return (_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, mb: 2, children: [_jsx(Spinner, { size: "small", sx: {
|
|
1093
980
|
width: 16,
|
|
1094
981
|
height: 16,
|
|
1095
982
|
minWidth: 16,
|
|
@@ -1099,32 +986,12 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
1099
986
|
const outputText = typeof latestAssistantOutput.content === 'string'
|
|
1100
987
|
? latestAssistantOutput.content
|
|
1101
988
|
: JSON.stringify(latestAssistantOutput.content);
|
|
1102
|
-
return (_jsxs(Box, { sx: {
|
|
1103
|
-
mb: 2,
|
|
1104
|
-
border: '1px solid',
|
|
1105
|
-
borderColor: 'success.muted',
|
|
1106
|
-
borderRadius: 2,
|
|
1107
|
-
overflow: 'hidden',
|
|
1108
|
-
}, children: [_jsxs(Box, { sx: {
|
|
1109
|
-
display: 'flex',
|
|
1110
|
-
alignItems: 'center',
|
|
1111
|
-
gap: 1,
|
|
1112
|
-
px: 2,
|
|
1113
|
-
py: 1,
|
|
1114
|
-
bg: 'success.subtle',
|
|
1115
|
-
borderBottom: '1px solid',
|
|
1116
|
-
borderColor: 'success.muted',
|
|
1117
|
-
}, children: [_jsx(Label, { variant: "success", size: "small", children: "completed" }), latestAssistantOutput.createdAt && (_jsx(Text, { sx: {
|
|
989
|
+
return (_jsxs(Box, { mb: 2, border: "1px solid", borderColor: "success.muted", borderRadius: 2, overflow: "hidden", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 1, px: 2, py: 1, bg: "success.subtle", borderBottom: "1px solid", borderColor: "success.muted", children: [_jsx(Label, { variant: "success", size: "small", children: "completed" }), latestAssistantOutput.createdAt && (_jsx(Text, { sx: {
|
|
1118
990
|
fontSize: 0,
|
|
1119
991
|
color: 'fg.muted',
|
|
1120
992
|
ml: 'auto',
|
|
1121
993
|
whiteSpace: 'nowrap',
|
|
1122
|
-
}, children: new Date(latestAssistantOutput.createdAt).toLocaleString() })), _jsx(Button, { size: "small", variant: "invisible", sx: { p: 1 }, onClick: () => navigator.clipboard.writeText(outputText), children: _jsx(CopyIcon, { size: 12 }) })] }), _jsx(Box, { sx: {
|
|
1123
|
-
p: 2,
|
|
1124
|
-
bg: 'canvas.default',
|
|
1125
|
-
maxHeight: 300,
|
|
1126
|
-
overflow: 'auto',
|
|
1127
|
-
}, children: _jsx(Text, { sx: {
|
|
994
|
+
}, children: new Date(latestAssistantOutput.createdAt).toLocaleString() })), _jsx(Button, { size: "small", variant: "invisible", sx: { p: 1 }, onClick: () => navigator.clipboard.writeText(outputText), children: _jsx(CopyIcon, { size: 12 }) })] }), _jsx(Box, { p: 2, bg: "canvas.default", maxHeight: 300, overflow: "auto", children: _jsx(Text, { sx: {
|
|
1128
995
|
fontSize: 0,
|
|
1129
996
|
color: 'fg.default',
|
|
1130
997
|
display: 'block',
|
|
@@ -1133,22 +1000,12 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
1133
1000
|
fontFamily: 'mono',
|
|
1134
1001
|
}, children: outputText || '(empty output)' }) })] }));
|
|
1135
1002
|
})()] })), approvalSidebarMessages.filter(msg => msg.role !== 'user')
|
|
1136
|
-
.length === 0 ? (_jsxs(Box, { sx: {
|
|
1137
|
-
display: 'flex',
|
|
1138
|
-
alignItems: 'center',
|
|
1139
|
-
gap: 2,
|
|
1140
|
-
mb: 2,
|
|
1141
|
-
}, children: [_jsx(Spinner, { size: "small", sx: {
|
|
1003
|
+
.length === 0 ? (_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, mb: 2, children: [_jsx(Spinner, { size: "small", sx: {
|
|
1142
1004
|
width: 16,
|
|
1143
1005
|
height: 16,
|
|
1144
1006
|
minWidth: 16,
|
|
1145
1007
|
minHeight: 16,
|
|
1146
|
-
} }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "Waiting for approval agent messages\u2026" })] })) : (_jsx(Box, {
|
|
1147
|
-
display: 'flex',
|
|
1148
|
-
flexDirection: 'column',
|
|
1149
|
-
gap: 2,
|
|
1150
|
-
mb: 2,
|
|
1151
|
-
}, children: approvalSidebarMessages
|
|
1008
|
+
} }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "Waiting for approval agent messages\u2026" })] })) : (_jsx(Box, { display: "flex", flexDirection: "column", gap: 2, mb: 2, children: approvalSidebarMessages
|
|
1152
1009
|
.slice()
|
|
1153
1010
|
.filter(msg => msg.role !== 'user')
|
|
1154
1011
|
.sort((a, b) => {
|
|
@@ -1165,18 +1022,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
1165
1022
|
const content = typeof msg.content === 'string'
|
|
1166
1023
|
? msg.content
|
|
1167
1024
|
: JSON.stringify(msg.content);
|
|
1168
|
-
return (_jsxs(Box, {
|
|
1169
|
-
p: 2,
|
|
1170
|
-
bg: 'canvas.default',
|
|
1171
|
-
borderRadius: 2,
|
|
1172
|
-
border: '1px solid',
|
|
1173
|
-
borderColor: 'border.default',
|
|
1174
|
-
}, children: [_jsxs(Box, { sx: {
|
|
1175
|
-
display: 'flex',
|
|
1176
|
-
alignItems: 'center',
|
|
1177
|
-
gap: 1,
|
|
1178
|
-
mb: 1,
|
|
1179
|
-
}, children: [_jsx(Label, { size: "small", variant: msg.role === 'assistant'
|
|
1025
|
+
return (_jsxs(Box, { p: 2, bg: "canvas.default", borderRadius: 2, border: "1px solid", borderColor: "border.default", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 1, mb: 1, children: [_jsx(Label, { size: "small", variant: msg.role === 'assistant'
|
|
1180
1026
|
? 'accent'
|
|
1181
1027
|
: msg.role === 'tool'
|
|
1182
1028
|
? 'success'
|
|
@@ -1194,64 +1040,14 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
1194
1040
|
}, children: content.length > 320
|
|
1195
1041
|
? `${content.slice(0, 320)}…`
|
|
1196
1042
|
: content })] }, `approval-msg-${msg.id}`));
|
|
1197
|
-
}) }))] })), _jsxs(Box, { sx: { mt: 2, display: '
|
|
1198
|
-
mt: 1,
|
|
1199
|
-
bg: 'canvas.default',
|
|
1200
|
-
borderRadius: 2,
|
|
1201
|
-
p: 2,
|
|
1202
|
-
fontFamily: 'mono',
|
|
1203
|
-
fontSize: 0,
|
|
1204
|
-
wordBreak: 'break-all',
|
|
1205
|
-
}, children: triggerRunCurl })] }), _jsx(Button, { size: "small", leadingVisual: CopyIcon, onClick: () => navigator.clipboard.writeText(triggerRunCurl), children: "Copy streaming command" })] })] })), activeTab === 'cron' && (_jsxs(Box, { sx: {
|
|
1206
|
-
p: 3,
|
|
1207
|
-
borderBottom: '1px solid',
|
|
1208
|
-
borderColor: 'border.default',
|
|
1209
|
-
}, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1, mb: 2 }, children: [_jsx(ClockIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2 }, children: "Cron Schedule" })] }), _jsxs(Label, { variant: "primary", sx: { mb: 2, display: 'inline-block' }, children: ["Current: ", cronExpr] }), nextRun && (_jsxs(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 2 }, children: ["Next run: ", new Date(nextRun).toLocaleString()] })), _jsxs(Box, { sx: { display: 'flex', gap: 2, mb: 2 }, children: [_jsx(TextInput, { value: editCron, onChange: e => setEditCron(e.target.value), placeholder: "* * * * *", sx: { flex: 1 }, size: "small" }), _jsx(Button, { size: "small", variant: "primary", leadingVisual: SyncIcon, onClick: handleUpdateCron, disabled: isUpdating, children: isUpdating ? 'Saving…' : 'Update' })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted' }, children: "Standard cron syntax: minute hour day month weekday" })] })), activeTab === 'webhook' && (_jsxs(Box, { sx: {
|
|
1210
|
-
p: 3,
|
|
1211
|
-
borderBottom: '1px solid',
|
|
1212
|
-
borderColor: 'border.default',
|
|
1213
|
-
}, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1, mb: 2 }, children: [_jsx(GlobeIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2 }, children: "Webhook Trigger" })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 3 }, children: "Generate a unique URL that triggers this agent on incoming HTTP POST requests. Useful for CI/CD pipelines, external services, or custom integrations." }), webhookUrl ? (_jsxs(_Fragment, { children: [_jsx(Label, { variant: webhookEnabled ? 'success' : 'secondary', sx: { mb: 2, display: 'inline-block' }, children: webhookEnabled ? 'Active' : 'Disabled' }), _jsx(Box, { sx: {
|
|
1214
|
-
bg: 'canvas.default',
|
|
1215
|
-
p: 2,
|
|
1216
|
-
borderRadius: 2,
|
|
1217
|
-
mb: 2,
|
|
1218
|
-
fontFamily: 'mono',
|
|
1219
|
-
fontSize: 0,
|
|
1220
|
-
wordBreak: 'break-all',
|
|
1221
|
-
}, children: webhookUrl }), webhookSecret && (_jsxs(Box, { sx: { mb: 2 }, children: [_jsx(Text, { sx: { fontSize: 0, fontWeight: 'bold' }, children: "Secret:" }), _jsx(Box, { sx: {
|
|
1222
|
-
bg: 'canvas.default',
|
|
1223
|
-
p: 2,
|
|
1224
|
-
borderRadius: 2,
|
|
1225
|
-
mt: 1,
|
|
1226
|
-
fontFamily: 'mono',
|
|
1227
|
-
fontSize: 0,
|
|
1228
|
-
}, children: webhookSecret })] })), _jsxs(Box, { sx: { display: 'flex', gap: 2 }, children: [_jsx(Button, { size: "small", leadingVisual: CopyIcon, onClick: () => navigator.clipboard.writeText(webhookUrl), children: "Copy URL" }), _jsx(Button, { size: "small", variant: webhookEnabled ? 'danger' : 'primary', onClick: handleToggleWebhook, children: webhookEnabled ? 'Disable' : 'Enable' })] })] })) : (_jsx(Button, { size: "small", variant: "primary", leadingVisual: GlobeIcon, onClick: handleGenerateWebhook, disabled: isUpdating, sx: { width: '100%' }, children: isUpdating ? 'Generating…' : 'Generate Webhook URL' }))] })), activeTab === 'event' && (_jsxs(Box, { sx: {
|
|
1229
|
-
p: 3,
|
|
1230
|
-
borderBottom: '1px solid',
|
|
1231
|
-
borderColor: 'border.default',
|
|
1232
|
-
}, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1, mb: 2 }, children: [_jsx(ZapIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2 }, children: "Event Trigger" })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 3 }, children: "Subscribe to a Kafka topic or internal event stream. The agent triggers on matching messages." }), eventSubscribed ? (_jsxs(_Fragment, { children: [_jsxs(Label, { variant: "success", sx: { mb: 2, display: 'inline-block' }, children: ["Subscribed to: ", eventTopic] }), eventFilter && (_jsxs(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 2 }, children: ["Filter: ", eventFilter] })), _jsx(Button, { size: "small", variant: "danger", onClick: () => setEventSubscribed(false), sx: { width: '100%' }, children: "Unsubscribe" })] })) : (_jsxs(_Fragment, { children: [_jsx(TextInput, { value: eventTopic, onChange: e => setEventTopic(e.target.value), placeholder: "e.g. kpi.daily-report", sx: { width: '100%', mb: 2 }, size: "small" }), _jsx(TextInput, { value: eventFilter, onChange: e => setEventFilter(e.target.value), placeholder: "Optional JSONPath filter", sx: { width: '100%', mb: 2 }, size: "small" }), _jsx(Button, { size: "small", variant: "primary", leadingVisual: ZapIcon, onClick: handleSubscribeEvent, disabled: isUpdating || !eventTopic.trim(), sx: { width: '100%' }, children: isUpdating ? 'Subscribing…' : 'Subscribe' })] }))] })), activeTab === 'manual' && (_jsxs(Box, { sx: {
|
|
1233
|
-
p: 3,
|
|
1234
|
-
borderBottom: '1px solid',
|
|
1235
|
-
borderColor: 'border.default',
|
|
1236
|
-
}, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1, mb: 2 }, children: [_jsx(PlayIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2 }, children: "Manual Trigger" })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 3 }, children: "Fire the agent immediately. This is equivalent to the cron job executing but bypasses the schedule." }), _jsx(Button, { size: "small", leadingVisual: PlayIcon, onClick: handleTriggerNow, disabled: isTriggeringNow, sx: { width: '100%' }, children: isTriggeringNow ? 'Triggering…' : 'Trigger Now' }), triggerFlash && (_jsx(Flash, { variant: triggerFlash.includes('success') ? 'success' : 'danger', sx: { mt: 2, fontSize: 0 }, children: triggerFlash }))] })), _jsxs(Box, { sx: { p: 3, flex: 1, overflow: 'auto' }, children: [_jsx(Heading, { as: "h4", sx: { fontSize: 1, mb: 2 }, children: "Trigger History" }), triggerHistory.length === 0 ? (_jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "No trigger runs recorded yet." })) : (_jsx(Timeline, { children: triggerHistory.slice(0, 20).map(rec => (_jsxs(Timeline.Item, { children: [_jsx(Timeline.Badge, { children: rec.status === 'success' ? (_jsx(CheckCircleIcon, {})) : rec.status === 'failure' ? (_jsx(XCircleIcon, {})) : (_jsx(Spinner, { size: "small" })) }), _jsx(Timeline.Body, { children: _jsxs(Text, { sx: { fontSize: 0 }, children: [new Date(rec.timestamp).toLocaleString(), ' — ', _jsx(Label, { variant: rec.status === 'success'
|
|
1043
|
+
}) }))] })), _jsxs(Box, { mt: 2, display: "grid", gap: 2, children: [_jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "Stream once (local curl)" }), _jsx(Box, { mt: 1, bg: "canvas.default", borderRadius: 2, p: 2, fontFamily: "mono", fontSize: 0, wordBreak: "break-all", children: triggerRunCurl })] }), _jsx(Button, { size: "small", leadingVisual: CopyIcon, onClick: () => navigator.clipboard.writeText(triggerRunCurl), children: "Copy streaming command" })] })] })), activeTab === 'cron' && (_jsxs(Box, { p: 3, borderBottom: "1px solid", borderColor: "border.default", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 1, mb: 2, children: [_jsx(ClockIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2 }, children: "Cron Schedule" })] }), _jsxs(Label, { variant: "primary", sx: { mb: 2, display: 'inline-block' }, children: ["Current: ", cronExpr] }), nextRun && (_jsxs(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 2 }, children: ["Next run: ", new Date(nextRun).toLocaleString()] })), _jsxs(Box, { display: "flex", gap: 2, mb: 2, children: [_jsx(TextInput, { value: editCron, onChange: e => setEditCron(e.target.value), placeholder: "* * * * *", sx: { flex: 1 }, size: "small" }), _jsx(Button, { size: "small", variant: "primary", leadingVisual: SyncIcon, onClick: handleUpdateCron, disabled: isUpdating, children: isUpdating ? 'Saving…' : 'Update' })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted' }, children: "Standard cron syntax: minute hour day month weekday" })] })), activeTab === 'webhook' && (_jsxs(Box, { p: 3, borderBottom: "1px solid", borderColor: "border.default", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 1, mb: 2, children: [_jsx(GlobeIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2 }, children: "Webhook Trigger" })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 3 }, children: "Generate a unique URL that triggers this agent on incoming HTTP POST requests. Useful for CI/CD pipelines, external services, or custom integrations." }), webhookUrl ? (_jsxs(_Fragment, { children: [_jsx(Label, { variant: webhookEnabled ? 'success' : 'secondary', sx: { mb: 2, display: 'inline-block' }, children: webhookEnabled ? 'Active' : 'Disabled' }), _jsx(Box, { bg: "canvas.default", p: 2, borderRadius: 2, mb: 2, fontFamily: "mono", fontSize: 0, wordBreak: "break-all", children: webhookUrl }), webhookSecret && (_jsxs(Box, { mb: 2, children: [_jsx(Text, { sx: { fontSize: 0, fontWeight: 'bold' }, children: "Secret:" }), _jsx(Box, { bg: "canvas.default", p: 2, borderRadius: 2, mt: 1, fontFamily: "mono", fontSize: 0, children: webhookSecret })] })), _jsxs(Box, { display: "flex", gap: 2, children: [_jsx(Button, { size: "small", leadingVisual: CopyIcon, onClick: () => navigator.clipboard.writeText(webhookUrl), children: "Copy URL" }), _jsx(Button, { size: "small", variant: webhookEnabled ? 'danger' : 'primary', onClick: handleToggleWebhook, children: webhookEnabled ? 'Disable' : 'Enable' })] })] })) : (_jsx(Button, { size: "small", variant: "primary", leadingVisual: GlobeIcon, onClick: handleGenerateWebhook, disabled: isUpdating, sx: { width: '100%' }, children: isUpdating ? 'Generating…' : 'Generate Webhook URL' }))] })), activeTab === 'event' && (_jsxs(Box, { p: 3, borderBottom: "1px solid", borderColor: "border.default", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 1, mb: 2, children: [_jsx(ZapIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2 }, children: "Event Trigger" })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 3 }, children: "Subscribe to a Kafka topic or internal event stream. The agent triggers on matching messages." }), eventSubscribed ? (_jsxs(_Fragment, { children: [_jsxs(Label, { variant: "success", sx: { mb: 2, display: 'inline-block' }, children: ["Subscribed to: ", eventTopic] }), eventFilter && (_jsxs(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 2 }, children: ["Filter: ", eventFilter] })), _jsx(Button, { size: "small", variant: "danger", onClick: () => setEventSubscribed(false), sx: { width: '100%' }, children: "Unsubscribe" })] })) : (_jsxs(_Fragment, { children: [_jsx(TextInput, { value: eventTopic, onChange: e => setEventTopic(e.target.value), placeholder: "e.g. kpi.daily-report", sx: { width: '100%', mb: 2 }, size: "small" }), _jsx(TextInput, { value: eventFilter, onChange: e => setEventFilter(e.target.value), placeholder: "Optional JSONPath filter", sx: { width: '100%', mb: 2 }, size: "small" }), _jsx(Button, { size: "small", variant: "primary", leadingVisual: ZapIcon, onClick: handleSubscribeEvent, disabled: isUpdating || !eventTopic.trim(), sx: { width: '100%' }, children: isUpdating ? 'Subscribing…' : 'Subscribe' })] }))] })), activeTab === 'manual' && (_jsxs(Box, { p: 3, borderBottom: "1px solid", borderColor: "border.default", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 1, mb: 2, children: [_jsx(PlayIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2 }, children: "Manual Trigger" })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 3 }, children: "Fire the agent immediately. This is equivalent to the cron job executing but bypasses the schedule." }), _jsx(Button, { size: "small", leadingVisual: PlayIcon, onClick: handleTriggerNow, disabled: isTriggeringNow, sx: { width: '100%' }, children: isTriggeringNow ? 'Triggering…' : 'Trigger Now' }), triggerFlash && (_jsx(Flash, { variant: triggerFlash.includes('success') ? 'success' : 'danger', sx: { mt: 2, fontSize: 0 }, children: triggerFlash }))] })), _jsxs(Box, { p: 3, flex: 1, overflow: "auto", children: [_jsx(Heading, { as: "h4", sx: { fontSize: 1, mb: 2 }, children: "Trigger History" }), triggerHistory.length === 0 ? (_jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "No trigger runs recorded yet." })) : (_jsx(Timeline, { children: triggerHistory.slice(0, 20).map(rec => (_jsxs(Timeline.Item, { children: [_jsx(Timeline.Badge, { children: rec.status === 'success' ? (_jsx(CheckCircleIcon, {})) : rec.status === 'failure' ? (_jsx(XCircleIcon, {})) : (_jsx(Spinner, { size: "small" })) }), _jsx(Timeline.Body, { children: _jsxs(Text, { sx: { fontSize: 0 }, children: [new Date(rec.timestamp).toLocaleString(), ' — ', _jsx(Label, { variant: rec.status === 'success'
|
|
1237
1044
|
? 'success'
|
|
1238
1045
|
: rec.status === 'failure'
|
|
1239
1046
|
? 'danger'
|
|
1240
|
-
: 'accent', size: "small", children: rec.status }), rec.duration_ms != null && (_jsxs(Text, { sx: { ml: 1, color: 'fg.muted' }, children: ["(", (rec.duration_ms / 1000).toFixed(1), "s)"] }))] }) })] }, rec.id))) })), _jsx(Heading, { as: "h4", sx: { fontSize: 1, mt: 3, mb: 2 }, children: "Agent Events" }), agentEvents.length === 0 ? (_jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "No agent events yet." })) : (_jsx(Box, {
|
|
1047
|
+
: 'accent', size: "small", children: rec.status }), rec.duration_ms != null && (_jsxs(Text, { sx: { ml: 1, color: 'fg.muted' }, children: ["(", (rec.duration_ms / 1000).toFixed(1), "s)"] }))] }) })] }, rec.id))) })), _jsx(Heading, { as: "h4", sx: { fontSize: 1, mt: 3, mb: 2 }, children: "Agent Events" }), agentEvents.length === 0 ? (_jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "No agent events yet." })) : (_jsx(Box, { display: "flex", flexDirection: "column", gap: 2, children: [...agentEvents]
|
|
1241
1048
|
.sort((a, b) => new Date(b.created_at).getTime() -
|
|
1242
1049
|
new Date(a.created_at).getTime())
|
|
1243
|
-
.map((evt) => (_jsxs(Box, {
|
|
1244
|
-
p: 2,
|
|
1245
|
-
bg: evt.read ? 'canvas.default' : 'neutral.muted',
|
|
1246
|
-
borderRadius: 2,
|
|
1247
|
-
border: '1px solid',
|
|
1248
|
-
borderColor: 'border.default',
|
|
1249
|
-
}, children: [_jsxs(Box, { sx: {
|
|
1250
|
-
display: 'flex',
|
|
1251
|
-
alignItems: 'center',
|
|
1252
|
-
gap: 1,
|
|
1253
|
-
mb: 1,
|
|
1254
|
-
}, children: [_jsx(Label, { variant: evt.kind === 'agent-started'
|
|
1050
|
+
.map((evt) => (_jsxs(Box, { p: 2, bg: evt.read ? 'canvas.default' : 'neutral.muted', borderRadius: 2, border: "1px solid", borderColor: "border.default", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 1, mb: 1, children: [_jsx(Label, { variant: evt.kind === 'agent-started'
|
|
1255
1051
|
? 'accent'
|
|
1256
1052
|
: evt.kind === 'agent-output'
|
|
1257
1053
|
? 'success'
|
|
@@ -1275,18 +1071,12 @@ const AgentTriggerInner = ({ onLogout, }) => {
|
|
|
1275
1071
|
}, sx: { p: 1 }, children: evt.read ? (_jsx(EyeClosedIcon, { size: 12 })) : (_jsx(EyeIcon, { size: 12 })) }), _jsx(Button, { size: "small", variant: "invisible", onClick: () => deleteEventMutation.mutate(evt.id), sx: { p: 1, color: 'danger.fg' }, children: _jsx(TrashIcon, { size: 12 }) })] }), evt.payload &&
|
|
1276
1072
|
(() => {
|
|
1277
1073
|
const p = evt.payload;
|
|
1278
|
-
return (_jsxs(Box, {
|
|
1074
|
+
return (_jsxs(Box, { fontSize: 0, color: "fg.muted", children: [evt.kind === 'agent-output' && p.outputs && (_jsx(Tooltip, { text: String(p.outputs), direction: "n", children: _jsx("button", { type: "button", "aria-label": String(p.outputs), style: {
|
|
1279
1075
|
all: 'unset',
|
|
1280
1076
|
display: 'block',
|
|
1281
1077
|
width: '100%',
|
|
1282
1078
|
cursor: 'default',
|
|
1283
|
-
}, children: _jsxs(Box, { sx: {
|
|
1284
|
-
mb: 1,
|
|
1285
|
-
display: 'flex',
|
|
1286
|
-
alignItems: 'baseline',
|
|
1287
|
-
gap: 1,
|
|
1288
|
-
minWidth: 0,
|
|
1289
|
-
}, children: [_jsx(Text, { as: "span", sx: {
|
|
1079
|
+
}, children: _jsxs(Box, { mb: 1, display: "flex", alignItems: "baseline", gap: 1, minWidth: 0, children: [_jsx(Text, { as: "span", sx: {
|
|
1290
1080
|
fontWeight: 'bold',
|
|
1291
1081
|
color: 'fg.default',
|
|
1292
1082
|
whiteSpace: 'nowrap',
|
|
@@ -990,25 +990,13 @@ githubClientId, kaggleToken, }) => {
|
|
|
990
990
|
};
|
|
991
991
|
return (_jsx(QueryClientProvider, { client: queryClient, children: _jsxs(ThemedProvider, { children: [_jsxs(PageLayout, { containerWidth: "full", children: [_jsx(Header, { activeSession: activeSession, agentName: isNewMode ? undefined : currentAgent?.name, agentDescription: isNewMode ? undefined : currentAgent?.description, agentStatus: currentAgent?.status, showContextTree: showContextTree, isNewAgent: isNewMode, isConfigured: isConfigured, onSessionChange: setActiveSession, onToggleContextTree: () => setShowContextTree(!showContextTree), onToggleStatus: currentAgent
|
|
992
992
|
? () => toggleAgentStatus(currentAgent.id)
|
|
993
|
-
: undefined }), leftPaneVisible ? (_jsxs(_Fragment, { children: [_jsx(Box, { sx: {
|
|
994
|
-
position: 'fixed',
|
|
995
|
-
left: 0,
|
|
996
|
-
top: '50%',
|
|
997
|
-
transform: 'translateY(-50%)',
|
|
998
|
-
zIndex: 100,
|
|
999
|
-
}, children: _jsx(IconButton, { icon: SidebarCollapseIcon, "aria-label": "Collapse left pane", size: "small", onClick: () => setLeftPaneVisible(false), sx: {
|
|
993
|
+
: undefined }), leftPaneVisible ? (_jsxs(_Fragment, { children: [_jsx(Box, { position: "fixed", left: 0, top: "50%", transform: "translateY(-50%)", zIndex: 100, children: _jsx(IconButton, { icon: SidebarCollapseIcon, "aria-label": "Collapse left pane", size: "small", onClick: () => setLeftPaneVisible(false), sx: {
|
|
1000
994
|
borderRadius: '0 6px 6px 0',
|
|
1001
995
|
bg: 'canvas.default',
|
|
1002
996
|
border: '1px solid',
|
|
1003
997
|
borderLeft: 'none',
|
|
1004
998
|
borderColor: 'border.default',
|
|
1005
|
-
} }) }), _jsx(PageLayout.Pane, { position: "start", "aria-label": "File browser pane", resizable: true, sticky: true, width: { min: '250px', default: '300px', max: '1200px' }, children: isNewMode ? (_jsxs(Blankslate, { border: true, spacious: true, narrow: true, children: [_jsx(Blankslate.Visual, { children: _jsx(AiAgentIcon, { colored: true, size: 48 }) }), _jsx(Blankslate.Heading, { children: "Agent Runtimes" }), _jsx(Box, {
|
|
1006
|
-
position: 'fixed',
|
|
1007
|
-
left: 0,
|
|
1008
|
-
top: '50%',
|
|
1009
|
-
transform: 'translateY(-50%)',
|
|
1010
|
-
zIndex: 100,
|
|
1011
|
-
}, children: _jsx(IconButton, { icon: SidebarExpandIcon, "aria-label": "Expand left pane", size: "small", onClick: () => setLeftPaneVisible(true), sx: {
|
|
999
|
+
} }) }), _jsx(PageLayout.Pane, { position: "start", "aria-label": "File browser pane", resizable: true, sticky: true, width: { min: '250px', default: '300px', max: '1200px' }, children: isNewMode ? (_jsxs(Blankslate, { border: true, spacious: true, narrow: true, children: [_jsx(Blankslate.Visual, { children: _jsx(AiAgentIcon, { colored: true, size: 48 }) }), _jsx(Blankslate.Heading, { children: "Agent Runtimes" }), _jsx(Box, { textAlign: "center", children: _jsx(Blankslate.Description, { children: "Expose AI Agents through multiple protocols." }) })] })) : (_jsx(MockFileBrowser, { codemode: codemode })) })] })) : (_jsx(Box, { position: "fixed", left: 0, top: "50%", transform: "translateY(-50%)", zIndex: 100, children: _jsx(IconButton, { icon: SidebarExpandIcon, "aria-label": "Expand left pane", size: "small", onClick: () => setLeftPaneVisible(true), sx: {
|
|
1012
1000
|
borderRadius: '0 6px 6px 0',
|
|
1013
1001
|
bg: 'canvas.default',
|
|
1014
1002
|
border: '1px solid',
|
|
@@ -1018,24 +1006,13 @@ githubClientId, kaggleToken, }) => {
|
|
|
1018
1006
|
// Trigger codemode tool regeneration when MCP servers change at runtime
|
|
1019
1007
|
console.log('[AgentRuntimeFormExample] MCP servers changed, regenerating codemode tools...');
|
|
1020
1008
|
// The Chat component will pick up the new selectedMcpServers via props
|
|
1021
|
-
} }) }), rightPaneVisible ? (_jsx(_Fragment, { children: _jsx(PageLayout.Pane, { position: "end", "aria-label": "Agent configuration and chat pane", width: RIGHT_PANE_WIDTH, sticky: true, children: _jsxs(Box, {
|
|
1022
|
-
height: '100%',
|
|
1023
|
-
display: 'flex',
|
|
1024
|
-
flexDirection: 'column',
|
|
1025
|
-
p: 2,
|
|
1026
|
-
}, children: [_jsxs(Box, { sx: {
|
|
1027
|
-
display: 'flex',
|
|
1028
|
-
justifyContent: 'space-between',
|
|
1029
|
-
alignItems: 'center',
|
|
1030
|
-
mb: 2,
|
|
1031
|
-
gap: 2,
|
|
1032
|
-
}, children: [_jsx(IconButton, { icon: SidebarCollapseIcon, "aria-label": "Collapse right pane", size: "small", onClick: () => setRightPaneVisible(false), variant: "invisible" }), _jsx(Button, { size: "small", onClick: () => setShowSpecOverlay(true), children: "View Full Spec (YAML)" })] }), !isConfigured ? (_jsx(AgentConfiguration, { agentLibrary: agentLibrary, protocol: currentAgent?.protocol || transport, extensions: extensions, wsUrl: wsUrl, baseUrl: serviceBaseUrlForSelection, agentName: agentName, description: description, goal: goal, model: model, systemPrompt: systemPrompt, systemPromptCodemodeAddons: systemPromptCodemodeAddons, tools: tools, sandboxVariant: sandboxVariant, agents: agents, selectedAgentId: selectedAgentId, isCreatingAgent: isCreatingAgent, createError: createError, enableCodemode: enableCodemode, useJupyterSandbox: useJupyterSandbox, allowDirectToolCalls: allowDirectToolCalls, enableToolReranker: enableToolReranker, availableSkills: MOCK_SKILLS, selectedSkills: selectedSkills, selectedMcpServers: selectedMcpServers, cloudLibrarySpecs: cloudLibrarySpecs, cloudLibraryLoading: cloudLibraryLoading, cloudLibraryError: cloudLibraryError, launchTarget: isCloudMode ? 'cloud' : 'local', launchStatus: launchStatus, launchBaseUrl: serviceBaseUrlForSelection, identityProviders: oauthProvidersConfig, onIdentityConnect: handleIdentityConnect, onIdentityDisconnect: handleIdentityDisconnect, onAgentLibraryChange: setAgentLibrary, onTransportChange: setTransport, onExtensionsChange: setExtensions, onWsUrlChange: setWsUrl, onBaseUrlChange: isCloudMode
|
|
1009
|
+
} }) }), rightPaneVisible ? (_jsx(_Fragment, { children: _jsx(PageLayout.Pane, { position: "end", "aria-label": "Agent configuration and chat pane", width: RIGHT_PANE_WIDTH, sticky: true, children: _jsxs(Box, { height: "100%", display: "flex", flexDirection: "column", p: 2, children: [_jsxs(Box, { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 2, gap: 2, children: [_jsx(IconButton, { icon: SidebarCollapseIcon, "aria-label": "Collapse right pane", size: "small", onClick: () => setRightPaneVisible(false), variant: "invisible" }), _jsx(Button, { size: "small", onClick: () => setShowSpecOverlay(true), children: "View Full Spec (YAML)" })] }), !isConfigured ? (_jsx(AgentConfiguration, { agentLibrary: agentLibrary, protocol: currentAgent?.protocol || transport, extensions: extensions, wsUrl: wsUrl, baseUrl: serviceBaseUrlForSelection, agentName: agentName, description: description, goal: goal, model: model, systemPrompt: systemPrompt, systemPromptCodemodeAddons: systemPromptCodemodeAddons, tools: tools, sandboxVariant: sandboxVariant, agents: agents, selectedAgentId: selectedAgentId, isCreatingAgent: isCreatingAgent, createError: createError, enableCodemode: enableCodemode, useJupyterSandbox: useJupyterSandbox, allowDirectToolCalls: allowDirectToolCalls, enableToolReranker: enableToolReranker, availableSkills: MOCK_SKILLS, selectedSkills: selectedSkills, selectedMcpServers: selectedMcpServers, cloudLibrarySpecs: cloudLibrarySpecs, cloudLibraryLoading: cloudLibraryLoading, cloudLibraryError: cloudLibraryError, launchTarget: isCloudMode ? 'cloud' : 'local', launchStatus: launchStatus, launchBaseUrl: serviceBaseUrlForSelection, identityProviders: oauthProvidersConfig, onIdentityConnect: handleIdentityConnect, onIdentityDisconnect: handleIdentityDisconnect, onAgentLibraryChange: setAgentLibrary, onTransportChange: setTransport, onExtensionsChange: setExtensions, onWsUrlChange: setWsUrl, onBaseUrlChange: isCloudMode
|
|
1033
1010
|
? (_) => {
|
|
1034
1011
|
/* Cloud mode uses cloud service URLs from spec/config. */
|
|
1035
1012
|
}
|
|
1036
1013
|
: setBaseUrl, onAgentNameChange: setAgentName, onDescriptionChange: setDescription, onGoalChange: setGoal, onModelChange: setModel, onSystemPromptChange: setSystemPrompt, onSystemPromptCodemodeAddonsChange: setSystemPromptCodemodeAddons, onToolsChange: setTools, onSandboxVariantChange: setSandboxVariant, onAgentSelect: handleAgentSelect, onConnect: handleConnect, onEnableCodemodeChange: handleEnableCodemodeChange, onUseJupyterSandboxChange: setUseJupyterSandbox, onAllowDirectToolCallsChange: setAllowDirectToolCalls, onEnableToolRerankerChange: setEnableToolReranker, onSelectedSkillsChange: setSelectedSkills, onSelectedMcpServersChange: setSelectedMcpServers })) : (
|
|
1037
1014
|
/* Chat Interface */
|
|
1038
|
-
_jsx(Box, {
|
|
1015
|
+
_jsx(Box, { flex: 1, minHeight: 0, children: _jsx(ChatWithJupyterStatus, { baseUrl: effectiveBaseUrl, isConfigured: isConfigured, enableCodemode: enableCodemode, useJupyterSandbox: useJupyterSandbox, chatProps: {
|
|
1039
1016
|
protocol: effectiveProtocol,
|
|
1040
1017
|
extensions: extensions,
|
|
1041
1018
|
wsUrl: wsUrl,
|
|
@@ -1084,43 +1061,12 @@ githubClientId, kaggleToken, }) => {
|
|
|
1084
1061
|
onMessageReceived: (_message) => {
|
|
1085
1062
|
// Message received
|
|
1086
1063
|
},
|
|
1087
|
-
} }) }))] }) }) })) : (_jsx(Box, { sx: {
|
|
1088
|
-
position: 'fixed',
|
|
1089
|
-
right: 0,
|
|
1090
|
-
top: '50%',
|
|
1091
|
-
transform: 'translateY(-50%)',
|
|
1092
|
-
zIndex: 100,
|
|
1093
|
-
}, children: _jsx(IconButton, { icon: SidebarExpandIcon, "aria-label": "Expand right pane", size: "small", onClick: () => setRightPaneVisible(true), sx: {
|
|
1064
|
+
} }) }))] }) }) })) : (_jsx(Box, { position: "fixed", right: 0, top: "50%", transform: "translateY(-50%)", zIndex: 100, children: _jsx(IconButton, { icon: SidebarExpandIcon, "aria-label": "Expand right pane", size: "small", onClick: () => setRightPaneVisible(true), sx: {
|
|
1094
1065
|
borderRadius: '6px 0 0 6px',
|
|
1095
1066
|
bg: 'canvas.default',
|
|
1096
1067
|
border: '1px solid',
|
|
1097
1068
|
borderRight: 'none',
|
|
1098
1069
|
borderColor: 'border.default',
|
|
1099
|
-
} }) }))] }), showSpecOverlay && (_jsxs(Box, { sx: {
|
|
1100
|
-
position: 'fixed',
|
|
1101
|
-
inset: 24,
|
|
1102
|
-
zIndex: 300,
|
|
1103
|
-
bg: 'canvas.default',
|
|
1104
|
-
border: '1px solid',
|
|
1105
|
-
borderColor: 'border.default',
|
|
1106
|
-
borderRadius: 1,
|
|
1107
|
-
boxShadow: 'shadow.large',
|
|
1108
|
-
display: 'flex',
|
|
1109
|
-
flexDirection: 'column',
|
|
1110
|
-
}, children: [_jsxs(Box, { sx: {
|
|
1111
|
-
display: 'flex',
|
|
1112
|
-
alignItems: 'center',
|
|
1113
|
-
justifyContent: 'space-between',
|
|
1114
|
-
px: 3,
|
|
1115
|
-
py: 2,
|
|
1116
|
-
borderBottom: '1px solid',
|
|
1117
|
-
borderColor: 'border.default',
|
|
1118
|
-
}, children: [_jsx(Text, { sx: { fontWeight: 'bold' }, children: "Spec Payload Preview (YAML)" }), _jsx(IconButton, { icon: XIcon, "aria-label": "Close spec preview", size: "small", variant: "invisible", onClick: () => setShowSpecOverlay(false) })] }), _jsx(Box, { sx: { p: 3, overflow: 'auto', flex: 1 }, children: _jsx(Box, { as: "pre", sx: {
|
|
1119
|
-
m: 0,
|
|
1120
|
-
whiteSpace: 'pre',
|
|
1121
|
-
fontFamily: 'monospace',
|
|
1122
|
-
fontSize: 0,
|
|
1123
|
-
lineHeight: '20px',
|
|
1124
|
-
}, children: specYamlPreview }) })] }))] }) }));
|
|
1070
|
+
} }) }))] }), showSpecOverlay && (_jsxs(Box, { position: "fixed", inset: 24, zIndex: 300, bg: "canvas.default", border: "1px solid", borderColor: "border.default", borderRadius: 1, boxShadow: "shadow.large", display: "flex", flexDirection: "column", children: [_jsxs(Box, { display: "flex", alignItems: "center", justifyContent: "space-between", px: 3, py: 2, borderBottom: "1px solid", borderColor: "border.default", children: [_jsx(Text, { sx: { fontWeight: 'bold' }, children: "Spec Payload Preview (YAML)" }), _jsx(IconButton, { icon: XIcon, "aria-label": "Close spec preview", size: "small", variant: "invisible", onClick: () => setShowSpecOverlay(false) })] }), _jsx(Box, { p: 3, overflow: "auto", flex: 1, children: _jsx(Box, { as: "pre", m: 0, whiteSpace: "pre", fontFamily: "monospace", fontSize: 0, lineHeight: "20px", children: specYamlPreview }) })] }))] }) }));
|
|
1125
1071
|
};
|
|
1126
1072
|
export default AgentspecsExample;
|