@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,217 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState, useSyncExternalStore } from 'react';
3
+ import { Box, Text } from '@primer/react';
4
+ import { getEditorChoice, subscribeEditorChoice } from './editorChoice';
5
+ let jupyterReact = null;
6
+ function loadJupyterReact() {
7
+ return jupyterReact
8
+ ? Promise.resolve(jupyterReact)
9
+ : import('@datalayer/jupyter-react').then(module => {
10
+ jupyterReact = module;
11
+ return module;
12
+ });
13
+ }
14
+ const PREVIEW_LENGTH = 56;
15
+ function stripped(source) {
16
+ const line = source.split('\n').find(entry => entry.trim()) ?? '';
17
+ const trimmed = line.trim();
18
+ return trimmed.length > PREVIEW_LENGTH
19
+ ? `${trimmed.slice(0, PREVIEW_LENGTH - 1)}…`
20
+ : trimmed || '(empty)';
21
+ }
22
+ /** The card's body: one row per cell or block. */
23
+ function PreviewList({ title, rows, }) {
24
+ return (_jsxs(Box, { children: [_jsx(Text, { sx: { fontWeight: 'semibold', display: 'block', mb: 1 }, children: title }), rows.length === 0 ? (_jsx(Text, { sx: { color: 'fg.muted' }, children: "Empty so far." })) : (rows.map((row, index) => (_jsxs(Box, { sx: { display: 'flex', gap: 2, py: '2px', alignItems: 'baseline' }, children: [_jsxs(Text, { sx: { color: 'fg.muted', flexShrink: 0, fontFamily: 'mono' }, children: [index, " \u00B7 ", row.kind] }), _jsx(Text, { sx: {
25
+ fontFamily: 'mono',
26
+ whiteSpace: 'nowrap',
27
+ overflow: 'hidden',
28
+ textOverflow: 'ellipsis',
29
+ }, children: row.text })] }, index))))] }));
30
+ }
31
+ /** The editors currently on offer, from the choice store — reactive. */
32
+ function useOfferedEditors() {
33
+ return useSyncExternalStore(subscribeEditorChoice, () => getEditorChoice().options);
34
+ }
35
+ /** The live notebook rows for a surface id, followed through model signals. */
36
+ function useNotebookRows(surfaceId, enabled) {
37
+ const [tick, setTick] = useState(0);
38
+ useEffect(() => {
39
+ if (!enabled) {
40
+ return undefined;
41
+ }
42
+ let cancelled = false;
43
+ const bump = () => setTick(value => value + 1);
44
+ const cleanups = [];
45
+ // Whether the module was already here when this run began: only its
46
+ // first arrival is news worth a re-render. Bumping on every resolution
47
+ // would re-run this tick-dependent effect forever.
48
+ const hadModule = jupyterReact !== null;
49
+ // The module first (cached after the first mount), then the store says
50
+ // when the notebook arrives and the model says when it changes. All
51
+ // guarded: the test environment mocks the store away.
52
+ void loadJupyterReact().then(({ notebookStore }) => {
53
+ if (cancelled) {
54
+ return;
55
+ }
56
+ try {
57
+ const unsubscribe = notebookStore.subscribe?.(bump);
58
+ if (unsubscribe) {
59
+ cleanups.push(unsubscribe);
60
+ }
61
+ const model = notebookStore
62
+ .getState()
63
+ ?.notebooks?.get(surfaceId)?.model;
64
+ if (model) {
65
+ const signals = [
66
+ model
67
+ .contentChanged,
68
+ model.cells?.changed,
69
+ ];
70
+ for (const signal of signals) {
71
+ if (signal?.connect) {
72
+ signal.connect(bump);
73
+ cleanups.push(() => signal.disconnect(bump));
74
+ }
75
+ }
76
+ }
77
+ // The first arrival is itself news: the memo below could not read
78
+ // the store before the module existed.
79
+ if (!hadModule) {
80
+ bump();
81
+ }
82
+ }
83
+ catch {
84
+ // No live store here (tests, SSR): the selector shows no badge.
85
+ }
86
+ });
87
+ return () => {
88
+ cancelled = true;
89
+ for (const cleanup of cleanups) {
90
+ try {
91
+ cleanup();
92
+ }
93
+ catch {
94
+ /* a disposed model refuses disconnects; nothing to do */
95
+ }
96
+ }
97
+ };
98
+ // Reconnected on every bump: a bump may have brought the model with it,
99
+ // and re-attaching two listeners is cheaper than being clever about it.
100
+ }, [enabled, surfaceId, tick]);
101
+ return useMemo(() => {
102
+ if (!enabled) {
103
+ return null;
104
+ }
105
+ const model = safeModel(surfaceId);
106
+ if (!model) {
107
+ return null;
108
+ }
109
+ const rows = [];
110
+ const cells = model.cells;
111
+ for (let index = 0; index < cells.length; index += 1) {
112
+ const cell = cells.get(index);
113
+ rows.push({
114
+ kind: cell.type,
115
+ text: stripped(cell.sharedModel.getSource()),
116
+ });
117
+ }
118
+ return rows;
119
+ // eslint-disable-next-line react-hooks/exhaustive-deps
120
+ }, [enabled, surfaceId, tick]);
121
+ }
122
+ function safeModel(surfaceId) {
123
+ try {
124
+ return (jupyterReact?.notebookStore.getState()?.notebooks?.get(surfaceId)
125
+ ?.model ?? null);
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ /** The document's brief blocks, refreshed when the lexical store changes. */
132
+ function useDocumentRows(surfaceId, enabled) {
133
+ const [rows, setRows] = useState(null);
134
+ useEffect(() => {
135
+ if (!enabled) {
136
+ setRows(null);
137
+ return undefined;
138
+ }
139
+ let cancelled = false;
140
+ let unsubscribe;
141
+ let pending = false;
142
+ // Lazily, and only because a document is actually on offer: this hook
143
+ // must not be the import that pulls lexical into every bundle. The
144
+ // Prism setup loads first, in the same chain — jupyter-lexical pulls
145
+ // `@lexical/code`, whose language components read the bare global
146
+ // `Prism` the instant they evaluate, and whichever dynamic import wins
147
+ // the race decides whether the global exists yet.
148
+ void import('@datalayer/jupyter-react/lib/css/PrismCss')
149
+ .then(() => import('@datalayer/jupyter-lexical'))
150
+ .then(({ lexicalStore }) => {
151
+ if (cancelled) {
152
+ return;
153
+ }
154
+ const refresh = () => {
155
+ if (pending) {
156
+ return;
157
+ }
158
+ pending = true;
159
+ void lexicalStore
160
+ .getState()
161
+ .readAllBlocks(surfaceId, 'brief')
162
+ .then(blocks => {
163
+ pending = false;
164
+ if (cancelled || !Array.isArray(blocks)) {
165
+ return;
166
+ }
167
+ setRows(blocks.map(block => ({
168
+ kind: block.block_type ?? 'block',
169
+ text: stripped(block.preview ?? ''),
170
+ })));
171
+ })
172
+ .catch(() => {
173
+ pending = false;
174
+ // No adapter yet: the document has not mounted. No badge, no lie.
175
+ if (!cancelled) {
176
+ setRows(null);
177
+ }
178
+ });
179
+ };
180
+ refresh();
181
+ unsubscribe = lexicalStore.subscribe(refresh);
182
+ });
183
+ return () => {
184
+ cancelled = true;
185
+ unsubscribe?.();
186
+ };
187
+ }, [enabled, surfaceId]);
188
+ return rows;
189
+ }
190
+ /**
191
+ * Live previews for the editor selector, keyed by surface id.
192
+ *
193
+ * Only the editors actually on offer are read — the store subscriptions and
194
+ * the lexical import cost nothing in a workspace without them.
195
+ */
196
+ export function useEditorPreviews(surfaceId) {
197
+ const offered = useOfferedEditors();
198
+ const notebookRows = useNotebookRows(surfaceId, offered.includes('notebook'));
199
+ const documentRows = useDocumentRows(surfaceId, offered.includes('document'));
200
+ return useMemo(() => {
201
+ const previews = {};
202
+ if (notebookRows) {
203
+ previews.notebook = {
204
+ badge: String(notebookRows.length),
205
+ details: _jsx(PreviewList, { title: "Cells", rows: notebookRows }),
206
+ };
207
+ }
208
+ if (documentRows) {
209
+ previews.document = {
210
+ badge: String(documentRows.length),
211
+ details: _jsx(PreviewList, { title: "Blocks", rows: documentRows }),
212
+ };
213
+ }
214
+ return previews;
215
+ }, [notebookRows, documentRows]);
216
+ }
217
+ export default useEditorPreviews;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The pulse: a delegated agent's icon, fading in and out in the prompt's
3
+ * header band for as long as that agent is working.
4
+ *
5
+ * Read from the agent runtime store, which both the server's monitoring
6
+ * stream and the in-page loop fill with the same events — so the pulse does
7
+ * not care where the delegation runs. The icon is the member's own when the
8
+ * name is a team member's, and the generic agent mark otherwise; the tooltip
9
+ * says who it is.
10
+ *
11
+ * @module loop/plugins/subagent-activity/SubagentPulse
12
+ */
13
+ import type { JSX } from 'react';
14
+ export declare const PULSE_ANIMATION = "loop-subagent-pulse";
15
+ export declare function SubagentPulse(): JSX.Element | null;
16
+ export default SubagentPulse;
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Tooltip } from '@primer/react';
3
+ import { Box } from '@datalayer/primer-addons';
4
+ import { useOptionalReactorPlatform } from '@datalayer/reactor/react';
5
+ import { useAgentRuntimeActiveSubagentToolCallId, useAgentRuntimeSubagentActivity, } from '../../../stores';
6
+ import { agentIcon } from '../agents/agentIcons';
7
+ import { AGENTS_PLUGIN_NAME } from '../agents/plugin';
8
+ export const PULSE_ANIMATION = 'loop-subagent-pulse';
9
+ const KEYFRAMES = `@keyframes ${PULSE_ANIMATION} {
10
+ 0%, 100% { opacity: 0.25; }
11
+ 50% { opacity: 1; }
12
+ }`;
13
+ export function SubagentPulse() {
14
+ const activeKey = useAgentRuntimeActiveSubagentToolCallId();
15
+ const events = useAgentRuntimeSubagentActivity(activeKey ?? undefined);
16
+ // Optional: the pulse may be drawn where no reactor runs, and then it
17
+ // simply has no team to look the icon up in.
18
+ const reactor = useOptionalReactorPlatform();
19
+ const name = events[0]?.subagentName ?? activeKey ?? '';
20
+ const member = reactor
21
+ ?.getOutput(AGENTS_PLUGIN_NAME)
22
+ ?.team?.members.find(entry => entry.name === name);
23
+ const Icon = agentIcon(member?.icon);
24
+ if (!activeKey) {
25
+ return null;
26
+ }
27
+ const overA2A = events.some(event => event.transport === 'a2a');
28
+ const label = overA2A
29
+ ? `${name} is working over A2A…`
30
+ : `${name} is working…`;
31
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: KEYFRAMES }), _jsx(Tooltip, { text: label, direction: "n", children: _jsx(Box, { as: "button", type: "button", "aria-label": label, "data-subagent-pulse": name, sx: {
32
+ display: 'inline-flex',
33
+ alignItems: 'center',
34
+ justifyContent: 'center',
35
+ width: 28,
36
+ height: 28,
37
+ p: 0,
38
+ border: 0,
39
+ bg: 'transparent',
40
+ color: 'accent.fg',
41
+ cursor: 'default',
42
+ animation: `${PULSE_ANIMATION} 1.4s ease-in-out infinite`,
43
+ }, children: _jsx(Icon, { size: 16 }) }) })] }));
44
+ }
45
+ export default SubagentPulse;
@@ -0,0 +1,12 @@
1
+ import { SubagentPulse } from './SubagentPulse';
2
+ export declare const SUBAGENT_ACTIVITY_PLUGIN_NAME = "@datalayer/loop-plugin-subagent-activity";
3
+ export declare const SubagentActivityPlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, {
4
+ components: {
5
+ id: string;
6
+ slot: "loop.inpromptMenu";
7
+ order: number;
8
+ Component: typeof SubagentPulse;
9
+ }[];
10
+ }>;
11
+ export { SubagentPulse } from './SubagentPulse';
12
+ export default SubagentActivityPlugin;
@@ -0,0 +1,42 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * `@datalayer/loop-plugin-subagent-activity` — a delegation, visible.
7
+ *
8
+ * While an agent has handed work to a subagent, that subagent's icon pulses
9
+ * in the composer's own header — the band inside the prompt box, above the
10
+ * text — where a person is looking while they wait. Without it a delegation
11
+ * was a pause: the parent went quiet, and whether anything was happening
12
+ * showed only in a side panel a host may not draw.
13
+ *
14
+ * @module loop/plugins/subagent-activity
15
+ */
16
+ import { definePlugin } from '@datalayer/reactor';
17
+ import { LoopSlots } from '../../core';
18
+ import { InputPromptPlugin } from '../input-prompt';
19
+ import { SubagentPulse } from './SubagentPulse';
20
+ export const SUBAGENT_ACTIVITY_PLUGIN_NAME = '@datalayer/loop-plugin-subagent-activity';
21
+ export const SubagentActivityPlugin = definePlugin({
22
+ name: SUBAGENT_ACTIVITY_PLUGIN_NAME,
23
+ displayName: 'Subagent activity',
24
+ description: "A delegated agent's icon, pulsing in the prompt's header while it works.",
25
+ octicon: 'people',
26
+ emoji: '\u{1F465}',
27
+ // The band it pulses in is the composer's: no composer, nowhere to be.
28
+ dependencies: [InputPromptPlugin],
29
+ build: () => ({
30
+ components: [
31
+ {
32
+ id: 'subagent-pulse',
33
+ slot: LoopSlots.inpromptMenu,
34
+ // In the prompt's header band, beside the agent chip.
35
+ order: 0,
36
+ Component: SubagentPulse,
37
+ },
38
+ ],
39
+ }),
40
+ });
41
+ export { SubagentPulse } from './SubagentPulse';
42
+ export default SubagentActivityPlugin;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The mould the view plugins are cast from.
3
+ *
4
+ * A view plugin — chat, notebook, document — puts one icon in the composer's
5
+ * footer that switches the workspace to its view. The icon lives *in the
6
+ * prompt* because that is where the writing hand already is: changing what
7
+ * stands beside the conversation should not mean leaving it. Each plugin
8
+ * therefore **requires** the input-prompt plugin — an icon with no footer to
9
+ * sit in is a control that does not exist — and the reactor mounts the
10
+ * composer with it and takes both down together.
11
+ *
12
+ * The icon knows its own standing: the active view's icon shows in the
13
+ * accent colour, and an editor's icon withdraws entirely while its editor is
14
+ * not on offer (no notebook plugin, no notebook button). The chat's icon is
15
+ * always there — the conversation is the view that remains.
16
+ *
17
+ * @module loop/plugins/view-switch
18
+ */
19
+ import type { ComponentType, JSX } from 'react';
20
+ export type ViewPluginOptions = {
21
+ /** Short slug: `chat`, `notebook`, … names the plugin `…-<key>-view`. */
22
+ key: string;
23
+ /** The editor surface the icon switches to; `NONE_EDITOR` for the chat. */
24
+ viewId: string;
25
+ displayName: string;
26
+ description: string;
27
+ /** The footer icon, with its tooltip text. */
28
+ icon: ComponentType<{
29
+ size?: number;
30
+ }>;
31
+ tooltip: string;
32
+ /** Registry icon name. */
33
+ octicon?: string;
34
+ emoji?: string;
35
+ /** Where the icon stands among its siblings in the footer. */
36
+ order: number;
37
+ };
38
+ export declare function defineViewPlugin(options: ViewPluginOptions): import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, {
39
+ components: {
40
+ id: string;
41
+ slot: "loop.promptAction";
42
+ order: number;
43
+ Component: () => JSX.Element | null;
44
+ }[];
45
+ }>;
46
+ export default defineViewPlugin;
@@ -0,0 +1,68 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useSyncExternalStore } from 'react';
3
+ import { IconButton } from '@primer/react';
4
+ import { definePlugin } from '@datalayer/reactor';
5
+ import { useContributions } from '@datalayer/reactor/react';
6
+ import { LoopEditorView, LoopSlots } from '../../core';
7
+ import { NONE_EDITOR, chooseEditor, getEditorChoice, subscribeEditorChoice, } from '../shell/editorChoice';
8
+ import { InputPromptPlugin } from '../input-prompt';
9
+ /** One footer icon: switches to its view, shows when the view is real. */
10
+ function makeViewSwitchAction({ viewId, icon, tooltip, }) {
11
+ return function ViewSwitchAction() {
12
+ /*
13
+ * Field by field, never the wrapper: `getEditorChoice()` builds a fresh
14
+ * object per call, and `useSyncExternalStore` re-renders whenever the
15
+ * snapshot's identity changes — a fresh object every check is an
16
+ * infinite loop. The id is a string and the options array keeps its
17
+ * reference between changes, so these two are stable snapshots.
18
+ */
19
+ const editorId = useSyncExternalStore(subscribeEditorChoice, () => getEditorChoice().editorId);
20
+ /*
21
+ * From the contributions, not the choice store's `options`: the store's
22
+ * list is published by the header selector's render, and a workspace
23
+ * that mounts no selector would leave it empty with every editor
24
+ * standing. The point is the source of truth about what exists.
25
+ */
26
+ const editors = useContributions(LoopEditorView);
27
+ // An editor's icon withdraws while its editor is not contributed: a
28
+ // button that switches to nothing is the trap the fail-loud rules exist
29
+ // to prevent. The chat has no such condition to fail.
30
+ if (viewId !== NONE_EDITOR &&
31
+ !editors.some(entry => entry.value.surfaceId === viewId)) {
32
+ return null;
33
+ }
34
+ const selected = (editorId || NONE_EDITOR) === viewId;
35
+ return (_jsx(IconButton, { icon: icon, "aria-label": tooltip, size: "small", variant: "invisible", onClick: () => {
36
+ if (!chooseEditor(viewId)) {
37
+ console.warn(`[loop] No chat is on screen to switch to '${viewId}'.`);
38
+ }
39
+ }, sx: selected ? { color: 'accent.fg' } : undefined }));
40
+ };
41
+ }
42
+ export function defineViewPlugin(options) {
43
+ const { key, viewId, displayName, description, icon, tooltip, order } = options;
44
+ const Component = makeViewSwitchAction({ viewId, icon, tooltip });
45
+ return definePlugin({
46
+ name: `@datalayer/loop-plugin-${key}-view`,
47
+ displayName,
48
+ description,
49
+ octicon: options.octicon ?? 'eye',
50
+ emoji: options.emoji,
51
+ // The footer the icon sits in is the input-prompt plugin's: a view
52
+ // plugin without it would be a control with nowhere to exist, so this is
53
+ // a hard dependency — the composer mounts with it, and disabling the
54
+ // composer takes the view icons down too.
55
+ dependencies: [InputPromptPlugin],
56
+ build: () => ({
57
+ components: [
58
+ {
59
+ id: `${key}-view-action`,
60
+ slot: LoopSlots.promptAction,
61
+ order,
62
+ Component,
63
+ },
64
+ ],
65
+ }),
66
+ });
67
+ }
68
+ export default defineViewPlugin;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * A window around the workspace.
3
+ *
4
+ * Chrome that says "this is an application" without imitating a particular
5
+ * one: a rounded, shadowed card with a title bar carrying window controls on
6
+ * the leading edge, a name, and whatever the host offers on the trailing edge.
7
+ *
8
+ * It exists so that a page embedding Loop does not have to draw one. The
9
+ * landing page had this markup, which is the wrong side of the boundary for it
10
+ * to live on — a change to how Loop presents itself would have had to be made
11
+ * in a repository that only renders it.
12
+ *
13
+ * Both edges are reactor slots, so what goes in them is contributed rather
14
+ * than passed down: a plugin adds a control without the frame knowing what it
15
+ * is, and without the host that mounted the frame having to forward it.
16
+ *
17
+ * @module loop/plugins/window-frame/WindowFrame
18
+ */
19
+ import type { ReactNode } from 'react';
20
+ export type WindowFrameProps = {
21
+ /** What the window contains — the workspace, normally. */
22
+ children: ReactNode;
23
+ /**
24
+ * What the window is called, shown in the title bar.
25
+ *
26
+ * Optional: a host that names the workspace on the line above it has no use
27
+ * for a second label, but a window bar is where a window's name goes, so the
28
+ * space stays for one that does.
29
+ */
30
+ title?: ReactNode;
31
+ /**
32
+ * How tall the body stands. Any CSS length.
33
+ *
34
+ * The host's call rather than the frame's: how much of the page Loop should
35
+ * take is a question about the page.
36
+ *
37
+ * Omitted, the frame fills whatever it was given and the body takes what the
38
+ * title bar leaves. That is the right answer for a full-page host, and it
39
+ * avoids the alternative — subtracting the bar's height in a `calc` on the
40
+ * host's side, which is a number that silently goes wrong the first time the
41
+ * bar gains a row.
42
+ */
43
+ height?: string | number;
44
+ /** Anything the slots' components should receive. */
45
+ slotProps?: Record<string, unknown>;
46
+ };
47
+ export declare function WindowFrame({ children, title, height, slotProps, }: WindowFrameProps): React.JSX.Element;
48
+ export default WindowFrame;
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box } from '@datalayer/primer-addons';
3
+ import { ReactorSlot, useOptionalSlotComponents, } from '@datalayer/reactor/react';
4
+ import { WINDOW_ACTIONS_SLOT, WINDOW_CONTROLS_SLOT } from './slots';
5
+ export function WindowFrame({ children, title, height, slotProps = {}, }) {
6
+ /*
7
+ * Asked rather than assumed, so the trailing group is not an empty flex box
8
+ * taking a gap's worth of space in a bar that is mostly title.
9
+ *
10
+ * The tolerant read, because the frame is *outside* the workspace it frames:
11
+ * a host composes `<WindowFrame>` around whatever builds the reactor, so on
12
+ * the first render there is no platform at all. The bar draws without its
13
+ * actions and fills them in when the workspace registers one.
14
+ */
15
+ const actions = useOptionalSlotComponents(WINDOW_ACTIONS_SLOT);
16
+ return (_jsxs(Box, { sx: {
17
+ position: 'relative',
18
+ // Filling is the default: with no height given the frame takes the
19
+ // space it was handed and the body gets the remainder.
20
+ ...(height === undefined
21
+ ? { height: '100%', display: 'flex', flexDirection: 'column' }
22
+ : null),
23
+ borderRadius: '14px',
24
+ overflow: 'hidden',
25
+ border: '1px solid',
26
+ borderColor: 'border.default',
27
+ bg: 'canvas.default',
28
+ // Lifted off the field, so the workspace reads as a thing sitting on
29
+ // the page rather than a hole cut into it.
30
+ boxShadow: '0 24px 60px -28px rgba(0, 0, 0, 0.55)',
31
+ }, children: [_jsxs(Box, { sx: {
32
+ display: 'flex',
33
+ alignItems: 'center',
34
+ gap: 2,
35
+ px: 3,
36
+ py: 2,
37
+ borderBottom: '1px solid',
38
+ borderColor: 'border.default',
39
+ bg: 'canvas.subtle',
40
+ // The bar may be the page's first line of type as well as its
41
+ // chrome, so it takes a second row on a narrow screen rather than
42
+ // shedding its actions off the edge.
43
+ flexWrap: 'wrap',
44
+ rowGap: 2,
45
+ // Never squeezed by the body beside it.
46
+ flex: '0 0 auto',
47
+ }, children: [_jsx(Box, { sx: {
48
+ display: 'flex',
49
+ alignItems: 'center',
50
+ gap: '6px',
51
+ mr: 1,
52
+ flexShrink: 0,
53
+ }, children: _jsx(ReactorSlot, { slot: WINDOW_CONTROLS_SLOT, props: slotProps }) }), _jsx(Box, { sx: { minWidth: 0, flex: '1 1 auto' }, children: title }), actions.length > 0 ? (_jsx(Box, { sx: {
54
+ display: 'flex',
55
+ alignItems: 'center',
56
+ gap: 2,
57
+ flexShrink: 0,
58
+ ml: 'auto',
59
+ }, children: _jsx(ReactorSlot, { slot: WINDOW_ACTIONS_SLOT, props: slotProps }) })) : null] }), _jsx(Box, { sx: height === undefined
60
+ ? { flex: '1 1 auto', minHeight: 0 }
61
+ : { height, minHeight: 0 }, children: children })] }));
62
+ }
63
+ export default WindowFrame;
@@ -0,0 +1,6 @@
1
+ import type { ReactorReactOutput } from '@datalayer/reactor/react';
2
+ export { WindowFrame, type WindowFrameProps } from './WindowFrame';
3
+ export { WINDOW_ACTIONS_SLOT, WINDOW_CONTROLS_SLOT } from './slots';
4
+ export declare const WINDOW_FRAME_PLUGIN_NAME = "@datalayer/loop-plugin-window-frame";
5
+ export declare const WindowFramePlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, ReactorReactOutput>;
6
+ export default WindowFramePlugin;
@@ -0,0 +1,79 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright (c) 2025-2026 Datalayer, Inc.
4
+ * Distributed under the terms of the Modified BSD License.
5
+ */
6
+ /**
7
+ * `@datalayer/loop-plugin-window-frame` — Loop in a window.
8
+ *
9
+ * The frame a page puts around an embedded Loop, and the two slots that make
10
+ * its title bar extensible. The plugin itself contributes only the window
11
+ * controls; everything else in the bar is somebody's contribution.
12
+ *
13
+ * Why a plugin and not just a component: the point of the frame is the slots,
14
+ * and a slot is only useful if something can be contributed to it without the
15
+ * host forwarding it. A page adds a button by mounting a plugin, exactly as it
16
+ * would add anything else to the workspace — and a plugin that ships a control
17
+ * takes the control with it when it is switched off.
18
+ *
19
+ * The frame is composed rather than injected: a plugin cannot wrap the shell,
20
+ * so the host renders `<WindowFrame>` around whatever it is framing. That is
21
+ * the one thing the host still does, and it is the one thing only the host
22
+ * knows — how much of its page to give away.
23
+ *
24
+ * ```tsx
25
+ * const reactor = buildLoopReactor([...loopPlugins(), WindowFramePlugin]);
26
+ *
27
+ * <WindowFrame title="Loop" height="60vh">
28
+ * <LoopWorkspace reactor={reactor} … />
29
+ * </WindowFrame>
30
+ * ```
31
+ *
32
+ * @module loop/plugins/window-frame
33
+ */
34
+ import { definePlugin } from '@datalayer/reactor';
35
+ import { Box } from '@datalayer/primer-addons';
36
+ import { LoopSlots } from '../../core';
37
+ import { WorkspaceFullScreenAction } from '../../shell/WorkspaceFullScreenAction';
38
+ import { WINDOW_CONTROLS_SLOT } from './slots';
39
+ export { WindowFrame } from './WindowFrame';
40
+ export { WINDOW_ACTIONS_SLOT, WINDOW_CONTROLS_SLOT } from './slots';
41
+ export const WINDOW_FRAME_PLUGIN_NAME = '@datalayer/loop-plugin-window-frame';
42
+ /**
43
+ * The three dots.
44
+ *
45
+ * They say "this is an application" without imitating a particular one, which
46
+ * is why they are dots and not a close button that closes nothing. Contributed
47
+ * rather than drawn into the frame so a host with its own idea of window
48
+ * controls can switch this plugin off and fill the slot itself.
49
+ */
50
+ function WindowControls() {
51
+ return (_jsx(_Fragment, { children: ['danger.emphasis', 'attention.emphasis', 'success.emphasis'].map(token => (_jsx(Box, { sx: { width: 10, height: 10, borderRadius: '50%', bg: token } }, token))) }));
52
+ }
53
+ export const WindowFramePlugin = definePlugin({
54
+ name: WINDOW_FRAME_PLUGIN_NAME,
55
+ displayName: 'Window frame',
56
+ description: 'Draws Loop as a window, and opens its title bar to controls and actions.',
57
+ octicon: 'browser',
58
+ emoji: '\u{1FA9F}',
59
+ build: () => ({
60
+ components: [
61
+ {
62
+ id: 'window-controls',
63
+ slot: WINDOW_CONTROLS_SLOT,
64
+ Component: WindowControls,
65
+ },
66
+ // Full screen is window chrome, so the window plugin is where it comes
67
+ // from: the workspace header gains the same control the chat header
68
+ // carries, which is what keeps it reachable for a shell that hides the
69
+ // chat's chrome. Registered after the editor selector, so it sits on
70
+ // the far trailing edge of the row.
71
+ {
72
+ id: 'full-screen',
73
+ slot: LoopSlots.header,
74
+ Component: WorkspaceFullScreenAction,
75
+ },
76
+ ],
77
+ }),
78
+ });
79
+ export default WindowFramePlugin;