@schlenkr/ragents 0.1.5 → 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 +18 -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 +4 -15
- 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 +19 -19
- 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 -7
- package/ragents.config.showcase.ts +2 -5
- 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 +68 -13
- 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 +2 -3
- 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": ["../../../plugins/ragents.actor-programs/server/index.ts", "../../../plugins/ragents.actor-programs/server/agent-tools.ts", "../../../plugins/ragents.actor-programs/server/methods.ts", "../../../plugins/ragents.actor-programs/server/routes.ts", "../../../plugins/ragents.actor-programs/server/runtime.ts", "../../../plugins/ragents.actor-programs/server/limits.ts", "../../../plugins/ragents.actor-programs/server/capability-resolver.ts", "../../../plugins/ragents.actor-programs/server/controls-template.ts", "../../../plugins/ragents.actor-programs/server/templates.ts", "../../../plugins/ragents.actor-programs/server/test-report.ts", "../../../plugins/ragents.actor-programs/server/tool-contributor.ts", "../../../plugins/ragents.actor-programs/server/controls-tool.ts", "../../../plugins/ragents.actor-programs/server/prompts.ts", "../../../plugins/ragents.actor-programs/server/project-diagnostics.ts"],
|
|
4
|
+
"sourcesContent": ["import path from \"node:path\";\nimport type { PluginHost, RAgentsPlugin } from \"@ragents/engine\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { runtimeProviderToken, runGuardToken } from \"@ragents/host/ragents/host-services.js\";\nimport { askServiceToken } from \"@ragents/plugins/ragents.ask/server/contract.js\";\nimport { agentToolsFrom } from \"./agent-tools.js\";\nimport { createActorProgramMethods } from \"./methods.js\";\nimport { createMiniAppFrameRoutes, miniAppsApiPrefix } from \"./routes.js\";\nimport { ActorProgramRuntime } from \"./runtime.js\";\nimport { actorProgramManagementToolNames, actorProgramToolsAvailable, createActorProgramToolContributors } from \"./tool-contributor.js\";\nimport { createControlsToolContributor } from \"./controls-tool.js\";\nimport { actorProgramSummary } from \"./prompts.js\";\nimport { sandboxServicesToken } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport { actorProgramsToken } from \"@ragents/host/plugin-support/actor-programs/service.js\";\nimport { createProjectDiagnostics } from \"./project-diagnostics.js\";\nconst actorProgramsPlugin = (pluginHost: PluginHost): RAgentsPlugin => ({\n manifest: { id: \"ragents.actor-programs\" },\n register: (host) => {\n const runtime = new ActorProgramRuntime({\n runtime: host.service(runtimeProviderToken), agentToolsFor: agentToolsFrom(pluginHost), askService: () => host.service(askServiceToken), reservedToolNames: () => pluginHost.tools.describe().map((entry) => entry.name),\n serverProcessContextFor: (runId) => host.service(sandboxServicesToken).serverProcessContextFor(runId),\n operations: { operation: (id) => host.operation(id), invoke: (id, context, input) => host.invokeOperation(id, context, input), list: () => pluginHost.operations.describe() },\n directoryFor: (runId) => host.storage.session(runId, \"programs\"),\n scriptSources: (entryId, name) => {\n const script = pluginHost.startEntries.scriptPackage(entryId);\n return !script ? undefined : script.handle === name ? script.files : script.programs.find((program) => program.name === name)?.files;\n },\n });\n host.provide(actorProgramsToken, runtime);\n const diagnostics = createProjectDiagnostics({\n workspaceFor: (runId) => runtime.workspaceDirectory(runId), check: (runId, name, actorId, signal) => runtime.check(runId, name, actorId, signal),\n applies: (runId, actorId) => {\n const view = host.service(runtimeProviderToken)().view(runId);\n const actor = view.actors.find((candidate) => candidate.id === actorId);\n return !!actor && actor.kind !== \"human\" && actorProgramToolsAvailable(actor, view) && (actor.toolNames === null || actor.toolNames.some((name) => (actorProgramManagementToolNames as readonly string[]).includes(name)));\n },\n });\n host.agentRuntime(diagnostics.contribution);\n host.clientConfig({ routePrefix: miniAppsApiPrefix });\n host.methods(...createActorProgramMethods({ ensureSession: host.service(runGuardToken), runtime }));\n host.http(...createMiniAppFrameRoutes({ ensureSession: host.service(runGuardToken), runtime }));\n host.lifecycle({ id: \"ragents.actor-programs.lifecycle\",\n initialize: () => host.service(sandboxServicesToken).registerWorkspaceRoot({ id: \"ragents.actor-programs\", alias: \"@actors\", environmentVariable: \"RAGENTS_ACTORS_DIR\", directoryFor: (runId) => runtime.workspaceDirectory(runId), ownershipDirectoryFor: async (runId) => path.dirname(await runtime.workspaceDirectory(runId)) }),\n prepareSession: ({ runId }) => runtime.prepareSession(runId), stopSession: ({ runId, signal }) => runtime.stopSession(runId, signal),\n deleteSession: async ({ runId }) => { diagnostics.forget(runId); await runtime.deleteSession(runId); }, shutdown: () => runtime.shutdown(),\n });\n host.prompts(actorProgramSummary);\n host.functions(createControlsToolContributor(), ...createActorProgramToolContributors(runtime, diagnostics));\n },\n});\nexport const plugin: PluginModule = { requires: [\"ragents.orchestration\", \"ragents.ask\"], create: actorProgramsPlugin };\n", "import { ToolRegistry, type RunFunction, type ExecutableActor, type PluginHost } from \"@ragents/engine\";\nimport { runtimeProviderToken, runWorkspaceProviderToken } from \"@ragents/host/ragents/host-services.js\";\n\nexport const agentToolsFrom = (host: PluginHost) =>\n async (runId: string, actorId: string, provisional?: ExecutableActor): Promise<readonly RunFunction[]> => {\n const runtime = host.service(runtimeProviderToken)();\n const view = runtime.view(runId);\n const actor = provisional ?? view.actors.find((candidate) => candidate.id === actorId);\n if (!actor || actor.kind === \"human\" || actor.lifecycle.kind === \"stopped\") {\n throw new Error(`${actorId} bezeichnet keinen aktiven Agenten in diesem Run.`);\n }\n const registry = new ToolRegistry();\n host.tools.entries().forEach((contributor) => registry.register(contributor));\n const workspace = await host.service(runWorkspaceProviderToken)(runId);\n const tools = await registry.resolve({\n runId,\n actorId,\n turnId: null,\n actor,\n view: provisional ? {...view,actors:[...view.actors,provisional]} : view,\n workspace: workspace.cwd,\n });\n if (actor.toolNames === null) return tools;\n const availableNames = new Set(tools.map((tool) => tool.name));\n const unknown = actor.toolNames.filter((name) => !availableNames.has(name));\n if (unknown.length > 0) {\n throw new Error(`Actor ${actorId} verlangt unbekannte Werkzeuge: ${unknown.join(\", \")}.`);\n }\n const selected = new Set(actor.toolNames);\n return tools.filter((tool) => selected.has(tool.name));\n };\n", "import { DomainError, implement, type MethodContribution } from \"@ragents/engine\";\nimport { actorProgramContracts } from \"@ragents/host/plugin-support/actor-programs/contract.js\";\nimport type { ActorProgramRuntime } from \"./runtime.js\";\n\nconst MAX_INPUT_BYTES = 64 * 1024;\n\nexport interface ActorProgramMethodOptions {\n ensureSession: (runId: string) => void;\n runtime: ActorProgramRuntime;\n}\n\nconst failed = (cause: unknown, code: string, status: number): DomainError => cause instanceof DomainError\n ? cause\n : new DomainError(code, cause instanceof Error ? cause.message : String(cause), status);\n\nconst guarded = <T>(code: string, status: number, work: () => T): T => {\n try {\n return work();\n } catch (cause) {\n throw failed(cause, code, status);\n }\n};\n\nconst checkedInput = (input: unknown): unknown => {\n if (Buffer.byteLength(JSON.stringify(input ?? null), \"utf8\") > MAX_INPUT_BYTES)\n throw new DomainError(\"input-too-large\", `Die Aktionseingabe ist gr\u00F6\u00DFer als ${MAX_INPUT_BYTES} Byte.`, 413);\n return input;\n};\n\nexport const createActorProgramMethods = (options: ActorProgramMethodOptions): MethodContribution[] => {\n const session = (runId: string, code: string, status: number): void =>\n guarded(code, status, () => options.ensureSession(runId));\n return [\n implement(actorProgramContracts.apps, ({ runId }, { access }) => {\n session(runId, \"run-unavailable\", 400);\n return {\n apps: options.runtime.apps(runId),\n tools: access.can(\"runs.inspect\") ? options.runtime.runLocalTools(runId) : [],\n };\n }),\n implement(actorProgramContracts.source, async ({ runId, moduleId }) => {\n session(runId, \"run-unavailable\", 404);\n try {\n return await options.runtime.moduleSource(runId, moduleId);\n } catch (cause) {\n throw failed(cause, \"actor-program-unknown\", 404);\n }\n }),\n implement(actorProgramContracts.action, ({ runId, appId, revision, actionId, requestId, input }) => {\n session(runId, \"run-unavailable\", 400);\n return guarded(\"action-rejected\", 400, () => {\n const permit = options.runtime.invocationPermit(runId);\n return options.runtime.startInvocation(runId, appId, revision, actionId, requestId, checkedInput(input), permit);\n });\n }),\n implement(actorProgramContracts.invocation, ({ runId, appId, invocationId }) => {\n session(runId, \"run-unavailable\", 404);\n return guarded(\"invocation-unknown\", 404, () => options.runtime.invocation(runId, appId, invocationId));\n }),\n implement(actorProgramContracts.function, ({ runId, actorHandle, revision, functionId, requestId, input }) => {\n session(runId, \"run-unavailable\", 400);\n return guarded(\"function-rejected\", 400, () => {\n const permit = options.runtime.invocationPermit(runId);\n return options.runtime.startFunctionInvocation(runId, actorHandle, revision, functionId, requestId, checkedInput(input), permit);\n });\n }),\n implement(actorProgramContracts.functionInvocation, ({ runId, actorHandle, invocationId }) => {\n session(runId, \"run-unavailable\", 404);\n return guarded(\"invocation-unknown\", 404, () => options.runtime.invocation(runId, actorHandle, invocationId));\n }),\n ];\n};\n", "import { randomBytes } from \"node:crypto\";\nimport type { HttpRouteContribution } from \"@ragents/engine\";\nimport { guardedJsonRoute } from \"@ragents/host/plugin-support/http.js\";\nimport { browserInputRuntime, browserRuntimeStyles } from \"@ragents/host/plugin-support/actor-programs/client-runtime.js\";\nimport type { ActorProgramRuntime } from \"./runtime.js\";\n\nexport const miniAppsApiPrefix = \"/api/plugins/ragents.actor-programs\";\n\nconst framePattern = new RegExp(`^${miniAppsApiPrefix.replaceAll(\".\", \"\\\\.\")}\\/runs\\/([A-Za-z0-9_-]{1,64})\\/apps\\/([a-z][a-z0-9_-]{0,129})\\/frame$`);\n\nconst escapeForwarder = `\n window.addEventListener(\"keydown\", (event) => {\n if (event.key !== \"Escape\" || event.defaultPrevented) return;\n queueMicrotask(() => {\n if (!event.defaultPrevented) parent.postMessage({ type: \"ragents.app.escape\", version: 1, token: bridgeToken, keyboard: ragentsInputBridge.keyboardMessage(event, \"keydown\") }, \"*\");\n });\n });`;\n\nconst themeReceiver = `\n const applyHostTheme = (theme) => {\n if (theme !== \"light\" && theme !== \"dark\") throw new Error(\"Das Host-Theme muss light oder dark sein.\");\n document.documentElement.dataset.theme = theme;\n };`;\n\n// Die Vorfahren decken den Browser und die Webviews von VS Code ab (Desktop: vscode-file und vscode-cdn.net, \u00E4ltere Fassungen: vscode-webview).\nexport const frameContentSecurityPolicy = (nonce: string): string =>\n `sandbox allow-scripts allow-forms allow-downloads; default-src 'none'; script-src 'nonce-${nonce}'; style-src 'nonce-${nonce}'; img-src 'self' data: blob:; font-src data:; connect-src 'none'; media-src 'self' data: blob:; object-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'self' https://*.vscode-cdn.net vscode-file: vscode-webview:`;\n\nconst escapedScript = (source: string): string => source.replace(/<\\/script/gi, \"<\\\\/script\");\n\nconst typedBridgeSdk = (nonce: string, styles: string): string => `<script nonce=\"${nonce}\">\n${escapedScript(browserInputRuntime)}\nglobalThis.__ragentsAppContext = (() => {\n document.documentElement.dataset.uiSurface = \"mini-app\";\n document.documentElement.dataset.miniAppFrame = \"true\";\n const style = document.createElement(\"style\");\n style.setAttribute(\"nonce\", ${JSON.stringify(nonce)});\n style.textContent = atob(${JSON.stringify(Buffer.from(styles, \"utf8\").toString(\"base64\"))});\n document.head.prepend(style);\n const pending = new Map();\n const listeners = new Set();\n const chats = new Map();\n const freeze = (value) => {\n if (value && typeof value === \"object\") {\n Object.values(value).forEach(freeze);\n Object.freeze(value);\n }\n return value;\n };\n const bridgeToken = new URLSearchParams(location.hash.slice(1)).get(\"ragentsBridge\");\n ${escapeForwarder}\n ${themeReceiver}\n const channel = new MessageChannel();\n const port = channel.port1;\n let currentState = freeze({});\n let currentApp = null;\n let readyResolve;\n const ready = new Promise((resolve) => { readyResolve = resolve; });\n const terminal = new Set([\"succeeded\", \"failed\", \"cancelled\"]);\n const requestId = () => crypto.randomUUID().replaceAll(\"-\", \"\");\n const stateValue = (value) => value && typeof value === \"object\" && value.values && typeof value.values === \"object\"\n ? freeze(structuredClone(value.values))\n : freeze({});\n const settle = (message) => {\n const id = message.requestId || message.invocation?.requestId;\n const waiter = id ? pending.get(id) : undefined;\n if (!waiter || !terminal.has(message.invocation.status)) return;\n pending.delete(id);\n if (message.invocation.status === \"succeeded\") waiter.resolve(message.invocation.result);\n else waiter.reject(new Error(message.invocation.error || \"Die App-Aktion wurde nicht abgeschlossen.\"));\n };\n port.onmessage = ({ data }) => {\n if (data?.version !== 1) return;\n if (data.type === \"ragents.app.ready\") {\n applyHostTheme(data.theme);\n if (data.hostInput === true) {\n const disposeInput = ragentsInputBridge.installFrameInputBridge(window, port);\n window.addEventListener(\"pagehide\", disposeInput, { once: true });\n }\n currentApp = data.app;\n currentState = stateValue(data.state);\n listeners.forEach((listener) => listener(currentState));\n readyResolve();\n port.postMessage({ type: \"ragents.app.connected\", version: 1 });\n } else if (data.type === \"ragents.app.theme\") {\n applyHostTheme(data.theme);\n } else if (data.type === \"ragents.app.state\") {\n currentState = stateValue(data.state);\n const waiter = data.requestId ? pending.get(data.requestId) : undefined;\n if (waiter) {\n pending.delete(data.requestId);\n waiter.resolve(currentState);\n }\n listeners.forEach((listener) => listener(currentState));\n } else if (data.type === \"ragents.app.invocation\") {\n settle(data);\n } else if (data.type === \"ragents.app.chat-state\") {\n const entry = chats.get(data.actor);\n if (entry) {\n entry.snapshot = freeze(data.snapshot);\n entry.listeners.forEach((listener) => listener());\n }\n const waiter = pending.get(data.requestId);\n if (waiter) { pending.delete(data.requestId); waiter.resolve(); }\n } else if (data.type === \"ragents.app.chat-ack\") {\n const waiter = pending.get(data.requestId);\n if (waiter) { pending.delete(data.requestId); waiter.resolve(); }\n } else if (data.type === \"ragents.app.error\") {\n const waiter = data.requestId ? pending.get(data.requestId) : undefined;\n if (waiter) {\n pending.delete(data.requestId);\n waiter.reject(new Error(data.message));\n }\n }\n };\n port.start();\n const send = async (message) => {\n await ready;\n return new Promise((resolve, reject) => {\n pending.set(message.requestId, { resolve, reject });\n port.postMessage(message);\n });\n };\n if (/^[a-f0-9]{32}$/.test(bridgeToken || \"\")) {\n parent.postMessage(\n { type: \"ragents.app.frame-ready\", version: 1, token: bridgeToken },\n \"*\",\n [channel.port2],\n );\n }\n return Object.freeze({\n get actor() { if (!currentApp) throw new Error(\"Die Actor-Ansicht ist noch nicht bereit.\"); return Object.freeze({id:currentApp.actorId,handle:currentApp.actorHandle}); },\n ready: ready.then(() => undefined),\n run: Object.freeze({ id: \"current\" }),\n principal: Object.freeze({ id: \"operator\", kind: \"operator\" }),\n state: Object.freeze({\n read: () => currentState,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n }),\n chat: Object.freeze({\n read: (actor) => chats.get(actor)?.snapshot,\n subscribe: (actor, listener) => {\n let entry = chats.get(actor);\n if (!entry) {\n entry = { listeners: new Set(), snapshot: undefined, started: false };\n chats.set(actor, entry);\n ready.then(() => {\n if (chats.get(actor) !== entry) return;\n entry.started = true;\n send({ type: \"ragents.app.chat-watch\", version: 1, requestId: requestId(), actor })\n .catch((error) => {\n if (chats.get(actor) !== entry) return;\n entry.snapshot = freeze({ messages: [], running: false, error: error.message });\n entry.listeners.forEach((notify) => notify());\n });\n });\n }\n entry.listeners.add(listener);\n return () => {\n entry.listeners.delete(listener);\n if (entry.listeners.size > 0 || chats.get(actor) !== entry) return;\n chats.delete(actor);\n if (entry.started) {\n port.postMessage({ type: \"ragents.app.chat-unwatch\", version: 1, requestId: requestId(), actor });\n }\n };\n },\n send: (actor, text, attachments) => send({ type: \"ragents.app.chat-send\", version: 1, requestId: requestId(), actor, text, attachments }),\n }),\n capabilities: Object.freeze({\n list: () => (currentApp?.actions ?? []).map((action) => action.id),\n call: async (actionId, input = {}) => {\n await ready;\n if (!(currentApp?.actions ?? []).some((action) => action.id === actionId)) {\n throw new Error(\"Die angeforderte App-Aktion ist nicht installiert.\");\n }\n return send({\n type: \"ragents.app.invoke\",\n version: 1,\n requestId: requestId(),\n actionId,\n input,\n });\n },\n }),\n });\n})();\n</script>`;\n\nexport const frameHtml = (\n frame: ReturnType<ActorProgramRuntime[\"frame\"]>,\n nonce: string,\n): string => {\n const head = /<head(?:\\s[^>]*)?>/i;\n if (!head.test(frame.html)) throw new Error(\"Die installierte App besitzt keinen g\u00FCltigen head.\");\n const client = `<script nonce=\"${nonce}\" type=\"module\">await globalThis.__ragentsAppContext.ready;${escapedScript(frame.clientJavaScript)}</script>`;\n return frame.html.replace(head, (value) => `${value}${typedBridgeSdk(nonce, `${browserRuntimeStyles}\\n${frame.styles}`)}${client}`);\n};\n\nexport interface MiniAppFrameOptions {\n ensureSession: (runId: string) => void;\n runtime: ActorProgramRuntime;\n}\n\n/** Die einzige Auslieferungsroute des Plugins: das HTML des Mini-App-Frames; alles andere sind Methoden. */\nexport const createMiniAppFrameRoutes = (options: MiniAppFrameOptions): HttpRouteContribution[] => [\n {\n id: \"ragents.actor-programs.frame\",\n isApiPath: (pathname) => pathname.startsWith(miniAppsApiPrefix),\n matches: (request, url) => request.method === \"GET\" && framePattern.test(url.pathname),\n handle: async ({ request, response, url }) => {\n const match = url.pathname.match(framePattern);\n if (!match) throw new Error(\"Ung\u00FCltige App-Route.\");\n const [, runId, appId] = match;\n await guardedJsonRoute({\n request,\n response,\n ensureSession: () => options.ensureSession(runId!),\n errorStatus: 404,\n handle: () => {\n const revision = url.searchParams.get(\"revision\") ?? \"\";\n const nonce = randomBytes(18).toString(\"base64\");\n const frame = options.runtime.frame(runId!, appId!, revision);\n const content = Buffer.from(frameHtml(frame, nonce), \"utf8\");\n response.writeHead(200, {\n \"Cache-Control\": \"no-store\",\n \"Content-Security-Policy\": frameContentSecurityPolicy(nonce),\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Content-Length\": content.byteLength,\n \"Referrer-Policy\": \"no-referrer\",\n \"X-Content-Type-Options\": \"nosniff\",\n });\n response.end(content);\n },\n });\n },\n },\n];\n", "import { randomUUID } from \"node:crypto\";\nimport { lstat, mkdir, readdir, readFile, realpath, rm, writeFile } from \"node:fs/promises\";\nimport { lstatSync, readFileSync, renameSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Type, type TSchema } from \"typebox\";\nimport { Value } from \"typebox/value\";\nimport { actorByHandle, actorDescriptionMaxLength, agentTools, assertJsonValue, canonicalHash, defineRunFunction, defineToolAvailability, emptyUsage, handleKey, runCapabilityContractHash, scriptInputOf, schemaComplaints, type Actor, type ActorProgramExecutor, type RunFunction, type CommandContext, type ExecutableActor, type JsonValue, type Orchestration, type PluginContext, type RunCapabilityDescriptor, type RunView, type TurnRequest, type TurnResult, } from \"@ragents/engine\";\nimport { ACTOR_PROGRAMS_STATE_ID, ACTOR_INVOCATIONS_STATE_ID, ACTOR_SCRIPT_STATE_ID, ACTOR_STATE_ID, resolveActorView, type ActorDataState, type ActorFunctionDefinition, type ActorFunctionInvocation, type ActorProgramDefinition, type ActorProgramState, type ActorScriptState, type ActorViewListing, } from \"@ragents/host/plugin-support/actor-programs/contract.js\";\nimport type { ActorProgramSource, ActorProgramsService } from \"@ragents/host/plugin-support/actor-programs/service.js\";\nimport { jsonValue, jsonBytes, MAX_INVOCATIONS_STATE_BYTES } from \"./limits.js\";\nimport { agentCapabilityBinding, operatorCapabilityBinding } from \"./capability-resolver.js\";\nimport type { ActorOperationPort } from \"./operations.js\";\nimport { compileClientProject, installClientSdk } from \"@ragents/host/plugin-support/actor-programs/client-compiler.js\";\nimport { compileAppBackend, installServerSdk, prepareAppProject, prepareAppWorkspace, projectSourceFiles, readAppPackage, typecheckServerProject, type AppContract } from \"@ragents/host/plugin-support/actor-programs/app-project.js\";\nimport { syncWorkspaceOwnership } from \"@ragents/host/plugin-support/workspace-ownership.js\";\nimport { runManagedProcess, sandboxedLaunch, type WorkspaceProcessContext } from \"@ragents/workspace-executor\";\nimport { runModuleTemplates, templateById, templateFiles } from \"./templates.js\";\nimport { createTestReport, testReporterArgument } from \"./test-report.js\";\nimport { FRAME_BODY_CLASS, FRAME_DOCUMENT_CLASS, FRAME_ROOT_CLASS } from \"@ragents/host/plugin-support/actor-programs/client-runtime.js\";\nimport { buildTailwind } from \"@ragents/host/plugin-support/actor-programs/tailwind.js\";\nimport type { AskService } from \"@ragents/plugins/ragents.ask/server/contract.js\";\nconst NAME = /^[a-z][a-z0-9-]{0,63}$/;\nconst errorText = (error: unknown): string => error instanceof Error ? error.message : String(error);\nconst maxShownComplaints = 10;\nconst maxComplaintLength = 240;\n/** A failed check names the count and the first complaints; `lines` keeps all of them for actor_program_diagnostics. */\nconst checkFailure = (title: string, lines: readonly string[], fallback: string): Error => {\n const all = [...new Set(lines.map((line) => line.trim()).filter((line) => line !== \"\"))];\n if (all.length === 0)\n return new Error(fallback);\n const shown = all.slice(0, maxShownComplaints).map((line) => line.length > maxComplaintLength ? `${line.slice(0, maxComplaintLength - 3)}...` : line);\n const omitted = all.length - shown.length;\n return Object.assign(new Error([\n `${title}: ${all.length} Fehler.`,\n ...shown,\n ...(omitted > 0 ? [`... und ${omitted} weitere; alle mit actor_program_diagnostics.`] : []),\n ].join(\"\\n\")), { lines: all });\n};\nconst actorDescriptionOf = (text: string | undefined): string | undefined => {\n const line = (text ?? \"\").replace(/\\s+/g, \" \").trim();\n return line.length <= actorDescriptionMaxLength ? line || undefined : `${line.slice(0, actorDescriptionMaxLength - 3).trimEnd()}...`;\n};\nconst exposed = defineToolAvailability({ availability: \"conditional\", availabilityDetail: \"Ver\u00F6ffentlichte Funktion eines aktiven Actors im Run.\" }, () => true);\nconst objectSchema = { type: \"object\", additionalProperties: true };\nconst checked = (schema: object, value: unknown, label: string): JsonValue => {\n const result = jsonValue(value, label);\n if (!Value.Check(schema as TSchema, result))\n throw new Error(`${label}: ${schemaComplaints(schema as TSchema, result)}`);\n return result;\n};\nconst safePath = (name: string): string => {\n if (!name || path.isAbsolute(name) || name.includes(\"\\\\\") || name.includes(\"\\0\") || name.split(\"/\").some((part) => !part || part === \".\" || part === \"..\"))\n throw new Error(`Ung\u00FCltiger Paketpfad ${name}.`);\n return name;\n};\nconst inside = async (directory: string, relative: string): Promise<string> => {\n const root = await realpath(directory);\n const file = await realpath(path.join(root, safePath(relative)));\n if (!file.startsWith(`${root}${path.sep}`))\n throw new Error(`Paketpfad ${relative} liegt au\u00DFerhalb des Pakets.`);\n const stat = await lstat(file);\n if (!stat.isFile() || stat.size > 2000000)\n throw new Error(`Ung\u00FCltige oder zu gro\u00DFe Paketdatei ${relative}.`);\n return readFile(file, \"utf8\");\n};\nconst occupied = (file: string): boolean => {\n try {\n lstatSync(file);\n return true;\n }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\")\n return false;\n throw error;\n }\n};\nconst packageExists = (name: string): Error => new Error(`Das Paket ${name} existiert bereits.`);\n// Pr\u00FCfung und rename synchron hintereinander, weil rename einen leeren Zielordner still ersetzt.\nconst commitPackage = (staged: string, directory: string, name: string): void => {\n if (occupied(directory))\n throw packageExists(name);\n try {\n renameSync(staged, directory);\n }\n catch (error) {\n if ([\"EEXIST\", \"ENOTEMPTY\", \"ENOTDIR\"].includes((error as NodeJS.ErrnoException).code ?? \"\"))\n throw packageExists(name);\n throw error;\n }\n};\nconst descriptor = (tool: RunFunction): RunCapabilityDescriptor => ({ id: tool.name, label: tool.label, description: tool.description, schema: tool.schema, resultSchema: tool.resultSchema });\ninterface BackendBinding {\n id: string;\n kind: \"tool\" | \"app-action\" | \"input\";\n principal: {\n id: string;\n kind: \"agent\" | \"script\" | \"operator\";\n };\n output?: string[];\n descriptorsFor: (capabilityIds: readonly string[]) => readonly RunCapabilityDescriptor[];\n call: (name: string, input: JsonValue, index: number) => Promise<JsonValue>;\n}\ninterface CapabilityContract {\n capabilityIds: string[];\n capabilityContractHash: string;\n}\ninterface InvocationState {\n version: 1;\n invocations: ActorFunctionInvocation[];\n requestIds: string[];\n}\ninterface CompiledProgram {\n directory: string;\n files: ActorProgramSource[];\n definition: ActorProgramDefinition;\n backendJavaScript?: string;\n frameStyles: string;\n clients: {\n file: string;\n javaScript: string;\n }[];\n createActor: boolean;\n}\nexport interface ActorProgramRuntimeOptions {\n runtime: () => Orchestration;\n agentToolsFor: (runId: string, actorId: string, provisional?: ExecutableActor) => Promise<readonly RunFunction[]>;\n askService: () => AskService;\n reservedToolNames: () => readonly string[];\n /** Programme, Tests und Builds laufen auf dem Server, auch bei einem Arbeitsbereich auf einem Arbeitsplatz. */\n serverProcessContextFor: (runId: string) => Promise<WorkspaceProcessContext>;\n operations: ActorOperationPort;\n directoryFor: (runId: string) => string;\n scriptSources: (entryId: string, name: string) => readonly ActorProgramSource[] | undefined;\n}\nexport class ActorProgramRuntime implements ActorProgramsService, ActorProgramExecutor {\n readonly #options: ActorProgramRuntimeOptions;\n readonly #queues = new Map<string, Promise<void>>();\n readonly #active = new Map<string, {\n runId: string;\n actorId: string;\n controller: AbortController;\n completed: Promise<unknown>;\n }>();\n readonly #installing = new Set<string>();\n readonly #creating = new Set<string>();\n readonly #staged = new Set<string>();\n readonly #removing = new Set<string>();\n readonly #knownRuns = new Set<string>();\n readonly #epochs = new Map<string, number>();\n readonly #stopping = new Set<string>();\n #shuttingDown = false;\n constructor(options: ActorProgramRuntimeOptions) { this.#options = options; }\n runtime(): Orchestration { return this.#options.runtime(); }\n view(runId: string): RunView { return this.runtime().view(runId); }\n ownerId(runId: string): string { return this.runtime().state(runId).ownerId; }\n operatorContext(runId: string, label = \"operation\"): CommandContext { return { actorId: this.ownerId(runId), commandId: `actor-program:${label}:${randomUUID()}` }; }\n programsOf(view: RunView): ActorProgramDefinition[] {\n return view.pluginStates.flatMap((entry) => {\n if (entry.pluginId !== ACTOR_PROGRAMS_STATE_ID || entry.scope.kind !== \"actor\")\n return [];\n const state = entry.state as unknown as ActorProgramState;\n const actorId = entry.scope.actorId;\n const actor = view.actors.find((candidate) => candidate.id === actorId);\n return state.program && actor && actor.kind !== \"human\" && actor.lifecycle.kind !== \"stopped\" ? [state.program] : [];\n });\n }\n programs(runId: string): ActorProgramDefinition[] { return this.runtime().listRuns().some(run => run.id === runId) ? this.programsOf(this.view(runId)) : []; }\n actor(runId: string, actorId: string): ExecutableActor {\n const actor = this.view(runId).actors.find((candidate) => candidate.id === actorId);\n if (!actor || actor.kind === \"human\" || actor.lifecycle.kind === \"stopped\")\n throw new Error(\"Der Actor ist nicht aktiv.\");\n if (this.#removing.has(`${runId}\\0${actorId}`))\n throw new Error(\"Das Actor-Paket wird entfernt.\");\n return actor;\n }\n resolveActor(runId: string, callerId: string, reference: string): ExecutableActor {\n const actors = this.view(runId).actors;\n const found = reference === \"self\" ? actors.find((candidate) => candidate.id === callerId) : actorByHandle(actors, reference);\n if (!found)\n throw new Error(`Actor ${reference} ist unbekannt.`);\n return this.actor(runId, found.id);\n }\n data(runId: string, actorId: string): ActorDataState {\n const view = this.view(runId);\n const entry = view.pluginStates.find((item) => item.pluginId === ACTOR_STATE_ID && item.scope.kind === \"actor\" && item.scope.actorId === actorId);\n const revision = this.runtime().events(runId).filter((event) => (event.type === \"plugin.state-replaced\" || event.type === \"plugin.state-patched\") && event.payload.pluginId === ACTOR_STATE_ID && event.payload.scope.kind === \"actor\" && event.payload.scope.actorId === actorId).at(-1)?.sequence ?? 0;\n return { version: 1, revision, values: (entry?.state ?? {}) as Record<string, unknown> };\n }\n #writeProgram(context: CommandContext, runId: string, actorId: string, program: ActorProgramDefinition | null): void {\n this.runtime().replacePluginState(this.operatorContext(runId), runId, { pluginId: ACTOR_PROGRAMS_STATE_ID, scope: { kind: \"actor\", actorId }, state: jsonValue({ version: 1, program }, \"Actor-Programm\") });\n }\n #script(runId: string): ActorScriptState | undefined {\n return this.view(runId).pluginStates.find((entry) => entry.pluginId === ACTOR_SCRIPT_STATE_ID && entry.scope.kind === \"run\")?.state as unknown as ActorScriptState | undefined;\n }\n async #writeSources(directory: string, files: readonly ActorProgramSource[]): Promise<void> {\n for (const source of files) {\n const file = path.join(directory, safePath(source.path));\n if (source.path.split(\"/\").includes(\"node_modules\"))\n throw new Error(\"Paketquellen d\u00FCrfen keine Abh\u00E4ngigkeiten \u00FCberschreiben.\");\n await mkdir(path.dirname(file), { recursive: true });\n await writeFile(file, source.content, { flag: \"wx\" });\n }\n }\n async #refresh(runId: string, program: ActorProgramDefinition, signal: AbortSignal): Promise<void> {\n const script = this.#script(runId);\n const files = script ? this.#options.scriptSources(script.entryId, program.name) : undefined;\n if (files) {\n const directory = path.join(await this.workspaceDirectory(runId), program.name);\n for (const entry of await readdir(directory))\n if (entry !== \"node_modules\")\n await rm(path.join(directory, entry), { recursive: true, force: true });\n await this.#writeSources(directory, files);\n }\n try {\n await this.#activate(this.operatorContext(runId, \"refresh\"), runId, program.name, false, signal);\n }\n catch (error) {\n throw new Error(`Der Capability-Vertrag von ${program.name} hat sich ge\u00E4ndert und die Neuaktivierung scheiterte: ${errorText(error)}`);\n }\n }\n async #bound<T extends CapabilityContract>(runId: string, actorId: string, revision: string | undefined, signal: AbortSignal, contractOf: (program: ActorProgramDefinition) => T, descriptorsFor: BackendBinding[\"descriptorsFor\"]): Promise<{ program: ActorProgramDefinition; contract: T; descriptors: readonly RunCapabilityDescriptor[] }> {\n const current = () => {\n const program = this.programs(runId).find((entry) => entry.actorId === actorId);\n if (!program)\n throw new Error(\"Der Actor besitzt kein aktives Programm.\");\n return program;\n };\n const bind = (program: ActorProgramDefinition) => {\n const contract = contractOf(program);\n const descriptors = descriptorsFor(contract.capabilityIds);\n return { program, contract, descriptors, drifted: runCapabilityContractHash(descriptors) !== contract.capabilityContractHash };\n };\n const program = current();\n if (revision !== undefined && program.revision !== revision)\n throw new Error(\"Das Actor-Paket wurde ersetzt.\");\n const bound = bind(program);\n if (!bound.drifted)\n return bound;\n await this.#refresh(runId, program, signal);\n const refreshed = bind(current());\n if (refreshed.drifted)\n throw new Error(`Der Capability-Vertrag von ${program.name} weicht auch nach der Neuaktivierung ab.`);\n return refreshed;\n }\n async workspaceDirectory(runId: string): Promise<string> { this.#knownRuns.add(runId); return prepareAppWorkspace(path.join(this.#options.directoryFor(runId), \"actor-workspace\")); }\n templates() { return runModuleTemplates.map(({ id, title, description }) => ({ id, title, description })); }\n async #create<T>(runId: string, name: string, build: (directory: string) => Promise<T>): Promise<{ directory: string; built: T }> {\n this.#assertName(name);\n const actors = await this.workspaceDirectory(runId);\n const directory = path.join(actors, name);\n const key = `${runId}\\0${name}`;\n if (this.#creating.has(key))\n throw new Error(`Das Paket ${name} wird gerade angelegt.`);\n if (occupied(directory))\n throw packageExists(name);\n this.#creating.add(key);\n const staging = path.join(path.dirname(actors), \".staging\");\n const staged = path.join(staging, `${name}-${randomUUID()}`);\n this.#staged.add(staged);\n try {\n await mkdir(staging, { recursive: true });\n for (const entry of await readdir(staging))\n if (!this.#staged.has(path.join(staging, entry)))\n await rm(path.join(staging, entry), { recursive: true, force: true });\n await mkdir(staged);\n const built = await build(staged);\n commitPackage(staged, directory, name);\n return { directory, built };\n }\n finally {\n this.#creating.delete(key);\n this.#staged.delete(staged);\n await rm(staged, { recursive: true, force: true });\n }\n }\n async scaffold(runId: string, name: string, templateId: string) {\n const sources = Object.entries(templateFiles(templateById(templateId), name)).map(([file, content]) => ({ path: file, content }));\n const { built: files } = await this.#create(runId, name, async (directory) => {\n await this.#writeSources(directory, sources);\n await prepareAppProject(directory);\n const pkg = await readAppPackage(directory);\n const backend = pkg.backend ? await compileAppBackend({ directory, backend: pkg.backend, runId, executor: this.runtime().nativeTypeScriptExecutor }) : undefined;\n await installClientSdk(directory, { stateSchema: backend?.contract.state ?? objectSchema, actions: Object.entries(backend?.contract.functions ?? {}).map(([id, fn]) => ({ id, inputSchema: fn.input, resultSchema: fn.output })) });\n return (await projectSourceFiles(directory)).map((file) => file.path);\n });\n return { name, directory: `@actors/${name}`, files };\n }\n async importPackage(context: CommandContext, runId: string, name: string, files: readonly ActorProgramSource[], signal?: AbortSignal, scriptEntryId?: string) {\n const { directory } = await this.#create(runId, name, (staged) => this.#writeSources(staged, files));\n try {\n if (scriptEntryId)\n this.runtime().replacePluginState(this.operatorContext(runId), runId, { pluginId: ACTOR_SCRIPT_STATE_ID, scope: { kind: \"run\" }, state: { version: 1, entryId: scriptEntryId } });\n await this.activate(context, runId, name, signal);\n const program = this.programs(runId).find((entry) => entry.name === name)!;\n return { name, actorId: program.actorId, actorHandle: program.actorHandle, views: program.views.length };\n }\n catch (error) {\n await rm(directory, { recursive: true, force: true });\n throw error;\n }\n }\n async check(runId: string, name: string, callerId: string, signal?: AbortSignal, reference?: string): Promise<CompiledProgram> {\n this.#assertName(name);\n const directory = path.join(await this.workspaceDirectory(runId), name);\n if ((await lstat(directory)).isSymbolicLink())\n throw new Error(\"Actor-Pakete d\u00FCrfen keine Symlinks sein.\");\n await prepareAppProject(directory);\n const pkg = await readAppPackage(directory);\n const previous = this.programs(runId).find((program) => program.name === name);\n const owner = reference ? this.resolveActor(runId, callerId, reference) : previous ? this.actor(runId, previous.actorId) : !pkg.backend ? this.actor(runId, callerId) : undefined;\n if (previous && owner?.id !== previous.actorId)\n throw new Error(\"Ein aktiviertes Paket kann nicht zu einem anderen Actor wechseln.\");\n const caller = this.view(runId).actors.find((candidate) => candidate.id === callerId);\n if (!caller)\n throw new Error(\"Aufrufender Actor fehlt.\");\n const provisional: ExecutableActor = owner ?? {\n id: \"pending\", handle: name, displayName: pkg.title, kind: \"script\", grants: caller.grants.filter((grant) => grant.delegable),\n createdAt: new Date().toISOString(), createdBy: callerId, description: actorDescriptionOf(pkg.description) ?? null, execution: { driver: { kind: \"script\", config: {} }, workspacePath: null, turnTimeoutMs: null }, lifecycle: { kind: \"idle\", since: new Date().toISOString() }, usage: emptyUsage(), toolNames: null, openedToolNames: [],\n };\n const available = (await this.#options.agentToolsFor(runId, provisional.id, owner ? undefined : provisional)).map(descriptor);\n for (const operation of this.#options.operations.list())\n if (operation.operator !== \"unavailable\" && !available.some((entry) => entry.id === operation.id))\n available.push(operation);\n await installServerSdk(directory, available);\n const backend = pkg.backend ? await compileAppBackend({ directory, backend: pkg.backend, runId, executor: this.runtime().nativeTypeScriptExecutor, signal }) : undefined;\n const contract: AppContract = backend?.contract ?? { state: objectSchema, functions: {} };\n if (contract.input && owner?.kind === \"agent\")\n throw new Error(\"Ein LLM-Actor verarbeitet Eingaben mit seinem Agententreiber; onInput ist nur f\u00FCr TypeScript-Actors erlaubt.\");\n if (contract.state.type !== \"object\")\n throw new Error(\"Actor-Zustand muss ein Object-Schema sein.\");\n const state = owner ? this.data(runId, owner.id).values : {};\n checked(contract.state, state, \"Actor-Zustand\");\n const actorId = owner?.id ?? \"pending\";\n const actorHandle = owner?.handle ?? name;\n const functions: ActorFunctionDefinition[] = Object.entries(contract.functions).map(([id, fn]) => {\n if (!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(id))\n throw new Error(`Ung\u00FCltiger Funktionsname ${id}.`);\n if (fn.tool && !/^[a-z][a-z0-9_]{0,63}$/.test(fn.tool.name))\n throw new Error(`Ung\u00FCltiger Werkzeugname ${fn.tool.name}.`);\n const capabilities = fn.capabilities ?? [];\n const selected = capabilities.map((name) => {\n const entry = available.find((item) => item.id === name);\n if (!entry)\n throw new Error(`Capability ${name} ist nicht verf\u00FCgbar.`);\n return entry;\n });\n return { id, label: fn.label, description: fn.description ?? fn.label, inputSchema: fn.input, resultSchema: fn.output, capabilityIds: capabilities, capabilityContractHash: runCapabilityContractHash(selected), confirmation: fn.confirmation ?? null,\n ...(fn.tool ? { tool: { name: fn.tool.name, targets: fn.tool.targets ? fn.tool.targets.map((target) => target === \"self\" ? actorId : this.resolveActor(runId, callerId, target).id) : null, card: fn.tool.card ?? true } } : {}) };\n });\n const inputCapabilities = contract.input?.capabilities ?? [];\n const inputDescriptors = inputCapabilities.map((id) => {\n const found = available.find((entry) => entry.id === id);\n if (!found)\n throw new Error(`Eingabe-Capability ${id} ist nicht verf\u00FCgbar.`);\n return found;\n });\n await installClientSdk(directory, { stateSchema: contract.state, actions: functions.map((fn) => ({ id: fn.id, inputSchema: fn.inputSchema, resultSchema: fn.resultSchema })) });\n const hasServerFiles = pkg.backend || (await projectSourceFiles(directory)).some((file) => /^tests\\/.*\\.tsx?$/.test(file.path));\n const serverErrors = hasServerFiles ? typecheckServerProject(directory, pkg.backend) : [];\n if (serverErrors.length)\n throw checkFailure(`Typpr\u00FCfung von ${name}`, serverErrors, `Die Typpr\u00FCfung von ${name} schlug ohne Meldung fehl.`);\n const clients: CompiledProgram[\"clients\"] = [];\n const views: ActorProgramDefinition[\"views\"] = [];\n for (const view of pkg.views ?? []) {\n const client = await compileClientProject({ directory, entryPoint: view.client, stateSchema: contract.state, actions: functions.map((fn) => ({ id: fn.id, inputSchema: fn.inputSchema, resultSchema: fn.resultSchema })) });\n if (!client.valid)\n throw checkFailure(`Client-Build von ${view.client}`,\n client.diagnostics.filter((item) => item.category === \"error\").map((item) =>\n `${item.fileName ?? view.client}${item.start ? `:${item.start.line}:${item.start.column}` : \"\"} ${item.message.replace(/\\s*\\n\\s*/g, \" \")}`),\n `Der Client-Build von ${view.client} schlug ohne Meldung fehl.`);\n const styles = view.styles ? await inside(directory, view.styles) : \"\";\n if (/@import\\b|url\\s*\\(\\s*[\"']?\\s*(?:https?:|\\/\\/)/i.test(styles))\n throw new Error(\"Ansichts-CSS darf keine externen Ressourcen laden.\");\n const clientFile = `view-${view.id}.mjs`;\n clients.push({ file: clientFile, javaScript: client.javaScript });\n views.push({ id: `${name}--${view.id}`, key: view.id, title: view.title ?? pkg.title, visible: previous?.views.find((item) => item.key === view.id)?.visible ?? true,\n placements: [{ kind: \"canvas\", anchorActorId: actorId }], html: `<!doctype html><html class=\"${FRAME_DOCUMENT_CLASS}\"><head><meta charset=\"utf-8\"></head><body class=\"${FRAME_BODY_CLASS}\"><div id=\"root\" class=\"${FRAME_ROOT_CLASS}\"></div></body></html>`, styles, clientFile });\n }\n const viewSources = [...new Set((pkg.views ?? []).map((view) => path.dirname(path.resolve(directory, view.client))))];\n const frameStyles = viewSources.length > 0 ? await buildTailwind(viewSources) : \"\";\n const files = await projectSourceFiles(directory);\n const revision = canonicalHash({ files, backend: backend?.javaScript ?? null, clients });\n const definition: ActorProgramDefinition = { name, title: pkg.title, description: pkg.description ?? \"\", actorId, actorHandle, revision, installedBy: previous?.installedBy ?? callerId,\n directory: path.join(this.#options.directoryFor(runId), \"actor-builds\", name, revision), sourceDirectory: directory,\n ...(backend ? { backendFile: \"server.mjs\" } : {}), stateSchema: contract.state, stylesFile: \"frame.css\", functions, views,\n ...(contract.input ? { input: { capabilityIds: inputCapabilities, capabilityContractHash: runCapabilityContractHash(inputDescriptors) } } : {}) };\n return { directory, files, definition, clients, frameStyles, createActor: !owner, ...(backend ? { backendJavaScript: backend.javaScript } : {}) };\n }\n activate(context: CommandContext, runId: string, name: string, signal?: AbortSignal, reference?: string) {\n return this.#activate(context, runId, name, true, signal, reference);\n }\n async #activate(context: CommandContext, runId: string, name: string, idle: boolean, signal?: AbortSignal, reference?: string) {\n const key = `${runId}\\0${name}`;\n if (this.#installing.has(key))\n throw new Error(`Paket ${name} wird bereits aktiviert.`);\n const epoch = this.invocationPermit(runId);\n this.#installing.add(key);\n const original = this.programs(runId).find((item) => item.name === name);\n let compiled: CompiledProgram | undefined;\n let published = false;\n try {\n compiled = await this.check(runId, name, context.actorId, signal, reference);\n const definition = compiled.definition;\n const tests = compiled.files.filter((file) => /^tests\\/.*\\.test\\.tsx?$/.test(file.path));\n if (tests.length) {\n const processContext = await this.#options.serverProcessContextFor(runId);\n const report = await createTestReport(compiled.directory);\n let stderr = \"\";\n const launch = await sandboxedLaunch(processContext, { command: process.execPath, args: [\"--import\", \"tsx\", \"--test\", testReporterArgument, ...tests.map((file) => file.path)] });\n const result = await runManagedProcess({ command: launch.command, args: [...launch.args], cwd: compiled.directory,\n env: processContext.env, uid: processContext.uid, gid: processContext.gid, label: `Tests ${name}`, signal, timeoutMs: 60000,\n onStdout: (chunk) => report.stdout(chunk.toString()), onStderr: (chunk) => { stderr = (stderr + chunk.toString()).slice(-12000); } });\n if (result.code !== 0 || result.timedOut)\n throw new Error(report.report(name, { code: result.code, timedOut: result.timedOut, stderr }));\n }\n if (canonicalHash(compiled.files) !== canonicalHash(await projectSourceFiles(compiled.directory)))\n throw new Error(\"Paketdateien wurden w\u00E4hrend der Pr\u00FCfung ge\u00E4ndert; erneut aktivieren.\");\n if (epoch !== this.invocationPermit(runId))\n throw new Error(\"Der Run wurde w\u00E4hrend der Aktivierung gestoppt.\");\n if (this.programs(runId).find((item) => item.name === name)?.revision !== original?.revision)\n throw new Error(\"Das Paket wurde zwischenzeitlich ge\u00E4ndert.\");\n if (idle)\n this.#assertIdle(runId, definition.actorId);\n const names = new Set([...agentTools.map((tool) => tool.name), ...this.#options.reservedToolNames(), ...this.programs(runId).filter((program) => program.name !== name).flatMap((program) => program.functions.flatMap((fn) => fn.tool ? [fn.tool.name] : []))]);\n for (const fn of definition.functions)\n if (fn.tool) {\n if (names.has(fn.tool.name))\n throw new Error(`Werkzeugname ${fn.tool.name} ist bereits vergeben.`);\n names.add(fn.tool.name);\n }\n const occupied = this.programs(runId).find((program) => program.actorId === definition.actorId && program.name !== name);\n if (occupied)\n throw new Error(`Actor @${definition.actorHandle} besitzt bereits das Paket ${occupied.name}. Erg\u00E4nze darin Funktionen oder Ansichten.`);\n await mkdir(definition.directory, { recursive: true });\n for (const source of compiled.files) {\n const file = path.join(definition.directory, safePath(source.path));\n await mkdir(path.dirname(file), { recursive: true });\n await writeFile(file, source.content);\n }\n await prepareAppProject(definition.directory);\n if (compiled.backendJavaScript !== undefined)\n await writeFile(path.join(definition.directory, \"server.mjs\"), compiled.backendJavaScript);\n for (const client of compiled.clients)\n await writeFile(path.join(definition.directory, client.file), client.javaScript);\n await writeFile(path.join(definition.directory, definition.stylesFile), compiled.frameStyles);\n await writeFile(path.join(definition.directory, \"sources.json\"), JSON.stringify(compiled.files));\n await syncWorkspaceOwnership(definition.directory, await this.#options.serverProcessContextFor(runId));\n signal?.throwIfAborted();\n if (epoch !== this.invocationPermit(runId))\n throw new Error(\"Der Run wurde w\u00E4hrend der Aktivierung gestoppt.\");\n if (this.programs(runId).find((item) => item.name === name)?.revision !== original?.revision)\n throw new Error(\"Das Paket wurde zwischenzeitlich ge\u00E4ndert.\");\n if (!compiled.createActor) {\n this.actor(runId, definition.actorId);\n if (idle)\n this.#assertIdle(runId, definition.actorId);\n checked(definition.stateSchema, this.data(runId, definition.actorId).values, \"Actor-Zustand\");\n if (this.programs(runId).some((item) => item.actorId === definition.actorId && item.name !== name))\n throw new Error(\"Der Actor besitzt inzwischen ein anderes Paket.\");\n }\n const currentNames = new Set([...agentTools.map((tool) => tool.name), ...this.#options.reservedToolNames(), ...this.programs(runId).filter((program) => program.name !== name).flatMap((program) => program.functions.flatMap((fn) => fn.tool ? [fn.tool.name] : []))]);\n for (const fn of definition.functions)\n if (fn.tool) {\n if (currentNames.has(fn.tool.name))\n throw new Error(`Werkzeugname ${fn.tool.name} ist inzwischen vergeben.`);\n currentNames.add(fn.tool.name);\n }\n jsonValue({ version: 1, program: definition }, \"Actor-Programm\");\n if (compiled.createActor) {\n const actors = this.view(runId).actors;\n const caller = actors.find((actor) => actor.id === context.actorId)!;\n const holder = actors.find((actor) => actor.handle === name);\n if (holder?.kind === \"script\" && holder.lifecycle.kind === \"stopped\") {\n checked(definition.stateSchema, this.data(runId, holder.id).values, \"Actor-Zustand\");\n this.runtime().restartActor(context, runId, holder.id, \"Actor-Paket erneut aktiviert\");\n }\n else if (holder)\n throw new Error(`Handle @${name} geh\u00F6rt bereits dem ${holder.kind !== \"human\" && holder.lifecycle.kind === \"stopped\" ? \"gestoppten\" : \"aktiven\"} Actor ${holder.displayName}; nur ein gestoppter TypeScript-Actor wird beim Aktivieren neu gestartet. W\u00E4hle einen anderen Paketnamen.`);\n else\n this.runtime().createScriptActor(context, runId, { handle: name, displayName: definition.title, description: actorDescriptionOf(definition.description), grants: caller.grants.filter((grant) => grant.delegable), toolNames: null });\n const actor = this.resolveActor(runId, context.actorId, `@${name}`);\n definition.actorId = actor.id;\n definition.actorHandle = actor.handle;\n for (const view of definition.views)\n for (const placement of view.placements)\n placement.anchorActorId = actor.id;\n for (const fn of definition.functions)\n if (fn.tool?.targets)\n fn.tool.targets = fn.tool.targets.map((target) => target === \"pending\" ? actor.id : target);\n }\n signal?.throwIfAborted();\n this.#writeProgram(context, runId, definition.actorId, definition);\n published = true;\n if (original && original.revision !== definition.revision)\n await this.runtime().nativeTypeScriptExecutor.stopInstance(runId, this.#instance(original));\n return { name, actor: `@${definition.actorHandle}`, views: definition.views.length, active: true as const };\n }\n finally {\n this.#installing.delete(key);\n if (!published && compiled && compiled.definition.revision !== original?.revision)\n await rm(compiled.definition.directory, { recursive: true, force: true });\n }\n }\n list(runId: string) { return this.programs(runId).map((program) => ({ name: program.name, actor: `@${program.actorHandle}`, functions: program.functions.map((fn) => fn.id), views: program.views.map((view) => ({ name: view.key, title: view.title, visible: view.visible })) })); }\n async remove(context: CommandContext, runId: string, name: string) {\n const program = this.#program(runId, name);\n this.#assertIdle(runId, program.actorId);\n if (this.#installing.has(`${runId}\\0${name}`))\n throw new Error(\"Das Paket wird gerade aktiviert.\");\n const actor = this.actor(runId, program.actorId);\n const key = `${runId}\\0${program.actorId}`;\n this.#removing.add(key);\n try {\n await this.stopActor(runId, program.actorId);\n this.#writeProgram(context, runId, program.actorId, null);\n if (actor.kind === \"script\")\n this.runtime().stopActor(context, runId, program.actorId, \"Actor-Paket entfernt\");\n await rm(program.directory, { recursive: true, force: true });\n }\n finally {\n this.#removing.delete(key);\n }\n return { removed: name };\n }\n setVisibility(context: CommandContext, runId: string, reference: string, visible: boolean) {\n const { program, view } = resolveActorView(this.programs(runId), reference);\n this.#writeProgram(context, runId, program.actorId, { ...program, views: program.views.map((item) => item.id === view.id ? { ...item, visible } : item) });\n return { view: `${program.name}/${view.key}`, visible };\n }\n apps(runId: string): ActorViewListing[] {\n return this.programs(runId).flatMap((program) => program.views.map((view) => ({ id: view.id, actorId: program.actorId, actorHandle: program.actorHandle, title: view.title, description: program.description, revision: program.revision,\n actions: program.functions.map(({ id, label, description, confirmation }) => ({ id, label, description, confirmation })), placements: view.placements, visible: view.visible, state: this.data(runId, program.actorId), invocations: this.#invocations(runId).invocations.filter((invocation) => invocation.actorId === program.actorId && invocation.revision === program.revision) })));\n }\n runLocalTools(runId: string) {\n if (!this.runtime().listRuns().some(run => run.id === runId))\n return [];\n const view = this.view(runId);\n return this.programs(runId).flatMap((program) => program.functions.flatMap((fn) => fn.tool ? [{ moduleId: program.name, name: fn.tool.name, description: fn.description, card: fn.tool.card, actorId: program.actorId, actorHandle: program.actorHandle, functionId: fn.id, revision: program.revision, sourceHash: program.revision, installedBy: program.installedBy,\n parameters: Object.entries((fn.inputSchema as {\n properties?: Record<string, {\n type?: string;\n description?: string;\n }>;\n }).properties ?? {}).map(([name, schema]) => ({ name, type: [\"string\", \"number\", \"integer\", \"boolean\"].includes(schema.type ?? \"\") ? schema.type ?? \"json\" : \"json\", description: schema.description ?? name, required: ((fn.inputSchema as {\n required?: string[];\n }).required ?? []).includes(name) })),\n targets: (fn.tool.targets ?? view.actors.filter((actor) => actor.kind !== \"human\" && actor.lifecycle.kind !== \"stopped\").map((actor) => actor.id)).map((actorId) => ({ actorId, handle: view.actors.find((actor) => actor.id === actorId)?.handle ?? null })) }] : []));\n }\n async moduleSource(runId: string, reference: string) { const program = this.#program(runId, reference); return { files: JSON.parse(await readFile(path.join(program.directory, \"sources.json\"), \"utf8\")) as ActorProgramSource[] }; }\n frame(runId: string, viewId: string, revision: string) {\n const program = this.#program(runId, viewId);\n const view = program.views.find((item) => item.id === viewId);\n if (!view || program.revision !== revision)\n throw new Error(\"Die Ansicht wurde ersetzt oder entfernt.\");\n if (!program.stylesFile)\n throw new Error(\"Das Programm stammt aus einer \u00E4lteren Aktivierung ohne Stylesheet-Datei. Bitte erneut aktivieren.\");\n const frameStyles = readFileSync(path.join(program.directory, program.stylesFile), \"utf8\");\n return { ...view, styles: `${frameStyles}\\n${view.styles}`, platformVersion: 2 as const, clientJavaScript: readFileSync(path.join(program.directory, view.clientFile), \"utf8\") };\n }\n installedTools(context: PluginContext): RunFunction[] {\n return this.programsOf(context.view).flatMap((program) => program.functions.flatMap((fn) => !fn.tool || (fn.tool.targets && !fn.tool.targets.includes(context.actorId)) ? [] : [defineRunFunction({\n name: fn.tool.name, label: fn.label, description: fn.description, schema: fn.inputSchema as TSchema, resultSchema: fn.resultSchema as TSchema, available: exposed, executionMode: \"sequential\",\n run: async (scope, id, input) => {\n const descriptorsFor = (capabilityIds: readonly string[]) => agentCapabilityBinding(context.actor, scope.availableFunctions(), capabilityIds, new Set()).descriptors;\n return this.#executeFunction(context.runId, program, fn, input, { id, kind: \"tool\", principal: { id: context.actorId, kind: context.actor.kind === \"script\" ? \"script\" : \"agent\" }, descriptorsFor, call: (name, value, index) => scope.invokeFunction(`${id}:capability:${index}`, name, value) }, scope.signal ?? new AbortController().signal);\n },\n })]));\n }\n async #serial<T>(runId: string, actorId: string, signal: AbortSignal, execute: () => Promise<T>): Promise<T> {\n const permit = this.invocationPermit(runId);\n const key = `${runId}\\0${actorId}`;\n const previous = this.#queues.get(key) ?? Promise.resolve();\n const operation = previous.then(() => { signal.throwIfAborted(); if (permit !== this.invocationPermit(runId))\n throw new Error(\"Der Run wurde vor dem Funktionsstart gestoppt.\"); this.actor(runId, actorId); return execute(); });\n const queued = operation.then(() => undefined, () => undefined);\n this.#queues.set(key, queued);\n try {\n return await operation;\n }\n finally {\n if (this.#queues.get(key) === queued)\n this.#queues.delete(key);\n }\n }\n async #backend(runId: string, program: ActorProgramDefinition, input: unknown, binding: BackendBinding, descriptors: readonly RunCapabilityDescriptor[], signal: AbortSignal): Promise<{\n result: unknown;\n logs: string[];\n state: JsonValue;\n initial: ActorDataState;\n }> {\n if (!program.backendFile)\n throw new Error(\"Der Actor besitzt kein TypeScript-Backend.\");\n const current = this.#program(runId, program.name);\n if (current.revision !== program.revision)\n throw new Error(\"Das Actor-Paket wurde ersetzt.\");\n const logs: string[] = [];\n let calls = 0;\n const initial = this.data(runId, program.actorId);\n const result = await this.runtime().nativeTypeScriptExecutor.execute({\n program: { entry: program.backendFile, files: [{ fileName: program.backendFile, text: await readFile(path.join(program.directory, program.backendFile), \"utf8\") }], exportName: \"handle\" },\n instanceId: this.#instance(program), cwd: program.directory, input, state: initial.values,\n std: { now: new Date().toISOString(), idPrefix: binding.id }, context: { runId, actor: { id: program.actorId, handle: program.actorHandle }, invocationId: binding.id, invocationKind: binding.kind, principal: binding.principal, capabilities: descriptors },\n }, { signal, log: (value) => { if (logs.length < 100)\n logs.push((typeof value === \"string\" ? value : JSON.stringify(value)).slice(0, 2000)); }, call: async (name, value) => {\n const capability = descriptors.find((entry) => entry.id === name);\n if (!capability)\n throw new Error(`Capability ${name} ist nicht deklariert.`);\n if (++calls > 64)\n throw new Error(\"Ein Aufruf darf h\u00F6chstens 64 Capabilities ausf\u00FChren.\");\n if (program.functions.some((fn) => fn.tool?.name === name))\n throw new Error(\"Eine Actor-Funktion darf sich nicht \u00FCber ein Werkzeug selbst aufrufen; verwende eine gemeinsame TypeScript-Funktion.\");\n checked(capability.schema, value, `Eingabe ${name}`);\n const output = await binding.call(name, value, calls);\n return checked(capability.resultSchema, output, `Ergebnis ${name}`);\n } });\n signal.throwIfAborted();\n this.actor(runId, program.actorId);\n const state = checked(program.stateSchema, result.state, \"Actor-Zustand\");\n return { result: result.result, logs, state, initial };\n }\n #commitState(runId: string, actorId: string, state: JsonValue, initial: ActorDataState): void {\n if (canonicalHash(state) === canonicalHash(initial.values))\n return;\n if (this.data(runId, actorId).revision !== initial.revision)\n throw new Error(\"Der Actor-Zustand wurde w\u00E4hrend des Aufrufs ge\u00E4ndert. Erneut aufrufen.\");\n this.runtime().replaceActorState(this.operatorContext(runId), runId, actorId, state);\n }\n #executeFunction(runId: string, bound: ActorProgramDefinition, declared: ActorFunctionDefinition, input: unknown, binding: BackendBinding, signal: AbortSignal): Promise<JsonValue> {\n const functionOf = (program: ActorProgramDefinition): ActorFunctionDefinition => {\n const fn = program.functions.find((entry) => entry.id === declared.id);\n if (!fn)\n throw new Error(\"Die Funktion ist nicht deklariert.\");\n return fn;\n };\n return this.#serial(runId, bound.actorId, signal, async () => {\n const { program, contract: fn, descriptors } = await this.#bound(runId, bound.actorId, bound.revision, signal, functionOf, binding.descriptorsFor);\n const value = checked(fn.inputSchema, input, `Eingabe ${fn.id}`);\n const result = await this.#backend(runId, program, { kind: \"function\", functionId: fn.id, input: value }, binding, descriptors, signal);\n const output = checked(fn.resultSchema, result.result, `Ergebnis ${fn.id}`);\n this.#commitState(runId, program.actorId, result.state, result.initial);\n binding.output?.push(...result.logs);\n return output;\n });\n }\n async runInput(request: TurnRequest<\"script\">, signal: AbortSignal): Promise<TurnResult> {\n this.#knownRuns.add(request.runId);\n try {\n const inputOf = (program: ActorProgramDefinition) => {\n if (!program.input)\n throw new Error(\"Dieser TypeScript-Actor besitzt keinen onInput-Handler.\");\n return program.input;\n };\n const descriptorsFor = (capabilityIds: readonly string[]) => agentCapabilityBinding(this.actor(request.runId, request.agentId), request.tools, capabilityIds, new Set()).descriptors;\n await this.#serial(request.runId, request.agentId, signal, async () => {\n const { program, descriptors } = await this.#bound(request.runId, request.agentId, undefined, signal, inputOf, descriptorsFor);\n const binding: BackendBinding = { id: request.turnId, kind: \"input\", principal: { id: request.agentId, kind: \"script\" }, descriptorsFor, call: (name, input, index) => request.invoke(`${request.turnId}:capability:${index}`, name, input) };\n const result = await this.#backend(request.runId, program, { kind: \"input\", input: scriptInputOf(request.input) }, binding, descriptors, signal);\n this.#commitState(request.runId, request.agentId, result.state, result.initial);\n for (const text of result.logs)\n request.emit({ kind: \"runtime\", text });\n });\n return { failure: null, usage: emptyUsage() };\n }\n catch (error) {\n return { failure: errorText(error), usage: emptyUsage() };\n }\n }\n invocationPermit(runId: string): number { if (this.#shuttingDown || this.#stopping.has(runId))\n throw new Error(\"Der Run wird gestoppt.\"); return this.#epochs.get(runId) ?? 0; }\n startInvocation(runId: string, viewId: string, revision: string, functionId: string, requestId: string, input: unknown, permit = this.invocationPermit(runId)) {\n const program = this.#program(runId, viewId);\n if (!program.views.some((view) => view.id === viewId))\n throw new Error(\"Die Ansicht ist unbekannt.\");\n return this.#start(runId, program, viewId, revision, functionId, requestId, input, permit);\n }\n startFunctionInvocation(runId: string, actorHandle: string, revision: string, functionId: string, requestId: string, input: unknown, permit = this.invocationPermit(runId)) {\n const program = this.programs(runId).find((entry) => entry.actorHandle === handleKey(actorHandle));\n if (!program)\n throw new Error(\"Der Actor ver\u00F6ffentlicht kein Programm.\");\n return this.#start(runId, program, program.name, revision, functionId, requestId, input, permit);\n }\n #start(runId: string, program: ActorProgramDefinition, viewId: string, revision: string, functionId: string, requestId: string, input: unknown, permit: number): ActorFunctionInvocation {\n this.#knownRuns.add(runId);\n if (permit !== this.invocationPermit(runId))\n throw new Error(\"Der Run wurde inzwischen gestoppt.\");\n if (program.revision !== revision)\n throw new Error(\"Das Actor-Paket wurde ersetzt. Ansicht aktualisieren.\");\n const fn = program.functions.find((entry) => entry.id === functionId);\n if (!fn)\n throw new Error(\"Die Funktion ist nicht deklariert.\");\n const state = this.#invocations(runId);\n const prior = state.invocations.find((entry) => entry.requestId === requestId);\n if (prior) {\n if (prior.actorId !== program.actorId || prior.actionId !== functionId || prior.revision !== revision || canonicalHash(prior.input) !== canonicalHash(input))\n throw new Error(\"Die Request-ID wurde bereits f\u00FCr einen anderen Aufruf verwendet.\");\n return prior;\n }\n if (!requestId || requestId.length > 200 || state.requestIds.includes(requestId))\n throw new Error(\"Ung\u00FCltige oder bereits verarbeitete Request-ID.\");\n if (state.requestIds.length >= 10000)\n throw new Error(\"Der Run hat seine Aufrufgrenze erreicht.\");\n if ([...this.#active.values()].filter((entry) => entry.runId === runId).length >= 8)\n throw new Error(\"Es laufen bereits acht Actor-Funktionen.\");\n checked(fn.inputSchema, input, \"Funktionseingabe\");\n const invocation: ActorFunctionInvocation = { id: randomUUID(), requestId, actorId: program.actorId, actorHandle: program.actorHandle, appId: viewId, revision, actionId: functionId, input, output: [], createdAt: new Date().toISOString(), status: \"queued\" };\n this.#replaceInvocation(runId, invocation, true);\n const controller = new AbortController();\n const completed = Promise.resolve().then(async () => {\n const started = { ...invocation, status: \"running\" as const, startedAt: new Date().toISOString() };\n this.#replaceInvocation(runId, started);\n try {\n if (fn.confirmation && !await this.#confirm(runId, invocation, fn.confirmation, controller.signal))\n throw new Error(\"Die Funktion wurde nicht best\u00E4tigt.\");\n const descriptorsFor = (capabilityIds: readonly string[]) => operatorCapabilityBinding(this.ownerId(runId), this.#options.operations.list(), capabilityIds).descriptors;\n const output: string[] = [];\n const result = await this.#executeFunction(runId, program, fn, input, { output, id: invocation.id, kind: \"app-action\", principal: { id: this.ownerId(runId), kind: \"operator\" }, descriptorsFor, call: async (name, value, index) => {\n const operation = this.#options.operations.operation(name)!;\n const id = `${invocation.id}:capability:${index}`;\n const confirmation = operation.operator === \"confirm\" ? await this.#confirm(runId, invocation, `${operation.label} ausf\u00FChren?`, controller.signal, value) : true;\n if (!confirmation)\n throw new Error(\"Die Aktion wurde nicht best\u00E4tigt.\");\n return this.#options.operations.invoke(name, { runId, invocationId: id, principal: { kind: \"operator\", actorId: this.ownerId(runId) }, signal: controller.signal, ...(operation.operator === \"confirm\" ? { operatorConfirmation: { operationId: name, invocationId: id, inputHash: canonicalHash(value) } } : {}) }, value);\n } }, controller.signal);\n this.#replaceInvocation(runId, { ...started, status: \"succeeded\", result, output, finishedAt: new Date().toISOString() });\n }\n catch (error) {\n this.#replaceInvocation(runId, { ...started, status: controller.signal.aborted ? \"cancelled\" : \"failed\", error: errorText(error).slice(0, 8000), finishedAt: new Date().toISOString() });\n }\n }).finally(() => this.#active.delete(invocation.id));\n this.#active.set(invocation.id, { runId, actorId: program.actorId, controller, completed });\n return invocation;\n }\n invocation(runId: string, reference: string, id: string): ActorFunctionInvocation {\n const invocation = this.#invocations(runId).invocations.find((entry) => entry.id === id && (entry.appId === reference || entry.actorHandle === reference));\n if (!invocation)\n throw new Error(\"Der Funktionsaufruf ist unbekannt.\");\n return invocation;\n }\n #invocations(runId: string): InvocationState { return (this.view(runId).pluginStates.find((entry) => entry.pluginId === ACTOR_INVOCATIONS_STATE_ID && entry.scope.kind === \"run\")?.state as unknown as InvocationState) ?? { version: 1, invocations: [], requestIds: [] }; }\n #replaceInvocation(runId: string, invocation: ActorFunctionInvocation, remember = false): void {\n const current = this.#invocations(runId);\n const entries = [...current.invocations.filter((entry) => entry.id !== invocation.id), invocation];\n const active = entries.filter((entry) => entry.status === \"queued\" || entry.status === \"running\");\n const finished = entries.filter((entry) => entry.status !== \"queued\" && entry.status !== \"running\").slice(-20);\n const state: InvocationState = { version: 1, invocations: [...active, ...finished], requestIds: remember ? [...current.requestIds, invocation.requestId] : current.requestIds };\n while (jsonBytes(state) > MAX_INVOCATIONS_STATE_BYTES && finished.length) {\n finished.shift();\n state.invocations = [...active, ...finished];\n }\n assertJsonValue(state, \"Actor-Aufrufe\");\n this.runtime().replacePluginState(this.operatorContext(runId), runId, { pluginId: ACTOR_INVOCATIONS_STATE_ID, scope: { kind: \"run\" }, state });\n }\n async #confirm(runId: string, invocation: ActorFunctionInvocation, question: string, signal: AbortSignal, input = invocation.input): Promise<boolean> {\n const answer = await this.#options.askService().ask({ runId, agentId: this.ownerId(runId), turnId: null, commandId: `actor-confirm:${randomUUID()}` }, { question: `${question}\\nEingabe: ${JSON.stringify(input).slice(0, 500)}`, options: [\"Ausf\u00FChren\", \"Abbrechen\"], multi: false, description: `Funktion ${invocation.actionId} von @${invocation.actorHandle}`, parameters: { source: ACTOR_PROGRAMS_STATE_ID, invocationId: invocation.id } }, signal);\n return answer === \"Ausf\u00FChren\";\n }\n #program(runId: string, reference: string): ActorProgramDefinition {\n const program = this.programs(runId).find((entry) => entry.name === reference || entry.views.some((view) => view.id === reference));\n if (!program)\n throw new Error(`Actor-Paket ${reference} ist nicht aktiv.`);\n return program;\n }\n #instance(program: ActorProgramDefinition): string { return `actor:${program.actorId}:${program.revision}`; }\n #assertName(name: string): void { if (!NAME.test(name))\n throw new Error(\"Paketnamen beginnen mit einem Kleinbuchstaben und enthalten h\u00F6chstens 64 Kleinbuchstaben, Ziffern oder Bindestriche.\"); }\n #assertIdle(runId: string, actorId: string): void { if (this.#queues.has(`${runId}\\0${actorId}`) || [...this.#active.values()].some((entry) => entry.runId === runId && entry.actorId === actorId))\n throw new Error(\"Der Actor hat noch laufende Funktionen oder Eingaben.\"); }\n async stopActor(runId: string, actorId: string): Promise<void> {\n const active = [...this.#active.values()].filter((entry) => entry.runId === runId && entry.actorId === actorId);\n active.forEach((entry) => entry.controller.abort(new Error(\"Actor gestoppt.\")));\n const state = this.view(runId).pluginStates.find((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID && entry.scope.kind === \"actor\" && entry.scope.actorId === actorId)?.state as unknown as ActorProgramState | undefined;\n if (state?.program)\n await this.runtime().nativeTypeScriptExecutor.stopInstance(runId, this.#instance(state.program));\n await Promise.allSettled(active.map((entry) => entry.completed));\n }\n async stopRun(runId: string): Promise<void> {\n this.#epochs.set(runId, (this.#epochs.get(runId) ?? 0) + 1);\n this.#stopping.add(runId);\n try {\n const active = [...this.#active.values()].filter((entry) => entry.runId === runId);\n active.forEach((entry) => entry.controller.abort(new Error(\"Run gestoppt.\")));\n await this.runtime().nativeTypeScriptExecutor.stopRun(runId);\n await Promise.allSettled([...active.map((entry) => entry.completed), ...[...this.#queues].filter(([key]) => key.startsWith(`${runId}\\0`)).map(([, queue]) => queue)]);\n }\n finally {\n this.#stopping.delete(runId);\n }\n }\n waitForRunSettlement(runId: string): Promise<void> { return Promise.allSettled([...this.#active.values()].filter((entry) => entry.runId === runId).map((entry) => entry.completed).concat([...this.#queues].filter(([key]) => key.startsWith(`${runId}\\0`)).map(([, queue]) => queue))).then(() => undefined); }\n async prepareSession(runId: string): Promise<void> { this.#knownRuns.add(runId); if (!this.runtime().listRuns().some(run => run.id === runId))\n return; for (const invocation of this.#invocations(runId).invocations)\n if (invocation.status === \"queued\" || invocation.status === \"running\")\n this.#replaceInvocation(runId, { ...invocation, status: \"cancelled\", error: \"Der Server wurde w\u00E4hrend des Aufrufs beendet.\", finishedAt: new Date().toISOString() }); }\n async stopSession(runId: string, _signal?: AbortSignal): Promise<void> { await this.stopRun(runId); }\n async disposeRun(runId: string): Promise<void> { await this.stopRun(runId); }\n async deleteSession(runId: string): Promise<void> { await this.stopRun(runId); await rm(this.#options.directoryFor(runId), { recursive: true, force: true }); }\n async shutdown(): Promise<void> { this.#shuttingDown = true; await Promise.allSettled([...this.#knownRuns].map((runId) => this.stopRun(runId))); }\n}\n", "import { assertJsonValue, type JsonValue } from \"@ragents/engine\";\n\nconst MAX_JSON_BYTES = 250_000;\nconst MAX_JSON_DEPTH = 24;\nconst MAX_JSON_KEY_LENGTH = 256;\nexport const MAX_INVOCATIONS_STATE_BYTES = 8 * 1024 * 1024;\n\nexport const jsonBytes = (value: unknown): number => Buffer.byteLength(JSON.stringify(value), \"utf8\");\n\nexport const jsonValue = <T>(value: T, label: string): T & JsonValue => {\n assertJsonValue(value, label);\n const text = JSON.stringify(value);\n if (Buffer.byteLength(text, \"utf8\") > MAX_JSON_BYTES)\n throw new Error(`${label} ist gr\u00F6\u00DFer als ${MAX_JSON_BYTES} Byte.`);\n const pending: Array<{ value: unknown; depth: number }> = [{ value, depth: 0 }];\n while (pending.length > 0) {\n const current = pending.pop()!;\n if (current.depth > MAX_JSON_DEPTH)\n throw new Error(`${label} ist tiefer als ${MAX_JSON_DEPTH} Ebenen verschachtelt.`);\n if (Array.isArray(current.value)) {\n current.value.forEach((entry) => pending.push({ value: entry, depth: current.depth + 1 }));\n continue;\n }\n if (current.value && typeof current.value === \"object\") {\n Object.entries(current.value).forEach(([key, entry]) => {\n if (key.length > MAX_JSON_KEY_LENGTH)\n throw new Error(`${label} enth\u00E4lt einen Schl\u00FCssel mit mehr als ${MAX_JSON_KEY_LENGTH} Zeichen.`);\n pending.push({ value: entry, depth: current.depth + 1 });\n });\n }\n }\n return value;\n};\n", "import {\n runCapabilityBindingHash,\n runCapabilityContractHash,\n type Actor,\n type RunFunction,\n type RunCapabilityDescriptor,\n} from \"@ragents/engine\";\n\nimport type { OperationDescriptorPort } from \"./operations.js\";\n\nexport interface ResolvedCapabilityBinding {\n descriptors: readonly RunCapabilityDescriptor[];\n descriptorContractHash: string;\n bindingContractHash: string;\n}\n\nconst descriptorOf = (capability: {\n id: string;\n label: string;\n description: string;\n schema: RunCapabilityDescriptor[\"schema\"];\n resultSchema: RunCapabilityDescriptor[\"resultSchema\"];\n}): RunCapabilityDescriptor => ({\n id: capability.id,\n label: capability.label,\n description: capability.description,\n schema: capability.schema,\n resultSchema: capability.resultSchema,\n});\n\nconst selected = <T>(\n available: readonly T[],\n capabilityIds: readonly string[],\n idOf: (value: T) => string,\n unavailable: (id: string, names: string) => Error,\n): T[] => {\n const byId = new Map(available.map((value) => [idOf(value), value]));\n return capabilityIds.map((id) => {\n const value = byId.get(id);\n if (!value) throw unavailable(id, [...byId.keys()].sort().join(\", \") || \"keine\");\n return value;\n });\n};\n\nexport const operatorCapabilityBinding = (\n actorId: string,\n operations: readonly OperationDescriptorPort[],\n capabilityIds: readonly string[],\n): ResolvedCapabilityBinding => {\n const resolved = selected(\n operations.filter((operation) => operation.operator !== \"unavailable\"),\n capabilityIds,\n (operation) => operation.id,\n (id, names) => new Error(`Capability ${id} ist f\u00FCr den Bediener nicht verf\u00FCgbar. Verf\u00FCgbar sind: ${names}.`),\n );\n const descriptors = resolved.map(descriptorOf);\n return {\n descriptors,\n descriptorContractHash: runCapabilityContractHash(descriptors),\n bindingContractHash: runCapabilityBindingHash({\n principal: { id: actorId, kind: \"operator\" },\n capabilities: descriptors,\n policies: resolved.map((operation) => ({ id: operation.id, policy: operation.operator })),\n }),\n };\n};\n\nexport const agentCapabilityBinding = (\n actor: Actor,\n tools: readonly RunFunction[],\n capabilityIds: readonly string[],\n blockedNames: ReadonlySet<string>,\n): ResolvedCapabilityBinding => {\n const resolved = selected(\n tools.filter((tool) => !blockedNames.has(tool.name)),\n capabilityIds,\n (tool) => tool.name,\n (id, names) => new Error(\n `Capability ${id} ist f\u00FCr @${actor.handle} nicht verf\u00FCgbar. Verf\u00FCgbar sind: ${names}.`,\n ),\n );\n const descriptors = resolved.map((tool) => descriptorOf({ ...tool, id: tool.name }));\n return {\n descriptors,\n descriptorContractHash: runCapabilityContractHash(descriptors),\n bindingContractHash: runCapabilityBindingHash({\n principal: { id: actor.id, kind: actor.kind === \"script\" ? \"script\" : \"agent\", grants: actor.grants },\n capabilities: descriptors,\n policies: descriptors.map((descriptor) => ({ id: descriptor.id, policy: \"agent\" })),\n }),\n };\n};\n", "import type { ActorProgramTemplate } from \"./templates\";\n\nexport const controlsTemplate: ActorProgramTemplate = {\n id: \"controls\",\n title: \"UI-Controls ausprobieren\",\n description: \"Lokale Demo mit Formular, Tabelle, Dateien, Aufgaben, Ablaufdiagramm, SVG-Verbindungen, Nachrichten, Dokument und Diff ohne Funktionsaufrufe.\",\n ragents: {\n title: \"UI-Controls ausprobieren\",\n description: \"Eine lokale Demo der vorhandenen Mini-App-Controls. Werte und Dateien bleiben in dieser Ansicht.\",\n views: [{ id: \"main\", client: \"src/client.tsx\" }],\n },\n files: {\n \"src/client.tsx\": `import React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport * as UI from \"@ragents/client/ui\";\n\ntype FormValues = Parameters<typeof UI.Form>[0][\"values\"];\ntype Row = { id: string; name: string; count: number };\nconst rows: Row[] = [\n { id: \"analysis\", name: \"Analyse\", count: 12 },\n { id: \"review\", name: \"Review\", count: 4 },\n { id: \"notes\", name: \"Dokumentation\", count: 8 },\n];\n\nconst App = () => {\n const [values, setValues] = React.useState<FormValues>({ title: \"Ergebnisse pr\u00FCfen\", notes: \"\", count: 3, mode: \"review\", approved: false });\n const [selected, setSelected] = React.useState<string[]>([]);\n const [files, setFiles] = React.useState<File[]>([]);\n const [result, setResult] = React.useState(\"Noch keine Formularwerte \u00FCbernommen.\");\n const [messages, setMessages] = React.useState<Parameters<typeof UI.MessageList>[0][\"messages\"]>([\n { key: \"editorial\", sender: \"Redaktion\", text: \"Der Hinweis soll **kurz und verst\u00E4ndlich** bleiben.\" },\n { key: \"review\", sender: \"Textpr\u00FCfung\", text: \"\u00D6ffnungszeiten und Reparaturhinweis bleiben erhalten.\" },\n ]);\n const [done, setDone] = React.useState(false);\n return <UI.AppLayout title=\"UI-Controls ausprobieren\" description=\"Lokale Demo: keine Agenten, Uploads oder Serveraktionen. Werte und Dateiauswahl bleiben nur in dieser Ansicht und werden beim Neuladen zur\u00FCckgesetzt.\">\n <UI.Stack gap=\"large\">\n <UI.Form title=\"Formular\" fields={[\n { id: \"title\", label: \"Auftrag\", type: \"text\", placeholder: \"Was soll bearbeitet werden?\", required: true },\n { id: \"notes\", label: \"Hinweise\", type: \"textarea\", rows: 3, placeholder: \"Was soll bei der Bearbeitung ber\u00FCcksichtigt werden?\", hint: \"Mehrzeiliger Text bleibt im Formular ausgerichtet.\" },\n { id: \"count\", label: \"Anzahl\", type: \"number\", placeholder: \"Anzahl der Ergebnisse\", hint: \"1 bis 10 Ergebnisse.\", required: true, min: 1, max: 10 },\n { id: \"mode\", label: \"Modus\", type: \"select\", options: [{ value: \"review\", label: \"Pr\u00FCfen\" }, { value: \"draft\", label: \"Entwerfen\" }] },\n { id: \"approved\", label: \"Auswahl best\u00E4tigt\", type: \"checkbox\", required: true },\n ]} values={values} onChange={setValues} onSubmit={async (next) => { setResult(JSON.stringify(next, null, 2)); }} submitLabel=\"Werte lokal anzeigen\" />\n <UI.Stack gap=\"small\">\n <UI.DataTable<Row> title=\"Datentabelle\" rows={rows} rowKey={(row) => row.id} filterable\n selectedKeys={selected} onSelectionChange={setSelected}\n columns={[{ id: \"name\", label: \"Arbeit\", value: (row) => row.name, sortable: true }, { id: \"count\", label: \"Ergebnisse\", value: (row) => row.count, sortable: true }]}\n actions={[{ id: \"select\", label: \"Ausw\u00E4hlen\", onClick: (row) => { setSelected([row.id]); } }]} />\n <p aria-live=\"polite\">{selected.length} Zeilen ausgew\u00E4hlt</p>\n </UI.Stack>\n <UI.FilePicker label=\"Lokale Dateiauswahl\" files={files} onChange={setFiles} maxFiles={5} maxBytes={10 * 1024 * 1024} />\n <UI.Stack gap=\"small\">\n <UI.TaskProgress title=\"Beispielaufgaben\" tasks={[\n { id: \"read\", label: \"Unterlagen lesen\", status: \"done\" },\n { id: \"review\", label: \"Ergebnisse pr\u00FCfen\", status: done ? \"done\" : \"pending\", description: \"Lokaler Beispielstatus, kein laufender Actor.\" },\n ]} />\n <UI.Stack direction=\"row\"><UI.Button onClick={() => setDone((current) => !current)}>Beispielstatus umschalten</UI.Button></UI.Stack>\n </UI.Stack>\n <UI.Stack gap=\"small\">\n <h2>Ablaufdiagramm</h2>\n <p>Das Diagramm erh\u00E4lt seinen Zustand aus denselben Daten wie die Aufgabenliste.</p>\n <UI.FlowDiagram label={done ? \"Eingang, Pr\u00FCfung fertig, Ergebnis bereit\" : \"Eingang, Pr\u00FCfung l\u00E4uft, Ergebnis ausstehend\"}\n nodes={[\n { id: \"input\", label: \"Eingang\", detail: \"Unterlagen liegen vor\", status: \"done\", kind: \"service\" },\n { id: \"check\", label: \"Pr\u00FCfung\", detail: done ? \"Pr\u00FCfung abgeschlossen\" : \"Unterlagen werden gepr\u00FCft\", status: done ? \"done\" : \"active\", kind: \"agent\" },\n { id: \"result\", label: \"Ergebnis\", detail: done ? \"Ergebnis bereit\" : \"Wartet auf die Pr\u00FCfung\", status: done ? \"done\" : \"pending\", kind: \"actor\" },\n ]}\n edges={[{ source: \"input\", target: \"check\" }, { source: \"check\", target: \"result\" }]} />\n </UI.Stack>\n <UI.Stack gap=\"small\">\n <h2>SVG-Verbindungen</h2>\n <p>SvgEdge zeichnet die Kanten. Knoten, Beschriftungen und Positionen stehen im Code dieser Ansicht.</p>\n <svg viewBox=\"0 0 360 160\" role=\"img\" aria-label={done ? \"Eingang fertig, Pr\u00FCfung abgeschlossen, Ergebnis bereit\" : \"Eingang fertig, Pr\u00FCfung l\u00E4uft, Ergebnis offen\"}\n className=\"block h-auto w-full text-[13px]\">\n <UI.SvgEdge d=\"M112 42 L144 42\" tone={done ? \"success\" : \"warning\"} active={!done} />\n <UI.SvgEdge d=\"M252 42 C320 42 320 118 252 118\" arrow={done ? \"end\" : \"none\"} tone={done ? \"success\" : \"neutral\"} lineStyle={done ? \"solid\" : \"dashed\"} />\n <UI.SvgEdge d=\"M144 118 C64 118 64 96 64 72\" arrow=\"both\" tone=\"accent\" />\n {[{ x: 8, y: 12, label: \"Eingang\", status: \"Fertig\" },\n { x: 148, y: 12, label: \"Pr\u00FCfung\", status: done ? \"Fertig\" : \"L\u00E4uft\" },\n { x: 148, y: 88, label: \"Ergebnis\", status: done ? \"Bereit\" : \"Offen\" }].map((node) => <g key={node.label}>\n <rect x={node.x} y={node.y} width=\"104\" height=\"56\" rx=\"8\" className=\"fill-background stroke-border-strong\" />\n <text x={node.x + 52} y={node.y + 23} textAnchor=\"middle\" className=\"fill-foreground font-semibold\">{node.label}</text>\n <text x={node.x + 52} y={node.y + 42} textAnchor=\"middle\" className=\"fill-muted-foreground text-[11px]\">{node.status}</text>\n </g>)}\n </svg>\n </UI.Stack>\n <UI.Stack gap=\"small\">\n <UI.MessageList messages={messages} label=\"Lokale Redaktionsnotizen\" />\n <UI.Stack direction=\"row\"><UI.Button onClick={() => setMessages((current) => [...current, {\n key: \"note-\" + current.length, sender: current.length % 2 ? \"Textpr\u00FCfung\" : \"Redaktion\",\n text: \"Lokale Beispielnotiz \" + (current.length - 1) + \": Diese Nachricht wurde gerade erg\u00E4nzt.\",\n }])}>Lokale Nachricht erg\u00E4nzen</UI.Button></UI.Stack>\n </UI.Stack>\n <UI.DocumentViewer title=\"Lokales Formularergebnis\" format=\"text\" content={result} />\n <UI.DiffViewer title=\"Beispiel\u00E4nderung\" patch={\"--- a/result.txt\\\\n+++ b/result.txt\\\\n@@ -1 +1 @@\\\\n-Status: offen\\\\n+Status: gepr\u00FCft\"} />\n </UI.Stack>\n </UI.AppLayout>;\n};\n\nconst root = document.getElementById(\"root\");\nif (!root) throw new Error(\"Das Wurzelelement #root fehlt.\");\ncreateRoot(root).render(<App />);\n`,\n },\n};\n", "import type { AppPackage } from \"@ragents/host/plugin-support/actor-programs/app-project.js\";\nimport { controlsTemplate } from \"./controls-template\";\n\nexport interface ActorProgramTemplate {\n id: string;\n title: string;\n description: string;\n ragents: AppPackage;\n files: Readonly<Record<string, string>> & { readonly \"package.json\"?: never };\n}\n\nconst blank: ActorProgramTemplate = {\n id: \"blank\",\n title: \"Leere Mini-App\",\n description: \"Eine reine React-View am vorhandenen Actor ohne zus\u00E4tzliche Serverfunktion.\",\n ragents: {\n title: \"Meine View\",\n description: \"Eine kleine Bedienoberfl\u00E4che des vorhandenen Actors.\",\n views: [{ id: \"main\", client: \"src/client.tsx\" }],\n },\n files: {\n \"src/client.tsx\": `import { createRoot } from \"react-dom/client\";\nimport * as UI from \"@ragents/client/ui\";\n\nconst App = () => (\n <UI.AppLayout title=\"Meine View\">\n <UI.Stack><p>Bereit f\u00FCr deine Inhalte.</p></UI.Stack>\n </UI.AppLayout>\n);\n\nconst root = document.getElementById(\"root\");\nif (!root) throw new Error(\"Das Wurzelelement #root fehlt.\");\ncreateRoot(root).render(<App />);\n`,\n },\n};\n\nconst chat: ActorProgramTemplate = {\n id: \"chat\",\n title: \"Actor-Chat\",\n description: \"Wiederverwendbarer Chat mit Verlauf und optionaler Eingabe an den Actor dieser View.\",\n ragents: {\n title: \"Actor-Chat\",\n description: \"Zeigt das Gespr\u00E4ch mit einem Actor und sendet ihm Benutzereingaben.\",\n views: [{ id: \"main\", client: \"src/client.tsx\" }],\n },\n files: {\n \"src/client.tsx\": `import { createRoot } from \"react-dom/client\";\nimport * as UI from \"@ragents/client/ui\";\nimport { context } from \"@ragents/client\";\n\nconst App = () => (\n <UI.Chat actor={\"@\" + context.actor.handle} className=\"h-full\" showInput placeholder=\"Nachricht an den Actor\" />\n);\n\nconst root = document.getElementById(\"root\");\nif (!root) throw new Error(\"Das Wurzelelement #root fehlt.\");\ncreateRoot(root).render(<App />);\n`,\n },\n};\n\nconst textAnalysis: ActorProgramTemplate = {\n id: \"text-analysis\",\n title: \"Textanalyse\",\n description: \"Ein TypeScript-Actor analysiert Texte mit eigener Funktion, Zustand und React-View.\",\n ragents: {\n title: \"Textanalyse\",\n description: \"Z\u00E4hlt Zeichen, W\u00F6rter und Zeilen und merkt sich die Zahl der Analysen.\",\n backend: \"src/server.ts\",\n views: [{ id: \"main\", client: \"src/client.tsx\" }],\n },\n files: {\n \"src/client.tsx\": `import React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { context, useAppState } from \"@ragents/client\";\nimport * as UI from \"@ragents/client/ui\";\n\ntype FormValues = Parameters<typeof UI.Form>[0][\"values\"];\n\nconst App = () => {\n const state = useAppState();\n const [values, setValues] = React.useState<FormValues>({ text: \"\" });\n const [result, setResult] = React.useState(\"Bereit\");\n\n const analyse = async (next: FormValues): Promise<void> => {\n const answer = await context.capabilities.call(\"analyse\", { text: String(next.text ?? \"\") });\n setResult([\n \\`Zeichen: \\${answer.characters}\\`,\n \\`W\u00F6rter: \\${answer.words}\\`,\n \\`Zeilen: \\${answer.lines}\\`,\n ].join(\"\\\\n\"));\n };\n\n return (\n <UI.AppLayout title=\"Textanalyse\" description={<>Analysen: {state.analyses ?? 0}</>}>\n <UI.Grid>\n <UI.Form fields={[\n { id: \"text\", label: \"Text\", type: \"textarea\", rows: 6, placeholder: \"Text eingeben\" },\n ]} values={values} onChange={setValues} onSubmit={analyse} submitLabel=\"Analysieren\" />\n <UI.Stack><pre aria-live=\"polite\" className=\"min-h-[90px] overflow-auto rounded-md border border-border bg-muted p-2.5 font-mono whitespace-pre-wrap\">{result}</pre></UI.Stack>\n </UI.Grid>\n </UI.AppLayout>\n );\n};\n\nconst root = document.getElementById(\"root\");\nif (!root) throw new Error(\"Das Wurzelelement #root fehlt.\");\ncreateRoot(root).render(<App />);\n`,\n \"src/contract.ts\": `import { Type } from \"typebox\";\n\nexport const contract = {\n state: Type.Object({ analyses: Type.Optional(Type.Integer({\"minimum\": 0})) }, {\"additionalProperties\": false}),\n functions: {\n analyse: {\n label: \"Text analysieren\",\n description: \"Z\u00E4hlt W\u00F6rter, Zeichen und Zeilen ohne externe Wirkung.\",\n tool: { name: \"analyse_text\" },\n input: Type.Object({ text: Type.String({\"description\": \"Der zu analysierende Text.\"}) }, {\"additionalProperties\": false}),\n output: Type.Object({ text: Type.String(), characters: Type.Integer({\"minimum\": 0}), words: Type.Integer({\"minimum\": 0}), lines: Type.Integer({\"minimum\": 0}), analyses: Type.Integer({\"minimum\": 1}) }, {\"additionalProperties\": false}),\n capabilities: [],\n },\n },\n} as const;\n`,\n \"src/server.ts\": `import { defineActor } from \"@ragents/server\";\nimport { contract } from \"./contract.ts\";\n\nexport default defineActor(contract, {\n functions: {\n analyse: async (input, context) => {\n const text = input.text.trim();\n const state = context.state.read();\n const analyses = (state.analyses ?? 0) + 1;\n context.state.replace({ analyses });\n\n return {\n text,\n characters: text.length,\n words: text ? text.split(/\\\\s+/).length : 0,\n lines: text ? text.split(/\\\\r?\\\\n/).length : 0,\n analyses,\n };\n },\n },\n});\n`,\n \"tests/program.test.ts\": `import assert from \"node:assert/strict\";\nimport test from \"node:test\";\nimport type { Static } from \"typebox\";\nimport { createTestContext } from \"@ragents/server/testing\";\nimport { contract } from \"../src/contract.ts\";\nimport program from \"../src/server.ts\";\n\ntest(\"z\u00E4hlt W\u00F6rter, Zeilen und weitere Analysen\", async () => {\n const context = createTestContext<Static<typeof contract.state>>({ state: {} });\n assert.deepEqual(await program.functions.analyse({\"text\": \" Hallo Welt\\\\nNeue Zeile \"}, context), {\"text\": \"Hallo Welt\\\\nNeue Zeile\", \"characters\": 21, \"words\": 4, \"lines\": 2, \"analyses\": 1});\n assert.deepEqual(await program.functions.analyse({\"text\": \"\"}, context), {\"text\": \"\", \"characters\": 0, \"words\": 0, \"lines\": 0, \"analyses\": 2});\n assert.deepEqual(context.state.read(), {\"analyses\": 2});\n});\n`,\n },\n};\n\nconst headlessCounter: ActorProgramTemplate = {\n id: \"headless-counter\",\n title: \"Z\u00E4hler ohne Oberfl\u00E4che\",\n description: \"Ein TypeScript-Actor z\u00E4hlt Eingaben in seinem Zustand und bietet dieselbe Arbeit als Funktion an.\",\n ragents: {\n title: \"Z\u00E4hler\",\n description: \"Sammelt eingehende Texte ohne Modellaufrufe oder Oberfl\u00E4che.\",\n backend: \"src/server.ts\",\n },\n files: {\n \"src/contract.ts\": `import { Type } from \"typebox\";\n\nconst state = Type.Object({\n texts: Type.Optional(Type.Array(Type.String())),\n count: Type.Optional(Type.Integer({ minimum: 0 })),\n}, { additionalProperties: false });\n\nexport const contract = {\n state,\n functions: {\n record: {\n label: \"Text z\u00E4hlen\",\n input: Type.Object({ text: Type.String() }, { additionalProperties: false }),\n output: Type.Object({ count: Type.Integer(), texts: Type.Array(Type.String()) }, { additionalProperties: false }),\n tool: { name: \"record_text\" },\n },\n inspect: {\n label: \"Z\u00E4hler lesen\",\n input: Type.Object({}, { additionalProperties: false }),\n output: state,\n tool: { name: \"read_counter\" },\n },\n },\n input: { capabilities: [] },\n} as const;\n`,\n \"src/server.ts\": `import { defineActor } from \"@ragents/server\";\nimport type { Static } from \"typebox\";\nimport { contract } from \"./contract.ts\";\n\nconst record = (state: Static<typeof contract.state>, text: string) => {\n const texts = [...(state.texts ?? []), text];\n return { texts, count: texts.length };\n};\n\nexport default defineActor(contract, {\n functions: {\n record: (input, context) => {\n const result = record(context.state.read(), input.text);\n context.state.replace(result);\n return result;\n },\n inspect: (_input, context) => context.state.read(),\n },\n onInput: (input, context) => {\n context.state.replace(record(context.state.read(), input.content));\n },\n});\n`,\n \"tests/program.test.ts\": `import assert from \"node:assert/strict\";\nimport test from \"node:test\";\nimport type { Static } from \"typebox\";\nimport { createTestContext } from \"@ragents/server/testing\";\nimport { contract } from \"../src/contract.ts\";\nimport program from \"../src/server.ts\";\n\ntest(\"Eingaben und Funktionen teilen denselben Z\u00E4hler\", async () => {\n const context = createTestContext<Static<typeof contract.state>>({ state: {} });\n for (const content of [\"eins\", \"zwei\", \"drei\"]) {\n await program.onInput!({ id: content, content, artifactIds: [], sourceEventIds: [], subscriptionId: null, event: null }, context);\n }\n assert.deepEqual(await program.functions.inspect({}, context), { texts: [\"eins\", \"zwei\", \"drei\"], count: 3 });\n assert.deepEqual(await program.functions.record({ text: \"vier\" }, context), { texts: [\"eins\", \"zwei\", \"drei\", \"vier\"], count: 4 });\n assert.deepEqual(context.state.read(), { texts: [\"eins\", \"zwei\", \"drei\", \"vier\"], count: 4 });\n});\n`,\n },\n};\n\nconst sharedList: ActorProgramTemplate = {\n id: \"shared-list\",\n title: \"Gemeinsame Liste eines Actors\",\n description: \"Ein Actor besitzt eine Funktion und eine React-View f\u00FCr denselben Listenstand.\",\n ragents: {\n title: \"Gemeinsame Liste\",\n description: \"Sammelt Texte aus der App und aus einem Agenten-Werkzeug in einer gemeinsamen Liste.\",\n backend: \"src/server.ts\",\n views: [{ id: \"main\", client: \"src/client.tsx\" }],\n },\n files: {\n \"src/client.tsx\": `import React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { context, useAppState } from \"@ragents/client\";\nimport * as UI from \"@ragents/client/ui\";\n\ntype FormValues = Parameters<typeof UI.Form>[0][\"values\"];\n\nconst App = () => {\n const state = useAppState();\n const [values, setValues] = React.useState<FormValues>({ text: \"\" });\n const [status, setStatus] = React.useState(\"Bereit\");\n const entries = state.entries ?? [];\n\n const append = async (next: FormValues): Promise<void> => {\n const answer = await context.capabilities.call(\"append\", { text: String(next.text ?? \"\") });\n setValues({ text: \"\" });\n setStatus(\\`Hinzugef\u00FCgt: \\${answer.text}\\`);\n };\n\n return (\n <UI.AppLayout title=\"Gemeinsame Liste\" description={<>{entries.length} {entries.length === 1 ? \"Eintrag\" : \"Eintr\u00E4ge\"}</>}>\n <UI.Grid>\n <UI.Form fields={[\n { id: \"text\", label: \"Neuer Eintrag\", type: \"textarea\", placeholder: \"Text eingeben\" },\n ]} values={values} onChange={setValues} onSubmit={append} submitLabel=\"Hinzuf\u00FCgen\" />\n <UI.Stack>\n <p className=\"text-muted-foreground\" role=\"status\">{status}</p>\n <ul className=\"border-t border-border\">\n {entries.map((entry, index) => <li className=\"min-h-[31px] border-b border-border-soft py-1.5 [overflow-wrap:anywhere]\" key={index}>{entry}</li>)}\n </ul>\n </UI.Stack>\n </UI.Grid>\n </UI.AppLayout>\n );\n};\n\nconst root = document.getElementById(\"root\");\nif (!root) throw new Error(\"Das Wurzelelement #root fehlt.\");\ncreateRoot(root).render(<App />);\n`,\n \"src/contract.ts\": `import { Type } from \"typebox\";\n\nexport const contract = {\n state: Type.Object({ entries: Type.Optional(Type.Array(Type.String())) }, {\"additionalProperties\": false}),\n functions: {\n append: {\n label: \"Eintrag hinzuf\u00FCgen\",\n description: \"H\u00E4ngt den eingegebenen Text an die gemeinsame Liste an.\",\n input: Type.Object({ text: Type.String({\"description\": \"Der Text f\u00FCr den neuen Listeneintrag.\"}) }, {\"additionalProperties\": false}),\n output: Type.Object({ text: Type.String(), entries: Type.Array(Type.String()) }, {\"additionalProperties\": false}),\n capabilities: [],\n tool: { name: \"append_to_list\", card: true },\n },\n },\n} as const;\n`,\n \"src/server.ts\": `import { defineActor } from \"@ragents/server\";\nimport { contract } from \"./contract.ts\";\n\nexport default defineActor(contract, {\n functions: {\n append: async (input, context) => {\n const text = input.text.trim();\n const state = context.state.read();\n const entries = [...(state.entries ?? []), text];\n context.state.replace({ entries });\n return { text, entries };\n },\n },\n});\n`,\n \"tests/program.test.ts\": `import assert from \"node:assert/strict\";\nimport test from \"node:test\";\nimport type { Static } from \"typebox\";\nimport { createTestContext } from \"@ragents/server/testing\";\nimport { contract } from \"../src/contract.ts\";\nimport program from \"../src/server.ts\";\n\ntest(\"erg\u00E4nzt Eintr\u00E4ge ohne vorhandene Eintr\u00E4ge zu verlieren\", async () => {\n const context = createTestContext<Static<typeof contract.state>>({ state: {} });\n assert.deepEqual(await program.functions.append({\"text\": \" Erster Eintrag \"}, context), {\"text\": \"Erster Eintrag\", \"entries\": [\"Erster Eintrag\"]});\n assert.deepEqual(await program.functions.append({\"text\": \"Zweiter Eintrag\"}, context), {\"text\": \"Zweiter Eintrag\", \"entries\": [\"Erster Eintrag\", \"Zweiter Eintrag\"]});\n assert.deepEqual(context.state.read(), {\"entries\": [\"Erster Eintrag\", \"Zweiter Eintrag\"]});\n});\n`,\n },\n};\n\nexport const runModuleTemplates = [blank, chat, controlsTemplate, textAnalysis, headlessCounter, sharedList] as const;\n\nexport const templateFiles = (template: ActorProgramTemplate, name: string): Readonly<Record<string, string>> => ({\n \"package.json\": `${JSON.stringify({ name, private: true, type: \"module\", ragents: template.ragents }, null, 2)}\\n`,\n ...template.files,\n});\n\nexport const templateById = (id: string): ActorProgramTemplate => {\n const template = runModuleTemplates.find((candidate) => candidate.id === id);\n if (!template) throw new Error(`Unbekannte Actor-Programm-Vorlage ${id}. G\u00FCltig: ${runModuleTemplates.map((entry) => entry.id).join(\", \")}.`);\n return template;\n};\n", "import { realpath } from \"node:fs/promises\";\n\n/** A node:test reporter that writes one JSON line per passed test, failed test and stderr line of a test file. */\nconst reporterSource = `\nimport { inspect } from \"node:util\";\nconst shown = (value) => inspect(value, { depth: 4, breakLength: Infinity, maxArrayLength: 20, maxStringLength: 200 }).slice(0, 300);\nexport default async function* (source) {\n for await (const { type, data } of source) {\n if (type === \"test:pass\" && data.details?.type !== \"suite\") yield JSON.stringify({ kind: \"pass\" }) + \"\\\\n\";\n if (type === \"test:fail\" && data.details?.type !== \"suite\" && data.details?.error?.failureType !== \"subtestsFailed\") {\n const error = data.details.error;\n const cause = error.cause instanceof Error ? error.cause : error;\n const assertion = cause.code === \"ERR_ASSERTION\";\n yield JSON.stringify({ kind: \"fail\", name: data.name, file: data.file ?? null, line: data.line ?? null, column: data.column ?? null,\n message: String(cause.message), generated: cause.generatedMessage === true, stack: String(cause.stack ?? \"\"),\n ...(assertion ? { expected: shown(cause.expected), actual: shown(cause.actual) } : {}) }) + \"\\\\n\";\n }\n if (type === \"test:stderr\") yield JSON.stringify({ kind: \"stderr\", file: data.file ?? null, message: String(data.message) }) + \"\\\\n\";\n }\n}\n`;\n\nexport const testReporterArgument = `--test-reporter=data:text/javascript,${encodeURIComponent(reporterSource)}`;\n\ntype TestRecord =\n | { kind: \"pass\" }\n | { kind: \"fail\"; name: string; file: string | null; line: number | null; column: number | null; message: string; generated: boolean; stack: string; expected?: string; actual?: string }\n | { kind: \"stderr\"; file: string | null; message: string };\n\nconst maxDetailed = 10;\nconst frameLine = /^\\s+at /;\n\n/** The lines of an error output that name the error, without stack frames, code excerpts and the Node version. */\nconst errorLines = (lines: readonly string[]): string[] => {\n const meaningful = lines.map((line) => line.trimEnd()).filter((line) => line.trim() !== \"\" && !frameLine.test(line) && !/^Node\\.js v\\d/.test(line) && !/^\\s*\\^+$/.test(line));\n const named = meaningful.filter((line) => /^[A-Za-z]*Error\\b/.test(line));\n return (named.length > 0 ? named : meaningful.slice(-5)).slice(0, 5);\n};\n\n/** Collects the reporter lines of a test run and turns them into a short failure report: counts, and per failed test its name, message, expected and actual values and its place in the program. */\nexport const createTestReport = async (directory: string) => {\n const roots = [...new Set([directory, await realpath(directory)])].sort((left, right) => right.length - left.length);\n const relative = (text: string): string => roots.reduce((result, root) => result.replaceAll(`file://${root}/`, \"\").replaceAll(`${root}/`, \"\"), text);\n const failures: Extract<TestRecord, { kind: \"fail\" }>[] = [];\n const stderrByFile = new Map<string, string[]>();\n const unparsed: string[] = [];\n let passed = 0;\n let failed = 0;\n let pending = \"\";\n\n const record = (line: string): void => {\n if (line.trim() === \"\") return;\n let parsed: TestRecord;\n try {\n parsed = JSON.parse(line) as TestRecord;\n } catch {\n unparsed.push(line);\n return;\n }\n if (parsed.kind === \"pass\") passed += 1;\n if (parsed.kind === \"fail\") {\n failed += 1;\n if (failures.length < maxDetailed) failures.push(parsed);\n }\n if (parsed.kind === \"stderr\") {\n const lines = stderrByFile.get(parsed.file ?? \"\") ?? [];\n stderrByFile.set(parsed.file ?? \"\", [...lines, ...parsed.message.split(\"\\n\")].slice(-50));\n }\n };\n\n const placeOf = (failure: Extract<TestRecord, { kind: \"fail\" }>): string => {\n const frame = failure.stack.split(\"\\n\").filter((line) => frameLine.test(line)).map(relative)\n .map((line) => /\\(?([^\\s()]+:\\d+:\\d+)\\)?\\s*$/.exec(line)?.[1])\n .find((place) => place !== undefined && !place.startsWith(\"/\") && !place.startsWith(\"node:\") && !place.includes(\"node_modules/\"));\n const declared = failure.file === null ? failure.name : `${relative(failure.file)}${failure.line === null ? \"\" : `:${failure.line}:${failure.column ?? 1}`}`;\n return frame ?? declared;\n };\n\n const describe = (failure: Extract<TestRecord, { kind: \"fail\" }>): string => {\n const fileOutput = failure.message === \"test failed\" && failure.file !== null ? stderrByFile.get(failure.file) ?? stderrByFile.get(relative(failure.file)) : undefined;\n const message = fileOutput ? errorLines(fileOutput).join(\"; \") : failure.generated ? failure.message.split(\"\\n\")[0]!.replace(/:$/, \"\") : failure.message.trim().slice(0, 500);\n const values = failure.expected === undefined || failure.expected === failure.actual ? \"\" : ` - erwartet ${failure.expected}, tats\u00E4chlich ${failure.actual}`;\n return `- ${failure.name} (${placeOf(failure)}): ${relative(message)}${relative(values)}`;\n };\n\n return {\n stdout: (chunk: string): void => {\n const lines = (pending + chunk).split(\"\\n\");\n pending = lines.pop() ?? \"\";\n lines.forEach(record);\n },\n report: (name: string, outcome: { code: number | null; timedOut: boolean; stderr: string }): string => {\n record(pending);\n pending = \"\";\n const summary = outcome.timedOut\n ? `Tests f\u00FCr ${name} nach Zeit\u00FCberschreitung abgebrochen: ${passed} bestanden, ${failed} fehlgeschlagen.`\n : `Tests f\u00FCr ${name} fehlgeschlagen: ${passed} bestanden, ${failed} fehlgeschlagen.`;\n const details = failures.map(describe);\n const more = failed > failures.length ? [`... und ${failed - failures.length} weitere`] : [];\n const withoutResult = failed === 0\n ? [`Der Testlauf endete${outcome.code === null ? \"\" : ` mit Code ${outcome.code}`} ohne fehlgeschlagenen Test:`, ...errorLines([...unparsed, ...outcome.stderr.split(\"\\n\")]).map(relative)]\n : [];\n return [summary, ...details, ...more, ...withoutResult].join(\"\\n\");\n },\n };\n};\n", "import { Type } from \"typebox\";\nimport { defineRunFunction, defineToolAvailability, holdsUsable, type RunFunction, type ToolContributor } from \"@ragents/engine\";\nimport { toolDescriptorFrom } from \"@ragents/host/plugin-support/agent-tool.js\";\nimport type { ActorProgramRuntime } from \"./runtime.js\";\nimport type { createProjectDiagnostics } from \"./project-diagnostics.js\";\nconst metadata = [\n { name: \"actor_program_create\", label: \"Create Actor Program\", description: \"Create a private TypeScript package with fixed libraries.\", longDescription: \"Edit files under @actors/name using workspace tools.\" },\n { name: \"actor_program_activate\", label: \"Activate Actor Program\", description: \"Typecheck, build and test a package, then activate its functions and optional views.\", longDescription: \"actor self or @handle attaches to an existing actor; omitted creates a TypeScript actor for a backend, or attaches static views to self.\" },\n { name: \"actor_program_list\", label: \"List Actor Programs\", description: \"List active actor packages, functions and views.\" },\n { name: \"actor_program_remove\", label: \"Remove Actor Program\", description: \"Detach functions and views and stop the backend.\", longDescription: \"A TypeScript actor is stopped; an LLM actor retains its agent behavior.\" },\n { name: \"actor_view_set_visibility\", label: \"Show or hide Actor View\", description: \"Set surface visibility by package-name/view-key or @handle/view-key.\", longDescription: \"Use names you chose; the server resolves the view ID. A unique view title also works.\" },\n { name: \"actor_program_diagnostics\", label: \"Actor Program Diagnostics\", description: \"Read the last project diagnostics.\", longDescription: \"Changed errors are automatically supplied before the next model request.\" },\n] as const;\nexport const actorProgramManagementToolNames = metadata.map((entry) => entry.name);\nexport const actorProgramToolsAvailable = defineToolAvailability({ availability: \"conditional\", availabilityDetail: \"F\u00FCr ausf\u00FChrbare Actors mit agent.spawn und plugin.state.write.\" }, actor => actor.kind !== \"human\" && holdsUsable(actor, \"agent.spawn\") && holdsUsable(actor, \"plugin.state.write\"));\nconst name = Type.String({ pattern: \"^[a-z][a-z0-9-]{0,63}$\" });\ntype Diagnostics = Pick<ReturnType<typeof createProjectDiagnostics>, \"latest\">;\nconst managementTools = (runtime: ActorProgramRuntime, diagnostics: Diagnostics): RunFunction[] => [\n defineRunFunction({ ...metadata[0], schema: Type.Object({ name, template: Type.Union(runtime.templates().map((entry) => Type.Literal(entry.id, { description: entry.description }))) }, { additionalProperties: false }), resultSchema: Type.Object({ name: Type.String(), directory: Type.String(), files: Type.Array(Type.String()) }, { additionalProperties: false }), available: actorProgramToolsAvailable, executionMode: \"sequential\", run: (scope, _id, input) => runtime.scaffold(scope.caller.runId, input.name, input.template) }),\n defineRunFunction({ ...metadata[1], schema: Type.Object({ name, actor: Type.Optional(Type.String()) }, { additionalProperties: false }), resultSchema: Type.Object({ name: Type.String(), actor: Type.String(), views: Type.Number(), active: Type.Literal(true) }, { additionalProperties: false }), available: actorProgramToolsAvailable, executionMode: \"sequential\", run: (scope, id, input) => runtime.activate(scope.context(id), scope.caller.runId, input.name, scope.signal, input.actor) }),\n defineRunFunction({ ...metadata[2], schema: Type.Object({}, { additionalProperties: false }), resultSchema: Type.Array(Type.Object({ name: Type.String(), actor: Type.String(), functions: Type.Array(Type.String()), views: Type.Array(Type.Object({ name: Type.String(), title: Type.String(), visible: Type.Boolean() })) })), available: actorProgramToolsAvailable, executionMode: \"sequential\", run: (scope) => runtime.list(scope.caller.runId) }),\n defineRunFunction({ ...metadata[3], schema: Type.Object({ name }, { additionalProperties: false }), resultSchema: Type.Object({ removed: Type.String() }, { additionalProperties: false }), available: actorProgramToolsAvailable, executionMode: \"sequential\", run: (scope, id, input) => runtime.remove(scope.context(id), scope.caller.runId, input.name) }),\n defineRunFunction({ ...metadata[4], schema: Type.Object({ view: Type.String({ minLength: 1, description: \"package-name/view-key or @handle/view-key of an activated view, without the surface entity prefix app:. No generated IDs needed.\" }), visible: Type.Boolean() }, { additionalProperties: false }), resultSchema: Type.Object({ view: Type.String(), visible: Type.Boolean() }, { additionalProperties: false }), available: actorProgramToolsAvailable, executionMode: \"sequential\", run: (scope, id, input) => runtime.setVisibility(scope.context(id), scope.caller.runId, input.view, input.visible) }),\n defineRunFunction({ ...metadata[5], schema: Type.Object({ name: Type.Optional(name) }, { additionalProperties: false }), resultSchema: Type.String(), available: actorProgramToolsAvailable, executionMode: \"sequential\", run: (scope, _id, input) => diagnostics.latest(scope.caller.runId, scope.caller.actorId, input.name) }),\n];\nexport const createActorProgramToolContributors = (runtime: ActorProgramRuntime, diagnostics: Diagnostics): readonly ToolContributor[] => [\n { name: \"ragents.actor-programs.management\", descriptors: metadata.map((item) => toolDescriptorFrom(item, actorProgramToolsAvailable)), tools: () => managementTools(runtime, diagnostics) },\n { name: \"ragents.actor-programs.functions\", descriptors: [], dynamic: true, tools: (context) => runtime.installedTools(context) },\n];\n", "import { Type } from \"typebox\";\nimport { defineRunFunction, defineToolAvailability, type ToolContributor } from \"@ragents/engine\";\nimport { toolDescriptorFrom } from \"@ragents/host/plugin-support/agent-tool.js\";\nimport { readClientUiComponentNames, readClientUiComponentContracts } from \"@ragents/host/plugin-support/actor-programs/client-contracts.js\";\nimport { actorProgramGuide } from \"./prompts.js\";\n\nconst available = defineToolAvailability({ availability: \"always\", availabilityDetail: \"Typisierte UI-Referenz des installierten Actor-Programm-Plugins.\" }, () => true);\nconst metadata = {\n name: \"actor_program_controls\",\n label: \"Actor-Programm-Anleitung und Controls nachschlagen\",\n description: \"Read Mini-App control contracts or the actor-program authoring guide.\",\n longDescription: \"With topic: guide, explain the TypeScript package workflow through actor_program_activate. Otherwise list control names, or select one component (for example Form) for only its TypeScript props and supporting types. Import controls from @ragents/client/ui and use these exact props.\",\n};\n\nexport const describeClientControls = (component?: string) => {\n const components = readClientUiComponentNames();\n if (component === undefined) return { components };\n if (!components.includes(component)) throw new Error(`Unbekanntes Control ${component}. G\u00FCltig: ${components.join(\", \")}`);\n return { files: readClientUiComponentContracts(component) };\n};\n\nexport const createControlsToolContributor = (): ToolContributor => ({\n name: \"ragents.actor-programs.controls\",\n descriptors: [toolDescriptorFrom(metadata, available)],\n tools: () => [defineRunFunction({\n ...metadata,\n available,\n schema: Type.Object({\n topic: Type.Optional(Type.Union([Type.Literal(\"controls\"), Type.Literal(\"guide\")], { description: \"Default controls: query component names or types. Guide: read the short package workflow without component.\" })),\n component: Type.Optional(Type.String({ minLength: 1, description: \"Optional control name from the catalog, without UI. prefix. Only valid when topic is controls or omitted.\" })),\n }, { additionalProperties: false }),\n resultSchema: Type.Union([\n Type.Object({ guide: Type.String() }, { additionalProperties: false }),\n Type.Object({ components: Type.Array(Type.String()) }, { additionalProperties: false }),\n Type.Object({ files: Type.Record(Type.String(), Type.String()) }, { additionalProperties: false }),\n ]),\n run: async (_scope, _call, input) => {\n if (input.topic === \"guide\") {\n if (input.component !== undefined) throw new Error(\"component ist nur bei topic: controls oder ohne topic erlaubt; f\u00FCr topic: guide lasse component weg.\");\n return { guide: await actorProgramGuide.render({}) };\n }\n return describeClientControls(input.component);\n },\n })],\n});\n", "import { pluginAsset } from \"@ragents/host/plugin-support/plugin-folder.js\";\nimport { boundToTools, handlebarsPrompt } from \"@ragents/host/plugin-support/prompt.js\";\n\nconst buildingTools = [\n \"actor_program_create\",\n \"actor_program_activate\",\n \"actor_program_diagnostics\",\n \"actor_program_list\",\n \"actor_program_remove\",\n \"actor_view_set_visibility\",\n] as const;\n\nexport const actorProgramGuide = handlebarsPrompt(\n \"ragents.actor-programs.prompt\", 750, pluginAsset(\"ragents.actor-programs\", \"prompt.hbs\"),\n);\n\nexport const actorProgramSummary = boundToTools(\n { ...handlebarsPrompt(\"ragents.actor-programs.summary\", 749, pluginAsset(\"ragents.actor-programs\", \"summary.hbs\")), delivery: \"initial\" },\n \"actor_program_controls\",\n ...buildingTools,\n);\n", "import { createHash } from \"node:crypto\";\nimport { readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { AgentContribution, JsonValue } from \"@ragents/engine\";\nimport { projectSourceFiles } from \"@ragents/host/plugin-support/actor-programs/app-project.js\";\n\nconst entryType = \"ragents.actor-programs.project-diagnostics\";\nconst maxDeltaLines = 8;\nconst maxLineLength = 240;\n\ninterface ProgramDiagnostics {\n fingerprint: string;\n errors: string[];\n}\n\nexport interface ProjectDiagnosticsSnapshot {\n version: 1;\n programs: Record<string, ProgramDiagnostics>;\n}\n\nexport interface ProjectDiagnosticsOptions {\n workspaceFor: (runId: string) => string | Promise<string>;\n check: (runId: string, programName: string, actorId: string, signal?: AbortSignal) => Promise<unknown>;\n applies?: (runId: string, actorId: string) => boolean;\n}\n\nconst messageOf = (error: unknown): string => error instanceof Error ? error.message : String(error);\nconst fingerprintOf = (value: unknown): string => createHash(\"sha256\").update(JSON.stringify(value)).digest(\"hex\");\nconst errorLines = (error: unknown): string[] => {\n const complete = error instanceof Error ? (error as { lines?: unknown }).lines : undefined;\n if (Array.isArray(complete) && complete.every((line) => typeof line === \"string\")) return [...new Set(complete as string[])];\n const lines = messageOf(error).split(\"\\n\").map((line) => line.trim()).filter(Boolean);\n const issues = lines.filter((line) => !/^(Build failed with \\d+ errors?:|.*(?:Typpr\u00FCfung|Typecheck|Diagnostik).*:)$/i.test(line));\n return [...new Set(issues.length ? issues : lines)];\n};\nconst allErrors = (snapshot: ProjectDiagnosticsSnapshot): string[] => Object.entries(snapshot.programs)\n .sort(([left], [right]) => left.localeCompare(right))\n .flatMap(([programName, program]) => program.errors.map((error) => `${programName}: ${error}`));\nconst isSnapshot = (value: unknown): value is ProjectDiagnosticsSnapshot => {\n if (value === null || typeof value !== \"object\") return false;\n const snapshot = value as ProjectDiagnosticsSnapshot;\n return snapshot.version === 1 && snapshot.programs !== null && typeof snapshot.programs === \"object\"\n && Object.values(snapshot.programs).every((program) => program && typeof program.fingerprint === \"string\"\n && Array.isArray(program.errors) && program.errors.every((error) => typeof error === \"string\"));\n};\n\nexport const createProjectDiagnostics = (options: ProjectDiagnosticsOptions) => {\n const snapshots = new Map<string, Map<string, ProjectDiagnosticsSnapshot>>();\n const remember = (runId: string, actorId: string, snapshot: ProjectDiagnosticsSnapshot): void => {\n const agents = snapshots.get(runId) ?? new Map<string, ProjectDiagnosticsSnapshot>();\n agents.set(actorId, snapshot);\n snapshots.set(runId, agents);\n };\n const contribution: AgentContribution = {\n id: entryType,\n beforeModelCall: async ({ runId, agentId }, call) => {\n if (options.applies?.(runId, agentId) === false) return undefined;\n call.signal?.throwIfAborted();\n const previous: ProjectDiagnosticsSnapshot = isSnapshot(call.kept) ? call.kept : { version: 1, programs: {} };\n const next: ProjectDiagnosticsSnapshot = { version: 1, programs: {} };\n let changed = false;\n try {\n const directory = await options.workspaceFor(runId);\n const entries = await readdir(directory, { withFileTypes: true }).catch((error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") return [];\n throw error;\n });\n for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) continue;\n call.signal?.throwIfAborted();\n let fingerprint: string;\n let errors: string[] = [];\n try {\n if (entry.isSymbolicLink()) throw new Error(\"Actor-Projekte d\u00FCrfen keine Symlinks sein.\");\n fingerprint = fingerprintOf(await projectSourceFiles(path.join(directory, entry.name)));\n } catch (error) {\n errors = errorLines(error);\n fingerprint = fingerprintOf({ errors });\n }\n const prior = previous.programs[entry.name];\n if (prior?.fingerprint === fingerprint) {\n next.programs[entry.name] = prior;\n continue;\n }\n changed = true;\n if (errors.length === 0) {\n try { await options.check(runId, entry.name, agentId, call.signal); }\n catch (error) {\n call.signal?.throwIfAborted();\n errors = errorLines(error);\n }\n }\n next.programs[entry.name] = { fingerprint, errors };\n }\n } catch (error) {\n call.signal?.throwIfAborted();\n const errors = errorLines(error);\n Object.assign(next.programs, previous.programs);\n next.programs[\"(Workspace)\"] = { fingerprint: fingerprintOf({ errors }), errors };\n }\n if (JSON.stringify(Object.keys(previous.programs).sort()) !== JSON.stringify(Object.keys(next.programs).sort())) changed = true;\n if (JSON.stringify(previous) !== JSON.stringify(next)) changed = true;\n call.signal?.throwIfAborted();\n remember(runId, agentId, next);\n if (!changed) return undefined;\n call.keep(next as unknown as JsonValue);\n const before = new Set(allErrors(previous));\n const after = new Set(allErrors(next));\n const added = [...after].filter((error) => !before.has(error));\n const resolved = [...before].filter((error) => !after.has(error));\n const changes = [...added.map((error) => `Neu: ${error}`), ...resolved.map((error) => `Behoben: ${error}`)];\n const lines = changes.slice(0, maxDeltaLines).map((line) => line.length > maxLineLength ? `${line.slice(0, maxLineLength - 3)}...` : line);\n const omitted = changes.length - lines.length;\n return [\n `Actor-Programm-Projektpr\u00FCfung (TypeScript und Build): ${after.size} Fehler in ${Object.keys(next.programs).length} Projekten; ${added.length} neu, ${resolved.length} behoben.`,\n ...lines,\n ...(omitted > 0 ? [`${omitted} weitere \u00C4nderungen. Vollst\u00E4ndiger letzter Stand: actor_program_diagnostics.`] : []),\n ].join(\"\\n\");\n },\n };\n return {\n contribution,\n latest(runId: string, actorId: string, programName?: string): string {\n const snapshot = snapshots.get(runId)?.get(actorId);\n if (!snapshot) return \"Noch kein Actor-Programm-Projektstand f\u00FCr diesen Agenten gepr\u00FCft.\";\n const programs = Object.entries(snapshot.programs).filter(([id]) => programName === undefined || id === programName);\n if (programs.length === 0) return programName ? `Kein gepr\u00FCfter Projektstand f\u00FCr ${programName}.` : \"Keine Actor-Programm-Projekte vorhanden.\";\n return programs.sort(([left], [right]) => left.localeCompare(right)).map(([id, program]) =>\n [`${id}: ${program.errors.length} Fehler`, ...program.errors].join(\"\\n\")).join(\"\\n\\n\");\n },\n forget(runId: string): void { snapshots.delete(runId); },\n };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["path", "runtimeProviderToken", "name", "selected", "realpath", "assertJsonValue", "runCapabilityContractHash", "available", "descriptor", "name", "failed", "name", "name", "realpath", "program", "runCapabilityContractHash", "available", "selected", "occupied", "actor", "assertJsonValue", "defineRunFunction", "defineToolAvailability", "Type", "defineRunFunction", "defineToolAvailability", "toolDescriptorFrom", "defineToolAvailability", "metadata", "toolDescriptorFrom", "defineRunFunction", "Type", "readdir", "path", "projectSourceFiles", "errorLines", "runtimeProviderToken", "name", "path"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## Actor programs
|
|
2
|
+
|
|
3
|
+
Use TypeScript snippets for one-time work. Actors can own functions, shared state and React views. Create the closest template with
|
|
4
|
+
`actor_program_create`, read its existing files in `@actors/<name>/`, adapt what is needed,
|
|
5
|
+
then `actor_program_activate`. Reuse its code and tests; `bash` runs there with `cwd: "@actors/<name>"`.
|
|
6
|
+
Call these functions through `context.functions` in `typescript_eval`; `typescript_api` gives
|
|
7
|
+
the current contracts. Published actor functions join that same API during the current turn.
|
|
8
|
+
Bind existing actors with `self` or `@handle`. A backend without a binding creates a TypeScript
|
|
9
|
+
actor; a pure view binds to the calling actor. UI functions never require a model turn.
|
|
10
|
+
Changed project errors arrive automatically; `actor_program_diagnostics` gives full diagnostics.
|
|
11
|
+
Query `actor_program_controls` when specific props are unclear, or `topic: "guide"` for the workflow.
|
|
12
|
+
Controls are shadcn/ui components with their usual props, icons from `lucide-react`, Tailwind for layout.
|
|
13
|
+
Build views with `AppLayout`, `Stack` and responsive `Grid`; the host supplies base typography.
|
|
14
|
+
Use `Form` for labeled inputs and interview steps, including `type: "textarea"` for long answers.
|
|
15
|
+
Do not rebuild field wrappers, labels or submit handling with custom layout CSS.
|
|
16
|
+
For diagrams, adapt the `controls` SVG example: `SvgEdge` draws styled connections;
|
|
17
|
+
compact labeled nodes and responsive SVG layout remain app code using Tailwind utilities.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
["!error","!latest","--background","--border","--card","--primary","@container","@max-[470px]:grid-cols-[34px_minmax(0,1fr)_14px]","@max-[470px]:hidden","@reviewer","[&>[data-slot=host-confirmation]]:flex-[0_1_auto]","[&>[data-slot=host-confirmation]]:max-h-[65%]","[&>[data-slot=host-confirmation]]:overflow-auto","[&_small]:col-start-2","[&_small]:font-normal","[&_small]:text-[0.61rem]","[&_small]:text-muted-foreground","[animation-duration:1.2s]","[overflow-wrap:anywhere]","[scrollbar-width:thin]","a","abgebrochen","abgeschlossen","abort","absolute","accent-primary","access","action","actionError","actionId","actionIds","actions","activate","active","activeActorInvocations","activeActors","activeInvocations","activeKey","actor","actor-programs","actorByHandle","actorChatMessages","actorFunctionInput","actorFunctionParameterTypes","actorHandle","actorId","actorProgramApps","actorProgramContracts","actorProgramSourceFileFrom","actorProgramSourceFrom","actorProgramSourceReference","actorProgramSourceView","actorProgramSurfaceElements","actorProgramViews","actorProgramsListingFrom","actorProgramsRevision","actors","after:absolute","after:bg-primary","after:bottom-0","after:content-['']","after:h-[3px]","after:inset-x-0","after:pointer-events-none","aktiv","alert","allow","allow-downloads","allow-forms","allow-scripts","als","anchorActorId","angeforderte","animate-fade-pulse","answer","answerQuestion","any","anzeigen","api","app","appId","appIds","appRef","apps","aria-description","aria-expanded","aria-hidden","aria-label","aria-live","as","ask/ask-payload","askedBy","async","attachBridge","attachmentCapabilities","attachmentCapabilitiesError","attachments","auf","aufrufen","aus","ausblenden","await","base","before:absolute","before:border-border-strong","before:border-dashed","before:border-l","before:bottom-1/4","before:content-['']","before:left-0","before:pointer-events-none","before:top-1/4","bei","bereits","bg-[color-mix(in_srgb,var(--primary)_12%,var(--background))]","bg-accent","bg-background","bg-background/70","bg-card","bg-destructive","bg-foreground/4","bg-glass-app","bg-muted-foreground/55","bg-primary","bg-primary/12","bg-primary/9","bg-success","bg-transparent","bg-warning","bg-warning-soft","bis","boolean","border","border-0","border-[color-mix(in_srgb,var(--primary)_48%,var(--border))]","border-b","border-border","border-border-soft","border-info/25","border-input","border-r","border-r-0","brauchen","bridgeConnectedRef","bridgeGenerationRef","bridgeReady","bridgeToken","bubbles","busy","button","byteLength","camera","canArrange","canInspect","cancelable","cancelled","canvas","capabilities","captured","card","cardSections","case","catch","caught","cause","changed","chat","chat-ack","chat-send","chat-state","chat-unwatch","chat-watch","chatCapabilities","chatSnapshotOf","checkbox","className","closeBridge","closeFullscreen","closeRef","cn","common","compact","configuredPlugin","confirm","confirmation","confirmationAction","confirmationInvocation","connect","connected","const","content","contentWindow","controller","controllerRef","conversationError","createActorProgramsApi","createContext","createdAt","current","currentActorListing","currentColor","currentViews","cursor-pointer","darf","data","data-slot","default","defaultValue","dem","den","depth","der","des","description","descriptor","destructive","detail","die","diese","diesem","diesen","dieses","disabled","disposed","doppelte","draggable","driver","effectAllowed","eigenen","ein","eine","einen","einer","eines","else","embedded","encodes","entity","entry","entryIconClass","entspricht","er","erforderlich","error","erscheinen","erstellte","escape","eslint-disable-next-line","event","executeRequest","exists","expandedByDefault","export","failed","failure","false","fehlgeschlagen","fehlt","field","files","fill","finally","finish","finished","finishedAt","flex","flex-1","flex-[0_0_28px]","flex-[0_0_31px]","flex-col","flex-none","flex-wrap","focus-visible:bg-[color-mix(in_srgb,var(--primary)_7%,var(--card))]","focus-visible:border-[color-mix(in_srgb,var(--primary)_52%,var(--border))]","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-primary/52","focus-within:bg-accent","font-[650]","font-bold","font-mono","font-normal","font-semibold","for","form","frame","frame-ready","frameBase","frameError","frameUrl","fresh","from","fulfilled","full","fullscreen","fullscreenAppId","function","functionId","functionInvocation","gap-0","gap-0.5","gap-1.5","gap-2","gap-2.5","gap-3","gap-3.5","gap-[22px]","gap-[3px]","gap-[7px]","gap-[9px]","gap-px","gap-x-1.5","geladen","generation","geolocation","gesendet","gestartet","gestoppt","get-state","getAttachmentCapabilities","getrennt","grid","grid-cols-2","grid-cols-[34px_minmax(0,1fr)_auto_14px]","grid-cols-[42px_minmax(0,1fr)]","grid-cols-[8px_auto_minmax(0,1fr)]","grid-cols-[auto_minmax(0,1fr)]","grid-cols-[minmax(0,1fr)]","group","h-7","h-8","h-[31px]","h-[calc(100%-2*clamp(16px,2vw,24px))]","h-full","handle","handleLoad","handlePortMessage","hast","hat","headClass","height","host-confirmation","hostInput","hover:bg-[color-mix(in_srgb,var(--primary)_7%,var(--card))]","hover:bg-accent","hover:border-[color-mix(in_srgb,var(--primary)_52%,var(--border))]","hover:not-disabled:bg-transparent","human","icon","icon-sm","id","idFrom","ids","if","iframeRef","ihre","ihrem","im","import","in","includeFunctions","initialFocus","initialLoaded","input","inputWithinLimit","inset-0","inspect","installed","installedApp","installedBy","installiert","installierte","installierten","instanceof","integer","interface","invocation","invocationId","invocationIds","invocationSignature","invocationTime","invocations","invoke","invokeActorFunction","invokeFunction","is","isJsonValue","isRecord","ist","items-center","items-start","items-stretch","json","justify-center","justify-items-start","kann","kein","keine","key","keyOf","keydown","kind","konnten","label","latest","latestInvocation","leading-[1.45]","leer","length","let","line","list","listing","load","loadRevision","loading","lucide-react","m-0","m9","m9.5","markTones","max-h-[320px]","max-h-[340px]","max-w-[132px]","max-w-[214px]","max-w-full","mb-1","mb-2","md:text-sm","mehr","message","messages","microphone","min-h-0","min-h-8","min-w-0","minted","ml-2","moduleId","moduleRevision","motion-reduce:animate-none","move","mt-1","multi","muss","muted","name","names","needsAnswer","needsRunView","neu","new","next","nicht","nimmt","no-referrer","noch","none","nothing","null","number","oder","of","ok","oldest","on","onAnswer","onClick","onDragStart","onOpenChange","onSubmit","once","onmessage","onmessageerror","open","openFullscreen","optionalString","options","or","order","order-1","origin","outline","output","overflow-auto","overflow-hidden","overflow-y-auto","owner","ownerId","p-0","p-2.5","parameter","parameters","parseParameter","parsed","path","pb-5","pb-7","pending","pendingConfirmationFor","pendingConfirmationInvocationId","pendingPort","per","pl-4","place-items-center","placeholder","placement","placements","platziert","pluginId","pluginStates","polite","poll","port","portRef","postError","pr-3","presentation","primary","pro","program","programActors","programChatNotice","pt-3","pt-[18px]","publish","purpose","px-2","px-2.5","px-[11px]","px-[9px]","px-workspace-inset","py-1","py-2","py-2.5","py-[5px]","py-[9px]","quassel/events","question","queued","quick-list","quickIconClass","raw","rawPlacements","react","react-hooks/exhaustive-deps","readActorInvocation","readOnly","readRight","readonly","ready","reason","receiveReady","recentRequestIdsRef","reduce","ref","referrerPolicy","refresh","rejected","relative","relayFrameInput","render","replaceInvocation","request","requestId","requestIdFrom","required","requiredString","resize-y","resolveChatActor","result","results","return","revision","role","round","rounded-[10px]","rounded-full","rounded-lg","rounded-md","routePrefix","rows","rpc","run","run-app","runActorFrom","runAppActionFrom","runAppFrom","runAppInvocationFrom","runAppPlacementFrom","runId","runScriptToolFrom","runToolParameterFrom","runToolTargetFrom","runView","runViewFrom","running","runs","s","sandbox","saved","scope","script","secondary","sectionLabelClass","segment","sein","selbst","select","selectClass","selected","selectedName","selection","sendActorMessage","sendChatState","sendState","sentInvocationsRef","sentStateRef","session","sessionHeaders","sessionRef","setActionError","setActivePath","setBridgeReady","setBusy","setError","setExpanded","setFrameError","setFullscreen","setInvocation","setListing","setState","setSubmitting","shadow-[0_0_0_4px_color-mix(in_srgb,var(--primary)_12%,transparent)]","showCloseButton","signal","signature","sind","size","size-[30px]","size-[34px]","size-[42px]","size-[7px]","slot","sm","snapshot","source","sourceHash","src","src/server.ts","stage","startedAt","state","stateSignature","states","status","step","stopped","string","stroke","strokeLinecap","strokeLinejoin","strokeWidth","submit","succeeded","success","surface","surfaceElements","switch","target","targetLabel","targets","text","text-[0.61rem]","text-[0.63rem]","text-[0.66rem]","text-[0.67rem]","text-[0.68rem]","text-[0.69rem]","text-[0.72rem]","text-[0.74rem]","text-[0.75rem]","text-[0.7rem]","text-[0.82rem]","text-[0.8rem]","text-[0.9rem]","text-[1.05rem]","text-base","text-destructive","text-foreground","text-info","text-left","text-muted-foreground","text-primary","text-sm","text-xs","the","theme","themeRef","throw","tiled","timeout","timer","title","token","tone","tool","tools","tracking-[0.075em]","transition-[background-color,border-color]","true","truncate","try","type","typeof","unbekannte","unbekannten","und","undefined","unique","unknown","unlesbare","unterbrochen","updates","uppercase","url","useAccess","useActorPrograms","useContext","useMemo","useOptionalActorPrograms","useRef","useResolvedTheme","useState","useSurfaceEntities","uses","validateRunAppBridgeRequest","validation","value","values","variant","verarbeitet","verbunden","verlassen","version","versuchen","verweist","verwendet","view","viewBox","visible","visibleApps","visibleStatus","void","von","w-[38px]","w-[calc(100%-2*clamp(16px,2vw,24px))]","w-full","waitForPoll","watchedChats","webPlugin","werden","while","whitespace-nowrap","whitespace-pre-wrap","width","wie","wird","withAccessToken","workspaceTabs","writable","writableRef","write","wurde","zu","zum","zur"]
|