@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,405 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * One sandbox, four places it can run.
7
+ *
8
+ * `browser` is Pyodide in the page. The other three are server-backed and
9
+ * differ in what the server is asked to run: a Jupyter server beside you, an
10
+ * anonymous one anybody can reach, or a Datalayer runtime. A workspace should
11
+ * not care which; the notebook binds to whatever kernel is there, and the
12
+ * switch is one control.
13
+ *
14
+ * Local and `datalayer` bring an agent with them. Browser and anonymous
15
+ * Jupyter are sandbox-only, which is why `hasAgent` is part of the target's
16
+ * description rather than something each caller works out.
17
+ *
18
+ * The composite owns both implementations and delegates to the active one, so
19
+ * switching is a real swap rather than a flag: the old backing is disconnected
20
+ * before the new one starts, and every signal a view reads follows across.
21
+ *
22
+ * @module loop/plugins/agents/switchable
23
+ */
24
+ import { computed, signal, } from '@datalayer/reactor';
25
+ import { browserSource, createBrowserSandboxService, } from './browserService';
26
+ import { createServerSandboxService, } from './service';
27
+ /**
28
+ * The anonymous Jupyter server the `jupyter` target uses.
29
+ *
30
+ * The same one the jupyter-react examples point at: a real server, reachable
31
+ * without an account, so a workspace can execute code with nothing installed
32
+ * and nobody signed in.
33
+ */
34
+ export const ANONYMOUS_JUPYTER_URL = 'https://prod1.datalayer.run/api/jupyter-server';
35
+ export const ANONYMOUS_JUPYTER_TOKEN = '60c1661cc408f978c309d04157af55c9588ff9557c9380e4fb50785750703da6';
36
+ /** The four, in the order the control shows them: nearest first. */
37
+ export const SANDBOX_TARGETS = [
38
+ 'browser',
39
+ 'local',
40
+ 'jupyter',
41
+ 'datalayer',
42
+ ];
43
+ export const TARGET_SPECS = {
44
+ browser: {
45
+ label: 'Browser',
46
+ hint: 'Python in this page (Pyodide), with the agent loop running here too. Only the model is asked over the network.',
47
+ // The agent runs here now, with the Vercel AI SDK. "No server" stopped
48
+ // meaning "no agent" when the loop learned to turn in the page — and the
49
+ // location decides the harness, whatever a spec's own `harness` asks for,
50
+ // because a page cannot turn a pydantic-ai loop at all.
51
+ hasAgent: true,
52
+ noAgentReason: '',
53
+ },
54
+ local: {
55
+ label: 'Local',
56
+ hint: 'A local agent, with the Jupyter server it starts beside itself.',
57
+ hasAgent: true,
58
+ noAgentReason: '',
59
+ /*
60
+ * `jupyter-server` with the URL explicitly cleared.
61
+ *
62
+ * The variant names *where the sandbox is relative to the agent*, not
63
+ * which server it is: colocated, so the agent starts one and the UI drives
64
+ * that. Sending no URL is not the same as sending an empty one — the
65
+ * server reads a missing URL as "keep what you have", so coming here from
66
+ * the Jupyter target left the local agent driving the anonymous server on
67
+ * prod1, which is the opposite of what this target means.
68
+ */
69
+ configure: {
70
+ variant: 'jupyter-server',
71
+ jupyter_url: '',
72
+ jupyter_token: '',
73
+ },
74
+ },
75
+ jupyter: {
76
+ label: 'Jupyter',
77
+ // Named, unlike Local and Datalayer, whose servers belong to their agent.
78
+ hint: 'A named Jupyter server: the anonymous one on prod1.datalayer.run.',
79
+ hasAgent: false,
80
+ noAgentReason: 'No agent on an anonymous Jupyter server',
81
+ configure: {
82
+ variant: 'jupyter-server',
83
+ jupyter_url: ANONYMOUS_JUPYTER_URL,
84
+ jupyter_token: ANONYMOUS_JUPYTER_TOKEN,
85
+ },
86
+ },
87
+ datalayer: {
88
+ label: 'Datalayer',
89
+ hint: 'A Datalayer runtime running the agent this workspace asks for.',
90
+ hasAgent: true,
91
+ noAgentReason: '',
92
+ /*
93
+ * No `configure`, and that is the change.
94
+ *
95
+ * It used to tell the *host's* agent-runtimes server to put its sandbox on
96
+ * a Datalayer runtime — a Jupyter server in the cloud with the agent still
97
+ * running locally, which is not what the target says it is. A person
98
+ * picked Datalayer and stayed on whatever agent the host had.
99
+ *
100
+ * The agent is launched from an agentspec instead, by
101
+ * `DatalayerAgentBridge`, which reports the runtime it gets back.
102
+ */
103
+ },
104
+ };
105
+ /** Whether an agent runs on this target — the question the chat asks. */
106
+ export function targetHasAgent(target) {
107
+ return TARGET_SPECS[target]?.hasAgent ?? false;
108
+ }
109
+ /**
110
+ * Whether that agent's loop turns in this page rather than on a server.
111
+ *
112
+ * The other half of {@link targetHasAgent}, and the one that decides which
113
+ * protocol a chat speaks: an in-page agent is reached by calling it, not by
114
+ * addressing it.
115
+ */
116
+ export function targetRunsAgentInPage(target) {
117
+ return target === 'browser';
118
+ }
119
+ export function createSwitchableSandboxService({ serverUrl, initialTarget = 'local', kernelSource, localAgent, blueprint, }) {
120
+ const target = signal(initialTarget);
121
+ // Both implementations exist from the start, but neither connects until it is
122
+ // the active one — a Pyodide kernel that nobody asked for is megabytes of
123
+ // download, and a WebSocket to a server nobody chose is noise in the logs.
124
+ const server = createServerSandboxService(serverUrl);
125
+ const browser = createBrowserSandboxService(kernelSource ?? browserSource());
126
+ const active = computed(() => target.value === 'browser' ? browser : server);
127
+ let disconnect = null;
128
+ let agentId;
129
+ const snapshot = computed(() => active.value.snapshot.value);
130
+ const status = computed(() => active.value.status.value);
131
+ const ready = computed(() => active.value.ready.value);
132
+ const lastExecution = computed(() => active.value.lastExecution.value);
133
+ /**
134
+ * Ask the server to run what this target means, and wait for it to say yes.
135
+ *
136
+ * Awaited and checked rather than fired and forgotten: a switch that quietly
137
+ * failed left the control showing the new target while the old sandbox kept
138
+ * running, which is the worst of both — the header lies and nothing moved.
139
+ * The error travels back to the caller so the control can stay where it was.
140
+ */
141
+ async function applyVariant(next) {
142
+ /*
143
+ * Local needs both: an agent, and a sandbox told where to be.
144
+ *
145
+ * It used to return here, having started the agent — and never sent the
146
+ * `configure` below. The sandbox therefore kept whatever it was last set
147
+ * to, so arriving from the Jupyter target left the local agent executing
148
+ * on the anonymous server at prod1: `!hostname` in a cell answered with
149
+ * a pod name from the cloud.
150
+ *
151
+ * Starting the agent is a precondition for the switch, not the whole of
152
+ * it. The configure that follows is what makes the sandbox colocated.
153
+ */
154
+ if (next === 'local') {
155
+ // The blueprint — a capacity plugin's contribution — wins over the
156
+ // host's own `localAgent`: mounting the capacity is the more specific
157
+ // statement about what this workspace runs.
158
+ const createPayload = blueprint?.() ?? localAgent?.createPayload;
159
+ if (createPayload) {
160
+ await ensureLocalAgent(createPayload);
161
+ }
162
+ }
163
+ const configure = TARGET_SPECS[next]?.configure;
164
+ if (!configure) {
165
+ return;
166
+ }
167
+ const label = TARGET_SPECS[next].label;
168
+ let response;
169
+ try {
170
+ response = await fetch(`${serverUrl}/api/v1/agents/sandbox/configure`, {
171
+ method: 'POST',
172
+ headers: { 'content-type': 'application/json' },
173
+ body: JSON.stringify(configure),
174
+ });
175
+ }
176
+ catch (reason) {
177
+ // `fetch` rejects rather than answering when nothing is listening, and
178
+ // the browser's message for that is "Failed to fetch" — which names
179
+ // neither the address nor the thing that should be at it. Every target
180
+ // but Browser needs an agent-runtimes server, and the commonest reason
181
+ // a switch does nothing is that nobody started one.
182
+ throw new Error(`${label} needs an agent-runtimes server at ${serverUrl}, and nothing answered there. ` +
183
+ `Start one and try again. (${reason instanceof Error ? reason.message : String(reason)})`, { cause: reason });
184
+ }
185
+ if (!response.ok) {
186
+ throw new Error(`The server could not switch to ${label} (${response.status} ${response.statusText}). ` +
187
+ (await detail(response)));
188
+ }
189
+ // Configure only changes what will be created on the next use. Starting it
190
+ // here makes the segmented control an operation rather than a preference:
191
+ // when the promise resolves, the selected sandbox has actually launched.
192
+ const restart = await fetch(`${serverUrl}/api/v1/agents/sandbox/restart`, {
193
+ method: 'POST',
194
+ });
195
+ if (!restart.ok) {
196
+ throw new Error(`The server could not start ${label} (${restart.status} ${restart.statusText}). ` +
197
+ (await detail(restart)));
198
+ }
199
+ }
200
+ /**
201
+ * Create the agent whose per-agent Jupyter sandbox backs Local.
202
+ *
203
+ * The payload is passed rather than read from the closure: the caller has
204
+ * already established that it exists, and TypeScript cannot carry that
205
+ * narrowing across a function boundary.
206
+ */
207
+ async function ensureLocalAgent(createPayload) {
208
+ const id = agentId?.trim();
209
+ if (!id) {
210
+ throw new Error('Local needs an agent id before its runtime can start.');
211
+ }
212
+ let existing;
213
+ try {
214
+ existing = await fetch(`${serverUrl}/api/v1/agents/${encodeURIComponent(id)}`);
215
+ }
216
+ catch (reason) {
217
+ throw new Error(`Local needs an agent-runtimes server at ${serverUrl}, and nothing answered there. ` +
218
+ `Start one and try again. (${reason instanceof Error ? reason.message : String(reason)})`, { cause: reason });
219
+ }
220
+ if (existing.ok) {
221
+ // The agent is there, which does not mean its sandbox is. Reconfiguring
222
+ // or restarting the manager stops the per-agent sandboxes, because they
223
+ // were built under the previous settings — so coming back to Local after
224
+ // a spell on Jupyter finds the agent alive and nothing behind it. Asking
225
+ // for the sandbox is idempotent, so it costs a round trip and nothing
226
+ // else when one is already running.
227
+ await ensureLocalSandbox(id);
228
+ return;
229
+ }
230
+ if (existing.status !== 404) {
231
+ throw new Error(`The server could not inspect local agent ${id} (${existing.status} ${existing.statusText}). ` +
232
+ (await detail(existing)));
233
+ }
234
+ const created = await fetch(`${serverUrl}/api/v1/agents`, {
235
+ method: 'POST',
236
+ headers: { 'content-type': 'application/json' },
237
+ body: JSON.stringify({
238
+ // Defaults first, so a blueprint that names its own transport or
239
+ // sandbox variant — the sandbox capacity plugins do — wins over
240
+ // them; the name last, because Local's agent id is not negotiable.
241
+ transport: 'ag-ui',
242
+ sandbox_variant: 'jupyter-server',
243
+ ...createPayload,
244
+ name: id,
245
+ }),
246
+ });
247
+ if (!created.ok && created.status !== 409) {
248
+ throw new Error(`The server could not launch local agent ${id} (${created.status} ${created.statusText}). ` +
249
+ (await detail(created)));
250
+ }
251
+ // A 409 means somebody else created it between the two calls above, and
252
+ // that agent is as unlikely to have a sandbox as one found by the GET.
253
+ if (created.status === 409) {
254
+ await ensureLocalSandbox(id);
255
+ }
256
+ }
257
+ /**
258
+ * Make sure the agent has somewhere to run.
259
+ *
260
+ * Creating an agent starts its sandbox, so this is only ever needed for one
261
+ * that already existed. Selecting a target is an operation, not a
262
+ * preference: when the promise resolves the sandbox is meant to be up, and
263
+ * without this the kernel indicator sits empty and the notebook binds to
264
+ * nothing.
265
+ */
266
+ async function ensureLocalSandbox(id) {
267
+ const response = await fetch(`${serverUrl}/api/v1/agents/${encodeURIComponent(id)}/sandbox/ensure`, { method: 'POST' });
268
+ if (!response.ok) {
269
+ throw new Error(`The server could not start a sandbox for local agent ${id} ` +
270
+ `(${response.status} ${response.statusText}). ` +
271
+ (await detail(response)));
272
+ }
273
+ }
274
+ /**
275
+ * What the server said went wrong, when it said anything.
276
+ *
277
+ * FastAPI puts the reason in `detail`, and a status code on its own sends a
278
+ * reader to the network tab for something the response already contained.
279
+ */
280
+ async function detail(response) {
281
+ try {
282
+ const body = (await response.json());
283
+ return typeof body.detail === 'string' ? body.detail : '';
284
+ }
285
+ catch {
286
+ return '';
287
+ }
288
+ }
289
+ function connectActive() {
290
+ disconnect?.();
291
+ /*
292
+ * Datalayer connects nothing here, and that is the whole of the fix.
293
+ *
294
+ * Every other server target is the host's own sandbox, and `connect`
295
+ * subscribes to that server's status stream. Datalayer is not: the agent
296
+ * runs on a runtime allocated from an agentspec, and `DatalayerAgentBridge`
297
+ * reports it through `report()`.
298
+ *
299
+ * Subscribing anyway meant the host's stream kept answering — with the
300
+ * variant it was last configured for, which is `jupyter-server` — and
301
+ * overwrote the bridge's report on its next poll. Picking Datalayer moved
302
+ * the target and left the workspace describing a Jupyter server, which is
303
+ * exactly what it looked like: a switch that did not take.
304
+ */
305
+ if (target.peek() === 'datalayer') {
306
+ disconnect = null;
307
+ // Said out loud, so the surfaces show "starting" rather than claiming
308
+ // there is nothing here while the runtime is allocated.
309
+ server.setState('starting');
310
+ return;
311
+ }
312
+ disconnect = active.peek().connect(agentId);
313
+ }
314
+ return {
315
+ get kind() {
316
+ return target.peek() === 'browser'
317
+ ? 'browser'
318
+ : 'server';
319
+ },
320
+ target,
321
+ snapshot,
322
+ status,
323
+ ready,
324
+ lastExecution,
325
+ serverUrl,
326
+ getServiceManager: () => target.peek() === 'browser' ? browser.getServiceManager() : null,
327
+ report(next) {
328
+ active.peek().report(next);
329
+ },
330
+ setState(state) {
331
+ active.peek().setState(state);
332
+ },
333
+ execute(code) {
334
+ return active.peek().execute(code);
335
+ },
336
+ connect(id) {
337
+ agentId = id;
338
+ /*
339
+ * Starting on Local is a switch nobody made, and the agent still has to
340
+ * exist. A workspace that opens there with something to create it from
341
+ * — a capacity plugin's blueprint, or the host's own payload — used to
342
+ * connect straight to an agent nobody had created: the header said
343
+ * "running", and the first message came back 404. So the agent is
344
+ * ensured first, the way a switch to Local ensures it, and connected
345
+ * once it is there. Only the agent, not the sandbox reconfiguration a
346
+ * switch also does: at start there is no previous target to move away
347
+ * from, and restarting an existing agent's sandbox on every open would
348
+ * cost a reader the kernel they had.
349
+ */
350
+ const createPayload = target.peek() === 'local' && id
351
+ ? (blueprint?.() ?? localAgent?.createPayload)
352
+ : undefined;
353
+ if (!createPayload) {
354
+ connectActive();
355
+ return () => {
356
+ disconnect?.();
357
+ disconnect = null;
358
+ };
359
+ }
360
+ let cancelled = false;
361
+ server.setState('starting');
362
+ void ensureLocalAgent(createPayload).then(() => {
363
+ if (!cancelled) {
364
+ connectActive();
365
+ }
366
+ }, (error) => {
367
+ // No control to hand this back to at start: the sandbox says so
368
+ // instead, and the console has the reason.
369
+ if (!cancelled) {
370
+ server.setState('error');
371
+ console.error('[loop] Local agent could not be started:', error);
372
+ }
373
+ });
374
+ return () => {
375
+ cancelled = true;
376
+ disconnect?.();
377
+ disconnect = null;
378
+ };
379
+ },
380
+ async setTarget(next) {
381
+ const previous = target.peek();
382
+ if (next === previous) {
383
+ return;
384
+ }
385
+ // Disconnect first: two live sandboxes would race to report status, and
386
+ // the reader would watch the header flicker between them.
387
+ disconnect?.();
388
+ disconnect = null;
389
+ try {
390
+ await applyVariant(next);
391
+ }
392
+ catch (error) {
393
+ // Put the old one back rather than leaving the workspace with nothing:
394
+ // a failed switch should cost the person the switch, not the sandbox
395
+ // they already had.
396
+ connectActive();
397
+ throw error;
398
+ }
399
+ target.value = next;
400
+ // Connect the new backing, so choosing a target *starts* it rather than
401
+ // arming it for whenever something happens to ask.
402
+ connectActive();
403
+ },
404
+ };
405
+ }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Which member of a team the person is talking to.
3
+ *
4
+ * A team is a group of agents with one front door. The teamspec says who that
5
+ * is — its `supervisor` — and lists the members it routes between, so the
6
+ * selection starts there and moves when a person picks somebody else.
7
+ *
8
+ * The selection is a signal rather than React state because two things read
9
+ * it: the header control that changes it, and the chat that has to send the
10
+ * next prompt to whoever is chosen. Those live in different plugins and must
11
+ * not own copies that can disagree.
12
+ *
13
+ * What switching member does to the conversation is not decided here. It comes
14
+ * from the teamspec's `context.sharing`, because it follows from what the team
15
+ * is: a supervisor team routing between a tutor and a compactor needs one
16
+ * thread both can read, and a delegation team needs the opposite.
17
+ *
18
+ * @module loop/plugins/agents/team
19
+ */
20
+ import { type ReadonlySignal } from '@datalayer/reactor';
21
+ import type { TeamContextSharing, TeamSpec } from '../../../types/teams';
22
+ import type { BrowserSubagent } from '../../../runtimes/browser';
23
+ /** One agent a person can address, as the picker shows it. */
24
+ export type TeamMember = {
25
+ /** The member's id within the team. */
26
+ id: string;
27
+ /** What the picker calls it. */
28
+ name: string;
29
+ /** The agentspec it runs, without the version. */
30
+ specId: string;
31
+ /** One line about what it is for. */
32
+ description?: string;
33
+ emoji?: string;
34
+ /** The octicon name its agentspec asked for. */
35
+ icon?: string;
36
+ /** Whether this is the team's front door. */
37
+ isSupervisor: boolean;
38
+ };
39
+ export type TeamSelection = {
40
+ /** The team being worked with. */
41
+ team: TeamSpec;
42
+ /** Everyone a person may address, supervisor first. */
43
+ members: TeamMember[];
44
+ /** Who is being addressed now. */
45
+ selected: ReadonlySignal<string>;
46
+ /** Address somebody else. */
47
+ select: (memberId: string) => void;
48
+ /** What each member is told about the conversation so far. */
49
+ sharing: TeamContextSharing;
50
+ /** The member currently addressed, resolved. */
51
+ active: ReadonlySignal<TeamMember | undefined>;
52
+ };
53
+ /**
54
+ * The members of a team, supervisor first.
55
+ *
56
+ * The supervisor is listed among them rather than above them: in this team it
57
+ * is the tutor, which does work as well as routing, and a front door that
58
+ * cannot be addressed directly would be a strange front door. It is marked
59
+ * so the picker can say which it is.
60
+ */
61
+ export declare function teamMembers(team: TeamSpec): TeamMember[];
62
+ /**
63
+ * Track which member is being addressed.
64
+ *
65
+ * Starts on the supervisor, which is the team's own answer to "who reads this
66
+ * first". Falls back to the first member for a team with no supervisor ref.
67
+ */
68
+ export declare function createTeamSelection(teamId: string): TeamSelection | undefined;
69
+ /**
70
+ * The agents a given member may hand work to.
71
+ *
72
+ * Read from the teamspec rather than assumed, because a team says two separate
73
+ * things about delegation and they mean different things:
74
+ *
75
+ * - `delegation.allowPeerDelegation` — whether a member may reach *another
76
+ * member*. The jupyter team says no: the Tutor handing work to the
77
+ * Compactor would edit a notebook the learner is working in, which is the one
78
+ * thing the Tutor exists not to do. Routing between them is the supervisor's
79
+ * job, where a person can see it happen.
80
+ * - a member's own `subagents` — specialists that belong to it alone. The
81
+ * Compactor has a CellFixer and a NotebookReproducer, and neither is a member
82
+ * of the team.
83
+ *
84
+ * So the supervisor gets the other members, everyone gets their own subagents,
85
+ * and a peer only appears where the team allows it.
86
+ */
87
+ export declare function subagentsFor(team: TeamSpec, memberId: string): BrowserSubagent[];
@@ -0,0 +1,143 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * Which member of a team the person is talking to.
7
+ *
8
+ * A team is a group of agents with one front door. The teamspec says who that
9
+ * is — its `supervisor` — and lists the members it routes between, so the
10
+ * selection starts there and moves when a person picks somebody else.
11
+ *
12
+ * The selection is a signal rather than React state because two things read
13
+ * it: the header control that changes it, and the chat that has to send the
14
+ * next prompt to whoever is chosen. Those live in different plugins and must
15
+ * not own copies that can disagree.
16
+ *
17
+ * What switching member does to the conversation is not decided here. It comes
18
+ * from the teamspec's `context.sharing`, because it follows from what the team
19
+ * is: a supervisor team routing between a tutor and a compactor needs one
20
+ * thread both can read, and a delegation team needs the opposite.
21
+ *
22
+ * @module loop/plugins/agents/team
23
+ */
24
+ import { computed, signal, } from '@datalayer/reactor';
25
+ import { TEAM_SPECS } from '../../../specs/teams/teams';
26
+ import { AGENTSPECS } from '../../../specs/agents/agents';
27
+ /** A `ref` such as `jupyter-tutor:0.0.1`, without its version. */
28
+ function specIdOf(ref) {
29
+ return (ref ?? '').split(':')[0] ?? '';
30
+ }
31
+ /**
32
+ * The members of a team, supervisor first.
33
+ *
34
+ * The supervisor is listed among them rather than above them: in this team it
35
+ * is the tutor, which does work as well as routing, and a front door that
36
+ * cannot be addressed directly would be a strange front door. It is marked
37
+ * so the picker can say which it is.
38
+ */
39
+ export function teamMembers(team) {
40
+ const supervisorSpecId = specIdOf(team.supervisor?.ref);
41
+ const describe = (specId) => {
42
+ const spec = AGENTSPECS[specId];
43
+ return {
44
+ description: spec?.description,
45
+ emoji: spec?.emoji,
46
+ icon: spec?.icon,
47
+ };
48
+ };
49
+ const members = (team.agents ?? []).map(agent => {
50
+ const specId = specIdOf(agent.ref);
51
+ return {
52
+ id: agent.id,
53
+ name: agent.name || specId || agent.id,
54
+ specId,
55
+ isSupervisor: specId !== '' && specId === supervisorSpecId,
56
+ ...describe(specId),
57
+ };
58
+ });
59
+ // The supervisor answers first because it is what a prompt reaches by
60
+ // default; a list that buried it would make the default look arbitrary.
61
+ return [
62
+ ...members.filter(member => member.isSupervisor),
63
+ ...members.filter(member => !member.isSupervisor),
64
+ ];
65
+ }
66
+ /**
67
+ * Track which member is being addressed.
68
+ *
69
+ * Starts on the supervisor, which is the team's own answer to "who reads this
70
+ * first". Falls back to the first member for a team with no supervisor ref.
71
+ */
72
+ export function createTeamSelection(teamId) {
73
+ const team = TEAM_SPECS[teamId];
74
+ if (!team) {
75
+ return undefined;
76
+ }
77
+ const members = teamMembers(team);
78
+ if (members.length === 0) {
79
+ return undefined;
80
+ }
81
+ const selected = signal(members[0].id);
82
+ return {
83
+ team,
84
+ members,
85
+ selected,
86
+ select: (memberId) => {
87
+ if (members.some(member => member.id === memberId)) {
88
+ selected.value = memberId;
89
+ }
90
+ },
91
+ sharing: team.context?.sharing ?? 'shared',
92
+ active: computed(() => members.find(member => member.id === selected.value)),
93
+ };
94
+ }
95
+ /**
96
+ * The agents a given member may hand work to.
97
+ *
98
+ * Read from the teamspec rather than assumed, because a team says two separate
99
+ * things about delegation and they mean different things:
100
+ *
101
+ * - `delegation.allowPeerDelegation` — whether a member may reach *another
102
+ * member*. The jupyter team says no: the Tutor handing work to the
103
+ * Compactor would edit a notebook the learner is working in, which is the one
104
+ * thing the Tutor exists not to do. Routing between them is the supervisor's
105
+ * job, where a person can see it happen.
106
+ * - a member's own `subagents` — specialists that belong to it alone. The
107
+ * Compactor has a CellFixer and a NotebookReproducer, and neither is a member
108
+ * of the team.
109
+ *
110
+ * So the supervisor gets the other members, everyone gets their own subagents,
111
+ * and a peer only appears where the team allows it.
112
+ */
113
+ export function subagentsFor(team, memberId) {
114
+ const members = teamMembers(team);
115
+ const member = members.find(entry => entry.id === memberId);
116
+ if (!member) {
117
+ return [];
118
+ }
119
+ const asSubagent = (name, specId, description) => {
120
+ const spec = AGENTSPECS[specId];
121
+ if (!spec) {
122
+ return undefined;
123
+ }
124
+ return {
125
+ name,
126
+ // The description is what the parent's model chooses on, so a team's own
127
+ // wording wins over the spec's: it says when to reach for this one *in
128
+ // this team*, which is the question being asked.
129
+ description: description || spec.description || name,
130
+ instructions: spec.systemPrompt,
131
+ model: spec.model,
132
+ icon: spec.icon,
133
+ };
134
+ };
135
+ const peers = member.isSupervisor || team.delegation?.allowPeerDelegation
136
+ ? members
137
+ .filter(entry => entry.id !== memberId)
138
+ .map(entry => asSubagent(entry.name, entry.specId, entry.description))
139
+ : [];
140
+ const declared = (team.agents ?? []).find((entry) => entry.id === memberId);
141
+ const own = (declared?.subagents ?? []).map(subagent => asSubagent(subagent.name, (subagent.ref ?? '').split(':')[0] ?? '', subagent.description));
142
+ return [...peers, ...own].filter(Boolean);
143
+ }
@@ -0,0 +1,11 @@
1
+ import type { SwitchableSandboxService } from './switchable';
2
+ /** The sandbox service, or `undefined` when the plugin is not mounted. */
3
+ export declare function useOptionalSandboxService(): SwitchableSandboxService | undefined;
4
+ /**
5
+ * The sandbox service, insisting it is there.
6
+ *
7
+ * A view that declares the sandbox plugin as a dependency has it by
8
+ * construction; if it does not, the reactor graph is wrong and saying so
9
+ * plainly beats rendering something half-alive.
10
+ */
11
+ export declare function useSandboxService(): SwitchableSandboxService;
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * Reaching the sandbox service from a component.
7
+ *
8
+ * A plugin that depends on the sandbox asks the reactor for it by name, rather
9
+ * than importing a singleton: that is what makes the dependency visible in the
10
+ * extension graph and what lets a host swap the implementation — a JupyterLab
11
+ * front-end backed by the running server instead of a cloud runtime.
12
+ *
13
+ * @module loop/plugins/agents/useSandboxService
14
+ */
15
+ import { useReactorPlatform } from '@datalayer/reactor/react';
16
+ import { AGENTS_PLUGIN_NAME } from './plugin';
17
+ /** The sandbox service, or `undefined` when the plugin is not mounted. */
18
+ export function useOptionalSandboxService() {
19
+ const reactor = useReactorPlatform();
20
+ return reactor.getOutput(AGENTS_PLUGIN_NAME)?.sandbox;
21
+ }
22
+ /**
23
+ * The sandbox service, insisting it is there.
24
+ *
25
+ * A view that declares the sandbox plugin as a dependency has it by
26
+ * construction; if it does not, the reactor graph is wrong and saying so
27
+ * plainly beats rendering something half-alive.
28
+ */
29
+ export function useSandboxService() {
30
+ const service = useOptionalSandboxService();
31
+ if (!service) {
32
+ throw new Error(`The code sandbox plugin (${AGENTS_PLUGIN_NAME}) is not mounted. ` +
33
+ 'A view that needs a sandbox must declare it as a dependency.');
34
+ }
35
+ return service;
36
+ }