@schlenkr/ragents 0.1.9 → 0.1.11
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/apps/server/package.json +1 -1
- package/apps/server/src/access-projection.ts +9 -39
- package/apps/server/src/access-service.ts +3 -3
- package/apps/server/src/access-session.ts +19 -19
- package/apps/server/src/api/contracts.ts +32 -29
- package/apps/server/src/api/core-methods.ts +21 -19
- package/apps/server/src/api/delivery.ts +2 -2
- package/apps/server/src/api/reference.ts +27 -27
- package/apps/server/src/api/rights.ts +18 -18
- package/apps/server/src/chat-handler.ts +5 -5
- package/apps/server/src/config-definition.ts +37 -10
- package/apps/server/src/config-file.ts +49 -49
- package/apps/server/src/config.ts +2 -0
- package/apps/server/src/data-directory.ts +2 -2
- package/apps/server/src/external-access.ts +1 -1
- package/apps/server/src/folder-install.ts +1 -1
- package/apps/server/src/help-files.ts +1 -1
- package/apps/server/src/host-api.json +8 -1
- package/apps/server/src/host-api.ts +3 -2
- package/apps/server/src/host-record.ts +3 -3
- package/apps/server/src/host-resolution-hooks.mjs +4 -4
- package/apps/server/src/host-version.ts +17 -17
- package/apps/server/src/host-web.ts +5 -5
- package/apps/server/src/main.ts +6 -6
- package/apps/server/src/missing-environment.ts +6 -6
- package/apps/server/src/parent-watch.ts +4 -4
- package/apps/server/src/plugin-build/build.ts +31 -31
- package/apps/server/src/plugin-build/host-api-names.ts +7 -7
- package/apps/server/src/plugin-build/plugin-description.ts +15 -15
- package/apps/server/src/plugin-build/typecheck.ts +1 -1
- package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
- package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
- package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
- package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
- package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
- package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
- package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
- package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
- package/apps/server/src/plugin-support/front-matter.ts +6 -6
- package/apps/server/src/plugin-support/http.ts +2 -2
- package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
- package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
- package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
- package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
- package/apps/server/src/plugin-support/model-aliases.ts +30 -20
- package/apps/server/src/plugin-support/model-choice.ts +15 -15
- package/apps/server/src/plugin-support/model-completion.ts +44 -23
- package/apps/server/src/plugin-support/model-providers.ts +170 -0
- package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
- package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
- package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
- package/apps/server/src/plugin-support/plugin-config.ts +3 -3
- package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
- package/apps/server/src/plugin-support/plugins-root.ts +2 -2
- package/apps/server/src/plugin-support/process-sandbox.ts +48 -47
- package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
- package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
- package/apps/server/src/plugin-support/product-relay.ts +9 -9
- package/apps/server/src/plugin-support/product-start-options.ts +4 -4
- package/apps/server/src/plugin-support/prompt.ts +1 -1
- package/apps/server/src/plugin-support/provision.ts +8 -8
- package/apps/server/src/plugin-support/run-scripts.ts +17 -17
- package/apps/server/src/plugin-support/skills.ts +18 -18
- package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
- package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
- package/apps/server/src/plugin-support/system-prompts.ts +11 -11
- package/apps/server/src/plugin-support/thinking-level.ts +2 -2
- package/apps/server/src/plugin-support/tool-availability.ts +2 -2
- package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
- package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
- package/apps/server/src/plugin-support/zip.ts +7 -7
- package/apps/server/src/profile/bundle-manifest.ts +17 -17
- package/apps/server/src/profile/compose.ts +12 -7
- package/apps/server/src/profile/plugin-discovery.ts +12 -12
- package/apps/server/src/profile/provisioning.ts +5 -5
- package/apps/server/src/profile-target.ts +10 -10
- package/apps/server/src/protocol.ts +2 -2
- package/apps/server/src/provider.ts +63 -58
- package/apps/server/src/ragents/actor-chat-history.ts +8 -8
- package/apps/server/src/ragents/chat-text-positions.ts +2 -2
- package/apps/server/src/ragents/coordinator.ts +2 -2
- package/apps/server/src/ragents/engine.ts +25 -24
- package/apps/server/src/ragents/global-chat.ts +14 -8
- package/apps/server/src/ragents/host-services.ts +6 -3
- package/apps/server/src/ragents/journal-chat-events.ts +1 -1
- package/apps/server/src/ragents/run-owner.ts +2 -2
- package/apps/server/src/ragents/session.ts +49 -49
- package/apps/server/src/ragents/typescript-tools.ts +12 -12
- package/apps/server/src/ragents/workspace-runtime.ts +28 -28
- package/apps/server/src/rpc/dispatcher.ts +19 -19
- package/apps/server/src/rpc/http-transport.ts +11 -11
- package/apps/server/src/rpc/stdio-transport.ts +3 -3
- package/apps/server/src/run-preparation-input.ts +5 -5
- package/apps/server/src/run-preparation.ts +24 -24
- package/apps/server/src/run-transfer.ts +39 -39
- package/apps/server/src/server.ts +51 -49
- package/apps/server/src/settings.ts +1 -1
- package/apps/server/src/startup.ts +3 -3
- package/apps/server/src/title-compactor.ts +9 -9
- package/apps/server/src/title-settings.ts +3 -3
- package/apps/server/src/web-bundles.ts +2 -2
- package/apps/server/src/web-stylesheet.ts +2 -2
- package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-xXXhTDbh.js → highlighted-body-KPVGNVTW-BfNSGxjB.js} +1 -1
- package/apps/web/dist/assets/main-D6bsKcIK.js +11 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-DROEqEeg.js +608 -0
- package/apps/web/dist/assets/runPanel-Dumuuqry.js +21 -0
- package/apps/web/dist/help/guide-access.html +5 -5
- package/apps/web/dist/help/guide-access.md +2 -2
- package/apps/web/dist/help/guide-clients.html +64 -55
- package/apps/web/dist/help/guide-clients.md +62 -52
- package/apps/web/dist/help/guide-distributed.html +12 -7
- package/apps/web/dist/help/guide-distributed.md +9 -4
- package/apps/web/dist/help/guide-functions.html +3 -3
- package/apps/web/dist/help/guide-getting-started.html +24 -15
- package/apps/web/dist/help/guide-getting-started.md +22 -12
- package/apps/web/dist/help/guide-ideas.html +3 -3
- package/apps/web/dist/help/guide-plugins.html +5 -4
- package/apps/web/dist/help/guide-plugins.md +2 -1
- package/apps/web/dist/help/guide-programs.html +3 -3
- package/apps/web/dist/help/guide-runtime.html +6 -6
- package/apps/web/dist/help/guide-runtime.md +3 -3
- package/apps/web/dist/help/guide.html +3 -3
- package/apps/web/dist/help/index.html +1997 -942
- package/apps/web/dist/help/mini-app.css +30 -0
- package/apps/web/dist/help/mini-app.js +14 -14
- package/apps/web/dist/host-web.json +90 -90
- package/apps/web/dist/index.html +3 -3
- package/apps/web/dist/run-panel.html +3 -3
- package/apps/web/package.json +1 -1
- package/apps/web/src/AccessContext.tsx +15 -15
- package/apps/web/src/App.tsx +13 -13
- package/apps/web/src/DiffCode.tsx +2 -2
- package/apps/web/src/HelpDialog.tsx +3 -3
- package/apps/web/src/Overview.tsx +13 -13
- package/apps/web/src/PluginActivation.ts +1 -1
- package/apps/web/src/PluginChat.tsx +15 -15
- package/apps/web/src/PluginFailureNotice.tsx +1 -1
- package/apps/web/src/PluginRegistry.tsx +44 -44
- package/apps/web/src/RunPreparationChat.tsx +11 -11
- package/apps/web/src/RunStore.ts +1 -1
- package/apps/web/src/SessionList.tsx +14 -14
- package/apps/web/src/SettingsModal.tsx +112 -112
- package/apps/web/src/StartOptions.tsx +11 -11
- package/apps/web/src/StartSelection.tsx +11 -11
- package/apps/web/src/StartTiles.tsx +8 -8
- package/apps/web/src/SurfaceShortcuts.tsx +3 -3
- package/apps/web/src/ThemeSettings.tsx +8 -8
- package/apps/web/src/TitleModelSettings.tsx +13 -13
- package/apps/web/src/WorkspacePanel.tsx +9 -9
- package/apps/web/src/access-session.ts +4 -4
- package/apps/web/src/access-token.ts +5 -5
- package/apps/web/src/actor-conversation.ts +3 -3
- package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
- package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
- package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
- package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
- package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
- package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
- package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
- package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
- package/apps/web/src/api.ts +7 -7
- package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
- package/apps/web/src/chat/chat-target.ts +3 -3
- package/apps/web/src/chat/requests.ts +2 -2
- package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
- package/apps/web/src/chat-view-settings.tsx +5 -6
- package/apps/web/src/diff-view.css +1 -1
- package/apps/web/src/highlighting.css +1 -1
- package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
- package/apps/web/src/lib/labels.ts +6 -6
- package/apps/web/src/main.tsx +4 -4
- package/apps/web/src/offered-machines.ts +2 -2
- package/apps/web/src/page-opener.tsx +1 -1
- package/apps/web/src/panel/ConnectionsPage.tsx +26 -23
- package/apps/web/src/panel/LoginForm.tsx +6 -6
- package/apps/web/src/panel/PanelDialogs.tsx +22 -22
- package/apps/web/src/panel/PanelHeader.tsx +2 -2
- package/apps/web/src/panel/PanelPage.tsx +1 -1
- package/apps/web/src/panel/RunLine.tsx +4 -4
- package/apps/web/src/panel/RunsPage.tsx +15 -15
- package/apps/web/src/panel/StartPage.tsx +29 -26
- package/apps/web/src/panel/connection-state.ts +9 -9
- package/apps/web/src/panel/contract.ts +34 -27
- package/apps/web/src/panel.tsx +1 -1
- package/apps/web/src/plugin-bootstrap.ts +5 -5
- package/apps/web/src/product/ModelControl.tsx +3 -3
- package/apps/web/src/product/ProductModelSettings.tsx +16 -16
- package/apps/web/src/product/SystemPromptControl.tsx +11 -11
- package/apps/web/src/product/model-settings.ts +2 -2
- package/apps/web/src/rpc/client.ts +16 -16
- package/apps/web/src/rpc.ts +1 -1
- package/apps/web/src/run-overview.ts +1 -1
- package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
- package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
- package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
- package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
- package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
- package/apps/web/src/run-panel/clipboard.ts +3 -3
- package/apps/web/src/run-panel/host-contract.ts +5 -5
- package/apps/web/src/run-panel/host.ts +15 -15
- package/apps/web/src/run-panel/input-bridge.ts +1 -1
- package/apps/web/src/run-panel/run-panel-location.ts +5 -5
- package/apps/web/src/run-panel/use-session-list.ts +1 -1
- package/apps/web/src/run-panel/workspace-state.ts +3 -3
- package/apps/web/src/run-panel.tsx +4 -4
- package/apps/web/src/run-preparation.ts +2 -2
- package/apps/web/src/run-view.ts +3 -3
- package/apps/web/src/settings-contributions.ts +32 -32
- package/apps/web/src/theme.ts +9 -9
- package/apps/web/src/title-model-settings.ts +6 -6
- package/apps/web/src/ui/ListDetail.tsx +9 -9
- package/apps/web/src/ui/dialog.tsx +2 -2
- package/apps/web/src/ui/modal-controller.ts +3 -3
- package/apps/web/src/ui/modal.tsx +2 -2
- package/apps/web/src/ui/popover.tsx +1 -1
- package/apps/web/src/ui/relative-time.ts +8 -8
- package/apps/web/src/ui/startup-notice.tsx +2 -2
- package/apps/web/src/ui/state-icon.tsx +1 -1
- package/apps/web/src/ui/state-vocabulary.ts +16 -16
- package/apps/web/src/ui/stop-button.tsx +2 -2
- package/bundles/ragents.activity/ragents-bundle.json +2 -2
- package/bundles/ragents.activity/web/classes.json +1 -1
- package/bundles/ragents.activity/web/index.js +1 -1
- package/bundles/ragents.activity/web/index.js.map +2 -2
- package/bundles/ragents.actor-programs/ragents-bundle.json +2 -2
- package/bundles/ragents.actor-programs/server/index.js +256 -228
- package/bundles/ragents.actor-programs/server/index.js.map +4 -4
- package/bundles/ragents.actor-programs/web/classes.json +1 -1
- package/bundles/ragents.actor-programs/web/index.js +1 -1
- package/bundles/ragents.actor-programs/web/index.js.map +3 -3
- package/bundles/ragents.ask/ragents-bundle.json +2 -4
- package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
- package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
- package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
- package/bundles/ragents.ask/server/index.js +23 -23
- package/bundles/ragents.ask/server/index.js.map +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
- package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/{chunk-V7W3QDVS.js → chunk-IQBHK7MV.js} +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-V7W3QDVS.js.map → chunk-IQBHK7MV.js.map} +4 -4
- package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
- package/bundles/ragents.ask/web/classes.json +1 -1
- package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
- package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
- package/bundles/ragents.ask/web/exports/web/api.js +1 -1
- package/bundles/ragents.ask/web/index.js +1 -1
- package/bundles/ragents.ask/web/index.js.map +4 -4
- package/bundles/ragents.browser/executor/index.mjs +35 -35
- package/bundles/ragents.browser/executor/index.mjs.map +2 -2
- package/bundles/ragents.browser/ragents-bundle.json +2 -2
- package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
- package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
- package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
- package/bundles/ragents.browser/server/index.js +31 -31
- package/bundles/ragents.browser/server/index.js.map +2 -2
- package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
- package/bundles/ragents.documents/prompt.hbs +1 -1
- package/bundles/ragents.documents/ragents-bundle.json +2 -2
- package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
- package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
- package/bundles/ragents.documents/server/exports/contract.js +1 -1
- package/bundles/ragents.documents/server/index.js +26 -26
- package/bundles/ragents.documents/server/index.js.map +2 -2
- package/bundles/ragents.documents/web/classes.json +1 -1
- package/bundles/ragents.documents/web/index.js +1 -1
- package/bundles/ragents.documents/web/index.js.map +3 -3
- package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
- package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-fsharp/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
- package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
- package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
- package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
- package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
- package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-roslyn/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
- package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
- package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
- package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
- package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
- package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-typescript/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
- package/bundles/ragents.lsp-typescript/web/index.js +1 -1
- package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
- package/bundles/ragents.model-relay/ragents-bundle.json +7 -3
- package/bundles/ragents.model-relay/server/index.js +25 -21
- package/bundles/ragents.model-relay/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/ragents-bundle.json +2 -2
- package/bundles/ragents.orchestration/server/index.js +28 -28
- package/bundles/ragents.orchestration/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
- package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
- package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
- package/bundles/ragents.orchestration/web/classes.json +1 -1
- package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
- package/bundles/ragents.orchestration/web/index.js +8 -8
- package/bundles/ragents.orchestration/web/index.js.map +3 -3
- package/bundles/ragents.overseer/ragents-bundle.json +2 -2
- package/bundles/ragents.overseer/server/index.js +99 -99
- package/bundles/ragents.overseer/server/index.js.map +2 -2
- package/bundles/ragents.overseer/web/classes.json +1 -1
- package/bundles/ragents.overseer/web/index.js +1 -1
- package/bundles/ragents.overseer/web/index.js.map +2 -2
- package/bundles/ragents.processes/ragents-bundle.json +2 -2
- package/bundles/ragents.processes/server/index.js +11 -11
- package/bundles/ragents.processes/server/index.js.map +2 -2
- package/bundles/ragents.processes/web/classes.json +1 -1
- package/bundles/ragents.processes/web/index.js +3 -3
- package/bundles/ragents.processes/web/index.js.map +2 -2
- package/bundles/ragents.product/ragents-bundle.json +2 -2
- package/bundles/ragents.product/server/index.js +12 -13
- package/bundles/ragents.product/server/index.js.map +2 -2
- package/bundles/ragents.product/web/classes.json +1 -1
- package/bundles/ragents.product/web/index.js +1 -1
- package/bundles/ragents.product/web/index.js.map +2 -2
- package/bundles/ragents.profile-distribution/ragents-bundle.json +2 -2
- package/bundles/ragents.profile-distribution/server/index.js +31 -31
- package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
- package/bundles/ragents.reference/ragents-bundle.json +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
- package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
- package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
- package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
- package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
- package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
- package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
- package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
- package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
- package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
- package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
- package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
- package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
- package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
- package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
- package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
- package/bundles/ragents.reference/web/classes.json +1 -1
- package/bundles/ragents.reference/web/index.js +1 -1
- package/bundles/ragents.reference/web/index.js.map +2 -2
- package/bundles/ragents.todo/ragents-bundle.json +2 -2
- package/bundles/ragents.todo/server/index.js +5 -5
- package/bundles/ragents.todo/server/index.js.map +2 -2
- package/bundles/ragents.todo/web/classes.json +1 -1
- package/bundles/ragents.todo/web/index.js +1 -1
- package/bundles/ragents.todo/web/index.js.map +2 -2
- package/bundles/ragents.transcript/ragents-bundle.json +2 -2
- package/bundles/ragents.transcript/server/index.js +11 -11
- package/bundles/ragents.transcript/server/index.js.map +2 -2
- package/bundles/ragents.watch/ragents-bundle.json +2 -2
- package/bundles/ragents.watch/server/index.js +48 -48
- package/bundles/ragents.watch/server/index.js.map +2 -2
- package/bundles/ragents.workspace/ragents-bundle.json +2 -2
- package/bundles/ragents.workspace/server/index.js +83 -81
- package/bundles/ragents.workspace/server/index.js.map +2 -2
- package/bundles/ragents.workspace/web/classes.json +1 -1
- package/bundles/ragents.workspace/web/index.js +1 -1
- package/bundles/ragents.workspace/web/index.js.map +2 -2
- package/package.json +4 -4
- package/packages/agent/dist/core/model-runtime.d.ts +7 -2
- package/packages/agent/dist/core/tools/bash.d.ts +1 -1
- package/packages/agent/dist/index.d.ts +1 -1
- package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
- package/packages/agent/src/core/compaction/utils.ts +1 -1
- package/packages/agent/src/core/model-runtime.ts +45 -5
- package/packages/agent/src/core/tools/bash.ts +1 -1
- package/packages/agent/src/index.ts +1 -1
- package/packages/agent/src/loop/agent-loop.ts +2 -2
- package/packages/ai/dist/models.d.ts +1 -0
- package/packages/ai/dist/models.generated.d.ts +4544 -983
- package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
- package/packages/ai/src/api/ai-sdk.ts +33 -7
- package/packages/ai/src/api-registry.ts +1 -1
- package/packages/ai/src/index.ts +2 -2
- package/packages/ai/src/models.generated.ts +1 -1
- package/packages/ai/src/models.ts +1 -1
- package/packages/ai/src/providers/openrouter.models.ts +3723 -550
- package/packages/ragents/src/access.ts +12 -12
- package/packages/ragents/src/agents/actor-input.ts +33 -33
- package/packages/ragents/src/agents/catalog.ts +1 -1
- package/packages/ragents/src/agents/delivery.ts +17 -17
- package/packages/ragents/src/agents/plugins.ts +1 -1
- package/packages/ragents/src/agents/scheduler.ts +7 -7
- package/packages/ragents/src/agents/schemas.ts +1 -1
- package/packages/ragents/src/agents/tool-orientation.ts +4 -4
- package/packages/ragents/src/agents/tools.ts +20 -20
- package/packages/ragents/src/agents/toolset.ts +5 -5
- package/packages/ragents/src/agents/workspaces.ts +1 -1
- package/packages/ragents/src/domain/events.ts +1 -1
- package/packages/ragents/src/domain/model.ts +5 -5
- package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
- package/packages/ragents/src/drivers/agent-turn.ts +4 -4
- package/packages/ragents/src/drivers/agent.ts +2 -2
- package/packages/ragents/src/drivers/attachments.ts +4 -4
- package/packages/ragents/src/http/contracts.ts +14 -14
- package/packages/ragents/src/http/methods.ts +6 -6
- package/packages/ragents/src/index.ts +1 -0
- package/packages/ragents/src/plugin-host.ts +162 -116
- package/packages/ragents/src/plugin-types.ts +29 -10
- package/packages/ragents/src/rpc/contract.ts +5 -5
- package/packages/ragents/src/rpc/contribution.ts +2 -2
- package/packages/ragents/src/rpc/peer.ts +11 -11
- package/packages/ragents/src/rpc/protocol.ts +2 -2
- package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
- package/packages/ragents/src/runtime/journal.ts +10 -10
- package/packages/ragents/src/runtime/orchestration.ts +8 -8
- package/packages/ragents/src/runtime/stop.ts +2 -2
- package/packages/ragents/src/script/mediators.ts +35 -35
- package/packages/ragents/src/typescript/async-compiler.ts +14 -14
- package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
- package/packages/ragents/src/typescript/compiler.ts +7 -7
- package/packages/ragents/src/typescript/snippet.ts +5 -5
- package/packages/workspace-executor/src/bash-launch.ts +13 -13
- package/packages/workspace-executor/src/commands.ts +18 -18
- package/packages/workspace-executor/src/context.ts +15 -15
- package/packages/workspace-executor/src/contributions.ts +35 -35
- package/packages/workspace-executor/src/errors.ts +1 -1
- package/packages/workspace-executor/src/executor.ts +15 -15
- package/packages/workspace-executor/src/files.ts +30 -30
- package/packages/workspace-executor/src/language-server/contract.ts +2 -2
- package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
- package/packages/workspace-executor/src/language-server/host.ts +35 -35
- package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
- package/packages/workspace-executor/src/language-server/module.ts +11 -11
- package/packages/workspace-executor/src/language-server/roots.ts +3 -3
- package/packages/workspace-executor/src/language-server/session.ts +15 -15
- package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
- package/packages/workspace-executor/src/managed-process.ts +35 -7
- package/packages/workspace-executor/src/module.ts +8 -8
- package/packages/workspace-executor/src/modules.ts +3 -3
- package/packages/workspace-executor/src/paths.ts +11 -11
- package/packages/workspace-executor/src/process-sandbox.ts +3 -3
- package/packages/workspace-executor/src/processes/module.ts +3 -3
- package/packages/workspace-executor/src/processes/process-table.ts +20 -20
- package/packages/workspace-executor/src/processes/scanner.ts +3 -3
- package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
- package/packages/workspace-executor/src/processes/terminator.ts +13 -13
- package/packages/workspace-executor/src/run-folders.ts +3 -3
- package/packages/workspace-executor/src/safe-environment.ts +4 -4
- package/packages/workspace-executor/src/sandbox-tools.ts +37 -31
- package/packages/workspace-executor/src/session-ident.ts +2 -2
- package/packages/workspace-executor/src/shell-platform.ts +2 -2
- package/packages/workspace-executor/src/tools.ts +5 -5
- package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
- package/plugins/ragents.activity/web/activity.ts +2 -2
- package/plugins/ragents.actor-programs/server/access-projections.ts +31 -0
- package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
- package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
- package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
- package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
- package/plugins/ragents.actor-programs/server/index.ts +2 -0
- package/plugins/ragents.actor-programs/server/limits.ts +3 -3
- package/plugins/ragents.actor-programs/server/methods.ts +1 -1
- package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
- package/plugins/ragents.actor-programs/server/routes.ts +8 -8
- package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
- package/plugins/ragents.actor-programs/server/templates.ts +59 -59
- package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
- package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
- package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
- package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
- package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
- package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
- package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
- package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
- package/plugins/ragents.actor-programs/web/api.ts +36 -36
- package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
- package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
- package/plugins/ragents.actor-programs/web/context.ts +1 -1
- package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
- package/plugins/ragents.actor-programs/web/index.tsx +1 -1
- package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
- package/plugins/ragents.ask/ask-payload.ts +1 -1
- package/plugins/ragents.ask/contract.ts +5 -5
- package/plugins/ragents.ask/server/answer-method.ts +1 -1
- package/plugins/ragents.ask/server/ask-service.ts +9 -9
- package/plugins/ragents.ask/server/ask-tool.ts +10 -10
- package/plugins/ragents.ask/server/contract.ts +5 -5
- package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
- package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
- package/plugins/ragents.ask/web/index.tsx +2 -8
- package/plugins/ragents.browser/executor/contract.ts +6 -6
- package/plugins/ragents.browser/executor/index.ts +1 -1
- package/plugins/ragents.browser/executor/module.ts +6 -6
- package/plugins/ragents.browser/executor/pages.ts +32 -32
- package/plugins/ragents.browser/executor/playwright.ts +8 -8
- package/plugins/ragents.browser/provision.ts +7 -7
- package/plugins/ragents.browser/server/browser.ts +14 -14
- package/plugins/ragents.browser/server/contract.ts +1 -1
- package/plugins/ragents.browser/server/index.ts +1 -1
- package/plugins/ragents.browser/server/tools.ts +14 -14
- package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
- package/plugins/ragents.documents/contract.ts +2 -2
- package/plugins/ragents.documents/prompt.hbs +1 -1
- package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
- package/plugins/ragents.documents/server/files-route.ts +6 -6
- package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
- package/plugins/ragents.documents/server/store.ts +1 -1
- package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
- package/plugins/ragents.documents/web/index.tsx +11 -11
- package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
- package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
- package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
- package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
- package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
- package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
- package/plugins/ragents.lsp-typescript/executor.ts +3 -3
- package/plugins/ragents.model-relay/server/config.ts +6 -2
- package/plugins/ragents.model-relay/server/index.ts +2 -2
- package/plugins/ragents.model-relay/server/relay.ts +23 -22
- package/plugins/ragents.orchestration/contract.ts +8 -8
- package/plugins/ragents.orchestration/server/index.ts +4 -4
- package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
- package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
- package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
- package/plugins/ragents.orchestration/web/ActorChat.tsx +2 -2
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
- package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
- package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
- package/plugins/ragents.orchestration/web/ActorTile.tsx +1 -1
- package/plugins/ragents.orchestration/web/Center.tsx +5 -5
- package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
- package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
- package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
- package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
- package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
- package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
- package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
- package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
- package/plugins/ragents.orchestration/web/constants.ts +2 -2
- package/plugins/ragents.orchestration/web/executions.ts +6 -6
- package/plugins/ragents.orchestration/web/format.ts +1 -1
- package/plugins/ragents.orchestration/web/index.tsx +2 -2
- package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
- package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
- package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +29 -28
- package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
- package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
- package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
- package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
- package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
- package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
- package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +10 -10
- package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
- package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
- package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
- package/plugins/ragents.overseer/contract.ts +20 -20
- package/plugins/ragents.overseer/server/api.ts +8 -8
- package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
- package/plugins/ragents.overseer/server/coordinator.ts +4 -4
- package/plugins/ragents.overseer/server/index.ts +24 -24
- package/plugins/ragents.overseer/server/orientation.ts +8 -8
- package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
- package/plugins/ragents.overseer/server/run-directory.ts +5 -5
- package/plugins/ragents.overseer/server/settings.ts +6 -6
- package/plugins/ragents.overseer/server/user-location.ts +16 -16
- package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
- package/plugins/ragents.overseer/web/index.tsx +20 -20
- 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/server/methods.ts +4 -4
- package/plugins/ragents.processes/server/observer.ts +8 -8
- package/plugins/ragents.processes/server/run-processes.ts +2 -2
- package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
- package/plugins/ragents.processes/web/processes.ts +10 -10
- package/plugins/ragents.product/server/config.ts +1 -1
- package/plugins/ragents.product/server/index.ts +4 -4
- package/plugins/ragents.product/server/runtime.ts +9 -10
- package/plugins/ragents.product/web/index.tsx +1 -1
- package/plugins/ragents.profile-distribution/contract.ts +10 -10
- package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
- package/plugins/ragents.profile-distribution/server/config.ts +2 -2
- package/plugins/ragents.profile-distribution/server/index.ts +4 -4
- package/plugins/ragents.reference/examples.ts +27 -27
- package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
- package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
- package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
- package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
- package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
- package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
- package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
- package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
- 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 +6 -6
- package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
- package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
- package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
- package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
- package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
- package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
- package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
- package/plugins/ragents.reference/walkthroughs.ts +128 -128
- package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
- package/plugins/ragents.todo/server/todo-tool.ts +6 -6
- package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
- package/plugins/ragents.transcript/server/transcript.ts +11 -11
- package/plugins/ragents.watch/server/condition.ts +4 -4
- package/plugins/ragents.watch/server/functions.ts +27 -27
- package/plugins/ragents.watch/server/observation.ts +2 -2
- package/plugins/ragents.watch/server/service.ts +14 -14
- package/plugins/ragents.workspace/client/transport.ts +1 -1
- package/plugins/ragents.workspace/client/workspace-client.ts +62 -49
- package/plugins/ragents.workspace/contract.ts +46 -46
- package/plugins/ragents.workspace/server/binding.ts +20 -20
- package/plugins/ragents.workspace/server/browse-route.ts +8 -8
- package/plugins/ragents.workspace/server/clients.ts +42 -42
- package/plugins/ragents.workspace/server/config.ts +8 -5
- package/plugins/ragents.workspace/server/index.ts +5 -4
- package/plugins/ragents.workspace/server/runtime.ts +26 -26
- package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
- package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
- package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
- package/plugins/ragents.workspace/web/index.tsx +1 -1
- package/ragents.config.core.ts +1 -1
- package/ragents.config.developer.ts +3 -3
- package/ragents.config.showcase.ts +2 -2
- package/scripts/agent/agent-cli.ts +96 -96
- package/scripts/agent/journal.ts +5 -5
- package/scripts/agent/turn-control.ts +4 -4
- package/scripts/package/build-package.ts +29 -29
- package/scripts/package/host-links.mjs +3 -3
- package/scripts/package/publish-package.ts +29 -29
- package/scripts/package/ragents.mjs +19 -19
- package/scripts/plugin/build-builtin-plugins.ts +5 -5
- package/scripts/plugin/plugin-cli.ts +14 -14
- package/scripts/provision/run-provision.ts +14 -15
- package/scripts/remote/connect.ts +46 -46
- package/scripts/remote/start.ts +18 -18
- package/scripts/workspace-client/run-workspace-client.ts +23 -23
- package/apps/web/dist/assets/main-C7JeZFjs.js +0 -6
- package/apps/web/dist/assets/mermaid-HWGCJPDP-DfsU5ofC.js +0 -478
- package/apps/web/dist/assets/runPanel-ZT6TPDLM.js +0 -21
- package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
- package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
- package/plugins/ragents.ask/web/QuestionSection.tsx +0 -48
- /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
- /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
|
@@ -31,29 +31,29 @@ export type RunProcessMessage =
|
|
|
31
31
|
| { kind: "snapshot"; snapshot: RunProcessSnapshot }
|
|
32
32
|
| { kind: "error"; error: string };
|
|
33
33
|
|
|
34
|
-
const runId = Type.String({ minLength: 1, maxLength: 64, description: "
|
|
34
|
+
const runId = Type.String({ minLength: 1, maxLength: 64, description: "Run id" });
|
|
35
35
|
|
|
36
36
|
export const processesContracts = {
|
|
37
37
|
snapshot: defineOperation({
|
|
38
38
|
id: "ragents.processes.snapshot",
|
|
39
|
-
description: "
|
|
39
|
+
description: "The observed processes of a run with their open ports. Rights: runs.read and ragents.processes.read.",
|
|
40
40
|
rights: ["runs.read", "ragents.processes.read"],
|
|
41
41
|
input: Type.Object({ runId }, { additionalProperties: false }),
|
|
42
42
|
result: openJson<RunProcessSnapshot>("RunProcessSnapshot"),
|
|
43
43
|
}),
|
|
44
44
|
stop: defineOperation({
|
|
45
45
|
id: "ragents.processes.stop",
|
|
46
|
-
description: "
|
|
46
|
+
description: "End a process of the run. Rights: runs.read, runs.write and runs.inspect.",
|
|
47
47
|
rights: ["runs.read", "runs.write", "runs.inspect"],
|
|
48
48
|
input: Type.Object({
|
|
49
49
|
runId,
|
|
50
|
-
processId: Type.String({ pattern: "^[1-9][0-9]*-[a-f0-9]{64}$", description: "
|
|
50
|
+
processId: Type.String({ pattern: "^[1-9][0-9]*-[a-f0-9]{64}$", description: "Process id from the snapshot" }),
|
|
51
51
|
}, { additionalProperties: false }),
|
|
52
52
|
result: Type.Null(),
|
|
53
53
|
}),
|
|
54
54
|
live: defineChannel({
|
|
55
55
|
id: "ragents.processes",
|
|
56
|
-
description: "
|
|
56
|
+
description: "The live state of a run's process monitoring. Rights: runs.read and ragents.processes.read.",
|
|
57
57
|
rights: ["runs.read", "ragents.processes.read"],
|
|
58
58
|
params: Type.Object({ runId }, { additionalProperties: false }),
|
|
59
59
|
message: openJson<RunProcessMessage>("RunProcessMessage"),
|
|
@@ -8,9 +8,9 @@ export interface ProcessObservation {
|
|
|
8
8
|
|
|
9
9
|
export interface ProcessMethodOptions {
|
|
10
10
|
observer: ProcessObservation;
|
|
11
|
-
/**
|
|
11
|
+
/** The processes live in the run's workspace; whoever may not see it does not see them either. */
|
|
12
12
|
ensureWorkspaceAccess: (access: AccessContext, runId: string) => void;
|
|
13
|
-
/**
|
|
13
|
+
/** Ends in the run's executor; cancelling the request reaches it via `signal`. */
|
|
14
14
|
terminate: (runId: string, processId: string, signal: AbortSignal) => Promise<void>;
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -21,9 +21,9 @@ export const createProcessMethods = (options: ProcessMethodOptions): MethodContr
|
|
|
21
21
|
}),
|
|
22
22
|
implement(processesContracts.stop, async ({ runId, processId }, { access, signal }) => {
|
|
23
23
|
for (const right of processesContracts.stop.rights) {
|
|
24
|
-
if (!access.can(right)) throw new DomainError("forbidden", "
|
|
24
|
+
if (!access.can(right)) throw new DomainError("forbidden", "Ending processes is not allowed", 403);
|
|
25
25
|
}
|
|
26
|
-
if (signal.aborted) throw new Error("
|
|
26
|
+
if (signal.aborted) throw new Error("The process stop request was cancelled");
|
|
27
27
|
options.ensureWorkspaceAccess(access, runId);
|
|
28
28
|
await options.terminate(runId, processId, signal);
|
|
29
29
|
return null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RunProcessMessage, RunProcessSnapshot } from "../contract.js";
|
|
2
2
|
|
|
3
3
|
export interface RunProcessObserverOptions {
|
|
4
|
-
/**
|
|
4
|
+
/** A run's state at the executor running it; `signal` cancels the query there. */
|
|
5
5
|
snapshot: (runId: string, signal: AbortSignal) => Promise<RunProcessSnapshot>;
|
|
6
6
|
pollIntervalMs: number;
|
|
7
7
|
}
|
|
@@ -12,17 +12,17 @@ interface RunWatch {
|
|
|
12
12
|
listeners: Set<RunProcessListener>;
|
|
13
13
|
fresh: Set<RunProcessListener>;
|
|
14
14
|
last: string | undefined;
|
|
15
|
-
/**
|
|
15
|
+
/** The running query of this run; a hanging executor holds up only this one. */
|
|
16
16
|
polling: Promise<void> | undefined;
|
|
17
17
|
controller: AbortController | undefined;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
/**
|
|
20
|
+
/** How many ticks a query may take before it counts as failed. */
|
|
21
21
|
const SNAPSHOT_TIMEOUT_TICKS = 5;
|
|
22
22
|
|
|
23
23
|
const messageOf = (error: unknown): string => error instanceof Error ? error.message : String(error);
|
|
24
24
|
|
|
25
|
-
/**
|
|
25
|
+
/** Queries the state of every observed run from its executor on each tick, each on its own and with a time limit, and reports only changes. */
|
|
26
26
|
export class RunProcessObserver {
|
|
27
27
|
readonly #options: RunProcessObserverOptions;
|
|
28
28
|
readonly #watches = new Map<string, RunWatch>();
|
|
@@ -38,7 +38,7 @@ export class RunProcessObserver {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
watch(runId: string, listener: RunProcessListener): () => void {
|
|
41
|
-
if (this.#stopped) throw new Error("
|
|
41
|
+
if (this.#stopped) throw new Error("The process monitoring has ended");
|
|
42
42
|
let watch = this.#watches.get(runId);
|
|
43
43
|
if (!watch) {
|
|
44
44
|
watch = { listeners: new Set(), fresh: new Set(), last: undefined, polling: undefined, controller: undefined };
|
|
@@ -104,7 +104,7 @@ export class RunProcessObserver {
|
|
|
104
104
|
return watch.polling;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
/**
|
|
107
|
+
/** A query ends at the latest after its time limit; the cancellation also reaches the executor. */
|
|
108
108
|
#bounded(runId: string, signal: AbortSignal | undefined): Promise<RunProcessSnapshot> {
|
|
109
109
|
const timeoutMs = this.#options.pollIntervalMs * SNAPSHOT_TIMEOUT_TICKS;
|
|
110
110
|
const controller = new AbortController();
|
|
@@ -113,7 +113,7 @@ export class RunProcessObserver {
|
|
|
113
113
|
let timer: NodeJS.Timeout | undefined;
|
|
114
114
|
const deadline = new Promise<never>((_settle, fail) => {
|
|
115
115
|
timer = setTimeout(() => {
|
|
116
|
-
const error = new Error(`
|
|
116
|
+
const error = new Error(`The executor of run ${runId} did not answer the process query within ${timeoutMs / 1000} s`);
|
|
117
117
|
fail(error);
|
|
118
118
|
controller.abort(error);
|
|
119
119
|
}, timeoutMs);
|
|
@@ -130,7 +130,7 @@ export class RunProcessObserver {
|
|
|
130
130
|
: message);
|
|
131
131
|
const changed = serialized !== watch.last;
|
|
132
132
|
watch.last = serialized;
|
|
133
|
-
if (changed && message.kind === "error") console.error(`
|
|
133
|
+
if (changed && message.kind === "error") console.error(`Process monitoring for ${runId}: ${message.error}`);
|
|
134
134
|
for (const listener of watch.listeners) {
|
|
135
135
|
if (changed || watch.fresh.has(listener)) listener(message);
|
|
136
136
|
}
|
|
@@ -5,11 +5,11 @@ import type { RunProcessSnapshot } from "../contract.js";
|
|
|
5
5
|
export interface RunProcesses {
|
|
6
6
|
snapshot: (runId: string, signal?: AbortSignal) => Promise<RunProcessSnapshot>;
|
|
7
7
|
terminate: (runId: string, processId: string, signal: AbortSignal) => Promise<void>;
|
|
8
|
-
/**
|
|
8
|
+
/** If the workspace is unreachable, the run's stop (`stopRun` of its executor) catches up on ending once it is back. */
|
|
9
9
|
stopAll: (runId: string, signal?: AbortSignal) => Promise<void>;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
/**
|
|
12
|
+
/** A run's processes live at the executor running it; where that is is decided solely by its binding. */
|
|
13
13
|
export const runProcessesOf = (sandbox: Pick<SandboxServices, "execute">): RunProcesses => ({
|
|
14
14
|
snapshot: async (runId, signal) => {
|
|
15
15
|
const observed = await sandbox.execute(runId, PROCESS_OPERATIONS.snapshot, {}, signal ? { signal } : {}) as Omit<RunProcessSnapshot, "runId">;
|
|
@@ -25,7 +25,7 @@ const useRunProcesses = (runId: string): ProcessWatchState => {
|
|
|
25
25
|
return rpc.subscribe(processesContracts.live, { runId }, (data) => {
|
|
26
26
|
try {
|
|
27
27
|
const message = messageFrom(data);
|
|
28
|
-
if (message.kind === "snapshot" && message.snapshot.runId !== runId) throw new Error("
|
|
28
|
+
if (message.kind === "snapshot" && message.snapshot.runId !== runId) throw new Error("The process snapshot belongs to another run");
|
|
29
29
|
setState((current) => message.kind === "snapshot"
|
|
30
30
|
? { snapshot: message.snapshot, error: undefined }
|
|
31
31
|
: { snapshot: current.snapshot, error: message.error });
|
|
@@ -48,11 +48,11 @@ interface StopState { busy?: boolean; error?: string }
|
|
|
48
48
|
|
|
49
49
|
function ProcessPill({ process, state, writable, onStop, toolbar = false }: { process: RunProcess; state?: StopState; writable: boolean; onStop: () => void; toolbar?: boolean }) {
|
|
50
50
|
const stop = <StopButton busy={state?.busy === true} className={stopClass} disabled={!writable || state?.busy}
|
|
51
|
-
label={state?.busy ?
|
|
51
|
+
label={state?.busy ? `Stopping ${process.label}` : `Stop ${process.label}`}
|
|
52
52
|
onClick={onStop} size="icon-xs"
|
|
53
|
-
title={!writable ? "
|
|
53
|
+
title={!writable ? "Write or inspect rights are missing to stop" : state?.busy ? "Stopping ..." : `Stop ${process.label}`} />;
|
|
54
54
|
const ports = process.ports.map((port) => <a className={portClass} href={serviceUrl(window.location.hostname, port.port)}
|
|
55
|
-
key={`${port.address}:${port.port}`} rel="noreferrer" target="_blank" title={
|
|
55
|
+
key={`${port.address}:${port.port}`} rel="noreferrer" target="_blank" title={`Open ${port.address}:${port.port} in a new tab`}>
|
|
56
56
|
:{port.port}
|
|
57
57
|
</a>);
|
|
58
58
|
return <div className={cn("flex min-w-0 flex-col", toolbar ? "flex-none self-stretch max-md:not-first:hidden" : "w-full")} data-process-id={process.id}>
|
|
@@ -123,12 +123,12 @@ function ProcessHeaderContent({ runId }: { runId: string }) {
|
|
|
123
123
|
const renderProcess = (process: RunProcess, toolbar = false) => <ProcessPill key={process.id} process={process} state={stops[process.id]} writable={writable} toolbar={toolbar} onStop={() => { void stop(process); }} />;
|
|
124
124
|
if (shown.length === 0 && state.error === undefined && !allOpen) return null;
|
|
125
125
|
return <>
|
|
126
|
-
<div aria-label="
|
|
126
|
+
<div aria-label="Processes and ports of the run" className="flex min-w-0 flex-none items-stretch self-stretch" ref={rootRef} onFocusCapture={rememberFocus}>
|
|
127
127
|
{shown.map((process) => renderProcess(process, true))}
|
|
128
|
-
{(processes.length > 1 || allOpen) && <ToolbarItem as="button" className="md:data-[hidden=false]:hidden" data-hidden={hidden > 0 || allOpen} type="button" onClick={() => setAllOpen(true)} title="
|
|
129
|
-
<span className="max-md:hidden">{hidden > 0 ? `+${hidden}
|
|
128
|
+
{(processes.length > 1 || allOpen) && <ToolbarItem as="button" className="md:data-[hidden=false]:hidden" data-hidden={hidden > 0 || allOpen} type="button" onClick={() => setAllOpen(true)} title="Show all processes of the run">
|
|
129
|
+
<span className="max-md:hidden">{hidden > 0 ? `+${hidden} more` : "Processes"}</span><span className="hidden max-md:inline">All {processes.length}</span>
|
|
130
130
|
</ToolbarItem>}
|
|
131
|
-
{state.error !== undefined && <ToolbarItem className="w-42 text-destructive" role="status" title={state.error}><ToolbarCopy><ToolbarLabel>
|
|
131
|
+
{state.error !== undefined && <ToolbarItem className="w-42 text-destructive" role="status" title={state.error}><ToolbarCopy><ToolbarLabel>Processes</ToolbarLabel><ToolbarText>Monitoring disrupted</ToolbarText></ToolbarCopy></ToolbarItem>}
|
|
132
132
|
</div>
|
|
133
133
|
{allOpen && <Dialog open onOpenChange={(open) => {
|
|
134
134
|
if (open) return;
|
|
@@ -136,9 +136,9 @@ function ProcessHeaderContent({ runId }: { runId: string }) {
|
|
|
136
136
|
if (processes.length === 0) requestAnimationFrame(() => fallback.current?.focus({ preventScroll: true }));
|
|
137
137
|
}}>
|
|
138
138
|
<DialogContent scope="run">
|
|
139
|
-
<DialogHeader><DialogTitle>
|
|
139
|
+
<DialogHeader><DialogTitle>Processes and ports</DialogTitle></DialogHeader>
|
|
140
140
|
<DialogBody className="flex flex-col gap-3 outline-none" ref={dialogRef} tabIndex={-1} onFocusCapture={rememberFocus}>
|
|
141
|
-
{processes.length > 0 ? processes.map((process) => renderProcess(process)) : <p role="status">
|
|
141
|
+
{processes.length > 0 ? processes.map((process) => renderProcess(process)) : <p role="status">No active processes.</p>}
|
|
142
142
|
{state.error !== undefined && <p className="text-destructive" role="alert">{state.error}</p>}
|
|
143
143
|
</DialogBody>
|
|
144
144
|
</DialogContent>
|
|
@@ -7,7 +7,7 @@ const ORIGINS = ["tool-call", "background"] as const;
|
|
|
7
7
|
|
|
8
8
|
const portFrom = (value: unknown): RunProcessPort => {
|
|
9
9
|
if (!isRecord(value) || typeof value.port !== "number" || typeof value.address !== "string") {
|
|
10
|
-
throw new Error("
|
|
10
|
+
throw new Error("A port entry of the process monitoring is unreadable");
|
|
11
11
|
}
|
|
12
12
|
return { port: value.port, address: value.address };
|
|
13
13
|
};
|
|
@@ -16,7 +16,7 @@ const processFrom = (value: unknown): RunProcess => {
|
|
|
16
16
|
if (!isRecord(value) || typeof value.id !== "string" || !value.id || typeof value.pid !== "number" || typeof value.label !== "string"
|
|
17
17
|
|| typeof value.command !== "string" || typeof value.seenSince !== "string"
|
|
18
18
|
|| !ORIGINS.includes(value.origin as RunProcess["origin"]) || !Array.isArray(value.ports)) {
|
|
19
|
-
throw new Error("
|
|
19
|
+
throw new Error("A process entry of the process monitoring is unreadable");
|
|
20
20
|
}
|
|
21
21
|
return {
|
|
22
22
|
id: value.id,
|
|
@@ -32,36 +32,36 @@ const processFrom = (value: unknown): RunProcess => {
|
|
|
32
32
|
const snapshotFrom = (value: unknown): RunProcessSnapshot => {
|
|
33
33
|
if (!isRecord(value) || typeof value.runId !== "string" || typeof value.observedAt !== "string"
|
|
34
34
|
|| !Array.isArray(value.processes)) {
|
|
35
|
-
throw new Error("
|
|
35
|
+
throw new Error("The process monitoring snapshot is unreadable");
|
|
36
36
|
}
|
|
37
37
|
return { runId: value.runId, observedAt: value.observedAt, processes: value.processes.map(processFrom) };
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
export const messageFrom = (value: unknown): RunProcessMessage => {
|
|
41
|
-
if (!isRecord(value)) throw new Error("
|
|
41
|
+
if (!isRecord(value)) throw new Error("The process monitoring message is unreadable");
|
|
42
42
|
if (value.kind === "error" && typeof value.error === "string") return { kind: "error", error: value.error };
|
|
43
43
|
if (value.kind === "snapshot") return { kind: "snapshot", snapshot: snapshotFrom(value.snapshot) };
|
|
44
|
-
throw new Error("
|
|
44
|
+
throw new Error("The process monitoring message has an unknown kind");
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
export const serviceUrl = (hostname: string, port: number): string =>
|
|
48
48
|
`http://${hostname.includes(":") ? `[${hostname}]` : hostname}:${port}/`;
|
|
49
49
|
|
|
50
|
-
export const kindLabel = (process: RunProcess): string => process.ports.length > 0 ? "
|
|
50
|
+
export const kindLabel = (process: RunProcess): string => process.ports.length > 0 ? "Service" : "Process";
|
|
51
51
|
|
|
52
52
|
const originText = (origin: RunProcess["origin"]): string =>
|
|
53
|
-
origin === "background" ? "
|
|
53
|
+
origin === "background" ? "keeps running in the background" : "runs in a tool call";
|
|
54
54
|
|
|
55
55
|
const timeText = (iso: string): string => {
|
|
56
56
|
const parsed = new Date(iso);
|
|
57
|
-
return Number.isNaN(parsed.getTime()) ? iso : parsed.toLocaleTimeString("
|
|
57
|
+
return Number.isNaN(parsed.getTime()) ? iso : parsed.toLocaleTimeString("en-US");
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
export const titleOf = (process: RunProcess): string => {
|
|
61
61
|
const ports = process.ports.length > 0
|
|
62
|
-
? `\
|
|
62
|
+
? `\nListening on ${process.ports.map((port) => `${port.address}:${port.port}`).join(", ")}`
|
|
63
63
|
: "";
|
|
64
|
-
return `${process.command}\nPID ${process.pid}, ${originText(process.origin)},
|
|
64
|
+
return `${process.command}\nPID ${process.pid}, ${originText(process.origin)}, observed since ${timeText(process.seenSince)}${ports}`;
|
|
65
65
|
};
|
|
66
66
|
|
|
67
67
|
export interface VisibleProcesses {
|
|
@@ -35,7 +35,7 @@ const configuredModel = () => env.required("AGENT_MODEL");
|
|
|
35
35
|
const configuredCoordinatorModel = () => env.value("AGENT_COORDINATOR_MODEL", "") || configuredModel();
|
|
36
36
|
const provider = env.value("AGENT_PROVIDER", "openrouter");
|
|
37
37
|
|
|
38
|
-
//
|
|
38
|
+
// With AGENT_PROVIDER "relay", catalog and model access come from another RAgents server.
|
|
39
39
|
const relay: RelayCatalog | undefined = provider === RELAY_PROVIDER
|
|
40
40
|
? createRelayCatalog({ url: env.required("RELAY_URL"), token: env.required("RELAY_TOKEN") })
|
|
41
41
|
: undefined;
|
|
@@ -29,21 +29,21 @@ const productProfiles = (): AgentProfile[] => {
|
|
|
29
29
|
{
|
|
30
30
|
...base,
|
|
31
31
|
name: "coordinator",
|
|
32
|
-
description: "
|
|
32
|
+
description: "Only for the coordinator itself, not for agents.",
|
|
33
33
|
model: coordinatorModel,
|
|
34
34
|
thinking: ragentsProductConfig.coordinatorThinking(),
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
...base,
|
|
38
38
|
name: "relay",
|
|
39
|
-
description: "
|
|
39
|
+
description: "For relaying with few tools.",
|
|
40
40
|
model: coordinatorModel,
|
|
41
41
|
thinking: ragentsProductConfig.coordinatorThinking(),
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
...base,
|
|
45
45
|
name: "standard",
|
|
46
|
-
description: "
|
|
46
|
+
description: "For all agents.",
|
|
47
47
|
model,
|
|
48
48
|
thinking: ragentsProductConfig.thinking(),
|
|
49
49
|
},
|
|
@@ -67,7 +67,7 @@ const ragentsProductPlugin: RAgentsPlugin = {
|
|
|
67
67
|
host.provide(modelUpstreamsToken, ragentsProductConfig.upstreams);
|
|
68
68
|
host.config(...ragentsProductConfigDescriptors);
|
|
69
69
|
void ragentsProductConfig.modelChoice.options;
|
|
70
|
-
//
|
|
70
|
+
// The model defaults are checked against the catalog; with a relay it is only available after the fetch on start.
|
|
71
71
|
let store: ProductModelSettingsStore | undefined;
|
|
72
72
|
const settings = (): ProductModelSettingsStore =>
|
|
73
73
|
store ??= new ProductModelSettingsStore(host.storage.root("model-settings.json"), ragentsProductConfig.modelChoice, productProfiles());
|
|
@@ -2,26 +2,25 @@ import type { ProductRuntimePolicy } from "@ragents/host/ragents/product-runtime
|
|
|
2
2
|
import { ragentsProductConfig } from "./config.js";
|
|
3
3
|
|
|
4
4
|
const contract = [
|
|
5
|
-
"
|
|
6
|
-
"-
|
|
7
|
-
"- Nur Zeichen der deutschen Tastatur: als Strich immer der einfache Bindestrich -, keine Gedankenstriche, keine Ellipsen-Zeichen, keine typografischen Anführungszeichen. ... statt Ellipse, -> statt Pfeil.",
|
|
5
|
+
"General rules:",
|
|
6
|
+
"- Only characters of the German keyboard: as a dash always the simple hyphen -, no em or en dashes, no ellipsis characters, no typographic quotation marks. ... instead of an ellipsis, -> instead of an arrow.",
|
|
8
7
|
].join("\n");
|
|
9
8
|
|
|
10
9
|
const promptComposition = [
|
|
11
|
-
"Run
|
|
12
|
-
"
|
|
13
|
-
"ActorInputs
|
|
14
|
-
"Actors
|
|
10
|
+
"Run coordinator: product prompt and setup instruction, independent of the chosen primary actor.",
|
|
11
|
+
"Other actors keep their own actor prompt; the primary choice only determines output and role contract.",
|
|
12
|
+
"ActorInputs and the current run state are added separately as turn context.",
|
|
13
|
+
"Actors with workspace tools get the workspace description as the last chapter; the agent runtime adds skills and hooks.",
|
|
15
14
|
].join(" ");
|
|
16
15
|
|
|
17
16
|
export const ragentsProductRuntime = {
|
|
18
17
|
coordinator: {
|
|
19
18
|
handle: "coordinator",
|
|
20
|
-
displayName: "
|
|
19
|
+
displayName: "Coordinator",
|
|
21
20
|
profile: "coordinator",
|
|
22
|
-
runTitle: "
|
|
21
|
+
runTitle: "New run",
|
|
23
22
|
ownerHandle: "user",
|
|
24
|
-
ownerDisplayName: "
|
|
23
|
+
ownerDisplayName: "User",
|
|
25
24
|
},
|
|
26
25
|
roleFor: (view, actor) => view.primaryActorId === actor.id ? "primary" : "worker",
|
|
27
26
|
contract: () => contract,
|
|
@@ -14,7 +14,7 @@ const basePlugin = (descriptor: WebPluginDescriptor): WebPlugin => ({
|
|
|
14
14
|
title: "RAgents",
|
|
15
15
|
},
|
|
16
16
|
startOptions: productStartOptions,
|
|
17
|
-
settings: [{ id: "ragents.product.model-settings", label: "
|
|
17
|
+
settings: [{ id: "ragents.product.model-settings", label: "New runs and agents", category: "models",
|
|
18
18
|
order: 20, readRight: "settings.read", Settings: ModelSettings }],
|
|
19
19
|
});
|
|
20
20
|
|
|
@@ -4,19 +4,19 @@ import { defineOperation } from "@ragents/engine/src/rpc/contract";
|
|
|
4
4
|
const pluginEntry = Type.Object({
|
|
5
5
|
id: Type.String({ minLength: 1 }),
|
|
6
6
|
source: Type.Union([Type.Literal("host"), Type.Literal("archive")], {
|
|
7
|
-
description: "host:
|
|
7
|
+
description: "host: the client takes the built-in bundle of its host; archive: the bundle is in the archive",
|
|
8
8
|
}),
|
|
9
9
|
}, { additionalProperties: false });
|
|
10
10
|
|
|
11
11
|
const description = Type.Object({
|
|
12
|
-
profile: Type.String({ minLength: 1, description: "
|
|
13
|
-
version: Type.String({ minLength: 64, maxLength: 64, description: "
|
|
14
|
-
hostApi: Type.Integer({ minimum: 1, description: "
|
|
15
|
-
hostVersion: Type.String({ minLength: 40, maxLength: 40, description: "Git
|
|
16
|
-
packageVersion: Type.String({ minLength: 1, description: "
|
|
17
|
-
file: Type.String({ minLength: 1, description: "
|
|
18
|
-
size: Type.Integer({ minimum: 0, description: "
|
|
19
|
-
archivePath: Type.String({ minLength: 1, description: "HTTP
|
|
12
|
+
profile: Type.String({ minLength: 1, description: "Profile name; the file is called ragents.config.<profile>.ts" }),
|
|
13
|
+
version: Type.String({ minLength: 64, maxLength: 64, description: "Version of the archive as SHA-256" }),
|
|
14
|
+
hostApi: Type.Integer({ minimum: 1, description: "Number of the host API the bundles in the archive are built against; the client's host must offer exactly this one" }),
|
|
15
|
+
hostVersion: Type.String({ minLength: 40, maxLength: 40, description: "Git commit of this server's host; a checkout with a different host API uses it to get a matching one" }),
|
|
16
|
+
packageVersion: Type.String({ minLength: 1, description: "Version of the npm package that carries this commit; an installation with a different host API uses it to get a matching one" }),
|
|
17
|
+
file: Type.String({ minLength: 1, description: "Path of the profile file inside the archive" }),
|
|
18
|
+
size: Type.Integer({ minimum: 0, description: "Archive size in bytes" }),
|
|
19
|
+
archivePath: Type.String({ minLength: 1, description: "HTTP path of the archive on this server" }),
|
|
20
20
|
plugins: Type.Array(pluginEntry),
|
|
21
21
|
}, { additionalProperties: false });
|
|
22
22
|
|
|
@@ -27,7 +27,7 @@ export const profileArchivePath = (version: string): string => `/profile/${versi
|
|
|
27
27
|
export const profileDistributionContracts = {
|
|
28
28
|
describe: defineOperation({
|
|
29
29
|
id: "ragents.profile.describe",
|
|
30
|
-
description: "
|
|
30
|
+
description: "The client profile of this server: name, version, required host API, host and package version, plugins and archive. Right: profile.fetch.",
|
|
31
31
|
rights: ["profile.fetch"],
|
|
32
32
|
input: Type.Object({}, { additionalProperties: false }),
|
|
33
33
|
result: description,
|
|
@@ -34,7 +34,7 @@ const commonRoot = (first: string, others: readonly string[]): string => {
|
|
|
34
34
|
for (const folder of others) {
|
|
35
35
|
while (folder !== root && !folder.startsWith(root + path.sep)) {
|
|
36
36
|
const parent = path.dirname(root);
|
|
37
|
-
if (parent === root) throw new Error(`
|
|
37
|
+
if (parent === root) throw new Error(`Profile file and plugin ${folder} have no common folder`);
|
|
38
38
|
root = parent;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -43,45 +43,45 @@ const commonRoot = (first: string, others: readonly string[]): string => {
|
|
|
43
43
|
|
|
44
44
|
const posixRelative = (root: string, target: string): string => path.relative(root, target).split(path.sep).join("/");
|
|
45
45
|
|
|
46
|
-
//
|
|
46
|
+
// Every name is set so a password or token reference can be checked even without the client environment.
|
|
47
47
|
const placeholderEnvironment: Readonly<Record<string, string | undefined>> = new Proxy({}, { get: () => "client-placeholder-value" });
|
|
48
48
|
|
|
49
49
|
const checkSections = (source: string, raw: Record<string, unknown>, pluginIds: ReadonlySet<string>): void => {
|
|
50
50
|
for (const [section, value] of Object.entries(raw)) {
|
|
51
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`${source}:
|
|
52
|
-
if (section !== "host" && !pluginIds.has(section)) throw new Error(`${source}:
|
|
51
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`${source}: the section ${section} is not an object`);
|
|
52
|
+
if (section !== "host" && !pluginIds.has(section)) throw new Error(`${source}: the section ${section} belongs to no plugin from host.PLUGINS`);
|
|
53
53
|
for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {
|
|
54
|
-
if (section === "host" && !hostConfigKeys.includes(key)) throw new Error(`${source}: host.${key}
|
|
54
|
+
if (section === "host" && !hostConfigKeys.includes(key)) throw new Error(`${source}: host.${key} is not a host key`);
|
|
55
55
|
if (isEnvironmentReference(entry) || isProvisionedReference(entry)) continue;
|
|
56
|
-
if (SECRET_KEY_PATTERN.test(key)) throw new Error(`${source}: ${section}.${key}
|
|
56
|
+
if (SECRET_KEY_PATTERN.test(key)) throw new Error(`${source}: ${section}.${key} is a secret and must be written as env("...")`);
|
|
57
57
|
const valid = typeof entry === "string" || typeof entry === "number" || typeof entry === "boolean"
|
|
58
58
|
|| (Array.isArray(entry) && entry.every((item) => typeof item === "string"))
|
|
59
59
|
|| (Array.isArray(entry) && entry.every((item) => !!item && typeof item === "object" && !Array.isArray(item)));
|
|
60
|
-
if (!valid) throw new Error(`${source}: ${section}.${key}
|
|
61
|
-
if (typeof entry === "string" && /^\$\{[A-Za-z_][A-Za-z0-9_]*\}$/.test(entry)) throw new Error(`${source}: ${section}.${key}
|
|
60
|
+
if (!valid) throw new Error(`${source}: ${section}.${key} has no valid value`);
|
|
61
|
+
if (typeof entry === "string" && /^\$\{[A-Za-z_][A-Za-z0-9_]*\}$/.test(entry)) throw new Error(`${source}: ${section}.${key} references the environment as text; use env("...")`);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
};
|
|
65
65
|
|
|
66
|
-
/**
|
|
66
|
+
/** Checks the client profile file without its environment and determines which plugins belong in the archive. */
|
|
67
67
|
export const inspectClientProfile = async (source: string, root = bundlesRoot): Promise<InspectedClientProfile> => {
|
|
68
68
|
const name = PROFILE_FILE.exec(path.basename(source));
|
|
69
|
-
if (!name) throw new Error(`
|
|
70
|
-
if (!statSync(source, { throwIfNoEntry: false })?.isFile()) throw new Error(`
|
|
69
|
+
if (!name) throw new Error(`The client profile file must be called ragents.config.<profile>.ts: ${source}`);
|
|
70
|
+
if (!statSync(source, { throwIfNoEntry: false })?.isFile()) throw new Error(`The client profile file ${source} is missing`);
|
|
71
71
|
const profile = name[1]!;
|
|
72
72
|
const module = await import(pathToFileURL(source).href) as Record<string, unknown>;
|
|
73
73
|
const raw = module.config;
|
|
74
|
-
if (!raw || typeof raw !== "object" || Array.isArray(raw)) throw new Error(`${source}
|
|
74
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) throw new Error(`${source} exports no constant config`);
|
|
75
75
|
const host = (raw as Record<string, unknown>).host as Record<string, unknown> | undefined;
|
|
76
76
|
const entries = host?.PLUGINS;
|
|
77
77
|
if (!Array.isArray(entries) || entries.length === 0 || !entries.every((entry) => typeof entry === "string" && entry)) {
|
|
78
|
-
throw new Error(`${source}: host.PLUGINS
|
|
78
|
+
throw new Error(`${source}: host.PLUGINS must be a non-empty list`);
|
|
79
79
|
}
|
|
80
|
-
if (host?.PRODUCT_PROFILE !== profile) throw new Error(`${source}: host.PRODUCT_PROFILE
|
|
80
|
+
if (host?.PRODUCT_PROFILE !== profile) throw new Error(`${source}: host.PRODUCT_PROFILE must be ${profile}`);
|
|
81
81
|
const directory = path.dirname(source);
|
|
82
82
|
const unportable = (entries as string[]).filter((entry) => isPluginPath(entry) && !/^\.{1,2}\//.test(entry));
|
|
83
83
|
if (unportable.length > 0) {
|
|
84
|
-
throw new Error(`${source}: ${unportable.join(", ")}
|
|
84
|
+
throw new Error(`${source}: ${unportable.join(", ")} names a bundle absolutely or with ~/; the client resolves this path on its own machine and would not find the delivered bundle there. In the client profile, name every bundle relative to the profile file (./ or ../)`);
|
|
85
85
|
}
|
|
86
86
|
const plugins = ((): readonly ClientProfilePlugin[] => {
|
|
87
87
|
try {
|
|
@@ -94,7 +94,7 @@ export const inspectClientProfile = async (source: string, root = bundlesRoot):
|
|
|
94
94
|
checkSections(source, raw as Record<string, unknown>, new Set([...discoverPluginIds(root), ...plugins.map((plugin) => plugin.id)]));
|
|
95
95
|
const users = resolveProfileUsers(source, module.users, placeholderEnvironment);
|
|
96
96
|
const anonymous = resolveAnonymousUser(source, module.anonymousUser);
|
|
97
|
-
if (users && anonymous) throw new Error(`${source}: users
|
|
97
|
+
if (users && anonymous) throw new Error(`${source}: users and anonymousUser exclude each other`);
|
|
98
98
|
const archived = plugins.filter((plugin) => plugin.source === "archive").map((plugin) => plugin.folder);
|
|
99
99
|
const commonDirectory = commonRoot(directory, archived);
|
|
100
100
|
return { profile, source, root: commonDirectory, file: posixRelative(commonDirectory, source), plugins };
|
|
@@ -104,7 +104,7 @@ const collectFiles = (folder: string, root: string): string[] => {
|
|
|
104
104
|
const files: string[] = [];
|
|
105
105
|
for (const entry of readdirSync(folder, { withFileTypes: true }).sort((left, right) => left.name.localeCompare(right.name, "en"))) {
|
|
106
106
|
const absolute = path.join(folder, entry.name);
|
|
107
|
-
if (entry.isSymbolicLink()) throw new Error(`
|
|
107
|
+
if (entry.isSymbolicLink()) throw new Error(`The client profile contains a symbolic link that the archive does not represent: ${absolute}`);
|
|
108
108
|
if (entry.isDirectory()) {
|
|
109
109
|
files.push(...collectFiles(absolute, root));
|
|
110
110
|
} else if (entry.isFile()) {
|
|
@@ -114,16 +114,16 @@ const collectFiles = (folder: string, root: string): string[] => {
|
|
|
114
114
|
return files;
|
|
115
115
|
};
|
|
116
116
|
|
|
117
|
-
/**
|
|
117
|
+
/** The archive entries: the profile file and the files of the bundles it names by path; the client has the web itself. */
|
|
118
118
|
export const clientProfileEntries = (inspected: InspectedClientProfile): readonly string[] => {
|
|
119
119
|
const entries = [inspected.file, ...inspected.plugins.filter((plugin) => plugin.source === "archive").flatMap((plugin) => collectFiles(plugin.folder, inspected.root))];
|
|
120
120
|
for (const entry of entries) {
|
|
121
|
-
if (!lstatSync(path.join(inspected.root, entry)).isFile()) throw new Error(`
|
|
121
|
+
if (!lstatSync(path.join(inspected.root, entry)).isFile()) throw new Error(`The archive entry ${entry} is not a file`);
|
|
122
122
|
}
|
|
123
123
|
return entries;
|
|
124
124
|
};
|
|
125
125
|
|
|
126
|
-
/**
|
|
126
|
+
/** Packs the entries deterministically from their common folder; the version is the SHA-256 of the archive. */
|
|
127
127
|
export const packClientProfile = async (inspected: InspectedClientProfile): Promise<PackedClientProfile> => {
|
|
128
128
|
const entries = clientProfileEntries(inspected);
|
|
129
129
|
const chunks: Buffer[] = [];
|
|
@@ -9,7 +9,7 @@ export const profileDistributionConfigDescriptors = [
|
|
|
9
9
|
|
|
10
10
|
const env = declaredEnvironment(profileDistributionConfigDescriptors);
|
|
11
11
|
|
|
12
|
-
/**
|
|
12
|
+
/** The path is relative to the server profile file so both files can sit next to each other. */
|
|
13
13
|
const resolveClientProfileFile = (): string | undefined => {
|
|
14
14
|
const value = env.optional("CLIENT_PROFILE_FILE");
|
|
15
15
|
if (!value) return undefined;
|
|
@@ -21,7 +21,7 @@ export const profileDistributionConfig = Object.freeze({
|
|
|
21
21
|
clientProfileFile: resolveClientProfileFile,
|
|
22
22
|
hostVersion: () => {
|
|
23
23
|
const value = env.optional("HOST_VERSION");
|
|
24
|
-
if (value !== undefined && !/^[0-9a-f]{40}$/.test(value)) throw new Error(`HOST_VERSION
|
|
24
|
+
if (value !== undefined && !/^[0-9a-f]{40}$/.test(value)) throw new Error(`HOST_VERSION must be a full Git commit, not "${value}"`);
|
|
25
25
|
return value;
|
|
26
26
|
},
|
|
27
27
|
});
|
|
@@ -22,7 +22,7 @@ const archiveRoute = (state: () => DistributionState): HttpRouteContribution =>
|
|
|
22
22
|
const current = state();
|
|
23
23
|
const version = archivePattern.exec(url.pathname)?.[1];
|
|
24
24
|
if (version !== current.description.version) {
|
|
25
|
-
writeJson(response, 404, { error: `
|
|
25
|
+
writeJson(response, 404, { error: `Version ${version} is no longer offered; the current one is ${current.description.version}` });
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
28
|
response.writeHead(200, {
|
|
@@ -42,13 +42,13 @@ const profileDistributionPlugin: RAgentsPlugin = {
|
|
|
42
42
|
if (!file) {
|
|
43
43
|
host.lifecycle({
|
|
44
44
|
id: "ragents.profile-distribution",
|
|
45
|
-
initialize: () => console.log("
|
|
45
|
+
initialize: () => console.log("Profile distribution: CLIENT_PROFILE_FILE is not set, this server offers no client profile"),
|
|
46
46
|
});
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
49
|
let ready: DistributionState | undefined;
|
|
50
50
|
const state = (): DistributionState => {
|
|
51
|
-
if (!ready) throw new DomainError("profile-not-ready", "
|
|
51
|
+
if (!ready) throw new DomainError("profile-not-ready", "The client profile is not packed yet.", 503);
|
|
52
52
|
return ready;
|
|
53
53
|
};
|
|
54
54
|
host.lifecycle({
|
|
@@ -73,7 +73,7 @@ const profileDistributionPlugin: RAgentsPlugin = {
|
|
|
73
73
|
plugins: inspected.plugins.map((plugin) => ({ id: plugin.id, source: plugin.source })),
|
|
74
74
|
},
|
|
75
75
|
};
|
|
76
|
-
console.log(`
|
|
76
|
+
console.log(`Profile distribution: ${inspected.profile} version ${packed.version.slice(0, 12)} (${packed.entries.length} files, ${packed.archive.byteLength} bytes, host API ${hostApi}, host ${hostVersion.slice(0, 12)}, package ${packageVersion})`);
|
|
77
77
|
},
|
|
78
78
|
});
|
|
79
79
|
host.methods(implement(profileDistributionContracts.describe, () => state().description));
|