@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,57 @@
1
+ import type { IMarkdownParser, IRenderMime } from '@jupyterlab/rendermime';
2
+ import type { IRemoteServicesManager } from '../../runtimes';
3
+ import type { ICodeSandboxSnapshot, IRuntimeDesc } from '../../models';
4
+ /**
5
+ * {@link RuntimeLauncherDialog} properties.
6
+ */
7
+ export interface IRuntimeLauncherDialogProps {
8
+ /**
9
+ * Dialog title
10
+ */
11
+ dialogTitle?: string;
12
+ /**
13
+ * Remote Jupyter service manager
14
+ */
15
+ manager: IRemoteServicesManager;
16
+ /**
17
+ * Form submission callback
18
+ */
19
+ onSubmit: (spec?: IRuntimeDesc) => void;
20
+ /**
21
+ * Whether to start the kernel or not.
22
+ *
23
+ * If `with-example`, a kernel will be started an
24
+ * an example document will be opened (if available).
25
+ * If `defer`, a kernel will not be started but the
26
+ * kernel params will have a `creditsLimit` defined
27
+ * for spinning a runtime.
28
+ *
29
+ * Default: `true`
30
+ */
31
+ startRuntime?: boolean | 'with-example' | 'defer';
32
+ /**
33
+ * Markdown parser
34
+ */
35
+ markdownParser?: IMarkdownParser;
36
+ /**
37
+ * If provided the kernel will be started and will
38
+ * restore the provided snapshot in the kernel.
39
+ */
40
+ kernelSnapshot?: ICodeSandboxSnapshot;
41
+ /**
42
+ * HTML sanitizer
43
+ */
44
+ sanitizer?: IRenderMime.ISanitizer;
45
+ /**
46
+ * Upgrade subscription URL
47
+ */
48
+ upgradeSubscription?: string;
49
+ /**
50
+ * Optional submit button label override.
51
+ */
52
+ submitLabel?: string;
53
+ }
54
+ /**
55
+ * Start Runtime Launcher Dialog.
56
+ */
57
+ export declare function RuntimeLauncherDialog(props: IRuntimeLauncherDialogProps): JSX.Element;
@@ -0,0 +1,275 @@
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, useMemo, useState } from 'react';
7
+ import { useIsMounted } from 'usehooks-ts';
8
+ import { Button, FormControl, Select, Spinner, Text, TextInput, ToggleSwitch, Tooltip, IconButton, } from '@primer/react';
9
+ import { Dialog } from '@primer/react/experimental';
10
+ import { AlertIcon } from '@primer/octicons-react';
11
+ import { Box } from '@datalayer/primer-addons';
12
+ import { useJupyterReactStore } from '@datalayer/jupyter-react';
13
+ import { USAGE_ROUTE } from '@datalayer/core/lib/routes';
14
+ import { useNavigate } from '@datalayer/core/lib/hooks';
15
+ import { NO_RUNTIME_AVAILABLE_LABEL } from '@datalayer/core/lib/i18n';
16
+ import { iamStore, useCoreStore, useIAMStore } from '../../state/substates';
17
+ import { createNotebook, sleep } from '@datalayer/core/lib/utils';
18
+ import { Markdown } from '@datalayer/core/lib/components/display';
19
+ import { Timer } from '@datalayer/core/lib/components/progress';
20
+ import { FlashClosable } from '@datalayer/core/lib/components/flashes';
21
+ import { RuntimeReservationControl, MAXIMAL_RUNTIME_TIME_RESERVATION_MINUTES, } from './RuntimeReservationControl';
22
+ /**
23
+ * Initial time in milliseconds before retrying in case no kernels are available
24
+ */
25
+ const NOT_AVAILABLE_INIT_RETRY = 10_000;
26
+ /**
27
+ * Number of trials in case of unavailable code sandboxes
28
+ */
29
+ const NOT_AVAILABLE_RETRIES = 5;
30
+ /**
31
+ * Start Runtime Launcher Dialog.
32
+ */
33
+ export function RuntimeLauncherDialog(props) {
34
+ const { dialogTitle, kernelSnapshot, manager, onSubmit, markdownParser, sanitizer, upgradeSubscription, submitLabel, startRuntime = true, } = props;
35
+ const hasExample = startRuntime === 'with-example';
36
+ const shouldStartRuntime = startRuntime !== 'defer';
37
+ const user = iamStore.getState().user;
38
+ const environments = manager.environments.get();
39
+ const { configuration } = useCoreStore();
40
+ const { credits, refreshCredits } = useIAMStore();
41
+ let navigate;
42
+ try {
43
+ // eslint-disable-next-line react-hooks/rules-of-hooks
44
+ navigate = useNavigate();
45
+ }
46
+ catch (reason) {
47
+ // TODO when would this component be shown outside of a react-router? navigation is only available within a react-router.
48
+ console.warn(reason);
49
+ }
50
+ const jupyterReactStore = useJupyterReactStore();
51
+ const jupyterLabAdapter = jupyterReactStore.jupyterLabAdapter;
52
+ const [selection, setSelection] = useState((kernelSnapshot?.environment || environments[0]?.name) ?? '');
53
+ const [timeLimit, setTimeLimit] = useState(10);
54
+ const [runtimeName, setRuntimeName] = useState(environments[0]?.runtime?.givenNameTemplate || environments[0]?.title || '');
55
+ // Whether the runtim name has been changed by the user or not
56
+ const [hasCustomRuntimeName, setHasCustomRuntimeName] = useState(false);
57
+ const [userStorage, setUserStorage] = useState(false);
58
+ const [openExample, setOpenExample] = useState(false);
59
+ const [waitingForRuntime, setWaitingForRuntime] = useState(false);
60
+ const [error, setError] = useState();
61
+ const [flashLevel, setFlashLevel] = useState('danger');
62
+ const isMounted = useIsMounted();
63
+ useEffect(() => {
64
+ if (shouldStartRuntime) {
65
+ refreshCredits();
66
+ }
67
+ }, [shouldStartRuntime]);
68
+ const spec = useMemo(() => environments.find(spec => spec.name === selection), [environments, selection]);
69
+ const description = spec?.description ?? '';
70
+ const burningRate = spec?.burning_rate ?? 1;
71
+ const creditsToMinutes = 1.0 / burningRate / 60.0;
72
+ const includedRuns = user?.subscription?.usage?.included_runs ??
73
+ user?.subscription?.included_runs;
74
+ const currentRuns = user?.subscription?.usage?.current_runs ??
75
+ user?.subscription?.current_runs ??
76
+ user?.subscription?.used_runs;
77
+ const hasKnownRunAllowance = typeof includedRuns === 'number';
78
+ const hasRemainingRuns = hasKnownRunAllowance &&
79
+ typeof currentRuns === 'number' &&
80
+ includedRuns > 0 &&
81
+ currentRuns < includedRuns;
82
+ const hasKnownCredits = typeof credits?.available === 'number';
83
+ const maxFromCredits = hasKnownCredits
84
+ ? Math.floor((credits.available ?? 0) * creditsToMinutes)
85
+ : 10;
86
+ const effectiveMaxMinutes = hasKnownCredits && hasKnownRunAllowance && !hasRemainingRuns
87
+ ? Math.max(1, maxFromCredits)
88
+ : Math.max(10, maxFromCredits > 0 ? maxFromCredits : 0);
89
+ const outOfCredits = shouldStartRuntime &&
90
+ hasKnownCredits &&
91
+ hasKnownRunAllowance &&
92
+ !hasRemainingRuns &&
93
+ ((credits.available ?? 0) <= 0 || maxFromCredits < Number.EPSILON);
94
+ const handleSelectionChange = useCallback((e) => {
95
+ const selection = e.target.value;
96
+ setSelection(selection);
97
+ if (!hasCustomRuntimeName) {
98
+ const spec = environments.find(env => env.name === selection);
99
+ setRuntimeName(spec?.runtime?.givenNameTemplate || spec?.title || '');
100
+ }
101
+ }, [setSelection, hasCustomRuntimeName]);
102
+ const handleSubmitRuntime = useCallback(async () => {
103
+ if (selection) {
104
+ setError(undefined);
105
+ setWaitingForRuntime(shouldStartRuntime);
106
+ const spec = environments.find(s => s.name === selection);
107
+ const desc = {
108
+ name: selection,
109
+ language: spec?.language ?? '',
110
+ location: 'remote',
111
+ displayName: runtimeName ?? spec?.title,
112
+ };
113
+ const creditsLimit = Math.min(timeLimit, MAXIMAL_RUNTIME_TIME_RESERVATION_MINUTES) /
114
+ creditsToMinutes;
115
+ desc.params = {};
116
+ if (startRuntime === 'defer') {
117
+ desc.params['creditsLimit'] = creditsLimit;
118
+ }
119
+ if (userStorage) {
120
+ desc.params['capabilities'] = ['user_storage'];
121
+ }
122
+ let success = true;
123
+ if (shouldStartRuntime) {
124
+ success = false;
125
+ let availableTrial = 1;
126
+ let retryDelay = NOT_AVAILABLE_INIT_RETRY;
127
+ // Should return success status.
128
+ const startNewKernel = async () => {
129
+ try {
130
+ const connection = await manager.runtimesManager.startNew({
131
+ environmentName: selection,
132
+ type: 'notebook',
133
+ givenName: runtimeName,
134
+ creditsLimit: creditsLimit,
135
+ capabilities: userStorage ? ['user_storage'] : undefined,
136
+ snapshot: kernelSnapshot?.id,
137
+ }, {
138
+ username: user?.handle,
139
+ handleComms: true,
140
+ });
141
+ desc.kernelId = connection.id;
142
+ if (jupyterLabAdapter?.jupyterLab && hasExample && openExample) {
143
+ const example = environments.find(spec => spec.name === selection)?.example;
144
+ if (example) {
145
+ const options = {
146
+ kernelId: connection.id,
147
+ kernelName: connection.name,
148
+ };
149
+ createNotebook({
150
+ app: jupyterLabAdapter.jupyterLab,
151
+ name: selection,
152
+ url: example,
153
+ options,
154
+ });
155
+ }
156
+ }
157
+ // Close the connection as we are not using it.
158
+ connection.dispose();
159
+ }
160
+ catch (error) {
161
+ let msg = _jsx(Text, { children: "Failed to create the remote runtime\u2026" });
162
+ let level = 'danger';
163
+ let retry = false;
164
+ if (error.response?.status === 503) {
165
+ if (availableTrial++ <= NOT_AVAILABLE_RETRIES) {
166
+ retry = true;
167
+ msg = (_jsxs(Text, { children: ["The runtime you have requested is currently not available due to resource limitations. Leave this dialog open, new trial in ", _jsx(Timer, { duration: retryDelay * 0.001 }), ` (${availableTrial - 1}/${NOT_AVAILABLE_RETRIES}).`] }));
168
+ }
169
+ else {
170
+ msg = _jsx(Text, { children: NO_RUNTIME_AVAILABLE_LABEL });
171
+ }
172
+ level = 'warning';
173
+ }
174
+ else if (error.name === 'MaxRuntimesExceededError') {
175
+ msg = (_jsx(Text, { children: "You reached your remote runtime limits. Stop existing runtimes before starting new ones." }));
176
+ level = 'warning';
177
+ }
178
+ else if (error.name === 'RuntimeUnreachable') {
179
+ msg = (_jsx(Text, { children: "The runtime has been created but can not be accessed. Please contact your IT support team to report this issue." }));
180
+ }
181
+ setFlashLevel(level);
182
+ console.error(msg, error);
183
+ setError(msg);
184
+ if (retry) {
185
+ await sleep(retryDelay);
186
+ retryDelay *= 2;
187
+ if (isMounted()) {
188
+ return await startNewKernel();
189
+ }
190
+ }
191
+ return false;
192
+ }
193
+ finally {
194
+ setWaitingForRuntime(false);
195
+ }
196
+ return true;
197
+ };
198
+ // Start the kernel if the reservation succeeded.
199
+ success = await startNewKernel();
200
+ }
201
+ if (success && isMounted()) {
202
+ if (!shouldStartRuntime) {
203
+ setWaitingForRuntime(false);
204
+ }
205
+ onSubmit(desc);
206
+ }
207
+ }
208
+ }, [
209
+ manager,
210
+ selection,
211
+ startRuntime,
212
+ runtimeName,
213
+ onSubmit,
214
+ userStorage,
215
+ openExample,
216
+ jupyterLabAdapter,
217
+ timeLimit,
218
+ shouldStartRuntime,
219
+ isMounted,
220
+ ]);
221
+ const handleUserStorageChange = useCallback((e) => {
222
+ e.preventDefault();
223
+ setUserStorage(!userStorage);
224
+ }, [userStorage]);
225
+ const handleSwitchClick = useCallback((e) => {
226
+ e.preventDefault();
227
+ setOpenExample(!openExample);
228
+ }, [openExample]);
229
+ const handleUpgrade = useCallback(() => {
230
+ if (upgradeSubscription) {
231
+ navigate?.(upgradeSubscription);
232
+ }
233
+ }, [navigate, upgradeSubscription]);
234
+ const handleKernelNameChange = useCallback((e) => {
235
+ if (typeof e.target.value === 'string') {
236
+ setRuntimeName(e.target.value);
237
+ setHasCustomRuntimeName(true);
238
+ }
239
+ }, []);
240
+ // TODO title color is enforced for JupyterLab.
241
+ // This may be fixed in the jupyter-react theme (Primer generates h1 for the dialog title).
242
+ return (_jsx(Dialog, { title: _jsx("span", { style: { color: 'var(--fgColor-default)' }, children: dialogTitle || 'Launch a new Runtime' }), onClose: () => {
243
+ onSubmit(undefined);
244
+ }, footerButtons: [
245
+ {
246
+ buttonType: 'default',
247
+ onClick: () => {
248
+ onSubmit(undefined);
249
+ },
250
+ content: 'Cancel',
251
+ disabled: waitingForRuntime,
252
+ },
253
+ {
254
+ buttonType: 'primary',
255
+ onClick: handleSubmitRuntime,
256
+ content: waitingForRuntime ? (_jsx(Spinner, { size: "small" })) : ((submitLabel ?? ((startRuntime ?? true) ? 'Launch' : 'Assign'))),
257
+ disabled: waitingForRuntime || !selection || outOfCredits,
258
+ autoFocus: true,
259
+ },
260
+ ], children: _jsxs(Box, { as: "form", onKeyDown: event => {
261
+ if (event.defaultPrevented) {
262
+ return;
263
+ }
264
+ if (event.key === 'Enter') {
265
+ event.preventDefault();
266
+ handleSubmitRuntime();
267
+ }
268
+ }, children: [_jsxs(FormControl, { disabled: !!kernelSnapshot?.environment || environments.length === 0, children: [_jsx(FormControl.Label, { children: "Environment" }), _jsx(Select, { name: "environment", disabled: !!kernelSnapshot?.environment || environments.length === 0, value: selection, onChange: handleSelectionChange, block: true, children: environments.map(spec => (_jsxs(Select.Option, { value: spec.name, children: [spec.name, spec.title && (_jsxs(_Fragment, { children: [' - ', spec.title] }))] }, spec.name))) }), _jsx(FormControl.Caption, { children: _jsx(_Fragment, { children: markdownParser ? (_jsx(Box, { sx: { img: { maxWidth: '100%' } }, children: _jsx(Markdown, { text: description, markdownParser: markdownParser, sanitizer: sanitizer }) })) : (description) }) })] }), startRuntime && (_jsx(RuntimeReservationControl, { addCredits: navigate
269
+ ? () => {
270
+ navigate(USAGE_ROUTE);
271
+ }
272
+ : undefined, disabled: outOfCredits, label: 'Time reservation', max: effectiveMaxMinutes, time: timeLimit, burningRate: burningRate, onTimeChange: setTimeLimit, error: outOfCredits ? 'You must add credits to your account.' : undefined })), !configuration.whiteLabel && (_jsxs(FormControl, { layout: "horizontal", children: [_jsxs(FormControl.Label, { id: "user-storage-label", children: ["User storage", _jsx(Tooltip, { text: 'The runtime will be slower to start.', direction: "e", style: { marginLeft: 3 }, children: _jsx(IconButton, { icon: AlertIcon, "aria-label": "", variant: "invisible" }) })] }), _jsx(ToggleSwitch, { checked: userStorage, size: "small", onClick: handleUserStorageChange, "aria-labelledby": "user-storage-label" })] })), _jsxs(FormControl, { sx: { paddingTop: '10px' }, children: [_jsx(FormControl.Label, { children: "Runtime name" }), _jsx(TextInput, { name: "name", value: runtimeName, onChange: handleKernelNameChange, block: true })] }), hasExample &&
273
+ jupyterLabAdapter?.jupyterLab &&
274
+ !configuration.whiteLabel && (_jsxs(FormControl, { sx: { paddingTop: '10px' }, children: [_jsx(FormControl.Label, { id: "open-example-label", children: "Open example notebook" }), _jsx(ToggleSwitch, { disabled: !environments.find(spec => spec.name === selection)?.example, checked: openExample, size: "small", onClick: handleSwitchClick, "aria-labelledby": "open-example-label" })] })), error && (_jsx(FlashClosable, { variant: flashLevel, actions: navigate && upgradeSubscription && flashLevel === 'warning' ? (_jsx(Button, { onClick: handleUpgrade, title: 'Upgrade your subscription.', children: "Upgrade" })) : undefined, children: error }))] }) }));
275
+ }
@@ -0,0 +1,69 @@
1
+ import { ReactElement, ReactNode } from 'react';
2
+ import { ISessionContext } from '@jupyterlab/apputils';
3
+ import { ITranslator } from '@jupyterlab/translation';
4
+ import { IRuntimeDesc } from '../../models';
5
+ import { IMultiServiceManager } from '../../runtimes';
6
+ type IDisplayMode = 'menu' | 'radio';
7
+ /**
8
+ * {@link RuntimePickerBase} properties
9
+ */
10
+ export interface IRuntimePickerBaseProps {
11
+ /**
12
+ * The display mode.
13
+ */
14
+ display: IDisplayMode;
15
+ /**
16
+ * Additional actions items to be placed at the top of the picker
17
+ */
18
+ preActions?: ReactNode;
19
+ /**
20
+ * Additional actions items to be placed at the bottom of the picker
21
+ */
22
+ postActions?: ReactNode;
23
+ /**
24
+ * Whether the picker is disabled or not.
25
+ */
26
+ disabled?: boolean;
27
+ /**
28
+ * Runtime description passing this filter function will be displayed.
29
+ */
30
+ filterRuntime?: (desc: IRuntimeDesc) => boolean;
31
+ /**
32
+ * Session preference.
33
+ */
34
+ preference?: {
35
+ id?: string;
36
+ kernelDisplayName?: string;
37
+ language?: string;
38
+ location?: string;
39
+ };
40
+ /**
41
+ * Runtime description.
42
+ */
43
+ runtimeDesc?: IRuntimeDesc;
44
+ /**
45
+ * Set runtime description.
46
+ */
47
+ setRuntimeDesc: (desc?: IRuntimeDesc) => void;
48
+ /**
49
+ * Document session context.
50
+ */
51
+ sessionContext?: ISessionContext;
52
+ /**
53
+ * Application service manager
54
+ */
55
+ multiServiceManager: IMultiServiceManager;
56
+ /**
57
+ * Application translator.
58
+ */
59
+ translator?: ITranslator;
60
+ /**
61
+ * Change the look depending on the menu integration.
62
+ */
63
+ variant?: 'document' | 'cell';
64
+ }
65
+ /**
66
+ * Base Kernel Picker component.
67
+ */
68
+ export declare function RuntimePickerBase(props: IRuntimePickerBaseProps): ReactElement;
69
+ export default RuntimePickerBase;
@@ -0,0 +1,122 @@
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 { useEffect, useMemo, useState } from 'react';
7
+ import { nullTranslator } from '@jupyterlab/translation';
8
+ //import { kernelIcon } from '@jupyterlab/ui-components';
9
+ import { ActionList, ActionMenu, IconButton, Text, RadioGroup, Radio, FormControl, LabelGroup, Label, } from '@primer/react';
10
+ import CloudUploadIcon from '@datalayer/icons-react/data1/CloudUploadIcon';
11
+ import { Box } from '@datalayer/primer-addons';
12
+ import { CpuIcon } from '@primer/octicons-react';
13
+ import { BrowserIcon, LaptopSimpleIcon } from '@datalayer/icons-react';
14
+ import { CreditsIndicator } from '../../components/progress';
15
+ import { isRuntimeRemote } from '../../runtimes';
16
+ import { getGroupedRuntimeDescs } from './RuntimeUtils';
17
+ /**
18
+ * Maximal runtime display name length after which it is trimmed.
19
+ */
20
+ const RUNTIME_DISPLAY_NAME_MAX_LENGTH = 25;
21
+ /**
22
+ * Base Kernel Picker component.
23
+ */
24
+ export function RuntimePickerBase(props) {
25
+ const { disabled, display, filterRuntime, multiServiceManager, postActions, preActions, preference, runtimeDesc, sessionContext, setRuntimeDesc, translator, variant, } = props;
26
+ const [groupedRuntimeDescs, _] = useState(getGroupedRuntimeDescs(multiServiceManager, preference?.id, translator, filterRuntime, variant));
27
+ const trans = useMemo(() => (translator ?? nullTranslator).load('jupyterlab'), [translator]);
28
+ const [defaultSet, setDefaultSet] = useState(false);
29
+ // Trick because overflow is an unknown prop of ActionMenu.Overlay.
30
+ const overlayProps = {
31
+ maxHeight: 'large',
32
+ width: (variant === 'cell' ? 'small' : 'auto'),
33
+ };
34
+ /*
35
+ // TODO this effect generates refresh of the react components which discards any change in the selection.
36
+ useEffect(() => {
37
+ const updateGroupedRuntimeDescs = () => {
38
+ setGroupedKernelDescs(getGroupedRuntimeDescs(multiServiceManager, preference?.id, translator, filterKernel, variant));
39
+ };
40
+ multiServiceManager.browser?.kernels.runningChanged.connect(updateGroupedRuntimeDescs);
41
+ multiServiceManager.browser?.kernelspecs.specsChanged.connect(updateGroupedRuntimeDescs);
42
+ multiServiceManager.browser?.sessions.runningChanged.connect(updateGroupedRuntimeDescs);
43
+ multiServiceManager.local.kernels.runningChanged.connect(updateGroupedRuntimeDescs);
44
+ multiServiceManager.local.kernelspecs.specsChanged.connect(updateGroupedRuntimeDescs);
45
+ multiServiceManager.local.sessions.runningChanged.connect(updateGroupedRuntimeDescs);
46
+ multiServiceManager.remote?.kernels.changed.connect(updateGroupedRuntimeDescs);
47
+ multiServiceManager.remote?.environments.changed.connect(updateGroupedRuntimeDescs);
48
+ // multiServiceManager.remote?.sessions.runningChanged.connect(updateOptions);
49
+ return () => {
50
+ multiServiceManager.browser?.kernels.runningChanged.disconnect(updateGroupedRuntimeDescs);
51
+ multiServiceManager.browser?.kernelspecs.specsChanged.disconnect(updateGroupedRuntimeDescs);
52
+ multiServiceManager.browser?.sessions.runningChanged.disconnect(updateGroupedRuntimeDescs);
53
+ multiServiceManager.local.kernels.runningChanged.disconnect(updateGroupedRuntimeDescs);
54
+ multiServiceManager.local.kernelspecs.specsChanged.disconnect(updateGroupedRuntimeDescs);
55
+ multiServiceManager.local.sessions.runningChanged.disconnect(updateGroupedRuntimeDescs);
56
+ multiServiceManager.remote?.kernels.changed.disconnect(updateGroupedRuntimeDescs);
57
+ multiServiceManager.remote?.environments.changed.disconnect(updateGroupedRuntimeDescs);
58
+ // multiServiceManager.remote?.sessions.runningChanged.disconnect(updateOptions);
59
+ };
60
+ }, [multiServiceManager, preference, translator, filterKernel, variant]);
61
+ */
62
+ useEffect(() => {
63
+ if (sessionContext && groupedRuntimeDescs) {
64
+ const kernelId = sessionContext.session?.kernel?.id;
65
+ if (kernelId) {
66
+ Object.entries(groupedRuntimeDescs).forEach(([group, runtimeDescs]) => {
67
+ runtimeDescs.forEach(runtimeDesc => {
68
+ if (runtimeDesc.kernelId === kernelId) {
69
+ setRuntimeDesc(runtimeDesc);
70
+ }
71
+ });
72
+ });
73
+ }
74
+ }
75
+ setDefaultSet(true);
76
+ }, [groupedRuntimeDescs]);
77
+ // For cell using submenu instead of group would be nice unfortunately the feature
78
+ // is not yet implemented in the component there has been a not-great demo story.
79
+ // https://github.com/primer/react/pull/3585
80
+ return (_jsx(_Fragment, { children: display === 'menu' ? (
81
+ /*
82
+ * Section for Menu display.
83
+ */
84
+ _jsxs(ActionMenu, { children: [variant === 'cell' ? (_jsx(ActionMenu.Anchor, { children: _jsx(IconButton, { disabled: disabled || groupedRuntimeDescs === null,
85
+ // icon={() => <kernelIcon.react className="dla-Cell-runtime-icon" tag={'span'} />}
86
+ icon: () => (_jsx("span", { className: "dla-Cell-runtime-icon", children: _jsx(CpuIcon, {}) })), "aria-label": trans.__('Assign a Runtime to the Cell.'), title: trans.__('Assign a Runtime to the Cell.'), size: "small", variant: "invisible" }) })) : (_jsxs(ActionMenu.Button, { variant: "default", disabled: disabled || groupedRuntimeDescs === null, children: [_jsx(Text, { fontWeight: 'bold', children: trans.__('Runtime:') }), ' ' + (runtimeDesc?.displayName ?? trans.__('No Runtime'))] })), _jsx(ActionMenu.Overlay, { ...overlayProps, width: "medium", sx: { overflowY: 'auto' }, side: variant === 'cell' ? 'outside-left' : 'outside-right', children: _jsxs(ActionList, { selectionVariant: "single", children: [variant === 'cell' && (_jsxs(ActionList.Item, { selected: runtimeDesc === undefined, onSelect: () => {
87
+ setRuntimeDesc(undefined);
88
+ }, children: [preference?.location && (_jsx(ActionList.LeadingVisual, { children: preference.location === 'local' ? (_jsx(LaptopSimpleIcon, {})) : preference.location === 'browser' ? (_jsx(BrowserIcon, {})) : (_jsx(CloudUploadIcon, {})) })), trans.__('Assign the Notebook Runtime')] }, 'null')), !!preActions && preActions, Object.entries(groupedRuntimeDescs ?? {}).map(([group, runtimeDescs]) => (_jsxs(ActionList.Group, { children: [_jsx(ActionList.GroupHeading, { children: group }), runtimeDescs.map(candidateRuntimeDesc => {
89
+ const annotation = candidateRuntimeDesc.podName
90
+ ? ` - ${candidateRuntimeDesc.podName.split('-', 2).reverse()[0]}`
91
+ : candidateRuntimeDesc.kernelId
92
+ ? ` - ${candidateRuntimeDesc.kernelId}`
93
+ : '';
94
+ const fullDisplayName = (candidateRuntimeDesc.displayName ?? '') + annotation;
95
+ const displayName = (candidateRuntimeDesc.displayName?.length ?? 0) >
96
+ RUNTIME_DISPLAY_NAME_MAX_LENGTH
97
+ ? candidateRuntimeDesc.displayName.slice(0, RUNTIME_DISPLAY_NAME_MAX_LENGTH) + '…'
98
+ : (candidateRuntimeDesc.displayName ?? '');
99
+ return (_jsxs(ActionList.Item, { title: fullDisplayName, selected: (candidateRuntimeDesc.location ===
100
+ runtimeDesc?.location ||
101
+ (isRuntimeRemote(candidateRuntimeDesc.location) &&
102
+ isRuntimeRemote(runtimeDesc?.location ?? 'local'))) &&
103
+ (candidateRuntimeDesc.kernelId ??
104
+ candidateRuntimeDesc.name) ===
105
+ (runtimeDesc?.kernelId ?? runtimeDesc?.name), onSelect: () => {
106
+ setRuntimeDesc(candidateRuntimeDesc);
107
+ }, children: [_jsx(ActionList.LeadingVisual, { children: candidateRuntimeDesc.location === 'local' ? (_jsx(LaptopSimpleIcon, {})) : candidateRuntimeDesc.location === 'browser' ? (_jsx(BrowserIcon, {})) : (_jsx(CloudUploadIcon, {})) }), displayName + annotation.slice(0, 10)] }, candidateRuntimeDesc.name));
108
+ })] }, group))), !!postActions && (_jsxs(_Fragment, { children: [_jsx(ActionList.Divider, {}), postActions] }))] }) })] })) : (
109
+ /*
110
+ * Section for Radio display.
111
+ */
112
+ _jsxs(_Fragment, { children: [defaultSet && (_jsx(RadioGroup, { name: "kernel-options", "aria-labelledby": "kernel-options", children: Object.entries(groupedRuntimeDescs ?? {}).map(([group, runtimeDescs]) => (_jsxs(Box, { children: [_jsx(Box, { as: "h4", style: { marginTop: 0 }, children: group }), runtimeDescs.map(k => {
113
+ return (_jsxs(Box, { title: k.name, children: [_jsxs(FormControl, { children: [_jsx(Radio, { value: k.kernelId, onChange: () => {
114
+ setRuntimeDesc(k);
115
+ }, checked: (k.location === runtimeDesc?.location ||
116
+ (isRuntimeRemote(k.location) &&
117
+ isRuntimeRemote(runtimeDesc?.location ?? 'local'))) &&
118
+ (k.kernelId ?? k.name) ===
119
+ (runtimeDesc?.kernelId ?? runtimeDesc?.name) }), _jsx(FormControl.Label, { children: _jsxs(Box, { display: "flex", children: [_jsx(Box, { children: k.displayName }), k.kernelId && k.location === 'remote' && (_jsx(Box, { ml: 3, mt: 1, children: _jsx(CreditsIndicator, { kernelId: k.kernelId, serviceManager: multiServiceManager.remote }, "credits-indicator") }))] }) }), _jsx(FormControl.Caption, { children: _jsxs(LabelGroup, { sx: { marginTop: 1 }, children: [_jsx(Label, { variant: "secondary", children: k.name }), _jsx(Label, { variant: "secondary", sx: { marginLeft: 1 }, children: k.location }), k.burningRate && (_jsxs(Label, { variant: "sponsors", sx: { marginLeft: 1 }, children: [k.burningRate, " credits/second"] })), k.gpu && (_jsx(Label, { variant: "success", sx: { marginLeft: 1 }, children: "GPU" }))] }) })] }), _jsx(ActionList.Divider, {})] }, k.kernelId));
120
+ })] }, group))) })), !!postActions && _jsx(_Fragment, { children: postActions })] })) }));
121
+ }
122
+ export default RuntimePickerBase;
@@ -0,0 +1,34 @@
1
+ import { ISessionContext } from '@jupyterlab/apputils';
2
+ import { CodeCellModel } from '@jupyterlab/cells';
3
+ import type { IMarkdownParser, IRenderMime } from '@jupyterlab/rendermime';
4
+ import { IRuntimePickerBaseProps } from './RuntimePickerBase';
5
+ /**
6
+ * {@link RuntimePickerCell} properties
7
+ */
8
+ export type IRuntimePickerCellProps = Pick<IRuntimePickerBaseProps, 'multiServiceManager' | 'preference' | 'translator'> & {
9
+ /**
10
+ * Callback to allow the user to login
11
+ */
12
+ logIn?: () => void;
13
+ /**
14
+ * Code cell model
15
+ */
16
+ model: CodeCellModel;
17
+ /**
18
+ * Document session context
19
+ */
20
+ sessionContext?: ISessionContext;
21
+ /**
22
+ * Markdown parser
23
+ */
24
+ markdownParser?: IMarkdownParser;
25
+ /**
26
+ * HTML sanitizer; if not provided the produced HTML will not be sanitized.
27
+ */
28
+ sanitizer?: IRenderMime.ISanitizer;
29
+ };
30
+ /**
31
+ * Runtime picker component for a cell.
32
+ */
33
+ export declare function RuntimePickerCell(props: IRuntimePickerCellProps): JSX.Element;
34
+ export default RuntimePickerCell;