@datalayer/agent-runtimes 1.3.90 → 1.3.93

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 (421) hide show
  1. package/dist-embed/assets/coincident.worker-Dd47v4fq.js +9 -0
  2. package/dist-embed/assets/comlink.worker-DmOp1QjG.js +9 -0
  3. package/dist-embed/datalayer-app.css +1 -0
  4. package/dist-embed/datalayer-app.js +4 -0
  5. package/dist-embed/lite-service-worker.js +91 -0
  6. package/lib/{loop → apps}/apps/AppComposer.d.ts +1 -1
  7. package/lib/{loop → apps}/apps/AppComposer.js +1 -1
  8. package/lib/{loop → apps}/apps/AppFeedback.d.ts +1 -1
  9. package/lib/{loop → apps}/apps/AppFeedback.js +12 -3
  10. package/lib/{loop → apps}/apps/AppKept.d.ts +1 -1
  11. package/lib/{loop → apps}/apps/AppRenderer.d.ts +1 -1
  12. package/lib/{loop → apps}/apps/AppRenderer.js +2 -2
  13. package/lib/{loop → apps}/apps/AppRuntimePlugins.js +1 -1
  14. package/lib/{loop → apps}/apps/agent.js +1 -1
  15. package/lib/{loop → apps}/apps/appspec.d.ts +1 -1
  16. package/lib/{loop → apps}/apps/checks.js +1 -1
  17. package/lib/{loop → apps}/apps/composer.d.ts +1 -1
  18. package/lib/{loop → apps}/apps/computer.d.ts +1 -1
  19. package/lib/{loop → apps}/apps/customComponents.js +1 -1
  20. package/lib/{loop → apps}/apps/feedback.d.ts +4 -3
  21. package/lib/{loop → apps}/apps/feedback.js +4 -2
  22. package/lib/{loop → apps}/apps/hostTools.d.ts +1 -1
  23. package/lib/{loop → apps}/apps/index.d.ts +1 -1
  24. package/lib/{loop → apps}/apps/index.js +1 -1
  25. package/lib/{loop → apps}/apps/kept.d.ts +1 -1
  26. package/lib/{loop → apps}/apps/language.d.ts +1 -1
  27. package/lib/{loop → apps}/apps/pluginPair.d.ts +1 -1
  28. package/lib/{loop → apps}/apps/records.d.ts +1 -1
  29. package/lib/{loop → apps}/apps/rules.js +1 -1
  30. package/lib/{loop → apps}/apps/saved.d.ts +1 -1
  31. package/lib/{loop → apps}/apps/saved.js +1 -1
  32. package/lib/{loop → apps}/apps/settingsInputs.d.ts +1 -1
  33. package/lib/{loop → apps}/apps/settingsInputs.js +1 -1
  34. package/lib/{loop → apps}/apps/threads.d.ts +1 -1
  35. package/lib/{loop → apps}/apps/uploads.d.ts +1 -1
  36. package/lib/{loop → apps}/apps/visitorToken.js +1 -1
  37. package/lib/{loop → apps}/apps/yaml.js +1 -1
  38. package/lib/{loop → apps}/core/a2uiComponents.js +2 -2
  39. package/lib/{loop → apps}/core/canvasBlocks.js +2 -2
  40. package/lib/{loop → apps}/core/focusRequests.js +1 -1
  41. package/lib/{loop → apps}/core/index.d.ts +19 -0
  42. package/lib/{loop → apps}/core/index.js +28 -1
  43. package/lib/{loop → apps}/core/promptStore.js +1 -1
  44. package/lib/{loop → apps}/core/surfaceRequests.d.ts +1 -1
  45. package/lib/{loop → apps}/core/toolbar.js +1 -1
  46. package/lib/{loop → apps}/embed/AppEmbed.js +1 -1
  47. package/lib/{loop → apps}/embed/LoopEmbed.d.ts +1 -1
  48. package/lib/{loop → apps}/embed/LoopEmbed.js +1 -1
  49. package/lib/{loop → apps}/embed/datalayer-app.js +1 -1
  50. package/lib/{loop → apps}/embed/element.js +1 -1
  51. package/lib/{loop → apps}/embed/embedConfig.d.ts +1 -1
  52. package/lib/{loop → apps}/embed/embedSession.d.ts +1 -1
  53. package/lib/{loop → apps}/embed/hostBridge.d.ts +1 -1
  54. package/lib/{loop → apps}/extensions.js +1 -1
  55. package/lib/{loop → apps}/index.d.ts +1 -1
  56. package/lib/{loop → apps}/index.js +1 -1
  57. package/lib/{loop → apps}/plugins/a2a-sidebar/A2ASidebar.d.ts +1 -1
  58. package/lib/{loop → apps}/plugins/a2a-sidebar/A2ASidebar.js +1 -1
  59. package/lib/{loop → apps}/plugins/a2a-sidebar/index.js +1 -1
  60. package/lib/{loop → apps}/plugins/a2ui/A2uiView.d.ts +1 -1
  61. package/lib/{loop → apps}/plugins/a2ui/index.js +1 -1
  62. package/lib/{loop → apps}/plugins/a2ui-scene/index.d.ts +1 -1
  63. package/lib/{loop → apps}/plugins/a2ui-surface/InlineSurface.d.ts +2 -2
  64. package/lib/{loop → apps}/plugins/a2ui-surface/SurfaceToolResult.d.ts +1 -1
  65. package/lib/{loop → apps}/plugins/a2ui-surface/ownComponents.js +1 -1
  66. package/lib/{loop → apps}/plugins/a2ui-surface/toolResult.d.ts +1 -1
  67. package/lib/{loop → apps}/plugins/agent-a2a/index.js +2 -2
  68. package/lib/{loop → apps}/plugins/agent-a2ui/index.js +1 -1
  69. package/lib/{loop → apps}/plugins/agent-a2ui-jupyter-output/index.js +1 -1
  70. package/lib/{loop → apps}/plugins/agent-capacity/index.d.ts +2 -2
  71. package/lib/{loop → apps}/plugins/agent-capacity/index.js +2 -2
  72. package/lib/{loop → apps}/plugins/agent-checkpoints/index.js +1 -1
  73. package/lib/{loop → apps}/plugins/agent-code-sandbox/index.js +1 -1
  74. package/lib/{loop → apps}/plugins/agent-code-sandboxes/index.js +1 -1
  75. package/lib/{loop → apps}/plugins/agent-codemode/index.js +1 -1
  76. package/lib/{loop → apps}/plugins/agent-compaction/index.js +1 -1
  77. package/lib/{loop → apps}/plugins/agent-evals/index.js +2 -2
  78. package/lib/{loop → apps}/plugins/agent-guardrails/index.js +2 -2
  79. package/lib/{loop → apps}/plugins/agent-hooks/index.js +1 -1
  80. package/lib/{loop → apps}/plugins/agent-inference/index.js +1 -1
  81. package/lib/{loop → apps}/plugins/agent-mcp/index.js +2 -2
  82. package/lib/{loop → apps}/plugins/agent-memory/index.js +2 -2
  83. package/lib/{loop → apps}/plugins/agent-monitoring/index.js +2 -2
  84. package/lib/{loop → apps}/plugins/agent-notifications/index.js +2 -2
  85. package/lib/{loop → apps}/plugins/agent-otel/index.js +1 -1
  86. package/lib/{loop → apps}/plugins/agent-outputs/index.js +1 -1
  87. package/lib/{loop → apps}/plugins/agent-parameters/index.js +2 -2
  88. package/lib/{loop → apps}/plugins/agent-skills/index.js +2 -2
  89. package/lib/{loop → apps}/plugins/agent-subagents/index.js +2 -2
  90. package/lib/{loop → apps}/plugins/agent-tool-approvals/index.js +1 -1
  91. package/lib/{loop → apps}/plugins/agent-triggers/index.js +1 -1
  92. package/lib/{loop → apps}/plugins/agents/AgentSummaryPanel.d.ts +1 -1
  93. package/lib/{loop → apps}/plugins/agents/AnonymousKeyBadge.d.ts +1 -1
  94. package/lib/{loop → apps}/plugins/agents/DatalayerAgentBridge.d.ts +1 -1
  95. package/lib/{loop → apps}/plugins/agents/DatalayerAgentMount.d.ts +1 -1
  96. package/lib/{loop → apps}/plugins/agents/SandboxSelector.d.ts +1 -1
  97. package/lib/{loop → apps}/plugins/agents/SandboxStatusBridge.d.ts +1 -1
  98. package/lib/{loop → apps}/plugins/agents/SandboxView.d.ts +1 -1
  99. package/lib/{loop → apps}/plugins/agents/TeamMemberPicker.d.ts +1 -1
  100. package/lib/{loop → apps}/plugins/agents/agentIcons.d.ts +1 -1
  101. package/lib/{loop → apps}/plugins/agents/agentIcons.js +1 -1
  102. package/lib/{loop → apps}/plugins/agents/appLaunch.d.ts +1 -1
  103. package/lib/{loop → apps}/plugins/agents/browserService.js +1 -1
  104. package/lib/{loop → apps}/plugins/agents/index.d.ts +1 -1
  105. package/lib/{loop → apps}/plugins/agents/index.js +1 -1
  106. package/lib/{loop → apps}/plugins/agents/plugin.d.ts +1 -1
  107. package/lib/{loop → apps}/plugins/agents/service.d.ts +1 -1
  108. package/lib/{loop → apps}/plugins/agents/service.js +1 -1
  109. package/lib/{loop → apps}/plugins/agents/specSubagents.d.ts +1 -1
  110. package/lib/{loop → apps}/plugins/agents/switchable.d.ts +1 -1
  111. package/lib/{loop → apps}/plugins/agents/switchable.js +1 -1
  112. package/lib/{loop → apps}/plugins/agents/team.d.ts +1 -1
  113. package/lib/{loop → apps}/plugins/agents/team.js +1 -1
  114. package/lib/{loop → apps}/plugins/agents/useSandboxService.js +1 -1
  115. package/lib/{loop → apps}/plugins/agents/useTeamSelection.js +1 -1
  116. package/lib/{loop → apps}/plugins/agentspecs/AgentspecPicker.d.ts +1 -1
  117. package/lib/{loop → apps}/plugins/agentspecs/index.js +1 -1
  118. package/lib/{loop → apps}/plugins/app-activity/AppActivity.d.ts +1 -1
  119. package/lib/{loop → apps}/plugins/app-components/index.d.ts +1 -1
  120. package/lib/{loop → apps}/plugins/app-components/index.js +1 -1
  121. package/lib/{loop → apps}/plugins/app-computer/AppComputer.d.ts +1 -1
  122. package/lib/{loop → apps}/plugins/app-computer/AppComputer.js +31 -8
  123. package/lib/{loop → apps}/plugins/app-elements/AppElements.d.ts +1 -1
  124. package/lib/{loop → apps}/plugins/app-elements/index.d.ts +1 -1
  125. package/lib/{loop → apps}/plugins/app-elements/index.js +1 -1
  126. package/lib/{loop → apps}/plugins/app-page/AppPage.d.ts +1 -1
  127. package/lib/{loop → apps}/plugins/app-page/AppPage.js +25 -7
  128. package/lib/{loop → apps}/plugins/app-page/appPageModel.d.ts +1 -1
  129. package/lib/{loop → apps}/plugins/app-page/index.d.ts +1 -1
  130. package/lib/{loop → apps}/plugins/app-page/pageRun.d.ts +1 -1
  131. package/lib/{loop → apps}/plugins/app-page/pageRun.js +1 -1
  132. package/lib/{loop → apps}/plugins/app-rules/AppRulesCard.d.ts +1 -1
  133. package/lib/{loop → apps}/plugins/assistant/index.d.ts +1 -1
  134. package/lib/{loop → apps}/plugins/assistant-characters/index.d.ts +1 -1
  135. package/lib/{loop → apps}/plugins/assistant-characters/index.js +1 -1
  136. package/lib/{loop → apps}/plugins/canvas-blocks/index.d.ts +1 -1
  137. package/lib/{loop → apps}/plugins/canvas-blocks/index.js +1 -1
  138. package/lib/{loop → apps}/plugins/chat/ChatView.d.ts +1 -1
  139. package/lib/{loop → apps}/plugins/chat/ChatView.js +49 -24
  140. package/lib/{loop → apps}/plugins/chat/chatViewTools.js +1 -1
  141. package/lib/{loop → apps}/plugins/chat/index.js +1 -1
  142. package/lib/{loop → apps}/plugins/chat/turnState.d.ts +1 -1
  143. package/lib/{loop → apps}/plugins/chat/turnState.js +1 -1
  144. package/lib/{loop → apps}/plugins/chat-extras/index.js +1 -1
  145. package/lib/{loop → apps}/plugins/chat-header/HeaderView.d.ts +1 -1
  146. package/lib/{loop → apps}/plugins/chat-view/index.js +1 -1
  147. package/lib/{loop → apps}/plugins/checkpoints-sidebar/CheckpointsSidebar.d.ts +1 -1
  148. package/lib/{loop → apps}/plugins/checkpoints-sidebar/CheckpointsSidebar.js +1 -1
  149. package/lib/{loop → apps}/plugins/checkpoints-sidebar/index.js +1 -1
  150. package/lib/{loop → apps}/plugins/commands/index.js +1 -1
  151. package/lib/{loop → apps}/plugins/decks/index.js +1 -1
  152. package/lib/{loop → apps}/plugins/decks/surface.d.ts +1 -1
  153. package/lib/{loop → apps}/plugins/decks/surface.js +1 -1
  154. package/lib/{loop → apps}/plugins/document/DocumentView.d.ts +1 -1
  155. package/lib/{loop → apps}/plugins/document/index.js +1 -1
  156. package/lib/{loop → apps}/plugins/document/openingDocument.d.ts +1 -1
  157. package/lib/{loop → apps}/plugins/document-toolbar/SandboxStatusItem.d.ts +1 -1
  158. package/lib/{loop → apps}/plugins/document-toolbar/index.js +1 -1
  159. package/lib/{loop → apps}/plugins/document-toolbar/names.d.ts +1 -1
  160. package/lib/{loop → apps}/plugins/document-toolbar/names.js +1 -1
  161. package/lib/{loop → apps}/plugins/document-toolbar/plugin.js +1 -1
  162. package/lib/{loop → apps}/plugins/document-view/index.js +1 -1
  163. package/lib/{loop → apps}/plugins/graph/GraphToggle.d.ts +1 -1
  164. package/lib/{loop → apps}/plugins/graph/GraphView.d.ts +1 -1
  165. package/lib/{loop → apps}/plugins/graph/index.js +1 -1
  166. package/lib/{loop → apps}/plugins/graph/viewType.d.ts +1 -1
  167. package/lib/{loop → apps}/plugins/graph/viewType.js +1 -1
  168. package/lib/{loop → apps}/plugins/input-prompt/ComposerView.d.ts +1 -1
  169. package/lib/{loop → apps}/plugins/models/index.js +1 -1
  170. package/lib/{loop → apps}/plugins/notebook/NotebookView.d.ts +1 -1
  171. package/lib/{loop → apps}/plugins/notebook/index.js +1 -1
  172. package/lib/{loop → apps}/plugins/notebook/openingNotebook.d.ts +1 -1
  173. package/lib/{loop → apps}/plugins/notebook-toolbar/index.js +1 -1
  174. package/lib/{loop → apps}/plugins/notebook-toolbar/names.d.ts +1 -1
  175. package/lib/{loop → apps}/plugins/notebook-toolbar/names.js +1 -1
  176. package/lib/{loop → apps}/plugins/notebook-toolbar/plugin.js +1 -1
  177. package/lib/{loop → apps}/plugins/notebook-view/index.js +1 -1
  178. package/lib/{loop → apps}/plugins/page-layout/SplitLayout.d.ts +1 -1
  179. package/lib/{loop → apps}/plugins/page-layout/SplitLayout.js +1 -1
  180. package/lib/{loop → apps}/plugins/page-layout/TurnPanel.d.ts +1 -1
  181. package/lib/{loop → apps}/plugins/page-layout/TurnPanel.js +2 -1
  182. package/lib/{loop → apps}/plugins/plugins-panel/index.js +1 -1
  183. package/lib/{loop → apps}/plugins/prompt/NewChatAction.d.ts +1 -1
  184. package/lib/{loop → apps}/plugins/prompt/index.js +1 -1
  185. package/lib/{loop → apps}/plugins/shell/editorChoice.d.ts +1 -1
  186. package/lib/{loop → apps}/plugins/shell/editorChoice.js +1 -1
  187. package/lib/{loop → apps}/plugins/shell/index.d.ts +1 -1
  188. package/lib/{loop → apps}/plugins/shell/useEditorPreviews.d.ts +1 -1
  189. package/lib/{loop → apps}/plugins/subagent-activity/SubagentPulse.d.ts +1 -1
  190. package/lib/{loop → apps}/plugins/subagent-activity/index.js +1 -1
  191. package/lib/{loop → apps}/plugins/view-switch/index.d.ts +1 -1
  192. package/lib/{loop → apps}/plugins/window-frame/WindowFrame.d.ts +1 -1
  193. package/lib/{loop → apps}/plugins/window-frame/index.js +1 -1
  194. package/lib/{loop → apps}/plugins/window-frame/slots.d.ts +1 -1
  195. package/lib/{loop → apps}/plugins/window-frame/slots.js +1 -1
  196. package/lib/{loop → apps}/presets.d.ts +1 -1
  197. package/lib/{loop → apps}/presets.js +1 -1
  198. package/lib/{loop → apps}/shell/LoopWorkspace.d.ts +1 -1
  199. package/lib/{loop → apps}/shell/PluginToggles.d.ts +1 -1
  200. package/lib/{loop → apps}/shell/SidebarRail.d.ts +1 -1
  201. package/lib/{loop → apps}/shell/ViewSwitcher.d.ts +1 -1
  202. package/lib/{loop → apps}/shell/WorkspaceFullScreenAction.d.ts +1 -1
  203. package/lib/{loop → apps}/shell/index.d.ts +1 -1
  204. package/lib/{loop → apps}/shell/index.js +1 -1
  205. package/lib/{loop → apps}/shell/paneMotion.d.ts +1 -1
  206. package/lib/{loop → apps}/shell/paneMotion.js +1 -1
  207. package/lib/{loop → apps}/shell/useWorkspaceFullScreen.d.ts +1 -1
  208. package/lib/chat/ChatLanguage.js +1 -1
  209. package/lib/chat/messages/ChatMarkdown.js +2 -1
  210. package/lib/chat/messages/markdownWithoutHtml.d.ts +34 -0
  211. package/lib/chat/messages/markdownWithoutHtml.js +53 -0
  212. package/lib/chat/parts/ReasoningPart.js +2 -1
  213. package/lib/chat/parts/TextPart.js +2 -1
  214. package/lib/chat/words.d.ts +7 -0
  215. package/lib/chat/words.js +14 -2
  216. package/lib/components/a2ui/custom/index.js +1 -3
  217. package/lib/components/a2ui/datalayer/FileUpload.js +1 -1
  218. package/lib/components/a2ui/styles.js +16 -5
  219. package/lib/components/cards/NotificationEventCard.js +2 -1
  220. package/lib/components/cards/OutputCard.js +2 -1
  221. package/lib/components/teams/AnswerSurfaces.js +1 -1
  222. package/lib/components/teams/AnswerSurfacesView.js +2 -2
  223. package/lib/components/teams/TeamNotebookView.d.ts +1 -1
  224. package/lib/components/teams/TeamNotebookView.js +1 -1
  225. package/lib/components/teams/sceneTranscript.d.ts +1 -1
  226. package/lib/examples/A2UiAgentExample.js +3 -3
  227. package/lib/examples/A2UiComponentsGalleryExample.js +2 -2
  228. package/lib/examples/A2UiContactCardExample.js +2 -2
  229. package/lib/examples/A2UiJupyterOutputExample.js +3 -3
  230. package/lib/examples/A2UiRestaurantExample.js +2 -2
  231. package/lib/examples/A2UiViewerExample.js +2 -2
  232. package/lib/examples/AgentA2AExample.js +3 -3
  233. package/lib/examples/AgentCheckpointsExample.js +3 -3
  234. package/lib/examples/AgentCodeSandboxExample.js +2 -2
  235. package/lib/examples/AgentCodeSandboxesExample.js +2 -2
  236. package/lib/examples/AgentCodemodeExample.js +3 -3
  237. package/lib/examples/AgentCompactionExample.js +2 -2
  238. package/lib/examples/AgentDecideExample.js +3 -3
  239. package/lib/examples/AgentEvalsExample.js +2 -2
  240. package/lib/examples/AgentGuardrailsExample.js +3 -3
  241. package/lib/examples/AgentHooksExample.js +2 -2
  242. package/lib/examples/AgentInferenceProviderExample.js +2 -2
  243. package/lib/examples/AgentMCPExample.js +3 -3
  244. package/lib/examples/AgentMemoryExample.js +2 -2
  245. package/lib/examples/AgentMonitoringExample.js +3 -3
  246. package/lib/examples/AgentNotificationsExample.js +2 -2
  247. package/lib/examples/AgentOtelExample.js +2 -2
  248. package/lib/examples/AgentOutputsExample.js +2 -2
  249. package/lib/examples/AgentParametersExample.js +2 -2
  250. package/lib/examples/AgentSkillsExample.js +2 -2
  251. package/lib/examples/AgentSubagentsExample.js +2 -2
  252. package/lib/examples/AgentToolApprovalsExample.js +2 -2
  253. package/lib/examples/AgentTriggersExample.js +2 -2
  254. package/lib/examples/AssistantExample.js +1 -1
  255. package/lib/examples/DecksAgent.js +2 -2
  256. package/lib/examples/DocumentPageAgent.js +1 -1
  257. package/lib/examples/LoopAppComputerExample.js +1 -1
  258. package/lib/examples/LoopShellExample.js +3 -3
  259. package/lib/examples/LoopWorkspaceExample.d.ts +1 -1
  260. package/lib/examples/LoopWorkspaceExample.js +5 -5
  261. package/lib/examples/NotebookPageAgent.js +1 -1
  262. package/lib/examples/utils/AssistantGalleryGrid.js +1 -1
  263. package/lib/examples/utils/owlCharacterPlugin.js +1 -1
  264. package/lib/index.d.ts +1 -1
  265. package/lib/index.js +1 -1
  266. package/lib/loop-example-main.js +1 -1
  267. package/lib/loop-main.js +9 -9
  268. package/lib/stories/loop/ReferenceScreens.js +1 -1
  269. package/lib/ui-plugins/MCPUIPlugin.d.ts +14 -0
  270. package/lib/ui-plugins/MCPUIPlugin.js +17 -48
  271. package/lib/ui-plugins/index.d.ts +1 -1
  272. package/lib/ui-plugins/index.js +1 -1
  273. package/package.json +3 -2
  274. /package/lib/{loop → apps}/apps/AppKept.js +0 -0
  275. /package/lib/{loop → apps}/apps/AppRuntimePlugins.d.ts +0 -0
  276. /package/lib/{loop → apps}/apps/agent.d.ts +0 -0
  277. /package/lib/{loop → apps}/apps/appspec.js +0 -0
  278. /package/lib/{loop → apps}/apps/checks.d.ts +0 -0
  279. /package/lib/{loop → apps}/apps/composer.js +0 -0
  280. /package/lib/{loop → apps}/apps/computer.js +0 -0
  281. /package/lib/{loop → apps}/apps/customComponents.d.ts +0 -0
  282. /package/lib/{loop → apps}/apps/hostTools.js +0 -0
  283. /package/lib/{loop → apps}/apps/kept.js +0 -0
  284. /package/lib/{loop → apps}/apps/language.js +0 -0
  285. /package/lib/{loop → apps}/apps/pluginPair.js +0 -0
  286. /package/lib/{loop → apps}/apps/records.js +0 -0
  287. /package/lib/{loop → apps}/apps/rules.d.ts +0 -0
  288. /package/lib/{loop → apps}/apps/threads.js +0 -0
  289. /package/lib/{loop → apps}/apps/uploads.js +0 -0
  290. /package/lib/{loop → apps}/apps/visitorToken.d.ts +0 -0
  291. /package/lib/{loop → apps}/apps/yaml.d.ts +0 -0
  292. /package/lib/{loop → apps}/core/a2uiComponents.d.ts +0 -0
  293. /package/lib/{loop → apps}/core/canvasBlocks.d.ts +0 -0
  294. /package/lib/{loop → apps}/core/focusRequests.d.ts +0 -0
  295. /package/lib/{loop → apps}/core/promptStore.d.ts +0 -0
  296. /package/lib/{loop → apps}/core/surfaceRequests.js +0 -0
  297. /package/lib/{loop → apps}/core/toolbar.d.ts +0 -0
  298. /package/lib/{loop → apps}/embed/AppEmbed.d.ts +0 -0
  299. /package/lib/{loop → apps}/embed/datalayer-app.d.ts +0 -0
  300. /package/lib/{loop → apps}/embed/element.d.ts +0 -0
  301. /package/lib/{loop → apps}/embed/embedConfig.js +0 -0
  302. /package/lib/{loop → apps}/embed/embedSession.js +0 -0
  303. /package/lib/{loop → apps}/embed/embedTheme.d.ts +0 -0
  304. /package/lib/{loop → apps}/embed/embedTheme.js +0 -0
  305. /package/lib/{loop → apps}/embed/hostBridge.js +0 -0
  306. /package/lib/{loop → apps}/extensions.d.ts +0 -0
  307. /package/lib/{loop → apps}/plugins/a2a-sidebar/index.d.ts +0 -0
  308. /package/lib/{loop → apps}/plugins/a2ui/A2uiView.js +0 -0
  309. /package/lib/{loop → apps}/plugins/a2ui/index.d.ts +0 -0
  310. /package/lib/{loop → apps}/plugins/a2ui-scene/index.js +0 -0
  311. /package/lib/{loop → apps}/plugins/a2ui-surface/InlineSurface.js +0 -0
  312. /package/lib/{loop → apps}/plugins/a2ui-surface/SurfaceToolResult.js +0 -0
  313. /package/lib/{loop → apps}/plugins/a2ui-surface/index.d.ts +0 -0
  314. /package/lib/{loop → apps}/plugins/a2ui-surface/index.js +0 -0
  315. /package/lib/{loop → apps}/plugins/a2ui-surface/ownComponents.d.ts +0 -0
  316. /package/lib/{loop → apps}/plugins/a2ui-surface/toolResult.js +0 -0
  317. /package/lib/{loop → apps}/plugins/agent-a2a/index.d.ts +0 -0
  318. /package/lib/{loop → apps}/plugins/agent-a2ui/index.d.ts +0 -0
  319. /package/lib/{loop → apps}/plugins/agent-a2ui-jupyter-output/index.d.ts +0 -0
  320. /package/lib/{loop → apps}/plugins/agent-checkpoints/index.d.ts +0 -0
  321. /package/lib/{loop → apps}/plugins/agent-code-sandbox/index.d.ts +0 -0
  322. /package/lib/{loop → apps}/plugins/agent-code-sandboxes/index.d.ts +0 -0
  323. /package/lib/{loop → apps}/plugins/agent-codemode/index.d.ts +0 -0
  324. /package/lib/{loop → apps}/plugins/agent-compaction/index.d.ts +0 -0
  325. /package/lib/{loop → apps}/plugins/agent-evals/index.d.ts +0 -0
  326. /package/lib/{loop → apps}/plugins/agent-guardrails/index.d.ts +0 -0
  327. /package/lib/{loop → apps}/plugins/agent-hooks/index.d.ts +0 -0
  328. /package/lib/{loop → apps}/plugins/agent-inference/index.d.ts +0 -0
  329. /package/lib/{loop → apps}/plugins/agent-mcp/index.d.ts +0 -0
  330. /package/lib/{loop → apps}/plugins/agent-memory/index.d.ts +0 -0
  331. /package/lib/{loop → apps}/plugins/agent-monitoring/index.d.ts +0 -0
  332. /package/lib/{loop → apps}/plugins/agent-notifications/index.d.ts +0 -0
  333. /package/lib/{loop → apps}/plugins/agent-otel/index.d.ts +0 -0
  334. /package/lib/{loop → apps}/plugins/agent-outputs/index.d.ts +0 -0
  335. /package/lib/{loop → apps}/plugins/agent-parameters/index.d.ts +0 -0
  336. /package/lib/{loop → apps}/plugins/agent-skills/index.d.ts +0 -0
  337. /package/lib/{loop → apps}/plugins/agent-subagents/index.d.ts +0 -0
  338. /package/lib/{loop → apps}/plugins/agent-tool-approvals/index.d.ts +0 -0
  339. /package/lib/{loop → apps}/plugins/agent-triggers/index.d.ts +0 -0
  340. /package/lib/{loop → apps}/plugins/agents/AgentSummaryPanel.js +0 -0
  341. /package/lib/{loop → apps}/plugins/agents/AnonymousKeyBadge.js +0 -0
  342. /package/lib/{loop → apps}/plugins/agents/DatalayerAgentBridge.js +0 -0
  343. /package/lib/{loop → apps}/plugins/agents/DatalayerAgentMount.js +0 -0
  344. /package/lib/{loop → apps}/plugins/agents/SandboxSelector.js +0 -0
  345. /package/lib/{loop → apps}/plugins/agents/SandboxStatusBridge.js +0 -0
  346. /package/lib/{loop → apps}/plugins/agents/SandboxView.js +0 -0
  347. /package/lib/{loop → apps}/plugins/agents/TeamMemberPicker.js +0 -0
  348. /package/lib/{loop → apps}/plugins/agents/appLaunch.js +0 -0
  349. /package/lib/{loop → apps}/plugins/agents/browserService.d.ts +0 -0
  350. /package/lib/{loop → apps}/plugins/agents/plugin.js +0 -0
  351. /package/lib/{loop → apps}/plugins/agents/specSubagents.js +0 -0
  352. /package/lib/{loop → apps}/plugins/agents/useSandboxService.d.ts +0 -0
  353. /package/lib/{loop → apps}/plugins/agents/useTeamSelection.d.ts +0 -0
  354. /package/lib/{loop → apps}/plugins/agentspecs/AgentspecPicker.js +0 -0
  355. /package/lib/{loop → apps}/plugins/agentspecs/index.d.ts +0 -0
  356. /package/lib/{loop → apps}/plugins/app-activity/AppActivity.js +0 -0
  357. /package/lib/{loop → apps}/plugins/app-activity/index.d.ts +0 -0
  358. /package/lib/{loop → apps}/plugins/app-activity/index.js +0 -0
  359. /package/lib/{loop → apps}/plugins/app-computer/index.d.ts +0 -0
  360. /package/lib/{loop → apps}/plugins/app-computer/index.js +0 -0
  361. /package/lib/{loop → apps}/plugins/app-elements/AppElements.js +0 -0
  362. /package/lib/{loop → apps}/plugins/app-page/appPageModel.js +0 -0
  363. /package/lib/{loop → apps}/plugins/app-page/index.js +0 -0
  364. /package/lib/{loop → apps}/plugins/app-rules/AppRulesCard.js +0 -0
  365. /package/lib/{loop → apps}/plugins/app-rules/index.d.ts +0 -0
  366. /package/lib/{loop → apps}/plugins/app-rules/index.js +0 -0
  367. /package/lib/{loop → apps}/plugins/assistant/index.js +0 -0
  368. /package/lib/{loop → apps}/plugins/chat/chatViewTools.d.ts +0 -0
  369. /package/lib/{loop → apps}/plugins/chat/index.d.ts +0 -0
  370. /package/lib/{loop → apps}/plugins/chat-extras/index.d.ts +0 -0
  371. /package/lib/{loop → apps}/plugins/chat-header/HeaderView.js +0 -0
  372. /package/lib/{loop → apps}/plugins/chat-header/index.d.ts +0 -0
  373. /package/lib/{loop → apps}/plugins/chat-header/index.js +0 -0
  374. /package/lib/{loop → apps}/plugins/chat-view/index.d.ts +0 -0
  375. /package/lib/{loop → apps}/plugins/checkpoints-sidebar/index.d.ts +0 -0
  376. /package/lib/{loop → apps}/plugins/commands/index.d.ts +0 -0
  377. /package/lib/{loop → apps}/plugins/decks/DeckSurface.d.ts +0 -0
  378. /package/lib/{loop → apps}/plugins/decks/DeckSurface.js +0 -0
  379. /package/lib/{loop → apps}/plugins/decks/DecksMenu.d.ts +0 -0
  380. /package/lib/{loop → apps}/plugins/decks/DecksMenu.js +0 -0
  381. /package/lib/{loop → apps}/plugins/decks/index.d.ts +0 -0
  382. /package/lib/{loop → apps}/plugins/document/DocumentView.js +0 -0
  383. /package/lib/{loop → apps}/plugins/document/index.d.ts +0 -0
  384. /package/lib/{loop → apps}/plugins/document/openingDocument.js +0 -0
  385. /package/lib/{loop → apps}/plugins/document-toolbar/SandboxStatusItem.js +0 -0
  386. /package/lib/{loop → apps}/plugins/document-toolbar/index.d.ts +0 -0
  387. /package/lib/{loop → apps}/plugins/document-toolbar/plugin.d.ts +0 -0
  388. /package/lib/{loop → apps}/plugins/document-view/index.d.ts +0 -0
  389. /package/lib/{loop → apps}/plugins/graph/GraphToggle.js +0 -0
  390. /package/lib/{loop → apps}/plugins/graph/GraphView.js +0 -0
  391. /package/lib/{loop → apps}/plugins/graph/index.d.ts +0 -0
  392. /package/lib/{loop → apps}/plugins/input-prompt/ComposerView.js +0 -0
  393. /package/lib/{loop → apps}/plugins/input-prompt/index.d.ts +0 -0
  394. /package/lib/{loop → apps}/plugins/input-prompt/index.js +0 -0
  395. /package/lib/{loop → apps}/plugins/models/index.d.ts +0 -0
  396. /package/lib/{loop → apps}/plugins/notebook/NotebookView.js +0 -0
  397. /package/lib/{loop → apps}/plugins/notebook/index.d.ts +0 -0
  398. /package/lib/{loop → apps}/plugins/notebook/openingNotebook.js +0 -0
  399. /package/lib/{loop → apps}/plugins/notebook-toolbar/index.d.ts +0 -0
  400. /package/lib/{loop → apps}/plugins/notebook-toolbar/items.d.ts +0 -0
  401. /package/lib/{loop → apps}/plugins/notebook-toolbar/items.js +0 -0
  402. /package/lib/{loop → apps}/plugins/notebook-toolbar/plugin.d.ts +0 -0
  403. /package/lib/{loop → apps}/plugins/notebook-view/index.d.ts +0 -0
  404. /package/lib/{loop → apps}/plugins/page-layout/index.d.ts +0 -0
  405. /package/lib/{loop → apps}/plugins/page-layout/index.js +0 -0
  406. /package/lib/{loop → apps}/plugins/plugins-panel/index.d.ts +0 -0
  407. /package/lib/{loop → apps}/plugins/prompt/NewChatAction.js +0 -0
  408. /package/lib/{loop → apps}/plugins/prompt/index.d.ts +0 -0
  409. /package/lib/{loop → apps}/plugins/shell/index.js +0 -0
  410. /package/lib/{loop → apps}/plugins/shell/useEditorPreviews.js +0 -0
  411. /package/lib/{loop → apps}/plugins/subagent-activity/SubagentPulse.js +0 -0
  412. /package/lib/{loop → apps}/plugins/subagent-activity/index.d.ts +0 -0
  413. /package/lib/{loop → apps}/plugins/view-switch/index.js +0 -0
  414. /package/lib/{loop → apps}/plugins/window-frame/WindowFrame.js +0 -0
  415. /package/lib/{loop → apps}/plugins/window-frame/index.d.ts +0 -0
  416. /package/lib/{loop → apps}/shell/LoopWorkspace.js +0 -0
  417. /package/lib/{loop → apps}/shell/PluginToggles.js +0 -0
  418. /package/lib/{loop → apps}/shell/SidebarRail.js +0 -0
  419. /package/lib/{loop → apps}/shell/ViewSwitcher.js +0 -0
  420. /package/lib/{loop → apps}/shell/WorkspaceFullScreenAction.js +0 -0
  421. /package/lib/{loop → apps}/shell/useWorkspaceFullScreen.js +0 -0
@@ -18,7 +18,7 @@
18
18
  * whether the choice came from the selector, `/editor`, or the generic
19
19
  * cycle command.
20
20
  *
21
- * @module loop/plugins/shell/editorChoice
21
+ * @module apps/plugins/shell/editorChoice
22
22
  */
23
23
  import { NONE_VIEW, chooseView, getViewChoice, nextView, seedViewChoice, setViewAnnouncer, setViewOptions, subscribeViewChoice, } from '@datalayer/reactor-shell';
24
24
  import { requestSurface } from '../../core/surfaceRequests';
@@ -13,7 +13,7 @@
13
13
  * through the same channel `/notebook` and `/document` use;
14
14
  * - it keeps the `/editor` slash command, in the loop's own registry.
15
15
  *
16
- * @module loop/plugins/shell
16
+ * @module apps/plugins/shell
17
17
  */
18
18
  import type { JSX } from 'react';
19
19
  export declare const SHELL_PLUGIN_NAME = "@datalayer/loop-plugin-shell";
@@ -15,7 +15,7 @@
15
15
  * document — this file must not be the import that drags lexical into every
16
16
  * bundle.
17
17
  *
18
- * @module loop/plugins/shell/useEditorPreviews
18
+ * @module apps/plugins/shell/useEditorPreviews
19
19
  */
20
20
  import type { ReactNode } from 'react';
21
21
  export type EditorPreview = {
@@ -8,7 +8,7 @@
8
8
  * name is a team member's, and the generic agent mark otherwise; the tooltip
9
9
  * says who it is.
10
10
  *
11
- * @module loop/plugins/subagent-activity/SubagentPulse
11
+ * @module apps/plugins/subagent-activity/SubagentPulse
12
12
  */
13
13
  import type { JSX } from 'react';
14
14
  export declare const PULSE_ANIMATION = "loop-subagent-pulse";
@@ -11,7 +11,7 @@
11
11
  * was a pause: the parent went quiet, and whether anything was happening
12
12
  * showed only in a side panel a host may not draw.
13
13
  *
14
- * @module loop/plugins/subagent-activity
14
+ * @module apps/plugins/subagent-activity
15
15
  */
16
16
  import { definePlugin } from '@datalayer/reactor';
17
17
  import { LoopSlots } from '../../core';
@@ -14,7 +14,7 @@
14
14
  * not on offer (no notebook plugin, no notebook button). The chat's icon is
15
15
  * always there — the conversation is the view that remains.
16
16
  *
17
- * @module loop/plugins/view-switch
17
+ * @module apps/plugins/view-switch
18
18
  */
19
19
  import type { ComponentType, JSX } from 'react';
20
20
  export type ViewPluginOptions = {
@@ -14,7 +14,7 @@
14
14
  * than passed down: a plugin adds a control without the frame knowing what it
15
15
  * is, and without the host that mounted the frame having to forward it.
16
16
  *
17
- * @module loop/plugins/window-frame/WindowFrame
17
+ * @module apps/plugins/window-frame/WindowFrame
18
18
  */
19
19
  import type { ReactNode } from 'react';
20
20
  export type WindowFrameProps = {
@@ -29,7 +29,7 @@ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
29
29
  * </WindowFrame>
30
30
  * ```
31
31
  *
32
- * @module loop/plugins/window-frame
32
+ * @module apps/plugins/window-frame
33
33
  */
34
34
  import { definePlugin } from '@datalayer/reactor';
35
35
  import { Box } from '@datalayer/primer-addons';
@@ -5,7 +5,7 @@
5
5
  * them can each import the names without importing each other — the same
6
6
  * reason the graph plugin keeps its view type apart.
7
7
  *
8
- * @module loop/plugins/window-frame/slots
8
+ * @module apps/plugins/window-frame/slots
9
9
  */
10
10
  /**
11
11
  * The leading edge of the title bar.
@@ -9,7 +9,7 @@
9
9
  * them can each import the names without importing each other — the same
10
10
  * reason the graph plugin keeps its view type apart.
11
11
  *
12
- * @module loop/plugins/window-frame/slots
12
+ * @module apps/plugins/window-frame/slots
13
13
  */
14
14
  /**
15
15
  * The leading edge of the title bar.
@@ -17,7 +17,7 @@
17
17
  * <LoopWorkspace reactor={reactor} serverUrl={serverUrl} agentId={agentId} />
18
18
  * ```
19
19
  *
20
- * @module loop/presets
20
+ * @module apps/presets
21
21
  */
22
22
  import { type PluginRef } from '@datalayer/reactor';
23
23
  import { type AgentsConfig, type SandboxTarget } from './plugins/agents';
@@ -21,7 +21,7 @@
21
21
  * <LoopWorkspace reactor={reactor} serverUrl={serverUrl} agentId={agentId} />
22
22
  * ```
23
23
  *
24
- * @module loop/presets
24
+ * @module apps/presets
25
25
  */
26
26
  import { configurePlugin } from '@datalayer/reactor';
27
27
  import { ThemePlugin } from '@datalayer/primer-addons/lib/reactor';
@@ -17,7 +17,7 @@
17
17
  * the same component run as a page, inside the Datalayer app, and later inside
18
18
  * a JupyterLab panel.
19
19
  *
20
- * @module loop/shell/LoopWorkspace
20
+ * @module apps/shell/LoopWorkspace
21
21
  */
22
22
  import type { JSX } from 'react';
23
23
  import type { ReactNode } from 'react';
@@ -9,7 +9,7 @@
9
9
  * Not part of the workspace itself — the workspace has one navigation element
10
10
  * and no settings tree (§3.5). This belongs to the examples that demonstrate it.
11
11
  *
12
- * @module loop/shell/PluginToggles
12
+ * @module apps/shell/PluginToggles
13
13
  */
14
14
  import type { JSX } from 'react';
15
15
  export type PluginTogglesProps = {
@@ -14,7 +14,7 @@
14
14
  * under a generic icon. Every panel stays mounted while another is shown,
15
15
  * so a feed keeps its place and a live computer its connection.
16
16
  *
17
- * @module loop/shell/SidebarRail
17
+ * @module apps/shell/SidebarRail
18
18
  */
19
19
  import type { ElementType, JSX } from 'react';
20
20
  import type { ReactorSlotComponent } from '@datalayer/reactor/react';
@@ -5,7 +5,7 @@
5
5
  * is the whole difference from `EphemeralSurfaceControl`: a fifth view costs a
6
6
  * plugin, not an edit to a union type.
7
7
  *
8
- * @module loop/shell/ViewSwitcher
8
+ * @module apps/shell/ViewSwitcher
9
9
  */
10
10
  import type { JSX } from 'react';
11
11
  import type { Contribution } from '@datalayer/reactor';
@@ -18,7 +18,7 @@
18
18
  * first answer arrives because that is where the reader is looking; a header
19
19
  * icon that pulsed would be chrome asking for attention it has not earned.
20
20
  *
21
- * @module loop/shell/WorkspaceFullScreenAction
21
+ * @module apps/shell/WorkspaceFullScreenAction
22
22
  */
23
23
  import type { JSX } from 'react';
24
24
  export declare function WorkspaceFullScreenAction(): JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The workspace shell: a prompt at the bottom, one view above it.
3
3
  *
4
- * @module loop/shell
4
+ * @module apps/shell
5
5
  */
6
6
  export { LoopWorkspace, buildLoopReactor, type LoopWorkspaceProps, } from './LoopWorkspace';
7
7
  export { ViewSwitcher, type ViewSwitcherProps } from './ViewSwitcher';
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * The workspace shell: a prompt at the bottom, one view above it.
7
7
  *
8
- * @module loop/shell
8
+ * @module apps/shell
9
9
  */
10
10
  export { LoopWorkspace, buildLoopReactor, } from './LoopWorkspace';
11
11
  export { ViewSwitcher } from './ViewSwitcher';
@@ -7,7 +7,7 @@
7
7
  * `loop`) gives `0ms`, and nothing moves; nor does anything when the person
8
8
  * asked for reduced motion.
9
9
  *
10
- * @module loop/shell/paneMotion
10
+ * @module apps/shell/paneMotion
11
11
  */
12
12
  /** The keyframes' name for a pane opening from a side: one per side. */
13
13
  export declare const paneOpenKeyframes: (from: "left" | "right") => string;
@@ -11,7 +11,7 @@
11
11
  * `loop`) gives `0ms`, and nothing moves; nor does anything when the person
12
12
  * asked for reduced motion.
13
13
  *
14
- * @module loop/shell/paneMotion
14
+ * @module apps/shell/paneMotion
15
15
  */
16
16
  /** The keyframes' name for a pane opening from a side: one per side. */
17
17
  export const paneOpenKeyframes = (from) => from === 'left' ? 'loopPaneOpenLeft' : 'loopPaneOpenRight';
@@ -19,7 +19,7 @@
19
19
  * the two is in play (`usingApi`); painting the overlay stays with the caller,
20
20
  * which is the one that knows what it looks like.
21
21
  *
22
- * @module loop/shell/useWorkspaceFullScreen
22
+ * @module apps/shell/useWorkspaceFullScreen
23
23
  */
24
24
  import type { RefObject } from 'react';
25
25
  export type WorkspaceFullScreen = {
@@ -10,7 +10,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
10
10
  * @module chat/ChatLanguage
11
11
  */
12
12
  import { createContext, useContext, useMemo, } from 'react';
13
- import { preferredLanguages } from '../loop/apps/language';
13
+ import { preferredLanguages } from '../apps/apps/language';
14
14
  import { CHAT_WORDS, chatLanguage } from './words';
15
15
  /** The language the host says, as BCP 47 tags it; unsaid, the browser's. */
16
16
  const ChatLanguageContext = createContext(undefined);
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Box } from '@datalayer/primer-addons';
3
3
  import { Streamdown } from 'streamdown';
4
+ import { REHYPE_PLUGINS_WITHOUT_HTML } from './markdownWithoutHtml';
4
5
  import { streamdownMarkdownStyles } from '../styles/streamdownStyles';
5
6
  import { normalizeAssistantMarkdown } from './assistantMarkdown';
6
7
  export function ChatMarkdown({ text, density = 'comfortable', }) {
@@ -13,6 +14,6 @@ export function ChatMarkdown({ text, density = 'comfortable', }) {
13
14
  '& p:last-child': { marginBottom: 0 },
14
15
  }
15
16
  : {}),
16
- }, children: _jsx(Streamdown, { children: normalizeAssistantMarkdown(text) }) }));
17
+ }, children: _jsx(Streamdown, { rehypePlugins: REHYPE_PLUGINS_WITHOUT_HTML, children: normalizeAssistantMarkdown(text) }) }));
17
18
  }
18
19
  export default ChatMarkdown;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Markdown without markup (STUDIO D-22): what every renderer of an agent's
3
+ * words hands Streamdown, so that no markup a model or an application writes
4
+ * reaches the page.
5
+ *
6
+ * Streamdown parses the HTML written in markdown (`rehype-raw`) and then
7
+ * sanitizes it; sanitized markup still reaches the page — an application
8
+ * hosted on the platform's origin would draw what its model wrote. Here the
9
+ * HTML is never parsed: each piece of it is shown as the text it is
10
+ * (`<script>…</script>` reads as those characters), and the rest of
11
+ * Streamdown's plugins — maths, sanitizing, hardened links — run as before.
12
+ *
13
+ * @module chat/messages/markdownWithoutHtml
14
+ */
15
+ import { type StreamdownProps } from 'streamdown';
16
+ type PluggableList = NonNullable<StreamdownProps['rehypePlugins']>;
17
+ /** A node of the HTML tree, as far as this plugin reads it. */
18
+ type HastNode = {
19
+ type: string;
20
+ value?: string;
21
+ children?: HastNode[];
22
+ };
23
+ /**
24
+ * A rehype plugin: every piece of HTML written in the markdown (`raw` nodes,
25
+ * which `remark-rehype` keeps) becomes the text it is.
26
+ */
27
+ export declare function rehypeHtmlAsText(): (tree: HastNode) => void;
28
+ /**
29
+ * Streamdown's rehype plugins without `rehype-raw`, the HTML shown as text
30
+ * first: what every Streamdown of the chat, the page layout and the cards is
31
+ * given.
32
+ */
33
+ export declare const REHYPE_PLUGINS_WITHOUT_HTML: PluggableList;
34
+ export {};
@@ -0,0 +1,53 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * Markdown without markup (STUDIO D-22): what every renderer of an agent's
7
+ * words hands Streamdown, so that no markup a model or an application writes
8
+ * reaches the page.
9
+ *
10
+ * Streamdown parses the HTML written in markdown (`rehype-raw`) and then
11
+ * sanitizes it; sanitized markup still reaches the page — an application
12
+ * hosted on the platform's origin would draw what its model wrote. Here the
13
+ * HTML is never parsed: each piece of it is shown as the text it is
14
+ * (`<script>…</script>` reads as those characters), and the rest of
15
+ * Streamdown's plugins — maths, sanitizing, hardened links — run as before.
16
+ *
17
+ * @module chat/messages/markdownWithoutHtml
18
+ */
19
+ import { defaultRehypePlugins } from 'streamdown';
20
+ function htmlAsText(node) {
21
+ if (!node.children) {
22
+ return;
23
+ }
24
+ node.children = node.children.map(child => {
25
+ if (child.type === 'raw') {
26
+ return { type: 'text', value: child.value ?? '' };
27
+ }
28
+ htmlAsText(child);
29
+ return child;
30
+ });
31
+ }
32
+ /**
33
+ * A rehype plugin: every piece of HTML written in the markdown (`raw` nodes,
34
+ * which `remark-rehype` keeps) becomes the text it is.
35
+ */
36
+ export function rehypeHtmlAsText() {
37
+ return (tree) => htmlAsText(tree);
38
+ }
39
+ const { raw, ...withoutRaw } = defaultRehypePlugins;
40
+ if (!raw) {
41
+ // Streamdown no longer names its raw-HTML plugin `raw`: what it parses
42
+ // has to be read again before these plugins are trusted.
43
+ throw new Error("Streamdown's rehype plugins have no `raw`: markdownWithoutHtml cannot say what it leaves out.");
44
+ }
45
+ /**
46
+ * Streamdown's rehype plugins without `rehype-raw`, the HTML shown as text
47
+ * first: what every Streamdown of the chat, the page layout and the cards is
48
+ * given.
49
+ */
50
+ export const REHYPE_PLUGINS_WITHOUT_HTML = [
51
+ rehypeHtmlAsText,
52
+ ...Object.values(withoutRaw),
53
+ ];
@@ -14,6 +14,7 @@ import { Text, Button } from '@primer/react';
14
14
  import { Box } from '@datalayer/primer-addons';
15
15
  import { ChevronDownIcon } from '@primer/octicons-react';
16
16
  import { Streamdown } from 'streamdown';
17
+ import { REHYPE_PLUGINS_WITHOUT_HTML } from '../messages/markdownWithoutHtml';
17
18
  import { streamdownMarkdownStyles } from '../styles/streamdownStyles';
18
19
  /**
19
20
  * ReasoningPart component for displaying AI reasoning/thinking.
@@ -48,6 +49,6 @@ export function ReasoningPart({ text, isStreaming }) {
48
49
  '&:hover': {
49
50
  color: 'fg.default',
50
51
  },
51
- }, children: [_jsx(Text, { sx: { fontSize: 1 }, children: "\uD83E\uDDE0" }), _jsx(Text, { sx: { fontSize: 1, fontWeight: 'normal' }, children: isStreaming ? 'Thinking...' : 'Reasoning' }), _jsx(Box, { as: "span", display: "inline-flex", marginLeft: "auto", transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)', transition: "transform 0.2s", children: _jsx(ChevronDownIcon, {}) })] }), isExpanded && (_jsx(Box, { marginTop: 2, padding: 3, backgroundColor: "canvas.inset", borderRadius: 2, border: "1px solid", borderColor: "border.default", color: "fg.muted", sx: streamdownMarkdownStyles, children: _jsx(Streamdown, { children: text }) }))] }));
52
+ }, children: [_jsx(Text, { sx: { fontSize: 1 }, children: "\uD83E\uDDE0" }), _jsx(Text, { sx: { fontSize: 1, fontWeight: 'normal' }, children: isStreaming ? 'Thinking...' : 'Reasoning' }), _jsx(Box, { as: "span", display: "inline-flex", marginLeft: "auto", transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)', transition: "transform 0.2s", children: _jsx(ChevronDownIcon, {}) })] }), isExpanded && (_jsx(Box, { marginTop: 2, padding: 3, backgroundColor: "canvas.inset", borderRadius: 2, border: "1px solid", borderColor: "border.default", color: "fg.muted", sx: streamdownMarkdownStyles, children: _jsx(Streamdown, { rehypePlugins: REHYPE_PLUGINS_WITHOUT_HTML, children: text }) }))] }));
52
53
  }
53
54
  export default ReasoningPart;
@@ -3,6 +3,7 @@ import { Text, IconButton } from '@primer/react';
3
3
  import { Box } from '@datalayer/primer-addons';
4
4
  import { CopyIcon, SyncIcon } from '@primer/octicons-react';
5
5
  import { Streamdown } from 'streamdown';
6
+ import { REHYPE_PLUGINS_WITHOUT_HTML } from '../messages/markdownWithoutHtml';
6
7
  import { streamdownMarkdownStyles } from '../styles/streamdownStyles';
7
8
  /**
8
9
  * TextPart component for rendering text content with markdown support.
@@ -24,6 +25,6 @@ export function TextPart({ text, message, isLastPart, onRegenerate, }) {
24
25
  fontSize: 1,
25
26
  color: 'fg.muted',
26
27
  textTransform: 'uppercase',
27
- }, children: message.role === 'user' ? 'You' : 'Assistant' }), message.role === 'assistant' && isLastPart && (_jsxs(Box, { display: "flex", gap: 1, children: [_jsx(IconButton, { icon: SyncIcon, "aria-label": "Regenerate", size: "small", variant: "invisible", onClick: () => onRegenerate(message.id) }), _jsx(IconButton, { icon: CopyIcon, "aria-label": "Copy", size: "small", variant: "invisible", onClick: () => copy(text) })] }))] }), _jsx(Box, { sx: streamdownMarkdownStyles, children: _jsx(Streamdown, { children: text }) })] }));
28
+ }, children: message.role === 'user' ? 'You' : 'Assistant' }), message.role === 'assistant' && isLastPart && (_jsxs(Box, { display: "flex", gap: 1, children: [_jsx(IconButton, { icon: SyncIcon, "aria-label": "Regenerate", size: "small", variant: "invisible", onClick: () => onRegenerate(message.id) }), _jsx(IconButton, { icon: CopyIcon, "aria-label": "Copy", size: "small", variant: "invisible", onClick: () => copy(text) })] }))] }), _jsx(Box, { sx: streamdownMarkdownStyles, children: _jsx(Streamdown, { rehypePlugins: REHYPE_PLUGINS_WITHOUT_HTML, children: text }) })] }));
28
29
  }
29
30
  export default TextPart;
@@ -20,6 +20,13 @@ export type ChatWords = {
20
20
  demoKeyExpired: string;
21
21
  /** The person's key has run out. */
22
22
  keyExpired: string;
23
+ /**
24
+ * No runtime is assigned to the conversation on Datalayer (the pool had
25
+ * none, or its launch was refused), with why: nothing is sent.
26
+ */
27
+ noRuntime: (reason: string) => string;
28
+ /** Its runtime is still being assigned: nothing is sent until it is. */
29
+ runtimeStarting: string;
23
30
  /** The empty chat's title. */
24
31
  startConversation: string;
25
32
  /** The empty chat's line when it has no starters. */
package/lib/chat/words.js CHANGED
@@ -11,13 +11,13 @@
11
11
  * The chat reads them in the language its host says (`ChatLanguage`, which
12
12
  * `AppRenderer` and the embed set from their `language`), else in the first
13
13
  * the browser prefers that is here, else in English: as an application's own
14
- * words are picked (`loop/apps/language`).
14
+ * words are picked (`apps/apps/language`).
15
15
  *
16
16
  * Pure: no React ({@link useChatWords} is in `ChatLanguage`).
17
17
  *
18
18
  * @module chat/words
19
19
  */
20
- import { pickLanguage } from '../loop/apps/language';
20
+ import { pickLanguage } from '../apps/apps/language';
21
21
  /** The chat's words, by language. Another language reads English. */
22
22
  export const CHAT_WORDS = {
23
23
  en: {
@@ -30,6 +30,8 @@ export const CHAT_WORDS = {
30
30
  suggestedPrompts: 'Suggested prompts',
31
31
  demoKeyExpired: 'This demo runs on a shared key, and its time is up. Sign in to keep going.',
32
32
  keyExpired: 'Your key has expired. Sign in to keep going.',
33
+ noRuntime: reason => `No runtime is assigned to this conversation, so nothing can be sent. ${reason}`,
34
+ runtimeStarting: 'Its runtime is being assigned: you can send once it is.',
33
35
  startConversation: 'Start a conversation',
34
36
  sendToBegin: 'Send a message to begin chatting',
35
37
  copyTurn: 'Copy this turn',
@@ -99,6 +101,8 @@ export const CHAT_WORDS = {
99
101
  suggestedPrompts: 'Suggestions de questions',
100
102
  demoKeyExpired: 'Cette démo utilise une clé partagée, et son temps est écoulé. Connectez-vous pour continuer.',
101
103
  keyExpired: 'Votre clé a expiré. Connectez-vous pour continuer.',
104
+ noRuntime: reason => `Aucun runtime n’est attribué à cette conversation : rien ne peut être envoyé. ${reason}`,
105
+ runtimeStarting: 'Son runtime est en cours d’attribution : vous pourrez envoyer une fois qu’il le sera.',
102
106
  startConversation: 'Commencer une conversation',
103
107
  sendToBegin: 'Envoyez un message pour commencer',
104
108
  copyTurn: 'Copier cet échange',
@@ -170,6 +174,8 @@ export const CHAT_WORDS = {
170
174
  suggestedPrompts: 'Preguntas sugeridas',
171
175
  demoKeyExpired: 'Esta demo usa una clave compartida y su tiempo se ha agotado. Inicia sesión para continuar.',
172
176
  keyExpired: 'Tu clave ha caducado. Inicia sesión para continuar.',
177
+ noRuntime: reason => `No hay ningún runtime asignado a esta conversación, así que no se puede enviar nada. ${reason}`,
178
+ runtimeStarting: 'Se le está asignando un runtime: podrás enviar cuando lo tenga.',
173
179
  startConversation: 'Empieza una conversación',
174
180
  sendToBegin: 'Envía un mensaje para empezar',
175
181
  copyTurn: 'Copiar este turno',
@@ -241,6 +247,8 @@ export const CHAT_WORDS = {
241
247
  suggestedPrompts: 'Vorgeschlagene Fragen',
242
248
  demoKeyExpired: 'Diese Demo läuft mit einem geteilten Schlüssel, und ihre Zeit ist abgelaufen. Melde dich an, um weiterzumachen.',
243
249
  keyExpired: 'Dein Schlüssel ist abgelaufen. Melde dich an, um weiterzumachen.',
250
+ noRuntime: reason => `Diesem Gespräch ist keine Runtime zugewiesen, daher kann nichts gesendet werden. ${reason}`,
251
+ runtimeStarting: 'Eine Runtime wird zugewiesen: Du kannst senden, sobald sie da ist.',
244
252
  startConversation: 'Ein Gespräch beginnen',
245
253
  sendToBegin: 'Sende eine Nachricht, um zu beginnen',
246
254
  copyTurn: 'Diesen Austausch kopieren',
@@ -312,6 +320,8 @@ export const CHAT_WORDS = {
312
320
  suggestedPrompts: 'Domande suggerite',
313
321
  demoKeyExpired: 'Questa demo usa una chiave condivisa e il suo tempo è scaduto. Accedi per continuare.',
314
322
  keyExpired: 'La tua chiave è scaduta. Accedi per continuare.',
323
+ noRuntime: reason => `Nessun runtime è assegnato a questa conversazione, quindi non si può inviare nulla. ${reason}`,
324
+ runtimeStarting: 'Gli si sta assegnando un runtime: potrai inviare appena sarà pronto.',
315
325
  startConversation: 'Inizia una conversazione',
316
326
  sendToBegin: 'Invia un messaggio per iniziare',
317
327
  copyTurn: 'Copia questo scambio',
@@ -383,6 +393,8 @@ export const CHAT_WORDS = {
383
393
  suggestedPrompts: 'Perguntas sugeridas',
384
394
  demoKeyExpired: 'Esta demonstração usa uma chave compartilhada e o tempo dela acabou. Entre para continuar.',
385
395
  keyExpired: 'Sua chave expirou. Entre para continuar.',
396
+ noRuntime: reason => `Nenhum runtime está atribuído a esta conversa, então nada pode ser enviado. ${reason}`,
397
+ runtimeStarting: 'Um runtime está sendo atribuído: você poderá enviar assim que estiver.',
386
398
  startConversation: 'Comece uma conversa',
387
399
  sendToBegin: 'Envie uma mensagem para começar',
388
400
  copyTurn: 'Copiar esta troca',
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useMemo, useRef, useState } from 'react';
3
3
  import { createComponentImplementation, } from '@a2ui/react/v0_9';
4
- import { customComponentEntry } from '../../../loop/apps/customComponents';
4
+ import { customComponentEntry } from '../../../apps/apps/customComponents';
5
5
  import { componentSchemaOf } from '../datalayer/schema';
6
6
  import { BlockFrame, Problem } from '../datalayer/parts';
7
7
  import { CUSTOM_FRAME_SANDBOX, FRAME_TAG, customFrameDocument, customModule, frameNonce, fromFrame, } from './sandbox';
@@ -62,13 +62,11 @@ export function CustomComponentView({ component, props, fetcher, }) {
62
62
  };
63
63
  window.addEventListener('message', listen);
64
64
  return () => window.removeEventListener('message', listen);
65
- // eslint-disable-next-line react-hooks/exhaustive-deps
66
65
  }, [component, fetcher]);
67
66
  useEffect(() => {
68
67
  if (ready) {
69
68
  tell({ tag: FRAME_TAG, kind: 'props', props: given });
70
69
  }
71
- // eslint-disable-next-line react-hooks/exhaustive-deps
72
70
  }, [ready, given]);
73
71
  return (_jsxs(BlockFrame, { label: component.description || component.name, weight: props.weight, testId: `custom-${component.name}`, children: [problem ? _jsx(Problem, { children: problem }) : null, _jsx("iframe", { ref: frame, title: component.description || component.name, sandbox: CUSTOM_FRAME_SANDBOX, srcDoc: srcDoc, referrerPolicy: "no-referrer", style: {
74
72
  width: '100%',
@@ -21,7 +21,7 @@ import { UploadIcon } from '@primer/octicons-react';
21
21
  import { Box } from '@datalayer/primer-addons';
22
22
  import { BlockFrame, CARD_RADIUS, Problem, Quiet, isRecord } from './parts';
23
23
  import { ownImplementation } from './implementation';
24
- import { acceptsFile } from '../../../loop/apps/uploads';
24
+ import { acceptsFile } from '../../../apps/apps/uploads';
25
25
  /** The default the catalog gives `max_mb`. */
26
26
  const MAX_MB = 25;
27
27
  /**
@@ -36,21 +36,32 @@ export const A2UI_RENDER_SCOPE_SX = {
36
36
  '& .a2ui-caption': {
37
37
  color: 'var(--a2ui-text-caption-color, var(--a2ui-color-on-surface, #656d76))',
38
38
  },
39
+ /*
40
+ * A button is the theme's filled button (STUDIO P-04, T-30): its fill and
41
+ * its label are Primer's primary-button properties, which every theme and
42
+ * an application's accent set together (`themeAccentVars`), so the label
43
+ * is always the accent's own text on it. The label is a Text inside the
44
+ * button, which the `.a2ui-text` rule above paints in the surface's ink —
45
+ * a dark label on Spatial's dark accent — so it inherits the button's.
46
+ */
39
47
  '& .a2ui-button': {
40
48
  appearance: 'none',
41
49
  cursor: 'pointer',
42
- border: '1px solid var(--a2ui-color-primary, #1f883d)',
43
- background: 'var(--a2ui-color-primary, #1f883d)',
44
- color: 'var(--a2ui-color-on-primary, #ffffff)',
50
+ border: '1px solid var(--button-primary-bgColor-rest)',
51
+ background: 'var(--button-primary-bgColor-rest)',
52
+ color: 'var(--button-primary-fgColor-rest)',
45
53
  borderRadius: 'var(--a2ui-button-border-radius, 6px)',
46
54
  padding: 'var(--a2ui-button-padding, 5px 16px)',
47
55
  fontWeight: 'var(--a2ui-button-font-weight, 500)',
48
56
  boxShadow: 'var(--a2ui-button-box-shadow, none)',
49
57
  transition: 'background-color 0.15s ease, border-color 0.15s ease',
50
58
  },
59
+ '& .a2ui-button .a2ui-text': {
60
+ color: 'inherit',
61
+ },
51
62
  '& .a2ui-button:hover': {
52
- background: 'var(--a2ui-color-primary-hover, #1a7f37)',
53
- borderColor: 'var(--a2ui-color-primary-hover, #1a7f37)',
63
+ background: 'var(--button-primary-bgColor-hover)',
64
+ borderColor: 'var(--button-primary-bgColor-hover)',
54
65
  },
55
66
  '& .a2ui-button:disabled': {
56
67
  opacity: 0.6,
@@ -9,6 +9,7 @@ import { Box } from '@datalayer/primer-addons';
9
9
  import { ChevronDownIcon, DownloadIcon, EyeClosedIcon, EyeIcon, TrashIcon, } from '@primer/octicons-react';
10
10
  import { createMarkdownDownloadPayload, downloadTextPayload, formatDurationMs, formatRelativeTime, } from '@datalayer/core/lib/utils';
11
11
  import { Streamdown } from 'streamdown';
12
+ import { REHYPE_PLUGINS_WITHOUT_HTML } from '../../chat/messages/markdownWithoutHtml';
12
13
  import { streamdownMarkdownStyles } from '../../chat/styles/streamdownStyles';
13
14
  const EVENT_KIND_VARIANT = {
14
15
  'agent-start-requested': 'attention',
@@ -100,7 +101,7 @@ export function NotificationEventCard({ event, onToggleRead, onDelete, onOpenAge
100
101
  color: 'fg.muted',
101
102
  minWidth: 0,
102
103
  flex: 1,
103
- }, children: outputText })] }) }), _jsx(Box, { mt: 2, children: _jsx(Box, { sx: streamdownMarkdownStyles, children: _jsx(Streamdown, { children: outputText }) }) })] }) }), _jsx(Button, { size: "small", variant: "invisible", sx: { p: 1, flexShrink: 0 }, title: "Download output markdown", "aria-label": "Download output markdown", onClick: () => {
104
+ }, children: outputText })] }) }), _jsx(Box, { mt: 2, children: _jsx(Box, { sx: streamdownMarkdownStyles, children: _jsx(Streamdown, { rehypePlugins: REHYPE_PLUGINS_WITHOUT_HTML, children: outputText }) }) })] }) }), _jsx(Button, { size: "small", variant: "invisible", sx: { p: 1, flexShrink: 0 }, title: "Download output markdown", "aria-label": "Download output markdown", onClick: () => {
104
105
  const payload = createMarkdownDownloadPayload(outputText, `${runtimeId}-output`);
105
106
  downloadTextPayload(payload);
106
107
  }, children: _jsx(DownloadIcon, { size: 12 }) })] }) })), _jsx(Box, { mt: 2, p: 2, borderRadius: 2, border: "1px solid", borderColor: "border.muted", bg: "canvas.subtle", children: _jsxs("details", { open: isDetailsExpanded, children: [_jsx("summary", { onClick: e => {
@@ -9,6 +9,7 @@ import { Box } from '@datalayer/primer-addons';
9
9
  import { ChevronDownIcon, DownloadIcon, EyeClosedIcon, EyeIcon, TrashIcon, } from '@primer/octicons-react';
10
10
  import { createMarkdownDownloadPayload, downloadTextPayload, formatDurationMs, formatRelativeTime, } from '@datalayer/core/lib/utils';
11
11
  import { Streamdown } from 'streamdown';
12
+ import { REHYPE_PLUGINS_WITHOUT_HTML } from '../../chat/messages/markdownWithoutHtml';
12
13
  import { streamdownMarkdownStyles } from '../../chat/styles/streamdownStyles';
13
14
  export function OutputCard({ event, onToggleRead, onDelete, onOpenAgent, }) {
14
15
  const [isOutputExpanded, setIsOutputExpanded] = useState(false);
@@ -42,7 +43,7 @@ export function OutputCard({ event, onToggleRead, onDelete, onOpenAgent, }) {
42
43
  color: 'fg.muted',
43
44
  minWidth: 0,
44
45
  flex: 1,
45
- }, children: outputText })] }) }), _jsx(Box, { mt: 2, children: _jsx(Box, { sx: streamdownMarkdownStyles, children: _jsx(Streamdown, { children: outputText }) }) })] }) }), _jsx(Button, { size: "small", variant: "invisible", sx: { p: 1, flexShrink: 0 }, title: "Download output markdown", "aria-label": "Download output markdown", onClick: () => {
46
+ }, children: outputText })] }) }), _jsx(Box, { mt: 2, children: _jsx(Box, { sx: streamdownMarkdownStyles, children: _jsx(Streamdown, { rehypePlugins: REHYPE_PLUGINS_WITHOUT_HTML, children: outputText }) }) })] }) }), _jsx(Button, { size: "small", variant: "invisible", sx: { p: 1, flexShrink: 0 }, title: "Download output markdown", "aria-label": "Download output markdown", onClick: () => {
46
47
  const payload = createMarkdownDownloadPayload(outputText, `${runtimeId}-output`);
47
48
  downloadTextPayload(payload);
48
49
  }, children: _jsx(DownloadIcon, { size: 12 }) })] }) }))] }));
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Suspense, lazy } from 'react';
3
3
  import { Text } from '@primer/react';
4
- import { answerAction } from '../../loop/plugins/a2ui-surface/toolResult';
4
+ import { answerAction } from '../../apps/plugins/a2ui-surface/toolResult';
5
5
  /** The renderer itself: A2UI and the catalog, loaded when a surface is drawn. */
6
6
  const AnswerSurfacesView = lazy(() => import('./AnswerSurfacesView'));
7
7
  /**
@@ -2,8 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useMemo, useState } from 'react';
3
3
  import { Spinner, Text } from '@primer/react';
4
4
  import { Box } from '@datalayer/primer-addons';
5
- import { InlineSurface, SURFACE_CATALOG_ID, } from '../../loop/plugins/a2ui-surface/InlineSurface';
6
- import { readA2uiToolResult } from '../../loop/plugins/a2ui-surface/toolResult';
5
+ import { InlineSurface, SURFACE_CATALOG_ID, } from '../../apps/plugins/a2ui-surface/InlineSurface';
6
+ import { readA2uiToolResult } from '../../apps/plugins/a2ui-surface/toolResult';
7
7
  import { pressedOf } from './AnswerSurfaces';
8
8
  function OneSurface({ surface, name, onPress, }) {
9
9
  const parsed = useMemo(() => readA2uiToolResult(surface.artifact.data, SURFACE_CATALOG_ID), [surface.artifact.data]);
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The notebook a member of the team gave, on the browser sandbox.
3
3
  *
4
- * What the loop's notebook view does (`loop/plugins/notebook/NotebookView`),
4
+ * What the loop's notebook view does (`apps/plugins/notebook/NotebookView`),
5
5
  * for a notebook that arrived over A2A: the browser sandbox
6
6
  * (`createBrowserSandboxService`, a JupyterLite Pyodide kernel in the page)
7
7
  * is started, and `EphemeralNotebook` is bound to its manager and its
@@ -7,7 +7,7 @@ import { Box } from '@datalayer/primer-addons';
7
7
  import { useSignalValue } from '@datalayer/reactor/react';
8
8
  import { notebookStore } from '@datalayer/jupyter-react';
9
9
  import { EphemeralNotebook } from '../../chat/notebook/EphemeralNotebook';
10
- import { createBrowserSandboxService } from '../../loop/plugins/agents/browserService';
10
+ import { createBrowserSandboxService } from '../../apps/plugins/agents/browserService';
11
11
  import { teamNotebookKernel } from './teamNotebookKernel';
12
12
  /** Each notebook drawn has its own id in jupyter-react's store. */
13
13
  let drawn = 0;