@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,28 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * Fetch the session ID of a collaborative document from Datalayer.
7
+ */
8
+ export async function requestDatalayerCollaborationSessionId({ url, token, fetchFn = fetch, }) {
9
+ const headers = {
10
+ Accept: 'application/json',
11
+ };
12
+ if (token) {
13
+ headers['Authorization'] = `Bearer ${token}`;
14
+ }
15
+ const response = await fetchFn(url, {
16
+ method: 'GET',
17
+ headers,
18
+ credentials: token ? 'include' : 'omit',
19
+ mode: 'cors',
20
+ cache: 'no-store',
21
+ });
22
+ if (response.ok) {
23
+ const content = await response.json();
24
+ return content['sessionId'];
25
+ }
26
+ console.error('Failed to fetch session ID.', response);
27
+ throw new Error('Failed to fetch session ID.');
28
+ }
@@ -0,0 +1,58 @@
1
+ import type { ICollaborationProvider, ICollaborationProviderEvents } from '@datalayer/jupyter-react';
2
+ import { WebsocketProvider } from 'y-websocket';
3
+ export declare enum CollaborationStatus {
4
+ Disconnected = "disconnected",
5
+ Connecting = "connecting",
6
+ Connected = "connected",
7
+ Error = "error"
8
+ }
9
+ type SharedModel = Parameters<ICollaborationProvider['connect']>[0];
10
+ type ConnectOptions = Parameters<ICollaborationProvider['connect']>[2];
11
+ /**
12
+ * Configuration for Datalayer collaboration provider.
13
+ */
14
+ export interface IDatalayerCollaborationConfig {
15
+ /**
16
+ * Base URL for the Datalayer server (optional, uses config from store if not provided).
17
+ */
18
+ datalayerUrl?: string;
19
+ /**
20
+ * Authentication token (optional, uses config from store if not provided).
21
+ */
22
+ token?: string;
23
+ /**
24
+ * Custom fetch function to use for HTTP requests.
25
+ * Useful for proxying requests in environments with CORS restrictions (e.g., VS Code webviews).
26
+ */
27
+ fetchFn?: typeof fetch;
28
+ }
29
+ /**
30
+ * Datalayer collaboration provider.
31
+ */
32
+ export declare class DatalayerCollaborationProvider implements ICollaborationProvider {
33
+ readonly type = "datalayer";
34
+ private _status;
35
+ private _provider;
36
+ private _sharedModel;
37
+ private _statusChanged;
38
+ private _errorOccurred;
39
+ private _syncStateChanged;
40
+ private _isDisposed;
41
+ private _config;
42
+ private _onSync;
43
+ private _onConnectionClose;
44
+ constructor(config: IDatalayerCollaborationConfig);
45
+ get status(): CollaborationStatus;
46
+ get isConnected(): boolean;
47
+ get isDisposed(): boolean;
48
+ get events(): ICollaborationProviderEvents;
49
+ private setStatus;
50
+ connect(sharedModel: SharedModel, documentId: string, options?: ConnectOptions): Promise<void>;
51
+ disconnect(): void;
52
+ getProvider(): WebsocketProvider | null;
53
+ getSharedModel(): SharedModel | null;
54
+ handleConnectionClose(event: CloseEvent): void;
55
+ handleSync(isSynced: boolean): void;
56
+ dispose(): void;
57
+ }
58
+ export default DatalayerCollaborationProvider;
@@ -0,0 +1,148 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import { URLExt } from '@jupyterlab/coreutils';
6
+ import { Signal } from '@lumino/signaling';
7
+ import { WebsocketProvider } from 'y-websocket';
8
+ import { requestDatalayerCollaborationSessionId } from './DatalayerCollaboration';
9
+ export var CollaborationStatus;
10
+ (function (CollaborationStatus) {
11
+ CollaborationStatus["Disconnected"] = "disconnected";
12
+ CollaborationStatus["Connecting"] = "connecting";
13
+ CollaborationStatus["Connected"] = "connected";
14
+ CollaborationStatus["Error"] = "error";
15
+ })(CollaborationStatus || (CollaborationStatus = {}));
16
+ /**
17
+ * Datalayer collaboration provider.
18
+ */
19
+ export class DatalayerCollaborationProvider {
20
+ type = 'datalayer';
21
+ _status = CollaborationStatus.Disconnected;
22
+ _provider = null;
23
+ _sharedModel = null;
24
+ _statusChanged = new Signal(this);
25
+ _errorOccurred = new Signal(this);
26
+ _syncStateChanged = new Signal(this);
27
+ _isDisposed = false;
28
+ _config;
29
+ _onSync = null;
30
+ _onConnectionClose = null;
31
+ constructor(config) {
32
+ this._config = config;
33
+ }
34
+ get status() {
35
+ return this._status;
36
+ }
37
+ get isConnected() {
38
+ return this._status === CollaborationStatus.Connected;
39
+ }
40
+ get isDisposed() {
41
+ return this._isDisposed;
42
+ }
43
+ get events() {
44
+ return {
45
+ statusChanged: this._statusChanged,
46
+ errorOccurred: this._errorOccurred,
47
+ syncStateChanged: this._syncStateChanged,
48
+ };
49
+ }
50
+ setStatus(status) {
51
+ if (this._status !== status) {
52
+ this._status = status;
53
+ this._statusChanged.emit(status);
54
+ }
55
+ }
56
+ async connect(sharedModel, documentId, options) {
57
+ if (this.isConnected) {
58
+ console.warn('Already connected to Datalayer collaboration service');
59
+ return;
60
+ }
61
+ this.setStatus(CollaborationStatus.Connecting);
62
+ try {
63
+ const datalayerUrl = this._config.datalayerUrl;
64
+ const token = this._config.token;
65
+ if (!datalayerUrl) {
66
+ throw new Error('Datalayer datalayerUrl is not configured - must be explicitly provided in DatalayerCollaborationProvider config');
67
+ }
68
+ if (!token) {
69
+ throw new Error('Datalayer token is not configured - must be explicitly provided in DatalayerCollaborationProvider config');
70
+ }
71
+ const { ydoc, awareness } = sharedModel;
72
+ const documentURL = URLExt.join(datalayerUrl, '/api/spacer/v1/documents');
73
+ const wsUrl = URLExt.join(datalayerUrl, '/api/spacer/v1/documents/ws').replace(/^http/, 'ws');
74
+ const sessionId = await requestDatalayerCollaborationSessionId({
75
+ url: URLExt.join(documentURL, documentId),
76
+ token,
77
+ fetchFn: this._config.fetchFn,
78
+ });
79
+ this._provider = new WebsocketProvider(wsUrl, documentId, ydoc, {
80
+ disableBc: true,
81
+ params: {
82
+ sessionId,
83
+ token,
84
+ },
85
+ awareness,
86
+ ...options,
87
+ });
88
+ this._sharedModel = sharedModel;
89
+ this._onSync = (isSynced) => {
90
+ this.handleSync(isSynced);
91
+ };
92
+ this._onConnectionClose = (event) => {
93
+ if (event) {
94
+ this.handleConnectionClose(event);
95
+ }
96
+ };
97
+ this._provider.on('sync', this._onSync);
98
+ this._provider.on('connection-close', this._onConnectionClose);
99
+ console.log('Connected to Datalayer collaboration service');
100
+ }
101
+ catch (error) {
102
+ this.setStatus(CollaborationStatus.Error);
103
+ this._errorOccurred.emit(error);
104
+ throw error;
105
+ }
106
+ }
107
+ disconnect() {
108
+ if (this._provider) {
109
+ if (this._onSync) {
110
+ this._provider.off('sync', this._onSync);
111
+ }
112
+ if (this._onConnectionClose) {
113
+ this._provider.off('connection-close', this._onConnectionClose);
114
+ }
115
+ this._provider.disconnect();
116
+ this._provider = null;
117
+ }
118
+ this._sharedModel = null;
119
+ this.setStatus(CollaborationStatus.Disconnected);
120
+ }
121
+ getProvider() {
122
+ return this._provider;
123
+ }
124
+ getSharedModel() {
125
+ return this._sharedModel;
126
+ }
127
+ handleConnectionClose(event) {
128
+ console.warn('Collaboration connection closed:', event);
129
+ this.setStatus(CollaborationStatus.Disconnected);
130
+ if (event.code === 4002) {
131
+ console.warn('Datalayer collaboration session expired');
132
+ }
133
+ }
134
+ handleSync(isSynced) {
135
+ this._syncStateChanged.emit(isSynced);
136
+ if (isSynced) {
137
+ this.setStatus(CollaborationStatus.Connected);
138
+ }
139
+ }
140
+ dispose() {
141
+ if (this._isDisposed) {
142
+ return;
143
+ }
144
+ this.disconnect();
145
+ this._isDisposed = true;
146
+ }
147
+ }
148
+ export default DatalayerCollaborationProvider;
@@ -0,0 +1,2 @@
1
+ export * from './DatalayerCollaboration';
2
+ export * from './DatalayerCollaborationProvider';
@@ -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 './DatalayerCollaboration';
6
+ export * from './DatalayerCollaborationProvider';
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ export interface AgentSummaryData {
3
+ agentName: string;
4
+ location: string;
5
+ specId?: string;
6
+ status?: string;
7
+ baseUrl?: string;
8
+ agentId?: string;
9
+ isReady?: boolean;
10
+ error?: string;
11
+ }
12
+ export interface AgentSummaryProps {
13
+ summary: AgentSummaryData | null;
14
+ title?: string;
15
+ }
16
+ /**
17
+ * Compact agent summary badge with a hover overlay for details.
18
+ */
19
+ export declare const AgentSummary: React.FC<AgentSummaryProps>;
@@ -0,0 +1,89 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright (c) 2025-2026 Datalayer, Inc.
4
+ * Distributed under the terms of the Modified BSD License.
5
+ */
6
+ import { useState } from 'react';
7
+ import { Spinner } from '@primer/react';
8
+ import { Box } from '@datalayer/primer-addons';
9
+ /**
10
+ * Statuses that represent an agent actively being created/started. The spinner
11
+ * only shows for these; app-navigation states ("selected", "switching") and
12
+ * settled states ("ready", "running", ...) never spin.
13
+ */
14
+ const CREATING_STATUSES = new Set([
15
+ 'creating',
16
+ 'starting',
17
+ 'launching',
18
+ 'connecting',
19
+ 'pending',
20
+ 'resuming',
21
+ ]);
22
+ /**
23
+ * Compact agent summary badge with a hover overlay for details.
24
+ */
25
+ export const AgentSummary = ({ summary, title = 'Active Agent', }) => {
26
+ const [isHovering, setIsHovering] = useState(false);
27
+ const runtimeStatusUrl = summary?.baseUrl
28
+ ? (() => {
29
+ const normalized = summary.baseUrl.replace(/\/$/, '');
30
+ if (normalized.endsWith('/api/v1')) {
31
+ return `${normalized}/runtime/status`;
32
+ }
33
+ return `${normalized}/api/v1/runtime/status`;
34
+ })()
35
+ : undefined;
36
+ if (!summary) {
37
+ return null;
38
+ }
39
+ const normalizedStatus = (summary.status || '').toLowerCase();
40
+ // Only show the spinner while the agent is genuinely being created: it is not
41
+ // ready, has no id yet, and its status is an active creation/startup state.
42
+ const isCreating = !summary.isReady &&
43
+ !summary.agentId &&
44
+ CREATING_STATUSES.has(normalizedStatus);
45
+ const hasError = Boolean(summary.error);
46
+ return (_jsxs(Box, { sx: { position: 'relative' }, onMouseEnter: () => setIsHovering(true), onMouseLeave: () => setIsHovering(false), children: [_jsxs(Box, { as: "button", type: "button", sx: {
47
+ px: 2,
48
+ py: '6px',
49
+ border: '1px solid',
50
+ borderColor: hasError ? 'danger.emphasis' : 'border.default',
51
+ borderRadius: 2,
52
+ bg: hasError ? 'danger.subtle' : 'canvas.default',
53
+ color: hasError ? 'danger.fg' : 'fg.default',
54
+ fontSize: 0,
55
+ cursor: 'default',
56
+ display: 'flex',
57
+ alignItems: 'center',
58
+ gap: 1,
59
+ }, children: [isCreating && _jsx(Spinner, { size: "small", sx: { width: 12, height: 12 } }), hasError && _jsx("span", { "aria-hidden": true, children: "\u26A0" }), summary.agentName, " \u00B7 ", summary.location] }), isHovering && (_jsxs(Box, { sx: {
60
+ position: 'absolute',
61
+ top: 'calc(100% + 8px)',
62
+ right: 0,
63
+ width: 360,
64
+ p: 2,
65
+ border: '1px solid',
66
+ borderColor: 'border.default',
67
+ borderRadius: 2,
68
+ bg: 'canvas.overlay',
69
+ boxShadow: 'shadow.large',
70
+ zIndex: 120,
71
+ fontSize: 0,
72
+ color: 'fg.default',
73
+ }, children: [_jsx(Box, { sx: { mb: 1, fontWeight: 600 }, children: title }), _jsxs(Box, { sx: { color: 'fg.muted' }, children: ["Name: ", summary.agentName] }), _jsxs(Box, { sx: { color: 'fg.muted' }, children: ["Location: ", summary.location] }), _jsxs(Box, { sx: { color: 'fg.muted' }, children: ["Spec: ", summary.specId || '—'] }), _jsxs(Box, { sx: { color: 'fg.muted' }, children: ["Status: ", isCreating ? 'creating' : summary.status || '—'] }), _jsxs(Box, { sx: { color: 'fg.muted', wordBreak: 'break-all' }, children: ["Base URL: ", summary.baseUrl || '—'] }), _jsxs(Box, { sx: {
74
+ color: 'fg.muted',
75
+ wordBreak: 'break-all',
76
+ display: 'flex',
77
+ alignItems: 'center',
78
+ gap: 1,
79
+ }, children: ["Agent ID:", ' ', summary.agentId ? (summary.agentId) : isCreating ? (_jsxs(_Fragment, { children: [_jsx(Spinner, { size: "small", sx: { width: 12, height: 12 } }), "Creating\u2026"] })) : ('—')] }), _jsxs(Box, { sx: { color: 'fg.muted', wordBreak: 'break-all' }, children: ["Runtime status:", ' ', runtimeStatusUrl ? (_jsx(Box, { as: "a", href: runtimeStatusUrl, target: "_blank", rel: "noopener noreferrer", sx: { color: 'accent.fg', textDecoration: 'underline' }, children: runtimeStatusUrl })) : ('n/a')] }), hasError && (_jsxs(Box, { sx: {
80
+ mt: 1,
81
+ p: 1,
82
+ border: '1px solid',
83
+ borderColor: 'danger.muted',
84
+ borderRadius: 2,
85
+ bg: 'danger.subtle',
86
+ color: 'danger.fg',
87
+ wordBreak: 'break-word',
88
+ }, children: ["Error: ", summary.error] }))] }))] }));
89
+ };
@@ -0,0 +1,13 @@
1
+ import { type ReactComponentImplementation } from '@a2ui/react/v0_9';
2
+ import type { SurfaceModel } from '@a2ui/web_core/v0_9';
3
+ export interface A2uiSurfaceComposedProps {
4
+ surface: SurfaceModel<ReactComponentImplementation>;
5
+ }
6
+ /**
7
+ * Composed surface wrapper for all A2UI v0.9 consumers.
8
+ *
9
+ * This normalizes class names when upstream CSS modules are absent and applies
10
+ * basic semantic classes so application-level styles can consistently target
11
+ * rendered A2UI HTML.
12
+ */
13
+ export declare function A2uiSurfaceComposed({ surface }: A2uiSurfaceComposedProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,110 @@
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 { useEffect, useRef } from 'react';
7
+ import { A2uiSurface, } from '@a2ui/react/v0_9';
8
+ function applyA2uiClassFallbacks(root) {
9
+ root.querySelectorAll('button').forEach(el => {
10
+ el.classList.remove('undefined');
11
+ const btn = el;
12
+ // Tab headers are not regular primary buttons: they need to convey which
13
+ // one is selected. Leave them to the `.a2ui-tab-button` scope styles and
14
+ // clear inline declarations so the class-driven active state can apply.
15
+ if (btn.classList.contains('a2ui-tab-button')) {
16
+ btn.style.removeProperty('background');
17
+ btn.style.removeProperty('border');
18
+ btn.style.removeProperty('color');
19
+ btn.style.removeProperty('border-radius');
20
+ return;
21
+ }
22
+ // Choice-picker chips are toggle buttons whose selected/unselected state is
23
+ // driven by React (class `selected` + `aria-pressed`). Do NOT coerce them
24
+ // into primary buttons: React rewrites their className on every toggle,
25
+ // which would drop injected classes, and the observer does not watch
26
+ // attribute mutations. Let the `.chip` scope styles handle both states.
27
+ if (btn.classList.contains('chip')) {
28
+ btn.style.removeProperty('background');
29
+ btn.style.removeProperty('background-color');
30
+ btn.style.removeProperty('border');
31
+ btn.style.removeProperty('color');
32
+ return;
33
+ }
34
+ if (!el.classList.contains('a2ui-button')) {
35
+ el.classList.add('a2ui-button');
36
+ }
37
+ if (!el.classList.contains('a2ui-button-primary')) {
38
+ el.classList.add('a2ui-button-primary');
39
+ }
40
+ // Ensure class-driven theming can react live to CSS variable changes by
41
+ // clearing any stale inline declarations from previous renders.
42
+ btn.style.removeProperty('background');
43
+ btn.style.removeProperty('border');
44
+ btn.style.removeProperty('color');
45
+ btn.style.removeProperty('border-radius');
46
+ btn.style.removeProperty('padding');
47
+ btn.style.removeProperty('font-weight');
48
+ btn.style.removeProperty('cursor');
49
+ });
50
+ root
51
+ .querySelectorAll("input[type='text'], input[type='number'], input[type='password'], input[type='datetime-local'], textarea")
52
+ .forEach(el => {
53
+ el.classList.remove('undefined');
54
+ if (!el.classList.contains('a2ui-textfield-input')) {
55
+ el.classList.add('a2ui-textfield-input');
56
+ }
57
+ });
58
+ root.querySelectorAll('label').forEach(el => {
59
+ el.classList.remove('undefined');
60
+ if (!el.classList.contains('a2ui-textfield-label')) {
61
+ el.classList.add('a2ui-textfield-label');
62
+ }
63
+ });
64
+ root.querySelectorAll('span').forEach(el => {
65
+ if (el.textContent && /invalid|required|error/i.test(el.textContent)) {
66
+ if (!el.classList.contains('a2ui-textfield-error')) {
67
+ el.classList.add('a2ui-textfield-error');
68
+ }
69
+ }
70
+ });
71
+ root.querySelectorAll('.body, .caption').forEach(el => {
72
+ el.classList.remove('undefined');
73
+ if (!el.classList.contains('a2ui-text')) {
74
+ el.classList.add('a2ui-text');
75
+ }
76
+ if (el.classList.contains('caption') &&
77
+ !el.classList.contains('a2ui-caption')) {
78
+ el.classList.add('a2ui-caption');
79
+ }
80
+ });
81
+ }
82
+ /**
83
+ * Composed surface wrapper for all A2UI v0.9 consumers.
84
+ *
85
+ * This normalizes class names when upstream CSS modules are absent and applies
86
+ * basic semantic classes so application-level styles can consistently target
87
+ * rendered A2UI HTML.
88
+ */
89
+ export function A2uiSurfaceComposed({ surface }) {
90
+ const rootRef = useRef(null);
91
+ useEffect(() => {
92
+ const root = rootRef.current;
93
+ if (!root) {
94
+ return;
95
+ }
96
+ const apply = () => applyA2uiClassFallbacks(root);
97
+ apply();
98
+ const observer = new MutationObserver(() => {
99
+ apply();
100
+ });
101
+ observer.observe(root, {
102
+ childList: true,
103
+ subtree: true,
104
+ });
105
+ return () => {
106
+ observer.disconnect();
107
+ };
108
+ }, [surface]);
109
+ return (_jsx("div", { ref: rootRef, children: _jsx(A2uiSurface, { surface: surface }) }));
110
+ }
@@ -0,0 +1,2 @@
1
+ export * from './A2uiSurfaceComposed';
2
+ export * from './styles';
@@ -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 './A2uiSurfaceComposed';
6
+ export * from './styles';
@@ -0,0 +1,14 @@
1
+ import type { BetterSystemStyleObject } from '@primer/react';
2
+ /**
3
+ * Shared style scope for A2UI-rendered HTML.
4
+ *
5
+ * Uses A2UI CSS custom properties so consumers can drive visuals from their
6
+ * own theme system (Primer tokens, app-level variables, etc.).
7
+ *
8
+ * NOTE: This must be a plain style object (not the result of
9
+ * `@styled-system/css`), because it is consumed by spreading into a Primer
10
+ * `sx` prop (`sx={{ ...A2UI_RENDER_SCOPE_SX }}`). `css()` returns a *function*,
11
+ * which spreads to `{}` and silently drops every rule — leaving A2UI surfaces
12
+ * unthemed (browser-default grey, ignoring color mode).
13
+ */
14
+ export declare const A2UI_RENDER_SCOPE_SX: BetterSystemStyleObject;
@@ -0,0 +1,142 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ const A2UI_INPUT_SELECTOR = '& .a2ui-textfield-input';
6
+ const A2UI_INPUT_FOCUS_SELECTOR = '& .a2ui-textfield-input:focus';
7
+ const A2UI_INPUT_HOVER_SELECTOR = '& .a2ui-textfield-input:hover';
8
+ /**
9
+ * Shared style scope for A2UI-rendered HTML.
10
+ *
11
+ * Uses A2UI CSS custom properties so consumers can drive visuals from their
12
+ * own theme system (Primer tokens, app-level variables, etc.).
13
+ *
14
+ * NOTE: This must be a plain style object (not the result of
15
+ * `@styled-system/css`), because it is consumed by spreading into a Primer
16
+ * `sx` prop (`sx={{ ...A2UI_RENDER_SCOPE_SX }}`). `css()` returns a *function*,
17
+ * which spreads to `{}` and silently drops every rule — leaving A2UI surfaces
18
+ * unthemed (browser-default grey, ignoring color mode).
19
+ */
20
+ export const A2UI_RENDER_SCOPE_SX = {
21
+ // Icons render via `font-size: var(--a2ui-icon-size, …xl 24px)`. When the
22
+ // Material Symbols font is not loaded the raw name (e.g. "phone") shows as
23
+ // text; the 24px fallback makes those labels look larger than the adjacent
24
+ // values. Pin the icon size to the surrounding text size so they align.
25
+ '--a2ui-icon-size': '1em',
26
+ '& .a2ui-card': {
27
+ background: 'var(--a2ui-card-background, var(--a2ui-color-surface, #f6f8fa))',
28
+ border: '1px solid var(--a2ui-color-border, #d0d7de)',
29
+ borderRadius: 'var(--a2ui-card-border-radius, 12px)',
30
+ boxShadow: 'var(--a2ui-card-box-shadow, none)',
31
+ },
32
+ '& .a2ui-text': {
33
+ color: 'var(--a2ui-color-on-surface, var(--a2ui-color-on-background, #1f2328))',
34
+ margin: 0,
35
+ },
36
+ '& .a2ui-caption': {
37
+ color: 'var(--a2ui-text-caption-color, var(--a2ui-color-on-surface, #656d76))',
38
+ },
39
+ '& .a2ui-button': {
40
+ appearance: 'none',
41
+ cursor: 'pointer',
42
+ border: '1px solid var(--a2ui-color-primary, #1f883d)',
43
+ background: 'var(--a2ui-color-primary, #1f883d)',
44
+ color: 'var(--a2ui-color-on-primary, #ffffff)',
45
+ borderRadius: 'var(--a2ui-button-border-radius, 6px)',
46
+ padding: 'var(--a2ui-button-padding, 5px 16px)',
47
+ fontWeight: 'var(--a2ui-button-font-weight, 500)',
48
+ boxShadow: 'var(--a2ui-button-box-shadow, none)',
49
+ transition: 'background-color 0.15s ease, border-color 0.15s ease',
50
+ },
51
+ '& .a2ui-button:hover': {
52
+ background: 'var(--a2ui-color-primary-hover, #1a7f37)',
53
+ borderColor: 'var(--a2ui-color-primary-hover, #1a7f37)',
54
+ },
55
+ '& .a2ui-button:disabled': {
56
+ opacity: 0.6,
57
+ cursor: 'not-allowed',
58
+ },
59
+ '& .a2ui-tab-button': {
60
+ appearance: 'none',
61
+ background: 'transparent',
62
+ border: 'none',
63
+ borderBottom: '2px solid transparent',
64
+ borderRadius: 0,
65
+ marginBottom: '-1px',
66
+ padding: 'var(--a2ui-tab-padding, 8px 16px)',
67
+ color: 'var(--a2ui-tab-color, var(--a2ui-color-on-surface, #656d76))',
68
+ cursor: 'pointer',
69
+ fontFamily: 'inherit',
70
+ fontSize: 'var(--a2ui-font-size-sm, 14px)',
71
+ fontWeight: 500,
72
+ boxShadow: 'none',
73
+ transition: 'color 0.15s ease, border-color 0.15s ease, background-color 0.15s ease',
74
+ },
75
+ '& .a2ui-tab-button:hover': {
76
+ color: 'var(--a2ui-tab-color-hover, var(--a2ui-color-primary, #1f883d))',
77
+ background: 'var(--a2ui-tab-background-hover, var(--a2ui-color-surface, #f6f8fa))',
78
+ },
79
+ '& .a2ui-tab-button.active': {
80
+ color: 'var(--a2ui-tab-color-active, var(--a2ui-color-primary, #1f883d))',
81
+ borderBottomColor: 'var(--a2ui-tab-border-active, var(--a2ui-color-primary, #1f883d))',
82
+ fontWeight: 600,
83
+ },
84
+ '& .chip': {
85
+ appearance: 'none',
86
+ padding: 'var(--a2ui-choicepicker-chip-padding, 4px 12px)',
87
+ borderRadius: 'var(--a2ui-choicepicker-chip-border-radius, 999px)',
88
+ border: '1px solid var(--a2ui-color-border, #d0d7de)',
89
+ background: 'var(--a2ui-color-surface, #f6f8fa)',
90
+ color: 'var(--a2ui-color-on-surface, #1f2328)',
91
+ cursor: 'pointer',
92
+ fontFamily: 'inherit',
93
+ fontSize: 'var(--a2ui-font-size-sm, 14px)',
94
+ fontWeight: 500,
95
+ boxShadow: 'none',
96
+ transition: 'background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease',
97
+ },
98
+ '& .chip:hover': {
99
+ borderColor: 'var(--a2ui-color-border-hover, var(--a2ui-color-primary, #1f883d))',
100
+ },
101
+ '& .chip.selected, & .chip[aria-pressed="true"]': {
102
+ background: 'var(--a2ui-color-primary, #1f883d)',
103
+ borderColor: 'var(--a2ui-color-primary, #1f883d)',
104
+ color: 'var(--a2ui-color-on-primary, #ffffff)',
105
+ },
106
+ [A2UI_INPUT_SELECTOR]: {
107
+ width: '100%',
108
+ minHeight: 'var(--a2ui-control-height, 32px)',
109
+ boxSizing: 'border-box',
110
+ background: 'var(--a2ui-textfield-background, var(--a2ui-color-input, var(--a2ui-color-background, #ffffff)))',
111
+ color: 'var(--a2ui-textfield-color, var(--a2ui-color-on-input, var(--a2ui-color-on-background, #1f2328)))',
112
+ border: 'var(--a2ui-textfield-border, 1px solid var(--a2ui-color-border, #d0d7de))',
113
+ borderRadius: 'var(--a2ui-textfield-border-radius, 6px)',
114
+ padding: 'var(--a2ui-textfield-padding, 5px 12px)',
115
+ fontSize: 'var(--a2ui-font-size-sm, 14px)',
116
+ lineHeight: '20px',
117
+ transition: 'border-color 0.15s ease, box-shadow 0.15s ease',
118
+ },
119
+ [A2UI_INPUT_HOVER_SELECTOR]: {
120
+ borderColor: 'var(--a2ui-textfield-color-border-hover, var(--a2ui-color-border-hover, #8c959f))',
121
+ },
122
+ [A2UI_INPUT_FOCUS_SELECTOR]: {
123
+ outline: 'none',
124
+ borderColor: 'var(--a2ui-textfield-color-border-focus, var(--a2ui-color-primary, #1f883d))',
125
+ boxShadow: '0 0 0 3px color-mix(in srgb, var(--a2ui-color-primary, #1f883d) 25%, transparent)',
126
+ },
127
+ '& .a2ui-textfield-label': {
128
+ color: 'var(--a2ui-textfield-label-color, var(--a2ui-color-on-surface, var(--a2ui-color-on-background, #1f2328)))',
129
+ fontWeight: 600,
130
+ fontSize: 'var(--a2ui-font-size-xs, 12px)',
131
+ marginBottom: 'var(--a2ui-spacing-xxs, 4px)',
132
+ display: 'inline-block',
133
+ },
134
+ '& .a2ui-textfield-error': {
135
+ color: 'var(--a2ui-textfield-color-error, #d1242f)',
136
+ fontSize: 'var(--a2ui-font-size-xs, 12px)',
137
+ marginTop: 'var(--a2ui-spacing-xs, 4px)',
138
+ },
139
+ '& input[type="checkbox"]': {
140
+ accentColor: 'var(--a2ui-color-primary, #1f883d)',
141
+ },
142
+ };
@@ -0,0 +1,2 @@
1
+ export declare const SpaceSelect: () => import("react/jsx-runtime").JSX.Element;
2
+ export default SpaceSelect;