@datalayer/agent-runtimes 1.0.29 → 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 (768) 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 +2 -1
  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 +35 -0
  163. package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.js +27 -29
  164. package/lib/components/code-sandboxes/CodeSandboxLauncher.d.ts +1 -0
  165. package/lib/components/code-sandboxes/CodeSandboxLauncher.js +42 -19
  166. package/lib/components/code-sandboxes/CodeSandboxNames.js +7 -6
  167. package/lib/components/code-sandboxes/CodeSandboxPicker.js +89 -42
  168. package/lib/components/code-sandboxes/CodeSandboxPickerCell.d.ts +1 -0
  169. package/lib/components/code-sandboxes/CodeSandboxPickerCell.js +0 -4
  170. package/lib/components/code-sandboxes/CodeSandboxReservationControl.d.ts +1 -0
  171. package/lib/components/code-sandboxes/CodeSandboxReservationControl.js +5 -7
  172. package/lib/components/code-sandboxes/CodeSandboxTransfer.d.ts +5 -0
  173. package/lib/components/code-sandboxes/CodeSandboxUtils.d.ts +13 -1
  174. package/lib/components/code-sandboxes/CodeSandboxUtils.js +10 -4
  175. package/lib/components/code-sandboxes/NewCodeSandboxControls.d.ts +21 -15
  176. package/lib/components/code-sandboxes/NewCodeSandboxControls.js +28 -51
  177. package/lib/components/code-sandboxes/codeSandboxAllowance.d.ts +33 -0
  178. package/lib/components/code-sandboxes/codeSandboxAllowance.js +37 -0
  179. package/lib/components/code-sandboxes/codeSandboxEnvironments.d.ts +86 -0
  180. package/lib/components/code-sandboxes/codeSandboxEnvironments.js +147 -0
  181. package/lib/components/code-sandboxes/codeSandboxProviders.js +14 -5
  182. package/lib/components/code-sandboxes/index.d.ts +1 -0
  183. package/lib/components/code-sandboxes/index.js +1 -0
  184. package/lib/components/context/SpaceSelect.d.ts +1 -1
  185. package/lib/components/flashes/FlashDisclaimer.d.ts +1 -1
  186. package/lib/components/icons/ArtifactIcon.d.ts +1 -0
  187. package/lib/components/nbgrader/NbGradesDetails.d.ts +1 -1
  188. package/lib/components/progress/CreditsIndicator.d.ts +1 -0
  189. package/lib/components/progress/CreditsIndicator.js +0 -4
  190. package/lib/components/scheduler/ScheduleMenu.d.ts +1 -1
  191. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +3 -2
  192. package/lib/components/snapshots/SandboxSnapshotMenu.js +11 -15
  193. package/lib/components/snippets/SnippetDialog.d.ts +1 -0
  194. package/lib/components/snippets/SnippetDialog.js +0 -4
  195. package/lib/components/specs/SpecPayloadPreview.d.ts +34 -0
  196. package/lib/components/specs/SpecPayloadPreview.js +102 -0
  197. package/lib/components/tokens/SpaceVariantToken.d.ts +1 -1
  198. package/lib/context/ContextDistribution.d.ts +1 -1
  199. package/lib/context/ContextInspector.d.ts +2 -1
  200. package/lib/context/ContextPanel.d.ts +1 -1
  201. package/lib/context/ContextUsage.d.ts +1 -1
  202. package/lib/context/CostTracker.d.ts +1 -1
  203. package/lib/context/CostUsageChart.d.ts +1 -1
  204. package/lib/context/CostUsageChart.js +4 -4
  205. package/lib/context/MessageHistory.d.ts +3 -2
  206. package/lib/context/TokenUsageChart.d.ts +1 -1
  207. package/lib/context/TokenUsageChart.js +4 -4
  208. package/lib/examples/A2UiAgentExample.js +15 -6
  209. package/lib/examples/A2UiComponentsGalleryExample.d.ts +10 -0
  210. package/lib/examples/A2UiComponentsGalleryExample.js +24 -855
  211. package/lib/examples/A2UiContactCardExample.d.ts +10 -0
  212. package/lib/examples/A2UiContactCardExample.js +23 -170
  213. package/lib/examples/A2UiJupyterOutputExample.d.ts +3 -0
  214. package/lib/examples/A2UiJupyterOutputExample.js +792 -0
  215. package/lib/examples/A2UiRestaurantExample.d.ts +10 -0
  216. package/lib/examples/A2UiRestaurantExample.js +24 -179
  217. package/lib/examples/A2UiViewerExample.d.ts +10 -0
  218. package/lib/examples/A2UiViewerExample.js +24 -378
  219. package/lib/examples/AgUiAgenticExample.js +2 -4
  220. package/lib/examples/AgUiBackendToolRenderingExample.js +3 -5
  221. package/lib/examples/AgUiHaikuGenUiExample.js +2 -4
  222. package/lib/examples/AgUiHumanInTheLoopExample.js +2 -4
  223. package/lib/examples/AgUiSharedStateExample.js +2 -4
  224. package/lib/examples/AgUiToolsBasedGenUiExample.js +2 -4
  225. package/lib/examples/AgentA2AExample.d.ts +17 -0
  226. package/lib/examples/AgentA2AExample.js +56 -0
  227. package/lib/examples/AgentCheckpointsExample.d.ts +9 -10
  228. package/lib/examples/AgentCheckpointsExample.js +72 -54
  229. package/lib/examples/AgentCodeSandboxExample.d.ts +7 -7
  230. package/lib/examples/AgentCodeSandboxExample.js +93 -303
  231. package/lib/examples/AgentCodeSandboxesExample.d.ts +10 -0
  232. package/lib/examples/AgentCodeSandboxesExample.js +56 -162
  233. package/lib/examples/AgentCodemodeExample.d.ts +7 -2
  234. package/lib/examples/AgentCodemodeExample.js +60 -125
  235. package/lib/examples/AgentCompactionExample.js +19 -135
  236. package/lib/examples/AgentEvalsExample.js +34 -66
  237. package/lib/examples/AgentGuardrailsExample.js +64 -112
  238. package/lib/examples/AgentHooksExample.d.ts +11 -0
  239. package/lib/examples/AgentHooksExample.js +30 -67
  240. package/lib/examples/AgentInferenceProviderExample.js +8 -32
  241. package/lib/examples/AgentLoopExample.d.ts +4 -2
  242. package/lib/examples/AgentLoopExample.js +45 -93
  243. package/lib/examples/AgentMCPExample.js +30 -79
  244. package/lib/examples/AgentMemoryExample.js +21 -64
  245. package/lib/examples/AgentMonitoringExample.js +33 -94
  246. package/lib/examples/AgentNotificationsExample.js +56 -95
  247. package/lib/examples/AgentOtelExample.js +35 -88
  248. package/lib/examples/AgentOutputsExample.d.ts +2 -1
  249. package/lib/examples/AgentOutputsExample.js +16 -137
  250. package/lib/examples/AgentParametersExample.js +7 -17
  251. package/lib/examples/AgentSkillsExample.js +40 -154
  252. package/lib/examples/AgentSubagentsExample.d.ts +7 -6
  253. package/lib/examples/AgentSubagentsExample.js +80 -191
  254. package/lib/examples/AgentToolApprovalsExample.js +35 -91
  255. package/lib/examples/AgentTriggersExample.js +43 -59
  256. package/lib/examples/AgentspecsExample.js +4 -4
  257. package/lib/examples/CellExample.d.ts +1 -1
  258. package/lib/examples/ChatExample.d.ts +12 -5
  259. package/lib/examples/ChatExample.js +38 -13
  260. package/lib/examples/CopilotKitLexicalExample.d.ts +1 -0
  261. package/lib/examples/CopilotKitLexicalExample.js +4 -41
  262. package/lib/examples/CopilotKitNotebookExample.d.ts +10 -0
  263. package/lib/examples/CopilotKitNotebookExample.js +2 -14
  264. package/lib/examples/DecksAgent.d.ts +21 -0
  265. package/lib/examples/DecksAgent.js +23 -0
  266. package/lib/examples/DocumentPageAgent.d.ts +19 -0
  267. package/lib/examples/DocumentPageAgent.js +15 -0
  268. package/lib/examples/Lexical2Example.d.ts +2 -2
  269. package/lib/examples/Lexical2Example.js +17 -38
  270. package/lib/examples/LexicalAgentExample.d.ts +2 -1
  271. package/lib/examples/LexicalAgentExample.js +29 -102
  272. package/lib/examples/LexicalAgentSidebarExample.d.ts +16 -5
  273. package/lib/examples/LexicalAgentSidebarExample.js +99 -131
  274. package/lib/examples/LoopShellExample.d.ts +38 -0
  275. package/lib/examples/LoopShellExample.js +68 -0
  276. package/lib/examples/LoopWorkspaceEmbed.d.ts +50 -0
  277. package/lib/examples/LoopWorkspaceEmbed.js +73 -0
  278. package/lib/examples/LoopWorkspaceExample.d.ts +150 -0
  279. package/lib/examples/LoopWorkspaceExample.js +151 -0
  280. package/lib/examples/NotebookAgentExample.d.ts +13 -0
  281. package/lib/examples/NotebookAgentExample.js +36 -86
  282. package/lib/examples/NotebookAgentSidebarExample.d.ts +10 -4
  283. package/lib/examples/NotebookAgentSidebarExample.js +39 -83
  284. package/lib/examples/NotebookCollaborationExample.d.ts +1 -1
  285. package/lib/examples/NotebookCollaborationExample.js +108 -20
  286. package/lib/examples/NotebookExample.d.ts +1 -1
  287. package/lib/examples/NotebookExample.js +20 -10
  288. package/lib/examples/NotebookPageAgent.d.ts +23 -0
  289. package/lib/examples/NotebookPageAgent.js +17 -0
  290. package/lib/examples/components/ExampleWrapper.d.ts +5 -0
  291. package/lib/examples/components/ExampleWrapper.js +36 -28
  292. package/lib/examples/components/LexicalEditor.d.ts +1 -1
  293. package/lib/examples/components/LexicalEditor.js +4 -24
  294. package/lib/examples/components/haiku/HaikuDisplay.d.ts +1 -1
  295. package/lib/examples/components/haiku/InlineHaikuCard.d.ts +1 -1
  296. package/lib/examples/components/weather/InlineWeatherCard.d.ts +1 -1
  297. package/lib/examples/example-selector.js +26 -6
  298. package/lib/examples/hooks/useCreateAgentOnce.d.ts +41 -0
  299. package/lib/examples/hooks/useCreateAgentOnce.js +51 -0
  300. package/lib/examples/hooks/useExampleAgentProtocol.d.ts +35 -0
  301. package/lib/examples/hooks/useExampleAgentProtocol.js +63 -0
  302. package/lib/examples/hooks/useExampleAgentRuntime.d.ts +16 -16
  303. package/lib/examples/hooks/useExampleAgentRuntime.js +26 -25
  304. package/lib/examples/hooks/useExampleAgentRuntimes.js +45 -61
  305. package/lib/examples/hooks/useExampleJupyterAgent.d.ts +91 -0
  306. package/lib/examples/hooks/useExampleJupyterAgent.js +151 -0
  307. package/lib/examples/index.d.ts +4 -0
  308. package/lib/examples/index.js +6 -0
  309. package/lib/examples/lexical/editorConfig.d.ts +2 -75
  310. package/lib/examples/lexical/editorConfig.js +26 -48
  311. package/lib/examples/lexical/lexical-theme.css +65 -47
  312. package/lib/examples/main.js +450 -322
  313. package/lib/examples/scenes/A2UiComponentsGalleryScene.d.ts +3 -0
  314. package/lib/examples/scenes/A2UiComponentsGalleryScene.js +872 -0
  315. package/lib/examples/scenes/A2UiContactCardScene.d.ts +3 -0
  316. package/lib/examples/scenes/A2UiContactCardScene.js +188 -0
  317. package/lib/examples/scenes/A2UiRestaurantScene.d.ts +3 -0
  318. package/lib/examples/scenes/A2UiRestaurantScene.js +196 -0
  319. package/lib/examples/scenes/A2UiViewerScene.d.ts +3 -0
  320. package/lib/examples/scenes/A2UiViewerScene.js +395 -0
  321. package/lib/examples/utils/agentSummaryStore.d.ts +7 -1
  322. package/lib/examples/utils/agents/earthquake-detector.ipynb.json +1 -1
  323. package/lib/examples/utils/agents/earthquake-detector.lexical.json +1 -1
  324. package/lib/examples/utils/agents/sales-forecaster.ipynb.json +1 -1
  325. package/lib/examples/utils/agents/sales-forecaster.lexical.json +1 -1
  326. package/lib/examples/utils/agents/social-post-generator.ipynb.json +1 -1
  327. package/lib/examples/utils/agents/social-post-generator.lexical.json +1 -1
  328. package/lib/examples/utils/exampleSurfaces.d.ts +31 -0
  329. package/lib/examples/utils/exampleSurfaces.js +38 -0
  330. package/lib/examples/utils/jupyterSandboxUrl.d.ts +27 -0
  331. package/lib/examples/utils/jupyterSandboxUrl.js +55 -0
  332. package/lib/examples/utils/localUrl.d.ts +2 -0
  333. package/lib/examples/utils/localUrl.js +49 -0
  334. package/lib/examples/utils/notebookToolbarItems.d.ts +46 -0
  335. package/lib/examples/utils/notebookToolbarItems.js +129 -0
  336. package/lib/examples/utils/runtimeTargetStore.d.ts +40 -1
  337. package/lib/examples/utils/runtimeTargetStore.js +82 -1
  338. package/lib/examples/utils/themedProvider.d.ts +7 -0
  339. package/lib/examples/utils/themedProvider.js +57 -4
  340. package/lib/examples/utils/useExampleAgentRuntimesUrl.js +30 -5
  341. package/lib/examples/utils/waitForAgent.d.ts +23 -0
  342. package/lib/examples/utils/waitForAgent.js +24 -0
  343. package/lib/examples2/CellExample.d.ts +1 -1
  344. package/lib/examples2/DatalayerNotebookExample.d.ts +1 -1
  345. package/lib/examples2/NotebookExample.d.ts +1 -1
  346. package/lib/examples2/NotebookMutationsKernel.d.ts +1 -1
  347. package/lib/examples2/NotebookMutationsServiceManager.d.ts +1 -1
  348. package/lib/examples2/main.js +24 -4
  349. package/lib/extensions/A2UIExtension.d.ts +1 -1
  350. package/lib/hooks/index.d.ts +8 -5
  351. package/lib/hooks/index.js +20 -5
  352. package/lib/hooks/useAgentRuntimes.d.ts +49 -22
  353. package/lib/hooks/useAgentRuntimes.js +214 -90
  354. package/lib/hooks/useAgentsCatalog.js +32 -4
  355. package/lib/hooks/useBrowserAgent.d.ts +26 -0
  356. package/lib/hooks/useBrowserAgent.js +75 -0
  357. package/lib/hooks/useBrowserInference.d.ts +27 -0
  358. package/lib/hooks/useBrowserInference.js +67 -0
  359. package/lib/hooks/useCheckpoints.d.ts +8 -17
  360. package/lib/hooks/useCheckpoints.js +25 -59
  361. package/lib/hooks/useConfig.d.ts +1 -1
  362. package/lib/hooks/useConfig.js +5 -1
  363. package/lib/hooks/useContextSnapshot.d.ts +18 -7
  364. package/lib/hooks/useContextSnapshot.js +14 -10
  365. package/lib/hooks/useNotifications.d.ts +11 -11
  366. package/lib/hooks/useNotifications.js +1 -1
  367. package/lib/hooks/useProjects.d.ts +7 -19
  368. package/lib/hooks/useProjects.js +5 -5
  369. package/lib/hooks/useSkills.d.ts +0 -1
  370. package/lib/hooks/useSkills.js +6 -2
  371. package/lib/hooks/useToolApprovals.d.ts +8 -8
  372. package/lib/hooks/useToolApprovals.js +3 -3
  373. package/lib/identity/AgentIdentity.d.ts +9 -2
  374. package/lib/index.d.ts +1 -0
  375. package/lib/index.js +4 -0
  376. package/lib/jupyter/index.d.ts +2 -1
  377. package/lib/jupyter/index.js +2 -1
  378. package/lib/jupyter/serverExecution.d.ts +78 -0
  379. package/lib/jupyter/serverExecution.js +258 -0
  380. package/lib/jupyter/useResumeServerExecutions.d.ts +11 -0
  381. package/lib/jupyter/useResumeServerExecutions.js +64 -0
  382. package/lib/lexical/ChatInlinePlugin.d.ts +33 -0
  383. package/lib/lexical/ChatInlinePlugin.js +0 -36
  384. package/lib/loop/core/focusRequests.d.ts +10 -0
  385. package/lib/loop/core/focusRequests.js +46 -0
  386. package/lib/loop/core/index.d.ts +894 -0
  387. package/lib/loop/core/index.js +264 -0
  388. package/lib/loop/core/promptStore.d.ts +44 -0
  389. package/lib/loop/core/promptStore.js +63 -0
  390. package/lib/loop/core/surfaceRequests.d.ts +33 -0
  391. package/lib/loop/core/surfaceRequests.js +29 -0
  392. package/lib/loop/core/toolbar.d.ts +28 -0
  393. package/lib/loop/core/toolbar.js +59 -0
  394. package/lib/loop/embed/LoopEmbed.d.ts +57 -0
  395. package/lib/loop/embed/LoopEmbed.js +118 -0
  396. package/lib/loop/extensions.d.ts +10 -0
  397. package/lib/loop/extensions.js +49 -0
  398. package/lib/loop/index.d.ts +68 -0
  399. package/lib/loop/index.js +87 -0
  400. package/lib/loop/plugins/a2a-sidebar/A2ASidebar.d.ts +48 -0
  401. package/lib/loop/plugins/a2a-sidebar/A2ASidebar.js +190 -0
  402. package/lib/loop/plugins/a2a-sidebar/index.d.ts +5 -0
  403. package/lib/loop/plugins/a2a-sidebar/index.js +39 -0
  404. package/lib/loop/plugins/a2ui/A2uiView.d.ts +12 -0
  405. package/lib/loop/plugins/a2ui/A2uiView.js +97 -0
  406. package/lib/loop/plugins/a2ui/index.d.ts +3 -0
  407. package/lib/loop/plugins/a2ui/index.js +50 -0
  408. package/lib/loop/plugins/a2ui-scene/index.d.ts +36 -0
  409. package/lib/loop/plugins/a2ui-scene/index.js +28 -0
  410. package/lib/loop/plugins/agent-a2a/index.d.ts +3 -0
  411. package/lib/loop/plugins/agent-a2a/index.js +26 -0
  412. package/lib/loop/plugins/agent-a2ui/index.d.ts +3 -0
  413. package/lib/loop/plugins/agent-a2ui/index.js +42 -0
  414. package/lib/loop/plugins/agent-a2ui-jupyter-output/index.d.ts +3 -0
  415. package/lib/loop/plugins/agent-a2ui-jupyter-output/index.js +53 -0
  416. package/lib/loop/plugins/agent-capacity/index.d.ts +39 -0
  417. package/lib/loop/plugins/agent-capacity/index.js +52 -0
  418. package/lib/loop/plugins/agent-checkpoints/index.d.ts +3 -0
  419. package/lib/loop/plugins/agent-checkpoints/index.js +26 -0
  420. package/lib/loop/plugins/agent-code-sandbox/index.d.ts +3 -0
  421. package/lib/loop/plugins/agent-code-sandbox/index.js +24 -0
  422. package/lib/loop/plugins/agent-code-sandboxes/index.d.ts +13 -0
  423. package/lib/loop/plugins/agent-code-sandboxes/index.js +85 -0
  424. package/lib/loop/plugins/agent-codemode/index.d.ts +5 -0
  425. package/lib/loop/plugins/agent-codemode/index.js +41 -0
  426. package/lib/loop/plugins/agent-compaction/index.d.ts +10 -0
  427. package/lib/loop/plugins/agent-compaction/index.js +34 -0
  428. package/lib/loop/plugins/agent-evals/index.d.ts +3 -0
  429. package/lib/loop/plugins/agent-evals/index.js +25 -0
  430. package/lib/loop/plugins/agent-guardrails/index.d.ts +3 -0
  431. package/lib/loop/plugins/agent-guardrails/index.js +25 -0
  432. package/lib/loop/plugins/agent-hooks/index.d.ts +3 -0
  433. package/lib/loop/plugins/agent-hooks/index.js +28 -0
  434. package/lib/loop/plugins/agent-inference/index.d.ts +7 -0
  435. package/lib/loop/plugins/agent-inference/index.js +29 -0
  436. package/lib/loop/plugins/agent-mcp/index.d.ts +3 -0
  437. package/lib/loop/plugins/agent-mcp/index.js +25 -0
  438. package/lib/loop/plugins/agent-memory/index.d.ts +3 -0
  439. package/lib/loop/plugins/agent-memory/index.js +25 -0
  440. package/lib/loop/plugins/agent-monitoring/index.d.ts +3 -0
  441. package/lib/loop/plugins/agent-monitoring/index.js +25 -0
  442. package/lib/loop/plugins/agent-notifications/index.d.ts +3 -0
  443. package/lib/loop/plugins/agent-notifications/index.js +25 -0
  444. package/lib/loop/plugins/agent-otel/index.d.ts +3 -0
  445. package/lib/loop/plugins/agent-otel/index.js +25 -0
  446. package/lib/loop/plugins/agent-outputs/index.d.ts +3 -0
  447. package/lib/loop/plugins/agent-outputs/index.js +25 -0
  448. package/lib/loop/plugins/agent-parameters/index.d.ts +3 -0
  449. package/lib/loop/plugins/agent-parameters/index.js +25 -0
  450. package/lib/loop/plugins/agent-skills/index.d.ts +3 -0
  451. package/lib/loop/plugins/agent-skills/index.js +25 -0
  452. package/lib/loop/plugins/agent-subagents/index.d.ts +3 -0
  453. package/lib/loop/plugins/agent-subagents/index.js +25 -0
  454. package/lib/loop/plugins/agent-tool-approvals/index.d.ts +11 -0
  455. package/lib/loop/plugins/agent-tool-approvals/index.js +38 -0
  456. package/lib/loop/plugins/agent-triggers/index.d.ts +3 -0
  457. package/lib/loop/plugins/agent-triggers/index.js +26 -0
  458. package/lib/loop/plugins/agents/AgentSummaryPanel.d.ts +20 -0
  459. package/lib/loop/plugins/agents/AgentSummaryPanel.js +50 -0
  460. package/lib/loop/plugins/agents/AnonymousKeyBadge.d.ts +35 -0
  461. package/lib/loop/plugins/agents/AnonymousKeyBadge.js +53 -0
  462. package/lib/loop/plugins/agents/DatalayerAgentBridge.d.ts +24 -0
  463. package/lib/loop/plugins/agents/DatalayerAgentBridge.js +102 -0
  464. package/lib/loop/plugins/agents/DatalayerAgentMount.d.ts +18 -0
  465. package/lib/loop/plugins/agents/DatalayerAgentMount.js +12 -0
  466. package/lib/loop/plugins/agents/SandboxSelector.d.ts +18 -0
  467. package/lib/loop/plugins/agents/SandboxSelector.js +99 -0
  468. package/lib/loop/plugins/agents/SandboxStatusBridge.d.ts +19 -0
  469. package/lib/loop/plugins/agents/SandboxStatusBridge.js +23 -0
  470. package/lib/loop/plugins/agents/SandboxView.d.ts +11 -0
  471. package/lib/loop/plugins/agents/SandboxView.js +43 -0
  472. package/lib/loop/plugins/agents/TeamMemberPicker.d.ts +17 -0
  473. package/lib/loop/plugins/agents/TeamMemberPicker.js +60 -0
  474. package/lib/loop/plugins/agents/agentIcons.d.ts +23 -0
  475. package/lib/loop/plugins/agents/agentIcons.js +88 -0
  476. package/lib/loop/plugins/agents/browserService.d.ts +50 -0
  477. package/lib/loop/plugins/agents/browserService.js +233 -0
  478. package/lib/loop/plugins/agents/index.d.ts +13 -0
  479. package/lib/loop/plugins/agents/index.js +17 -0
  480. package/lib/loop/plugins/agents/plugin.d.ts +91 -0
  481. package/lib/loop/plugins/agents/plugin.js +201 -0
  482. package/lib/loop/plugins/agents/service.d.ts +99 -0
  483. package/lib/loop/plugins/agents/service.js +167 -0
  484. package/lib/loop/plugins/agents/specSubagents.d.ts +18 -0
  485. package/lib/loop/plugins/agents/specSubagents.js +33 -0
  486. package/lib/loop/plugins/agents/switchable.d.ts +107 -0
  487. package/lib/loop/plugins/agents/switchable.js +405 -0
  488. package/lib/loop/plugins/agents/team.d.ts +87 -0
  489. package/lib/loop/plugins/agents/team.js +143 -0
  490. package/lib/loop/plugins/agents/useSandboxService.d.ts +11 -0
  491. package/lib/loop/plugins/agents/useSandboxService.js +36 -0
  492. package/lib/loop/plugins/agents/useTeamSelection.d.ts +10 -0
  493. package/lib/loop/plugins/agents/useTeamSelection.js +27 -0
  494. package/lib/loop/plugins/agentspecs/AgentspecPicker.d.ts +15 -0
  495. package/lib/loop/plugins/agentspecs/AgentspecPicker.js +90 -0
  496. package/lib/loop/plugins/agentspecs/index.d.ts +6 -0
  497. package/lib/loop/plugins/agentspecs/index.js +63 -0
  498. package/lib/loop/plugins/chat/ChatView.d.ts +20 -0
  499. package/lib/loop/plugins/chat/ChatView.js +1670 -0
  500. package/lib/loop/plugins/chat/chatViewTools.d.ts +41 -0
  501. package/lib/loop/plugins/chat/chatViewTools.js +92 -0
  502. package/lib/loop/plugins/chat/index.d.ts +111 -0
  503. package/lib/loop/plugins/chat/index.js +143 -0
  504. package/lib/loop/plugins/chat/turnState.d.ts +41 -0
  505. package/lib/loop/plugins/chat/turnState.js +90 -0
  506. package/lib/loop/plugins/chat-extras/index.d.ts +14 -0
  507. package/lib/loop/plugins/chat-extras/index.js +51 -0
  508. package/lib/loop/plugins/chat-header/HeaderView.d.ts +13 -0
  509. package/lib/loop/plugins/chat-header/HeaderView.js +6 -0
  510. package/lib/loop/plugins/chat-header/index.d.ts +3 -0
  511. package/lib/loop/plugins/chat-header/index.js +21 -0
  512. package/lib/loop/plugins/chat-view/index.d.ts +10 -0
  513. package/lib/loop/plugins/chat-view/index.js +29 -0
  514. package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.d.ts +27 -0
  515. package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.js +174 -0
  516. package/lib/loop/plugins/checkpoints-sidebar/index.d.ts +5 -0
  517. package/lib/loop/plugins/checkpoints-sidebar/index.js +39 -0
  518. package/lib/loop/plugins/commands/index.d.ts +20 -0
  519. package/lib/loop/plugins/commands/index.js +148 -0
  520. package/lib/loop/plugins/decks/DeckSurface.d.ts +10 -0
  521. package/lib/loop/plugins/decks/DeckSurface.js +6 -0
  522. package/lib/loop/plugins/decks/DecksMenu.d.ts +11 -0
  523. package/lib/loop/plugins/decks/DecksMenu.js +42 -0
  524. package/lib/loop/plugins/decks/index.d.ts +19 -0
  525. package/lib/loop/plugins/decks/index.js +133 -0
  526. package/lib/loop/plugins/decks/surface.d.ts +7 -0
  527. package/lib/loop/plugins/decks/surface.js +11 -0
  528. package/lib/loop/plugins/document/DocumentView.d.ts +12 -0
  529. package/lib/loop/plugins/document/DocumentView.js +68 -0
  530. package/lib/loop/plugins/document/index.d.ts +3 -0
  531. package/lib/loop/plugins/document/index.js +86 -0
  532. package/lib/loop/plugins/document/openingDocument.d.ts +28 -0
  533. package/lib/loop/plugins/document/openingDocument.js +122 -0
  534. package/lib/loop/plugins/document-toolbar/SandboxStatusItem.d.ts +16 -0
  535. package/lib/loop/plugins/document-toolbar/SandboxStatusItem.js +31 -0
  536. package/lib/loop/plugins/document-toolbar/index.d.ts +4 -0
  537. package/lib/loop/plugins/document-toolbar/index.js +35 -0
  538. package/lib/loop/plugins/document-toolbar/names.d.ts +6 -0
  539. package/lib/loop/plugins/document-toolbar/names.js +10 -0
  540. package/lib/loop/plugins/document-toolbar/plugin.d.ts +2 -0
  541. package/lib/loop/plugins/document-toolbar/plugin.js +38 -0
  542. package/lib/loop/plugins/document-view/index.d.ts +10 -0
  543. package/lib/loop/plugins/document-view/index.js +28 -0
  544. package/lib/loop/plugins/graph/GraphToggle.d.ts +17 -0
  545. package/lib/loop/plugins/graph/GraphToggle.js +22 -0
  546. package/lib/loop/plugins/graph/GraphView.d.ts +16 -0
  547. package/lib/loop/plugins/graph/GraphView.js +6 -0
  548. package/lib/loop/plugins/graph/index.d.ts +5 -0
  549. package/lib/loop/plugins/graph/index.js +80 -0
  550. package/lib/loop/plugins/graph/viewType.d.ts +10 -0
  551. package/lib/loop/plugins/graph/viewType.js +14 -0
  552. package/lib/loop/plugins/input-prompt/ComposerView.d.ts +15 -0
  553. package/lib/loop/plugins/input-prompt/ComposerView.js +25 -0
  554. package/lib/loop/plugins/input-prompt/index.d.ts +25 -0
  555. package/lib/loop/plugins/input-prompt/index.js +26 -0
  556. package/lib/loop/plugins/models/index.d.ts +3 -0
  557. package/lib/loop/plugins/models/index.js +49 -0
  558. package/lib/loop/plugins/notebook/NotebookView.d.ts +9 -0
  559. package/lib/loop/plugins/notebook/NotebookView.js +189 -0
  560. package/lib/loop/plugins/notebook/index.d.ts +3 -0
  561. package/lib/loop/plugins/notebook/index.js +91 -0
  562. package/lib/loop/plugins/notebook/openingNotebook.d.ts +72 -0
  563. package/lib/loop/plugins/notebook/openingNotebook.js +90 -0
  564. package/lib/loop/plugins/notebook-toolbar/index.d.ts +4 -0
  565. package/lib/loop/plugins/notebook-toolbar/index.js +45 -0
  566. package/lib/loop/plugins/notebook-toolbar/items.d.ts +10 -0
  567. package/lib/loop/plugins/notebook-toolbar/items.js +45 -0
  568. package/lib/loop/plugins/notebook-toolbar/names.d.ts +9 -0
  569. package/lib/loop/plugins/notebook-toolbar/names.js +13 -0
  570. package/lib/loop/plugins/notebook-toolbar/plugin.d.ts +2 -0
  571. package/lib/loop/plugins/notebook-toolbar/plugin.js +24 -0
  572. package/lib/loop/plugins/notebook-view/index.d.ts +10 -0
  573. package/lib/loop/plugins/notebook-view/index.js +30 -0
  574. package/lib/loop/plugins/page-layout/TurnPanel.d.ts +25 -0
  575. package/lib/loop/plugins/page-layout/TurnPanel.js +126 -0
  576. package/lib/loop/plugins/page-layout/index.d.ts +35 -0
  577. package/lib/loop/plugins/page-layout/index.js +80 -0
  578. package/lib/loop/plugins/plugins-panel/index.d.ts +14 -0
  579. package/lib/loop/plugins/plugins-panel/index.js +74 -0
  580. package/lib/loop/plugins/prompt/NewChatAction.d.ts +19 -0
  581. package/lib/loop/plugins/prompt/NewChatAction.js +10 -0
  582. package/lib/loop/plugins/prompt/index.d.ts +11 -0
  583. package/lib/loop/plugins/prompt/index.js +73 -0
  584. package/lib/loop/plugins/shell/editorChoice.d.ts +31 -0
  585. package/lib/loop/plugins/shell/editorChoice.js +58 -0
  586. package/lib/loop/plugins/shell/index.d.ts +47 -0
  587. package/lib/loop/plugins/shell/index.js +142 -0
  588. package/lib/loop/plugins/shell/useEditorPreviews.d.ts +32 -0
  589. package/lib/loop/plugins/shell/useEditorPreviews.js +217 -0
  590. package/lib/loop/plugins/subagent-activity/SubagentPulse.d.ts +16 -0
  591. package/lib/loop/plugins/subagent-activity/SubagentPulse.js +45 -0
  592. package/lib/loop/plugins/subagent-activity/index.d.ts +12 -0
  593. package/lib/loop/plugins/subagent-activity/index.js +42 -0
  594. package/lib/loop/plugins/view-switch/index.d.ts +46 -0
  595. package/lib/loop/plugins/view-switch/index.js +68 -0
  596. package/lib/loop/plugins/window-frame/WindowFrame.d.ts +48 -0
  597. package/lib/loop/plugins/window-frame/WindowFrame.js +63 -0
  598. package/lib/loop/plugins/window-frame/index.d.ts +6 -0
  599. package/lib/loop/plugins/window-frame/index.js +79 -0
  600. package/lib/loop/plugins/window-frame/slots.d.ts +26 -0
  601. package/lib/loop/plugins/window-frame/slots.js +30 -0
  602. package/lib/loop/presets.d.ts +167 -0
  603. package/lib/loop/presets.js +139 -0
  604. package/lib/loop/shell/LoopWorkspace.d.ts +109 -0
  605. package/lib/loop/shell/LoopWorkspace.js +231 -0
  606. package/lib/loop/shell/PluginToggles.d.ts +21 -0
  607. package/lib/loop/shell/PluginToggles.js +41 -0
  608. package/lib/loop/shell/ViewSwitcher.d.ts +24 -0
  609. package/lib/loop/shell/ViewSwitcher.js +43 -0
  610. package/lib/loop/shell/WorkspaceFullScreenAction.d.ts +25 -0
  611. package/lib/loop/shell/WorkspaceFullScreenAction.js +24 -0
  612. package/lib/loop/shell/index.d.ts +10 -0
  613. package/lib/loop/shell/index.js +14 -0
  614. package/lib/loop/shell/useWorkspaceFullScreen.d.ts +93 -0
  615. package/lib/loop/shell/useWorkspaceFullScreen.js +167 -0
  616. package/lib/loop-example-main.d.ts +1 -0
  617. package/lib/loop-example-main.js +42 -0
  618. package/lib/loop-main.d.ts +1 -0
  619. package/lib/loop-main.js +138 -0
  620. package/lib/mcp/McpServerManager.d.ts +1 -1
  621. package/lib/models/CodeSandboxSnapshotDTO.d.ts +1 -1
  622. package/lib/models/CodeSandboxVariant.d.ts +13 -5
  623. package/lib/models/CodeSandboxVariant.js +17 -5
  624. package/lib/models/Content.d.ts +26 -0
  625. package/lib/models/Environment.d.ts +561 -5
  626. package/lib/models/Environment.js +12 -1
  627. package/lib/models/EnvironmentDTO.d.ts +24 -6
  628. package/lib/models/EnvironmentDTO.js +13 -2
  629. package/lib/models/Exercise.d.ts +0 -2
  630. package/lib/models/Library.d.ts +0 -2
  631. package/lib/models/Notebook.d.ts +0 -2
  632. package/lib/models/ProjectDTO.d.ts +2 -2
  633. package/lib/models/ProjectDTO.js +4 -4
  634. package/lib/models/Runtime.d.ts +11 -11
  635. package/lib/models/RuntimeDTO.d.ts +16 -7
  636. package/lib/models/RuntimeDTO.js +9 -9
  637. package/lib/models/Space.d.ts +10 -0
  638. package/lib/models/Space.js +1 -1
  639. package/lib/models/SpaceDTO.d.ts +1 -1
  640. package/lib/models/SpaceItem.d.ts +1 -2
  641. package/lib/models/environments.generated.d.ts +113 -0
  642. package/lib/models/environments.generated.js +13 -0
  643. package/lib/models/index.d.ts +0 -1
  644. package/lib/models/index.js +0 -1
  645. package/lib/protocols/A2AAdapter.d.ts +39 -6
  646. package/lib/protocols/A2AAdapter.js +180 -11
  647. package/lib/protocols/ACPAdapter.js +40 -37
  648. package/lib/protocols/AGUIAdapter.d.ts +14 -0
  649. package/lib/protocols/AGUIAdapter.js +34 -9
  650. package/lib/protocols/BrowserAgentAdapter.d.ts +117 -0
  651. package/lib/protocols/BrowserAgentAdapter.js +310 -0
  652. package/lib/protocols/VercelAIAdapter.d.ts +10 -0
  653. package/lib/protocols/VercelAIAdapter.js +27 -7
  654. package/lib/protocols/index.d.ts +1 -0
  655. package/lib/protocols/index.js +1 -0
  656. package/lib/runtimes/actions.d.ts +3 -3
  657. package/lib/runtimes/actions.js +27 -14
  658. package/lib/runtimes/apis.d.ts +13 -4
  659. package/lib/runtimes/browser/agent.d.ts +54 -0
  660. package/lib/runtimes/browser/agent.js +63 -0
  661. package/lib/runtimes/browser/anonymousToken.d.ts +121 -0
  662. package/lib/runtimes/browser/anonymousToken.js +300 -0
  663. package/lib/runtimes/browser/frontendTools.d.ts +61 -0
  664. package/lib/runtimes/browser/frontendTools.js +152 -0
  665. package/lib/runtimes/browser/index.d.ts +11 -0
  666. package/lib/runtimes/browser/index.js +20 -0
  667. package/lib/runtimes/browser/model.d.ts +52 -0
  668. package/lib/runtimes/browser/model.js +110 -0
  669. package/lib/runtimes/browser/protocol.d.ts +54 -0
  670. package/lib/runtimes/browser/protocol.js +35 -0
  671. package/lib/runtimes/browser/subagents.d.ts +131 -0
  672. package/lib/runtimes/browser/subagents.js +241 -0
  673. package/lib/runtimes/index.d.ts +3 -0
  674. package/lib/runtimes/index.js +3 -0
  675. package/lib/runtimes/lifecycle.d.ts +76 -0
  676. package/lib/runtimes/lifecycle.js +99 -0
  677. package/lib/runtimes/variants.d.ts +172 -0
  678. package/lib/runtimes/variants.js +187 -0
  679. package/lib/services/reconnectToRuntime.d.ts +2 -2
  680. package/lib/services/reconnectToRuntime.js +3 -3
  681. package/lib/services/sandboxServiceManagers.d.ts +2 -2
  682. package/lib/services/sandboxServiceManagers.js +11 -11
  683. package/lib/specs/agents/agents.d.ts +128 -112
  684. package/lib/specs/agents/agents.js +8024 -5052
  685. package/lib/specs/evals.js +9 -0
  686. package/lib/specs/frontendTools.d.ts +3 -0
  687. package/lib/specs/frontendTools.js +46 -3
  688. package/lib/specs/mcpServers.d.ts +1 -0
  689. package/lib/specs/mcpServers.js +25 -2
  690. package/lib/specs/models.d.ts +18 -0
  691. package/lib/specs/models.js +154 -0
  692. package/lib/specs/outputs.d.ts +2 -0
  693. package/lib/specs/outputs.js +22 -0
  694. package/lib/specs/personas.js +1 -1
  695. package/lib/specs/teams/teams.d.ts +2 -0
  696. package/lib/specs/teams/teams.js +628 -111
  697. package/lib/state/index.d.ts +1 -1
  698. package/lib/state/index.js +1 -1
  699. package/lib/state/substates/RuntimesState.d.ts +5 -5
  700. package/lib/state/substates/RuntimesState.js +14 -14
  701. package/lib/state/substates/index.d.ts +1 -1
  702. package/lib/state/substates/index.js +1 -1
  703. package/lib/stores/agentRuntimeStore.d.ts +43 -1
  704. package/lib/stores/agentRuntimeStore.js +100 -11
  705. package/lib/stores/index.d.ts +1 -1
  706. package/lib/stores/index.js +1 -1
  707. package/lib/stories/Button.d.ts +1 -1
  708. package/lib/stories/Button.stories.d.ts +1 -1
  709. package/lib/stories/Header.d.ts +1 -1
  710. package/lib/stories/Header.stories.d.ts +1 -1
  711. package/lib/test-setup.js +66 -0
  712. package/lib/tools/adapters/agent-runtimes/lexicalHooks.d.ts +15 -0
  713. package/lib/tools/adapters/agent-runtimes/lexicalHooks.js +43 -2
  714. package/lib/tools/adapters/agent-runtimes/notebookHooks.d.ts +9 -0
  715. package/lib/tools/adapters/agent-runtimes/notebookHooks.js +12 -0
  716. package/lib/tools/adapters/commands/frontendCommandTools.d.ts +11 -0
  717. package/lib/tools/adapters/commands/frontendCommandTools.js +60 -0
  718. package/lib/tools/adapters/commands/index.d.ts +1 -0
  719. package/lib/{models/Dataset.js → tools/adapters/commands/index.js} +1 -1
  720. package/lib/tools/adapters/copilotkit/lexicalHooks.js +7 -3
  721. package/lib/tools/index.d.ts +1 -0
  722. package/lib/tools/index.js +1 -0
  723. package/lib/types/a2a.d.ts +15 -1
  724. package/lib/types/agents-lifecycle.d.ts +11 -6
  725. package/lib/types/agents.d.ts +31 -6
  726. package/lib/types/agentspecs.d.ts +120 -4
  727. package/lib/types/chat.d.ts +251 -3
  728. package/lib/types/checkpoints.d.ts +20 -0
  729. package/lib/types/config.d.ts +13 -1
  730. package/lib/types/connection.d.ts +1 -1
  731. package/lib/types/evals.d.ts +2 -0
  732. package/lib/types/messages.d.ts +60 -0
  733. package/lib/types/models.d.ts +26 -0
  734. package/lib/types/notifications.d.ts +15 -6
  735. package/lib/types/protocol.d.ts +7 -2
  736. package/lib/types/stream.d.ts +48 -3
  737. package/lib/types/stream.js +5 -0
  738. package/lib/types/teams.d.ts +102 -4
  739. package/lib/types/tool-approvals.d.ts +1 -1
  740. package/lib/types/tools.d.ts +8 -2
  741. package/lib/utils/utils.js +7 -1
  742. package/package.json +376 -361
  743. package/scripts/codegen/__pycache__/compose.cpython-313.pyc +0 -0
  744. package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
  745. package/scripts/codegen/compose.py +208 -0
  746. package/scripts/codegen/generate_agents.py +202 -31
  747. package/scripts/codegen/generate_evals.py +2 -0
  748. package/scripts/codegen/generate_frontend_tools.py +35 -6
  749. package/scripts/codegen/generate_models.py +40 -15
  750. package/scripts/codegen/generate_sandbox_agents.py +76 -62
  751. package/scripts/codegen/generate_teams.py +178 -4
  752. package/scripts/codegen/generate_tools.py +6 -4
  753. package/scripts/gen_workers.py +278 -110
  754. package/scripts/generate-environments-types.py +404 -0
  755. package/lib/chat/prompt/InputFooter.d.ts +0 -58
  756. package/lib/chat/prompt/InputFooter.js +0 -194
  757. package/lib/chat/prompt/InputPromptFooter.d.ts +0 -27
  758. package/lib/chat/prompt/InputPromptFooter.js +0 -15
  759. package/lib/chat/prompt/InputPromptHeader.d.ts +0 -15
  760. package/lib/chat/prompt/InputPromptHeader.js +0 -15
  761. package/lib/chat/usage/TokenUsageBar.d.ts +0 -8
  762. package/lib/hooks/useRuntimes.d.ts +0 -5
  763. package/lib/hooks/useRuntimes.js +0 -34
  764. package/lib/jupyter/kernelsHandler.d.ts +0 -8
  765. package/lib/jupyter/kernelsHandler.js +0 -39
  766. package/lib/models/Dataset.d.ts +0 -16
  767. package/lib/utils/Cells.d.ts +0 -2
  768. package/lib/utils/Cells.js +0 -28
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * `@datalayer/loop-plugin-document-view` — the document, one click away.
7
+ *
8
+ * The footer icon that opens the document beside the conversation. It shows
9
+ * only while a document is actually contributed, and requires the
10
+ * input-prompt plugin, whose footer the icon sits in.
11
+ *
12
+ * @module loop/plugins/document-view
13
+ */
14
+ import { FileIcon } from '@primer/octicons-react';
15
+ import { defineViewPlugin } from '../view-switch';
16
+ export const DOCUMENT_VIEW_PLUGIN_NAME = '@datalayer/loop-plugin-document-view';
17
+ export const DocumentViewPlugin = defineViewPlugin({
18
+ key: 'document',
19
+ viewId: 'document',
20
+ displayName: 'Document view',
21
+ description: 'The document beside the chat, from the composer footer.',
22
+ icon: FileIcon,
23
+ tooltip: 'Show the document',
24
+ octicon: 'file',
25
+ emoji: '\u{1F4C4}',
26
+ order: 12,
27
+ });
28
+ export default DocumentViewPlugin;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The button that opens the plugin graph, and closes it again.
3
+ *
4
+ * It belongs to the graph plugin rather than to the sidebar that renders it.
5
+ * The sidebar used to draw it and had to ask, by name, whether a graph view
6
+ * was mounted before showing it — which is a panel knowing about a plugin.
7
+ * Contributed here, the button simply goes when the plugin does.
8
+ *
9
+ * @module loop/plugins/graph/GraphToggle
10
+ */
11
+ import type { JSX } from 'react';
12
+ import type { LoopWorkspaceContext } from '../../core';
13
+ export type GraphToggleProps = {
14
+ /** The workspace, so the button can move it to the graph and back. */
15
+ workspace?: LoopWorkspaceContext;
16
+ };
17
+ export default function GraphToggle({ workspace, }: GraphToggleProps): JSX.Element | null;
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useRef } from 'react';
3
+ import { Button } from '@primer/react';
4
+ import { GRAPH_VIEW_TYPE } from './viewType';
5
+ export default function GraphToggle({ workspace, }) {
6
+ // Where to go back to. Remembered rather than assumed: "back" should return
7
+ // to what the person was looking at, not to whichever view happens to be
8
+ // first.
9
+ const previous = useRef('');
10
+ if (!workspace) {
11
+ return null;
12
+ }
13
+ const onGraph = workspace.activeViewType === GRAPH_VIEW_TYPE;
14
+ return (_jsx(Button, { sx: { width: '100%' }, onClick: () => {
15
+ if (onGraph) {
16
+ workspace.setActiveViewType(previous.current);
17
+ return;
18
+ }
19
+ previous.current = workspace.activeViewType;
20
+ workspace.setActiveViewType(GRAPH_VIEW_TYPE);
21
+ }, children: onGraph ? 'Back to the workspace' : 'View plugin graph' }));
22
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The plugin graph, as a workspace view.
3
+ *
4
+ * `@datalayer/reactor-graph` is generic and knows nothing about a workspace: it
5
+ * fills a `graph` slot and reads the platform it is rendered inside. This is
6
+ * the twenty lines that put that slot where the workspace shows things — a
7
+ * view — so the graph arrives through the same door as every other surface.
8
+ *
9
+ * The backend props are left out on purpose. They are what a host knows and the
10
+ * graph cannot; a workspace whose server plugins are not tracked here is better
11
+ * drawn as the frontend platform alone than as a frontend plus a guess.
12
+ *
13
+ * @module loop/plugins/graph/GraphView
14
+ */
15
+ import type { JSX } from 'react';
16
+ export default function GraphView(): JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box } from '@primer/react';
3
+ import { ReactorSlot } from '@datalayer/reactor/react';
4
+ export default function GraphView() {
5
+ return (_jsx(Box, { sx: { height: '100%', overflowY: 'auto', px: 4, py: 3 }, children: _jsx(ReactorSlot, { slot: "graph" }) }));
6
+ }
@@ -0,0 +1,5 @@
1
+ import type { ReactorReactOutput } from '@datalayer/reactor/react';
2
+ export { GRAPH_VIEW_TYPE } from './viewType';
3
+ export declare const GRAPH_PLUGIN_NAME = "@datalayer/loop-plugin-graph";
4
+ export declare const GraphViewPlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, ReactorReactOutput>;
5
+ export default GraphViewPlugin;
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright (c) 2025-2026 Datalayer, Inc.
4
+ * Distributed under the terms of the Modified BSD License.
5
+ */
6
+ /**
7
+ * `@datalayer/loop-plugin-graph` — the plugin graph, as a view.
8
+ *
9
+ * A thin adapter over the reusable `@datalayer/reactor-graph`: that plugin
10
+ * draws the graph into a `graph` slot, and this one gives the slot a place in
11
+ * the workspace. Keeping them apart is what lets the graph stay generic — it
12
+ * is drawn the same way in a music store and in an agent workspace.
13
+ *
14
+ * @module loop/plugins/graph
15
+ */
16
+ import { WorkflowIcon } from '@primer/octicons-react';
17
+ import { configurePlugin, contribution, definePlugin, } from '@datalayer/reactor';
18
+ import { GraphPlugin } from '@datalayer/reactor-graph';
19
+ import { MANAGER_ACTIONS_SLOT } from '@datalayer/reactor-manager';
20
+ import { LoopCommand, LoopViewType, } from '../../core';
21
+ import GraphToggle from './GraphToggle';
22
+ import { GRAPH_VIEW_TYPE } from './viewType';
23
+ export { GRAPH_VIEW_TYPE } from './viewType';
24
+ export const GRAPH_PLUGIN_NAME = '@datalayer/loop-plugin-graph';
25
+ export const GraphViewPlugin = definePlugin({
26
+ name: GRAPH_PLUGIN_NAME,
27
+ displayName: 'Plugin graph',
28
+ description: 'Draws the plugins, their dependencies and their extension points.',
29
+ octicon: 'workflow',
30
+ emoji: '\u{1F578}',
31
+ /*
32
+ * The generic graph plugin is pulled in rather than assumed: mounting this
33
+ * one is enough, whether or not the host remembered the other.
34
+ *
35
+ * Its own "View the plugin graph" command is turned off, because this plugin
36
+ * already contributes one that works here. The generic command asks the host
37
+ * to route by dispatching an event; this workspace answers by setting the
38
+ * active view directly, and two palette entries for one action — one of them
39
+ * a hopeful event dispatch nothing in the loop listened for — is how the
40
+ * palette came to have an entry that did nothing.
41
+ */
42
+ dependencies: [configurePlugin(GraphPlugin, { registerCommand: false })],
43
+ /*
44
+ * The way in, contributed beside the view it opens.
45
+ *
46
+ * It used to be drawn by the plugins panel, which had to ask whether a graph
47
+ * view existed before showing it — a panel checking for a plugin it knows by
48
+ * name. Owning the button here means switching this plugin off takes the
49
+ * button with it, and the manager needs to know nothing about graphs.
50
+ */
51
+ build: () => ({
52
+ components: [
53
+ {
54
+ id: 'graph-toggle',
55
+ slot: MANAGER_ACTIONS_SLOT,
56
+ Component: ({ workspace }) => (_jsx(GraphToggle, { workspace: workspace })),
57
+ },
58
+ ],
59
+ }),
60
+ contributes: [
61
+ contribution(LoopViewType, {
62
+ viewType: GRAPH_VIEW_TYPE,
63
+ title: 'Plugin graph',
64
+ icon: WorkflowIcon,
65
+ // Last: it is about the workspace rather than part of the work.
66
+ order: 900,
67
+ load: () => import('./GraphView'),
68
+ }, { id: 'graph', order: 900 }),
69
+ contribution(LoopCommand, {
70
+ name: 'graph',
71
+ description: 'Show the plugin graph',
72
+ group: 'Session',
73
+ keybinding: 'Mod+Alt+G',
74
+ run: async ({ workspace }) => {
75
+ workspace.setActiveViewType(GRAPH_VIEW_TYPE);
76
+ },
77
+ }, { id: 'graph' }),
78
+ ],
79
+ });
80
+ export default GraphViewPlugin;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The graph view's id, on its own.
3
+ *
4
+ * Split out so the button can name the view without importing the plugin that
5
+ * declares it — which would be a cycle, since the plugin imports the button.
6
+ *
7
+ * @module loop/plugins/graph/viewType
8
+ */
9
+ /** The view the graph plugin contributes. */
10
+ export declare const GRAPH_VIEW_TYPE = "graph";
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * The graph view's id, on its own.
7
+ *
8
+ * Split out so the button can name the view without importing the plugin that
9
+ * declares it — which would be a cycle, since the plugin imports the button.
10
+ *
11
+ * @module loop/plugins/graph/viewType
12
+ */
13
+ /** The view the graph plugin contributes. */
14
+ export const GRAPH_VIEW_TYPE = 'graph';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The composer, rendered from the props the chat view assembled.
3
+ *
4
+ * Plus whatever was hung on it: the `LoopPromptPanel` point takes panels for
5
+ * above and below the composer, and this view stacks them inside the prompt's
6
+ * own card — so a floating composer carries its panels with it. The page
7
+ * layout's current-turn panel is the first of these; the point is open to any
8
+ * plugin.
9
+ *
10
+ * @module loop/plugins/input-prompt/ComposerView
11
+ */
12
+ import type { JSX } from 'react';
13
+ import { type LoopChatComposerProps } from '../../core';
14
+ export declare function ComposerView({ workspace, composer, }: LoopChatComposerProps): JSX.Element;
15
+ export default ComposerView;
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { Box } from '@datalayer/primer-addons';
4
+ import { useContributions } from '@datalayer/reactor/react';
5
+ import { InputPrompt } from '../../../chat/prompt/InputPrompt';
6
+ import { LoopPromptPanel, } from '../../core';
7
+ function byOrder(left, right) {
8
+ return (left.value.order ?? 100) - (right.value.order ?? 100);
9
+ }
10
+ export function ComposerView({ workspace, composer, }) {
11
+ const panels = useContributions(LoopPromptPanel);
12
+ const { above, below } = useMemo(() => {
13
+ const sorted = [...panels].sort(byOrder);
14
+ return {
15
+ above: sorted.filter(entry => entry.value.placement === 'above'),
16
+ below: sorted.filter(entry => entry.value.placement !== 'above'),
17
+ };
18
+ }, [panels]);
19
+ const stack = (entries) => entries.length > 0 ? (_jsx(_Fragment, { children: entries.map(entry => {
20
+ const Panel = entry.value.Component;
21
+ return _jsx(Panel, { workspace: workspace }, entry.value.id);
22
+ }) })) : undefined;
23
+ return (_jsx(Box, { sx: { flex: '0 0 auto' }, children: _jsx(InputPrompt, { ...composer, leadingPanel: stack(above), trailingPanel: stack(below) }) }));
24
+ }
25
+ export default ComposerView;
@@ -0,0 +1,25 @@
1
+ export declare const INPUT_PROMPT_PLUGIN_NAME = "@datalayer/loop-plugin-input-prompt";
2
+ /**
3
+ * What a host may set on the composer.
4
+ */
5
+ export type InputPromptPluginConfig = {
6
+ /**
7
+ * Called once — the first time a person actually sends a message through
8
+ * this composer — and never again after, for the life of the mounted
9
+ * workspace.
10
+ *
11
+ * Typing does not count, and neither does a suggestion merely landing in
12
+ * the box: only a real send. This is the one place that sees every send
13
+ * regardless of which surface is open beside the chat, which is what
14
+ * makes it the right point for a host to notice "the conversation has
15
+ * started" rather than each editor plugin guessing at it independently.
16
+ *
17
+ * The usual reason to want it: a page that shows something *around* the
18
+ * workspace before the first message — an empty-state layout, a column
19
+ * beside it — and wants to react (give the editor the room that layout
20
+ * was holding, say) exactly once, when the workspace stops being empty.
21
+ */
22
+ firstPromptHook?: () => void;
23
+ };
24
+ export declare const InputPromptPlugin: import("@datalayer/reactor").ReactorPlugin<InputPromptPluginConfig, unknown, unknown>;
25
+ export default InputPromptPlugin;
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Suspense, lazy } from 'react';
3
+ import { contribution, definePlugin } from '@datalayer/reactor';
4
+ import { LoopChatComposer, LoopPromptPanel, } from '../../core';
5
+ export const INPUT_PROMPT_PLUGIN_NAME = '@datalayer/loop-plugin-input-prompt';
6
+ const LazyComposerView = lazy(() => import('./ComposerView'));
7
+ /** The lazy boundary, so the point's consumers need no Suspense of theirs. */
8
+ function ComposerView(props) {
9
+ return (_jsx(Suspense, { fallback: null, children: _jsx(LazyComposerView, { ...props }) }));
10
+ }
11
+ export const InputPromptPlugin = definePlugin({
12
+ name: INPUT_PROMPT_PLUGIN_NAME,
13
+ config: {},
14
+ displayName: 'Input Prompt',
15
+ description: 'The composer under (or over) the conversation.',
16
+ octicon: 'pencil',
17
+ emoji: '\u{270F}\u{FE0F}',
18
+ // The composer's own opening: panels hung above or below it, inside its
19
+ // card. Declared here so the graph shows the point before anything fills
20
+ // it; the page layout's current-turn panel is what normally does.
21
+ contributionPoints: [LoopPromptPanel],
22
+ contributes: [
23
+ contribution(LoopChatComposer, { id: 'input-prompt', Component: ComposerView }, { id: 'input-prompt' }),
24
+ ],
25
+ });
26
+ export default InputPromptPlugin;
@@ -0,0 +1,3 @@
1
+ export declare const MODELS_PLUGIN_NAME = "@datalayer/loop-plugin-models";
2
+ export declare const ModelsPlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, unknown>;
3
+ export default ModelsPlugin;
@@ -0,0 +1,49 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * `@datalayer/loop-plugin-models` — which model is answering.
7
+ *
8
+ * @module loop/plugins/models
9
+ */
10
+ import { contribution, definePlugin } from '@datalayer/reactor';
11
+ import { LoopCommand } from '../../core';
12
+ export const MODELS_PLUGIN_NAME = '@datalayer/loop-plugin-models';
13
+ /*
14
+ * No header chip any more.
15
+ *
16
+ * The plugin used to put a model dropdown in the workspace header, and the
17
+ * prompt's footer grew one of its own — two controls choosing one model,
18
+ * which would eventually disagree. The footer's is the one that survives: it
19
+ * sits with the tools and skills that decide what the next message does, and
20
+ * it is on screen in every placement of the prompt, floating included.
21
+ */
22
+ export const ModelsPlugin = definePlugin({
23
+ name: MODELS_PLUGIN_NAME,
24
+ displayName: 'Models',
25
+ description: 'Which model answers, from the agentspecs catalog.',
26
+ octicon: 'cpu',
27
+ emoji: '\u{1F9E0}',
28
+ contributes: [
29
+ contribution(LoopCommand, {
30
+ name: 'models',
31
+ aliases: ['model'],
32
+ description: 'Show the models available to this session',
33
+ group: 'Agents',
34
+ keybinding: 'Mod+Alt+M',
35
+ run: async ({ workspace }) => {
36
+ const response = await fetch(`${workspace.serverUrl}/api/v1/configure/models`);
37
+ if (!response.ok) {
38
+ return { content: 'The model catalogue is unavailable.' };
39
+ }
40
+ const payload = await response.json();
41
+ const reachable = (payload.models ?? []).filter((model) => model.available !== false).length;
42
+ return {
43
+ content: `${reachable} of ${(payload.models ?? []).length} models are ready. Pick one under the prompt.`,
44
+ };
45
+ },
46
+ }, { id: 'models' }),
47
+ ],
48
+ });
49
+ export default ModelsPlugin;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The notebook view: the ephemeral notebook, bound to the sandbox the base
3
+ * plugin owns.
4
+ *
5
+ * @module loop/plugins/notebook/NotebookView
6
+ */
7
+ import type { JSX } from 'react';
8
+ import { type ChatSurfaceProps } from '../../core';
9
+ export default function NotebookView({ workspace, }: ChatSurfaceProps): JSX.Element;
@@ -0,0 +1,189 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef } from 'react';
3
+ import { useContributions, useSignalValue } from '@datalayer/reactor/react';
4
+ import { Box, Text } from '@primer/react';
5
+ import { EphemeralNotebook } from '../../../chat/notebook/EphemeralNotebook';
6
+ import { LoopNotebookToolbar, LoopNotebookToolbarItem, LoopOpeningNotebook, } from '../../core';
7
+ import { useEditorToolbar } from '../../core/toolbar';
8
+ import { openingCode, openingNotebook } from './openingNotebook';
9
+ import { useSandboxService } from '../agents';
10
+ export default function NotebookView({ workspace, }) {
11
+ const service = useSandboxService();
12
+ const snapshot = useSignalValue(service.snapshot);
13
+ // Named once: it identifies the notebook to its store, and it is what a
14
+ // toolbar item is handed so it can report on *this* notebook.
15
+ const notebookId = workspace.surfaceId;
16
+ // The toolbar is not this view's to draw. It offers the point, and a plugin
17
+ // provides the bar; with that plugin switched off there is no toolbar here
18
+ // at all, not an empty one. Items come from whoever adds to it — the toolbar
19
+ // plugin's kernel light, the chat's agent actions — and this view names none
20
+ // of them. It used to hardcode two buttons that submitted prompts, which
21
+ // meant the notebook knew about the chat.
22
+ const toolbar = useEditorToolbar(LoopNotebookToolbar, LoopNotebookToolbarItem, {
23
+ workspace,
24
+ editorId: notebookId,
25
+ });
26
+ /*
27
+ * One document per mount, built before anything can return.
28
+ *
29
+ * `EphemeralNotebook` holds on to the object it is first handed and edits it
30
+ * in place, so a shared literal would be a shared notebook — hence the memo.
31
+ * It sits up here with the other hooks because the guard below returns
32
+ * early, and a hook after an early return runs on some renders and not
33
+ * others, which is the one thing React cannot tolerate.
34
+ */
35
+ /*
36
+ * A host's own opening notebook wins over the plugin's one cell.
37
+ *
38
+ * Read from the `LoopOpeningNotebook` point: a page whose argument needs
39
+ * several cells and an output in the first viewport contributes them, and
40
+ * this view opens on that instead. First contribution wins. What to run so
41
+ * the kernel agrees with the cells comes with it, or is the code cells'
42
+ * own source joined top to bottom.
43
+ */
44
+ const openingEntries = useContributions(LoopOpeningNotebook);
45
+ const contributedOpening = openingEntries[0]?.value;
46
+ const opening = useMemo(() => contributedOpening ? contributedOpening.notebook() : openingNotebook(), [contributedOpening]);
47
+ const primeCode = useMemo(() => {
48
+ if (!contributedOpening) {
49
+ return openingCode();
50
+ }
51
+ if (contributedOpening.prime !== undefined) {
52
+ return contributedOpening.prime;
53
+ }
54
+ return opening.cells
55
+ .filter(cell => cell.cell_type === 'code')
56
+ .map(cell => Array.isArray(cell.source) ? cell.source.join('') : cell.source)
57
+ .join('\n');
58
+ }, [contributedOpening, opening]);
59
+ /*
60
+ * Run the opening cell on the sandbox, once it has one.
61
+ *
62
+ * The notebook opens showing that cell as already executed — `[1]`, with its
63
+ * frame printed underneath — and until this runs, that is a picture of a
64
+ * session rather than one: `sales` is on screen and undefined, so the first
65
+ * thing the agent or the reader does with it raises `NameError`. Executing
66
+ * the same source the cell displays makes the kernel agree with the page.
67
+ *
68
+ * Through the sandbox service rather than the notebook's own run command,
69
+ * because the two share a kernel and only one of them exists this early: the
70
+ * service is ready the moment the sandbox is, while the notebook is still
71
+ * mounting its editor. The output goes to the service's own execution log,
72
+ * so the cell keeps the result it was born with rather than gaining a second
73
+ * copy.
74
+ *
75
+ * Keyed on the kernel, so a target switch — which is a new kernel — primes
76
+ * the new one, and a re-render does not run it again.
77
+ */
78
+ const primed = useRef(null);
79
+ useEffect(() => {
80
+ const kernelId = snapshot.kernelId;
81
+ if (snapshot.state !== 'running' || !kernelId) {
82
+ return;
83
+ }
84
+ if (primed.current === kernelId) {
85
+ return;
86
+ }
87
+ primed.current = kernelId;
88
+ void service.execute(primeCode).catch((error) => {
89
+ // Not worth a banner. The notebook still shows what it showed; what a
90
+ // reader loses is the variable, and the agent will say so plainly the
91
+ // first time it looks.
92
+ console.warn('[loop] could not prime the opening cell', error);
93
+ });
94
+ }, [service, snapshot.state, snapshot.kernelId, primeCode]);
95
+ // The switcher's `canOpen` gate should have kept this view shut, but a
96
+ // sandbox can go away while it is on screen — say so rather than rendering a
97
+ // notebook wired to nothing.
98
+ if (snapshot.state !== 'running') {
99
+ return (_jsx(Box, { sx: {
100
+ height: '100%',
101
+ display: 'flex',
102
+ alignItems: 'center',
103
+ justifyContent: 'center',
104
+ color: 'fg.muted',
105
+ fontSize: 1,
106
+ px: 4,
107
+ textAlign: 'center',
108
+ }, children: _jsx(Text, { children: "The notebook needs a running sandbox. Open the Sandbox view to see what it is doing." }) }));
109
+ }
110
+ // A browser sandbox already owns its kernel; binding to that manager is what
111
+ // puts the agent's executions and the reader's cells in the same one. A
112
+ // server sandbox is reached by URL, as before, and returns null here.
113
+ const browserManager = service.getServiceManager() ??
114
+ undefined;
115
+ return (_jsx(Box, { sx: {
116
+ height: '100%',
117
+ minHeight: 0,
118
+ /*
119
+ A height for the Lumino widgets, forced.
120
+
121
+ WORKAROUND, and knowingly a blunt one. The notebook renders inside a
122
+ chain of Lumino widgets — `.jp-NotebookPanel` holds `.jp-Notebook`,
123
+ which is absolutely positioned and therefore sized entirely by its
124
+ parent. Lumino sets those sizes itself, from a resize it expects to
125
+ be told about; when that message does not arrive, or arrives before
126
+ the panel has a box of its own, the parent measures zero and the
127
+ absolutely positioned notebook inside it has nothing to fill. The
128
+ cells are in the DOM the whole time. Nothing is on screen.
129
+
130
+ It is intermittent, which is what makes it worth a hack: measured
131
+ side by side on a good load, every element here — panel, notebook,
132
+ cell, editor — has exactly the geometry it has locally, so there is
133
+ no wrong number to correct, only a number that sometimes never
134
+ arrives. Declaring it in CSS means the browser resolves it on layout
135
+ whether or not Lumino ever says anything.
136
+
137
+ `!important` because Lumino writes its own inline sizes and would
138
+ otherwise win. Scoped to this view, so it is the LOOP workspace's
139
+ notebook that is pinned and not every notebook in the package — the
140
+ real fix belongs in the widget layer, and this must not make that
141
+ harder to find.
142
+ */
143
+ '& .jp-NotebookPanel': {
144
+ height: '100% !important',
145
+ minHeight: 0,
146
+ },
147
+ /* The panel is the only thing between the flex column above and the
148
+ absolutely positioned notebook below, so it has to be a box that
149
+ fills rather than one that wraps its content. */
150
+ '& .dla-Box-Notebook': {
151
+ display: 'flex',
152
+ flexDirection: 'column',
153
+ minHeight: 0,
154
+ },
155
+ }, children: _jsx(EphemeralNotebook
156
+ /*
157
+ Opened on a small analysis that has already run, not on a blank cell.
158
+
159
+ Every opener this agent offers refers to "this notebook" — analyze
160
+ this dataset, find the anomalies, plot revenue by region — and
161
+ against an empty document those are questions with no answer. Built
162
+ once per mount: the notebook component keeps the object it is given
163
+ and edits it in place.
164
+ */
165
+ , {
166
+ /*
167
+ Opened on a small analysis that has already run, not on a blank cell.
168
+
169
+ Every opener this agent offers refers to "this notebook" — analyze
170
+ this dataset, find the anomalies, plot revenue by region — and
171
+ against an empty document those are questions with no answer. Built
172
+ once per mount: the notebook component keeps the object it is given
173
+ and edits it in place.
174
+ */
175
+ nbformat: opening,
176
+ // The entry point owns the theme; a second provider here would fight
177
+ // it over BaseStyles and font tokens (§3.5, §3.6).
178
+ inheritTheme: true, notebookId: notebookId, serviceManager: browserManager,
179
+ // Join the sandbox's kernel rather than starting a rival one.
180
+ kernelId: browserManager ? snapshot.kernelId : undefined, showToolbar: toolbar.present, toolbarExtraItems: toolbar.items, runtimeOverride: !browserManager && snapshot.jupyterUrl
181
+ ? {
182
+ baseUrl: snapshot.jupyterUrl,
183
+ // Without the token the server refuses every request and the
184
+ // cell runs into silence — no kernel, no output, no error the
185
+ // reader can act on.
186
+ token: snapshot.jupyterToken,
187
+ }
188
+ : undefined }) }));
189
+ }
@@ -0,0 +1,3 @@
1
+ export declare const NOTEBOOK_PLUGIN_NAME = "@datalayer/loop-plugin-notebook";
2
+ export declare const NotebookPlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, unknown>;
3
+ export default NotebookPlugin;
@@ -0,0 +1,91 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * `@datalayer/loop-plugin-notebook` — a notebook editor, beside the chat.
7
+ *
8
+ * Contributed to the chat rather than to the workspace: a notebook is what the
9
+ * conversation is about, and a person reading a reply wants the cell it just
10
+ * changed in view, not one tab away.
11
+ *
12
+ * It declares the sandbox plugin as a dependency, which is the point: the
13
+ * relationship is in the extension graph rather than in prose, and the reactor
14
+ * pulls the base plugin in whether or not the host remembered to mount it.
15
+ *
16
+ * @module loop/plugins/notebook
17
+ */
18
+ import { RowsIcon } from '@primer/octicons-react';
19
+ import { contribution, definePlugin } from '@datalayer/reactor';
20
+ import { LoopCommand, LoopEditorView, LoopFrontendTool, LoopOpeningNotebook, requestSurface, LoopNotebookToolbar, } from '../../core';
21
+ import { AgentsPlugin } from '../agents';
22
+ export const NOTEBOOK_PLUGIN_NAME = '@datalayer/loop-plugin-notebook';
23
+ export const NotebookPlugin = definePlugin({
24
+ name: NOTEBOOK_PLUGIN_NAME,
25
+ displayName: 'Notebook editor',
26
+ description: 'A notebook beside the chat, on the session\u2019s kernel.',
27
+ octicon: 'rows',
28
+ emoji: '\u{1F4D3}',
29
+ // The sandbox is a hard dependency: a notebook with no kernel is a text
30
+ // file. The shell and the chat are extended through their points instead —
31
+ // a dependency would take this plugin down with them, and unticking the
32
+ // chat must leave the notebook standing.
33
+ dependencies: [AgentsPlugin],
34
+ // Declared, not merely used: the registry knows who contributed to a
35
+ // point, it cannot know who opened it. Declaring it is also what makes
36
+ // the notebook toolbar visible on the plugin graph before anything has
37
+ // filled it — which is exactly when knowing it exists is most useful.
38
+ // And the opening notebook: what the editor holds before anyone types. The
39
+ // plugin ships one cell with a result; a host whose argument needs several
40
+ // contributes its own, and the view opens on that instead.
41
+ contributionPoints: [LoopNotebookToolbar, LoopOpeningNotebook],
42
+ contributes: [
43
+ // The editor: one entry in the shell's segmented control, one view in
44
+ // the editor column.
45
+ contribution(LoopEditorView, {
46
+ surfaceId: 'notebook',
47
+ title: 'Notebook',
48
+ icon: RowsIcon,
49
+ order: 10,
50
+ canOpen: workspace => workspace.sandbox.state === 'running',
51
+ unavailableReason: () => 'Needs a running sandbox',
52
+ load: () => import('./NotebookView'),
53
+ }, { id: 'notebook', order: 10 }),
54
+ contribution(LoopCommand, {
55
+ name: 'notebook',
56
+ description: 'Open the notebook beside the chat',
57
+ group: 'Open',
58
+ keybinding: 'Mod+Alt+N',
59
+ run: async ({ workspace }) => {
60
+ // The chat first, because the surface lives beside it; then the
61
+ // surface itself. Switching the view alone leaves whichever surface
62
+ // was already open, so on the chat view — where a reader usually is
63
+ // — this used to do nothing at all.
64
+ workspace.setActiveViewType('chat');
65
+ if (!requestSurface('notebook')) {
66
+ throw new Error('No chat is on screen to open the notebook beside.');
67
+ }
68
+ },
69
+ }, { id: 'notebook' }),
70
+ ],
71
+ build: ctx => {
72
+ /*
73
+ * The tools — what lets the agent create, edit and run cells —
74
+ * contributed when their module arrives. `notebookHooks` imports
75
+ * `@datalayer/jupyter-react` at module load, which is most of Jupyter's
76
+ * frontend; a static contribution would put that whole graph in front
77
+ * of the shell's first paint. The reactor takes contributions at any
78
+ * time and bumps its revision, so the chat re-reads its tools point
79
+ * the moment these land — the same arrangement as the document's
80
+ * lexical tools.
81
+ */
82
+ void import('../../../tools/adapters/agent-runtimes/notebookHooks').then(({ createNotebookTools }) => {
83
+ ctx.contribute(LoopFrontendTool, {
84
+ id: 'notebook-tools',
85
+ tools: workspace => createNotebookTools(workspace.surfaceId),
86
+ }, { id: 'notebook-tools' });
87
+ });
88
+ return {};
89
+ },
90
+ });
91
+ export default NotebookPlugin;