@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
@@ -0,0 +1,201 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * The Agents plugin: where the agent runs, and the sandbox that comes with it.
7
+ *
8
+ * It was the "code sandbox" plugin, and the rename follows what the choice
9
+ * came to mean. Picking a target used to say only where *code* ran; now it
10
+ * decides where the *agent* runs too — in this page with the Vercel AI SDK, or
11
+ * on a server with pydantic-ai — because the location is what a harness can
12
+ * be, whatever a spec asks for. One control, one answer.
13
+ *
14
+ * It owns the sandbox and publishes it as a service; the notebook and document
15
+ * plugins depend on this plugin rather than on a connection of their own.
16
+ *
17
+ * Which agentspec the session runs is a different question, and belongs to
18
+ * `@datalayer/loop-plugin-agentspecs`.
19
+ *
20
+ * @module loop/plugins/agents/plugin
21
+ */
22
+ import { ServerIcon } from '@primer/octicons-react';
23
+ import { contribution, definePlugin } from '@datalayer/reactor';
24
+ import { LoopAgentBlueprint, LoopAgentGate, LoopCommand, LoopSlots, LoopViewType, } from '../../core';
25
+ import { SandboxStatusBridge } from './SandboxStatusBridge';
26
+ import { DatalayerAgentMount } from './DatalayerAgentMount';
27
+ import { AgentSummaryPanel } from './AgentSummaryPanel';
28
+ import { AnonymousKeyBadge, AnonymousKeyHeaderBadge, } from './AnonymousKeyBadge';
29
+ import { SandboxSelector } from './SandboxSelector';
30
+ import { TeamMemberPicker } from './TeamMemberPicker';
31
+ import { createTeamSelection } from './team';
32
+ import { createSwitchableSandboxService, TARGET_SPECS, targetHasAgent, } from './switchable';
33
+ export const AGENTS_PLUGIN_NAME = '@datalayer/loop-plugin-agents';
34
+ export const AgentsPlugin = definePlugin({
35
+ name: AGENTS_PLUGIN_NAME,
36
+ displayName: 'Agents',
37
+ description: 'Where the agent and its code run: this page, a local server, or a Datalayer runtime.',
38
+ octicon: 'container',
39
+ emoji: '\u{1F4E6}',
40
+ config: { serverUrl: '', target: 'local' },
41
+ // The capacity plugins' opening: what the Local agent is created from.
42
+ contributionPoints: [LoopAgentBlueprint],
43
+ // This plugin owns a sandbox — a kernel, a WebSocket, an execution history.
44
+ // Rebuilding it on enable would hand every view a fresh service while the
45
+ // old one kept the connection: toggling the checkbox would silently detach
46
+ // the notebook from the kernel it is showing.
47
+ preserveOutput: true,
48
+ build({ config, reactor }) {
49
+ // Read once: it decides both what is offered and where the sandbox starts,
50
+ // and those two must not be able to disagree.
51
+ const showVariants = config.showAgentVariants ?? true;
52
+ // Undefined for a workspace with no team, or a team id that names nothing:
53
+ // a picker is worth having only when there is a choice to make.
54
+ const team = config.teamId ? createTeamSelection(config.teamId) : undefined;
55
+ return {
56
+ team,
57
+ sandbox: createSwitchableSandboxService({
58
+ serverUrl: config.serverUrl,
59
+ // Pinned when there is no choice to make: a host that hid the control
60
+ // must not be started on a target the reader cannot move off.
61
+ initialTarget: showVariants ? config.target : 'browser',
62
+ kernelSource: config.kernelSource,
63
+ localAgent: config.localAgent,
64
+ // The capacity plugins' say, read at switch time — lazily, because a
65
+ // blueprint is a contribution and its plugin may register after this
66
+ // build runs.
67
+ blueprint: () => {
68
+ const entry = reactor.getContributions(LoopAgentBlueprint)[0]?.value;
69
+ if (!entry) {
70
+ return undefined;
71
+ }
72
+ return {
73
+ ...(entry.specId ? { agent_spec_id: entry.specId } : null),
74
+ ...entry.createPayload,
75
+ };
76
+ },
77
+ }),
78
+ // In a slot rather than inside the sandbox view: the sandbox does not
79
+ // stop existing when someone switches to the chat tab, and neither
80
+ // should the connection that tracks it.
81
+ components: [
82
+ {
83
+ slot: LoopSlots.status,
84
+ id: 'sandbox-status',
85
+ Component: SandboxStatusBridge,
86
+ },
87
+ {
88
+ // Renders nothing; it launches the Datalayer target's agent and
89
+ // reports the runtime. In the status slot because that is where the
90
+ // things that keep the workspace informed live. It reads the spec
91
+ // from this plugin's config itself, so no closure is needed here,
92
+ // and it is loaded lazily so the runtime stack it needs stays out
93
+ // of every host's module graph.
94
+ slot: LoopSlots.status,
95
+ id: 'datalayer-agent',
96
+ Component: DatalayerAgentMount,
97
+ },
98
+ // In the header, where the reader can see where their code is running
99
+ // and move it. Left out entirely rather than disabled when the host
100
+ // gave no choice: a control with one option is furniture.
101
+ // Beside the sandbox control: one says where the agent runs, the
102
+ // other which agent it is, and a person reads them together. The
103
+ // footer under the prompt offers the same choice for a workspace
104
+ // mounted without a header.
105
+ ...(team && config.showTeamPicker !== false
106
+ ? [
107
+ {
108
+ slot: LoopSlots.header,
109
+ id: 'team-member-picker',
110
+ Component: TeamMemberPicker,
111
+ },
112
+ ]
113
+ : []),
114
+ ...(showVariants
115
+ ? [
116
+ {
117
+ slot: LoopSlots.header,
118
+ id: 'sandbox-selector',
119
+ Component: SandboxSelector,
120
+ },
121
+ ]
122
+ : []),
123
+ // What the workspace is talking to. Contributed here rather than drawn
124
+ // by whichever page embeds the workspace: the agent is chosen inside
125
+ // it, by this plugin, so this plugin is the only thing that can
126
+ // describe it without going stale. Left out entirely when the host
127
+ // has said no — an unmounted component costs nothing.
128
+ ...(config.showAgentSummary === false
129
+ ? []
130
+ : [
131
+ {
132
+ slot: LoopSlots.header,
133
+ id: 'agent-summary',
134
+ Component: AgentSummaryPanel,
135
+ },
136
+ ]),
137
+ // How long a visitor with no account has left. In both headers,
138
+ // because a host shows at most one of them and the clock must survive
139
+ // either choice: the landing page used to hide the workspace header
140
+ // and keep the chat's, and now does the opposite. The badge renders
141
+ // nothing without an anonymous key, so the workspace that shows both
142
+ // rows costs a duplicate only in the one anonymous case.
143
+ {
144
+ slot: LoopSlots.chatHeader,
145
+ id: 'anonymous-key',
146
+ Component: AnonymousKeyBadge,
147
+ },
148
+ {
149
+ slot: LoopSlots.header,
150
+ id: 'anonymous-key-header',
151
+ // The ordered variant: in the trailing cluster, just before the
152
+ // full-screen icon — see `AnonymousKeyHeaderBadge`.
153
+ Component: AnonymousKeyHeaderBadge,
154
+ },
155
+ ],
156
+ };
157
+ },
158
+ /**
159
+ * Tell the chat whether there is anything to talk to.
160
+ *
161
+ * Through `ctx.contribute` rather than the declarative `contributes` list,
162
+ * because the answer depends on the service this plugin *built* — the target
163
+ * it is currently on. This is the whole of the coupling between the two
164
+ * plugins: the chat imports no sandbox, the sandbox imports no chat, and the
165
+ * reactor carries the one fact that has to cross.
166
+ */
167
+ register({ contribute, state }) {
168
+ const sandbox = state.getOutput()?.sandbox;
169
+ if (!sandbox) {
170
+ return;
171
+ }
172
+ return contribute(LoopAgentGate, {
173
+ // Read from the workspace, not from the signal: this is called during
174
+ // the chat's render, and the workspace is what React re-runs it for.
175
+ check: workspace => {
176
+ const target = workspace.sandbox.target ??
177
+ sandbox.target.peek();
178
+ return targetHasAgent(target) || TARGET_SPECS[target].noAgentReason;
179
+ },
180
+ }, { id: 'sandbox-target' });
181
+ },
182
+ contributes: [
183
+ contribution(LoopViewType, {
184
+ viewType: 'sandbox',
185
+ title: 'Sandbox',
186
+ icon: ServerIcon,
187
+ order: 40,
188
+ load: () => import('./SandboxView'),
189
+ }, { id: 'sandbox', order: 40 }),
190
+ contribution(LoopCommand, {
191
+ name: 'sandbox',
192
+ aliases: ['code-sandbox'],
193
+ description: 'Show the code sandbox: variant, kernel, Jupyter server',
194
+ group: 'Capabilities',
195
+ run: async ({ workspace }) => {
196
+ workspace.setActiveViewType('sandbox');
197
+ },
198
+ }, { id: 'sandbox' }),
199
+ ],
200
+ });
201
+ export default AgentsPlugin;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * The sandbox, owned in one place.
3
+ *
4
+ * Nothing else in LOOP talks to a sandbox directly. The notebook and the
5
+ * document ask this service whether there is a kernel to bind to; the A2UI
6
+ * plugin asks it what executed. That is the point of a base plugin: one owner
7
+ * for a fact that several views need, rather than four components each opening
8
+ * their own connection and each disposing it differently.
9
+ *
10
+ * State lives in reactor signals rather than React state, because the owner is
11
+ * an extension and not a component — a view can unmount without the sandbox
12
+ * forgetting what it is doing.
13
+ *
14
+ * @module loop/plugins/agents/service
15
+ */
16
+ import { type ReadonlySignal } from '@datalayer/reactor';
17
+ import type { SandboxSnapshot, SandboxState } from '../../core';
18
+ /** Status as the server reports it over the configure WebSocket. */
19
+ export type SandboxStatusPayload = {
20
+ variant?: string;
21
+ sandbox_running?: boolean;
22
+ jupyter_connected?: boolean;
23
+ jupyter_url?: string;
24
+ kernel_id?: string;
25
+ kernel_name?: string;
26
+ execution_state?: string;
27
+ is_executing?: boolean;
28
+ jupyter_token?: string;
29
+ /**
30
+ * The agent-runtimes server backing this sandbox, when it is not the host's.
31
+ *
32
+ * Reported by whichever plugin allocated it rather than read from a server's
33
+ * status: a Datalayer runtime brings its own agent, and the workspace has no
34
+ * other way to learn where it is.
35
+ */
36
+ agent_base_url?: string;
37
+ };
38
+ export type SandboxService = {
39
+ /**
40
+ * What backs this sandbox.
41
+ *
42
+ * `'server'` has an agent-runtimes server behind it and can therefore reach
43
+ * server-side facilities — the A2UI converter, snapshots. `'browser'` runs in
44
+ * the page and cannot. A caller that needs one should ask, rather than
45
+ * discover it from a failed request.
46
+ */
47
+ readonly kind: 'server' | 'browser';
48
+ /** The sandbox as last reported. */
49
+ readonly snapshot: ReadonlySignal<SandboxSnapshot>;
50
+ /** Raw status, for views that need more than the summary. */
51
+ readonly status: ReadonlySignal<SandboxStatusPayload | null>;
52
+ /** Whether code can be executed right now. */
53
+ readonly ready: ReadonlySignal<boolean>;
54
+ /** Feed in a status update (the WebSocket bridge calls this). */
55
+ report: (status: SandboxStatusPayload | null) => void;
56
+ /**
57
+ * Note that a lifecycle operation is under way.
58
+ *
59
+ * `reason` belongs with `error` and nowhere else: a failure a reader cannot
60
+ * see the cause of is one they can only guess at.
61
+ */
62
+ setState: (state: SandboxState, reason?: string) => void;
63
+ /** Execute code in the sandbox and return what it produced. */
64
+ execute: (code: string) => Promise<SandboxExecution>;
65
+ /** The most recent execution, for whoever wants to render it. */
66
+ readonly lastExecution: ReadonlySignal<SandboxExecution | null>;
67
+ /** Where this service talks to. */
68
+ readonly serverUrl: string;
69
+ /**
70
+ * Start listening to the server's sandbox status.
71
+ *
72
+ * Returns a stop function. Plain TypeScript rather than a React hook on
73
+ * purpose: the owner of a sandbox is an extension, not a component, and
74
+ * pulling `useSandbox` in here would drag Jupyter and Lumino — which touch
75
+ * the DOM at import time — into every module that imports this plugin.
76
+ */
77
+ connect: (agentId?: string) => () => void;
78
+ };
79
+ /** One execution, in the shape the server returns it. */
80
+ export type SandboxExecution = {
81
+ code: string;
82
+ success: boolean;
83
+ stdout?: string;
84
+ stderr?: string;
85
+ error?: string;
86
+ /** Raw Jupyter outputs, when the variant produces them. */
87
+ outputs?: unknown[];
88
+ startedAt: number;
89
+ finishedAt: number;
90
+ };
91
+ /**
92
+ * Derive the summary from a raw status.
93
+ *
94
+ * A Jupyter sandbox reports readiness as `jupyter_connected` rather than
95
+ * `sandbox_running`; both mean the same thing to a caller deciding whether it
96
+ * can execute, so the difference is resolved here rather than in every view.
97
+ */
98
+ export declare function summarize(status: SandboxStatusPayload | null, fallback: SandboxState): SandboxSnapshot;
99
+ export declare function createServerSandboxService(serverUrl: string): SandboxService;
@@ -0,0 +1,167 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * The sandbox, owned in one place.
7
+ *
8
+ * Nothing else in LOOP talks to a sandbox directly. The notebook and the
9
+ * document ask this service whether there is a kernel to bind to; the A2UI
10
+ * plugin asks it what executed. That is the point of a base plugin: one owner
11
+ * for a fact that several views need, rather than four components each opening
12
+ * their own connection and each disposing it differently.
13
+ *
14
+ * State lives in reactor signals rather than React state, because the owner is
15
+ * an extension and not a component — a view can unmount without the sandbox
16
+ * forgetting what it is doing.
17
+ *
18
+ * @module loop/plugins/agents/service
19
+ */
20
+ import { computed, signal, } from '@datalayer/reactor';
21
+ /**
22
+ * Derive the summary from a raw status.
23
+ *
24
+ * A Jupyter sandbox reports readiness as `jupyter_connected` rather than
25
+ * `sandbox_running`; both mean the same thing to a caller deciding whether it
26
+ * can execute, so the difference is resolved here rather than in every view.
27
+ */
28
+ export function summarize(status, fallback) {
29
+ if (!status) {
30
+ return { state: fallback };
31
+ }
32
+ /*
33
+ * Running, by either account.
34
+ *
35
+ * `sandbox_running` is the manager's own answer. The second clause is for
36
+ * the variants reached over a Jupyter server, where the manager can be
37
+ * between sandboxes while the server itself is perfectly alive — and it has
38
+ * to name every such variant. It named only `jupyter-server`, so a Datalayer
39
+ * runtime showed as idle whatever it was doing, which is what left the
40
+ * notebook and the document with nothing to connect to.
41
+ */
42
+ const overJupyter = status.variant === 'jupyter-server' || status.variant === 'datalayer';
43
+ const running = Boolean(status.sandbox_running) ||
44
+ (overJupyter && Boolean(status.jupyter_connected));
45
+ return {
46
+ state: running ? 'running' : fallback === 'running' ? 'idle' : fallback,
47
+ variant: status.variant,
48
+ kernelId: status.kernel_id,
49
+ jupyterUrl: status.jupyter_url,
50
+ jupyterToken: status.jupyter_token,
51
+ agentBaseUrl: status.agent_base_url,
52
+ };
53
+ }
54
+ /** Reconnect backoff, so a server that is down is not hammered. */
55
+ const RECONNECT_BASE_MS = 1000;
56
+ const RECONNECT_MAX_MS = 30000;
57
+ export function createServerSandboxService(serverUrl) {
58
+ const status = signal(null);
59
+ const lifecycle = signal('idle');
60
+ /* Set beside `lifecycle`, and only meaningful while it says `error`. */
61
+ const lifecycleReason = signal(undefined);
62
+ const lastExecution = signal(null);
63
+ const snapshot = computed(() => ({
64
+ ...summarize(status.value, lifecycle.value),
65
+ errorReason: lifecycle.value === 'error' ? lifecycleReason.value : undefined,
66
+ }));
67
+ const ready = computed(() => snapshot.value.state === 'running');
68
+ return {
69
+ kind: 'server',
70
+ connect(agentId) {
71
+ if (typeof WebSocket === 'undefined') {
72
+ return () => { };
73
+ }
74
+ let socket = null;
75
+ let retry = null;
76
+ let attempts = 0;
77
+ let stopped = false;
78
+ const open = () => {
79
+ if (stopped) {
80
+ return;
81
+ }
82
+ const base = serverUrl.replace(/^http/, 'ws');
83
+ const query = agentId ? `?agent_id=${encodeURIComponent(agentId)}` : '';
84
+ socket = new WebSocket(`${base}/api/v1/configure/sandbox/ws${query}`);
85
+ socket.onopen = () => {
86
+ attempts = 0;
87
+ };
88
+ socket.onmessage = event => {
89
+ try {
90
+ status.value = JSON.parse(String(event.data));
91
+ }
92
+ catch {
93
+ // A message we cannot read is not a reason to drop the connection.
94
+ }
95
+ };
96
+ socket.onclose = () => {
97
+ if (stopped) {
98
+ return;
99
+ }
100
+ status.value = null;
101
+ attempts += 1;
102
+ const delay = Math.min(RECONNECT_BASE_MS * 2 ** (attempts - 1), RECONNECT_MAX_MS);
103
+ retry = setTimeout(open, delay);
104
+ };
105
+ };
106
+ open();
107
+ return () => {
108
+ stopped = true;
109
+ if (retry) {
110
+ clearTimeout(retry);
111
+ }
112
+ socket?.close();
113
+ socket = null;
114
+ };
115
+ },
116
+ snapshot,
117
+ status,
118
+ ready,
119
+ lastExecution,
120
+ serverUrl,
121
+ report(next) {
122
+ status.value = next;
123
+ },
124
+ setState(state, reason) {
125
+ lifecycle.value = state;
126
+ // Cleared on any other state, so a reason cannot outlive the failure it
127
+ // describes and reappear beside a healthy sandbox.
128
+ lifecycleReason.value = state === 'error' ? reason : undefined;
129
+ },
130
+ async execute(code) {
131
+ const startedAt = Date.now();
132
+ try {
133
+ const response = await fetch(`${serverUrl}/api/v1/sandbox/execute`, {
134
+ method: 'POST',
135
+ headers: { 'content-type': 'application/json' },
136
+ body: JSON.stringify({ code }),
137
+ });
138
+ const payload = response.ok ? await response.json() : null;
139
+ const execution = {
140
+ code,
141
+ success: response.ok && !payload?.error,
142
+ stdout: payload?.stdout,
143
+ stderr: payload?.stderr,
144
+ error: response.ok
145
+ ? payload?.error
146
+ : `Execution failed: ${response.status}`,
147
+ outputs: payload?.outputs,
148
+ startedAt,
149
+ finishedAt: Date.now(),
150
+ };
151
+ lastExecution.value = execution;
152
+ return execution;
153
+ }
154
+ catch (error) {
155
+ const execution = {
156
+ code,
157
+ success: false,
158
+ error: error instanceof Error ? error.message : String(error),
159
+ startedAt,
160
+ finishedAt: Date.now(),
161
+ };
162
+ lastExecution.value = execution;
163
+ return execution;
164
+ }
165
+ },
166
+ };
167
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * An agentspec's own subagents, as agents the in-page loop can hand work to.
3
+ *
4
+ * A spec such as `example-subagents` declares a researcher and a writer under
5
+ * `subagents`; on a server the pydantic-ai harness turns those into delegation
6
+ * tools. In the page the loop turns with the Vercel AI SDK, and until now it
7
+ * read subagents from a *team* only — so the same spec, run in the browser,
8
+ * had nobody to delegate to and the example that exists to show delegation
9
+ * showed none. This is the spec's list in the shape the browser runtime wants,
10
+ * with a general-purpose helper when the spec asks for one.
11
+ *
12
+ * @module loop/plugins/agents/specSubagents
13
+ */
14
+ import type { BrowserSubagent } from '../../../runtimes/browser';
15
+ import type { Agentspec } from '../../../types';
16
+ /** The subagents an agentspec declares, or none. */
17
+ export declare function specSubagents(spec: Agentspec | undefined): BrowserSubagent[];
18
+ export default specSubagents;
@@ -0,0 +1,33 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import { getAgentspecs } from '../../../specs/agents';
6
+ const GENERAL_PURPOSE = {
7
+ name: 'general-purpose',
8
+ description: 'A capable generalist for a task none of the specialists covers: research, ' +
9
+ 'reasoning, drafting, checking.',
10
+ instructions: 'You are a capable general-purpose assistant. Carry out the task you are ' +
11
+ 'given completely and report the result plainly, saying what you could not do.',
12
+ };
13
+ /** The subagents an agentspec declares, or none. */
14
+ export function specSubagents(spec) {
15
+ const config = spec?.subagents;
16
+ if (!config) {
17
+ return [];
18
+ }
19
+ const own = (config.subagents ?? []).map((entry) => {
20
+ // A `ref` names an agentspec the subagent *is*: its prompt, model and
21
+ // icon come from there, and the entry's own words win where it has any.
22
+ const referenced = entry.ref ? getAgentspecs(entry.ref) : undefined;
23
+ return {
24
+ name: entry.name,
25
+ description: entry.description || referenced?.description || entry.name,
26
+ instructions: entry.instructions ?? referenced?.systemPrompt,
27
+ model: entry.model ?? referenced?.model ?? config.defaultModel,
28
+ icon: referenced?.icon,
29
+ };
30
+ });
31
+ return config.includeGeneralPurpose ? [...own, GENERAL_PURPOSE] : own;
32
+ }
33
+ export default specSubagents;
@@ -0,0 +1,107 @@
1
+ /**
2
+ * One sandbox, four places it can run.
3
+ *
4
+ * `browser` is Pyodide in the page. The other three are server-backed and
5
+ * differ in what the server is asked to run: a Jupyter server beside you, an
6
+ * anonymous one anybody can reach, or a Datalayer runtime. A workspace should
7
+ * not care which; the notebook binds to whatever kernel is there, and the
8
+ * switch is one control.
9
+ *
10
+ * Local and `datalayer` bring an agent with them. Browser and anonymous
11
+ * Jupyter are sandbox-only, which is why `hasAgent` is part of the target's
12
+ * description rather than something each caller works out.
13
+ *
14
+ * The composite owns both implementations and delegates to the active one, so
15
+ * switching is a real swap rather than a flag: the old backing is disconnected
16
+ * before the new one starts, and every signal a view reads follows across.
17
+ *
18
+ * @module loop/plugins/agents/switchable
19
+ */
20
+ import { type ReadonlySignal } from '@datalayer/reactor';
21
+ import { type ServiceManagerSource } from './browserService';
22
+ import { type SandboxService } from './service';
23
+ /** Where the sandbox runs. */
24
+ export type SandboxTarget = 'browser' | 'local' | 'jupyter' | 'datalayer';
25
+ /**
26
+ * The anonymous Jupyter server the `jupyter` target uses.
27
+ *
28
+ * The same one the jupyter-react examples point at: a real server, reachable
29
+ * without an account, so a workspace can execute code with nothing installed
30
+ * and nobody signed in.
31
+ */
32
+ export declare const ANONYMOUS_JUPYTER_URL = "https://prod1.datalayer.run/api/jupyter-server";
33
+ export declare const ANONYMOUS_JUPYTER_TOKEN = "60c1661cc408f978c309d04157af55c9588ff9557c9380e4fb50785750703da6";
34
+ /** What a target is, and what it can do. */
35
+ export type SandboxTargetSpec = {
36
+ label: string;
37
+ hint: string;
38
+ /**
39
+ * Whether an agent runs alongside the sandbox.
40
+ *
41
+ * True in the browser as well now, though not the same kind: there the loop
42
+ * turns in the page rather than on a server. {@link targetRunsAgentInPage}
43
+ * is the question a chat asks to know which of the two it is talking to.
44
+ */
45
+ hasAgent: boolean;
46
+ /** Why there is nothing to chat with. Empty when there is. */
47
+ noAgentReason: string;
48
+ /** What the server is asked to run. Absent for the in-page target. */
49
+ configure?: {
50
+ variant: string;
51
+ jupyter_url?: string;
52
+ jupyter_token?: string;
53
+ };
54
+ };
55
+ /** The four, in the order the control shows them: nearest first. */
56
+ export declare const SANDBOX_TARGETS: readonly SandboxTarget[];
57
+ export declare const TARGET_SPECS: Record<SandboxTarget, SandboxTargetSpec>;
58
+ /** Whether an agent runs on this target — the question the chat asks. */
59
+ export declare function targetHasAgent(target: SandboxTarget): boolean;
60
+ /**
61
+ * Whether that agent's loop turns in this page rather than on a server.
62
+ *
63
+ * The other half of {@link targetHasAgent}, and the one that decides which
64
+ * protocol a chat speaks: an in-page agent is reached by calling it, not by
65
+ * addressing it.
66
+ */
67
+ export declare function targetRunsAgentInPage(target: SandboxTarget): boolean;
68
+ export type SwitchableSandboxService = SandboxService & {
69
+ /** Where the sandbox currently runs. */
70
+ readonly target: ReadonlySignal<SandboxTarget>;
71
+ /** Move it. Disconnects the old backing before starting the new one. */
72
+ setTarget: (target: SandboxTarget) => Promise<void>;
73
+ /** The in-browser services, when the browser is the active target. */
74
+ getServiceManager: () => unknown | null;
75
+ };
76
+ export type SwitchableConfig = {
77
+ serverUrl: string;
78
+ initialTarget?: SandboxTarget;
79
+ /**
80
+ * Agent to create when Local is selected.
81
+ *
82
+ * A local agent owns its Jupyter sandbox. Supplying this payload makes the
83
+ * Local transition create/reuse that agent instead of starting the server's
84
+ * unrelated global sandbox.
85
+ */
86
+ localAgent?: {
87
+ createPayload: Record<string, unknown>;
88
+ };
89
+ /**
90
+ * The capacity plugins' account of the agent, read at switch time.
91
+ *
92
+ * A lazy getter rather than a value: blueprints are contributions, and the
93
+ * plugin that contributes one may register after this service is built.
94
+ * When it returns a payload it wins over `localAgent` — a mounted capacity
95
+ * plugin is the more specific statement about what this workspace runs.
96
+ */
97
+ blueprint?: () => Record<string, unknown> | undefined;
98
+ /**
99
+ * Where the in-page kernel comes from.
100
+ *
101
+ * Defaults to JupyterLite. A JupyterLab host supplies the application's own
102
+ * services instead, so the agent runs in the kernel the user is already
103
+ * looking at rather than a second one beside it.
104
+ */
105
+ kernelSource?: ServiceManagerSource;
106
+ };
107
+ export declare function createSwitchableSandboxService({ serverUrl, initialTarget, kernelSource, localAgent, blueprint, }: SwitchableConfig): SwitchableSandboxService;