@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
@@ -21,23 +21,57 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
21
21
  import { useEffect, useState } from 'react';
22
22
  import { Text, Spinner } from '@primer/react';
23
23
  import { AlertIcon } from '@primer/octicons-react';
24
- import { Box, DatalayerThemeProvider, setupPrimerPortals, } from '@datalayer/primer-addons';
25
- import { Notebook, JupyterReactTheme, loadJupyterConfig, createServerSettings, getJupyterServerUrl, getJupyterServerToken, setJupyterServerUrl, setJupyterServerToken, } from '@datalayer/jupyter-react';
26
- import { ServiceManager } from '@jupyterlab/services';
24
+ import { AppearanceControlsWithStore, Box, createThemeStore, DatalayerThemeProvider, setupPrimerPortals, themeConfigs, useSystemColorMode, } from '@datalayer/primer-addons';
25
+ import { Notebook, JupyterReactTheme, notebookStore, disposeServiceManager, loadJupyterConfig, getJupyterServerUrl, getJupyterServerToken, setJupyterServerUrl, setJupyterServerToken, } from '@datalayer/jupyter-react';
26
+ import { ServiceManager, ServerConnection } from '@jupyterlab/services';
27
27
  import { Chat } from './chat';
28
28
  import { useNotebookTools } from './tools/adapters/agent-runtimes/notebookHooks';
29
29
  import { DEFAULT_MODEL } from './specs';
30
- import MatplotlibNotebook from './examples/utils/notebooks/Matplotlib.ipynb.json';
30
+ import EmptyNotebook from './examples/utils/notebooks/Empty.ipynb.json';
31
31
  import '../style/primer-primitives.css';
32
32
  setupPrimerPortals();
33
33
  const BASE_URL = window.location.origin;
34
34
  const NOTEBOOK_ID = 'agent-notebook';
35
+ const NOTEBOOK_THEME_STORAGE_KEY = 'agent-runtimes-agent-notebook-theme';
36
+ // Fixed height (px) of the top appearance bar. The notebook fills the
37
+ // remaining viewport height via calc(100vh - TOP_BAR_HEIGHT) so it does not
38
+ // depend on a `height: 100%` chain (JupyterReactTheme renders an intermediate
39
+ // auto-height div that would collapse the notebook to 0).
40
+ const TOP_BAR_HEIGHT = 49;
41
+ const useAgentNotebookThemeStore = createThemeStore(NOTEBOOK_THEME_STORAGE_KEY, {
42
+ colorMode: 'auto',
43
+ theme: 'earth',
44
+ });
35
45
  function getQueryParam(name) {
36
46
  return new URLSearchParams(window.location.search).get(name);
37
47
  }
38
48
  function getAgentId() {
39
49
  return getQueryParam('agentId') || 'default';
40
50
  }
51
+ function getKernelId() {
52
+ const kernelId = getQueryParam('kernelId') || getQueryParam('kernel_id');
53
+ return kernelId || undefined;
54
+ }
55
+ async function fetchStartupKernelId() {
56
+ try {
57
+ const resp = await fetch(`${BASE_URL}/health/startup`);
58
+ if (!resp.ok) {
59
+ return undefined;
60
+ }
61
+ const payload = await resp.json();
62
+ const sandbox = payload?.sandbox;
63
+ if (sandbox?.variant !== 'jupyter') {
64
+ return undefined;
65
+ }
66
+ const kernelId = sandbox?.kernel_id;
67
+ return typeof kernelId === 'string' && kernelId.length > 0
68
+ ? kernelId
69
+ : undefined;
70
+ }
71
+ catch {
72
+ return undefined;
73
+ }
74
+ }
41
75
  /**
42
76
  * Initialise Jupyter configuration.
43
77
  *
@@ -50,45 +84,111 @@ function initJupyterConfig() {
50
84
  loadJupyterConfig();
51
85
  // Override with query parameters when supplied by codeai
52
86
  const qBaseUrl = getQueryParam('jupyterBaseUrl');
53
- const qToken = getQueryParam('jupyterToken');
87
+ const qToken = getQueryParam('jupyterToken') || getQueryParam('token');
54
88
  if (qBaseUrl)
55
89
  setJupyterServerUrl(qBaseUrl);
56
90
  if (qToken)
57
91
  setJupyterServerToken(qToken);
92
+ let resolvedBaseUrl = qBaseUrl || getJupyterServerUrl();
93
+ let resolvedToken = qToken || getJupyterServerToken();
58
94
  // Also check for jupyter-config-data embedded in the page (may contain
59
95
  // values injected at build/serve time)
60
96
  const el = document.getElementById('jupyter-config-data');
61
97
  if (el?.textContent) {
62
98
  try {
63
99
  const cfg = JSON.parse(el.textContent);
64
- if (!qBaseUrl && cfg.baseUrl)
100
+ if (!qBaseUrl && cfg.baseUrl) {
65
101
  setJupyterServerUrl(cfg.baseUrl);
66
- if (!qToken && cfg.token)
102
+ resolvedBaseUrl = cfg.baseUrl;
103
+ }
104
+ if (!qToken && cfg.token) {
67
105
  setJupyterServerToken(cfg.token);
106
+ resolvedToken = cfg.token;
107
+ }
68
108
  }
69
109
  catch {
70
110
  // ignore
71
111
  }
72
112
  }
113
+ return {
114
+ baseUrl: resolvedBaseUrl,
115
+ token: resolvedToken,
116
+ };
73
117
  }
74
- const NotebookPanel = ({ serviceManager }) => (_jsx(Box, { sx: {
118
+ function buildServerSettings(baseUrl, token) {
119
+ const wsUrl = baseUrl.replace(/^http/, 'ws');
120
+ const authenticatedFetch = (input, init) => {
121
+ if (!token) {
122
+ return fetch(input, init);
123
+ }
124
+ const headers = new Headers(init?.headers || undefined);
125
+ headers.set('Authorization', `token ${token}`);
126
+ return fetch(input, { ...init, headers });
127
+ };
128
+ return ServerConnection.makeSettings({
129
+ baseUrl,
130
+ wsUrl,
131
+ token,
132
+ appendToken: !!token,
133
+ fetch: authenticatedFetch,
134
+ });
135
+ }
136
+ // ─── Notebook kernel tracking ───────────────────────────────────────────────
137
+ /**
138
+ * Track the live kernel connection of the notebook running on the sandbox.
139
+ *
140
+ * The kernel connection is created asynchronously by the `<Notebook>` adapter
141
+ * after it mounts (and can change on restart), so we read it from the notebook
142
+ * store, polling and subscribing to store mutations. The resolved connection is
143
+ * fed to the chat header's `<KernelIndicator>` so it reflects the sandbox.
144
+ */
145
+ function useNotebookKernel(notebookId, active) {
146
+ const [kernel, setKernel] = useState(null);
147
+ useEffect(() => {
148
+ if (!active) {
149
+ setKernel(null);
150
+ return;
151
+ }
152
+ const readKernel = () => {
153
+ const notebook = notebookStore.getState().selectNotebook(notebookId);
154
+ const adapter = notebook?.adapter;
155
+ return adapter?.kernel ?? null;
156
+ };
157
+ const sync = () => {
158
+ const next = readKernel();
159
+ setKernel(prev => (prev?.id === next?.id ? prev : next));
160
+ };
161
+ sync();
162
+ const intervalId = window.setInterval(sync, 750);
163
+ const unsubscribe = notebookStore.subscribe(sync);
164
+ return () => {
165
+ window.clearInterval(intervalId);
166
+ unsubscribe();
167
+ };
168
+ }, [notebookId, active]);
169
+ return kernel;
170
+ }
171
+ const NotebookPanel = ({ serviceManager, kernelId, colormode, backgroundColor, }) => (_jsx(Box, { sx: {
75
172
  flex: 1,
173
+ minWidth: '360px',
174
+ minHeight: 0,
76
175
  display: 'flex',
77
176
  flexDirection: 'column',
78
177
  overflow: 'hidden',
79
178
  borderRight: '1px solid',
80
179
  borderColor: 'border.default',
81
- }, children: _jsx(JupyterReactTheme, { children: _jsx(Box, { sx: { height: '100vh' }, children: _jsx(Notebook, { nbformat: MatplotlibNotebook, id: NOTEBOOK_ID, serviceManager: serviceManager, height: "100vh", cellSidebarMargin: 120, startDefaultKernel: true }) }) }) }));
82
- const ChatPanel = ({ agentId }) => {
180
+ }, children: _jsx(JupyterReactTheme, { colormode: colormode, backgroundColor: backgroundColor, children: _jsx(Notebook, { nbformat: EmptyNotebook, id: NOTEBOOK_ID, serviceManager: serviceManager, kernelId: kernelId, height: `calc(100vh - ${TOP_BAR_HEIGHT}px)`, cellSidebarMargin: 120, startDefaultKernel: !kernelId }) }) }));
181
+ const ChatPanel = ({ agentId, kernel }) => {
83
182
  // Register notebook tools so the agent can manipulate cells
84
183
  const notebookTools = useNotebookTools(NOTEBOOK_ID);
85
184
  return (_jsx(Box, { sx: {
86
185
  width: '420px',
87
186
  minWidth: '320px',
187
+ flexShrink: 0,
88
188
  display: 'flex',
89
189
  flexDirection: 'column',
90
190
  overflow: 'hidden',
91
- }, children: _jsx(Chat, { protocol: "ag-ui", baseUrl: BASE_URL, agentId: agentId, title: "Agent Notebook", placeholder: "Ask about the notebook...", description: "Chat with the agent to manipulate the notebook", showHeader: true, height: "100vh", showModelSelector: true, showToolsMenu: true, showSkillsMenu: true, showTokenUsage: true, showInformation: true, frontendTools: notebookTools, autoFocus: true, runtimeId: agentId, historyEndpoint: `${BASE_URL}/api/v1/history`, suggestions: [
191
+ }, children: _jsx(Chat, { protocol: "ag-ui", baseUrl: BASE_URL, agentId: agentId, title: "Agent Notebook", placeholder: "Ask about the notebook...", description: "Chat with the agent to manipulate the notebook", showHeader: true, height: "100%", showModelSelector: true, showToolsMenu: true, showSkillsMenu: true, showTokenUsage: true, showInformation: true, disableInternalJupyterTheme: true, frontendTools: notebookTools, autoFocus: true, runtimeId: agentId, kernel: kernel, historyEndpoint: `${BASE_URL}/api/v1/history`, suggestions: [
92
192
  {
93
193
  title: 'Add a cell',
94
194
  message: 'Insert a new code cell into the notebook',
@@ -106,12 +206,25 @@ const ChatPanel = ({ agentId }) => {
106
206
  // ─── Main component ─────────────────────────────────────────────────────────
107
207
  export const AgentNotebook = () => {
108
208
  const [agentId] = useState(getAgentId);
209
+ const [kernelId, setKernelId] = useState(getKernelId);
109
210
  const [isReady, setIsReady] = useState(false);
110
211
  const [error, setError] = useState(null);
111
212
  const [serviceManager, setServiceManager] = useState(null);
213
+ const { colorMode, theme } = useAgentNotebookThemeStore();
214
+ const themeConfig = themeConfigs[theme];
215
+ const systemMode = useSystemColorMode();
216
+ const resolvedMode = colorMode === 'auto' ? systemMode : colorMode;
217
+ const modeStyles = resolvedMode === 'dark'
218
+ ? themeConfig.themeStyles.dark
219
+ : themeConfig.themeStyles.light;
220
+ const themeBackground = modeStyles.backgroundColor ?? '';
221
+ // Live kernel connection from the notebook running on the sandbox, wired to
222
+ // the chat header's kernel indicator.
223
+ const notebookKernel = useNotebookKernel(NOTEBOOK_ID, Boolean(serviceManager));
112
224
  // Verify the agent exists AND initialise the Jupyter service manager
113
225
  useEffect(() => {
114
226
  let cancelled = false;
227
+ let managerForCleanup = null;
115
228
  const init = async () => {
116
229
  try {
117
230
  // 1. Ensure agent exists — create if missing
@@ -135,14 +248,19 @@ export const AgentNotebook = () => {
135
248
  }
136
249
  }
137
250
  // 2. Initialise Jupyter
138
- initJupyterConfig();
139
- const serverSettings = createServerSettings(getJupyterServerUrl(), getJupyterServerToken());
251
+ const jupyterConfig = initJupyterConfig();
252
+ const serverSettings = buildServerSettings(jupyterConfig.baseUrl, jupyterConfig.token);
140
253
  const manager = new ServiceManager({ serverSettings });
254
+ managerForCleanup = manager;
141
255
  await manager.ready;
142
256
  if (!cancelled) {
143
257
  setServiceManager(manager);
144
258
  setIsReady(true);
145
259
  }
260
+ else {
261
+ disposeServiceManager(manager);
262
+ managerForCleanup = null;
263
+ }
146
264
  }
147
265
  catch (err) {
148
266
  if (!cancelled) {
@@ -153,11 +271,32 @@ export const AgentNotebook = () => {
153
271
  init();
154
272
  return () => {
155
273
  cancelled = true;
274
+ if (managerForCleanup) {
275
+ disposeServiceManager(managerForCleanup);
276
+ managerForCleanup = null;
277
+ }
156
278
  };
157
279
  }, [agentId]);
280
+ // If kernelId is not provided via URL, reuse the startup sandbox kernel when
281
+ // available so notebook/editor and agent runtime share the same execution context.
282
+ useEffect(() => {
283
+ if (kernelId) {
284
+ return;
285
+ }
286
+ let cancelled = false;
287
+ void (async () => {
288
+ const startupKernelId = await fetchStartupKernelId();
289
+ if (!cancelled && startupKernelId) {
290
+ setKernelId(startupKernelId);
291
+ }
292
+ })();
293
+ return () => {
294
+ cancelled = true;
295
+ };
296
+ }, [kernelId]);
158
297
  // Loading
159
298
  if (!isReady && !error) {
160
- return (_jsx(DatalayerThemeProvider, { children: _jsxs(Box, { sx: {
299
+ return (_jsx(DatalayerThemeProvider, { colorMode: colorMode, theme: themeConfig.primerTheme, themeStyles: themeConfig.themeStyles, children: _jsxs(Box, { sx: {
161
300
  display: 'flex',
162
301
  flexDirection: 'column',
163
302
  alignItems: 'center',
@@ -169,7 +308,7 @@ export const AgentNotebook = () => {
169
308
  }
170
309
  // Error
171
310
  if (error) {
172
- return (_jsx(DatalayerThemeProvider, { children: _jsxs(Box, { sx: {
311
+ return (_jsx(DatalayerThemeProvider, { colorMode: colorMode, theme: themeConfig.primerTheme, themeStyles: themeConfig.themeStyles, children: _jsxs(Box, { sx: {
173
312
  display: 'flex',
174
313
  flexDirection: 'column',
175
314
  alignItems: 'center',
@@ -180,12 +319,28 @@ export const AgentNotebook = () => {
180
319
  }, children: [_jsx(AlertIcon, { size: 48 }), _jsx(Text, { sx: { color: 'danger.fg', fontSize: 2 }, children: "Failed to connect" }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: error })] }) }));
181
320
  }
182
321
  // Ready — notebook + chat side-by-side
183
- return (_jsx(DatalayerThemeProvider, { children: _jsxs(Box, { sx: {
322
+ return (_jsx(DatalayerThemeProvider, { colorMode: colorMode, theme: themeConfig.primerTheme, themeStyles: themeConfig.themeStyles, children: _jsxs(Box, { sx: {
184
323
  display: 'flex',
324
+ flexDirection: 'column',
185
325
  height: '100vh',
186
326
  width: '100vw',
187
327
  overflow: 'hidden',
188
328
  bg: 'canvas.default',
189
- }, children: [serviceManager && _jsx(NotebookPanel, { serviceManager: serviceManager }), _jsx(ChatPanel, { agentId: agentId })] }) }));
329
+ }, children: [_jsx(Box, { sx: {
330
+ display: 'flex',
331
+ justifyContent: 'flex-end',
332
+ alignItems: 'center',
333
+ px: 3,
334
+ height: `${TOP_BAR_HEIGHT}px`,
335
+ boxSizing: 'border-box',
336
+ borderBottom: '1px solid',
337
+ borderColor: 'border.default',
338
+ flexShrink: 0,
339
+ }, children: _jsx(AppearanceControlsWithStore, { useStore: useAgentNotebookThemeStore }) }), _jsxs(Box, { sx: {
340
+ display: 'flex',
341
+ flex: 1,
342
+ minHeight: 0,
343
+ overflow: 'hidden',
344
+ }, children: [serviceManager && (_jsx(NotebookPanel, { serviceManager: serviceManager, kernelId: kernelId, colormode: resolvedMode, backgroundColor: themeBackground })), _jsx(ChatPanel, { agentId: agentId, kernel: notebookKernel })] })] }) }));
190
345
  };
191
346
  export default AgentNotebook;
@@ -0,0 +1,47 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+
6
+ #root {
7
+ max-width: 1280px;
8
+ margin: 0 auto;
9
+ padding: 2rem;
10
+ /* text-align: center; */
11
+ }
12
+
13
+ .logo {
14
+ height: 6em;
15
+ padding: 1.5em;
16
+ will-change: filter;
17
+ transition: filter 300ms;
18
+ }
19
+ .logo:hover {
20
+ filter: drop-shadow(0 0 2em #646cffaa);
21
+ }
22
+ .logo.react:hover {
23
+ filter: drop-shadow(0 0 2em #61dafbaa);
24
+ }
25
+
26
+ @keyframes logo-spin {
27
+ from {
28
+ transform: rotate(0deg);
29
+ }
30
+ to {
31
+ transform: rotate(360deg);
32
+ }
33
+ }
34
+
35
+ @media (prefers-reduced-motion: no-preference) {
36
+ a:nth-of-type(2) .logo {
37
+ animation: logo-spin infinite 20s linear;
38
+ }
39
+ }
40
+
41
+ .card {
42
+ padding: 2em;
43
+ }
44
+
45
+ .read-the-docs {
46
+ color: #888;
47
+ }
@@ -0,0 +1,3 @@
1
+ import './AppExamples2.css';
2
+ export declare function App(): import("react/jsx-runtime").JSX.Element;
3
+ export default App;
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright (c) 2025-2026 Datalayer, Inc.
4
+ * Distributed under the terms of the Modified BSD License.
5
+ */
6
+ import { useState } from 'react';
7
+ import reactLogo from './assets/react.svg';
8
+ import { useJupyter, JupyterReactTheme } from '@datalayer/jupyter-react';
9
+ import { CellExample } from './examples2/CellExample';
10
+ import { NotebookExample } from './examples2/NotebookExample';
11
+ import './AppExamples2.css';
12
+ export function App() {
13
+ const { serviceManager } = useJupyter({
14
+ jupyterServerUrl: 'https://oss.datalayer.run/api/jupyter-server',
15
+ jupyterServerToken: '60c1661cc408f978c309d04157af55c9588ff9557c9380e4fb50785750703da6',
16
+ startDefaultKernel: true,
17
+ });
18
+ const [count, setCount] = useState(0);
19
+ return (_jsxs("div", { className: "App", children: [_jsx(_Fragment, { children: _jsxs(JupyterReactTheme, { children: [serviceManager && _jsx(CellExample, { serviceManager: serviceManager }), serviceManager && (_jsx(NotebookExample, { serviceManager: serviceManager }))] }) }), _jsxs("div", { children: [_jsx("a", { href: "https://reactjs.org", target: "_blank", rel: "noreferrer", children: _jsx("img", { src: reactLogo, className: "logo react", alt: "React logo" }) }), _jsx("a", { href: "https://vitejs.dev", target: "_blank", rel: "noreferrer", children: _jsx("img", { src: "/vite.svg", className: "logo", alt: "Vite logo" }) })] }), _jsx("h1", { children: "React + Vite" }), _jsx("h2", { children: "On CodeSandbox!" }), _jsxs("div", { className: "card", children: [_jsxs("button", { onClick: () => setCount(count => count + 1), children: ["count is ", count] }), _jsxs("p", { children: ["Edit ", _jsx("code", { children: "src/App.tsx" }), " and save to test HMR."] }), _jsx("p", { children: "Tip: you can use the inspector button next to address bar to click on components in the preview and open the code in the editor!" })] }), _jsx("p", { className: "read-the-docs", children: "Click on the Vite and React logos to learn more" })] }));
20
+ }
21
+ export default App;
@@ -4,8 +4,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
4
4
  * Distributed under the terms of the Modified BSD License.
5
5
  */
6
6
  import { createRoot } from 'react-dom/client';
7
- import { AgentLexical } from './AgentLexical';
7
+ import { AgentDocument } from './AgentDocument';
8
8
  const rootElement = document.getElementById('root');
9
9
  if (rootElement) {
10
- createRoot(rootElement).render(_jsx(AgentLexical, {}));
10
+ createRoot(rootElement).render(_jsx(AgentDocument, {}));
11
11
  }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * AgentRuntimeChat - Generic, full-page chat surface for a live agent runtime.
3
+ *
4
+ * This is the shared component used to render the plain (non-floating) chat
5
+ * view for an agent runtime. It is designed to be reused across the app:
6
+ * - The agent runtime detail page (e.g. `/agents/runtime-...`).
7
+ * - Gallery example pages (e.g. `/gallery/agents/analyze-excel-spreadsheet`).
8
+ *
9
+ * Behaviour:
10
+ * - It launches (or connects to) a runtime from the given `agentSpecId` using
11
+ * {@link useAgentRuntimes}.
12
+ * - The plain chat shell is shown as soon as possible. While the runtime is
13
+ * still being created/launched, the input and controls are disabled and a
14
+ * spinner overlay is shown (via the `launching` prop of {@link Chat}).
15
+ * - When ready, the same shell becomes interactive with the live endpoint.
16
+ * - An optional `overlay` (e.g. a sign-in gate) can be shown on top of the
17
+ * disabled chat for anonymous users.
18
+ *
19
+ * @module agents/AgentRuntimeChat
20
+ */
21
+ import { type ReactNode } from 'react';
22
+ import type { AgentConfig } from '../types/config';
23
+ import type { AgentConnection } from '../types/connection';
24
+ import type { Protocol, Suggestion } from '../types';
25
+ /**
26
+ * Props for {@link AgentRuntimeChat}.
27
+ */
28
+ export interface AgentRuntimeChatProps {
29
+ /** Agentspec id to launch, e.g. `gallery-analyze-excel-spreadsheet`. */
30
+ agentSpecId: string;
31
+ /** Human-friendly title shown in the chat header. */
32
+ title?: string;
33
+ /** Custom brand icon rendered in the header / empty state. */
34
+ brandIcon?: ReactNode;
35
+ /** Description shown in the empty state. */
36
+ description?: string;
37
+ /** Transport protocol (default: `vercel-ai`). */
38
+ protocol?: Protocol;
39
+ /** Chat height (default: `100%` so it fills the enclosing box). */
40
+ height?: string | number;
41
+ /** Suggestion chips shown in the empty state. */
42
+ suggestions?: Suggestion[];
43
+ /** Optional overlay rendered above the (disabled) chat, e.g. a sign-in gate. */
44
+ overlay?: ReactNode;
45
+ /**
46
+ * When false, the runtime is not launched and the chat renders in a disabled
47
+ * launching state. Useful for anonymous users who must sign in first.
48
+ * @default true
49
+ */
50
+ launch?: boolean;
51
+ /** Show the model selector control (default: true). */
52
+ showModelSelector?: boolean;
53
+ /** Show the tools menu control (default: true). */
54
+ showToolsMenu?: boolean;
55
+ /** Show the skills menu control (default: true). */
56
+ showSkillsMenu?: boolean;
57
+ /** Show the chat header (default: true). */
58
+ showHeader?: boolean;
59
+ /** Show the "powered by" tag (default: false). */
60
+ showPoweredBy?: boolean;
61
+ /** Override the agent config used when creating the agent. */
62
+ agentConfig?: Partial<AgentConfig>;
63
+ /** Optional callback invoked when runtime connection state changes. */
64
+ onRuntimeChange?: (runtime: AgentConnection | null) => void;
65
+ }
66
+ /**
67
+ * Full-page chat surface for a live agent runtime, with a launching state.
68
+ *
69
+ * @param props - Component props.
70
+ * @returns The rendered chat surface.
71
+ */
72
+ export declare function AgentRuntimeChat({ agentSpecId, title, brandIcon, description, protocol, height, suggestions, overlay, launch, showModelSelector, showToolsMenu, showSkillsMenu, showHeader, showPoweredBy, agentConfig, onRuntimeChange, }: AgentRuntimeChatProps): import("react/jsx-runtime").JSX.Element | null;
73
+ export default AgentRuntimeChat;
@@ -0,0 +1,198 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2025-2026 Datalayer, Inc.
3
+ // Distributed under the terms of the Modified BSD License.
4
+ /**
5
+ * AgentRuntimeChat - Generic, full-page chat surface for a live agent runtime.
6
+ *
7
+ * This is the shared component used to render the plain (non-floating) chat
8
+ * view for an agent runtime. It is designed to be reused across the app:
9
+ * - The agent runtime detail page (e.g. `/agents/runtime-...`).
10
+ * - Gallery example pages (e.g. `/gallery/agents/analyze-excel-spreadsheet`).
11
+ *
12
+ * Behaviour:
13
+ * - It launches (or connects to) a runtime from the given `agentSpecId` using
14
+ * {@link useAgentRuntimes}.
15
+ * - The plain chat shell is shown as soon as possible. While the runtime is
16
+ * still being created/launched, the input and controls are disabled and a
17
+ * spinner overlay is shown (via the `launching` prop of {@link Chat}).
18
+ * - When ready, the same shell becomes interactive with the live endpoint.
19
+ * - An optional `overlay` (e.g. a sign-in gate) can be shown on top of the
20
+ * disabled chat for anonymous users.
21
+ *
22
+ * @module agents/AgentRuntimeChat
23
+ */
24
+ import { useEffect, useMemo, useRef } from 'react';
25
+ import { Text } from '@primer/react';
26
+ import { Box } from '@datalayer/primer-addons';
27
+ import { useIAMStore } from '@datalayer/core/lib/state';
28
+ import { Chat } from '../chat';
29
+ import { useAgentRuntimes } from '../hooks/useAgentRuntimes';
30
+ import { getAgentspecs } from '../specs';
31
+ /**
32
+ * Full-page chat surface for a live agent runtime, with a launching state.
33
+ *
34
+ * @param props - Component props.
35
+ * @returns The rendered chat surface.
36
+ */
37
+ export function AgentRuntimeChat({ agentSpecId, title, brandIcon, description, protocol = 'vercel-ai', height = '100%', suggestions, overlay, launch = true, showModelSelector = true, showToolsMenu = true, showSkillsMenu = true, showHeader = true, showPoweredBy = false, agentConfig, onRuntimeChange, }) {
38
+ const { token } = useIAMStore();
39
+ const spec = useMemo(() => getAgentspecs(agentSpecId), [agentSpecId]);
40
+ const { runtime, isReady, endpoint, error, createAgent, isCreating } = useAgentRuntimes({
41
+ agentSpecId,
42
+ autoStart: launch,
43
+ autoCreateAgent: launch,
44
+ agentConfig: {
45
+ name: agentSpecId,
46
+ agentSpecId,
47
+ model: spec?.model,
48
+ systemPrompt: spec?.systemPrompt,
49
+ ...agentConfig,
50
+ },
51
+ });
52
+ const resolvedTitle = title || spec?.name || 'Agent';
53
+ const authToken = token ?? undefined;
54
+ useEffect(() => {
55
+ onRuntimeChange?.(runtime ?? null);
56
+ }, [onRuntimeChange, runtime]);
57
+ const launchingError = launch ? error : null;
58
+ const runtimeAgentId = runtime?.agentId || '';
59
+ const hasAssignedAgent = runtimeAgentId.trim().length > 0;
60
+ const assignmentAttemptedForPodRef = useRef(null);
61
+ const launchStateLogRef = useRef('');
62
+ const isInteractiveReady = launch && isReady && !!endpoint && hasAssignedAgent;
63
+ useEffect(() => {
64
+ const podName = String(runtime?.podName || '').trim();
65
+ if (!podName) {
66
+ assignmentAttemptedForPodRef.current = null;
67
+ return;
68
+ }
69
+ if (hasAssignedAgent) {
70
+ assignmentAttemptedForPodRef.current = podName;
71
+ return;
72
+ }
73
+ if (!launch || !isReady || !endpoint || !!error || isCreating) {
74
+ return;
75
+ }
76
+ if (assignmentAttemptedForPodRef.current === podName) {
77
+ return;
78
+ }
79
+ assignmentAttemptedForPodRef.current = podName;
80
+ void createAgent();
81
+ }, [
82
+ runtime?.podName,
83
+ hasAssignedAgent,
84
+ launch,
85
+ isReady,
86
+ endpoint,
87
+ error,
88
+ isCreating,
89
+ createAgent,
90
+ ]);
91
+ useEffect(() => {
92
+ if (!launch) {
93
+ return;
94
+ }
95
+ const state = launchingError
96
+ ? 'error'
97
+ : !isReady || !endpoint
98
+ ? 'waiting-endpoint'
99
+ : !hasAssignedAgent
100
+ ? 'waiting-assignment'
101
+ : 'ready';
102
+ const signature = [
103
+ state,
104
+ String(runtime?.podName || ''),
105
+ String(endpoint || ''),
106
+ ].join('|');
107
+ if (launchStateLogRef.current === signature) {
108
+ return;
109
+ }
110
+ launchStateLogRef.current = signature;
111
+ if (state === 'error') {
112
+ console.error('[AgentRuntimeChat] launch failed', {
113
+ agentSpecId,
114
+ podName: runtime?.podName,
115
+ endpoint,
116
+ error: launchingError,
117
+ });
118
+ return;
119
+ }
120
+ if (state === 'waiting-endpoint') {
121
+ console.info('[AgentRuntimeChat] waiting for runtime endpoint', {
122
+ agentSpecId,
123
+ podName: runtime?.podName,
124
+ isReady,
125
+ endpoint,
126
+ });
127
+ return;
128
+ }
129
+ if (state === 'waiting-assignment') {
130
+ console.info('[AgentRuntimeChat] waiting for agent assignment', {
131
+ agentSpecId,
132
+ podName: runtime?.podName,
133
+ endpoint,
134
+ });
135
+ return;
136
+ }
137
+ console.info('[AgentRuntimeChat] runtime ready', {
138
+ agentSpecId,
139
+ podName: runtime?.podName,
140
+ endpoint,
141
+ agentId: runtimeAgentId,
142
+ });
143
+ }, [
144
+ launch,
145
+ launchStateLogRef,
146
+ launchingError,
147
+ isReady,
148
+ endpoint,
149
+ hasAssignedAgent,
150
+ runtime?.podName,
151
+ runtimeAgentId,
152
+ agentSpecId,
153
+ ]);
154
+ const commonChatProps = {
155
+ protocol,
156
+ useStore: false,
157
+ title: resolvedTitle,
158
+ brandIcon,
159
+ description: description || spec?.welcomeMessage || 'Ask me to analyse your data.',
160
+ height,
161
+ showHeader,
162
+ showInput: true,
163
+ showModelSelector,
164
+ showToolsMenu,
165
+ showSkillsMenu,
166
+ showPoweredBy,
167
+ suggestions,
168
+ // Show the in-memory ephemeral notebook next to the chat (with a footer
169
+ // toggle to hide it) for agent runtime + gallery surfaces.
170
+ enableEphemeralNotebook: true,
171
+ };
172
+ if (launchingError) {
173
+ return (_jsxs(Box, { sx: {
174
+ p: 3,
175
+ borderRadius: 2,
176
+ border: '1px solid',
177
+ borderColor: 'danger.emphasis',
178
+ bg: 'danger.subtle',
179
+ color: 'danger.fg',
180
+ }, children: [_jsx(Text, { sx: { fontWeight: 600 }, children: "Failed to launch the agent" }), _jsx(Text, { sx: { display: 'block', mt: 1, fontSize: 1 }, children: launchingError })] }));
181
+ }
182
+ // Live and ready: interactive chat wired to the runtime endpoint.
183
+ if (isInteractiveReady) {
184
+ return (_jsx(Chat, { ...commonChatProps, baseUrl: endpoint, agentId: runtimeAgentId, runtimeId: "default", authToken: authToken, historyEndpoint: `${endpoint}/api/v1/history`, showTokenUsage: true, autoFocus: true }));
185
+ }
186
+ // Strict path: do not mount a live Chat until endpoint + assignment are
187
+ // ready. This avoids default localhost fallback connections in launch states.
188
+ //
189
+ // Anonymous visitors (overlay set) still get the full chat shell — including
190
+ // the ephemeral gallery notebook — rendered disabled underneath, with the
191
+ // centered sign-in gate on top. `autoConnect={false}` keeps it from opening
192
+ // any protocol connection while unauthenticated.
193
+ if (overlay) {
194
+ return _jsx(Chat, { ...commonChatProps, autoConnect: false, overlay: overlay });
195
+ }
196
+ return null;
197
+ }
198
+ export default AgentRuntimeChat;