@datalayer/agent-runtimes 1.0.9 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -1
- package/lib/{AgentLexical.d.ts → AgentDocument.d.ts} +5 -5
- package/lib/{AgentLexical.js → AgentDocument.js} +156 -26
- package/lib/AgentNode.js +32 -31
- package/lib/AgentNotebook.js +172 -17
- package/lib/AppExamples2.css +47 -0
- package/lib/AppExamples2.d.ts +3 -0
- package/lib/AppExamples2.js +21 -0
- package/lib/{agent-lexical-main.js → agent-document-main.js} +2 -2
- package/lib/agents/AgentRuntimeChat.d.ts +73 -0
- package/lib/agents/AgentRuntimeChat.js +198 -0
- package/lib/api/index.d.ts +12 -0
- package/lib/api/index.js +46 -0
- package/lib/api/runtimes/checkpoints.d.ts +122 -0
- package/lib/api/runtimes/checkpoints.js +118 -0
- package/lib/api/runtimes/environments.d.ts +9 -0
- package/lib/api/runtimes/environments.js +29 -0
- package/lib/api/runtimes/healthz.d.ts +15 -0
- package/lib/api/runtimes/healthz.js +44 -0
- package/lib/api/runtimes/index.d.ts +12 -0
- package/lib/api/runtimes/index.js +16 -0
- package/lib/api/runtimes/runtimes.d.ts +138 -0
- package/lib/api/runtimes/runtimes.js +230 -0
- package/lib/api/runtimes/snapshots.d.ts +38 -0
- package/lib/api/runtimes/snapshots.js +82 -0
- package/lib/api/scheduler/index.d.ts +6 -0
- package/lib/api/scheduler/index.js +10 -0
- package/lib/api/scheduler/schedules.d.ts +85 -0
- package/lib/api/scheduler/schedules.js +78 -0
- package/lib/api/spacer/documents.d.ts +12 -0
- package/lib/api/spacer/documents.js +43 -0
- package/lib/api/spacer/healthz.d.ts +15 -0
- package/lib/api/spacer/healthz.js +44 -0
- package/lib/api/spacer/index.d.ts +15 -0
- package/lib/api/spacer/index.js +19 -0
- package/lib/api/spacer/items.d.ts +25 -0
- package/lib/api/spacer/items.js +55 -0
- package/lib/api/spacer/lexicals.d.ts +34 -0
- package/lib/api/spacer/lexicals.js +89 -0
- package/lib/api/spacer/notebooks.d.ts +34 -0
- package/lib/api/spacer/notebooks.js +89 -0
- package/lib/api/spacer/spaces.d.ts +84 -0
- package/lib/api/spacer/spaces.js +170 -0
- package/lib/api/spacer/users.d.ts +9 -0
- package/lib/api/spacer/users.js +29 -0
- package/lib/chat/Chat.d.ts +1 -1
- package/lib/chat/Chat.js +54 -54
- package/lib/chat/ChatFloating.d.ts +2 -2
- package/lib/chat/ChatFloating.js +136 -25
- package/lib/chat/ChatSidebar.js +20 -22
- package/lib/chat/base/ChatBase.js +468 -40
- package/lib/chat/display/EmptyState.js +21 -21
- package/lib/chat/document/EphemeralDocument.d.ts +23 -0
- package/lib/chat/document/EphemeralDocument.js +270 -0
- package/lib/chat/header/ChatHeaderBase.d.ts +12 -2
- package/lib/chat/header/ChatHeaderBase.js +78 -23
- package/lib/chat/index.d.ts +1 -0
- package/lib/chat/index.js +2 -0
- package/lib/chat/notebook/EphemeralNotebook.d.ts +24 -0
- package/lib/chat/notebook/EphemeralNotebook.js +252 -0
- package/lib/chat/prompt/InputFooter.js +4 -1
- package/lib/client/AgentRuntimesClient.d.ts +127 -0
- package/lib/client/AgentRuntimesClient.js +36 -0
- package/lib/client/AgentsMixin.d.ts +4 -4
- package/lib/client/AgentsMixin.js +35 -35
- package/lib/client/SdkAgentRuntimesClient.d.ts +1 -1
- package/lib/client/SdkAgentRuntimesClient.js +1 -1
- package/lib/client/mixins/RuntimesMixin.d.ts +93 -0
- package/lib/client/mixins/RuntimesMixin.js +229 -0
- package/lib/client/mixins/SpacerMixin.d.ts +210 -0
- package/lib/client/mixins/SpacerMixin.js +615 -0
- package/lib/client/utils/spacerUtils.d.ts +18 -0
- package/lib/client/utils/spacerUtils.js +32 -0
- package/lib/collaboration/DatalayerCollaboration.d.ts +13 -0
- package/lib/collaboration/DatalayerCollaboration.js +28 -0
- package/lib/collaboration/DatalayerCollaborationProvider.d.ts +58 -0
- package/lib/collaboration/DatalayerCollaborationProvider.js +148 -0
- package/lib/collaboration/index.d.ts +2 -0
- package/lib/collaboration/index.js +6 -0
- package/lib/components/AgentSummary.d.ts +19 -0
- package/lib/components/AgentSummary.js +89 -0
- package/lib/components/ToolApprovalCard.js +13 -3
- package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +13 -0
- package/lib/components/a2ui/A2uiSurfaceComposed.js +110 -0
- package/lib/components/a2ui/index.d.ts +2 -0
- package/lib/components/a2ui/index.js +6 -0
- package/lib/components/a2ui/styles.d.ts +14 -0
- package/lib/components/a2ui/styles.js +142 -0
- package/lib/components/context/SpaceSelect.d.ts +2 -0
- package/lib/components/context/SpaceSelect.js +42 -0
- package/lib/components/flashes/FlashDisclaimer.d.ts +2 -0
- package/lib/components/flashes/FlashDisclaimer.js +17 -0
- package/lib/components/icons/ArtifactIcon.d.ts +10 -0
- package/lib/components/icons/ArtifactIcon.js +58 -0
- package/lib/components/icons/index.d.ts +1 -0
- package/lib/components/icons/index.js +5 -0
- package/lib/components/index.d.ts +5 -0
- package/lib/components/index.js +5 -0
- package/lib/components/nbgrader/NbGradesDetails.d.ts +5 -0
- package/lib/components/nbgrader/NbGradesDetails.js +19 -0
- package/lib/components/nbgrader/index.d.ts +1 -0
- package/lib/components/nbgrader/index.js +5 -0
- package/lib/components/progress/CreditsIndicator.d.ts +33 -0
- package/lib/components/progress/CreditsIndicator.js +23 -0
- package/lib/components/progress/index.d.ts +2 -0
- package/lib/components/progress/index.js +6 -0
- package/lib/components/runtimes/RuntimeCellVariables.d.ts +39 -0
- package/lib/components/runtimes/RuntimeCellVariables.js +172 -0
- package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +37 -0
- package/lib/components/runtimes/RuntimeCellVariablesDialog.js +101 -0
- package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +57 -0
- package/lib/components/runtimes/RuntimeLauncherDialog.js +275 -0
- package/lib/components/runtimes/RuntimePickerBase.d.ts +69 -0
- package/lib/components/runtimes/RuntimePickerBase.js +122 -0
- package/lib/components/runtimes/RuntimePickerCell.d.ts +34 -0
- package/lib/components/runtimes/RuntimePickerCell.js +104 -0
- package/lib/components/runtimes/RuntimePickerNotebook.d.ts +42 -0
- package/lib/components/runtimes/RuntimePickerNotebook.js +232 -0
- package/lib/components/runtimes/RuntimeReservationControl.d.ts +47 -0
- package/lib/components/runtimes/RuntimeReservationControl.js +42 -0
- package/lib/components/runtimes/RuntimeSimplePicker.d.ts +38 -0
- package/lib/components/runtimes/RuntimeSimplePicker.js +155 -0
- package/lib/components/runtimes/RuntimeTransfer.d.ts +16 -0
- package/lib/components/runtimes/RuntimeTransfer.js +5 -0
- package/lib/components/runtimes/RuntimeUtils.d.ts +17 -0
- package/lib/components/runtimes/RuntimeUtils.js +178 -0
- package/lib/components/runtimes/RuntimeVariables.d.ts +38 -0
- package/lib/components/runtimes/RuntimeVariables.js +75 -0
- package/lib/components/runtimes/index.d.ts +11 -0
- package/lib/components/runtimes/index.js +15 -0
- package/lib/components/scheduler/ScheduleMenu.d.ts +54 -0
- package/lib/components/scheduler/ScheduleMenu.js +154 -0
- package/lib/components/scheduler/index.d.ts +1 -0
- package/lib/components/scheduler/index.js +5 -0
- package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +33 -0
- package/lib/components/snapshots/SandboxSnapshotMenu.js +169 -0
- package/lib/components/snapshots/index.d.ts +1 -0
- package/lib/components/snapshots/index.js +5 -0
- package/lib/components/snippets/SnippetDialog.d.ts +42 -0
- package/lib/components/snippets/SnippetDialog.js +42 -0
- package/lib/components/students/StudentItemStatus.d.ts +7 -0
- package/lib/components/students/StudentItemStatus.js +68 -0
- package/lib/components/students/index.d.ts +1 -0
- package/lib/components/students/index.js +5 -0
- package/lib/components/tokens/SpaceVariantToken.d.ts +5 -0
- package/lib/components/tokens/SpaceVariantToken.js +23 -0
- package/lib/components/tokens/index.d.ts +1 -0
- package/lib/components/tokens/index.js +5 -0
- package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +4 -0
- package/lib/components/toolbars/AssignmentEditorToolbar.js +18 -0
- package/lib/components/toolbars/DocumentEditorToolbar.d.ts +2 -0
- package/lib/components/toolbars/DocumentEditorToolbar.js +12 -0
- package/lib/components/toolbars/NotebookEditorToolbar.d.ts +29 -0
- package/lib/components/toolbars/NotebookEditorToolbar.js +30 -0
- package/lib/config/AgentConfiguration.d.ts +2 -2
- package/lib/config/index.d.ts +1 -1
- package/lib/context/ContextInspector.d.ts +1 -14
- package/lib/context/ContextInspector.js +3 -73
- package/lib/context/CostUsageChart.d.ts +4 -3
- package/lib/context/CostUsageChart.js +236 -35
- package/lib/context/MessageHistory.d.ts +30 -0
- package/lib/context/MessageHistory.js +129 -0
- package/lib/context/TokenUsageChart.d.ts +4 -3
- package/lib/context/TokenUsageChart.js +180 -30
- package/lib/context/TurnGraphChart.d.ts +1 -1
- package/lib/context/TurnGraphChart.js +6 -6
- package/lib/examples/A2UiAgentExample.d.ts +22 -0
- package/lib/examples/A2UiAgentExample.js +442 -0
- package/lib/examples/A2UiComponentsGalleryExample.d.ts +3 -0
- package/lib/examples/A2UiComponentsGalleryExample.js +863 -0
- package/lib/examples/A2UiContactCardExample.js +9 -5
- package/lib/examples/A2UiRestaurantExample.js +23 -8
- package/lib/examples/A2UiViewerExample.js +75 -3
- package/lib/examples/AgUiAgenticExample.d.ts +1 -12
- package/lib/examples/AgUiAgenticExample.js +52 -8
- package/lib/examples/AgUiBackendToolRenderingExample.d.ts +1 -16
- package/lib/examples/AgUiBackendToolRenderingExample.js +32 -17
- package/lib/examples/AgUiHaikuGenUiExample.d.ts +1 -17
- package/lib/examples/AgUiHaikuGenUiExample.js +49 -33
- package/lib/examples/AgUiHumanInTheLoopExample.d.ts +1 -12
- package/lib/examples/AgUiHumanInTheLoopExample.js +21 -6
- package/lib/examples/AgUiSharedStateExample.d.ts +1 -14
- package/lib/examples/AgUiSharedStateExample.js +21 -6
- package/lib/examples/AgUiToolsBasedGenUiExample.d.ts +1 -14
- package/lib/examples/AgUiToolsBasedGenUiExample.js +21 -6
- package/lib/examples/AgentCheckpointsExample.d.ts +1 -1
- package/lib/examples/AgentCheckpointsExample.js +21 -22
- package/lib/examples/AgentCodemodeExample.js +3 -3
- package/lib/examples/AgentEvalsExample.js +8 -8
- package/lib/examples/AgentGuardrailsExample.js +22 -17
- package/lib/examples/AgentHooksExample.js +16 -57
- package/lib/examples/AgentInferenceProviderExample.js +8 -8
- package/lib/examples/AgentLoopExample.d.ts +10 -0
- package/lib/examples/AgentLoopExample.js +304 -0
- package/lib/examples/AgentMCPExample.js +9 -9
- package/lib/examples/AgentMemoryExample.js +6 -6
- package/lib/examples/AgentMonitoringExample.js +116 -46
- package/lib/examples/AgentNotificationsExample.js +6 -6
- package/lib/examples/AgentOtelExample.d.ts +3 -3
- package/lib/examples/AgentOtelExample.js +20 -15
- package/lib/examples/AgentOutputsExample.js +8 -8
- package/lib/examples/AgentParametersExample.js +24 -36
- package/lib/examples/AgentSandboxExample.js +7 -7
- package/lib/examples/AgentSkillsExample.js +9 -9
- package/lib/examples/AgentSubagentsExample.js +6 -6
- package/lib/examples/AgentToolApprovalsExample.js +37 -11
- package/lib/examples/AgentTriggersExample.js +12 -12
- package/lib/examples/AgentspecsExample.js +63 -41
- package/lib/examples/ChatCustomExample.js +23 -77
- package/lib/examples/ChatExample.js +15 -46
- package/lib/examples/LexicalAgentExample.js +43 -91
- package/lib/examples/LexicalAgentSidebarExample.js +45 -73
- package/lib/examples/NotebookAgentExample.js +52 -81
- package/lib/examples/NotebookAgentSidebarExample.js +43 -71
- package/lib/examples/NotebookCollaborationExample.js +11 -9
- package/lib/examples/NotebookExample.js +5 -2
- package/lib/examples/components/AuthRequiredView.js +1 -1
- package/lib/examples/components/ExampleErrorBoundary.d.ts +46 -0
- package/lib/examples/components/ExampleErrorBoundary.js +67 -0
- package/lib/examples/components/haiku/haiku-card.css +11 -0
- package/lib/examples/components/weather/weather-card.css +11 -0
- package/lib/examples/example-selector.js +3 -1
- package/lib/examples/hooks/useExampleAgentRuntime.d.ts +35 -0
- package/lib/examples/hooks/useExampleAgentRuntime.js +82 -0
- package/lib/examples/hooks/useSpecRenderToolResult.d.ts +30 -0
- package/lib/examples/hooks/useSpecRenderToolResult.js +61 -0
- package/lib/examples/index.d.ts +3 -1
- package/lib/examples/index.js +3 -1
- package/lib/examples/main.js +340 -93
- package/lib/examples/utils/a2ui.d.ts +2 -0
- package/lib/examples/utils/a2ui.js +97 -2
- package/lib/examples/utils/agentSummaryStore.d.ts +21 -0
- package/lib/examples/utils/agentSummaryStore.js +23 -0
- package/lib/examples/utils/notebooks/Empty.ipynb.json +30 -30
- package/lib/examples/utils/runtimeTargetStore.d.ts +9 -0
- package/lib/examples/utils/runtimeTargetStore.js +27 -0
- package/lib/examples/utils/teardownAgents.d.ts +13 -0
- package/lib/examples/utils/teardownAgents.js +78 -0
- package/lib/examples/utils/useExampleAgentRuntimesUrl.d.ts +2 -0
- package/lib/examples/utils/useExampleAgentRuntimesUrl.js +26 -7
- package/lib/examples2/CellExample.d.ts +6 -0
- package/lib/examples2/CellExample.js +20 -0
- package/lib/examples2/DatalayerNotebookExample.d.ts +16 -0
- package/lib/examples2/DatalayerNotebookExample.js +109 -0
- package/lib/examples2/NativeNavigationExample.d.ts +8 -0
- package/lib/examples2/NativeNavigationExample.js +97 -0
- package/lib/examples2/NotebookExample.d.ts +6 -0
- package/lib/examples2/NotebookExample.js +19 -0
- package/lib/examples2/NotebookMutationsKernel.d.ts +2 -0
- package/lib/examples2/NotebookMutationsKernel.js +105 -0
- package/lib/examples2/NotebookMutationsServiceManager.d.ts +2 -0
- package/lib/examples2/NotebookMutationsServiceManager.js +109 -0
- package/lib/examples2/ReactRouterExample.d.ts +6 -0
- package/lib/examples2/ReactRouterExample.js +175 -0
- package/lib/examples2/example-selector.d.ts +22 -0
- package/lib/examples2/example-selector.js +45 -0
- package/lib/examples2/index.d.ts +2 -0
- package/lib/examples2/index.js +6 -0
- package/lib/examples2/lexical-theme.css +436 -0
- package/lib/examples2/main.d.ts +2 -0
- package/lib/examples2/main.js +330 -0
- package/lib/examples2/notebooks/IPyWidgetsExample.ipynb.json +101 -0
- package/lib/examples2/notebooks/IPyWidgetsExampleWithState.ipynb.json +112 -0
- package/lib/examples2/notebooks/Lite.ipynb.json +128 -0
- package/lib/examples2/notebooks/Matplotlib.ipynb.json +137 -0
- package/lib/examples2/notebooks/NotebookExample1.ipynb.json +126 -0
- package/lib/examples2/notebooks/NotebookExample2.ipynb.json +48 -0
- package/lib/examples2/notebooks/NotebookOutputs.ipynb.json +49 -0
- package/lib/examples2/notebooks/NotebookToCExample.ipynb.json +102 -0
- package/lib/examples2/notebooks/OutputIPyWidgetsExample.d.ts +145 -0
- package/lib/examples2/notebooks/OutputIPyWidgetsExample.js +153 -0
- package/lib/examples2/notebooks/PyGWalker.ipynb.json +55 -0
- package/lib/hooks/index.d.ts +9 -1
- package/lib/hooks/index.js +13 -1
- package/lib/hooks/useAIAgentsWebSocket.d.ts +1 -1
- package/lib/hooks/useAIAgentsWebSocket.js +39 -3
- package/lib/hooks/useAgentRuntimes.d.ts +15 -3
- package/lib/hooks/useAgentRuntimes.js +188 -29
- package/lib/hooks/useAgentsCatalog.d.ts +3 -3
- package/lib/hooks/useAgentsCatalog.js +4 -4
- package/lib/hooks/useAgentsService.js +5 -5
- package/lib/hooks/useCellOutputshot.d.ts +4 -0
- package/lib/hooks/useCellOutputshot.js +25 -0
- package/lib/hooks/useCheckpoints.d.ts +8 -8
- package/lib/hooks/useCheckpoints.js +38 -28
- package/lib/hooks/useConfig.d.ts +1 -1
- package/lib/hooks/useMonitoring.d.ts +7 -5
- package/lib/hooks/useMonitoring.js +16 -10
- package/lib/hooks/useNotifications.d.ts +11 -11
- package/lib/hooks/useNotifications.js +1 -1
- package/lib/hooks/useProgressStore.d.ts +25 -0
- package/lib/hooks/useProgressStore.js +58 -0
- package/lib/hooks/useProgressTask.d.ts +9 -0
- package/lib/hooks/useProgressTask.js +41 -0
- package/lib/hooks/useProjects.d.ts +628 -0
- package/lib/hooks/useProjects.js +190 -0
- package/lib/hooks/useRuntimes.d.ts +5 -0
- package/lib/hooks/useRuntimes.js +34 -0
- package/lib/hooks/useToolApprovals.d.ts +14 -6
- package/lib/hooks/useToolApprovals.js +20 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.js +1 -0
- package/lib/jupyter/exec/Python.d.ts +5 -0
- package/lib/jupyter/exec/Python.js +100 -0
- package/lib/jupyter/exec/Snippets.d.ts +105 -0
- package/lib/jupyter/exec/Snippets.js +101 -0
- package/lib/jupyter/exec/index.d.ts +2 -0
- package/lib/jupyter/exec/index.js +6 -0
- package/lib/jupyter/index.d.ts +2 -0
- package/lib/jupyter/index.js +6 -0
- package/lib/jupyter/kernelsHandler.d.ts +8 -0
- package/lib/jupyter/kernelsHandler.js +39 -0
- package/lib/mocks/models/CourseMock.d.ts +6 -0
- package/lib/mocks/models/CourseMock.js +29 -0
- package/lib/mocks/models/SpaceMock.d.ts +6 -0
- package/lib/mocks/models/SpaceMock.js +25 -0
- package/lib/models/Assignment.d.ts +7 -0
- package/lib/models/Assignment.js +5 -0
- package/lib/models/Cell.d.ts +8 -0
- package/lib/models/Cell.js +5 -0
- package/lib/models/CodeBlock.d.ts +10 -0
- package/lib/models/CodeBlock.js +5 -0
- package/lib/models/CodeSandboxSnapshot.d.ts +92 -0
- package/lib/models/CodeSandboxSnapshot.js +13 -0
- package/lib/models/CodeSandboxSnapshotDTO.d.ts +173 -0
- package/lib/models/CodeSandboxSnapshotDTO.js +139 -0
- package/lib/models/CodefeedBlocks.d.ts +7 -0
- package/lib/models/CodefeedBlocks.js +5 -0
- package/lib/models/Content.d.ts +5 -0
- package/lib/models/Content.js +5 -0
- package/lib/models/Course.d.ts +17 -0
- package/lib/models/Course.js +5 -0
- package/lib/models/Dataset.d.ts +16 -0
- package/lib/models/Dataset.js +5 -0
- package/lib/models/Document.d.ts +8 -0
- package/lib/models/Document.js +5 -0
- package/lib/models/Environment.d.ts +86 -0
- package/lib/models/Environment.js +5 -0
- package/lib/models/EnvironmentDTO.d.ts +125 -0
- package/lib/models/EnvironmentDTO.js +88 -0
- package/lib/models/Exercise.d.ts +16 -0
- package/lib/models/Exercise.js +5 -0
- package/lib/models/Item.d.ts +20 -0
- package/lib/models/Item.js +5 -0
- package/lib/models/ItemDTO.d.ts +74 -0
- package/lib/models/ItemDTO.js +186 -0
- package/lib/models/ItemType.d.ts +2 -0
- package/lib/models/ItemType.js +5 -0
- package/lib/models/Lesson.d.ts +5 -0
- package/lib/models/Lesson.js +5 -0
- package/lib/models/LexicalDTO.d.ts +155 -0
- package/lib/models/LexicalDTO.js +157 -0
- package/lib/models/Library.d.ts +10 -0
- package/lib/models/Library.js +5 -0
- package/lib/models/Notebook.d.ts +11 -0
- package/lib/models/Notebook.js +5 -0
- package/lib/models/NotebookDTO.d.ts +96 -0
- package/lib/models/NotebookDTO.js +153 -0
- package/lib/models/Page.d.ts +41 -0
- package/lib/models/Page.js +25 -0
- package/lib/models/PageTag.d.ts +19 -0
- package/lib/models/PageTag.js +94 -0
- package/lib/models/ProjectDTO.d.ts +89 -0
- package/lib/models/ProjectDTO.js +131 -0
- package/lib/models/Runtime.d.ts +160 -0
- package/lib/models/Runtime.js +18 -0
- package/lib/models/RuntimeDTO.d.ts +172 -0
- package/lib/models/RuntimeDTO.js +204 -0
- package/lib/models/Space.d.ts +35 -0
- package/lib/models/Space.js +66 -0
- package/lib/models/SpaceDTO.d.ts +334 -0
- package/lib/models/SpaceDTO.js +244 -0
- package/lib/models/SpaceItem.d.ts +10 -0
- package/lib/models/SpaceItem.js +5 -0
- package/lib/models/SpaceMember.d.ts +6 -0
- package/lib/models/SpaceMember.js +5 -0
- package/lib/models/StudentItem.d.ts +21 -0
- package/lib/models/StudentItem.js +5 -0
- package/lib/models/index.d.ts +32 -0
- package/lib/models/index.js +39 -0
- package/lib/protocols/AGUIAdapter.js +1 -1
- package/lib/runtimes/actions.d.ts +102 -0
- package/lib/runtimes/actions.js +249 -0
- package/lib/runtimes/apis.d.ts +273 -0
- package/lib/runtimes/apis.js +5 -0
- package/lib/runtimes/index.d.ts +5 -0
- package/lib/runtimes/index.js +9 -0
- package/lib/runtimes/settings.d.ts +15 -0
- package/lib/runtimes/settings.js +31 -0
- package/lib/runtimes/snapshots.d.ts +25 -0
- package/lib/runtimes/snapshots.js +150 -0
- package/lib/runtimes/utils.d.ts +7 -0
- package/lib/runtimes/utils.js +14 -0
- package/lib/services/DatalayerServiceManager.d.ts +23 -0
- package/lib/services/DatalayerServiceManager.js +90 -0
- package/lib/services/reconnectToRuntime.d.ts +32 -0
- package/lib/services/reconnectToRuntime.js +59 -0
- package/lib/services/sandboxServiceManagers.d.ts +31 -0
- package/lib/services/sandboxServiceManagers.js +57 -0
- package/lib/specs/agents/agents.d.ts +95 -50
- package/lib/specs/agents/agents.js +4037 -1669
- package/lib/specs/agents/index.d.ts +5 -5
- package/lib/specs/agents/index.js +9 -9
- package/lib/specs/index.d.ts +1 -0
- package/lib/specs/index.js +1 -0
- package/lib/specs/loops.d.ts +34 -0
- package/lib/specs/loops.js +188 -0
- package/lib/specs/mcpServers.d.ts +1 -0
- package/lib/specs/mcpServers.js +17 -0
- package/lib/specs/models.d.ts +4 -0
- package/lib/specs/models.js +30 -0
- package/lib/specs/skills.d.ts +1 -0
- package/lib/specs/skills.js +18 -0
- package/lib/specs/tools.d.ts +15 -0
- package/lib/specs/tools.js +285 -0
- package/lib/state/index.d.ts +4 -0
- package/lib/state/index.js +10 -0
- package/lib/state/substates/CellState.d.ts +12 -0
- package/lib/state/substates/CellState.js +22 -0
- package/lib/state/substates/DocumentState.d.ts +10 -0
- package/lib/state/substates/DocumentState.js +14 -0
- package/lib/state/substates/GradeState.d.ts +10 -0
- package/lib/state/substates/GradeState.js +14 -0
- package/lib/state/substates/JupyterLabState.d.ts +16 -0
- package/lib/state/substates/JupyterLabState.js +17 -0
- package/lib/state/substates/NbformatState.d.ts +13 -0
- package/lib/state/substates/NbformatState.js +16 -0
- package/lib/state/substates/RuntimesState.d.ts +87 -0
- package/lib/state/substates/RuntimesState.js +192 -0
- package/lib/state/substates/SpaceState.d.ts +11 -0
- package/lib/state/substates/SpaceState.js +16 -0
- package/lib/state/substates/index.d.ts +8 -0
- package/lib/state/substates/index.js +14 -0
- package/lib/stores/agentRuntimeStore.d.ts +25 -2
- package/lib/stores/agentRuntimeStore.js +114 -19
- package/lib/stories/Button.stories.d.ts +1 -1
- package/lib/stories/Header.stories.d.ts +3 -3
- package/lib/test-setup.js +10 -0
- package/lib/types/agents-lifecycle.d.ts +5 -5
- package/lib/types/agents.d.ts +6 -6
- package/lib/types/agentspecs.d.ts +8 -4
- package/lib/types/chat.d.ts +135 -3
- package/lib/types/config.d.ts +19 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.js +1 -0
- package/lib/types/loops.d.ts +64 -0
- package/lib/types/loops.js +5 -0
- package/lib/types/teams.d.ts +2 -2
- package/lib/types/tools.d.ts +16 -0
- package/lib/utils/Cells.d.ts +2 -0
- package/lib/utils/Cells.js +28 -0
- package/package.json +24 -18
- package/scripts/codegen/generate_agents.py +96 -61
- package/scripts/codegen/generate_loops.py +443 -0
- package/scripts/codegen/generate_teams.py +4 -4
- package/lib/examples/A2UiComponentGalleryExample.d.ts +0 -3
- package/lib/examples/A2UiComponentGalleryExample.js +0 -361
- package/scripts/codegen/__pycache__/generate_agents.cpython-313.pyc +0 -0
- package/scripts/codegen/__pycache__/generate_benchmarks.cpython-313.pyc +0 -0
- package/scripts/codegen/__pycache__/generate_evals.cpython-313.pyc +0 -0
- package/scripts/codegen/__pycache__/generate_events.cpython-313.pyc +0 -0
- /package/lib/{agent-lexical-main.d.ts → agent-document-main.d.ts} +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
// Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
// Distributed under the terms of the Modified BSD License.
|
|
4
|
+
/**
|
|
5
|
+
* MessageHistory component - Renders the agent conversation message history,
|
|
6
|
+
* splitting messages into "in context" and "out of context" groups. Shared by
|
|
7
|
+
* the ContextInspector (Configuration tab) and the Monitoring tab so both
|
|
8
|
+
* surfaces display identical message details.
|
|
9
|
+
*/
|
|
10
|
+
import { Text, Label } from '@primer/react';
|
|
11
|
+
import { Box } from '@datalayer/primer-addons';
|
|
12
|
+
import { AiModelIcon, TerminalIcon, CommentDiscussionIcon, CheckCircleIcon, XCircleIcon, InfoIcon, ChevronDownIcon, ChevronRightIcon, } from '@primer/octicons-react';
|
|
13
|
+
import { useMemo, useState } from 'react';
|
|
14
|
+
import { TextPart } from '../chat/parts/TextPart';
|
|
15
|
+
/**
|
|
16
|
+
* Format token count for display.
|
|
17
|
+
*/
|
|
18
|
+
function formatTokens(tokens) {
|
|
19
|
+
if (tokens >= 1000000) {
|
|
20
|
+
return `${(tokens / 1000000).toFixed(1)}M`;
|
|
21
|
+
}
|
|
22
|
+
if (tokens >= 1000) {
|
|
23
|
+
return `${(tokens / 1000).toFixed(1)}K`;
|
|
24
|
+
}
|
|
25
|
+
return tokens.toString();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Single message detail view.
|
|
29
|
+
*/
|
|
30
|
+
export function MessageDetailView({ message }) {
|
|
31
|
+
const roleColors = {
|
|
32
|
+
user: 'accent.fg',
|
|
33
|
+
assistant: 'success.fg',
|
|
34
|
+
system: 'attention.fg',
|
|
35
|
+
tool: 'done.fg',
|
|
36
|
+
};
|
|
37
|
+
const roleIcons = {
|
|
38
|
+
user: CommentDiscussionIcon,
|
|
39
|
+
assistant: AiModelIcon,
|
|
40
|
+
system: InfoIcon,
|
|
41
|
+
tool: TerminalIcon,
|
|
42
|
+
};
|
|
43
|
+
const RoleIcon = roleIcons[message.role] || CommentDiscussionIcon;
|
|
44
|
+
const text = String(message.content || '');
|
|
45
|
+
const chatRole = message.role === 'user' ? 'user' : 'assistant';
|
|
46
|
+
const uiMessage = {
|
|
47
|
+
id: `history-${message.role}-${message.timestamp || 'now'}-${message.toolCallId || 'no-tool'}`,
|
|
48
|
+
role: chatRole,
|
|
49
|
+
parts: [{ type: 'text', text }],
|
|
50
|
+
};
|
|
51
|
+
return (_jsxs(Box, { sx: {
|
|
52
|
+
p: 2,
|
|
53
|
+
mb: 1,
|
|
54
|
+
bg: message.inContext ? 'canvas.default' : 'canvas.inset',
|
|
55
|
+
border: '1px solid',
|
|
56
|
+
borderColor: message.inContext ? 'border.default' : 'border.muted',
|
|
57
|
+
borderRadius: 2,
|
|
58
|
+
opacity: message.inContext ? 1 : 0.7,
|
|
59
|
+
}, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2, mb: 1 }, children: [_jsx(RoleIcon, { size: 14 }), _jsx(Text, { sx: {
|
|
60
|
+
fontWeight: 'semibold',
|
|
61
|
+
fontSize: 0,
|
|
62
|
+
color: roleColors[message.role] || 'fg.default',
|
|
63
|
+
textTransform: 'capitalize',
|
|
64
|
+
}, children: message.role }), message.toolName && (_jsx(Label, { size: "small", variant: "secondary", children: message.toolName })), message.isToolCall && (_jsx(Label, { size: "small", variant: "accent", children: "call" })), message.isToolResult && (_jsx(Label, { size: "small", variant: "success", children: "result" })), message.inContext ? (_jsx(CheckCircleIcon, { size: 12, fill: "var(--fgColor-success)" })) : (_jsx(XCircleIcon, { size: 12, fill: "var(--fgColor-muted)" })), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', ml: 'auto' }, children: [formatTokens(message.estimatedTokens), " tokens"] })] }), _jsx(Box, { sx: {
|
|
65
|
+
borderWidth: '2px',
|
|
66
|
+
borderStyle: 'solid',
|
|
67
|
+
borderColor: 'border.default',
|
|
68
|
+
borderRadius: 2,
|
|
69
|
+
overflow: 'hidden',
|
|
70
|
+
}, children: _jsx(TextPart, { text: text, message: uiMessage, isLastPart: false, onRegenerate: () => {
|
|
71
|
+
return;
|
|
72
|
+
} }) })] }));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Renders the conversation message history split into out-of-context and
|
|
76
|
+
* in-context groups.
|
|
77
|
+
*/
|
|
78
|
+
export function MessageHistory({ messages }) {
|
|
79
|
+
const [expanded, setExpanded] = useState(false);
|
|
80
|
+
const { inContextMessages, outOfContextMessages } = useMemo(() => {
|
|
81
|
+
if (!messages) {
|
|
82
|
+
return { inContextMessages: [], outOfContextMessages: [] };
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
inContextMessages: messages.filter(m => m.inContext),
|
|
86
|
+
outOfContextMessages: messages.filter(m => !m.inContext),
|
|
87
|
+
};
|
|
88
|
+
}, [messages]);
|
|
89
|
+
const messageHistoryTokens = useMemo(() => {
|
|
90
|
+
if (!messages) {
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
return messages.reduce((sum, message) => sum + (message.estimatedTokens || 0), 0);
|
|
94
|
+
}, [messages]);
|
|
95
|
+
return (_jsxs(Box, { sx: { mb: 2 }, children: [_jsxs(Box, { as: "button", onClick: () => setExpanded(!expanded), sx: {
|
|
96
|
+
display: 'flex',
|
|
97
|
+
alignItems: 'center',
|
|
98
|
+
gap: 2,
|
|
99
|
+
width: '100%',
|
|
100
|
+
p: 2,
|
|
101
|
+
bg: 'canvas.subtle',
|
|
102
|
+
border: '1px solid',
|
|
103
|
+
borderColor: 'border.default',
|
|
104
|
+
borderRadius: 2,
|
|
105
|
+
cursor: 'pointer',
|
|
106
|
+
'&:hover': {
|
|
107
|
+
bg: 'canvas.inset',
|
|
108
|
+
},
|
|
109
|
+
}, children: [expanded ? (_jsx(ChevronDownIcon, { size: 16 })) : (_jsx(ChevronRightIcon, { size: 16 })), _jsx(CommentDiscussionIcon, { size: 16 }), _jsx(Text, { sx: { fontWeight: 'semibold', flex: 1, textAlign: 'left' }, children: "Message History" }), _jsx(Label, { variant: "secondary", size: "small", children: messages?.length || 0 }), messageHistoryTokens > 0 && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: [formatTokens(messageHistoryTokens), " tokens"] }))] }), expanded && (_jsx(Box, { sx: {
|
|
110
|
+
border: '1px solid',
|
|
111
|
+
borderColor: 'border.default',
|
|
112
|
+
borderTop: 'none',
|
|
113
|
+
borderRadius: '0 0 6px 6px',
|
|
114
|
+
p: 2,
|
|
115
|
+
}, children: !messages || messages.length === 0 ? (_jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: "No messages yet" })) : (_jsxs(_Fragment, { children: [outOfContextMessages.length > 0 && (_jsxs(Box, { sx: { mb: 3 }, children: [_jsxs(Text, { sx: {
|
|
116
|
+
fontWeight: 'semibold',
|
|
117
|
+
fontSize: 1,
|
|
118
|
+
color: 'fg.muted',
|
|
119
|
+
mb: 2,
|
|
120
|
+
display: 'block',
|
|
121
|
+
}, children: ["Out of Context (", outOfContextMessages.length, ")"] }), outOfContextMessages.map((msg, idx) => (_jsx(MessageDetailView, { message: msg }, `out-${idx}`)))] })), inContextMessages.length > 0 && (_jsxs(Box, { children: [_jsxs(Text, { sx: {
|
|
122
|
+
fontWeight: 'semibold',
|
|
123
|
+
fontSize: 1,
|
|
124
|
+
color: 'success.fg',
|
|
125
|
+
mb: 2,
|
|
126
|
+
display: 'block',
|
|
127
|
+
}, children: ["In Context (", inContextMessages.length, ")"] }), inContextMessages.map((msg, idx) => (_jsx(MessageDetailView, { message: msg }, `in-${idx}`)))] }))] })) }))] }));
|
|
128
|
+
}
|
|
129
|
+
export default MessageHistory;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export interface TokenUsageChartProps {
|
|
2
2
|
serviceName?: string;
|
|
3
3
|
agentId?: string;
|
|
4
|
+
runtimeId?: string;
|
|
4
5
|
apiKey?: string;
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
datalayerUrl?: string;
|
|
7
|
+
wsUrl?: string;
|
|
7
8
|
liveSystemPromptTokens?: number;
|
|
8
9
|
liveToolsDescriptionTokens?: number;
|
|
9
10
|
liveUserMessageTokens?: number;
|
|
@@ -13,5 +14,5 @@ export interface TokenUsageChartProps {
|
|
|
13
14
|
height?: number;
|
|
14
15
|
days?: number;
|
|
15
16
|
}
|
|
16
|
-
export declare function TokenUsageChart({ serviceName, agentId, apiKey,
|
|
17
|
+
export declare function TokenUsageChart({ serviceName, agentId, runtimeId, apiKey, datalayerUrl, wsUrl, liveSystemPromptTokens, liveToolsDescriptionTokens, liveUserMessageTokens, liveAgentMessageTokens, liveToolsUsageTokens, liveTimestampMs, height, }: TokenUsageChartProps): import("react/jsx-runtime").JSX.Element;
|
|
17
18
|
export default TokenUsageChart;
|
|
@@ -7,6 +7,7 @@ import { useEffect, useMemo, useRef, useState } from 'react';
|
|
|
7
7
|
import ReactECharts from 'echarts-for-react';
|
|
8
8
|
import { buildOtelWebSocketUrl } from '@datalayer/core/lib/otel';
|
|
9
9
|
import { toMetricValue } from '../hooks/useMonitoring';
|
|
10
|
+
import { fetchOtelMetricRows } from '../hooks/useMonitoring';
|
|
10
11
|
import { subscribeOtelWs } from './otelWsPool';
|
|
11
12
|
import { agentRuntimeStore, getMonitoringCacheKey, useAgentRuntimeStore, } from '../stores/agentRuntimeStore';
|
|
12
13
|
const SERIES = [
|
|
@@ -181,7 +182,7 @@ function extractServiceName(row) {
|
|
|
181
182
|
return candidate;
|
|
182
183
|
}
|
|
183
184
|
}
|
|
184
|
-
const resourceAttributes = row.resource_attributes;
|
|
185
|
+
const resourceAttributes = parseResourceAttributes(row.resource_attributes);
|
|
185
186
|
if (resourceAttributes && typeof resourceAttributes === 'object') {
|
|
186
187
|
const nested = resourceAttributes['service.name'];
|
|
187
188
|
if (typeof nested === 'string' && nested.length > 0) {
|
|
@@ -190,34 +191,101 @@ function extractServiceName(row) {
|
|
|
190
191
|
}
|
|
191
192
|
return undefined;
|
|
192
193
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
function parseAttributes(attrs) {
|
|
195
|
+
if (attrs && typeof attrs === 'object' && !Array.isArray(attrs)) {
|
|
196
|
+
return attrs;
|
|
197
|
+
}
|
|
196
198
|
if (typeof attrs === 'string') {
|
|
197
199
|
try {
|
|
198
200
|
const parsed = JSON.parse(attrs);
|
|
199
|
-
if (typeof parsed === 'object' && parsed
|
|
200
|
-
|
|
201
|
-
if (typeof aid === 'string')
|
|
202
|
-
return aid;
|
|
201
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
202
|
+
return parsed;
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
catch {
|
|
206
|
-
//
|
|
206
|
+
// Ignore malformed attributes payloads.
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
209
|
+
return {};
|
|
210
|
+
}
|
|
211
|
+
function parseResourceAttributes(attrs) {
|
|
212
|
+
if (attrs && typeof attrs === 'object' && !Array.isArray(attrs)) {
|
|
213
|
+
return attrs;
|
|
213
214
|
}
|
|
215
|
+
if (typeof attrs === 'string') {
|
|
216
|
+
try {
|
|
217
|
+
const parsed = JSON.parse(attrs);
|
|
218
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
219
|
+
return parsed;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Ignore malformed resource attributes payloads.
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return {};
|
|
227
|
+
}
|
|
228
|
+
function extractRuntimeId(row) {
|
|
229
|
+
const directCandidates = [
|
|
230
|
+
row.runtime_id,
|
|
231
|
+
row.runtime,
|
|
232
|
+
row.pod_name,
|
|
233
|
+
row.k8s_pod_name,
|
|
234
|
+
];
|
|
235
|
+
for (const candidate of directCandidates) {
|
|
236
|
+
if (typeof candidate === 'string' && candidate.trim().length > 0) {
|
|
237
|
+
return candidate.trim();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
const attrs = parseAttributes(row.attributes);
|
|
241
|
+
const attrCandidates = [
|
|
242
|
+
attrs['runtime.id'],
|
|
243
|
+
attrs['runtime.pod_name'],
|
|
244
|
+
attrs['k8s.pod.name'],
|
|
245
|
+
];
|
|
246
|
+
for (const candidate of attrCandidates) {
|
|
247
|
+
if (typeof candidate === 'string' && candidate.trim().length > 0) {
|
|
248
|
+
return candidate.trim();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const resourceAttributes = parseResourceAttributes(row.resource_attributes);
|
|
252
|
+
const resourceCandidates = [
|
|
253
|
+
resourceAttributes['runtime.id'],
|
|
254
|
+
resourceAttributes['runtime.pod_name'],
|
|
255
|
+
resourceAttributes['k8s.pod.name'],
|
|
256
|
+
];
|
|
257
|
+
for (const candidate of resourceCandidates) {
|
|
258
|
+
if (typeof candidate === 'string' && candidate.trim().length > 0) {
|
|
259
|
+
return candidate.trim();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return undefined;
|
|
263
|
+
}
|
|
264
|
+
function rowMatchesSource(row, serviceName, runtimeId) {
|
|
265
|
+
const resolvedServiceName = String(serviceName || '').trim();
|
|
266
|
+
const resolvedRuntimeId = String(runtimeId || '').trim();
|
|
267
|
+
if (!resolvedServiceName && !resolvedRuntimeId) {
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
const serviceMatches = resolvedServiceName.length > 0 &&
|
|
271
|
+
extractServiceName(row) === resolvedServiceName;
|
|
272
|
+
const runtimeMatches = resolvedRuntimeId.length > 0 && extractRuntimeId(row) === resolvedRuntimeId;
|
|
273
|
+
return serviceMatches || runtimeMatches;
|
|
274
|
+
}
|
|
275
|
+
/** Extract `agent.id` from the `attributes` field of a metric row. */
|
|
276
|
+
function extractAgentId(row) {
|
|
277
|
+
const parsed = parseAttributes(row.attributes);
|
|
278
|
+
const aid = parsed['agent.id'];
|
|
279
|
+
if (typeof aid === 'string')
|
|
280
|
+
return aid;
|
|
214
281
|
return undefined;
|
|
215
282
|
}
|
|
216
|
-
export function TokenUsageChart({ serviceName, agentId, apiKey,
|
|
283
|
+
export function TokenUsageChart({ serviceName, agentId, runtimeId, apiKey, datalayerUrl, wsUrl, liveSystemPromptTokens, liveToolsDescriptionTokens, liveUserMessageTokens, liveAgentMessageTokens, liveToolsUsageTokens, liveTimestampMs, height = 160, }) {
|
|
284
|
+
const cacheServiceKey = String(serviceName || runtimeId || '').trim() || undefined;
|
|
217
285
|
const monitoringCache = useAgentRuntimeStore(s => s.monitoringCache);
|
|
218
286
|
const mergeTokenTurns = useAgentRuntimeStore(s => s.mergeTokenTurns);
|
|
219
287
|
const appendLocalTokenTurnFull = useAgentRuntimeStore(s => s.appendLocalTokenTurnFull);
|
|
220
|
-
const cachedEntry = useMemo(() => resolveMonitoringEntry(monitoringCache,
|
|
288
|
+
const cachedEntry = useMemo(() => resolveMonitoringEntry(monitoringCache, cacheServiceKey, agentId), [agentId, cacheServiceKey, monitoringCache]);
|
|
221
289
|
const [turns, setTurns] = useState([]);
|
|
222
290
|
const initialTimestampMsRef = useRef(Date.now());
|
|
223
291
|
const cumulativeRef = useRef({
|
|
@@ -226,7 +294,7 @@ export function TokenUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl
|
|
|
226
294
|
});
|
|
227
295
|
// ── Reset state on source switch ──────────────────────────────
|
|
228
296
|
useEffect(() => {
|
|
229
|
-
if (!
|
|
297
|
+
if (!cacheServiceKey) {
|
|
230
298
|
setTurns([]);
|
|
231
299
|
initialTimestampMsRef.current = Date.now();
|
|
232
300
|
cumulativeRef.current = { completions: 0, values: emptyValues() };
|
|
@@ -239,10 +307,82 @@ export function TokenUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl
|
|
|
239
307
|
cumulativeRef.current = latestTurn
|
|
240
308
|
? { completions: latestTurn.turnNumber, values: latestTurn.values }
|
|
241
309
|
: { completions: 0, values: emptyValues() };
|
|
242
|
-
}, [agentId,
|
|
310
|
+
}, [agentId, cacheServiceKey, cachedEntry]);
|
|
311
|
+
// Bootstrap chart with historical OTEL metrics so charts are populated even
|
|
312
|
+
// before the first websocket update arrives.
|
|
313
|
+
useEffect(() => {
|
|
314
|
+
if (!cacheServiceKey || !apiKey || !datalayerUrl) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
let cancelled = false;
|
|
318
|
+
const loadInitialMetrics = async () => {
|
|
319
|
+
try {
|
|
320
|
+
const metricNames = [COMPLETIONS_METRIC, ...SERIES.map(s => s.metric)];
|
|
321
|
+
const results = await Promise.all(metricNames.map(metric => fetchOtelMetricRows({
|
|
322
|
+
metric,
|
|
323
|
+
serviceName,
|
|
324
|
+
datalayerUrl,
|
|
325
|
+
apiKey,
|
|
326
|
+
limit: 1000,
|
|
327
|
+
})));
|
|
328
|
+
if (cancelled) {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
let rows = results.flat().filter(row => {
|
|
332
|
+
const castedRow = row;
|
|
333
|
+
if (!rowMatchesSource(castedRow, serviceName, runtimeId)) {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
return !agentId || extractAgentId(castedRow) === agentId;
|
|
337
|
+
});
|
|
338
|
+
if (rows.length === 0 && runtimeId && !serviceName) {
|
|
339
|
+
rows = results.flat().filter(row => {
|
|
340
|
+
const castedRow = row;
|
|
341
|
+
return (rowMatchesSource(castedRow, undefined, runtimeId) &&
|
|
342
|
+
(!agentId || extractAgentId(castedRow) === agentId));
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
const { turns: initialTurns, finalState } = extractTurnsFromRows(rows, {
|
|
346
|
+
completions: 0,
|
|
347
|
+
values: emptyValues(),
|
|
348
|
+
});
|
|
349
|
+
if (cancelled || initialTurns.length === 0) {
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
cumulativeRef.current = finalState;
|
|
353
|
+
mergeTokenTurns({
|
|
354
|
+
serviceName: cacheServiceKey,
|
|
355
|
+
agentId,
|
|
356
|
+
turns: initialTurns.map(pointToLocalTokenTurn),
|
|
357
|
+
});
|
|
358
|
+
const mergedEntry = resolveMonitoringEntry(agentRuntimeStore.getState().monitoringCache, cacheServiceKey, agentId);
|
|
359
|
+
if (mergedEntry) {
|
|
360
|
+
setTurns(mergedEntry.tokenTurns.map(localTokenTurnToPoint));
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
setTurns(initialTurns);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
// Fail open: websocket updates can still populate the chart.
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
void loadInitialMetrics();
|
|
371
|
+
return () => {
|
|
372
|
+
cancelled = true;
|
|
373
|
+
};
|
|
374
|
+
}, [
|
|
375
|
+
agentId,
|
|
376
|
+
apiKey,
|
|
377
|
+
cacheServiceKey,
|
|
378
|
+
datalayerUrl,
|
|
379
|
+
mergeTokenTurns,
|
|
380
|
+
runtimeId,
|
|
381
|
+
serviceName,
|
|
382
|
+
]);
|
|
243
383
|
// Apply immediate post-turn token totals from monitoring snapshots.
|
|
244
384
|
useEffect(() => {
|
|
245
|
-
if (!
|
|
385
|
+
if (!cacheServiceKey)
|
|
246
386
|
return;
|
|
247
387
|
const rawValues = [
|
|
248
388
|
liveSystemPromptTokens,
|
|
@@ -268,7 +408,7 @@ export function TokenUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl
|
|
|
268
408
|
? liveTimestampMs
|
|
269
409
|
: Date.now();
|
|
270
410
|
appendLocalTokenTurnFull({
|
|
271
|
-
serviceName,
|
|
411
|
+
serviceName: cacheServiceKey,
|
|
272
412
|
agentId,
|
|
273
413
|
timestampMs,
|
|
274
414
|
systemPromptTokens,
|
|
@@ -278,12 +418,13 @@ export function TokenUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl
|
|
|
278
418
|
toolsUsageTokens,
|
|
279
419
|
totalTokens,
|
|
280
420
|
});
|
|
281
|
-
const mergedEntry = resolveMonitoringEntry(agentRuntimeStore.getState().monitoringCache,
|
|
421
|
+
const mergedEntry = resolveMonitoringEntry(agentRuntimeStore.getState().monitoringCache, cacheServiceKey, agentId);
|
|
282
422
|
if (mergedEntry) {
|
|
283
423
|
setTurns(mergedEntry.tokenTurns.map(localTokenTurnToPoint));
|
|
284
424
|
}
|
|
285
425
|
}, [
|
|
286
426
|
agentId,
|
|
427
|
+
cacheServiceKey,
|
|
287
428
|
appendLocalTokenTurnFull,
|
|
288
429
|
liveAgentMessageTokens,
|
|
289
430
|
liveSystemPromptTokens,
|
|
@@ -295,10 +436,10 @@ export function TokenUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl
|
|
|
295
436
|
]);
|
|
296
437
|
// ── WebSocket subscription (shared connection pool) ─────────
|
|
297
438
|
useEffect(() => {
|
|
298
|
-
if (!
|
|
439
|
+
if (!cacheServiceKey || !apiKey)
|
|
299
440
|
return;
|
|
300
|
-
const rawBaseUrl =
|
|
301
|
-
|
|
441
|
+
const rawBaseUrl = wsUrl ||
|
|
442
|
+
datalayerUrl ||
|
|
302
443
|
(typeof window !== 'undefined' ? window.location.origin : '');
|
|
303
444
|
if (!rawBaseUrl)
|
|
304
445
|
return;
|
|
@@ -311,9 +452,9 @@ export function TokenUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl
|
|
|
311
452
|
window.location.protocol === 'https:'
|
|
312
453
|
? 'https:'
|
|
313
454
|
: 'http:'}//${typeof window !== 'undefined' ? window.location.host : ''}${rawBaseUrl}`;
|
|
314
|
-
let
|
|
455
|
+
let resolvedWsUrl;
|
|
315
456
|
try {
|
|
316
|
-
|
|
457
|
+
resolvedWsUrl = buildOtelWebSocketUrl({
|
|
317
458
|
baseUrl: baseWithProtocol,
|
|
318
459
|
token: apiKey,
|
|
319
460
|
});
|
|
@@ -321,11 +462,11 @@ export function TokenUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl
|
|
|
321
462
|
catch {
|
|
322
463
|
return;
|
|
323
464
|
}
|
|
324
|
-
const unsubscribe = subscribeOtelWs(
|
|
465
|
+
const unsubscribe = subscribeOtelWs(resolvedWsUrl, msg => {
|
|
325
466
|
if (msg.signal !== 'metrics')
|
|
326
467
|
return;
|
|
327
468
|
const rows = Array.isArray(msg.data) ? msg.data : [];
|
|
328
|
-
let matchingRows = rows.filter(row =>
|
|
469
|
+
let matchingRows = rows.filter(row => rowMatchesSource(row, serviceName, runtimeId));
|
|
329
470
|
// Filter by agent.id when specified.
|
|
330
471
|
if (agentId) {
|
|
331
472
|
matchingRows = matchingRows.filter(row => extractAgentId(row) === agentId);
|
|
@@ -336,11 +477,11 @@ export function TokenUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl
|
|
|
336
477
|
if (newTurns.length > 0) {
|
|
337
478
|
cumulativeRef.current = finalState;
|
|
338
479
|
mergeTokenTurns({
|
|
339
|
-
serviceName,
|
|
480
|
+
serviceName: cacheServiceKey,
|
|
340
481
|
agentId,
|
|
341
482
|
turns: newTurns.map(pointToLocalTokenTurn),
|
|
342
483
|
});
|
|
343
|
-
const mergedEntry = resolveMonitoringEntry(agentRuntimeStore.getState().monitoringCache,
|
|
484
|
+
const mergedEntry = resolveMonitoringEntry(agentRuntimeStore.getState().monitoringCache, cacheServiceKey, agentId);
|
|
344
485
|
if (mergedEntry) {
|
|
345
486
|
setTurns(mergedEntry.tokenTurns.map(localTokenTurnToPoint));
|
|
346
487
|
}
|
|
@@ -350,7 +491,16 @@ export function TokenUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl
|
|
|
350
491
|
}
|
|
351
492
|
});
|
|
352
493
|
return unsubscribe;
|
|
353
|
-
}, [
|
|
494
|
+
}, [
|
|
495
|
+
agentId,
|
|
496
|
+
apiKey,
|
|
497
|
+
cacheServiceKey,
|
|
498
|
+
mergeTokenTurns,
|
|
499
|
+
datalayerUrl,
|
|
500
|
+
runtimeId,
|
|
501
|
+
serviceName,
|
|
502
|
+
wsUrl,
|
|
503
|
+
]);
|
|
354
504
|
// ── Chart options ─────────────────────────────────────────────
|
|
355
505
|
const option = useMemo(() => {
|
|
356
506
|
const legendLabels = Array.from(new Set(SERIES.map(item => item.label)));
|
|
@@ -24,7 +24,7 @@ export interface TurnGraphChartProps {
|
|
|
24
24
|
/** Filter spans to this agent ID (matches ``agent.id`` span attribute). */
|
|
25
25
|
agentId?: string;
|
|
26
26
|
/** Base URL for the Datalayer OTEL service. */
|
|
27
|
-
|
|
27
|
+
datalayerUrl?: string;
|
|
28
28
|
/** JWT / API key for OTEL auth. */
|
|
29
29
|
apiKey?: string;
|
|
30
30
|
/**
|
|
@@ -386,7 +386,7 @@ function buildOption(run) {
|
|
|
386
386
|
],
|
|
387
387
|
};
|
|
388
388
|
}
|
|
389
|
-
export const TurnGraphChart = ({ serviceName, agentId,
|
|
389
|
+
export const TurnGraphChart = ({ serviceName, agentId, datalayerUrl, apiKey, autoRefreshMs = 10_000, height = 320, style, }) => {
|
|
390
390
|
const [runs, setRuns] = useState([]);
|
|
391
391
|
const [selectedIdx, setSelectedIdx] = useState(0);
|
|
392
392
|
const [loading, setLoading] = useState(false);
|
|
@@ -440,12 +440,12 @@ export const TurnGraphChart = ({ serviceName, agentId, runUrl, apiKey, autoRefre
|
|
|
440
440
|
};
|
|
441
441
|
}, []);
|
|
442
442
|
const fetchData = useCallback(async () => {
|
|
443
|
-
if (!
|
|
443
|
+
if (!datalayerUrl || !apiKey)
|
|
444
444
|
return;
|
|
445
445
|
setLoading(true);
|
|
446
446
|
setError(null);
|
|
447
447
|
try {
|
|
448
|
-
const client = createOtelClient({ baseUrl:
|
|
448
|
+
const client = createOtelClient({ baseUrl: datalayerUrl, token: apiKey });
|
|
449
449
|
const result = await client.fetchTraces({ serviceName, limit: 200 });
|
|
450
450
|
if (mountedRef.current)
|
|
451
451
|
upsertRunsFromSpans(result.data, 'replace');
|
|
@@ -459,9 +459,9 @@ export const TurnGraphChart = ({ serviceName, agentId, runUrl, apiKey, autoRefre
|
|
|
459
459
|
if (mountedRef.current)
|
|
460
460
|
setLoading(false);
|
|
461
461
|
}
|
|
462
|
-
}, [
|
|
462
|
+
}, [datalayerUrl, apiKey, serviceName, upsertRunsFromSpans]);
|
|
463
463
|
const { connected: wsConnected, error: wsError } = useOtelWebSocket({
|
|
464
|
-
baseUrl:
|
|
464
|
+
baseUrl: datalayerUrl,
|
|
465
465
|
token: apiKey,
|
|
466
466
|
callbacks: {
|
|
467
467
|
onTraces: spans => {
|
|
@@ -480,7 +480,7 @@ export const TurnGraphChart = ({ serviceName, agentId, runUrl, apiKey, autoRefre
|
|
|
480
480
|
const selectedRun = runs[selectedIdx];
|
|
481
481
|
const option = useMemo(() => (selectedRun ? buildOption(selectedRun) : null), [selectedRun]);
|
|
482
482
|
// Not configured — caller didn't pass auth.
|
|
483
|
-
if (!
|
|
483
|
+
if (!datalayerUrl || !apiKey)
|
|
484
484
|
return null;
|
|
485
485
|
if (loading && runs.length === 0) {
|
|
486
486
|
return (_jsx(Box, { sx: { color: 'fg.muted', fontSize: 1, py: 2 }, children: "Loading OTEL traces\u2026" }));
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2UiAgentExample
|
|
3
|
+
*
|
|
4
|
+
* A comprehensive, real-world A2UI generative-UI example. The agent
|
|
5
|
+
* (agentspec: `example-a2ui-agent`) exposes a single backend tool,
|
|
6
|
+
* `render_a2ui_surface`, that turns a natural-language request into a
|
|
7
|
+
* validated A2UI v0.9 surface (createSurface + updateComponents +
|
|
8
|
+
* updateDataModel). The frontend renders the returned messages live:
|
|
9
|
+
*
|
|
10
|
+
* - INLINE in the chat as a compact confirmation card.
|
|
11
|
+
* - In the main canvas as a fully interactive A2UI surface (forms, cards,
|
|
12
|
+
* choice pickers, sliders, date pickers, ...).
|
|
13
|
+
*
|
|
14
|
+
* Submitting the rendered surface emits an A2UI client action which we display
|
|
15
|
+
* in a "Submitted values" panel, closing the generate → interact loop.
|
|
16
|
+
*
|
|
17
|
+
* This mirrors the working tool-based generative UI pattern (see
|
|
18
|
+
* AgUiHaikuGenUiExample) but renders A2UI surfaces instead of bespoke cards.
|
|
19
|
+
*/
|
|
20
|
+
import React from 'react';
|
|
21
|
+
declare const A2UiAgentExample: React.FC;
|
|
22
|
+
export default A2UiAgentExample;
|