@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.
- package/dist-embed/assets/coincident.worker-Dd47v4fq.js +9 -0
- package/dist-embed/assets/comlink.worker-DmOp1QjG.js +9 -0
- package/dist-embed/datalayer-app.css +1 -0
- package/dist-embed/datalayer-app.js +4 -0
- package/dist-embed/lite-service-worker.js +91 -0
- package/lib/{loop → apps}/apps/AppComposer.d.ts +1 -1
- package/lib/{loop → apps}/apps/AppComposer.js +1 -1
- package/lib/{loop → apps}/apps/AppFeedback.d.ts +1 -1
- package/lib/{loop → apps}/apps/AppFeedback.js +12 -3
- package/lib/{loop → apps}/apps/AppKept.d.ts +1 -1
- package/lib/{loop → apps}/apps/AppRenderer.d.ts +1 -1
- package/lib/{loop → apps}/apps/AppRenderer.js +2 -2
- package/lib/{loop → apps}/apps/AppRuntimePlugins.js +1 -1
- package/lib/{loop → apps}/apps/agent.js +1 -1
- package/lib/{loop → apps}/apps/appspec.d.ts +1 -1
- package/lib/{loop → apps}/apps/checks.js +1 -1
- package/lib/{loop → apps}/apps/composer.d.ts +1 -1
- package/lib/{loop → apps}/apps/computer.d.ts +1 -1
- package/lib/{loop → apps}/apps/customComponents.js +1 -1
- package/lib/{loop → apps}/apps/feedback.d.ts +4 -3
- package/lib/{loop → apps}/apps/feedback.js +4 -2
- package/lib/{loop → apps}/apps/hostTools.d.ts +1 -1
- package/lib/{loop → apps}/apps/index.d.ts +1 -1
- package/lib/{loop → apps}/apps/index.js +1 -1
- package/lib/{loop → apps}/apps/kept.d.ts +1 -1
- package/lib/{loop → apps}/apps/language.d.ts +1 -1
- package/lib/{loop → apps}/apps/pluginPair.d.ts +1 -1
- package/lib/{loop → apps}/apps/records.d.ts +1 -1
- package/lib/{loop → apps}/apps/rules.js +1 -1
- package/lib/{loop → apps}/apps/saved.d.ts +1 -1
- package/lib/{loop → apps}/apps/saved.js +1 -1
- package/lib/{loop → apps}/apps/settingsInputs.d.ts +1 -1
- package/lib/{loop → apps}/apps/settingsInputs.js +1 -1
- package/lib/{loop → apps}/apps/threads.d.ts +1 -1
- package/lib/{loop → apps}/apps/uploads.d.ts +1 -1
- package/lib/{loop → apps}/apps/visitorToken.js +1 -1
- package/lib/{loop → apps}/apps/yaml.js +1 -1
- package/lib/{loop → apps}/core/a2uiComponents.js +2 -2
- package/lib/{loop → apps}/core/canvasBlocks.js +2 -2
- package/lib/{loop → apps}/core/focusRequests.js +1 -1
- package/lib/{loop → apps}/core/index.d.ts +19 -0
- package/lib/{loop → apps}/core/index.js +28 -1
- package/lib/{loop → apps}/core/promptStore.js +1 -1
- package/lib/{loop → apps}/core/surfaceRequests.d.ts +1 -1
- package/lib/{loop → apps}/core/toolbar.js +1 -1
- package/lib/{loop → apps}/embed/AppEmbed.js +1 -1
- package/lib/{loop → apps}/embed/LoopEmbed.d.ts +1 -1
- package/lib/{loop → apps}/embed/LoopEmbed.js +1 -1
- package/lib/{loop → apps}/embed/datalayer-app.js +1 -1
- package/lib/{loop → apps}/embed/element.js +1 -1
- package/lib/{loop → apps}/embed/embedConfig.d.ts +1 -1
- package/lib/{loop → apps}/embed/embedSession.d.ts +1 -1
- package/lib/{loop → apps}/embed/hostBridge.d.ts +1 -1
- package/lib/{loop → apps}/extensions.js +1 -1
- package/lib/{loop → apps}/index.d.ts +1 -1
- package/lib/{loop → apps}/index.js +1 -1
- package/lib/{loop → apps}/plugins/a2a-sidebar/A2ASidebar.d.ts +1 -1
- package/lib/{loop → apps}/plugins/a2a-sidebar/A2ASidebar.js +1 -1
- package/lib/{loop → apps}/plugins/a2a-sidebar/index.js +1 -1
- package/lib/{loop → apps}/plugins/a2ui/A2uiView.d.ts +1 -1
- package/lib/{loop → apps}/plugins/a2ui/index.js +1 -1
- package/lib/{loop → apps}/plugins/a2ui-scene/index.d.ts +1 -1
- package/lib/{loop → apps}/plugins/a2ui-surface/InlineSurface.d.ts +2 -2
- package/lib/{loop → apps}/plugins/a2ui-surface/SurfaceToolResult.d.ts +1 -1
- package/lib/{loop → apps}/plugins/a2ui-surface/ownComponents.js +1 -1
- package/lib/{loop → apps}/plugins/a2ui-surface/toolResult.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agent-a2a/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-a2ui/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-a2ui-jupyter-output/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-capacity/index.d.ts +2 -2
- package/lib/{loop → apps}/plugins/agent-capacity/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-checkpoints/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-code-sandbox/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-code-sandboxes/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-codemode/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-compaction/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-evals/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-guardrails/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-hooks/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-inference/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-mcp/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-memory/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-monitoring/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-notifications/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-otel/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-outputs/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-parameters/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-skills/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-subagents/index.js +2 -2
- package/lib/{loop → apps}/plugins/agent-tool-approvals/index.js +1 -1
- package/lib/{loop → apps}/plugins/agent-triggers/index.js +1 -1
- package/lib/{loop → apps}/plugins/agents/AgentSummaryPanel.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/AnonymousKeyBadge.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/DatalayerAgentBridge.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/DatalayerAgentMount.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/SandboxSelector.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/SandboxStatusBridge.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/SandboxView.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/TeamMemberPicker.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/agentIcons.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/agentIcons.js +1 -1
- package/lib/{loop → apps}/plugins/agents/appLaunch.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/browserService.js +1 -1
- package/lib/{loop → apps}/plugins/agents/index.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/index.js +1 -1
- package/lib/{loop → apps}/plugins/agents/plugin.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/service.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/service.js +1 -1
- package/lib/{loop → apps}/plugins/agents/specSubagents.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/switchable.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/switchable.js +1 -1
- package/lib/{loop → apps}/plugins/agents/team.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agents/team.js +1 -1
- package/lib/{loop → apps}/plugins/agents/useSandboxService.js +1 -1
- package/lib/{loop → apps}/plugins/agents/useTeamSelection.js +1 -1
- package/lib/{loop → apps}/plugins/agentspecs/AgentspecPicker.d.ts +1 -1
- package/lib/{loop → apps}/plugins/agentspecs/index.js +1 -1
- package/lib/{loop → apps}/plugins/app-activity/AppActivity.d.ts +1 -1
- package/lib/{loop → apps}/plugins/app-components/index.d.ts +1 -1
- package/lib/{loop → apps}/plugins/app-components/index.js +1 -1
- package/lib/{loop → apps}/plugins/app-computer/AppComputer.d.ts +1 -1
- package/lib/{loop → apps}/plugins/app-computer/AppComputer.js +31 -8
- package/lib/{loop → apps}/plugins/app-elements/AppElements.d.ts +1 -1
- package/lib/{loop → apps}/plugins/app-elements/index.d.ts +1 -1
- package/lib/{loop → apps}/plugins/app-elements/index.js +1 -1
- package/lib/{loop → apps}/plugins/app-page/AppPage.d.ts +1 -1
- package/lib/{loop → apps}/plugins/app-page/AppPage.js +25 -7
- package/lib/{loop → apps}/plugins/app-page/appPageModel.d.ts +1 -1
- package/lib/{loop → apps}/plugins/app-page/index.d.ts +1 -1
- package/lib/{loop → apps}/plugins/app-page/pageRun.d.ts +1 -1
- package/lib/{loop → apps}/plugins/app-page/pageRun.js +1 -1
- package/lib/{loop → apps}/plugins/app-rules/AppRulesCard.d.ts +1 -1
- package/lib/{loop → apps}/plugins/assistant/index.d.ts +1 -1
- package/lib/{loop → apps}/plugins/assistant-characters/index.d.ts +1 -1
- package/lib/{loop → apps}/plugins/assistant-characters/index.js +1 -1
- package/lib/{loop → apps}/plugins/canvas-blocks/index.d.ts +1 -1
- package/lib/{loop → apps}/plugins/canvas-blocks/index.js +1 -1
- package/lib/{loop → apps}/plugins/chat/ChatView.d.ts +1 -1
- package/lib/{loop → apps}/plugins/chat/ChatView.js +49 -24
- package/lib/{loop → apps}/plugins/chat/chatViewTools.js +1 -1
- package/lib/{loop → apps}/plugins/chat/index.js +1 -1
- package/lib/{loop → apps}/plugins/chat/turnState.d.ts +1 -1
- package/lib/{loop → apps}/plugins/chat/turnState.js +1 -1
- package/lib/{loop → apps}/plugins/chat-extras/index.js +1 -1
- package/lib/{loop → apps}/plugins/chat-header/HeaderView.d.ts +1 -1
- package/lib/{loop → apps}/plugins/chat-view/index.js +1 -1
- package/lib/{loop → apps}/plugins/checkpoints-sidebar/CheckpointsSidebar.d.ts +1 -1
- package/lib/{loop → apps}/plugins/checkpoints-sidebar/CheckpointsSidebar.js +1 -1
- package/lib/{loop → apps}/plugins/checkpoints-sidebar/index.js +1 -1
- package/lib/{loop → apps}/plugins/commands/index.js +1 -1
- package/lib/{loop → apps}/plugins/decks/index.js +1 -1
- package/lib/{loop → apps}/plugins/decks/surface.d.ts +1 -1
- package/lib/{loop → apps}/plugins/decks/surface.js +1 -1
- package/lib/{loop → apps}/plugins/document/DocumentView.d.ts +1 -1
- package/lib/{loop → apps}/plugins/document/index.js +1 -1
- package/lib/{loop → apps}/plugins/document/openingDocument.d.ts +1 -1
- package/lib/{loop → apps}/plugins/document-toolbar/SandboxStatusItem.d.ts +1 -1
- package/lib/{loop → apps}/plugins/document-toolbar/index.js +1 -1
- package/lib/{loop → apps}/plugins/document-toolbar/names.d.ts +1 -1
- package/lib/{loop → apps}/plugins/document-toolbar/names.js +1 -1
- package/lib/{loop → apps}/plugins/document-toolbar/plugin.js +1 -1
- package/lib/{loop → apps}/plugins/document-view/index.js +1 -1
- package/lib/{loop → apps}/plugins/graph/GraphToggle.d.ts +1 -1
- package/lib/{loop → apps}/plugins/graph/GraphView.d.ts +1 -1
- package/lib/{loop → apps}/plugins/graph/index.js +1 -1
- package/lib/{loop → apps}/plugins/graph/viewType.d.ts +1 -1
- package/lib/{loop → apps}/plugins/graph/viewType.js +1 -1
- package/lib/{loop → apps}/plugins/input-prompt/ComposerView.d.ts +1 -1
- package/lib/{loop → apps}/plugins/models/index.js +1 -1
- package/lib/{loop → apps}/plugins/notebook/NotebookView.d.ts +1 -1
- package/lib/{loop → apps}/plugins/notebook/index.js +1 -1
- package/lib/{loop → apps}/plugins/notebook/openingNotebook.d.ts +1 -1
- package/lib/{loop → apps}/plugins/notebook-toolbar/index.js +1 -1
- package/lib/{loop → apps}/plugins/notebook-toolbar/names.d.ts +1 -1
- package/lib/{loop → apps}/plugins/notebook-toolbar/names.js +1 -1
- package/lib/{loop → apps}/plugins/notebook-toolbar/plugin.js +1 -1
- package/lib/{loop → apps}/plugins/notebook-view/index.js +1 -1
- package/lib/{loop → apps}/plugins/page-layout/SplitLayout.d.ts +1 -1
- package/lib/{loop → apps}/plugins/page-layout/SplitLayout.js +1 -1
- package/lib/{loop → apps}/plugins/page-layout/TurnPanel.d.ts +1 -1
- package/lib/{loop → apps}/plugins/page-layout/TurnPanel.js +2 -1
- package/lib/{loop → apps}/plugins/plugins-panel/index.js +1 -1
- package/lib/{loop → apps}/plugins/prompt/NewChatAction.d.ts +1 -1
- package/lib/{loop → apps}/plugins/prompt/index.js +1 -1
- package/lib/{loop → apps}/plugins/shell/editorChoice.d.ts +1 -1
- package/lib/{loop → apps}/plugins/shell/editorChoice.js +1 -1
- package/lib/{loop → apps}/plugins/shell/index.d.ts +1 -1
- package/lib/{loop → apps}/plugins/shell/useEditorPreviews.d.ts +1 -1
- package/lib/{loop → apps}/plugins/subagent-activity/SubagentPulse.d.ts +1 -1
- package/lib/{loop → apps}/plugins/subagent-activity/index.js +1 -1
- package/lib/{loop → apps}/plugins/view-switch/index.d.ts +1 -1
- package/lib/{loop → apps}/plugins/window-frame/WindowFrame.d.ts +1 -1
- package/lib/{loop → apps}/plugins/window-frame/index.js +1 -1
- package/lib/{loop → apps}/plugins/window-frame/slots.d.ts +1 -1
- package/lib/{loop → apps}/plugins/window-frame/slots.js +1 -1
- package/lib/{loop → apps}/presets.d.ts +1 -1
- package/lib/{loop → apps}/presets.js +1 -1
- package/lib/{loop → apps}/shell/LoopWorkspace.d.ts +1 -1
- package/lib/{loop → apps}/shell/PluginToggles.d.ts +1 -1
- package/lib/{loop → apps}/shell/SidebarRail.d.ts +1 -1
- package/lib/{loop → apps}/shell/ViewSwitcher.d.ts +1 -1
- package/lib/{loop → apps}/shell/WorkspaceFullScreenAction.d.ts +1 -1
- package/lib/{loop → apps}/shell/index.d.ts +1 -1
- package/lib/{loop → apps}/shell/index.js +1 -1
- package/lib/{loop → apps}/shell/paneMotion.d.ts +1 -1
- package/lib/{loop → apps}/shell/paneMotion.js +1 -1
- package/lib/{loop → apps}/shell/useWorkspaceFullScreen.d.ts +1 -1
- package/lib/chat/ChatLanguage.js +1 -1
- package/lib/chat/messages/ChatMarkdown.js +2 -1
- package/lib/chat/messages/markdownWithoutHtml.d.ts +34 -0
- package/lib/chat/messages/markdownWithoutHtml.js +53 -0
- package/lib/chat/parts/ReasoningPart.js +2 -1
- package/lib/chat/parts/TextPart.js +2 -1
- package/lib/chat/words.d.ts +7 -0
- package/lib/chat/words.js +14 -2
- package/lib/components/a2ui/custom/index.js +1 -3
- package/lib/components/a2ui/datalayer/FileUpload.js +1 -1
- package/lib/components/a2ui/styles.js +16 -5
- package/lib/components/cards/NotificationEventCard.js +2 -1
- package/lib/components/cards/OutputCard.js +2 -1
- package/lib/components/teams/AnswerSurfaces.js +1 -1
- package/lib/components/teams/AnswerSurfacesView.js +2 -2
- package/lib/components/teams/TeamNotebookView.d.ts +1 -1
- package/lib/components/teams/TeamNotebookView.js +1 -1
- package/lib/components/teams/sceneTranscript.d.ts +1 -1
- package/lib/examples/A2UiAgentExample.js +3 -3
- package/lib/examples/A2UiComponentsGalleryExample.js +2 -2
- package/lib/examples/A2UiContactCardExample.js +2 -2
- package/lib/examples/A2UiJupyterOutputExample.js +3 -3
- package/lib/examples/A2UiRestaurantExample.js +2 -2
- package/lib/examples/A2UiViewerExample.js +2 -2
- package/lib/examples/AgentA2AExample.js +3 -3
- package/lib/examples/AgentCheckpointsExample.js +3 -3
- package/lib/examples/AgentCodeSandboxExample.js +2 -2
- package/lib/examples/AgentCodeSandboxesExample.js +2 -2
- package/lib/examples/AgentCodemodeExample.js +3 -3
- package/lib/examples/AgentCompactionExample.js +2 -2
- package/lib/examples/AgentDecideExample.js +3 -3
- package/lib/examples/AgentEvalsExample.js +2 -2
- package/lib/examples/AgentGuardrailsExample.js +3 -3
- package/lib/examples/AgentHooksExample.js +2 -2
- package/lib/examples/AgentInferenceProviderExample.js +2 -2
- package/lib/examples/AgentMCPExample.js +3 -3
- package/lib/examples/AgentMemoryExample.js +2 -2
- package/lib/examples/AgentMonitoringExample.js +3 -3
- package/lib/examples/AgentNotificationsExample.js +2 -2
- package/lib/examples/AgentOtelExample.js +2 -2
- package/lib/examples/AgentOutputsExample.js +2 -2
- package/lib/examples/AgentParametersExample.js +2 -2
- package/lib/examples/AgentSkillsExample.js +2 -2
- package/lib/examples/AgentSubagentsExample.js +2 -2
- package/lib/examples/AgentToolApprovalsExample.js +2 -2
- package/lib/examples/AgentTriggersExample.js +2 -2
- package/lib/examples/AssistantExample.js +1 -1
- package/lib/examples/DecksAgent.js +2 -2
- package/lib/examples/DocumentPageAgent.js +1 -1
- package/lib/examples/LoopAppComputerExample.js +1 -1
- package/lib/examples/LoopShellExample.js +3 -3
- package/lib/examples/LoopWorkspaceExample.d.ts +1 -1
- package/lib/examples/LoopWorkspaceExample.js +5 -5
- package/lib/examples/NotebookPageAgent.js +1 -1
- package/lib/examples/utils/AssistantGalleryGrid.js +1 -1
- package/lib/examples/utils/owlCharacterPlugin.js +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/loop-example-main.js +1 -1
- package/lib/loop-main.js +9 -9
- package/lib/stories/loop/ReferenceScreens.js +1 -1
- package/lib/ui-plugins/MCPUIPlugin.d.ts +14 -0
- package/lib/ui-plugins/MCPUIPlugin.js +17 -48
- package/lib/ui-plugins/index.d.ts +1 -1
- package/lib/ui-plugins/index.js +1 -1
- package/package.json +3 -2
- /package/lib/{loop → apps}/apps/AppKept.js +0 -0
- /package/lib/{loop → apps}/apps/AppRuntimePlugins.d.ts +0 -0
- /package/lib/{loop → apps}/apps/agent.d.ts +0 -0
- /package/lib/{loop → apps}/apps/appspec.js +0 -0
- /package/lib/{loop → apps}/apps/checks.d.ts +0 -0
- /package/lib/{loop → apps}/apps/composer.js +0 -0
- /package/lib/{loop → apps}/apps/computer.js +0 -0
- /package/lib/{loop → apps}/apps/customComponents.d.ts +0 -0
- /package/lib/{loop → apps}/apps/hostTools.js +0 -0
- /package/lib/{loop → apps}/apps/kept.js +0 -0
- /package/lib/{loop → apps}/apps/language.js +0 -0
- /package/lib/{loop → apps}/apps/pluginPair.js +0 -0
- /package/lib/{loop → apps}/apps/records.js +0 -0
- /package/lib/{loop → apps}/apps/rules.d.ts +0 -0
- /package/lib/{loop → apps}/apps/threads.js +0 -0
- /package/lib/{loop → apps}/apps/uploads.js +0 -0
- /package/lib/{loop → apps}/apps/visitorToken.d.ts +0 -0
- /package/lib/{loop → apps}/apps/yaml.d.ts +0 -0
- /package/lib/{loop → apps}/core/a2uiComponents.d.ts +0 -0
- /package/lib/{loop → apps}/core/canvasBlocks.d.ts +0 -0
- /package/lib/{loop → apps}/core/focusRequests.d.ts +0 -0
- /package/lib/{loop → apps}/core/promptStore.d.ts +0 -0
- /package/lib/{loop → apps}/core/surfaceRequests.js +0 -0
- /package/lib/{loop → apps}/core/toolbar.d.ts +0 -0
- /package/lib/{loop → apps}/embed/AppEmbed.d.ts +0 -0
- /package/lib/{loop → apps}/embed/datalayer-app.d.ts +0 -0
- /package/lib/{loop → apps}/embed/element.d.ts +0 -0
- /package/lib/{loop → apps}/embed/embedConfig.js +0 -0
- /package/lib/{loop → apps}/embed/embedSession.js +0 -0
- /package/lib/{loop → apps}/embed/embedTheme.d.ts +0 -0
- /package/lib/{loop → apps}/embed/embedTheme.js +0 -0
- /package/lib/{loop → apps}/embed/hostBridge.js +0 -0
- /package/lib/{loop → apps}/extensions.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/a2a-sidebar/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/a2ui/A2uiView.js +0 -0
- /package/lib/{loop → apps}/plugins/a2ui/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/a2ui-scene/index.js +0 -0
- /package/lib/{loop → apps}/plugins/a2ui-surface/InlineSurface.js +0 -0
- /package/lib/{loop → apps}/plugins/a2ui-surface/SurfaceToolResult.js +0 -0
- /package/lib/{loop → apps}/plugins/a2ui-surface/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/a2ui-surface/index.js +0 -0
- /package/lib/{loop → apps}/plugins/a2ui-surface/ownComponents.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/a2ui-surface/toolResult.js +0 -0
- /package/lib/{loop → apps}/plugins/agent-a2a/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-a2ui/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-a2ui-jupyter-output/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-checkpoints/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-code-sandbox/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-code-sandboxes/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-codemode/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-compaction/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-evals/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-guardrails/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-hooks/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-inference/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-mcp/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-memory/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-monitoring/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-notifications/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-otel/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-outputs/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-parameters/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-skills/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-subagents/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-tool-approvals/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agent-triggers/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agents/AgentSummaryPanel.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/AnonymousKeyBadge.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/DatalayerAgentBridge.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/DatalayerAgentMount.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/SandboxSelector.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/SandboxStatusBridge.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/SandboxView.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/TeamMemberPicker.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/appLaunch.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/browserService.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agents/plugin.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/specSubagents.js +0 -0
- /package/lib/{loop → apps}/plugins/agents/useSandboxService.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agents/useTeamSelection.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/agentspecs/AgentspecPicker.js +0 -0
- /package/lib/{loop → apps}/plugins/agentspecs/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/app-activity/AppActivity.js +0 -0
- /package/lib/{loop → apps}/plugins/app-activity/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/app-activity/index.js +0 -0
- /package/lib/{loop → apps}/plugins/app-computer/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/app-computer/index.js +0 -0
- /package/lib/{loop → apps}/plugins/app-elements/AppElements.js +0 -0
- /package/lib/{loop → apps}/plugins/app-page/appPageModel.js +0 -0
- /package/lib/{loop → apps}/plugins/app-page/index.js +0 -0
- /package/lib/{loop → apps}/plugins/app-rules/AppRulesCard.js +0 -0
- /package/lib/{loop → apps}/plugins/app-rules/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/app-rules/index.js +0 -0
- /package/lib/{loop → apps}/plugins/assistant/index.js +0 -0
- /package/lib/{loop → apps}/plugins/chat/chatViewTools.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/chat/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/chat-extras/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/chat-header/HeaderView.js +0 -0
- /package/lib/{loop → apps}/plugins/chat-header/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/chat-header/index.js +0 -0
- /package/lib/{loop → apps}/plugins/chat-view/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/checkpoints-sidebar/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/commands/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/decks/DeckSurface.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/decks/DeckSurface.js +0 -0
- /package/lib/{loop → apps}/plugins/decks/DecksMenu.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/decks/DecksMenu.js +0 -0
- /package/lib/{loop → apps}/plugins/decks/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/document/DocumentView.js +0 -0
- /package/lib/{loop → apps}/plugins/document/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/document/openingDocument.js +0 -0
- /package/lib/{loop → apps}/plugins/document-toolbar/SandboxStatusItem.js +0 -0
- /package/lib/{loop → apps}/plugins/document-toolbar/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/document-toolbar/plugin.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/document-view/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/graph/GraphToggle.js +0 -0
- /package/lib/{loop → apps}/plugins/graph/GraphView.js +0 -0
- /package/lib/{loop → apps}/plugins/graph/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/input-prompt/ComposerView.js +0 -0
- /package/lib/{loop → apps}/plugins/input-prompt/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/input-prompt/index.js +0 -0
- /package/lib/{loop → apps}/plugins/models/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/notebook/NotebookView.js +0 -0
- /package/lib/{loop → apps}/plugins/notebook/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/notebook/openingNotebook.js +0 -0
- /package/lib/{loop → apps}/plugins/notebook-toolbar/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/notebook-toolbar/items.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/notebook-toolbar/items.js +0 -0
- /package/lib/{loop → apps}/plugins/notebook-toolbar/plugin.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/notebook-view/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/page-layout/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/page-layout/index.js +0 -0
- /package/lib/{loop → apps}/plugins/plugins-panel/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/prompt/NewChatAction.js +0 -0
- /package/lib/{loop → apps}/plugins/prompt/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/shell/index.js +0 -0
- /package/lib/{loop → apps}/plugins/shell/useEditorPreviews.js +0 -0
- /package/lib/{loop → apps}/plugins/subagent-activity/SubagentPulse.js +0 -0
- /package/lib/{loop → apps}/plugins/subagent-activity/index.d.ts +0 -0
- /package/lib/{loop → apps}/plugins/view-switch/index.js +0 -0
- /package/lib/{loop → apps}/plugins/window-frame/WindowFrame.js +0 -0
- /package/lib/{loop → apps}/plugins/window-frame/index.d.ts +0 -0
- /package/lib/{loop → apps}/shell/LoopWorkspace.js +0 -0
- /package/lib/{loop → apps}/shell/PluginToggles.js +0 -0
- /package/lib/{loop → apps}/shell/SidebarRail.js +0 -0
- /package/lib/{loop → apps}/shell/ViewSwitcher.js +0 -0
- /package/lib/{loop → apps}/shell/WorkspaceFullScreenAction.js +0 -0
- /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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
4
|
+
* @module apps/shell
|
|
5
5
|
*/
|
|
6
6
|
export { LoopWorkspace, buildLoopReactor, type LoopWorkspaceProps, } from './LoopWorkspace';
|
|
7
7
|
export { ViewSwitcher, type ViewSwitcherProps } 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
|
|
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
|
|
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
|
|
22
|
+
* @module apps/shell/useWorkspaceFullScreen
|
|
23
23
|
*/
|
|
24
24
|
import type { RefObject } from 'react';
|
|
25
25
|
export type WorkspaceFullScreen = {
|
package/lib/chat/ChatLanguage.js
CHANGED
|
@@ -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 '../
|
|
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.d.ts
CHANGED
|
@@ -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 (`
|
|
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 '../
|
|
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 '../../../
|
|
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 '../../../
|
|
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(--
|
|
43
|
-
background: 'var(--
|
|
44
|
-
color: 'var(--
|
|
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(--
|
|
53
|
-
borderColor: 'var(--
|
|
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 '../../
|
|
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 '../../
|
|
6
|
-
import { readA2uiToolResult } from '../../
|
|
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 (`
|
|
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 '../../
|
|
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;
|