@datalayer/agent-runtimes 1.0.10 → 1.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/README.md +82 -1
  2. package/lib/{AgentLexical.d.ts → AgentDocument.d.ts} +5 -5
  3. package/lib/{AgentLexical.js → AgentDocument.js} +156 -26
  4. package/lib/AgentNode.js +32 -31
  5. package/lib/AgentNotebook.js +172 -17
  6. package/lib/AppExamples2.css +47 -0
  7. package/lib/AppExamples2.d.ts +3 -0
  8. package/lib/AppExamples2.js +21 -0
  9. package/lib/{agent-lexical-main.js → agent-document-main.js} +2 -2
  10. package/lib/agents/AgentRuntimeChat.d.ts +73 -0
  11. package/lib/agents/AgentRuntimeChat.js +198 -0
  12. package/lib/api/index.d.ts +12 -0
  13. package/lib/api/index.js +46 -0
  14. package/lib/api/runtimes/checkpoints.d.ts +122 -0
  15. package/lib/api/runtimes/checkpoints.js +118 -0
  16. package/lib/api/runtimes/environments.d.ts +9 -0
  17. package/lib/api/runtimes/environments.js +29 -0
  18. package/lib/api/runtimes/healthz.d.ts +15 -0
  19. package/lib/api/runtimes/healthz.js +44 -0
  20. package/lib/api/runtimes/index.d.ts +12 -0
  21. package/lib/api/runtimes/index.js +16 -0
  22. package/lib/api/runtimes/runtimes.d.ts +138 -0
  23. package/lib/api/runtimes/runtimes.js +230 -0
  24. package/lib/api/runtimes/snapshots.d.ts +38 -0
  25. package/lib/api/runtimes/snapshots.js +82 -0
  26. package/lib/api/scheduler/index.d.ts +6 -0
  27. package/lib/api/scheduler/index.js +10 -0
  28. package/lib/api/scheduler/schedules.d.ts +85 -0
  29. package/lib/api/scheduler/schedules.js +78 -0
  30. package/lib/api/spacer/documents.d.ts +12 -0
  31. package/lib/api/spacer/documents.js +43 -0
  32. package/lib/api/spacer/healthz.d.ts +15 -0
  33. package/lib/api/spacer/healthz.js +44 -0
  34. package/lib/api/spacer/index.d.ts +15 -0
  35. package/lib/api/spacer/index.js +19 -0
  36. package/lib/api/spacer/items.d.ts +25 -0
  37. package/lib/api/spacer/items.js +55 -0
  38. package/lib/api/spacer/lexicals.d.ts +34 -0
  39. package/lib/api/spacer/lexicals.js +89 -0
  40. package/lib/api/spacer/notebooks.d.ts +34 -0
  41. package/lib/api/spacer/notebooks.js +89 -0
  42. package/lib/api/spacer/spaces.d.ts +84 -0
  43. package/lib/api/spacer/spaces.js +170 -0
  44. package/lib/api/spacer/users.d.ts +9 -0
  45. package/lib/api/spacer/users.js +29 -0
  46. package/lib/chat/Chat.d.ts +1 -1
  47. package/lib/chat/Chat.js +54 -54
  48. package/lib/chat/ChatFloating.d.ts +2 -2
  49. package/lib/chat/ChatFloating.js +136 -25
  50. package/lib/chat/ChatSidebar.js +20 -22
  51. package/lib/chat/base/ChatBase.js +429 -39
  52. package/lib/chat/display/EmptyState.js +21 -21
  53. package/lib/chat/document/EphemeralDocument.d.ts +23 -0
  54. package/lib/chat/document/EphemeralDocument.js +270 -0
  55. package/lib/chat/header/ChatHeaderBase.d.ts +12 -2
  56. package/lib/chat/header/ChatHeaderBase.js +78 -23
  57. package/lib/chat/index.d.ts +1 -0
  58. package/lib/chat/index.js +2 -0
  59. package/lib/chat/notebook/EphemeralNotebook.d.ts +24 -0
  60. package/lib/chat/notebook/EphemeralNotebook.js +252 -0
  61. package/lib/chat/prompt/InputFooter.js +4 -1
  62. package/lib/client/AgentRuntimesClient.d.ts +127 -0
  63. package/lib/client/AgentRuntimesClient.js +36 -0
  64. package/lib/client/AgentsMixin.js +28 -28
  65. package/lib/client/SdkAgentRuntimesClient.d.ts +1 -1
  66. package/lib/client/SdkAgentRuntimesClient.js +1 -1
  67. package/lib/client/mixins/RuntimesMixin.d.ts +93 -0
  68. package/lib/client/mixins/RuntimesMixin.js +229 -0
  69. package/lib/client/mixins/SpacerMixin.d.ts +210 -0
  70. package/lib/client/mixins/SpacerMixin.js +615 -0
  71. package/lib/client/utils/spacerUtils.d.ts +18 -0
  72. package/lib/client/utils/spacerUtils.js +32 -0
  73. package/lib/collaboration/DatalayerCollaboration.d.ts +13 -0
  74. package/lib/collaboration/DatalayerCollaboration.js +28 -0
  75. package/lib/collaboration/DatalayerCollaborationProvider.d.ts +58 -0
  76. package/lib/collaboration/DatalayerCollaborationProvider.js +148 -0
  77. package/lib/collaboration/index.d.ts +2 -0
  78. package/lib/collaboration/index.js +6 -0
  79. package/lib/components/AgentSummary.d.ts +19 -0
  80. package/lib/components/AgentSummary.js +89 -0
  81. package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +13 -0
  82. package/lib/components/a2ui/A2uiSurfaceComposed.js +110 -0
  83. package/lib/components/a2ui/index.d.ts +2 -0
  84. package/lib/components/a2ui/index.js +6 -0
  85. package/lib/components/a2ui/styles.d.ts +14 -0
  86. package/lib/components/a2ui/styles.js +142 -0
  87. package/lib/components/context/SpaceSelect.d.ts +2 -0
  88. package/lib/components/context/SpaceSelect.js +42 -0
  89. package/lib/components/flashes/FlashDisclaimer.d.ts +2 -0
  90. package/lib/components/flashes/FlashDisclaimer.js +17 -0
  91. package/lib/components/icons/ArtifactIcon.d.ts +10 -0
  92. package/lib/components/icons/ArtifactIcon.js +58 -0
  93. package/lib/components/icons/index.d.ts +1 -0
  94. package/lib/components/icons/index.js +5 -0
  95. package/lib/components/index.d.ts +5 -0
  96. package/lib/components/index.js +5 -0
  97. package/lib/components/nbgrader/NbGradesDetails.d.ts +5 -0
  98. package/lib/components/nbgrader/NbGradesDetails.js +19 -0
  99. package/lib/components/nbgrader/index.d.ts +1 -0
  100. package/lib/components/nbgrader/index.js +5 -0
  101. package/lib/components/progress/CreditsIndicator.d.ts +33 -0
  102. package/lib/components/progress/CreditsIndicator.js +23 -0
  103. package/lib/components/progress/index.d.ts +2 -0
  104. package/lib/components/progress/index.js +6 -0
  105. package/lib/components/runtimes/RuntimeCellVariables.d.ts +39 -0
  106. package/lib/components/runtimes/RuntimeCellVariables.js +172 -0
  107. package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +37 -0
  108. package/lib/components/runtimes/RuntimeCellVariablesDialog.js +101 -0
  109. package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +57 -0
  110. package/lib/components/runtimes/RuntimeLauncherDialog.js +275 -0
  111. package/lib/components/runtimes/RuntimePickerBase.d.ts +69 -0
  112. package/lib/components/runtimes/RuntimePickerBase.js +122 -0
  113. package/lib/components/runtimes/RuntimePickerCell.d.ts +34 -0
  114. package/lib/components/runtimes/RuntimePickerCell.js +104 -0
  115. package/lib/components/runtimes/RuntimePickerNotebook.d.ts +42 -0
  116. package/lib/components/runtimes/RuntimePickerNotebook.js +232 -0
  117. package/lib/components/runtimes/RuntimeReservationControl.d.ts +47 -0
  118. package/lib/components/runtimes/RuntimeReservationControl.js +42 -0
  119. package/lib/components/runtimes/RuntimeSimplePicker.d.ts +38 -0
  120. package/lib/components/runtimes/RuntimeSimplePicker.js +155 -0
  121. package/lib/components/runtimes/RuntimeTransfer.d.ts +16 -0
  122. package/lib/components/runtimes/RuntimeTransfer.js +5 -0
  123. package/lib/components/runtimes/RuntimeUtils.d.ts +17 -0
  124. package/lib/components/runtimes/RuntimeUtils.js +178 -0
  125. package/lib/components/runtimes/RuntimeVariables.d.ts +38 -0
  126. package/lib/components/runtimes/RuntimeVariables.js +75 -0
  127. package/lib/components/runtimes/index.d.ts +11 -0
  128. package/lib/components/runtimes/index.js +15 -0
  129. package/lib/components/scheduler/ScheduleMenu.d.ts +54 -0
  130. package/lib/components/scheduler/ScheduleMenu.js +154 -0
  131. package/lib/components/scheduler/index.d.ts +1 -0
  132. package/lib/components/scheduler/index.js +5 -0
  133. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +33 -0
  134. package/lib/components/snapshots/SandboxSnapshotMenu.js +169 -0
  135. package/lib/components/snapshots/index.d.ts +1 -0
  136. package/lib/components/snapshots/index.js +5 -0
  137. package/lib/components/snippets/SnippetDialog.d.ts +42 -0
  138. package/lib/components/snippets/SnippetDialog.js +42 -0
  139. package/lib/components/students/StudentItemStatus.d.ts +7 -0
  140. package/lib/components/students/StudentItemStatus.js +68 -0
  141. package/lib/components/students/index.d.ts +1 -0
  142. package/lib/components/students/index.js +5 -0
  143. package/lib/components/tokens/SpaceVariantToken.d.ts +5 -0
  144. package/lib/components/tokens/SpaceVariantToken.js +23 -0
  145. package/lib/components/tokens/index.d.ts +1 -0
  146. package/lib/components/tokens/index.js +5 -0
  147. package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +4 -0
  148. package/lib/components/toolbars/AssignmentEditorToolbar.js +18 -0
  149. package/lib/components/toolbars/DocumentEditorToolbar.d.ts +2 -0
  150. package/lib/components/toolbars/DocumentEditorToolbar.js +12 -0
  151. package/lib/components/toolbars/NotebookEditorToolbar.d.ts +29 -0
  152. package/lib/components/toolbars/NotebookEditorToolbar.js +30 -0
  153. package/lib/context/ContextInspector.d.ts +1 -14
  154. package/lib/context/ContextInspector.js +3 -73
  155. package/lib/context/CostUsageChart.d.ts +4 -3
  156. package/lib/context/CostUsageChart.js +236 -35
  157. package/lib/context/MessageHistory.d.ts +30 -0
  158. package/lib/context/MessageHistory.js +129 -0
  159. package/lib/context/TokenUsageChart.d.ts +4 -3
  160. package/lib/context/TokenUsageChart.js +180 -30
  161. package/lib/context/TurnGraphChart.d.ts +1 -1
  162. package/lib/context/TurnGraphChart.js +6 -6
  163. package/lib/examples/A2UiAgentExample.d.ts +22 -0
  164. package/lib/examples/A2UiAgentExample.js +442 -0
  165. package/lib/examples/A2UiComponentsGalleryExample.d.ts +3 -0
  166. package/lib/examples/A2UiComponentsGalleryExample.js +863 -0
  167. package/lib/examples/A2UiContactCardExample.js +9 -5
  168. package/lib/examples/A2UiRestaurantExample.js +23 -8
  169. package/lib/examples/A2UiViewerExample.js +75 -3
  170. package/lib/examples/AgUiAgenticExample.d.ts +1 -12
  171. package/lib/examples/AgUiAgenticExample.js +52 -8
  172. package/lib/examples/AgUiBackendToolRenderingExample.d.ts +1 -16
  173. package/lib/examples/AgUiBackendToolRenderingExample.js +32 -17
  174. package/lib/examples/AgUiHaikuGenUiExample.d.ts +1 -17
  175. package/lib/examples/AgUiHaikuGenUiExample.js +49 -33
  176. package/lib/examples/AgUiHumanInTheLoopExample.d.ts +1 -12
  177. package/lib/examples/AgUiHumanInTheLoopExample.js +21 -6
  178. package/lib/examples/AgUiSharedStateExample.d.ts +1 -14
  179. package/lib/examples/AgUiSharedStateExample.js +21 -6
  180. package/lib/examples/AgUiToolsBasedGenUiExample.d.ts +1 -14
  181. package/lib/examples/AgUiToolsBasedGenUiExample.js +21 -6
  182. package/lib/examples/AgentCheckpointsExample.d.ts +1 -1
  183. package/lib/examples/AgentCheckpointsExample.js +9 -10
  184. package/lib/examples/AgentCodemodeExample.js +3 -3
  185. package/lib/examples/AgentEvalsExample.js +5 -5
  186. package/lib/examples/AgentGuardrailsExample.js +17 -12
  187. package/lib/examples/AgentHooksExample.js +14 -55
  188. package/lib/examples/AgentInferenceProviderExample.js +4 -4
  189. package/lib/examples/AgentLoopExample.d.ts +10 -0
  190. package/lib/examples/AgentLoopExample.js +304 -0
  191. package/lib/examples/AgentMCPExample.js +7 -7
  192. package/lib/examples/AgentMemoryExample.js +4 -4
  193. package/lib/examples/AgentMonitoringExample.js +114 -44
  194. package/lib/examples/AgentNotificationsExample.js +4 -4
  195. package/lib/examples/AgentOtelExample.d.ts +3 -3
  196. package/lib/examples/AgentOtelExample.js +15 -10
  197. package/lib/examples/AgentOutputsExample.js +6 -6
  198. package/lib/examples/AgentParametersExample.js +21 -33
  199. package/lib/examples/AgentSandboxExample.js +5 -5
  200. package/lib/examples/AgentSkillsExample.js +7 -7
  201. package/lib/examples/AgentSubagentsExample.js +4 -4
  202. package/lib/examples/AgentToolApprovalsExample.js +5 -5
  203. package/lib/examples/AgentTriggersExample.js +9 -9
  204. package/lib/examples/AgentspecsExample.js +63 -41
  205. package/lib/examples/ChatCustomExample.js +23 -77
  206. package/lib/examples/ChatExample.js +13 -44
  207. package/lib/examples/LexicalAgentExample.js +43 -91
  208. package/lib/examples/LexicalAgentSidebarExample.js +45 -73
  209. package/lib/examples/NotebookAgentExample.js +52 -81
  210. package/lib/examples/NotebookAgentSidebarExample.js +43 -71
  211. package/lib/examples/NotebookCollaborationExample.js +11 -9
  212. package/lib/examples/NotebookExample.js +5 -2
  213. package/lib/examples/components/AuthRequiredView.js +1 -1
  214. package/lib/examples/components/ExampleErrorBoundary.d.ts +46 -0
  215. package/lib/examples/components/ExampleErrorBoundary.js +67 -0
  216. package/lib/examples/components/haiku/haiku-card.css +11 -0
  217. package/lib/examples/components/weather/weather-card.css +11 -0
  218. package/lib/examples/example-selector.js +3 -1
  219. package/lib/examples/hooks/useExampleAgentRuntime.d.ts +35 -0
  220. package/lib/examples/hooks/useExampleAgentRuntime.js +82 -0
  221. package/lib/examples/hooks/useSpecRenderToolResult.d.ts +30 -0
  222. package/lib/examples/hooks/useSpecRenderToolResult.js +61 -0
  223. package/lib/examples/index.d.ts +3 -1
  224. package/lib/examples/index.js +3 -1
  225. package/lib/examples/main.js +340 -93
  226. package/lib/examples/utils/a2ui.d.ts +2 -0
  227. package/lib/examples/utils/a2ui.js +97 -2
  228. package/lib/examples/utils/agentSummaryStore.d.ts +21 -0
  229. package/lib/examples/utils/agentSummaryStore.js +23 -0
  230. package/lib/examples/utils/notebooks/Empty.ipynb.json +30 -30
  231. package/lib/examples/utils/runtimeTargetStore.d.ts +9 -0
  232. package/lib/examples/utils/runtimeTargetStore.js +27 -0
  233. package/lib/examples/utils/teardownAgents.d.ts +13 -0
  234. package/lib/examples/utils/teardownAgents.js +78 -0
  235. package/lib/examples/utils/useExampleAgentRuntimesUrl.d.ts +2 -0
  236. package/lib/examples/utils/useExampleAgentRuntimesUrl.js +26 -7
  237. package/lib/examples2/CellExample.d.ts +6 -0
  238. package/lib/examples2/CellExample.js +20 -0
  239. package/lib/examples2/DatalayerNotebookExample.d.ts +16 -0
  240. package/lib/examples2/DatalayerNotebookExample.js +109 -0
  241. package/lib/examples2/NativeNavigationExample.d.ts +8 -0
  242. package/lib/examples2/NativeNavigationExample.js +97 -0
  243. package/lib/examples2/NotebookExample.d.ts +6 -0
  244. package/lib/examples2/NotebookExample.js +19 -0
  245. package/lib/examples2/NotebookMutationsKernel.d.ts +2 -0
  246. package/lib/examples2/NotebookMutationsKernel.js +105 -0
  247. package/lib/examples2/NotebookMutationsServiceManager.d.ts +2 -0
  248. package/lib/examples2/NotebookMutationsServiceManager.js +109 -0
  249. package/lib/examples2/ReactRouterExample.d.ts +6 -0
  250. package/lib/examples2/ReactRouterExample.js +175 -0
  251. package/lib/examples2/example-selector.d.ts +22 -0
  252. package/lib/examples2/example-selector.js +45 -0
  253. package/lib/examples2/index.d.ts +2 -0
  254. package/lib/examples2/index.js +6 -0
  255. package/lib/examples2/lexical-theme.css +436 -0
  256. package/lib/examples2/main.d.ts +2 -0
  257. package/lib/examples2/main.js +330 -0
  258. package/lib/examples2/notebooks/IPyWidgetsExample.ipynb.json +101 -0
  259. package/lib/examples2/notebooks/IPyWidgetsExampleWithState.ipynb.json +112 -0
  260. package/lib/examples2/notebooks/Lite.ipynb.json +128 -0
  261. package/lib/examples2/notebooks/Matplotlib.ipynb.json +137 -0
  262. package/lib/examples2/notebooks/NotebookExample1.ipynb.json +126 -0
  263. package/lib/examples2/notebooks/NotebookExample2.ipynb.json +48 -0
  264. package/lib/examples2/notebooks/NotebookOutputs.ipynb.json +49 -0
  265. package/lib/examples2/notebooks/NotebookToCExample.ipynb.json +102 -0
  266. package/lib/examples2/notebooks/OutputIPyWidgetsExample.d.ts +145 -0
  267. package/lib/examples2/notebooks/OutputIPyWidgetsExample.js +153 -0
  268. package/lib/examples2/notebooks/PyGWalker.ipynb.json +55 -0
  269. package/lib/hooks/index.d.ts +9 -1
  270. package/lib/hooks/index.js +13 -1
  271. package/lib/hooks/useAIAgentsWebSocket.d.ts +1 -1
  272. package/lib/hooks/useAIAgentsWebSocket.js +39 -3
  273. package/lib/hooks/useAgentRuntimes.d.ts +15 -3
  274. package/lib/hooks/useAgentRuntimes.js +186 -27
  275. package/lib/hooks/useAgentsService.js +5 -5
  276. package/lib/hooks/useCellOutputshot.d.ts +4 -0
  277. package/lib/hooks/useCellOutputshot.js +25 -0
  278. package/lib/hooks/useCheckpoints.d.ts +8 -8
  279. package/lib/hooks/useCheckpoints.js +36 -26
  280. package/lib/hooks/useConfig.d.ts +1 -1
  281. package/lib/hooks/useMonitoring.d.ts +7 -5
  282. package/lib/hooks/useMonitoring.js +16 -10
  283. package/lib/hooks/useNotifications.d.ts +11 -11
  284. package/lib/hooks/useNotifications.js +1 -1
  285. package/lib/hooks/useProgressStore.d.ts +25 -0
  286. package/lib/hooks/useProgressStore.js +58 -0
  287. package/lib/hooks/useProgressTask.d.ts +9 -0
  288. package/lib/hooks/useProgressTask.js +41 -0
  289. package/lib/hooks/useProjects.d.ts +628 -0
  290. package/lib/hooks/useProjects.js +190 -0
  291. package/lib/hooks/useRuntimes.d.ts +5 -0
  292. package/lib/hooks/useRuntimes.js +34 -0
  293. package/lib/hooks/useToolApprovals.d.ts +6 -6
  294. package/lib/index.d.ts +1 -0
  295. package/lib/index.js +1 -0
  296. package/lib/jupyter/exec/Python.d.ts +5 -0
  297. package/lib/jupyter/exec/Python.js +100 -0
  298. package/lib/jupyter/exec/Snippets.d.ts +105 -0
  299. package/lib/jupyter/exec/Snippets.js +101 -0
  300. package/lib/jupyter/exec/index.d.ts +2 -0
  301. package/lib/jupyter/exec/index.js +6 -0
  302. package/lib/jupyter/index.d.ts +2 -0
  303. package/lib/jupyter/index.js +6 -0
  304. package/lib/jupyter/kernelsHandler.d.ts +8 -0
  305. package/lib/jupyter/kernelsHandler.js +39 -0
  306. package/lib/mocks/models/CourseMock.d.ts +6 -0
  307. package/lib/mocks/models/CourseMock.js +29 -0
  308. package/lib/mocks/models/SpaceMock.d.ts +6 -0
  309. package/lib/mocks/models/SpaceMock.js +25 -0
  310. package/lib/models/Assignment.d.ts +7 -0
  311. package/lib/models/Assignment.js +5 -0
  312. package/lib/models/Cell.d.ts +8 -0
  313. package/lib/models/Cell.js +5 -0
  314. package/lib/models/CodeBlock.d.ts +10 -0
  315. package/lib/models/CodeBlock.js +5 -0
  316. package/lib/models/CodeSandboxSnapshot.d.ts +92 -0
  317. package/lib/models/CodeSandboxSnapshot.js +13 -0
  318. package/lib/models/CodeSandboxSnapshotDTO.d.ts +173 -0
  319. package/lib/models/CodeSandboxSnapshotDTO.js +139 -0
  320. package/lib/models/CodefeedBlocks.d.ts +7 -0
  321. package/lib/models/CodefeedBlocks.js +5 -0
  322. package/lib/models/Content.d.ts +5 -0
  323. package/lib/models/Content.js +5 -0
  324. package/lib/models/Course.d.ts +17 -0
  325. package/lib/models/Course.js +5 -0
  326. package/lib/models/Dataset.d.ts +16 -0
  327. package/lib/models/Dataset.js +5 -0
  328. package/lib/models/Document.d.ts +8 -0
  329. package/lib/models/Document.js +5 -0
  330. package/lib/models/Environment.d.ts +86 -0
  331. package/lib/models/Environment.js +5 -0
  332. package/lib/models/EnvironmentDTO.d.ts +125 -0
  333. package/lib/models/EnvironmentDTO.js +88 -0
  334. package/lib/models/Exercise.d.ts +16 -0
  335. package/lib/models/Exercise.js +5 -0
  336. package/lib/models/Item.d.ts +20 -0
  337. package/lib/models/Item.js +5 -0
  338. package/lib/models/ItemDTO.d.ts +74 -0
  339. package/lib/models/ItemDTO.js +186 -0
  340. package/lib/models/ItemType.d.ts +2 -0
  341. package/lib/models/ItemType.js +5 -0
  342. package/lib/models/Lesson.d.ts +5 -0
  343. package/lib/models/Lesson.js +5 -0
  344. package/lib/models/LexicalDTO.d.ts +155 -0
  345. package/lib/models/LexicalDTO.js +157 -0
  346. package/lib/models/Library.d.ts +10 -0
  347. package/lib/models/Library.js +5 -0
  348. package/lib/models/Notebook.d.ts +11 -0
  349. package/lib/models/Notebook.js +5 -0
  350. package/lib/models/NotebookDTO.d.ts +96 -0
  351. package/lib/models/NotebookDTO.js +153 -0
  352. package/lib/models/Page.d.ts +41 -0
  353. package/lib/models/Page.js +25 -0
  354. package/lib/models/PageTag.d.ts +19 -0
  355. package/lib/models/PageTag.js +94 -0
  356. package/lib/models/ProjectDTO.d.ts +89 -0
  357. package/lib/models/ProjectDTO.js +131 -0
  358. package/lib/models/Runtime.d.ts +160 -0
  359. package/lib/models/Runtime.js +18 -0
  360. package/lib/models/RuntimeDTO.d.ts +172 -0
  361. package/lib/models/RuntimeDTO.js +204 -0
  362. package/lib/models/Space.d.ts +35 -0
  363. package/lib/models/Space.js +66 -0
  364. package/lib/models/SpaceDTO.d.ts +334 -0
  365. package/lib/models/SpaceDTO.js +244 -0
  366. package/lib/models/SpaceItem.d.ts +10 -0
  367. package/lib/models/SpaceItem.js +5 -0
  368. package/lib/models/SpaceMember.d.ts +6 -0
  369. package/lib/models/SpaceMember.js +5 -0
  370. package/lib/models/StudentItem.d.ts +21 -0
  371. package/lib/models/StudentItem.js +5 -0
  372. package/lib/models/index.d.ts +32 -0
  373. package/lib/models/index.js +39 -0
  374. package/lib/protocols/AGUIAdapter.js +1 -1
  375. package/lib/runtimes/actions.d.ts +102 -0
  376. package/lib/runtimes/actions.js +249 -0
  377. package/lib/runtimes/apis.d.ts +273 -0
  378. package/lib/runtimes/apis.js +5 -0
  379. package/lib/runtimes/index.d.ts +5 -0
  380. package/lib/runtimes/index.js +9 -0
  381. package/lib/runtimes/settings.d.ts +15 -0
  382. package/lib/runtimes/settings.js +31 -0
  383. package/lib/runtimes/snapshots.d.ts +25 -0
  384. package/lib/runtimes/snapshots.js +150 -0
  385. package/lib/runtimes/utils.d.ts +7 -0
  386. package/lib/runtimes/utils.js +14 -0
  387. package/lib/services/DatalayerServiceManager.d.ts +23 -0
  388. package/lib/services/DatalayerServiceManager.js +90 -0
  389. package/lib/services/reconnectToRuntime.d.ts +32 -0
  390. package/lib/services/reconnectToRuntime.js +59 -0
  391. package/lib/services/sandboxServiceManagers.d.ts +31 -0
  392. package/lib/services/sandboxServiceManagers.js +57 -0
  393. package/lib/specs/agents/agents.d.ts +70 -26
  394. package/lib/specs/agents/agents.js +3994 -1639
  395. package/lib/specs/index.d.ts +1 -0
  396. package/lib/specs/index.js +1 -0
  397. package/lib/specs/loops.d.ts +34 -0
  398. package/lib/specs/loops.js +188 -0
  399. package/lib/specs/mcpServers.d.ts +1 -0
  400. package/lib/specs/mcpServers.js +17 -0
  401. package/lib/specs/models.d.ts +4 -0
  402. package/lib/specs/models.js +30 -0
  403. package/lib/specs/skills.d.ts +1 -0
  404. package/lib/specs/skills.js +18 -0
  405. package/lib/specs/tools.d.ts +15 -0
  406. package/lib/specs/tools.js +285 -0
  407. package/lib/state/index.d.ts +4 -0
  408. package/lib/state/index.js +10 -0
  409. package/lib/state/substates/CellState.d.ts +12 -0
  410. package/lib/state/substates/CellState.js +22 -0
  411. package/lib/state/substates/DocumentState.d.ts +10 -0
  412. package/lib/state/substates/DocumentState.js +14 -0
  413. package/lib/state/substates/GradeState.d.ts +10 -0
  414. package/lib/state/substates/GradeState.js +14 -0
  415. package/lib/state/substates/JupyterLabState.d.ts +16 -0
  416. package/lib/state/substates/JupyterLabState.js +17 -0
  417. package/lib/state/substates/NbformatState.d.ts +13 -0
  418. package/lib/state/substates/NbformatState.js +16 -0
  419. package/lib/state/substates/RuntimesState.d.ts +87 -0
  420. package/lib/state/substates/RuntimesState.js +192 -0
  421. package/lib/state/substates/SpaceState.d.ts +11 -0
  422. package/lib/state/substates/SpaceState.js +16 -0
  423. package/lib/state/substates/index.d.ts +8 -0
  424. package/lib/state/substates/index.js +14 -0
  425. package/lib/stores/agentRuntimeStore.d.ts +25 -2
  426. package/lib/stores/agentRuntimeStore.js +114 -19
  427. package/lib/stories/Button.stories.d.ts +1 -1
  428. package/lib/stories/Header.stories.d.ts +3 -3
  429. package/lib/test-setup.js +10 -0
  430. package/lib/types/agents-lifecycle.d.ts +5 -5
  431. package/lib/types/agents.d.ts +3 -3
  432. package/lib/types/agentspecs.d.ts +3 -1
  433. package/lib/types/chat.d.ts +135 -3
  434. package/lib/types/config.d.ts +19 -1
  435. package/lib/types/index.d.ts +1 -0
  436. package/lib/types/index.js +1 -0
  437. package/lib/types/loops.d.ts +64 -0
  438. package/lib/types/loops.js +5 -0
  439. package/lib/types/tools.d.ts +16 -0
  440. package/lib/utils/Cells.d.ts +2 -0
  441. package/lib/utils/Cells.js +28 -0
  442. package/package.json +24 -18
  443. package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
  444. package/scripts/codegen/generate_agents.py +21 -4
  445. package/scripts/codegen/generate_loops.py +443 -0
  446. package/lib/examples/A2UiComponentGalleryExample.d.ts +0 -3
  447. package/lib/examples/A2UiComponentGalleryExample.js +0 -361
  448. /package/lib/{agent-lexical-main.d.ts → agent-document-main.d.ts} +0 -0
@@ -0,0 +1,42 @@
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 { useCallback, useEffect } from 'react';
7
+ import { FormControl, Select } from '@primer/react';
8
+ import { Box } from '@datalayer/primer-addons';
9
+ import { useCache, useUser } from '@datalayer/core/lib/hooks';
10
+ import { useLayoutStore } from '../../state/substates';
11
+ export const SpaceSelect = () => {
12
+ const user = useUser();
13
+ const { organization, space, updateLayoutSpace } = useLayoutStore();
14
+ const { useRefreshUserSpaces, useUserSpaces, useRefreshOrganizationSpaces, useOrganizationSpaces, } = useCache();
15
+ const { mutate: refreshUserSpacesMutate } = useRefreshUserSpaces();
16
+ const { mutate: refreshOrganizationSpacesMutate } = useRefreshOrganizationSpaces();
17
+ const { data: organizationSpaces = [] } = useOrganizationSpaces(organization?.id ?? '');
18
+ const { data: userSpaces = [] } = useUserSpaces();
19
+ const spaces = organization ? organizationSpaces : userSpaces;
20
+ useEffect(() => {
21
+ if (organization?.id) {
22
+ refreshOrganizationSpacesMutate(organization.id);
23
+ }
24
+ else if (user) {
25
+ refreshUserSpacesMutate();
26
+ }
27
+ }, [
28
+ organization?.id,
29
+ refreshOrganizationSpacesMutate,
30
+ refreshUserSpacesMutate,
31
+ user,
32
+ ]);
33
+ const onSelectionChange = useCallback((event) => {
34
+ const selectedSpaceIndex = Number.parseInt(event.target.value, 10);
35
+ const selectedSpace = Number.isNaN(selectedSpaceIndex) || selectedSpaceIndex < 0
36
+ ? undefined
37
+ : spaces[selectedSpaceIndex];
38
+ updateLayoutSpace(selectedSpace);
39
+ }, [spaces, updateLayoutSpace]);
40
+ return (_jsx(_Fragment, { children: _jsx(Box, { as: "form", children: _jsxs(FormControl, { children: [_jsx(FormControl.Label, { children: "Select a space" }), _jsx(FormControl.Caption, { children: "This will go with you while you navigate" }), _jsx(Select, { block: true, width: "medium", onChange: onSelectionChange, placeholder: "Please select an space...", children: spaces.map((sp, index) => (_jsx(Select.Option, { value: `${index}`, selected: sp.id === space?.id, children: sp.name }, sp.id))) })] }) }) }));
41
+ };
42
+ export default SpaceSelect;
@@ -0,0 +1,2 @@
1
+ export declare const FlashDisclaimer: () => import("react/jsx-runtime").JSX.Element;
2
+ export default FlashDisclaimer;
@@ -0,0 +1,17 @@
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 { Label, Link } from '@primer/react';
7
+ import { Box } from '@datalayer/primer-addons';
8
+ import { Banner } from '@primer/react/experimental';
9
+ import { useCoreStore, useRuntimesStore } from '../../state/substates';
10
+ import { useNavigate } from '@datalayer/core/lib/hooks';
11
+ export const FlashDisclaimer = () => {
12
+ const { configuration } = useCoreStore();
13
+ const { showDisclaimer, setShowDisclaimer } = useRuntimesStore();
14
+ const navigate = useNavigate();
15
+ return (_jsx(_Fragment, { children: configuration?.whiteLabel === false && showDisclaimer && (_jsx(Banner, { variant: "info", title: "AI Agents for Data Analysis", description: _jsxs(Box, { children: [_jsx(Label, { style: { marginRight: 10 }, children: "PRIVATE BETA" }), "Create Kernels and use them from your JupyterLab, VS Code or CLI. Read the", ' ', _jsx(Link, { href: "javascript: return false;", onClick: e => navigate('/docs', e), children: "documentation" }), ' ', "for any question or", ' ', _jsx(Link, { href: "javascript: return false;", onClick: e => navigate('/support/request', e), children: "contact us for support" }), "."] }), onDismiss: () => setShowDisclaimer(false) })) }));
16
+ };
17
+ export default FlashDisclaimer;
@@ -0,0 +1,10 @@
1
+ import { Icon } from '@primer/octicons-react';
2
+ import { IAnyItem, IItemType } from '../../models';
3
+ type IArtifactIconClassProp = {
4
+ item?: IAnyItem;
5
+ type?: IItemType;
6
+ size?: number | 'small' | 'medium' | 'large';
7
+ };
8
+ export declare const ArtifactIconClass: (props: IArtifactIconClassProp) => Icon;
9
+ export declare function ArtifactIcon(props: IArtifactIconClassProp): JSX.Element;
10
+ export default ArtifactIcon;
@@ -0,0 +1,58 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import { createElement } from 'react';
6
+ import { DatabaseIcon, RowsIcon, BookIcon, DiffModifiedIcon, PencilIcon, FeedIssueDraftIcon, FeedRocketIcon, MilestoneIcon, OrganizationIcon, PeopleIcon, RocketIcon, FileIcon, StackIcon, GearIcon, GraphIcon, NumberIcon, PaperAirplaneIcon, ArchiveIcon, TagIcon, MortarBoardIcon, ContainerIcon, HomeIcon, ShareIcon, FileDirectoryIcon, TrophyIcon, QuestionIcon, PersonIcon, MailIcon, ZapIcon, } from '@primer/octicons-react';
7
+ import { GalileoIcon, CircleWhiteIcon, BookOpenIcon, CameraIcon, CellIcon, NotebookOutlineIcon, } from '@datalayer/icons-react';
8
+ const ARTIFACT_ICONS = new Map([
9
+ ['assignment', MilestoneIcon],
10
+ ['authoring', PencilIcon],
11
+ ['cell', CellIcon],
12
+ ['content', ArchiveIcon],
13
+ ['credits', NumberIcon],
14
+ ['dataset', StackIcon],
15
+ ['datasource', DatabaseIcon],
16
+ ['document', FileIcon],
17
+ ['documentation', BookOpenIcon],
18
+ ['environment', ContainerIcon],
19
+ ['exercise', DiffModifiedIcon],
20
+ ['growth', FeedRocketIcon],
21
+ ['home', HomeIcon],
22
+ ['invite', PaperAirplaneIcon],
23
+ ['runtime', RocketIcon],
24
+ ['runtime-snapshot', CameraIcon],
25
+ ['library', BookIcon],
26
+ ['lesson', MortarBoardIcon],
27
+ ['mail', MailIcon],
28
+ ['management', FeedIssueDraftIcon],
29
+ ['notebook', RowsIcon],
30
+ ['organization', OrganizationIcon],
31
+ ['onboarding', ZapIcon],
32
+ ['page', NotebookOutlineIcon],
33
+ ['settings', GearIcon],
34
+ ['share', ShareIcon],
35
+ ['space', GalileoIcon],
36
+ ['success', TrophyIcon],
37
+ ['support', QuestionIcon],
38
+ ['storage', FileDirectoryIcon],
39
+ ['tag', TagIcon],
40
+ ['team', PeopleIcon],
41
+ ['usage', GraphIcon],
42
+ ['user', PersonIcon],
43
+ ['undefined', CircleWhiteIcon],
44
+ ]);
45
+ export const ArtifactIconClass = (props) => {
46
+ const { item, type } = props;
47
+ const itemType = item?.type ?? type ?? 'undefined';
48
+ const icon = ARTIFACT_ICONS.get(itemType);
49
+ return icon ?? CircleWhiteIcon;
50
+ };
51
+ export function ArtifactIcon(props) {
52
+ const { size } = props;
53
+ const artifactIconClass = ArtifactIconClass(props);
54
+ return createElement(artifactIconClass, {
55
+ size: size ?? 16,
56
+ });
57
+ }
58
+ export default ArtifactIcon;
@@ -0,0 +1 @@
1
+ export * from './ArtifactIcon';
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ export * from './ArtifactIcon';
@@ -1,3 +1,8 @@
1
1
  export * from './ToolApprovalCard';
2
2
  export * from './NotificationEventCard';
3
3
  export * from './OutputCard';
4
+ export * from './AgentSummary';
5
+ export * from './a2ui';
6
+ export * from './runtimes';
7
+ export * from './snapshots';
8
+ export * from './scheduler';
@@ -5,3 +5,8 @@
5
5
  export * from './ToolApprovalCard';
6
6
  export * from './NotificationEventCard';
7
7
  export * from './OutputCard';
8
+ export * from './AgentSummary';
9
+ export * from './a2ui';
10
+ export * from './runtimes';
11
+ export * from './snapshots';
12
+ export * from './scheduler';
@@ -0,0 +1,5 @@
1
+ import { IStudentItem } from '../../models';
2
+ export declare const NbGradesDetails: (props: {
3
+ studentItem?: IStudentItem;
4
+ }) => import("react/jsx-runtime").JSX.Element;
5
+ export default NbGradesDetails;
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright (c) 2025-2026 Datalayer, Inc.
4
+ * Distributed under the terms of the Modified BSD License.
5
+ */
6
+ import { Heading, Text } from '@primer/react';
7
+ import { Box } from '@datalayer/primer-addons';
8
+ export const NbGradesDetails = (props) => {
9
+ const { studentItem } = props;
10
+ const nbgrades = Array.isArray(studentItem?.nbgrades)
11
+ ? studentItem.nbgrades
12
+ : [];
13
+ const totalScore = studentItem?.nbgradesTotalScore ?? 0;
14
+ const totalPoints = studentItem?.nbgradesTotalPoints ?? 0;
15
+ return studentItem ? (_jsxs(Box, { children: [_jsx(Box, { children: _jsx(Heading, { sx: { fontSize: 1 }, children: "Grades" }) }), _jsx(Box, { mt: 3, children: nbgrades.length > 0 ? (nbgrades.map(nb => {
16
+ return (_jsx(Box, { children: _jsxs(Text, { sx: { fontSize: 'small' }, children: [nb.grade_id_s, ": ", nb.score_f] }) }));
17
+ })) : (_jsx(Text, { sx: { fontSize: 'small' }, children: "No grade checks were returned." })) }), _jsx(Box, { mt: 3, children: _jsx(Heading, { sx: { fontSize: 1 }, children: "Total" }) }), _jsxs(Box, { mt: 3, children: [totalScore, " / ", totalPoints] })] })) : (_jsxs(Box, { children: [_jsx(Box, { children: _jsx(Heading, { sx: { fontSize: 1 }, children: "Grades" }) }), _jsx(Box, { mt: 3, children: "Please grade your assignment." })] }));
18
+ };
19
+ export default NbGradesDetails;
@@ -0,0 +1 @@
1
+ export * from './NbGradesDetails';
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ export * from './NbGradesDetails';
@@ -0,0 +1,33 @@
1
+ import type { IRemoteServicesManager } from '../../runtimes';
2
+ type ICreditsIndicatorProps = {
3
+ /**
4
+ * Kernel service manager
5
+ */
6
+ serviceManager: IRemoteServicesManager;
7
+ /**
8
+ * Kernel ID
9
+ */
10
+ kernelId: string;
11
+ /**
12
+ * Route to navigate to when the indicator is clicked.
13
+ * Ignored if `onClick` is provided.
14
+ */
15
+ navigateTo?: string;
16
+ /**
17
+ * Callback on progress bar click event.
18
+ * Takes precedence over `navigateTo`.
19
+ */
20
+ onClick?: () => void;
21
+ /**
22
+ * Callback on progress update.
23
+ *
24
+ * Progress is a percentage between 0 and 100.
25
+ * Duration is the kernel max duration
26
+ */
27
+ onUpdate?: (progress: number, duration: number) => void;
28
+ };
29
+ /**
30
+ * Credits indicator component.
31
+ */
32
+ export declare function CreditsIndicator(props: ICreditsIndicatorProps): JSX.Element | null;
33
+ export {};
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, 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, useEffect } from 'react';
7
+ import { Box } from '@datalayer/primer-addons';
8
+ import { useNavigate } from '@datalayer/core/lib/hooks/useNavigate';
9
+ import { ConsumptionBar } from '@datalayer/core/lib/components/progress/ConsumptionBar';
10
+ /**
11
+ * Credits indicator component.
12
+ */
13
+ export function CreditsIndicator(props) {
14
+ const { serviceManager, kernelId, navigateTo, onClick, onUpdate } = props;
15
+ const navigate = useNavigate();
16
+ const [model, setModel] = useState();
17
+ useEffect(() => {
18
+ serviceManager.runtimesManager.findById(kernelId).then(model => {
19
+ setModel(model);
20
+ });
21
+ }, [kernelId, serviceManager]);
22
+ return model ? (_jsx(Box, { display: "flex", style: { alignItems: 'center' }, children: _jsx(ConsumptionBar, { startedAt: parseFloat(model.started_at), expiredAt: model.expired_at ? parseFloat(model.expired_at) : undefined, burningRate: model.burning_rate, onClick: onClick ?? (navigateTo ? () => navigate(navigateTo) : undefined), onUpdate: onUpdate, style: { cursor: 'pointer' } }) })) : (_jsx(_Fragment, {}));
23
+ }
@@ -0,0 +1,2 @@
1
+ export * from './CreditsIndicator';
2
+ export * from '@datalayer/core/lib/components/progress';
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ export * from './CreditsIndicator';
6
+ export * from '@datalayer/core/lib/components/progress';
@@ -0,0 +1,39 @@
1
+ import { ITranslator } from '@jupyterlab/translation';
2
+ /**
3
+ * {@link RuntimeCellVariables} properties
4
+ */
5
+ interface IRuntimeCellVariablesProps {
6
+ /**
7
+ * Variable names to be imported
8
+ */
9
+ inputs: string[];
10
+ /**
11
+ * Importable variable names
12
+ */
13
+ getInputOptions?: () => Promise<string[]>;
14
+ /**
15
+ * Set the variable names to be imported
16
+ */
17
+ setInputs: (values: string[]) => void;
18
+ /**
19
+ * Variable name to be exported
20
+ */
21
+ output?: string;
22
+ /**
23
+ * Exportable variable names
24
+ */
25
+ getOutputOptions?: () => Promise<string[]>;
26
+ /**
27
+ * Set the variable name to be exported
28
+ */
29
+ setOutput: (value?: string) => void;
30
+ /**
31
+ * Application translator object
32
+ */
33
+ translator?: ITranslator;
34
+ }
35
+ /**
36
+ * Runtime Cell Variables Picker.
37
+ */
38
+ export declare function RuntimeCellVariables(props: IRuntimeCellVariablesProps): JSX.Element;
39
+ export default RuntimeCellVariables;
@@ -0,0 +1,172 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright (c) 2025-2026 Datalayer, Inc.
4
+ * Distributed under the terms of the Modified BSD License.
5
+ */
6
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
+ import { nullTranslator } from '@jupyterlab/translation';
8
+ import { JSONExt } from '@lumino/coreutils';
9
+ import { Autocomplete, FormControl, TextInputWithTokens } from '@primer/react';
10
+ import { Box } from '@datalayer/primer-addons';
11
+ /**
12
+ * Runtime Cell Variables Picker.
13
+ */
14
+ export function RuntimeCellVariables(props) {
15
+ const { getInputOptions, getOutputOptions, inputs, output, setInputs, setOutput, translator, } = props;
16
+ const trans = useMemo(() => (translator ?? nullTranslator).load('jupyterlab'), [translator]);
17
+ const inputForOutputRef = useRef(null);
18
+ const [willSaveOutput, setWillSaveOutput] = useState(false);
19
+ const [inputLoading, setInputLoading] = useState(!!getInputOptions);
20
+ const [outputsState, setOutputsState] = useState(null);
21
+ const [inputsState, setInputsState] = useState(inputs.map(id => ({ id, text: id, selected: true })));
22
+ const [filterVal, setFilterVal] = useState('');
23
+ // Add inputs prop in inputsState
24
+ useEffect(() => {
25
+ const candidates = inputs.filter(item => !inputsState.find(localItem => localItem.text === item));
26
+ if (candidates.length) {
27
+ setInputsState([
28
+ ...inputsState,
29
+ ...candidates.map(text => ({ id: text, text, selected: true })),
30
+ ]);
31
+ }
32
+ }, [inputs]);
33
+ // Update inputs with selected inputsState
34
+ useEffect(() => {
35
+ const candidates = inputsState
36
+ .filter(item => item.selected)
37
+ .map(item => item.text);
38
+ if (!JSONExt.deepEqual(inputs, candidates)) {
39
+ setInputs(candidates);
40
+ }
41
+ }, [inputsState]);
42
+ // Fetch the input candidates
43
+ useEffect(() => {
44
+ if (!inputLoading) {
45
+ return;
46
+ }
47
+ if (getInputOptions) {
48
+ getInputOptions().then(ins => {
49
+ const oldItems = inputsState.map(i => i.text);
50
+ setInputsState([
51
+ ...inputsState,
52
+ ...ins
53
+ .sort()
54
+ .filter(item => !oldItems.includes(item))
55
+ .map(text => ({
56
+ id: text,
57
+ text,
58
+ selected: false,
59
+ })),
60
+ ]);
61
+ setInputLoading(false);
62
+ });
63
+ }
64
+ else {
65
+ setInputLoading(false);
66
+ }
67
+ }, [inputsState, getInputOptions]);
68
+ // Fetch the output candidates
69
+ useEffect(() => {
70
+ if (getOutputOptions) {
71
+ Promise.all([getOutputOptions(), getInputOptions?.()])
72
+ .then(([outs, ins]) => {
73
+ setOutputsState(
74
+ // Add input variables as output candidate to cover
75
+ // mutation case
76
+ outs
77
+ .sort()
78
+ .concat((ins ?? []).sort())
79
+ // Remove duplicated variables; it may happen if
80
+ // the code introspection matches an input.
81
+ .reduce((agg, value) => {
82
+ if (!agg.includes(value)) {
83
+ agg.push(value);
84
+ }
85
+ return agg;
86
+ }, [])
87
+ .map(text => ({
88
+ id: text,
89
+ text,
90
+ selected: false,
91
+ })));
92
+ })
93
+ .catch(err => {
94
+ console.error('Failed to get the cell output candidates', err);
95
+ setOutputsState([]);
96
+ });
97
+ }
98
+ }, [getOutputOptions, getInputOptions]);
99
+ const onTokenRemove = useCallback((tokenId) => {
100
+ const idx = inputsState.findIndex(item => item.id === tokenId);
101
+ if (idx >= 0) {
102
+ inputsState.splice(idx, 1);
103
+ setInputsState([...inputsState]);
104
+ }
105
+ }, [inputsState]);
106
+ const onSelectedInputsChange = useCallback((newlySelectedItems) => {
107
+ if (!Array.isArray(newlySelectedItems)) {
108
+ newlySelectedItems = [newlySelectedItems];
109
+ }
110
+ const selectedIds = newlySelectedItems.map(i => i.id);
111
+ setInputsState([
112
+ ...inputsState.map(localItem => selectedIds.includes(localItem.id)
113
+ ? Object.assign(localItem, { selected: true })
114
+ : Object.assign(localItem, { selected: false })),
115
+ ]);
116
+ }, [inputsState]);
117
+ const onItemSelect = useCallback((item) => {
118
+ const oldItem = inputsState.find(localItem => localItem.id === item.id);
119
+ if (!oldItem) {
120
+ setInputsState([...inputsState, item]);
121
+ }
122
+ else {
123
+ oldItem.selected = true;
124
+ setInputsState([...inputsState]);
125
+ }
126
+ }, [inputsState]);
127
+ const handleChange = useCallback((e) => {
128
+ if (e.currentTarget) {
129
+ setFilterVal(e.currentTarget.value);
130
+ }
131
+ }, []);
132
+ const onOutputChange = useCallback((e) => {
133
+ if (e.currentTarget) {
134
+ setOutput(e.currentTarget.value);
135
+ }
136
+ }, []);
137
+ const handleOutputMenuOpenChange = useCallback(
138
+ // There is a bug in primer Autocomplete that lead to the suggestion
139
+ // not triggering the `onChange` callback. So to fix it here, we
140
+ // use a pointer to the underlying input element to get the value
141
+ // and set it when the autocompletion menu closes.
142
+ (open) => {
143
+ if (!willSaveOutput) {
144
+ if (open) {
145
+ setWillSaveOutput(true);
146
+ }
147
+ return;
148
+ }
149
+ if (inputForOutputRef.current && !open) {
150
+ setOutput(inputForOutputRef.current.value);
151
+ setWillSaveOutput(false);
152
+ }
153
+ }, [willSaveOutput]);
154
+ return (_jsxs(Box, { as: "form", sx: { p: 3 }, children: [_jsxs(FormControl, { children: [_jsx(FormControl.Label, { id: "cell-input-variables", children: trans.__('Inputs') }), _jsxs(Autocomplete, { children: [_jsx(Autocomplete.Input, { as: TextInputWithTokens, tokens: inputsState.filter(item => item.selected), onTokenRemove: onTokenRemove, onChange: handleChange }), _jsx(Autocomplete.Overlay, { children: _jsx(Autocomplete.Menu, { addNewItem: filterVal &&
155
+ !inputsState.find(localItem => localItem.text === filterVal)
156
+ ? {
157
+ id: filterVal,
158
+ text: trans.__("Add '%1'", filterVal),
159
+ handleAddItem: item => {
160
+ onItemSelect({
161
+ ...item,
162
+ text: filterVal,
163
+ selected: true,
164
+ });
165
+ setFilterVal('');
166
+ },
167
+ }
168
+ : undefined, items: inputsState, selectedItemIds: inputsState
169
+ .filter(item => item.selected)
170
+ .map(item => item.id), onSelectedChange: onSelectedInputsChange, "aria-labelledby": "cell-input-variables", selectionVariant: "multiple", emptyStateText: trans.__('No available variables.'), loading: inputLoading }) })] })] }), _jsxs(FormControl, { children: [_jsx(FormControl.Label, { id: "cell-output-variables", children: trans.__('Output') }), _jsxs(Autocomplete, { children: [_jsx(Autocomplete.Input, { ref: inputForOutputRef, value: output, onChange: onOutputChange }), _jsx(Autocomplete.Overlay, { children: _jsx(Autocomplete.Menu, { items: outputsState ?? [], selectedItemIds: output ? [output] : [], "aria-labelledby": "cell-output-variables", loading: getOutputOptions && !outputsState, emptyStateText: trans.__('Not among the available variables.'), onOpenChange: handleOutputMenuOpenChange }) })] })] })] }));
171
+ }
172
+ export default RuntimeCellVariables;
@@ -0,0 +1,37 @@
1
+ import { ISessionContext } from '@jupyterlab/apputils';
2
+ import { CodeCellModel } from '@jupyterlab/cells';
3
+ import { ITranslator } from '@jupyterlab/translation';
4
+ /**
5
+ * {@link RuntimeCellVariablesDialog} properties
6
+ */
7
+ export interface IRuntimeCellVariablesDialogProps {
8
+ /**
9
+ * Code cell model
10
+ */
11
+ model: CodeCellModel;
12
+ /**
13
+ * Callback request the dialog closure.
14
+ */
15
+ onClose: () => void;
16
+ /**
17
+ * Session preference
18
+ */
19
+ preference?: {
20
+ id?: string;
21
+ kernelDisplayName?: string;
22
+ language?: string;
23
+ };
24
+ /**
25
+ * Document session context
26
+ */
27
+ sessionContext?: ISessionContext;
28
+ /**
29
+ * Application translator
30
+ */
31
+ translator?: ITranslator;
32
+ }
33
+ /**
34
+ * Dialog to define the runtime cell variables to transfer
35
+ */
36
+ export declare function RuntimeCellVariablesDialog(props: IRuntimeCellVariablesDialogProps): JSX.Element;
37
+ export default RuntimeCellVariablesDialog;
@@ -0,0 +1,101 @@
1
+ import { jsx as _jsx } 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 { useCallback, useEffect, useMemo, useState } from 'react';
7
+ import { Dialog } from '@primer/react/experimental';
8
+ import { nullTranslator } from '@jupyterlab/translation';
9
+ import { JSONExt } from '@lumino/coreutils';
10
+ import { KernelExecutor } from '@datalayer/jupyter-react';
11
+ import { RuntimeSnippetsFacade } from '../../jupyter';
12
+ import { RuntimeCellVariables } from './RuntimeCellVariables';
13
+ /**
14
+ * Dialog to define the runtime cell variables to transfer
15
+ */
16
+ export function RuntimeCellVariablesDialog(props) {
17
+ const { onClose, model, preference, sessionContext, translator } = props;
18
+ const [inputs, setInputs] = useState([]);
19
+ const [output, setOutput] = useState();
20
+ const trans = useMemo(() => (translator ?? nullTranslator).load('jupyterlab'), [translator]);
21
+ useEffect(() => {
22
+ const updateState = (model) => {
23
+ const datalayerMeta = model.getMetadata('datalayer') ?? {};
24
+ if (datalayerMeta.in && !JSONExt.deepEqual(inputs, datalayerMeta.in)) {
25
+ setInputs(datalayerMeta.in);
26
+ }
27
+ if (datalayerMeta.out && datalayerMeta.out !== output) {
28
+ setOutput(datalayerMeta.out);
29
+ }
30
+ };
31
+ updateState(model);
32
+ model.metadataChanged.connect(updateState);
33
+ return () => {
34
+ model.metadataChanged.disconnect(updateState);
35
+ };
36
+ }, [model, inputs, output]);
37
+ const setVariables = useCallback(() => {
38
+ const datalayerMeta = model.getMetadata('datalayer') ?? {};
39
+ if (inputs.length) {
40
+ datalayerMeta.in = inputs;
41
+ }
42
+ else {
43
+ delete datalayerMeta.in;
44
+ }
45
+ if (output) {
46
+ datalayerMeta.out = output;
47
+ }
48
+ else {
49
+ delete datalayerMeta.out;
50
+ }
51
+ model.setMetadata('datalayer', { ...datalayerMeta });
52
+ onClose();
53
+ }, [model, inputs, output, onClose]);
54
+ const getInputCandidates = useCallback(async () => {
55
+ if (!sessionContext) {
56
+ return [];
57
+ }
58
+ const connection = sessionContext.session.kernel;
59
+ const spec = sessionContext.specsManager.specs.kernelspecs[connection.model.name];
60
+ const snippets = new RuntimeSnippetsFacade(spec.language);
61
+ const outputs = await new KernelExecutor({ connection }).execute(snippets.listVariables());
62
+ const content = outputs.get(0).data['text/plain'];
63
+ if (content) {
64
+ const runtimeVariables = JSON.parse(
65
+ // We need to remove the quotes prior to parsing
66
+ content.slice(1, content.length - 1));
67
+ return Object.keys(runtimeVariables ?? {});
68
+ }
69
+ return [];
70
+ }, [preference, sessionContext]);
71
+ const getOutputCandidates = useCallback(async () => {
72
+ // TODO this is only valid for python - using cell mimetype?
73
+ return new RuntimeSnippetsFacade('python').getOutputCandidates(model.sharedModel.source);
74
+ }, [model]);
75
+ const datalayerMeta = model.getMetadata('datalayer') ?? {};
76
+ let title = 'Define cell variables to transfer';
77
+ const kernel = datalayerMeta.kernel ?? {};
78
+ const kernelName = (kernel.displayName || kernel.name) ?? '';
79
+ if (kernelName) {
80
+ if (kernel.params?.notebook !== false && kernel.id) {
81
+ title += ` with running ${kernelName} (${kernel.id.slice(0, 7)})`;
82
+ }
83
+ else {
84
+ title += ` with ${kernelName}`;
85
+ }
86
+ }
87
+ return (_jsx(Dialog, { title: _jsx("span", { style: { color: 'var(--fgColor-default)' }, children: title }), onClose: onClose, footerButtons: [
88
+ {
89
+ buttonType: 'default',
90
+ content: trans.__('Cancel'),
91
+ onClick: onClose,
92
+ },
93
+ {
94
+ buttonType: 'primary',
95
+ content: trans.__('Set variables'),
96
+ onClick: setVariables,
97
+ autoFocus: true,
98
+ },
99
+ ], children: _jsx(RuntimeCellVariables, { inputs: inputs, getInputOptions: sessionContext ? getInputCandidates : undefined, setInputs: setInputs, output: output ?? undefined, getOutputOptions: getOutputCandidates, setOutput: setOutput, translator: translator }) }));
100
+ }
101
+ export default RuntimeCellVariablesDialog;