@datalayer/agent-runtimes 1.0.9 → 1.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/README.md +82 -1
  2. package/lib/{AgentLexical.d.ts → AgentDocument.d.ts} +5 -5
  3. package/lib/{AgentLexical.js → AgentDocument.js} +156 -26
  4. package/lib/AgentNode.js +32 -31
  5. package/lib/AgentNotebook.js +172 -17
  6. package/lib/AppExamples2.css +47 -0
  7. package/lib/AppExamples2.d.ts +3 -0
  8. package/lib/AppExamples2.js +21 -0
  9. package/lib/{agent-lexical-main.js → agent-document-main.js} +2 -2
  10. package/lib/agents/AgentRuntimeChat.d.ts +73 -0
  11. package/lib/agents/AgentRuntimeChat.js +198 -0
  12. package/lib/api/index.d.ts +12 -0
  13. package/lib/api/index.js +46 -0
  14. package/lib/api/runtimes/checkpoints.d.ts +122 -0
  15. package/lib/api/runtimes/checkpoints.js +118 -0
  16. package/lib/api/runtimes/environments.d.ts +9 -0
  17. package/lib/api/runtimes/environments.js +29 -0
  18. package/lib/api/runtimes/healthz.d.ts +15 -0
  19. package/lib/api/runtimes/healthz.js +44 -0
  20. package/lib/api/runtimes/index.d.ts +12 -0
  21. package/lib/api/runtimes/index.js +16 -0
  22. package/lib/api/runtimes/runtimes.d.ts +138 -0
  23. package/lib/api/runtimes/runtimes.js +230 -0
  24. package/lib/api/runtimes/snapshots.d.ts +38 -0
  25. package/lib/api/runtimes/snapshots.js +82 -0
  26. package/lib/api/scheduler/index.d.ts +6 -0
  27. package/lib/api/scheduler/index.js +10 -0
  28. package/lib/api/scheduler/schedules.d.ts +85 -0
  29. package/lib/api/scheduler/schedules.js +78 -0
  30. package/lib/api/spacer/documents.d.ts +12 -0
  31. package/lib/api/spacer/documents.js +43 -0
  32. package/lib/api/spacer/healthz.d.ts +15 -0
  33. package/lib/api/spacer/healthz.js +44 -0
  34. package/lib/api/spacer/index.d.ts +15 -0
  35. package/lib/api/spacer/index.js +19 -0
  36. package/lib/api/spacer/items.d.ts +25 -0
  37. package/lib/api/spacer/items.js +55 -0
  38. package/lib/api/spacer/lexicals.d.ts +34 -0
  39. package/lib/api/spacer/lexicals.js +89 -0
  40. package/lib/api/spacer/notebooks.d.ts +34 -0
  41. package/lib/api/spacer/notebooks.js +89 -0
  42. package/lib/api/spacer/spaces.d.ts +84 -0
  43. package/lib/api/spacer/spaces.js +170 -0
  44. package/lib/api/spacer/users.d.ts +9 -0
  45. package/lib/api/spacer/users.js +29 -0
  46. package/lib/chat/Chat.d.ts +1 -1
  47. package/lib/chat/Chat.js +54 -54
  48. package/lib/chat/ChatFloating.d.ts +2 -2
  49. package/lib/chat/ChatFloating.js +136 -25
  50. package/lib/chat/ChatSidebar.js +20 -22
  51. package/lib/chat/base/ChatBase.js +468 -40
  52. package/lib/chat/display/EmptyState.js +21 -21
  53. package/lib/chat/document/EphemeralDocument.d.ts +23 -0
  54. package/lib/chat/document/EphemeralDocument.js +270 -0
  55. package/lib/chat/header/ChatHeaderBase.d.ts +12 -2
  56. package/lib/chat/header/ChatHeaderBase.js +78 -23
  57. package/lib/chat/index.d.ts +1 -0
  58. package/lib/chat/index.js +2 -0
  59. package/lib/chat/notebook/EphemeralNotebook.d.ts +24 -0
  60. package/lib/chat/notebook/EphemeralNotebook.js +252 -0
  61. package/lib/chat/prompt/InputFooter.js +4 -1
  62. package/lib/client/AgentRuntimesClient.d.ts +127 -0
  63. package/lib/client/AgentRuntimesClient.js +36 -0
  64. package/lib/client/AgentsMixin.d.ts +4 -4
  65. package/lib/client/AgentsMixin.js +35 -35
  66. package/lib/client/SdkAgentRuntimesClient.d.ts +1 -1
  67. package/lib/client/SdkAgentRuntimesClient.js +1 -1
  68. package/lib/client/mixins/RuntimesMixin.d.ts +93 -0
  69. package/lib/client/mixins/RuntimesMixin.js +229 -0
  70. package/lib/client/mixins/SpacerMixin.d.ts +210 -0
  71. package/lib/client/mixins/SpacerMixin.js +615 -0
  72. package/lib/client/utils/spacerUtils.d.ts +18 -0
  73. package/lib/client/utils/spacerUtils.js +32 -0
  74. package/lib/collaboration/DatalayerCollaboration.d.ts +13 -0
  75. package/lib/collaboration/DatalayerCollaboration.js +28 -0
  76. package/lib/collaboration/DatalayerCollaborationProvider.d.ts +58 -0
  77. package/lib/collaboration/DatalayerCollaborationProvider.js +148 -0
  78. package/lib/collaboration/index.d.ts +2 -0
  79. package/lib/collaboration/index.js +6 -0
  80. package/lib/components/AgentSummary.d.ts +19 -0
  81. package/lib/components/AgentSummary.js +89 -0
  82. package/lib/components/ToolApprovalCard.js +13 -3
  83. package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +13 -0
  84. package/lib/components/a2ui/A2uiSurfaceComposed.js +110 -0
  85. package/lib/components/a2ui/index.d.ts +2 -0
  86. package/lib/components/a2ui/index.js +6 -0
  87. package/lib/components/a2ui/styles.d.ts +14 -0
  88. package/lib/components/a2ui/styles.js +142 -0
  89. package/lib/components/context/SpaceSelect.d.ts +2 -0
  90. package/lib/components/context/SpaceSelect.js +42 -0
  91. package/lib/components/flashes/FlashDisclaimer.d.ts +2 -0
  92. package/lib/components/flashes/FlashDisclaimer.js +17 -0
  93. package/lib/components/icons/ArtifactIcon.d.ts +10 -0
  94. package/lib/components/icons/ArtifactIcon.js +58 -0
  95. package/lib/components/icons/index.d.ts +1 -0
  96. package/lib/components/icons/index.js +5 -0
  97. package/lib/components/index.d.ts +5 -0
  98. package/lib/components/index.js +5 -0
  99. package/lib/components/nbgrader/NbGradesDetails.d.ts +5 -0
  100. package/lib/components/nbgrader/NbGradesDetails.js +19 -0
  101. package/lib/components/nbgrader/index.d.ts +1 -0
  102. package/lib/components/nbgrader/index.js +5 -0
  103. package/lib/components/progress/CreditsIndicator.d.ts +33 -0
  104. package/lib/components/progress/CreditsIndicator.js +23 -0
  105. package/lib/components/progress/index.d.ts +2 -0
  106. package/lib/components/progress/index.js +6 -0
  107. package/lib/components/runtimes/RuntimeCellVariables.d.ts +39 -0
  108. package/lib/components/runtimes/RuntimeCellVariables.js +172 -0
  109. package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +37 -0
  110. package/lib/components/runtimes/RuntimeCellVariablesDialog.js +101 -0
  111. package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +57 -0
  112. package/lib/components/runtimes/RuntimeLauncherDialog.js +275 -0
  113. package/lib/components/runtimes/RuntimePickerBase.d.ts +69 -0
  114. package/lib/components/runtimes/RuntimePickerBase.js +122 -0
  115. package/lib/components/runtimes/RuntimePickerCell.d.ts +34 -0
  116. package/lib/components/runtimes/RuntimePickerCell.js +104 -0
  117. package/lib/components/runtimes/RuntimePickerNotebook.d.ts +42 -0
  118. package/lib/components/runtimes/RuntimePickerNotebook.js +232 -0
  119. package/lib/components/runtimes/RuntimeReservationControl.d.ts +47 -0
  120. package/lib/components/runtimes/RuntimeReservationControl.js +42 -0
  121. package/lib/components/runtimes/RuntimeSimplePicker.d.ts +38 -0
  122. package/lib/components/runtimes/RuntimeSimplePicker.js +155 -0
  123. package/lib/components/runtimes/RuntimeTransfer.d.ts +16 -0
  124. package/lib/components/runtimes/RuntimeTransfer.js +5 -0
  125. package/lib/components/runtimes/RuntimeUtils.d.ts +17 -0
  126. package/lib/components/runtimes/RuntimeUtils.js +178 -0
  127. package/lib/components/runtimes/RuntimeVariables.d.ts +38 -0
  128. package/lib/components/runtimes/RuntimeVariables.js +75 -0
  129. package/lib/components/runtimes/index.d.ts +11 -0
  130. package/lib/components/runtimes/index.js +15 -0
  131. package/lib/components/scheduler/ScheduleMenu.d.ts +54 -0
  132. package/lib/components/scheduler/ScheduleMenu.js +154 -0
  133. package/lib/components/scheduler/index.d.ts +1 -0
  134. package/lib/components/scheduler/index.js +5 -0
  135. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +33 -0
  136. package/lib/components/snapshots/SandboxSnapshotMenu.js +169 -0
  137. package/lib/components/snapshots/index.d.ts +1 -0
  138. package/lib/components/snapshots/index.js +5 -0
  139. package/lib/components/snippets/SnippetDialog.d.ts +42 -0
  140. package/lib/components/snippets/SnippetDialog.js +42 -0
  141. package/lib/components/students/StudentItemStatus.d.ts +7 -0
  142. package/lib/components/students/StudentItemStatus.js +68 -0
  143. package/lib/components/students/index.d.ts +1 -0
  144. package/lib/components/students/index.js +5 -0
  145. package/lib/components/tokens/SpaceVariantToken.d.ts +5 -0
  146. package/lib/components/tokens/SpaceVariantToken.js +23 -0
  147. package/lib/components/tokens/index.d.ts +1 -0
  148. package/lib/components/tokens/index.js +5 -0
  149. package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +4 -0
  150. package/lib/components/toolbars/AssignmentEditorToolbar.js +18 -0
  151. package/lib/components/toolbars/DocumentEditorToolbar.d.ts +2 -0
  152. package/lib/components/toolbars/DocumentEditorToolbar.js +12 -0
  153. package/lib/components/toolbars/NotebookEditorToolbar.d.ts +29 -0
  154. package/lib/components/toolbars/NotebookEditorToolbar.js +30 -0
  155. package/lib/config/AgentConfiguration.d.ts +2 -2
  156. package/lib/config/index.d.ts +1 -1
  157. package/lib/context/ContextInspector.d.ts +1 -14
  158. package/lib/context/ContextInspector.js +3 -73
  159. package/lib/context/CostUsageChart.d.ts +4 -3
  160. package/lib/context/CostUsageChart.js +236 -35
  161. package/lib/context/MessageHistory.d.ts +30 -0
  162. package/lib/context/MessageHistory.js +129 -0
  163. package/lib/context/TokenUsageChart.d.ts +4 -3
  164. package/lib/context/TokenUsageChart.js +180 -30
  165. package/lib/context/TurnGraphChart.d.ts +1 -1
  166. package/lib/context/TurnGraphChart.js +6 -6
  167. package/lib/examples/A2UiAgentExample.d.ts +22 -0
  168. package/lib/examples/A2UiAgentExample.js +442 -0
  169. package/lib/examples/A2UiComponentsGalleryExample.d.ts +3 -0
  170. package/lib/examples/A2UiComponentsGalleryExample.js +863 -0
  171. package/lib/examples/A2UiContactCardExample.js +9 -5
  172. package/lib/examples/A2UiRestaurantExample.js +23 -8
  173. package/lib/examples/A2UiViewerExample.js +75 -3
  174. package/lib/examples/AgUiAgenticExample.d.ts +1 -12
  175. package/lib/examples/AgUiAgenticExample.js +52 -8
  176. package/lib/examples/AgUiBackendToolRenderingExample.d.ts +1 -16
  177. package/lib/examples/AgUiBackendToolRenderingExample.js +32 -17
  178. package/lib/examples/AgUiHaikuGenUiExample.d.ts +1 -17
  179. package/lib/examples/AgUiHaikuGenUiExample.js +49 -33
  180. package/lib/examples/AgUiHumanInTheLoopExample.d.ts +1 -12
  181. package/lib/examples/AgUiHumanInTheLoopExample.js +21 -6
  182. package/lib/examples/AgUiSharedStateExample.d.ts +1 -14
  183. package/lib/examples/AgUiSharedStateExample.js +21 -6
  184. package/lib/examples/AgUiToolsBasedGenUiExample.d.ts +1 -14
  185. package/lib/examples/AgUiToolsBasedGenUiExample.js +21 -6
  186. package/lib/examples/AgentCheckpointsExample.d.ts +1 -1
  187. package/lib/examples/AgentCheckpointsExample.js +21 -22
  188. package/lib/examples/AgentCodemodeExample.js +3 -3
  189. package/lib/examples/AgentEvalsExample.js +8 -8
  190. package/lib/examples/AgentGuardrailsExample.js +22 -17
  191. package/lib/examples/AgentHooksExample.js +16 -57
  192. package/lib/examples/AgentInferenceProviderExample.js +8 -8
  193. package/lib/examples/AgentLoopExample.d.ts +10 -0
  194. package/lib/examples/AgentLoopExample.js +304 -0
  195. package/lib/examples/AgentMCPExample.js +9 -9
  196. package/lib/examples/AgentMemoryExample.js +6 -6
  197. package/lib/examples/AgentMonitoringExample.js +116 -46
  198. package/lib/examples/AgentNotificationsExample.js +6 -6
  199. package/lib/examples/AgentOtelExample.d.ts +3 -3
  200. package/lib/examples/AgentOtelExample.js +20 -15
  201. package/lib/examples/AgentOutputsExample.js +8 -8
  202. package/lib/examples/AgentParametersExample.js +24 -36
  203. package/lib/examples/AgentSandboxExample.js +7 -7
  204. package/lib/examples/AgentSkillsExample.js +9 -9
  205. package/lib/examples/AgentSubagentsExample.js +6 -6
  206. package/lib/examples/AgentToolApprovalsExample.js +37 -11
  207. package/lib/examples/AgentTriggersExample.js +12 -12
  208. package/lib/examples/AgentspecsExample.js +63 -41
  209. package/lib/examples/ChatCustomExample.js +23 -77
  210. package/lib/examples/ChatExample.js +15 -46
  211. package/lib/examples/LexicalAgentExample.js +43 -91
  212. package/lib/examples/LexicalAgentSidebarExample.js +45 -73
  213. package/lib/examples/NotebookAgentExample.js +52 -81
  214. package/lib/examples/NotebookAgentSidebarExample.js +43 -71
  215. package/lib/examples/NotebookCollaborationExample.js +11 -9
  216. package/lib/examples/NotebookExample.js +5 -2
  217. package/lib/examples/components/AuthRequiredView.js +1 -1
  218. package/lib/examples/components/ExampleErrorBoundary.d.ts +46 -0
  219. package/lib/examples/components/ExampleErrorBoundary.js +67 -0
  220. package/lib/examples/components/haiku/haiku-card.css +11 -0
  221. package/lib/examples/components/weather/weather-card.css +11 -0
  222. package/lib/examples/example-selector.js +3 -1
  223. package/lib/examples/hooks/useExampleAgentRuntime.d.ts +35 -0
  224. package/lib/examples/hooks/useExampleAgentRuntime.js +82 -0
  225. package/lib/examples/hooks/useSpecRenderToolResult.d.ts +30 -0
  226. package/lib/examples/hooks/useSpecRenderToolResult.js +61 -0
  227. package/lib/examples/index.d.ts +3 -1
  228. package/lib/examples/index.js +3 -1
  229. package/lib/examples/main.js +340 -93
  230. package/lib/examples/utils/a2ui.d.ts +2 -0
  231. package/lib/examples/utils/a2ui.js +97 -2
  232. package/lib/examples/utils/agentSummaryStore.d.ts +21 -0
  233. package/lib/examples/utils/agentSummaryStore.js +23 -0
  234. package/lib/examples/utils/notebooks/Empty.ipynb.json +30 -30
  235. package/lib/examples/utils/runtimeTargetStore.d.ts +9 -0
  236. package/lib/examples/utils/runtimeTargetStore.js +27 -0
  237. package/lib/examples/utils/teardownAgents.d.ts +13 -0
  238. package/lib/examples/utils/teardownAgents.js +78 -0
  239. package/lib/examples/utils/useExampleAgentRuntimesUrl.d.ts +2 -0
  240. package/lib/examples/utils/useExampleAgentRuntimesUrl.js +26 -7
  241. package/lib/examples2/CellExample.d.ts +6 -0
  242. package/lib/examples2/CellExample.js +20 -0
  243. package/lib/examples2/DatalayerNotebookExample.d.ts +16 -0
  244. package/lib/examples2/DatalayerNotebookExample.js +109 -0
  245. package/lib/examples2/NativeNavigationExample.d.ts +8 -0
  246. package/lib/examples2/NativeNavigationExample.js +97 -0
  247. package/lib/examples2/NotebookExample.d.ts +6 -0
  248. package/lib/examples2/NotebookExample.js +19 -0
  249. package/lib/examples2/NotebookMutationsKernel.d.ts +2 -0
  250. package/lib/examples2/NotebookMutationsKernel.js +105 -0
  251. package/lib/examples2/NotebookMutationsServiceManager.d.ts +2 -0
  252. package/lib/examples2/NotebookMutationsServiceManager.js +109 -0
  253. package/lib/examples2/ReactRouterExample.d.ts +6 -0
  254. package/lib/examples2/ReactRouterExample.js +175 -0
  255. package/lib/examples2/example-selector.d.ts +22 -0
  256. package/lib/examples2/example-selector.js +45 -0
  257. package/lib/examples2/index.d.ts +2 -0
  258. package/lib/examples2/index.js +6 -0
  259. package/lib/examples2/lexical-theme.css +436 -0
  260. package/lib/examples2/main.d.ts +2 -0
  261. package/lib/examples2/main.js +330 -0
  262. package/lib/examples2/notebooks/IPyWidgetsExample.ipynb.json +101 -0
  263. package/lib/examples2/notebooks/IPyWidgetsExampleWithState.ipynb.json +112 -0
  264. package/lib/examples2/notebooks/Lite.ipynb.json +128 -0
  265. package/lib/examples2/notebooks/Matplotlib.ipynb.json +137 -0
  266. package/lib/examples2/notebooks/NotebookExample1.ipynb.json +126 -0
  267. package/lib/examples2/notebooks/NotebookExample2.ipynb.json +48 -0
  268. package/lib/examples2/notebooks/NotebookOutputs.ipynb.json +49 -0
  269. package/lib/examples2/notebooks/NotebookToCExample.ipynb.json +102 -0
  270. package/lib/examples2/notebooks/OutputIPyWidgetsExample.d.ts +145 -0
  271. package/lib/examples2/notebooks/OutputIPyWidgetsExample.js +153 -0
  272. package/lib/examples2/notebooks/PyGWalker.ipynb.json +55 -0
  273. package/lib/hooks/index.d.ts +9 -1
  274. package/lib/hooks/index.js +13 -1
  275. package/lib/hooks/useAIAgentsWebSocket.d.ts +1 -1
  276. package/lib/hooks/useAIAgentsWebSocket.js +39 -3
  277. package/lib/hooks/useAgentRuntimes.d.ts +15 -3
  278. package/lib/hooks/useAgentRuntimes.js +188 -29
  279. package/lib/hooks/useAgentsCatalog.d.ts +3 -3
  280. package/lib/hooks/useAgentsCatalog.js +4 -4
  281. package/lib/hooks/useAgentsService.js +5 -5
  282. package/lib/hooks/useCellOutputshot.d.ts +4 -0
  283. package/lib/hooks/useCellOutputshot.js +25 -0
  284. package/lib/hooks/useCheckpoints.d.ts +8 -8
  285. package/lib/hooks/useCheckpoints.js +38 -28
  286. package/lib/hooks/useConfig.d.ts +1 -1
  287. package/lib/hooks/useMonitoring.d.ts +7 -5
  288. package/lib/hooks/useMonitoring.js +16 -10
  289. package/lib/hooks/useNotifications.d.ts +11 -11
  290. package/lib/hooks/useNotifications.js +1 -1
  291. package/lib/hooks/useProgressStore.d.ts +25 -0
  292. package/lib/hooks/useProgressStore.js +58 -0
  293. package/lib/hooks/useProgressTask.d.ts +9 -0
  294. package/lib/hooks/useProgressTask.js +41 -0
  295. package/lib/hooks/useProjects.d.ts +628 -0
  296. package/lib/hooks/useProjects.js +190 -0
  297. package/lib/hooks/useRuntimes.d.ts +5 -0
  298. package/lib/hooks/useRuntimes.js +34 -0
  299. package/lib/hooks/useToolApprovals.d.ts +14 -6
  300. package/lib/hooks/useToolApprovals.js +20 -1
  301. package/lib/index.d.ts +2 -1
  302. package/lib/index.js +1 -0
  303. package/lib/jupyter/exec/Python.d.ts +5 -0
  304. package/lib/jupyter/exec/Python.js +100 -0
  305. package/lib/jupyter/exec/Snippets.d.ts +105 -0
  306. package/lib/jupyter/exec/Snippets.js +101 -0
  307. package/lib/jupyter/exec/index.d.ts +2 -0
  308. package/lib/jupyter/exec/index.js +6 -0
  309. package/lib/jupyter/index.d.ts +2 -0
  310. package/lib/jupyter/index.js +6 -0
  311. package/lib/jupyter/kernelsHandler.d.ts +8 -0
  312. package/lib/jupyter/kernelsHandler.js +39 -0
  313. package/lib/mocks/models/CourseMock.d.ts +6 -0
  314. package/lib/mocks/models/CourseMock.js +29 -0
  315. package/lib/mocks/models/SpaceMock.d.ts +6 -0
  316. package/lib/mocks/models/SpaceMock.js +25 -0
  317. package/lib/models/Assignment.d.ts +7 -0
  318. package/lib/models/Assignment.js +5 -0
  319. package/lib/models/Cell.d.ts +8 -0
  320. package/lib/models/Cell.js +5 -0
  321. package/lib/models/CodeBlock.d.ts +10 -0
  322. package/lib/models/CodeBlock.js +5 -0
  323. package/lib/models/CodeSandboxSnapshot.d.ts +92 -0
  324. package/lib/models/CodeSandboxSnapshot.js +13 -0
  325. package/lib/models/CodeSandboxSnapshotDTO.d.ts +173 -0
  326. package/lib/models/CodeSandboxSnapshotDTO.js +139 -0
  327. package/lib/models/CodefeedBlocks.d.ts +7 -0
  328. package/lib/models/CodefeedBlocks.js +5 -0
  329. package/lib/models/Content.d.ts +5 -0
  330. package/lib/models/Content.js +5 -0
  331. package/lib/models/Course.d.ts +17 -0
  332. package/lib/models/Course.js +5 -0
  333. package/lib/models/Dataset.d.ts +16 -0
  334. package/lib/models/Dataset.js +5 -0
  335. package/lib/models/Document.d.ts +8 -0
  336. package/lib/models/Document.js +5 -0
  337. package/lib/models/Environment.d.ts +86 -0
  338. package/lib/models/Environment.js +5 -0
  339. package/lib/models/EnvironmentDTO.d.ts +125 -0
  340. package/lib/models/EnvironmentDTO.js +88 -0
  341. package/lib/models/Exercise.d.ts +16 -0
  342. package/lib/models/Exercise.js +5 -0
  343. package/lib/models/Item.d.ts +20 -0
  344. package/lib/models/Item.js +5 -0
  345. package/lib/models/ItemDTO.d.ts +74 -0
  346. package/lib/models/ItemDTO.js +186 -0
  347. package/lib/models/ItemType.d.ts +2 -0
  348. package/lib/models/ItemType.js +5 -0
  349. package/lib/models/Lesson.d.ts +5 -0
  350. package/lib/models/Lesson.js +5 -0
  351. package/lib/models/LexicalDTO.d.ts +155 -0
  352. package/lib/models/LexicalDTO.js +157 -0
  353. package/lib/models/Library.d.ts +10 -0
  354. package/lib/models/Library.js +5 -0
  355. package/lib/models/Notebook.d.ts +11 -0
  356. package/lib/models/Notebook.js +5 -0
  357. package/lib/models/NotebookDTO.d.ts +96 -0
  358. package/lib/models/NotebookDTO.js +153 -0
  359. package/lib/models/Page.d.ts +41 -0
  360. package/lib/models/Page.js +25 -0
  361. package/lib/models/PageTag.d.ts +19 -0
  362. package/lib/models/PageTag.js +94 -0
  363. package/lib/models/ProjectDTO.d.ts +89 -0
  364. package/lib/models/ProjectDTO.js +131 -0
  365. package/lib/models/Runtime.d.ts +160 -0
  366. package/lib/models/Runtime.js +18 -0
  367. package/lib/models/RuntimeDTO.d.ts +172 -0
  368. package/lib/models/RuntimeDTO.js +204 -0
  369. package/lib/models/Space.d.ts +35 -0
  370. package/lib/models/Space.js +66 -0
  371. package/lib/models/SpaceDTO.d.ts +334 -0
  372. package/lib/models/SpaceDTO.js +244 -0
  373. package/lib/models/SpaceItem.d.ts +10 -0
  374. package/lib/models/SpaceItem.js +5 -0
  375. package/lib/models/SpaceMember.d.ts +6 -0
  376. package/lib/models/SpaceMember.js +5 -0
  377. package/lib/models/StudentItem.d.ts +21 -0
  378. package/lib/models/StudentItem.js +5 -0
  379. package/lib/models/index.d.ts +32 -0
  380. package/lib/models/index.js +39 -0
  381. package/lib/protocols/AGUIAdapter.js +1 -1
  382. package/lib/runtimes/actions.d.ts +102 -0
  383. package/lib/runtimes/actions.js +249 -0
  384. package/lib/runtimes/apis.d.ts +273 -0
  385. package/lib/runtimes/apis.js +5 -0
  386. package/lib/runtimes/index.d.ts +5 -0
  387. package/lib/runtimes/index.js +9 -0
  388. package/lib/runtimes/settings.d.ts +15 -0
  389. package/lib/runtimes/settings.js +31 -0
  390. package/lib/runtimes/snapshots.d.ts +25 -0
  391. package/lib/runtimes/snapshots.js +150 -0
  392. package/lib/runtimes/utils.d.ts +7 -0
  393. package/lib/runtimes/utils.js +14 -0
  394. package/lib/services/DatalayerServiceManager.d.ts +23 -0
  395. package/lib/services/DatalayerServiceManager.js +90 -0
  396. package/lib/services/reconnectToRuntime.d.ts +32 -0
  397. package/lib/services/reconnectToRuntime.js +59 -0
  398. package/lib/services/sandboxServiceManagers.d.ts +31 -0
  399. package/lib/services/sandboxServiceManagers.js +57 -0
  400. package/lib/specs/agents/agents.d.ts +95 -50
  401. package/lib/specs/agents/agents.js +4037 -1669
  402. package/lib/specs/agents/index.d.ts +5 -5
  403. package/lib/specs/agents/index.js +9 -9
  404. package/lib/specs/index.d.ts +1 -0
  405. package/lib/specs/index.js +1 -0
  406. package/lib/specs/loops.d.ts +34 -0
  407. package/lib/specs/loops.js +188 -0
  408. package/lib/specs/mcpServers.d.ts +1 -0
  409. package/lib/specs/mcpServers.js +17 -0
  410. package/lib/specs/models.d.ts +4 -0
  411. package/lib/specs/models.js +30 -0
  412. package/lib/specs/skills.d.ts +1 -0
  413. package/lib/specs/skills.js +18 -0
  414. package/lib/specs/tools.d.ts +15 -0
  415. package/lib/specs/tools.js +285 -0
  416. package/lib/state/index.d.ts +4 -0
  417. package/lib/state/index.js +10 -0
  418. package/lib/state/substates/CellState.d.ts +12 -0
  419. package/lib/state/substates/CellState.js +22 -0
  420. package/lib/state/substates/DocumentState.d.ts +10 -0
  421. package/lib/state/substates/DocumentState.js +14 -0
  422. package/lib/state/substates/GradeState.d.ts +10 -0
  423. package/lib/state/substates/GradeState.js +14 -0
  424. package/lib/state/substates/JupyterLabState.d.ts +16 -0
  425. package/lib/state/substates/JupyterLabState.js +17 -0
  426. package/lib/state/substates/NbformatState.d.ts +13 -0
  427. package/lib/state/substates/NbformatState.js +16 -0
  428. package/lib/state/substates/RuntimesState.d.ts +87 -0
  429. package/lib/state/substates/RuntimesState.js +192 -0
  430. package/lib/state/substates/SpaceState.d.ts +11 -0
  431. package/lib/state/substates/SpaceState.js +16 -0
  432. package/lib/state/substates/index.d.ts +8 -0
  433. package/lib/state/substates/index.js +14 -0
  434. package/lib/stores/agentRuntimeStore.d.ts +25 -2
  435. package/lib/stores/agentRuntimeStore.js +114 -19
  436. package/lib/stories/Button.stories.d.ts +1 -1
  437. package/lib/stories/Header.stories.d.ts +3 -3
  438. package/lib/test-setup.js +10 -0
  439. package/lib/types/agents-lifecycle.d.ts +5 -5
  440. package/lib/types/agents.d.ts +6 -6
  441. package/lib/types/agentspecs.d.ts +8 -4
  442. package/lib/types/chat.d.ts +135 -3
  443. package/lib/types/config.d.ts +19 -1
  444. package/lib/types/index.d.ts +1 -0
  445. package/lib/types/index.js +1 -0
  446. package/lib/types/loops.d.ts +64 -0
  447. package/lib/types/loops.js +5 -0
  448. package/lib/types/teams.d.ts +2 -2
  449. package/lib/types/tools.d.ts +16 -0
  450. package/lib/utils/Cells.d.ts +2 -0
  451. package/lib/utils/Cells.js +28 -0
  452. package/package.json +24 -18
  453. package/scripts/codegen/generate_agents.py +96 -61
  454. package/scripts/codegen/generate_loops.py +443 -0
  455. package/scripts/codegen/generate_teams.py +4 -4
  456. package/lib/examples/A2UiComponentGalleryExample.d.ts +0 -3
  457. package/lib/examples/A2UiComponentGalleryExample.js +0 -361
  458. package/scripts/codegen/__pycache__/generate_agents.cpython-313.pyc +0 -0
  459. package/scripts/codegen/__pycache__/generate_benchmarks.cpython-313.pyc +0 -0
  460. package/scripts/codegen/__pycache__/generate_evals.cpython-313.pyc +0 -0
  461. package/scripts/codegen/__pycache__/generate_events.cpython-313.pyc +0 -0
  462. /package/lib/{agent-lexical-main.d.ts → agent-document-main.d.ts} +0 -0
@@ -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
+ };
@@ -30,6 +30,18 @@ export function ToolApprovalCard({ approval, onApprove, onReject, onToggleRead,
30
30
  const detailLabelSx = { color: 'fg.muted' };
31
31
  const detailValueSx = { color: 'fg.default' };
32
32
  const isRead = approval.isRead ?? false;
33
+ const statusDescriptor = approval.status === 'approved_with_changes'
34
+ ? 'approved with changes'
35
+ : approval.status;
36
+ // Review text must follow status, not only reviewedAt.
37
+ // Some websocket flows can have an already-decided status before reviewer
38
+ // metadata is hydrated; rendering "review pending" in that window is
39
+ // misleading, so non-pending statuses get a status-based summary.
40
+ const reviewSummary = approval.reviewedAt
41
+ ? `, reviewed by ${approval.reviewedBy || 'reviewer'} ${formatRelativeTime(approval.reviewedAt)}`
42
+ : approval.status === 'pending'
43
+ ? ', review pending'
44
+ : `, ${statusDescriptor}`;
33
45
  return (_jsx(Box, { sx: {
34
46
  p: 3,
35
47
  borderRadius: 2,
@@ -47,9 +59,7 @@ export function ToolApprovalCard({ approval, onApprove, onReject, onToggleRead,
47
59
  gap: 2,
48
60
  mb: 1,
49
61
  flexWrap: 'wrap',
50
- }, children: [_jsx(Text, { sx: { fontWeight: 'bold', fontSize: 2 }, children: approval.toolName }), _jsx(Label, { variant: statusConfig.variant, children: statusConfig.label }), _jsx(Label, { variant: riskConfig.variant, children: riskConfig.label }), !isRead && _jsx(Label, { variant: "accent", children: "Unread" })] }), _jsxs(Text, { sx: { color: 'fg.muted', fontSize: 0, display: 'block' }, children: ["Requested by ", approval.requestedBy, ' ', formatRelativeTime(approval.requestedAt), approval.reviewedAt
51
- ? `, reviewed by ${approval.reviewedBy || 'reviewer'} ${formatRelativeTime(approval.reviewedAt)}`
52
- : ', review pending'] }), _jsx(Box, { sx: {
62
+ }, children: [_jsx(Text, { sx: { fontWeight: 'bold', fontSize: 2 }, children: approval.toolName }), _jsx(Label, { variant: statusConfig.variant, children: statusConfig.label }), _jsx(Label, { variant: riskConfig.variant, children: riskConfig.label }), !isRead && _jsx(Label, { variant: "accent", children: "Unread" })] }), _jsxs(Text, { sx: { color: 'fg.muted', fontSize: 0, display: 'block' }, children: ["Requested by ", approval.requestedBy, ' ', formatRelativeTime(approval.requestedAt), reviewSummary] }), _jsx(Box, { sx: {
53
63
  mt: 2,
54
64
  width: '100%',
55
65
  p: 2,
@@ -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;