@datalayer/agent-runtimes 1.0.29 → 1.3.11

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 (779) hide show
  1. package/lib/AgentDocument.js +5 -22
  2. package/lib/AgentNode.d.ts +1 -1
  3. package/lib/AgentNode.js +193 -23
  4. package/lib/AgentNotebook.js +1 -1
  5. package/lib/App.d.ts +1 -1
  6. package/lib/AppExamples2.d.ts +1 -1
  7. package/lib/agent-node/AgentNodeGallery.d.ts +14 -1
  8. package/lib/agent-node/AgentNodeGallery.js +19 -15
  9. package/lib/agent-node/themeStore.js +7 -6
  10. package/lib/agents/AgentDetails.d.ts +8 -2
  11. package/lib/agents/AgentDetails.js +41 -11
  12. package/lib/agents/AgentRuntimeChat.d.ts +3 -3
  13. package/lib/agents/AgentRuntimeChat.js +15 -15
  14. package/lib/api/agents.d.ts +10 -10
  15. package/lib/api/agents.js +15 -15
  16. package/lib/api/checkpoints.d.ts +40 -0
  17. package/lib/api/checkpoints.js +75 -0
  18. package/lib/api/index.d.ts +1 -0
  19. package/lib/api/index.js +2 -1
  20. package/lib/api/notifications.d.ts +21 -6
  21. package/lib/api/notifications.js +32 -14
  22. package/lib/api/runtimes/environments.d.ts +406 -4
  23. package/lib/api/runtimes/environments.js +641 -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 +20 -2
  30. package/lib/chat/ChatFloating.js +196 -118
  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/ButtonGlow.d.ts +9 -0
  44. package/lib/chat/display/ButtonGlow.js +60 -0
  45. package/lib/chat/display/EmptyState.d.ts +15 -1
  46. package/lib/chat/display/EmptyState.js +81 -12
  47. package/lib/chat/display/FloatingBrandButton.d.ts +1 -1
  48. package/lib/chat/display/PoweredByTag.d.ts +1 -1
  49. package/lib/chat/display/groupSuggestions.d.ts +21 -0
  50. package/lib/chat/display/groupSuggestions.js +18 -0
  51. package/lib/chat/document/EphemeralDocument.d.ts +70 -6
  52. package/lib/chat/document/EphemeralDocument.js +154 -52
  53. package/lib/chat/header/ChatHeader.d.ts +1 -1
  54. package/lib/chat/header/ChatHeaderBase.d.ts +10 -1
  55. package/lib/chat/header/ChatHeaderBase.js +21 -102
  56. package/lib/chat/header/ChatViewModeToggle.d.ts +29 -0
  57. package/lib/chat/header/ChatViewModeToggle.js +55 -0
  58. package/lib/chat/index.d.ts +5 -1
  59. package/lib/chat/index.js +9 -1
  60. package/lib/chat/indicators/McpStatusIndicator.d.ts +1 -1
  61. package/lib/chat/indicators/SandboxStatusIndicator.d.ts +1 -1
  62. package/lib/chat/indicators/SandboxStatusIndicator.js +1 -1
  63. package/lib/chat/indicators/SkillsStatusIndicator.d.ts +1 -1
  64. package/lib/chat/messages/ChatMessageList.d.ts +22 -1
  65. package/lib/chat/messages/ChatMessageList.js +370 -166
  66. package/lib/chat/messages/ChatMessages.d.ts +1 -1
  67. package/lib/chat/messages/NotebookToolSurfaces.d.ts +68 -0
  68. package/lib/chat/messages/NotebookToolSurfaces.js +302 -0
  69. package/lib/chat/messages/TurnFooter.d.ts +42 -0
  70. package/lib/chat/messages/TurnFooter.js +75 -0
  71. package/lib/chat/messages/assistantMarkdown.d.ts +22 -0
  72. package/lib/chat/messages/assistantMarkdown.js +56 -0
  73. package/lib/chat/notebook/EphemeralNotebook.d.ts +67 -6
  74. package/lib/chat/notebook/EphemeralNotebook.js +194 -61
  75. package/lib/chat/parts/DynamicToolPart.d.ts +1 -1
  76. package/lib/chat/parts/MessagePart.d.ts +1 -1
  77. package/lib/chat/parts/ReasoningPart.d.ts +8 -1
  78. package/lib/chat/parts/TextPart.d.ts +1 -1
  79. package/lib/chat/parts/ToolPart.d.ts +8 -1
  80. package/lib/chat/prompt/FloatingCard.d.ts +26 -0
  81. package/lib/chat/prompt/FloatingCard.js +80 -0
  82. package/lib/chat/prompt/InputPrompt.d.ts +206 -53
  83. package/lib/chat/prompt/InputPrompt.js +161 -80
  84. package/lib/chat/prompt/InputPromptBase.d.ts +112 -0
  85. package/lib/chat/prompt/InputPromptBase.js +225 -0
  86. package/lib/chat/prompt/InputPromptLexical.d.ts +18 -1
  87. package/lib/chat/prompt/InputPromptLexical.js +227 -30
  88. package/lib/chat/prompt/InputPromptText.d.ts +10 -2
  89. package/lib/chat/prompt/InputPromptText.js +35 -3
  90. package/lib/chat/prompt/footer/BelowPromptFooter.d.ts +25 -0
  91. package/lib/chat/prompt/footer/BelowPromptFooter.js +12 -0
  92. package/lib/chat/prompt/footer/InPromptFooter.d.ts +35 -0
  93. package/lib/chat/prompt/footer/InPromptFooter.js +16 -0
  94. package/lib/chat/prompt/footer/index.d.ts +7 -0
  95. package/lib/chat/prompt/footer/index.js +11 -0
  96. package/lib/chat/prompt/header/BelowPromptHeader.d.ts +23 -0
  97. package/lib/chat/prompt/header/BelowPromptHeader.js +12 -0
  98. package/lib/chat/prompt/header/InPromptHeader.d.ts +31 -0
  99. package/lib/chat/prompt/header/InPromptHeader.js +14 -0
  100. package/lib/chat/prompt/header/index.d.ts +7 -0
  101. package/lib/chat/prompt/header/index.js +11 -0
  102. package/lib/chat/prompt/index.d.ts +8 -4
  103. package/lib/chat/prompt/index.js +15 -3
  104. package/lib/chat/prompt/menus/AgentsMenu.d.ts +14 -0
  105. package/lib/chat/prompt/menus/AgentsMenu.js +42 -0
  106. package/lib/chat/prompt/menus/InlineAgentsMenu.d.ts +22 -0
  107. package/lib/chat/prompt/menus/InlineAgentsMenu.js +24 -0
  108. package/lib/chat/prompt/menus/ModelSelector.d.ts +7 -0
  109. package/lib/chat/prompt/menus/ModelSelector.js +27 -0
  110. package/lib/chat/prompt/menus/SkillsMenu.d.ts +10 -0
  111. package/lib/chat/prompt/menus/SkillsMenu.js +75 -0
  112. package/lib/chat/prompt/menus/SuggestionsMenu.d.ts +13 -0
  113. package/lib/chat/prompt/menus/SuggestionsMenu.js +31 -0
  114. package/lib/chat/prompt/menus/ToolsMenu.d.ts +13 -0
  115. package/lib/chat/prompt/menus/ToolsMenu.js +103 -0
  116. package/lib/chat/prompt/menus/index.d.ts +15 -0
  117. package/lib/chat/prompt/menus/index.js +19 -0
  118. package/lib/chat/prompt/plugins/AgentMentionPlugin.d.ts +54 -0
  119. package/lib/chat/prompt/plugins/AgentMentionPlugin.js +370 -0
  120. package/lib/chat/prompt/plugins/CommandPlugin.d.ts +52 -0
  121. package/lib/chat/prompt/plugins/CommandPlugin.js +359 -0
  122. package/lib/chat/prompt/plugins/MentionChip.d.ts +15 -0
  123. package/lib/chat/prompt/plugins/MentionChip.js +24 -0
  124. package/lib/chat/prompt/plugins/MentionNode.d.ts +66 -0
  125. package/lib/chat/prompt/plugins/MentionNode.js +77 -0
  126. package/lib/chat/prompt/promptHistory.d.ts +52 -0
  127. package/lib/chat/prompt/promptHistory.js +123 -0
  128. package/lib/chat/prompt/stack.d.ts +81 -0
  129. package/lib/chat/prompt/stack.js +41 -0
  130. package/lib/chat/prompt/useTypingPlaceholder.d.ts +52 -0
  131. package/lib/chat/prompt/useTypingPlaceholder.js +180 -0
  132. package/lib/chat/tools/A2AAgentDialog.d.ts +60 -0
  133. package/lib/chat/tools/A2AAgentDialog.js +265 -0
  134. package/lib/chat/tools/ToolApprovalBanner.d.ts +1 -1
  135. package/lib/chat/tools/ToolApprovalDialog.d.ts +1 -1
  136. package/lib/chat/tools/ToolCallDisplay.d.ts +8 -1
  137. package/lib/chat/tools/index.d.ts +1 -0
  138. package/lib/chat/tools/index.js +1 -0
  139. package/lib/chat/usage/ContextPie.d.ts +17 -0
  140. package/lib/chat/usage/{TokenUsageBar.js → ContextPie.js} +20 -14
  141. package/lib/chat/useViewportDrag.d.ts +11 -0
  142. package/lib/chat/useViewportDrag.js +61 -0
  143. package/lib/chat/viewModes.d.ts +51 -0
  144. package/lib/chat/viewModes.js +57 -0
  145. package/lib/client/AgentRuntimesClient.d.ts +10 -9
  146. package/lib/client/AgentRuntimesClient.js +1 -1
  147. package/lib/client/AgentRuntimesClientContext.d.ts +1 -0
  148. package/lib/client/AgentsMixin.d.ts +12 -12
  149. package/lib/client/AgentsMixin.js +31 -31
  150. package/lib/client/IAgentRuntimesClient.d.ts +10 -10
  151. package/lib/client/SdkAgentRuntimesClient.d.ts +10 -10
  152. package/lib/client/SdkAgentRuntimesClient.js +10 -10
  153. package/lib/client/mixins/RuntimesMixin.d.ts +37 -10
  154. package/lib/client/mixins/RuntimesMixin.js +54 -21
  155. package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +1 -1
  156. package/lib/components/agents/AgentSummary.d.ts +13 -0
  157. package/lib/components/agents/AgentSummary.js +21 -4
  158. package/lib/components/cards/NotificationEventCard.d.ts +1 -1
  159. package/lib/components/cards/OutputCard.d.ts +1 -1
  160. package/lib/components/cards/ToolApprovalCard.d.ts +2 -2
  161. package/lib/components/cards/ToolApprovalCard.js +1 -0
  162. package/lib/components/code-sandboxes/CodeSandboxCellVariables.d.ts +1 -0
  163. package/lib/components/code-sandboxes/CodeSandboxCellVariables.js +0 -4
  164. package/lib/components/code-sandboxes/CodeSandboxCellVariablesDialog.d.ts +1 -0
  165. package/lib/components/code-sandboxes/CodeSandboxCellVariablesDialog.js +0 -4
  166. package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.d.ts +35 -0
  167. package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.js +27 -29
  168. package/lib/components/code-sandboxes/CodeSandboxLauncher.d.ts +9 -0
  169. package/lib/components/code-sandboxes/CodeSandboxLauncher.js +95 -23
  170. package/lib/components/code-sandboxes/CodeSandboxNames.js +7 -6
  171. package/lib/components/code-sandboxes/CodeSandboxPicker.js +89 -42
  172. package/lib/components/code-sandboxes/CodeSandboxPickerCell.d.ts +1 -0
  173. package/lib/components/code-sandboxes/CodeSandboxPickerCell.js +0 -4
  174. package/lib/components/code-sandboxes/CodeSandboxReservationControl.d.ts +1 -0
  175. package/lib/components/code-sandboxes/CodeSandboxReservationControl.js +5 -7
  176. package/lib/components/code-sandboxes/CodeSandboxTransfer.d.ts +5 -0
  177. package/lib/components/code-sandboxes/CodeSandboxUtils.d.ts +13 -1
  178. package/lib/components/code-sandboxes/CodeSandboxUtils.js +10 -4
  179. package/lib/components/code-sandboxes/NewCodeSandboxControls.d.ts +21 -15
  180. package/lib/components/code-sandboxes/NewCodeSandboxControls.js +28 -51
  181. package/lib/components/code-sandboxes/codeSandboxAllowance.d.ts +33 -0
  182. package/lib/components/code-sandboxes/codeSandboxAllowance.js +37 -0
  183. package/lib/components/code-sandboxes/codeSandboxEnvironments.d.ts +97 -0
  184. package/lib/components/code-sandboxes/codeSandboxEnvironments.js +184 -0
  185. package/lib/components/code-sandboxes/codeSandboxProviders.js +14 -5
  186. package/lib/components/code-sandboxes/index.d.ts +1 -0
  187. package/lib/components/code-sandboxes/index.js +1 -0
  188. package/lib/components/context/SpaceSelect.d.ts +1 -1
  189. package/lib/components/flashes/FlashDisclaimer.d.ts +1 -1
  190. package/lib/components/icons/ArtifactIcon.d.ts +1 -0
  191. package/lib/components/icons/ArtifactIcon.js +2 -1
  192. package/lib/components/nbgrader/NbGradesDetails.d.ts +1 -1
  193. package/lib/components/progress/CreditsIndicator.d.ts +1 -0
  194. package/lib/components/progress/CreditsIndicator.js +0 -4
  195. package/lib/components/scheduler/ScheduleMenu.d.ts +1 -1
  196. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +3 -2
  197. package/lib/components/snapshots/SandboxSnapshotMenu.js +11 -15
  198. package/lib/components/snippets/SnippetDialog.d.ts +1 -0
  199. package/lib/components/snippets/SnippetDialog.js +0 -4
  200. package/lib/components/specs/SpecPayloadPreview.d.ts +34 -0
  201. package/lib/components/specs/SpecPayloadPreview.js +102 -0
  202. package/lib/components/tokens/SpaceVariantToken.d.ts +1 -1
  203. package/lib/context/ContextDistribution.d.ts +1 -1
  204. package/lib/context/ContextInspector.d.ts +2 -1
  205. package/lib/context/ContextPanel.d.ts +1 -1
  206. package/lib/context/ContextUsage.d.ts +1 -1
  207. package/lib/context/CostTracker.d.ts +1 -1
  208. package/lib/context/CostUsageChart.d.ts +1 -1
  209. package/lib/context/CostUsageChart.js +4 -4
  210. package/lib/context/MessageHistory.d.ts +3 -2
  211. package/lib/context/TokenUsageChart.d.ts +1 -1
  212. package/lib/context/TokenUsageChart.js +4 -4
  213. package/lib/examples/A2UiAgentExample.js +15 -6
  214. package/lib/examples/A2UiComponentsGalleryExample.d.ts +10 -0
  215. package/lib/examples/A2UiComponentsGalleryExample.js +24 -855
  216. package/lib/examples/A2UiContactCardExample.d.ts +10 -0
  217. package/lib/examples/A2UiContactCardExample.js +23 -170
  218. package/lib/examples/A2UiJupyterOutputExample.d.ts +3 -0
  219. package/lib/examples/A2UiJupyterOutputExample.js +792 -0
  220. package/lib/examples/A2UiRestaurantExample.d.ts +10 -0
  221. package/lib/examples/A2UiRestaurantExample.js +24 -179
  222. package/lib/examples/A2UiViewerExample.d.ts +10 -0
  223. package/lib/examples/A2UiViewerExample.js +24 -378
  224. package/lib/examples/AgUiAgenticExample.js +2 -4
  225. package/lib/examples/AgUiBackendToolRenderingExample.js +3 -5
  226. package/lib/examples/AgUiHaikuGenUiExample.js +2 -4
  227. package/lib/examples/AgUiHumanInTheLoopExample.js +2 -4
  228. package/lib/examples/AgUiSharedStateExample.js +2 -4
  229. package/lib/examples/AgUiToolsBasedGenUiExample.js +2 -4
  230. package/lib/examples/AgentA2AExample.d.ts +17 -0
  231. package/lib/examples/AgentA2AExample.js +56 -0
  232. package/lib/examples/AgentCheckpointsExample.d.ts +9 -10
  233. package/lib/examples/AgentCheckpointsExample.js +72 -54
  234. package/lib/examples/AgentCodeSandboxExample.d.ts +7 -7
  235. package/lib/examples/AgentCodeSandboxExample.js +93 -303
  236. package/lib/examples/AgentCodeSandboxesExample.d.ts +10 -0
  237. package/lib/examples/AgentCodeSandboxesExample.js +56 -162
  238. package/lib/examples/AgentCodemodeExample.d.ts +7 -2
  239. package/lib/examples/AgentCodemodeExample.js +60 -125
  240. package/lib/examples/AgentCompactionExample.js +19 -135
  241. package/lib/examples/AgentEvalsExample.js +34 -66
  242. package/lib/examples/AgentGuardrailsExample.js +64 -112
  243. package/lib/examples/AgentHooksExample.d.ts +11 -0
  244. package/lib/examples/AgentHooksExample.js +30 -67
  245. package/lib/examples/AgentInferenceProviderExample.js +8 -32
  246. package/lib/examples/AgentLoopExample.d.ts +4 -2
  247. package/lib/examples/AgentLoopExample.js +45 -93
  248. package/lib/examples/AgentMCPExample.js +30 -79
  249. package/lib/examples/AgentMemoryExample.js +21 -64
  250. package/lib/examples/AgentMonitoringExample.js +33 -94
  251. package/lib/examples/AgentNotificationsExample.js +56 -95
  252. package/lib/examples/AgentOtelExample.js +35 -88
  253. package/lib/examples/AgentOutputsExample.d.ts +2 -1
  254. package/lib/examples/AgentOutputsExample.js +16 -137
  255. package/lib/examples/AgentParametersExample.js +7 -17
  256. package/lib/examples/AgentSkillsExample.js +40 -154
  257. package/lib/examples/AgentSubagentsExample.d.ts +7 -6
  258. package/lib/examples/AgentSubagentsExample.js +80 -191
  259. package/lib/examples/AgentToolApprovalsExample.js +35 -91
  260. package/lib/examples/AgentTriggersExample.js +43 -59
  261. package/lib/examples/AgentspecsExample.js +4 -4
  262. package/lib/examples/CellExample.d.ts +1 -1
  263. package/lib/examples/ChatExample.d.ts +12 -5
  264. package/lib/examples/ChatExample.js +38 -13
  265. package/lib/examples/CopilotKitLexicalExample.d.ts +1 -0
  266. package/lib/examples/CopilotKitLexicalExample.js +4 -41
  267. package/lib/examples/CopilotKitNotebookExample.d.ts +10 -0
  268. package/lib/examples/CopilotKitNotebookExample.js +2 -14
  269. package/lib/examples/DecksAgent.d.ts +21 -0
  270. package/lib/examples/DecksAgent.js +23 -0
  271. package/lib/examples/DocumentPageAgent.d.ts +19 -0
  272. package/lib/examples/DocumentPageAgent.js +15 -0
  273. package/lib/examples/Lexical2Example.d.ts +2 -2
  274. package/lib/examples/Lexical2Example.js +17 -38
  275. package/lib/examples/LexicalAgentExample.d.ts +2 -1
  276. package/lib/examples/LexicalAgentExample.js +29 -102
  277. package/lib/examples/LexicalAgentSidebarExample.d.ts +16 -5
  278. package/lib/examples/LexicalAgentSidebarExample.js +99 -131
  279. package/lib/examples/LoopShellExample.d.ts +38 -0
  280. package/lib/examples/LoopShellExample.js +68 -0
  281. package/lib/examples/LoopWorkspaceEmbed.d.ts +50 -0
  282. package/lib/examples/LoopWorkspaceEmbed.js +73 -0
  283. package/lib/examples/LoopWorkspaceExample.d.ts +150 -0
  284. package/lib/examples/LoopWorkspaceExample.js +151 -0
  285. package/lib/examples/NotebookAgentExample.d.ts +13 -0
  286. package/lib/examples/NotebookAgentExample.js +36 -86
  287. package/lib/examples/NotebookAgentSidebarExample.d.ts +10 -4
  288. package/lib/examples/NotebookAgentSidebarExample.js +39 -83
  289. package/lib/examples/NotebookCollaborationExample.d.ts +1 -1
  290. package/lib/examples/NotebookCollaborationExample.js +108 -20
  291. package/lib/examples/NotebookExample.d.ts +1 -1
  292. package/lib/examples/NotebookExample.js +20 -10
  293. package/lib/examples/NotebookPageAgent.d.ts +23 -0
  294. package/lib/examples/NotebookPageAgent.js +17 -0
  295. package/lib/examples/components/ExampleWrapper.d.ts +5 -0
  296. package/lib/examples/components/ExampleWrapper.js +36 -28
  297. package/lib/examples/components/LexicalEditor.d.ts +1 -1
  298. package/lib/examples/components/LexicalEditor.js +4 -24
  299. package/lib/examples/components/haiku/HaikuDisplay.d.ts +1 -1
  300. package/lib/examples/components/haiku/InlineHaikuCard.d.ts +1 -1
  301. package/lib/examples/components/weather/InlineWeatherCard.d.ts +1 -1
  302. package/lib/examples/example-selector.js +26 -6
  303. package/lib/examples/hooks/useCreateAgentOnce.d.ts +41 -0
  304. package/lib/examples/hooks/useCreateAgentOnce.js +51 -0
  305. package/lib/examples/hooks/useExampleAgentProtocol.d.ts +35 -0
  306. package/lib/examples/hooks/useExampleAgentProtocol.js +63 -0
  307. package/lib/examples/hooks/useExampleAgentRuntime.d.ts +16 -16
  308. package/lib/examples/hooks/useExampleAgentRuntime.js +26 -25
  309. package/lib/examples/hooks/useExampleAgentRuntimes.js +45 -61
  310. package/lib/examples/hooks/useExampleJupyterAgent.d.ts +91 -0
  311. package/lib/examples/hooks/useExampleJupyterAgent.js +151 -0
  312. package/lib/examples/index.d.ts +4 -0
  313. package/lib/examples/index.js +6 -0
  314. package/lib/examples/lexical/editorConfig.d.ts +2 -75
  315. package/lib/examples/lexical/editorConfig.js +26 -48
  316. package/lib/examples/lexical/lexical-theme.css +65 -47
  317. package/lib/examples/main.js +450 -322
  318. package/lib/examples/scenes/A2UiComponentsGalleryScene.d.ts +3 -0
  319. package/lib/examples/scenes/A2UiComponentsGalleryScene.js +872 -0
  320. package/lib/examples/scenes/A2UiContactCardScene.d.ts +3 -0
  321. package/lib/examples/scenes/A2UiContactCardScene.js +188 -0
  322. package/lib/examples/scenes/A2UiRestaurantScene.d.ts +3 -0
  323. package/lib/examples/scenes/A2UiRestaurantScene.js +196 -0
  324. package/lib/examples/scenes/A2UiViewerScene.d.ts +3 -0
  325. package/lib/examples/scenes/A2UiViewerScene.js +395 -0
  326. package/lib/examples/utils/agentSummaryStore.d.ts +7 -1
  327. package/lib/examples/utils/agents/earthquake-detector.ipynb.json +1 -1
  328. package/lib/examples/utils/agents/earthquake-detector.lexical.json +1 -1
  329. package/lib/examples/utils/agents/sales-forecaster.ipynb.json +1 -1
  330. package/lib/examples/utils/agents/sales-forecaster.lexical.json +1 -1
  331. package/lib/examples/utils/agents/social-post-generator.ipynb.json +1 -1
  332. package/lib/examples/utils/agents/social-post-generator.lexical.json +1 -1
  333. package/lib/examples/utils/exampleSurfaces.d.ts +31 -0
  334. package/lib/examples/utils/exampleSurfaces.js +38 -0
  335. package/lib/examples/utils/jupyterSandboxUrl.d.ts +27 -0
  336. package/lib/examples/utils/jupyterSandboxUrl.js +55 -0
  337. package/lib/examples/utils/localUrl.d.ts +2 -0
  338. package/lib/examples/utils/localUrl.js +49 -0
  339. package/lib/examples/utils/notebookToolbarItems.d.ts +46 -0
  340. package/lib/examples/utils/notebookToolbarItems.js +129 -0
  341. package/lib/examples/utils/runtimeTargetStore.d.ts +40 -1
  342. package/lib/examples/utils/runtimeTargetStore.js +82 -1
  343. package/lib/examples/utils/themedProvider.d.ts +7 -0
  344. package/lib/examples/utils/themedProvider.js +57 -4
  345. package/lib/examples/utils/useExampleAgentRuntimesUrl.js +30 -5
  346. package/lib/examples/utils/waitForAgent.d.ts +23 -0
  347. package/lib/examples/utils/waitForAgent.js +24 -0
  348. package/lib/examples2/CellExample.d.ts +1 -1
  349. package/lib/examples2/DatalayerNotebookExample.d.ts +1 -1
  350. package/lib/examples2/NotebookExample.d.ts +1 -1
  351. package/lib/examples2/NotebookMutationsKernel.d.ts +1 -1
  352. package/lib/examples2/NotebookMutationsServiceManager.d.ts +1 -1
  353. package/lib/examples2/main.js +24 -4
  354. package/lib/extensions/A2UIExtension.d.ts +1 -1
  355. package/lib/hooks/index.d.ts +8 -5
  356. package/lib/hooks/index.js +20 -5
  357. package/lib/hooks/useAgentRuntimes.d.ts +49 -22
  358. package/lib/hooks/useAgentRuntimes.js +214 -90
  359. package/lib/hooks/useAgentsCatalog.js +32 -4
  360. package/lib/hooks/useBrowserAgent.d.ts +26 -0
  361. package/lib/hooks/useBrowserAgent.js +75 -0
  362. package/lib/hooks/useBrowserInference.d.ts +27 -0
  363. package/lib/hooks/useBrowserInference.js +67 -0
  364. package/lib/hooks/useCheckpoints.d.ts +8 -17
  365. package/lib/hooks/useCheckpoints.js +25 -59
  366. package/lib/hooks/useConfig.d.ts +1 -1
  367. package/lib/hooks/useConfig.js +5 -1
  368. package/lib/hooks/useContextSnapshot.d.ts +18 -7
  369. package/lib/hooks/useContextSnapshot.js +14 -10
  370. package/lib/hooks/useNotifications.d.ts +11 -11
  371. package/lib/hooks/useNotifications.js +1 -1
  372. package/lib/hooks/useProjects.d.ts +7 -19
  373. package/lib/hooks/useProjects.js +5 -5
  374. package/lib/hooks/useSkills.d.ts +0 -1
  375. package/lib/hooks/useSkills.js +6 -2
  376. package/lib/hooks/useToolApprovals.d.ts +8 -8
  377. package/lib/hooks/useToolApprovals.js +3 -3
  378. package/lib/identity/AgentIdentity.d.ts +9 -2
  379. package/lib/index.d.ts +1 -0
  380. package/lib/index.js +4 -0
  381. package/lib/jupyter/index.d.ts +2 -1
  382. package/lib/jupyter/index.js +2 -1
  383. package/lib/jupyter/serverExecution.d.ts +78 -0
  384. package/lib/jupyter/serverExecution.js +258 -0
  385. package/lib/jupyter/useResumeServerExecutions.d.ts +11 -0
  386. package/lib/jupyter/useResumeServerExecutions.js +64 -0
  387. package/lib/lexical/ChatInlinePlugin.d.ts +33 -0
  388. package/lib/lexical/ChatInlinePlugin.js +0 -36
  389. package/lib/loop/core/focusRequests.d.ts +10 -0
  390. package/lib/loop/core/focusRequests.js +46 -0
  391. package/lib/loop/core/index.d.ts +903 -0
  392. package/lib/loop/core/index.js +264 -0
  393. package/lib/loop/core/promptStore.d.ts +44 -0
  394. package/lib/loop/core/promptStore.js +63 -0
  395. package/lib/loop/core/surfaceRequests.d.ts +33 -0
  396. package/lib/loop/core/surfaceRequests.js +29 -0
  397. package/lib/loop/core/toolbar.d.ts +28 -0
  398. package/lib/loop/core/toolbar.js +59 -0
  399. package/lib/loop/embed/LoopEmbed.d.ts +57 -0
  400. package/lib/loop/embed/LoopEmbed.js +124 -0
  401. package/lib/loop/extensions.d.ts +10 -0
  402. package/lib/loop/extensions.js +49 -0
  403. package/lib/loop/index.d.ts +68 -0
  404. package/lib/loop/index.js +87 -0
  405. package/lib/loop/plugins/a2a-sidebar/A2ASidebar.d.ts +48 -0
  406. package/lib/loop/plugins/a2a-sidebar/A2ASidebar.js +190 -0
  407. package/lib/loop/plugins/a2a-sidebar/index.d.ts +5 -0
  408. package/lib/loop/plugins/a2a-sidebar/index.js +39 -0
  409. package/lib/loop/plugins/a2ui/A2uiView.d.ts +12 -0
  410. package/lib/loop/plugins/a2ui/A2uiView.js +97 -0
  411. package/lib/loop/plugins/a2ui/index.d.ts +3 -0
  412. package/lib/loop/plugins/a2ui/index.js +50 -0
  413. package/lib/loop/plugins/a2ui-scene/index.d.ts +36 -0
  414. package/lib/loop/plugins/a2ui-scene/index.js +28 -0
  415. package/lib/loop/plugins/agent-a2a/index.d.ts +3 -0
  416. package/lib/loop/plugins/agent-a2a/index.js +26 -0
  417. package/lib/loop/plugins/agent-a2ui/index.d.ts +3 -0
  418. package/lib/loop/plugins/agent-a2ui/index.js +42 -0
  419. package/lib/loop/plugins/agent-a2ui-jupyter-output/index.d.ts +3 -0
  420. package/lib/loop/plugins/agent-a2ui-jupyter-output/index.js +53 -0
  421. package/lib/loop/plugins/agent-capacity/index.d.ts +39 -0
  422. package/lib/loop/plugins/agent-capacity/index.js +52 -0
  423. package/lib/loop/plugins/agent-checkpoints/index.d.ts +3 -0
  424. package/lib/loop/plugins/agent-checkpoints/index.js +26 -0
  425. package/lib/loop/plugins/agent-code-sandbox/index.d.ts +3 -0
  426. package/lib/loop/plugins/agent-code-sandbox/index.js +24 -0
  427. package/lib/loop/plugins/agent-code-sandboxes/index.d.ts +13 -0
  428. package/lib/loop/plugins/agent-code-sandboxes/index.js +85 -0
  429. package/lib/loop/plugins/agent-codemode/index.d.ts +5 -0
  430. package/lib/loop/plugins/agent-codemode/index.js +41 -0
  431. package/lib/loop/plugins/agent-compaction/index.d.ts +10 -0
  432. package/lib/loop/plugins/agent-compaction/index.js +34 -0
  433. package/lib/loop/plugins/agent-evals/index.d.ts +3 -0
  434. package/lib/loop/plugins/agent-evals/index.js +25 -0
  435. package/lib/loop/plugins/agent-guardrails/index.d.ts +3 -0
  436. package/lib/loop/plugins/agent-guardrails/index.js +25 -0
  437. package/lib/loop/plugins/agent-hooks/index.d.ts +3 -0
  438. package/lib/loop/plugins/agent-hooks/index.js +28 -0
  439. package/lib/loop/plugins/agent-inference/index.d.ts +7 -0
  440. package/lib/loop/plugins/agent-inference/index.js +29 -0
  441. package/lib/loop/plugins/agent-mcp/index.d.ts +3 -0
  442. package/lib/loop/plugins/agent-mcp/index.js +25 -0
  443. package/lib/loop/plugins/agent-memory/index.d.ts +3 -0
  444. package/lib/loop/plugins/agent-memory/index.js +25 -0
  445. package/lib/loop/plugins/agent-monitoring/index.d.ts +3 -0
  446. package/lib/loop/plugins/agent-monitoring/index.js +25 -0
  447. package/lib/loop/plugins/agent-notifications/index.d.ts +3 -0
  448. package/lib/loop/plugins/agent-notifications/index.js +25 -0
  449. package/lib/loop/plugins/agent-otel/index.d.ts +3 -0
  450. package/lib/loop/plugins/agent-otel/index.js +25 -0
  451. package/lib/loop/plugins/agent-outputs/index.d.ts +3 -0
  452. package/lib/loop/plugins/agent-outputs/index.js +25 -0
  453. package/lib/loop/plugins/agent-parameters/index.d.ts +3 -0
  454. package/lib/loop/plugins/agent-parameters/index.js +25 -0
  455. package/lib/loop/plugins/agent-skills/index.d.ts +3 -0
  456. package/lib/loop/plugins/agent-skills/index.js +25 -0
  457. package/lib/loop/plugins/agent-subagents/index.d.ts +3 -0
  458. package/lib/loop/plugins/agent-subagents/index.js +25 -0
  459. package/lib/loop/plugins/agent-tool-approvals/index.d.ts +11 -0
  460. package/lib/loop/plugins/agent-tool-approvals/index.js +38 -0
  461. package/lib/loop/plugins/agent-triggers/index.d.ts +3 -0
  462. package/lib/loop/plugins/agent-triggers/index.js +26 -0
  463. package/lib/loop/plugins/agents/AgentSummaryPanel.d.ts +20 -0
  464. package/lib/loop/plugins/agents/AgentSummaryPanel.js +50 -0
  465. package/lib/loop/plugins/agents/AnonymousKeyBadge.d.ts +35 -0
  466. package/lib/loop/plugins/agents/AnonymousKeyBadge.js +53 -0
  467. package/lib/loop/plugins/agents/DatalayerAgentBridge.d.ts +24 -0
  468. package/lib/loop/plugins/agents/DatalayerAgentBridge.js +102 -0
  469. package/lib/loop/plugins/agents/DatalayerAgentMount.d.ts +18 -0
  470. package/lib/loop/plugins/agents/DatalayerAgentMount.js +12 -0
  471. package/lib/loop/plugins/agents/SandboxSelector.d.ts +18 -0
  472. package/lib/loop/plugins/agents/SandboxSelector.js +99 -0
  473. package/lib/loop/plugins/agents/SandboxStatusBridge.d.ts +19 -0
  474. package/lib/loop/plugins/agents/SandboxStatusBridge.js +23 -0
  475. package/lib/loop/plugins/agents/SandboxView.d.ts +11 -0
  476. package/lib/loop/plugins/agents/SandboxView.js +43 -0
  477. package/lib/loop/plugins/agents/TeamMemberPicker.d.ts +17 -0
  478. package/lib/loop/plugins/agents/TeamMemberPicker.js +60 -0
  479. package/lib/loop/plugins/agents/agentIcons.d.ts +23 -0
  480. package/lib/loop/plugins/agents/agentIcons.js +88 -0
  481. package/lib/loop/plugins/agents/browserService.d.ts +50 -0
  482. package/lib/loop/plugins/agents/browserService.js +233 -0
  483. package/lib/loop/plugins/agents/index.d.ts +13 -0
  484. package/lib/loop/plugins/agents/index.js +17 -0
  485. package/lib/loop/plugins/agents/plugin.d.ts +91 -0
  486. package/lib/loop/plugins/agents/plugin.js +201 -0
  487. package/lib/loop/plugins/agents/service.d.ts +99 -0
  488. package/lib/loop/plugins/agents/service.js +167 -0
  489. package/lib/loop/plugins/agents/specSubagents.d.ts +18 -0
  490. package/lib/loop/plugins/agents/specSubagents.js +33 -0
  491. package/lib/loop/plugins/agents/switchable.d.ts +107 -0
  492. package/lib/loop/plugins/agents/switchable.js +405 -0
  493. package/lib/loop/plugins/agents/team.d.ts +87 -0
  494. package/lib/loop/plugins/agents/team.js +143 -0
  495. package/lib/loop/plugins/agents/useSandboxService.d.ts +11 -0
  496. package/lib/loop/plugins/agents/useSandboxService.js +36 -0
  497. package/lib/loop/plugins/agents/useTeamSelection.d.ts +10 -0
  498. package/lib/loop/plugins/agents/useTeamSelection.js +27 -0
  499. package/lib/loop/plugins/agentspecs/AgentspecPicker.d.ts +15 -0
  500. package/lib/loop/plugins/agentspecs/AgentspecPicker.js +90 -0
  501. package/lib/loop/plugins/agentspecs/index.d.ts +6 -0
  502. package/lib/loop/plugins/agentspecs/index.js +63 -0
  503. package/lib/loop/plugins/chat/ChatView.d.ts +20 -0
  504. package/lib/loop/plugins/chat/ChatView.js +1679 -0
  505. package/lib/loop/plugins/chat/chatViewTools.d.ts +41 -0
  506. package/lib/loop/plugins/chat/chatViewTools.js +92 -0
  507. package/lib/loop/plugins/chat/index.d.ts +111 -0
  508. package/lib/loop/plugins/chat/index.js +143 -0
  509. package/lib/loop/plugins/chat/turnState.d.ts +41 -0
  510. package/lib/loop/plugins/chat/turnState.js +90 -0
  511. package/lib/loop/plugins/chat-extras/index.d.ts +14 -0
  512. package/lib/loop/plugins/chat-extras/index.js +51 -0
  513. package/lib/loop/plugins/chat-header/HeaderView.d.ts +13 -0
  514. package/lib/loop/plugins/chat-header/HeaderView.js +6 -0
  515. package/lib/loop/plugins/chat-header/index.d.ts +3 -0
  516. package/lib/loop/plugins/chat-header/index.js +21 -0
  517. package/lib/loop/plugins/chat-view/index.d.ts +10 -0
  518. package/lib/loop/plugins/chat-view/index.js +29 -0
  519. package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.d.ts +27 -0
  520. package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.js +174 -0
  521. package/lib/loop/plugins/checkpoints-sidebar/index.d.ts +5 -0
  522. package/lib/loop/plugins/checkpoints-sidebar/index.js +39 -0
  523. package/lib/loop/plugins/commands/index.d.ts +20 -0
  524. package/lib/loop/plugins/commands/index.js +148 -0
  525. package/lib/loop/plugins/decks/DeckSurface.d.ts +10 -0
  526. package/lib/loop/plugins/decks/DeckSurface.js +6 -0
  527. package/lib/loop/plugins/decks/DecksMenu.d.ts +11 -0
  528. package/lib/loop/plugins/decks/DecksMenu.js +42 -0
  529. package/lib/loop/plugins/decks/index.d.ts +19 -0
  530. package/lib/loop/plugins/decks/index.js +133 -0
  531. package/lib/loop/plugins/decks/surface.d.ts +7 -0
  532. package/lib/loop/plugins/decks/surface.js +11 -0
  533. package/lib/loop/plugins/document/DocumentView.d.ts +12 -0
  534. package/lib/loop/plugins/document/DocumentView.js +68 -0
  535. package/lib/loop/plugins/document/index.d.ts +3 -0
  536. package/lib/loop/plugins/document/index.js +86 -0
  537. package/lib/loop/plugins/document/openingDocument.d.ts +28 -0
  538. package/lib/loop/plugins/document/openingDocument.js +122 -0
  539. package/lib/loop/plugins/document-toolbar/SandboxStatusItem.d.ts +16 -0
  540. package/lib/loop/plugins/document-toolbar/SandboxStatusItem.js +31 -0
  541. package/lib/loop/plugins/document-toolbar/index.d.ts +4 -0
  542. package/lib/loop/plugins/document-toolbar/index.js +35 -0
  543. package/lib/loop/plugins/document-toolbar/names.d.ts +6 -0
  544. package/lib/loop/plugins/document-toolbar/names.js +10 -0
  545. package/lib/loop/plugins/document-toolbar/plugin.d.ts +2 -0
  546. package/lib/loop/plugins/document-toolbar/plugin.js +38 -0
  547. package/lib/loop/plugins/document-view/index.d.ts +10 -0
  548. package/lib/loop/plugins/document-view/index.js +28 -0
  549. package/lib/loop/plugins/graph/GraphToggle.d.ts +17 -0
  550. package/lib/loop/plugins/graph/GraphToggle.js +22 -0
  551. package/lib/loop/plugins/graph/GraphView.d.ts +16 -0
  552. package/lib/loop/plugins/graph/GraphView.js +6 -0
  553. package/lib/loop/plugins/graph/index.d.ts +5 -0
  554. package/lib/loop/plugins/graph/index.js +80 -0
  555. package/lib/loop/plugins/graph/viewType.d.ts +10 -0
  556. package/lib/loop/plugins/graph/viewType.js +14 -0
  557. package/lib/loop/plugins/input-prompt/ComposerView.d.ts +15 -0
  558. package/lib/loop/plugins/input-prompt/ComposerView.js +25 -0
  559. package/lib/loop/plugins/input-prompt/index.d.ts +25 -0
  560. package/lib/loop/plugins/input-prompt/index.js +26 -0
  561. package/lib/loop/plugins/models/index.d.ts +3 -0
  562. package/lib/loop/plugins/models/index.js +49 -0
  563. package/lib/loop/plugins/notebook/NotebookView.d.ts +9 -0
  564. package/lib/loop/plugins/notebook/NotebookView.js +189 -0
  565. package/lib/loop/plugins/notebook/index.d.ts +3 -0
  566. package/lib/loop/plugins/notebook/index.js +91 -0
  567. package/lib/loop/plugins/notebook/openingNotebook.d.ts +72 -0
  568. package/lib/loop/plugins/notebook/openingNotebook.js +90 -0
  569. package/lib/loop/plugins/notebook-toolbar/index.d.ts +4 -0
  570. package/lib/loop/plugins/notebook-toolbar/index.js +45 -0
  571. package/lib/loop/plugins/notebook-toolbar/items.d.ts +10 -0
  572. package/lib/loop/plugins/notebook-toolbar/items.js +45 -0
  573. package/lib/loop/plugins/notebook-toolbar/names.d.ts +9 -0
  574. package/lib/loop/plugins/notebook-toolbar/names.js +13 -0
  575. package/lib/loop/plugins/notebook-toolbar/plugin.d.ts +2 -0
  576. package/lib/loop/plugins/notebook-toolbar/plugin.js +24 -0
  577. package/lib/loop/plugins/notebook-view/index.d.ts +10 -0
  578. package/lib/loop/plugins/notebook-view/index.js +30 -0
  579. package/lib/loop/plugins/page-layout/TurnPanel.d.ts +25 -0
  580. package/lib/loop/plugins/page-layout/TurnPanel.js +126 -0
  581. package/lib/loop/plugins/page-layout/index.d.ts +71 -0
  582. package/lib/loop/plugins/page-layout/index.js +160 -0
  583. package/lib/loop/plugins/plugins-panel/index.d.ts +14 -0
  584. package/lib/loop/plugins/plugins-panel/index.js +74 -0
  585. package/lib/loop/plugins/prompt/NewChatAction.d.ts +19 -0
  586. package/lib/loop/plugins/prompt/NewChatAction.js +10 -0
  587. package/lib/loop/plugins/prompt/index.d.ts +11 -0
  588. package/lib/loop/plugins/prompt/index.js +73 -0
  589. package/lib/loop/plugins/shell/editorChoice.d.ts +31 -0
  590. package/lib/loop/plugins/shell/editorChoice.js +58 -0
  591. package/lib/loop/plugins/shell/index.d.ts +47 -0
  592. package/lib/loop/plugins/shell/index.js +142 -0
  593. package/lib/loop/plugins/shell/useEditorPreviews.d.ts +32 -0
  594. package/lib/loop/plugins/shell/useEditorPreviews.js +217 -0
  595. package/lib/loop/plugins/subagent-activity/SubagentPulse.d.ts +16 -0
  596. package/lib/loop/plugins/subagent-activity/SubagentPulse.js +45 -0
  597. package/lib/loop/plugins/subagent-activity/index.d.ts +12 -0
  598. package/lib/loop/plugins/subagent-activity/index.js +42 -0
  599. package/lib/loop/plugins/view-switch/index.d.ts +46 -0
  600. package/lib/loop/plugins/view-switch/index.js +68 -0
  601. package/lib/loop/plugins/window-frame/WindowFrame.d.ts +48 -0
  602. package/lib/loop/plugins/window-frame/WindowFrame.js +63 -0
  603. package/lib/loop/plugins/window-frame/index.d.ts +6 -0
  604. package/lib/loop/plugins/window-frame/index.js +79 -0
  605. package/lib/loop/plugins/window-frame/slots.d.ts +26 -0
  606. package/lib/loop/plugins/window-frame/slots.js +30 -0
  607. package/lib/loop/presets.d.ts +181 -0
  608. package/lib/loop/presets.js +141 -0
  609. package/lib/loop/shell/LoopWorkspace.d.ts +109 -0
  610. package/lib/loop/shell/LoopWorkspace.js +231 -0
  611. package/lib/loop/shell/PluginToggles.d.ts +21 -0
  612. package/lib/loop/shell/PluginToggles.js +41 -0
  613. package/lib/loop/shell/ViewSwitcher.d.ts +24 -0
  614. package/lib/loop/shell/ViewSwitcher.js +43 -0
  615. package/lib/loop/shell/WorkspaceFullScreenAction.d.ts +25 -0
  616. package/lib/loop/shell/WorkspaceFullScreenAction.js +24 -0
  617. package/lib/loop/shell/index.d.ts +10 -0
  618. package/lib/loop/shell/index.js +14 -0
  619. package/lib/loop/shell/useWorkspaceFullScreen.d.ts +93 -0
  620. package/lib/loop/shell/useWorkspaceFullScreen.js +167 -0
  621. package/lib/loop-example-main.d.ts +1 -0
  622. package/lib/loop-example-main.js +42 -0
  623. package/lib/loop-main.d.ts +1 -0
  624. package/lib/loop-main.js +138 -0
  625. package/lib/mcp/McpServerManager.d.ts +1 -1
  626. package/lib/models/CodeSandboxSnapshotDTO.d.ts +1 -1
  627. package/lib/models/CodeSandboxVariant.d.ts +13 -5
  628. package/lib/models/CodeSandboxVariant.js +17 -5
  629. package/lib/models/Content.d.ts +26 -0
  630. package/lib/models/Deck.d.ts +14 -0
  631. package/lib/models/Environment.d.ts +678 -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/ItemType.d.ts +1 -1
  637. package/lib/models/Library.d.ts +0 -2
  638. package/lib/models/Notebook.d.ts +0 -2
  639. package/lib/models/ProjectDTO.d.ts +2 -2
  640. package/lib/models/ProjectDTO.js +4 -4
  641. package/lib/models/Runtime.d.ts +17 -11
  642. package/lib/models/RuntimeDTO.d.ts +16 -7
  643. package/lib/models/RuntimeDTO.js +9 -9
  644. package/lib/models/Space.d.ts +10 -0
  645. package/lib/models/Space.js +1 -1
  646. package/lib/models/SpaceDTO.d.ts +1 -1
  647. package/lib/models/SpaceItem.d.ts +2 -2
  648. package/lib/models/environments.generated.d.ts +141 -0
  649. package/lib/models/environments.generated.js +13 -0
  650. package/lib/models/index.d.ts +1 -1
  651. package/lib/models/index.js +1 -1
  652. package/lib/protocols/A2AAdapter.d.ts +39 -6
  653. package/lib/protocols/A2AAdapter.js +180 -11
  654. package/lib/protocols/ACPAdapter.js +40 -37
  655. package/lib/protocols/AGUIAdapter.d.ts +14 -0
  656. package/lib/protocols/AGUIAdapter.js +34 -9
  657. package/lib/protocols/BrowserAgentAdapter.d.ts +125 -0
  658. package/lib/protocols/BrowserAgentAdapter.js +317 -0
  659. package/lib/protocols/VercelAIAdapter.d.ts +10 -0
  660. package/lib/protocols/VercelAIAdapter.js +27 -7
  661. package/lib/protocols/index.d.ts +1 -0
  662. package/lib/protocols/index.js +1 -0
  663. package/lib/runtimes/actions.d.ts +8 -3
  664. package/lib/runtimes/actions.js +46 -14
  665. package/lib/runtimes/apis.d.ts +13 -4
  666. package/lib/runtimes/browser/agent.d.ts +54 -0
  667. package/lib/runtimes/browser/agent.js +63 -0
  668. package/lib/runtimes/browser/anonymousToken.d.ts +121 -0
  669. package/lib/runtimes/browser/anonymousToken.js +300 -0
  670. package/lib/runtimes/browser/frontendTools.d.ts +61 -0
  671. package/lib/runtimes/browser/frontendTools.js +152 -0
  672. package/lib/runtimes/browser/index.d.ts +11 -0
  673. package/lib/runtimes/browser/index.js +20 -0
  674. package/lib/runtimes/browser/model.d.ts +52 -0
  675. package/lib/runtimes/browser/model.js +110 -0
  676. package/lib/runtimes/browser/protocol.d.ts +54 -0
  677. package/lib/runtimes/browser/protocol.js +35 -0
  678. package/lib/runtimes/browser/subagents.d.ts +131 -0
  679. package/lib/runtimes/browser/subagents.js +241 -0
  680. package/lib/runtimes/index.d.ts +3 -0
  681. package/lib/runtimes/index.js +3 -0
  682. package/lib/runtimes/lifecycle.d.ts +76 -0
  683. package/lib/runtimes/lifecycle.js +99 -0
  684. package/lib/runtimes/variants.d.ts +172 -0
  685. package/lib/runtimes/variants.js +187 -0
  686. package/lib/services/reconnectToRuntime.d.ts +2 -2
  687. package/lib/services/reconnectToRuntime.js +3 -3
  688. package/lib/services/sandboxServiceManagers.d.ts +2 -2
  689. package/lib/services/sandboxServiceManagers.js +11 -11
  690. package/lib/specs/agents/agents.d.ts +129 -112
  691. package/lib/specs/agents/agents.js +8200 -5044
  692. package/lib/specs/evals.js +9 -0
  693. package/lib/specs/frontendTools.d.ts +4 -0
  694. package/lib/specs/frontendTools.js +77 -3
  695. package/lib/specs/mcpServers.d.ts +1 -0
  696. package/lib/specs/mcpServers.js +38 -15
  697. package/lib/specs/models.d.ts +18 -0
  698. package/lib/specs/models.js +154 -0
  699. package/lib/specs/outputs.d.ts +2 -0
  700. package/lib/specs/outputs.js +31 -0
  701. package/lib/specs/personas.js +1 -1
  702. package/lib/specs/skills.js +7 -7
  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 +14 -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/tools/adapters/commands/index.js +5 -0
  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/outputs.d.ts +2 -0
  744. package/lib/types/protocol.d.ts +7 -2
  745. package/lib/types/stream.d.ts +48 -3
  746. package/lib/types/stream.js +5 -0
  747. package/lib/types/teams.d.ts +102 -4
  748. package/lib/types/tool-approvals.d.ts +1 -1
  749. package/lib/types/tools.d.ts +8 -2
  750. package/lib/utils/utils.js +7 -1
  751. package/package.json +376 -361
  752. package/scripts/codegen/compose.py +208 -0
  753. package/scripts/codegen/generate_agents.py +202 -31
  754. package/scripts/codegen/generate_evals.py +2 -0
  755. package/scripts/codegen/generate_frontend_tools.py +35 -6
  756. package/scripts/codegen/generate_mcp_servers.py +2 -2
  757. package/scripts/codegen/generate_models.py +40 -15
  758. package/scripts/codegen/generate_outputs.py +2 -0
  759. package/scripts/codegen/generate_sandbox_agents.py +76 -62
  760. package/scripts/codegen/generate_skills.py +2 -2
  761. package/scripts/codegen/generate_teams.py +178 -4
  762. package/scripts/codegen/generate_tools.py +6 -4
  763. package/scripts/gen_workers.py +278 -110
  764. package/scripts/generate-environments-types.py +404 -0
  765. package/lib/chat/prompt/InputFooter.d.ts +0 -58
  766. package/lib/chat/prompt/InputFooter.js +0 -194
  767. package/lib/chat/prompt/InputPromptFooter.d.ts +0 -27
  768. package/lib/chat/prompt/InputPromptFooter.js +0 -15
  769. package/lib/chat/prompt/InputPromptHeader.d.ts +0 -15
  770. package/lib/chat/prompt/InputPromptHeader.js +0 -15
  771. package/lib/chat/usage/TokenUsageBar.d.ts +0 -8
  772. package/lib/hooks/useRuntimes.d.ts +0 -5
  773. package/lib/hooks/useRuntimes.js +0 -34
  774. package/lib/jupyter/kernelsHandler.d.ts +0 -8
  775. package/lib/jupyter/kernelsHandler.js +0 -39
  776. package/lib/models/Dataset.d.ts +0 -16
  777. package/lib/utils/Cells.d.ts +0 -2
  778. package/lib/utils/Cells.js +0 -28
  779. /package/lib/models/{Dataset.js → Deck.js} +0 -0
@@ -0,0 +1,225 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState } from 'react';
3
+ import { Box } from '@datalayer/primer-addons';
4
+ import { useTypingPlaceholder } from './useTypingPlaceholder';
5
+ import { InPromptHeader } from './header';
6
+ import { InPromptFooter } from './footer';
7
+ import { InputPromptText } from './InputPromptText';
8
+ import { InputPromptLexical } from './InputPromptLexical';
9
+ import { usePromptHistory } from './promptHistory';
10
+ /**
11
+ * InputPromptBase — the editor, its header and its footer with header, input area, and footer.
12
+ */
13
+ export function InputPromptBase({ variant = 'lexical', placeholder = 'Ask anything…', typingSuggestions, isLoading = false, isKernelBusy = false, onSend, onStop, autoFocus = false, focusTrigger, showBorderTop = true, showBackground = true, padding = 3, disabled = false, readOnly = false, mentionableAgents, promptHistory, sx, value: controlledValue, onChange: controlledOnChange, headerContent, headerStacks, footerContent, footerStacks, footerRightContent, }) {
14
+ // ---- Controlled / uncontrolled state -----------------------------------
15
+ const [internalInput, setInternalInput] = useState('');
16
+ const input = controlledValue !== undefined ? controlledValue : internalInput;
17
+ const setInput = controlledOnChange !== undefined ? controlledOnChange : setInternalInput;
18
+ // ---- Prompt history ----------------------------------------------------
19
+ const { remember, edited, navigate } = usePromptHistory(promptHistory);
20
+ /*
21
+ * The value as of now, for handlers that must not be rebuilt on every
22
+ * keystroke: the Lexical variant registers its arrow-key commands afresh
23
+ * whenever its handler changes, and a handler closing over `input` would
24
+ * change on each character typed.
25
+ */
26
+ const valueRef = useRef(input);
27
+ valueRef.current = input;
28
+ /*
29
+ * Typing ends a walk through the history — but this component's own
30
+ * writes are not typing. The editors report back whatever value is pushed
31
+ * into them, and that report says the same text that was just set, which
32
+ * is how the two are told apart.
33
+ */
34
+ const handleChange = useCallback((next) => {
35
+ if (next !== valueRef.current) {
36
+ edited();
37
+ }
38
+ setInput(next);
39
+ }, [edited, setInput]);
40
+ /** A step through the history: the box shows it, or the key is left alone. */
41
+ const navigateHistory = useCallback((direction) => {
42
+ const text = navigate(direction, valueRef.current);
43
+ if (text === null) {
44
+ return false;
45
+ }
46
+ setInput(text);
47
+ return true;
48
+ }, [navigate, setInput]);
49
+ // ---- Refs (text variant only) ------------------------------------------
50
+ const inputRef = useRef(null);
51
+ // ---- Typed placeholder --------------------------------------------------
52
+ /*
53
+ * Focus for the whole prompt, not for the editor alone.
54
+ *
55
+ * React's focus events bubble, so one pair of handlers on the container
56
+ * covers both variants and the controls in the footer — and somebody
57
+ * choosing a model from a menu is interacting with this prompt just as
58
+ * surely as somebody typing in it. `relatedTarget` is what distinguishes
59
+ * leaving the prompt from moving around inside it; without that check,
60
+ * every step between the editor and a button would restart the animation.
61
+ */
62
+ const [focused, setFocused] = useState(false);
63
+ /*
64
+ * The focus this prompt gave itself does not count as somebody arriving.
65
+ *
66
+ * `autoFocus` puts the caret in the box on mount — which is right, it is why
67
+ * the workspace exists — and it would otherwise stop the animation before
68
+ * its first character, on exactly the pages that most need the invitation. A
69
+ * click, a tab-in, or any later focus is a person; the first one is us.
70
+ */
71
+ const selfFocused = useRef(autoFocus);
72
+ /** The whole prompt — editor, footer controls and all. */
73
+ const containerRef = useRef(null);
74
+ /**
75
+ * Bumped to ask the Lexical editor for the caret.
76
+ *
77
+ * That editor is not focused by calling a method on a ref: it needs the
78
+ * retry loop in `AutoFocusPlugin`, which gives up if somebody is typing
79
+ * elsewhere. A counter re-runs the whole of it.
80
+ */
81
+ const [lexicalFocusSignal, setLexicalFocusSignal] = useState(0);
82
+ const animatedPlaceholder = useTypingPlaceholder({
83
+ phrases: typingSuggestions ?? [],
84
+ // Nothing to stand in for once there is something typed, and nothing to
85
+ // invite while the agent is answering or the box is inert.
86
+ enabled: !focused && !input && !isLoading && !disabled && !readOnly,
87
+ idle: placeholder,
88
+ });
89
+ // ---- Auto-focus --------------------------------------------------------
90
+ useEffect(() => {
91
+ if (autoFocus && variant === 'text' && inputRef.current) {
92
+ const t = setTimeout(() => inputRef.current?.focus(), 100);
93
+ return () => clearTimeout(t);
94
+ }
95
+ }, [autoFocus, variant]);
96
+ // ---- Refocus when focusTrigger changes ---------------------------------
97
+ // Both variants, for the same reason as the turn-end refocus below: the
98
+ // default variant is `lexical`, so a caller bumping this got nothing.
99
+ useEffect(() => {
100
+ if (focusTrigger === undefined || focusTrigger <= 0) {
101
+ return;
102
+ }
103
+ if (variant === 'lexical') {
104
+ setLexicalFocusSignal(signal => signal + 1);
105
+ return;
106
+ }
107
+ if (!inputRef.current) {
108
+ return;
109
+ }
110
+ const t = setTimeout(() => inputRef.current?.focus(), 150);
111
+ return () => clearTimeout(t);
112
+ }, [focusTrigger, variant]);
113
+ /*
114
+ * The caret comes back when the turn ends.
115
+ *
116
+ * A turn finishing is an invitation to say the next thing, and having to
117
+ * click into the box first is a small tax charged on every single exchange.
118
+ *
119
+ * It used to be `variant === 'text'` only — and the default variant is
120
+ * `lexical`, so on every surface that ships the real prompt this did
121
+ * nothing at all. Both are handled now: the textarea takes focus directly,
122
+ * and the Lexical editor is asked through a signal, because focusing that
123
+ * one is a retry loop rather than a method call and it already lives in
124
+ * `AutoFocusPlugin`.
125
+ *
126
+ * Not if the reader has gone somewhere else in the meantime. Waiting out a
127
+ * turn is exactly when somebody edits a cell or scrolls the notebook, and
128
+ * snatching the caret out of that would be a far worse bug than the one
129
+ * being fixed. `document.body` means nobody is anywhere; anything inside
130
+ * this prompt is already us.
131
+ */
132
+ const wasLoadingRef = useRef(false);
133
+ useEffect(() => {
134
+ const justFinished = wasLoadingRef.current && !isLoading;
135
+ // Recorded before any early return: leaving it below one is how this kind
136
+ // of edge-trigger quietly stops firing.
137
+ wasLoadingRef.current = isLoading;
138
+ if (!justFinished || disabled || readOnly) {
139
+ return;
140
+ }
141
+ const active = document.activeElement;
142
+ const elsewhere = active &&
143
+ active !== document.body &&
144
+ !containerRef.current?.contains(active);
145
+ if (elsewhere) {
146
+ return;
147
+ }
148
+ if (variant === 'lexical') {
149
+ setLexicalFocusSignal(signal => signal + 1);
150
+ return;
151
+ }
152
+ const t = setTimeout(() => inputRef.current?.focus(), 50);
153
+ return () => clearTimeout(t);
154
+ }, [isLoading, variant, disabled, readOnly]);
155
+ // ---- Send / Stop handlers ----------------------------------------------
156
+ const handleSend = useCallback(() => {
157
+ if (!input.trim() || isLoading || disabled || readOnly)
158
+ return;
159
+ const message = input.trim();
160
+ // Newest in the history from now on, whatever the runtime records.
161
+ remember(message);
162
+ if (controlledValue === undefined) {
163
+ setInput('');
164
+ }
165
+ onSend(message);
166
+ }, [
167
+ input,
168
+ isLoading,
169
+ disabled,
170
+ readOnly,
171
+ onSend,
172
+ setInput,
173
+ controlledValue,
174
+ remember,
175
+ ]);
176
+ const handleStop = useCallback(() => {
177
+ onStop?.();
178
+ }, [onStop]);
179
+ // ---- Render ------------------------------------------------------------
180
+ return (_jsx(Box, { sx: sx, children: _jsx(Box, { sx: {
181
+ p: padding,
182
+ ...(showBorderTop && {
183
+ borderTop: '1px solid',
184
+ borderColor: 'border.default',
185
+ }),
186
+ ...(showBackground && {
187
+ bg: 'canvas.subtle',
188
+ }),
189
+ }, children: _jsxs(Box
190
+ // Named so the turn-end refocus can ask whether the caret is already
191
+ // somewhere inside this prompt before it reaches for it.
192
+ , {
193
+ // Named so the turn-end refocus can ask whether the caret is already
194
+ // somewhere inside this prompt before it reaches for it.
195
+ ref: containerRef, onFocusCapture: () => {
196
+ if (selfFocused.current) {
197
+ selfFocused.current = false;
198
+ return;
199
+ }
200
+ setFocused(true);
201
+ },
202
+ // Typing is arriving too, whoever moved the caret. Without this an
203
+ // auto-focused prompt would keep animating under a person's first
204
+ // keystroke, until the character they typed made it stop.
205
+ onKeyDownCapture: () => {
206
+ selfFocused.current = false;
207
+ setFocused(true);
208
+ }, onBlurCapture: event => {
209
+ if (!event.currentTarget.contains(event.relatedTarget)) {
210
+ setFocused(false);
211
+ }
212
+ }, sx: {
213
+ border: '1px solid',
214
+ borderColor: 'border.default',
215
+ borderRadius: 2,
216
+ bg: 'canvas.default',
217
+ overflow: 'hidden',
218
+ transition: 'border-color 0.2s ease',
219
+ '&:focus-within': {
220
+ borderColor: 'accent.fg',
221
+ boxShadow: (t) => `0 0 0 1px ${t?.colors?.accent?.fg ?? '#16A085'}`,
222
+ },
223
+ }, children: [_jsx(InPromptHeader, { stacks: headerStacks, children: headerContent }), variant === 'lexical' ? (_jsx(InputPromptLexical, { value: input, onChange: handleChange, placeholder: animatedPlaceholder, disabled: isLoading || disabled, readOnly: readOnly, onSubmit: handleSend, onHistory: navigateHistory, autoFocus: autoFocus, focusSignal: lexicalFocusSignal, mentionableAgents: mentionableAgents })) : (_jsx(InputPromptText, { value: input, onChange: handleChange, placeholder: animatedPlaceholder, disabled: isLoading || disabled, readOnly: readOnly, onSubmit: handleSend, onHistory: navigateHistory, inputRef: inputRef })), _jsx(InPromptFooter, { stacks: footerStacks, isLoading: isLoading, isKernelBusy: isKernelBusy, sendDisabled: !input.trim() || disabled || readOnly, onSend: handleSend, onStop: handleStop, rightContent: footerRightContent, children: footerContent })] }) }) }));
224
+ }
225
+ export default InputPromptBase;
@@ -1,3 +1,5 @@
1
+ import { type MentionableAgent } from './plugins/AgentMentionPlugin';
2
+ import type { HistoryDirection } from './promptHistory';
1
3
  export interface InputPromptLexicalProps {
2
4
  /** Current input value */
3
5
  value: string;
@@ -11,8 +13,23 @@ export interface InputPromptLexicalProps {
11
13
  readOnly?: boolean;
12
14
  /** Callback when the user presses Enter (without Shift) */
13
15
  onSubmit?: () => void;
16
+ /**
17
+ * Up or down through the prompt history, asked when the caret is on the
18
+ * first or last line. Answers whether it had somewhere to go; when it did
19
+ * not, the key moves the caret as it normally would.
20
+ */
21
+ onHistory?: (direction: HistoryDirection) => boolean;
14
22
  /** Auto-focus the editor on mount */
15
23
  autoFocus?: boolean;
24
+ /** Bumped by the parent to ask for the caret back — see `AutoFocusPlugin`. */
25
+ focusSignal?: number;
26
+ /**
27
+ * Agents this prompt may address by typing `@`.
28
+ *
29
+ * Empty or absent means no menu: a workspace with one agent has nobody to
30
+ * choose between, and a menu on every `@` would be in the way.
31
+ */
32
+ mentionableAgents?: MentionableAgent[];
16
33
  }
17
- export declare function InputPromptLexical({ value, onChange, placeholder, disabled, readOnly, onSubmit, autoFocus, }: InputPromptLexicalProps): import("react/jsx-runtime").JSX.Element;
34
+ export declare function InputPromptLexical({ value, onChange, placeholder, disabled, readOnly, onSubmit, onHistory, autoFocus, focusSignal, mentionableAgents, }: InputPromptLexicalProps): import("react").JSX.Element;
18
35
  export default InputPromptLexical;
@@ -8,35 +8,44 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
8
  *
9
9
  * Uses a minimal Lexical setup (plain text only) as an alternative
10
10
  * to the plain textarea. Enter-to-submit and Shift+Enter for newline
11
- * are handled via a custom Lexical plugin.
11
+ * are handled via a custom Lexical plugin, and the arrow keys walk the
12
+ * prompt history from the text's edges via another.
12
13
  *
13
- * IMPORTANT: This file imports from `@lexical/react` only — it does NOT
14
+ * IMPORTANT: This file imports from the light `@lexical/*` packages only — it does NOT
14
15
  * import from `@datalayer/jupyter-lexical` to avoid pulling in heavy
15
16
  * Lumino / Jupyter dependencies (see separated-hook-files pattern in CLAUDE.md).
16
17
  *
17
18
  * @module chat/prompt/InputPromptLexical
18
19
  */
19
20
  import { useCallback, useEffect, useRef } from 'react';
20
- import { $getRoot, $createParagraphNode, $createTextNode, KEY_ENTER_COMMAND, COMMAND_PRIORITY_HIGH, } from 'lexical';
21
- import { LexicalComposer } from '@lexical/react/LexicalComposer';
22
- import { PlainTextPlugin } from '@lexical/react/LexicalPlainTextPlugin';
21
+ import { $getRoot, $getSelection, $createParagraphNode, $createTextNode, $isElementNode, $isRangeSelection, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_UP_COMMAND, KEY_ENTER_COMMAND, COMMAND_PRIORITY_HIGH, COMMAND_PRIORITY_LOW, defineExtension, } from 'lexical';
22
+ import { LexicalExtensionComposer } from '@lexical/react/LexicalExtensionComposer';
23
23
  import { ContentEditable } from '@lexical/react/LexicalContentEditable';
24
- import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';
25
24
  import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin';
26
25
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
27
- import { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary';
26
+ import { HistoryExtension } from '@lexical/history';
27
+ import { PlainTextExtension } from '@lexical/plain-text';
28
+ import { MentionNode } from './plugins/MentionNode';
28
29
  import { Box } from '@datalayer/primer-addons';
29
- // ---- Lexical config (plain-text only) ------------------------------------
30
- const EDITOR_CONFIG = {
30
+ import { AgentMentionPlugin, } from './plugins/AgentMentionPlugin';
31
+ import { CommandPlugin, PROMPT_COMMANDS } from './plugins/CommandPlugin';
32
+ // ---- Lexical extension (plain-text only) ---------------------------------
33
+ // Module scope on purpose: the composer rebuilds the editor whenever this
34
+ // reference changes.
35
+ const EDITOR_EXTENSION = defineExtension({
36
+ name: '@datalayer/agent-runtimes/InputPrompt',
31
37
  namespace: 'InputPromptLexical',
32
38
  theme: {
33
39
  paragraph: 'input-prompt-lexical-p',
34
40
  },
35
- nodes: [],
41
+ // The `@agent` chip. A node the editor does not know about is dropped on
42
+ // insert, silently — the mention would simply never appear.
43
+ nodes: () => [MentionNode],
44
+ dependencies: [PlainTextExtension, HistoryExtension],
36
45
  onError(error) {
37
46
  console.error('[InputPromptLexical]', error);
38
47
  },
39
- };
48
+ });
40
49
  // ---- Enter-to-submit plugin ---------------------------------------------
41
50
  function EnterSubmitPlugin({ onSubmit, disabled, readOnly, }) {
42
51
  const [editor] = useLexicalComposerContext();
@@ -51,6 +60,118 @@ function EnterSubmitPlugin({ onSubmit, disabled, readOnly, }) {
51
60
  }, [editor, onSubmit, disabled, readOnly]);
52
61
  return null;
53
62
  }
63
+ // ---- History plugin: the arrow keys over what was sent ------------------
64
+ /**
65
+ * The text before and after the caret, over the whole editor — or `null`
66
+ * when there is no caret to speak of: nothing focused, or a range selected.
67
+ *
68
+ * Lines decide whether an arrow key walks the history — up from the first
69
+ * line, down from the last — and a plain-text editor keeps its lines as
70
+ * line-break nodes inside paragraphs, and as paragraphs, so the text is
71
+ * gathered by walking the tree rather than read off one node.
72
+ */
73
+ function $textAroundCaret() {
74
+ const selection = $getSelection();
75
+ if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
76
+ return null;
77
+ }
78
+ const { anchor } = selection;
79
+ const anchorNode = anchor.getNode();
80
+ let before = '';
81
+ let after = '';
82
+ let passed = false;
83
+ const take = (text) => {
84
+ if (passed) {
85
+ after += text;
86
+ }
87
+ else {
88
+ before += text;
89
+ }
90
+ };
91
+ const visit = (node) => {
92
+ if (node.is(anchorNode)) {
93
+ if ($isElementNode(node)) {
94
+ // The caret sits between children, and the offset counts them.
95
+ node.getChildren().forEach((child, index) => {
96
+ if (index === anchor.offset) {
97
+ passed = true;
98
+ }
99
+ take(child.getTextContent());
100
+ });
101
+ }
102
+ else {
103
+ const text = node.getTextContent();
104
+ before += text.slice(0, anchor.offset);
105
+ after += text.slice(anchor.offset);
106
+ }
107
+ passed = true;
108
+ return;
109
+ }
110
+ if ($isElementNode(node)) {
111
+ node.getChildren().forEach(visit);
112
+ return;
113
+ }
114
+ take(node.getTextContent());
115
+ };
116
+ $getRoot()
117
+ .getChildren()
118
+ .forEach((paragraph, index) => {
119
+ if (index > 0) {
120
+ take('\n');
121
+ }
122
+ visit(paragraph);
123
+ });
124
+ return passed ? { before, after } : null;
125
+ }
126
+ /**
127
+ * Up from the first line and down from the last walk the prompt history;
128
+ * anywhere else the keys move the caret, as in any editor.
129
+ *
130
+ * Registered at a low priority, and mounted after the `@` and `/` menus, so
131
+ * that a menu which is open takes the arrow keys first — it answers them
132
+ * and this never hears them.
133
+ */
134
+ function HistoryPlugin({ onHistory, disabled, readOnly, }) {
135
+ const [editor] = useLexicalComposerContext();
136
+ useEffect(() => {
137
+ if (!onHistory) {
138
+ return undefined;
139
+ }
140
+ const handle = (direction) => (event) => {
141
+ if (disabled || readOnly) {
142
+ return false;
143
+ }
144
+ // A modifier means something else is being asked for.
145
+ if (event &&
146
+ (event.shiftKey || event.altKey || event.metaKey || event.ctrlKey)) {
147
+ return false;
148
+ }
149
+ let atEdge = false;
150
+ editor.getEditorState().read(() => {
151
+ const around = $textAroundCaret();
152
+ if (!around) {
153
+ return;
154
+ }
155
+ atEdge =
156
+ direction === 'up'
157
+ ? !around.before.includes('\n')
158
+ : !around.after.includes('\n');
159
+ });
160
+ if (!atEdge || !onHistory(direction)) {
161
+ return false;
162
+ }
163
+ event?.preventDefault();
164
+ return true;
165
+ };
166
+ const unregisterUp = editor.registerCommand(KEY_ARROW_UP_COMMAND, handle('up'), COMMAND_PRIORITY_LOW);
167
+ const unregisterDown = editor.registerCommand(KEY_ARROW_DOWN_COMMAND, handle('down'), COMMAND_PRIORITY_LOW);
168
+ return () => {
169
+ unregisterUp();
170
+ unregisterDown();
171
+ };
172
+ }, [editor, onHistory, disabled, readOnly]);
173
+ return null;
174
+ }
54
175
  // ---- Sync plugin (controlled component bridge) --------------------------
55
176
  function SyncPlugin({ value, onChange, }) {
56
177
  const [editor] = useLexicalComposerContext();
@@ -71,6 +192,9 @@ function SyncPlugin({ value, onChange, }) {
71
192
  p.append($createTextNode(value));
72
193
  }
73
194
  root.append(p);
195
+ // The caret after what was put there — a history entry, a suggestion —
196
+ // where typing on from it is expected to continue.
197
+ p.selectEnd();
74
198
  });
75
199
  }, [editor, value]);
76
200
  // Editor → external value
@@ -84,14 +208,54 @@ function SyncPlugin({ value, onChange, }) {
84
208
  return _jsx(OnChangePlugin, { onChange: handleChange });
85
209
  }
86
210
  // ---- Auto-focus plugin --------------------------------------------------
87
- function AutoFocusPlugin({ autoFocus }) {
211
+ function AutoFocusPlugin({ autoFocus, focusSignal, }) {
88
212
  const [editor] = useLexicalComposerContext();
89
213
  useEffect(() => {
90
- if (autoFocus) {
91
- const t = setTimeout(() => editor.focus(), 100);
92
- return () => clearTimeout(t);
214
+ if (!autoFocus && !focusSignal) {
215
+ return undefined;
93
216
  }
94
- }, [editor, autoFocus]);
217
+ /*
218
+ * Asked for repeatedly, briefly, rather than once after a guessed delay.
219
+ *
220
+ * One `setTimeout(100)` assumed the editor was mounted and focusable by
221
+ * then. In a workspace that arrives through a lazy chunk it often is not:
222
+ * the notebook mounts alongside and takes focus, or the contenteditable
223
+ * is not in the document yet, and the single attempt lands on nothing and
224
+ * is never retried — which is exactly the prompt that would not focus.
225
+ *
226
+ * So: try immediately, then keep trying for a second, and stop the moment
227
+ * it works or the moment the person clicks somewhere themselves. Giving
228
+ * up matters as much as retrying — stealing focus back from someone who
229
+ * has started typing in a cell would be worse than never taking it.
230
+ */
231
+ let cancelled = false;
232
+ const deadline = Date.now() + 1000;
233
+ const focused = () => {
234
+ const root = editor.getRootElement();
235
+ return !!root && document.activeElement === root;
236
+ };
237
+ const attempt = () => {
238
+ if (cancelled || focused()) {
239
+ return;
240
+ }
241
+ const active = document.activeElement;
242
+ const stolen = active &&
243
+ active !== document.body &&
244
+ !editor.getRootElement()?.contains(active);
245
+ if (stolen) {
246
+ return;
247
+ }
248
+ editor.focus();
249
+ if (!focused() && Date.now() < deadline) {
250
+ timer = window.setTimeout(attempt, 50);
251
+ }
252
+ };
253
+ let timer = window.setTimeout(attempt, 0);
254
+ return () => {
255
+ cancelled = true;
256
+ window.clearTimeout(timer);
257
+ };
258
+ }, [editor, autoFocus, focusSignal]);
95
259
  return null;
96
260
  }
97
261
  function ReadOnlyPlugin({ readOnly }) {
@@ -101,29 +265,62 @@ function ReadOnlyPlugin({ readOnly }) {
101
265
  }, [editor, readOnly]);
102
266
  return null;
103
267
  }
104
- export function InputPromptLexical({ value, onChange, placeholder = 'Ask anything…', disabled = false, readOnly = false, onSubmit, autoFocus = false, }) {
268
+ export function InputPromptLexical({ value, onChange, placeholder = 'Ask anything…', disabled = false, readOnly = false, onSubmit, onHistory, autoFocus = false, focusSignal, mentionableAgents, }) {
105
269
  return (_jsx(Box, { sx: {
270
+ /*
271
+ The placeholder is positioned against this box.
272
+
273
+ It is `position: absolute` and this was `static`, so it resolved
274
+ against whatever ancestor happened to be positioned — which put
275
+ "Type a message..." up in the header, nowhere near the box it
276
+ describes. A containing block is the whole fix.
277
+ */
278
+ position: 'relative',
106
279
  px: 2,
107
- py: 1,
280
+ // A little more above than the 2px it had: the text sat hard against
281
+ // the edge of the box, which reads as clipped rather than as tight.
282
+ // Still less than below, where the footer's own padding follows.
283
+ pt: '6px',
284
+ pb: 1,
285
+ /*
286
+ * Greyed while it cannot be typed in.
287
+ *
288
+ * `contenteditable=false` stops the caret and nothing else — the text
289
+ * kept the same weight and colour as a live prompt, so a person had to
290
+ * try typing to discover the box was inert. The colour is set on the
291
+ * container and inherited, because the editable element deliberately
292
+ * declares no colour of its own.
293
+ */
294
+ color: disabled || readOnly ? 'fg.subtle' : undefined,
295
+ cursor: disabled || readOnly ? 'not-allowed' : undefined,
108
296
  '& .input-prompt-lexical-p': {
109
297
  margin: 0,
110
298
  },
111
- }, children: _jsxs(LexicalComposer, { initialConfig: EDITOR_CONFIG, children: [_jsx(PlainTextPlugin, { contentEditable: _jsx(ContentEditable, { className: "input-prompt-lexical-content", "aria-label": "Message input", style: {
112
- outline: 'none',
113
- minHeight: 40,
114
- maxHeight: 120,
115
- overflowY: 'auto',
116
- fontSize: 14,
117
- lineHeight: '1.5',
118
- padding: '2px 0',
119
- } }), placeholder: _jsx(Box, { sx: {
299
+ }, children: _jsxs(LexicalExtensionComposer, { extension: EDITOR_EXTENSION, contentEditable: null, children: [_jsx(ContentEditable, { placeholder: _jsx(Box, { sx: {
120
300
  position: 'absolute',
121
- top: '11px',
122
- left: '15px',
301
+ /*
302
+ Level with the first line of typing.
303
+
304
+ Relative to the box above, which establishes the containing
305
+ block. The editor's own `padding: 2px 0` sits inside this
306
+ box's `pt: 2px`, so the caret's first line starts 4px down —
307
+ matching it here is what stops the placeholder floating
308
+ above the text it stands in for.
309
+ */
310
+ top: '8px',
311
+ left: '8px',
123
312
  color: 'fg.subtle',
124
313
  fontSize: 1,
125
314
  pointerEvents: 'none',
126
315
  userSelect: 'none',
127
- }, children: placeholder }), ErrorBoundary: LexicalErrorBoundary }), _jsx(HistoryPlugin, {}), _jsx(SyncPlugin, { value: value, onChange: onChange }), _jsx(ReadOnlyPlugin, { readOnly: readOnly || disabled }), _jsx(EnterSubmitPlugin, { onSubmit: onSubmit, disabled: disabled, readOnly: readOnly }), _jsx(AutoFocusPlugin, { autoFocus: autoFocus })] }) }));
316
+ }, children: placeholder }), "aria-placeholder": placeholder, className: "input-prompt-lexical-content", "aria-label": "Message input", style: {
317
+ outline: 'none',
318
+ minHeight: 32,
319
+ maxHeight: 120,
320
+ overflowY: 'auto',
321
+ fontSize: 14,
322
+ lineHeight: '1.5',
323
+ padding: '2px 0',
324
+ } }), _jsx(SyncPlugin, { value: value, onChange: onChange }), _jsx(ReadOnlyPlugin, { readOnly: readOnly || disabled }), _jsx(EnterSubmitPlugin, { onSubmit: onSubmit, disabled: disabled, readOnly: readOnly }), _jsx(AutoFocusPlugin, { autoFocus: autoFocus, focusSignal: focusSignal }), _jsx(CommandPlugin, { commands: PROMPT_COMMANDS }), mentionableAgents?.length ? (_jsx(AgentMentionPlugin, { agents: mentionableAgents })) : null, _jsx(HistoryPlugin, { onHistory: onHistory, disabled: disabled, readOnly: readOnly })] }) }));
128
325
  }
129
326
  export default InputPromptLexical;
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * InputPromptText — Plain-text input variant for InputPrompt.
3
3
  *
4
- * Auto-resizing textarea with Enter-to-send and Shift+Enter for newline.
4
+ * Auto-resizing textarea with Enter-to-send and Shift+Enter for newline,
5
+ * and the arrow keys through the prompt history from the text's edges.
5
6
  *
6
7
  * @module chat/prompt/InputPromptText
7
8
  */
8
9
  import { type Ref } from 'react';
10
+ import type { HistoryDirection } from './promptHistory';
9
11
  export interface InputPromptTextProps {
10
12
  /** Current input value */
11
13
  value: string;
@@ -19,8 +21,14 @@ export interface InputPromptTextProps {
19
21
  readOnly?: boolean;
20
22
  /** Callback when the user presses Enter (without Shift) */
21
23
  onSubmit?: () => void;
24
+ /**
25
+ * Up or down through the prompt history, asked when the caret is on the
26
+ * first or last line. Answers whether it had somewhere to go; when it did
27
+ * not, the key moves the caret as it normally would.
28
+ */
29
+ onHistory?: (direction: HistoryDirection) => boolean;
22
30
  /** Ref forwarded to the underlying textarea */
23
31
  inputRef?: Ref<HTMLTextAreaElement>;
24
32
  }
25
- export declare function InputPromptText({ value, onChange, placeholder, disabled, readOnly, onSubmit, inputRef, }: InputPromptTextProps): import("react/jsx-runtime").JSX.Element;
33
+ export declare function InputPromptText({ value, onChange, placeholder, disabled, readOnly, onSubmit, onHistory, inputRef, }: InputPromptTextProps): import("react").JSX.Element;
26
34
  export default InputPromptText;
@@ -6,14 +6,15 @@ import { jsx as _jsx } from "react/jsx-runtime";
6
6
  /**
7
7
  * InputPromptText — Plain-text input variant for InputPrompt.
8
8
  *
9
- * Auto-resizing textarea with Enter-to-send and Shift+Enter for newline.
9
+ * Auto-resizing textarea with Enter-to-send and Shift+Enter for newline,
10
+ * and the arrow keys through the prompt history from the text's edges.
10
11
  *
11
12
  * @module chat/prompt/InputPromptText
12
13
  */
13
14
  import { useCallback, useEffect, } from 'react';
14
15
  import { Textarea } from '@primer/react';
15
16
  import { Box } from '@datalayer/primer-addons';
16
- export function InputPromptText({ value, onChange, placeholder = 'Ask anything…', disabled = false, readOnly = false, onSubmit, inputRef, }) {
17
+ export function InputPromptText({ value, onChange, placeholder = 'Ask anything…', disabled = false, readOnly = false, onSubmit, onHistory, inputRef, }) {
17
18
  // Auto-resize
18
19
  const adjustHeight = useCallback(() => {
19
20
  const el = inputRef && 'current' in inputRef
@@ -39,11 +40,42 @@ export function InputPromptText({ value, onChange, placeholder = 'Ask anything
39
40
  if (e.key === 'Enter' && !e.shiftKey) {
40
41
  e.preventDefault();
41
42
  onSubmit?.();
43
+ return;
42
44
  }
43
- }, [onSubmit]);
45
+ /*
46
+ * The arrow keys walk the history, but only from the edge of the text:
47
+ * up from the first line, down from the last. Anywhere else they move
48
+ * the caret, as in any editor — somebody on the third line of a long
49
+ * prompt pressing up wants the second line, not last week's question.
50
+ * A modifier means something else is being asked for.
51
+ */
52
+ if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') &&
53
+ onHistory &&
54
+ !e.shiftKey &&
55
+ !e.altKey &&
56
+ !e.metaKey &&
57
+ !e.ctrlKey) {
58
+ const el = e.currentTarget;
59
+ const direction = e.key === 'ArrowUp' ? 'up' : 'down';
60
+ const atEdge = direction === 'up'
61
+ ? !el.value.slice(0, el.selectionStart).includes('\n')
62
+ : !el.value.slice(el.selectionEnd).includes('\n');
63
+ if (atEdge && onHistory(direction)) {
64
+ e.preventDefault();
65
+ }
66
+ }
67
+ }, [onSubmit, onHistory]);
44
68
  return (_jsx(Box, { sx: { px: 2, py: 1 }, children: _jsx(Textarea, { ref: inputRef, value: value, onChange: e => onChange(e.target.value), onKeyDown: handleKeyDown, placeholder: placeholder, disabled: disabled, readOnly: readOnly, sx: {
45
69
  width: '100%',
46
70
  resize: 'none',
71
+ // Greyed while it cannot be typed in, so the state is legible
72
+ // without trying it. Primer's `disabled` textarea keeps the
73
+ // author's colour, and `!important` is needed for the same reason
74
+ // the border rules below need it.
75
+ '& textarea:disabled, & textarea[readonly]': {
76
+ color: 'fg.subtle !important',
77
+ cursor: 'not-allowed',
78
+ },
47
79
  minHeight: '40px',
48
80
  maxHeight: '120px',
49
81
  overflow: 'hidden',