@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
@@ -14,14 +14,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  * - Shows a monitoring panel alongside the chat with key operational signals
15
15
  */
16
16
  /// <reference types="vite/client" />
17
- import { useEffect, useState, useCallback, useRef } from 'react';
17
+ import { useEffect, useState, useCallback, useRef, useMemo, } from 'react';
18
18
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
19
- import { Text, Spinner, Heading, Label } from '@primer/react';
19
+ import { Text, Heading, Label } from '@primer/react';
20
20
  import { GraphIcon } from '@primer/octicons-react';
21
21
  import { Box } from '@datalayer/primer-addons';
22
22
  import { AuthRequiredView, ErrorView } from './components';
23
23
  import { ThemedProvider } from './utils/themedProvider';
24
24
  import { uniqueAgentId } from './utils/agentId';
25
+ import { waitForAgent } from './utils/waitForAgent';
25
26
  import { ContextPanel, } from '../context/ContextPanel';
26
27
  import { CostTracker } from '../context/CostTracker';
27
28
  import { CostUsageChart } from '../context/CostUsageChart';
@@ -34,9 +35,10 @@ import { useCoreStore } from '../state/substates';
34
35
  import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
35
36
  const queryClient = new QueryClient();
36
37
  import { useSimpleAuthStore } from '@datalayer/core/lib/views/otel';
37
- import { Chat } from '../chat';
38
+ import { LoopEmbed } from '../loop';
39
+ import { AgentMonitoringPlugin } from '../loop/plugins/agent-monitoring';
40
+ import { createChatExtrasPlugin } from '../loop/plugins/chat-extras';
38
41
  const AGENT_NAME = 'monitoring-example-agent';
39
- const AGENTSPEC_ID = 'example-monitoring';
40
42
  const OTEL_BASE_URL_ENV = import.meta.env.VITE_OTEL_BASE_URL;
41
43
  // Consume-side OTEL override (DATALAYER_OTEL_IN_URL). When set, telemetry is
42
44
  // read from here instead of VITE_OTEL_BASE_URL (e.g. prod during local dev).
@@ -52,26 +54,34 @@ const AgentMonitoringInner = ({ onLogout, }) => {
52
54
  const [agentId, setAgentId] = useState(agentName);
53
55
  const [isReconnectedAgent, setIsReconnectedAgent] = useState(false);
54
56
  const [alerts, setAlerts] = useState([]);
57
+ void alerts;
55
58
  const [liveContext, setLiveContext] = useState(undefined);
56
59
  const [liveContextSnapshot, setLiveContextSnapshot] = useState(undefined);
57
60
  const [liveCost, setLiveCost] = useState(undefined);
58
61
  const [liveMcpStatus, setLiveMcpStatus] = useState(undefined);
62
+ // The chat column is the shared loop; the live MCP status the footer shows
63
+ // reaches it through the chat-extras channel.
64
+ const { plugin: extrasPlugin, setExtras } = useMemo(() => createChatExtrasPlugin(), []);
65
+ const chatPlugins = useMemo(() => [AgentMonitoringPlugin, extrasPlugin], [extrasPlugin]);
66
+ useEffect(() => {
67
+ setExtras({ mcpStatusData: liveMcpStatus ?? null });
68
+ }, [liveMcpStatus, setExtras]);
59
69
  const [monitorLastSnapshotAt, setMonitorLastSnapshotAt] = useState(null);
60
70
  const [liveGraphTelemetry, setLiveGraphTelemetry] = useState(undefined);
61
71
  const agentBaseUrl = useExampleAgentRuntimesUrl();
62
- const otelBaseUrl = configuration?.otelInUrl ||
63
- OTEL_IN_BASE_URL_ENV ||
72
+ const otelBaseUrl = OTEL_IN_BASE_URL_ENV ||
64
73
  configuration?.otelUrl ||
65
74
  configuration?.otelUrl ||
66
75
  OTEL_BASE_URL_ENV ||
67
76
  OTEL_URL_ENV ||
68
77
  agentBaseUrl;
69
- const podName = agentId;
78
+ const runtimeName = agentId;
70
79
  // The OTEL service_name resource attribute is 'agent-runtimes' (the
71
80
  // application name), NOT the individual agent ID. Use the correct value
72
81
  // so the TokenUsageChart WS filter and HTTP query match actual rows.
73
82
  const otelServiceName = 'agent-runtimes';
74
83
  const chatAuthToken = token === null ? undefined : token;
84
+ void chatAuthToken;
75
85
  const authFetch = useCallback((url, opts = {}) => fetch(url, {
76
86
  ...opts,
77
87
  headers: {
@@ -82,56 +92,27 @@ const AgentMonitoringInner = ({ onLogout, }) => {
82
92
  }), [token]);
83
93
  useEffect(() => {
84
94
  let isCancelled = false;
95
+ const controller = new AbortController();
85
96
  const createLocalAgent = async () => {
86
97
  setRuntimeStatus('launching');
87
98
  setIsReady(false);
88
99
  setHookError(null);
89
100
  setIsReconnectedAgent(false);
90
101
  try {
91
- const response = await authFetch(`${agentBaseUrl}/api/v1/agents`, {
92
- method: 'POST',
93
- body: JSON.stringify({
94
- name: agentName,
95
- description: 'MCP monitoring example – web crawling via Tavily with live cost/token metrics',
96
- agent_library: 'pydantic-ai',
97
- transport: 'vercel-ai',
98
- agent_spec_id: AGENTSPEC_ID,
99
- enable_skills: true,
100
- tools: [],
101
- }),
102
+ // The Loop creates the agent from the capacity plugin's blueprint as
103
+ // it mounts; the page only waits until the server has it, so its own
104
+ // sockets and reads address an agent that exists.
105
+ const found = await waitForAgent(agentBaseUrl, agentName, {
106
+ signal: controller.signal,
102
107
  });
103
- let resolvedAgentId = agentName;
104
- let isAlreadyRunning = false;
105
- if (response.ok) {
106
- const data = await response.json();
107
- resolvedAgentId = data?.id || agentName;
108
- }
109
- else {
110
- const contentType = response.headers.get('content-type') || '';
111
- let detail = '';
112
- if (contentType.includes('application/json')) {
113
- const data = await response.json().catch(() => null);
114
- detail =
115
- (typeof data?.detail === 'string' && data.detail) ||
116
- (typeof data?.message === 'string' && data.message) ||
117
- '';
118
- }
119
- else {
120
- detail = await response.text();
121
- }
122
- if (response.status === 409 || /already exists/i.test(detail || '')) {
123
- isAlreadyRunning = true;
124
- }
125
- else {
126
- throw new Error(detail || `Failed to create local agent: ${response.status}`);
127
- }
128
- }
129
- if (!isCancelled) {
130
- setAgentId(resolvedAgentId);
131
- setIsReconnectedAgent(isAlreadyRunning);
132
- setIsReady(true);
133
- setRuntimeStatus('ready');
108
+ if (isCancelled)
109
+ return;
110
+ if (!found) {
111
+ throw new Error(`The agent '${agentName}' did not appear on ${agentBaseUrl}.`);
134
112
  }
113
+ setAgentId(agentName);
114
+ setIsReady(true);
115
+ setRuntimeStatus('ready');
135
116
  }
136
117
  catch (error) {
137
118
  if (!isCancelled) {
@@ -143,6 +124,7 @@ const AgentMonitoringInner = ({ onLogout, }) => {
143
124
  void createLocalAgent();
144
125
  return () => {
145
126
  isCancelled = true;
127
+ controller.abort();
146
128
  };
147
129
  }, [agentBaseUrl, agentName, authFetch]);
148
130
  const handleMonitoringStreamMessage = useCallback((message) => {
@@ -277,16 +259,6 @@ const AgentMonitoringInner = ({ onLogout, }) => {
277
259
  // Keep the UI quiet and rely on stream snapshots for now.
278
260
  setAlerts([]);
279
261
  }, [isReady, agentId]);
280
- if (!isReady && runtimeStatus !== 'error') {
281
- return (_jsxs(Box, { sx: {
282
- display: 'flex',
283
- flexDirection: 'column',
284
- alignItems: 'center',
285
- justifyContent: 'center',
286
- height: '100%',
287
- gap: 3,
288
- }, children: [_jsx(Spinner, { size: "large" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Launching local monitoring example agent..." })] }));
289
- }
290
262
  if (runtimeStatus === 'error' || hookError) {
291
263
  return _jsx(ErrorView, { error: hookError, onLogout: onLogout });
292
264
  }
@@ -303,7 +275,7 @@ const AgentMonitoringInner = ({ onLogout, }) => {
303
275
  borderBottom: '1px solid',
304
276
  borderColor: 'border.default',
305
277
  flexShrink: 0,
306
- }, children: [_jsx(GraphIcon, { size: 16 }), _jsxs(Heading, { as: "h3", sx: { fontSize: 2, flex: 1 }, children: ["Monitoring \u2014 ", podName] }), isReconnectedAgent && (_jsx(Label, { variant: "secondary", size: "small", children: "Reconnected" })), _jsxs(Label, { variant: monitorSocket.connectionState === 'connected'
278
+ }, children: [_jsx(GraphIcon, { size: 16 }), _jsxs(Heading, { as: "h3", sx: { fontSize: 2, flex: 1 }, children: ["Monitoring \u2014 ", runtimeName] }), isReconnectedAgent && (_jsx(Label, { variant: "secondary", size: "small", children: "Reconnected" })), _jsxs(Label, { variant: monitorSocket.connectionState === 'connected'
307
279
  ? 'success'
308
280
  : 'secondary', children: ["WS: ", monitorSocket.connectionState] })] }), _jsxs(Box, { sx: { flex: 1, minHeight: 0, display: 'flex' }, children: [_jsxs(Box, { sx: {
309
281
  width: 320,
@@ -337,40 +309,7 @@ const AgentMonitoringInner = ({ onLogout, }) => {
337
309
  fontSize: 0,
338
310
  mt: 1,
339
311
  display: 'block',
340
- }, children: ["Last close: ", monitorSocket.lastClose.detail] }))] }))] })] }), _jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: _jsx(Chat, { protocol: "vercel-ai", baseUrl: agentBaseUrl, agentId: agentId, authToken: chatAuthToken, title: "Monitoring Agent", brandIcon: _jsx(GraphIcon, { size: 16 }), placeholder: "Ask for cost, token usage, and turn-level monitoring insights...", description: `${alerts.length} active alert${alerts.length !== 1 ? 's' : ''}`, showHeader: true, kernelIndicatorPlacement: "right", showTokenUsage: true, showToolsMenu: true, showSkillsMenu: true, autoFocus: true, height: "100%", runtimeId: agentId, historyEndpoint: `${agentBaseUrl}/api/v1/history`, suggestions: [
341
- {
342
- title: '▶ No-tool turn',
343
- message: 'Briefly introduce yourself without calling any tool or skill — produces a linear Start → Model → Decision → End graph.',
344
- },
345
- {
346
- title: '🔍 Single tool call',
347
- message: 'Use the Tavily web search tool to find the latest news about pydantic-graph. Make a single search call.',
348
- },
349
- {
350
- title: '🌀 Parallel tool fan-out',
351
- message: 'Use Tavily to search the web in parallel for these three topics in the same turn: (1) OpenTelemetry traces, (2) agent observability, (3) LLM cost monitoring. Issue all three searches together so the turn graph fans out (Broadcast → Spread → Join).',
352
- },
353
- {
354
- title: '🧩 Skill call',
355
- message: 'Use the datalayer-whoami skill to identify my profile, then summarize it.',
356
- },
357
- {
358
- title: '😄 Joke skill',
359
- message: 'Use the jokes skill to tell me a random dad joke, then wrap it in one-sentence commentary.',
360
- },
361
- {
362
- title: '🧪 Mixed tools + skills',
363
- message: 'In one turn: (a) use Tavily to search for "OTEL traces best practices", (b) call the datalayer-whoami skill, (c) call the jokes skill. Summarize all three results together. This should produce a Broadcast → three Spread nodes → Join in the Turn Execution Graph.',
364
- },
365
- {
366
- title: 'Monitoring summary',
367
- message: 'Summarize my current token usage, cost status, and recent turn activity.',
368
- },
369
- {
370
- title: 'Turn usage analysis',
371
- message: 'Analyze the last turn usage and explain which parts drove input and output tokens.',
372
- },
373
- ], submitOnSuggestionClick: true, contextSnapshot: liveContextSnapshot, mcpStatusData: liveMcpStatus }) }), _jsxs(Box, { sx: {
312
+ }, children: ["Last close: ", monitorSocket.lastClose.detail] }))] }))] })] }), _jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: _jsx(LoopEmbed, { serverUrl: agentBaseUrl, target: "local", showAgentVariants: true, agentId: agentId, editors: false, showHeader: true, plugins: chatPlugins }) }), _jsxs(Box, { sx: {
374
313
  width: 360,
375
314
  minWidth: 320,
376
315
  borderLeft: '1px solid',
@@ -14,17 +14,19 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  * channels and review recent notifications
15
15
  */
16
16
  /// <reference types="vite/client" />
17
- import { useEffect, useState, useCallback, useRef } from 'react';
17
+ import { useEffect, useState, useCallback, useRef, useMemo, } from 'react';
18
18
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
19
- import { Text, Button, Spinner, Heading, Label, TextInput, Flash, Timeline, } from '@primer/react';
19
+ import { Text, Button, Heading, Label, TextInput, Flash, Timeline, } from '@primer/react';
20
20
  import { AlertIcon, BellIcon, MailIcon, CheckCircleIcon, MuteIcon, } from '@primer/octicons-react';
21
21
  import { Box } from '@datalayer/primer-addons';
22
22
  import { AuthRequiredView, ErrorView } from './components';
23
23
  import { ThemedProvider } from './utils/themedProvider';
24
24
  import { uniqueAgentId } from './utils/agentId';
25
- import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
25
+ import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
26
26
  import { useSimpleAuthStore } from '@datalayer/core/lib/views/otel';
27
- import { Chat } from '../chat';
27
+ import { LoopEmbed } from '../loop';
28
+ import { useAgentRuntimeStore } from '../stores';
29
+ import { AgentNotificationsPlugin } from '../loop/plugins/agent-notifications';
28
30
  const queryClient = new QueryClient();
29
31
  // ─── Constants ─────────────────────────────────────────────────────────────
30
32
  const AGENT_NAME = 'notification-example-agent';
@@ -40,11 +42,18 @@ const alertVariant = (severity) => {
40
42
  const AgentNotificationsInner = ({ onLogout, }) => {
41
43
  const { token } = useSimpleAuthStore();
42
44
  const agentName = useRef(uniqueAgentId(AGENT_NAME)).current;
43
- const agentBaseUrl = useExampleAgentRuntimesUrl();
44
- const [runtimeStatus, setRuntimeStatus] = useState('launching');
45
- const [isReady, setIsReady] = useState(false);
46
- const [hookError, setHookError] = useState(null);
47
- const [agentId, setAgentId] = useState(agentName);
45
+ const { agentId = agentName, baseUrl: agentBaseUrl, status: runtimeStatus, isReady, error: hookError, } = useExampleAgentRuntime({
46
+ exampleId: 'AgentNotificationsExample',
47
+ agentName,
48
+ specId: AGENTSPEC_ID,
49
+ agentConfig: {
50
+ description: 'Agent with multi-channel notification support',
51
+ protocol: 'ag-ui',
52
+ agentSpecId: AGENTSPEC_ID,
53
+ enableSkills: true,
54
+ tools: [],
55
+ },
56
+ });
48
57
  const [notifications, setNotifications] = useState([]);
49
58
  const [channels, setChannels] = useState([
50
59
  { channel: 'in-app', enabled: true },
@@ -54,7 +63,10 @@ const AgentNotificationsInner = ({ onLogout, }) => {
54
63
  const [editTargets, setEditTargets] = useState({});
55
64
  const [isSaving, setIsSaving] = useState(false);
56
65
  const [flash, setFlash] = useState(null);
57
- const podName = isReady ? `local:${agentId}` : '(launching…)';
66
+ const runtimeName = isReady ? `local:${agentId}` : '(launching…)';
67
+ // A new snapshot means a turn ended: the poll above runs again on it.
68
+ const fullContext = useAgentRuntimeStore(state => state.fullContext);
69
+ const plugins = useMemo(() => [AgentNotificationsPlugin], []);
58
70
  // Authenticated fetch helper
59
71
  const authFetch = useCallback((url, opts = {}) => fetch(url, {
60
72
  ...opts,
@@ -64,65 +76,6 @@ const AgentNotificationsInner = ({ onLogout, }) => {
64
76
  ...(opts.headers ?? {}),
65
77
  },
66
78
  }), [token]);
67
- useEffect(() => {
68
- let isCancelled = false;
69
- const createLocalAgent = async () => {
70
- setRuntimeStatus('launching');
71
- setIsReady(false);
72
- setHookError(null);
73
- try {
74
- const response = await authFetch(`${agentBaseUrl}/api/v1/agents`, {
75
- method: 'POST',
76
- body: JSON.stringify({
77
- name: agentName,
78
- description: 'Agent with multi-channel notification support',
79
- agent_library: 'pydantic-ai',
80
- transport: 'vercel-ai',
81
- agent_spec_id: AGENTSPEC_ID,
82
- enable_skills: true,
83
- tools: [],
84
- }),
85
- });
86
- let resolvedAgentId = agentName;
87
- if (response.ok) {
88
- const data = await response.json();
89
- resolvedAgentId = data?.id || agentName;
90
- }
91
- else {
92
- const contentType = response.headers.get('content-type') || '';
93
- let detail = '';
94
- if (contentType.includes('application/json')) {
95
- const data = await response.json().catch(() => null);
96
- detail =
97
- (typeof data?.detail === 'string' && data.detail) ||
98
- (typeof data?.message === 'string' && data.message) ||
99
- '';
100
- }
101
- else {
102
- detail = await response.text();
103
- }
104
- if (!(response.status === 409 || /already exists/i.test(detail))) {
105
- throw new Error(detail || `Failed to create local agent: ${response.status}`);
106
- }
107
- }
108
- if (!isCancelled) {
109
- setAgentId(resolvedAgentId);
110
- setIsReady(true);
111
- setRuntimeStatus('ready');
112
- }
113
- }
114
- catch (error) {
115
- if (!isCancelled) {
116
- setHookError(error instanceof Error ? error.message : 'Agent failed to start');
117
- setRuntimeStatus('error');
118
- }
119
- }
120
- };
121
- void createLocalAgent();
122
- return () => {
123
- isCancelled = true;
124
- };
125
- }, [agentBaseUrl, agentName, authFetch]);
126
79
  // ── Poll notifications ────────────────────────────────────────────────
127
80
  useEffect(() => {
128
81
  if (!isReady || !agentBaseUrl)
@@ -151,9 +104,11 @@ const AgentNotificationsInner = ({ onLogout, }) => {
151
104
  }
152
105
  };
153
106
  poll();
154
- const interval = setInterval(poll, 10_000);
107
+ // Often enough to feel live, and again as soon as a turn ends: the
108
+ // agent's notification should be in the panel by the time it says so.
109
+ const interval = setInterval(poll, 3_000);
155
110
  return () => clearInterval(interval);
156
- }, [isReady, agentBaseUrl, agentId, authFetch]);
111
+ }, [isReady, agentBaseUrl, agentId, authFetch, fullContext]);
157
112
  // ── Toggle / save channel ─────────────────────────────────────────────
158
113
  const handleToggleChannel = useCallback(async (ch) => {
159
114
  if (!agentBaseUrl)
@@ -188,6 +143,20 @@ const AgentNotificationsInner = ({ onLogout, }) => {
188
143
  setIsSaving(false);
189
144
  }
190
145
  }, [agentBaseUrl, agentId, channels, editTargets, authFetch]);
146
+ // ── Mark one read ─────────────────────────────────────────────────────
147
+ const handleMarkRead = useCallback(async (id) => {
148
+ if (!agentBaseUrl)
149
+ return;
150
+ try {
151
+ const res = await authFetch(`${agentBaseUrl}/api/v1/agents/${agentId}/notifications/${id}/read`, { method: 'POST' });
152
+ if (res.ok) {
153
+ setNotifications(prev => prev.map(n => (n.id === id ? { ...n, read: true } : n)));
154
+ }
155
+ }
156
+ catch {
157
+ /* ok */
158
+ }
159
+ }, [agentBaseUrl, agentId, authFetch]);
191
160
  // ── Send test notification ────────────────────────────────────────────
192
161
  const handleTestNotification = useCallback(async () => {
193
162
  if (!agentBaseUrl)
@@ -207,24 +176,18 @@ const AgentNotificationsInner = ({ onLogout, }) => {
207
176
  }
208
177
  }, [agentBaseUrl, agentId, authFetch]);
209
178
  // ── Loading / Error ───────────────────────────────────────────────────
210
- if (!isReady && runtimeStatus !== 'error') {
211
- return (_jsxs(Box, { sx: {
212
- display: 'flex',
213
- flexDirection: 'column',
214
- alignItems: 'center',
215
- justifyContent: 'center',
216
- height: '100%',
217
- gap: 3,
218
- }, children: [_jsx(Spinner, { size: "large" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Launching local notification agent\u2026" })] }));
219
- }
220
179
  if (runtimeStatus === 'error' || hookError) {
221
180
  return _jsx(ErrorView, { error: hookError, onLogout: onLogout });
222
181
  }
223
182
  const unreadCount = notifications.filter(n => !n.read).length;
224
- const recentAlerts = notifications.slice(0, 10).map(n => ({
183
+ // Alerts are the notifications the agent marked as more than information.
184
+ const recentAlerts = notifications
185
+ .filter(n => n.level === 'warning' || n.level === 'critical')
186
+ .slice(0, 10)
187
+ .map(n => ({
225
188
  id: n.id,
226
189
  title: n.title,
227
- severity: n.read ? 'info' : 'warning',
190
+ severity: n.level === 'critical' ? 'critical' : 'warning',
228
191
  timestamp: n.timestamp,
229
192
  }));
230
193
  const channelIcon = (ch) => {
@@ -250,16 +213,7 @@ const AgentNotificationsInner = ({ onLogout, }) => {
250
213
  borderBottom: '1px solid',
251
214
  borderColor: 'border.default',
252
215
  flexShrink: 0,
253
- }, children: [_jsx(BellIcon, { size: 16 }), _jsxs(Heading, { as: "h3", sx: { fontSize: 2, flex: 1 }, children: ["Notifications \u2014 ", podName] }), unreadCount > 0 && (_jsxs(Label, { variant: "accent", size: "small", children: [unreadCount, " unread"] }))] }), _jsxs(Box, { sx: { flex: 1, minHeight: 0, display: 'flex' }, children: [_jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: _jsx(Chat, { protocol: "vercel-ai", baseUrl: agentBaseUrl, agentId: agentId, title: "Notification Agent", brandIcon: _jsx(BellIcon, { size: 16 }), placeholder: "Ask the agent to send you notifications\u2026", description: `${unreadCount} unread notification${unreadCount !== 1 ? 's' : ''}`, showHeader: true, kernelIndicatorPlacement: "right", autoFocus: true, height: "100%", runtimeId: podName, historyEndpoint: `${agentBaseUrl}/api/v1/history`, suggestions: [
254
- {
255
- title: 'Alert me',
256
- message: 'Notify me when KPIs drop below threshold',
257
- },
258
- {
259
- title: 'Daily digest',
260
- message: 'Set up a daily email digest of KPI summaries',
261
- },
262
- ], submitOnSuggestionClick: true }) }), _jsxs(Box, { sx: {
216
+ }, children: [_jsx(BellIcon, { size: 16 }), _jsxs(Heading, { as: "h3", sx: { fontSize: 2, flex: 1 }, children: ["Notifications \u2014 ", runtimeName] }), unreadCount > 0 && (_jsxs(Label, { variant: "accent", size: "small", children: [unreadCount, " unread"] }))] }), _jsxs(Box, { sx: { flex: 1, minHeight: 0, display: 'flex' }, children: [_jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: _jsx(LoopEmbed, { serverUrl: agentBaseUrl, target: "local", showAgentVariants: true, agentId: agentId, editors: false, showHeader: true, plugins: plugins }) }), _jsxs(Box, { sx: {
263
217
  width: 380,
264
218
  borderLeft: '1px solid',
265
219
  borderColor: 'border.default',
@@ -312,10 +266,17 @@ const AgentNotificationsInner = ({ onLogout, }) => {
312
266
  justifyContent: 'space-between',
313
267
  alignItems: 'center',
314
268
  mb: 1,
315
- }, children: [_jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: alert.title }), _jsx(Label, { size: "small", variant: alertVariant(alert.severity), children: alert.severity })] }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: new Date(alert.timestamp).toLocaleString() })] }, alert.id))))] }), _jsxs(Box, { sx: { p: 3, flex: 1, overflow: 'auto' }, children: [_jsx(Heading, { as: "h4", sx: { fontSize: 1, mb: 2 }, children: "Recent Notifications" }), notifications.length === 0 ? (_jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "No notifications yet." })) : (_jsx(Timeline, { children: notifications.slice(0, 25).map(n => (_jsxs(Timeline.Item, { children: [_jsx(Timeline.Badge, { children: n.read ? _jsx(CheckCircleIcon, {}) : _jsx(BellIcon, {}) }), _jsxs(Timeline.Body, { children: [_jsx(Text, { sx: {
269
+ }, children: [_jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: alert.title }), _jsx(Label, { size: "small", variant: alertVariant(alert.severity), children: alert.severity })] }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: new Date(alert.timestamp).toLocaleString() })] }, alert.id))))] }), _jsxs(Box, { sx: { p: 3, flex: 1, overflow: 'auto' }, children: [_jsx(Heading, { as: "h4", sx: { fontSize: 1, mb: 2 }, children: "Recent Notifications" }), notifications.length === 0 ? (_jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: "No notifications yet." })) : (_jsx(Timeline, { children: notifications.slice(0, 25).map(n => (_jsxs(Timeline.Item, { "data-notification": n.id, children: [_jsx(Timeline.Badge, { sx: { cursor: n.read ? 'default' : 'pointer' }, onClick: () => {
270
+ if (!n.read)
271
+ void handleMarkRead(n.id);
272
+ }, title: n.read ? 'Read' : 'Mark as read', children: n.read ? _jsx(CheckCircleIcon, {}) : _jsx(BellIcon, {}) }), _jsxs(Timeline.Body, { children: [_jsx(Text, { sx: {
316
273
  fontSize: 0,
317
274
  fontWeight: n.read ? 'normal' : 'bold',
318
- }, children: n.title }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mt: 1 }, children: n.body }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: [new Date(n.timestamp).toLocaleString(), " via", ' ', _jsx(Label, { size: "small", variant: "secondary", children: n.channel })] })] })] }, n.id))) }))] })] })] })] }));
275
+ }, children: n.title }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mt: 1 }, children: n.body }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: [new Date(n.timestamp).toLocaleString(), " via", ' ', _jsx(Label, { size: "small", variant: "secondary", children: n.channel }), ' ', n.delivery ? (_jsx(Label, { size: "small", variant: n.delivery === 'sent' || n.delivery === 'stored'
276
+ ? 'success'
277
+ : n.delivery === 'failed'
278
+ ? 'danger'
279
+ : 'attention', title: n.detail ?? undefined, children: n.delivery })) : null] })] })] }, n.id))) }))] })] })] })] }));
319
280
  };
320
281
  // ─── Sync token to core IAM store ──────────────────────────────────────────
321
282
  const syncTokenToIamStore = (token) => {
@@ -30,7 +30,9 @@ import { OtelHeader, DashboardView, SqlView, SystemView, useSimpleAuthStore, } f
30
30
  import { useCoreStore } from '@datalayer/core';
31
31
  import { ThemedProvider } from './utils/themedProvider';
32
32
  import { AuthRequiredView } from './components';
33
- import { ChatSidebar } from '../chat';
33
+ import { LoopEmbed } from '../loop';
34
+ import { uniqueAgentId } from './utils/agentId';
35
+ import { AgentOtelPlugin } from '../loop/plugins/agent-otel';
34
36
  import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
35
37
  // ─── Environment / defaults ────────────────────────────────────────────────
36
38
  const OTEL_BASE_URL_ENV = import.meta.env.VITE_OTEL_BASE_URL ?? '';
@@ -39,7 +41,6 @@ const OTEL_BASE_URL_ENV = import.meta.env.VITE_OTEL_BASE_URL ?? '';
39
41
  const OTEL_IN_BASE_URL_ENV = import.meta.env.VITE_OTEL_IN_BASE_URL ?? '';
40
42
  const OTEL_URL_ENV = import.meta.env.VITE_DATALAYER_OTEL_URL ?? '';
41
43
  const DEFAULT_AGENT_PROTOCOL = 'vercel-ai';
42
- const DEFAULT_AGENT_LIBRARY = 'pydantic-ai';
43
44
  /** Spec id this example always launches. */
44
45
  const AGENTSPEC_ID = 'example-otel';
45
46
  /**
@@ -55,31 +56,9 @@ const AgentLaunchPanel = ({ baseUrl, onConnected, onDisconnected, isConnected, c
55
56
  setError(null);
56
57
  try {
57
58
  const transport = DEFAULT_AGENT_PROTOCOL;
58
- const res = await fetch(`${baseUrl}/api/v1/agents`, {
59
- method: 'POST',
60
- headers: { 'Content-Type': 'application/json' },
61
- body: JSON.stringify({
62
- name: AGENTSPEC_ID,
63
- description: `Launched from AgentOtelExample`,
64
- agent_library: DEFAULT_AGENT_LIBRARY,
65
- transport,
66
- agent_spec_id: AGENTSPEC_ID,
67
- }),
68
- });
69
- if (!res.ok) {
70
- const err = await res.json().catch(() => ({ detail: 'Unknown error' }));
71
- const detail = typeof err?.detail === 'string' ? err.detail : 'Unknown error';
72
- // Reuse existing agent when backend reports duplicate creation.
73
- if (res.status === 409 || /already exists/i.test(detail)) {
74
- const idMatch = detail.match(/Agent with ID '([^']+)' already exists/i);
75
- const existingId = idMatch?.[1] || AGENTSPEC_ID;
76
- onConnected(existingId, transport);
77
- return;
78
- }
79
- throw new Error(detail || `Failed to create agent: ${res.status}`);
80
- }
81
- const data = await res.json();
82
- onConnected(data.id, transport);
59
+ // The Loop creates the agent from the otel capacity plugin's blueprint
60
+ // once it mounts on this id; the launcher only picks the id.
61
+ onConnected(uniqueAgentId(AGENTSPEC_ID), transport);
83
62
  }
84
63
  catch (e) {
85
64
  setError(e instanceof Error ? e.message : 'Failed to launch agent');
@@ -135,8 +114,7 @@ const TAB_SX = (active) => ({
135
114
  const AgentOtelExampleInner = ({ token }) => {
136
115
  const { configuration } = useCoreStore();
137
116
  const agentBaseUrl = useExampleAgentRuntimesUrl();
138
- const resolvedUrl = configuration?.otelInUrl ||
139
- OTEL_IN_BASE_URL_ENV ||
117
+ const resolvedUrl = OTEL_IN_BASE_URL_ENV ||
140
118
  configuration?.otelUrl ||
141
119
  configuration?.otelUrl ||
142
120
  OTEL_BASE_URL_ENV ||
@@ -154,11 +132,16 @@ const AgentOtelExampleInner = ({ token }) => {
154
132
  signalSetterRef.current?.(signal);
155
133
  }, []);
156
134
  // ── Agent state ─────────────────────────────────────────────────
135
+ //
136
+ // The launch panel creates the `example-otel` agent and reports its id; the
137
+ // LoopEmbed below runs on the Local target pointed at that same id, so its
138
+ // `ensureLocalAgent` finds the created agent and reuses it rather than
139
+ // making a second one. The bespoke launcher and its Disconnect control are
140
+ // kept — the chat column is the shared loop now, everything around it is the
141
+ // example's own.
157
142
  const [connectedAgentId, setConnectedAgentId] = useState(null);
158
- const [connectedAgentTransport, setConnectedAgentTransport] = useState(DEFAULT_AGENT_PROTOCOL);
159
- const handleAgentConnected = useCallback((agentId, protocol) => {
143
+ const handleAgentConnected = useCallback((agentId) => {
160
144
  setConnectedAgentId(agentId);
161
- setConnectedAgentTransport(protocol);
162
145
  }, []);
163
146
  const handleAgentDisconnected = useCallback(async () => {
164
147
  if (connectedAgentId) {
@@ -173,38 +156,7 @@ const AgentOtelExampleInner = ({ token }) => {
173
156
  }
174
157
  setConnectedAgentId(null);
175
158
  }, [connectedAgentId, agentBaseUrl]);
176
- // Build protocol config from connected agent
177
- const protocolConfig = useMemo(() => {
178
- if (!connectedAgentId)
179
- return undefined;
180
- if (connectedAgentTransport === 'ag-ui') {
181
- return {
182
- type: 'ag-ui',
183
- endpoint: `${agentBaseUrl}/api/v1/ag-ui/${connectedAgentId}/`,
184
- agentId: connectedAgentId,
185
- };
186
- }
187
- if (connectedAgentTransport === 'a2a') {
188
- return {
189
- type: 'a2a',
190
- endpoint: `${agentBaseUrl}/api/v1/a2a/${connectedAgentId}`,
191
- agentId: connectedAgentId,
192
- };
193
- }
194
- if (connectedAgentTransport === 'vercel-ai') {
195
- return {
196
- type: 'vercel-ai',
197
- endpoint: `${agentBaseUrl}/api/v1/vercel-ai/${connectedAgentId}`,
198
- agentId: connectedAgentId,
199
- };
200
- }
201
- // Fallback – vercel-ai
202
- return {
203
- type: 'vercel-ai',
204
- endpoint: `${agentBaseUrl}/api/v1/vercel-ai/${connectedAgentId}`,
205
- agentId: connectedAgentId,
206
- };
207
- }, [connectedAgentId, connectedAgentTransport, agentBaseUrl]);
159
+ const otelPlugins = useMemo(() => [AgentOtelPlugin], []);
208
160
  return (_jsxs(Box, { sx: {
209
161
  display: 'flex',
210
162
  flexDirection: 'column',
@@ -236,30 +188,25 @@ const AgentOtelExampleInner = ({ token }) => {
236
188
  flex: 1,
237
189
  minHeight: 0,
238
190
  overflow: 'hidden',
239
- }, children: view === 'dashboard' ? (_jsx(DashboardView, { baseUrl: otelBaseUrl, wsBaseUrl: otelBaseUrl, token: token, autoRefreshMs: 5000, defaultSignal: "traces", limit: 200, onSignalRef: handleSignalRef })) : view === 'sql' ? (_jsx(SqlView, { baseUrl: otelBaseUrl, token: token })) : (_jsx(SystemView, { baseUrl: otelBaseUrl, token: token })) })] }), _jsx(ChatSidebar, { kernelIndicatorPlacement: "right", title: "AI Agent", protocol: protocolConfig, position: "right", width: 380, defaultOpen: true, showNewChatButton: true, showClearButton: true, showSettingsButton: false, clickOutsideToClose: false, placeholder: "Ask the agent about your telemetry data\u2026", description: "Connect an agent to start chatting about your traces, logs, and metrics.", panelProps: protocolConfig
240
- ? {
241
- protocol: protocolConfig,
242
- useStore: true,
243
- suggestions: [
244
- {
245
- title: '🔍 Recent traces',
246
- message: 'What do the most recent traces show?',
247
- },
248
- {
249
- title: '⚠️ Errors',
250
- message: 'Are there any errors or anomalies in the telemetry?',
251
- },
252
- {
253
- title: '📊 Metrics summary',
254
- message: 'Give me a summary of the current metrics.',
255
- },
256
- {
257
- title: '🕵️ Root cause',
258
- message: 'Help me find the root cause of slow requests.',
259
- },
260
- ],
261
- }
262
- : { useStore: true }, children: _jsx(AgentLaunchPanel, { baseUrl: agentBaseUrl, onConnected: handleAgentConnected, onDisconnected: handleAgentDisconnected, isConnected: !!connectedAgentId, connectedAgentName: connectedAgentId ?? undefined }) })] })] }));
191
+ }, children: view === 'dashboard' ? (_jsx(DashboardView, { baseUrl: otelBaseUrl, wsBaseUrl: otelBaseUrl, token: token, autoRefreshMs: 5000, defaultSignal: "traces", limit: 200, onSignalRef: handleSignalRef })) : view === 'sql' ? (_jsx(SqlView, { baseUrl: otelBaseUrl, token: token })) : (_jsx(SystemView, { baseUrl: otelBaseUrl, token: token })) })] }), _jsxs(Box, { sx: {
192
+ width: 380,
193
+ flexShrink: 0,
194
+ display: 'flex',
195
+ flexDirection: 'column',
196
+ borderLeft: '1px solid',
197
+ borderColor: 'border.default',
198
+ bg: 'canvas.default',
199
+ minHeight: 0,
200
+ }, children: [_jsx(AgentLaunchPanel, { baseUrl: agentBaseUrl, onConnected: handleAgentConnected, onDisconnected: handleAgentDisconnected, isConnected: !!connectedAgentId, connectedAgentName: connectedAgentId ?? undefined }), _jsx(Box, { sx: { flex: 1, minHeight: 0 }, children: connectedAgentId ? (_jsx(LoopEmbed, { serverUrl: agentBaseUrl, target: "local", showAgentVariants: true, agentId: connectedAgentId, editors: false, plugins: otelPlugins }, connectedAgentId)) : (_jsx(Box, { sx: {
201
+ display: 'flex',
202
+ alignItems: 'center',
203
+ justifyContent: 'center',
204
+ height: '100%',
205
+ px: 3,
206
+ color: 'fg.muted',
207
+ fontSize: 1,
208
+ textAlign: 'center',
209
+ }, children: "Connect an agent to start chatting about your traces, logs, and metrics." })) })] })] })] }));
263
210
  };
264
211
  /**
265
212
  * AgentOtelExample – themed root with auth gate.
@@ -2,7 +2,7 @@
2
2
  * AgentOutputsExample
3
3
  *
4
4
  * Demonstrates rich output rendering for agent responses. The agent (spec
5
- * `example-outputs`) is prompted to return exactly one of four output types per
5
+ * `example-output`) is prompted to return exactly one of four output types per
6
6
  * response:
7
7
  * - TABLE → GitHub-flavored Markdown table
8
8
  * - JSON → ```json fenced block
@@ -10,6 +10,7 @@
10
10
  * - FILE → fenced block whose info string is a file extension and
11
11
  * whose first line is `# filename: <name.ext>`
12
12
  *
13
+ * The Loop creates the agent from the plugin's blueprint when it connects.
13
14
  * We subscribe to the chat store, detect the output type of the latest
14
15
  * assistant message, auto-switch the sidebar tab, and render the payload
15
16
  * inline in the sidebar.