@datalayer/agent-runtimes 1.0.9 → 1.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) 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 +468 -40
  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.d.ts +4 -4
  65. package/lib/client/AgentsMixin.js +35 -35
  66. package/lib/client/SdkAgentRuntimesClient.d.ts +1 -1
  67. package/lib/client/SdkAgentRuntimesClient.js +1 -1
  68. package/lib/client/mixins/RuntimesMixin.d.ts +93 -0
  69. package/lib/client/mixins/RuntimesMixin.js +229 -0
  70. package/lib/client/mixins/SpacerMixin.d.ts +210 -0
  71. package/lib/client/mixins/SpacerMixin.js +615 -0
  72. package/lib/client/utils/spacerUtils.d.ts +18 -0
  73. package/lib/client/utils/spacerUtils.js +32 -0
  74. package/lib/collaboration/DatalayerCollaboration.d.ts +13 -0
  75. package/lib/collaboration/DatalayerCollaboration.js +28 -0
  76. package/lib/collaboration/DatalayerCollaborationProvider.d.ts +58 -0
  77. package/lib/collaboration/DatalayerCollaborationProvider.js +148 -0
  78. package/lib/collaboration/index.d.ts +2 -0
  79. package/lib/collaboration/index.js +6 -0
  80. package/lib/components/AgentSummary.d.ts +19 -0
  81. package/lib/components/AgentSummary.js +89 -0
  82. package/lib/components/ToolApprovalCard.js +13 -3
  83. package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +13 -0
  84. package/lib/components/a2ui/A2uiSurfaceComposed.js +110 -0
  85. package/lib/components/a2ui/index.d.ts +2 -0
  86. package/lib/components/a2ui/index.js +6 -0
  87. package/lib/components/a2ui/styles.d.ts +14 -0
  88. package/lib/components/a2ui/styles.js +142 -0
  89. package/lib/components/context/SpaceSelect.d.ts +2 -0
  90. package/lib/components/context/SpaceSelect.js +42 -0
  91. package/lib/components/flashes/FlashDisclaimer.d.ts +2 -0
  92. package/lib/components/flashes/FlashDisclaimer.js +17 -0
  93. package/lib/components/icons/ArtifactIcon.d.ts +10 -0
  94. package/lib/components/icons/ArtifactIcon.js +58 -0
  95. package/lib/components/icons/index.d.ts +1 -0
  96. package/lib/components/icons/index.js +5 -0
  97. package/lib/components/index.d.ts +5 -0
  98. package/lib/components/index.js +5 -0
  99. package/lib/components/nbgrader/NbGradesDetails.d.ts +5 -0
  100. package/lib/components/nbgrader/NbGradesDetails.js +19 -0
  101. package/lib/components/nbgrader/index.d.ts +1 -0
  102. package/lib/components/nbgrader/index.js +5 -0
  103. package/lib/components/progress/CreditsIndicator.d.ts +33 -0
  104. package/lib/components/progress/CreditsIndicator.js +23 -0
  105. package/lib/components/progress/index.d.ts +2 -0
  106. package/lib/components/progress/index.js +6 -0
  107. package/lib/components/runtimes/RuntimeCellVariables.d.ts +39 -0
  108. package/lib/components/runtimes/RuntimeCellVariables.js +172 -0
  109. package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +37 -0
  110. package/lib/components/runtimes/RuntimeCellVariablesDialog.js +101 -0
  111. package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +57 -0
  112. package/lib/components/runtimes/RuntimeLauncherDialog.js +275 -0
  113. package/lib/components/runtimes/RuntimePickerBase.d.ts +69 -0
  114. package/lib/components/runtimes/RuntimePickerBase.js +122 -0
  115. package/lib/components/runtimes/RuntimePickerCell.d.ts +34 -0
  116. package/lib/components/runtimes/RuntimePickerCell.js +104 -0
  117. package/lib/components/runtimes/RuntimePickerNotebook.d.ts +42 -0
  118. package/lib/components/runtimes/RuntimePickerNotebook.js +232 -0
  119. package/lib/components/runtimes/RuntimeReservationControl.d.ts +47 -0
  120. package/lib/components/runtimes/RuntimeReservationControl.js +42 -0
  121. package/lib/components/runtimes/RuntimeSimplePicker.d.ts +38 -0
  122. package/lib/components/runtimes/RuntimeSimplePicker.js +155 -0
  123. package/lib/components/runtimes/RuntimeTransfer.d.ts +16 -0
  124. package/lib/components/runtimes/RuntimeTransfer.js +5 -0
  125. package/lib/components/runtimes/RuntimeUtils.d.ts +17 -0
  126. package/lib/components/runtimes/RuntimeUtils.js +178 -0
  127. package/lib/components/runtimes/RuntimeVariables.d.ts +38 -0
  128. package/lib/components/runtimes/RuntimeVariables.js +75 -0
  129. package/lib/components/runtimes/index.d.ts +11 -0
  130. package/lib/components/runtimes/index.js +15 -0
  131. package/lib/components/scheduler/ScheduleMenu.d.ts +54 -0
  132. package/lib/components/scheduler/ScheduleMenu.js +154 -0
  133. package/lib/components/scheduler/index.d.ts +1 -0
  134. package/lib/components/scheduler/index.js +5 -0
  135. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +33 -0
  136. package/lib/components/snapshots/SandboxSnapshotMenu.js +169 -0
  137. package/lib/components/snapshots/index.d.ts +1 -0
  138. package/lib/components/snapshots/index.js +5 -0
  139. package/lib/components/snippets/SnippetDialog.d.ts +42 -0
  140. package/lib/components/snippets/SnippetDialog.js +42 -0
  141. package/lib/components/students/StudentItemStatus.d.ts +7 -0
  142. package/lib/components/students/StudentItemStatus.js +68 -0
  143. package/lib/components/students/index.d.ts +1 -0
  144. package/lib/components/students/index.js +5 -0
  145. package/lib/components/tokens/SpaceVariantToken.d.ts +5 -0
  146. package/lib/components/tokens/SpaceVariantToken.js +23 -0
  147. package/lib/components/tokens/index.d.ts +1 -0
  148. package/lib/components/tokens/index.js +5 -0
  149. package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +4 -0
  150. package/lib/components/toolbars/AssignmentEditorToolbar.js +18 -0
  151. package/lib/components/toolbars/DocumentEditorToolbar.d.ts +2 -0
  152. package/lib/components/toolbars/DocumentEditorToolbar.js +12 -0
  153. package/lib/components/toolbars/NotebookEditorToolbar.d.ts +29 -0
  154. package/lib/components/toolbars/NotebookEditorToolbar.js +30 -0
  155. package/lib/config/AgentConfiguration.d.ts +2 -2
  156. package/lib/config/index.d.ts +1 -1
  157. package/lib/context/ContextInspector.d.ts +1 -14
  158. package/lib/context/ContextInspector.js +3 -73
  159. package/lib/context/CostUsageChart.d.ts +4 -3
  160. package/lib/context/CostUsageChart.js +236 -35
  161. package/lib/context/MessageHistory.d.ts +30 -0
  162. package/lib/context/MessageHistory.js +129 -0
  163. package/lib/context/TokenUsageChart.d.ts +4 -3
  164. package/lib/context/TokenUsageChart.js +180 -30
  165. package/lib/context/TurnGraphChart.d.ts +1 -1
  166. package/lib/context/TurnGraphChart.js +6 -6
  167. package/lib/examples/A2UiAgentExample.d.ts +22 -0
  168. package/lib/examples/A2UiAgentExample.js +442 -0
  169. package/lib/examples/A2UiComponentsGalleryExample.d.ts +3 -0
  170. package/lib/examples/A2UiComponentsGalleryExample.js +863 -0
  171. package/lib/examples/A2UiContactCardExample.js +9 -5
  172. package/lib/examples/A2UiRestaurantExample.js +23 -8
  173. package/lib/examples/A2UiViewerExample.js +75 -3
  174. package/lib/examples/AgUiAgenticExample.d.ts +1 -12
  175. package/lib/examples/AgUiAgenticExample.js +52 -8
  176. package/lib/examples/AgUiBackendToolRenderingExample.d.ts +1 -16
  177. package/lib/examples/AgUiBackendToolRenderingExample.js +32 -17
  178. package/lib/examples/AgUiHaikuGenUiExample.d.ts +1 -17
  179. package/lib/examples/AgUiHaikuGenUiExample.js +49 -33
  180. package/lib/examples/AgUiHumanInTheLoopExample.d.ts +1 -12
  181. package/lib/examples/AgUiHumanInTheLoopExample.js +21 -6
  182. package/lib/examples/AgUiSharedStateExample.d.ts +1 -14
  183. package/lib/examples/AgUiSharedStateExample.js +21 -6
  184. package/lib/examples/AgUiToolsBasedGenUiExample.d.ts +1 -14
  185. package/lib/examples/AgUiToolsBasedGenUiExample.js +21 -6
  186. package/lib/examples/AgentCheckpointsExample.d.ts +1 -1
  187. package/lib/examples/AgentCheckpointsExample.js +21 -22
  188. package/lib/examples/AgentCodemodeExample.js +3 -3
  189. package/lib/examples/AgentEvalsExample.js +8 -8
  190. package/lib/examples/AgentGuardrailsExample.js +22 -17
  191. package/lib/examples/AgentHooksExample.js +16 -57
  192. package/lib/examples/AgentInferenceProviderExample.js +8 -8
  193. package/lib/examples/AgentLoopExample.d.ts +10 -0
  194. package/lib/examples/AgentLoopExample.js +304 -0
  195. package/lib/examples/AgentMCPExample.js +9 -9
  196. package/lib/examples/AgentMemoryExample.js +6 -6
  197. package/lib/examples/AgentMonitoringExample.js +116 -46
  198. package/lib/examples/AgentNotificationsExample.js +6 -6
  199. package/lib/examples/AgentOtelExample.d.ts +3 -3
  200. package/lib/examples/AgentOtelExample.js +20 -15
  201. package/lib/examples/AgentOutputsExample.js +8 -8
  202. package/lib/examples/AgentParametersExample.js +24 -36
  203. package/lib/examples/AgentSandboxExample.js +7 -7
  204. package/lib/examples/AgentSkillsExample.js +9 -9
  205. package/lib/examples/AgentSubagentsExample.js +6 -6
  206. package/lib/examples/AgentToolApprovalsExample.js +37 -11
  207. package/lib/examples/AgentTriggersExample.js +12 -12
  208. package/lib/examples/AgentspecsExample.js +63 -41
  209. package/lib/examples/ChatCustomExample.js +23 -77
  210. package/lib/examples/ChatExample.js +15 -46
  211. package/lib/examples/LexicalAgentExample.js +43 -91
  212. package/lib/examples/LexicalAgentSidebarExample.js +45 -73
  213. package/lib/examples/NotebookAgentExample.js +52 -81
  214. package/lib/examples/NotebookAgentSidebarExample.js +43 -71
  215. package/lib/examples/NotebookCollaborationExample.js +11 -9
  216. package/lib/examples/NotebookExample.js +5 -2
  217. package/lib/examples/components/AuthRequiredView.js +1 -1
  218. package/lib/examples/components/ExampleErrorBoundary.d.ts +46 -0
  219. package/lib/examples/components/ExampleErrorBoundary.js +67 -0
  220. package/lib/examples/components/haiku/haiku-card.css +11 -0
  221. package/lib/examples/components/weather/weather-card.css +11 -0
  222. package/lib/examples/example-selector.js +3 -1
  223. package/lib/examples/hooks/useExampleAgentRuntime.d.ts +35 -0
  224. package/lib/examples/hooks/useExampleAgentRuntime.js +82 -0
  225. package/lib/examples/hooks/useSpecRenderToolResult.d.ts +30 -0
  226. package/lib/examples/hooks/useSpecRenderToolResult.js +61 -0
  227. package/lib/examples/index.d.ts +3 -1
  228. package/lib/examples/index.js +3 -1
  229. package/lib/examples/main.js +340 -93
  230. package/lib/examples/utils/a2ui.d.ts +2 -0
  231. package/lib/examples/utils/a2ui.js +97 -2
  232. package/lib/examples/utils/agentSummaryStore.d.ts +21 -0
  233. package/lib/examples/utils/agentSummaryStore.js +23 -0
  234. package/lib/examples/utils/notebooks/Empty.ipynb.json +30 -30
  235. package/lib/examples/utils/runtimeTargetStore.d.ts +9 -0
  236. package/lib/examples/utils/runtimeTargetStore.js +27 -0
  237. package/lib/examples/utils/teardownAgents.d.ts +13 -0
  238. package/lib/examples/utils/teardownAgents.js +78 -0
  239. package/lib/examples/utils/useExampleAgentRuntimesUrl.d.ts +2 -0
  240. package/lib/examples/utils/useExampleAgentRuntimesUrl.js +26 -7
  241. package/lib/examples2/CellExample.d.ts +6 -0
  242. package/lib/examples2/CellExample.js +20 -0
  243. package/lib/examples2/DatalayerNotebookExample.d.ts +16 -0
  244. package/lib/examples2/DatalayerNotebookExample.js +109 -0
  245. package/lib/examples2/NativeNavigationExample.d.ts +8 -0
  246. package/lib/examples2/NativeNavigationExample.js +97 -0
  247. package/lib/examples2/NotebookExample.d.ts +6 -0
  248. package/lib/examples2/NotebookExample.js +19 -0
  249. package/lib/examples2/NotebookMutationsKernel.d.ts +2 -0
  250. package/lib/examples2/NotebookMutationsKernel.js +105 -0
  251. package/lib/examples2/NotebookMutationsServiceManager.d.ts +2 -0
  252. package/lib/examples2/NotebookMutationsServiceManager.js +109 -0
  253. package/lib/examples2/ReactRouterExample.d.ts +6 -0
  254. package/lib/examples2/ReactRouterExample.js +175 -0
  255. package/lib/examples2/example-selector.d.ts +22 -0
  256. package/lib/examples2/example-selector.js +45 -0
  257. package/lib/examples2/index.d.ts +2 -0
  258. package/lib/examples2/index.js +6 -0
  259. package/lib/examples2/lexical-theme.css +436 -0
  260. package/lib/examples2/main.d.ts +2 -0
  261. package/lib/examples2/main.js +330 -0
  262. package/lib/examples2/notebooks/IPyWidgetsExample.ipynb.json +101 -0
  263. package/lib/examples2/notebooks/IPyWidgetsExampleWithState.ipynb.json +112 -0
  264. package/lib/examples2/notebooks/Lite.ipynb.json +128 -0
  265. package/lib/examples2/notebooks/Matplotlib.ipynb.json +137 -0
  266. package/lib/examples2/notebooks/NotebookExample1.ipynb.json +126 -0
  267. package/lib/examples2/notebooks/NotebookExample2.ipynb.json +48 -0
  268. package/lib/examples2/notebooks/NotebookOutputs.ipynb.json +49 -0
  269. package/lib/examples2/notebooks/NotebookToCExample.ipynb.json +102 -0
  270. package/lib/examples2/notebooks/OutputIPyWidgetsExample.d.ts +145 -0
  271. package/lib/examples2/notebooks/OutputIPyWidgetsExample.js +153 -0
  272. package/lib/examples2/notebooks/PyGWalker.ipynb.json +55 -0
  273. package/lib/hooks/index.d.ts +9 -1
  274. package/lib/hooks/index.js +13 -1
  275. package/lib/hooks/useAIAgentsWebSocket.d.ts +1 -1
  276. package/lib/hooks/useAIAgentsWebSocket.js +39 -3
  277. package/lib/hooks/useAgentRuntimes.d.ts +15 -3
  278. package/lib/hooks/useAgentRuntimes.js +188 -29
  279. package/lib/hooks/useAgentsCatalog.d.ts +3 -3
  280. package/lib/hooks/useAgentsCatalog.js +4 -4
  281. package/lib/hooks/useAgentsService.js +5 -5
  282. package/lib/hooks/useCellOutputshot.d.ts +4 -0
  283. package/lib/hooks/useCellOutputshot.js +25 -0
  284. package/lib/hooks/useCheckpoints.d.ts +8 -8
  285. package/lib/hooks/useCheckpoints.js +38 -28
  286. package/lib/hooks/useConfig.d.ts +1 -1
  287. package/lib/hooks/useMonitoring.d.ts +7 -5
  288. package/lib/hooks/useMonitoring.js +16 -10
  289. package/lib/hooks/useNotifications.d.ts +11 -11
  290. package/lib/hooks/useNotifications.js +1 -1
  291. package/lib/hooks/useProgressStore.d.ts +25 -0
  292. package/lib/hooks/useProgressStore.js +58 -0
  293. package/lib/hooks/useProgressTask.d.ts +9 -0
  294. package/lib/hooks/useProgressTask.js +41 -0
  295. package/lib/hooks/useProjects.d.ts +628 -0
  296. package/lib/hooks/useProjects.js +190 -0
  297. package/lib/hooks/useRuntimes.d.ts +5 -0
  298. package/lib/hooks/useRuntimes.js +34 -0
  299. package/lib/hooks/useToolApprovals.d.ts +14 -6
  300. package/lib/hooks/useToolApprovals.js +20 -1
  301. package/lib/index.d.ts +2 -1
  302. package/lib/index.js +1 -0
  303. package/lib/jupyter/exec/Python.d.ts +5 -0
  304. package/lib/jupyter/exec/Python.js +100 -0
  305. package/lib/jupyter/exec/Snippets.d.ts +105 -0
  306. package/lib/jupyter/exec/Snippets.js +101 -0
  307. package/lib/jupyter/exec/index.d.ts +2 -0
  308. package/lib/jupyter/exec/index.js +6 -0
  309. package/lib/jupyter/index.d.ts +2 -0
  310. package/lib/jupyter/index.js +6 -0
  311. package/lib/jupyter/kernelsHandler.d.ts +8 -0
  312. package/lib/jupyter/kernelsHandler.js +39 -0
  313. package/lib/mocks/models/CourseMock.d.ts +6 -0
  314. package/lib/mocks/models/CourseMock.js +29 -0
  315. package/lib/mocks/models/SpaceMock.d.ts +6 -0
  316. package/lib/mocks/models/SpaceMock.js +25 -0
  317. package/lib/models/Assignment.d.ts +7 -0
  318. package/lib/models/Assignment.js +5 -0
  319. package/lib/models/Cell.d.ts +8 -0
  320. package/lib/models/Cell.js +5 -0
  321. package/lib/models/CodeBlock.d.ts +10 -0
  322. package/lib/models/CodeBlock.js +5 -0
  323. package/lib/models/CodeSandboxSnapshot.d.ts +92 -0
  324. package/lib/models/CodeSandboxSnapshot.js +13 -0
  325. package/lib/models/CodeSandboxSnapshotDTO.d.ts +173 -0
  326. package/lib/models/CodeSandboxSnapshotDTO.js +139 -0
  327. package/lib/models/CodefeedBlocks.d.ts +7 -0
  328. package/lib/models/CodefeedBlocks.js +5 -0
  329. package/lib/models/Content.d.ts +5 -0
  330. package/lib/models/Content.js +5 -0
  331. package/lib/models/Course.d.ts +17 -0
  332. package/lib/models/Course.js +5 -0
  333. package/lib/models/Dataset.d.ts +16 -0
  334. package/lib/models/Dataset.js +5 -0
  335. package/lib/models/Document.d.ts +8 -0
  336. package/lib/models/Document.js +5 -0
  337. package/lib/models/Environment.d.ts +86 -0
  338. package/lib/models/Environment.js +5 -0
  339. package/lib/models/EnvironmentDTO.d.ts +125 -0
  340. package/lib/models/EnvironmentDTO.js +88 -0
  341. package/lib/models/Exercise.d.ts +16 -0
  342. package/lib/models/Exercise.js +5 -0
  343. package/lib/models/Item.d.ts +20 -0
  344. package/lib/models/Item.js +5 -0
  345. package/lib/models/ItemDTO.d.ts +74 -0
  346. package/lib/models/ItemDTO.js +186 -0
  347. package/lib/models/ItemType.d.ts +2 -0
  348. package/lib/models/ItemType.js +5 -0
  349. package/lib/models/Lesson.d.ts +5 -0
  350. package/lib/models/Lesson.js +5 -0
  351. package/lib/models/LexicalDTO.d.ts +155 -0
  352. package/lib/models/LexicalDTO.js +157 -0
  353. package/lib/models/Library.d.ts +10 -0
  354. package/lib/models/Library.js +5 -0
  355. package/lib/models/Notebook.d.ts +11 -0
  356. package/lib/models/Notebook.js +5 -0
  357. package/lib/models/NotebookDTO.d.ts +96 -0
  358. package/lib/models/NotebookDTO.js +153 -0
  359. package/lib/models/Page.d.ts +41 -0
  360. package/lib/models/Page.js +25 -0
  361. package/lib/models/PageTag.d.ts +19 -0
  362. package/lib/models/PageTag.js +94 -0
  363. package/lib/models/ProjectDTO.d.ts +89 -0
  364. package/lib/models/ProjectDTO.js +131 -0
  365. package/lib/models/Runtime.d.ts +160 -0
  366. package/lib/models/Runtime.js +18 -0
  367. package/lib/models/RuntimeDTO.d.ts +172 -0
  368. package/lib/models/RuntimeDTO.js +204 -0
  369. package/lib/models/Space.d.ts +35 -0
  370. package/lib/models/Space.js +66 -0
  371. package/lib/models/SpaceDTO.d.ts +334 -0
  372. package/lib/models/SpaceDTO.js +244 -0
  373. package/lib/models/SpaceItem.d.ts +10 -0
  374. package/lib/models/SpaceItem.js +5 -0
  375. package/lib/models/SpaceMember.d.ts +6 -0
  376. package/lib/models/SpaceMember.js +5 -0
  377. package/lib/models/StudentItem.d.ts +21 -0
  378. package/lib/models/StudentItem.js +5 -0
  379. package/lib/models/index.d.ts +32 -0
  380. package/lib/models/index.js +39 -0
  381. package/lib/protocols/AGUIAdapter.js +1 -1
  382. package/lib/runtimes/actions.d.ts +102 -0
  383. package/lib/runtimes/actions.js +249 -0
  384. package/lib/runtimes/apis.d.ts +273 -0
  385. package/lib/runtimes/apis.js +5 -0
  386. package/lib/runtimes/index.d.ts +5 -0
  387. package/lib/runtimes/index.js +9 -0
  388. package/lib/runtimes/settings.d.ts +15 -0
  389. package/lib/runtimes/settings.js +31 -0
  390. package/lib/runtimes/snapshots.d.ts +25 -0
  391. package/lib/runtimes/snapshots.js +150 -0
  392. package/lib/runtimes/utils.d.ts +7 -0
  393. package/lib/runtimes/utils.js +14 -0
  394. package/lib/services/DatalayerServiceManager.d.ts +23 -0
  395. package/lib/services/DatalayerServiceManager.js +90 -0
  396. package/lib/services/reconnectToRuntime.d.ts +32 -0
  397. package/lib/services/reconnectToRuntime.js +59 -0
  398. package/lib/services/sandboxServiceManagers.d.ts +31 -0
  399. package/lib/services/sandboxServiceManagers.js +57 -0
  400. package/lib/specs/agents/agents.d.ts +95 -50
  401. package/lib/specs/agents/agents.js +4037 -1669
  402. package/lib/specs/agents/index.d.ts +5 -5
  403. package/lib/specs/agents/index.js +9 -9
  404. package/lib/specs/index.d.ts +1 -0
  405. package/lib/specs/index.js +1 -0
  406. package/lib/specs/loops.d.ts +34 -0
  407. package/lib/specs/loops.js +188 -0
  408. package/lib/specs/mcpServers.d.ts +1 -0
  409. package/lib/specs/mcpServers.js +17 -0
  410. package/lib/specs/models.d.ts +4 -0
  411. package/lib/specs/models.js +30 -0
  412. package/lib/specs/skills.d.ts +1 -0
  413. package/lib/specs/skills.js +18 -0
  414. package/lib/specs/tools.d.ts +15 -0
  415. package/lib/specs/tools.js +285 -0
  416. package/lib/state/index.d.ts +4 -0
  417. package/lib/state/index.js +10 -0
  418. package/lib/state/substates/CellState.d.ts +12 -0
  419. package/lib/state/substates/CellState.js +22 -0
  420. package/lib/state/substates/DocumentState.d.ts +10 -0
  421. package/lib/state/substates/DocumentState.js +14 -0
  422. package/lib/state/substates/GradeState.d.ts +10 -0
  423. package/lib/state/substates/GradeState.js +14 -0
  424. package/lib/state/substates/JupyterLabState.d.ts +16 -0
  425. package/lib/state/substates/JupyterLabState.js +17 -0
  426. package/lib/state/substates/NbformatState.d.ts +13 -0
  427. package/lib/state/substates/NbformatState.js +16 -0
  428. package/lib/state/substates/RuntimesState.d.ts +87 -0
  429. package/lib/state/substates/RuntimesState.js +192 -0
  430. package/lib/state/substates/SpaceState.d.ts +11 -0
  431. package/lib/state/substates/SpaceState.js +16 -0
  432. package/lib/state/substates/index.d.ts +8 -0
  433. package/lib/state/substates/index.js +14 -0
  434. package/lib/stores/agentRuntimeStore.d.ts +25 -2
  435. package/lib/stores/agentRuntimeStore.js +114 -19
  436. package/lib/stories/Button.stories.d.ts +1 -1
  437. package/lib/stories/Header.stories.d.ts +3 -3
  438. package/lib/test-setup.js +10 -0
  439. package/lib/types/agents-lifecycle.d.ts +5 -5
  440. package/lib/types/agents.d.ts +6 -6
  441. package/lib/types/agentspecs.d.ts +8 -4
  442. package/lib/types/chat.d.ts +135 -3
  443. package/lib/types/config.d.ts +19 -1
  444. package/lib/types/index.d.ts +1 -0
  445. package/lib/types/index.js +1 -0
  446. package/lib/types/loops.d.ts +64 -0
  447. package/lib/types/loops.js +5 -0
  448. package/lib/types/teams.d.ts +2 -2
  449. package/lib/types/tools.d.ts +16 -0
  450. package/lib/utils/Cells.d.ts +2 -0
  451. package/lib/utils/Cells.js +28 -0
  452. package/package.json +24 -18
  453. package/scripts/codegen/generate_agents.py +96 -61
  454. package/scripts/codegen/generate_loops.py +443 -0
  455. package/scripts/codegen/generate_teams.py +4 -4
  456. package/lib/examples/A2UiComponentGalleryExample.d.ts +0 -3
  457. package/lib/examples/A2UiComponentGalleryExample.js +0 -361
  458. package/scripts/codegen/__pycache__/generate_agents.cpython-313.pyc +0 -0
  459. package/scripts/codegen/__pycache__/generate_benchmarks.cpython-313.pyc +0 -0
  460. package/scripts/codegen/__pycache__/generate_evals.cpython-313.pyc +0 -0
  461. package/scripts/codegen/__pycache__/generate_events.cpython-313.pyc +0 -0
  462. /package/lib/{agent-lexical-main.d.ts → agent-document-main.d.ts} +0 -0
@@ -211,11 +211,11 @@ const resolveCloudRuntimeBaseUrlFromSpec = (spec) => {
211
211
  return null;
212
212
  }
213
213
  const preferredKeys = [
214
- '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,62 +15,31 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
15
  *
16
16
  * Backend: POST /api/v1/agents → /api/v1/ag-ui/{agentId}/
17
17
  */
18
- import { 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();
27
- const AGENT_SPEC_ID = 'example-simple';
28
+ 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: AGENT_SPEC_ID,
47
- transport: 'ag-ui',
48
- }),
49
- });
50
- if (!response.ok) {
51
- const data = await response
52
- .json()
53
- .catch(() => ({ detail: 'Unknown error' }));
54
- throw new Error(data.detail || `Failed to create agent: ${response.status}`);
55
- }
56
- const data = await response.json();
57
- if (!cancelled) {
58
- setAgentId(data.id);
59
- setIsCreating(false);
60
- }
61
- }
62
- catch (err) {
63
- if (!cancelled) {
64
- setError(err instanceof Error ? err.message : 'Failed to create agent');
65
- setIsCreating(false);
66
- }
67
- }
68
- };
69
- createAgent();
70
- return () => {
71
- cancelled = true;
72
- };
73
- }, [baseUrl]);
32
+ const agentName = useMemo(() => uniqueAgentId(AGENT_NAME), []);
33
+ const { agentId, error, status, isReady } = useExampleAgentRuntime({
34
+ exampleId: 'ChatExample',
35
+ agentName,
36
+ specId: AGENTSPEC_ID,
37
+ agentConfig: {
38
+ protocol: 'ag-ui',
39
+ agentSpecId: AGENTSPEC_ID,
40
+ },
41
+ });
42
+ const isCreating = !isReady && status !== 'error';
74
43
  // Loading state while agent is being created
75
44
  if (isCreating) {
76
45
  return (_jsx(ThemedProvider, { children: _jsxs(Box, { sx: {
@@ -81,7 +50,7 @@ const AgentRuntimeChatExample = () => {
81
50
  height: '100vh',
82
51
  gap: 3,
83
52
  bg: 'canvas.default',
84
- }, children: [_jsx(Spinner, { size: "large" }), _jsxs(Text, { sx: { color: 'fg.muted' }, children: ["Creating agent from ", AGENT_SPEC_ID, "..."] })] }) }));
53
+ }, children: [_jsx(Spinner, { size: "large" }), _jsxs(Text, { sx: { color: 'fg.muted' }, children: ["Creating agent from ", AGENTSPEC_ID, "..."] })] }) }));
85
54
  }
86
55
  // Error state
87
56
  if (error || !agentId) {
@@ -42,16 +42,14 @@ import { ChatInlinePlugin } from '../lexical/ChatInlinePlugin';
42
42
  import { useChatInlineToolbarItems } from '../lexical/useChatInlineToolbarItems';
43
43
  import { useLexicalTools } from '../tools/adapters/agent-runtimes/lexicalHooks';
44
44
  import { editorConfig } from './lexical/editorConfig';
45
+ import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
46
+ import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
45
47
  import { DEFAULT_MODEL } from '../specs';
46
48
  import '@datalayer/jupyter-lexical/style/index.css';
47
49
  import './lexical/lexical-theme.css';
48
50
  // Fixed lexical document ID
49
51
  const LEXICAL_ID = 'agui-lexical-example';
50
- // Base URL for agent-runtimes server
51
- const BASE_URL = 'http://localhost:8765';
52
52
  const AGENT_ID = 'lexical-agent-runtime-example';
53
- // Vercel AI endpoint for lexical operations
54
- const VERCEL_AI_ENDPOINT = `${BASE_URL}/api/v1/vercel-ai/${AGENT_ID}`;
55
53
  function getJupyterSandboxUrl(serviceManager) {
56
54
  const envUrl = import.meta.env.VITE_JUPYTER_SANDBOX_URL;
57
55
  if (envUrl) {
@@ -75,87 +73,6 @@ function getJupyterSandboxUrl(serviceManager) {
75
73
  * Hook to ensure the example-agent exists on the server.
76
74
  * Creates it if it doesn't exist.
77
75
  */
78
- function useEnsureAgent(agentId, baseUrl, jupyterSandboxUrl) {
79
- const [isReady, setIsReady] = useState(false);
80
- const [error, setError] = useState(null);
81
- useEffect(() => {
82
- let mounted = true;
83
- async function ensureAgent() {
84
- try {
85
- if (!jupyterSandboxUrl) {
86
- if (mounted) {
87
- setError('Could not detect Jupyter server URL from Lexical service manager.');
88
- setIsReady(false);
89
- }
90
- return;
91
- }
92
- // Try to create the agent (will fail if already exists, which is fine)
93
- const response = await fetch(`${baseUrl}/api/v1/agents`, {
94
- method: 'POST',
95
- headers: {
96
- 'Content-Type': 'application/json',
97
- },
98
- body: JSON.stringify({
99
- name: agentId,
100
- description: 'Demo agent for lexical example',
101
- agent_library: 'pydantic-ai',
102
- transport: 'vercel-ai',
103
- model: DEFAULT_MODEL,
104
- system_prompt: 'You are a helpful AI assistant that helps users work with documents. You can help with writing, editing, and formatting content.',
105
- enable_codemode: false,
106
- sandbox_variant: 'jupyter',
107
- jupyter_sandbox: jupyterSandboxUrl,
108
- }),
109
- });
110
- if (mounted) {
111
- if (response.ok) {
112
- console.log(`[AgentRuntimeLexicalAgentExample] Created agent: ${agentId}`);
113
- setError(null);
114
- setIsReady(true);
115
- }
116
- else {
117
- const rawBody = await response.text().catch(() => '');
118
- let detail = rawBody;
119
- try {
120
- const parsed = rawBody ? JSON.parse(rawBody) : {};
121
- if (typeof parsed.detail === 'string' &&
122
- parsed.detail.length > 0) {
123
- detail = parsed.detail;
124
- }
125
- }
126
- catch {
127
- // Keep raw body as fallback detail.
128
- }
129
- const alreadyExists = response.status === 409 ||
130
- response.status === 400 ||
131
- /already exists/i.test(detail || '');
132
- if (alreadyExists) {
133
- console.log(`[AgentRuntimeLexicalAgentExample] Reusing existing agent: ${agentId}`);
134
- setError(null);
135
- setIsReady(true);
136
- }
137
- else {
138
- setError(detail || `Failed to create agent: ${response.status}`);
139
- setIsReady(false);
140
- }
141
- }
142
- }
143
- }
144
- catch (err) {
145
- if (mounted) {
146
- console.error('[AgentRuntimeLexicalAgentExample] Error creating agent:', err);
147
- setError(err instanceof Error ? err.message : 'Failed to connect to server');
148
- setIsReady(false);
149
- }
150
- }
151
- }
152
- ensureAgent();
153
- return () => {
154
- mounted = false;
155
- };
156
- }, [agentId, baseUrl, jupyterSandboxUrl]);
157
- return { isReady, error };
158
- }
159
76
  // import contentLexical from './lexicals/vscode.lexical';
160
77
  // const INITIAL_CONTENT = JSON.stringify(contentLexical);
161
78
  const INITIAL_CONTENT = undefined; // Use default empty document
@@ -228,7 +145,7 @@ function LexicalToolsPlugin({ onToolsReady, }) {
228
145
  }, [tools, onToolsReady]);
229
146
  return null;
230
147
  }
231
- const LexicalUI = React.memo(function LexicalUI({ content = INITIAL_CONTENT, serviceManager, onToolsReady, }) {
148
+ const LexicalUI = React.memo(function LexicalUI({ content = INITIAL_CONTENT, serviceManager, endpoint, onToolsReady, }) {
232
149
  const [floatingAnchorElem, setFloatingAnchorElem] = useState(null);
233
150
  const [_isLinkEditMode, setIsLinkEditMode] = useState(false);
234
151
  // AI actions registered as toolbar items via the primer-addons toolbar extensibility
@@ -261,13 +178,48 @@ const LexicalUI = React.memo(function LexicalUI({ content = INITIAL_CONTENT, ser
261
178
  minHeight: '600px',
262
179
  }, children: _jsxs(LexicalConfigProvider, { lexicalId: LEXICAL_ID, serviceManager: serviceManager, children: [_jsx(LexicalToolsPlugin, { onToolsReady: onToolsReady }), _jsx(LexicalComposer, { initialConfig: editorConfig, children: _jsxs("div", { className: "lexical-editor-inner", ref: onRef, children: [_jsx(LexicalStatePlugin, {}), _jsx(RichTextPlugin, { contentEditable: _jsx(ContentEditable, { className: "lexical-editor-content", "aria-label": "Lexical Editor" }), ErrorBoundary: LexicalErrorBoundary }), _jsx(OnChangePlugin, { onChange: handleChange }), _jsx(HistoryPlugin, {}), _jsx(AutoFocusPlugin, {}), _jsx(ListPlugin, {}), _jsx(CheckListPlugin, {}), _jsx(LinkPlugin, {}), _jsx(AutoLinkPlugin, {}), _jsx(ListMaxIndentLevelPlugin, { maxDepth: 7 }), _jsx(MarkdownShortcutPlugin, { transformers: TRANSFORMERS }), _jsx(LoadContentPlugin, { content: content }), _jsx(CodeHighlightPlugin, {}), _jsx(ImagesPlugin, { captionsEnabled: false }), _jsx(HorizontalRulePlugin, {}), _jsx(EquationsPlugin, {}), _jsx(YouTubePlugin, {}), _jsx(ExcalidrawPlugin, {}), _jsx(CollapsiblePlugin, {}), _jsx(AutoEmbedPlugin, {}), _jsx(TablePlugin, {}), _jsx(TableCellResizerPlugin, {}), _jsx(JupyterCellPlugin, {}), _jsx(ThemedJupyterProvider, { children: _jsx(SimpleKernelPluginsInner, { serviceManager: serviceManager }) }), floatingAnchorElem && (_jsxs(_Fragment, { children: [_jsx(DraggableBlockPlugin, { anchorElem: floatingAnchorElem }), _jsx(FloatingTextFormatToolbarPlugin, { anchorElem: floatingAnchorElem, setIsLinkEditMode: setIsLinkEditMode, extraItems: toolbarItems }), _jsx(CodeActionMenuPlugin, { anchorElem: floatingAnchorElem })] })), _jsx(ChatInlinePlugin, { protocol: {
263
180
  type: 'vercel-ai',
264
- endpoint: VERCEL_AI_ENDPOINT,
181
+ endpoint,
265
182
  }, isOpen: isAiOpen, onClose: closeAi, pendingPrompt: pendingPrompt, onPendingPromptConsumed: clearPendingPrompt })] }) })] }) })] }));
266
183
  });
267
184
  function LexicalWithChat({ content, serviceManager, }) {
185
+ const baseUrl = useExampleAgentRuntimesUrl();
186
+ const vercelAiEndpoint = `${baseUrl}/api/v1/vercel-ai/${AGENT_ID}`;
187
+ const [createRequested, setCreateRequested] = useState(false);
268
188
  const jupyterSandboxUrl = useMemo(() => getJupyterSandboxUrl(serviceManager), [serviceManager]);
269
- // Ensure the agent exists before rendering chat
270
- const { isReady, error } = useEnsureAgent(AGENT_ID, BASE_URL, jupyterSandboxUrl);
189
+ const { agentId, isReady, status, error, createAgent } = useExampleAgentRuntime({
190
+ exampleId: 'LexicalAgentExample',
191
+ agentName: AGENT_ID,
192
+ autoCreateAgent: false,
193
+ agentConfig: {
194
+ name: AGENT_ID,
195
+ description: 'Demo agent for lexical example',
196
+ protocol: 'vercel-ai',
197
+ model: DEFAULT_MODEL,
198
+ systemPrompt: 'You are a helpful AI assistant that helps users work with documents. You can help with writing, editing, and formatting content.',
199
+ enableCodemode: false,
200
+ sandboxVariant: 'jupyter',
201
+ jupyterSandbox: jupyterSandboxUrl,
202
+ },
203
+ });
204
+ useEffect(() => {
205
+ if (!jupyterSandboxUrl || createRequested || agentId) {
206
+ return;
207
+ }
208
+ setCreateRequested(true);
209
+ void createAgent({
210
+ name: AGENT_ID,
211
+ description: 'Demo agent for lexical example',
212
+ protocol: 'vercel-ai',
213
+ model: DEFAULT_MODEL,
214
+ systemPrompt: 'You are a helpful AI assistant that helps users work with documents. You can help with writing, editing, and formatting content.',
215
+ enableCodemode: false,
216
+ sandboxVariant: 'jupyter',
217
+ jupyterSandbox: jupyterSandboxUrl,
218
+ }).catch(() => {
219
+ setCreateRequested(false);
220
+ });
221
+ }, [jupyterSandboxUrl, createRequested, agentId, createAgent]);
222
+ const effectiveReady = isReady || status === 'ready';
271
223
  // State to hold tools - populated by LexicalToolsPlugin inside the context
272
224
  const [tools, setTools] = useState([]);
273
225
  // Stable callback for receiving tools from LexicalToolsPlugin
@@ -284,7 +236,7 @@ function LexicalWithChat({ content, serviceManager, }) {
284
236
  width: '100vw',
285
237
  display: 'flex',
286
238
  overflow: 'hidden',
287
- }, children: [_jsx(LexicalUI, { content: content, serviceManager: serviceManager, onToolsReady: handleToolsReady }), error && (_jsxs(Box, { sx: {
239
+ }, children: [_jsx(LexicalUI, { content: content, serviceManager: serviceManager, endpoint: vercelAiEndpoint, onToolsReady: handleToolsReady }), error && (_jsxs(Box, { sx: {
288
240
  position: 'fixed',
289
241
  bottom: 20,
290
242
  right: 20,
@@ -293,7 +245,7 @@ function LexicalWithChat({ content, serviceManager, }) {
293
245
  color: 'danger.fg',
294
246
  borderRadius: 2,
295
247
  maxWidth: 300,
296
- }, children: [_jsx("strong", { children: "Error:" }), " ", error] })), isReady && (_jsx(ChatFloating, { protocol: "vercel-ai", endpoint: VERCEL_AI_ENDPOINT, title: "Lexical AI Agent Runtime", description: "Hi! I can help you edit documents. Try: 'Insert a heading', 'Add a code block', or 'Create a list'", defaultOpen: true, defaultViewMode: "panel", position: "bottom-right", frontendTools: tools, useStore: false, showModelSelector: true, showToolsMenu: true, showSkillsMenu: true, suggestions: [
248
+ }, children: [_jsx("strong", { children: "Error:" }), " ", error] })), effectiveReady && (_jsx(ChatFloating, { protocol: "vercel-ai", endpoint: vercelAiEndpoint, title: "Lexical AI Agent Runtime", description: "Hi! I can help you edit documents. Try: 'Insert a heading', 'Add a code block', or 'Create a list'", defaultOpen: true, defaultViewMode: "panel", position: "bottom-right", frontendTools: tools, useStore: false, showModelSelector: true, showToolsMenu: true, showSkillsMenu: true, suggestions: [
297
249
  {
298
250
  title: 'Insert heading',
299
251
  message: 'Insert a heading that says "Welcome"',