@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,54 @@
1
+ /**
2
+ * An agent loop that turns in the page.
3
+ *
4
+ * The server-side harness reads a spec and builds a pydantic-ai agent from it.
5
+ * This reads the same spec and builds a Vercel AI SDK agent from it — same
6
+ * prompt, same model name, same tools, different thing turning the loop.
7
+ *
8
+ * What a browser agent does *not* get comes from the spec too, and it is not a
9
+ * limitation this module has to enforce: a spec written for this harness
10
+ * declares no MCP servers, no sandbox and no codemode, because none of them
11
+ * exist without a server. All that is left is the frontend tools, and those
12
+ * were always the ones that ran here anyway.
13
+ *
14
+ * @module runtimes/browser/agent
15
+ */
16
+ import { ToolLoopAgent, type LanguageModel } from 'ai';
17
+ import type { Agentspec } from '../../types/agentspecs';
18
+ import type { FrontendToolDefinition } from '../../types/tools';
19
+ import { type FrontendToolsToVercelAIOptions } from './frontendTools';
20
+ import { type BrowserModelOptions } from './model';
21
+ /**
22
+ * How many model turns one request may take.
23
+ *
24
+ * A compaction reads a notebook cell by cell and then edits it, so the loop
25
+ * needs room — but it is running against a person's own page with nothing
26
+ * between it and a bill, so it needs a ceiling too.
27
+ */
28
+ export declare const DEFAULT_BROWSER_MAX_STEPS = 24;
29
+ export type CreateBrowserAgentOptions = FrontendToolsToVercelAIOptions & {
30
+ /** The spec to run. Its prompt, model and identity are used as written. */
31
+ spec: Pick<Agentspec, 'id' | 'model' | 'systemPrompt'>;
32
+ /**
33
+ * The tools the agent can call, in this page.
34
+ *
35
+ * The same array a host passes to `<Chat frontendTools={...}>` — from
36
+ * `useNotebookTools`, `useLexicalTools`, or hand-written.
37
+ */
38
+ frontendTools: FrontendToolDefinition[];
39
+ /** Where to reach the model, unless one is supplied outright. */
40
+ inference?: Omit<BrowserModelOptions, 'model'>;
41
+ /** A ready-made model, for a host that resolves models its own way. */
42
+ model?: LanguageModel;
43
+ /** Turn ceiling for one request. @see DEFAULT_BROWSER_MAX_STEPS */
44
+ maxSteps?: number;
45
+ };
46
+ /**
47
+ * Build the agent a browser variant runs.
48
+ *
49
+ * The result is an SDK agent, so it drops straight into `DirectChatTransport`
50
+ * and from there into the same `useChat` the rest of the chat UI is built on
51
+ * — which is why nothing downstream of the transport has to know which
52
+ * harness produced its messages.
53
+ */
54
+ export declare function createBrowserAgent(options: CreateBrowserAgentOptions): ToolLoopAgent;
@@ -0,0 +1,63 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /*
6
+ * Copyright (c) 2023-2026 Datalayer, Inc.
7
+ *
8
+ * MIT License
9
+ */
10
+ /**
11
+ * An agent loop that turns in the page.
12
+ *
13
+ * The server-side harness reads a spec and builds a pydantic-ai agent from it.
14
+ * This reads the same spec and builds a Vercel AI SDK agent from it — same
15
+ * prompt, same model name, same tools, different thing turning the loop.
16
+ *
17
+ * What a browser agent does *not* get comes from the spec too, and it is not a
18
+ * limitation this module has to enforce: a spec written for this harness
19
+ * declares no MCP servers, no sandbox and no codemode, because none of them
20
+ * exist without a server. All that is left is the frontend tools, and those
21
+ * were always the ones that ran here anyway.
22
+ *
23
+ * @module runtimes/browser/agent
24
+ */
25
+ import { ToolLoopAgent, stepCountIs } from 'ai';
26
+ import { frontendToolsToVercelAI, } from './frontendTools';
27
+ import { createBrowserModel } from './model';
28
+ /**
29
+ * How many model turns one request may take.
30
+ *
31
+ * A compaction reads a notebook cell by cell and then edits it, so the loop
32
+ * needs room — but it is running against a person's own page with nothing
33
+ * between it and a bill, so it needs a ceiling too.
34
+ */
35
+ export const DEFAULT_BROWSER_MAX_STEPS = 24;
36
+ /**
37
+ * Build the agent a browser variant runs.
38
+ *
39
+ * The result is an SDK agent, so it drops straight into `DirectChatTransport`
40
+ * and from there into the same `useChat` the rest of the chat UI is built on
41
+ * — which is why nothing downstream of the transport has to know which
42
+ * harness produced its messages.
43
+ */
44
+ export function createBrowserAgent(options) {
45
+ const { spec, frontendTools, inference, model, maxSteps = DEFAULT_BROWSER_MAX_STEPS, onHitlRequired, onStatusChange, } = options;
46
+ if (!model && !inference) {
47
+ throw new Error('A browser agent needs either a `model` or an `inference` endpoint to reach one.');
48
+ }
49
+ return new ToolLoopAgent({
50
+ id: spec.id,
51
+ model: model ??
52
+ createBrowserModel({
53
+ ...inference,
54
+ model: spec.model,
55
+ }),
56
+ instructions: spec.systemPrompt,
57
+ tools: frontendToolsToVercelAI(frontendTools, {
58
+ onHitlRequired,
59
+ onStatusChange,
60
+ }),
61
+ stopWhen: stepCountIs(maxSteps),
62
+ });
63
+ }
@@ -0,0 +1,121 @@
1
+ /** A minted token and the moment it stops being worth sending. */
2
+ export type AnonymousToken = {
3
+ token: string;
4
+ /** Epoch milliseconds, from the token's own lifetime plus the local clock. */
5
+ expiresAt: number;
6
+ /** How long the service signed it for, as the token itself declares. */
7
+ lifetimeMs: number;
8
+ };
9
+ /** Where an anonymous visitor's access has got to. */
10
+ export type AnonymousSessionStatus =
11
+ /** Nobody has asked for a key — the usual case, because somebody is signed in. */
12
+ 'idle'
13
+ /** Asked for, not yet answered. */
14
+ | 'minting'
15
+ /** Held, and still worth sending. */
16
+ | 'active'
17
+ /** Spent. The agent will be refused from here on. */
18
+ | 'expired'
19
+ /** The service would not issue one. */
20
+ | 'failed';
21
+ export type AnonymousSession = {
22
+ status: AnonymousSessionStatus;
23
+ /** The key, while it is worth sending. */
24
+ token?: string;
25
+ /**
26
+ * Epoch milliseconds at which the key stops being honoured.
27
+ *
28
+ * Read out of the token — see {@link tokenLifetimeMs} — rather than assumed,
29
+ * so a service that signs keys for five minutes is counted for five minutes
30
+ * without anything here being changed.
31
+ */
32
+ expiresAt?: number;
33
+ /** How long the key was signed for, so a countdown can draw a proportion. */
34
+ grantedMs?: number;
35
+ /** Why there is no key, when the service refused. */
36
+ error?: string;
37
+ };
38
+ type AnonymousSessionStore = AnonymousSession & {
39
+ /** Whether the one retry has been spent, so a refusal cannot loop. */
40
+ retried?: boolean;
41
+ /**
42
+ * Get a key, if this visitor has not had one.
43
+ *
44
+ * Idempotent by design: every consumer may call it, and a session already
45
+ * under way — or already spent — is left exactly as it is. Spent in
46
+ * particular: minting again on the next render is how a trial that is
47
+ * supposed to end becomes one that never does.
48
+ */
49
+ start: (inferenceUrl: string) => void;
50
+ /**
51
+ * Declare the key spent, now.
52
+ *
53
+ * Called by the store's own timer, and by anything that can see the clock
54
+ * has passed — a countdown on screen recomputes from the wall clock every
55
+ * tick, where a `setTimeout` in a background tab is only ever late.
56
+ */
57
+ expire: () => void;
58
+ /** Give the key up. Called when a member signs in, whose token is better. */
59
+ clear: () => void;
60
+ };
61
+ /** The claims this module reads. Everything else in the token is the service's. */
62
+ type JwtClaims = {
63
+ /** Seconds since the epoch, issuer's clock. */
64
+ exp?: number;
65
+ iat?: number;
66
+ };
67
+ /**
68
+ * Read a JWT's claims without verifying it.
69
+ *
70
+ * Deliberately unverified, and safe to be: this is the page reading the
71
+ * expiry off a key it was just handed, so it can draw a countdown. Nothing is
72
+ * authorised on the strength of it — the service verifies the signature on
73
+ * every request, and a visitor who forged a longer `exp` would only be lying
74
+ * to their own clock.
75
+ *
76
+ * Returns nothing for anything that is not a three-part JWT with a JSON
77
+ * payload, so an opaque token degrades to the `expires_in` beside it rather
78
+ * than throwing in a header.
79
+ */
80
+ export declare function readJwtClaims(token: string): JwtClaims | undefined;
81
+ /**
82
+ * How long a freshly issued token is good for, in milliseconds.
83
+ *
84
+ * `exp - iat` first: both claims come from the issuer, at the same instant, so
85
+ * their difference is a duration that no clock anywhere can distort. It is
86
+ * also the only source that is certainly the truth, because `exp` is the claim
87
+ * the service enforces.
88
+ *
89
+ * `expires_in` is the fallback, for a token that is not a JWT or carries no
90
+ * `iat`. An absolute `exp` against the local clock is deliberately *not* in
91
+ * this chain: on a machine whose clock is minutes out it produces a key that
92
+ * appears to expire before it was issued, which is worse than either.
93
+ */
94
+ export declare function tokenLifetimeMs(token: string, expiresInSeconds?: number): number;
95
+ /**
96
+ * Mint one. Throws if the service refuses.
97
+ *
98
+ * The moment it dies is read off the token itself; see {@link tokenLifetimeMs}.
99
+ */
100
+ export declare function fetchAnonymousToken(inferenceUrl: string, signal?: AbortSignal): Promise<AnonymousToken>;
101
+ export declare const useAnonymousSessionStore: import("zustand").UseBoundStore<import("zustand").StoreApi<AnonymousSessionStore>>;
102
+ /** Read the shared session without touching it. For anything that only draws it. */
103
+ export declare function useAnonymousSession(): AnonymousSession;
104
+ /**
105
+ * Hold an anonymous key for as long as one is wanted.
106
+ *
107
+ * The driving half: exactly one component in a tree should call this — the
108
+ * chat that would send the token — and everything else that needs to know
109
+ * reads {@link useAnonymousSession}.
110
+ *
111
+ * @param inferenceUrl Where the service is.
112
+ * @param enabled False when there is a signed-in member, whose own token is
113
+ * better in every way — it names them, it is metered to them, and it does
114
+ * not expire. Also false where no in-page agent will ask for inference at
115
+ * all, so a workspace on a server-backed agent does not burn a trial nobody
116
+ * is using.
117
+ */
118
+ export declare function useAnonymousInferenceSession(inferenceUrl: string, enabled: boolean): AnonymousSession;
119
+ /** How much of the key's life is left, in milliseconds. Never negative. */
120
+ export declare function anonymousTimeLeft(session: Pick<AnonymousSession, 'expiresAt'>, now?: number): number;
121
+ export default useAnonymousInferenceSession;
@@ -0,0 +1,300 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * A key for a visitor who has not signed in, and the clock on it.
7
+ *
8
+ * The inference service admits members only — a page cannot hold an AWS
9
+ * credential, so completions go through a service that does, and that service
10
+ * has to know who is spending. A public landing page has nobody to name, which
11
+ * is why an in-page agent there answered every request with 401.
12
+ *
13
+ * `POST /anonymous/token` is the service's answer: a short-lived token, no user
14
+ * attached, no other route, and no way to renew it. This module is the client
15
+ * for it.
16
+ *
17
+ * **One key, and the key says when it dies.** No renewal loop: renewing on a
18
+ * timer would give an anonymous visitor unmetered access to a members-only
19
+ * service with nothing on screen admitting it, and a clock that resets never
20
+ * reaches the moment where the workspace asks them to sign in — which is the
21
+ * whole point of showing one.
22
+ *
23
+ * **The deadline is read out of the token, not calculated beside it.** The JWT
24
+ * carries `exp`, and that claim is what the service will actually enforce; an
25
+ * `expires_in` counted against this machine's clock is a second opinion, and
26
+ * the two disagree whenever anything sits between them. What is taken from the
27
+ * token is its *lifetime* — `exp - iat`, both from the same issuer at the same
28
+ * instant — and that is added to the local clock. A duration is immune to the
29
+ * skew an absolute timestamp is not: a visitor whose laptop is ten minutes
30
+ * fast would otherwise be told their key expired before it was issued.
31
+ *
32
+ * The trial is an offer, not a boundary. It lives in a page, so a reload or a
33
+ * switch of target gets another key, and nothing here pretends otherwise:
34
+ * what actually limits anonymous use is the service, which rate limits the
35
+ * mint endpoint precisely because it is open to anyone. Spending effort making
36
+ * this side harder to reset would buy nothing the server does not already own.
37
+ *
38
+ * How long a key lives is the service's to decide —
39
+ * `DATALAYER_ANONYMOUS_TOKEN_TTL_SECONDS`, sixty seconds by default. Nothing
40
+ * here assumes a number; whatever is signed is what is counted.
41
+ *
42
+ * A shared session rather than a hook's private state, because three things
43
+ * need the same answer: the chat, which sends the token; the timer in the
44
+ * chat header, which draws what is left of it; and the panel that takes over
45
+ * when it is gone. Three hooks would have minted three keys.
46
+ *
47
+ * @module runtimes/browser/anonymousToken
48
+ */
49
+ import { useEffect } from 'react';
50
+ import { create } from 'zustand';
51
+ /**
52
+ * What to assume when a token says nothing about its own life.
53
+ *
54
+ * Matches the service's default, and is kept in step with it. Only reached for
55
+ * a token that is neither a JWT with the claims to read nor accompanied by an
56
+ * `expires_in` — which the service has never sent, so this is a floor under a
57
+ * bug rather than a policy.
58
+ */
59
+ const DEFAULT_TTL_MS = 300_000;
60
+ /** How long to wait before trying again when the service refuses. */
61
+ const RETRY_MS = 3_000;
62
+ /**
63
+ * The expiry timer, module-scoped because the store is.
64
+ *
65
+ * Held outside the state so that clearing the session can cancel it — a timer
66
+ * left running would mark a signed-in member's session expired a minute after
67
+ * they signed in.
68
+ */
69
+ let pendingTimer;
70
+ /**
71
+ * Read a JWT's claims without verifying it.
72
+ *
73
+ * Deliberately unverified, and safe to be: this is the page reading the
74
+ * expiry off a key it was just handed, so it can draw a countdown. Nothing is
75
+ * authorised on the strength of it — the service verifies the signature on
76
+ * every request, and a visitor who forged a longer `exp` would only be lying
77
+ * to their own clock.
78
+ *
79
+ * Returns nothing for anything that is not a three-part JWT with a JSON
80
+ * payload, so an opaque token degrades to the `expires_in` beside it rather
81
+ * than throwing in a header.
82
+ */
83
+ export function readJwtClaims(token) {
84
+ const payload = token.split('.')[1];
85
+ if (!payload) {
86
+ return undefined;
87
+ }
88
+ try {
89
+ // base64url → base64, then padded: `atob` accepts neither `-`/`_` nor a
90
+ // missing tail, and JWTs are written with both.
91
+ const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');
92
+ const padded = base64.padEnd(base64.length + ((4 - (base64.length % 4)) % 4), '=');
93
+ const claims = JSON.parse(atob(padded));
94
+ return claims && typeof claims === 'object'
95
+ ? claims
96
+ : undefined;
97
+ }
98
+ catch {
99
+ return undefined;
100
+ }
101
+ }
102
+ /**
103
+ * How long a freshly issued token is good for, in milliseconds.
104
+ *
105
+ * `exp - iat` first: both claims come from the issuer, at the same instant, so
106
+ * their difference is a duration that no clock anywhere can distort. It is
107
+ * also the only source that is certainly the truth, because `exp` is the claim
108
+ * the service enforces.
109
+ *
110
+ * `expires_in` is the fallback, for a token that is not a JWT or carries no
111
+ * `iat`. An absolute `exp` against the local clock is deliberately *not* in
112
+ * this chain: on a machine whose clock is minutes out it produces a key that
113
+ * appears to expire before it was issued, which is worse than either.
114
+ */
115
+ export function tokenLifetimeMs(token, expiresInSeconds) {
116
+ const claims = readJwtClaims(token);
117
+ if (claims?.exp && claims?.iat && claims.exp > claims.iat) {
118
+ return (claims.exp - claims.iat) * 1000;
119
+ }
120
+ if (expiresInSeconds && expiresInSeconds > 0) {
121
+ return expiresInSeconds * 1000;
122
+ }
123
+ return DEFAULT_TTL_MS;
124
+ }
125
+ /**
126
+ * Mint one. Throws if the service refuses.
127
+ *
128
+ * The moment it dies is read off the token itself; see {@link tokenLifetimeMs}.
129
+ */
130
+ export async function fetchAnonymousToken(inferenceUrl, signal) {
131
+ const base = inferenceUrl.replace(/\/+$/, '');
132
+ const response = await fetch(`${base}/api/ai-inference/v1/anonymous/token`, {
133
+ method: 'POST',
134
+ headers: { 'Content-Type': 'application/json' },
135
+ signal,
136
+ });
137
+ if (!response.ok) {
138
+ throw new Error(`Anonymous inference token refused by ${base} (HTTP ${response.status})`);
139
+ }
140
+ const body = (await response.json());
141
+ if (!body.token) {
142
+ throw new Error(`No token in the reply from ${base}`);
143
+ }
144
+ const lifetimeMs = tokenLifetimeMs(body.token, body.expires_in);
145
+ return {
146
+ token: body.token,
147
+ lifetimeMs,
148
+ expiresAt: Date.now() + lifetimeMs,
149
+ };
150
+ }
151
+ export const useAnonymousSessionStore = create((set, get) => {
152
+ /** Ask for a key, and arrange for the end of it. */
153
+ const mint = (inferenceUrl) => {
154
+ set({ status: 'minting', error: undefined });
155
+ void fetchAnonymousToken(inferenceUrl)
156
+ .then(minted => {
157
+ // Somebody signed in while the request was in flight; their token is
158
+ // the better one and this session was already cleared.
159
+ if (get().status !== 'minting') {
160
+ return;
161
+ }
162
+ set({
163
+ status: 'active',
164
+ token: minted.token,
165
+ // Both straight from the token: when it dies, and how long it was
166
+ // given — which is what a countdown needs to draw a proportion
167
+ // rather than just a number.
168
+ expiresAt: minted.expiresAt,
169
+ grantedMs: minted.lifetimeMs,
170
+ error: undefined,
171
+ });
172
+ clearTimeout(pendingTimer);
173
+ /*
174
+ * The store expires itself rather than waiting to be told.
175
+ *
176
+ * The countdown in the header would do it, but only while it is
177
+ * mounted — and a workspace whose chat header is hidden would then
178
+ * go on sending a dead key and reading the 401 as the agent being
179
+ * broken.
180
+ */
181
+ pendingTimer = setTimeout(() => get().expire(), Math.max(0, minted.expiresAt - Date.now()));
182
+ })
183
+ .catch((error) => {
184
+ if (get().status !== 'minting') {
185
+ return;
186
+ }
187
+ const message = error instanceof Error ? error.message : String(error);
188
+ console.warn('[anonymousToken] could not mint a token', error);
189
+ /*
190
+ * One more attempt, backed off.
191
+ *
192
+ * The endpoint is open to anyone and therefore rate limited, and a
193
+ * page that hammered it after a refusal would earn itself a longer
194
+ * one. A single retry covers the case worth covering — a service
195
+ * that was briefly unreachable — without turning a refusal into a
196
+ * loop.
197
+ */
198
+ const firstFailure = !get().retried;
199
+ set({ status: 'failed', error: message, retried: true });
200
+ if (firstFailure) {
201
+ clearTimeout(pendingTimer);
202
+ pendingTimer = setTimeout(() => {
203
+ if (get().status === 'failed') {
204
+ mint(inferenceUrl);
205
+ }
206
+ }, RETRY_MS);
207
+ }
208
+ });
209
+ };
210
+ return {
211
+ status: 'idle',
212
+ start: (inferenceUrl) => {
213
+ const { status } = get();
214
+ // Minting, live, retrying, or spent: all four already have their
215
+ // answer. Only a visitor who has never asked gets a key, which is what
216
+ // stops one being handed out again on the next render.
217
+ if (status !== 'idle') {
218
+ return;
219
+ }
220
+ if (!inferenceUrl) {
221
+ return;
222
+ }
223
+ mint(inferenceUrl);
224
+ },
225
+ expire: () => {
226
+ const { status } = get();
227
+ if (status === 'idle' || status === 'expired') {
228
+ return;
229
+ }
230
+ clearTimeout(pendingTimer);
231
+ pendingTimer = undefined;
232
+ // The token goes with the status: anything still holding a reference
233
+ // to this session must not be able to send a key the service will
234
+ // refuse.
235
+ set({ status: 'expired', token: undefined });
236
+ },
237
+ clear: () => {
238
+ if (get().status === 'idle') {
239
+ return;
240
+ }
241
+ clearTimeout(pendingTimer);
242
+ pendingTimer = undefined;
243
+ set({
244
+ status: 'idle',
245
+ token: undefined,
246
+ expiresAt: undefined,
247
+ grantedMs: undefined,
248
+ error: undefined,
249
+ retried: false,
250
+ });
251
+ },
252
+ };
253
+ });
254
+ /** Read the shared session without touching it. For anything that only draws it. */
255
+ export function useAnonymousSession() {
256
+ /*
257
+ * The whole state, not a projection of it.
258
+ *
259
+ * A selector building `{status, token, ...}` returns a new object on every
260
+ * render, and React's `useSyncExternalStore` — which is what zustand is
261
+ * built on — treats an unstable snapshot as a loop. The store object itself
262
+ * changes identity exactly when something in it changed, which is the
263
+ * subscription that was wanted anyway.
264
+ */
265
+ return useAnonymousSessionStore();
266
+ }
267
+ /**
268
+ * Hold an anonymous key for as long as one is wanted.
269
+ *
270
+ * The driving half: exactly one component in a tree should call this — the
271
+ * chat that would send the token — and everything else that needs to know
272
+ * reads {@link useAnonymousSession}.
273
+ *
274
+ * @param inferenceUrl Where the service is.
275
+ * @param enabled False when there is a signed-in member, whose own token is
276
+ * better in every way — it names them, it is metered to them, and it does
277
+ * not expire. Also false where no in-page agent will ask for inference at
278
+ * all, so a workspace on a server-backed agent does not burn a trial nobody
279
+ * is using.
280
+ */
281
+ export function useAnonymousInferenceSession(inferenceUrl, enabled) {
282
+ const session = useAnonymousSession();
283
+ useEffect(() => {
284
+ const { start, clear } = useAnonymousSessionStore.getState();
285
+ if (enabled && inferenceUrl) {
286
+ start(inferenceUrl);
287
+ return undefined;
288
+ }
289
+ // Somebody signed in, or the workspace moved to an agent that does its own
290
+ // authenticating: the key is not ours to keep holding.
291
+ clear();
292
+ return undefined;
293
+ }, [inferenceUrl, enabled]);
294
+ return session;
295
+ }
296
+ /** How much of the key's life is left, in milliseconds. Never negative. */
297
+ export function anonymousTimeLeft(session, now = Date.now()) {
298
+ return Math.max(0, (session.expiresAt ?? now) - now);
299
+ }
300
+ export default useAnonymousInferenceSession;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Frontend tools, as the Vercel AI SDK wants them.
3
+ *
4
+ * This is the piece that makes an in-browser agent worth having. A
5
+ * {@link FrontendToolDefinition} is a tool that runs in the page — it reaches
6
+ * into the notebook the reader is looking at, or the document they are
7
+ * editing — and the AG-UI path has always been able to call them: the client
8
+ * advertises `{name, description, parameters}` to the runtime, the model asks
9
+ * for one, and the client runs its `handler`.
10
+ *
11
+ * The browser harness needs exactly the same tools to work, and they do,
12
+ * because nothing about a frontend tool was ever server-shaped. What changes
13
+ * is only the round trip: AG-UI advertises the tool over the wire and posts
14
+ * the result back, while here the model call and the handler are in the same
15
+ * page, so the SDK calls the handler itself.
16
+ *
17
+ * So this module is a translation and not a second implementation:
18
+ *
19
+ * - the same array of definitions a host already passes to `<Chat>`
20
+ * - the same {@link ToolExecutor} underneath, so location routing,
21
+ * human-in-the-loop and status reporting behave identically
22
+ * - the same JSON Schema the AG-UI path sends over the wire
23
+ *
24
+ * A host that has tools working in one harness gets them working in the other
25
+ * by passing the same array.
26
+ *
27
+ * @module runtimes/browser/frontendTools
28
+ */
29
+ import { type ToolSet } from 'ai';
30
+ import type { FrontendToolDefinition, ToolCallRequest, ToolRenderStatus } from '../../types/tools';
31
+ /**
32
+ * The JSON Schema for a tool's input.
33
+ *
34
+ * `parameters` comes in two shapes, because two ecosystems put it there: the
35
+ * notebook and document tools carry JSON Schema already, and CopilotKit-style
36
+ * definitions carry a `ToolParameter[]`. The AG-UI path sends whichever it
37
+ * finds straight over the wire; this does the same conversion so a tool
38
+ * describes itself identically to a model in either harness.
39
+ */
40
+ export declare function toolInputSchema(definition: Pick<FrontendToolDefinition, 'parameters'>): Record<string, unknown>;
41
+ export type FrontendToolsToVercelAIOptions = {
42
+ /**
43
+ * Asks a person to approve a call before it runs.
44
+ *
45
+ * Only consulted for tools that declare `renderAndWaitForResponse`, and it
46
+ * is the same callback the AG-UI path uses. Returning `null` rejects the
47
+ * call — the model is told so and can carry on.
48
+ */
49
+ onHitlRequired?: (toolCall: ToolCallRequest, definition: FrontendToolDefinition) => Promise<unknown | null>;
50
+ /** Reports a call moving through executing → complete/failed. */
51
+ onStatusChange?: (toolCallId: string, status: ToolRenderStatus, result?: unknown, error?: string) => void;
52
+ };
53
+ /**
54
+ * Turn frontend tools into a Vercel AI SDK tool set.
55
+ *
56
+ * Errors come back as tool output rather than thrown. A throw would abort the
57
+ * whole generation over one bad call; an error the model can read is a step it
58
+ * can recover from — it can try a different cell, or tell the person what went
59
+ * wrong. This is what the AG-UI path does with a failed tool result too.
60
+ */
61
+ export declare function frontendToolsToVercelAI(frontendTools: FrontendToolDefinition[], options?: FrontendToolsToVercelAIOptions): ToolSet;