@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
|
@@ -211,11 +211,11 @@ const resolveCloudRuntimeBaseUrlFromSpec = (spec) => {
|
|
|
211
211
|
return null;
|
|
212
212
|
}
|
|
213
213
|
const preferredKeys = [
|
|
214
|
-
'
|
|
215
|
-
'
|
|
214
|
+
'runtimesUrl',
|
|
215
|
+
'runtimeUrl',
|
|
216
216
|
'runtimes_url',
|
|
217
217
|
'runtime_url',
|
|
218
|
-
'
|
|
218
|
+
'datalayerUrl',
|
|
219
219
|
'baseUrl',
|
|
220
220
|
'endpoint',
|
|
221
221
|
];
|
|
@@ -298,13 +298,13 @@ githubClientId, kaggleToken, }) => {
|
|
|
298
298
|
const { configuration } = useCoreStore();
|
|
299
299
|
const { token } = useSimpleAuthStore();
|
|
300
300
|
const cloudCatalogBaseUrl = useMemo(() => {
|
|
301
|
-
const configured = normalizeHttpUrl(configuration?.
|
|
301
|
+
const configured = normalizeHttpUrl(configuration?.runtimesUrl);
|
|
302
302
|
const envConfigured = normalizeHttpUrl(import.meta.env.VITE_DATALAYER_AGENT_RUNTIMES_URL);
|
|
303
303
|
if (configured && !isLocalhostUrl(configured)) {
|
|
304
304
|
return configured;
|
|
305
305
|
}
|
|
306
306
|
return envConfigured || 'https://r1.datalayer.run';
|
|
307
|
-
}, [configuration?.
|
|
307
|
+
}, [configuration?.runtimesUrl]);
|
|
308
308
|
const isCloudMode = isCloudSpecSelection(selectedAgentId);
|
|
309
309
|
const selectedSpec = selectedCloudSpec || selectedLibrarySpec;
|
|
310
310
|
const cloudRuntimeCreationBaseUrl = useMemo(() => {
|
|
@@ -770,42 +770,64 @@ githubClientId, kaggleToken, }) => {
|
|
|
770
770
|
const specId = isSpecSelection(selectedAgentId)
|
|
771
771
|
? getSpecId(selectedAgentId)
|
|
772
772
|
: undefined;
|
|
773
|
-
const
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
773
|
+
const createRequestBody = {
|
|
774
|
+
name: agentName,
|
|
775
|
+
description: description || `Agent created via UI (${agentLibrary})`,
|
|
776
|
+
goal: goal || undefined,
|
|
777
|
+
agent_library: agentLibrary,
|
|
778
|
+
transport: transport,
|
|
779
|
+
model: model,
|
|
780
|
+
system_prompt: systemPrompt || DEFAULT_SYSTEM_PROMPT,
|
|
781
|
+
system_prompt_codemode_addons: systemPromptCodemodeAddons || undefined,
|
|
782
|
+
tools: tools,
|
|
783
|
+
sandbox_variant: sandboxVariant || undefined,
|
|
784
|
+
enable_skills: enableSkills,
|
|
785
|
+
enable_codemode: enableCodemode,
|
|
786
|
+
allow_direct_tool_calls: allowDirectToolCalls,
|
|
787
|
+
enable_tool_reranker: enableToolReranker,
|
|
788
|
+
selected_mcp_servers: selectedMcpServers,
|
|
789
|
+
skills: selectedSkills,
|
|
790
|
+
jupyter_sandbox: useJupyterSandbox ? jupyterSandboxUrl : undefined,
|
|
791
|
+
agent_spec: mergedSpecForLaunch,
|
|
792
|
+
...(specId ? { agent_spec_id: specId } : {}),
|
|
793
|
+
};
|
|
794
|
+
const tryCreate = async () => {
|
|
795
|
+
const response = await fetch(`${baseUrl}/api/v1/agents`, {
|
|
796
|
+
method: 'POST',
|
|
797
|
+
headers: {
|
|
798
|
+
'Content-Type': 'application/json',
|
|
799
|
+
},
|
|
800
|
+
body: JSON.stringify(createRequestBody),
|
|
801
|
+
});
|
|
802
|
+
if (!response.ok) {
|
|
803
|
+
const errorData = await response
|
|
804
|
+
.json()
|
|
805
|
+
.catch(() => ({ detail: 'Unknown error' }));
|
|
806
|
+
throw new Error(errorData.detail || `Failed to create agent: ${response.status}`);
|
|
807
|
+
}
|
|
808
|
+
const data = await response.json();
|
|
809
|
+
console.log('[AgentRuntimeExample] Agent created:', data);
|
|
810
|
+
return data.id;
|
|
811
|
+
};
|
|
812
|
+
try {
|
|
813
|
+
return await tryCreate();
|
|
814
|
+
}
|
|
815
|
+
catch (error) {
|
|
816
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to create agent';
|
|
817
|
+
const alreadyExists = /already exists/i.test(errorMessage);
|
|
818
|
+
// If the agent already exists, terminate (delete) it then retry once.
|
|
819
|
+
if (alreadyExists && agentName) {
|
|
820
|
+
console.warn(`[AgentRuntimeExample] Agent '${agentName}' already exists, deleting and retrying create once.`);
|
|
821
|
+
const deleteResponse = await fetch(`${baseUrl}/api/v1/agents/${encodeURIComponent(agentName)}`, {
|
|
822
|
+
method: 'DELETE',
|
|
823
|
+
});
|
|
824
|
+
if (deleteResponse.ok) {
|
|
825
|
+
return await tryCreate();
|
|
826
|
+
}
|
|
827
|
+
throw new Error(`Failed to delete existing agent '${agentName}' before retry: ${deleteResponse.status}`);
|
|
828
|
+
}
|
|
829
|
+
throw error;
|
|
805
830
|
}
|
|
806
|
-
const data = await response.json();
|
|
807
|
-
console.log('[AgentRuntimeExample] Agent created:', data);
|
|
808
|
-
return data.id;
|
|
809
831
|
}
|
|
810
832
|
catch (error) {
|
|
811
833
|
const errorMessage = error instanceof Error ? error.message : 'Failed to create agent';
|
|
@@ -1021,7 +1043,7 @@ githubClientId, kaggleToken, }) => {
|
|
|
1021
1043
|
showModelSelector: true,
|
|
1022
1044
|
showToolsMenu: true,
|
|
1023
1045
|
showSkillsMenu: true,
|
|
1024
|
-
showInformation:
|
|
1046
|
+
showInformation: true,
|
|
1025
1047
|
codemodeEnabled: enableCodemode,
|
|
1026
1048
|
initialModel: model,
|
|
1027
1049
|
mcpServers: selectedMcpServers,
|
|
@@ -3,13 +3,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
4
|
* Distributed under the terms of the Modified BSD License.
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { useMemo } from 'react';
|
|
7
7
|
import { Spinner, Text } from '@primer/react';
|
|
8
8
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
9
9
|
import { Box } from '@datalayer/primer-addons';
|
|
10
10
|
import { ThemedProvider } from './utils/themedProvider';
|
|
11
11
|
import { uniqueAgentId } from './utils/agentId';
|
|
12
|
-
import {
|
|
12
|
+
import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
|
|
13
13
|
import { Chat } from '../chat';
|
|
14
14
|
// Create a query client for React Query
|
|
15
15
|
const queryClient = new QueryClient({
|
|
@@ -24,28 +24,24 @@ const queryClient = new QueryClient({
|
|
|
24
24
|
});
|
|
25
25
|
const AGENT_NAME = 'datalayer-assistant';
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
27
|
+
* Agent Runtime Custom Example Component
|
|
28
|
+
*
|
|
29
|
+
* Demonstrates the unified Chat component with AG-UI transport
|
|
30
|
+
* and all necessary providers:
|
|
31
|
+
* - QueryClientProvider for data fetching
|
|
32
|
+
* - Auto-creates agent on the server if it doesn't exist
|
|
29
33
|
*/
|
|
30
|
-
|
|
31
|
-
const agentName =
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
},
|
|
42
|
-
body: JSON.stringify({
|
|
43
|
-
name: agentName,
|
|
44
|
-
description: 'Datalayer AI Assistant - Your helpful coding companion',
|
|
45
|
-
agent_library: 'pydantic-ai',
|
|
46
|
-
transport: 'ag-ui',
|
|
47
|
-
model: 'openai:gpt-4o-mini',
|
|
48
|
-
system_prompt: `You are custom chat assistant, a helpful AI assistant specialized in data science, Python programming, and Jupyter notebooks.
|
|
34
|
+
const AgentRuntimeCustomExample = () => {
|
|
35
|
+
const agentName = useMemo(() => uniqueAgentId(AGENT_NAME), []);
|
|
36
|
+
const { agentId, status, error, isReady } = useExampleAgentRuntime({
|
|
37
|
+
exampleId: 'ChatCustomExample',
|
|
38
|
+
agentName,
|
|
39
|
+
agentConfig: {
|
|
40
|
+
description: 'Datalayer AI Assistant - Your helpful coding companion',
|
|
41
|
+
agentLibrary: 'pydantic-ai',
|
|
42
|
+
protocol: 'ag-ui',
|
|
43
|
+
model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
|
|
44
|
+
systemPrompt: `You are custom chat assistant, a helpful AI assistant specialized in data science, Python programming, and Jupyter notebooks.
|
|
49
45
|
|
|
50
46
|
You can help users with:
|
|
51
47
|
- Writing and debugging Python code
|
|
@@ -55,60 +51,10 @@ You can help users with:
|
|
|
55
51
|
- General programming questions
|
|
56
52
|
|
|
57
53
|
Be concise, helpful, and provide working code examples when appropriate.`,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
.json()
|
|
63
|
-
.catch(() => ({ detail: 'Unknown error' }));
|
|
64
|
-
throw new Error(errorData.detail || `Failed to create agent: ${response.status}`);
|
|
65
|
-
}
|
|
66
|
-
const data = await response.json();
|
|
67
|
-
console.log('[AgentRuntimeCustomExample] Agent created:', data);
|
|
68
|
-
return data.id;
|
|
69
|
-
}
|
|
70
|
-
catch (err) {
|
|
71
|
-
console.error('[AgentRuntimeCustomExample] Error creating agent:', err);
|
|
72
|
-
throw err;
|
|
73
|
-
}
|
|
74
|
-
}, [agentName, baseUrl]);
|
|
75
|
-
const initAgent = useCallback(async () => {
|
|
76
|
-
setIsLoading(true);
|
|
77
|
-
setError(null);
|
|
78
|
-
try {
|
|
79
|
-
console.log('[AgentRuntimeCustomExample] Creating new agent...');
|
|
80
|
-
const newAgentId = await createAgent();
|
|
81
|
-
if (newAgentId) {
|
|
82
|
-
setAgentId(newAgentId);
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
setError('Failed to create agent');
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
const errorMessage = err instanceof Error ? err.message : 'Failed to initialize agent';
|
|
90
|
-
setError(errorMessage);
|
|
91
|
-
}
|
|
92
|
-
finally {
|
|
93
|
-
setIsLoading(false);
|
|
94
|
-
}
|
|
95
|
-
}, [createAgent]);
|
|
96
|
-
useEffect(() => {
|
|
97
|
-
initAgent();
|
|
98
|
-
}, [initAgent]);
|
|
99
|
-
return { agentId, isLoading, error, retry: initAgent };
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Agent Runtime Custom Example Component
|
|
103
|
-
*
|
|
104
|
-
* Demonstrates the unified Chat component with AG-UI transport
|
|
105
|
-
* and all necessary providers:
|
|
106
|
-
* - QueryClientProvider for data fetching
|
|
107
|
-
* - Auto-creates agent on the server if it doesn't exist
|
|
108
|
-
*/
|
|
109
|
-
const AgentRuntimeCustomExample = () => {
|
|
110
|
-
const baseUrl = useExampleAgentRuntimesUrl();
|
|
111
|
-
const { agentId, isLoading, error, retry } = useEnsureAgent(baseUrl);
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
const isLoading = !isReady && status !== 'error';
|
|
57
|
+
const retry = () => window.location.reload();
|
|
112
58
|
return (_jsx(QueryClientProvider, { client: queryClient, children: _jsx(ThemedProvider, { children: _jsxs(Box, { sx: {
|
|
113
59
|
display: 'flex',
|
|
114
60
|
flexDirection: 'column',
|
|
@@ -15,62 +15,31 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
15
15
|
*
|
|
16
16
|
* Backend: POST /api/v1/agents → /api/v1/ag-ui/{agentId}/
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
18
|
+
import { useMemo } from 'react';
|
|
19
19
|
import { Text, Spinner } from '@primer/react';
|
|
20
20
|
import { Box, setupPrimerPortals } from '@datalayer/primer-addons';
|
|
21
21
|
import { ThemedProvider } from './utils/themedProvider';
|
|
22
22
|
import { uniqueAgentId } from './utils/agentId';
|
|
23
23
|
import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
|
|
24
|
+
import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
|
|
24
25
|
import { ErrorView } from './components';
|
|
25
26
|
import { Chat } from '../chat';
|
|
26
27
|
setupPrimerPortals();
|
|
27
|
-
const
|
|
28
|
+
const AGENTSPEC_ID = 'example-simple';
|
|
28
29
|
const AGENT_NAME = 'simple';
|
|
29
30
|
const AgentRuntimeChatExample = () => {
|
|
30
31
|
const baseUrl = useExampleAgentRuntimesUrl();
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
method: 'POST',
|
|
43
|
-
headers: { 'Content-Type': 'application/json' },
|
|
44
|
-
body: JSON.stringify({
|
|
45
|
-
name,
|
|
46
|
-
agent_spec_id: AGENT_SPEC_ID,
|
|
47
|
-
transport: 'ag-ui',
|
|
48
|
-
}),
|
|
49
|
-
});
|
|
50
|
-
if (!response.ok) {
|
|
51
|
-
const data = await response
|
|
52
|
-
.json()
|
|
53
|
-
.catch(() => ({ detail: 'Unknown error' }));
|
|
54
|
-
throw new Error(data.detail || `Failed to create agent: ${response.status}`);
|
|
55
|
-
}
|
|
56
|
-
const data = await response.json();
|
|
57
|
-
if (!cancelled) {
|
|
58
|
-
setAgentId(data.id);
|
|
59
|
-
setIsCreating(false);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
if (!cancelled) {
|
|
64
|
-
setError(err instanceof Error ? err.message : 'Failed to create agent');
|
|
65
|
-
setIsCreating(false);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
createAgent();
|
|
70
|
-
return () => {
|
|
71
|
-
cancelled = true;
|
|
72
|
-
};
|
|
73
|
-
}, [baseUrl]);
|
|
32
|
+
const agentName = useMemo(() => uniqueAgentId(AGENT_NAME), []);
|
|
33
|
+
const { agentId, error, status, isReady } = useExampleAgentRuntime({
|
|
34
|
+
exampleId: 'ChatExample',
|
|
35
|
+
agentName,
|
|
36
|
+
specId: AGENTSPEC_ID,
|
|
37
|
+
agentConfig: {
|
|
38
|
+
protocol: 'ag-ui',
|
|
39
|
+
agentSpecId: AGENTSPEC_ID,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
const isCreating = !isReady && status !== 'error';
|
|
74
43
|
// Loading state while agent is being created
|
|
75
44
|
if (isCreating) {
|
|
76
45
|
return (_jsx(ThemedProvider, { children: _jsxs(Box, { sx: {
|
|
@@ -81,7 +50,7 @@ const AgentRuntimeChatExample = () => {
|
|
|
81
50
|
height: '100vh',
|
|
82
51
|
gap: 3,
|
|
83
52
|
bg: 'canvas.default',
|
|
84
|
-
}, children: [_jsx(Spinner, { size: "large" }), _jsxs(Text, { sx: { color: 'fg.muted' }, children: ["Creating agent from ",
|
|
53
|
+
}, children: [_jsx(Spinner, { size: "large" }), _jsxs(Text, { sx: { color: 'fg.muted' }, children: ["Creating agent from ", AGENTSPEC_ID, "..."] })] }) }));
|
|
85
54
|
}
|
|
86
55
|
// Error state
|
|
87
56
|
if (error || !agentId) {
|
|
@@ -42,16 +42,14 @@ import { ChatInlinePlugin } from '../lexical/ChatInlinePlugin';
|
|
|
42
42
|
import { useChatInlineToolbarItems } from '../lexical/useChatInlineToolbarItems';
|
|
43
43
|
import { useLexicalTools } from '../tools/adapters/agent-runtimes/lexicalHooks';
|
|
44
44
|
import { editorConfig } from './lexical/editorConfig';
|
|
45
|
+
import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
|
|
46
|
+
import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
|
|
45
47
|
import { DEFAULT_MODEL } from '../specs';
|
|
46
48
|
import '@datalayer/jupyter-lexical/style/index.css';
|
|
47
49
|
import './lexical/lexical-theme.css';
|
|
48
50
|
// Fixed lexical document ID
|
|
49
51
|
const LEXICAL_ID = 'agui-lexical-example';
|
|
50
|
-
// Base URL for agent-runtimes server
|
|
51
|
-
const BASE_URL = 'http://localhost:8765';
|
|
52
52
|
const AGENT_ID = 'lexical-agent-runtime-example';
|
|
53
|
-
// Vercel AI endpoint for lexical operations
|
|
54
|
-
const VERCEL_AI_ENDPOINT = `${BASE_URL}/api/v1/vercel-ai/${AGENT_ID}`;
|
|
55
53
|
function getJupyterSandboxUrl(serviceManager) {
|
|
56
54
|
const envUrl = import.meta.env.VITE_JUPYTER_SANDBOX_URL;
|
|
57
55
|
if (envUrl) {
|
|
@@ -75,87 +73,6 @@ function getJupyterSandboxUrl(serviceManager) {
|
|
|
75
73
|
* Hook to ensure the example-agent exists on the server.
|
|
76
74
|
* Creates it if it doesn't exist.
|
|
77
75
|
*/
|
|
78
|
-
function useEnsureAgent(agentId, baseUrl, jupyterSandboxUrl) {
|
|
79
|
-
const [isReady, setIsReady] = useState(false);
|
|
80
|
-
const [error, setError] = useState(null);
|
|
81
|
-
useEffect(() => {
|
|
82
|
-
let mounted = true;
|
|
83
|
-
async function ensureAgent() {
|
|
84
|
-
try {
|
|
85
|
-
if (!jupyterSandboxUrl) {
|
|
86
|
-
if (mounted) {
|
|
87
|
-
setError('Could not detect Jupyter server URL from Lexical service manager.');
|
|
88
|
-
setIsReady(false);
|
|
89
|
-
}
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
// Try to create the agent (will fail if already exists, which is fine)
|
|
93
|
-
const response = await fetch(`${baseUrl}/api/v1/agents`, {
|
|
94
|
-
method: 'POST',
|
|
95
|
-
headers: {
|
|
96
|
-
'Content-Type': 'application/json',
|
|
97
|
-
},
|
|
98
|
-
body: JSON.stringify({
|
|
99
|
-
name: agentId,
|
|
100
|
-
description: 'Demo agent for lexical example',
|
|
101
|
-
agent_library: 'pydantic-ai',
|
|
102
|
-
transport: 'vercel-ai',
|
|
103
|
-
model: DEFAULT_MODEL,
|
|
104
|
-
system_prompt: 'You are a helpful AI assistant that helps users work with documents. You can help with writing, editing, and formatting content.',
|
|
105
|
-
enable_codemode: false,
|
|
106
|
-
sandbox_variant: 'jupyter',
|
|
107
|
-
jupyter_sandbox: jupyterSandboxUrl,
|
|
108
|
-
}),
|
|
109
|
-
});
|
|
110
|
-
if (mounted) {
|
|
111
|
-
if (response.ok) {
|
|
112
|
-
console.log(`[AgentRuntimeLexicalAgentExample] Created agent: ${agentId}`);
|
|
113
|
-
setError(null);
|
|
114
|
-
setIsReady(true);
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
const rawBody = await response.text().catch(() => '');
|
|
118
|
-
let detail = rawBody;
|
|
119
|
-
try {
|
|
120
|
-
const parsed = rawBody ? JSON.parse(rawBody) : {};
|
|
121
|
-
if (typeof parsed.detail === 'string' &&
|
|
122
|
-
parsed.detail.length > 0) {
|
|
123
|
-
detail = parsed.detail;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
// Keep raw body as fallback detail.
|
|
128
|
-
}
|
|
129
|
-
const alreadyExists = response.status === 409 ||
|
|
130
|
-
response.status === 400 ||
|
|
131
|
-
/already exists/i.test(detail || '');
|
|
132
|
-
if (alreadyExists) {
|
|
133
|
-
console.log(`[AgentRuntimeLexicalAgentExample] Reusing existing agent: ${agentId}`);
|
|
134
|
-
setError(null);
|
|
135
|
-
setIsReady(true);
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
setError(detail || `Failed to create agent: ${response.status}`);
|
|
139
|
-
setIsReady(false);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
catch (err) {
|
|
145
|
-
if (mounted) {
|
|
146
|
-
console.error('[AgentRuntimeLexicalAgentExample] Error creating agent:', err);
|
|
147
|
-
setError(err instanceof Error ? err.message : 'Failed to connect to server');
|
|
148
|
-
setIsReady(false);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
ensureAgent();
|
|
153
|
-
return () => {
|
|
154
|
-
mounted = false;
|
|
155
|
-
};
|
|
156
|
-
}, [agentId, baseUrl, jupyterSandboxUrl]);
|
|
157
|
-
return { isReady, error };
|
|
158
|
-
}
|
|
159
76
|
// import contentLexical from './lexicals/vscode.lexical';
|
|
160
77
|
// const INITIAL_CONTENT = JSON.stringify(contentLexical);
|
|
161
78
|
const INITIAL_CONTENT = undefined; // Use default empty document
|
|
@@ -228,7 +145,7 @@ function LexicalToolsPlugin({ onToolsReady, }) {
|
|
|
228
145
|
}, [tools, onToolsReady]);
|
|
229
146
|
return null;
|
|
230
147
|
}
|
|
231
|
-
const LexicalUI = React.memo(function LexicalUI({ content = INITIAL_CONTENT, serviceManager, onToolsReady, }) {
|
|
148
|
+
const LexicalUI = React.memo(function LexicalUI({ content = INITIAL_CONTENT, serviceManager, endpoint, onToolsReady, }) {
|
|
232
149
|
const [floatingAnchorElem, setFloatingAnchorElem] = useState(null);
|
|
233
150
|
const [_isLinkEditMode, setIsLinkEditMode] = useState(false);
|
|
234
151
|
// AI actions registered as toolbar items via the primer-addons toolbar extensibility
|
|
@@ -261,13 +178,48 @@ const LexicalUI = React.memo(function LexicalUI({ content = INITIAL_CONTENT, ser
|
|
|
261
178
|
minHeight: '600px',
|
|
262
179
|
}, children: _jsxs(LexicalConfigProvider, { lexicalId: LEXICAL_ID, serviceManager: serviceManager, children: [_jsx(LexicalToolsPlugin, { onToolsReady: onToolsReady }), _jsx(LexicalComposer, { initialConfig: editorConfig, children: _jsxs("div", { className: "lexical-editor-inner", ref: onRef, children: [_jsx(LexicalStatePlugin, {}), _jsx(RichTextPlugin, { contentEditable: _jsx(ContentEditable, { className: "lexical-editor-content", "aria-label": "Lexical Editor" }), ErrorBoundary: LexicalErrorBoundary }), _jsx(OnChangePlugin, { onChange: handleChange }), _jsx(HistoryPlugin, {}), _jsx(AutoFocusPlugin, {}), _jsx(ListPlugin, {}), _jsx(CheckListPlugin, {}), _jsx(LinkPlugin, {}), _jsx(AutoLinkPlugin, {}), _jsx(ListMaxIndentLevelPlugin, { maxDepth: 7 }), _jsx(MarkdownShortcutPlugin, { transformers: TRANSFORMERS }), _jsx(LoadContentPlugin, { content: content }), _jsx(CodeHighlightPlugin, {}), _jsx(ImagesPlugin, { captionsEnabled: false }), _jsx(HorizontalRulePlugin, {}), _jsx(EquationsPlugin, {}), _jsx(YouTubePlugin, {}), _jsx(ExcalidrawPlugin, {}), _jsx(CollapsiblePlugin, {}), _jsx(AutoEmbedPlugin, {}), _jsx(TablePlugin, {}), _jsx(TableCellResizerPlugin, {}), _jsx(JupyterCellPlugin, {}), _jsx(ThemedJupyterProvider, { children: _jsx(SimpleKernelPluginsInner, { serviceManager: serviceManager }) }), floatingAnchorElem && (_jsxs(_Fragment, { children: [_jsx(DraggableBlockPlugin, { anchorElem: floatingAnchorElem }), _jsx(FloatingTextFormatToolbarPlugin, { anchorElem: floatingAnchorElem, setIsLinkEditMode: setIsLinkEditMode, extraItems: toolbarItems }), _jsx(CodeActionMenuPlugin, { anchorElem: floatingAnchorElem })] })), _jsx(ChatInlinePlugin, { protocol: {
|
|
263
180
|
type: 'vercel-ai',
|
|
264
|
-
endpoint
|
|
181
|
+
endpoint,
|
|
265
182
|
}, isOpen: isAiOpen, onClose: closeAi, pendingPrompt: pendingPrompt, onPendingPromptConsumed: clearPendingPrompt })] }) })] }) })] }));
|
|
266
183
|
});
|
|
267
184
|
function LexicalWithChat({ content, serviceManager, }) {
|
|
185
|
+
const baseUrl = useExampleAgentRuntimesUrl();
|
|
186
|
+
const vercelAiEndpoint = `${baseUrl}/api/v1/vercel-ai/${AGENT_ID}`;
|
|
187
|
+
const [createRequested, setCreateRequested] = useState(false);
|
|
268
188
|
const jupyterSandboxUrl = useMemo(() => getJupyterSandboxUrl(serviceManager), [serviceManager]);
|
|
269
|
-
|
|
270
|
-
|
|
189
|
+
const { agentId, isReady, status, error, createAgent } = useExampleAgentRuntime({
|
|
190
|
+
exampleId: 'LexicalAgentExample',
|
|
191
|
+
agentName: AGENT_ID,
|
|
192
|
+
autoCreateAgent: false,
|
|
193
|
+
agentConfig: {
|
|
194
|
+
name: AGENT_ID,
|
|
195
|
+
description: 'Demo agent for lexical example',
|
|
196
|
+
protocol: 'vercel-ai',
|
|
197
|
+
model: DEFAULT_MODEL,
|
|
198
|
+
systemPrompt: 'You are a helpful AI assistant that helps users work with documents. You can help with writing, editing, and formatting content.',
|
|
199
|
+
enableCodemode: false,
|
|
200
|
+
sandboxVariant: 'jupyter',
|
|
201
|
+
jupyterSandbox: jupyterSandboxUrl,
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
useEffect(() => {
|
|
205
|
+
if (!jupyterSandboxUrl || createRequested || agentId) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
setCreateRequested(true);
|
|
209
|
+
void createAgent({
|
|
210
|
+
name: AGENT_ID,
|
|
211
|
+
description: 'Demo agent for lexical example',
|
|
212
|
+
protocol: 'vercel-ai',
|
|
213
|
+
model: DEFAULT_MODEL,
|
|
214
|
+
systemPrompt: 'You are a helpful AI assistant that helps users work with documents. You can help with writing, editing, and formatting content.',
|
|
215
|
+
enableCodemode: false,
|
|
216
|
+
sandboxVariant: 'jupyter',
|
|
217
|
+
jupyterSandbox: jupyterSandboxUrl,
|
|
218
|
+
}).catch(() => {
|
|
219
|
+
setCreateRequested(false);
|
|
220
|
+
});
|
|
221
|
+
}, [jupyterSandboxUrl, createRequested, agentId, createAgent]);
|
|
222
|
+
const effectiveReady = isReady || status === 'ready';
|
|
271
223
|
// State to hold tools - populated by LexicalToolsPlugin inside the context
|
|
272
224
|
const [tools, setTools] = useState([]);
|
|
273
225
|
// Stable callback for receiving tools from LexicalToolsPlugin
|
|
@@ -284,7 +236,7 @@ function LexicalWithChat({ content, serviceManager, }) {
|
|
|
284
236
|
width: '100vw',
|
|
285
237
|
display: 'flex',
|
|
286
238
|
overflow: 'hidden',
|
|
287
|
-
}, children: [_jsx(LexicalUI, { content: content, serviceManager: serviceManager, onToolsReady: handleToolsReady }), error && (_jsxs(Box, { sx: {
|
|
239
|
+
}, children: [_jsx(LexicalUI, { content: content, serviceManager: serviceManager, endpoint: vercelAiEndpoint, onToolsReady: handleToolsReady }), error && (_jsxs(Box, { sx: {
|
|
288
240
|
position: 'fixed',
|
|
289
241
|
bottom: 20,
|
|
290
242
|
right: 20,
|
|
@@ -293,7 +245,7 @@ function LexicalWithChat({ content, serviceManager, }) {
|
|
|
293
245
|
color: 'danger.fg',
|
|
294
246
|
borderRadius: 2,
|
|
295
247
|
maxWidth: 300,
|
|
296
|
-
}, children: [_jsx("strong", { children: "Error:" }), " ", error] })),
|
|
248
|
+
}, children: [_jsx("strong", { children: "Error:" }), " ", error] })), effectiveReady && (_jsx(ChatFloating, { protocol: "vercel-ai", endpoint: vercelAiEndpoint, title: "Lexical AI Agent Runtime", description: "Hi! I can help you edit documents. Try: 'Insert a heading', 'Add a code block', or 'Create a list'", defaultOpen: true, defaultViewMode: "panel", position: "bottom-right", frontendTools: tools, useStore: false, showModelSelector: true, showToolsMenu: true, showSkillsMenu: true, suggestions: [
|
|
297
249
|
{
|
|
298
250
|
title: 'Insert heading',
|
|
299
251
|
message: 'Insert a heading that says "Welcome"',
|