@datalayer/agent-runtimes 1.0.10 → 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.
Files changed (448) hide show
  1. package/README.md +82 -1
  2. package/lib/{AgentLexical.d.ts → AgentDocument.d.ts} +5 -5
  3. package/lib/{AgentLexical.js → AgentDocument.js} +156 -26
  4. package/lib/AgentNode.js +32 -31
  5. package/lib/AgentNotebook.js +172 -17
  6. package/lib/AppExamples2.css +47 -0
  7. package/lib/AppExamples2.d.ts +3 -0
  8. package/lib/AppExamples2.js +21 -0
  9. package/lib/{agent-lexical-main.js → agent-document-main.js} +2 -2
  10. package/lib/agents/AgentRuntimeChat.d.ts +73 -0
  11. package/lib/agents/AgentRuntimeChat.js +198 -0
  12. package/lib/api/index.d.ts +12 -0
  13. package/lib/api/index.js +46 -0
  14. package/lib/api/runtimes/checkpoints.d.ts +122 -0
  15. package/lib/api/runtimes/checkpoints.js +118 -0
  16. package/lib/api/runtimes/environments.d.ts +9 -0
  17. package/lib/api/runtimes/environments.js +29 -0
  18. package/lib/api/runtimes/healthz.d.ts +15 -0
  19. package/lib/api/runtimes/healthz.js +44 -0
  20. package/lib/api/runtimes/index.d.ts +12 -0
  21. package/lib/api/runtimes/index.js +16 -0
  22. package/lib/api/runtimes/runtimes.d.ts +138 -0
  23. package/lib/api/runtimes/runtimes.js +230 -0
  24. package/lib/api/runtimes/snapshots.d.ts +38 -0
  25. package/lib/api/runtimes/snapshots.js +82 -0
  26. package/lib/api/scheduler/index.d.ts +6 -0
  27. package/lib/api/scheduler/index.js +10 -0
  28. package/lib/api/scheduler/schedules.d.ts +85 -0
  29. package/lib/api/scheduler/schedules.js +78 -0
  30. package/lib/api/spacer/documents.d.ts +12 -0
  31. package/lib/api/spacer/documents.js +43 -0
  32. package/lib/api/spacer/healthz.d.ts +15 -0
  33. package/lib/api/spacer/healthz.js +44 -0
  34. package/lib/api/spacer/index.d.ts +15 -0
  35. package/lib/api/spacer/index.js +19 -0
  36. package/lib/api/spacer/items.d.ts +25 -0
  37. package/lib/api/spacer/items.js +55 -0
  38. package/lib/api/spacer/lexicals.d.ts +34 -0
  39. package/lib/api/spacer/lexicals.js +89 -0
  40. package/lib/api/spacer/notebooks.d.ts +34 -0
  41. package/lib/api/spacer/notebooks.js +89 -0
  42. package/lib/api/spacer/spaces.d.ts +84 -0
  43. package/lib/api/spacer/spaces.js +170 -0
  44. package/lib/api/spacer/users.d.ts +9 -0
  45. package/lib/api/spacer/users.js +29 -0
  46. package/lib/chat/Chat.d.ts +1 -1
  47. package/lib/chat/Chat.js +54 -54
  48. package/lib/chat/ChatFloating.d.ts +2 -2
  49. package/lib/chat/ChatFloating.js +136 -25
  50. package/lib/chat/ChatSidebar.js +20 -22
  51. package/lib/chat/base/ChatBase.js +429 -39
  52. package/lib/chat/display/EmptyState.js +21 -21
  53. package/lib/chat/document/EphemeralDocument.d.ts +23 -0
  54. package/lib/chat/document/EphemeralDocument.js +270 -0
  55. package/lib/chat/header/ChatHeaderBase.d.ts +12 -2
  56. package/lib/chat/header/ChatHeaderBase.js +78 -23
  57. package/lib/chat/index.d.ts +1 -0
  58. package/lib/chat/index.js +2 -0
  59. package/lib/chat/notebook/EphemeralNotebook.d.ts +24 -0
  60. package/lib/chat/notebook/EphemeralNotebook.js +252 -0
  61. package/lib/chat/prompt/InputFooter.js +4 -1
  62. package/lib/client/AgentRuntimesClient.d.ts +127 -0
  63. package/lib/client/AgentRuntimesClient.js +36 -0
  64. package/lib/client/AgentsMixin.js +28 -28
  65. package/lib/client/SdkAgentRuntimesClient.d.ts +1 -1
  66. package/lib/client/SdkAgentRuntimesClient.js +1 -1
  67. package/lib/client/mixins/RuntimesMixin.d.ts +93 -0
  68. package/lib/client/mixins/RuntimesMixin.js +229 -0
  69. package/lib/client/mixins/SpacerMixin.d.ts +210 -0
  70. package/lib/client/mixins/SpacerMixin.js +615 -0
  71. package/lib/client/utils/spacerUtils.d.ts +18 -0
  72. package/lib/client/utils/spacerUtils.js +32 -0
  73. package/lib/collaboration/DatalayerCollaboration.d.ts +13 -0
  74. package/lib/collaboration/DatalayerCollaboration.js +28 -0
  75. package/lib/collaboration/DatalayerCollaborationProvider.d.ts +58 -0
  76. package/lib/collaboration/DatalayerCollaborationProvider.js +148 -0
  77. package/lib/collaboration/index.d.ts +2 -0
  78. package/lib/collaboration/index.js +6 -0
  79. package/lib/components/AgentSummary.d.ts +19 -0
  80. package/lib/components/AgentSummary.js +89 -0
  81. package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +13 -0
  82. package/lib/components/a2ui/A2uiSurfaceComposed.js +110 -0
  83. package/lib/components/a2ui/index.d.ts +2 -0
  84. package/lib/components/a2ui/index.js +6 -0
  85. package/lib/components/a2ui/styles.d.ts +14 -0
  86. package/lib/components/a2ui/styles.js +142 -0
  87. package/lib/components/context/SpaceSelect.d.ts +2 -0
  88. package/lib/components/context/SpaceSelect.js +42 -0
  89. package/lib/components/flashes/FlashDisclaimer.d.ts +2 -0
  90. package/lib/components/flashes/FlashDisclaimer.js +17 -0
  91. package/lib/components/icons/ArtifactIcon.d.ts +10 -0
  92. package/lib/components/icons/ArtifactIcon.js +58 -0
  93. package/lib/components/icons/index.d.ts +1 -0
  94. package/lib/components/icons/index.js +5 -0
  95. package/lib/components/index.d.ts +5 -0
  96. package/lib/components/index.js +5 -0
  97. package/lib/components/nbgrader/NbGradesDetails.d.ts +5 -0
  98. package/lib/components/nbgrader/NbGradesDetails.js +19 -0
  99. package/lib/components/nbgrader/index.d.ts +1 -0
  100. package/lib/components/nbgrader/index.js +5 -0
  101. package/lib/components/progress/CreditsIndicator.d.ts +33 -0
  102. package/lib/components/progress/CreditsIndicator.js +23 -0
  103. package/lib/components/progress/index.d.ts +2 -0
  104. package/lib/components/progress/index.js +6 -0
  105. package/lib/components/runtimes/RuntimeCellVariables.d.ts +39 -0
  106. package/lib/components/runtimes/RuntimeCellVariables.js +172 -0
  107. package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +37 -0
  108. package/lib/components/runtimes/RuntimeCellVariablesDialog.js +101 -0
  109. package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +57 -0
  110. package/lib/components/runtimes/RuntimeLauncherDialog.js +275 -0
  111. package/lib/components/runtimes/RuntimePickerBase.d.ts +69 -0
  112. package/lib/components/runtimes/RuntimePickerBase.js +122 -0
  113. package/lib/components/runtimes/RuntimePickerCell.d.ts +34 -0
  114. package/lib/components/runtimes/RuntimePickerCell.js +104 -0
  115. package/lib/components/runtimes/RuntimePickerNotebook.d.ts +42 -0
  116. package/lib/components/runtimes/RuntimePickerNotebook.js +232 -0
  117. package/lib/components/runtimes/RuntimeReservationControl.d.ts +47 -0
  118. package/lib/components/runtimes/RuntimeReservationControl.js +42 -0
  119. package/lib/components/runtimes/RuntimeSimplePicker.d.ts +38 -0
  120. package/lib/components/runtimes/RuntimeSimplePicker.js +155 -0
  121. package/lib/components/runtimes/RuntimeTransfer.d.ts +16 -0
  122. package/lib/components/runtimes/RuntimeTransfer.js +5 -0
  123. package/lib/components/runtimes/RuntimeUtils.d.ts +17 -0
  124. package/lib/components/runtimes/RuntimeUtils.js +178 -0
  125. package/lib/components/runtimes/RuntimeVariables.d.ts +38 -0
  126. package/lib/components/runtimes/RuntimeVariables.js +75 -0
  127. package/lib/components/runtimes/index.d.ts +11 -0
  128. package/lib/components/runtimes/index.js +15 -0
  129. package/lib/components/scheduler/ScheduleMenu.d.ts +54 -0
  130. package/lib/components/scheduler/ScheduleMenu.js +154 -0
  131. package/lib/components/scheduler/index.d.ts +1 -0
  132. package/lib/components/scheduler/index.js +5 -0
  133. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +33 -0
  134. package/lib/components/snapshots/SandboxSnapshotMenu.js +169 -0
  135. package/lib/components/snapshots/index.d.ts +1 -0
  136. package/lib/components/snapshots/index.js +5 -0
  137. package/lib/components/snippets/SnippetDialog.d.ts +42 -0
  138. package/lib/components/snippets/SnippetDialog.js +42 -0
  139. package/lib/components/students/StudentItemStatus.d.ts +7 -0
  140. package/lib/components/students/StudentItemStatus.js +68 -0
  141. package/lib/components/students/index.d.ts +1 -0
  142. package/lib/components/students/index.js +5 -0
  143. package/lib/components/tokens/SpaceVariantToken.d.ts +5 -0
  144. package/lib/components/tokens/SpaceVariantToken.js +23 -0
  145. package/lib/components/tokens/index.d.ts +1 -0
  146. package/lib/components/tokens/index.js +5 -0
  147. package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +4 -0
  148. package/lib/components/toolbars/AssignmentEditorToolbar.js +18 -0
  149. package/lib/components/toolbars/DocumentEditorToolbar.d.ts +2 -0
  150. package/lib/components/toolbars/DocumentEditorToolbar.js +12 -0
  151. package/lib/components/toolbars/NotebookEditorToolbar.d.ts +29 -0
  152. package/lib/components/toolbars/NotebookEditorToolbar.js +30 -0
  153. package/lib/context/ContextInspector.d.ts +1 -14
  154. package/lib/context/ContextInspector.js +3 -73
  155. package/lib/context/CostUsageChart.d.ts +4 -3
  156. package/lib/context/CostUsageChart.js +236 -35
  157. package/lib/context/MessageHistory.d.ts +30 -0
  158. package/lib/context/MessageHistory.js +129 -0
  159. package/lib/context/TokenUsageChart.d.ts +4 -3
  160. package/lib/context/TokenUsageChart.js +180 -30
  161. package/lib/context/TurnGraphChart.d.ts +1 -1
  162. package/lib/context/TurnGraphChart.js +6 -6
  163. package/lib/examples/A2UiAgentExample.d.ts +22 -0
  164. package/lib/examples/A2UiAgentExample.js +442 -0
  165. package/lib/examples/A2UiComponentsGalleryExample.d.ts +3 -0
  166. package/lib/examples/A2UiComponentsGalleryExample.js +863 -0
  167. package/lib/examples/A2UiContactCardExample.js +9 -5
  168. package/lib/examples/A2UiRestaurantExample.js +23 -8
  169. package/lib/examples/A2UiViewerExample.js +75 -3
  170. package/lib/examples/AgUiAgenticExample.d.ts +1 -12
  171. package/lib/examples/AgUiAgenticExample.js +52 -8
  172. package/lib/examples/AgUiBackendToolRenderingExample.d.ts +1 -16
  173. package/lib/examples/AgUiBackendToolRenderingExample.js +32 -17
  174. package/lib/examples/AgUiHaikuGenUiExample.d.ts +1 -17
  175. package/lib/examples/AgUiHaikuGenUiExample.js +49 -33
  176. package/lib/examples/AgUiHumanInTheLoopExample.d.ts +1 -12
  177. package/lib/examples/AgUiHumanInTheLoopExample.js +21 -6
  178. package/lib/examples/AgUiSharedStateExample.d.ts +1 -14
  179. package/lib/examples/AgUiSharedStateExample.js +21 -6
  180. package/lib/examples/AgUiToolsBasedGenUiExample.d.ts +1 -14
  181. package/lib/examples/AgUiToolsBasedGenUiExample.js +21 -6
  182. package/lib/examples/AgentCheckpointsExample.d.ts +1 -1
  183. package/lib/examples/AgentCheckpointsExample.js +9 -10
  184. package/lib/examples/AgentCodemodeExample.js +3 -3
  185. package/lib/examples/AgentEvalsExample.js +5 -5
  186. package/lib/examples/AgentGuardrailsExample.js +17 -12
  187. package/lib/examples/AgentHooksExample.js +14 -55
  188. package/lib/examples/AgentInferenceProviderExample.js +4 -4
  189. package/lib/examples/AgentLoopExample.d.ts +10 -0
  190. package/lib/examples/AgentLoopExample.js +304 -0
  191. package/lib/examples/AgentMCPExample.js +7 -7
  192. package/lib/examples/AgentMemoryExample.js +4 -4
  193. package/lib/examples/AgentMonitoringExample.js +114 -44
  194. package/lib/examples/AgentNotificationsExample.js +4 -4
  195. package/lib/examples/AgentOtelExample.d.ts +3 -3
  196. package/lib/examples/AgentOtelExample.js +15 -10
  197. package/lib/examples/AgentOutputsExample.js +6 -6
  198. package/lib/examples/AgentParametersExample.js +21 -33
  199. package/lib/examples/AgentSandboxExample.js +5 -5
  200. package/lib/examples/AgentSkillsExample.js +7 -7
  201. package/lib/examples/AgentSubagentsExample.js +4 -4
  202. package/lib/examples/AgentToolApprovalsExample.js +5 -5
  203. package/lib/examples/AgentTriggersExample.js +9 -9
  204. package/lib/examples/AgentspecsExample.js +63 -41
  205. package/lib/examples/ChatCustomExample.js +23 -77
  206. package/lib/examples/ChatExample.js +13 -44
  207. package/lib/examples/LexicalAgentExample.js +43 -91
  208. package/lib/examples/LexicalAgentSidebarExample.js +45 -73
  209. package/lib/examples/NotebookAgentExample.js +52 -81
  210. package/lib/examples/NotebookAgentSidebarExample.js +43 -71
  211. package/lib/examples/NotebookCollaborationExample.js +11 -9
  212. package/lib/examples/NotebookExample.js +5 -2
  213. package/lib/examples/components/AuthRequiredView.js +1 -1
  214. package/lib/examples/components/ExampleErrorBoundary.d.ts +46 -0
  215. package/lib/examples/components/ExampleErrorBoundary.js +67 -0
  216. package/lib/examples/components/haiku/haiku-card.css +11 -0
  217. package/lib/examples/components/weather/weather-card.css +11 -0
  218. package/lib/examples/example-selector.js +3 -1
  219. package/lib/examples/hooks/useExampleAgentRuntime.d.ts +35 -0
  220. package/lib/examples/hooks/useExampleAgentRuntime.js +82 -0
  221. package/lib/examples/hooks/useSpecRenderToolResult.d.ts +30 -0
  222. package/lib/examples/hooks/useSpecRenderToolResult.js +61 -0
  223. package/lib/examples/index.d.ts +3 -1
  224. package/lib/examples/index.js +3 -1
  225. package/lib/examples/main.js +340 -93
  226. package/lib/examples/utils/a2ui.d.ts +2 -0
  227. package/lib/examples/utils/a2ui.js +97 -2
  228. package/lib/examples/utils/agentSummaryStore.d.ts +21 -0
  229. package/lib/examples/utils/agentSummaryStore.js +23 -0
  230. package/lib/examples/utils/notebooks/Empty.ipynb.json +30 -30
  231. package/lib/examples/utils/runtimeTargetStore.d.ts +9 -0
  232. package/lib/examples/utils/runtimeTargetStore.js +27 -0
  233. package/lib/examples/utils/teardownAgents.d.ts +13 -0
  234. package/lib/examples/utils/teardownAgents.js +78 -0
  235. package/lib/examples/utils/useExampleAgentRuntimesUrl.d.ts +2 -0
  236. package/lib/examples/utils/useExampleAgentRuntimesUrl.js +26 -7
  237. package/lib/examples2/CellExample.d.ts +6 -0
  238. package/lib/examples2/CellExample.js +20 -0
  239. package/lib/examples2/DatalayerNotebookExample.d.ts +16 -0
  240. package/lib/examples2/DatalayerNotebookExample.js +109 -0
  241. package/lib/examples2/NativeNavigationExample.d.ts +8 -0
  242. package/lib/examples2/NativeNavigationExample.js +97 -0
  243. package/lib/examples2/NotebookExample.d.ts +6 -0
  244. package/lib/examples2/NotebookExample.js +19 -0
  245. package/lib/examples2/NotebookMutationsKernel.d.ts +2 -0
  246. package/lib/examples2/NotebookMutationsKernel.js +105 -0
  247. package/lib/examples2/NotebookMutationsServiceManager.d.ts +2 -0
  248. package/lib/examples2/NotebookMutationsServiceManager.js +109 -0
  249. package/lib/examples2/ReactRouterExample.d.ts +6 -0
  250. package/lib/examples2/ReactRouterExample.js +175 -0
  251. package/lib/examples2/example-selector.d.ts +22 -0
  252. package/lib/examples2/example-selector.js +45 -0
  253. package/lib/examples2/index.d.ts +2 -0
  254. package/lib/examples2/index.js +6 -0
  255. package/lib/examples2/lexical-theme.css +436 -0
  256. package/lib/examples2/main.d.ts +2 -0
  257. package/lib/examples2/main.js +330 -0
  258. package/lib/examples2/notebooks/IPyWidgetsExample.ipynb.json +101 -0
  259. package/lib/examples2/notebooks/IPyWidgetsExampleWithState.ipynb.json +112 -0
  260. package/lib/examples2/notebooks/Lite.ipynb.json +128 -0
  261. package/lib/examples2/notebooks/Matplotlib.ipynb.json +137 -0
  262. package/lib/examples2/notebooks/NotebookExample1.ipynb.json +126 -0
  263. package/lib/examples2/notebooks/NotebookExample2.ipynb.json +48 -0
  264. package/lib/examples2/notebooks/NotebookOutputs.ipynb.json +49 -0
  265. package/lib/examples2/notebooks/NotebookToCExample.ipynb.json +102 -0
  266. package/lib/examples2/notebooks/OutputIPyWidgetsExample.d.ts +145 -0
  267. package/lib/examples2/notebooks/OutputIPyWidgetsExample.js +153 -0
  268. package/lib/examples2/notebooks/PyGWalker.ipynb.json +55 -0
  269. package/lib/hooks/index.d.ts +9 -1
  270. package/lib/hooks/index.js +13 -1
  271. package/lib/hooks/useAIAgentsWebSocket.d.ts +1 -1
  272. package/lib/hooks/useAIAgentsWebSocket.js +39 -3
  273. package/lib/hooks/useAgentRuntimes.d.ts +15 -3
  274. package/lib/hooks/useAgentRuntimes.js +186 -27
  275. package/lib/hooks/useAgentsService.js +5 -5
  276. package/lib/hooks/useCellOutputshot.d.ts +4 -0
  277. package/lib/hooks/useCellOutputshot.js +25 -0
  278. package/lib/hooks/useCheckpoints.d.ts +8 -8
  279. package/lib/hooks/useCheckpoints.js +36 -26
  280. package/lib/hooks/useConfig.d.ts +1 -1
  281. package/lib/hooks/useMonitoring.d.ts +7 -5
  282. package/lib/hooks/useMonitoring.js +16 -10
  283. package/lib/hooks/useNotifications.d.ts +11 -11
  284. package/lib/hooks/useNotifications.js +1 -1
  285. package/lib/hooks/useProgressStore.d.ts +25 -0
  286. package/lib/hooks/useProgressStore.js +58 -0
  287. package/lib/hooks/useProgressTask.d.ts +9 -0
  288. package/lib/hooks/useProgressTask.js +41 -0
  289. package/lib/hooks/useProjects.d.ts +628 -0
  290. package/lib/hooks/useProjects.js +190 -0
  291. package/lib/hooks/useRuntimes.d.ts +5 -0
  292. package/lib/hooks/useRuntimes.js +34 -0
  293. package/lib/hooks/useToolApprovals.d.ts +6 -6
  294. package/lib/index.d.ts +1 -0
  295. package/lib/index.js +1 -0
  296. package/lib/jupyter/exec/Python.d.ts +5 -0
  297. package/lib/jupyter/exec/Python.js +100 -0
  298. package/lib/jupyter/exec/Snippets.d.ts +105 -0
  299. package/lib/jupyter/exec/Snippets.js +101 -0
  300. package/lib/jupyter/exec/index.d.ts +2 -0
  301. package/lib/jupyter/exec/index.js +6 -0
  302. package/lib/jupyter/index.d.ts +2 -0
  303. package/lib/jupyter/index.js +6 -0
  304. package/lib/jupyter/kernelsHandler.d.ts +8 -0
  305. package/lib/jupyter/kernelsHandler.js +39 -0
  306. package/lib/mocks/models/CourseMock.d.ts +6 -0
  307. package/lib/mocks/models/CourseMock.js +29 -0
  308. package/lib/mocks/models/SpaceMock.d.ts +6 -0
  309. package/lib/mocks/models/SpaceMock.js +25 -0
  310. package/lib/models/Assignment.d.ts +7 -0
  311. package/lib/models/Assignment.js +5 -0
  312. package/lib/models/Cell.d.ts +8 -0
  313. package/lib/models/Cell.js +5 -0
  314. package/lib/models/CodeBlock.d.ts +10 -0
  315. package/lib/models/CodeBlock.js +5 -0
  316. package/lib/models/CodeSandboxSnapshot.d.ts +92 -0
  317. package/lib/models/CodeSandboxSnapshot.js +13 -0
  318. package/lib/models/CodeSandboxSnapshotDTO.d.ts +173 -0
  319. package/lib/models/CodeSandboxSnapshotDTO.js +139 -0
  320. package/lib/models/CodefeedBlocks.d.ts +7 -0
  321. package/lib/models/CodefeedBlocks.js +5 -0
  322. package/lib/models/Content.d.ts +5 -0
  323. package/lib/models/Content.js +5 -0
  324. package/lib/models/Course.d.ts +17 -0
  325. package/lib/models/Course.js +5 -0
  326. package/lib/models/Dataset.d.ts +16 -0
  327. package/lib/models/Dataset.js +5 -0
  328. package/lib/models/Document.d.ts +8 -0
  329. package/lib/models/Document.js +5 -0
  330. package/lib/models/Environment.d.ts +86 -0
  331. package/lib/models/Environment.js +5 -0
  332. package/lib/models/EnvironmentDTO.d.ts +125 -0
  333. package/lib/models/EnvironmentDTO.js +88 -0
  334. package/lib/models/Exercise.d.ts +16 -0
  335. package/lib/models/Exercise.js +5 -0
  336. package/lib/models/Item.d.ts +20 -0
  337. package/lib/models/Item.js +5 -0
  338. package/lib/models/ItemDTO.d.ts +74 -0
  339. package/lib/models/ItemDTO.js +186 -0
  340. package/lib/models/ItemType.d.ts +2 -0
  341. package/lib/models/ItemType.js +5 -0
  342. package/lib/models/Lesson.d.ts +5 -0
  343. package/lib/models/Lesson.js +5 -0
  344. package/lib/models/LexicalDTO.d.ts +155 -0
  345. package/lib/models/LexicalDTO.js +157 -0
  346. package/lib/models/Library.d.ts +10 -0
  347. package/lib/models/Library.js +5 -0
  348. package/lib/models/Notebook.d.ts +11 -0
  349. package/lib/models/Notebook.js +5 -0
  350. package/lib/models/NotebookDTO.d.ts +96 -0
  351. package/lib/models/NotebookDTO.js +153 -0
  352. package/lib/models/Page.d.ts +41 -0
  353. package/lib/models/Page.js +25 -0
  354. package/lib/models/PageTag.d.ts +19 -0
  355. package/lib/models/PageTag.js +94 -0
  356. package/lib/models/ProjectDTO.d.ts +89 -0
  357. package/lib/models/ProjectDTO.js +131 -0
  358. package/lib/models/Runtime.d.ts +160 -0
  359. package/lib/models/Runtime.js +18 -0
  360. package/lib/models/RuntimeDTO.d.ts +172 -0
  361. package/lib/models/RuntimeDTO.js +204 -0
  362. package/lib/models/Space.d.ts +35 -0
  363. package/lib/models/Space.js +66 -0
  364. package/lib/models/SpaceDTO.d.ts +334 -0
  365. package/lib/models/SpaceDTO.js +244 -0
  366. package/lib/models/SpaceItem.d.ts +10 -0
  367. package/lib/models/SpaceItem.js +5 -0
  368. package/lib/models/SpaceMember.d.ts +6 -0
  369. package/lib/models/SpaceMember.js +5 -0
  370. package/lib/models/StudentItem.d.ts +21 -0
  371. package/lib/models/StudentItem.js +5 -0
  372. package/lib/models/index.d.ts +32 -0
  373. package/lib/models/index.js +39 -0
  374. package/lib/protocols/AGUIAdapter.js +1 -1
  375. package/lib/runtimes/actions.d.ts +102 -0
  376. package/lib/runtimes/actions.js +249 -0
  377. package/lib/runtimes/apis.d.ts +273 -0
  378. package/lib/runtimes/apis.js +5 -0
  379. package/lib/runtimes/index.d.ts +5 -0
  380. package/lib/runtimes/index.js +9 -0
  381. package/lib/runtimes/settings.d.ts +15 -0
  382. package/lib/runtimes/settings.js +31 -0
  383. package/lib/runtimes/snapshots.d.ts +25 -0
  384. package/lib/runtimes/snapshots.js +150 -0
  385. package/lib/runtimes/utils.d.ts +7 -0
  386. package/lib/runtimes/utils.js +14 -0
  387. package/lib/services/DatalayerServiceManager.d.ts +23 -0
  388. package/lib/services/DatalayerServiceManager.js +90 -0
  389. package/lib/services/reconnectToRuntime.d.ts +32 -0
  390. package/lib/services/reconnectToRuntime.js +59 -0
  391. package/lib/services/sandboxServiceManagers.d.ts +31 -0
  392. package/lib/services/sandboxServiceManagers.js +57 -0
  393. package/lib/specs/agents/agents.d.ts +70 -26
  394. package/lib/specs/agents/agents.js +3994 -1639
  395. package/lib/specs/index.d.ts +1 -0
  396. package/lib/specs/index.js +1 -0
  397. package/lib/specs/loops.d.ts +34 -0
  398. package/lib/specs/loops.js +188 -0
  399. package/lib/specs/mcpServers.d.ts +1 -0
  400. package/lib/specs/mcpServers.js +17 -0
  401. package/lib/specs/models.d.ts +4 -0
  402. package/lib/specs/models.js +30 -0
  403. package/lib/specs/skills.d.ts +1 -0
  404. package/lib/specs/skills.js +18 -0
  405. package/lib/specs/tools.d.ts +15 -0
  406. package/lib/specs/tools.js +285 -0
  407. package/lib/state/index.d.ts +4 -0
  408. package/lib/state/index.js +10 -0
  409. package/lib/state/substates/CellState.d.ts +12 -0
  410. package/lib/state/substates/CellState.js +22 -0
  411. package/lib/state/substates/DocumentState.d.ts +10 -0
  412. package/lib/state/substates/DocumentState.js +14 -0
  413. package/lib/state/substates/GradeState.d.ts +10 -0
  414. package/lib/state/substates/GradeState.js +14 -0
  415. package/lib/state/substates/JupyterLabState.d.ts +16 -0
  416. package/lib/state/substates/JupyterLabState.js +17 -0
  417. package/lib/state/substates/NbformatState.d.ts +13 -0
  418. package/lib/state/substates/NbformatState.js +16 -0
  419. package/lib/state/substates/RuntimesState.d.ts +87 -0
  420. package/lib/state/substates/RuntimesState.js +192 -0
  421. package/lib/state/substates/SpaceState.d.ts +11 -0
  422. package/lib/state/substates/SpaceState.js +16 -0
  423. package/lib/state/substates/index.d.ts +8 -0
  424. package/lib/state/substates/index.js +14 -0
  425. package/lib/stores/agentRuntimeStore.d.ts +25 -2
  426. package/lib/stores/agentRuntimeStore.js +114 -19
  427. package/lib/stories/Button.stories.d.ts +1 -1
  428. package/lib/stories/Header.stories.d.ts +3 -3
  429. package/lib/test-setup.js +10 -0
  430. package/lib/types/agents-lifecycle.d.ts +5 -5
  431. package/lib/types/agents.d.ts +3 -3
  432. package/lib/types/agentspecs.d.ts +3 -1
  433. package/lib/types/chat.d.ts +135 -3
  434. package/lib/types/config.d.ts +19 -1
  435. package/lib/types/index.d.ts +1 -0
  436. package/lib/types/index.js +1 -0
  437. package/lib/types/loops.d.ts +64 -0
  438. package/lib/types/loops.js +5 -0
  439. package/lib/types/tools.d.ts +16 -0
  440. package/lib/utils/Cells.d.ts +2 -0
  441. package/lib/utils/Cells.js +28 -0
  442. package/package.json +24 -18
  443. package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
  444. package/scripts/codegen/generate_agents.py +21 -4
  445. package/scripts/codegen/generate_loops.py +443 -0
  446. package/lib/examples/A2UiComponentGalleryExample.d.ts +0 -3
  447. package/lib/examples/A2UiComponentGalleryExample.js +0 -361
  448. /package/lib/{agent-lexical-main.d.ts → agent-document-main.d.ts} +0 -0
@@ -0,0 +1,192 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import { useStore } from 'zustand';
6
+ import { createStore } from 'zustand/vanilla';
7
+ import { JSONExt } from '@lumino/coreutils';
8
+ import { Poll } from '@lumino/polling';
9
+ import { getRuntimes } from '../../runtimes';
10
+ import { coreStore } from '@datalayer/core/lib/state/substates/CoreState';
11
+ import { iamStore } from '@datalayer/core/lib/state/substates/IAMState';
12
+ /**
13
+ * Kernel store
14
+ */
15
+ export const runtimesStore = createStore((set, get) => {
16
+ return {
17
+ configuration: {
18
+ maxNotebookRuntimes: 5,
19
+ maxCellRuntimes: 3,
20
+ },
21
+ setConfiguration: (configuration) => {
22
+ set(state => JSONExt.deepEqual(state.configuration, configuration)
23
+ ? {}
24
+ : { configuration: { ...configuration } });
25
+ },
26
+ runtimesUrl: coreStore.getState().configuration?.runtimesUrl,
27
+ tab: 0.0,
28
+ getIntTab: () => Math.floor(get().tab),
29
+ setTab: (tab) => set(state => ({ tab })),
30
+ /**
31
+ * Remote runtime pods.
32
+ */
33
+ runtimePods: [],
34
+ /**
35
+ * Refresh the runtime pods.
36
+ */
37
+ refreshRuntimePods: async () => {
38
+ const servers = await getRuntimes();
39
+ // Update the state with the Remote Kernels.
40
+ if (!JSONExt.deepEqual(get().runtimePods, servers)) {
41
+ set({ runtimePods: [...servers] });
42
+ }
43
+ },
44
+ /**
45
+ * Remove a runtime pod by its pod name.
46
+ */
47
+ removeRuntimePod: (podName) => {
48
+ if (!podName) {
49
+ return;
50
+ }
51
+ const current = get().runtimePods;
52
+ const next = current.filter(pod => pod.pod_name !== podName);
53
+ if (next.length !== current.length) {
54
+ set({ runtimePods: next });
55
+ }
56
+ },
57
+ /**
58
+ * Cached runtime models.
59
+ */
60
+ runtimeModels: [],
61
+ /**
62
+ * Add a runtime model
63
+ */
64
+ addRuntimeModel: (model) => {
65
+ const kernels = get().runtimeModels;
66
+ // Identity check: a runtime may not have a kernel `id` yet (it appears
67
+ // only once a kernel is attached), so fall back to the stable pod `uid`.
68
+ // See the IRuntimeModel / IRuntimePod / Kernel.IModel docs in models/Runtime.ts.
69
+ const index = kernels.findIndex(m => (model.id && model.id === m.id) ||
70
+ (!!model.uid && model.uid === m.uid));
71
+ if (index < 0) {
72
+ set({ runtimeModels: [...kernels, model] });
73
+ }
74
+ },
75
+ /**
76
+ * Remove a runtime model by ID.
77
+ */
78
+ removeRuntimeModel: (id) => {
79
+ const kernels = [...get().runtimeModels];
80
+ const index = kernels?.findIndex(model => id === model.id) ?? -1;
81
+ if (index >= 0) {
82
+ kernels.splice(index, 1);
83
+ set({ runtimeModels: kernels });
84
+ }
85
+ },
86
+ setRuntimeModels: (models) => {
87
+ if (!JSONExt.deepEqual(get().runtimeModels, models)) {
88
+ set({ runtimeModels: [...models] });
89
+ }
90
+ },
91
+ multiServiceManager: undefined,
92
+ setMultiServiceManager: multiServiceManager => {
93
+ set(state => ({ multiServiceManager }));
94
+ },
95
+ showDisclaimer: false,
96
+ setShowDisclaimer: showDisclaimer => {
97
+ set(state => ({ showDisclaimer }));
98
+ },
99
+ /**
100
+ * Kernel Snapshots.
101
+ */
102
+ runtimeSnapshots: [],
103
+ /**
104
+ * Add a Kernel Snapshot
105
+ */
106
+ addSandboxSnapshot: (snapshot) => {
107
+ const snapshots = get().runtimeSnapshots;
108
+ const index = snapshots.findIndex(s => s.id === snapshot.id);
109
+ if (index < 0) {
110
+ const kernelSnapshots = [...snapshots, snapshot];
111
+ set({ runtimeSnapshots: kernelSnapshots });
112
+ }
113
+ else if (!JSONExt.deepEqual(snapshots[index], snapshot)) {
114
+ const kernelSnapshots = [...snapshots];
115
+ kernelSnapshots.splice(index, 1, snapshot);
116
+ set({ runtimeSnapshots: kernelSnapshots });
117
+ }
118
+ },
119
+ /**
120
+ * Remove a Kernel Snapshot.
121
+ */
122
+ removeSandboxSnapshot: (id) => {
123
+ const snapshots = get().runtimeSnapshots;
124
+ const index = snapshots.findIndex(s => s.id === id);
125
+ if (index >= 0) {
126
+ const kernelSnapshots = [...snapshots];
127
+ kernelSnapshots.splice(index, 1);
128
+ set({ runtimeSnapshots: kernelSnapshots });
129
+ }
130
+ },
131
+ /**
132
+ * Set Kernel Snapshots.
133
+ */
134
+ setSandboxSnapshots: (snapshots) => {
135
+ if (!JSONExt.deepEqual(get().runtimeSnapshots, snapshots)) {
136
+ set({ runtimeSnapshots: [...snapshots] });
137
+ }
138
+ },
139
+ version: '',
140
+ setVersion: version => {
141
+ if (version && !get().version) {
142
+ set(state => ({ version }));
143
+ }
144
+ },
145
+ };
146
+ });
147
+ // Poll remote kernels
148
+ const kernelsPoll = new Poll({
149
+ auto: true,
150
+ factory: () => runtimesStore.getState().refreshRuntimePods(),
151
+ frequency: {
152
+ interval: 61 * 1000,
153
+ backoff: true,
154
+ max: 300 * 1000,
155
+ },
156
+ name: '@datalayer/jupyter-kernels:KernelsManager#kernels',
157
+ standby: () => iamStore.getState().token || runtimesStore.getState().runtimesUrl
158
+ ? 'when-hidden'
159
+ : true,
160
+ });
161
+ // Force refresh at expiration date if next tick is after it.
162
+ runtimesStore.subscribe((state, prevState) => {
163
+ if (!JSONExt.deepEqual(state.runtimePods, prevState.runtimePods)) {
164
+ const now = Date.now();
165
+ const minExpiredAt = Math.min(...state.runtimePods.map(kernel => kernel.expired_at ? parseFloat(kernel.expired_at) : Infinity)) * 1_000;
166
+ // Refresh 2 sec after the closest expiration time
167
+ // to let some times to the system to dispose the resources.
168
+ if (now + kernelsPoll.frequency.interval > minExpiredAt + 2_000) {
169
+ setTimeout(() => {
170
+ kernelsPoll.refresh();
171
+ }, minExpiredAt + 2_000 - now);
172
+ }
173
+ }
174
+ });
175
+ coreStore.subscribe((state, prevState) => {
176
+ if (state.configuration.runtimesUrl &&
177
+ state.configuration.runtimesUrl !== prevState.configuration.runtimesUrl) {
178
+ const runtimesUrl = state.configuration.runtimesUrl;
179
+ console.log(`Updating runtimesUrl with new value ${runtimesUrl}`);
180
+ runtimesStore.setState({ runtimesUrl });
181
+ kernelsPoll
182
+ .refresh()
183
+ .then(() => kernelsPoll.tick)
184
+ .catch(reason => {
185
+ console.error('Failed to refresh kernel servers list following service URL changed.', reason);
186
+ });
187
+ }
188
+ });
189
+ export function useRuntimesStore(selector) {
190
+ return useStore(runtimesStore, selector);
191
+ }
192
+ export default useRuntimesStore;
@@ -0,0 +1,11 @@
1
+ type IBaseSpace = Record<string, any>;
2
+ export type ISpaceState = {
3
+ spaces: IBaseSpace[];
4
+ };
5
+ export type SpaceState = ISpaceState & {
6
+ updateSpaces: (spaces: IBaseSpace[]) => void;
7
+ };
8
+ export declare const spaceStore: import("zustand").StoreApi<SpaceState>;
9
+ export declare function useSpaceStore(): SpaceState;
10
+ export declare function useSpaceStore<T>(selector: (state: SpaceState) => T): T;
11
+ export default useSpaceStore;
@@ -0,0 +1,16 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import { createStore } from 'zustand/vanilla';
6
+ import { useStore } from 'zustand';
7
+ export const spaceStore = createStore((set, get) => ({
8
+ spaces: [],
9
+ updateSpaces: (spaces) => set((state) => ({
10
+ spaces,
11
+ })),
12
+ }));
13
+ export function useSpaceStore(selector) {
14
+ return useStore(spaceStore, selector);
15
+ }
16
+ export default useSpaceStore;
@@ -0,0 +1,8 @@
1
+ export * from './CellState';
2
+ export * from './DocumentState';
3
+ export * from './GradeState';
4
+ export * from './NbformatState';
5
+ export * from './RuntimesState';
6
+ export * from './JupyterLabState';
7
+ export * from './SpaceState';
8
+ export { coreStore, useCoreStore, iamStore, useIAMStore, layoutStore, useLayoutStore, organizationStore, useOrganizationStore, surveysStore, useSurveysStore, teamStore, useTeamStore, datasourceStore, useDatasourceStore, runStore, useRunStore, DATALAYER_IAM_TOKEN_KEY, DATALAYER_IAM_USER_KEY, } from '@datalayer/core/lib/state';
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ // Moved runtime + content substates (owned by agent-runtimes).
6
+ export * from './CellState';
7
+ export * from './DocumentState';
8
+ export * from './GradeState';
9
+ export * from './NbformatState';
10
+ export * from './RuntimesState';
11
+ export * from './JupyterLabState';
12
+ export * from './SpaceState';
13
+ // Re-export the identity/plans/layout state that stays in core.
14
+ export { coreStore, useCoreStore, iamStore, useIAMStore, layoutStore, useLayoutStore, organizationStore, useOrganizationStore, surveysStore, useSurveysStore, teamStore, useTeamStore, datasourceStore, useDatasourceStore, runStore, useRunStore, DATALAYER_IAM_TOKEN_KEY, DATALAYER_IAM_USER_KEY, } from '@datalayer/core/lib/state';
@@ -1,10 +1,12 @@
1
1
  import type { ServiceManager } from '@jupyterlab/services';
2
- import type { IRuntimeOptions } from '@datalayer/core/lib/stateful/runtimes/apis';
2
+ import type { INotebookContent } from '@jupyterlab/nbformat';
3
+ import type { IRuntimeOptions } from '../runtimes/apis';
3
4
  import type { AgentStatus, AgentConnection, AgentConfig, Protocol } from '../types';
4
5
  import type { AgentStreamSnapshotPayload, AgentStreamToolApprovalPayload, CodemodeStatusData } from '../types/stream';
5
6
  import type { ContextSnapshotData } from '../types/context';
6
7
  import type { McpToolsetsStatusResponse } from '../types/mcp';
7
8
  import type { LoadedSkillInfo } from '../types/skills';
9
+ import type { EphemeralSurfaceMode } from '../types/chat';
8
10
  /**
9
11
  * A URL-addressable agent that has been previously connected.
10
12
  * May originate from an agent runtime pod OR from the stable agents service.
@@ -59,6 +61,19 @@ export interface AgentRuntimeStoreState {
59
61
  fullContext: Record<string, unknown> | null;
60
62
  monitoringCache: Record<string, MonitoringCacheEntry>;
61
63
  loadedSkillsByAgentId: Record<string, LoadedSkillInfo[]>;
64
+ ephemeralNotebookModels: Record<string, INotebookContent>;
65
+ /**
66
+ * Persisted in-memory ephemeral document (Lexical) editor states, keyed by
67
+ * document id. The value is a serialized Lexical editor state (JSON string)
68
+ * so the document survives navigation away from and back to a runtime page.
69
+ */
70
+ ephemeralDocumentModels: Record<string, string>;
71
+ /**
72
+ * Persisted companion editor choice (`none` | `notebook` | `document`) keyed
73
+ * by runtime id, so the chosen editor is restored when navigating away from
74
+ * and back to a runtime page.
75
+ */
76
+ editorModeByRuntime: Record<string, EphemeralSurfaceMode>;
62
77
  }
63
78
  export interface AgentRuntimeStoreActions {
64
79
  upsertAgent: (agent: Partial<AgentRegistryEntry> & {
@@ -75,6 +90,14 @@ export interface AgentRuntimeStoreActions {
75
90
  setLoadedSkillsForAgent: (agentId: string, skills: LoadedSkillInfo[]) => void;
76
91
  getLoadedSkillsForAgent: (agentId: string) => LoadedSkillInfo[];
77
92
  clearLoadedSkillsForAgent: (agentId: string) => void;
93
+ setEphemeralNotebookModel: (notebookId: string, model: INotebookContent) => void;
94
+ getEphemeralNotebookModel: (notebookId: string) => INotebookContent | null;
95
+ clearEphemeralNotebookModel: (notebookId: string) => void;
96
+ setEphemeralDocumentModel: (documentId: string, model: string) => void;
97
+ getEphemeralDocumentModel: (documentId: string) => string | null;
98
+ clearEphemeralDocumentModel: (documentId: string) => void;
99
+ setEditorMode: (runtimeId: string, mode: EphemeralSurfaceMode) => void;
100
+ getEditorMode: (runtimeId: string) => EphemeralSurfaceMode | null;
78
101
  launchAgent: (options: LaunchAgentOptions) => Promise<AgentConnection>;
79
102
  connectAgent: (connection: {
80
103
  podName: string;
@@ -136,7 +159,7 @@ export interface AgentRuntimeStoreActions {
136
159
  export type AgentRuntimeStore = AgentRuntimeStoreState & AgentRuntimeStoreActions;
137
160
  export interface LaunchAgentOptions extends IRuntimeOptions {
138
161
  /** Optional runtimes API base URL override for runtime creation. */
139
- runtimesRunUrl?: string;
162
+ runtimesUrl?: string;
140
163
  }
141
164
  export declare const agentRuntimeStore: Omit<Omit<import("zustand").StoreApi<AgentRuntimeStore>, "subscribe"> & {
142
165
  subscribe: {
@@ -42,26 +42,51 @@ function getTransportEndpoint(baseUrl, transport, agentId) {
42
42
  }
43
43
  }
44
44
  async function createAgentOnRuntime(agentBaseUrl, agentId, config = {}) {
45
- if (!config.protocol) {
45
+ if (!config.protocol && !config.agentSpecId) {
46
46
  throw new Error('Agent protocol is required. Provide config.protocol from the selected spec/config.');
47
47
  }
48
- const transport = config.protocol;
49
- if (!config.model) {
48
+ const transport = config.protocol || 'vercel-ai';
49
+ if (!config.model && !config.agentSpecId) {
50
50
  throw new Error('Agent model is required. Provide config.model from the selected spec/config.');
51
51
  }
52
+ const payload = {
53
+ name: config.name || agentId,
54
+ description: config.description || 'AI assistant',
55
+ agent_library: config.agentLibrary || 'pydantic-ai',
56
+ transport,
57
+ model: config.model,
58
+ system_prompt: config.systemPrompt || 'You are a helpful AI assistant.',
59
+ };
60
+ if (config.agentSpecId) {
61
+ payload.agent_spec_id = config.agentSpecId;
62
+ }
63
+ if (typeof config.enableSkills === 'boolean') {
64
+ payload.enable_skills = config.enableSkills;
65
+ }
66
+ if (Array.isArray(config.tools)) {
67
+ payload.tools = config.tools;
68
+ }
69
+ if (config.inferenceProvider) {
70
+ payload.inferenceProvider = config.inferenceProvider;
71
+ }
72
+ if (typeof config.enableCodemode === 'boolean') {
73
+ payload.enable_codemode = config.enableCodemode;
74
+ }
75
+ if (config.sandboxVariant) {
76
+ payload.sandbox_variant = config.sandboxVariant;
77
+ }
78
+ if (config.jupyterSandbox) {
79
+ payload.jupyter_sandbox = config.jupyterSandbox;
80
+ }
81
+ if (config.createPayload && typeof config.createPayload === 'object') {
82
+ Object.assign(payload, config.createPayload);
83
+ }
52
84
  const response = await fetch(`${agentBaseUrl}/api/v1/agents`, {
53
85
  method: 'POST',
54
86
  headers: { 'Content-Type': 'application/json' },
55
- body: JSON.stringify({
56
- name: config.name || agentId,
57
- description: config.description || 'AI assistant',
58
- agent_library: config.agentLibrary || 'pydantic-ai',
59
- transport,
60
- model: config.model,
61
- system_prompt: config.systemPrompt || 'You are a helpful AI assistant.',
62
- }),
87
+ body: JSON.stringify(payload),
63
88
  });
64
- if (response.ok || response.status === 400) {
89
+ if (response.ok || response.status === 400 || response.status === 409) {
65
90
  const endpoint = getTransportEndpoint(agentBaseUrl, transport, agentId);
66
91
  return { agentId, endpoint, isReady: true };
67
92
  }
@@ -89,6 +114,11 @@ const initialWsState = {
89
114
  monitoringCache: {},
90
115
  loadedSkillsByAgentId: {},
91
116
  };
117
+ const initialNotebookState = {
118
+ ephemeralNotebookModels: {},
119
+ ephemeralDocumentModels: {},
120
+ editorModeByRuntime: {},
121
+ };
92
122
  const countPendingApprovals = (approvals) => approvals.filter(approval => approval.status === 'pending').length;
93
123
  // ---------------------------------------------------------------------------
94
124
  // Store
@@ -207,6 +237,54 @@ export const agentRuntimeStore = createStore()(subscribeWithSelector(persist((se
207
237
  return { loadedSkillsByAgentId: remaining };
208
238
  });
209
239
  },
240
+ setEphemeralNotebookModel: (notebookId, model) => {
241
+ set(state => ({
242
+ ephemeralNotebookModels: {
243
+ ...state.ephemeralNotebookModels,
244
+ [notebookId]: model,
245
+ },
246
+ }));
247
+ },
248
+ getEphemeralNotebookModel: notebookId => get().ephemeralNotebookModels[notebookId] ?? null,
249
+ clearEphemeralNotebookModel: notebookId => {
250
+ set(state => {
251
+ if (!(notebookId in state.ephemeralNotebookModels)) {
252
+ return {};
253
+ }
254
+ const { [notebookId]: _removed, ...remaining } = state.ephemeralNotebookModels;
255
+ return { ephemeralNotebookModels: remaining };
256
+ });
257
+ },
258
+ setEphemeralDocumentModel: (documentId, model) => {
259
+ set(state => ({
260
+ ephemeralDocumentModels: {
261
+ ...state.ephemeralDocumentModels,
262
+ [documentId]: model,
263
+ },
264
+ }));
265
+ },
266
+ getEphemeralDocumentModel: documentId => get().ephemeralDocumentModels[documentId] ?? null,
267
+ clearEphemeralDocumentModel: documentId => {
268
+ set(state => {
269
+ if (!(documentId in state.ephemeralDocumentModels)) {
270
+ return {};
271
+ }
272
+ const { [documentId]: _removed, ...remaining } = state.ephemeralDocumentModels;
273
+ return { ephemeralDocumentModels: remaining };
274
+ });
275
+ },
276
+ setEditorMode: (runtimeId, mode) => {
277
+ if (!runtimeId) {
278
+ return;
279
+ }
280
+ set(state => ({
281
+ editorModeByRuntime: {
282
+ ...state.editorModeByRuntime,
283
+ [runtimeId]: mode,
284
+ },
285
+ }));
286
+ },
287
+ getEditorMode: runtimeId => get().editorModeByRuntime[runtimeId] ?? null,
210
288
  // ── Runtime connection ────────────────────────────────────────
211
289
  ...initialRuntimeState,
212
290
  connectAgent: connection => {
@@ -233,14 +311,14 @@ export const agentRuntimeStore = createStore()(subscribeWithSelector(persist((se
233
311
  launchAgent: async (config) => {
234
312
  set({ status: 'launching', error: null, isLaunching: true });
235
313
  try {
236
- const { createRuntime } = await import('@datalayer/core/lib/api');
237
- const { runtimesStore } = await import('@datalayer/core/lib/state');
238
- if (config.runtimesRunUrl) {
314
+ const { createRuntime } = await import('../runtimes/actions');
315
+ const { runtimesStore } = await import('../state/substates');
316
+ if (config.runtimesUrl) {
239
317
  runtimesStore.setState({
240
- runtimesRunUrl: config.runtimesRunUrl,
318
+ runtimesUrl: config.runtimesUrl,
241
319
  });
242
320
  }
243
- const { runtimesRunUrl: _runtimesRunUrl, ...runtimeOptions } = config;
321
+ const { runtimesUrl: _runtimesUrl, ...runtimeOptions } = config;
244
322
  const runtimePod = await createRuntime({
245
323
  environmentName: runtimeOptions.environmentName,
246
324
  creditsLimit: runtimeOptions.creditsLimit,
@@ -299,6 +377,7 @@ export const agentRuntimeStore = createStore()(subscribeWithSelector(persist((se
299
377
  setError: error => set({ error, status: 'error' }),
300
378
  // ── WebSocket stream ──────────────────────────────────────────
301
379
  ...initialWsState,
380
+ ...initialNotebookState,
302
381
  setWsState: wsState => set({ wsState }),
303
382
  setWs: (ws, agentId) => {
304
383
  _ws = ws;
@@ -581,7 +660,14 @@ export const agentRuntimeStore = createStore()(subscribeWithSelector(persist((se
581
660
  }
582
661
  _ws = null;
583
662
  _wsByAgentId.clear();
584
- set({ ...initialRuntimeState, ...initialWsState });
663
+ set(state => ({
664
+ ...initialRuntimeState,
665
+ ...initialWsState,
666
+ // Keep persisted notebook models across navigation/reset cycles.
667
+ ephemeralNotebookModels: state.ephemeralNotebookModels,
668
+ ephemeralDocumentModels: state.ephemeralDocumentModels,
669
+ editorModeByRuntime: state.editorModeByRuntime,
670
+ }));
585
671
  },
586
672
  resetWs: () => {
587
673
  if (_ws) {
@@ -594,7 +680,13 @@ export const agentRuntimeStore = createStore()(subscribeWithSelector(persist((se
594
680
  }
595
681
  _ws = null;
596
682
  _wsByAgentId.clear();
597
- set(initialWsState);
683
+ set(state => ({
684
+ ...initialWsState,
685
+ // Preserve notebook models when the chat websocket reconnects.
686
+ ephemeralNotebookModels: state.ephemeralNotebookModels,
687
+ ephemeralDocumentModels: state.ephemeralDocumentModels,
688
+ editorModeByRuntime: state.editorModeByRuntime,
689
+ }));
598
690
  },
599
691
  }), {
600
692
  name: 'agent-runtimes-storage',
@@ -613,6 +705,9 @@ export const agentRuntimeStore = createStore()(subscribeWithSelector(persist((se
613
705
  })),
614
706
  monitoringCache: state.monitoringCache,
615
707
  loadedSkillsByAgentId: state.loadedSkillsByAgentId,
708
+ ephemeralNotebookModels: state.ephemeralNotebookModels,
709
+ ephemeralDocumentModels: state.ephemeralDocumentModels,
710
+ editorModeByRuntime: state.editorModeByRuntime,
616
711
  }),
617
712
  })));
618
713
  export function useAgentRuntimeStore(selector) {
@@ -12,7 +12,7 @@ declare const meta: {
12
12
  };
13
13
  };
14
14
  args: {
15
- onClick: import("vitest").Mock<(...args: any[]) => any>;
15
+ onClick: import("storybook/test").Mock<(...args: any[]) => any>;
16
16
  };
17
17
  };
18
18
  export default meta;
@@ -7,9 +7,9 @@ declare const meta: {
7
7
  layout: string;
8
8
  };
9
9
  args: {
10
- onLogin: import("vitest").Mock<(...args: any[]) => any>;
11
- onLogout: import("vitest").Mock<(...args: any[]) => any>;
12
- onCreateAccount: import("vitest").Mock<(...args: any[]) => any>;
10
+ onLogin: import("storybook/test").Mock<(...args: any[]) => any>;
11
+ onLogout: import("storybook/test").Mock<(...args: any[]) => any>;
12
+ onCreateAccount: import("storybook/test").Mock<(...args: any[]) => any>;
13
13
  };
14
14
  };
15
15
  export default meta;
package/lib/test-setup.js CHANGED
@@ -57,6 +57,16 @@ vi.mock('@datalayer/jupyter-react', () => ({
57
57
  serviceManager: null,
58
58
  }),
59
59
  JupyterReactTheme: ({ children }) => children,
60
+ Notebook: () => null,
61
+ NotebookToolbar: () => null,
62
+ CellSidebarExtension: class CellSidebarExtension {
63
+ },
64
+ CellSidebarButton: () => null,
65
+ notebookStore: { getState: () => ({}) },
66
+ DefaultExecutor: class DefaultExecutor {
67
+ },
68
+ notebookToolDefinitions: {},
69
+ notebookToolOperations: {},
60
70
  CollaborationProviderBase: class CollaborationProviderBase {
61
71
  },
62
72
  CollaborationStatus: {
@@ -19,17 +19,17 @@ export type CreateAgentRuntimeRequest = {
19
19
  /** Full agent spec payload to propagate to backend services */
20
20
  agentSpec?: Record<string, any>;
21
21
  /** Account UID (user or organization) charged for runtime costs */
22
- billableAccountUid?: string;
22
+ billingEntityUid?: string;
23
23
  /** User account handle used for user home mount path. */
24
24
  userAccountHandle?: string;
25
25
  /** Account kind charged for runtime costs. */
26
- billableAccountType?: 'user' | 'organization' | 'team';
26
+ billingEntityType?: 'user' | 'organization' | 'team';
27
27
  /** Account handle charged for runtime costs. */
28
- billableAccountHandle?: string;
28
+ billingEntityHandle?: string;
29
29
  /** Source organization UID for team-billed runtimes. */
30
- billableSourceOrganizationUid?: string;
30
+ billingSourceOrganizationUid?: string;
31
31
  /** Source organization handle for team-billed runtimes. */
32
- billableSourceOrganizationHandle?: string;
32
+ billingSourceOrganizationHandle?: string;
33
33
  /** Mount account home folder into runtime. */
34
34
  mountHomeFolder?: boolean;
35
35
  /** Optional volume UID to mount into runtime. */
@@ -53,9 +53,9 @@ export type AgentRuntimeData = {
53
53
  token?: string;
54
54
  agentSpec?: Agentspec;
55
55
  agent_spec_id?: string;
56
- billable_account_uid?: string;
57
- billable_account_type?: 'user' | 'organization' | 'team';
58
- billable_account_handle?: string;
56
+ billing_entity_uid?: string;
57
+ billing_entity_type?: 'user' | 'organization' | 'team';
58
+ billing_entity_handle?: string;
59
59
  mount_home_folder?: boolean;
60
60
  volume_uid?: string;
61
61
  volume_uids?: string[];
@@ -1,6 +1,6 @@
1
1
  import type { SkillSpec } from './skills';
2
2
  import type { MCPServer, AgentMCPServerToolConfig } from './mcp';
3
- import type { ToolSpec, FrontendToolSpec } from './tools';
3
+ import type { ToolSpec, FrontendToolSpec, FrontendRenderToolSpec } from './tools';
4
4
  import type { AgentTriggerConfig } from './triggers';
5
5
  import type { AgentModelConfig } from './models';
6
6
  import type { AgentOutputConfig } from './outputs';
@@ -45,6 +45,8 @@ export interface Agentspec {
45
45
  disableToolApprovals?: boolean;
46
46
  /** Frontend tool sets available to this agent */
47
47
  frontendTools?: FrontendToolSpec[];
48
+ /** Bindings of backend tools to frontend renderers (tool name + css) */
49
+ frontendRenderTools?: FrontendRenderToolSpec[];
48
50
  /** Runtime environment name for this agent */
49
51
  environmentName: string;
50
52
  /** Icon identifier or URL for the agent */