@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
@@ -25,15 +25,15 @@ import { useNotebookTools } from '../tools/adapters/agent-runtimes/notebookHooks
25
25
  import { ThemedJupyterProvider } from './utils/themedProvider';
26
26
  import { ChatSidebar } from '../chat';
27
27
  import { DEFAULT_MODEL } from '../specs';
28
+ import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
29
+ import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
28
30
  import MatplotlibNotebook from './utils/notebooks/Matplotlib.ipynb.json';
29
31
  // Fixed notebook ID
30
32
  const NOTEBOOK_ID = 'chat-notebook-example';
31
33
  // Use the imported Matplotlib notebook
32
34
  const NOTEBOOK_CONTENT = MatplotlibNotebook;
33
35
  // Default configuration
34
- const DEFAULT_BASE_URL = import.meta.env.VITE_BASE_URL || 'http://localhost:8765';
35
36
  const DEFAULT_AGENT_ID = import.meta.env.VITE_AGENT_ID || 'notebook-sidebar-agent-runtime-example';
36
- const VERCEL_AI_ENDPOINT = `${DEFAULT_BASE_URL}/api/v1/vercel-ai/${DEFAULT_AGENT_ID}`;
37
37
  function getJupyterSandboxUrl(serviceManager) {
38
38
  const envUrl = import.meta.env.VITE_JUPYTER_SANDBOX_URL;
39
39
  if (envUrl) {
@@ -53,70 +53,6 @@ function getJupyterSandboxUrl(serviceManager) {
53
53
  const separator = baseUrl.includes('?') ? '&' : '?';
54
54
  return `${baseUrl}${separator}token=${encodeURIComponent(token)}`;
55
55
  }
56
- function useEnsureAgent(agentId, baseUrl, jupyterSandboxUrl) {
57
- const [isReady, setIsReady] = useState(false);
58
- const [error, setError] = useState(null);
59
- useEffect(() => {
60
- let mounted = true;
61
- async function ensureAgent() {
62
- try {
63
- if (!jupyterSandboxUrl) {
64
- if (mounted) {
65
- setError('Could not detect Jupyter server URL from Notebook service manager.');
66
- setIsReady(false);
67
- }
68
- return;
69
- }
70
- const response = await fetch(`${baseUrl}/api/v1/agents`, {
71
- method: 'POST',
72
- headers: {
73
- 'Content-Type': 'application/json',
74
- },
75
- body: JSON.stringify({
76
- name: agentId,
77
- description: 'Demo agent for notebook sidebar example',
78
- agent_library: 'pydantic-ai',
79
- transport: 'vercel-ai',
80
- model: DEFAULT_MODEL,
81
- system_prompt: 'You are a helpful AI assistant that helps users work with Jupyter notebooks. For notebook operations, always use the notebook frontend tools (runCell, readAllCells, readCell, insertCell, updateCell, deleteCells) so actions happen in the live notebook UI. Use executeCode only for temporary inspection code that should not modify notebook cells.',
82
- enable_codemode: false,
83
- sandbox_variant: 'jupyter',
84
- jupyter_sandbox: jupyterSandboxUrl,
85
- }),
86
- });
87
- if (mounted) {
88
- if (response.ok) {
89
- console.warn(`[NotebookAgentSidebarExample] Created agent: ${agentId}`);
90
- setError(null);
91
- setIsReady(true);
92
- }
93
- else if (response.status === 409 || response.status === 400) {
94
- console.warn(`[NotebookAgentSidebarExample] Reusing existing agent: ${agentId}`);
95
- setError(null);
96
- setIsReady(true);
97
- }
98
- else {
99
- const errorData = await response.json().catch(() => ({}));
100
- setError(errorData.detail || `Failed to create agent: ${response.status}`);
101
- setIsReady(false);
102
- }
103
- }
104
- }
105
- catch (err) {
106
- if (mounted) {
107
- console.error('[NotebookAgentSidebarExample] Error creating agent:', err);
108
- setError(err instanceof Error ? err.message : 'Failed to connect to server');
109
- setIsReady(false);
110
- }
111
- }
112
- }
113
- void ensureAgent();
114
- return () => {
115
- mounted = false;
116
- };
117
- }, [agentId, baseUrl, jupyterSandboxUrl]);
118
- return { isReady, error };
119
- }
120
56
  function NotebookUI({ serviceManager }) {
121
57
  if (!serviceManager) {
122
58
  return (_jsx(Box, { sx: {
@@ -130,20 +66,56 @@ function NotebookUI({ serviceManager }) {
130
66
  return (_jsx(Notebook, { nbformat: NOTEBOOK_CONTENT, id: NOTEBOOK_ID, serviceManager: serviceManager, height: "100%", cellSidebarMargin: 120, startDefaultKernel: true }));
131
67
  }
132
68
  export function AgentRuntimeNotebookExampleInner({ serviceManager, }) {
69
+ const baseUrl = useExampleAgentRuntimesUrl();
70
+ const vercelAiEndpoint = `${baseUrl}/api/v1/vercel-ai/${DEFAULT_AGENT_ID}`;
71
+ const [createRequested, setCreateRequested] = useState(false);
133
72
  const jupyterSandboxUrl = useMemo(() => getJupyterSandboxUrl(serviceManager), [serviceManager]);
134
- const { isReady, error } = useEnsureAgent(DEFAULT_AGENT_ID, DEFAULT_BASE_URL, jupyterSandboxUrl);
73
+ const { agentId, isReady, status, error, createAgent } = useExampleAgentRuntime({
74
+ exampleId: 'NotebookAgentSidebarExample',
75
+ agentName: DEFAULT_AGENT_ID,
76
+ autoCreateAgent: false,
77
+ agentConfig: {
78
+ name: DEFAULT_AGENT_ID,
79
+ description: 'Demo agent for notebook sidebar example',
80
+ protocol: 'vercel-ai',
81
+ model: DEFAULT_MODEL,
82
+ systemPrompt: 'You are a helpful AI assistant that helps users work with Jupyter notebooks. For notebook operations, always use the notebook frontend tools (runCell, readAllCells, readCell, insertCell, updateCell, deleteCells) so actions happen in the live notebook UI. Use executeCode only for temporary inspection code that should not modify notebook cells.',
83
+ enableCodemode: false,
84
+ sandboxVariant: 'jupyter',
85
+ jupyterSandbox: jupyterSandboxUrl,
86
+ },
87
+ });
88
+ useEffect(() => {
89
+ if (!jupyterSandboxUrl || createRequested || agentId) {
90
+ return;
91
+ }
92
+ setCreateRequested(true);
93
+ void createAgent({
94
+ name: DEFAULT_AGENT_ID,
95
+ description: 'Demo agent for notebook sidebar example',
96
+ protocol: 'vercel-ai',
97
+ model: DEFAULT_MODEL,
98
+ systemPrompt: 'You are a helpful AI assistant that helps users work with Jupyter notebooks. For notebook operations, always use the notebook frontend tools (runCell, readAllCells, readCell, insertCell, updateCell, deleteCells) so actions happen in the live notebook UI. Use executeCode only for temporary inspection code that should not modify notebook cells.',
99
+ enableCodemode: false,
100
+ sandboxVariant: 'jupyter',
101
+ jupyterSandbox: jupyterSandboxUrl,
102
+ }).catch(() => {
103
+ setCreateRequested(false);
104
+ });
105
+ }, [jupyterSandboxUrl, createRequested, agentId, createAgent]);
106
+ const effectiveReady = isReady || status === 'ready';
135
107
  // Get notebook tools for ChatSidebar
136
108
  const tools = useNotebookTools(NOTEBOOK_ID);
137
109
  // Build Vercel AI protocol config
138
110
  const protocolConfig = useMemo(() => {
139
111
  return {
140
112
  type: 'vercel-ai',
141
- endpoint: VERCEL_AI_ENDPOINT,
113
+ endpoint: vercelAiEndpoint,
142
114
  agentId: DEFAULT_AGENT_ID,
143
115
  enableConfigQuery: true,
144
- configEndpoint: `${DEFAULT_BASE_URL}/api/v1/configure`,
116
+ configEndpoint: `${baseUrl}/api/v1/configure`,
145
117
  };
146
- }, []);
118
+ }, [baseUrl, vercelAiEndpoint]);
147
119
  return (_jsx(_Fragment, { children: _jsxs(Box, { sx: {
148
120
  height: 'calc(100vh - 70px)',
149
121
  width: '100vw',
@@ -171,7 +143,7 @@ export function AgentRuntimeNotebookExampleInner({ serviceManager, }) {
171
143
  borderColor: 'border.default',
172
144
  borderRadius: 2,
173
145
  overflow: 'hidden',
174
- }, children: _jsx(NotebookUI, { serviceManager: serviceManager }) }) })] }), isReady && (_jsx(ChatSidebar, { title: "AI Assistant", protocol: protocolConfig, position: "right", width: 400, showNewChatButton: true, showClearButton: true, showSettingsButton: true, defaultOpen: true, panelProps: {
146
+ }, children: _jsx(NotebookUI, { serviceManager: serviceManager }) }) })] }), effectiveReady && (_jsx(ChatSidebar, { title: "AI Assistant", protocol: protocolConfig, position: "right", width: 400, showNewChatButton: true, showClearButton: true, showSettingsButton: true, defaultOpen: true, panelProps: {
175
147
  protocol: protocolConfig,
176
148
  frontendTools: tools,
177
149
  useStore: false,
@@ -3,11 +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 { createDatalayerServiceManager } from '../services/DatalayerServiceManager';
6
7
  import { useState, useEffect, useMemo } from 'react';
7
8
  import { Checkbox, FormControl, Heading } from '@primer/react';
8
9
  import { Box } from '@datalayer/primer-addons';
9
- import { useCoreStore, createDatalayerServiceManager, DatalayerCollaborationProvider, } from '@datalayer/core';
10
10
  import { loadJupyterConfig, Notebook } from '@datalayer/jupyter-react';
11
+ import { DatalayerCollaborationProvider } from '../collaboration';
12
+ import { useCoreStore } from '../state';
11
13
  import { ThemedJupyterProvider } from './utils/themedProvider';
12
14
  import nbformatExample from './utils/notebooks/NotebookExample1.ipynb.json';
13
15
  // This corresponds to the notebook ID in the URL when you open an existing notbook in your library
@@ -30,7 +32,7 @@ const NotebookCollaborationExample = (props) => {
30
32
  return;
31
33
  }
32
34
  // Create DatalayerServiceManager if we have credentials
33
- if (configuration?.token && configuration?.runUrl) {
35
+ if (configuration?.token && configuration?.datalayerUrl) {
34
36
  try {
35
37
  // Now we can pass undefined to use config/defaults
36
38
  const manager = await createDatalayerServiceManager(configuration?.cpuEnvironment, configuration?.credits);
@@ -42,7 +44,7 @@ const NotebookCollaborationExample = (props) => {
42
44
  }
43
45
  }
44
46
  else {
45
- console.warn('Datalayer credentials not configured. Please set runUrl and token.');
47
+ console.warn('Datalayer credentials not configured. Please set datalayerUrl and token.');
46
48
  }
47
49
  };
48
50
  createManager();
@@ -52,20 +54,20 @@ const NotebookCollaborationExample = (props) => {
52
54
  if (!enableCollaboration) {
53
55
  return undefined;
54
56
  }
55
- const runUrl = configuration?.runUrl;
57
+ const datalayerUrl = configuration?.datalayerUrl;
56
58
  const token = configuration?.token;
57
- if (!runUrl || !token) {
58
- console.warn('Datalayer collaboration enabled but runUrl or token not configured. ' +
59
+ if (!datalayerUrl || !token) {
60
+ console.warn('Datalayer collaboration enabled but datalayerUrl or token not configured. ' +
59
61
  'Please configure them in the Datalayer store or environment.');
60
62
  return undefined;
61
63
  }
62
64
  // Create and return the Datalayer collaboration provider
63
65
  return new DatalayerCollaborationProvider({
64
- runUrl,
66
+ datalayerUrl,
65
67
  token,
66
68
  });
67
69
  }, [enableCollaboration, configuration]);
68
- return (_jsx(ThemedJupyterProvider, { children: _jsxs(Box, { p: 3, children: [_jsx(Heading, { as: "h2", sx: { mb: 3 }, children: "Notebook Collaboration Example" }), _jsx(Box, { sx: { mb: 3 }, children: _jsxs(FormControl, { children: [_jsx(Checkbox, { checked: enableCollaboration, onChange: e => setEnableCollaboration(e.target.checked) }), _jsx(FormControl.Label, { children: "Enable Datalayer Collaboration" })] }) }), (!configuration?.runUrl || !configuration?.token) && (_jsx(Box, { sx: { mb: 2, p: 2, bg: 'danger.subtle' }, children: "Warning: Datalayer configuration is missing. Please configure runUrl and token to use DatalayerServiceManager and collaboration features." })), !serviceManager && (_jsx(Box, { sx: { mb: 2, p: 2, bg: 'attention.subtle' }, children: "Note: DatalayerServiceManager is not available. Notebook functionality will be limited." })), enableCollaboration ? (_jsxs(Box, { sx: {
70
+ return (_jsx(ThemedJupyterProvider, { children: _jsxs(Box, { p: 3, children: [_jsx(Heading, { as: "h2", sx: { mb: 3 }, children: "Notebook Collaboration Example" }), _jsx(Box, { sx: { mb: 3 }, children: _jsxs(FormControl, { children: [_jsx(Checkbox, { checked: enableCollaboration, onChange: e => setEnableCollaboration(e.target.checked) }), _jsx(FormControl.Label, { children: "Enable Datalayer Collaboration" })] }) }), (!configuration?.datalayerUrl || !configuration?.token) && (_jsx(Box, { sx: { mb: 2, p: 2, bg: 'danger.subtle' }, children: "Warning: Datalayer configuration is missing. Please configure datalayerUrl and token to use DatalayerServiceManager and collaboration features." })), !serviceManager && (_jsx(Box, { sx: { mb: 2, p: 2, bg: 'attention.subtle' }, children: "Note: DatalayerServiceManager is not available. Notebook functionality will be limited." })), enableCollaboration ? (_jsxs(Box, { sx: {
69
71
  display: 'flex',
70
72
  gap: 2,
71
73
  flexDirection: 'row',
@@ -95,6 +97,6 @@ const NotebookCollaborationExample = (props) => {
95
97
  border: '1px solid',
96
98
  borderColor: 'border.default',
97
99
  borderRadius: 2,
98
- }, children: serviceManager ? (_jsx(Notebook, { id: NOTEBOOK_ID, height: "calc(100vh - 200px)", nbformat: nbformat, readonly: readonly, serviceManager: serviceManager, startDefaultKernel: true, collaborationProvider: collaborationProvider })) : (_jsx(Box, { sx: { p: 4, textAlign: 'center' }, children: "Loading ServiceManager..." })) })), _jsxs(Box, { sx: { mt: 2, fontSize: 1, color: 'fg.subtle' }, children: [_jsx("p", { children: "This example demonstrates how to use Datalayer services with Notebook:" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "DatalayerServiceManager:" }), " Connects to Datalayer infrastructure for kernel management"] }), _jsxs("li", { children: [_jsx("strong", { children: "DatalayerCollaborationProvider:" }), " Enables real-time collaboration"] }), _jsx("li", { children: "Both require Datalayer credentials (runUrl and token)" }), _jsx("li", { children: "Pass them directly to the base Notebook component" }), _jsx("li", { children: "No wrapper components needed - just create the services and pass them as props" }), _jsx("li", { children: "This shows the explicit, composable pattern for Datalayer integration" })] })] })] }) }));
100
+ }, children: serviceManager ? (_jsx(Notebook, { id: NOTEBOOK_ID, height: "calc(100vh - 200px)", nbformat: nbformat, readonly: readonly, serviceManager: serviceManager, startDefaultKernel: true, collaborationProvider: collaborationProvider })) : (_jsx(Box, { sx: { p: 4, textAlign: 'center' }, children: "Loading ServiceManager..." })) })), _jsxs(Box, { sx: { mt: 2, fontSize: 1, color: 'fg.subtle' }, children: [_jsx("p", { children: "This example demonstrates how to use Datalayer services with Notebook:" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "DatalayerServiceManager:" }), " Connects to Datalayer infrastructure for kernel management"] }), _jsxs("li", { children: [_jsx("strong", { children: "DatalayerCollaborationProvider:" }), " Enables real-time collaboration"] }), _jsx("li", { children: "Both require Datalayer credentials (datalayerUrl and token)" }), _jsx("li", { children: "Pass them directly to the base Notebook component" }), _jsx("li", { children: "No wrapper components needed - just create the services and pass them as props" }), _jsx("li", { children: "This shows the explicit, composable pattern for Datalayer integration" })] })] })] }) }));
99
101
  };
100
102
  export default NotebookCollaborationExample;
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /*
3
3
  * Copyright (c) 2025-2026 Datalayer, Inc.
4
4
  * Distributed under the terms of the Modified BSD License.
@@ -17,6 +17,9 @@ const NOTEBOOK_ID = 'notebook-example-1';
17
17
  export const JupyterNotebookExample = (props) => {
18
18
  const { serviceManager } = props;
19
19
  const extensions = useMemo(() => [new CellSidebarExtension({ factory: CellSidebarButton })], []);
20
- return (_jsxs(_Fragment, { children: [_jsx(Box, { as: "h1", children: "Jupyter Notebook Example" }), serviceManager && (_jsx(ThemedJupyterProvider, { children: _jsx(Notebook, { id: NOTEBOOK_ID, nbformat: nbformatExample, serviceManager: serviceManager, startDefaultKernel: true, extensions: extensions, Toolbar: NotebookToolbar }) }))] }));
20
+ if (!serviceManager) {
21
+ return (_jsxs(Box, { as: "h1", children: ["A Jupyter Notebook", _jsx("div", { children: "Loading..." })] }));
22
+ }
23
+ return (_jsxs(ThemedJupyterProvider, { children: [_jsx(Box, { as: "h1", children: "A Jupyter Notebook" }), _jsx(Notebook, { id: NOTEBOOK_ID, nbformat: nbformatExample, serviceManager: serviceManager, startDefaultKernel: true, extensions: extensions, Toolbar: NotebookToolbar })] }));
21
24
  };
22
25
  export default JupyterNotebookExample;
@@ -14,7 +14,7 @@ import { useSimpleAuthStore } from '@datalayer/core/lib/views/otel';
14
14
  export const AuthRequiredView = () => {
15
15
  const setAuth = useSimpleAuthStore(s => s.setAuth);
16
16
  const syncTokenToIamStore = useCallback((token) => {
17
- import('@datalayer/core/lib/state').then(({ iamStore }) => {
17
+ import('../../state/substates').then(({ iamStore }) => {
18
18
  iamStore.setState({ token });
19
19
  });
20
20
  }, []);
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ /**
3
+ * Props for {@link ExampleErrorBoundary}.
4
+ */
5
+ export interface ExampleErrorBoundaryProps {
6
+ /** Child example tree to protect. */
7
+ children: React.ReactNode;
8
+ }
9
+ interface ExampleErrorBoundaryState {
10
+ error: Error | null;
11
+ }
12
+ /**
13
+ * Generic error boundary that surfaces render-time exceptions thrown by any
14
+ * example in the UI instead of leaving a blank screen with a console error.
15
+ *
16
+ * Reset it per example by passing a `key` (e.g. the example id) so switching
17
+ * examples clears a previous error.
18
+ */
19
+ export declare class ExampleErrorBoundary extends React.Component<ExampleErrorBoundaryProps, ExampleErrorBoundaryState> {
20
+ /**
21
+ * Create the boundary with a clean error state.
22
+ *
23
+ * @param props - The boundary props.
24
+ */
25
+ constructor(props: ExampleErrorBoundaryProps);
26
+ /**
27
+ * Capture a thrown error into state so it can be rendered.
28
+ *
29
+ * @param error - The error thrown by a descendant.
30
+ * @returns The next boundary state.
31
+ */
32
+ static getDerivedStateFromError(error: Error): ExampleErrorBoundaryState;
33
+ /**
34
+ * Log the error for debugging while it is surfaced in the UI.
35
+ *
36
+ * @param error - The error thrown by a descendant.
37
+ */
38
+ componentDidCatch(error: Error): void;
39
+ /**
40
+ * Render either the protected children or the error surface.
41
+ *
42
+ * @returns The rendered tree.
43
+ */
44
+ render(): React.ReactNode;
45
+ }
46
+ export {};
@@ -0,0 +1,67 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright (c) 2025-2026 Datalayer, Inc.
4
+ * Distributed under the terms of the Modified BSD License.
5
+ */
6
+ import React from 'react';
7
+ import { Box } from '@datalayer/primer-addons';
8
+ /**
9
+ * Generic error boundary that surfaces render-time exceptions thrown by any
10
+ * example in the UI instead of leaving a blank screen with a console error.
11
+ *
12
+ * Reset it per example by passing a `key` (e.g. the example id) so switching
13
+ * examples clears a previous error.
14
+ */
15
+ export class ExampleErrorBoundary extends React.Component {
16
+ /**
17
+ * Create the boundary with a clean error state.
18
+ *
19
+ * @param props - The boundary props.
20
+ */
21
+ constructor(props) {
22
+ super(props);
23
+ this.state = { error: null };
24
+ }
25
+ /**
26
+ * Capture a thrown error into state so it can be rendered.
27
+ *
28
+ * @param error - The error thrown by a descendant.
29
+ * @returns The next boundary state.
30
+ */
31
+ static getDerivedStateFromError(error) {
32
+ return { error };
33
+ }
34
+ /**
35
+ * Log the error for debugging while it is surfaced in the UI.
36
+ *
37
+ * @param error - The error thrown by a descendant.
38
+ */
39
+ componentDidCatch(error) {
40
+ console.error('Example rendering failed:', error);
41
+ }
42
+ /**
43
+ * Render either the protected children or the error surface.
44
+ *
45
+ * @returns The rendered tree.
46
+ */
47
+ render() {
48
+ const { error } = this.state;
49
+ if (!error) {
50
+ return this.props.children;
51
+ }
52
+ return (_jsx(Box, { sx: { p: 4 }, children: _jsxs(Box, { sx: {
53
+ p: 3,
54
+ border: '1px solid',
55
+ borderColor: 'danger.muted',
56
+ borderRadius: 2,
57
+ bg: 'danger.subtle',
58
+ color: 'danger.fg',
59
+ }, children: [_jsx(Box, { sx: { fontWeight: 600, mb: 2 }, children: "This example failed to load" }), _jsx(Box, { as: "pre", sx: {
60
+ m: 0,
61
+ whiteSpace: 'pre-wrap',
62
+ wordBreak: 'break-word',
63
+ fontFamily: 'mono',
64
+ fontSize: 0,
65
+ }, children: error.message || String(error) })] }) }));
66
+ }
67
+ }
@@ -0,0 +1,11 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+
6
+ /* Loaded on demand from the agent spec's frontend_render_tools css field. */
7
+ /* display: contents keeps the wrapper transparent so it adds no padding or
8
+ box around the card and preserves the card's own margins. */
9
+ .dla-agui-render-haiku-card {
10
+ display: contents;
11
+ }
@@ -0,0 +1,11 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+
6
+ /* Loaded on demand from the agent spec's frontend_render_tools css field. */
7
+ /* display: contents keeps the wrapper transparent so it adds no padding or
8
+ box around the card and preserves the card's own margins. */
9
+ .dla-agui-render-weather-card {
10
+ display: contents;
11
+ }
@@ -64,10 +64,11 @@ function makeEntry(id, loader, description, tags) {
64
64
  */
65
65
  export const EXAMPLE_ENTRIES = [
66
66
  makeEntry('HomeExample', () => import('./HomeExample'), 'Browse all available examples with search and quick navigation.', ['home', 'navigation']),
67
- makeEntry('A2UiComponentGalleryExample', () => import('./A2UiComponentGalleryExample'), 'Gallery showcasing A2UI component patterns.'),
67
+ makeEntry('A2UiComponentsGalleryExample', () => import('./A2UiComponentsGalleryExample'), 'Consolidated A2UI components gallery with Primer-themed color modes.'),
68
68
  makeEntry('A2UiContactCardExample', () => import('./A2UiContactCardExample'), 'A2UI example rendering contact card interactions.'),
69
69
  makeEntry('A2UiRestaurantExample', () => import('./A2UiRestaurantExample'), 'A2UI restaurant flow example.'),
70
70
  makeEntry('A2UiViewerExample', () => import('./A2UiViewerExample'), 'A2UI viewer integration example.'),
71
+ makeEntry('A2UiAgentExample', () => import('./A2UiAgentExample'), 'A2UI Agent with built-in chat component and Python A2UI extension surface.'),
71
72
  makeEntry('AgUiAgenticExample', () => import('./AgUiAgenticExample'), 'AG-UI agentic workflow example.'),
72
73
  makeEntry('AgUiBackendToolRenderingExample', () => import('./AgUiBackendToolRenderingExample'), 'AG-UI backend tool rendering example.'),
73
74
  makeEntry('AgUiHaikuGenUiExample', () => import('./AgUiHaikuGenUiExample'), 'AG-UI generative UI Haiku example.'),
@@ -87,6 +88,7 @@ export const EXAMPLE_ENTRIES = [
87
88
  makeEntry('AgentGuardrailsExample', () => import('./AgentGuardrailsExample'), 'Guardrails and safety checks for agent runs.'),
88
89
  makeEntry('AgentHooksExample', () => import('./AgentHooksExample'), 'Pre-hooks and post-hooks lifecycle execution example.'),
89
90
  makeEntry('AgentInferenceProviderExample', () => import('./AgentInferenceProviderExample'), 'Switch local and datalayer inference providers with live low-level provider events.', ['example', 'agent', 'inference', 'provider', 'runtime']),
91
+ makeEntry('AgentLoopExample', () => import('./AgentLoopExample'), 'Define and launch an agent execution loop (observe/think/act/evaluate) over a live notebook, driven by generic loop specs.', ['example', 'agent', 'loop', 'notebook', 'agentspecs']),
90
92
  makeEntry('AgentToolApprovalsExample', () => import('./AgentToolApprovalsExample'), 'Tool approval workflows and manual decisions.'),
91
93
  makeEntry('AgentMemoryExample', () => import('./AgentMemoryExample'), 'Memory-aware conversation and retrieval example.'),
92
94
  makeEntry('AgentSkillsExample', () => import('./AgentSkillsExample'), 'Skills discovery, execution, and monitoring example.'),
@@ -0,0 +1,35 @@
1
+ import type { AgentConfig } from '../../types/config';
2
+ interface UseExampleAgentRuntimeOptions {
3
+ exampleId: string;
4
+ agentName: string;
5
+ specId?: string;
6
+ environmentName?: string;
7
+ autoStart?: boolean;
8
+ autoCreateAgent?: boolean;
9
+ agentConfig?: AgentConfig;
10
+ }
11
+ interface UseExampleAgentRuntimeResult {
12
+ location: 'local' | 'cloud';
13
+ baseUrl: string;
14
+ agentId?: string;
15
+ agentBaseUrl?: string;
16
+ status: string;
17
+ isReady: boolean;
18
+ error: string | null;
19
+ createAgent: (config?: AgentConfig) => Promise<{
20
+ agentId?: string;
21
+ endpoint?: string;
22
+ isReady?: boolean;
23
+ }>;
24
+ /**
25
+ * Tear down the agent launched by this hook: delete it on the server and
26
+ * wipe in-process agent state so a fresh runtime can be launched.
27
+ */
28
+ teardown: () => Promise<void>;
29
+ }
30
+ /**
31
+ * Connects examples to agent runtimes through shared hooks and supports
32
+ * both local and cloud execution modes.
33
+ */
34
+ export declare function useExampleAgentRuntime(options: UseExampleAgentRuntimeOptions): UseExampleAgentRuntimeResult;
35
+ export {};
@@ -0,0 +1,82 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import { useEffect, useMemo } from 'react';
6
+ import { useAgentRuntimes } from '../../hooks/useAgentRuntimes';
7
+ import { useExampleAgentRuntimesUrl } from '../utils/useExampleAgentRuntimesUrl';
8
+ import { useRuntimeTargetStore } from '../utils/runtimeTargetStore';
9
+ import { agentSummaryStore } from '../utils/agentSummaryStore';
10
+ /**
11
+ * Connects examples to agent runtimes through shared hooks and supports
12
+ * both local and cloud execution modes.
13
+ */
14
+ export function useExampleAgentRuntime(options) {
15
+ const { exampleId, agentName, specId, environmentName = 'local-agent-runtimes', autoStart = true, autoCreateAgent = true, agentConfig, } = options;
16
+ const location = useRuntimeTargetStore(state => state.target);
17
+ const baseUrl = useExampleAgentRuntimesUrl();
18
+ const isCloud = location === 'cloud';
19
+ const combinedConfig = useMemo(() => ({
20
+ name: agentName,
21
+ agentSpecId: specId,
22
+ ...agentConfig,
23
+ }), [agentName, specId, agentConfig]);
24
+ const { runtime, status, isReady, error, connectToRuntime, createAgent, teardown, } = useAgentRuntimes({
25
+ agentSpecId: isCloud ? specId : undefined,
26
+ autoCreateAgent,
27
+ autoStart: isCloud ? autoStart : false,
28
+ runtimeCreationTarget: isCloud
29
+ ? 'backend-services'
30
+ : 'local-agent-runtimes',
31
+ runtimeCreationBaseUrl: isCloud ? undefined : baseUrl,
32
+ agentConfig: combinedConfig,
33
+ });
34
+ useEffect(() => {
35
+ if (isCloud) {
36
+ return;
37
+ }
38
+ connectToRuntime({
39
+ podName: agentName,
40
+ environmentName,
41
+ jupyterBaseUrl: baseUrl,
42
+ });
43
+ }, [isCloud, connectToRuntime, agentName, environmentName, baseUrl]);
44
+ useEffect(() => {
45
+ agentSummaryStore.getState().setActive({
46
+ exampleId,
47
+ agentName,
48
+ agentId: runtime?.agentId,
49
+ specId,
50
+ location,
51
+ baseUrl: runtime?.agentBaseUrl || baseUrl,
52
+ status,
53
+ isReady,
54
+ error: error || undefined,
55
+ });
56
+ return () => {
57
+ agentSummaryStore.getState().clearActive(exampleId);
58
+ };
59
+ }, [
60
+ exampleId,
61
+ agentName,
62
+ runtime?.agentId,
63
+ runtime?.agentBaseUrl,
64
+ specId,
65
+ location,
66
+ baseUrl,
67
+ status,
68
+ isReady,
69
+ error,
70
+ ]);
71
+ return {
72
+ location,
73
+ baseUrl,
74
+ agentId: runtime?.agentId,
75
+ agentBaseUrl: runtime?.agentBaseUrl,
76
+ status,
77
+ isReady,
78
+ error,
79
+ createAgent,
80
+ teardown,
81
+ };
82
+ }
@@ -0,0 +1,30 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { ToolCallRenderContext, RenderToolResult } from '../../types/chat';
3
+ import type { FrontendRenderToolSpec } from '../../types/tools';
4
+ /**
5
+ * Renderer function keyed by a spec's renderer id.
6
+ *
7
+ * Receives the tool call context plus the matching spec binding so the example
8
+ * can build presentation details (such as a CSS class) from the spec instead of
9
+ * hardcoding them.
10
+ */
11
+ export type SpecRenderer = (context: ToolCallRenderContext, binding: FrontendRenderToolSpec) => ReactNode;
12
+ /**
13
+ * Builds a `renderToolResult` from an agent spec's `frontendRenderTools`.
14
+ *
15
+ * The example provides only a local map of renderer id to component; the tool
16
+ * name to match and the CSS file to load are read from the spec, so examples do
17
+ * not hardcode tool names or CSS filenames.
18
+ *
19
+ * @param specId - Agent spec id to read render bindings from.
20
+ * @param renderers - Local map of renderer id to renderer function.
21
+ * @returns A render function suitable for the chat components' renderToolResult.
22
+ */
23
+ export declare function useSpecRenderToolResult(specId: string | undefined, renderers: Record<string, SpecRenderer>): RenderToolResult;
24
+ /**
25
+ * Derives the CSS class a spec renderer loads for its binding.
26
+ *
27
+ * @param binding - The frontend render binding from the spec.
28
+ * @returns A stable CSS class name based on the renderer id.
29
+ */
30
+ export declare function specRendererClassName(binding: FrontendRenderToolSpec): string;
@@ -0,0 +1,61 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import { useEffect, useMemo } from 'react';
6
+ import { getAgentspecs } from '../../specs/agents';
7
+ // Lazy importers for example CSS files, resolved by filename from the spec.
8
+ const cssImporters = import.meta.glob('../components/**/*.css');
9
+ /**
10
+ * Builds a `renderToolResult` from an agent spec's `frontendRenderTools`.
11
+ *
12
+ * The example provides only a local map of renderer id to component; the tool
13
+ * name to match and the CSS file to load are read from the spec, so examples do
14
+ * not hardcode tool names or CSS filenames.
15
+ *
16
+ * @param specId - Agent spec id to read render bindings from.
17
+ * @param renderers - Local map of renderer id to renderer function.
18
+ * @returns A render function suitable for the chat components' renderToolResult.
19
+ */
20
+ export function useSpecRenderToolResult(specId, renderers) {
21
+ const bindings = useMemo(() => {
22
+ if (!specId) {
23
+ return [];
24
+ }
25
+ return getAgentspecs(specId)?.frontendRenderTools ?? [];
26
+ }, [specId]);
27
+ // Load any CSS files named by the spec bindings.
28
+ useEffect(() => {
29
+ for (const binding of bindings) {
30
+ if (!binding.css) {
31
+ continue;
32
+ }
33
+ const match = Object.keys(cssImporters).find(path => path.endsWith(`/${binding.css}`));
34
+ if (match) {
35
+ void cssImporters[match]();
36
+ }
37
+ }
38
+ }, [bindings]);
39
+ return useMemo(() => {
40
+ return (context) => {
41
+ const binding = bindings.find(b => b.tool === context.toolName);
42
+ if (!binding) {
43
+ return null;
44
+ }
45
+ const renderer = renderers[binding.renderer];
46
+ if (!renderer) {
47
+ return null;
48
+ }
49
+ return renderer(context, binding);
50
+ };
51
+ }, [bindings, renderers]);
52
+ }
53
+ /**
54
+ * Derives the CSS class a spec renderer loads for its binding.
55
+ *
56
+ * @param binding - The frontend render binding from the spec.
57
+ * @returns A stable CSS class name based on the renderer id.
58
+ */
59
+ export function specRendererClassName(binding) {
60
+ return `dla-agui-render-${binding.renderer}`;
61
+ }
@@ -1,7 +1,8 @@
1
1
  export { default as AgentspecsExample } from './AgentspecsExample';
2
- export { default as A2UiComponentGalleryExample } from './A2UiComponentGalleryExample';
2
+ export { default as A2UiComponentsGalleryExample } from './A2UiComponentsGalleryExample';
3
3
  export { default as A2UiContactCardExample } from './A2UiContactCardExample';
4
4
  export { default as A2UiRestaurantExample } from './A2UiRestaurantExample';
5
+ export { default as A2UiAgentExample } from './A2UiAgentExample';
5
6
  export { default as A2UiViewerExample } from './A2UiViewerExample';
6
7
  export { default as AgUiAgenticExample } from './AgUiAgenticExample';
7
8
  export { default as AgUiBackendToolRenderingExample } from './AgUiBackendToolRenderingExample';
@@ -21,6 +22,7 @@ export { default as AgentEvalsExample } from './AgentEvalsExample';
21
22
  export { default as AgentGuardrailsExample } from './AgentGuardrailsExample';
22
23
  export { default as AgentHooksExample } from './AgentHooksExample';
23
24
  export { default as AgentInferenceProviderExample } from './AgentInferenceProviderExample';
25
+ export { default as AgentLoopExample } from './AgentLoopExample';
24
26
  export { default as AgentToolApprovalsExample } from './AgentToolApprovalsExample';
25
27
  export { default as AgentMemoryExample } from './AgentMemoryExample';
26
28
  export { default as AgentOtelExample } from './AgentOtelExample';