@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,265 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, 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
+ * The overlay behind "card" on an A2A run.
8
+ *
9
+ * Everything the run's events said about the agent — where it was launched,
10
+ * its endpoint, its task and state — and the agent card fetched live from the
11
+ * agent itself, laid out field by field with the raw JSON underneath, and a
12
+ * link out to the card's URL for whoever wants the tab after all.
13
+ *
14
+ * @module chat/tools/A2AAgentDialog
15
+ */
16
+ import React, { useEffect, useState } from 'react';
17
+ import { Heading, Label, Link, Spinner, Text } from '@primer/react';
18
+ import { Dialog } from '@primer/react/experimental';
19
+ import { LinkExternalIcon } from '@primer/octicons-react';
20
+ import { Box } from '@datalayer/primer-addons';
21
+ /**
22
+ * The agent behind a delegated run, or `null` when the run is not over A2A.
23
+ * Later events win, except the name, which is the first one's.
24
+ */
25
+ export function a2aAgentDetails(events, fallbackName) {
26
+ if (!events.some(event => event.transport === 'a2a')) {
27
+ return null;
28
+ }
29
+ const details = {
30
+ name: events[0]?.subagentName ?? fallbackName ?? 'agent',
31
+ };
32
+ for (const event of events) {
33
+ if (event.url)
34
+ details.url = event.url;
35
+ if (event.launch && event.launch !== 'auto')
36
+ details.launch = event.launch;
37
+ if (event.phase === 'status' && event.state)
38
+ details.state = event.state;
39
+ if (event.taskId)
40
+ details.taskId = event.taskId;
41
+ if (event.runtimeUid)
42
+ details.runtimeUid = event.runtimeUid;
43
+ if (event.agentCard)
44
+ details.card = event.agentCard;
45
+ }
46
+ return details;
47
+ }
48
+ /** Where an A2A agent publishes its card. */
49
+ export function agentCardUrl(url) {
50
+ return `${url.replace(/\/+$/, '')}/.well-known/agent-card.json`;
51
+ }
52
+ /** The agent card at `url`, fetched when the URL is known and refetched when it changes. */
53
+ export function useAgentCard(url) {
54
+ const [state, setState] = useState({
55
+ status: url ? 'loading' : 'idle',
56
+ });
57
+ useEffect(() => {
58
+ if (!url) {
59
+ setState({ status: 'idle' });
60
+ return;
61
+ }
62
+ const controller = new AbortController();
63
+ setState({ status: 'loading' });
64
+ fetch(agentCardUrl(url), {
65
+ signal: controller.signal,
66
+ headers: { Accept: 'application/json' },
67
+ })
68
+ .then(async (response) => {
69
+ if (!response.ok) {
70
+ throw new Error(`${response.status} ${response.statusText}`.trim());
71
+ }
72
+ const body = await response.json();
73
+ if (!body || typeof body !== 'object' || Array.isArray(body)) {
74
+ throw new Error('The agent card is not a JSON object');
75
+ }
76
+ setState({ status: 'loaded', card: body });
77
+ })
78
+ .catch((reason) => {
79
+ if (controller.signal.aborted)
80
+ return;
81
+ setState({
82
+ status: 'error',
83
+ error: reason instanceof Error ? reason.message : String(reason),
84
+ });
85
+ });
86
+ return () => controller.abort();
87
+ }, [url]);
88
+ return state;
89
+ }
90
+ // ---------------------------------------------------------------------------
91
+ // Reading a card without trusting its shape
92
+ // ---------------------------------------------------------------------------
93
+ const record = (value) => value && typeof value === 'object' && !Array.isArray(value)
94
+ ? value
95
+ : undefined;
96
+ const items = (value) => Array.isArray(value)
97
+ ? value.map(record).filter((v) => !!v)
98
+ : [];
99
+ const text = (value) => typeof value === 'string' && value ? value : undefined;
100
+ const strings = (value) => Array.isArray(value)
101
+ ? value.filter((v) => typeof v === 'string')
102
+ : [];
103
+ // ---------------------------------------------------------------------------
104
+ // Pieces
105
+ // ---------------------------------------------------------------------------
106
+ function Section({ title, children, }) {
107
+ return (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: [_jsx(Heading, { as: "h4", sx: { fontSize: 1, m: 0 }, children: title }), children] }));
108
+ }
109
+ function Row({ label, children, }) {
110
+ return (_jsxs(Box, { sx: {
111
+ display: 'grid',
112
+ gridTemplateColumns: '112px 1fr',
113
+ gap: 2,
114
+ alignItems: 'baseline',
115
+ fontSize: 0,
116
+ }, children: [_jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: label }), _jsx(Box, { sx: { minWidth: 0, wordBreak: 'break-all' }, children: children })] }));
117
+ }
118
+ function External({ href, children, }) {
119
+ return (_jsxs(Link, { href: href, target: "_blank", rel: "noreferrer", sx: {
120
+ fontSize: 0,
121
+ fontFamily: 'mono',
122
+ display: 'inline-flex',
123
+ alignItems: 'center',
124
+ gap: 1,
125
+ }, children: [children ?? href, _jsx(LinkExternalIcon, { size: 12 })] }));
126
+ }
127
+ function Mono({ children }) {
128
+ return _jsx(Text, { sx: { fontSize: 0, fontFamily: 'mono' }, children: children });
129
+ }
130
+ /** camelCase or snake_case, as words, for a key the card renderer never heard of. */
131
+ function humanize(key) {
132
+ const spaced = key
133
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
134
+ .replace(/[_-]+/g, ' ')
135
+ .toLowerCase();
136
+ return spaced.charAt(0).toUpperCase() + spaced.slice(1);
137
+ }
138
+ const isUrl = (value) => /^https?:\/\//.test(value);
139
+ const None = ({ word = 'none' }) => (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: word }));
140
+ /**
141
+ * Any JSON value, laid out: scalars as text (URLs as links, booleans as
142
+ * yes/no), arrays as lists, objects as key/value rows — three levels deep,
143
+ * compact JSON below that. A key the card renderer never heard of still
144
+ * reads as information rather than as a blob to open the raw JSON for.
145
+ */
146
+ function ValueView({ value, depth = 0, }) {
147
+ if (value === null || value === undefined) {
148
+ return _jsx(None, { word: "\u2014" });
149
+ }
150
+ if (typeof value === 'boolean') {
151
+ return (_jsx(Label, { size: "small", variant: value ? 'success' : 'secondary', children: value ? 'yes' : 'no' }));
152
+ }
153
+ if (typeof value === 'number') {
154
+ return _jsx(Mono, { children: String(value) });
155
+ }
156
+ if (typeof value === 'string') {
157
+ return isUrl(value) ? (_jsx(External, { href: value })) : (_jsx(Text, { sx: { fontSize: 0 }, children: value }));
158
+ }
159
+ if (depth >= 3) {
160
+ return _jsx(Mono, { children: JSON.stringify(value) });
161
+ }
162
+ if (Array.isArray(value)) {
163
+ if (value.length === 0) {
164
+ return _jsx(None, {});
165
+ }
166
+ if (value.every(item => typeof item !== 'object' || item === null)) {
167
+ return (_jsx(Box, { sx: { display: 'flex', gap: 2, flexWrap: 'wrap' }, children: value.map((item, index) => (_jsx(ValueView, { value: item, depth: depth + 1 }, index))) }));
168
+ }
169
+ return (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: value.map((item, index) => (_jsx(Box, { sx: { pl: 2, borderLeft: '2px solid', borderColor: 'border.muted' }, children: _jsx(ValueView, { value: item, depth: depth + 1 }) }, index))) }));
170
+ }
171
+ const entries = Object.entries(value);
172
+ if (entries.length === 0) {
173
+ return _jsx(None, { word: "empty" });
174
+ }
175
+ return (_jsx(Box, { sx: {
176
+ display: 'grid',
177
+ gridTemplateColumns: 'max-content 1fr',
178
+ columnGap: 2,
179
+ rowGap: 1,
180
+ alignItems: 'baseline',
181
+ }, children: entries.map(([key, entry]) => (_jsxs(React.Fragment, { children: [_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: humanize(key) }), _jsx(Box, { sx: { minWidth: 0, wordBreak: 'break-all' }, children: _jsx(ValueView, { value: entry, depth: depth + 1 }) })] }, key))) }));
182
+ }
183
+ /** The keys laid out by hand below; every other top-level key gets a row of its own. */
184
+ const HANDLED_KEYS = new Set([
185
+ 'name',
186
+ 'description',
187
+ 'version',
188
+ 'protocolVersion',
189
+ 'url',
190
+ 'documentationUrl',
191
+ 'iconUrl',
192
+ 'provider',
193
+ 'supportedInterfaces',
194
+ 'capabilities',
195
+ 'skills',
196
+ 'defaultInputModes',
197
+ 'defaultOutputModes',
198
+ ]);
199
+ /**
200
+ * The card, field by field: the fields the A2A card schema names, laid out
201
+ * the way a reader wants them, then every other top-level key the agent
202
+ * chose to publish — nothing is left to the raw JSON alone.
203
+ */
204
+ function CardFields({ card, }) {
205
+ const provider = record(card.provider);
206
+ const capabilities = record(card.capabilities);
207
+ const capabilityEntries = Object.entries(capabilities ?? {});
208
+ const extensions = items(capabilities?.extensions);
209
+ const interfaces = items(card.supportedInterfaces);
210
+ const skills = items(card.skills);
211
+ const inputs = strings(card.defaultInputModes);
212
+ const outputs = strings(card.defaultOutputModes);
213
+ const others = Object.entries(card).filter(([key]) => !HANDLED_KEYS.has(key));
214
+ return (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: [_jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: text(card.name) ?? 'Unnamed agent' }), text(card.version) ? (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', ml: 2 }, children: ["v", text(card.version)] })) : null, text(card.protocolVersion) ? (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', ml: 2 }, children: ["A2A ", text(card.protocolVersion)] })) : null, text(card.description) ? (_jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mt: 1, mb: 0 }, children: text(card.description) })) : null] }), text(card.url) ? (_jsx(Row, { label: "Endpoint", children: _jsx(External, { href: text(card.url) }) })) : null, text(card.documentationUrl) ? (_jsx(Row, { label: "Documentation", children: _jsx(External, { href: text(card.documentationUrl) }) })) : null, text(card.iconUrl) ? (_jsx(Row, { label: "Icon", children: _jsx(External, { href: text(card.iconUrl) }) })) : null, provider ? (_jsx(Row, { label: "Provider", children: _jsx(ValueView, { value: provider, depth: 1 }) })) : null, card.supportedInterfaces !== undefined ? (_jsx(Row, { label: "Interfaces", children: interfaces.length === 0 ? (_jsx(None, {})) : (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 1 }, children: interfaces.map((entry, index) => (_jsxs(Box, { sx: {
215
+ display: 'flex',
216
+ gap: 2,
217
+ alignItems: 'center',
218
+ flexWrap: 'wrap',
219
+ }, children: [_jsx(Label, { size: "small", children: text(entry.protocolBinding) ?? 'binding' }), text(entry.url) ? _jsx(Mono, { children: text(entry.url) }) : null, text(entry.protocolVersion) ? (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["v", text(entry.protocolVersion)] })) : null] }, index))) })) })) : null, capabilities !== undefined ? (_jsx(Row, { label: "Capabilities", children: capabilityEntries.length === 0 ? (_jsx(None, {})) : (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 1 }, children: [_jsx(Box, { sx: { display: 'flex', gap: 1, flexWrap: 'wrap' }, children: capabilityEntries
220
+ .filter(([, flag]) => typeof flag === 'boolean')
221
+ .map(([key, flag]) => (_jsxs(Label, { size: "small", variant: flag ? 'success' : 'secondary', children: [key, ": ", flag ? 'yes' : 'no'] }, key))) }), extensions.map((extension, index) => (_jsxs(Box, { sx: {
222
+ display: 'flex',
223
+ gap: 2,
224
+ alignItems: 'baseline',
225
+ flexWrap: 'wrap',
226
+ }, children: [_jsx(Mono, { children: text(extension.uri) ?? 'extension' }), extension.required === true ? (_jsx(Label, { size: "small", variant: "attention", children: "required" })) : null, text(extension.description) ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: text(extension.description) })) : null] }, index))), capabilityEntries
227
+ .filter(([key, entry]) => typeof entry !== 'boolean' && key !== 'extensions')
228
+ .map(([key, entry]) => (_jsxs(Box, { sx: { display: 'flex', gap: 2 }, children: [_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: humanize(key) }), _jsx(ValueView, { value: entry, depth: 1 })] }, key)))] })) })) : null, card.skills !== undefined ? (_jsx(Row, { label: "Skills", children: skills.length === 0 ? (_jsx(None, {})) : (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 1 }, children: skills.map((skill, index) => (_jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 0, fontWeight: 'bold' }, children: text(skill.name) ?? text(skill.id) ?? 'skill' }), text(skill.description) ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', ml: 2 }, children: text(skill.description) })) : null, strings(skill.tags).length > 0 ? (_jsx(Box, { sx: { display: 'inline-flex', gap: 1, ml: 2 }, children: strings(skill.tags).map(tag => (_jsx(Label, { size: "small", children: tag }, tag))) })) : null] }, index))) })) })) : null, card.defaultInputModes !== undefined ? (_jsx(Row, { label: "Input modes", children: inputs.length ? _jsx(Mono, { children: inputs.join(', ') }) : _jsx(None, {}) })) : null, card.defaultOutputModes !== undefined ? (_jsx(Row, { label: "Output modes", children: outputs.length ? _jsx(Mono, { children: outputs.join(', ') }) : _jsx(None, {}) })) : null, others.map(([key, value]) => (_jsx(Row, { label: humanize(key), children: _jsx(ValueView, { value: value }) }, key)))] }));
229
+ }
230
+ const LAUNCH_LABEL = {
231
+ local: 'launched on the local agent-runtimes server',
232
+ cloud: 'launched on a Datalayer runtime',
233
+ remote: 'reached at a URL the spec named',
234
+ auto: 'launch not decided yet',
235
+ };
236
+ /**
237
+ * Everything about the agent behind an A2A run: the run's own facts, the
238
+ * card fetched from the agent, the raw JSON, and the way out to the URL.
239
+ */
240
+ export function A2AAgentDialog({ details, onClose, }) {
241
+ const fetched = useAgentCard(details.url);
242
+ const cardUrl = details.url ? agentCardUrl(details.url) : undefined;
243
+ const openCard = () => {
244
+ if (cardUrl)
245
+ window.open(cardUrl, '_blank', 'noopener,noreferrer');
246
+ };
247
+ return (_jsx(Dialog, { onClose: onClose, title: `A2A agent · ${details.name}`, subtitle: "A separate agent, reached over the A2A protocol", width: "large", footerButtons: [
248
+ ...(cardUrl
249
+ ? [{ content: 'Open agent card', onClick: openCard }]
250
+ : []),
251
+ { content: 'Close', onClick: onClose, buttonType: 'primary' },
252
+ ], children: _jsxs(Box, { "data-a2a-agent-dialog": details.name, "data-a2a-card-status": fetched.status, sx: { display: 'flex', flexDirection: 'column', gap: 3 }, children: [_jsxs(Section, { title: "This run", children: [details.description ? (_jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', m: 0 }, children: details.description })) : null, _jsx(Row, { label: "Launch", children: _jsxs(Text, { sx: { fontSize: 0 }, children: [details.launch ?? 'auto', _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: [' ', "\u2014 ", LAUNCH_LABEL[details.launch ?? 'auto'] ?? ''] })] }) }), details.ref ? (_jsx(Row, { label: "Agentspec", children: _jsx(Mono, { children: details.ref }) })) : null, _jsx(Row, { label: "State", children: _jsx(Text, { sx: { fontSize: 0 }, children: details.state ?? 'unknown' }) }), details.taskId ? (_jsx(Row, { label: "Task", children: _jsx(Mono, { children: details.taskId }) })) : null, details.runtimeUid ? (_jsx(Row, { label: "Runtime", children: _jsx(Mono, { children: details.runtimeUid }) })) : null, details.url ? (_jsx(Row, { label: "Endpoint", children: _jsx(External, { href: details.url }) })) : null, cardUrl ? (_jsx(Row, { label: "Agent card", children: _jsx(External, { href: cardUrl }) })) : null] }), _jsxs(Section, { title: "Agent card", children: [fetched.status === 'idle' ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No endpoint known yet: the card can be fetched once the agent is launched." })) : null, fetched.status === 'loading' ? (_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Spinner, { size: "small" }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["Fetching ", cardUrl, "\u2026"] })] })) : null, fetched.status === 'error' ? (_jsxs(Text, { sx: { fontSize: 0, color: 'danger.fg' }, children: ["The card could not be fetched from here (", fetched.error, "). It may still open in a tab through the link above."] })) : null, fetched.status === 'loaded' ? (_jsxs(_Fragment, { children: [_jsx(CardFields, { card: fetched.card }), _jsxs(Box, { as: "details", sx: { fontSize: 0 }, children: [_jsx(Box, { as: "summary", sx: { cursor: 'pointer', color: 'fg.muted' }, children: "Raw JSON" }), _jsx(Box, { as: "pre", "data-a2a-card-json": true, sx: {
253
+ mt: 2,
254
+ p: 2,
255
+ bg: 'canvas.subtle',
256
+ border: '1px solid',
257
+ borderColor: 'border.default',
258
+ borderRadius: 2,
259
+ overflow: 'auto',
260
+ maxHeight: 280,
261
+ fontSize: 0,
262
+ m: 0,
263
+ }, children: JSON.stringify(fetched.card, null, 2) })] })] })) : null] }), details.card && fetched.status !== 'loaded' ? (_jsxs(Section, { title: "Card, as the server saw it at launch", children: [_jsx(Row, { label: "Name", children: _jsxs(Text, { sx: { fontSize: 0 }, children: [details.card.name ?? '—', details.card.version ? ` v${details.card.version}` : ''] }) }), details.card.description ? (_jsx(Row, { label: "Description", children: _jsx(Text, { sx: { fontSize: 0 }, children: details.card.description }) })) : null, details.card.skills && details.card.skills.length > 0 ? (_jsx(Row, { label: "Skills", children: _jsx(Text, { sx: { fontSize: 0 }, children: details.card.skills.join(', ') }) })) : null] })) : null] }) }));
264
+ }
265
+ export default A2AAgentDialog;
@@ -27,5 +27,5 @@ export interface ToolApprovalBannerProps {
27
27
  /**
28
28
  * Persistent banner for tool approval notifications.
29
29
  */
30
- export declare function ToolApprovalBanner({ pendingApprovals, onReview, onApproveAll, onDismiss, collapsible, }: ToolApprovalBannerProps): import("react/jsx-runtime").JSX.Element | null;
30
+ export declare function ToolApprovalBanner({ pendingApprovals, onReview, onApproveAll, onDismiss, collapsible, }: ToolApprovalBannerProps): import("react").JSX.Element | null;
31
31
  export default ToolApprovalBanner;
@@ -22,7 +22,7 @@ export interface ToolApprovalDialogProps {
22
22
  /**
23
23
  * Tool Approval Dialog component
24
24
  */
25
- export declare function ToolApprovalDialog({ isOpen, toolName, toolDescription, args, onApprove, onDeny, onClose, showRememberChoice, }: ToolApprovalDialogProps): import("react/jsx-runtime").JSX.Element | null;
25
+ export declare function ToolApprovalDialog({ isOpen, toolName, toolDescription, args, onApprove, onDeny, onClose, showRememberChoice, }: ToolApprovalDialogProps): import("react").JSX.Element | null;
26
26
  /**
27
27
  * Hook to manage tool approval dialog state
28
28
  */
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Default tool call display component.
3
+ * Shows tool execution with collapsible details.
4
+ *
5
+ * @module chat/tools/ToolCallDisplay
6
+ */
7
+ import React from 'react';
1
8
  import type { CodeError, ExecutionResult, DisplayToolCallStatus } from '../../types';
2
9
  /**
3
10
  * Error type classification for display purposes
@@ -47,5 +54,5 @@ export interface ToolCallDisplayProps {
47
54
  * - Color-coded status indicators
48
55
  * - Rich error display distinguishing execution errors from code errors
49
56
  */
50
- export declare function ToolCallDisplay({ toolCallId, toolName, args, result, status, error, executionResult, codeError, exitCode, executionError, approvalRequired, approvalState, approvalDecisionSource, onApprove, onDeny, approvalLoading, }: ToolCallDisplayProps): import("react/jsx-runtime").JSX.Element;
57
+ export declare function ToolCallDisplay({ toolCallId, toolName, args, result, status, error, executionResult, codeError, exitCode, executionError, approvalRequired, approvalState, approvalDecisionSource, onApprove, onDeny, approvalLoading, }: ToolCallDisplayProps): React.JSX.Element;
51
58
  export default ToolCallDisplay;
@@ -5,5 +5,6 @@
5
5
  */
6
6
  export { ToolCallDisplay, type ToolCallDisplayProps, type ErrorType, } from './ToolCallDisplay';
7
7
  export { SubagentActivity, type SubagentActivityProps, } from './SubagentActivity';
8
+ export { A2AAgentDialog, a2aAgentDetails, agentCardUrl, useAgentCard, type A2AAgentDetails, type A2AAgentDialogProps, type AgentCardFetch, } from './A2AAgentDialog';
8
9
  export { ToolApprovalBanner, type ToolApprovalBannerProps, type PendingApproval, } from './ToolApprovalBanner';
9
10
  export { ToolApprovalDialog, useToolApprovalDialog, type ToolApprovalDialogProps, } from './ToolApprovalDialog';
@@ -9,5 +9,6 @@
9
9
  */
10
10
  export { ToolCallDisplay, } from './ToolCallDisplay';
11
11
  export { SubagentActivity, } from './SubagentActivity';
12
+ export { A2AAgentDialog, a2aAgentDetails, agentCardUrl, useAgentCard, } from './A2AAgentDialog';
12
13
  export { ToolApprovalBanner, } from './ToolApprovalBanner';
13
14
  export { ToolApprovalDialog, useToolApprovalDialog, } from './ToolApprovalDialog';
@@ -0,0 +1,17 @@
1
+ import type { ContextSnapshotData } from '../../types/context';
2
+ export interface ContextPieProps {
3
+ /** Agent usage data from the context-snapshot API */
4
+ agentUsage: ContextSnapshotData;
5
+ /** Horizontal padding to match the chat layout */
6
+ padding: number;
7
+ /**
8
+ * Whether to draw the context ring.
9
+ *
10
+ * False by default. It is a small pie of how the window is spent, and it
11
+ * earns its place only where a person is likely to fill one — an agent
12
+ * working through a notebook — rather than in every chat that happens to
13
+ * report usage. The numbers beside it are shown either way.
14
+ */
15
+ showContextRing?: boolean;
16
+ }
17
+ export declare function ContextPie({ agentUsage, padding, showContextRing, }: ContextPieProps): import("react").JSX.Element;
@@ -4,11 +4,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  * Distributed under the terms of the Modified BSD License.
5
5
  */
6
6
  /**
7
- * TokenUsageBar — Compact bar showing context-window usage with a
8
- * tiny pie chart, session totals, and a hover overlay with category
9
- * breakdown.
7
+ * What the context window is holding.
10
8
  *
11
- * @module chat/elements/TokenUsageBar
9
+ * A row under the prompt: a ring of how the window is spent, the totals for
10
+ * the session and the last turn, and a hover overlay breaking the ring down
11
+ * by category.
12
+ *
13
+ * @module chat/usage/ContextPie
12
14
  */
13
15
  import { useRef, useState } from 'react';
14
16
  import { Text } from '@primer/react';
@@ -18,17 +20,21 @@ import { formatTokenCount } from '../../utils';
18
20
  // ---------------------------------------------------------------------------
19
21
  // Component
20
22
  // ---------------------------------------------------------------------------
21
- export function TokenUsageBar({ agentUsage, padding }) {
23
+ export function ContextPie({ agentUsage, padding, showContextRing = false, }) {
22
24
  // State for context pie chart overlay
23
25
  const [contextOverlayOpen, setContextOverlayOpen] = useState(false);
24
26
  const contextAnchorRef = useRef(null);
25
27
  const hoverTimeoutRef = useRef(null);
26
- const hasTurn = agentUsage.turnUsage &&
27
- (agentUsage.turnUsage.inputTokens > 0 ||
28
- agentUsage.turnUsage.outputTokens > 0);
29
- const hasSession = agentUsage.sessionUsage &&
30
- (agentUsage.sessionUsage.inputTokens > 0 ||
31
- agentUsage.sessionUsage.outputTokens > 0);
28
+ /*
29
+ * Shown whenever the agent reports them, zero included.
30
+ *
31
+ * They were hidden until one of the two counts went above zero, which meant
32
+ * the bar changed shape after the first answer — and, worse, that a reader
33
+ * could not tell "nothing sent yet" from "this agent does not report it".
34
+ * A zero is an answer; a missing row is not.
35
+ */
36
+ const hasTurn = !!agentUsage.turnUsage;
37
+ const hasSession = !!agentUsage.sessionUsage;
32
38
  const hasCostUsage = !!agentUsage.costUsage &&
33
39
  (agentUsage.costUsage.cumulativeCostUsd > 0 ||
34
40
  agentUsage.costUsage.lastTurnCostUsd > 0);
@@ -156,7 +162,7 @@ export function TokenUsageBar({ agentUsage, padding }) {
156
162
  overflow: 'visible',
157
163
  whiteSpace: 'nowrap',
158
164
  minWidth: 0,
159
- }, children: [_jsxs(Box, { sx: { position: 'relative', flexShrink: 0 }, onMouseEnter: () => {
165
+ }, children: [showContextRing && (_jsxs(Box, { sx: { position: 'relative', flexShrink: 0 }, onMouseEnter: () => {
160
166
  if (hoverTimeoutRef.current)
161
167
  clearTimeout(hoverTimeoutRef.current);
162
168
  hoverTimeoutRef.current = setTimeout(() => setContextOverlayOpen(true), 150);
@@ -193,7 +199,7 @@ export function TokenUsageBar({ agentUsage, padding }) {
193
199
  color: 'fg.default',
194
200
  display: 'block',
195
201
  mb: 2,
196
- }, children: "Context Window" }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block', mb: 1 }, children: [_jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default' }, children: formatTokenCount(usedTokens) }), ' / ', formatTokenCount(windowTokens), ' tokens'] }), agentUsage.costUsage && (_jsxs(Text, { sx: {
202
+ }, children: "Context" }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block', mb: 1 }, children: [_jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default' }, children: formatTokenCount(usedTokens) }), ' / ', formatTokenCount(windowTokens), ' tokens'] }), agentUsage.costUsage && (_jsxs(Text, { sx: {
197
203
  fontSize: 0,
198
204
  color: 'fg.muted',
199
205
  display: 'block',
@@ -227,5 +233,5 @@ export function TokenUsageBar({ agentUsage, padding }) {
227
233
  display: 'block',
228
234
  mt: 2,
229
235
  fontStyle: 'italic',
230
- }, children: "Quality may decline as limit nears." }))] }))] }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: [_jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatTokenCount(agentUsage.totalTokens) }), ' / ', formatTokenCount(agentUsage.contextWindow), ' ctx'] }), hasCostUsage && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· cost ', _jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatUsd(costUsage?.lastTurnCostUsd ?? 0) }), ' turn / ', _jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatUsd(costUsage?.cumulativeCostUsd ?? 0) })] })), hasSession && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· ', formatTokenCount(sessionUsage?.inputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'success.fg', fontSize: 0 }, children: '▲' }), ' ', formatTokenCount(sessionUsage?.outputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'attention.fg', fontSize: 0 }, children: '▼' })] })), hasTurn && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· turn ', formatTokenCount(turnUsage?.inputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'success.fg', fontSize: 0 }, children: '▲' }), ' ', formatTokenCount(turnUsage?.outputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'attention.fg', fontSize: 0 }, children: '▼' })] }))] }));
236
+ }, children: "Quality may decline as limit nears." }))] }))] })), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: [_jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatTokenCount(agentUsage.totalTokens) }), ' / ', formatTokenCount(agentUsage.contextWindow), ' ctx'] }), hasCostUsage && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· cost ', _jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatUsd(costUsage?.lastTurnCostUsd ?? 0) }), ' turn / ', _jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatUsd(costUsage?.cumulativeCostUsd ?? 0) })] })), hasSession && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· session ', formatTokenCount(sessionUsage?.inputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'success.fg', fontSize: 0 }, children: '▲' }), ' ', formatTokenCount(sessionUsage?.outputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'attention.fg', fontSize: 0 }, children: '▼' })] })), hasTurn && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· turn ', formatTokenCount(turnUsage?.inputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'success.fg', fontSize: 0 }, children: '▲' }), ' ', formatTokenCount(turnUsage?.outputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'attention.fg', fontSize: 0 }, children: '▼' })] }))] }));
231
237
  }
@@ -0,0 +1,11 @@
1
+ /** Where the box sits once somebody has moved it, in viewport pixels. */
2
+ export type DragPosition = {
3
+ left: number;
4
+ top: number;
5
+ } | null;
6
+ export declare function useViewportDrag(boxRef: React.RefObject<HTMLElement | null>): {
7
+ position: DragPosition;
8
+ onHandlePointerDown: (event: React.PointerEvent<HTMLElement>) => void;
9
+ reset: () => void;
10
+ };
11
+ export default useViewportDrag;
@@ -0,0 +1,61 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * Moving a fixed-position box about the viewport by a handle.
7
+ *
8
+ * The mechanics behind the chat's "Floating draggable" mode. The same idea
9
+ * as `FloatingCard`'s, which moves a prompt about its host; this one moves
10
+ * the whole chat window about the viewport, because that is what a fixed
11
+ * box is positioned against. The box stays reachable: however far it is
12
+ * dragged, a margin of it stays on screen, so its handle can always be
13
+ * picked up again.
14
+ *
15
+ * @module chat/useViewportDrag
16
+ */
17
+ import { useCallback, useRef, useState } from 'react';
18
+ /** How much of the box must stay inside the viewport. */
19
+ const MARGIN = 24;
20
+ export function useViewportDrag(boxRef) {
21
+ const [position, setPosition] = useState(null);
22
+ /* Where the pointer took hold, so the box moves by the pointer's delta
23
+ rather than snapping its corner to the cursor. */
24
+ const grip = useRef(null);
25
+ const onHandlePointerDown = useCallback((event) => {
26
+ const box = boxRef.current;
27
+ if (!box) {
28
+ return;
29
+ }
30
+ const rect = box.getBoundingClientRect();
31
+ grip.current = {
32
+ dx: event.clientX - rect.left,
33
+ dy: event.clientY - rect.top,
34
+ };
35
+ const handle = event.currentTarget;
36
+ // Absent in test DOMs; the move listeners below still work there.
37
+ handle.setPointerCapture?.(event.pointerId);
38
+ const move = (moved) => {
39
+ if (!grip.current) {
40
+ return;
41
+ }
42
+ const left = Math.min(Math.max(moved.clientX - grip.current.dx, MARGIN - rect.width), window.innerWidth - MARGIN);
43
+ const top = Math.min(Math.max(moved.clientY - grip.current.dy, 0), window.innerHeight - MARGIN);
44
+ setPosition({ left, top });
45
+ };
46
+ const up = () => {
47
+ grip.current = null;
48
+ handle.removeEventListener('pointermove', move);
49
+ handle.removeEventListener('pointerup', up);
50
+ handle.removeEventListener('pointercancel', up);
51
+ };
52
+ handle.addEventListener('pointermove', move);
53
+ handle.addEventListener('pointerup', up);
54
+ handle.addEventListener('pointercancel', up);
55
+ event.preventDefault();
56
+ }, [boxRef]);
57
+ /** Back to wherever the box starts: called when the mode changes. */
58
+ const reset = useCallback(() => setPosition(null), []);
59
+ return { position, onHandlePointerDown, reset };
60
+ }
61
+ export default useViewportDrag;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * The ways a chat can be shown, and which of them a host can offer.
3
+ *
4
+ * The header draws these as a segmented toggle. The list lives here, apart
5
+ * from the header, so the rules about it — the order, the words, and which
6
+ * modes are greyed out — can be read and tested without rendering anything.
7
+ *
8
+ * "Sidebar panel" is the one with a condition. The other three float over
9
+ * the page and need nothing from it; a sidebar has to dock *somewhere*, and
10
+ * where is the host's to say. A host says it by passing a mount point — the
11
+ * element the panel goes into — and without one the option is shown but
12
+ * disabled, so the person can see the mode exists and that this page has no
13
+ * place for it, rather than clicking it and watching nothing happen.
14
+ *
15
+ * @module chat/viewModes
16
+ */
17
+ import type { ChatViewMode } from '../types/chat';
18
+ /** One entry of the header's toggle. */
19
+ export type ChatViewModeOption = {
20
+ mode: ChatViewMode;
21
+ /** The tooltip, and the button's accessible name. */
22
+ label: string;
23
+ };
24
+ /** The modes, in the order the toggle shows them: floating first, docked last. */
25
+ export declare const CHAT_VIEW_MODES: readonly ChatViewModeOption[];
26
+ /** Why the sidebar option is greyed out, for its tooltip. */
27
+ export declare const SIDEBAR_NEEDS_MOUNT_POINT = "No mount point for a sidebar on this page";
28
+ /** Whether a mode floats over the page rather than docking into it. */
29
+ export declare function isFloatingChatViewMode(mode: ChatViewMode | undefined): boolean;
30
+ /**
31
+ * Where a host said the sidebar goes.
32
+ *
33
+ * An element, or a selector for one — a host that renders the sidebar itself
34
+ * marks the container with an attribute and passes the selector, which is
35
+ * easier than threading a ref through a layout. Resolved when asked, since a
36
+ * container may mount after the chat does; nothing is cached.
37
+ */
38
+ export declare function resolveMountPoint(mountPoint: HTMLElement | string | null | undefined): HTMLElement | null;
39
+ /**
40
+ * The modes the toggle shows but does not let anyone pick.
41
+ *
42
+ * Only the sidebar can be one, and only for want of a mount point. A chat
43
+ * already docked keeps its option live whatever the host passed: it is
44
+ * there, and greying out the mode it is in would read as a bug.
45
+ */
46
+ export declare function disabledChatViewModes({ sidebarMountPoint, viewMode, }: {
47
+ /** The resolved element, or nothing. */
48
+ sidebarMountPoint?: HTMLElement | null;
49
+ /** The mode the chat is in now. */
50
+ viewMode?: ChatViewMode;
51
+ }): ChatViewMode[];
@@ -0,0 +1,57 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /** The modes, in the order the toggle shows them: floating first, docked last. */
6
+ export const CHAT_VIEW_MODES = [
7
+ { mode: 'floating', label: 'Full-height popup' },
8
+ { mode: 'floating-small', label: 'Floating popup' },
9
+ { mode: 'floating-draggable', label: 'Floating draggable' },
10
+ { mode: 'sidebar', label: 'Sidebar panel' },
11
+ ];
12
+ /** Why the sidebar option is greyed out, for its tooltip. */
13
+ export const SIDEBAR_NEEDS_MOUNT_POINT = 'No mount point for a sidebar on this page';
14
+ /** Whether a mode floats over the page rather than docking into it. */
15
+ export function isFloatingChatViewMode(mode) {
16
+ return (mode === 'floating' ||
17
+ mode === 'floating-small' ||
18
+ mode === 'floating-draggable');
19
+ }
20
+ /**
21
+ * Where a host said the sidebar goes.
22
+ *
23
+ * An element, or a selector for one — a host that renders the sidebar itself
24
+ * marks the container with an attribute and passes the selector, which is
25
+ * easier than threading a ref through a layout. Resolved when asked, since a
26
+ * container may mount after the chat does; nothing is cached.
27
+ */
28
+ export function resolveMountPoint(mountPoint) {
29
+ if (!mountPoint) {
30
+ return null;
31
+ }
32
+ if (typeof mountPoint !== 'string') {
33
+ return mountPoint.isConnected ? mountPoint : null;
34
+ }
35
+ if (typeof document === 'undefined') {
36
+ return null;
37
+ }
38
+ try {
39
+ return document.querySelector(mountPoint);
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ /**
46
+ * The modes the toggle shows but does not let anyone pick.
47
+ *
48
+ * Only the sidebar can be one, and only for want of a mount point. A chat
49
+ * already docked keeps its option live whatever the host passed: it is
50
+ * there, and greying out the mode it is in would read as a bug.
51
+ */
52
+ export function disabledChatViewModes({ sidebarMountPoint, viewMode, }) {
53
+ if (sidebarMountPoint || viewMode === 'sidebar') {
54
+ return [];
55
+ }
56
+ return ['sidebar'];
57
+ }