@datalayer/agent-runtimes 1.0.28 → 1.3.10

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 (776) hide show
  1. package/lib/AgentDocument.js +5 -22
  2. package/lib/AgentNode.d.ts +1 -1
  3. package/lib/AgentNode.js +193 -23
  4. package/lib/AgentNotebook.js +1 -1
  5. package/lib/App.d.ts +1 -1
  6. package/lib/AppExamples2.d.ts +1 -1
  7. package/lib/agent-node/AgentNodeGallery.d.ts +14 -1
  8. package/lib/agent-node/AgentNodeGallery.js +19 -15
  9. package/lib/agent-node/themeStore.js +7 -6
  10. package/lib/agents/AgentDetails.d.ts +8 -2
  11. package/lib/agents/AgentDetails.js +41 -11
  12. package/lib/agents/AgentRuntimeChat.d.ts +3 -3
  13. package/lib/agents/AgentRuntimeChat.js +15 -15
  14. package/lib/api/agents.d.ts +10 -10
  15. package/lib/api/agents.js +15 -15
  16. package/lib/api/checkpoints.d.ts +40 -0
  17. package/lib/api/checkpoints.js +75 -0
  18. package/lib/api/index.d.ts +1 -0
  19. package/lib/api/index.js +18 -5
  20. package/lib/api/notifications.d.ts +21 -6
  21. package/lib/api/notifications.js +32 -14
  22. package/lib/api/runtimes/environments.d.ts +385 -4
  23. package/lib/api/runtimes/environments.js +610 -9
  24. package/lib/api/runtimes/runtimes.d.ts +19 -19
  25. package/lib/api/runtimes/runtimes.js +47 -46
  26. package/lib/api/spacer/notebooks.js +1 -1
  27. package/lib/chat/Chat.d.ts +16 -4
  28. package/lib/chat/Chat.js +18 -5
  29. package/lib/chat/ChatFloating.d.ts +13 -2
  30. package/lib/chat/ChatFloating.js +192 -117
  31. package/lib/chat/ChatInline.d.ts +15 -0
  32. package/lib/chat/ChatInline.js +0 -18
  33. package/lib/chat/ChatPopupStandalone.d.ts +1 -1
  34. package/lib/chat/ChatSidebar.d.ts +14 -2
  35. package/lib/chat/ChatSidebar.js +1 -1
  36. package/lib/chat/ChatStandalone.d.ts +1 -1
  37. package/lib/chat/EphemeralSurfaceControl.d.ts +30 -0
  38. package/lib/chat/EphemeralSurfaceControl.js +55 -0
  39. package/lib/chat/base/ChatAvailability.d.ts +34 -0
  40. package/lib/chat/base/ChatAvailability.js +18 -0
  41. package/lib/chat/base/ChatBase.d.ts +2 -1
  42. package/lib/chat/base/ChatBase.js +657 -28
  43. package/lib/chat/display/EmptyState.d.ts +15 -1
  44. package/lib/chat/display/EmptyState.js +78 -12
  45. package/lib/chat/display/FloatingBrandButton.d.ts +1 -1
  46. package/lib/chat/display/PoweredByTag.d.ts +1 -1
  47. package/lib/chat/display/groupSuggestions.d.ts +21 -0
  48. package/lib/chat/display/groupSuggestions.js +18 -0
  49. package/lib/chat/document/EphemeralDocument.d.ts +70 -6
  50. package/lib/chat/document/EphemeralDocument.js +154 -52
  51. package/lib/chat/header/ChatHeader.d.ts +1 -1
  52. package/lib/chat/header/ChatHeaderBase.d.ts +10 -1
  53. package/lib/chat/header/ChatHeaderBase.js +67 -96
  54. package/lib/chat/index.d.ts +4 -1
  55. package/lib/chat/index.js +8 -1
  56. package/lib/chat/indicators/McpStatusIndicator.d.ts +1 -1
  57. package/lib/chat/indicators/SandboxStatusIndicator.d.ts +1 -1
  58. package/lib/chat/indicators/SandboxStatusIndicator.js +1 -1
  59. package/lib/chat/indicators/SkillsStatusIndicator.d.ts +1 -1
  60. package/lib/chat/messages/ChatMessageList.d.ts +22 -1
  61. package/lib/chat/messages/ChatMessageList.js +370 -166
  62. package/lib/chat/messages/ChatMessages.d.ts +1 -1
  63. package/lib/chat/messages/NotebookToolSurfaces.d.ts +68 -0
  64. package/lib/chat/messages/NotebookToolSurfaces.js +302 -0
  65. package/lib/chat/messages/TurnFooter.d.ts +42 -0
  66. package/lib/chat/messages/TurnFooter.js +75 -0
  67. package/lib/chat/messages/assistantMarkdown.d.ts +22 -0
  68. package/lib/chat/messages/assistantMarkdown.js +56 -0
  69. package/lib/chat/notebook/EphemeralNotebook.d.ts +67 -6
  70. package/lib/chat/notebook/EphemeralNotebook.js +194 -61
  71. package/lib/chat/parts/DynamicToolPart.d.ts +1 -1
  72. package/lib/chat/parts/MessagePart.d.ts +1 -1
  73. package/lib/chat/parts/ReasoningPart.d.ts +8 -1
  74. package/lib/chat/parts/TextPart.d.ts +1 -1
  75. package/lib/chat/parts/ToolPart.d.ts +8 -1
  76. package/lib/chat/prompt/FloatingCard.d.ts +26 -0
  77. package/lib/chat/prompt/FloatingCard.js +80 -0
  78. package/lib/chat/prompt/InputPrompt.d.ts +206 -53
  79. package/lib/chat/prompt/InputPrompt.js +161 -80
  80. package/lib/chat/prompt/InputPromptBase.d.ts +112 -0
  81. package/lib/chat/prompt/InputPromptBase.js +225 -0
  82. package/lib/chat/prompt/InputPromptLexical.d.ts +18 -1
  83. package/lib/chat/prompt/InputPromptLexical.js +227 -30
  84. package/lib/chat/prompt/InputPromptText.d.ts +10 -2
  85. package/lib/chat/prompt/InputPromptText.js +35 -3
  86. package/lib/chat/prompt/footer/BelowPromptFooter.d.ts +25 -0
  87. package/lib/chat/prompt/footer/BelowPromptFooter.js +12 -0
  88. package/lib/chat/prompt/footer/InPromptFooter.d.ts +35 -0
  89. package/lib/chat/prompt/footer/InPromptFooter.js +16 -0
  90. package/lib/chat/prompt/footer/index.d.ts +7 -0
  91. package/lib/chat/prompt/footer/index.js +11 -0
  92. package/lib/chat/prompt/header/BelowPromptHeader.d.ts +23 -0
  93. package/lib/chat/prompt/header/BelowPromptHeader.js +12 -0
  94. package/lib/chat/prompt/header/InPromptHeader.d.ts +31 -0
  95. package/lib/chat/prompt/header/InPromptHeader.js +14 -0
  96. package/lib/chat/prompt/header/index.d.ts +7 -0
  97. package/lib/chat/prompt/header/index.js +11 -0
  98. package/lib/chat/prompt/index.d.ts +8 -4
  99. package/lib/chat/prompt/index.js +15 -3
  100. package/lib/chat/prompt/menus/AgentsMenu.d.ts +14 -0
  101. package/lib/chat/prompt/menus/AgentsMenu.js +42 -0
  102. package/lib/chat/prompt/menus/InlineAgentsMenu.d.ts +22 -0
  103. package/lib/chat/prompt/menus/InlineAgentsMenu.js +24 -0
  104. package/lib/chat/prompt/menus/ModelSelector.d.ts +7 -0
  105. package/lib/chat/prompt/menus/ModelSelector.js +27 -0
  106. package/lib/chat/prompt/menus/SkillsMenu.d.ts +10 -0
  107. package/lib/chat/prompt/menus/SkillsMenu.js +75 -0
  108. package/lib/chat/prompt/menus/SuggestionsMenu.d.ts +13 -0
  109. package/lib/chat/prompt/menus/SuggestionsMenu.js +31 -0
  110. package/lib/chat/prompt/menus/ToolsMenu.d.ts +13 -0
  111. package/lib/chat/prompt/menus/ToolsMenu.js +103 -0
  112. package/lib/chat/prompt/menus/index.d.ts +15 -0
  113. package/lib/chat/prompt/menus/index.js +19 -0
  114. package/lib/chat/prompt/plugins/AgentMentionPlugin.d.ts +54 -0
  115. package/lib/chat/prompt/plugins/AgentMentionPlugin.js +370 -0
  116. package/lib/chat/prompt/plugins/CommandPlugin.d.ts +52 -0
  117. package/lib/chat/prompt/plugins/CommandPlugin.js +359 -0
  118. package/lib/chat/prompt/plugins/MentionChip.d.ts +15 -0
  119. package/lib/chat/prompt/plugins/MentionChip.js +24 -0
  120. package/lib/chat/prompt/plugins/MentionNode.d.ts +66 -0
  121. package/lib/chat/prompt/plugins/MentionNode.js +77 -0
  122. package/lib/chat/prompt/promptHistory.d.ts +52 -0
  123. package/lib/chat/prompt/promptHistory.js +123 -0
  124. package/lib/chat/prompt/stack.d.ts +81 -0
  125. package/lib/chat/prompt/stack.js +41 -0
  126. package/lib/chat/prompt/useTypingPlaceholder.d.ts +52 -0
  127. package/lib/chat/prompt/useTypingPlaceholder.js +180 -0
  128. package/lib/chat/tools/A2AAgentDialog.d.ts +60 -0
  129. package/lib/chat/tools/A2AAgentDialog.js +265 -0
  130. package/lib/chat/tools/ToolApprovalBanner.d.ts +1 -1
  131. package/lib/chat/tools/ToolApprovalDialog.d.ts +1 -1
  132. package/lib/chat/tools/ToolCallDisplay.d.ts +8 -1
  133. package/lib/chat/tools/index.d.ts +1 -0
  134. package/lib/chat/tools/index.js +1 -0
  135. package/lib/chat/usage/ContextPie.d.ts +17 -0
  136. package/lib/chat/usage/{TokenUsageBar.js → ContextPie.js} +20 -14
  137. package/lib/chat/useViewportDrag.d.ts +11 -0
  138. package/lib/chat/useViewportDrag.js +61 -0
  139. package/lib/chat/viewModes.d.ts +51 -0
  140. package/lib/chat/viewModes.js +57 -0
  141. package/lib/client/AgentRuntimesClient.d.ts +10 -9
  142. package/lib/client/AgentRuntimesClient.js +1 -1
  143. package/lib/client/AgentRuntimesClientContext.d.ts +1 -0
  144. package/lib/client/AgentsMixin.d.ts +12 -12
  145. package/lib/client/AgentsMixin.js +31 -31
  146. package/lib/client/IAgentRuntimesClient.d.ts +10 -10
  147. package/lib/client/SdkAgentRuntimesClient.d.ts +10 -10
  148. package/lib/client/SdkAgentRuntimesClient.js +10 -10
  149. package/lib/client/mixins/RuntimesMixin.d.ts +37 -10
  150. package/lib/client/mixins/RuntimesMixin.js +54 -21
  151. package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +1 -1
  152. package/lib/components/agents/AgentSummary.d.ts +13 -0
  153. package/lib/components/agents/AgentSummary.js +21 -4
  154. package/lib/components/cards/NotificationEventCard.d.ts +1 -1
  155. package/lib/components/cards/OutputCard.d.ts +1 -1
  156. package/lib/components/cards/ToolApprovalCard.d.ts +2 -2
  157. package/lib/components/cards/ToolApprovalCard.js +1 -0
  158. package/lib/components/code-sandboxes/CodeSandboxCellVariables.d.ts +1 -0
  159. package/lib/components/code-sandboxes/CodeSandboxCellVariables.js +0 -4
  160. package/lib/components/code-sandboxes/CodeSandboxCellVariablesDialog.d.ts +1 -0
  161. package/lib/components/code-sandboxes/CodeSandboxCellVariablesDialog.js +0 -4
  162. package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.d.ts +76 -0
  163. package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.js +81 -0
  164. package/lib/components/code-sandboxes/CodeSandboxLauncher.d.ts +12 -0
  165. package/lib/components/code-sandboxes/CodeSandboxLauncher.js +132 -25
  166. package/lib/components/code-sandboxes/CodeSandboxNames.js +75 -29
  167. package/lib/components/code-sandboxes/CodeSandboxPicker.d.ts +14 -1
  168. package/lib/components/code-sandboxes/CodeSandboxPicker.js +226 -45
  169. package/lib/components/code-sandboxes/CodeSandboxPickerCell.d.ts +1 -0
  170. package/lib/components/code-sandboxes/CodeSandboxPickerCell.js +0 -4
  171. package/lib/components/code-sandboxes/CodeSandboxReservationControl.d.ts +1 -0
  172. package/lib/components/code-sandboxes/CodeSandboxReservationControl.js +5 -7
  173. package/lib/components/code-sandboxes/CodeSandboxTransfer.d.ts +5 -0
  174. package/lib/components/code-sandboxes/CodeSandboxUtils.d.ts +16 -1
  175. package/lib/components/code-sandboxes/CodeSandboxUtils.js +69 -12
  176. package/lib/components/code-sandboxes/NewCodeSandboxControls.d.ts +21 -15
  177. package/lib/components/code-sandboxes/NewCodeSandboxControls.js +28 -51
  178. package/lib/components/code-sandboxes/codeSandboxAllowance.d.ts +33 -0
  179. package/lib/components/code-sandboxes/codeSandboxAllowance.js +37 -0
  180. package/lib/components/code-sandboxes/codeSandboxEnvironments.d.ts +86 -0
  181. package/lib/components/code-sandboxes/codeSandboxEnvironments.js +147 -0
  182. package/lib/components/code-sandboxes/codeSandboxProviders.d.ts +29 -0
  183. package/lib/components/code-sandboxes/codeSandboxProviders.js +90 -0
  184. package/lib/components/code-sandboxes/index.d.ts +3 -0
  185. package/lib/components/code-sandboxes/index.js +3 -0
  186. package/lib/components/context/SpaceSelect.d.ts +1 -1
  187. package/lib/components/flashes/FlashDisclaimer.d.ts +1 -1
  188. package/lib/components/icons/ArtifactIcon.d.ts +1 -0
  189. package/lib/components/nbgrader/NbGradesDetails.d.ts +1 -1
  190. package/lib/components/progress/CreditsIndicator.d.ts +1 -0
  191. package/lib/components/progress/CreditsIndicator.js +0 -4
  192. package/lib/components/scheduler/ScheduleMenu.d.ts +1 -1
  193. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +3 -2
  194. package/lib/components/snapshots/SandboxSnapshotMenu.js +11 -15
  195. package/lib/components/snippets/SnippetDialog.d.ts +1 -0
  196. package/lib/components/snippets/SnippetDialog.js +0 -4
  197. package/lib/components/specs/SpecPayloadPreview.d.ts +34 -0
  198. package/lib/components/specs/SpecPayloadPreview.js +102 -0
  199. package/lib/components/tokens/SpaceVariantToken.d.ts +1 -1
  200. package/lib/context/ContextDistribution.d.ts +1 -1
  201. package/lib/context/ContextInspector.d.ts +2 -1
  202. package/lib/context/ContextPanel.d.ts +1 -1
  203. package/lib/context/ContextUsage.d.ts +1 -1
  204. package/lib/context/CostTracker.d.ts +1 -1
  205. package/lib/context/CostUsageChart.d.ts +1 -1
  206. package/lib/context/CostUsageChart.js +4 -4
  207. package/lib/context/MessageHistory.d.ts +3 -2
  208. package/lib/context/TokenUsageChart.d.ts +1 -1
  209. package/lib/context/TokenUsageChart.js +4 -4
  210. package/lib/examples/A2UiAgentExample.js +15 -6
  211. package/lib/examples/A2UiComponentsGalleryExample.d.ts +10 -0
  212. package/lib/examples/A2UiComponentsGalleryExample.js +24 -855
  213. package/lib/examples/A2UiContactCardExample.d.ts +10 -0
  214. package/lib/examples/A2UiContactCardExample.js +23 -170
  215. package/lib/examples/A2UiJupyterOutputExample.d.ts +3 -0
  216. package/lib/examples/A2UiJupyterOutputExample.js +792 -0
  217. package/lib/examples/A2UiRestaurantExample.d.ts +10 -0
  218. package/lib/examples/A2UiRestaurantExample.js +24 -179
  219. package/lib/examples/A2UiViewerExample.d.ts +10 -0
  220. package/lib/examples/A2UiViewerExample.js +24 -378
  221. package/lib/examples/AgUiAgenticExample.js +2 -4
  222. package/lib/examples/AgUiBackendToolRenderingExample.js +3 -5
  223. package/lib/examples/AgUiHaikuGenUiExample.js +2 -4
  224. package/lib/examples/AgUiHumanInTheLoopExample.js +2 -4
  225. package/lib/examples/AgUiSharedStateExample.js +2 -4
  226. package/lib/examples/AgUiToolsBasedGenUiExample.js +2 -4
  227. package/lib/examples/AgentA2AExample.d.ts +17 -0
  228. package/lib/examples/AgentA2AExample.js +56 -0
  229. package/lib/examples/AgentCheckpointsExample.d.ts +9 -10
  230. package/lib/examples/AgentCheckpointsExample.js +72 -54
  231. package/lib/examples/AgentCodeSandboxExample.d.ts +7 -7
  232. package/lib/examples/AgentCodeSandboxExample.js +93 -303
  233. package/lib/examples/AgentCodeSandboxesExample.d.ts +10 -0
  234. package/lib/examples/AgentCodeSandboxesExample.js +56 -162
  235. package/lib/examples/AgentCodemodeExample.d.ts +7 -2
  236. package/lib/examples/AgentCodemodeExample.js +60 -125
  237. package/lib/examples/AgentCompactionExample.js +19 -135
  238. package/lib/examples/AgentEvalsExample.js +34 -66
  239. package/lib/examples/AgentGuardrailsExample.js +64 -112
  240. package/lib/examples/AgentHooksExample.d.ts +11 -0
  241. package/lib/examples/AgentHooksExample.js +30 -67
  242. package/lib/examples/AgentInferenceProviderExample.js +8 -32
  243. package/lib/examples/AgentLoopExample.d.ts +4 -2
  244. package/lib/examples/AgentLoopExample.js +45 -93
  245. package/lib/examples/AgentMCPExample.js +30 -79
  246. package/lib/examples/AgentMemoryExample.js +21 -64
  247. package/lib/examples/AgentMonitoringExample.js +33 -94
  248. package/lib/examples/AgentNotificationsExample.js +56 -95
  249. package/lib/examples/AgentOtelExample.js +35 -88
  250. package/lib/examples/AgentOutputsExample.d.ts +2 -1
  251. package/lib/examples/AgentOutputsExample.js +16 -137
  252. package/lib/examples/AgentParametersExample.js +7 -17
  253. package/lib/examples/AgentSkillsExample.js +40 -154
  254. package/lib/examples/AgentSubagentsExample.d.ts +7 -6
  255. package/lib/examples/AgentSubagentsExample.js +80 -191
  256. package/lib/examples/AgentToolApprovalsExample.js +35 -91
  257. package/lib/examples/AgentTriggersExample.js +43 -59
  258. package/lib/examples/AgentspecsExample.js +7 -7
  259. package/lib/examples/CellExample.d.ts +1 -1
  260. package/lib/examples/ChatExample.d.ts +12 -5
  261. package/lib/examples/ChatExample.js +38 -13
  262. package/lib/examples/CopilotKitLexicalExample.d.ts +1 -0
  263. package/lib/examples/CopilotKitLexicalExample.js +4 -41
  264. package/lib/examples/CopilotKitNotebookExample.d.ts +10 -0
  265. package/lib/examples/CopilotKitNotebookExample.js +2 -14
  266. package/lib/examples/DecksAgent.d.ts +21 -0
  267. package/lib/examples/DecksAgent.js +23 -0
  268. package/lib/examples/DocumentPageAgent.d.ts +19 -0
  269. package/lib/examples/DocumentPageAgent.js +15 -0
  270. package/lib/examples/Lexical2Example.d.ts +2 -2
  271. package/lib/examples/Lexical2Example.js +17 -38
  272. package/lib/examples/LexicalAgentExample.d.ts +2 -1
  273. package/lib/examples/LexicalAgentExample.js +29 -102
  274. package/lib/examples/LexicalAgentSidebarExample.d.ts +16 -5
  275. package/lib/examples/LexicalAgentSidebarExample.js +99 -131
  276. package/lib/examples/LoopShellExample.d.ts +38 -0
  277. package/lib/examples/LoopShellExample.js +68 -0
  278. package/lib/examples/LoopWorkspaceEmbed.d.ts +50 -0
  279. package/lib/examples/LoopWorkspaceEmbed.js +73 -0
  280. package/lib/examples/LoopWorkspaceExample.d.ts +150 -0
  281. package/lib/examples/LoopWorkspaceExample.js +151 -0
  282. package/lib/examples/NotebookAgentExample.d.ts +13 -0
  283. package/lib/examples/NotebookAgentExample.js +36 -86
  284. package/lib/examples/NotebookAgentSidebarExample.d.ts +10 -4
  285. package/lib/examples/NotebookAgentSidebarExample.js +39 -83
  286. package/lib/examples/NotebookCollaborationExample.d.ts +1 -1
  287. package/lib/examples/NotebookCollaborationExample.js +108 -20
  288. package/lib/examples/NotebookExample.d.ts +1 -1
  289. package/lib/examples/NotebookExample.js +20 -10
  290. package/lib/examples/NotebookPageAgent.d.ts +23 -0
  291. package/lib/examples/NotebookPageAgent.js +17 -0
  292. package/lib/examples/components/ExampleWrapper.d.ts +5 -0
  293. package/lib/examples/components/ExampleWrapper.js +36 -28
  294. package/lib/examples/components/LexicalEditor.d.ts +1 -1
  295. package/lib/examples/components/LexicalEditor.js +4 -24
  296. package/lib/examples/components/haiku/HaikuDisplay.d.ts +1 -1
  297. package/lib/examples/components/haiku/InlineHaikuCard.d.ts +1 -1
  298. package/lib/examples/components/weather/InlineWeatherCard.d.ts +1 -1
  299. package/lib/examples/example-selector.js +26 -6
  300. package/lib/examples/hooks/useCreateAgentOnce.d.ts +41 -0
  301. package/lib/examples/hooks/useCreateAgentOnce.js +51 -0
  302. package/lib/examples/hooks/useExampleAgentProtocol.d.ts +35 -0
  303. package/lib/examples/hooks/useExampleAgentProtocol.js +63 -0
  304. package/lib/examples/hooks/useExampleAgentRuntime.d.ts +16 -16
  305. package/lib/examples/hooks/useExampleAgentRuntime.js +26 -25
  306. package/lib/examples/hooks/useExampleAgentRuntimes.js +45 -61
  307. package/lib/examples/hooks/useExampleJupyterAgent.d.ts +91 -0
  308. package/lib/examples/hooks/useExampleJupyterAgent.js +151 -0
  309. package/lib/examples/index.d.ts +4 -0
  310. package/lib/examples/index.js +6 -0
  311. package/lib/examples/lexical/editorConfig.d.ts +2 -75
  312. package/lib/examples/lexical/editorConfig.js +26 -48
  313. package/lib/examples/lexical/lexical-theme.css +65 -47
  314. package/lib/examples/main.js +450 -322
  315. package/lib/examples/scenes/A2UiComponentsGalleryScene.d.ts +3 -0
  316. package/lib/examples/scenes/A2UiComponentsGalleryScene.js +872 -0
  317. package/lib/examples/scenes/A2UiContactCardScene.d.ts +3 -0
  318. package/lib/examples/scenes/A2UiContactCardScene.js +188 -0
  319. package/lib/examples/scenes/A2UiRestaurantScene.d.ts +3 -0
  320. package/lib/examples/scenes/A2UiRestaurantScene.js +196 -0
  321. package/lib/examples/scenes/A2UiViewerScene.d.ts +3 -0
  322. package/lib/examples/scenes/A2UiViewerScene.js +395 -0
  323. package/lib/examples/utils/agentSummaryStore.d.ts +7 -1
  324. package/lib/examples/utils/agents/earthquake-detector.ipynb.json +1 -1
  325. package/lib/examples/utils/agents/earthquake-detector.lexical.json +1 -1
  326. package/lib/examples/utils/agents/sales-forecaster.ipynb.json +1 -1
  327. package/lib/examples/utils/agents/sales-forecaster.lexical.json +1 -1
  328. package/lib/examples/utils/agents/social-post-generator.ipynb.json +1 -1
  329. package/lib/examples/utils/agents/social-post-generator.lexical.json +1 -1
  330. package/lib/examples/utils/exampleSurfaces.d.ts +31 -0
  331. package/lib/examples/utils/exampleSurfaces.js +38 -0
  332. package/lib/examples/utils/jupyterSandboxUrl.d.ts +27 -0
  333. package/lib/examples/utils/jupyterSandboxUrl.js +55 -0
  334. package/lib/examples/utils/localUrl.d.ts +2 -0
  335. package/lib/examples/utils/localUrl.js +49 -0
  336. package/lib/examples/utils/notebookToolbarItems.d.ts +46 -0
  337. package/lib/examples/utils/notebookToolbarItems.js +129 -0
  338. package/lib/examples/utils/runtimeTargetStore.d.ts +40 -1
  339. package/lib/examples/utils/runtimeTargetStore.js +82 -1
  340. package/lib/examples/utils/themedProvider.d.ts +7 -0
  341. package/lib/examples/utils/themedProvider.js +57 -4
  342. package/lib/examples/utils/useExampleAgentRuntimesUrl.js +30 -5
  343. package/lib/examples/utils/waitForAgent.d.ts +23 -0
  344. package/lib/examples/utils/waitForAgent.js +24 -0
  345. package/lib/examples2/CellExample.d.ts +1 -1
  346. package/lib/examples2/DatalayerNotebookExample.d.ts +1 -1
  347. package/lib/examples2/NotebookExample.d.ts +1 -1
  348. package/lib/examples2/NotebookMutationsKernel.d.ts +1 -1
  349. package/lib/examples2/NotebookMutationsServiceManager.d.ts +1 -1
  350. package/lib/examples2/main.js +24 -4
  351. package/lib/extensions/A2UIExtension.d.ts +1 -1
  352. package/lib/hooks/index.d.ts +8 -5
  353. package/lib/hooks/index.js +20 -5
  354. package/lib/hooks/useAgentRuntimes.d.ts +49 -22
  355. package/lib/hooks/useAgentRuntimes.js +214 -90
  356. package/lib/hooks/useAgentsCatalog.js +32 -4
  357. package/lib/hooks/useBrowserAgent.d.ts +26 -0
  358. package/lib/hooks/useBrowserAgent.js +75 -0
  359. package/lib/hooks/useBrowserInference.d.ts +27 -0
  360. package/lib/hooks/useBrowserInference.js +67 -0
  361. package/lib/hooks/useCheckpoints.d.ts +8 -17
  362. package/lib/hooks/useCheckpoints.js +25 -59
  363. package/lib/hooks/useConfig.d.ts +1 -1
  364. package/lib/hooks/useConfig.js +5 -1
  365. package/lib/hooks/useContextSnapshot.d.ts +18 -7
  366. package/lib/hooks/useContextSnapshot.js +14 -10
  367. package/lib/hooks/useNotifications.d.ts +11 -11
  368. package/lib/hooks/useNotifications.js +1 -1
  369. package/lib/hooks/useProjects.d.ts +7 -19
  370. package/lib/hooks/useProjects.js +5 -5
  371. package/lib/hooks/useSkills.d.ts +0 -1
  372. package/lib/hooks/useSkills.js +6 -2
  373. package/lib/hooks/useToolApprovals.d.ts +8 -8
  374. package/lib/hooks/useToolApprovals.js +3 -3
  375. package/lib/identity/AgentIdentity.d.ts +9 -2
  376. package/lib/identity/index.d.ts +1 -1
  377. package/lib/identity/index.js +1 -1
  378. package/lib/identity/types.d.ts +1 -1
  379. package/lib/identity/types.js +1 -1
  380. package/lib/index.d.ts +1 -0
  381. package/lib/index.js +4 -0
  382. package/lib/jupyter/index.d.ts +2 -1
  383. package/lib/jupyter/index.js +2 -1
  384. package/lib/jupyter/serverExecution.d.ts +78 -0
  385. package/lib/jupyter/serverExecution.js +258 -0
  386. package/lib/jupyter/useResumeServerExecutions.d.ts +11 -0
  387. package/lib/jupyter/useResumeServerExecutions.js +64 -0
  388. package/lib/lexical/ChatInlinePlugin.d.ts +33 -0
  389. package/lib/lexical/ChatInlinePlugin.js +0 -36
  390. package/lib/loop/core/focusRequests.d.ts +10 -0
  391. package/lib/loop/core/focusRequests.js +46 -0
  392. package/lib/loop/core/index.d.ts +894 -0
  393. package/lib/loop/core/index.js +264 -0
  394. package/lib/loop/core/promptStore.d.ts +44 -0
  395. package/lib/loop/core/promptStore.js +63 -0
  396. package/lib/loop/core/surfaceRequests.d.ts +33 -0
  397. package/lib/loop/core/surfaceRequests.js +29 -0
  398. package/lib/loop/core/toolbar.d.ts +28 -0
  399. package/lib/loop/core/toolbar.js +59 -0
  400. package/lib/loop/embed/LoopEmbed.d.ts +57 -0
  401. package/lib/loop/embed/LoopEmbed.js +118 -0
  402. package/lib/loop/extensions.d.ts +10 -0
  403. package/lib/loop/extensions.js +49 -0
  404. package/lib/loop/index.d.ts +68 -0
  405. package/lib/loop/index.js +87 -0
  406. package/lib/loop/plugins/a2a-sidebar/A2ASidebar.d.ts +48 -0
  407. package/lib/loop/plugins/a2a-sidebar/A2ASidebar.js +190 -0
  408. package/lib/loop/plugins/a2a-sidebar/index.d.ts +5 -0
  409. package/lib/loop/plugins/a2a-sidebar/index.js +39 -0
  410. package/lib/loop/plugins/a2ui/A2uiView.d.ts +12 -0
  411. package/lib/loop/plugins/a2ui/A2uiView.js +97 -0
  412. package/lib/loop/plugins/a2ui/index.d.ts +3 -0
  413. package/lib/loop/plugins/a2ui/index.js +50 -0
  414. package/lib/loop/plugins/a2ui-scene/index.d.ts +36 -0
  415. package/lib/loop/plugins/a2ui-scene/index.js +28 -0
  416. package/lib/loop/plugins/agent-a2a/index.d.ts +3 -0
  417. package/lib/loop/plugins/agent-a2a/index.js +26 -0
  418. package/lib/loop/plugins/agent-a2ui/index.d.ts +3 -0
  419. package/lib/loop/plugins/agent-a2ui/index.js +42 -0
  420. package/lib/loop/plugins/agent-a2ui-jupyter-output/index.d.ts +3 -0
  421. package/lib/loop/plugins/agent-a2ui-jupyter-output/index.js +53 -0
  422. package/lib/loop/plugins/agent-capacity/index.d.ts +39 -0
  423. package/lib/loop/plugins/agent-capacity/index.js +52 -0
  424. package/lib/loop/plugins/agent-checkpoints/index.d.ts +3 -0
  425. package/lib/loop/plugins/agent-checkpoints/index.js +26 -0
  426. package/lib/loop/plugins/agent-code-sandbox/index.d.ts +3 -0
  427. package/lib/loop/plugins/agent-code-sandbox/index.js +24 -0
  428. package/lib/loop/plugins/agent-code-sandboxes/index.d.ts +13 -0
  429. package/lib/loop/plugins/agent-code-sandboxes/index.js +85 -0
  430. package/lib/loop/plugins/agent-codemode/index.d.ts +5 -0
  431. package/lib/loop/plugins/agent-codemode/index.js +41 -0
  432. package/lib/loop/plugins/agent-compaction/index.d.ts +10 -0
  433. package/lib/loop/plugins/agent-compaction/index.js +34 -0
  434. package/lib/loop/plugins/agent-evals/index.d.ts +3 -0
  435. package/lib/loop/plugins/agent-evals/index.js +25 -0
  436. package/lib/loop/plugins/agent-guardrails/index.d.ts +3 -0
  437. package/lib/loop/plugins/agent-guardrails/index.js +25 -0
  438. package/lib/loop/plugins/agent-hooks/index.d.ts +3 -0
  439. package/lib/loop/plugins/agent-hooks/index.js +28 -0
  440. package/lib/loop/plugins/agent-inference/index.d.ts +7 -0
  441. package/lib/loop/plugins/agent-inference/index.js +29 -0
  442. package/lib/loop/plugins/agent-mcp/index.d.ts +3 -0
  443. package/lib/loop/plugins/agent-mcp/index.js +25 -0
  444. package/lib/loop/plugins/agent-memory/index.d.ts +3 -0
  445. package/lib/loop/plugins/agent-memory/index.js +25 -0
  446. package/lib/loop/plugins/agent-monitoring/index.d.ts +3 -0
  447. package/lib/loop/plugins/agent-monitoring/index.js +25 -0
  448. package/lib/loop/plugins/agent-notifications/index.d.ts +3 -0
  449. package/lib/loop/plugins/agent-notifications/index.js +25 -0
  450. package/lib/loop/plugins/agent-otel/index.d.ts +3 -0
  451. package/lib/loop/plugins/agent-otel/index.js +25 -0
  452. package/lib/loop/plugins/agent-outputs/index.d.ts +3 -0
  453. package/lib/loop/plugins/agent-outputs/index.js +25 -0
  454. package/lib/loop/plugins/agent-parameters/index.d.ts +3 -0
  455. package/lib/loop/plugins/agent-parameters/index.js +25 -0
  456. package/lib/loop/plugins/agent-skills/index.d.ts +3 -0
  457. package/lib/loop/plugins/agent-skills/index.js +25 -0
  458. package/lib/loop/plugins/agent-subagents/index.d.ts +3 -0
  459. package/lib/loop/plugins/agent-subagents/index.js +25 -0
  460. package/lib/loop/plugins/agent-tool-approvals/index.d.ts +11 -0
  461. package/lib/loop/plugins/agent-tool-approvals/index.js +38 -0
  462. package/lib/loop/plugins/agent-triggers/index.d.ts +3 -0
  463. package/lib/loop/plugins/agent-triggers/index.js +26 -0
  464. package/lib/loop/plugins/agents/AgentSummaryPanel.d.ts +20 -0
  465. package/lib/loop/plugins/agents/AgentSummaryPanel.js +50 -0
  466. package/lib/loop/plugins/agents/AnonymousKeyBadge.d.ts +35 -0
  467. package/lib/loop/plugins/agents/AnonymousKeyBadge.js +53 -0
  468. package/lib/loop/plugins/agents/DatalayerAgentBridge.d.ts +24 -0
  469. package/lib/loop/plugins/agents/DatalayerAgentBridge.js +102 -0
  470. package/lib/loop/plugins/agents/DatalayerAgentMount.d.ts +18 -0
  471. package/lib/loop/plugins/agents/DatalayerAgentMount.js +12 -0
  472. package/lib/loop/plugins/agents/SandboxSelector.d.ts +18 -0
  473. package/lib/loop/plugins/agents/SandboxSelector.js +99 -0
  474. package/lib/loop/plugins/agents/SandboxStatusBridge.d.ts +19 -0
  475. package/lib/loop/plugins/agents/SandboxStatusBridge.js +23 -0
  476. package/lib/loop/plugins/agents/SandboxView.d.ts +11 -0
  477. package/lib/loop/plugins/agents/SandboxView.js +43 -0
  478. package/lib/loop/plugins/agents/TeamMemberPicker.d.ts +17 -0
  479. package/lib/loop/plugins/agents/TeamMemberPicker.js +60 -0
  480. package/lib/loop/plugins/agents/agentIcons.d.ts +23 -0
  481. package/lib/loop/plugins/agents/agentIcons.js +88 -0
  482. package/lib/loop/plugins/agents/browserService.d.ts +50 -0
  483. package/lib/loop/plugins/agents/browserService.js +233 -0
  484. package/lib/loop/plugins/agents/index.d.ts +13 -0
  485. package/lib/loop/plugins/agents/index.js +17 -0
  486. package/lib/loop/plugins/agents/plugin.d.ts +91 -0
  487. package/lib/loop/plugins/agents/plugin.js +201 -0
  488. package/lib/loop/plugins/agents/service.d.ts +99 -0
  489. package/lib/loop/plugins/agents/service.js +167 -0
  490. package/lib/loop/plugins/agents/specSubagents.d.ts +18 -0
  491. package/lib/loop/plugins/agents/specSubagents.js +33 -0
  492. package/lib/loop/plugins/agents/switchable.d.ts +107 -0
  493. package/lib/loop/plugins/agents/switchable.js +405 -0
  494. package/lib/loop/plugins/agents/team.d.ts +87 -0
  495. package/lib/loop/plugins/agents/team.js +143 -0
  496. package/lib/loop/plugins/agents/useSandboxService.d.ts +11 -0
  497. package/lib/loop/plugins/agents/useSandboxService.js +36 -0
  498. package/lib/loop/plugins/agents/useTeamSelection.d.ts +10 -0
  499. package/lib/loop/plugins/agents/useTeamSelection.js +27 -0
  500. package/lib/loop/plugins/agentspecs/AgentspecPicker.d.ts +15 -0
  501. package/lib/loop/plugins/agentspecs/AgentspecPicker.js +90 -0
  502. package/lib/loop/plugins/agentspecs/index.d.ts +6 -0
  503. package/lib/loop/plugins/agentspecs/index.js +63 -0
  504. package/lib/loop/plugins/chat/ChatView.d.ts +20 -0
  505. package/lib/loop/plugins/chat/ChatView.js +1670 -0
  506. package/lib/loop/plugins/chat/chatViewTools.d.ts +41 -0
  507. package/lib/loop/plugins/chat/chatViewTools.js +92 -0
  508. package/lib/loop/plugins/chat/index.d.ts +111 -0
  509. package/lib/loop/plugins/chat/index.js +143 -0
  510. package/lib/loop/plugins/chat/turnState.d.ts +41 -0
  511. package/lib/loop/plugins/chat/turnState.js +90 -0
  512. package/lib/loop/plugins/chat-extras/index.d.ts +14 -0
  513. package/lib/loop/plugins/chat-extras/index.js +51 -0
  514. package/lib/loop/plugins/chat-header/HeaderView.d.ts +13 -0
  515. package/lib/loop/plugins/chat-header/HeaderView.js +6 -0
  516. package/lib/loop/plugins/chat-header/index.d.ts +3 -0
  517. package/lib/loop/plugins/chat-header/index.js +21 -0
  518. package/lib/loop/plugins/chat-view/index.d.ts +10 -0
  519. package/lib/loop/plugins/chat-view/index.js +29 -0
  520. package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.d.ts +27 -0
  521. package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.js +174 -0
  522. package/lib/loop/plugins/checkpoints-sidebar/index.d.ts +5 -0
  523. package/lib/loop/plugins/checkpoints-sidebar/index.js +39 -0
  524. package/lib/loop/plugins/commands/index.d.ts +20 -0
  525. package/lib/loop/plugins/commands/index.js +148 -0
  526. package/lib/loop/plugins/decks/DeckSurface.d.ts +10 -0
  527. package/lib/loop/plugins/decks/DeckSurface.js +6 -0
  528. package/lib/loop/plugins/decks/DecksMenu.d.ts +11 -0
  529. package/lib/loop/plugins/decks/DecksMenu.js +42 -0
  530. package/lib/loop/plugins/decks/index.d.ts +19 -0
  531. package/lib/loop/plugins/decks/index.js +133 -0
  532. package/lib/loop/plugins/decks/surface.d.ts +7 -0
  533. package/lib/loop/plugins/decks/surface.js +11 -0
  534. package/lib/loop/plugins/document/DocumentView.d.ts +12 -0
  535. package/lib/loop/plugins/document/DocumentView.js +68 -0
  536. package/lib/loop/plugins/document/index.d.ts +3 -0
  537. package/lib/loop/plugins/document/index.js +86 -0
  538. package/lib/loop/plugins/document/openingDocument.d.ts +28 -0
  539. package/lib/loop/plugins/document/openingDocument.js +122 -0
  540. package/lib/loop/plugins/document-toolbar/SandboxStatusItem.d.ts +16 -0
  541. package/lib/loop/plugins/document-toolbar/SandboxStatusItem.js +31 -0
  542. package/lib/loop/plugins/document-toolbar/index.d.ts +4 -0
  543. package/lib/loop/plugins/document-toolbar/index.js +35 -0
  544. package/lib/loop/plugins/document-toolbar/names.d.ts +6 -0
  545. package/lib/loop/plugins/document-toolbar/names.js +10 -0
  546. package/lib/loop/plugins/document-toolbar/plugin.d.ts +2 -0
  547. package/lib/loop/plugins/document-toolbar/plugin.js +38 -0
  548. package/lib/loop/plugins/document-view/index.d.ts +10 -0
  549. package/lib/loop/plugins/document-view/index.js +28 -0
  550. package/lib/loop/plugins/graph/GraphToggle.d.ts +17 -0
  551. package/lib/loop/plugins/graph/GraphToggle.js +22 -0
  552. package/lib/loop/plugins/graph/GraphView.d.ts +16 -0
  553. package/lib/loop/plugins/graph/GraphView.js +6 -0
  554. package/lib/loop/plugins/graph/index.d.ts +5 -0
  555. package/lib/loop/plugins/graph/index.js +80 -0
  556. package/lib/loop/plugins/graph/viewType.d.ts +10 -0
  557. package/lib/loop/plugins/graph/viewType.js +14 -0
  558. package/lib/loop/plugins/input-prompt/ComposerView.d.ts +15 -0
  559. package/lib/loop/plugins/input-prompt/ComposerView.js +25 -0
  560. package/lib/loop/plugins/input-prompt/index.d.ts +25 -0
  561. package/lib/loop/plugins/input-prompt/index.js +26 -0
  562. package/lib/loop/plugins/models/index.d.ts +3 -0
  563. package/lib/loop/plugins/models/index.js +49 -0
  564. package/lib/loop/plugins/notebook/NotebookView.d.ts +9 -0
  565. package/lib/loop/plugins/notebook/NotebookView.js +189 -0
  566. package/lib/loop/plugins/notebook/index.d.ts +3 -0
  567. package/lib/loop/plugins/notebook/index.js +91 -0
  568. package/lib/loop/plugins/notebook/openingNotebook.d.ts +72 -0
  569. package/lib/loop/plugins/notebook/openingNotebook.js +90 -0
  570. package/lib/loop/plugins/notebook-toolbar/index.d.ts +4 -0
  571. package/lib/loop/plugins/notebook-toolbar/index.js +45 -0
  572. package/lib/loop/plugins/notebook-toolbar/items.d.ts +10 -0
  573. package/lib/loop/plugins/notebook-toolbar/items.js +45 -0
  574. package/lib/loop/plugins/notebook-toolbar/names.d.ts +9 -0
  575. package/lib/loop/plugins/notebook-toolbar/names.js +13 -0
  576. package/lib/loop/plugins/notebook-toolbar/plugin.d.ts +2 -0
  577. package/lib/loop/plugins/notebook-toolbar/plugin.js +24 -0
  578. package/lib/loop/plugins/notebook-view/index.d.ts +10 -0
  579. package/lib/loop/plugins/notebook-view/index.js +30 -0
  580. package/lib/loop/plugins/page-layout/TurnPanel.d.ts +25 -0
  581. package/lib/loop/plugins/page-layout/TurnPanel.js +126 -0
  582. package/lib/loop/plugins/page-layout/index.d.ts +35 -0
  583. package/lib/loop/plugins/page-layout/index.js +80 -0
  584. package/lib/loop/plugins/plugins-panel/index.d.ts +14 -0
  585. package/lib/loop/plugins/plugins-panel/index.js +74 -0
  586. package/lib/loop/plugins/prompt/NewChatAction.d.ts +19 -0
  587. package/lib/loop/plugins/prompt/NewChatAction.js +10 -0
  588. package/lib/loop/plugins/prompt/index.d.ts +11 -0
  589. package/lib/loop/plugins/prompt/index.js +73 -0
  590. package/lib/loop/plugins/shell/editorChoice.d.ts +31 -0
  591. package/lib/loop/plugins/shell/editorChoice.js +58 -0
  592. package/lib/loop/plugins/shell/index.d.ts +47 -0
  593. package/lib/loop/plugins/shell/index.js +142 -0
  594. package/lib/loop/plugins/shell/useEditorPreviews.d.ts +32 -0
  595. package/lib/loop/plugins/shell/useEditorPreviews.js +217 -0
  596. package/lib/loop/plugins/subagent-activity/SubagentPulse.d.ts +16 -0
  597. package/lib/loop/plugins/subagent-activity/SubagentPulse.js +45 -0
  598. package/lib/loop/plugins/subagent-activity/index.d.ts +12 -0
  599. package/lib/loop/plugins/subagent-activity/index.js +42 -0
  600. package/lib/loop/plugins/view-switch/index.d.ts +46 -0
  601. package/lib/loop/plugins/view-switch/index.js +68 -0
  602. package/lib/loop/plugins/window-frame/WindowFrame.d.ts +48 -0
  603. package/lib/loop/plugins/window-frame/WindowFrame.js +63 -0
  604. package/lib/loop/plugins/window-frame/index.d.ts +6 -0
  605. package/lib/loop/plugins/window-frame/index.js +79 -0
  606. package/lib/loop/plugins/window-frame/slots.d.ts +26 -0
  607. package/lib/loop/plugins/window-frame/slots.js +30 -0
  608. package/lib/loop/presets.d.ts +167 -0
  609. package/lib/loop/presets.js +139 -0
  610. package/lib/loop/shell/LoopWorkspace.d.ts +109 -0
  611. package/lib/loop/shell/LoopWorkspace.js +231 -0
  612. package/lib/loop/shell/PluginToggles.d.ts +21 -0
  613. package/lib/loop/shell/PluginToggles.js +41 -0
  614. package/lib/loop/shell/ViewSwitcher.d.ts +24 -0
  615. package/lib/loop/shell/ViewSwitcher.js +43 -0
  616. package/lib/loop/shell/WorkspaceFullScreenAction.d.ts +25 -0
  617. package/lib/loop/shell/WorkspaceFullScreenAction.js +24 -0
  618. package/lib/loop/shell/index.d.ts +10 -0
  619. package/lib/loop/shell/index.js +14 -0
  620. package/lib/loop/shell/useWorkspaceFullScreen.d.ts +93 -0
  621. package/lib/loop/shell/useWorkspaceFullScreen.js +167 -0
  622. package/lib/loop-example-main.d.ts +1 -0
  623. package/lib/loop-example-main.js +42 -0
  624. package/lib/loop-main.d.ts +1 -0
  625. package/lib/loop-main.js +138 -0
  626. package/lib/mcp/McpServerManager.d.ts +1 -1
  627. package/lib/models/CodeSandboxSnapshotDTO.d.ts +1 -1
  628. package/lib/models/CodeSandboxVariant.d.ts +53 -0
  629. package/lib/models/CodeSandboxVariant.js +77 -0
  630. package/lib/models/Content.d.ts +26 -0
  631. package/lib/models/Environment.d.ts +561 -5
  632. package/lib/models/Environment.js +12 -1
  633. package/lib/models/EnvironmentDTO.d.ts +24 -6
  634. package/lib/models/EnvironmentDTO.js +13 -2
  635. package/lib/models/Exercise.d.ts +0 -2
  636. package/lib/models/Library.d.ts +0 -2
  637. package/lib/models/Notebook.d.ts +0 -2
  638. package/lib/models/ProjectDTO.d.ts +2 -2
  639. package/lib/models/ProjectDTO.js +4 -4
  640. package/lib/models/Runtime.d.ts +11 -11
  641. package/lib/models/RuntimeDTO.d.ts +16 -7
  642. package/lib/models/RuntimeDTO.js +9 -9
  643. package/lib/models/Space.d.ts +10 -0
  644. package/lib/models/Space.js +1 -1
  645. package/lib/models/SpaceDTO.d.ts +1 -1
  646. package/lib/models/SpaceItem.d.ts +1 -2
  647. package/lib/models/environments.generated.d.ts +113 -0
  648. package/lib/models/environments.generated.js +13 -0
  649. package/lib/models/index.d.ts +1 -1
  650. package/lib/models/index.js +1 -1
  651. package/lib/protocols/A2AAdapter.d.ts +39 -6
  652. package/lib/protocols/A2AAdapter.js +180 -11
  653. package/lib/protocols/ACPAdapter.js +40 -37
  654. package/lib/protocols/AGUIAdapter.d.ts +14 -0
  655. package/lib/protocols/AGUIAdapter.js +34 -9
  656. package/lib/protocols/BrowserAgentAdapter.d.ts +117 -0
  657. package/lib/protocols/BrowserAgentAdapter.js +310 -0
  658. package/lib/protocols/VercelAIAdapter.d.ts +10 -0
  659. package/lib/protocols/VercelAIAdapter.js +27 -7
  660. package/lib/protocols/index.d.ts +1 -0
  661. package/lib/protocols/index.js +1 -0
  662. package/lib/runtimes/actions.d.ts +3 -3
  663. package/lib/runtimes/actions.js +41 -16
  664. package/lib/runtimes/apis.d.ts +13 -4
  665. package/lib/runtimes/browser/agent.d.ts +54 -0
  666. package/lib/runtimes/browser/agent.js +63 -0
  667. package/lib/runtimes/browser/anonymousToken.d.ts +121 -0
  668. package/lib/runtimes/browser/anonymousToken.js +300 -0
  669. package/lib/runtimes/browser/frontendTools.d.ts +61 -0
  670. package/lib/runtimes/browser/frontendTools.js +152 -0
  671. package/lib/runtimes/browser/index.d.ts +11 -0
  672. package/lib/runtimes/browser/index.js +20 -0
  673. package/lib/runtimes/browser/model.d.ts +52 -0
  674. package/lib/runtimes/browser/model.js +110 -0
  675. package/lib/runtimes/browser/protocol.d.ts +54 -0
  676. package/lib/runtimes/browser/protocol.js +35 -0
  677. package/lib/runtimes/browser/subagents.d.ts +131 -0
  678. package/lib/runtimes/browser/subagents.js +241 -0
  679. package/lib/runtimes/index.d.ts +3 -0
  680. package/lib/runtimes/index.js +3 -0
  681. package/lib/runtimes/lifecycle.d.ts +76 -0
  682. package/lib/runtimes/lifecycle.js +99 -0
  683. package/lib/runtimes/variants.d.ts +172 -0
  684. package/lib/runtimes/variants.js +187 -0
  685. package/lib/services/reconnectToRuntime.d.ts +2 -2
  686. package/lib/services/reconnectToRuntime.js +3 -3
  687. package/lib/services/sandboxServiceManagers.d.ts +2 -2
  688. package/lib/services/sandboxServiceManagers.js +11 -11
  689. package/lib/specs/agents/agents.d.ts +128 -112
  690. package/lib/specs/agents/agents.js +8024 -5052
  691. package/lib/specs/envvars.d.ts +1 -1
  692. package/lib/specs/envvars.js +3 -3
  693. package/lib/specs/evals.js +9 -0
  694. package/lib/specs/frontendTools.d.ts +3 -0
  695. package/lib/specs/frontendTools.js +46 -3
  696. package/lib/specs/mcpServers.d.ts +1 -0
  697. package/lib/specs/mcpServers.js +27 -4
  698. package/lib/specs/models.d.ts +18 -0
  699. package/lib/specs/models.js +154 -0
  700. package/lib/specs/outputs.d.ts +2 -0
  701. package/lib/specs/outputs.js +22 -0
  702. package/lib/specs/personas.js +1 -1
  703. package/lib/specs/teams/teams.d.ts +2 -0
  704. package/lib/specs/teams/teams.js +628 -111
  705. package/lib/state/index.d.ts +1 -1
  706. package/lib/state/index.js +1 -1
  707. package/lib/state/substates/RuntimesState.d.ts +5 -5
  708. package/lib/state/substates/RuntimesState.js +17 -14
  709. package/lib/state/substates/index.d.ts +1 -1
  710. package/lib/state/substates/index.js +1 -1
  711. package/lib/stores/agentRuntimeStore.d.ts +43 -1
  712. package/lib/stores/agentRuntimeStore.js +100 -11
  713. package/lib/stores/index.d.ts +1 -1
  714. package/lib/stores/index.js +1 -1
  715. package/lib/stories/Button.d.ts +1 -1
  716. package/lib/stories/Button.stories.d.ts +1 -1
  717. package/lib/stories/Header.d.ts +1 -1
  718. package/lib/stories/Header.stories.d.ts +1 -1
  719. package/lib/test-setup.js +66 -0
  720. package/lib/tools/adapters/agent-runtimes/lexicalHooks.d.ts +15 -0
  721. package/lib/tools/adapters/agent-runtimes/lexicalHooks.js +43 -2
  722. package/lib/tools/adapters/agent-runtimes/notebookHooks.d.ts +9 -0
  723. package/lib/tools/adapters/agent-runtimes/notebookHooks.js +12 -0
  724. package/lib/tools/adapters/commands/frontendCommandTools.d.ts +11 -0
  725. package/lib/tools/adapters/commands/frontendCommandTools.js +60 -0
  726. package/lib/tools/adapters/commands/index.d.ts +1 -0
  727. package/lib/{models/Dataset.js → tools/adapters/commands/index.js} +1 -1
  728. package/lib/tools/adapters/copilotkit/lexicalHooks.js +7 -3
  729. package/lib/tools/index.d.ts +1 -0
  730. package/lib/tools/index.js +1 -0
  731. package/lib/types/a2a.d.ts +15 -1
  732. package/lib/types/agents-lifecycle.d.ts +11 -6
  733. package/lib/types/agents.d.ts +31 -6
  734. package/lib/types/agentspecs.d.ts +120 -4
  735. package/lib/types/chat.d.ts +251 -3
  736. package/lib/types/checkpoints.d.ts +20 -0
  737. package/lib/types/config.d.ts +13 -1
  738. package/lib/types/connection.d.ts +1 -1
  739. package/lib/types/evals.d.ts +2 -0
  740. package/lib/types/messages.d.ts +60 -0
  741. package/lib/types/models.d.ts +26 -0
  742. package/lib/types/notifications.d.ts +15 -6
  743. package/lib/types/protocol.d.ts +7 -2
  744. package/lib/types/stream.d.ts +48 -3
  745. package/lib/types/stream.js +5 -0
  746. package/lib/types/teams.d.ts +102 -4
  747. package/lib/types/tool-approvals.d.ts +1 -1
  748. package/lib/types/tools.d.ts +8 -2
  749. package/lib/utils/utils.js +7 -1
  750. package/package.json +376 -361
  751. package/scripts/codegen/__pycache__/compose.cpython-313.pyc +0 -0
  752. package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
  753. package/scripts/codegen/compose.py +208 -0
  754. package/scripts/codegen/generate_agents.py +202 -31
  755. package/scripts/codegen/generate_evals.py +2 -0
  756. package/scripts/codegen/generate_frontend_tools.py +35 -6
  757. package/scripts/codegen/generate_models.py +40 -15
  758. package/scripts/codegen/generate_sandbox_agents.py +76 -62
  759. package/scripts/codegen/generate_teams.py +178 -4
  760. package/scripts/codegen/generate_tools.py +6 -4
  761. package/scripts/gen_workers.py +279 -111
  762. package/scripts/generate-environments-types.py +404 -0
  763. package/lib/chat/prompt/InputFooter.d.ts +0 -58
  764. package/lib/chat/prompt/InputFooter.js +0 -194
  765. package/lib/chat/prompt/InputPromptFooter.d.ts +0 -27
  766. package/lib/chat/prompt/InputPromptFooter.js +0 -15
  767. package/lib/chat/prompt/InputPromptHeader.d.ts +0 -15
  768. package/lib/chat/prompt/InputPromptHeader.js +0 -15
  769. package/lib/chat/usage/TokenUsageBar.d.ts +0 -8
  770. package/lib/hooks/useRuntimes.d.ts +0 -5
  771. package/lib/hooks/useRuntimes.js +0 -34
  772. package/lib/jupyter/kernelsHandler.d.ts +0 -8
  773. package/lib/jupyter/kernelsHandler.js +0 -39
  774. package/lib/models/Dataset.d.ts +0 -16
  775. package/lib/utils/Cells.d.ts +0 -2
  776. package/lib/utils/Cells.js +0 -28
@@ -21,31 +21,21 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
21
21
  import '@datalayer/jupyter-react/lib/css/PrismCss';
22
22
  import React, { useCallback, useEffect, useRef, useState } from 'react';
23
23
  import { $getRoot, $createParagraphNode } from 'lexical';
24
- import { LexicalComposer } from '@lexical/react/LexicalComposer';
25
- import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';
24
+ import { LexicalExtensionComposer } from '@lexical/react/LexicalExtensionComposer';
26
25
  import { ContentEditable } from '@lexical/react/LexicalContentEditable';
27
- import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';
28
26
  import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin';
29
27
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
30
- import { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary';
31
- import { AutoFocusPlugin } from '@lexical/react/LexicalAutoFocusPlugin';
32
- import { MarkdownShortcutPlugin } from '@lexical/react/LexicalMarkdownShortcutPlugin';
33
- import { TRANSFORMERS } from '@lexical/markdown';
34
- import { registerCodeHighlighting } from '@lexical/code';
35
- import { ListPlugin } from '@lexical/react/LexicalListPlugin';
36
- import { CheckListPlugin } from '@lexical/react/LexicalCheckListPlugin';
37
- import { LinkPlugin } from '@lexical/react/LexicalLinkPlugin';
38
28
  import { Text, Spinner } from '@primer/react';
39
29
  import { AlertIcon } from '@primer/octicons-react';
40
30
  import { AppearanceControlsWithStore, Box, createThemeStore, DatalayerThemeProvider, setupPrimerPortals, themeConfigs, useSystemColorMode, } from '@datalayer/primer-addons';
41
31
  import { JupyterReactTheme, disposeServiceManager, loadJupyterConfig, getJupyterServerUrl, getJupyterServerToken, setJupyterServerUrl, setJupyterServerToken, useJupyter, } from '@datalayer/jupyter-react';
42
- import { ComponentPickerMenuPlugin, JupyterCellPlugin, JupyterInputOutputPlugin, DraggableBlockPlugin, ImagesPlugin, HorizontalRulePlugin, EquationsPlugin, YouTubePlugin, ExcalidrawPlugin, CollapsiblePlugin, AutoLinkPlugin, AutoEmbedPlugin, LexicalConfigProvider, LexicalStatePlugin, FloatingTextFormatToolbarPlugin, CodeActionMenuPlugin, ListMaxIndentLevelPlugin, TableCellResizerPlugin, TablePlugin, } from '@datalayer/jupyter-lexical';
32
+ import { ComponentPickerMenuPlugin, JupyterInputOutputPlugin, DraggableBlockPlugin, LexicalConfigProvider, LexicalStatePlugin, FloatingTextFormatToolbarPlugin, CodeActionMenuPlugin, TableCellResizerPlugin, } from '@datalayer/jupyter-lexical';
43
33
  import { ServiceManager, ServerConnection } from '@jupyterlab/services';
44
34
  import { Chat } from './chat';
45
35
  import { ChatInlinePlugin } from './lexical/ChatInlinePlugin';
46
36
  import { useChatInlineToolbarItems } from './lexical/useChatInlineToolbarItems';
47
37
  import { useLexicalTools } from './tools/adapters/agent-runtimes/lexicalHooks';
48
- import { editorConfig } from './examples/lexical/editorConfig';
38
+ import { editorExtension } from './examples/lexical/editorConfig';
49
39
  import { DEFAULT_MODEL } from './specs';
50
40
  import '@datalayer/jupyter-lexical/style/index.css';
51
41
  import './examples/lexical/lexical-theme.css';
@@ -76,7 +66,7 @@ async function fetchStartupKernelId() {
76
66
  }
77
67
  const payload = await resp.json();
78
68
  const sandbox = payload?.sandbox;
79
- if (sandbox?.variant !== 'jupyter') {
69
+ if (sandbox?.variant !== 'jupyter-server') {
80
70
  return undefined;
81
71
  }
82
72
  const kernelId = sandbox?.kernel_id;
@@ -178,13 +168,6 @@ function LoadContentPlugin({ content }) {
178
168
  }, [content, editor]);
179
169
  return null;
180
170
  }
181
- function CodeHighlightPlugin() {
182
- const [editor] = useLexicalComposerContext();
183
- useEffect(() => {
184
- return registerCodeHighlighting(editor);
185
- }, [editor]);
186
- return null;
187
- }
188
171
  function KernelPluginsInner({ serviceManager, kernelId, onKernelReady, }) {
189
172
  const { defaultKernel } = useJupyter({
190
173
  serviceManager,
@@ -231,7 +214,7 @@ const LexicalPanel = React.memo(function LexicalPanel({ serviceManager, kernelId
231
214
  overflow: 'auto',
232
215
  borderRight: '1px solid',
233
216
  borderColor: 'border.default',
234
- }, children: _jsx(Box, { sx: { padding: 3 }, children: _jsxs(LexicalConfigProvider, { lexicalId: DOCUMENT_ID, serviceManager: serviceManager, children: [_jsx(LexicalToolsPlugin, { onToolsReady: onToolsReady }), _jsx(LexicalComposer, { initialConfig: editorConfig, children: _jsxs("div", { className: "lexical-editor-inner", ref: onRef, children: [_jsx(LexicalStatePlugin, {}), _jsx(RichTextPlugin, { contentEditable: _jsx(ContentEditable, { className: "lexical-editor-content", "aria-label": "Lexical Editor" }), ErrorBoundary: LexicalErrorBoundary }), _jsx(OnChangePlugin, { onChange: handleChange }), _jsx(HistoryPlugin, {}), _jsx(AutoFocusPlugin, {}), _jsx(ListPlugin, {}), _jsx(CheckListPlugin, {}), _jsx(LinkPlugin, {}), _jsx(AutoLinkPlugin, {}), _jsx(ListMaxIndentLevelPlugin, { maxDepth: 7 }), _jsx(MarkdownShortcutPlugin, { transformers: TRANSFORMERS }), _jsx(LoadContentPlugin, {}), _jsx(CodeHighlightPlugin, {}), _jsx(ImagesPlugin, { captionsEnabled: false }), _jsx(HorizontalRulePlugin, {}), _jsx(EquationsPlugin, {}), _jsx(YouTubePlugin, {}), _jsx(ExcalidrawPlugin, {}), _jsx(CollapsiblePlugin, {}), _jsx(AutoEmbedPlugin, {}), _jsx(TablePlugin, {}), _jsx(TableCellResizerPlugin, {}), _jsx(JupyterCellPlugin, {}), _jsx(JupyterReactTheme, { colormode: colormode, backgroundColor: backgroundColor, children: _jsx(KernelPluginsInner, { serviceManager: serviceManager, kernelId: kernelId, onKernelReady: onKernelReady }) }), floatingAnchorElem && (_jsxs(_Fragment, { children: [_jsx(DraggableBlockPlugin, { anchorElem: floatingAnchorElem }), _jsx(FloatingTextFormatToolbarPlugin, { anchorElem: floatingAnchorElem, setIsLinkEditMode: setIsLinkEditMode, extraItems: toolbarItems }), _jsx(CodeActionMenuPlugin, { anchorElem: floatingAnchorElem })] })), _jsx(ChatInlinePlugin, { protocol: {
217
+ }, children: _jsx(Box, { sx: { padding: 3 }, children: _jsxs(LexicalConfigProvider, { lexicalId: DOCUMENT_ID, serviceManager: serviceManager, children: [_jsx(LexicalToolsPlugin, { onToolsReady: onToolsReady }), _jsx(LexicalExtensionComposer, { extension: editorExtension, contentEditable: null, children: _jsxs("div", { className: "lexical-editor-inner", ref: onRef, children: [_jsx(LexicalStatePlugin, {}), _jsx(ContentEditable, { className: "lexical-editor-content", "aria-label": "Lexical Editor" }), _jsx(OnChangePlugin, { onChange: handleChange }), _jsx(LoadContentPlugin, {}), _jsx(TableCellResizerPlugin, {}), _jsx(JupyterReactTheme, { colormode: colormode, backgroundColor: backgroundColor, children: _jsx(KernelPluginsInner, { serviceManager: serviceManager, kernelId: kernelId, onKernelReady: onKernelReady }) }), floatingAnchorElem && (_jsxs(_Fragment, { children: [_jsx(DraggableBlockPlugin, { anchorElem: floatingAnchorElem }), _jsx(FloatingTextFormatToolbarPlugin, { anchorElem: floatingAnchorElem, setIsLinkEditMode: setIsLinkEditMode, extraItems: toolbarItems }), _jsx(CodeActionMenuPlugin, { anchorElem: floatingAnchorElem })] })), _jsx(ChatInlinePlugin, { protocol: {
235
218
  type: 'ag-ui',
236
219
  endpoint: agUiEndpoint,
237
220
  }, isOpen: isAiOpen, onClose: closeAi, pendingPrompt: pendingPrompt, onPendingPromptConsumed: clearPendingPrompt })] }) })] }) }) }));
@@ -1,3 +1,3 @@
1
1
  import '../style/primer-primitives.css';
2
- export declare function AgentNode(): import("react/jsx-runtime").JSX.Element;
2
+ export declare function AgentNode(): import("react").JSX.Element;
3
3
  export default AgentNode;
package/lib/AgentNode.js CHANGED
@@ -3,17 +3,18 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
3
3
  * Copyright (c) 2025-2026 Datalayer, Inc.
4
4
  * Distributed under the terms of the Modified BSD License.
5
5
  */
6
- import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
6
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, } from 'react';
7
7
  import { useQueryClient } from '@tanstack/react-query';
8
8
  import { AiAgentIcon, AlienIcon } from '@datalayer/icons-react';
9
9
  import { DatalayerLogoText, DatalayerThemeProvider, getColorPalette, getLogoColors, setupPrimerPortals, themeConfigs, } from '@datalayer/primer-addons';
10
10
  import { AppearanceMenu } from '@datalayer/primer-addons/lib/components/appearance';
11
- import { ActionList, ActionMenu, Box, Button, Heading, Label, PageHeader, PageLayout, Text, } from '@primer/react';
11
+ import { ActionList, ActionMenu, Box, Button, Heading, Label, PageHeader, PageLayout, Spinner, Text, } from '@primer/react';
12
12
  import { CommentIcon, HomeIcon, KeyAsteriskIcon, LockIcon, MoonIcon, PeopleIcon, PersonIcon, GearIcon, SignOutIcon, } from '@primer/octicons-react';
13
13
  import { SignInSimple } from '@datalayer/core/lib/views/iam';
14
14
  import { UserAvatar } from '@datalayer/core/lib/components/avatars';
15
15
  import { UserBadge } from '@datalayer/core/lib/views/profile';
16
16
  import { useSimpleAuthStore } from '@datalayer/core/lib/views/otel';
17
+ import * as coreState from '@datalayer/core/lib/state';
17
18
  import { useIAMStore } from '@datalayer/core/lib/state';
18
19
  import { BillingEntitySelect, } from '@datalayer/core/lib/components/billing';
19
20
  import { ShareAccessComponent } from '@datalayer/core/lib/components/sharing';
@@ -50,11 +51,25 @@ const LOCAL_JUPYTER_SANDBOX = (() => {
50
51
  }
51
52
  })();
52
53
  const DEFAULT_DATALAYER_SERVICE_URL = 'https://prod1.datalayer.run';
54
+ /** The protocol a node reports for an agent, as the chat understands it. */
55
+ const normalizeChatProtocol = (value) => value === 'vercel-ai' || value === 'vercel-ai-jupyter'
56
+ ? 'vercel-ai'
57
+ : 'ag-ui';
53
58
  /**
54
- * localStorage key recording that the user explicitly signed out. When set, the
55
- * UI must not silently re-authenticate from the env-supplied DATALAYER_API_KEY
56
- * via /auth/bootstrap, so the sign-out survives a page refresh.
59
+ * Whether a JWT's `exp` is in the past. A token that does not parse is not
60
+ * called expired — that is IAM's verdict to give, and it gives it as a 401.
57
61
  */
62
+ const isJwtExpired = (token) => {
63
+ try {
64
+ const payload = token.split('.')[1];
65
+ const json = atob(payload.replace(/-/g, '+').replace(/_/g, '/'));
66
+ const exp = Number(JSON.parse(json)?.exp);
67
+ return Number.isFinite(exp) && exp * 1000 < Date.now();
68
+ }
69
+ catch {
70
+ return false;
71
+ }
72
+ };
58
73
  const AUTO_BOOTSTRAP_DISABLED_KEY = 'agent-node-auto-bootstrap-disabled';
59
74
  /** Persist (or clear) the signed-out intent in localStorage. */
60
75
  function setAutoBootstrapDisabled(disabled) {
@@ -294,9 +309,12 @@ export function AgentNode() {
294
309
  // ── Ephemeral document RTC (shared Lexical/Loro room with the SaaS UI) ────
295
310
  // The node provisions a spacer *lexical* room (distinct from the notebook
296
311
  // room) on registration and stores its uid as `collaboration_document_uid`.
297
- // Both peers join that Loro room over the spacer lexical WebSocket. The token
298
- // is embedded in the ws URL (createWebsocketProvider forwards it as a query
299
- // param) so the spacer authenticates the connection.
312
+ // Both peers join that Loro room over the spacer lexical WebSocket.
313
+ //
314
+ // The URL is the bare endpoint: the Loro provider composes
315
+ // `${websocketUrl}/${roomId}` itself, so a query string here would land
316
+ // *between* the path and the room (`…/ws?token=…/ROOM`) and match no route —
317
+ // which is what this used to do. The spacer reads no token on this socket.
300
318
  const collaborationDocumentUser = useIAMStore(state => state.user);
301
319
  const ephemeralDocumentCollaboration = useMemo(() => {
302
320
  const documentRoomId = configuration.collaboration_document_uid;
@@ -305,7 +323,7 @@ export function AgentNode() {
305
323
  }
306
324
  const spacerUrl = resolveSpacerUrl();
307
325
  const wsSpacer = String(spacerUrl).replace(/^http/, 'ws');
308
- const websocketUrl = `${wsSpacer}/api/spacer/v1/lexical/ws?token=${encodeURIComponent(token)}`;
326
+ const websocketUrl = `${wsSpacer}/api/spacer/v1/lexical/ws`;
309
327
  const u = collaborationDocumentUser;
310
328
  return {
311
329
  websocketUrl,
@@ -330,6 +348,10 @@ export function AgentNode() {
330
348
  const [inferenceDefaultModel, setInferenceDefaultModel] = useState(null);
331
349
  const [configurationLoaded, setConfigurationLoaded] = useState(false);
332
350
  const [isActiveAgentRunning, setIsActiveAgentRunning] = useState(false);
351
+ // The protocol the active agent actually speaks, as reported by the node.
352
+ // The chat must speak the same one; a node hosts AG-UI and Vercel AI
353
+ // agents alike.
354
+ const [activeAgentProtocol, setActiveAgentProtocol] = useState('ag-ui');
333
355
  const chatRestoreAttemptRef = useRef('');
334
356
  const hasActiveAgent = Boolean(String(configuration.active_agent_id || '').trim()) &&
335
357
  isActiveAgentRunning;
@@ -337,7 +359,7 @@ export function AgentNode() {
337
359
  configuration.deployment_target === 'aws';
338
360
  // ── Local sandbox runtime override for the ephemeral surfaces ─────────────
339
361
  // In the node-local webapp the agent's Jupyter sandbox is a LOCAL server, not
340
- // a Kubernetes pod resolvable by `pod_name`, so the ephemeral notebook and
362
+ // a Kubernetes pod resolvable by `runtime_name`, so the ephemeral notebook and
341
363
  // document surfaces cannot bind their kernel through the runtimes pod lookup.
342
364
  // Instead we read the live sandbox Jupyter endpoint from `/health/startup`
343
365
  // and pass it as an explicit override so the surfaces connect a service
@@ -370,7 +392,7 @@ export function AgentNode() {
370
392
  return {
371
393
  baseUrl: LOCAL_JUPYTER_SANDBOX.baseUrl,
372
394
  token: LOCAL_JUPYTER_SANDBOX.token || undefined,
373
- podName: 'agent-node-sandbox',
395
+ runtimeName: 'agent-node-sandbox',
374
396
  };
375
397
  });
376
398
  return;
@@ -392,7 +414,7 @@ export function AgentNode() {
392
414
  const payload = await resp.json();
393
415
  const sandbox = payload?.sandbox;
394
416
  const jupyterUrl = String(sandbox?.jupyter_url || '').trim();
395
- if (sandbox?.variant !== 'jupyter' || !jupyterUrl) {
417
+ if (sandbox?.variant !== 'jupyter-server' || !jupyterUrl) {
396
418
  return;
397
419
  }
398
420
  const jupyterToken = String(sandbox?.jupyter_token || '').trim();
@@ -411,7 +433,7 @@ export function AgentNode() {
411
433
  return {
412
434
  baseUrl: jupyterUrl,
413
435
  token: jupyterToken || undefined,
414
- podName: 'agent-node-sandbox',
436
+ runtimeName: 'agent-node-sandbox',
415
437
  };
416
438
  });
417
439
  // Endpoint resolved — stop the fast poll.
@@ -467,8 +489,31 @@ export function AgentNode() {
467
489
  : typeof spec.welcome_message === 'string'
468
490
  ? spec.welcome_message
469
491
  : undefined,
492
+ /*
493
+ * Either shape, because this reads a spec off a running node.
494
+ *
495
+ * A node may have been launched from an older catalogue, where a
496
+ * suggestion was a bare string. Filtering to strings — which is what
497
+ * this did — silently emptied the list the moment the catalogue
498
+ * started sending the mapping form, and an empty state with no
499
+ * openers looks like an agent with nothing to offer.
500
+ */
470
501
  suggestions: Array.isArray(spec.suggestions)
471
- ? spec.suggestions.filter((s) => typeof s === 'string')
502
+ ? spec.suggestions
503
+ .map(item => {
504
+ if (typeof item === 'string') {
505
+ return { text: item };
506
+ }
507
+ const entry = item;
508
+ return {
509
+ text: typeof entry?.text === 'string' ? entry.text : '',
510
+ // The label, when the spec gave one shorter than the text.
511
+ summary: typeof entry?.summary === 'string'
512
+ ? entry.summary
513
+ : undefined,
514
+ };
515
+ })
516
+ .filter(entry => !!entry.text)
472
517
  : undefined,
473
518
  });
474
519
  }
@@ -487,7 +532,10 @@ export function AgentNode() {
487
532
  agentSpecInfo?.description ||
488
533
  'Node-local chat';
489
534
  const chatSuggestions = agentSpecInfo?.suggestions && agentSpecInfo.suggestions.length > 0
490
- ? agentSpecInfo.suggestions.map(s => ({ title: s, message: s }))
535
+ ? agentSpecInfo.suggestions.map(s => ({
536
+ title: s.summary ?? s.text,
537
+ message: s.text,
538
+ }))
491
539
  : undefined;
492
540
  const [banner, setBanner] = useState(null);
493
541
  const bannerTimerRef = useRef(null);
@@ -528,6 +576,61 @@ export function AgentNode() {
528
576
  }),
529
577
  });
530
578
  }, []);
579
+ // A token that IAM no longer accepts ends the session, here and now.
580
+ //
581
+ // The billing entity selector reads the signed-in user from the core IAM
582
+ // store, which this page fills by asking IAM `whoami` with the node's token.
583
+ // When that call fails the core store logs its user out while the node's own
584
+ // token stays — and the page used to sit there "loading" a user that was
585
+ // never coming. A token past its `exp` is signed out at once; one that IAM
586
+ // rejects is retried briefly (a plane still starting), then signed out too.
587
+ const [identityAttempt, setIdentityAttempt] = useState(0);
588
+ const expireSession = useCallback((why) => {
589
+ showBanner('info', `${why} Please sign in again.`);
590
+ setAutoBootstrapDisabled(true);
591
+ setDisableAutoBootstrap(true);
592
+ void pushCredentials(token, null).catch(() => {
593
+ // Best-effort; local state is signed out regardless.
594
+ });
595
+ clearAuth();
596
+ setStep('auth');
597
+ }, [token, showBanner, pushCredentials, clearAuth]);
598
+ useEffect(() => {
599
+ if (!token || iamUser) {
600
+ return;
601
+ }
602
+ if (isJwtExpired(token)) {
603
+ expireSession('Your session has expired.');
604
+ return;
605
+ }
606
+ let cancelled = false;
607
+ const attempt = identityAttempt;
608
+ const timer = window.setTimeout(async () => {
609
+ try {
610
+ const api = coreState.iamStore.getState();
611
+ await api.refreshUserByToken(token);
612
+ }
613
+ catch {
614
+ // Decided below, on whether a user arrived.
615
+ }
616
+ if (cancelled) {
617
+ return;
618
+ }
619
+ if (coreState.iamStore.getState().user) {
620
+ return;
621
+ }
622
+ if (attempt >= 2) {
623
+ expireSession(`${resolveIamUrl()} did not recognise your session.`);
624
+ }
625
+ else {
626
+ setIdentityAttempt(n => n + 1);
627
+ }
628
+ }, attempt === 0 ? 1500 : 4000);
629
+ return () => {
630
+ cancelled = true;
631
+ window.clearTimeout(timer);
632
+ };
633
+ }, [token, iamUser, identityAttempt, expireSession]);
531
634
  // Refs kept in sync with state so the BillingEntitySelect callbacks
532
635
  // (passed via stable identities) can read the latest values without
533
636
  // being re-created on every render — re-created callbacks made
@@ -700,13 +803,25 @@ export function AgentNode() {
700
803
  // Best-effort; backend may not be reachable in some local setups.
701
804
  });
702
805
  }, [token, pushCredentials]);
703
- useEffect(() => {
704
- import('@datalayer/core/lib/state').then(({ iamStore, coreStore }) => {
806
+ // Before paint, and before any child effect: children fetch runtimes and
807
+ // the like in their own effects, and a parent's layout effect runs first.
808
+ // Seeded in a plain effect behind a dynamic import, as this used to be,
809
+ // the first round of requests went to the core store's *default* URLs —
810
+ // production — and came back 401 against a local token before the local
811
+ // plane was even named.
812
+ useLayoutEffect(() => {
813
+ Promise.resolve(coreState).then(({ iamStore, coreStore }) => {
705
814
  const iamUrl = resolveIamUrl();
706
815
  const runtimesUrl = resolveRuntimesUrl();
707
816
  const aiInferenceUrl = getConfigUrlFromDocument('aiInferenceUrl') ||
708
817
  import.meta.env?.VITE_DATALAYER_AI_INFERENCE_URL ||
709
- DEFAULT_DATALAYER_SERVICE_URL;
818
+ 'https://r1.datalayer.run';
819
+ const aiAgentsUrl = getConfigUrlFromDocument('aiAgentsUrl') ||
820
+ import.meta.env?.VITE_DATALAYER_AI_AGENTS_URL ||
821
+ 'https://r1.datalayer.run';
822
+ const jupyterMcpServerUrl = getConfigUrlFromDocument('jupyterMcpServerUrl') ||
823
+ import.meta.env?.VITE_DATALAYER_JUPYTER_MCP_SERVER_URL ||
824
+ 'https://mcp.datalayer.run/mcp';
710
825
  // Seed all per-service URLs to match the main UI login behavior.
711
826
  const coreApi = coreStore.getState();
712
827
  const prevCfg = coreApi.configuration ?? {};
@@ -715,9 +830,9 @@ export function AgentNode() {
715
830
  runtimesUrl,
716
831
  spacerUrl: iamUrl,
717
832
  libraryUrl: iamUrl,
718
- aiAgentsUrl: iamUrl,
833
+ aiAgentsUrl,
719
834
  aiInferenceUrl: aiInferenceUrl,
720
- jupyterMcpServerUrl: 'https://mcp.datalayer.run/mcp',
835
+ jupyterMcpServerUrl,
721
836
  otelUrl: iamUrl,
722
837
  growthUrl: iamUrl,
723
838
  successUrl: iamUrl,
@@ -810,6 +925,60 @@ export function AgentNode() {
810
925
  configuration.active_agent_id,
811
926
  selectedAgentId,
812
927
  ]);
928
+ // Keep "is the active agent running" true to life.
929
+ //
930
+ // The restore effect above decides that once, when the page loads, so that
931
+ // it can send the reader to the chat once and not on every tick. But the
932
+ // answer changes: an agent launched later from the gallery, by another tab,
933
+ // or through the API (the SaaS, say) used to leave the header's Chat
934
+ // disabled for as long as the page stayed open, while the gallery — which
935
+ // refetches — plainly showed the agent as active.
936
+ useEffect(() => {
937
+ if (!token || !configurationLoaded) {
938
+ return;
939
+ }
940
+ const activeAgentId = (configuration.active_agent_id || '').trim();
941
+ if (!activeAgentId) {
942
+ setIsActiveAgentRunning(false);
943
+ return;
944
+ }
945
+ let cancelled = false;
946
+ const check = async () => {
947
+ try {
948
+ const response = await fetch(`${AGENT_RUNTIMES_BASE_URL}/api/v1/agents`, { headers: { Authorization: `Bearer ${token}` } });
949
+ if (!response.ok || cancelled) {
950
+ return;
951
+ }
952
+ const payload = await response.json().catch(() => null);
953
+ if (cancelled) {
954
+ return;
955
+ }
956
+ const agents = Array.isArray(payload)
957
+ ? payload
958
+ : payload?.agents || payload?.items || [];
959
+ const active = agents.find(agent => {
960
+ const id = String(agent?.agent_id || agent?.id || '').trim();
961
+ return id === activeAgentId;
962
+ });
963
+ setIsActiveAgentRunning(Boolean(active));
964
+ if (active) {
965
+ setActiveAgentProtocol(normalizeChatProtocol(active.protocol ?? active.transport));
966
+ }
967
+ }
968
+ catch {
969
+ // Leave the last known answer; the next tick asks again.
970
+ }
971
+ };
972
+ void check();
973
+ const timer = window.setInterval(() => void check(), 10_000);
974
+ const onFocus = () => void check();
975
+ window.addEventListener('focus', onFocus);
976
+ return () => {
977
+ cancelled = true;
978
+ window.clearInterval(timer);
979
+ window.removeEventListener('focus', onFocus);
980
+ };
981
+ }, [token, configurationLoaded, configuration.active_agent_id]);
813
982
  useEffect(() => {
814
983
  // If a persisted session is already authenticated on first load,
815
984
  // skip the auth screen and land on the agents gallery.
@@ -1121,7 +1290,7 @@ export function AgentNode() {
1121
1290
  borderColor: 'border.default',
1122
1291
  borderRadius: 2,
1123
1292
  p: 3,
1124
- }, children: [_jsx(Heading, { sx: { fontSize: 2, m: 0, mb: 2 }, children: "Billing Entity" }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: "Loading billing entitys..." })] }))] }), _jsx(Box, { sx: {
1293
+ }, children: [_jsx(Heading, { sx: { fontSize: 2, m: 0, mb: 2 }, children: "Billing Entity" }), _jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Spinner, { size: "small" }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: "Loading billing entities..." })] })] }))] }), _jsx(Box, { sx: {
1125
1294
  display: 'flex',
1126
1295
  flexDirection: 'column',
1127
1296
  gap: 2,
@@ -1132,9 +1301,10 @@ export function AgentNode() {
1132
1301
  p: 3,
1133
1302
  }, children: [_jsx(Heading, { sx: { fontSize: 2, m: 0, mb: 2 }, children: "Share" }), _jsx(ShareAccessComponent, { isOpen: true, displayMode: "inline", requestUrl: `${AGENT_RUNTIMES_BASE_URL}/api/v1/agent-node/sharing`, resourceLabel: "Agent Node", resourceName: "this Agent Node", onClose: handleSharingInlineClose })] }) })] }), error && _jsx(Text, { sx: { color: 'danger.fg' }, children: error }), _jsx(Box, { sx: { display: 'flex', justifyContent: 'flex-end' }, children: _jsx(Button, { variant: "primary", onClick: saveConfiguration, disabled: isSaving, children: isSaving ? 'Saving...' : 'Save' }) })] })), step === 'profile' && (_jsx(AgentNodeProfileView, { token: token, onTokenExpired: handleSignOut, avatarFallbackBackground: avatarPalette.bgAlt, avatarFallbackForeground: avatarPalette.primary })), step === 'gallery' && (_jsx(AgentNodeGallery, { baseUrl: AGENT_RUNTIMES_BASE_URL, token: token, activeAgentId: configuration.active_agent_id, onLaunchError: message => {
1134
1303
  showBanner('error', message);
1135
- }, onLaunched: agentId => {
1304
+ }, onLaunched: (agentId, protocol) => {
1136
1305
  setSelectedAgentId(agentId);
1137
1306
  setIsActiveAgentRunning(true);
1307
+ setActiveAgentProtocol(normalizeChatProtocol(protocol));
1138
1308
  const nextConfiguration = {
1139
1309
  ...configuration,
1140
1310
  active_agent_id: agentId,
@@ -1172,6 +1342,6 @@ export function AgentNode() {
1172
1342
  borderColor: 'border.default',
1173
1343
  borderRadius: 2,
1174
1344
  overflow: 'hidden',
1175
- }, children: isSaasOnlyChat ? (_jsxs(Box, { sx: { p: 4 }, children: [_jsx(Heading, { sx: { fontSize: 2, mb: 2 }, children: "Chat From SaaS" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "This Agent Node deployment is configured for SaaS-only chat. Use the Datalayer Agent Nodes view to open chat sessions over the runtimes tunnel." })] })) : (_jsx(Chat, { protocol: "ag-ui", baseUrl: AGENT_RUNTIMES_BASE_URL, agentId: selectedAgentId, title: chatTitle, placeholder: "Send a message...", description: chatDescription, suggestions: chatSuggestions, submitOnSuggestionClick: true, showHeader: true, height: '70vh', showModelSelector: true, showToolsMenu: true, showSkillsMenu: true, showTokenUsage: true, showInformation: true, autoFocus: true, enableEphemeralNotebook: true, enableEphemeralDocument: true, initialEphemeralSurfaceMode: "notebook", runtimeId: selectedAgentId, ephemeralRuntimeOverride: sandboxRuntimeOverride, kernelEnvironmentName: sandboxEnvironmentName, themeVariant: themeVariant, colorMode: colorMode, ephemeralNotebookCollaborationProvider: ephemeralNotebookCollaborationProvider, ephemeralNotebookCollaborationDocumentId: ephemeralCollaborationDocumentId, ephemeralDocumentCollaboration: ephemeralDocumentCollaboration, historyEndpoint: `${AGENT_RUNTIMES_BASE_URL}/api/v1/history` })) }))] })] }) }) }));
1345
+ }, children: isSaasOnlyChat ? (_jsxs(Box, { sx: { p: 4 }, children: [_jsx(Heading, { sx: { fontSize: 2, mb: 2 }, children: "Chat From SaaS" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "This Agent Node deployment is configured for SaaS-only chat. Use the Datalayer Agent Nodes view to open chat sessions over the runtimes tunnel." })] })) : (_jsx(Chat, { protocol: activeAgentProtocol, baseUrl: AGENT_RUNTIMES_BASE_URL, agentId: selectedAgentId, title: chatTitle, placeholder: "Send a message...", description: chatDescription, suggestions: chatSuggestions, submitOnSuggestionClick: true, showHeader: true, height: '70vh', showModelSelector: true, showToolsMenu: true, showSkillsMenu: true, showTokenUsage: true, showInformation: true, autoFocus: true, enableEphemeralNotebook: true, enableEphemeralDocument: true, initialEphemeralSurfaceMode: "notebook", runtimeId: selectedAgentId, ephemeralRuntimeOverride: sandboxRuntimeOverride, kernelEnvironmentName: sandboxEnvironmentName, themeVariant: themeVariant, colorMode: colorMode, ephemeralNotebookCollaborationProvider: ephemeralNotebookCollaborationProvider, ephemeralNotebookCollaborationDocumentId: ephemeralCollaborationDocumentId, ephemeralDocumentCollaboration: ephemeralDocumentCollaboration, historyEndpoint: `${AGENT_RUNTIMES_BASE_URL}/api/v1/history` })) }))] })] }) }) }));
1176
1346
  }
1177
1347
  export default AgentNode;
@@ -60,7 +60,7 @@ async function fetchStartupKernelId() {
60
60
  }
61
61
  const payload = await resp.json();
62
62
  const sandbox = payload?.sandbox;
63
- if (sandbox?.variant !== 'jupyter') {
63
+ if (sandbox?.variant !== 'jupyter-server') {
64
64
  return undefined;
65
65
  }
66
66
  const kernelId = sandbox?.kernel_id;
package/lib/App.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import './App.css';
2
- export declare function App(): import("react/jsx-runtime").JSX.Element;
2
+ export declare function App(): import("react").JSX.Element;
3
3
  export default App;
@@ -1,3 +1,3 @@
1
1
  import './AppExamples2.css';
2
- export declare function App(): import("react/jsx-runtime").JSX.Element;
2
+ export declare function App(): import("react").JSX.Element;
3
3
  export default App;
@@ -1,3 +1,4 @@
1
+ import type { JSX } from 'react';
1
2
  /**
2
3
  * A single agent specification returned by ``GET /api/v1/agents/library``.
3
4
  * Only the fields consumed by the gallery cards are typed here.
@@ -14,7 +15,19 @@ export type AgentspecSummary = {
14
15
  icon?: string;
15
16
  emoji?: string;
16
17
  color?: string;
18
+ /** The chat protocol the spec is written for: ``ag-ui`` or ``vercel-ai``. */
19
+ protocol?: string;
17
20
  };
21
+ /** The transports a node launches agents with, and the chat can speak. */
22
+ export type AgentTransport = 'ag-ui' | 'vercel-ai';
23
+ /**
24
+ * The transport to launch a spec with: its own when it names one the node
25
+ * can serve, AG-UI otherwise. A spec written for Vercel AI launched as AG-UI
26
+ * answered on an endpoint its chat never called.
27
+ */
28
+ export declare const transportForSpec: (spec: {
29
+ protocol?: string;
30
+ }) => AgentTransport;
18
31
  export type AgentNodeGalleryProps = {
19
32
  /** Base URL of the local Agent Runtimes server. */
20
33
  baseUrl: string;
@@ -23,7 +36,7 @@ export type AgentNodeGalleryProps = {
23
36
  /** Id of the agent currently marked active on the node, if any. */
24
37
  activeAgentId?: string | null;
25
38
  /** Called with the launched agent id once it is running and set active. */
26
- onLaunched: (agentId: string) => void;
39
+ onLaunched: (agentId: string, protocol: AgentTransport) => void;
27
40
  /** Called once the active agent is terminated and cleared on the node. */
28
41
  onTerminated?: (agentId: string) => void;
29
42
  /** Optional callback used by parent to display launch errors (e.g. toast). */
@@ -1,11 +1,15 @@
1
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
2
  import { useCallback, useEffect, useMemo, useState } from 'react';
7
3
  import { Box, Button, Heading, Label, Spinner, Text, TextInput, } from '@primer/react';
8
4
  import { AgentIcon, BeakerIcon, BookIcon, BugIcon, CheckCircleFillIcon, CloudIcon, CodeIcon, CopilotIcon, CpuIcon, DatabaseIcon, DependabotIcon, EyeIcon, FileIcon, GearIcon, GitBranchIcon, GlobeIcon, GraphIcon, HeartIcon, HomeIcon, IssueOpenedIcon, LightBulbIcon, LinkIcon, MailIcon, MegaphoneIcon, NoteIcon, PackageIcon, PencilIcon, PeopleIcon, PlayIcon, PlugIcon, PulseIcon, RocketIcon, SearchIcon, ShareIcon, ShieldCheckIcon, ShieldIcon, SparklesFillIcon, SquirrelIcon, StarIcon, SyncIcon, TableIcon, TagIcon, TelescopeIcon, TerminalIcon, ToolsIcon, ZapIcon, } from '@primer/octicons-react';
5
+ /**
6
+ * The transport to launch a spec with: its own when it names one the node
7
+ * can serve, AG-UI otherwise. A spec written for Vercel AI launched as AG-UI
8
+ * answered on an endpoint its chat never called.
9
+ */
10
+ export const transportForSpec = (spec) => spec.protocol === 'vercel-ai' || spec.protocol === 'vercel-ai-jupyter'
11
+ ? 'vercel-ai'
12
+ : 'ag-ui';
9
13
  const GRID_TEMPLATE = ['1fr', '1fr 1fr', 'repeat(5, minmax(0, 1fr))'];
10
14
  const ICON_REGISTRY = {
11
15
  // Primary agentspec icon values.
@@ -258,9 +262,9 @@ export function AgentNodeGallery({ baseUrl, token, activeAgentId, onLaunched, on
258
262
  body: JSON.stringify({
259
263
  name: requestedName,
260
264
  agent_spec_id: spec.id,
261
- transport: 'ag-ui',
262
- sandbox_variant: 'jupyter',
263
- sandboxVariant: 'jupyter',
265
+ transport: transportForSpec(spec),
266
+ sandbox_variant: 'jupyter-server',
267
+ sandboxVariant: 'jupyter-server',
264
268
  ...(LOCAL_JUPYTER_SANDBOX_URL
265
269
  ? { jupyter_sandbox: LOCAL_JUPYTER_SANDBOX_URL }
266
270
  : {}),
@@ -325,9 +329,9 @@ export function AgentNodeGallery({ baseUrl, token, activeAgentId, onLaunched, on
325
329
  body: JSON.stringify({
326
330
  name: requestedName,
327
331
  agent_spec_id: spec.id,
328
- transport: 'ag-ui',
329
- sandbox_variant: 'jupyter',
330
- sandboxVariant: 'jupyter',
332
+ transport: transportForSpec(spec),
333
+ sandbox_variant: 'jupyter-server',
334
+ sandboxVariant: 'jupyter-server',
331
335
  ...(LOCAL_JUPYTER_SANDBOX_URL
332
336
  ? { jupyter_sandbox: LOCAL_JUPYTER_SANDBOX_URL }
333
337
  : {}),
@@ -361,7 +365,7 @@ export function AgentNodeGallery({ baseUrl, token, activeAgentId, onLaunched, on
361
365
  const variant = String(specPayload?.sandbox_variant || specPayload?.sandboxVariant || '')
362
366
  .trim()
363
367
  .toLowerCase();
364
- mustRecreateForSandbox = variant !== 'jupyter';
368
+ mustRecreateForSandbox = variant !== 'jupyter-server';
365
369
  }
366
370
  if (specResponse.status === 404 || mustRecreateForSandbox) {
367
371
  await fetch(`${baseUrl}/api/v1/agents/${encodeURIComponent(agentId)}`, {
@@ -374,9 +378,9 @@ export function AgentNodeGallery({ baseUrl, token, activeAgentId, onLaunched, on
374
378
  body: JSON.stringify({
375
379
  name: spec.id,
376
380
  agent_spec_id: spec.id,
377
- transport: 'ag-ui',
378
- sandbox_variant: 'jupyter',
379
- sandboxVariant: 'jupyter',
381
+ transport: transportForSpec(spec),
382
+ sandbox_variant: 'jupyter-server',
383
+ sandboxVariant: 'jupyter-server',
380
384
  ...(LOCAL_JUPYTER_SANDBOX_URL
381
385
  ? { jupyter_sandbox: LOCAL_JUPYTER_SANDBOX_URL }
382
386
  : {}),
@@ -406,7 +410,7 @@ export function AgentNodeGallery({ baseUrl, token, activeAgentId, onLaunched, on
406
410
  if (!activeResponse.ok) {
407
411
  throw new Error(`Failed to set active agent (${activeResponse.status})`);
408
412
  }
409
- onLaunched(agentId);
413
+ onLaunched(agentId, transportForSpec(spec));
410
414
  }
411
415
  catch (reason) {
412
416
  const message = reason?.message || 'Unable to launch agent.';
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { create } from 'zustand';
6
6
  import { createJSONStorage, persist } from 'zustand/middleware';
7
- import { themeConfigs, } from '@datalayer/primer-addons';
7
+ import { themeConfigs, themeVariants, } from '@datalayer/primer-addons';
8
8
  const STORAGE_KEY = 'agent-runtimes-agent-node-theme';
9
9
  const COOKIE_MAX_AGE_SECONDS = 60 * 60 * 24 * 365;
10
10
  const colorModeCycle = {
@@ -17,11 +17,12 @@ const normalizeThemeVariant = (value) => {
17
17
  if (value === 'ocean') {
18
18
  return 'earth';
19
19
  }
20
- if (value === 'datalayer' ||
21
- value === 'spatial' ||
22
- value === 'lovely' ||
23
- value === 'matrix' ||
24
- value === 'earth') {
20
+ // Every variant the registry knows, read from the registry: a list written
21
+ // out here had stopped at five, and picking any of the three added since
22
+ // (sand, ivory, sun) was silently turned into Earth — the selector changed
23
+ // and the page did not.
24
+ if (typeof value === 'string' &&
25
+ themeVariants.includes(value)) {
25
26
  return value;
26
27
  }
27
28
  return 'earth';
@@ -2,7 +2,7 @@
2
2
  * AgentDetails component - Shows detailed information about the agent
3
3
  * including name, protocol, URL, message count, and context details.
4
4
  */
5
- import type { ReactNode } from 'react';
5
+ import { type ReactNode } from 'react';
6
6
  import { type FullContextResponse } from '../context/ContextInspector';
7
7
  import type { ContextSnapshotResponse } from '../context/ContextPanel';
8
8
  import type { OAuthProvider, OAuthProviderConfig, Identity } from '../identity';
@@ -40,6 +40,12 @@ export interface AgentDetailsProps {
40
40
  onBack: () => void;
41
41
  /** Whether to show the header with back button (default: true) */
42
42
  showBackHeader?: boolean;
43
+ /**
44
+ * Whether the content carries its own padding. Off when the panel is
45
+ * embedded in a page that already sets the measure — the details then
46
+ * align with the sections around them instead of sitting inset.
47
+ */
48
+ padded?: boolean;
43
49
  /** Whether to show context usage/history and context snapshot sections (default: true) */
44
50
  showUsage?: boolean;
45
51
  /** Live MCP status from WS — bypasses REST polling when provided */
@@ -64,5 +70,5 @@ interface MCPToolsetsStatus {
64
70
  /**
65
71
  * AgentDetails component displays comprehensive information about the agent.
66
72
  */
67
- export declare function AgentDetails({ name, icon, emoji, protocol, url, messageCount, agentId, apiBase, identityProviders, onIdentityConnect, onIdentityDisconnect, onBack, showBackHeader, showUsage, mcpStatusData, codemodeStatusData, contextSnapshotData, fullContextData, }: AgentDetailsProps): import("react/jsx-runtime").JSX.Element;
73
+ export declare function AgentDetails({ name, icon, emoji, protocol, url, messageCount, agentId, apiBase, identityProviders, onIdentityConnect, onIdentityDisconnect, onBack, showBackHeader, showUsage, padded, mcpStatusData, codemodeStatusData, contextSnapshotData, fullContextData, }: AgentDetailsProps): import("react").JSX.Element;
68
74
  export default AgentDetails;