@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
@@ -13,12 +13,12 @@ import { BriefcaseIcon, FileIcon } from '@primer/octicons-react';
13
13
  import { useSimpleAuthStore } from '@datalayer/core/lib/views/otel';
14
14
  import { ThemedProvider } from './utils/themedProvider';
15
15
  import { uniqueAgentId } from './utils/agentId';
16
+ import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
16
17
  import { Chat } from '../chat';
17
18
  import { useSkills, useSkillActions } from '../hooks';
18
19
  const queryClient = new QueryClient();
19
20
  const AGENT_NAME = 'skills-example-agent';
20
21
  const AGENTSPEC_ID = 'example-skills';
21
- const DEFAULT_LOCAL_BASE_URL = import.meta.env.VITE_BASE_URL || 'http://localhost:8765';
22
22
  const SkillCard = ({ skill, onToggle, onToggleApproval }) => {
23
23
  const [showDefinition, setShowDefinition] = useState(false);
24
24
  const sourceVariant = skill.source_variant ?? 'unknown';
@@ -68,7 +68,7 @@ const AgentSkillsInner = ({ onLogout }) => {
68
68
  const [hookError, setHookError] = useState(null);
69
69
  const [agentId, setAgentId] = useState(agentName);
70
70
  const [isReconnectedAgent, setIsReconnectedAgent] = useState(false);
71
- const agentBaseUrl = DEFAULT_LOCAL_BASE_URL;
71
+ const agentBaseUrl = useExampleAgentRuntimesUrl();
72
72
  const chatAuthToken = token === null ? undefined : token;
73
73
  // WS-sourced skills (reads from codemodeStatus pushed via monitoring WS)
74
74
  const skillsQuery = useSkills(isReady);
@@ -176,7 +176,7 @@ const AgentSkillsInner = ({ onLogout }) => {
176
176
  flexDirection: 'column',
177
177
  alignItems: 'center',
178
178
  justifyContent: 'center',
179
- height: '100vh',
179
+ height: '100%',
180
180
  gap: 3,
181
181
  }, children: [_jsx(Spinner, { size: "large" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Launching skills example agent..." })] }));
182
182
  }
@@ -184,7 +184,7 @@ const AgentSkillsInner = ({ onLogout }) => {
184
184
  return _jsx(ErrorView, { error: hookError, onLogout: onLogout });
185
185
  }
186
186
  return (_jsxs(Box, { sx: {
187
- height: 'calc(100vh - 60px)',
187
+ height: '100%',
188
188
  display: 'flex',
189
189
  flexDirection: 'column',
190
190
  }, children: [isReconnectedAgent && (_jsx(Box, { sx: {
@@ -192,7 +192,7 @@ const AgentSkillsInner = ({ onLogout }) => {
192
192
  py: 1,
193
193
  borderBottom: '1px solid',
194
194
  borderColor: 'border.default',
195
- }, children: _jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "Agent already running - reconnected." }) })), _jsxs(Box, { sx: { flex: 1, minHeight: 0, display: 'flex' }, children: [_jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: _jsx(Chat, { protocol: "vercel-ai", baseUrl: agentBaseUrl, agentId: agentId, authToken: chatAuthToken, title: `Skills Demo Agent`, brandIcon: _jsx(BriefcaseIcon, { size: 16 }), placeholder: "Ask the agent to use its skills...", showHeader: true, showNewChatButton: true, showClearButton: false, showTokenUsage: true, showSkillsMenu: true, autoFocus: true, height: "100%", runtimeId: agentId, historyEndpoint: `${agentBaseUrl}/api/v1/history`, headerActions: _jsx(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: _jsxs(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: ["Skills: ", skills.length] }) }), suggestions: [
195
+ }, children: _jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "Agent already running - reconnected." }) })), _jsxs(Box, { sx: { flex: 1, minHeight: 0, display: 'flex' }, children: [_jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: _jsx(Chat, { protocol: "vercel-ai", baseUrl: agentBaseUrl, agentId: agentId, authToken: chatAuthToken, title: `Skills Demo Agent`, brandIcon: _jsx(BriefcaseIcon, { size: 16 }), placeholder: "Ask the agent to use its skills...", showHeader: true, showNewChatButton: true, showClearButton: true, showTokenUsage: true, showSkillsMenu: true, autoFocus: true, height: "100%", runtimeId: agentId, historyEndpoint: `${agentBaseUrl}/api/v1/history`, headerActions: _jsx(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: _jsxs(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: ["Skills: ", skills.length] }) }), suggestions: [
196
196
  {
197
197
  title: 'List available skills',
198
198
  message: 'List all your available skills and what they can do.',
@@ -248,7 +248,7 @@ const AgentSkillsInner = ({ onLogout }) => {
248
248
  }, children: [_jsx(Heading, { as: "h5", sx: { fontSize: 0, mb: 1 }, children: "Skill Statuses" }), _jsxs(Box, { sx: { fontSize: 0, color: 'fg.muted' }, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1, mb: 1 }, children: [_jsx(Label, { size: "small", variant: "secondary", children: "available" }), _jsx(Text, { children: "In catalog, not yet enabled" })] }), _jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1, mb: 1 }, children: [_jsx(Label, { size: "small", variant: "attention", children: "enabled" }), _jsx(Text, { children: "Enabled, loading pending" })] }), _jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1 }, children: [_jsx(Label, { size: "small", variant: "success", children: "loaded" }), _jsx(Text, { children: "SKILL.md loaded, in system prompt" })] })] })] })] })] })] })] }));
249
249
  };
250
250
  const syncTokenToIamStore = (token) => {
251
- import('@datalayer/core/lib/state').then(({ iamStore }) => {
251
+ import('../state/substates').then(({ iamStore }) => {
252
252
  iamStore.setState({ token });
253
253
  });
254
254
  };
@@ -264,7 +264,7 @@ const AgentSkillsExample = () => {
264
264
  const handleLogout = useCallback(() => {
265
265
  clearAuth();
266
266
  hasSynced.current = false;
267
- import('@datalayer/core/lib/state').then(({ iamStore }) => {
267
+ import('../state/substates').then(({ iamStore }) => {
268
268
  iamStore.setState({ token: undefined });
269
269
  });
270
270
  }, [clearAuth]);
@@ -24,9 +24,9 @@ import { ThemedProvider } from './utils/themedProvider';
24
24
  import { uniqueAgentId } from './utils/agentId';
25
25
  import { useSimpleAuthStore } from '@datalayer/core/lib/views/otel';
26
26
  import { Chat } from '../chat';
27
+ import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
27
28
  const AGENT_NAME = 'subagents-example-agent';
28
29
  const AGENTSPEC_ID = 'example-subagents';
29
- const DEFAULT_LOCAL_BASE_URL = import.meta.env.VITE_BASE_URL || 'http://localhost:8765';
30
30
  const SUBAGENTS = [
31
31
  {
32
32
  name: 'researcher',
@@ -51,7 +51,7 @@ const AgentSubagentsInner = ({ onLogout, }) => {
51
51
  const [hookError, setHookError] = useState(null);
52
52
  const [agentId, setAgentId] = useState(agentName);
53
53
  const [isReconnectedAgent, setIsReconnectedAgent] = useState(false);
54
- const agentBaseUrl = DEFAULT_LOCAL_BASE_URL;
54
+ const agentBaseUrl = useExampleAgentRuntimesUrl();
55
55
  const chatAuthToken = token === null ? undefined : token;
56
56
  const authFetch = useCallback((url, opts = {}) => fetch(url, {
57
57
  ...opts,
@@ -132,7 +132,7 @@ const AgentSubagentsInner = ({ onLogout, }) => {
132
132
  flexDirection: 'column',
133
133
  alignItems: 'center',
134
134
  justifyContent: 'center',
135
- height: '100vh',
135
+ height: '100%',
136
136
  gap: 3,
137
137
  }, children: [_jsx(Spinner, { size: "large" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Launching subagents example agent..." })] }));
138
138
  }
@@ -140,7 +140,7 @@ const AgentSubagentsInner = ({ onLogout, }) => {
140
140
  return _jsx(ErrorView, { error: hookError, onLogout: onLogout });
141
141
  }
142
142
  return (_jsxs(Box, { sx: {
143
- height: 'calc(100vh - 60px)',
143
+ height: '100%',
144
144
  display: 'flex',
145
145
  flexDirection: 'column',
146
146
  }, children: [_jsxs(Box, { sx: {
@@ -13,12 +13,12 @@ import { CheckCircleIcon } from '@primer/octicons-react';
13
13
  import { useSimpleAuthStore } from '@datalayer/core/lib/views/otel';
14
14
  import { ThemedProvider } from './utils/themedProvider';
15
15
  import { uniqueAgentId } from './utils/agentId';
16
+ import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
16
17
  import { Chat } from '../chat';
17
18
  import { useAgentRuntimeApprovals } from '../stores/agentRuntimeStore';
18
19
  const queryClient = new QueryClient();
19
20
  const AGENT_NAME_PREFIX = 'tool-approval-example-agent';
20
21
  const DEFAULT_AGENTSPEC_ID = 'example-tool-approvals';
21
- const DEFAULT_LOCAL_BASE_URL = import.meta.env.VITE_BASE_URL || 'http://localhost:8765';
22
22
  const getSelectedAgentspecIdFromUi = () => {
23
23
  const params = new URLSearchParams(window.location.search);
24
24
  const directKeys = [
@@ -71,7 +71,7 @@ const AgentToolApprovalsInner = ({ onLogout, }) => {
71
71
  const [agentId, setAgentId] = useState(agentName);
72
72
  const [isReconnectedAgent, setIsReconnectedAgent] = useState(false);
73
73
  const chatAuthToken = token === null ? undefined : token;
74
- const agentBaseUrl = DEFAULT_LOCAL_BASE_URL;
74
+ const agentBaseUrl = useExampleAgentRuntimesUrl();
75
75
  const podName = 'localhost';
76
76
  const approvals = useAgentRuntimeApprovals();
77
77
  const pendingApprovalCount = useMemo(() => approvals.filter(approval => approval.status === 'pending' &&
@@ -188,7 +188,7 @@ const AgentToolApprovalsInner = ({ onLogout, }) => {
188
188
  py: 1,
189
189
  borderBottom: '1px solid',
190
190
  borderColor: 'border.default',
191
- }, children: _jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "Agent already running - reconnected." }) })), _jsx(Box, { sx: { flex: 1, minHeight: 0, display: 'flex' }, children: _jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: _jsx(Chat, { protocol: "vercel-ai", baseUrl: agentBaseUrl, agentId: agentId, authToken: chatAuthToken, title: `Tool Approval Agent - ${podName}`, brandIcon: _jsx(CheckCircleIcon, { size: 16 }), placeholder: "Ask for actions that require approval...", showHeader: true, showNewChatButton: true, showClearButton: false, showTokenUsage: true, autoFocus: true, height: "100%", runtimeId: agentId, historyEndpoint: `${agentBaseUrl}/api/v1/history`, headerActions: _jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsxs(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: ["Pending: ", pendingApprovalCount] }), _jsxs("label", { style: {
191
+ }, children: _jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "Agent already running - reconnected." }) })), _jsx(Box, { sx: { flex: 1, minHeight: 0, display: 'flex' }, children: _jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: _jsx(Chat, { protocol: "vercel-ai", baseUrl: agentBaseUrl, agentId: agentId, authToken: chatAuthToken, title: `Tool Approval Agent - ${podName}`, brandIcon: _jsx(CheckCircleIcon, { size: 16 }), placeholder: "Ask for actions that require approval...", showHeader: true, showNewChatButton: true, showClearButton: true, showTokenUsage: true, autoFocus: true, height: "100%", runtimeId: agentId, historyEndpoint: `${agentBaseUrl}/api/v1/history`, headerActions: _jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsxs(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: ["Pending: ", pendingApprovalCount] }), _jsxs("label", { style: {
192
192
  display: 'flex',
193
193
  alignItems: 'center',
194
194
  gap: 6,
@@ -223,7 +223,7 @@ const AgentToolApprovalsInner = ({ onLogout, }) => {
223
223
  ], submitOnSuggestionClick: true }) }) })] }));
224
224
  };
225
225
  const syncTokenToIamStore = (token) => {
226
- import('@datalayer/core/lib/state').then(({ iamStore }) => {
226
+ import('../state/substates').then(({ iamStore }) => {
227
227
  iamStore.setState({ token });
228
228
  });
229
229
  };
@@ -239,7 +239,7 @@ const AgentToolApprovalsExample = () => {
239
239
  const handleLogout = useCallback(() => {
240
240
  clearAuth();
241
241
  hasSynced.current = false;
242
- import('@datalayer/core/lib/state').then(({ iamStore }) => {
242
+ import('../state/substates').then(({ iamStore }) => {
243
243
  iamStore.setState({ token: undefined });
244
244
  });
245
245
  }, [clearAuth]);
@@ -25,6 +25,7 @@ import { ThemedProvider } from './utils/themedProvider';
25
25
  import { uniqueAgentId } from './utils/agentId';
26
26
  import { useSimpleAuthStore } from '@datalayer/core/lib/views/otel';
27
27
  import { Chat } from '../chat';
28
+ import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
28
29
  import { useConnectedIdentities } from '../identity';
29
30
  import { ToolApprovalBanner, ToolApprovalDialog, } from '../chat/tools';
30
31
  import { useAgentEvents, useDeleteAgentEvent, useMarkEventRead, useMarkEventUnread, useAIAgentsWebSocket, } from '../hooks';
@@ -34,11 +35,10 @@ const queryClient = new QueryClient();
34
35
  // ─── Constants ─────────────────────────────────────────────────────────────
35
36
  const AGENT_NAME = 'trigger-example-agent';
36
37
  const AGENTSPEC_ID = 'example-one-trigger';
37
- const APPROVAL_AGENT_NAME = 'trigger-approval-example-agent';
38
- const APPROVAL_AGENTSPEC_ID = 'example-one-trigger-approval';
38
+ const APPROVAL_AGENT_NAME = 'trigger-approval-agent';
39
+ const APPROVAL_AGENTSPEC_ID = 'example-tool-approvals';
39
40
  const ONCE_TRIGGER_PROMPT = "List the user's top 3 public and top 3 private GitHub repositories, ranked by recent activity, and provide a brief summary of each. Execute exactly two tool calls: run_skill_script(skill_name='github', script_name='list_repos', kwargs={visibility:'public', sort:'updated', limit:3, format:'json'}) and run_skill_script(skill_name='github', script_name='list_repos', kwargs={visibility:'private', sort:'updated', limit:3, format:'json'}). Do not call list_skills/load_skill/read_skill_resource. Do not retry. If a tool call fails, report failure_reason/error/stderr exactly as returned.";
40
41
  const ONCE_TRIGGER_APPROVAL_PROMPT = 'Use the runtime_sensitive_echo tool once.';
41
- const DEFAULT_LOCAL_BASE_URL = import.meta.env.VITE_BASE_URL || 'http://localhost:8765';
42
42
  const DEFAULT_CRON = '0 8 * * *'; // daily at 08:00 UTC
43
43
  // ─── Inner component (rendered after auth) ─────────────────────────────────
44
44
  const AgentTriggerInner = ({ onLogout, }) => {
@@ -58,7 +58,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
58
58
  const [isReady, setIsReady] = useState(false);
59
59
  const [hookError, setHookError] = useState(null);
60
60
  const [agentId, setAgentId] = useState(agentName);
61
- const agentBaseUrl = DEFAULT_LOCAL_BASE_URL;
61
+ const agentBaseUrl = useExampleAgentRuntimesUrl();
62
62
  const chatAuthToken = token === null ? undefined : token;
63
63
  // Cron state
64
64
  const [cronExpr, setCronExpr] = useState(DEFAULT_CRON);
@@ -807,7 +807,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
807
807
  flexDirection: 'column',
808
808
  alignItems: 'center',
809
809
  justifyContent: 'center',
810
- height: '100vh',
810
+ height: '100%',
811
811
  gap: 3,
812
812
  }, children: [_jsx(Spinner, { size: "large" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Launching runtime for trigger agent..." })] }));
813
813
  }
@@ -822,7 +822,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
822
822
  padding: 0,
823
823
  minWidth: 0,
824
824
  }, children: _jsxs(Box, { sx: {
825
- height: 'calc(100vh - 60px)',
825
+ height: '100%',
826
826
  display: 'flex',
827
827
  flexDirection: 'column',
828
828
  }, children: [_jsxs(Box, { sx: {
@@ -855,7 +855,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
855
855
  setActiveApproval(null);
856
856
  }
857
857
  }
858
- }, onClose: () => setActiveApproval(null) }), approvalError && (_jsx(Box, { sx: { px: 3, py: 1 }, children: _jsx(Text, { sx: { color: 'danger.fg', fontSize: 0 }, children: approvalError }) })), _jsxs(Box, { sx: { flex: 1, minHeight: 0, display: 'flex' }, children: [_jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: isReady ? (_jsx(Chat, { protocol: "vercel-ai", baseUrl: agentBaseUrl, agentId: agentId, authToken: chatAuthToken, title: "Trigger Agent", brandIcon: _jsx(ZapIcon, { size: 16 }), description: `View-only trigger output. Cron: ${cronExpr} | Webhook: ${webhookEnabled ? 'on' : 'off'} | Event: ${eventSubscribed ? eventTopic : 'none'}`, showHeader: true, autoFocus: false, height: "100%", runtimeId: agentId, showInput: true, disableInputPrompt: true, showModelSelector: false, showToolsMenu: true, showSkillsMenu: true })) : (_jsx(Box, { sx: {
858
+ }, onClose: () => setActiveApproval(null) }), approvalError && (_jsx(Box, { sx: { px: 3, py: 1 }, children: _jsx(Text, { sx: { color: 'danger.fg', fontSize: 0 }, children: approvalError }) })), _jsxs(Box, { sx: { flex: 1, minHeight: 0, display: 'flex' }, children: [_jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: isReady ? (_jsx(Chat, { protocol: "vercel-ai", baseUrl: agentBaseUrl, agentId: agentId, authToken: chatAuthToken, title: "Trigger Agent", brandIcon: _jsx(ZapIcon, { size: 16 }), description: `View-only trigger output. Cron: ${cronExpr} | Webhook: ${webhookEnabled ? 'on' : 'off'} | Event: ${eventSubscribed ? eventTopic : 'none'}`, showHeader: true, autoFocus: false, height: "100%", runtimeId: agentId, showInput: true, disableInputPrompt: true, showModelSelector: true, showToolsMenu: true, showSkillsMenu: true })) : (_jsx(Box, { sx: {
859
859
  height: '100%',
860
860
  display: 'flex',
861
861
  alignItems: 'center',
@@ -1315,7 +1315,7 @@ const AgentTriggerInner = ({ onLogout, }) => {
1315
1315
  };
1316
1316
  // ─── Sync token to core IAM store ──────────────────────────────────────────
1317
1317
  const syncTokenToIamStore = (token) => {
1318
- import('@datalayer/core/lib/state').then(({ iamStore }) => {
1318
+ import('../state/substates').then(({ iamStore }) => {
1319
1319
  iamStore.setState({ token });
1320
1320
  });
1321
1321
  };
@@ -1332,7 +1332,7 @@ const AgentTriggersExample = () => {
1332
1332
  const handleLogout = useCallback(() => {
1333
1333
  clearAuth();
1334
1334
  hasSynced.current = false;
1335
- import('@datalayer/core/lib/state').then(({ iamStore }) => {
1335
+ import('../state/substates').then(({ iamStore }) => {
1336
1336
  iamStore.setState({ token: undefined });
1337
1337
  });
1338
1338
  }, [clearAuth]);
@@ -211,11 +211,11 @@ const resolveCloudRuntimeBaseUrlFromSpec = (spec) => {
211
211
  return null;
212
212
  }
213
213
  const preferredKeys = [
214
- 'runtimesRunUrl',
215
- 'runtimeRunUrl',
214
+ 'runtimesUrl',
215
+ 'runtimeUrl',
216
216
  'runtimes_url',
217
217
  'runtime_url',
218
- 'runUrl',
218
+ 'datalayerUrl',
219
219
  'baseUrl',
220
220
  'endpoint',
221
221
  ];
@@ -298,13 +298,13 @@ githubClientId, kaggleToken, }) => {
298
298
  const { configuration } = useCoreStore();
299
299
  const { token } = useSimpleAuthStore();
300
300
  const cloudCatalogBaseUrl = useMemo(() => {
301
- const configured = normalizeHttpUrl(configuration?.runtimesRunUrl);
301
+ const configured = normalizeHttpUrl(configuration?.runtimesUrl);
302
302
  const envConfigured = normalizeHttpUrl(import.meta.env.VITE_DATALAYER_AGENT_RUNTIMES_URL);
303
303
  if (configured && !isLocalhostUrl(configured)) {
304
304
  return configured;
305
305
  }
306
306
  return envConfigured || 'https://r1.datalayer.run';
307
- }, [configuration?.runtimesRunUrl]);
307
+ }, [configuration?.runtimesUrl]);
308
308
  const isCloudMode = isCloudSpecSelection(selectedAgentId);
309
309
  const selectedSpec = selectedCloudSpec || selectedLibrarySpec;
310
310
  const cloudRuntimeCreationBaseUrl = useMemo(() => {
@@ -770,42 +770,64 @@ githubClientId, kaggleToken, }) => {
770
770
  const specId = isSpecSelection(selectedAgentId)
771
771
  ? getSpecId(selectedAgentId)
772
772
  : undefined;
773
- const response = await fetch(`${baseUrl}/api/v1/agents`, {
774
- method: 'POST',
775
- headers: {
776
- 'Content-Type': 'application/json',
777
- },
778
- body: JSON.stringify({
779
- name: agentName,
780
- description: description || `Agent created via UI (${agentLibrary})`,
781
- goal: goal || undefined,
782
- agent_library: agentLibrary,
783
- transport: transport,
784
- model: model,
785
- system_prompt: systemPrompt || DEFAULT_SYSTEM_PROMPT,
786
- system_prompt_codemode_addons: systemPromptCodemodeAddons || undefined,
787
- tools: tools,
788
- sandbox_variant: sandboxVariant || undefined,
789
- enable_skills: enableSkills,
790
- enable_codemode: enableCodemode,
791
- allow_direct_tool_calls: allowDirectToolCalls,
792
- enable_tool_reranker: enableToolReranker,
793
- selected_mcp_servers: selectedMcpServers,
794
- skills: selectedSkills,
795
- jupyter_sandbox: useJupyterSandbox ? jupyterSandboxUrl : undefined,
796
- agent_spec: mergedSpecForLaunch,
797
- ...(specId ? { agent_spec_id: specId } : {}),
798
- }),
799
- });
800
- if (!response.ok) {
801
- const errorData = await response
802
- .json()
803
- .catch(() => ({ detail: 'Unknown error' }));
804
- throw new Error(errorData.detail || `Failed to create agent: ${response.status}`);
773
+ const createRequestBody = {
774
+ name: agentName,
775
+ description: description || `Agent created via UI (${agentLibrary})`,
776
+ goal: goal || undefined,
777
+ agent_library: agentLibrary,
778
+ transport: transport,
779
+ model: model,
780
+ system_prompt: systemPrompt || DEFAULT_SYSTEM_PROMPT,
781
+ system_prompt_codemode_addons: systemPromptCodemodeAddons || undefined,
782
+ tools: tools,
783
+ sandbox_variant: sandboxVariant || undefined,
784
+ enable_skills: enableSkills,
785
+ enable_codemode: enableCodemode,
786
+ allow_direct_tool_calls: allowDirectToolCalls,
787
+ enable_tool_reranker: enableToolReranker,
788
+ selected_mcp_servers: selectedMcpServers,
789
+ skills: selectedSkills,
790
+ jupyter_sandbox: useJupyterSandbox ? jupyterSandboxUrl : undefined,
791
+ agent_spec: mergedSpecForLaunch,
792
+ ...(specId ? { agent_spec_id: specId } : {}),
793
+ };
794
+ const tryCreate = async () => {
795
+ const response = await fetch(`${baseUrl}/api/v1/agents`, {
796
+ method: 'POST',
797
+ headers: {
798
+ 'Content-Type': 'application/json',
799
+ },
800
+ body: JSON.stringify(createRequestBody),
801
+ });
802
+ if (!response.ok) {
803
+ const errorData = await response
804
+ .json()
805
+ .catch(() => ({ detail: 'Unknown error' }));
806
+ throw new Error(errorData.detail || `Failed to create agent: ${response.status}`);
807
+ }
808
+ const data = await response.json();
809
+ console.log('[AgentRuntimeExample] Agent created:', data);
810
+ return data.id;
811
+ };
812
+ try {
813
+ return await tryCreate();
814
+ }
815
+ catch (error) {
816
+ const errorMessage = error instanceof Error ? error.message : 'Failed to create agent';
817
+ const alreadyExists = /already exists/i.test(errorMessage);
818
+ // If the agent already exists, terminate (delete) it then retry once.
819
+ if (alreadyExists && agentName) {
820
+ console.warn(`[AgentRuntimeExample] Agent '${agentName}' already exists, deleting and retrying create once.`);
821
+ const deleteResponse = await fetch(`${baseUrl}/api/v1/agents/${encodeURIComponent(agentName)}`, {
822
+ method: 'DELETE',
823
+ });
824
+ if (deleteResponse.ok) {
825
+ return await tryCreate();
826
+ }
827
+ throw new Error(`Failed to delete existing agent '${agentName}' before retry: ${deleteResponse.status}`);
828
+ }
829
+ throw error;
805
830
  }
806
- const data = await response.json();
807
- console.log('[AgentRuntimeExample] Agent created:', data);
808
- return data.id;
809
831
  }
810
832
  catch (error) {
811
833
  const errorMessage = error instanceof Error ? error.message : 'Failed to create agent';
@@ -1021,7 +1043,7 @@ githubClientId, kaggleToken, }) => {
1021
1043
  showModelSelector: true,
1022
1044
  showToolsMenu: true,
1023
1045
  showSkillsMenu: true,
1024
- showInformation: false,
1046
+ showInformation: true,
1025
1047
  codemodeEnabled: enableCodemode,
1026
1048
  initialModel: model,
1027
1049
  mcpServers: selectedMcpServers,
@@ -3,13 +3,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  * Copyright (c) 2025-2026 Datalayer, Inc.
4
4
  * Distributed under the terms of the Modified BSD License.
5
5
  */
6
- import { useCallback, useEffect, useRef, useState } from 'react';
6
+ import { useMemo } from 'react';
7
7
  import { Spinner, Text } from '@primer/react';
8
8
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
9
9
  import { Box } from '@datalayer/primer-addons';
10
10
  import { ThemedProvider } from './utils/themedProvider';
11
11
  import { uniqueAgentId } from './utils/agentId';
12
- import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
12
+ import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
13
13
  import { Chat } from '../chat';
14
14
  // Create a query client for React Query
15
15
  const queryClient = new QueryClient({
@@ -24,28 +24,24 @@ const queryClient = new QueryClient({
24
24
  });
25
25
  const AGENT_NAME = 'datalayer-assistant';
26
26
  /**
27
- * Hook to ensure the agent exists on the server
28
- * Creates the agent if it doesn't exist
27
+ * Agent Runtime Custom Example Component
28
+ *
29
+ * Demonstrates the unified Chat component with AG-UI transport
30
+ * and all necessary providers:
31
+ * - QueryClientProvider for data fetching
32
+ * - Auto-creates agent on the server if it doesn't exist
29
33
  */
30
- function useEnsureAgent(baseUrl) {
31
- const agentName = useRef(uniqueAgentId(AGENT_NAME)).current;
32
- const [agentId, setAgentId] = useState(null);
33
- const [isLoading, setIsLoading] = useState(true);
34
- const [error, setError] = useState(null);
35
- const createAgent = useCallback(async () => {
36
- try {
37
- const response = await fetch(`${baseUrl}/api/v1/agents`, {
38
- method: 'POST',
39
- headers: {
40
- 'Content-Type': 'application/json',
41
- },
42
- body: JSON.stringify({
43
- name: agentName,
44
- description: 'Datalayer AI Assistant - Your helpful coding companion',
45
- agent_library: 'pydantic-ai',
46
- transport: 'ag-ui',
47
- model: 'openai:gpt-4o-mini',
48
- system_prompt: `You are custom chat assistant, a helpful AI assistant specialized in data science, Python programming, and Jupyter notebooks.
34
+ const AgentRuntimeCustomExample = () => {
35
+ const agentName = useMemo(() => uniqueAgentId(AGENT_NAME), []);
36
+ const { agentId, status, error, isReady } = useExampleAgentRuntime({
37
+ exampleId: 'ChatCustomExample',
38
+ agentName,
39
+ agentConfig: {
40
+ description: 'Datalayer AI Assistant - Your helpful coding companion',
41
+ agentLibrary: 'pydantic-ai',
42
+ protocol: 'ag-ui',
43
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
44
+ systemPrompt: `You are custom chat assistant, a helpful AI assistant specialized in data science, Python programming, and Jupyter notebooks.
49
45
 
50
46
  You can help users with:
51
47
  - Writing and debugging Python code
@@ -55,60 +51,10 @@ You can help users with:
55
51
  - General programming questions
56
52
 
57
53
  Be concise, helpful, and provide working code examples when appropriate.`,
58
- }),
59
- });
60
- if (!response.ok) {
61
- const errorData = await response
62
- .json()
63
- .catch(() => ({ detail: 'Unknown error' }));
64
- throw new Error(errorData.detail || `Failed to create agent: ${response.status}`);
65
- }
66
- const data = await response.json();
67
- console.log('[AgentRuntimeCustomExample] Agent created:', data);
68
- return data.id;
69
- }
70
- catch (err) {
71
- console.error('[AgentRuntimeCustomExample] Error creating agent:', err);
72
- throw err;
73
- }
74
- }, [agentName, baseUrl]);
75
- const initAgent = useCallback(async () => {
76
- setIsLoading(true);
77
- setError(null);
78
- try {
79
- console.log('[AgentRuntimeCustomExample] Creating new agent...');
80
- const newAgentId = await createAgent();
81
- if (newAgentId) {
82
- setAgentId(newAgentId);
83
- }
84
- else {
85
- setError('Failed to create agent');
86
- }
87
- }
88
- catch (err) {
89
- const errorMessage = err instanceof Error ? err.message : 'Failed to initialize agent';
90
- setError(errorMessage);
91
- }
92
- finally {
93
- setIsLoading(false);
94
- }
95
- }, [createAgent]);
96
- useEffect(() => {
97
- initAgent();
98
- }, [initAgent]);
99
- return { agentId, isLoading, error, retry: initAgent };
100
- }
101
- /**
102
- * Agent Runtime Custom Example Component
103
- *
104
- * Demonstrates the unified Chat component with AG-UI transport
105
- * and all necessary providers:
106
- * - QueryClientProvider for data fetching
107
- * - Auto-creates agent on the server if it doesn't exist
108
- */
109
- const AgentRuntimeCustomExample = () => {
110
- const baseUrl = useExampleAgentRuntimesUrl();
111
- const { agentId, isLoading, error, retry } = useEnsureAgent(baseUrl);
54
+ },
55
+ });
56
+ const isLoading = !isReady && status !== 'error';
57
+ const retry = () => window.location.reload();
112
58
  return (_jsx(QueryClientProvider, { client: queryClient, children: _jsx(ThemedProvider, { children: _jsxs(Box, { sx: {
113
59
  display: 'flex',
114
60
  flexDirection: 'column',
@@ -15,12 +15,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
15
  *
16
16
  * Backend: POST /api/v1/agents → /api/v1/ag-ui/{agentId}/
17
17
  */
18
- import { useEffect, useState } from 'react';
18
+ import { useMemo } from 'react';
19
19
  import { Text, Spinner } from '@primer/react';
20
20
  import { Box, setupPrimerPortals } from '@datalayer/primer-addons';
21
21
  import { ThemedProvider } from './utils/themedProvider';
22
22
  import { uniqueAgentId } from './utils/agentId';
23
23
  import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
24
+ import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
24
25
  import { ErrorView } from './components';
25
26
  import { Chat } from '../chat';
26
27
  setupPrimerPortals();
@@ -28,49 +29,17 @@ const AGENTSPEC_ID = 'example-simple';
28
29
  const AGENT_NAME = 'simple';
29
30
  const AgentRuntimeChatExample = () => {
30
31
  const baseUrl = useExampleAgentRuntimesUrl();
31
- const [agentId, setAgentId] = useState(null);
32
- const [error, setError] = useState(null);
33
- const [isCreating, setIsCreating] = useState(true);
34
- // Create the agent on mount — always create a fresh instance with a random
35
- // slug so that each run starts with clean OTEL data.
36
- useEffect(() => {
37
- let cancelled = false;
38
- const name = uniqueAgentId(AGENT_NAME);
39
- const createAgent = async () => {
40
- try {
41
- const response = await fetch(`${baseUrl}/api/v1/agents`, {
42
- method: 'POST',
43
- headers: { 'Content-Type': 'application/json' },
44
- body: JSON.stringify({
45
- name,
46
- agent_spec_id: AGENTSPEC_ID,
47
- transport: 'ag-ui',
48
- }),
49
- });
50
- if (!response.ok) {
51
- const data = await response
52
- .json()
53
- .catch(() => ({ detail: 'Unknown error' }));
54
- throw new Error(data.detail || `Failed to create agent: ${response.status}`);
55
- }
56
- const data = await response.json();
57
- if (!cancelled) {
58
- setAgentId(data.id);
59
- setIsCreating(false);
60
- }
61
- }
62
- catch (err) {
63
- if (!cancelled) {
64
- setError(err instanceof Error ? err.message : 'Failed to create agent');
65
- setIsCreating(false);
66
- }
67
- }
68
- };
69
- createAgent();
70
- return () => {
71
- cancelled = true;
72
- };
73
- }, [baseUrl]);
32
+ const agentName = useMemo(() => uniqueAgentId(AGENT_NAME), []);
33
+ const { agentId, error, status, isReady } = useExampleAgentRuntime({
34
+ exampleId: 'ChatExample',
35
+ agentName,
36
+ specId: AGENTSPEC_ID,
37
+ agentConfig: {
38
+ protocol: 'ag-ui',
39
+ agentSpecId: AGENTSPEC_ID,
40
+ },
41
+ });
42
+ const isCreating = !isReady && status !== 'error';
74
43
  // Loading state while agent is being created
75
44
  if (isCreating) {
76
45
  return (_jsx(ThemedProvider, { children: _jsxs(Box, { sx: {