@schlenkr/ragents 0.1.4 → 0.1.6
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/README.md +19 -11
- package/apps/server/package.json +8 -6
- package/apps/server/src/access-projection.ts +3 -3
- package/apps/server/src/access-service.ts +19 -8
- package/apps/server/src/access-session.ts +6 -2
- package/apps/server/src/api/contracts.ts +19 -18
- package/apps/server/src/api/core-methods.ts +45 -26
- package/apps/server/src/api/delivery.ts +4 -4
- package/apps/server/src/api/reference.ts +1 -1
- package/apps/server/src/api/rights.ts +86 -7
- package/apps/server/src/chat-context.ts +1 -1
- package/apps/server/src/chat-handler.ts +14 -7
- package/apps/server/src/config-file.ts +25 -6
- package/apps/server/src/config.ts +4 -4
- package/apps/server/src/data-directory.ts +1 -1
- package/apps/server/src/folder-install.ts +115 -0
- package/apps/server/src/host-api.json +1256 -0
- package/apps/server/src/host-api.ts +190 -0
- package/apps/server/src/host-resolution-hooks.mjs +50 -1
- package/apps/server/src/host-resolution.ts +26 -1
- package/apps/server/src/host-version.ts +41 -0
- package/apps/server/src/host-web.ts +59 -0
- package/apps/server/src/layout.ts +1 -1
- package/apps/server/src/main.ts +3 -2
- package/apps/server/src/missing-environment.ts +47 -0
- package/apps/server/src/parent-watch.ts +37 -0
- package/apps/server/src/plugin-build/build.ts +650 -0
- package/apps/server/src/plugin-build/host-api-names.ts +185 -0
- package/apps/server/src/plugin-build/plugin-description.ts +118 -0
- package/apps/server/src/plugin-build/typecheck.ts +66 -0
- package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/app-project.ts +16 -15
- package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/client-compiler.ts +4 -4
- package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/client-contracts.ts +4 -4
- package/apps/server/src/plugin-support/actor-programs/client-runtime.ts +27 -0
- package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/contract.ts +3 -3
- package/apps/server/src/plugin-support/actor-programs/service.ts +1 -1
- package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/tailwind.ts +2 -3
- package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/workflow/index.ts +48 -48
- package/apps/server/src/plugin-support/agent-tool.ts +10 -5
- package/apps/server/src/plugin-support/http.ts +1 -1
- package/apps/server/src/plugin-support/language-server/contract.ts +37 -6
- package/apps/server/src/plugin-support/language-server/plugin.ts +18 -8
- package/apps/server/src/plugin-support/language-server/snapshot-method.ts +32 -7
- package/apps/server/src/plugin-support/language-server/tools.ts +59 -15
- package/apps/server/src/plugin-support/model-aliases.ts +77 -0
- package/apps/server/src/plugin-support/model-choice.ts +17 -7
- package/apps/server/src/plugin-support/model-completion.ts +58 -0
- package/apps/server/src/plugin-support/model-upstreams.ts +2 -2
- package/apps/server/src/plugin-support/native-typescript-executor.ts +10 -7
- package/apps/server/src/plugin-support/plugin-config.ts +1 -1
- package/apps/server/src/plugin-support/plugin-folder.ts +4 -1
- package/apps/server/src/plugin-support/plugin-module.ts +1 -1
- package/apps/server/src/plugin-support/plugins-root.ts +6 -10
- package/apps/server/src/plugin-support/process-sandbox.ts +312 -0
- package/apps/server/src/plugin-support/product-model-settings-contract.ts +14 -5
- package/apps/server/src/plugin-support/product-model-settings.ts +10 -9
- package/{plugins/ragents.product/server/relay.ts → apps/server/src/plugin-support/product-relay.ts} +2 -2
- package/apps/server/src/plugin-support/product-start-options.ts +8 -3
- package/apps/server/src/plugin-support/prompt.ts +1 -1
- package/apps/server/src/plugin-support/provision.ts +6 -0
- package/apps/server/src/plugin-support/run-scripts.ts +16 -2
- package/apps/server/src/plugin-support/skills.ts +32 -16
- package/apps/server/src/plugin-support/start-entries-contract.ts +12 -3
- package/apps/server/src/plugin-support/start-options-contract.ts +5 -1
- package/apps/server/src/plugin-support/thinking-level.ts +6 -1
- package/apps/server/src/plugin-support/tool-availability.ts +1 -7
- package/apps/server/src/plugin-support/workspace-ownership.ts +12 -6
- package/apps/server/src/plugin-support/workspace-sandbox-host.ts +184 -37
- package/apps/server/src/profile/bundle-manifest.ts +183 -0
- package/apps/server/src/profile/compose.ts +19 -10
- package/apps/server/src/profile/plugin-discovery.ts +98 -46
- package/apps/server/src/profile/provisioning.ts +30 -26
- package/apps/server/src/profile-target.ts +3 -0
- package/apps/server/src/provider.ts +182 -99
- package/apps/server/src/ragents/actor-chat-history.ts +23 -22
- package/apps/server/src/ragents/chat-projection.ts +25 -14
- package/apps/server/src/ragents/chat-text-positions.ts +4 -4
- package/apps/server/src/ragents/coordinator.ts +27 -1
- package/apps/server/src/ragents/document-store.ts +1 -1
- package/apps/server/src/ragents/engine.ts +69 -36
- package/apps/server/src/ragents/global-chat.ts +26 -13
- package/apps/server/src/ragents/host-services.ts +15 -6
- package/apps/server/src/ragents/journal-chat-events.ts +31 -15
- package/apps/server/src/ragents/product-runtime.ts +1 -1
- package/apps/server/src/ragents/run-owner.ts +17 -0
- package/apps/server/src/ragents/runtime-bridge.ts +1 -1
- package/apps/server/src/ragents/session.ts +181 -82
- package/apps/server/src/ragents/start-option-state.ts +1 -1
- package/apps/server/src/ragents/typescript-tools.ts +35 -27
- package/apps/server/src/ragents/workspace-runtime.ts +74 -8
- package/apps/server/src/rpc/dispatcher.ts +17 -8
- package/apps/server/src/rpc/http-transport.ts +1 -3
- package/apps/server/src/rpc/stdio-transport.ts +1 -1
- package/apps/server/src/run-preparation-contract.ts +1 -1
- package/apps/server/src/run-preparation-input.ts +1 -1
- package/apps/server/src/run-preparation.ts +13 -20
- package/apps/server/src/run-transfer.ts +2 -2
- package/apps/server/src/server.ts +112 -33
- package/apps/server/src/settings.ts +7 -8
- package/apps/server/src/title-compactor.ts +5 -8
- package/apps/server/src/title-settings.ts +3 -3
- package/apps/server/src/web-bundles.ts +79 -0
- package/apps/server/src/web-stylesheet.ts +85 -0
- package/apps/server/tsconfig.json +4 -4
- package/apps/server/tsconfig.plugin.json +58 -0
- package/apps/web/dist/assets/highlighted-body-KPVGNVTW-B9qYBARS.js +1 -0
- package/apps/web/dist/assets/main-BCjvD2Hh.js +6 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-BPn4aV2r.css +1 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-CvYYFK_n.js +478 -0
- package/apps/web/dist/assets/runPanel-CG7kRMJh.js +21 -0
- package/apps/web/dist/help/guide-access.html +199 -0
- package/apps/web/dist/help/guide-access.md +84 -0
- package/apps/web/dist/help/guide-clients.html +421 -0
- package/apps/web/dist/help/guide-clients.md +336 -0
- package/apps/web/dist/help/guide-distributed.html +320 -0
- package/apps/web/dist/help/guide-distributed.md +225 -0
- package/apps/web/dist/help/guide-functions.html +231 -0
- package/apps/web/dist/help/guide-functions.md +127 -0
- package/apps/web/dist/help/guide-getting-started.html +230 -0
- package/apps/web/dist/help/guide-getting-started.md +123 -0
- package/apps/web/dist/help/guide-ideas.html +183 -0
- package/apps/web/dist/help/guide-ideas.md +71 -0
- package/apps/web/dist/help/guide-plugins.html +450 -0
- package/apps/web/dist/help/guide-plugins.md +341 -0
- package/apps/web/dist/help/guide-programs.html +359 -0
- package/apps/web/dist/help/guide-programs.md +271 -0
- package/apps/web/dist/help/guide-runtime.html +338 -0
- package/apps/web/dist/help/guide-runtime.md +225 -0
- package/apps/web/dist/help/guide.html +133 -0
- package/apps/web/dist/help/guide.md +13 -0
- package/apps/web/dist/help/homepage-bullets.js +12 -0
- package/apps/web/dist/help/homepage-distributed.js +261 -0
- package/apps/web/dist/help/homepage-plugins.js +30 -0
- package/apps/web/dist/help/homepage-scenes.js +368 -0
- package/apps/web/dist/help/homepage-stickers.js +69 -0
- package/apps/web/dist/help/homepage-story-nav.js +11 -0
- package/apps/web/dist/help/homepage-subnav.js +61 -0
- package/apps/web/dist/help/homepage.css +833 -0
- package/apps/web/dist/help/index.html +1167 -0
- package/apps/web/dist/help/mini-app.css +7056 -0
- package/apps/web/dist/help/mini-app.html +15 -0
- package/apps/web/dist/help/mini-app.js +131 -0
- package/apps/web/dist/help/screenshots/release-checklist-vscode.png +0 -0
- package/apps/web/dist/help/screenshots/release-checklist-web.png +0 -0
- package/apps/web/dist/help/scroll-vendor.js +73 -0
- package/apps/web/dist/help/site.css +63 -0
- package/apps/web/dist/help/site.js +103 -0
- package/apps/web/dist/host-web.json +143 -0
- package/apps/web/dist/index.html +15 -0
- package/apps/web/dist/run-panel.html +15 -0
- package/apps/web/package.json +2 -2
- package/apps/web/src/App.tsx +8 -6
- package/apps/web/src/Overview.tsx +5 -5
- package/apps/web/src/PluginActivation.ts +25 -5
- package/apps/web/src/PluginChat.tsx +163 -129
- package/apps/web/src/PluginFailureNotice.tsx +15 -0
- package/apps/web/src/PluginRegistry.tsx +106 -68
- package/apps/web/src/RunPreparationChat.tsx +40 -28
- package/apps/web/src/RunStore.ts +2 -2
- package/apps/web/src/SettingsModal.tsx +37 -37
- package/apps/web/src/StartOptions.tsx +81 -26
- package/apps/web/src/StartSelection.tsx +111 -0
- package/apps/web/src/StartTiles.tsx +73 -0
- package/apps/web/src/{CanvasShortcuts.tsx → SurfaceShortcuts.tsx} +2 -2
- package/apps/web/src/ThemeSettings.tsx +1 -1
- package/apps/web/src/WorkspacePanel.tsx +4 -4
- package/apps/web/src/access-session.ts +4 -1
- package/{plugins/ragents.orchestration/web → apps/web/src}/actor-conversation.ts +3 -3
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/DataTable.tsx +9 -9
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FilePicker.tsx +4 -4
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FlowDiagram.tsx +16 -14
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FlowDiagramRenderer.tsx +3 -3
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Form.tsx +12 -12
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Layout.tsx +1 -1
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/MessageList.tsx +5 -5
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Viewers.tsx +8 -7
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/WorkflowDiagram.tsx +1 -1
- package/apps/web/src/actor-programs/client-ui/chat-contracts.d.ts +64 -0
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/contracts.d.ts +2 -2
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/file-selection.ts +5 -5
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/index.tsx +22 -16
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/layout-contracts.d.ts +1 -1
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/message-list-contracts.d.ts +2 -2
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/workflow-diagram-contracts.d.ts +1 -1
- package/apps/web/src/api.ts +43 -22
- package/apps/web/src/chat/QuasselHost.tsx +12 -0
- package/apps/web/src/chat/StoppedActorNotice.tsx +39 -0
- package/apps/web/src/chat/chat-target.ts +14 -5
- package/apps/web/src/chat/requests.ts +13 -5
- package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
- package/apps/web/src/chat/useChat.ts +8 -7
- package/apps/web/src/chat/user-location.ts +1 -1
- package/apps/web/src/chat-view-settings.tsx +49 -0
- package/apps/web/src/host-modules.ts +90 -0
- package/apps/web/src/language-server/api.ts +24 -0
- package/{plugins/ragents.lsp-roslyn/web → apps/web/src/language-server}/language-server-plugin.tsx +133 -6
- package/apps/web/src/main.tsx +4 -2
- package/apps/web/src/offered-machines.ts +11 -0
- package/apps/web/src/panel/ConnectionsPage.tsx +117 -0
- package/apps/web/src/panel/LoginForm.tsx +9 -9
- package/apps/web/src/panel/PanelDialogs.tsx +44 -27
- package/apps/web/src/panel/PanelHeader.tsx +11 -0
- package/apps/web/src/panel/PanelPage.tsx +8 -5
- package/apps/web/src/panel/RunLine.tsx +48 -0
- package/apps/web/src/panel/RunsPage.tsx +84 -0
- package/apps/web/src/panel/StartPage.tsx +163 -0
- package/apps/web/src/panel/connection-state.ts +40 -0
- package/apps/web/src/panel/contract.ts +64 -21
- package/apps/web/src/panel/page-props.ts +6 -0
- package/apps/web/src/plugin-bootstrap.ts +60 -31
- package/{plugins/ragents.product/web → apps/web/src/product}/ModelControl.tsx +3 -3
- package/{plugins/ragents.product/web → apps/web/src/product}/ProductModelSettings.tsx +7 -7
- package/{plugins/ragents.product/web → apps/web/src/product}/SystemPromptControl.tsx +3 -3
- package/{plugins/ragents.product/web → apps/web/src/product}/model-settings.ts +3 -3
- package/{plugins/ragents.product/web → apps/web/src/product}/start-options.tsx +2 -2
- package/apps/web/src/rpc/client.ts +28 -6
- package/apps/web/src/run-panel/RunPanelApp.tsx +334 -0
- package/apps/web/src/{column/ColumnRunHeader.tsx → run-panel/RunPanelHeader.tsx} +2 -2
- package/apps/web/src/{column/ColumnMenu.tsx → run-panel/RunPanelMenu.tsx} +4 -4
- package/apps/web/src/run-panel/RunPanelRail.tsx +38 -0
- package/apps/web/src/run-panel/RunPanelWorkspace.tsx +55 -0
- package/apps/web/src/{column → run-panel}/clipboard.ts +21 -10
- package/apps/web/src/run-panel/host-contract.ts +123 -0
- package/apps/web/src/{column → run-panel}/host.ts +31 -23
- package/apps/web/src/run-panel/input-bridge.ts +75 -0
- package/apps/web/src/run-panel/keyboard.ts +53 -0
- package/apps/web/src/run-panel/run-panel-location.ts +35 -0
- package/apps/web/src/{column → run-panel}/use-session-list.ts +3 -3
- package/apps/web/src/run-panel/workspace-state.ts +43 -0
- package/apps/web/src/{column.tsx → run-panel.tsx} +20 -13
- package/apps/web/src/run-preparation.ts +1 -1
- package/{plugins/ragents.orchestration/web → apps/web/src}/run-view.ts +25 -7
- package/apps/web/src/settings-contributions.ts +16 -18
- package/apps/web/src/title-model-settings.ts +1 -1
- package/apps/web/src/toolLine.ts +1 -1
- package/apps/web/src/ui/ListDetail.tsx +1 -1
- package/apps/web/src/ui/dialog.tsx +5 -5
- package/apps/web/src/ui/frame.css +1 -0
- package/apps/web/src/ui/index.ts +5 -0
- package/apps/web/src/ui/popover.tsx +2 -2
- package/apps/web/src/ui/quassel.css +41 -0
- package/apps/web/src/ui/relative-time.ts +36 -0
- package/apps/web/src/ui/startup-notice.tsx +22 -0
- package/apps/web/src/ui/state-icon.tsx +60 -0
- package/apps/web/src/ui/state-vocabulary.ts +31 -0
- package/apps/web/src/ui/stop-button.tsx +22 -0
- package/apps/web/src/ui/tailwind.css +2 -3
- package/apps/web/src/ui/theme.css +19 -19
- package/apps/web/tsconfig.json +4 -5
- package/apps/web/tsconfig.plugin.json +44 -0
- package/bundles/ragents.activity/ragents-bundle.json +38 -0
- package/bundles/ragents.activity/server/index.js +14 -0
- package/bundles/ragents.activity/server/index.js.map +7 -0
- package/bundles/ragents.activity/web/classes.json +1 -0
- package/bundles/ragents.activity/web/index.js +2 -0
- package/bundles/ragents.activity/web/index.js.map +7 -0
- package/bundles/ragents.actor-programs/prompt.hbs +80 -0
- package/bundles/ragents.actor-programs/ragents-bundle.json +214 -0
- package/bundles/ragents.actor-programs/server/index.js +2071 -0
- package/bundles/ragents.actor-programs/server/index.js.map +7 -0
- package/bundles/ragents.actor-programs/summary.hbs +17 -0
- package/bundles/ragents.actor-programs/web/classes.json +1 -0
- package/bundles/ragents.actor-programs/web/index.js +27 -0
- package/bundles/ragents.actor-programs/web/index.js.map +7 -0
- package/bundles/ragents.ask/ask.hbs +4 -0
- package/bundles/ragents.ask/ragents-bundle.json +97 -0
- package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js +13 -0
- package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +7 -0
- package/bundles/ragents.ask/server/exports/server/contract.js +11 -0
- package/bundles/ragents.ask/server/exports/server/contract.js.map +7 -0
- package/bundles/ragents.ask/server/index.js +279 -0
- package/bundles/ragents.ask/server/index.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-V7W3QDVS.js +25 -0
- package/bundles/ragents.ask/web/chunks/chunk-V7W3QDVS.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +7 -0
- package/bundles/ragents.ask/web/classes.json +1 -0
- package/bundles/ragents.ask/web/exports/ask-payload.js +2 -0
- package/bundles/ragents.ask/web/exports/ask-payload.js.map +7 -0
- package/bundles/ragents.ask/web/exports/web/QuestionCard.js +2 -0
- package/bundles/ragents.ask/web/exports/web/QuestionCard.js.map +7 -0
- package/bundles/ragents.ask/web/exports/web/api.js +2 -0
- package/bundles/ragents.ask/web/exports/web/api.js.map +7 -0
- package/bundles/ragents.ask/web/index.js +2 -0
- package/bundles/ragents.ask/web/index.js.map +7 -0
- package/bundles/ragents.browser/ragents-bundle.json +53 -0
- package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js +11 -0
- package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js.map +7 -0
- package/bundles/ragents.browser/server/exports/server/contract.js +9 -0
- package/bundles/ragents.browser/server/exports/server/contract.js.map +7 -0
- package/bundles/ragents.browser/server/index.js +479 -0
- package/bundles/ragents.browser/server/index.js.map +7 -0
- package/bundles/ragents.browser/skills/browser-testing/SKILL.md +38 -0
- package/bundles/ragents.documents/prompt.hbs +18 -0
- package/bundles/ragents.documents/ragents-bundle.json +120 -0
- package/bundles/ragents.documents/server/chunks/chunk-QIECRZ7C.js +37 -0
- package/bundles/ragents.documents/server/chunks/chunk-QIECRZ7C.js.map +7 -0
- package/bundles/ragents.documents/server/exports/contract.js +11 -0
- package/bundles/ragents.documents/server/exports/contract.js.map +7 -0
- package/bundles/ragents.documents/server/index.js +290 -0
- package/bundles/ragents.documents/server/index.js.map +7 -0
- package/bundles/ragents.documents/web/classes.json +1 -0
- package/bundles/ragents.documents/web/index.js +26 -0
- package/bundles/ragents.documents/web/index.js.map +7 -0
- package/bundles/ragents.lsp-fsharp/ragents-bundle.json +49 -0
- package/bundles/ragents.lsp-fsharp/server/index.js +82 -0
- package/bundles/ragents.lsp-fsharp/server/index.js.map +7 -0
- package/bundles/ragents.lsp-fsharp/web/classes.json +1 -0
- package/bundles/ragents.lsp-fsharp/web/index.js +2 -0
- package/bundles/ragents.lsp-fsharp/web/index.js.map +7 -0
- package/bundles/ragents.lsp-roslyn/ragents-bundle.json +61 -0
- package/bundles/ragents.lsp-roslyn/server/index.js +208 -0
- package/bundles/ragents.lsp-roslyn/server/index.js.map +7 -0
- package/bundles/ragents.lsp-roslyn/web/classes.json +1 -0
- package/bundles/ragents.lsp-roslyn/web/index.js +2 -0
- package/bundles/ragents.lsp-roslyn/web/index.js.map +7 -0
- package/bundles/ragents.lsp-typescript/ragents-bundle.json +36 -0
- package/bundles/ragents.lsp-typescript/server/index.js +13 -0
- package/bundles/ragents.lsp-typescript/server/index.js.map +7 -0
- package/bundles/ragents.lsp-typescript/web/classes.json +1 -0
- package/bundles/ragents.lsp-typescript/web/index.js +2 -0
- package/bundles/ragents.lsp-typescript/web/index.js.map +7 -0
- package/bundles/ragents.model-relay/ragents-bundle.json +33 -0
- package/bundles/ragents.model-relay/server/index.js +230 -0
- package/bundles/ragents.model-relay/server/index.js.map +7 -0
- package/bundles/ragents.orchestration/orchestration.hbs +106 -0
- package/bundles/ragents.orchestration/ragents-bundle.json +194 -0
- package/bundles/ragents.orchestration/server/index.js +277 -0
- package/bundles/ragents.orchestration/server/index.js.map +7 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-ODMMQGX2.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-ODMMQGX2.js.map +7 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js.map +7 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-OSKPH6SZ.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-OSKPH6SZ.js.map +7 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js.map +7 -0
- package/bundles/ragents.orchestration/web/classes.json +1 -0
- package/bundles/ragents.orchestration/web/exports/web/program-slot.js +2 -0
- package/bundles/ragents.orchestration/web/exports/web/program-slot.js.map +7 -0
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +2 -0
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js.map +7 -0
- package/bundles/ragents.orchestration/web/exports/web/tile-docking.js +2 -0
- package/bundles/ragents.orchestration/web/exports/web/tile-docking.js.map +7 -0
- package/bundles/ragents.orchestration/web/index.js +51 -0
- package/bundles/ragents.orchestration/web/index.js.map +7 -0
- package/bundles/ragents.overseer/ragents-bundle.json +144 -0
- package/bundles/ragents.overseer/server/index.js +652 -0
- package/bundles/ragents.overseer/server/index.js.map +7 -0
- package/bundles/ragents.overseer/web/classes.json +1 -0
- package/bundles/ragents.overseer/web/index.js +25 -0
- package/bundles/ragents.overseer/web/index.js.map +7 -0
- package/bundles/ragents.processes/ragents-bundle.json +93 -0
- package/bundles/ragents.processes/server/index.js +204 -0
- package/bundles/ragents.processes/server/index.js.map +7 -0
- package/bundles/ragents.processes/web/classes.json +1 -0
- package/bundles/ragents.processes/web/index.js +4 -0
- package/bundles/ragents.processes/web/index.js.map +7 -0
- package/bundles/ragents.product/preamble.hbs +9 -0
- package/bundles/ragents.product/ragents-bundle.json +93 -0
- package/bundles/ragents.product/server/index.js +208 -0
- package/bundles/ragents.product/server/index.js.map +7 -0
- package/bundles/ragents.product/web/classes.json +1 -0
- package/bundles/ragents.product/web/index.js +2 -0
- package/bundles/ragents.product/web/index.js.map +7 -0
- package/bundles/ragents.profile-distribution/ragents-bundle.json +64 -0
- package/bundles/ragents.profile-distribution/server/index.js +241 -0
- package/bundles/ragents.profile-distribution/server/index.js.map +7 -0
- package/bundles/ragents.reference/ragents-bundle.json +39 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +27 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +10 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +80 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +82 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +154 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +9 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +32 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +59 -0
- package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +13 -0
- package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +9 -0
- package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +81 -0
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +26 -0
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +34 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +24 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +10 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +5 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +27 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +137 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/state.ts +38 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +42 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +38 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +218 -0
- package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +12 -0
- package/bundles/ragents.reference/run-scripts/moderated-round/package.json +9 -0
- package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +60 -0
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +26 -0
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +24 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +18 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +16 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +39 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +15 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/server.ts +14 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +13 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +9 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +65 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +26 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +42 -0
- package/bundles/ragents.reference/run-scripts/word-game/RUN.md +25 -0
- package/bundles/ragents.reference/run-scripts/word-game/package.json +11 -0
- package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +27 -0
- package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +23 -0
- package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +105 -0
- package/bundles/ragents.reference/run-scripts/word-game/src/state.ts +22 -0
- package/bundles/ragents.reference/run-scripts/word-game/src/view.tsx +54 -0
- package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +252 -0
- package/bundles/ragents.reference/server/index.js +16 -0
- package/bundles/ragents.reference/server/index.js.map +7 -0
- package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/decision-brief/SKILL.md +33 -0
- package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +33 -0
- package/bundles/ragents.reference/web/classes.json +1 -0
- package/bundles/ragents.reference/web/index.js +2 -0
- package/bundles/ragents.reference/web/index.js.map +7 -0
- package/bundles/ragents.todo/ragents-bundle.json +48 -0
- package/bundles/ragents.todo/server/index.js +108 -0
- package/bundles/ragents.todo/server/index.js.map +7 -0
- package/bundles/ragents.todo/web/classes.json +1 -0
- package/bundles/ragents.todo/web/index.js +2 -0
- package/bundles/ragents.todo/web/index.js.map +7 -0
- package/bundles/ragents.transcript/ragents-bundle.json +34 -0
- package/bundles/ragents.transcript/server/index.js +102 -0
- package/bundles/ragents.transcript/server/index.js.map +7 -0
- package/bundles/ragents.watch/ragents-bundle.json +39 -0
- package/bundles/ragents.watch/server/chunks/chunk-FHAM6OML.js +11 -0
- package/bundles/ragents.watch/server/chunks/chunk-FHAM6OML.js.map +7 -0
- package/bundles/ragents.watch/server/chunks/chunk-RPBX3J4P.js +10 -0
- package/bundles/ragents.watch/server/chunks/chunk-RPBX3J4P.js.map +7 -0
- package/bundles/ragents.watch/server/exports/contract.js +9 -0
- package/bundles/ragents.watch/server/exports/contract.js.map +7 -0
- package/bundles/ragents.watch/server/exports/server/contract.js +9 -0
- package/bundles/ragents.watch/server/exports/server/contract.js.map +7 -0
- package/bundles/ragents.watch/server/index.js +482 -0
- package/bundles/ragents.watch/server/index.js.map +7 -0
- package/bundles/ragents.workspace/prompt.hbs +7 -0
- package/bundles/ragents.workspace/ragents-bundle.json +148 -0
- package/bundles/ragents.workspace/server/index.js +1049 -0
- package/bundles/ragents.workspace/server/index.js.map +7 -0
- package/bundles/ragents.workspace/web/classes.json +1 -0
- package/bundles/ragents.workspace/web/index.js +39 -0
- package/bundles/ragents.workspace/web/index.js.map +7 -0
- package/package.json +5 -16
- package/packages/agent/dist/core/agent-session-runtime.d.ts +33 -0
- package/packages/agent/dist/core/agent-session-services.d.ts +35 -0
- package/packages/agent/dist/core/agent-session.d.ts +234 -0
- package/packages/agent/dist/core/agent-settings.d.ts +27 -0
- package/packages/agent/dist/core/auth-guidance.d.ts +4 -0
- package/packages/agent/dist/core/compaction/compaction.d.ts +116 -0
- package/packages/agent/dist/core/compaction/index.d.ts +6 -0
- package/packages/agent/dist/core/compaction/utils.d.ts +39 -0
- package/packages/agent/dist/core/defaults.d.ts +3 -0
- package/packages/agent/dist/core/extensions/index.d.ts +11 -0
- package/packages/agent/dist/core/extensions/loader.d.ts +12 -0
- package/packages/agent/dist/core/extensions/runner.d.ts +39 -0
- package/packages/agent/dist/core/extensions/types.d.ts +156 -0
- package/packages/agent/dist/core/extensions/wrapper.d.ts +12 -0
- package/packages/agent/dist/core/messages.d.ts +37 -0
- package/packages/agent/dist/core/model-runtime.d.ts +32 -0
- package/packages/agent/dist/core/provider-composer.d.ts +25 -0
- package/packages/agent/dist/core/resource-loader.d.ts +39 -0
- package/packages/agent/dist/core/sdk.d.ts +38 -0
- package/packages/agent/dist/core/session-manager.d.ts +189 -0
- package/packages/agent/dist/core/skills.d.ts +20 -0
- package/packages/agent/dist/core/source-info.d.ts +16 -0
- package/packages/agent/dist/core/system-prompt.d.ts +21 -0
- package/packages/agent/dist/core/tools/bash.d.ts +63 -0
- package/packages/agent/dist/core/tools/edit-diff.d.ts +98 -0
- package/packages/agent/dist/core/tools/edit.d.ts +41 -0
- package/packages/agent/dist/core/tools/file-mutation-queue.d.ts +6 -0
- package/packages/agent/dist/core/tools/index.d.ts +5 -0
- package/packages/agent/dist/core/tools/output-accumulator.d.ts +58 -0
- package/packages/agent/dist/core/tools/path-utils.d.ts +8 -0
- package/packages/agent/dist/core/tools/read.d.ts +33 -0
- package/packages/agent/dist/core/tools/truncate.d.ts +61 -0
- package/packages/agent/dist/core/tools/write.d.ts +23 -0
- package/packages/agent/dist/index.d.ts +13 -0
- package/packages/agent/dist/loop/agent-loop.d.ts +13 -0
- package/packages/agent/dist/loop/agent.d.ts +103 -0
- package/packages/agent/dist/loop/index.d.ts +5 -0
- package/packages/agent/dist/loop/types.d.ts +333 -0
- package/packages/agent/dist/loop/uuid.d.ts +2 -0
- package/packages/agent/dist/utils/child-process.d.ts +17 -0
- package/packages/agent/dist/utils/exif-orientation.d.ts +5 -0
- package/packages/agent/dist/utils/frontmatter.d.ts +8 -0
- package/packages/agent/dist/utils/image-convert.d.ts +2 -0
- package/packages/agent/dist/utils/image-process.d.ts +18 -0
- package/packages/agent/dist/utils/image-resize-core.d.ts +30 -0
- package/packages/agent/dist/utils/image-resize-worker.d.ts +2 -0
- package/packages/agent/dist/utils/image-resize.d.ts +16 -0
- package/packages/agent/dist/utils/mime.d.ts +3 -0
- package/packages/agent/dist/utils/paths.d.ts +15 -0
- package/packages/agent/dist/utils/photon.d.ts +21 -0
- package/packages/agent/dist/utils/shell.d.ts +17 -0
- package/packages/agent/dist/utils/sleep.d.ts +5 -0
- package/packages/agent/package.json +3 -32
- package/packages/agent/src/core/agent-session-runtime.ts +15 -469
- package/packages/agent/src/core/agent-session-services.ts +17 -167
- package/packages/agent/src/core/agent-session.ts +154 -2403
- package/packages/agent/src/core/agent-settings.ts +20 -0
- package/packages/agent/src/core/auth-guidance.ts +0 -4
- package/packages/agent/src/core/compaction/compaction.ts +4 -33
- package/packages/agent/src/core/compaction/index.ts +0 -1
- package/packages/agent/src/core/compaction/utils.ts +2 -2
- package/packages/agent/src/core/defaults.ts +1 -1
- package/packages/agent/src/core/extensions/index.ts +6 -117
- package/packages/agent/src/core/extensions/loader.ts +21 -605
- package/packages/agent/src/core/extensions/runner.ts +48 -969
- package/packages/agent/src/core/extensions/types.ts +35 -1298
- package/packages/agent/src/core/extensions/wrapper.ts +13 -34
- package/packages/agent/src/core/messages.ts +5 -109
- package/packages/agent/src/core/model-runtime.ts +109 -467
- package/packages/agent/src/core/provider-composer.ts +21 -451
- package/packages/agent/src/core/resource-loader.ts +18 -822
- package/packages/agent/src/core/sdk.ts +46 -281
- package/packages/agent/src/core/session-manager.ts +11 -891
- package/packages/agent/src/core/skills.ts +8 -440
- package/packages/agent/src/core/source-info.ts +0 -12
- package/packages/agent/src/core/system-prompt.ts +2 -41
- package/packages/agent/src/core/tools/bash.ts +20 -32
- package/packages/agent/src/core/tools/edit-diff.ts +0 -60
- package/packages/agent/src/core/tools/edit.ts +2 -18
- package/packages/agent/src/core/tools/index.ts +4 -130
- package/packages/agent/src/core/tools/output-accumulator.ts +33 -5
- package/packages/agent/src/core/tools/path-utils.ts +2 -49
- package/packages/agent/src/core/tools/read.ts +4 -12
- package/packages/agent/src/core/tools/truncate.ts +0 -15
- package/packages/agent/src/core/tools/write.ts +1 -8
- package/packages/agent/src/index.ts +11 -272
- package/packages/{agent-core/src → agent/src/loop}/agent-loop.ts +127 -273
- package/packages/{agent-core/src → agent/src/loop}/agent.ts +12 -164
- package/packages/{agent-core/src → agent/src/loop}/types.ts +6 -105
- package/packages/agent/src/utils/child-process.ts +0 -13
- package/packages/agent/src/utils/image-convert.ts +0 -25
- package/packages/agent/src/utils/paths.ts +1 -71
- package/packages/agent/src/utils/shell.ts +13 -156
- package/packages/ai/dist/api/ai-sdk-messages.d.ts +9 -0
- package/packages/ai/dist/api/ai-sdk-transport.d.ts +13 -0
- package/packages/ai/dist/api/ai-sdk.d.ts +13 -0
- package/packages/ai/dist/api/ai-sdk.lazy.d.ts +3 -0
- package/packages/ai/dist/api/lazy.d.ts +15 -0
- package/packages/ai/dist/api/simple-options.d.ts +4 -0
- package/packages/ai/dist/api/transform-messages.d.ts +8 -0
- package/packages/ai/dist/api-registry.d.ts +25 -0
- package/packages/ai/dist/auth/context.d.ts +4 -0
- package/packages/ai/dist/auth/helpers.d.ts +4 -0
- package/packages/ai/dist/auth/resolve.d.ts +19 -0
- package/packages/ai/dist/auth/types.d.ts +51 -0
- package/packages/ai/dist/env-api-keys.d.ts +8 -0
- package/packages/ai/dist/index.d.ts +19 -0
- package/packages/ai/dist/models.d.ts +71 -0
- package/packages/ai/dist/models.generated.d.ts +8021 -0
- package/packages/ai/dist/providers/all.d.ts +15 -0
- package/packages/ai/dist/providers/faux.d.ts +97 -0
- package/packages/ai/dist/providers/openrouter.d.ts +3 -0
- package/packages/ai/dist/providers/openrouter.models.d.ts +8019 -0
- package/packages/ai/dist/types.d.ts +541 -0
- package/packages/ai/dist/utils/diagnostics.d.ts +13 -0
- package/packages/ai/dist/utils/error-body.d.ts +25 -0
- package/packages/ai/dist/utils/estimate.d.ts +17 -0
- package/packages/ai/dist/utils/event-stream.d.ts +21 -0
- package/packages/ai/dist/utils/headers.d.ts +2 -0
- package/packages/ai/dist/utils/json-parse.d.ts +16 -0
- package/packages/ai/dist/utils/overflow.d.ts +54 -0
- package/packages/ai/dist/utils/provider-env.d.ts +7 -0
- package/packages/ai/dist/utils/retry.d.ts +12 -0
- package/packages/ai/dist/utils/sanitize-unicode.d.ts +22 -0
- package/packages/ai/dist/utils/typebox-helpers.d.ts +17 -0
- package/packages/ai/dist/utils/validation.d.ts +10 -0
- package/packages/ai/package.json +2 -6
- package/packages/ai/src/api/ai-sdk-transport.ts +2 -2
- package/packages/ai/src/api/simple-options.ts +0 -34
- package/packages/ai/src/api-registry.ts +1 -12
- package/packages/ai/src/auth/context.ts +1 -30
- package/packages/ai/src/auth/helpers.ts +3 -34
- package/packages/ai/src/auth/resolve.ts +10 -108
- package/packages/ai/src/auth/types.ts +9 -176
- package/packages/ai/src/index.ts +1 -13
- package/packages/ai/src/models.ts +41 -407
- package/packages/ai/src/providers/all.ts +3 -31
- package/packages/ai/src/providers/openrouter.models.ts +14 -0
- package/packages/ai/src/types.ts +0 -104
- package/packages/ai/src/utils/diagnostics.ts +0 -32
- package/packages/ai/src/utils/headers.ts +0 -11
- package/packages/ai/src/utils/overflow.ts +0 -7
- package/packages/ai/src/utils/validation.ts +0 -15
- package/packages/ragents/package.json +3 -6
- package/packages/ragents/src/access.ts +2 -1
- package/packages/ragents/src/agents/actor-input.ts +14 -18
- package/packages/ragents/src/agents/catalog.ts +3 -3
- package/packages/ragents/src/agents/plugins.ts +0 -4
- package/packages/ragents/src/agents/scheduler.ts +232 -78
- package/packages/ragents/src/agents/schemas.ts +1 -36
- package/packages/ragents/src/agents/tool-orientation.ts +1 -1
- package/packages/ragents/src/agents/tools.ts +72 -73
- package/packages/ragents/src/agents/toolset.ts +5 -5
- package/packages/ragents/src/agents/turn.ts +2 -14
- package/packages/ragents/src/agents/workspaces.ts +18 -0
- package/packages/ragents/src/domain/actor-reference.ts +22 -0
- package/packages/ragents/src/domain/driver.ts +0 -9
- package/packages/ragents/src/domain/event-semantics.ts +62 -74
- package/packages/ragents/src/domain/event-validation.ts +22 -21
- package/packages/ragents/src/domain/events.ts +19 -7
- package/packages/ragents/src/domain/json.ts +2 -0
- package/packages/ragents/src/domain/model.ts +40 -18
- package/packages/ragents/src/domain/projection.ts +43 -15
- package/packages/ragents/src/domain/schema-errors.ts +3 -3
- package/packages/ragents/src/drivers/agent-hooks.ts +40 -0
- package/packages/ragents/src/drivers/agent-runtime.ts +118 -186
- package/packages/ragents/src/drivers/agent.ts +5 -20
- package/packages/ragents/src/drivers/attachments.ts +4 -24
- package/packages/ragents/src/drivers/skill-preload.ts +4 -16
- package/packages/ragents/src/drivers/types.ts +20 -3
- package/packages/ragents/src/http/contracts.ts +16 -3
- package/packages/ragents/src/http/methods.ts +32 -33
- package/packages/ragents/src/index.ts +5 -15
- package/packages/ragents/src/plugin-host.ts +151 -105
- package/packages/ragents/src/plugin-types.ts +86 -23
- package/packages/ragents/src/rpc/peer.ts +6 -0
- package/packages/ragents/src/runtime/decisions/actions.ts +40 -37
- package/packages/ragents/src/runtime/decisions/actors.ts +90 -51
- package/packages/ragents/src/runtime/decisions/artifacts.ts +2 -2
- package/packages/ragents/src/runtime/decisions/inputs.ts +3 -3
- package/packages/ragents/src/runtime/decisions/subscriptions.ts +9 -7
- package/packages/ragents/src/runtime/decisions/turns.ts +37 -4
- package/packages/ragents/src/runtime/guards.ts +12 -21
- package/packages/ragents/src/runtime/journal-storage.ts +4 -2
- package/packages/ragents/src/runtime/journal.ts +1 -1
- package/packages/ragents/src/runtime/orchestration.ts +31 -14
- package/packages/ragents/src/runtime/serial-queue.ts +24 -0
- package/packages/ragents/src/runtime/stop.ts +19 -44
- package/packages/ragents/src/script/mediators.ts +4 -5
- package/packages/ragents/src/typescript/index.ts +2 -0
- package/packages/ragents/src/typescript/run-context.ts +10 -8
- package/packages/ragents/src/typescript/snippet.ts +7 -6
- package/packages/workspace-executor/package.json +2 -2
- package/packages/workspace-executor/src/bash-launch.ts +45 -0
- package/packages/workspace-executor/src/browser/contract.ts +71 -0
- package/packages/workspace-executor/src/browser/module.ts +74 -0
- package/packages/workspace-executor/src/browser/pages.ts +298 -0
- package/packages/workspace-executor/src/browser/playwright.ts +52 -0
- package/packages/workspace-executor/src/commands.ts +170 -0
- package/packages/workspace-executor/src/context.ts +34 -6
- package/packages/workspace-executor/src/errors.ts +12 -0
- package/packages/workspace-executor/src/executor.ts +62 -104
- package/packages/workspace-executor/src/files.ts +287 -0
- package/packages/workspace-executor/src/index.ts +82 -18
- package/packages/workspace-executor/src/language-server/adapters/roslyn.ts +1 -0
- package/packages/workspace-executor/src/language-server/contract.ts +14 -0
- package/packages/workspace-executor/src/language-server/host.ts +82 -26
- package/packages/workspace-executor/src/language-server/module.ts +107 -0
- package/packages/workspace-executor/src/language-server/workspace-solutions.ts +90 -0
- package/packages/workspace-executor/src/managed-process.ts +1 -1
- package/packages/workspace-executor/src/module.ts +35 -0
- package/packages/workspace-executor/src/modules.ts +25 -0
- package/packages/workspace-executor/src/paths.ts +57 -5
- package/packages/workspace-executor/src/process-sandbox.ts +16 -0
- package/packages/workspace-executor/src/processes/module.ts +48 -0
- package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/process-table.ts +80 -57
- package/packages/workspace-executor/src/processes/scanner.ts +106 -0
- package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/snapshot.ts +23 -11
- package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/terminator.ts +19 -20
- package/packages/workspace-executor/src/run-folders.ts +33 -0
- package/packages/workspace-executor/src/safe-environment.ts +14 -0
- package/packages/workspace-executor/src/sandbox-tools.ts +206 -36
- package/packages/workspace-executor/src/shell-platform.ts +2 -2
- package/plugins/package.json +1 -1
- package/plugins/ragents.activity/ragents-plugin.json +3 -0
- package/plugins/ragents.activity/server/index.ts +2 -2
- package/plugins/ragents.activity/web/ActivityHeader.tsx +2 -2
- package/plugins/ragents.activity/web/activity.ts +1 -1
- package/plugins/ragents.activity/web/index.tsx +1 -1
- package/plugins/ragents.actor-programs/prompt.hbs +8 -7
- package/plugins/ragents.actor-programs/ragents-plugin.json +3 -0
- package/plugins/ragents.actor-programs/server/agent-tools.ts +3 -3
- package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/capability-resolver.ts +1 -16
- package/plugins/ragents.actor-programs/server/controls-template.ts +5 -18
- package/plugins/ragents.actor-programs/server/controls-tool.ts +8 -11
- package/plugins/ragents.actor-programs/server/index.ts +10 -10
- package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/limits.ts +4 -4
- package/plugins/ragents.actor-programs/server/methods.ts +2 -2
- package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/operations.ts +2 -4
- package/plugins/ragents.actor-programs/server/project-diagnostics.ts +65 -70
- package/plugins/ragents.actor-programs/server/prompts.ts +4 -4
- package/plugins/ragents.actor-programs/server/routes.ts +14 -8
- package/plugins/ragents.actor-programs/server/runtime.ts +132 -55
- package/plugins/ragents.actor-programs/server/templates.ts +35 -80
- package/plugins/ragents.actor-programs/server/test-report.ts +106 -0
- package/plugins/ragents.actor-programs/server/tool-contributor.ts +4 -4
- package/plugins/ragents.actor-programs/summary.hbs +1 -1
- package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +15 -10
- package/plugins/ragents.actor-programs/web/AppsPanel.tsx +47 -30
- package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +15 -17
- package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +3 -3
- package/plugins/ragents.actor-programs/web/FunctionForm.tsx +3 -3
- package/plugins/ragents.actor-programs/web/ProgramSource.tsx +12 -3
- package/plugins/ragents.actor-programs/web/api.ts +5 -5
- package/plugins/ragents.actor-programs/web/bridge.ts +2 -3
- package/plugins/ragents.actor-programs/web/chat-state.ts +9 -8
- package/plugins/ragents.actor-programs/web/index.tsx +7 -17
- package/plugins/ragents.actor-programs/web/program-state.ts +3 -3
- package/plugins/ragents.actor-programs/web/state-revision.ts +2 -2
- package/plugins/ragents.ask/ask-payload.ts +25 -0
- package/plugins/ragents.ask/contract.ts +2 -2
- package/plugins/ragents.ask/ragents-plugin.json +7 -0
- package/plugins/ragents.ask/server/answer-method.ts +1 -1
- package/plugins/ragents.ask/server/ask-service.ts +43 -19
- package/plugins/ragents.ask/server/ask-tool.ts +2 -2
- package/plugins/ragents.ask/server/contract.ts +9 -1
- package/plugins/ragents.ask/server/index.ts +8 -10
- package/plugins/ragents.ask/server/tool-contributor.ts +3 -3
- package/plugins/ragents.ask/web/AskActionView.tsx +36 -0
- package/{apps/web/src/chat → plugins/ragents.ask/web}/QuestionCard.tsx +7 -5
- package/plugins/ragents.ask/web/QuestionSection.tsx +22 -21
- package/plugins/ragents.ask/web/api.ts +1 -1
- package/plugins/ragents.ask/web/index.tsx +11 -8
- package/plugins/ragents.browser/provision.ts +9 -8
- package/plugins/ragents.browser/ragents-plugin.json +6 -0
- package/plugins/ragents.browser/server/browser.ts +165 -286
- package/plugins/ragents.browser/server/contract.ts +8 -19
- package/plugins/ragents.browser/server/index.ts +8 -7
- package/plugins/ragents.browser/server/tools.ts +29 -37
- package/plugins/ragents.browser/skills/browser-testing/SKILL.md +3 -1
- package/plugins/ragents.documents/contract.ts +4 -2
- package/plugins/ragents.documents/ragents-plugin.json +6 -0
- package/plugins/ragents.documents/server/config.ts +1 -1
- package/plugins/ragents.documents/server/document-write-tool.ts +2 -2
- package/plugins/ragents.documents/server/files-route.ts +2 -3
- package/plugins/ragents.documents/server/index.ts +10 -11
- package/plugins/ragents.documents/server/show-document-tool.ts +2 -2
- package/plugins/ragents.documents/server/store.ts +3 -3
- package/plugins/ragents.documents/server/tool-contributor.ts +3 -3
- package/plugins/ragents.documents/web/DocumentViewer.tsx +5 -6
- package/plugins/ragents.documents/web/api.ts +1 -1
- package/plugins/ragents.documents/web/index.tsx +4 -4
- package/plugins/ragents.lsp-fsharp/provision.ts +2 -2
- package/plugins/ragents.lsp-fsharp/ragents-plugin.json +3 -0
- package/plugins/ragents.lsp-fsharp/server/index.ts +3 -3
- package/plugins/ragents.lsp-fsharp/web/index.tsx +1 -1
- package/plugins/ragents.lsp-roslyn/provision.ts +2 -2
- package/plugins/ragents.lsp-roslyn/ragents-plugin.json +3 -0
- package/plugins/ragents.lsp-roslyn/server/index.ts +47 -8
- package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +145 -0
- package/plugins/ragents.lsp-roslyn/web/index.tsx +1 -1
- package/plugins/ragents.lsp-typescript/ragents-plugin.json +3 -0
- package/plugins/ragents.lsp-typescript/server/index.ts +3 -3
- package/plugins/ragents.lsp-typescript/web/index.tsx +1 -1
- package/plugins/ragents.model-relay/ragents-plugin.json +3 -0
- package/plugins/ragents.model-relay/server/config.ts +5 -31
- package/plugins/ragents.model-relay/server/index.ts +5 -6
- package/plugins/ragents.model-relay/server/relay.ts +8 -9
- package/plugins/ragents.orchestration/contract.ts +13 -14
- package/plugins/ragents.orchestration/orchestration.hbs +4 -3
- package/plugins/ragents.orchestration/ragents-plugin.json +6 -0
- package/plugins/ragents.orchestration/server/index.ts +13 -16
- package/plugins/ragents.orchestration/server/run-stop-tool.ts +4 -4
- package/plugins/ragents.orchestration/server/{canvas-tool.ts → surface-tool.ts} +42 -43
- package/plugins/ragents.orchestration/surface.hbs +34 -0
- package/plugins/ragents.orchestration/tiled-layout.ts +16 -16
- package/plugins/ragents.orchestration/web/ActorChat.tsx +16 -14
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +23 -26
- package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +5 -6
- package/plugins/ragents.orchestration/web/ActorPopout.tsx +7 -5
- package/plugins/ragents.orchestration/web/ActorShortcut.tsx +16 -16
- package/plugins/ragents.orchestration/web/{ActorCanvasControls.tsx → ActorSurfaceControls.tsx} +23 -28
- package/plugins/ragents.orchestration/web/ActorTile.tsx +2 -2
- package/plugins/ragents.orchestration/web/Center.tsx +47 -55
- package/plugins/ragents.orchestration/web/DocumentsSection.tsx +4 -4
- package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +7 -7
- package/plugins/ragents.orchestration/web/FlowInspector.tsx +24 -42
- package/plugins/ragents.orchestration/web/JournalStatus.tsx +8 -8
- package/plugins/ragents.orchestration/web/MaterialBody.tsx +5 -5
- package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
- package/plugins/ragents.orchestration/web/SurfaceStartup.tsx +8 -0
- package/plugins/ragents.orchestration/web/{CanvasTiles.tsx → SurfaceTiles.tsx} +18 -18
- package/plugins/ragents.orchestration/web/{TiledCanvas.tsx → TiledSurface.tsx} +22 -22
- package/plugins/ragents.orchestration/web/actor-header-settings.ts +2 -2
- package/plugins/ragents.orchestration/web/api.ts +4 -10
- package/plugins/ragents.orchestration/web/constants.ts +0 -1
- package/plugins/ragents.orchestration/web/executions.ts +3 -3
- package/plugins/ragents.orchestration/web/index.tsx +19 -124
- package/plugins/ragents.orchestration/web/program-slot.ts +14 -0
- package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +95 -0
- package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +109 -0
- package/plugins/ragents.orchestration/web/{column/RunColumn.tsx → run-panel/RunPanel.tsx} +211 -83
- package/plugins/ragents.orchestration/web/{column/ColumnSettings.tsx → run-panel/RunPanelSettings.tsx} +13 -13
- package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +165 -0
- package/plugins/ragents.orchestration/web/{column/column-actors.ts → run-panel/run-panel-actors.ts} +14 -13
- package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +47 -0
- package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +30 -0
- package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +71 -0
- package/plugins/ragents.orchestration/web/{column → run-panel}/sheet-status.ts +4 -4
- package/plugins/ragents.orchestration/web/{canvas-stage.ts → surface-entities.ts} +2 -2
- package/plugins/ragents.orchestration/web/{canvas-startup.ts → surface-startup.ts} +7 -10
- package/plugins/ragents.orchestration/web/surface-view-settings.ts +42 -0
- package/plugins/ragents.orchestration/web/tile-docking.ts +14 -14
- package/plugins/ragents.orchestration/web/tiled-view-settings.ts +26 -26
- package/plugins/ragents.overseer/contract.ts +20 -14
- package/plugins/ragents.overseer/ragents-plugin.json +3 -0
- package/plugins/ragents.overseer/server/api.ts +34 -23
- package/plugins/ragents.overseer/server/coordinator-prompt.ts +3 -3
- package/plugins/ragents.overseer/server/coordinator.ts +19 -0
- package/plugins/ragents.overseer/server/index.ts +39 -27
- package/plugins/ragents.overseer/server/orientation.ts +4 -5
- package/plugins/ragents.overseer/server/quick-answer.ts +5 -4
- package/plugins/ragents.overseer/server/reset-method.ts +4 -3
- package/plugins/ragents.overseer/server/run-directory.ts +5 -5
- package/plugins/ragents.overseer/server/settings-method.ts +1 -1
- package/plugins/ragents.overseer/server/settings.ts +6 -6
- package/plugins/ragents.overseer/server/user-location.ts +20 -19
- package/plugins/ragents.overseer/web/ModelSettings.tsx +4 -4
- package/plugins/ragents.overseer/web/chat-display.ts +1 -1
- package/plugins/ragents.overseer/web/index.tsx +51 -26
- package/plugins/ragents.overseer/web/model-settings.ts +1 -1
- package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
- package/plugins/ragents.processes/contract.ts +5 -5
- package/plugins/ragents.processes/ragents-plugin.json +3 -0
- package/plugins/ragents.processes/server/index.ts +13 -19
- package/plugins/ragents.processes/server/methods.ts +18 -20
- package/plugins/ragents.processes/server/observer.ts +64 -104
- package/plugins/ragents.processes/server/run-processes.ts +24 -0
- package/plugins/ragents.processes/web/ProcessHeader.tsx +13 -16
- package/plugins/ragents.processes/web/index.tsx +2 -1
- package/plugins/ragents.processes/web/processes.ts +1 -1
- package/plugins/ragents.product/ragents-plugin.json +3 -0
- package/plugins/ragents.product/server/config.ts +12 -13
- package/plugins/ragents.product/server/index.ts +15 -16
- package/plugins/ragents.product/server/runtime.ts +2 -2
- package/plugins/ragents.product/web/index.tsx +3 -3
- package/plugins/ragents.profile-distribution/contract.ts +6 -9
- package/plugins/ragents.profile-distribution/ragents-plugin.json +3 -0
- package/plugins/ragents.profile-distribution/server/archive.ts +26 -51
- package/plugins/ragents.profile-distribution/server/config.ts +2 -2
- package/plugins/ragents.profile-distribution/server/index.ts +9 -16
- package/plugins/ragents.reference/examples.ts +1 -1
- package/plugins/ragents.reference/ragents-plugin.json +3 -0
- package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +1 -1
- package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +4 -4
- package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +2 -2
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/state.ts +2 -2
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +11 -11
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +15 -15
- package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +3 -8
- package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +2 -2
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +6 -6
- package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +3 -3
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/RUN.md +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +1 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/state.ts +6 -6
- package/plugins/ragents.reference/run-scripts/word-game/src/view.tsx +14 -14
- package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +4 -5
- package/plugins/ragents.reference/server/index.ts +2 -2
- package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +1 -1
- package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +1 -1
- package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +1 -1
- package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +1 -1
- package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +2 -2
- package/plugins/ragents.reference/skills/decision-brief/SKILL.md +2 -2
- package/plugins/ragents.reference/walkthroughs.ts +26 -26
- package/plugins/ragents.reference/web/StartGuides.tsx +2 -2
- package/plugins/ragents.reference/web/index.tsx +1 -1
- package/plugins/ragents.todo/ragents-plugin.json +3 -0
- package/plugins/ragents.todo/server/index.ts +2 -2
- package/plugins/ragents.todo/server/todo-tool.ts +4 -5
- package/plugins/ragents.todo/server/tool-contributor.ts +2 -2
- package/plugins/ragents.todo/web/TodoSection.tsx +3 -3
- package/plugins/ragents.todo/web/index.ts +1 -1
- package/plugins/ragents.transcript/ragents-plugin.json +3 -0
- package/plugins/ragents.transcript/server/index.ts +4 -4
- package/plugins/ragents.transcript/server/transcript.ts +2 -3
- package/plugins/ragents.watch/ragents-plugin.json +6 -0
- package/plugins/ragents.watch/server/condition.ts +2 -2
- package/plugins/ragents.watch/server/contract.ts +1 -1
- package/plugins/ragents.watch/server/functions.ts +3 -3
- package/plugins/ragents.watch/server/index.ts +3 -3
- package/plugins/ragents.watch/server/observation.ts +6 -6
- package/plugins/ragents.watch/server/service.ts +5 -5
- package/plugins/ragents.workspace/client/workspace-client.ts +129 -58
- package/plugins/ragents.workspace/contract.ts +98 -35
- package/plugins/ragents.workspace/prompt.hbs +1 -8
- package/plugins/ragents.workspace/ragents-plugin.json +3 -0
- package/plugins/ragents.workspace/server/binding.ts +122 -39
- package/plugins/ragents.workspace/server/browse-route.ts +96 -103
- package/plugins/ragents.workspace/server/clients.ts +236 -68
- package/plugins/ragents.workspace/server/config.ts +30 -0
- package/plugins/ragents.workspace/server/index.ts +61 -26
- package/plugins/ragents.workspace/server/runtime.ts +271 -46
- package/{apps/server/src/plugin-support → plugins/ragents.workspace/server}/shell-platform.ts +3 -5
- package/{apps/server/src/plugin-support → plugins/ragents.workspace/server}/workspace-tool-naming.ts +7 -1
- package/plugins/ragents.workspace/web/FileBrowser.tsx +11 -8
- package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +115 -61
- package/plugins/ragents.workspace/web/api.ts +1 -1
- package/plugins/ragents.workspace/web/index.tsx +1 -1
- package/ragents.config.core.ts +2 -8
- package/ragents.config.showcase.ts +61 -0
- package/scripts/agent/agent-cli.ts +265 -107
- package/scripts/agent/journal.ts +3 -1
- package/scripts/agent/turn-control.ts +19 -0
- package/scripts/package/build-package.ts +70 -15
- package/scripts/package/ragents.mjs +4 -2
- package/scripts/plugin/build-builtin-plugins.ts +52 -0
- package/scripts/plugin/plugin-cli.ts +99 -0
- package/scripts/provision/run-provision.ts +20 -18
- package/scripts/remote/connect.ts +75 -53
- package/scripts/remote/start.ts +3 -4
- package/scripts/workspace-client/run-workspace-client.ts +15 -9
- package/apps/server/agent-home/settings.json +0 -3
- package/apps/server/src/chat-attachments.ts +0 -52
- package/apps/server/src/chat-events.ts +0 -185
- package/apps/server/src/plugin-support/asset-path.ts +0 -4
- package/apps/server/src/profile/plugin-list.ts +0 -19
- package/apps/server/src/web-build.ts +0 -82
- package/apps/web/column.html +0 -12
- package/apps/web/index.html +0 -12
- package/apps/web/src/StartSurface.tsx +0 -161
- package/apps/web/src/chat/ChatInputToolbar.tsx +0 -488
- package/apps/web/src/chat/ChatMessages.tsx +0 -666
- package/apps/web/src/chat/ChatPanel.tsx +0 -61
- package/apps/web/src/chat/DetailModeSwitch.tsx +0 -58
- package/apps/web/src/chat/Markdown.tsx +0 -104
- package/apps/web/src/chat/StepPopover.tsx +0 -82
- package/apps/web/src/chat/WorkingScenes.tsx +0 -235
- package/apps/web/src/chat/attachments.ts +0 -53
- package/apps/web/src/chat/chat-scroll.ts +0 -41
- package/apps/web/src/chat/texts.ts +0 -61
- package/apps/web/src/chat/types.ts +0 -26
- package/apps/web/src/column/ColumnApp.tsx +0 -234
- package/apps/web/src/column/column-location.ts +0 -30
- package/apps/web/src/column/host-contract.ts +0 -93
- package/apps/web/src/panel/OverviewPage.tsx +0 -215
- package/apps/web/src/panel/SettingsPage.tsx +0 -98
- package/apps/web/src/panel/target-state.ts +0 -78
- package/apps/web/src/plugin-discovery.ts +0 -5
- package/apps/web/src/virtual-plugins.d.ts +0 -3
- package/apps/web/vite.config.ts +0 -140
- package/packages/agent/src/config.ts +0 -161
- package/packages/agent/src/core/auth-storage.ts +0 -271
- package/packages/agent/src/core/bash-executor.ts +0 -156
- package/packages/agent/src/core/compaction/branch-summarization.ts +0 -372
- package/packages/agent/src/core/diagnostics.ts +0 -15
- package/packages/agent/src/core/event-bus.ts +0 -33
- package/packages/agent/src/core/exec.ts +0 -107
- package/packages/agent/src/core/experimental.ts +0 -3
- package/packages/agent/src/core/footer-data-provider.ts +0 -388
- package/packages/agent/src/core/http-dispatcher.ts +0 -106
- package/packages/agent/src/core/index.ts +0 -78
- package/packages/agent/src/core/model-config.ts +0 -287
- package/packages/agent/src/core/model-registry.ts +0 -126
- package/packages/agent/src/core/model-resolver.ts +0 -675
- package/packages/agent/src/core/output-guard.ts +0 -108
- package/packages/agent/src/core/package-manager.ts +0 -2441
- package/packages/agent/src/core/prompt-templates.ts +0 -284
- package/packages/agent/src/core/resolve-config-value.ts +0 -287
- package/packages/agent/src/core/runtime-credentials.ts +0 -48
- package/packages/agent/src/core/session-cwd.ts +0 -59
- package/packages/agent/src/core/settings-manager.ts +0 -1212
- package/packages/agent/src/core/slash-commands.ts +0 -41
- package/packages/agent/src/core/timings.ts +0 -50
- package/packages/agent/src/core/tools/tool-definition-wrapper.ts +0 -45
- package/packages/agent/src/core/trust-manager.ts +0 -244
- package/packages/agent/src/utils/ansi.ts +0 -60
- package/packages/agent/src/utils/fs-watch.ts +0 -30
- package/packages/agent/src/utils/git.ts +0 -226
- package/packages/agent/src/utils/json.ts +0 -6
- package/packages/agent/src/utils/tools-manager.ts +0 -63
- package/packages/agent-core/package.json +0 -32
- package/packages/ai/src/api/openrouter-images.lazy.ts +0 -10
- package/packages/ai/src/api/openrouter-images.ts +0 -98
- package/packages/ai/src/auth/credential-store.ts +0 -51
- package/packages/ai/src/compat/extension-oauth-types.ts +0 -45
- package/packages/ai/src/image-models.generated.ts +0 -533
- package/packages/ai/src/images-models.ts +0 -274
- package/packages/ai/src/models-store.ts +0 -38
- package/packages/ai/src/oauth.ts +0 -10
- package/packages/ai/src/providers/openrouter-images.ts +0 -14
- package/packages/ai/src/session-resources.ts +0 -24
- package/packages/ai/src/utils/abort-signals.ts +0 -41
- package/packages/ai/src/utils/deferred-tools.ts +0 -39
- package/packages/ai/src/utils/hash.ts +0 -13
- package/packages/ai/src/utils/node-http-proxy.ts +0 -112
- package/plugins/ragents.actor-programs/server/client-runtime.ts +0 -16
- package/plugins/ragents.ask/web/constants.ts +0 -1
- package/plugins/ragents.lsp-roslyn/web/api.ts +0 -10
- package/plugins/ragents.orchestration/web/CanvasStartup.tsx +0 -14
- package/plugins/ragents.orchestration/web/canvas-view-settings.ts +0 -42
- package/plugins/ragents.orchestration/web/column/AddresseeControl.tsx +0 -116
- package/plugins/ragents.orchestration/web/column/column-settings.ts +0 -47
- package/plugins/ragents.orchestration/web/column/column-state.ts +0 -68
- package/plugins/ragents.orchestration/web/contract.ts +0 -25
- package/plugins/ragents.product/model-settings-contract.ts +0 -10
- package/plugins/ragents.profile-distribution/server/web.ts +0 -24
- /package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/authoring-contracts.ts +0 -0
- /package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/runtime-libraries.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/workflow/prompt-reader.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/file-contracts.d.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/flow-diagram-contracts.d.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/flow-diagram.css +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/form-contracts.d.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/frame-layout.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/table-contracts.d.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/viewer-contracts.d.ts +0 -0
- /package/{plugins/ragents.orchestration/canvas.hbs → bundles/ragents.orchestration/surface.hbs} +0 -0
- /package/packages/{agent-core/src → agent/src/loop}/index.ts +0 -0
- /package/packages/{agent-core/src → agent/src/loop}/uuid.ts +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["ragents-host-read:read", "ragents-host-value:@ragents/web/PluginRegistry#pluginRoutePrefixFrom", "ragents-host-value:@ragents/web/PluginRegistry#useSurfaceController", "ragents-host-value:@ragents/web/lib/guards#isRecord", "ragents-host-value:@ragents/web/rpc#rpc", "ragents-host-value:@ragents/web/access-token#withAccessToken", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#ACTOR_INVOCATIONS_STATE_ID", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#ACTOR_PROGRAMS_STATE_ID", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#ACTOR_STATE_ID", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#actorProgramContracts", "../../../plugins/ragents.actor-programs/parameter-types.ts", "../../../node_modules/.pnpm/quassel@0.2.2_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/src/chat-attachments.ts", "../../../node_modules/.pnpm/quassel@0.2.2_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/src/events.ts", "../../../plugins/ragents.actor-programs/web/bridge.ts", "../../../plugins/ragents.actor-programs/web/api.ts", "ragents-host-value:@ragents/web/AccessContext#useAccess", "ragents-host-value:react#createContext", "ragents-host-value:react#createElement", "ragents-host-value:react#forwardRef", "ragents-host-value:react#useCallback", "ragents-host-value:react#useContext", "ragents-host-value:react#useEffect", "ragents-host-value:react#useLayoutEffect", "ragents-host-value:react#useMemo", "ragents-host-value:react#useRef", "ragents-host-value:react#useState", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toKebabCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toLucideIconData.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toCamelCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toPascalCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/mergeClasses.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/defaultAttributes.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/buildLucideIconNode.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/buildLucideIconForReact.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/hasA11yProp.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/context.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/Icon.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/createLucideIcon.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/arrow-left.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/layout-grid.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/x.ts", "ragents-host-value:@ragents/web/ui#Alert", "ragents-host-value:@ragents/web/ui#Badge", "ragents-host-value:@ragents/web/ui#Button", "ragents-host-value:@ragents/web/ui#Dialog", "ragents-host-value:@ragents/web/ui#DialogContent", "ragents-host-value:@ragents/web/ui#DialogTitle", "ragents-host-value:@ragents/web/ui#Empty", "ragents-host-value:@ragents/web/ui#EmptyContent", "ragents-host-value:@ragents/web/ui#EmptyDescription", "ragents-host-value:@ragents/web/ui#EmptyHeader", "ragents-host-value:@ragents/web/ui#EmptyMedia", "ragents-host-value:@ragents/web/ui#EmptyTitle", "ragents-host-value:@ragents/web/ui#Input", "ragents-host-value:@ragents/web/ui#Spinner", "ragents-host-value:@ragents/web/ui#Textarea", "ragents-host-value:@ragents/web/ui#cn", "ragents-host-value:@ragents/web/Toolbar#ToolbarCopy", "ragents-host-value:@ragents/web/Toolbar#ToolbarItem", "ragents-host-value:@ragents/web/Toolbar#ToolbarLabel", "ragents-host-value:@ragents/web/Toolbar#ToolbarText", "../../../plugins/ragents.actor-programs/web/AppsPanel.tsx", "ragents-host-value:@ragents/web/run-view#runActorFrom", "ragents-host-value:@ragents/web/run-view#runViewFrom", "ragents-host-value:@ragents/web/SourceCode#SourceCode", "../../../plugins/ragents.actor-programs/web/program-state.ts", "ragents-host-value:react/jsx-runtime#Fragment", "ragents-host-value:react/jsx-runtime#jsx", "ragents-host-value:react/jsx-runtime#jsxs", "../../../plugins/ragents.actor-programs/web/ProgramSource.tsx", "../../../plugins/ragents.actor-programs/web/function-call.ts", "../../../plugins/ragents.actor-programs/web/function-input.ts", "../../../plugins/ragents.actor-programs/web/FunctionForm.tsx", "../../../plugins/ragents.actor-programs/web/ExpandIcon.tsx", "../../../plugins/ragents.actor-programs/web/state-revision.ts", "../../../plugins/ragents.actor-programs/web/invocations.ts", "../../../plugins/ragents.actor-programs/web/context.ts", "ragents-host-value:@ragents/web/run-panel/input-bridge#hostInputEnabled", "ragents-host-value:@ragents/web/run-panel/input-bridge#isRunPanelKeyboardMessage", "ragents-host-value:@ragents/web/run-panel/input-bridge#relayFrameInput", "ragents-host-value:@ragents/web/theme#useResolvedTheme", "ragents-host-value:@ragents/web/api#sendActorMessage", "ragents-host-value:@ragents/engine/src/http/contracts#actorByHandle", "ragents-host-value:@ragents/web/actor-conversation#actorChatMessages", "ragents-host-value:@ragents/web/chat/chat-target#programChatNotice", "../../../plugins/ragents.actor-programs/web/chat-state.ts", "ragents-host-value:@ragents/web/chat/useAttachmentCapabilities#getAttachmentCapabilities", "../../../plugins/ragents.actor-programs/web/ActorViewFrame.tsx", "../../../plugins/ragents.actor-programs/web/FullscreenHost.tsx", "../../../plugins/ragents.actor-programs/web/EmbeddedApps.tsx", "../../../plugins/ragents.actor-programs/web/index.tsx"],
|
|
4
|
+
"sourcesContent": ["export const read = (specifier, name) => {\n const module = globalThis[\"__ragentsHostModules\"]?.[specifier];\n if (module === undefined) throw new Error(`Der Host stellt ${specifier} nicht bereit`);\n if (!(name in module)) throw new Error(`Der Host stellt ${name} aus ${specifier} nicht bereit; das Bundle ist gegen einen neueren Host gebaut`);\n return module[name];\n};", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"pluginRoutePrefixFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"useSurfaceController\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/guards\", \"isRecord\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/rpc\", \"rpc\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/access-token\", \"withAccessToken\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"ACTOR_INVOCATIONS_STATE_ID\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"ACTOR_PROGRAMS_STATE_ID\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"ACTOR_STATE_ID\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"actorProgramContracts\");\n", "export const actorFunctionParameterTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"string[]\", \"number[]\", \"json\"] as const;\n\nexport type ActorFunctionParameterType = typeof actorFunctionParameterTypes[number];\n", "import type { ChatAttachmentInput } from \"./events\";\n\nexport const MAX_CHAT_ATTACHMENTS = 8;\nexport const MAX_CHAT_ATTACHMENT_BYTES = 20 * 1024 * 1024;\nexport const MAX_CHAT_REQUEST_BYTES = 29 * 1024 * 1024;\n\nexport const chatAttachmentMediaType = (name: string, mediaType: string): string => {\n const explicit = mediaType.trim().toLowerCase();\n if (explicit) return explicit === \"video/quicktime\" ? \"video/mov\" : explicit;\n const types: Record<string, string> = {\n png: \"image/png\", jpg: \"image/jpeg\", jpeg: \"image/jpeg\", gif: \"image/gif\", webp: \"image/webp\",\n avif: \"image/avif\", svg: \"image/svg+xml\", pdf: \"application/pdf\",\n mp4: \"video/mp4\", webm: \"video/webm\", mov: \"video/mov\", mpeg: \"video/mpeg\", mpg: \"video/mpeg\",\n txt: \"text/plain\", md: \"text/markdown\", csv: \"text/csv\", tsv: \"text/tab-separated-values\",\n json: \"application/json\", jsonl: \"application/x-ndjson\", xml: \"application/xml\",\n yaml: \"application/yaml\", yml: \"application/yaml\", ts: \"text/plain\", tsx: \"text/plain\",\n js: \"application/javascript\", py: \"text/plain\", cs: \"text/plain\", fs: \"text/plain\",\n html: \"text/html\", css: \"text/css\", log: \"text/plain\",\n };\n return types[name.split(\".\").at(-1)?.toLowerCase() ?? \"\"] ?? \"application/octet-stream\";\n};\n\nexport const parseChatAttachments = (value: unknown): ChatAttachmentInput[] => {\n if (value === undefined) return [];\n if (!Array.isArray(value) || value.length > MAX_CHAT_ATTACHMENTS) {\n throw new Error(`Anh\u00E4nge m\u00FCssen eine Liste mit h\u00F6chstens ${MAX_CHAT_ATTACHMENTS} Dateien sein.`);\n }\n let total = 0;\n return value.map((entry, index) => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) throw new Error(`Anhang ${index + 1} ist ung\u00FCltig.`);\n const { name, mediaType, data } = entry as Record<string, unknown>;\n if (typeof name !== \"string\" || !name.trim() || name.length > 255 || /[/\\\\\\u0000-\\u001f\\u007f]/.test(name)\n || name === \".\" || name === \"..\") throw new Error(`Anhang ${index + 1} ben\u00F6tigt einen g\u00FCltigen Dateinamen ohne Pfad.`);\n const normalizedType = typeof mediaType === \"string\" ? chatAttachmentMediaType(name, mediaType) : \"\";\n if (!/^[a-z0-9!#$&^_.+-]+\\/[a-z0-9!#$&^_.+-]+$/i.test(normalizedType)) {\n throw new Error(`Anhang ${name} ben\u00F6tigt einen g\u00FCltigen MIME-Typ.`);\n }\n if (typeof data === \"string\" && data.length > Math.ceil(MAX_CHAT_ATTACHMENT_BYTES / 3) * 4)\n throw new Error(\"Anh\u00E4nge d\u00FCrfen zusammen h\u00F6chstens 20 MiB gro\u00DF sein.\");\n if (typeof data !== \"string\" || data.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(data)) {\n throw new Error(`Anhang ${name} enth\u00E4lt ung\u00FCltiges Base64.`);\n }\n const padding = data.endsWith(\"==\") ? 2 : data.endsWith(\"=\") ? 1 : 0;\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n if (padding && (alphabet.indexOf(data[data.length - padding - 1]) & (padding === 2 ? 15 : 3)) !== 0) {\n throw new Error(`Anhang ${name} enth\u00E4lt nichtkanonisches Base64.`);\n }\n total += data.length / 4 * 3 - padding;\n if (total > MAX_CHAT_ATTACHMENT_BYTES) throw new Error(\"Anh\u00E4nge d\u00FCrfen zusammen h\u00F6chstens 20 MiB gro\u00DF sein.\");\n return { name, mediaType: normalizedType, data };\n });\n};\n", "export type Role = \"user\" | \"assistant\" | \"thinking\" | \"tool\" | \"system\" | \"action\";\n\nexport interface ChatAttachmentInput {\n name: string;\n mediaType: string;\n data: string;\n}\n\nexport interface ChatAttachment {\n name: string;\n mediaType: string;\n size: number;\n url: string;\n}\n\nexport interface ChatAttachmentCapabilities {\n input: readonly string[];\n model: string;\n}\n\nexport interface ToolInfo {\n id: string;\n name: string;\n arguments: string;\n result?: string;\n isError?: boolean;\n}\n\nexport interface ChatTextCursor {\n conversationId: string;\n sequence: number;\n /** Accumulated non-whitespace UTF-16 units in the turn anchored by sequence. */\n offset: number;\n}\n\nexport interface ChatJournalCursor {\n conversationId: string;\n eventId: string;\n sequence: number;\n}\n\n/**\n * Eine Aktion, die auf eine Eingabe des Benutzers wartet. Form und Inhalt von `payload` und\n * `result` geh\u00F6ren dem Plugin in `owner`; `status` gesetzt hei\u00DFt: erledigt, die Karte ist Beleg.\n */\nexport interface PendingAction {\n actionId: string;\n owner: string | null;\n payload: unknown;\n status?: \"approved\" | \"dismissed\";\n result?: unknown;\n}\n\nexport interface Message {\n key: string;\n role: Role;\n /** Absenderkennung f\u00FCr die Darstellung; unabh\u00E4ngig von Rolle und Sprechblasenlabel. */\n sender?: string;\n text: string;\n textCursor?: ChatTextCursor;\n closed?: boolean;\n attachments?: ChatAttachment[];\n tool?: ToolInfo;\n action?: PendingAction;\n /** ISO-Zeitpunkt der Nachricht; Anzeige optional (ChatMessages showTimestamps). */\n at?: string;\n /** Der ActorInput hinter einer eingehenden Nachricht; an ihm h\u00E4ngt die Steering-Markierung. */\n inputId?: string;\n /** Die Nachricht ist in einen schon laufenden Turn eingespeist worden, statt einen eigenen zu beginnen. */\n steered?: boolean;\n /** Farbige Sprechblase statt Fliesstext, z.B. fuer Mehrparteien-Gespraeche. */\n bubble?: { color: string; side: \"start\" | \"end\"; label?: string };\n}\n\nexport interface ChatStartupStatus {\n status: \"preparing\" | \"failed\";\n message: string;\n}\n\nexport type ChatEvent =\n | { kind: \"reset\"; reason?: \"conversation-reset\"; conversationId: string | null }\n | { kind: \"replay-end\"; conversationId: string | null }\n | { kind: \"user\"; text: string; inputId?: string; at?: string; attachments?: ChatAttachment[] }\n | { kind: \"steered\"; inputId: string }\n | { kind: \"text\"; delta: string; at?: string; cursor: ChatTextCursor }\n | { kind: \"thinking\"; delta: string; at?: string }\n | { kind: \"tool\"; id: string; name: string; arguments: string; label?: string; at?: string }\n | { kind: \"tool-result\"; id: string; result: string; isError?: boolean }\n | { kind: \"action\"; actionId: string; owner: string | null; text: string; payload: unknown; at?: string }\n | { kind: \"action-resolved\"; actionId: string; status: \"approved\" | \"dismissed\"; result: unknown }\n | { kind: \"system\"; text: string; at?: string }\n | { kind: \"status\"; running: boolean; startup?: ChatStartupStatus }\n | { kind: \"turn-done\" }\n | { kind: \"plugin\"; pluginId: string; type: string; payload?: unknown; at?: string; journal?: ChatJournalCursor };\n\nlet keyCounter = 0;\n\n// crypto.randomUUID fehlt ausserhalb sicherer Kontexte, etwa bei einem Host unter http.\nconst newKey = (): string => typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\n ? crypto.randomUUID()\n : `qsl-${Date.now().toString(36)}-${(keyCounter += 1).toString(36)}`;\n\nfunction openMessageIndex(messages: Message[]): number {\n for (let index = messages.length - 1; index >= 0; index--) {\n const message = messages[index];\n if (!message.closed && (message.role === \"assistant\" || message.role === \"thinking\")) return index;\n }\n return -1;\n}\n\nfunction closeOpen(messages: Message[]): Message[] {\n const index = openMessageIndex(messages);\n if (index === -1) {\n return messages;\n }\n return messages.map((message, position) => position === index ? { ...message, closed: true } : message);\n}\n\nfunction appendDelta(messages: Message[], role: Role, delta: string, at?: string, textCursor?: ChatTextCursor): Message[] {\n const index = openMessageIndex(messages);\n const current = messages[index];\n if (current && current.role === role\n && current.textCursor?.conversationId === textCursor?.conversationId\n && current.textCursor?.sequence === textCursor?.sequence) {\n return messages.map((message, position) => position === index\n ? { ...message, text: message.text + delta, ...(textCursor ? { textCursor } : {}) }\n : message);\n }\n return [...closeOpen(messages), { key: newKey(), role, text: delta, at, ...(textCursor ? { textCursor } : {}) }];\n}\n\n/** Eingehende Nachrichten lassen den laufenden Ausgabeblock offen. */\nexport function applyEvent(messages: Message[], event: ChatEvent): Message[] {\n switch (event.kind) {\n case \"reset\":\n return [];\n case \"user\":\n return [...messages, { key: newKey(), role: \"user\", text: event.text, closed: true, at: event.at,\n ...(event.inputId ? { inputId: event.inputId } : {}),\n ...(event.attachments?.length ? { attachments: event.attachments } : {}) }];\n case \"steered\":\n return messages.map((message) => message.inputId === event.inputId ? { ...message, steered: true } : message);\n case \"text\":\n return appendDelta(messages, \"assistant\", event.delta, event.at, event.cursor);\n case \"thinking\":\n return appendDelta(messages, \"thinking\", event.delta, event.at);\n case \"tool\":\n return [\n ...closeOpen(messages),\n {\n key: newKey(),\n role: \"tool\",\n text: event.label ?? event.name,\n closed: true,\n tool: { id: event.id, name: event.name, arguments: event.arguments },\n at: event.at,\n },\n ];\n case \"tool-result\": {\n const index = messages.map((message) => message.tool?.id).lastIndexOf(event.id);\n return messages.map((message, position) =>\n position === index && message.tool\n ? { ...message, tool: { ...message.tool, result: event.result, isError: event.isError } }\n : message,\n );\n }\n case \"action\":\n return [\n ...closeOpen(messages),\n {\n key: newKey(),\n role: \"action\",\n text: event.text,\n closed: true,\n action: { actionId: event.actionId, owner: event.owner, payload: event.payload },\n at: event.at,\n },\n ];\n case \"action-resolved\":\n return messages.map((message) =>\n message.action?.actionId === event.actionId\n ? { ...message, action: { ...message.action, status: event.status, result: event.result } }\n : message,\n );\n case \"system\":\n return [...closeOpen(messages), { key: newKey(), role: \"system\", text: event.text, closed: true, at: event.at }];\n case \"turn-done\":\n return closeOpen(messages);\n default:\n return messages;\n }\n}\n\nexport function prettyJson(value: string): string {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n}\n\nexport function compactToolLine(tool: ToolInfo): string {\n const args = tool.arguments.replace(/\\s+/g, \" \").trim();\n const line = args && args !== \"{}\" ? `${tool.name} ${args}` : tool.name;\n return line.length > 160 ? `${line.slice(0, 160)} ...` : line;\n}\n\nexport { MAX_CHAT_ATTACHMENTS, MAX_CHAT_ATTACHMENT_BYTES, MAX_CHAT_REQUEST_BYTES, chatAttachmentMediaType, parseChatAttachments } from \"./chat-attachments\";\n", "import { isRecord } from \"@ragents/web/lib/guards\";\nimport { parseChatAttachments, type ChatAttachmentInput } from \"quassel/events\";\n\nexport const RUN_APP_BRIDGE_VERSION = 1;\n\nexport const RUN_APP_FRAME_READY = \"ragents.app.frame-ready\";\nexport const RUN_APP_CONNECTED = \"ragents.app.connected\";\nexport const RUN_APP_READY = \"ragents.app.ready\";\nexport const RUN_APP_THEME = \"ragents.app.theme\";\nexport const RUN_APP_INVOKE = \"ragents.app.invoke\";\nexport const RUN_APP_GET_STATE = \"ragents.app.get-state\";\nexport const RUN_APP_STATE = \"ragents.app.state\";\nexport const RUN_APP_INVOCATION = \"ragents.app.invocation\";\nexport const RUN_APP_ERROR = \"ragents.app.error\";\nexport const RUN_APP_CHAT_WATCH = \"ragents.app.chat-watch\";\nexport const RUN_APP_CHAT_UNWATCH = \"ragents.app.chat-unwatch\";\nexport const RUN_APP_CHAT_SEND = \"ragents.app.chat-send\";\nexport const RUN_APP_CHAT_STATE = \"ragents.app.chat-state\";\nexport const RUN_APP_CHAT_ACK = \"ragents.app.chat-ack\";\n\nexport type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nexport interface RunAppInvokeRequest {\n type: typeof RUN_APP_INVOKE;\n version: typeof RUN_APP_BRIDGE_VERSION;\n requestId: string;\n actionId: string;\n input: JsonValue;\n}\n\nexport interface RunAppGetStateRequest {\n type: typeof RUN_APP_GET_STATE;\n version: typeof RUN_APP_BRIDGE_VERSION;\n requestId: string;\n}\n\nexport type RunAppChatRequest = {\n version: typeof RUN_APP_BRIDGE_VERSION;\n requestId: string;\n actor: string;\n} & (\n | { type: typeof RUN_APP_CHAT_WATCH }\n | { type: typeof RUN_APP_CHAT_UNWATCH }\n | { type: typeof RUN_APP_CHAT_SEND; text: string; attachments?: ChatAttachmentInput[] }\n);\n\nexport type RunAppBridgeRequest = RunAppInvokeRequest | RunAppGetStateRequest | RunAppChatRequest;\n\nexport type RunAppBridgeValidation =\n | { ok: true; request: RunAppBridgeRequest }\n | { ok: false; requestId?: string; error: string };\n\nconst ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;\nconst MAX_INPUT_LENGTH = 64 * 1024;\nconst MAX_DEPTH = 24;\n\nexport const isJsonValue = (value: unknown, depth = 0): value is JsonValue => {\n if (depth > MAX_DEPTH) return false;\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (Array.isArray(value)) return value.every((entry) => isJsonValue(entry, depth + 1));\n if (!isRecord(value)) return false;\n return Object.entries(value).every(([key, entry]) => key.length <= 256 && isJsonValue(entry, depth + 1));\n};\n\nconst requestIdFrom = (value: unknown): string | undefined =>\n typeof value === \"string\" && ID_PATTERN.test(value) ? value : undefined;\n\nconst inputWithinLimit = (value: JsonValue): boolean => {\n try {\n return new TextEncoder().encode(JSON.stringify(value)).byteLength <= MAX_INPUT_LENGTH;\n } catch {\n return false;\n }\n};\n\nexport const validateRunAppBridgeRequest = (value: unknown): RunAppBridgeValidation => {\n if (!isRecord(value)) return { ok: false, error: \"Die App-Nachricht ist kein Objekt\" };\n const requestId = requestIdFrom(value.requestId);\n if (!requestId) return { ok: false, error: \"Die App-Nachricht enth\u00E4lt keine g\u00FCltige requestId\" };\n if (value.version !== RUN_APP_BRIDGE_VERSION) {\n return { ok: false, requestId, error: \"Die App verwendet eine nicht unterst\u00FCtzte Bridge-Version\" };\n }\n if (value.type === RUN_APP_GET_STATE) {\n return { ok: true, request: { type: RUN_APP_GET_STATE, version: RUN_APP_BRIDGE_VERSION, requestId } };\n }\n if (value.type === RUN_APP_CHAT_WATCH || value.type === RUN_APP_CHAT_UNWATCH || value.type === RUN_APP_CHAT_SEND) {\n if (typeof value.actor !== \"string\" || !/^@?[\\p{L}\\p{N}_-]{1,64}$/u.test(value.actor)) {\n return { ok: false, requestId, error: \"Das Chat-Ziel muss primary oder ein Actor-Handle wie @reviewer sein\" };\n }\n const common = { version: RUN_APP_BRIDGE_VERSION, requestId, actor: value.actor } as const;\n if (value.type !== RUN_APP_CHAT_SEND) return { ok: true, request: { ...common, type: value.type } };\n let attachments: ChatAttachmentInput[];\n try { attachments = parseChatAttachments(value.attachments); } catch (cause) {\n return { ok: false, requestId, error: cause instanceof Error ? cause.message : String(cause) };\n }\n if (typeof value.text !== \"string\" || (!value.text.trim() && !attachments.length) || !inputWithinLimit(value.text)) {\n return { ok: false, requestId, error: \"Die Chat-Nachricht ist leer oder zu gro\u00DF\" };\n }\n return { ok: true, request: { ...common, type: RUN_APP_CHAT_SEND, text: value.text.trim(), ...(attachments.length ? { attachments } : {}) } };\n }\n if (value.type !== RUN_APP_INVOKE) {\n return { ok: false, requestId, error: \"Die App-Nachricht hat einen unbekannten Typ\" };\n }\n if (typeof value.actionId !== \"string\" || !ID_PATTERN.test(value.actionId)) {\n return { ok: false, requestId, error: \"Die App-Nachricht enth\u00E4lt keine g\u00FCltige actionId\" };\n }\n if (!isJsonValue(value.input) || !inputWithinLimit(value.input)) {\n return { ok: false, requestId, error: \"Die Eingabe der App-Aktion ist kein g\u00FCltiger JSON-Wert oder zu gro\u00DF\" };\n }\n return {\n ok: true,\n request: {\n type: RUN_APP_INVOKE,\n version: RUN_APP_BRIDGE_VERSION,\n requestId,\n actionId: value.actionId,\n input: value.input,\n },\n };\n};\n", "import { isRecord } from \"@ragents/web/lib/guards\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { withAccessToken } from \"@ragents/web/access-token\";\nimport { actorProgramContracts } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport {\n actorFunctionParameterTypes,\n type ActorFunctionParameterType,\n} from \"../parameter-types\";\nimport { isJsonValue, type JsonValue } from \"./bridge\";\n\nexport type RunAppInvocationStatus = \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\";\n\nexport interface RunAppAction {\n id: string;\n label: string;\n description?: string;\n confirmation: string | null;\n}\n\nexport type RunAppPlacement = { kind: \"canvas\"; anchorActorId: string };\n\nexport type RunAppInvocation = {\n id: string;\n actorId: string;\n actorHandle: string;\n appId: string;\n actionId: string;\n revision: string;\n output: string[];\n createdAt: string;\n requestId: string;\n} & (\n | { status: \"queued\" }\n | { status: \"running\"; startedAt: string }\n | { status: \"succeeded\"; startedAt: string; finishedAt: string; result: JsonValue }\n | { status: \"failed\" | \"cancelled\"; startedAt?: string; finishedAt: string; error: string }\n);\n\nexport interface RunApp {\n id: string;\n actorId: string;\n actorHandle: string;\n visible?: boolean;\n title: string;\n description?: string;\n revision: string;\n actions: RunAppAction[];\n placements: RunAppPlacement[];\n state: { version: 1; revision: number; values: JsonValue };\n invocations: RunAppInvocation[];\n}\n\nexport interface RunToolParameter {\n name: string;\n description: string;\n type: ActorFunctionParameterType;\n required: boolean;\n}\n\nexport interface RunToolTarget {\n actorId: string;\n handle: string | null;\n}\n\nexport interface RunScriptTool {\n actorId: string;\n actorHandle: string;\n functionId: string;\n revision: string;\n moduleId: string;\n name: string;\n description: string;\n parameters: RunToolParameter[];\n card: boolean;\n sourceHash: string;\n targets: RunToolTarget[];\n installedBy: string;\n}\n\nexport interface ActorProgramSourceFile {\n path: string;\n content: string;\n}\n\nexport interface ActorProgramsListing {\n apps: RunApp[];\n tools: RunScriptTool[];\n}\n\nexport interface ActorProgramsApi {\n list: (runId: string, signal?: AbortSignal) => Promise<ActorProgramsListing>;\n source: (runId: string, moduleId: string, signal?: AbortSignal) => Promise<ActorProgramSourceFile[]>;\n frameUrl: (runId: string, appId: string, revision: string) => string;\n invoke: (\n runId: string,\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n signal?: AbortSignal,\n ) => Promise<RunAppInvocation>;\n invocation: (runId: string, appId: string, invocationId: string, signal?: AbortSignal) => Promise<RunAppInvocation>;\n invokeFunction: (runId: string, actorHandle: string, revision: string, functionId: string, requestId: string, input: JsonValue, signal?: AbortSignal) => Promise<RunAppInvocation>;\n functionInvocation: (runId: string, actorHandle: string, invocationId: string, signal?: AbortSignal) => Promise<RunAppInvocation>;\n}\n\nconst ID_PATTERN = /^[A-Za-z0-9_-]{1,100}$/;\nconst VIEW_ID_PATTERN = /^[A-Za-z0-9_-]{1,130}$/;\nconst HASH_PATTERN = /^[a-f0-9]{64}$/;\nconst PARAMETER_TYPES = new Set<RunToolParameter[\"type\"]>(actorFunctionParameterTypes);\n\nconst requiredString = (value: unknown, field: string): string => {\n if (typeof value !== \"string\" || !value.trim()) throw new Error(`${field} fehlt oder ist leer`);\n return value;\n};\n\nconst optionalString = (value: unknown, field: string): string | undefined => {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") throw new Error(`${field} ist kein Text`);\n return value;\n};\n\nconst idFrom = (value: unknown, field: string): string => {\n const id = requiredString(value, field);\n if (!ID_PATTERN.test(id)) throw new Error(`${field} ist keine g\u00FCltige Kennung`);\n return id;\n};\n\nconst unique = <T,>(values: T[], keyOf: (value: T) => string, label: string): T[] => {\n const ids = values.map(keyOf);\n if (new Set(ids).size !== ids.length) throw new Error(`${label} enth\u00E4lt doppelte Kennungen`);\n return values;\n};\n\nexport const runAppActionFrom = (value: unknown): RunAppAction => {\n if (!isRecord(value)) throw new Error(\"Eine App-Aktion ist kein Objekt\");\n if (value.confirmation !== null && typeof value.confirmation !== \"string\") {\n throw new Error(\"confirmation einer App-Aktion muss Text oder null sein\");\n }\n if (typeof value.confirmation === \"string\" && !value.confirmation.trim()) {\n throw new Error(\"confirmation einer App-Aktion darf nicht leer sein\");\n }\n return {\n id: idFrom(value.id, \"action.id\"),\n label: requiredString(value.label, \"action.label\"),\n ...(value.description !== undefined\n ? { description: optionalString(value.description, \"action.description\") as string }\n : {}),\n confirmation: value.confirmation,\n };\n};\n\nexport const runAppInvocationFrom = (value: unknown): RunAppInvocation => {\n if (!isRecord(value)) throw new Error(\"Eine App-Ausf\u00FChrung ist kein Objekt\");\n if (!Array.isArray(value.output) || value.output.some((line) => typeof line !== \"string\")) {\n throw new Error(\"output einer App-Ausf\u00FChrung ist keine Textliste\");\n }\n const base = {\n id: idFrom(value.id, \"invocation.id\"),\n actorId: requiredString(value.actorId, \"invocation.actorId\"),\n actorHandle: requiredString(value.actorHandle, \"invocation.actorHandle\"),\n appId: requiredString(value.appId, \"invocation.appId\"),\n actionId: idFrom(value.actionId, \"invocation.actionId\"),\n revision: requiredString(value.revision, \"invocation.revision\"),\n output: value.output as string[],\n createdAt: requiredString(value.createdAt, \"invocation.createdAt\"),\n requestId: idFrom(value.requestId, \"invocation.requestId\"),\n };\n switch (value.status) {\n case \"queued\":\n return { ...base, status: \"queued\" };\n case \"running\":\n return { ...base, status: \"running\", startedAt: requiredString(value.startedAt, \"invocation.startedAt\") };\n case \"succeeded\": {\n if (!isJsonValue(value.result)) throw new Error(\"result einer App-Ausf\u00FChrung ist kein JSON-Wert\");\n return {\n ...base,\n status: \"succeeded\",\n startedAt: requiredString(value.startedAt, \"invocation.startedAt\"),\n finishedAt: requiredString(value.finishedAt, \"invocation.finishedAt\"),\n result: value.result,\n };\n }\n case \"failed\":\n case \"cancelled\":\n return {\n ...base,\n status: value.status,\n ...(value.startedAt !== undefined\n ? { startedAt: requiredString(value.startedAt, \"invocation.startedAt\") }\n : {}),\n finishedAt: requiredString(value.finishedAt, \"invocation.finishedAt\"),\n error: requiredString(value.error, \"invocation.error\"),\n };\n default:\n throw new Error(\"status einer App-Ausf\u00FChrung ist ung\u00FCltig\");\n }\n};\n\nconst runAppPlacementFrom = (value: unknown): RunAppPlacement => {\n if (!isRecord(value)) throw new Error(\"Eine App-Platzierung ist kein Objekt\");\n if (value.kind === \"canvas\") {\n return {\n kind: \"canvas\",\n anchorActorId: requiredString(value.anchorActorId, \"placement.anchorActorId\"),\n };\n }\n throw new Error(\"kind einer App-Platzierung muss canvas sein\");\n};\n\nexport const runAppFrom = (value: unknown): RunApp => {\n if (!isRecord(value)) throw new Error(\"Eine App ist kein Objekt\");\n if (!Array.isArray(value.actions)) throw new Error(\"actions einer App ist keine Liste\");\n if (!Array.isArray(value.invocations)) throw new Error(\"invocations einer App ist keine Liste\");\n const rawPlacements = value.placements ?? [];\n if (!Array.isArray(rawPlacements)) throw new Error(\"placements einer App ist keine Liste\");\n if (!isRecord(value.state) || value.state.version !== 1 || !Number.isSafeInteger(value.state.revision) || !isJsonValue(value.state.values)) throw new Error(\"state einer Ansicht entspricht nicht dem Zustandvertrag\");\n const actions = unique(value.actions.map(runAppActionFrom), (action) => action.id, \"actions\");\n const invocations = unique(\n value.invocations.map(runAppInvocationFrom),\n (invocation) => invocation.id,\n \"invocations\",\n );\n const actionIds = new Set(actions.map((action) => action.id));\n if (invocations.some((invocation) => !actionIds.has(invocation.actionId))) {\n throw new Error(\"Eine App-Ausf\u00FChrung verweist auf eine unbekannte Aktion\");\n }\n if (value.visible !== undefined && typeof value.visible !== \"boolean\") throw new Error(\"visible einer App ist kein Wahrheitswert\");\n if (rawPlacements.length > 1) throw new Error(\"placements einer App enth\u00E4lt mehr als eine Platzierung\");\n const placements = rawPlacements.map(runAppPlacementFrom);\n const id = requiredString(value.id, \"view.id\");\n if (!VIEW_ID_PATTERN.test(id)) throw new Error(\"view.id ist keine g\u00FCltige Kennung\");\n const actorId = requiredString(value.actorId, \"view.actorId\");\n if (placements.some((placement) => placement.anchorActorId !== actorId)) throw new Error(\"Die Ansicht muss bei ihrem eigenen Actor platziert sein\");\n return {\n id,\n actorId,\n actorHandle: requiredString(value.actorHandle, \"view.actorHandle\"),\n visible: value.visible !== false,\n title: requiredString(value.title, \"app.title\"),\n ...(value.description !== undefined\n ? { description: optionalString(value.description, \"app.description\") as string }\n : {}),\n revision: requiredString(value.revision, \"app.revision\"),\n actions,\n placements,\n state: { version: 1, revision: value.state.revision as number, values: value.state.values },\n invocations,\n };\n};\n\nconst runToolParameterFrom = (value: unknown): RunToolParameter => {\n if (!isRecord(value)) throw new Error(\"Ein Werkzeugparameter ist kein Objekt\");\n if (typeof value.type !== \"string\" || !PARAMETER_TYPES.has(value.type as RunToolParameter[\"type\"])) {\n throw new Error(\"type eines Werkzeugparameters ist ung\u00FCltig\");\n }\n if (typeof value.required !== \"boolean\") throw new Error(\"required eines Werkzeugparameters ist kein Wahrheitswert\");\n return {\n name: idFrom(value.name, \"parameter.name\"),\n description: requiredString(value.description, \"parameter.description\"),\n type: value.type as RunToolParameter[\"type\"],\n required: value.required,\n };\n};\n\nconst runToolTargetFrom = (value: unknown): RunToolTarget => {\n if (!isRecord(value)) throw new Error(\"Ein Werkzeugziel ist kein Objekt\");\n if (value.handle !== null && typeof value.handle !== \"string\") {\n throw new Error(\"handle eines Werkzeugziels muss Text oder null sein\");\n }\n return {\n actorId: requiredString(value.actorId, \"target.actorId\"),\n handle: value.handle,\n };\n};\n\nexport const runScriptToolFrom = (value: unknown): RunScriptTool => {\n if (!isRecord(value)) throw new Error(\"Ein Script-Werkzeug ist kein Objekt\");\n if (!Array.isArray(value.parameters)) throw new Error(\"parameters eines Script-Werkzeugs ist keine Liste\");\n if (!Array.isArray(value.targets)) throw new Error(\"targets eines Script-Werkzeugs ist keine Liste\");\n const sourceHash = requiredString(value.sourceHash, \"tool.sourceHash\");\n if (!HASH_PATTERN.test(sourceHash)) throw new Error(\"sourceHash eines Script-Werkzeugs ist ung\u00FCltig\");\n return {\n actorId: requiredString(value.actorId, \"tool.actorId\"),\n actorHandle: requiredString(value.actorHandle, \"tool.actorHandle\"),\n functionId: idFrom(value.functionId, \"tool.functionId\"),\n revision: requiredString(value.revision, \"tool.revision\"),\n moduleId: idFrom(value.moduleId, \"tool.moduleId\"),\n name: idFrom(value.name, \"tool.name\"),\n description: requiredString(value.description, \"tool.description\"),\n parameters: unique(value.parameters.map(runToolParameterFrom), (parameter) => parameter.name, \"parameters\"),\n card: value.card === true,\n sourceHash,\n targets: unique(value.targets.map(runToolTargetFrom), (target) => target.actorId, \"targets\"),\n installedBy: requiredString(value.installedBy, \"tool.installedBy\"),\n };\n};\n\nconst actorProgramSourceFileFrom = (value: unknown): ActorProgramSourceFile => {\n if (!isRecord(value)) throw new Error(\"Eine Quelldatei ist kein Objekt\");\n if (typeof value.content !== \"string\") throw new Error(\"content einer Quelldatei ist kein Text\");\n return {\n path: requiredString(value.path, \"source.path\"),\n content: value.content,\n };\n};\n\nexport const actorProgramSourceFrom = (value: unknown): ActorProgramSourceFile[] => {\n if (!isRecord(value) || !Array.isArray(value.files)) throw new Error(\"Die Quellenliste entspricht nicht dem Vertrag\");\n return unique(value.files.map(actorProgramSourceFileFrom), (file) => file.path, \"files\");\n};\n\nexport const actorProgramsListingFrom = (value: unknown): ActorProgramsListing => {\n if (!isRecord(value) || !Array.isArray(value.apps) || !Array.isArray(value.tools)) {\n throw new Error(\"Die Liste der Actor-Programme entspricht nicht dem Vertrag\");\n }\n return {\n apps: unique(value.apps.map(runAppFrom), (app) => app.id, \"apps\"),\n tools: unique(value.tools.map(runScriptToolFrom), (tool) => tool.name, \"tools\"),\n };\n};\n\nconst segment = (value: string): string => encodeURIComponent(value);\n\nconst frameBase = (routePrefix: string, runId: string): string =>\n `${routePrefix}/runs/${segment(runId)}/apps`;\n\nexport const createActorProgramsApi = (routePrefix: string): ActorProgramsApi => ({\n list: async (runId, signal) =>\n actorProgramsListingFrom(await rpc.call(actorProgramContracts.apps, { runId }, { signal })),\n source: async (runId, moduleId, signal) =>\n actorProgramSourceFrom(await rpc.call(actorProgramContracts.source, { runId, moduleId }, { signal })),\n frameUrl: (runId, appId, revision) =>\n withAccessToken(`${frameBase(routePrefix, runId)}/${segment(appId)}/frame?revision=${segment(revision)}`),\n invoke: async (runId, appId, revision, actionId, requestId, input, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.action, { runId, appId, revision, actionId, requestId, input }, { signal })),\n invocation: async (runId, appId, invocationId, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.invocation, { runId, appId, invocationId }, { signal })),\n invokeFunction: async (runId, actorHandle, revision, functionId, requestId, input, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.function, { runId, actorHandle, revision, functionId, requestId, input }, { signal })),\n functionInvocation: async (runId, actorHandle, invocationId, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.functionInvocation, { runId, actorHandle, invocationId }, { signal })),\n});\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/AccessContext\", \"useAccess\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"createContext\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"createElement\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"forwardRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useCallback\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useContext\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useLayoutEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useMemo\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useState\");\n", "/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string?.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n", "import { toKebabCase } from './toKebabCase';\nimport type { LucideIconData, LucideIconNode } from '../build/types';\n\n/**\n * Converts legacy `(name, iconNode, aliases?)` icon arguments into icon data object format.\n */\nexport function toLucideIconData(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases: string[] = [],\n): LucideIconData {\n if (iconNode == null) {\n throw new Error('[lucide]: iconNode is required when icon name is used');\n }\n\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...(aliases.length > 0 ? { aliases } : {}),\n };\n}\n", "/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) => {\n let out = '';\n let upperNext = false;\n\n for (const ch of string) {\n if (ch === '-' || ch === '_' || ch <= ' ') {\n upperNext = out.length > 0;\n continue;\n }\n\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n\n upperNext = false;\n }\n\n return out as string;\n};\n", "import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n", "/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n", "const defaultAttributes = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n} as const;\n\nexport default defaultAttributes;\n", "import type { LucideBuildParams, LucideIconData, LucideIconNode, SVGProps } from './types';\nimport defaultAttributes from './defaultAttributes';\nimport { mergeClasses } from '../utils/mergeClasses';\n\nfunction isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Creates a Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconNode(icon: LucideIconData, params: LucideBuildParams = {}): LucideIconNode {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName: string) =>\n attributeNames[attributeName] ?? attributeName;\n\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes['width'];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes['height'];\n const aliasClassNames =\n icon.aliases\n ?.filter((alias: string): alias is string => typeof alias === 'string' && alias.trim() !== '')\n .map((alias: string) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...(icon.name ? [`lucide-${icon.name}`] : []), ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(' ').filter(Boolean) ?? [];\n const className =\n params.includeDefaultClasses === false\n ? mergeClasses(...classNamesFromClassName)\n : mergeClasses('lucide', ...iconClassNames, ...classNamesFromClassName);\n\n const calculatedStrokeWidth = params.absoluteStrokeWidth\n ? (Number(params.strokeWidth ?? defaultAttributes['stroke-width']) *\n Number(icon.size ?? icon.width ?? defaultAttributes['width'])) /\n Number(params.size ?? params.width ?? defaultAttributes['width'])\n : (params.strokeWidth ?? defaultAttributes['stroke-width']);\n\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {} as SVGProps),\n ...('color' in params &&\n params.color && {\n [getAttributeName('stroke')]: params.color,\n }),\n ...('size' in params &&\n isDefined(params.size) && {\n [getAttributeName('width')]: params.size,\n [getAttributeName('height')]: params.size,\n }),\n ...('width' in params &&\n isDefined(params.width) && {\n [getAttributeName('width')]: params.width,\n }),\n ...('height' in params &&\n isDefined(params.height) && {\n [getAttributeName('height')]: params.height,\n }),\n [getAttributeName('stroke-width')]: calculatedStrokeWidth,\n ...(className && {\n [getAttributeName('class')]: className,\n }),\n [getAttributeName('viewBox')]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...(params.hasA11yProp === false\n ? {\n [getAttributeName('aria-hidden')]: 'true',\n }\n : {}),\n ...('attributes' in params && params.attributes),\n };\n\n return [\n 'svg',\n attributes,\n icon.node.map((child): LucideIconNode => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke\n ? { [getAttributeName('vector-effect')]: 'non-scaling-stroke', ...attrs }\n : attrs;\n\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n }),\n ];\n}\n\nexport default buildLucideIconNode;\n", "import buildLucideIconNode from './buildLucideIconNode';\nimport type { LucideBuildParams, LucideIconData, LucideIconNode } from './types';\n\n/**\n * Creates a React-compatible Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconForReact(\n icon: LucideIconData,\n params: LucideBuildParams = {},\n): LucideIconNode {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: 'className',\n 'stroke-width': 'strokeWidth',\n 'stroke-linecap': 'strokeLinecap',\n 'stroke-linejoin': 'strokeLinejoin',\n 'vector-effect': 'vectorEffect',\n },\n });\n}\n\nexport default buildLucideIconForReact;\n", "/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: object) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n", "'use client';\n\nimport { createContext, createElement, type ReactNode, useContext, useMemo } from 'react';\nimport { LucideProps } from './types';\n\ntype LucideConfig = {\n size: number;\n color: string;\n strokeWidth: number;\n /**\n * @deprecated Use `nonScalingStroke` instead.\n */\n absoluteStrokeWidth: boolean;\n nonScalingStroke: boolean;\n className: string;\n};\n\nconst LucideContext = createContext<LucideProps>({});\n\ntype LucideProviderProps = {\n children: ReactNode;\n} & Partial<LucideConfig>;\n\nexport function LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n}: LucideProviderProps) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className],\n );\n\n return createElement(LucideContext.Provider, { value }, children);\n}\n\nexport const useLucideContext = () => useContext(LucideContext);\n", "'use client';\n\nimport { createElement, forwardRef } from 'react';\nimport { buildLucideIconForReact, hasA11yProp, mergeClasses } from '@lucide/shared';\nimport { LucideIconData, LucideIconNode, LucideProps } from './types';\nimport { useLucideContext } from './context';\n\ntype IconComponentProps = LucideProps &\n (\n | {\n iconNode: LucideIconNode[];\n icon?: never;\n }\n | {\n icon: LucideIconData;\n iconNode?: never;\n }\n );\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {boolean} props.nonScalingStroke - Whether to use non scaling strokes\n * @param {string} props.className - The class name of the icon\n * @param {LucideIconNode[]} props.children - The children of the icon\n * @param {LucideIconNode[]} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = '',\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24,\n },\n ...rest\n },\n ref,\n ) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = 'currentColor',\n className: contextClass = '',\n } = useLucideContext() ?? {};\n\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest,\n });\n\n return createElement(\n name,\n {\n ref,\n ...svgAttributes,\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n", "import { createElement, forwardRef } from 'react';\nimport { toLucideIconData, toPascalCase } from '@lucide/shared';\nimport { LucideIcon, LucideIconData, LucideIconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Creates a Lucide icon component from icon data.\n *\n * @param icon Icon data object.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(icon: LucideIconData): LucideIcon;\n\n/**\n * Creates a Lucide icon component from the legacy icon arguments.\n *\n * @param iconName Icon name.\n * @param iconNode Icon node.\n * @param aliases Optional icon aliases.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases?: string[],\n): LucideIcon;\n\nfunction createLucideIcon(\n iconDataOrName: LucideIconData | string,\n iconNode: LucideIconNode[] = [],\n aliases: string[] = [],\n): LucideIcon {\n const iconData =\n typeof iconDataOrName === 'string'\n ? toLucideIconData(iconDataOrName, iconNode, aliases)\n : iconDataOrName;\n\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props,\n }),\n );\n\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n\n return Component;\n}\n\nexport default createLucideIcon;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-left',\n size: 24,\n node: [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon(__iconData);\n\nexport default ArrowLeft;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'layout-grid',\n size: 24,\n node: [\n ['rect', { width: '7', height: '7', x: '3', y: '3', rx: '1', key: '1g98yp' }],\n ['rect', { width: '7', height: '7', x: '14', y: '3', rx: '1', key: '6d4xhi' }],\n ['rect', { width: '7', height: '7', x: '14', y: '14', rx: '1', key: 'nxv5o0' }],\n ['rect', { width: '7', height: '7', x: '3', y: '14', rx: '1', key: '1bb6yr' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name LayoutGrid\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/layout-grid\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LayoutGrid = createLucideIcon(__iconData);\n\nexport default LayoutGrid;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'x',\n size: 24,\n node: [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon(__iconData);\n\nexport default X;\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Alert\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Badge\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Button\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Dialog\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Empty\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyDescription\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyHeader\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyMedia\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Input\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Spinner\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Textarea\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"cn\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarCopy\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarText\");\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { ArrowLeftIcon, LayoutGridIcon } from \"lucide-react\";\nimport { Alert, Badge, Button, cn, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Spinner } from \"@ragents/web/ui\";\nimport { ToolbarCopy, ToolbarItem, ToolbarLabel, ToolbarText } from \"@ragents/web/Toolbar\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type PropsWithChildren,\n} from \"react\";\nimport { askPayloadOf, ASK_PLUGIN_ID } from \"@ragents/plugins/ragents.ask/ask-payload\";\nimport { answerQuestion } from \"@ragents/plugins/ragents.ask/web/api\";\nimport { QuestionCard } from \"@ragents/plugins/ragents.ask/web/QuestionCard\";\nimport { ACTOR_PROGRAMS_STATE_ID } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport {\n useSurfaceController,\n type SessionContext,\n type SessionHeaderContext,\n type WorkspaceTabContext,\n} from \"@ragents/web/PluginRegistry\";\nimport { runViewFrom, type RunAction } from \"@ragents/web/run-view\";\nimport { useSurfaceEntities } from \"@ragents/plugins/ragents.orchestration/web/surface-entities\";\nimport { SURFACE_TILE_DRAG_TYPE } from \"@ragents/plugins/ragents.orchestration/web/tile-docking\";\nimport { ProgramSlotContext, type ProgramSlot } from \"@ragents/plugins/ragents.orchestration/web/program-slot\";\nimport {\n type RunApp,\n type RunAppInvocation,\n type ActorProgramsApi,\n type ActorProgramsListing,\n type RunScriptTool,\n} from \"./api\";\nimport type { JsonValue } from \"./bridge\";\nimport { actorProgramSourceView, ProgramSource } from \"./ProgramSource\";\nimport { FunctionForm } from \"./FunctionForm\";\nimport { ExpandIcon } from \"./ExpandIcon\";\nimport { actorProgramsRevision } from \"./state-revision\";\nimport { actorProgramViews, currentActorListing } from \"./program-state\";\nimport { activeActorInvocations, readActorInvocation } from \"./invocations\";\nimport { ActorProgramsContext, useActorPrograms, type ActorProgramsContextValue } from \"./context\";\n\nexport { useActorPrograms, type ActorProgramsContextValue } from \"./context\";\n\nexport const RUN_TOOLS_TAB_ID = \"ragents.actor-programs.tools\";\n\nconst entryIconClass = \"flex size-[34px] items-center justify-center rounded-[10px] bg-[color-mix(in_srgb,var(--primary)_12%,var(--background))] text-primary\";\nconst headClass = \"grid flex-none grid-cols-[auto_minmax(0,1fr)] items-center gap-2.5 border-b border-border-soft px-workspace-inset py-[9px]\";\nconst sectionLabelClass = \"mb-2 text-[0.66rem] tracking-[0.075em] text-muted-foreground uppercase\";\nconst quickIconClass = \"grid size-[30px] flex-none place-items-center rounded-lg border border-info/25 bg-glass-app text-info\";\n\nconst ACTIVE_STATUSES = new Set([\"queued\", \"running\"]);\nconst POLL_INTERVAL = 700;\n\nconst replaceInvocation = (\n listing: ActorProgramsListing | undefined,\n invocation: RunAppInvocation,\n): ActorProgramsListing | undefined => listing && ({\n ...listing,\n apps: listing.apps.map((app) => {\n if (app.actorId !== invocation.actorId || app.revision !== invocation.revision) return app;\n const exists = app.invocations.some((entry) => entry.id === invocation.id);\n return {\n ...app,\n invocations: exists\n ? app.invocations.map((entry) => entry.id === invocation.id ? invocation : entry)\n : [...app.invocations, invocation],\n };\n }),\n});\n\nexport function ActorProgramsProvider({\n api,\n children,\n session,\n}: PropsWithChildren<{ api: ActorProgramsApi; session: SessionContext }>) {\n const runId = session.session.id;\n const canInspect = useAccess().can(\"runs.inspect\");\n const [storedListing, setListing] = useState<ActorProgramsListing>();\n const listing = useMemo(() => currentActorListing(storedListing, session.runView), [storedListing, session.runView]);\n const [error, setError] = useState<string>();\n const [fullscreen, setFullscreen] = useState<{ runId: string; appId: string }>();\n const visibleApps = actorProgramApps(session).filter((app) => app.app.visible !== false);\n const fullscreenAppId = fullscreen?.runId === runId && visibleApps.some((app) => app.id === fullscreen.appId)\n ? fullscreen.appId : undefined;\n const closeFullscreen = useCallback(() => setFullscreen(undefined), []);\n const openFullscreen = useCallback((appId: string) => {\n if (!actorProgramApps(session).some((app) => app.id === appId && app.app.visible !== false)) {\n throw new Error(\"Die Actor-Ansicht ist nicht auf der Fl\u00E4che verf\u00FCgbar.\");\n }\n setFullscreen({ runId, appId });\n }, [runId, session]);\n useEffect(() => { if (fullscreen && !fullscreenAppId) setFullscreen(undefined); }, [fullscreen, fullscreenAppId]);\n const loadRevision = useRef(0);\n\n const refresh = useCallback(async () => {\n const revision = ++loadRevision.current;\n try {\n const next = await api.list(runId);\n if (revision !== loadRevision.current) return;\n setListing(next);\n setError(undefined);\n } catch (caught) {\n if (revision !== loadRevision.current) return;\n setError(caught instanceof Error ? caught.message : String(caught));\n }\n }, [api, runId]);\n\n const moduleRevision = useMemo(() => actorProgramsRevision(session.runView), [session.runView]);\n useEffect(() => {\n setListing(undefined);\n setError(undefined);\n return () => { loadRevision.current += 1; };\n }, [runId]);\n useEffect(() => { void refresh(); }, [moduleRevision, refresh]);\n\n const activeInvocations = useMemo(() => activeActorInvocations(listing?.apps ?? [], canInspect), [canInspect, listing]);\n const activeKey = activeInvocations.length > 0 ? JSON.stringify(activeInvocations) : \"\";\n\n useEffect(() => {\n if (!activeKey) return;\n const targets = activeInvocations;\n let disposed = false;\n let timer: number | undefined;\n let controller: AbortController | undefined;\n\n const poll = async () => {\n controller = new AbortController();\n const results = await Promise.allSettled(targets.map(async (target) => ({\n target,\n invocation: await readActorInvocation(api, runId, target, controller?.signal),\n })));\n if (disposed) return;\n const updates = results.flatMap((result) => result.status === \"fulfilled\" ? [result.value] : []);\n if (updates.length > 0) {\n setListing((current) => updates.reduce((next, update) => replaceInvocation(next, update.invocation), current));\n setError(undefined);\n }\n const failed = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\n if (failed) setError(failed.reason instanceof Error ? failed.reason.message : String(failed.reason));\n const finished = updates.some((update) => !ACTIVE_STATUSES.has(update.invocation.status));\n if (finished) {\n await refresh();\n } else if (!disposed) {\n timer = window.setTimeout(() => void poll(), POLL_INTERVAL);\n }\n };\n\n timer = window.setTimeout(() => void poll(), 250);\n return () => {\n disposed = true;\n if (timer !== undefined) window.clearTimeout(timer);\n controller?.abort();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- activeKey encodes activeInvocations; the poll uses the captured targets\n }, [activeKey, api, refresh, runId]);\n\n const invoke = useCallback(async (\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n ) => {\n loadRevision.current += 1;\n const invocation = await api.invoke(runId, appId, revision, actionId, requestId, input);\n loadRevision.current += 1;\n setListing((current) => replaceInvocation(current, invocation));\n return invocation;\n }, [api, runId]);\n\n const value = useMemo<ActorProgramsContextValue>(() => ({\n api,\n error,\n fullscreenAppId,\n invoke,\n listing,\n openFullscreen,\n closeFullscreen,\n refresh,\n runId,\n }), [api, error, fullscreenAppId, invoke, listing, openFullscreen, closeFullscreen, refresh, runId]);\n const slot = useMemo<ProgramSlot>(() => ({\n runId,\n needsAnswer: (session, appId) => {\n const app = listing?.apps.find((candidate) => candidate.id === appId);\n return app !== undefined && pendingConfirmationFor(session, app) !== undefined;\n },\n openFullscreen,\n source: (view, actorId) => actorProgramSourceView(api, view, actorId),\n }), [api, listing, openFullscreen, runId]);\n return <ActorProgramsContext.Provider value={value}>\n <ProgramSlotContext.Provider value={slot}>{children}</ProgramSlotContext.Provider>\n </ActorProgramsContext.Provider>;\n}\n\nexport const actorProgramApps = (session: SessionContext) => actorProgramViews(session.runView);\n\nexport const pendingConfirmationFor = (\n session: SessionContext,\n app: Pick<RunApp, \"invocations\">,\n): RunAction | undefined => {\n const view = runViewFrom(session.runView);\n if (!view) return undefined;\n const invocationIds = new Set(app.invocations\n .filter((invocation) => ACTIVE_STATUSES.has(invocation.status))\n .map((invocation) => invocation.id));\n return view.actions.find((action) => action.owner === ASK_PLUGIN_ID\n && action.status === \"pending\"\n && action.askedBy === view.ownerId\n && action.parameters.source === ACTOR_PROGRAMS_STATE_ID\n && invocationIds.has(action.parameters.invocationId));\n};\n\nexport function HostConfirmation({ action, session }: { action: RunAction; session: SessionContext }) {\n const access = useAccess();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string>();\n\n const answer = async (text: string) => {\n if (busy) return;\n setBusy(true);\n setError(undefined);\n try {\n await answerQuestion(session.session.id, action.id, text);\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : String(caught));\n setBusy(false);\n }\n };\n\n return (\n <section aria-label=\"Host-Best\u00E4tigung\" className=\"grid flex-none gap-2 border-b border-border-soft bg-warning-soft px-workspace-inset py-2.5\" data-slot=\"host-confirmation\">\n <header className=\"grid gap-0.5\">\n <strong className=\"text-[0.72rem] text-foreground\">Best\u00E4tigung im Host</strong>\n <span className=\"text-xs text-muted-foreground\">Die App kann diese Entscheidung nicht selbst beantworten.</span>\n </header>\n {busy\n ? <p className=\"text-xs text-muted-foreground\">Antwort wird verarbeitet</p>\n : (\n <QuestionCard\n onAnswer={access.can(\"runs.write\") ? (text: string) => void answer(text) : undefined}\n question={askPayloadOf(action.payload) ?? { question: action.title, options: [], multi: false }}\n text={action.title}\n />\n )}\n {error && <p className=\"text-xs text-destructive\" role=\"alert\">{error}</p>}\n </section>\n );\n}\n\nconst targetLabel = (target: RunScriptTool[\"targets\"][number]): string =>\n target.handle ? `@${target.handle}` : target.actorId;\n\nexport function ToolsPanel({ active, navigation, selection, session }: WorkspaceTabContext) {\n const { api, error, listing, refresh, runId } = useActorPrograms();\n const selectedName = typeof selection === \"string\" ? selection : undefined;\n const selected = listing?.tools.find((tool) => tool.name === selectedName);\n\n if (!listing && !error) {\n return (\n <div className=\"flex h-full items-center justify-center gap-2.5 text-sm text-muted-foreground\">\n <Spinner aria-hidden aria-label={undefined} role={undefined} />\n <span>Funktionen werden geladen</span>\n </div>\n );\n }\n if (!listing) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyMedia><IconTools /></EmptyMedia>\n <EmptyTitle>Funktionen konnten nicht geladen werden</EmptyTitle>\n <EmptyDescription>{error}</EmptyDescription>\n </EmptyHeader>\n <EmptyContent>\n <Button onClick={() => void refresh()} variant=\"outline\">Erneut versuchen</Button>\n </EmptyContent>\n </Empty>\n );\n }\n if (selectedName && !selected) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyMedia><IconTools /></EmptyMedia>\n <EmptyTitle>Funktion nicht mehr verf\u00FCgbar</EmptyTitle>\n <EmptyDescription>Das ausgew\u00E4hlte Actor-Funktion ist in diesem Run nicht mehr installiert.</EmptyDescription>\n </EmptyHeader>\n <EmptyContent>\n <Button onClick={() => navigation.openTab(RUN_TOOLS_TAB_ID, null)} variant=\"outline\">\n Zur \u00DCbersicht\n </Button>\n </EmptyContent>\n </Empty>\n );\n }\n if (selected) {\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <header className={headClass}>\n <Button aria-label=\"Zur\u00FCck zur Funktions\u00FCbersicht\" onClick={() => navigation.openTab(RUN_TOOLS_TAB_ID, null)} size=\"icon-sm\" title=\"Zur\u00FCck zur Funktions\u00FCbersicht\" variant=\"outline\">\n <ArrowLeftIcon />\n </Button>\n <span className=\"grid min-w-0 gap-px\">\n <strong className=\"truncate text-[0.82rem] font-semibold\" title={selected.name}>{selected.name}</strong>\n <small className=\"truncate text-xs text-muted-foreground\">Funktion von @{selected.actorHandle}</small>\n </span>\n </header>\n <div className=\"flex min-h-0 flex-col gap-[22px] overflow-y-auto px-workspace-inset pt-[18px] pb-7\">\n <div className=\"grid grid-cols-[42px_minmax(0,1fr)] items-start gap-3\">\n <span className={cn(entryIconClass, \"size-[42px] bg-accent\")}><IconTools size={22} /></span>\n <div>\n <h2 className=\"text-[1.05rem] text-foreground\">{selected.name}</h2>\n <p className=\"mt-1 text-[0.74rem] leading-[1.45] text-muted-foreground\">{selected.description}</p>\n </div>\n </div>\n <section>\n <h3 className={sectionLabelClass}>Verf\u00FCgbar f\u00FCr</h3>\n <div className=\"flex flex-wrap gap-1.5\">\n {selected.targets.map((target) => <span className=\"rounded-full bg-primary/9 px-2 py-1 text-xs text-foreground\" key={target.actorId}>{targetLabel(target)}</span>)}\n </div>\n </section>\n <section>\n <h3 className={sectionLabelClass}>Parameter</h3>\n {active && <FunctionForm detail key={`${runId}:${selected.actorId}:${selected.functionId}:${selected.revision}`} session={session} tool={selected} />}\n </section>\n <ProgramSource api={api} moduleId={selected.moduleId} revision={selected.revision} runId={runId} />\n <dl className=\"grid grid-cols-2 gap-2\">\n {[{ label: \"Programm\", value: selected.moduleId, title: undefined },\n { label: \"Quellhash\", value: selected.sourceHash.slice(0, 12), title: selected.sourceHash }].map((fact) => (\n <div className=\"grid gap-[3px] rounded-lg bg-foreground/4 px-2.5 py-2\" key={fact.label}>\n <dt className=\"text-[0.61rem] text-muted-foreground uppercase\">{fact.label}</dt>\n <dd className=\"truncate font-mono text-xs text-foreground\" title={fact.title}>{fact.value}</dd>\n </div>\n ))}\n </dl>\n </div>\n </div>\n );\n }\n if (listing.tools.length === 0) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyMedia><IconTools /></EmptyMedia>\n <EmptyTitle>Noch keine Funktionen</EmptyTitle>\n <EmptyDescription>Von Agenten erstellte Actor-Funktionen dieses Runs erscheinen hier.</EmptyDescription>\n </EmptyHeader>\n </Empty>\n );\n }\n\n return (\n <div className=\"@container flex h-full min-h-0 flex-col gap-2 overflow-y-auto px-workspace-inset pt-3 pb-5 [scrollbar-width:thin]\">\n {error && <Alert className=\"mb-1\" role=\"status\" variant=\"destructive\">{error}</Alert>}\n {listing.tools.map((tool) => (\n <button\n className=\"grid w-full cursor-pointer grid-cols-[34px_minmax(0,1fr)_auto_14px] items-center gap-2.5 rounded-lg border border-border bg-card px-[11px] py-2.5 text-left text-foreground transition-[background-color,border-color] hover:border-[color-mix(in_srgb,var(--primary)_52%,var(--border))] hover:bg-[color-mix(in_srgb,var(--primary)_7%,var(--card))] focus-visible:border-[color-mix(in_srgb,var(--primary)_52%,var(--border))] focus-visible:bg-[color-mix(in_srgb,var(--primary)_7%,var(--card))] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary/52 @max-[470px]:grid-cols-[34px_minmax(0,1fr)_14px]\"\n key={tool.name}\n onClick={() => navigation.openTab(RUN_TOOLS_TAB_ID, tool.name)}\n type=\"button\"\n >\n <span className={entryIconClass}><IconTools size={20} /></span>\n <span className=\"grid min-w-0 gap-0.5\">\n <strong className=\"truncate text-[0.8rem] font-semibold\">{tool.name}</strong>\n <small className=\"truncate text-[0.69rem] text-muted-foreground\">{tool.description}</small>\n </span>\n <Badge className=\"max-w-[132px] truncate @max-[470px]:hidden\" variant=\"secondary\">\n {tool.targets.length} {tool.targets.length === 1 ? \"Agent\" : \"Agenten\"}\n </Badge>\n <IconOpen />\n </button>\n ))}\n </div>\n );\n}\n\n/** Ein Klick auf eine Mini-App w\u00E4hlt ihre Kachel auf der Fl\u00E4che; die Fl\u00E4che ist der Fl\u00E4chen-Controller des Orchestrierungs-Plugins. */\nexport function ActorProgramsHeader({ session }: SessionHeaderContext) {\n const canArrange = useAccess().can(\"runs.inspect\");\n const surface = useSurfaceController();\n const stage = useSurfaceEntities(session.session.id);\n const { closeFullscreen, fullscreenAppId, openFullscreen } = useActorPrograms();\n const apps = actorProgramApps(session).filter((app) => app.app.visible !== false);\n if (apps.length === 0) return null;\n\n return (\n <nav aria-label=\"Actor-Ansichten\" className=\"flex min-w-0 flex-none items-stretch\">\n {apps.map((app) => (\n <div role=\"group\" aria-label={app.title} key={`app:${app.id}`}\n className={cn(\"relative flex flex-none items-stretch border-r border-border hover:bg-accent focus-within:bg-accent\",\n fullscreenAppId === app.id && \"bg-primary/12 after:pointer-events-none after:absolute after:inset-x-0 after:bottom-0 after:h-[3px] after:bg-primary after:content-['']\")}>\n <ToolbarItem\n as=\"button\"\n className=\"max-w-[214px] border-r-0 font-bold hover:not-disabled:bg-transparent\"\n draggable={canArrange}\n onDragStart={(event) => {\n if (!canArrange) { event.preventDefault(); return; }\n event.dataTransfer.setData(SURFACE_TILE_DRAG_TYPE, `app:${app.id}`);\n event.dataTransfer.effectAllowed = \"move\";\n closeFullscreen();\n }}\n onClick={() => {\n if (!surface) throw new Error(\"Die App-Zug\u00E4nge brauchen den Fl\u00E4chen-Controller des Orchestrierungs-Plugins.\");\n closeFullscreen();\n surface.acceptSelection({ type: \"run-app\", id: app.id });\n }}\n aria-label={`Mini-App: ${app.title} von @${app.actorHandle}`}\n title={`Mini-App: ${app.title} von @${app.actorHandle}${canArrange ? \". Zum Andocken auf eine Kachel ziehen.\" : \"\"}`}\n type=\"button\"\n >\n <span className={cn(quickIconClass, !stage.has(`app:${app.id}`) && \"bg-transparent\")}><LayoutGridIcon size={20} /></span>\n <ToolbarCopy><ToolbarLabel>@{app.actorHandle}</ToolbarLabel><ToolbarText>{app.title}</ToolbarText></ToolbarCopy>\n </ToolbarItem>\n <ToolbarItem as=\"button\" aria-expanded={fullscreenAppId === app.id} aria-label={`${app.title} ${fullscreenAppId === app.id ? \"Vollansicht schlie\u00DFen\" : \"in Vollansicht \u00F6ffnen\"}`}\n title={`${app.title} ${fullscreenAppId === app.id ? \"Vollansicht schlie\u00DFen\" : \"in Vollansicht \u00F6ffnen\"}`}\n className=\"relative w-[38px] justify-center border-r-0 p-0 hover:not-disabled:bg-transparent before:pointer-events-none before:absolute before:top-1/4 before:bottom-1/4 before:left-0 before:border-l before:border-dashed before:border-border-strong before:content-['']\"\n onClick={() => fullscreenAppId === app.id ? closeFullscreen() : openFullscreen(app.id)} type=\"button\">\n <ExpandIcon />\n </ToolbarItem>\n </div>\n ))}\n </nav>\n );\n}\n\nexport function ToolsBadge() {\n const { listing } = useActorPrograms();\n return listing && listing.tools.length > 0\n ? <Badge variant=\"secondary\">{listing.tools.length}</Badge>\n : null;\n}\n\nfunction IconTools({ size = 28 }: { size?: number }) {\n return (\n <svg aria-hidden fill=\"none\" height={size} stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.6\" viewBox=\"0 0 24 24\" width={size}>\n <path d=\"M14.5 6.5 17.5 3.5l3 3-3 3\" />\n <path d=\"m9.5 17.5-3 3-3-3 3-3\" />\n <path d=\"M13 5H9a4 4 0 0 0-4 4v5.5M11 19h4a4 4 0 0 0 4-4V9.5\" />\n </svg>\n );\n}\n\nfunction IconOpen() {\n return (\n <svg aria-hidden fill=\"none\" height=\"14\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.8\" viewBox=\"0 0 24 24\" width=\"14\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runActorFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runViewFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/SourceCode\", \"SourceCode\");\n", "import { ACTOR_PROGRAMS_STATE_ID, ACTOR_STATE_ID } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport { isRecord } from \"@ragents/web/lib/guards\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport type { ActorProgramsListing } from \"./api\";\nimport { isJsonValue } from \"./bridge\";\n\nexport interface ActorProgramView {\n id: string;\n title: string;\n actorId: string;\n actorHandle: string;\n revision: string;\n app: Record<string, unknown>;\n}\n\nexport const actorProgramSourceReference = (runView: unknown, actorId: string): { name: string; revision: string } | undefined => {\n const view = runViewFrom(runView);\n const entry = view?.pluginStates.find((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID\n && entry.scope.kind === \"actor\" && entry.scope.actorId === actorId);\n if (!entry || !isRecord(entry.state) || entry.state.program === null) return undefined;\n const program = entry.state.program;\n if (!isRecord(program) || program.actorId !== actorId || typeof program.name !== \"string\" || typeof program.revision !== \"string\") {\n throw new Error(\"Die Quellcode-Zuordnung des Actor-Programms ist ung\u00FCltig.\");\n }\n return { name: program.name, revision: program.revision };\n};\n\nexport const actorProgramViews = (runView: unknown): ActorProgramView[] => {\n const view = runViewFrom(runView);\n if (!view) return [];\n return view.pluginStates.flatMap((entry): ActorProgramView[] => {\n if (entry.pluginId !== ACTOR_PROGRAMS_STATE_ID || entry.scope.kind !== \"actor\") return [];\n const actorId = entry.scope.actorId;\n const actor = view.actors.find((actor) => actor.id === actorId);\n if (!actor || actor.kind === \"human\" || actor.lifecycle?.kind === \"stopped\") return [];\n if (!isRecord(entry.state) || !isRecord(entry.state.program)) return [];\n const program = entry.state.program;\n if (program.actorId !== actor.id || program.actorHandle !== actor.handle || typeof program.revision !== \"string\" || !Array.isArray(program.views)) {\n throw new Error(`Das Ansichtsprogramm von @${actor.handle} ist ung\u00FCltig.`);\n }\n return program.views.map((app) => {\n if (!isRecord(app) || typeof app.id !== \"string\" || typeof app.title !== \"string\") throw new Error(`Eine Ansicht von @${actor.handle} ist ung\u00FCltig.`);\n return { id: app.id, title: app.title, actorId: actor.id, actorHandle: actor.handle, revision: program.revision as string, app };\n });\n });\n};\n\nexport const currentActorListing = (listing: ActorProgramsListing | undefined, runView: unknown): ActorProgramsListing | undefined => {\n const view = runViewFrom(runView);\n if (!listing || !view) return undefined;\n const currentViews = new Map(actorProgramViews(view).map((entry) => [entry.id, entry]));\n const activeActors = new Set(view.actors.filter((actor) => actor.kind !== \"human\" && actor.lifecycle?.kind !== \"stopped\").map((actor) => actor.id));\n return {\n ...listing,\n apps: listing.apps.flatMap((app) => {\n const current = currentViews.get(app.id);\n if (!current || current.actorId !== app.actorId || current.revision !== app.revision) return [];\n const state = view.pluginStates.find((entry) => entry.pluginId === ACTOR_STATE_ID && entry.scope.kind === \"actor\" && entry.scope.actorId === app.actorId);\n const values = state ? state.state : app.state.values;\n if (!isJsonValue(values)) throw new Error(`Der Zustand von @${app.actorHandle} ist kein JSON-Wert.`);\n return [{ ...app, visible: current.app.visible !== false,\n state: { ...app.state, values } }];\n }),\n tools: listing.tools.filter((tool) => activeActors.has(tool.actorId) && view.pluginStates.some((entry) =>\n entry.pluginId === ACTOR_PROGRAMS_STATE_ID && entry.scope.kind === \"actor\" && entry.scope.actorId === tool.actorId\n && isRecord(entry.state) && isRecord(entry.state.program) && entry.state.program.revision === tool.revision)),\n };\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"Fragment\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsxs\");\n", "import { useEffect, useState, type ReactNode } from \"react\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\nimport { Alert, Button, cn, Spinner } from \"@ragents/web/ui\";\nimport type { RunView } from \"@ragents/web/run-view\";\nimport type { ActorProgramSourceFile, ActorProgramsApi } from \"./api\";\nimport { actorProgramSourceReference } from \"./program-state\";\n\ntype SourceState =\n | { kind: \"loading\" }\n | { kind: \"ready\"; files: ActorProgramSourceFile[] }\n | { kind: \"error\"; message: string };\n\nexport function ProgramSource({ api, moduleId, runId, revision, expandedByDefault = false }: {\n api: ActorProgramsApi;\n moduleId: string;\n runId: string;\n revision?: string;\n expandedByDefault?: boolean;\n}) {\n const [expanded, setExpanded] = useState(expandedByDefault);\n const [state, setState] = useState<SourceState>({ kind: \"loading\" });\n const [activePath, setActivePath] = useState<string>();\n\n useEffect(() => {\n if (!expanded) return undefined;\n const controller = new AbortController();\n setState({ kind: \"loading\" });\n api.source(runId, moduleId, controller.signal).then(\n (files) => {\n if (controller.signal.aborted) return;\n setState({ kind: \"ready\", files });\n setActivePath(files.find((file) => file.path === \"src/server.ts\")?.path ?? files.find((file) => /\\.tsx?$/.test(file.path))?.path ?? files[0]?.path);\n },\n (caught: unknown) => {\n if (controller.signal.aborted) return;\n setState({ kind: \"error\", message: caught instanceof Error ? caught.message : String(caught) });\n },\n );\n return () => controller.abort();\n }, [api, expanded, moduleId, runId, revision]);\n\n const active = state.kind === \"ready\"\n ? state.files.find((file) => file.path === activePath) ?? state.files[0]\n : undefined;\n\n return (\n <section className=\"grid w-full min-w-0 grid-cols-[minmax(0,1fr)] justify-items-start gap-2\">\n <h3 className=\"text-xs font-semibold text-muted-foreground\">Quellcode</h3>\n {!expanded && (\n <Button onClick={() => setExpanded(true)} size=\"sm\" variant=\"outline\">Quellcode anzeigen</Button>\n )}\n {expanded && (\n <>\n <p className=\"text-[0.67rem] text-muted-foreground\">Quelle des installierten Builds</p>\n {state.kind === \"loading\" && (\n <p className=\"flex items-center gap-2 text-[0.72rem] text-muted-foreground\">\n <Spinner aria-hidden aria-label={undefined} role={undefined} />\n <span>Quellcode wird geladen</span>\n </p>\n )}\n {state.kind === \"error\" && <Alert className=\"w-full\" variant=\"destructive\">{state.message}</Alert>}\n {state.kind === \"ready\" && (\n <div className=\"flex flex-wrap gap-1.5\">\n {state.files.map((file) => (\n <button\n className={cn(\"max-w-full cursor-pointer rounded-lg border border-border-soft bg-background/70 px-[9px] py-1 text-left font-mono text-[0.66rem] text-muted-foreground [overflow-wrap:anywhere]\",\n file.path === active?.path && \"border-[color-mix(in_srgb,var(--primary)_48%,var(--border))] bg-primary/9 text-foreground\")}\n key={file.path}\n onClick={() => setActivePath(file.path)}\n type=\"button\"\n >\n {file.path}\n </button>\n ))}\n </div>\n )}\n {active && <SourceCode className=\"h-full max-h-[340px] w-full min-h-0 min-w-0 overflow-auto rounded-lg border border-border-soft bg-background/70\" content={active.content} path={active.path} />}\n {!expandedByDefault && <Button onClick={() => setExpanded(false)} size=\"sm\" variant=\"outline\">Quellcode ausblenden</Button>}\n </>\n )}\n </section>\n );\n}\n\n/** The installed source of the actor's program, or nothing if the actor runs none. */\nexport const actorProgramSourceView = (api: ActorProgramsApi, view: RunView, actorId: string): ReactNode => {\n const program = actorProgramSourceReference(view, actorId);\n return program && <ProgramSource api={api} expandedByDefault key={`${view.id}:${actorId}:${program.revision}`}\n moduleId={program.name} revision={program.revision} runId={view.id} />;\n};\n", "import type { RunAppInvocation, ActorProgramsApi, RunScriptTool } from \"./api\";\nimport type { JsonValue } from \"./bridge\";\n\nconst waitForPoll = (signal: AbortSignal): Promise<void> => new Promise((resolve, reject) => {\n signal.throwIfAborted();\n const finish = (): void => { signal.removeEventListener(\"abort\", abort); resolve(); };\n const timer = setTimeout(finish, 350);\n const abort = (): void => { clearTimeout(timer); reject(signal.reason); };\n signal.addEventListener(\"abort\", abort, { once: true });\n});\n\nexport const invokeActorFunction = async (\n api: ActorProgramsApi,\n runId: string,\n tool: Pick<RunScriptTool, \"actorHandle\" | \"functionId\" | \"revision\">,\n input: JsonValue,\n signal: AbortSignal,\n changed: (invocation: RunAppInvocation) => void,\n): Promise<RunAppInvocation> => {\n let invocation = await api.invokeFunction(runId, tool.actorHandle, tool.revision, tool.functionId, crypto.randomUUID().replaceAll(\"-\", \"\"), input, signal);\n changed(invocation);\n while (invocation.status === \"queued\" || invocation.status === \"running\") {\n await waitForPoll(signal);\n invocation = await api.functionInvocation(runId, tool.actorHandle, invocation.id, signal);\n changed(invocation);\n }\n return invocation;\n};\n", "import type { RunToolParameter } from \"./api\";\nimport { isJsonValue, type JsonValue } from \"./bridge\";\n\nconst parseParameter = (parameter: RunToolParameter, form: FormData): JsonValue | undefined => {\n const raw = String(form.get(parameter.name) ?? \"\");\n if (parameter.type === \"boolean\") {\n if (parameter.required) return form.has(parameter.name);\n return raw === \"\" ? undefined : raw === \"true\";\n }\n if (raw === \"\" && !parameter.required) return undefined;\n if (parameter.type === \"string\") return raw;\n if (!raw.trim()) throw new Error(`${parameter.name}: Bitte einen Wert eingeben.`);\n if (parameter.type === \"number\" || parameter.type === \"integer\") {\n const value = Number(raw);\n if (!Number.isFinite(value) || parameter.type === \"integer\" && !Number.isInteger(value)) {\n throw new Error(`${parameter.name} ist keine g\u00FCltige ${parameter.type === \"integer\" ? \"Ganzzahl\" : \"Zahl\"}.`);\n }\n return value;\n }\n if (parameter.type === \"string[]\" && !raw.trimStart().startsWith(\"[\")) {\n return raw.split(/\\r?\\n|,/).map((entry) => entry.trim()).filter(Boolean);\n }\n let value: unknown;\n try { value = JSON.parse(raw); }\n catch { throw new Error(`${parameter.name}: Bitte g\u00FCltiges JSON eingeben.`); }\n if (!isJsonValue(value)) throw new Error(`${parameter.name}: Kein g\u00FCltiger JSON-Wert.`);\n if (parameter.type === \"string[]\" && (!Array.isArray(value) || !value.every((entry) => typeof entry === \"string\"))) {\n throw new Error(`${parameter.name}: Bitte eine Liste aus Texten eingeben.`);\n }\n if (parameter.type === \"number[]\" && (!Array.isArray(value) || !value.every((entry) => typeof entry === \"number\"))) {\n throw new Error(`${parameter.name}: Bitte eine JSON-Liste aus Zahlen eingeben.`);\n }\n return value;\n};\n\nexport const actorFunctionInput = (parameters: readonly RunToolParameter[], form: FormData): Record<string, JsonValue> =>\n Object.fromEntries(parameters.flatMap((parameter) => {\n const value = parseParameter(parameter, form);\n return value === undefined ? [] : [[parameter.name, value]];\n }));\n", "import { useEffect, useRef, useState, type FormEvent } from \"react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { Button, cn, Input, Textarea } from \"@ragents/web/ui\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport type { RunAppInvocation, RunScriptTool } from \"./api\";\nimport { HostConfirmation, pendingConfirmationFor, useActorPrograms } from \"./AppsPanel\";\nimport { invokeActorFunction } from \"./function-call\";\nimport { actorFunctionInput } from \"./function-input\";\n\nconst selectClass = \"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base font-normal md:text-sm\";\n\nexport function FunctionForm({ session, tool, detail = false }: {\n session: SessionContext;\n tool: RunScriptTool;\n detail?: boolean;\n}) {\n const writable = useAccess().can(\"runs.write\");\n const { api, refresh, runId } = useActorPrograms();\n const [error, setError] = useState<string>();\n const [busy, setBusy] = useState(false);\n const [invocation, setInvocation] = useState<RunAppInvocation>();\n const controllerRef = useRef<AbortController | undefined>(undefined);\n useEffect(() => () => controllerRef.current?.abort(), []);\n const confirmation = invocation ? pendingConfirmationFor(session, { invocations: [invocation] }) : undefined;\n\n const submit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (controllerRef.current || !writable) return;\n const controller = new AbortController();\n controllerRef.current = controller;\n setError(undefined);\n setInvocation(undefined);\n try {\n const input = actorFunctionInput(tool.parameters, new FormData(event.currentTarget));\n setBusy(true);\n await invokeActorFunction(api, runId, tool, input, controller.signal, (current) => {\n if (!controller.signal.aborted) setInvocation(current);\n });\n if (!controller.signal.aborted) await refresh();\n } catch (caught) {\n if (!controller.signal.aborted) setError(caught instanceof Error ? caught.message : String(caught));\n } finally {\n if (!controller.signal.aborted) setBusy(false);\n if (controllerRef.current === controller) controllerRef.current = undefined;\n }\n };\n\n const status = confirmation ? \"Best\u00E4tigung erforderlich\"\n : invocation?.status === \"queued\" ? \"Wartet auf Ausf\u00FChrung\"\n : invocation?.status === \"running\" ? \"Funktion l\u00E4uft\"\n : invocation?.status === \"succeeded\" ? \"Ausgef\u00FChrt\"\n : invocation?.status === \"cancelled\" ? \"Abgebrochen\"\n : invocation?.status === \"failed\" ? \"Fehlgeschlagen\"\n : busy ? \"Aufruf wird gesendet\" : undefined;\n const failure = error ?? (invocation?.status === \"failed\" || invocation?.status === \"cancelled\" ? invocation.error : undefined);\n\n return (\n <div className=\"grid min-w-0 gap-2.5\">\n <form aria-label={`${tool.name} aufrufen`} className={cn(\"grid\", detail ? \"gap-3.5\" : \"gap-2\")} onSubmit={(event) => void submit(event)}>\n {tool.parameters.length === 0 && detail && <p>Diese Funktion ben\u00F6tigt keine Parameter.</p>}\n {tool.parameters.map((parameter) => (\n <label className={cn(\"grid gap-[3px] font-[650] text-foreground [&_small]:text-[0.61rem] [&_small]:font-normal [&_small]:text-muted-foreground\",\n detail ? \"text-[0.8rem]\" : \"text-[0.68rem]\",\n parameter.type === \"boolean\" && parameter.required && \"grid-cols-[auto_minmax(0,1fr)] items-center gap-x-1.5 [&_small]:col-start-2\")} key={parameter.name}>\n {parameter.type === \"boolean\" && parameter.required && <input aria-description={parameter.description} className=\"m-0 accent-primary\" disabled={!writable || busy} name={parameter.name} type=\"checkbox\" />}\n <span>{parameter.name}{parameter.required ? \" *\" : \"\"}{detail && <small className=\"ml-2\">{parameter.type}{parameter.required ? \"\" : \" (optional)\"}</small>}</span>\n {parameter.type === \"boolean\"\n ? !parameter.required && <select className={selectClass} disabled={!writable || busy} name={parameter.name} defaultValue=\"\"><option value=\"\">Nicht \u00FCbergeben</option><option value=\"true\">Ja</option><option value=\"false\">Nein</option></select>\n : parameter.type === \"json\" || parameter.type === \"string[]\" || parameter.type === \"number[]\" || detail && parameter.type === \"string\"\n ? <Textarea aria-description={parameter.description} className=\"min-h-8 resize-y font-normal\" disabled={!writable || busy} name={parameter.name} placeholder={parameter.description} required={parameter.required} rows={2} />\n : <Input\n aria-description={parameter.description}\n className=\"font-normal\"\n disabled={!writable || busy}\n name={parameter.name}\n placeholder={parameter.description}\n required={parameter.required}\n step={parameter.type === \"integer\" ? \"1\" : parameter.type === \"number\" ? \"any\" : undefined}\n type={parameter.type === \"integer\" || parameter.type === \"number\" ? \"number\" : \"text\"}\n />}\n {(detail || parameter.type === \"boolean\") && <small>{parameter.description}</small>}\n {parameter.type === \"json\" && <small>Als JSON eingeben.</small>}\n {parameter.type === \"number[]\" && <small>Als JSON-Liste eingeben, z. B. [1, 2, 3].</small>}\n {parameter.type === \"string[]\" && <small>Ein Eintrag pro Zeile oder als JSON-Liste.</small>}\n </label>\n ))}\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button disabled={!writable || busy} type=\"submit\">{busy ? \"Wird ausgef\u00FChrt ...\" : \"Ausf\u00FChren\"}</Button>\n {status && <span className=\"text-[0.63rem] text-muted-foreground\" role=\"status\">{status}</span>}\n </div>\n </form>\n {confirmation && <HostConfirmation action={confirmation} key={confirmation.id} session={session} />}\n {failure && <p className=\"text-destructive [overflow-wrap:anywhere]\" role=\"alert\">{failure}</p>}\n {invocation?.status === \"succeeded\" && !error && (\n <section aria-label=\"Ergebnis\" className=\"grid min-w-0 gap-2\">\n <h3>Ergebnis</h3>\n <pre className=\"max-h-[320px] overflow-auto rounded-md border border-border-soft bg-card p-2.5 text-[0.75rem] whitespace-pre-wrap text-foreground [overflow-wrap:anywhere]\">{typeof invocation.result === \"string\" ? invocation.result : JSON.stringify(invocation.result, null, 2)}</pre>\n </section>\n )}\n </div>\n );\n}\n", "export function ExpandIcon() {\n return <svg aria-hidden fill=\"none\" height=\"14\" stroke=\"currentColor\" strokeWidth=\"1.7\" viewBox=\"0 0 24 24\" width=\"14\">\n <path d=\"M9 3H3v6M15 3h6v6M3 15v6h6M21 15v6h-6\" />\n </svg>;\n}\n", "import { ACTOR_PROGRAMS_STATE_ID, ACTOR_INVOCATIONS_STATE_ID, ACTOR_STATE_ID } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\n\nexport const actorProgramsRevision = (runView: unknown): string => {\n const view = runViewFrom(runView);\n const programActors = new Set(view?.pluginStates.filter((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID && entry.scope.kind === \"actor\")\n .map((entry) => entry.scope.kind === \"actor\" ? entry.scope.actorId : \"\") ?? []);\n return JSON.stringify({\n actors: view?.actors.filter((actor) => programActors.has(actor.id)).map((actor) => [actor.id, actor.handle, actor.lifecycle?.kind === \"stopped\"]).sort(([left], [right]) => String(left).localeCompare(String(right))) ?? [],\n states: (view?.pluginStates ?? [])\n .filter((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID || entry.pluginId === ACTOR_INVOCATIONS_STATE_ID\n || entry.pluginId === ACTOR_STATE_ID && entry.scope.kind === \"actor\" && programActors.has(entry.scope.actorId))\n .map((entry) => [`${entry.pluginId}:${entry.scope.kind === \"actor\" ? entry.scope.actorId : \"run\"}`, entry.state])\n .sort(([left], [right]) => String(left).localeCompare(String(right))),\n });\n};\n", "import type { ActorProgramsApi, RunApp, RunAppInvocation } from \"./api\";\n\ntype InvocationTarget = { invocationId: string } & (\n | { kind: \"app\"; appId: string }\n | { kind: \"function\"; actorHandle: string }\n);\n\nexport const activeActorInvocations = (apps: readonly RunApp[], includeFunctions = true): InvocationTarget[] => {\n const appIds = new Set(apps.map((app) => app.id));\n const active = new Map<string, InvocationTarget>();\n for (const app of apps) for (const invocation of app.invocations) {\n if (invocation.status === \"queued\" || invocation.status === \"running\") {\n if (!includeFunctions && !appIds.has(invocation.appId)) continue;\n active.set(`${invocation.actorId}/${invocation.id}`, appIds.has(invocation.appId)\n ? { kind: \"app\", appId: invocation.appId, invocationId: invocation.id }\n : { kind: \"function\", actorHandle: invocation.actorHandle, invocationId: invocation.id });\n }\n }\n return [...active.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([, target]) => target);\n};\n\nexport const readActorInvocation = (\n api: ActorProgramsApi,\n runId: string,\n target: InvocationTarget,\n signal?: AbortSignal,\n): Promise<RunAppInvocation> => target.kind === \"app\"\n ? api.invocation(runId, target.appId, target.invocationId, signal)\n : api.functionInvocation(runId, target.actorHandle, target.invocationId, signal);\n\nexport const invocationTime = (invocation: RunAppInvocation): number => {\n const raw = invocation.status === \"queued\"\n ? invocation.createdAt\n : invocation.status === \"running\"\n ? invocation.startedAt\n : invocation.finishedAt;\n const parsed = Date.parse(raw);\n return Number.isNaN(parsed) ? 0 : parsed;\n};\n\nexport const latestInvocation = (app: RunApp): RunAppInvocation | undefined =>\n app.invocations.reduce<RunAppInvocation | undefined>((latest, invocation) =>\n !latest || invocationTime(invocation) >= invocationTime(latest) ? invocation : latest, undefined);\n", "import { createContext, useContext } from \"react\";\nimport type { ActorProgramsApi, ActorProgramsListing, RunAppInvocation } from \"./api\";\nimport type { JsonValue } from \"./bridge\";\n\nexport interface ActorProgramsContextValue {\n api: ActorProgramsApi;\n error: string | undefined;\n fullscreenAppId: string | undefined;\n listing: ActorProgramsListing | undefined;\n openFullscreen: (appId: string) => void;\n closeFullscreen: () => void;\n refresh: () => Promise<void>;\n invoke: (\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n ) => Promise<RunAppInvocation>;\n runId: string;\n}\n\nexport const ActorProgramsContext = createContext<ActorProgramsContextValue | undefined>(undefined);\nexport const useOptionalActorPrograms = () => useContext(ActorProgramsContext);\n\nexport const useActorPrograms = (): ActorProgramsContextValue => {\n const value = useOptionalActorPrograms();\n if (!value) throw new Error(\"Der Actor-Programm-Provider ist nicht aktiv\");\n return value;\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/input-bridge\", \"hostInputEnabled\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/input-bridge\", \"isRunPanelKeyboardMessage\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/input-bridge\", \"relayFrameInput\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/theme\", \"useResolvedTheme\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/api\", \"sendActorMessage\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/http/contracts\", \"actorByHandle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/actor-conversation\", \"actorChatMessages\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/chat-target\", \"programChatNotice\");\n", "import { actorByHandle } from \"@ragents/engine/src/http/contracts\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport type { ChatSnapshot } from \"@ragents/web/actor-programs/client-ui/contracts\";\nimport { actorChatMessages } from \"@ragents/web/actor-conversation\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport { programChatNotice } from \"@ragents/web/chat/chat-target\";\n\nexport const resolveChatActor = (session: SessionContext, target: string) => {\n const view = runViewFrom(session.runView);\n if (!view || view.id !== session.session.id) throw new Error(\"Die Run-Ansicht f\u00FCr diesen Chat ist noch nicht verf\u00FCgbar\");\n const actor = target === \"primary\"\n ? view.actors.find((entry) => entry.id === view.primaryActorId)\n : actorByHandle(view.actors, target);\n if (!actor || actor.kind === \"human\") {\n const names = view.actors.filter((entry) => entry.kind !== \"human\").map((entry) => `@${entry.handle}`).join(\", \");\n throw new Error(`Das Chat-Ziel ist nicht verf\u00FCgbar. Erlaubt sind primary und: ${names || \"noch keine Actors\"}`);\n }\n return { view, actor };\n};\n\nexport const chatSnapshotOf = (session: SessionContext, target: string): ChatSnapshot => {\n try {\n const { view, actor } = resolveChatActor(session, target);\n const primary = actor.id === view.primaryActorId;\n const error = actor.kind === \"script\" ? programChatNotice : session.conversationError ?? (!session.connected\n ? \"Die Verbindung zum Run ist unterbrochen\"\n : actor.lifecycle?.kind === \"stopped\" ? `@${actor.handle} gestoppt: ${actor.lifecycle.reason}. Er nimmt keine Eingaben an, bis er neu gestartet wird` : undefined);\n return {\n owner: actor.id,\n messages: actorChatMessages(view, actor, session.messages, session.actorConversations?.[actor.id]),\n running: primary ? session.running : actor.lifecycle?.kind === \"running\",\n ...(actor.kind === \"script\" ? { readOnly: true } : {}),\n ...(error ? { error } : {}),\n };\n } catch (error) {\n return { messages: [], running: false, error: error instanceof Error ? error.message : String(error) };\n }\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/useAttachmentCapabilities\", \"getAttachmentCapabilities\");\n", "import { hostInputEnabled, isRunPanelKeyboardMessage, relayFrameInput } from \"@ragents/web/run-panel/input-bridge\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { cn } from \"@ragents/web/ui\";\nimport { useResolvedTheme } from \"@ragents/web/theme\";\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport type { RunApp, RunAppInvocation, ActorProgramsApi } from \"./api\";\nimport { latestInvocation } from \"./invocations\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport { sendActorMessage } from \"@ragents/web/api\";\nimport { chatSnapshotOf, resolveChatActor } from \"./chat-state\";\nimport { getAttachmentCapabilities } from \"@ragents/web/chat/useAttachmentCapabilities\";\nimport type { ChatSnapshot } from \"@ragents/web/actor-programs/client-ui/contracts\";\nimport {\n RUN_APP_BRIDGE_VERSION,\n RUN_APP_CHAT_ACK,\n RUN_APP_CHAT_SEND,\n RUN_APP_CHAT_STATE,\n RUN_APP_CHAT_UNWATCH,\n RUN_APP_CHAT_WATCH,\n RUN_APP_CONNECTED,\n RUN_APP_ERROR,\n RUN_APP_FRAME_READY,\n RUN_APP_GET_STATE,\n RUN_APP_INVOCATION,\n RUN_APP_READY,\n RUN_APP_STATE,\n RUN_APP_THEME,\n validateRunAppBridgeRequest,\n type JsonValue,\n type RunAppInvokeRequest,\n} from \"./bridge\";\n\ninterface ActorViewFrameProps {\n api: ActorProgramsApi;\n app: RunApp;\n invoke: (\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n ) => Promise<RunAppInvocation>;\n pendingConfirmationInvocationId?: string;\n presentation: \"embedded\" | \"fullscreen\" | \"tiled\";\n runId: string;\n session: SessionContext;\n}\n\nconst ACTIVE_STATUSES = new Set([\"queued\", \"running\"]);\nconst REQUEST_ID_HISTORY_LIMIT = 512;\n\nconst invocationSignature = (invocation: RunAppInvocation): string => JSON.stringify(invocation);\n\nconst markTones: Record<string, string> = {\n success: \"bg-success\",\n running: \"bg-primary shadow-[0_0_0_4px_color-mix(in_srgb,var(--primary)_12%,transparent)] animate-fade-pulse [animation-duration:1.2s] motion-reduce:animate-none\",\n confirm: \"bg-warning\",\n error: \"bg-destructive\",\n};\n\nexport function ActorViewFrame({\n api,\n app,\n invoke,\n pendingConfirmationInvocationId,\n presentation,\n runId,\n session,\n}: ActorViewFrameProps) {\n const access = useAccess();\n const theme = useResolvedTheme();\n const themeRef = useRef(theme);\n themeRef.current = theme;\n const writableRef = useRef(access.can(\"runs.write\"));\n writableRef.current = access.can(\"runs.write\");\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const portRef = useRef<MessagePort | undefined>(undefined);\n const bridgeGenerationRef = useRef(0);\n const bridgeConnectedRef = useRef(false);\n const appRef = useRef(app);\n const sessionRef = useRef(session);\n sessionRef.current = session;\n const watchedChats = useRef(new Map<string, string>());\n const chatCapabilities = useRef(new Map<string, { result?: Pick<ChatSnapshot, \"attachmentCapabilities\" | \"attachmentCapabilitiesError\">; pending: Promise<Pick<ChatSnapshot, \"attachmentCapabilities\" | \"attachmentCapabilitiesError\">> }>());\n const recentRequestIdsRef = useRef(new Set<string>());\n const sentStateRef = useRef(\"\");\n const sentInvocationsRef = useRef(new Map<string, string>());\n const [bridgeReady, setBridgeReady] = useState(false);\n const [frameError, setFrameError] = useState<string>();\n const [actionError, setActionError] = useState<string>();\n const [submitting, setSubmitting] = useState<string[]>([]);\n appRef.current = app;\n const frameUrl = useMemo(() => api.frameUrl(runId, app.id, app.revision), [api, app.id, app.revision, runId]);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- a fresh token is minted per frame url on purpose\n const bridgeToken = useMemo(() => crypto.randomUUID().replaceAll(\"-\", \"\"), [frameUrl]);\n\n const closeBridge = useCallback(() => {\n bridgeGenerationRef.current += 1;\n bridgeConnectedRef.current = false;\n portRef.current?.close();\n portRef.current = undefined;\n watchedChats.current.clear();\n chatCapabilities.current.clear();\n setBridgeReady(false);\n setSubmitting([]);\n }, []);\n\n const sendChatState = useCallback((port: MessagePort, actor: string, requestId?: string) => {\n const generation = bridgeGenerationRef.current;\n const publish = (capabilities: Pick<ChatSnapshot, \"attachmentCapabilities\" | \"attachmentCapabilitiesError\">) => {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current || !watchedChats.current.has(actor)) return;\n const chat = chatSnapshotOf(sessionRef.current, actor);\n const snapshot = { ...chat, ...capabilities, readOnly: chat.readOnly === true || !writableRef.current };\n const signature = JSON.stringify(snapshot);\n if (requestId === undefined && watchedChats.current.get(actor) === signature) return;\n watchedChats.current.set(actor, signature);\n port.postMessage({ type: RUN_APP_CHAT_STATE, version: RUN_APP_BRIDGE_VERSION, actor, snapshot, ...(requestId ? { requestId } : {}) });\n };\n try {\n const current = sessionRef.current;\n const target = resolveChatActor(current, actor).actor;\n const key = JSON.stringify([current.session.id, target.id, target.execution?.driver]);\n let entry = chatCapabilities.current.get(key);\n if (!entry) {\n const pending = getAttachmentCapabilities(current.session.id, target.id).then(\n (attachmentCapabilities) => ({ attachmentCapabilities }),\n (cause: unknown) => ({ attachmentCapabilitiesError: cause instanceof Error ? cause.message : String(cause) }),\n );\n entry = { pending };\n chatCapabilities.current.set(key, entry);\n const saved = entry;\n void pending.then((result) => { saved.result = result; });\n }\n publish(entry.result ?? { attachmentCapabilitiesError: \"Modellf\u00E4higkeiten werden gepr\u00FCft ...\" });\n if (!entry.result) void entry.pending.then(publish);\n } catch (cause) {\n publish({ attachmentCapabilitiesError: cause instanceof Error ? cause.message : String(cause) });\n }\n }, []);\n\n const postError = useCallback((port: MessagePort, requestId: string | undefined, message: string) => {\n port.postMessage({\n type: RUN_APP_ERROR,\n version: RUN_APP_BRIDGE_VERSION,\n ...(requestId ? { requestId } : {}),\n message,\n });\n }, []);\n\n const executeRequest = useCallback(async (\n request: RunAppInvokeRequest,\n port: MessagePort,\n generation: number,\n installedApp: Pick<RunApp, \"id\" | \"revision\">,\n ) => {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n setActionError(undefined);\n setSubmitting((current) => [...current, request.requestId]);\n try {\n if (!writableRef.current) throw new Error(\"Du hast Lesezugriff auf diese Actor-Ansicht.\");\n const invocation = await invoke(\n installedApp.id,\n installedApp.revision,\n request.actionId,\n request.requestId,\n request.input,\n );\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n sentInvocationsRef.current.set(invocation.id, invocationSignature(invocation));\n port.postMessage({\n type: RUN_APP_INVOCATION,\n version: RUN_APP_BRIDGE_VERSION,\n requestId: request.requestId,\n invocation,\n });\n } catch (caught) {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n const message = caught instanceof Error ? caught.message : String(caught);\n setActionError(message);\n postError(port, request.requestId, message);\n } finally {\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n setSubmitting((current) => current.filter((requestId) => requestId !== request.requestId));\n }\n }\n }, [invoke, postError]);\n\n const sendState = useCallback((port: MessagePort, requestId?: string) => {\n const current = appRef.current;\n port.postMessage({\n type: RUN_APP_STATE,\n version: RUN_APP_BRIDGE_VERSION,\n ...(requestId ? { requestId } : {}),\n state: current.state ?? null,\n });\n }, []);\n\n const handlePortMessage = useCallback((\n value: unknown,\n port: MessagePort,\n generation: number,\n installedApp: RunApp,\n ) => {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n if (relayFrameInput(window, value, (message) => {\n if (generation === bridgeGenerationRef.current && port === portRef.current) port.postMessage(message);\n })) return;\n const message = value as { type?: unknown; version?: unknown } | null;\n if (message?.type === RUN_APP_CONNECTED && message.version === RUN_APP_BRIDGE_VERSION) {\n bridgeConnectedRef.current = true;\n setFrameError(undefined);\n setBridgeReady(true);\n return;\n }\n const validation = validateRunAppBridgeRequest(value);\n if (!validation.ok) {\n postError(port, validation.requestId, validation.error);\n return;\n }\n const { request } = validation;\n if (recentRequestIdsRef.current.has(request.requestId)) {\n postError(port, request.requestId, \"Diese requestId wurde bereits verwendet\");\n return;\n }\n recentRequestIdsRef.current.add(request.requestId);\n if (recentRequestIdsRef.current.size > REQUEST_ID_HISTORY_LIMIT) {\n const oldest = recentRequestIdsRef.current.values().next().value;\n if (oldest !== undefined) recentRequestIdsRef.current.delete(oldest);\n }\n if (request.type === RUN_APP_CHAT_WATCH) {\n watchedChats.current.set(request.actor, \"\");\n sendChatState(port, request.actor, request.requestId);\n return;\n }\n if (request.type === RUN_APP_CHAT_UNWATCH) {\n watchedChats.current.delete(request.actor);\n port.postMessage({ type: RUN_APP_CHAT_ACK, version: RUN_APP_BRIDGE_VERSION, requestId: request.requestId });\n return;\n }\n if (request.type === RUN_APP_CHAT_SEND) {\n void (async () => {\n try {\n if (!writableRef.current) throw new Error(\"Du hast Lesezugriff auf diesen Chat.\");\n const current = sessionRef.current;\n const snapshot = chatSnapshotOf(current, request.actor);\n if (snapshot.error) throw new Error(snapshot.error);\n const { actor } = resolveChatActor(current, request.actor);\n await sendActorMessage(current.session.id, actor.id, request.text, request.attachments);\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n port.postMessage({ type: RUN_APP_CHAT_ACK, version: RUN_APP_BRIDGE_VERSION, requestId: request.requestId });\n }\n } catch (error) {\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n postError(port, request.requestId, error instanceof Error ? error.message : String(error));\n }\n }\n })();\n return;\n }\n if (request.type === RUN_APP_GET_STATE) {\n sendState(port, request.requestId);\n return;\n }\n const action = installedApp.actions.find((entry) => entry.id === request.actionId);\n if (!action) {\n postError(port, request.requestId, \"Die angeforderte App-Aktion ist nicht installiert\");\n return;\n }\n void executeRequest(request, port, generation, installedApp);\n }, [executeRequest, postError, sendChatState, sendState]);\n\n const attachBridge = useCallback((port: MessagePort, installedApp: RunApp) => {\n if (portRef.current) {\n port.close();\n return;\n }\n closeBridge();\n const generation = bridgeGenerationRef.current;\n portRef.current = port;\n port.onmessage = (event) => handlePortMessage(event.data, port, generation, installedApp);\n port.onmessageerror = () => {\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n postError(port, undefined, \"Die App hat eine unlesbare Nachricht gesendet\");\n }\n };\n port.start();\n recentRequestIdsRef.current = new Set();\n sentStateRef.current = JSON.stringify(installedApp.state ?? null);\n sentInvocationsRef.current = new Map(installedApp.invocations.map((invocation) => [\n invocation.id,\n invocationSignature(invocation),\n ]));\n port.postMessage({\n type: RUN_APP_READY,\n version: RUN_APP_BRIDGE_VERSION,\n theme: themeRef.current,\n hostInput: hostInputEnabled(window),\n app: {\n id: installedApp.id,\n actorId: installedApp.actorId,\n actorHandle: installedApp.actorHandle,\n title: installedApp.title,\n description: installedApp.description,\n actions: installedApp.actions,\n },\n actor: { id: installedApp.actorId, handle: installedApp.actorHandle },\n state: installedApp.state ?? null,\n invocations: installedApp.invocations,\n });\n setFrameError(undefined);\n }, [closeBridge, handlePortMessage, postError]);\n\n useLayoutEffect(() => {\n const frame = iframeRef.current;\n if (!frame) return;\n closeBridge();\n setActionError(undefined);\n setFrameError(undefined);\n const installedApp = appRef.current;\n let initialLoaded = false;\n let pendingPort: MessagePort | undefined;\n const connect = (port: MessagePort) => {\n if (initialLoaded) attachBridge(port, installedApp);\n else pendingPort = port;\n };\n const receiveReady = (event: MessageEvent<unknown>) => {\n const data = event.data as { type?: unknown; version?: unknown; token?: unknown; keyboard?: unknown } | null;\n if (event.source === frame.contentWindow && event.origin === \"null\"\n && data?.type === \"ragents.app.escape\" && data.version === RUN_APP_BRIDGE_VERSION\n && data.token === bridgeToken) {\n window.dispatchEvent(new KeyboardEvent(\"keydown\", { ...(isRunPanelKeyboardMessage(data.keyboard) ? data.keyboard.event : { key: \"Escape\" }), bubbles: true, cancelable: true }));\n return;\n }\n if (event.source !== frame.contentWindow\n || event.origin !== \"null\"\n || data?.type !== RUN_APP_FRAME_READY\n || data.version !== RUN_APP_BRIDGE_VERSION\n || data.token !== bridgeToken\n || event.ports.length !== 1) return;\n if (pendingPort || portRef.current) {\n event.ports[0]!.close();\n return;\n }\n connect(event.ports[0]!);\n };\n const handleLoad = () => {\n if (!initialLoaded) {\n initialLoaded = true;\n if (pendingPort) {\n const port = pendingPort;\n pendingPort = undefined;\n attachBridge(port, installedApp);\n }\n return;\n }\n pendingPort?.close();\n pendingPort = undefined;\n closeBridge();\n setFrameError(\"Die App hat ihre installierte Seite verlassen und wurde getrennt.\");\n };\n window.addEventListener(\"message\", receiveReady);\n frame.addEventListener(\"load\", handleLoad);\n frame.src = `${frameUrl}#ragentsBridge=${encodeURIComponent(bridgeToken)}`;\n const timeout = window.setTimeout(() => {\n if (!bridgeConnectedRef.current) setFrameError(\"Die App hat keine g\u00FCltige Host-Bridge ge\u00F6ffnet.\");\n }, 5_000);\n return () => {\n window.clearTimeout(timeout);\n window.removeEventListener(\"message\", receiveReady);\n frame.removeEventListener(\"load\", handleLoad);\n pendingPort?.close();\n closeBridge();\n };\n }, [attachBridge, bridgeToken, closeBridge, frameUrl]);\n\n useEffect(() => {\n if (!bridgeReady) return;\n portRef.current?.postMessage({ type: RUN_APP_THEME, version: RUN_APP_BRIDGE_VERSION, theme });\n }, [bridgeReady, theme]);\n\n useEffect(() => {\n if (!bridgeReady) return;\n const stateSignature = JSON.stringify(app.state ?? null);\n if (stateSignature !== sentStateRef.current) {\n sentStateRef.current = stateSignature;\n const port = portRef.current;\n if (port) sendState(port);\n }\n app.invocations.forEach((invocation) => {\n const signature = invocationSignature(invocation);\n if (sentInvocationsRef.current.get(invocation.id) === signature) return;\n sentInvocationsRef.current.set(invocation.id, signature);\n portRef.current?.postMessage({\n type: RUN_APP_INVOCATION,\n version: RUN_APP_BRIDGE_VERSION,\n invocation,\n });\n });\n }, [app.invocations, app.state, bridgeReady, sendState]);\n\n useEffect(() => {\n if (!bridgeReady || !portRef.current) return;\n for (const actor of watchedChats.current.keys()) sendChatState(portRef.current, actor);\n }, [bridgeReady, sendChatState, session]);\n\n const latest = latestInvocation(app);\n const active = app.invocations.filter((invocation) => ACTIVE_STATUSES.has(invocation.status));\n const confirmationInvocation = active.find((invocation) => invocation.id === pendingConfirmationInvocationId);\n const confirmationAction = confirmationInvocation\n ? app.actions.find((action) => action.id === confirmationInvocation.actionId)\n : undefined;\n const status = frameError\n ? { tone: \"error\", title: \"App getrennt\", detail: frameError }\n : submitting.length > 0\n ? { tone: \"running\", title: \"Aktion wird gestartet\", detail: `${submitting.length} Anfrage(n)` }\n : confirmationAction\n ? { tone: \"confirm\", title: \"Wartet auf Deine Best\u00E4tigung\", detail: confirmationAction.label }\n : active.length > 0\n ? { tone: \"running\", title: \"Aktion l\u00E4uft\", detail: active.map((invocation) =>\n app.actions.find((action) => action.id === invocation.actionId)?.label.trim()\n || (access.can(\"runs.inspect\") ? invocation.actionId : \"\")).filter(Boolean).join(\", \") }\n : actionError\n ? { tone: \"error\", title: \"Aktion fehlgeschlagen\", detail: actionError }\n : latest?.status === \"failed\"\n ? { tone: \"error\", title: \"Letzte Aktion fehlgeschlagen\", detail: latest.error }\n : latest?.status === \"cancelled\"\n ? { tone: \"muted\", title: \"Letzte Aktion abgebrochen\", detail: latest.actionId }\n : latest?.status === \"succeeded\"\n ? {\n tone: \"success\",\n title: \"Letzte Aktion abgeschlossen\",\n detail: latest.output.at(-1) ?? latest.actionId,\n }\n : bridgeReady\n ? undefined\n : { tone: \"muted\", title: \"App wird geladen\", detail: \"Bridge noch nicht verbunden\" };\n\n const visibleStatus = status && (presentation === \"fullscreen\" ? status.tone === \"error\" : status.tone !== \"success\") ? status : undefined;\n\n const compact = presentation !== \"fullscreen\";\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <div aria-live=\"polite\" role=\"status\"\n className={cn(\"grid min-w-0 items-center overflow-hidden text-xs text-muted-foreground\",\n compact\n ? \"order-1 h-7 flex-[0_0_28px] grid-cols-[auto_minmax(0,1fr)] gap-1.5 px-workspace-inset py-1\"\n : \"h-[31px] flex-[0_0_31px] grid-cols-[8px_auto_minmax(0,1fr)] gap-[7px] border-b border-border-soft px-workspace-inset py-[5px]\")}>\n {visibleStatus && <>\n {!compact && <span className={cn(\"size-[7px] rounded-full bg-muted-foreground/55\", markTones[visibleStatus.tone])} />}\n <strong className={cn(\"font-semibold whitespace-nowrap text-foreground\", compact ? \"text-[0.63rem]\" : \"text-[0.7rem]\")}>{visibleStatus.title}</strong>\n <span className=\"truncate\" title={visibleStatus.detail}>{visibleStatus.detail}</span>\n </>}\n </div>\n <div className={cn(\"relative flex min-h-0 flex-1 overflow-hidden\", compact ? \"bg-transparent\" : \"bg-background\")}>\n <iframe\n allow=\"camera 'none'; geolocation 'none'; microphone 'none'\"\n className={cn(\"absolute inset-0 h-full w-full min-h-0 min-w-0 border-0\", compact ? \"bg-transparent\" : \"bg-background\")}\n ref={iframeRef}\n referrerPolicy=\"no-referrer\"\n sandbox=\"allow-scripts allow-forms allow-downloads\"\n aria-label={app.title}\n title=\"\"\n />\n </div>\n </div>\n );\n}\n", "import { useRef } from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport { Button, Dialog, DialogContent, DialogTitle } from \"@ragents/web/ui\";\nimport { HostConfirmation, pendingConfirmationFor, actorProgramApps, useActorPrograms } from \"./AppsPanel\";\nimport { ActorViewFrame } from \"./ActorViewFrame\";\n\nexport function FullscreenHost({ session }: { session: SessionContext }) {\n const { api, closeFullscreen, error, fullscreenAppId, invoke, listing, runId } = useActorPrograms();\n const closeRef = useRef<HTMLButtonElement>(null);\n if (!fullscreenAppId) return null;\n const entry = actorProgramApps(session).find((candidate) => candidate.id === fullscreenAppId && candidate.app.visible !== false);\n if (!entry) return null;\n const app = listing?.apps.find((candidate) => candidate.id === fullscreenAppId);\n const title = entry.title;\n const confirmation = app ? pendingConfirmationFor(session, app) : undefined;\n return <Dialog key={`${runId}:${fullscreenAppId}`} open onOpenChange={(open) => { if (!open) closeFullscreen(); }}>\n <DialogContent className=\"h-[calc(100%-2*clamp(16px,2vw,24px))] w-[calc(100%-2*clamp(16px,2vw,24px))] gap-0 bg-background p-0\" initialFocus={closeRef} scope=\"surface\" showCloseButton={false} size=\"full\">\n <header className=\"flex flex-none items-center gap-3 border-b border-border bg-card py-2 pr-3 pl-4\">\n <DialogTitle className=\"min-w-0 flex-1 truncate text-[0.9rem]\" render={<h2 />}>{title}</DialogTitle>\n <Button aria-label={`${title} Vollansicht schlie\u00DFen`} className=\"rounded-full\" onClick={closeFullscreen} ref={closeRef} size=\"icon\" title={`${title} Vollansicht schlie\u00DFen`} variant=\"outline\"><XIcon /></Button>\n </header>\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden [&>[data-slot=host-confirmation]]:max-h-[65%] [&>[data-slot=host-confirmation]]:flex-[0_1_auto] [&>[data-slot=host-confirmation]]:overflow-auto\">\n {confirmation && <HostConfirmation action={confirmation} key={confirmation.id} session={session} />}\n {app ? <ActorViewFrame api={api} app={app} invoke={invoke} pendingConfirmationInvocationId={confirmation?.parameters.invocationId}\n presentation=\"fullscreen\" runId={runId} session={session} />\n : <p className=\"flex flex-1 items-center justify-center gap-2 text-[0.7rem] text-muted-foreground\" role={error ? \"alert\" : \"status\"}>{error ?? \"Actor-Ansicht wird geladen\"}</p>}\n </div>\n </DialogContent>\n </Dialog>;\n}\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { Spinner } from \"@ragents/web/ui\";\nimport { isRecord } from \"@ragents/web/lib/guards\";\nimport { runActorFrom } from \"@ragents/web/run-view\";\nimport type {\n SurfaceElementContext,\n SurfaceElementDefinition,\n CardSectionContext,\n SessionContext,\n} from \"@ragents/web/PluginRegistry\";\nimport { HostConfirmation, pendingConfirmationFor, actorProgramApps, useActorPrograms } from \"./AppsPanel\";\nimport { ActorViewFrame } from \"./ActorViewFrame\";\nimport { FunctionForm } from \"./FunctionForm\";\n\nexport function ActorProgramToolCardSection({ actor, session }: CardSectionContext) {\n const inspect = useAccess().can(\"runs.inspect\");\n const { listing } = useActorPrograms();\n const owner = runActorFrom(actor);\n if (!inspect || owner.lifecycle?.kind === \"stopped\") return null;\n const tools = listing?.tools.filter((tool) => tool.card && tool.actorId === owner.id) ?? [];\n if (tools.length === 0) return null;\n return (\n <section className=\"grid min-w-0 gap-[9px]\">\n {tools.map((tool) => (\n <article aria-label={tool.name} className=\"min-w-0\" key={`${session.session.id}:${tool.actorId}:${tool.functionId}:${tool.revision}`}>\n <strong>{tool.name}</strong>\n <FunctionForm session={session} tool={tool} />\n </article>\n ))}\n </section>\n );\n}\n\nexport const actorProgramSurfaceElements = (session: SessionContext): readonly SurfaceElementDefinition[] =>\n actorProgramApps(session).flatMap((module): SurfaceElementDefinition[] => {\n const rawPlacements = module.app.placements;\n const placement = Array.isArray(rawPlacements) ? rawPlacements.find((entry) => isRecord(entry) && entry.kind === \"canvas\") : undefined;\n const surface = isRecord(placement) ? placement : undefined;\n if (surface && typeof surface.anchorActorId !== \"string\") {\n throw new Error(`Die Fl\u00E4chenplatzierung der Actor-Ansicht ${module.title} ist ung\u00FCltig`);\n }\n if (surface && surface.anchorActorId !== module.actorId) throw new Error(`Die Ansicht ${module.title} geh\u00F6rt zu @${module.actorHandle}.`);\n return [{\n id: module.id,\n title: module.title,\n visible: module.app.visible !== false,\n anchorActorId: module.actorId,\n data: { actorId: module.actorId, actorHandle: module.actorHandle },\n entity: { type: \"run-app\", id: module.id },\n }];\n });\n\nexport function ActorProgramSurfaceElement({ definition, session }: SurfaceElementContext) {\n const { api, invoke, listing, runId } = useActorPrograms();\n const app = listing?.apps.find((candidate) => candidate.id === definition.id);\n const confirmation = app ? pendingConfirmationFor(session, app) : undefined;\n const title = definition.title ?? definition.id;\n const frame = app ? (\n <ActorViewFrame\n api={api}\n app={app}\n invoke={invoke}\n pendingConfirmationInvocationId={confirmation?.parameters.invocationId}\n presentation=\"tiled\"\n runId={runId}\n session={session}\n />\n ) : (\n <div className=\"flex flex-1 items-center justify-center gap-2 text-[0.7rem] text-muted-foreground\">\n <Spinner aria-hidden aria-label={undefined} role={undefined} />\n <span>Actor-Ansicht wird geladen</span>\n </div>\n );\n return (\n <article aria-label={title} className=\"flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden\">\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden [&>[data-slot=host-confirmation]]:max-h-[65%] [&>[data-slot=host-confirmation]]:flex-[0_1_auto] [&>[data-slot=host-confirmation]]:overflow-auto\">\n {confirmation && <HostConfirmation action={confirmation} key={confirmation.id} session={session} />}\n {frame}\n </div>\n </article>\n );\n}\n", "import {\n pluginRoutePrefixFrom,\n type SessionProviderProps,\n type WebPlugin,\n type WebPluginDescriptor,\n} from \"@ragents/web/PluginRegistry\";\nimport { createActorProgramsApi } from \"./api\";\nimport {\n RUN_TOOLS_TAB_ID,\n ActorProgramsHeader,\n ActorProgramsProvider,\n ToolsBadge,\n ToolsPanel,\n} from \"./AppsPanel\";\nimport { FullscreenHost } from \"./FullscreenHost\";\nimport {\n ActorProgramSurfaceElement,\n ActorProgramToolCardSection,\n actorProgramSurfaceElements,\n} from \"./EmbeddedApps\";\n\nexport const ACTOR_PROGRAMS_PLUGIN_ID = \"ragents.actor-programs\";\n\nfunction IconTools() {\n return (\n <svg aria-hidden fill=\"none\" height=\"15\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.7\" viewBox=\"0 0 24 24\" width=\"15\">\n <path d=\"M14.5 6.5 17.5 3.5l3 3-3 3\" />\n <path d=\"m9.5 17.5-3 3-3-3 3-3\" />\n <path d=\"M13 5H9a4 4 0 0 0-4 4v5.5M11 19h4a4 4 0 0 0 4-4V9.5\" />\n </svg>\n );\n}\n\nconst configuredPlugin = (descriptor: WebPluginDescriptor, routePrefix: string): WebPlugin => {\n const api = createActorProgramsApi(routePrefix);\n\n function Provider({ children, session }: SessionProviderProps) {\n return (\n <ActorProgramsProvider api={api} session={session}>\n {children}\n <FullscreenHost session={session} />\n </ActorProgramsProvider>\n );\n }\n\n return {\n ...descriptor,\n needsRunView: true,\n SessionProvider: Provider,\n sessionHeaders: [{\n id: \"ragents.actor-programs.quick-list\",\n placement: \"surface\",\n order: 250,\n Header: ActorProgramsHeader,\n }],\n cardSections: [{\n id: \"ragents.actor-programs.tools\",\n order: 400,\n Section: ActorProgramToolCardSection,\n }],\n surfaceElements: [{\n id: \"ragents.actor-programs.apps\",\n order: 400,\n select: actorProgramSurfaceElements,\n Element: ActorProgramSurfaceElement,\n }],\n workspaceTabs: [\n {\n readRight: \"runs.inspect\",\n id: RUN_TOOLS_TAB_ID,\n label: \"Funktionen\",\n order: 251,\n Icon: IconTools,\n Panel: ToolsPanel,\n Badge: ToolsBadge,\n },\n ],\n };\n};\n\nconst descriptor: WebPluginDescriptor = { id: ACTOR_PROGRAMS_PLUGIN_ID };\n\nexport const webPlugin: WebPlugin = {\n ...descriptor,\n activate: (config) => configuredPlugin(descriptor, pluginRoutePrefixFrom(descriptor.id, config)),\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["read", "specifier", "name", "module", "PluginRegistry_pluginRoutePrefixFrom_default", "read", "PluginRegistry_useSurfaceController_default", "read", "guards_isRecord_default", "read", "rpc_rpc_default", "read", "access_token_withAccessToken_default", "read", "contract_ACTOR_INVOCATIONS_STATE_ID_default", "read", "contract_ACTOR_PROGRAMS_STATE_ID_default", "read", "contract_ACTOR_STATE_ID_default", "read", "contract_actorProgramContracts_default", "read", "actorFunctionParameterTypes", "MAX_CHAT_ATTACHMENTS", "MAX_CHAT_ATTACHMENT_BYTES", "MAX_CHAT_REQUEST_BYTES", "chatAttachmentMediaType", "name", "mediaType", "explicit", "parseChatAttachments", "value", "total", "entry", "index", "data", "normalizedType", "padding", "RUN_APP_BRIDGE_VERSION", "RUN_APP_FRAME_READY", "RUN_APP_CONNECTED", "RUN_APP_READY", "RUN_APP_THEME", "RUN_APP_INVOKE", "RUN_APP_GET_STATE", "RUN_APP_STATE", "RUN_APP_INVOCATION", "RUN_APP_ERROR", "RUN_APP_CHAT_WATCH", "RUN_APP_CHAT_UNWATCH", "RUN_APP_CHAT_SEND", "RUN_APP_CHAT_STATE", "RUN_APP_CHAT_ACK", "ID_PATTERN", "MAX_INPUT_LENGTH", "MAX_DEPTH", "isJsonValue", "value", "depth", "entry", "guards_isRecord_default", "key", "requestIdFrom", "inputWithinLimit", "validateRunAppBridgeRequest", "requestId", "common", "attachments", "parseChatAttachments", "cause", "ID_PATTERN", "VIEW_ID_PATTERN", "HASH_PATTERN", "PARAMETER_TYPES", "actorFunctionParameterTypes", "requiredString", "value", "field", "optionalString", "idFrom", "id", "unique", "values", "keyOf", "label", "ids", "runAppActionFrom", "guards_isRecord_default", "runAppInvocationFrom", "line", "base", "isJsonValue", "runAppPlacementFrom", "runAppFrom", "rawPlacements", "actions", "action", "invocations", "invocation", "actionIds", "placements", "actorId", "placement", "runToolParameterFrom", "runToolTargetFrom", "runScriptToolFrom", "sourceHash", "parameter", "target", "actorProgramSourceFileFrom", "actorProgramSourceFrom", "file", "actorProgramsListingFrom", "app", "tool", "segment", "frameBase", "routePrefix", "runId", "createActorProgramsApi", "signal", "rpc_rpc_default", "contract_actorProgramContracts_default", "moduleId", "appId", "revision", "access_token_withAccessToken_default", "actionId", "requestId", "input", "invocationId", "actorHandle", "functionId", "AccessContext_useAccess_default", "read", "react_createContext_default", "read", "react_createElement_default", "read", "react_forwardRef_default", "read", "react_useCallback_default", "read", "react_useContext_default", "read", "react_useEffect_default", "read", "react_useLayoutEffect_default", "read", "react_useMemo_default", "read", "react_useRef_default", "read", "react_useState_default", "read", "toKebabCase", "string", "toLucideIconData", "iconName", "iconNode", "aliases", "toKebabCase", "toCamelCase", "string", "out", "upperNext", "ch", "toPascalCase", "string", "camelCase", "toCamelCase", "mergeClasses", "classes", "className", "index", "array", "defaultAttributes", "isDefined", "value", "buildLucideIconNode", "icon", "params", "attributeNames", "getAttributeName", "attributeName", "viewBoxWidth", "defaultAttributes", "viewBoxHeight", "aliasClassNames", "alias", "iconClassNames", "classNamesFromClassName", "className", "mergeClasses", "calculatedStrokeWidth", "attrs", "attrName", "child", "name", "children", "nextAttrs", "buildLucideIconForReact", "icon", "params", "buildLucideIconNode", "hasA11yProp", "props", "prop", "LucideContext", "react_createContext_default", "useLucideContext", "react_useContext_default", "LucideContext", "Icon", "react_forwardRef_default", "color", "size", "width", "height", "strokeWidth", "absoluteStrokeWidth", "nonScalingStroke", "className", "children", "iconNode", "icon", "rest", "ref", "contextSize", "contextStrokeWidth", "contextAbsoluteStrokeWidth", "contextNonScalingStroke", "contextColor", "contextClass", "useLucideContext", "hasAccessibleProp", "hasA11yProp", "name", "svgAttributes", "builtIconNode", "buildLucideIconForReact", "mergeClasses", "react_createElement_default", "tag", "attrs", "createLucideIcon", "iconDataOrName", "iconNode", "aliases", "iconData", "toLucideIconData", "Component", "react_forwardRef_default", "className", "props", "ref", "react_createElement_default", "Icon", "toPascalCase", "__iconData", "ArrowLeft", "createLucideIcon", "__iconData", "LayoutGrid", "createLucideIcon", "__iconData", "X", "createLucideIcon", "ui_Alert_default", "read", "ui_Badge_default", "read", "ui_Button_default", "read", "ui_Dialog_default", "read", "ui_DialogContent_default", "read", "ui_DialogTitle_default", "read", "ui_Empty_default", "read", "ui_EmptyContent_default", "read", "ui_EmptyDescription_default", "read", "ui_EmptyHeader_default", "read", "ui_EmptyMedia_default", "read", "ui_EmptyTitle_default", "read", "ui_Input_default", "read", "ui_Spinner_default", "read", "ui_Textarea_default", "read", "ui_cn_default", "read", "Toolbar_ToolbarCopy_default", "read", "Toolbar_ToolbarItem_default", "read", "Toolbar_ToolbarLabel_default", "read", "Toolbar_ToolbarText_default", "read", "askPayloadOf", "ASK_PLUGIN_ID", "answerQuestion", "QuestionCard", "run_view_runActorFrom_default", "read", "run_view_runViewFrom_default", "read", "useSurfaceEntities", "SURFACE_TILE_DRAG_TYPE", "ProgramSlotContext", "SourceCode_SourceCode_default", "read", "actorProgramSourceReference", "runView", "actorId", "entry", "run_view_runViewFrom_default", "contract_ACTOR_PROGRAMS_STATE_ID_default", "guards_isRecord_default", "program", "actorProgramViews", "view", "actor", "app", "currentActorListing", "listing", "currentViews", "activeActors", "current", "state", "contract_ACTOR_STATE_ID_default", "values", "isJsonValue", "tool", "jsx_runtime_Fragment_default", "read", "jsx_runtime_jsx_default", "read", "jsx_runtime_jsxs_default", "read", "ProgramSource", "api", "moduleId", "runId", "revision", "expandedByDefault", "expanded", "setExpanded", "react_useState_default", "state", "setState", "activePath", "setActivePath", "react_useEffect_default", "controller", "files", "file", "caught", "active", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "ui_Button_default", "jsx_runtime_Fragment_default", "ui_Spinner_default", "ui_Alert_default", "ui_cn_default", "SourceCode_SourceCode_default", "actorProgramSourceView", "view", "actorId", "program", "actorProgramSourceReference", "waitForPoll", "signal", "resolve", "reject", "timer", "abort", "invokeActorFunction", "api", "runId", "tool", "input", "changed", "invocation", "parseParameter", "parameter", "form", "raw", "value", "entry", "isJsonValue", "actorFunctionInput", "parameters", "selectClass", "FunctionForm", "session", "tool", "detail", "writable", "AccessContext_useAccess_default", "api", "refresh", "runId", "useActorPrograms", "error", "setError", "react_useState_default", "busy", "setBusy", "invocation", "setInvocation", "controllerRef", "react_useRef_default", "react_useEffect_default", "confirmation", "pendingConfirmationFor", "submit", "event", "controller", "input", "actorFunctionInput", "invokeActorFunction", "current", "caught", "status", "failure", "jsx_runtime_jsxs_default", "ui_cn_default", "jsx_runtime_jsx_default", "parameter", "ui_Textarea_default", "ui_Input_default", "ui_Button_default", "HostConfirmation", "ExpandIcon", "jsx_runtime_jsx_default", "actorProgramsRevision", "runView", "view", "run_view_runViewFrom_default", "programActors", "entry", "contract_ACTOR_PROGRAMS_STATE_ID_default", "actor", "left", "right", "contract_ACTOR_INVOCATIONS_STATE_ID_default", "contract_ACTOR_STATE_ID_default", "activeActorInvocations", "apps", "includeFunctions", "appIds", "app", "active", "invocation", "left", "right", "target", "readActorInvocation", "api", "runId", "signal", "invocationTime", "raw", "parsed", "latestInvocation", "latest", "ActorProgramsContext", "react_createContext_default", "useOptionalActorPrograms", "react_useContext_default", "useActorPrograms", "value", "RUN_TOOLS_TAB_ID", "entryIconClass", "headClass", "sectionLabelClass", "quickIconClass", "ACTIVE_STATUSES", "POLL_INTERVAL", "replaceInvocation", "listing", "invocation", "app", "exists", "entry", "ActorProgramsProvider", "api", "children", "session", "runId", "canInspect", "AccessContext_useAccess_default", "storedListing", "setListing", "react_useState_default", "react_useMemo_default", "currentActorListing", "error", "setError", "fullscreen", "setFullscreen", "visibleApps", "actorProgramApps", "fullscreenAppId", "closeFullscreen", "react_useCallback_default", "openFullscreen", "appId", "react_useEffect_default", "loadRevision", "react_useRef_default", "refresh", "revision", "next", "caught", "moduleRevision", "actorProgramsRevision", "activeInvocations", "activeActorInvocations", "activeKey", "targets", "disposed", "timer", "controller", "poll", "results", "target", "readActorInvocation", "updates", "result", "current", "update", "failed", "invoke", "actionId", "requestId", "input", "value", "slot", "candidate", "pendingConfirmationFor", "view", "actorId", "actorProgramSourceView", "jsx_runtime_jsx_default", "ActorProgramsContext", "ProgramSlotContext", "actorProgramViews", "run_view_runViewFrom_default", "invocationIds", "action", "ASK_PLUGIN_ID", "contract_ACTOR_PROGRAMS_STATE_ID_default", "HostConfirmation", "access", "busy", "setBusy", "answer", "text", "answerQuestion", "jsx_runtime_jsxs_default", "QuestionCard", "askPayloadOf", "targetLabel", "ToolsPanel", "active", "navigation", "selection", "useActorPrograms", "selectedName", "selected", "tool", "ui_Spinner_default", "ui_Empty_default", "ui_EmptyHeader_default", "ui_EmptyMedia_default", "IconTools", "ui_EmptyTitle_default", "ui_EmptyDescription_default", "ui_EmptyContent_default", "ui_Button_default", "ArrowLeft", "ui_cn_default", "FunctionForm", "ProgramSource", "fact", "ui_Alert_default", "ui_Badge_default", "IconOpen", "ActorProgramsHeader", "canArrange", "surface", "PluginRegistry_useSurfaceController_default", "stage", "useSurfaceEntities", "apps", "Toolbar_ToolbarItem_default", "event", "SURFACE_TILE_DRAG_TYPE", "LayoutGrid", "Toolbar_ToolbarCopy_default", "Toolbar_ToolbarLabel_default", "Toolbar_ToolbarText_default", "ExpandIcon", "ToolsBadge", "size", "input_bridge_hostInputEnabled_default", "read", "input_bridge_isRunPanelKeyboardMessage_default", "read", "input_bridge_relayFrameInput_default", "read", "theme_useResolvedTheme_default", "read", "api_sendActorMessage_default", "read", "contracts_actorByHandle_default", "read", "actor_conversation_actorChatMessages_default", "read", "chat_target_programChatNotice_default", "read", "resolveChatActor", "session", "target", "view", "run_view_runViewFrom_default", "actor", "entry", "contracts_actorByHandle_default", "names", "chatSnapshotOf", "primary", "error", "chat_target_programChatNotice_default", "actor_conversation_actorChatMessages_default", "useAttachmentCapabilities_getAttachmentCapabilities_default", "read", "ACTIVE_STATUSES", "REQUEST_ID_HISTORY_LIMIT", "invocationSignature", "invocation", "markTones", "ActorViewFrame", "api", "app", "invoke", "pendingConfirmationInvocationId", "presentation", "runId", "session", "access", "AccessContext_useAccess_default", "theme", "theme_useResolvedTheme_default", "themeRef", "react_useRef_default", "writableRef", "iframeRef", "portRef", "bridgeGenerationRef", "bridgeConnectedRef", "appRef", "sessionRef", "watchedChats", "chatCapabilities", "recentRequestIdsRef", "sentStateRef", "sentInvocationsRef", "bridgeReady", "setBridgeReady", "react_useState_default", "frameError", "setFrameError", "actionError", "setActionError", "submitting", "setSubmitting", "frameUrl", "react_useMemo_default", "bridgeToken", "closeBridge", "react_useCallback_default", "sendChatState", "port", "actor", "requestId", "generation", "publish", "capabilities", "chat", "chatSnapshotOf", "snapshot", "signature", "RUN_APP_CHAT_STATE", "RUN_APP_BRIDGE_VERSION", "current", "target", "resolveChatActor", "key", "entry", "pending", "useAttachmentCapabilities_getAttachmentCapabilities_default", "attachmentCapabilities", "cause", "saved", "result", "postError", "message", "RUN_APP_ERROR", "executeRequest", "request", "installedApp", "RUN_APP_INVOCATION", "caught", "sendState", "RUN_APP_STATE", "handlePortMessage", "value", "input_bridge_relayFrameInput_default", "RUN_APP_CONNECTED", "validation", "validateRunAppBridgeRequest", "oldest", "RUN_APP_CHAT_WATCH", "RUN_APP_CHAT_UNWATCH", "RUN_APP_CHAT_ACK", "RUN_APP_CHAT_SEND", "api_sendActorMessage_default", "error", "RUN_APP_GET_STATE", "attachBridge", "event", "RUN_APP_READY", "input_bridge_hostInputEnabled_default", "react_useLayoutEffect_default", "frame", "initialLoaded", "pendingPort", "connect", "receiveReady", "data", "input_bridge_isRunPanelKeyboardMessage_default", "RUN_APP_FRAME_READY", "handleLoad", "timeout", "react_useEffect_default", "RUN_APP_THEME", "stateSignature", "latest", "latestInvocation", "active", "confirmationInvocation", "confirmationAction", "action", "status", "visibleStatus", "compact", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "ui_cn_default", "jsx_runtime_Fragment_default", "FullscreenHost", "session", "api", "closeFullscreen", "error", "fullscreenAppId", "invoke", "listing", "runId", "useActorPrograms", "closeRef", "react_useRef_default", "entry", "actorProgramApps", "candidate", "app", "title", "confirmation", "pendingConfirmationFor", "jsx_runtime_jsx_default", "ui_Dialog_default", "open", "jsx_runtime_jsxs_default", "ui_DialogContent_default", "ui_DialogTitle_default", "ui_Button_default", "X", "HostConfirmation", "ActorViewFrame", "ActorProgramToolCardSection", "actor", "session", "inspect", "AccessContext_useAccess_default", "listing", "useActorPrograms", "owner", "run_view_runActorFrom_default", "tools", "tool", "jsx_runtime_jsx_default", "jsx_runtime_jsxs_default", "FunctionForm", "actorProgramSurfaceElements", "actorProgramApps", "module", "rawPlacements", "placement", "entry", "guards_isRecord_default", "surface", "ActorProgramSurfaceElement", "definition", "api", "invoke", "runId", "app", "candidate", "confirmation", "pendingConfirmationFor", "title", "frame", "ActorViewFrame", "ui_Spinner_default", "HostConfirmation", "ACTOR_PROGRAMS_PLUGIN_ID", "IconTools", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "configuredPlugin", "descriptor", "routePrefix", "api", "createActorProgramsApi", "Provider", "children", "session", "ActorProgramsProvider", "FullscreenHost", "ActorProgramsHeader", "ActorProgramToolCardSection", "actorProgramSurfaceElements", "ActorProgramSurfaceElement", "RUN_TOOLS_TAB_ID", "ToolsPanel", "ToolsBadge", "webPlugin", "config", "PluginRegistry_pluginRoutePrefixFrom_default"]
|
|
7
|
+
}
|