@datalayer/agent-runtimes 1.3.91 → 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 (419) 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/AppKept.d.ts +1 -1
  10. package/lib/{loop → apps}/apps/AppRenderer.d.ts +1 -1
  11. package/lib/{loop → apps}/apps/AppRenderer.js +2 -2
  12. package/lib/{loop → apps}/apps/AppRuntimePlugins.js +1 -1
  13. package/lib/{loop → apps}/apps/agent.js +1 -1
  14. package/lib/{loop → apps}/apps/appspec.d.ts +1 -1
  15. package/lib/{loop → apps}/apps/checks.js +1 -1
  16. package/lib/{loop → apps}/apps/composer.d.ts +1 -1
  17. package/lib/{loop → apps}/apps/computer.d.ts +1 -1
  18. package/lib/{loop → apps}/apps/customComponents.js +1 -1
  19. package/lib/{loop → apps}/apps/feedback.d.ts +1 -1
  20. package/lib/{loop → apps}/apps/hostTools.d.ts +1 -1
  21. package/lib/{loop → apps}/apps/index.d.ts +1 -1
  22. package/lib/{loop → apps}/apps/index.js +1 -1
  23. package/lib/{loop → apps}/apps/kept.d.ts +1 -1
  24. package/lib/{loop → apps}/apps/language.d.ts +1 -1
  25. package/lib/{loop → apps}/apps/pluginPair.d.ts +1 -1
  26. package/lib/{loop → apps}/apps/records.d.ts +1 -1
  27. package/lib/{loop → apps}/apps/rules.js +1 -1
  28. package/lib/{loop → apps}/apps/saved.d.ts +1 -1
  29. package/lib/{loop → apps}/apps/saved.js +1 -1
  30. package/lib/{loop → apps}/apps/settingsInputs.d.ts +1 -1
  31. package/lib/{loop → apps}/apps/settingsInputs.js +1 -1
  32. package/lib/{loop → apps}/apps/threads.d.ts +1 -1
  33. package/lib/{loop → apps}/apps/uploads.d.ts +1 -1
  34. package/lib/{loop → apps}/apps/visitorToken.js +1 -1
  35. package/lib/{loop → apps}/apps/yaml.js +1 -1
  36. package/lib/{loop → apps}/core/a2uiComponents.js +2 -2
  37. package/lib/{loop → apps}/core/canvasBlocks.js +2 -2
  38. package/lib/{loop → apps}/core/focusRequests.js +1 -1
  39. package/lib/{loop → apps}/core/index.js +1 -1
  40. package/lib/{loop → apps}/core/promptStore.js +1 -1
  41. package/lib/{loop → apps}/core/surfaceRequests.d.ts +1 -1
  42. package/lib/{loop → apps}/core/toolbar.js +1 -1
  43. package/lib/{loop → apps}/embed/AppEmbed.js +1 -1
  44. package/lib/{loop → apps}/embed/LoopEmbed.d.ts +1 -1
  45. package/lib/{loop → apps}/embed/LoopEmbed.js +1 -1
  46. package/lib/{loop → apps}/embed/datalayer-app.js +1 -1
  47. package/lib/{loop → apps}/embed/element.js +1 -1
  48. package/lib/{loop → apps}/embed/embedConfig.d.ts +1 -1
  49. package/lib/{loop → apps}/embed/embedSession.d.ts +1 -1
  50. package/lib/{loop → apps}/embed/hostBridge.d.ts +1 -1
  51. package/lib/{loop → apps}/extensions.js +1 -1
  52. package/lib/{loop → apps}/index.d.ts +1 -1
  53. package/lib/{loop → apps}/index.js +1 -1
  54. package/lib/{loop → apps}/plugins/a2a-sidebar/A2ASidebar.d.ts +1 -1
  55. package/lib/{loop → apps}/plugins/a2a-sidebar/A2ASidebar.js +1 -1
  56. package/lib/{loop → apps}/plugins/a2a-sidebar/index.js +1 -1
  57. package/lib/{loop → apps}/plugins/a2ui/A2uiView.d.ts +1 -1
  58. package/lib/{loop → apps}/plugins/a2ui/index.js +1 -1
  59. package/lib/{loop → apps}/plugins/a2ui-scene/index.d.ts +1 -1
  60. package/lib/{loop → apps}/plugins/a2ui-surface/InlineSurface.d.ts +2 -2
  61. package/lib/{loop → apps}/plugins/a2ui-surface/SurfaceToolResult.d.ts +1 -1
  62. package/lib/{loop → apps}/plugins/a2ui-surface/ownComponents.js +1 -1
  63. package/lib/{loop → apps}/plugins/a2ui-surface/toolResult.d.ts +1 -1
  64. package/lib/{loop → apps}/plugins/agent-a2a/index.js +2 -2
  65. package/lib/{loop → apps}/plugins/agent-a2ui/index.js +1 -1
  66. package/lib/{loop → apps}/plugins/agent-a2ui-jupyter-output/index.js +1 -1
  67. package/lib/{loop → apps}/plugins/agent-capacity/index.d.ts +2 -2
  68. package/lib/{loop → apps}/plugins/agent-capacity/index.js +2 -2
  69. package/lib/{loop → apps}/plugins/agent-checkpoints/index.js +1 -1
  70. package/lib/{loop → apps}/plugins/agent-code-sandbox/index.js +1 -1
  71. package/lib/{loop → apps}/plugins/agent-code-sandboxes/index.js +1 -1
  72. package/lib/{loop → apps}/plugins/agent-codemode/index.js +1 -1
  73. package/lib/{loop → apps}/plugins/agent-compaction/index.js +1 -1
  74. package/lib/{loop → apps}/plugins/agent-evals/index.js +2 -2
  75. package/lib/{loop → apps}/plugins/agent-guardrails/index.js +2 -2
  76. package/lib/{loop → apps}/plugins/agent-hooks/index.js +1 -1
  77. package/lib/{loop → apps}/plugins/agent-inference/index.js +1 -1
  78. package/lib/{loop → apps}/plugins/agent-mcp/index.js +2 -2
  79. package/lib/{loop → apps}/plugins/agent-memory/index.js +2 -2
  80. package/lib/{loop → apps}/plugins/agent-monitoring/index.js +2 -2
  81. package/lib/{loop → apps}/plugins/agent-notifications/index.js +2 -2
  82. package/lib/{loop → apps}/plugins/agent-otel/index.js +1 -1
  83. package/lib/{loop → apps}/plugins/agent-outputs/index.js +1 -1
  84. package/lib/{loop → apps}/plugins/agent-parameters/index.js +2 -2
  85. package/lib/{loop → apps}/plugins/agent-skills/index.js +2 -2
  86. package/lib/{loop → apps}/plugins/agent-subagents/index.js +2 -2
  87. package/lib/{loop → apps}/plugins/agent-tool-approvals/index.js +1 -1
  88. package/lib/{loop → apps}/plugins/agent-triggers/index.js +1 -1
  89. package/lib/{loop → apps}/plugins/agents/AgentSummaryPanel.d.ts +1 -1
  90. package/lib/{loop → apps}/plugins/agents/AnonymousKeyBadge.d.ts +1 -1
  91. package/lib/{loop → apps}/plugins/agents/DatalayerAgentBridge.d.ts +1 -1
  92. package/lib/{loop → apps}/plugins/agents/DatalayerAgentMount.d.ts +1 -1
  93. package/lib/{loop → apps}/plugins/agents/SandboxSelector.d.ts +1 -1
  94. package/lib/{loop → apps}/plugins/agents/SandboxStatusBridge.d.ts +1 -1
  95. package/lib/{loop → apps}/plugins/agents/SandboxView.d.ts +1 -1
  96. package/lib/{loop → apps}/plugins/agents/TeamMemberPicker.d.ts +1 -1
  97. package/lib/{loop → apps}/plugins/agents/agentIcons.d.ts +1 -1
  98. package/lib/{loop → apps}/plugins/agents/agentIcons.js +1 -1
  99. package/lib/{loop → apps}/plugins/agents/appLaunch.d.ts +1 -1
  100. package/lib/{loop → apps}/plugins/agents/browserService.js +1 -1
  101. package/lib/{loop → apps}/plugins/agents/index.d.ts +1 -1
  102. package/lib/{loop → apps}/plugins/agents/index.js +1 -1
  103. package/lib/{loop → apps}/plugins/agents/plugin.d.ts +1 -1
  104. package/lib/{loop → apps}/plugins/agents/service.d.ts +1 -1
  105. package/lib/{loop → apps}/plugins/agents/service.js +1 -1
  106. package/lib/{loop → apps}/plugins/agents/specSubagents.d.ts +1 -1
  107. package/lib/{loop → apps}/plugins/agents/switchable.d.ts +1 -1
  108. package/lib/{loop → apps}/plugins/agents/switchable.js +1 -1
  109. package/lib/{loop → apps}/plugins/agents/team.d.ts +1 -1
  110. package/lib/{loop → apps}/plugins/agents/team.js +1 -1
  111. package/lib/{loop → apps}/plugins/agents/useSandboxService.js +1 -1
  112. package/lib/{loop → apps}/plugins/agents/useTeamSelection.js +1 -1
  113. package/lib/{loop → apps}/plugins/agentspecs/AgentspecPicker.d.ts +1 -1
  114. package/lib/{loop → apps}/plugins/agentspecs/index.js +1 -1
  115. package/lib/{loop → apps}/plugins/app-activity/AppActivity.d.ts +1 -1
  116. package/lib/{loop → apps}/plugins/app-components/index.d.ts +1 -1
  117. package/lib/{loop → apps}/plugins/app-components/index.js +1 -1
  118. package/lib/{loop → apps}/plugins/app-computer/AppComputer.d.ts +1 -1
  119. package/lib/{loop → apps}/plugins/app-computer/AppComputer.js +3 -1
  120. package/lib/{loop → apps}/plugins/app-elements/AppElements.d.ts +1 -1
  121. package/lib/{loop → apps}/plugins/app-elements/index.d.ts +1 -1
  122. package/lib/{loop → apps}/plugins/app-elements/index.js +1 -1
  123. package/lib/{loop → apps}/plugins/app-page/AppPage.d.ts +1 -1
  124. package/lib/{loop → apps}/plugins/app-page/appPageModel.d.ts +1 -1
  125. package/lib/{loop → apps}/plugins/app-page/index.d.ts +1 -1
  126. package/lib/{loop → apps}/plugins/app-page/pageRun.d.ts +1 -1
  127. package/lib/{loop → apps}/plugins/app-page/pageRun.js +1 -1
  128. package/lib/{loop → apps}/plugins/app-rules/AppRulesCard.d.ts +1 -1
  129. package/lib/{loop → apps}/plugins/assistant/index.d.ts +1 -1
  130. package/lib/{loop → apps}/plugins/assistant-characters/index.d.ts +1 -1
  131. package/lib/{loop → apps}/plugins/assistant-characters/index.js +1 -1
  132. package/lib/{loop → apps}/plugins/canvas-blocks/index.d.ts +1 -1
  133. package/lib/{loop → apps}/plugins/canvas-blocks/index.js +1 -1
  134. package/lib/{loop → apps}/plugins/chat/ChatView.d.ts +1 -1
  135. package/lib/{loop → apps}/plugins/chat/chatViewTools.js +1 -1
  136. package/lib/{loop → apps}/plugins/chat/index.js +1 -1
  137. package/lib/{loop → apps}/plugins/chat/turnState.d.ts +1 -1
  138. package/lib/{loop → apps}/plugins/chat/turnState.js +1 -1
  139. package/lib/{loop → apps}/plugins/chat-extras/index.js +1 -1
  140. package/lib/{loop → apps}/plugins/chat-header/HeaderView.d.ts +1 -1
  141. package/lib/{loop → apps}/plugins/chat-view/index.js +1 -1
  142. package/lib/{loop → apps}/plugins/checkpoints-sidebar/CheckpointsSidebar.d.ts +1 -1
  143. package/lib/{loop → apps}/plugins/checkpoints-sidebar/CheckpointsSidebar.js +1 -1
  144. package/lib/{loop → apps}/plugins/checkpoints-sidebar/index.js +1 -1
  145. package/lib/{loop → apps}/plugins/commands/index.js +1 -1
  146. package/lib/{loop → apps}/plugins/decks/index.js +1 -1
  147. package/lib/{loop → apps}/plugins/decks/surface.d.ts +1 -1
  148. package/lib/{loop → apps}/plugins/decks/surface.js +1 -1
  149. package/lib/{loop → apps}/plugins/document/DocumentView.d.ts +1 -1
  150. package/lib/{loop → apps}/plugins/document/index.js +1 -1
  151. package/lib/{loop → apps}/plugins/document/openingDocument.d.ts +1 -1
  152. package/lib/{loop → apps}/plugins/document-toolbar/SandboxStatusItem.d.ts +1 -1
  153. package/lib/{loop → apps}/plugins/document-toolbar/index.js +1 -1
  154. package/lib/{loop → apps}/plugins/document-toolbar/names.d.ts +1 -1
  155. package/lib/{loop → apps}/plugins/document-toolbar/names.js +1 -1
  156. package/lib/{loop → apps}/plugins/document-toolbar/plugin.js +1 -1
  157. package/lib/{loop → apps}/plugins/document-view/index.js +1 -1
  158. package/lib/{loop → apps}/plugins/graph/GraphToggle.d.ts +1 -1
  159. package/lib/{loop → apps}/plugins/graph/GraphView.d.ts +1 -1
  160. package/lib/{loop → apps}/plugins/graph/index.js +1 -1
  161. package/lib/{loop → apps}/plugins/graph/viewType.d.ts +1 -1
  162. package/lib/{loop → apps}/plugins/graph/viewType.js +1 -1
  163. package/lib/{loop → apps}/plugins/input-prompt/ComposerView.d.ts +1 -1
  164. package/lib/{loop → apps}/plugins/models/index.js +1 -1
  165. package/lib/{loop → apps}/plugins/notebook/NotebookView.d.ts +1 -1
  166. package/lib/{loop → apps}/plugins/notebook/index.js +1 -1
  167. package/lib/{loop → apps}/plugins/notebook/openingNotebook.d.ts +1 -1
  168. package/lib/{loop → apps}/plugins/notebook-toolbar/index.js +1 -1
  169. package/lib/{loop → apps}/plugins/notebook-toolbar/names.d.ts +1 -1
  170. package/lib/{loop → apps}/plugins/notebook-toolbar/names.js +1 -1
  171. package/lib/{loop → apps}/plugins/notebook-toolbar/plugin.js +1 -1
  172. package/lib/{loop → apps}/plugins/notebook-view/index.js +1 -1
  173. package/lib/{loop → apps}/plugins/page-layout/SplitLayout.d.ts +1 -1
  174. package/lib/{loop → apps}/plugins/page-layout/SplitLayout.js +1 -1
  175. package/lib/{loop → apps}/plugins/page-layout/TurnPanel.d.ts +1 -1
  176. package/lib/{loop → apps}/plugins/page-layout/TurnPanel.js +2 -1
  177. package/lib/{loop → apps}/plugins/plugins-panel/index.js +1 -1
  178. package/lib/{loop → apps}/plugins/prompt/NewChatAction.d.ts +1 -1
  179. package/lib/{loop → apps}/plugins/prompt/index.js +1 -1
  180. package/lib/{loop → apps}/plugins/shell/editorChoice.d.ts +1 -1
  181. package/lib/{loop → apps}/plugins/shell/editorChoice.js +1 -1
  182. package/lib/{loop → apps}/plugins/shell/index.d.ts +1 -1
  183. package/lib/{loop → apps}/plugins/shell/useEditorPreviews.d.ts +1 -1
  184. package/lib/{loop → apps}/plugins/subagent-activity/SubagentPulse.d.ts +1 -1
  185. package/lib/{loop → apps}/plugins/subagent-activity/index.js +1 -1
  186. package/lib/{loop → apps}/plugins/view-switch/index.d.ts +1 -1
  187. package/lib/{loop → apps}/plugins/window-frame/WindowFrame.d.ts +1 -1
  188. package/lib/{loop → apps}/plugins/window-frame/index.js +1 -1
  189. package/lib/{loop → apps}/plugins/window-frame/slots.d.ts +1 -1
  190. package/lib/{loop → apps}/plugins/window-frame/slots.js +1 -1
  191. package/lib/{loop → apps}/presets.d.ts +1 -1
  192. package/lib/{loop → apps}/presets.js +1 -1
  193. package/lib/{loop → apps}/shell/LoopWorkspace.d.ts +1 -1
  194. package/lib/{loop → apps}/shell/PluginToggles.d.ts +1 -1
  195. package/lib/{loop → apps}/shell/SidebarRail.d.ts +1 -1
  196. package/lib/{loop → apps}/shell/ViewSwitcher.d.ts +1 -1
  197. package/lib/{loop → apps}/shell/WorkspaceFullScreenAction.d.ts +1 -1
  198. package/lib/{loop → apps}/shell/index.d.ts +1 -1
  199. package/lib/{loop → apps}/shell/index.js +1 -1
  200. package/lib/{loop → apps}/shell/paneMotion.d.ts +1 -1
  201. package/lib/{loop → apps}/shell/paneMotion.js +1 -1
  202. package/lib/{loop → apps}/shell/useWorkspaceFullScreen.d.ts +1 -1
  203. package/lib/chat/ChatLanguage.js +1 -1
  204. package/lib/chat/messages/ChatMarkdown.js +2 -1
  205. package/lib/chat/messages/markdownWithoutHtml.d.ts +34 -0
  206. package/lib/chat/messages/markdownWithoutHtml.js +53 -0
  207. package/lib/chat/parts/ReasoningPart.js +2 -1
  208. package/lib/chat/parts/TextPart.js +2 -1
  209. package/lib/chat/words.js +2 -2
  210. package/lib/components/a2ui/custom/index.js +1 -3
  211. package/lib/components/a2ui/datalayer/FileUpload.js +1 -1
  212. package/lib/components/cards/NotificationEventCard.js +2 -1
  213. package/lib/components/cards/OutputCard.js +2 -1
  214. package/lib/components/teams/AnswerSurfaces.js +1 -1
  215. package/lib/components/teams/AnswerSurfacesView.js +2 -2
  216. package/lib/components/teams/TeamNotebookView.d.ts +1 -1
  217. package/lib/components/teams/TeamNotebookView.js +1 -1
  218. package/lib/components/teams/sceneTranscript.d.ts +1 -1
  219. package/lib/examples/A2UiAgentExample.js +3 -3
  220. package/lib/examples/A2UiComponentsGalleryExample.js +2 -2
  221. package/lib/examples/A2UiContactCardExample.js +2 -2
  222. package/lib/examples/A2UiJupyterOutputExample.js +3 -3
  223. package/lib/examples/A2UiRestaurantExample.js +2 -2
  224. package/lib/examples/A2UiViewerExample.js +2 -2
  225. package/lib/examples/AgentA2AExample.js +3 -3
  226. package/lib/examples/AgentCheckpointsExample.js +3 -3
  227. package/lib/examples/AgentCodeSandboxExample.js +2 -2
  228. package/lib/examples/AgentCodeSandboxesExample.js +2 -2
  229. package/lib/examples/AgentCodemodeExample.js +3 -3
  230. package/lib/examples/AgentCompactionExample.js +2 -2
  231. package/lib/examples/AgentDecideExample.js +3 -3
  232. package/lib/examples/AgentEvalsExample.js +2 -2
  233. package/lib/examples/AgentGuardrailsExample.js +3 -3
  234. package/lib/examples/AgentHooksExample.js +2 -2
  235. package/lib/examples/AgentInferenceProviderExample.js +2 -2
  236. package/lib/examples/AgentMCPExample.js +3 -3
  237. package/lib/examples/AgentMemoryExample.js +2 -2
  238. package/lib/examples/AgentMonitoringExample.js +3 -3
  239. package/lib/examples/AgentNotificationsExample.js +2 -2
  240. package/lib/examples/AgentOtelExample.js +2 -2
  241. package/lib/examples/AgentOutputsExample.js +2 -2
  242. package/lib/examples/AgentParametersExample.js +2 -2
  243. package/lib/examples/AgentSkillsExample.js +2 -2
  244. package/lib/examples/AgentSubagentsExample.js +2 -2
  245. package/lib/examples/AgentToolApprovalsExample.js +2 -2
  246. package/lib/examples/AgentTriggersExample.js +2 -2
  247. package/lib/examples/AssistantExample.js +1 -1
  248. package/lib/examples/DecksAgent.js +2 -2
  249. package/lib/examples/DocumentPageAgent.js +1 -1
  250. package/lib/examples/LoopAppComputerExample.js +1 -1
  251. package/lib/examples/LoopShellExample.js +3 -3
  252. package/lib/examples/LoopWorkspaceExample.d.ts +1 -1
  253. package/lib/examples/LoopWorkspaceExample.js +5 -5
  254. package/lib/examples/NotebookPageAgent.js +1 -1
  255. package/lib/examples/utils/AssistantGalleryGrid.js +1 -1
  256. package/lib/examples/utils/owlCharacterPlugin.js +1 -1
  257. package/lib/index.d.ts +1 -1
  258. package/lib/index.js +1 -1
  259. package/lib/loop-example-main.js +1 -1
  260. package/lib/loop-main.js +9 -9
  261. package/lib/stories/loop/ReferenceScreens.js +1 -1
  262. package/lib/ui-plugins/MCPUIPlugin.d.ts +14 -0
  263. package/lib/ui-plugins/MCPUIPlugin.js +17 -48
  264. package/lib/ui-plugins/index.d.ts +1 -1
  265. package/lib/ui-plugins/index.js +1 -1
  266. package/package.json +3 -2
  267. /package/lib/{loop → apps}/apps/AppFeedback.js +0 -0
  268. /package/lib/{loop → apps}/apps/AppKept.js +0 -0
  269. /package/lib/{loop → apps}/apps/AppRuntimePlugins.d.ts +0 -0
  270. /package/lib/{loop → apps}/apps/agent.d.ts +0 -0
  271. /package/lib/{loop → apps}/apps/appspec.js +0 -0
  272. /package/lib/{loop → apps}/apps/checks.d.ts +0 -0
  273. /package/lib/{loop → apps}/apps/composer.js +0 -0
  274. /package/lib/{loop → apps}/apps/computer.js +0 -0
  275. /package/lib/{loop → apps}/apps/customComponents.d.ts +0 -0
  276. /package/lib/{loop → apps}/apps/feedback.js +0 -0
  277. /package/lib/{loop → apps}/apps/hostTools.js +0 -0
  278. /package/lib/{loop → apps}/apps/kept.js +0 -0
  279. /package/lib/{loop → apps}/apps/language.js +0 -0
  280. /package/lib/{loop → apps}/apps/pluginPair.js +0 -0
  281. /package/lib/{loop → apps}/apps/records.js +0 -0
  282. /package/lib/{loop → apps}/apps/rules.d.ts +0 -0
  283. /package/lib/{loop → apps}/apps/threads.js +0 -0
  284. /package/lib/{loop → apps}/apps/uploads.js +0 -0
  285. /package/lib/{loop → apps}/apps/visitorToken.d.ts +0 -0
  286. /package/lib/{loop → apps}/apps/yaml.d.ts +0 -0
  287. /package/lib/{loop → apps}/core/a2uiComponents.d.ts +0 -0
  288. /package/lib/{loop → apps}/core/canvasBlocks.d.ts +0 -0
  289. /package/lib/{loop → apps}/core/focusRequests.d.ts +0 -0
  290. /package/lib/{loop → apps}/core/index.d.ts +0 -0
  291. /package/lib/{loop → apps}/core/promptStore.d.ts +0 -0
  292. /package/lib/{loop → apps}/core/surfaceRequests.js +0 -0
  293. /package/lib/{loop → apps}/core/toolbar.d.ts +0 -0
  294. /package/lib/{loop → apps}/embed/AppEmbed.d.ts +0 -0
  295. /package/lib/{loop → apps}/embed/datalayer-app.d.ts +0 -0
  296. /package/lib/{loop → apps}/embed/element.d.ts +0 -0
  297. /package/lib/{loop → apps}/embed/embedConfig.js +0 -0
  298. /package/lib/{loop → apps}/embed/embedSession.js +0 -0
  299. /package/lib/{loop → apps}/embed/embedTheme.d.ts +0 -0
  300. /package/lib/{loop → apps}/embed/embedTheme.js +0 -0
  301. /package/lib/{loop → apps}/embed/hostBridge.js +0 -0
  302. /package/lib/{loop → apps}/extensions.d.ts +0 -0
  303. /package/lib/{loop → apps}/plugins/a2a-sidebar/index.d.ts +0 -0
  304. /package/lib/{loop → apps}/plugins/a2ui/A2uiView.js +0 -0
  305. /package/lib/{loop → apps}/plugins/a2ui/index.d.ts +0 -0
  306. /package/lib/{loop → apps}/plugins/a2ui-scene/index.js +0 -0
  307. /package/lib/{loop → apps}/plugins/a2ui-surface/InlineSurface.js +0 -0
  308. /package/lib/{loop → apps}/plugins/a2ui-surface/SurfaceToolResult.js +0 -0
  309. /package/lib/{loop → apps}/plugins/a2ui-surface/index.d.ts +0 -0
  310. /package/lib/{loop → apps}/plugins/a2ui-surface/index.js +0 -0
  311. /package/lib/{loop → apps}/plugins/a2ui-surface/ownComponents.d.ts +0 -0
  312. /package/lib/{loop → apps}/plugins/a2ui-surface/toolResult.js +0 -0
  313. /package/lib/{loop → apps}/plugins/agent-a2a/index.d.ts +0 -0
  314. /package/lib/{loop → apps}/plugins/agent-a2ui/index.d.ts +0 -0
  315. /package/lib/{loop → apps}/plugins/agent-a2ui-jupyter-output/index.d.ts +0 -0
  316. /package/lib/{loop → apps}/plugins/agent-checkpoints/index.d.ts +0 -0
  317. /package/lib/{loop → apps}/plugins/agent-code-sandbox/index.d.ts +0 -0
  318. /package/lib/{loop → apps}/plugins/agent-code-sandboxes/index.d.ts +0 -0
  319. /package/lib/{loop → apps}/plugins/agent-codemode/index.d.ts +0 -0
  320. /package/lib/{loop → apps}/plugins/agent-compaction/index.d.ts +0 -0
  321. /package/lib/{loop → apps}/plugins/agent-evals/index.d.ts +0 -0
  322. /package/lib/{loop → apps}/plugins/agent-guardrails/index.d.ts +0 -0
  323. /package/lib/{loop → apps}/plugins/agent-hooks/index.d.ts +0 -0
  324. /package/lib/{loop → apps}/plugins/agent-inference/index.d.ts +0 -0
  325. /package/lib/{loop → apps}/plugins/agent-mcp/index.d.ts +0 -0
  326. /package/lib/{loop → apps}/plugins/agent-memory/index.d.ts +0 -0
  327. /package/lib/{loop → apps}/plugins/agent-monitoring/index.d.ts +0 -0
  328. /package/lib/{loop → apps}/plugins/agent-notifications/index.d.ts +0 -0
  329. /package/lib/{loop → apps}/plugins/agent-otel/index.d.ts +0 -0
  330. /package/lib/{loop → apps}/plugins/agent-outputs/index.d.ts +0 -0
  331. /package/lib/{loop → apps}/plugins/agent-parameters/index.d.ts +0 -0
  332. /package/lib/{loop → apps}/plugins/agent-skills/index.d.ts +0 -0
  333. /package/lib/{loop → apps}/plugins/agent-subagents/index.d.ts +0 -0
  334. /package/lib/{loop → apps}/plugins/agent-tool-approvals/index.d.ts +0 -0
  335. /package/lib/{loop → apps}/plugins/agent-triggers/index.d.ts +0 -0
  336. /package/lib/{loop → apps}/plugins/agents/AgentSummaryPanel.js +0 -0
  337. /package/lib/{loop → apps}/plugins/agents/AnonymousKeyBadge.js +0 -0
  338. /package/lib/{loop → apps}/plugins/agents/DatalayerAgentBridge.js +0 -0
  339. /package/lib/{loop → apps}/plugins/agents/DatalayerAgentMount.js +0 -0
  340. /package/lib/{loop → apps}/plugins/agents/SandboxSelector.js +0 -0
  341. /package/lib/{loop → apps}/plugins/agents/SandboxStatusBridge.js +0 -0
  342. /package/lib/{loop → apps}/plugins/agents/SandboxView.js +0 -0
  343. /package/lib/{loop → apps}/plugins/agents/TeamMemberPicker.js +0 -0
  344. /package/lib/{loop → apps}/plugins/agents/appLaunch.js +0 -0
  345. /package/lib/{loop → apps}/plugins/agents/browserService.d.ts +0 -0
  346. /package/lib/{loop → apps}/plugins/agents/plugin.js +0 -0
  347. /package/lib/{loop → apps}/plugins/agents/specSubagents.js +0 -0
  348. /package/lib/{loop → apps}/plugins/agents/useSandboxService.d.ts +0 -0
  349. /package/lib/{loop → apps}/plugins/agents/useTeamSelection.d.ts +0 -0
  350. /package/lib/{loop → apps}/plugins/agentspecs/AgentspecPicker.js +0 -0
  351. /package/lib/{loop → apps}/plugins/agentspecs/index.d.ts +0 -0
  352. /package/lib/{loop → apps}/plugins/app-activity/AppActivity.js +0 -0
  353. /package/lib/{loop → apps}/plugins/app-activity/index.d.ts +0 -0
  354. /package/lib/{loop → apps}/plugins/app-activity/index.js +0 -0
  355. /package/lib/{loop → apps}/plugins/app-computer/index.d.ts +0 -0
  356. /package/lib/{loop → apps}/plugins/app-computer/index.js +0 -0
  357. /package/lib/{loop → apps}/plugins/app-elements/AppElements.js +0 -0
  358. /package/lib/{loop → apps}/plugins/app-page/AppPage.js +0 -0
  359. /package/lib/{loop → apps}/plugins/app-page/appPageModel.js +0 -0
  360. /package/lib/{loop → apps}/plugins/app-page/index.js +0 -0
  361. /package/lib/{loop → apps}/plugins/app-rules/AppRulesCard.js +0 -0
  362. /package/lib/{loop → apps}/plugins/app-rules/index.d.ts +0 -0
  363. /package/lib/{loop → apps}/plugins/app-rules/index.js +0 -0
  364. /package/lib/{loop → apps}/plugins/assistant/index.js +0 -0
  365. /package/lib/{loop → apps}/plugins/chat/ChatView.js +0 -0
  366. /package/lib/{loop → apps}/plugins/chat/chatViewTools.d.ts +0 -0
  367. /package/lib/{loop → apps}/plugins/chat/index.d.ts +0 -0
  368. /package/lib/{loop → apps}/plugins/chat-extras/index.d.ts +0 -0
  369. /package/lib/{loop → apps}/plugins/chat-header/HeaderView.js +0 -0
  370. /package/lib/{loop → apps}/plugins/chat-header/index.d.ts +0 -0
  371. /package/lib/{loop → apps}/plugins/chat-header/index.js +0 -0
  372. /package/lib/{loop → apps}/plugins/chat-view/index.d.ts +0 -0
  373. /package/lib/{loop → apps}/plugins/checkpoints-sidebar/index.d.ts +0 -0
  374. /package/lib/{loop → apps}/plugins/commands/index.d.ts +0 -0
  375. /package/lib/{loop → apps}/plugins/decks/DeckSurface.d.ts +0 -0
  376. /package/lib/{loop → apps}/plugins/decks/DeckSurface.js +0 -0
  377. /package/lib/{loop → apps}/plugins/decks/DecksMenu.d.ts +0 -0
  378. /package/lib/{loop → apps}/plugins/decks/DecksMenu.js +0 -0
  379. /package/lib/{loop → apps}/plugins/decks/index.d.ts +0 -0
  380. /package/lib/{loop → apps}/plugins/document/DocumentView.js +0 -0
  381. /package/lib/{loop → apps}/plugins/document/index.d.ts +0 -0
  382. /package/lib/{loop → apps}/plugins/document/openingDocument.js +0 -0
  383. /package/lib/{loop → apps}/plugins/document-toolbar/SandboxStatusItem.js +0 -0
  384. /package/lib/{loop → apps}/plugins/document-toolbar/index.d.ts +0 -0
  385. /package/lib/{loop → apps}/plugins/document-toolbar/plugin.d.ts +0 -0
  386. /package/lib/{loop → apps}/plugins/document-view/index.d.ts +0 -0
  387. /package/lib/{loop → apps}/plugins/graph/GraphToggle.js +0 -0
  388. /package/lib/{loop → apps}/plugins/graph/GraphView.js +0 -0
  389. /package/lib/{loop → apps}/plugins/graph/index.d.ts +0 -0
  390. /package/lib/{loop → apps}/plugins/input-prompt/ComposerView.js +0 -0
  391. /package/lib/{loop → apps}/plugins/input-prompt/index.d.ts +0 -0
  392. /package/lib/{loop → apps}/plugins/input-prompt/index.js +0 -0
  393. /package/lib/{loop → apps}/plugins/models/index.d.ts +0 -0
  394. /package/lib/{loop → apps}/plugins/notebook/NotebookView.js +0 -0
  395. /package/lib/{loop → apps}/plugins/notebook/index.d.ts +0 -0
  396. /package/lib/{loop → apps}/plugins/notebook/openingNotebook.js +0 -0
  397. /package/lib/{loop → apps}/plugins/notebook-toolbar/index.d.ts +0 -0
  398. /package/lib/{loop → apps}/plugins/notebook-toolbar/items.d.ts +0 -0
  399. /package/lib/{loop → apps}/plugins/notebook-toolbar/items.js +0 -0
  400. /package/lib/{loop → apps}/plugins/notebook-toolbar/plugin.d.ts +0 -0
  401. /package/lib/{loop → apps}/plugins/notebook-view/index.d.ts +0 -0
  402. /package/lib/{loop → apps}/plugins/page-layout/index.d.ts +0 -0
  403. /package/lib/{loop → apps}/plugins/page-layout/index.js +0 -0
  404. /package/lib/{loop → apps}/plugins/plugins-panel/index.d.ts +0 -0
  405. /package/lib/{loop → apps}/plugins/prompt/NewChatAction.js +0 -0
  406. /package/lib/{loop → apps}/plugins/prompt/index.d.ts +0 -0
  407. /package/lib/{loop → apps}/plugins/shell/index.js +0 -0
  408. /package/lib/{loop → apps}/plugins/shell/useEditorPreviews.js +0 -0
  409. /package/lib/{loop → apps}/plugins/subagent-activity/SubagentPulse.js +0 -0
  410. /package/lib/{loop → apps}/plugins/subagent-activity/index.d.ts +0 -0
  411. /package/lib/{loop → apps}/plugins/view-switch/index.js +0 -0
  412. /package/lib/{loop → apps}/plugins/window-frame/WindowFrame.js +0 -0
  413. /package/lib/{loop → apps}/plugins/window-frame/index.d.ts +0 -0
  414. /package/lib/{loop → apps}/shell/LoopWorkspace.js +0 -0
  415. /package/lib/{loop → apps}/shell/PluginToggles.js +0 -0
  416. /package/lib/{loop → apps}/shell/SidebarRail.js +0 -0
  417. /package/lib/{loop → apps}/shell/ViewSwitcher.js +0 -0
  418. /package/lib/{loop → apps}/shell/WorkspaceFullScreenAction.js +0 -0
  419. /package/lib/{loop → apps}/shell/useWorkspaceFullScreen.js +0 -0
@@ -9,7 +9,7 @@
9
9
  * only while a notebook is actually contributed, and requires the
10
10
  * input-prompt plugin, whose footer the icon sits in.
11
11
  *
12
- * @module loop/plugins/notebook-view
12
+ * @module apps/plugins/notebook-view
13
13
  */
14
14
  // The same icon the notebook's own editor view declares, so the footer
15
15
  // button and the selector entry read as one thing.
@@ -13,7 +13,7 @@
13
13
  * leaves the conversation is kept while the workspace is mounted. The page
14
14
  * opens at the theme's pace (T-10, `paneOpening`).
15
15
  *
16
- * @module loop/plugins/page-layout/SplitLayout
16
+ * @module apps/plugins/page-layout/SplitLayout
17
17
  */
18
18
  import type { JSX } from 'react';
19
19
  import type { ChatLayoutParts } from '../../core';
@@ -87,7 +87,7 @@ export function SplitLayout({ editors, hasEditor, transcript, prompt, chips, pic
87
87
  '&:hover::before, &:focus-visible::before': {
88
88
  width: '3px',
89
89
  bg: 'accent.emphasis',
90
- }
90
+ },
91
91
  } })) : null, _jsx(Box, { "data-testid": "loop-split-page", sx: hasEditor
92
92
  ? {
93
93
  flex: '1 1 0',
@@ -15,7 +15,7 @@
15
15
  * the panel is not is a second transcript: one turn, compact, and the whole
16
16
  * conversation one click away.
17
17
  *
18
- * @module loop/plugins/page-layout/TurnPanel
18
+ * @module apps/plugins/page-layout/TurnPanel
19
19
  */
20
20
  import type { JSX } from 'react';
21
21
  export type TurnPanelFooter = 'full' | 'actions' | 'none';
@@ -8,6 +8,7 @@ import { signal } from '@datalayer/reactor';
8
8
  import { TurnFooter } from '../../../chat/messages/TurnFooter';
9
9
  import { LoopChatTurn } from '../../core';
10
10
  import { Streamdown } from 'streamdown';
11
+ import { REHYPE_PLUGINS_WITHOUT_HTML } from '../../../chat/messages/markdownWithoutHtml';
11
12
  import { streamdownMarkdownStyles } from '../../../chat/styles/streamdownStyles';
12
13
  import { normalizeAssistantMarkdown } from '../../../chat/messages/assistantMarkdown';
13
14
  import { openPagePanel, pageLayoutSheet, } from '@datalayer/primer-addons/lib/reactor';
@@ -89,7 +90,7 @@ export function TurnPanel({ footer = 'full', }) {
89
90
  }, children: turn.user }) }), _jsxs(Box, { display: "flex", gap: 2, alignItems: "flex-start", children: [_jsx(Box, { ref: replyRef, flex: "1 1 auto", minWidth: 0, maxHeight: MAX_HEIGHT, overflowY: "auto", fontSize: 0, lineHeight: 1.5, color: turn.assistant ? 'fg.default' : 'fg.muted',
90
91
  // Rendered markdown brings its own flow; the plain fallbacks
91
92
  // below keep their line breaks.
92
- whiteSpace: turn.assistant ? 'normal' : 'pre-wrap', overflowWrap: "anywhere", children: turn.assistant ? (_jsx(Box, { sx: { ...streamdownMarkdownStyles, fontSize: 0 }, children: _jsx(Streamdown, { children: normalizeAssistantMarkdown(turn.assistant) }) })) : turn.activity ? (_jsx(Text, { sx: { color: 'fg.muted', fontStyle: 'italic' }, children: turn.activity })) : working ? (_jsx(Thinking, {})) : turn.status === 'error' ? ('The agent could not answer.') : ('Done — the result is in the page.') }), _jsx(IconButton, { icon: CommentDiscussionIcon, size: "small", variant: "invisible", "aria-label": "Open the conversation", onClick: openPagePanel, sx: { color: 'fg.muted', flexShrink: 0 } })] }), turn.assistant && turn.activity ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', fontStyle: 'italic' }, children: turn.activity })) : null, footer === 'full' ? (
93
+ whiteSpace: turn.assistant ? 'normal' : 'pre-wrap', overflowWrap: "anywhere", children: turn.assistant ? (_jsx(Box, { sx: { ...streamdownMarkdownStyles, fontSize: 0 }, children: _jsx(Streamdown, { rehypePlugins: REHYPE_PLUGINS_WITHOUT_HTML, children: normalizeAssistantMarkdown(turn.assistant) }) })) : turn.activity ? (_jsx(Text, { sx: { color: 'fg.muted', fontStyle: 'italic' }, children: turn.activity })) : working ? (_jsx(Thinking, {})) : turn.status === 'error' ? ('The agent could not answer.') : ('Done — the result is in the page.') }), _jsx(IconButton, { icon: CommentDiscussionIcon, size: "small", variant: "invisible", "aria-label": "Open the conversation", onClick: openPagePanel, sx: { color: 'fg.muted', flexShrink: 0 } })] }), turn.assistant && turn.activity ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', fontStyle: 'italic' }, children: turn.activity })) : null, footer === 'full' ? (
93
94
  // The same footer the transcript draws under a turn: the window's
94
95
  // fill, this turn's tokens in and out, copy, and dismiss.
95
96
  _jsx(TurnFooter, { usage: turn.usage, live: working, latest: true, padding: 0, onCopy: copyTurn, onRemove: () => setDismissedId(turn.id) })) : footer === 'actions' ? (
@@ -21,7 +21,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
21
21
  * plugin contributes it to the manager's action slot now, so it appears and
22
22
  * disappears with the thing it opens.
23
23
  *
24
- * @module loop/plugins/plugins-panel
24
+ * @module apps/plugins/plugins-panel
25
25
  */
26
26
  import { definePlugin } from '@datalayer/reactor';
27
27
  import { GraphPlugin } from '@datalayer/reactor-graph';
@@ -9,7 +9,7 @@
9
9
  * button and the slash command cannot drift: one intent, one path, and the
10
10
  * command's own error shows when no conversation is on screen.
11
11
  *
12
- * @module loop/plugins/prompt/NewChatAction
12
+ * @module apps/plugins/prompt/NewChatAction
13
13
  */
14
14
  import type { JSX } from 'react';
15
15
  import type { LoopWorkspaceContext } from '../../core';
@@ -20,7 +20,7 @@
20
20
  * `loopPlugins({ floatingPrompt: true })` mounts this plugin and asks the
21
21
  * chat for the floating placement together.
22
22
  *
23
- * @module loop/plugins/prompt
23
+ * @module apps/plugins/prompt
24
24
  */
25
25
  import { contribution, definePlugin } from '@datalayer/reactor';
26
26
  import { LoopCommand, LoopSlots, focusPrompt } from '../../core';
@@ -14,7 +14,7 @@
14
14
  * whether the choice came from the selector, `/editor`, or the generic
15
15
  * cycle command.
16
16
  *
17
- * @module loop/plugins/shell/editorChoice
17
+ * @module apps/plugins/shell/editorChoice
18
18
  */
19
19
  import { chooseView, nextView, seedViewChoice, setViewOptions, subscribeViewChoice } from '@datalayer/reactor-shell';
20
20
  /** The choice that means "just the conversation". */
@@ -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;
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: {
@@ -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
  /**
@@ -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;