@schlenkr/ragents 0.1.10 → 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 +4 -4
- 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 +29 -29
- package/apps/server/src/api/core-methods.ts +17 -17
- 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 +6 -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 +39 -39
- 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 +61 -56
- 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 +23 -23
- package/apps/server/src/ragents/global-chat.ts +8 -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 +48 -48
- 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-BO4wLQtE.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 +53 -54
- package/apps/web/dist/help/guide-clients.md +50 -51
- 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 +196 -144
- package/apps/web/dist/help/mini-app.css +6 -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 +23 -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 +26 -26
- package/apps/web/src/panel/connection-state.ts +9 -9
- package/apps/web/src/panel/contract.ts +28 -28
- 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 +225 -225
- package/bundles/ragents.actor-programs/server/index.js.map +2 -2
- 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 -2
- 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-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
- 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 +2 -2
- 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 +2 -2
- package/bundles/ragents.overseer/ragents-bundle.json +2 -2
- package/bundles/ragents.overseer/server/index.js +98 -98
- 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 +81 -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/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/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/plugin-host.ts +119 -119
- package/packages/ragents/src/plugin-types.ts +16 -16
- 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 +12 -12
- 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 +28 -28
- 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 +1 -1
- 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/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 -2
- 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/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 +22 -22
- 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 +9 -9
- 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 +6 -6
- 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 +54 -54
- 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 +7 -7
- package/plugins/ragents.workspace/server/index.ts +3 -3
- 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-DnnqWHkH.js +0 -11
- package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
- package/apps/web/dist/assets/runPanel-DPm7s3KM.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/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
|
@@ -6,16 +6,16 @@ import type { DeclaredEnvironment } from "./plugin-config.js";
|
|
|
6
6
|
|
|
7
7
|
export type ModelCatalogSource = () => readonly Model<Api>[];
|
|
8
8
|
|
|
9
|
-
/**
|
|
9
|
+
/** The built-in catalog of a provider; a plugin can supply its own catalog, such as that of a relay. */
|
|
10
10
|
export const builtinCatalog = (provider: string): ModelCatalogSource => () => getBuiltinModels(provider as BuiltinProvider);
|
|
11
11
|
|
|
12
|
-
/**
|
|
12
|
+
/** The catalog the model runtime knows for a provider: the profile's aliases or the built-in one. */
|
|
13
13
|
const providerCatalog = (provider: string): ModelCatalogSource =>
|
|
14
14
|
provider === ALIAS_PROVIDER ? () => aliasCatalog() : builtinCatalog(provider);
|
|
15
15
|
|
|
16
16
|
export const modelThinkingOptions = (provider: string, model: string, catalog: ModelCatalogSource = providerCatalog(provider)): readonly ThinkingLevel[] => {
|
|
17
17
|
const metadata = catalog().find((entry) => entry.id === model);
|
|
18
|
-
if (!metadata) throw new Error(`
|
|
18
|
+
if (!metadata) throw new Error(`The model ${provider}/${model} is missing from the model catalog`);
|
|
19
19
|
return getSupportedThinkingLevels(metadata);
|
|
20
20
|
};
|
|
21
21
|
|
|
@@ -25,7 +25,7 @@ export interface ModelChoice {
|
|
|
25
25
|
readonly provider: string;
|
|
26
26
|
readonly selectable: boolean;
|
|
27
27
|
thinkingOptionsFor(model: string | null): readonly ThinkingLevel[];
|
|
28
|
-
/**
|
|
28
|
+
/** The thinking level a model brings along when it is chosen; without one the coordinator's applies. */
|
|
29
29
|
defaultThinkingFor?(model: string): ThinkingLevel | undefined;
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -50,7 +50,7 @@ export const modelChoiceFromEnvironment = (
|
|
|
50
50
|
const catalog = defaults.catalog ?? providerCatalog(defaults.provider);
|
|
51
51
|
const raw = env.optional("MODEL_SELECTABLE");
|
|
52
52
|
if (raw !== undefined && raw !== "" && raw !== "0" && raw !== "1") {
|
|
53
|
-
throw new Error(`MODEL_SELECTABLE
|
|
53
|
+
throw new Error(`MODEL_SELECTABLE must be "0" or "1", not "${raw}"`);
|
|
54
54
|
}
|
|
55
55
|
const released = raw === undefined || raw === "" ? defaults.selectable : raw === "1";
|
|
56
56
|
let resolvedOptions: readonly string[] | undefined;
|
|
@@ -58,8 +58,8 @@ export const modelChoiceFromEnvironment = (
|
|
|
58
58
|
if (resolvedOptions) return resolvedOptions;
|
|
59
59
|
const configured = env.list("AGENT_MODELS");
|
|
60
60
|
const duplicate = configured.find((model, index) => configured.indexOf(model) !== index);
|
|
61
|
-
if (duplicate) throw new Error(`AGENT_MODELS
|
|
62
|
-
//
|
|
61
|
+
if (duplicate) throw new Error(`AGENT_MODELS names ${duplicate} more than once`);
|
|
62
|
+
// Without AGENT_MODELS all aliases or the profile's models apply, and agent and coordinator may share the same one.
|
|
63
63
|
const fallback = defaults.provider === ALIAS_PROVIDER ? catalog().map((model) => model.id) : defaults.fallback();
|
|
64
64
|
const list = configured.length > 0 ? configured : [...new Set(fallback)];
|
|
65
65
|
resolvedOptions = Object.freeze([...list]);
|
|
@@ -70,7 +70,7 @@ export const modelChoiceFromEnvironment = (
|
|
|
70
70
|
if (resolvedDefault) return resolvedDefault;
|
|
71
71
|
const configured = defaults.defaultModel();
|
|
72
72
|
if (!options().includes(configured))
|
|
73
|
-
throw new Error(`
|
|
73
|
+
throw new Error(`The coordinator model ${configured} is not in AGENT_MODELS`);
|
|
74
74
|
resolvedDefault = configured;
|
|
75
75
|
return resolvedDefault;
|
|
76
76
|
};
|
|
@@ -80,18 +80,18 @@ export const modelChoiceFromEnvironment = (
|
|
|
80
80
|
const map = new Map<string, readonly ThinkingLevel[]>();
|
|
81
81
|
for (const entry of env.list("AGENT_MODEL_REASONING")) {
|
|
82
82
|
const separator = entry.indexOf(":");
|
|
83
|
-
if (separator < 0) throw new Error(`AGENT_MODEL_REASONING: "${entry}"
|
|
83
|
+
if (separator < 0) throw new Error(`AGENT_MODEL_REASONING: "${entry}" does not have the "<model>: <levels>" format`);
|
|
84
84
|
const model = entry.slice(0, separator).trim();
|
|
85
85
|
const levels = entry.slice(separator + 1).trim().split(/[\s,]+/).filter(Boolean);
|
|
86
|
-
if (!options().includes(model)) throw new Error(`AGENT_MODEL_REASONING
|
|
87
|
-
if (map.has(model)) throw new Error(`AGENT_MODEL_REASONING
|
|
88
|
-
if (levels.length === 0) throw new Error(`AGENT_MODEL_REASONING: ${model}
|
|
86
|
+
if (!options().includes(model)) throw new Error(`AGENT_MODEL_REASONING names ${model}, which is not in AGENT_MODELS`);
|
|
87
|
+
if (map.has(model)) throw new Error(`AGENT_MODEL_REASONING names ${model} more than once`);
|
|
88
|
+
if (levels.length === 0) throw new Error(`AGENT_MODEL_REASONING: ${model} names no level`);
|
|
89
89
|
const invalid = levels.find((level) => !isThinkingLevel(level));
|
|
90
|
-
if (invalid) throw new Error(`AGENT_MODEL_REASONING: ${invalid}
|
|
90
|
+
if (invalid) throw new Error(`AGENT_MODEL_REASONING: ${invalid} is not a level (valid: ${thinkingLevels.join(", ")})`);
|
|
91
91
|
const supported = modelThinkingOptions(defaults.provider, model, catalog);
|
|
92
92
|
const unsupported = levels.find((level) => !supported.includes(level as ThinkingLevel));
|
|
93
|
-
if (unsupported) throw new Error(`AGENT_MODEL_REASONING: ${unsupported}
|
|
94
|
-
if (new Set(levels).size !== levels.length) throw new Error(`AGENT_MODEL_REASONING: ${model}
|
|
93
|
+
if (unsupported) throw new Error(`AGENT_MODEL_REASONING: ${unsupported} is not available for ${defaults.provider}/${model} (valid: ${supported.join(", ")})`);
|
|
94
|
+
if (new Set(levels).size !== levels.length) throw new Error(`AGENT_MODEL_REASONING: ${model} names a level more than once`);
|
|
95
95
|
map.set(model, Object.freeze(levels as ThinkingLevel[]));
|
|
96
96
|
}
|
|
97
97
|
reasoning = map;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { ModelRuntime } from "@ragents/agent";
|
|
2
|
+
import { createModels, getSupportedThinkingLevels, type Api, type AssistantMessage, type Context, type Model, type SimpleStreamOptions } from "@ragents/ai";
|
|
2
3
|
import { openrouterProvider } from "@ragents/ai/providers/openrouter";
|
|
3
|
-
import type
|
|
4
|
+
import { serviceToken, type ServiceToken, type ThinkingLevel } from "@ragents/engine";
|
|
5
|
+
import { ALIAS_PROVIDER, aliasCatalog, configuredModelAliases } from "./model-aliases.js";
|
|
4
6
|
|
|
5
7
|
/** One question to a model, without history and without tools. */
|
|
6
8
|
export interface TextCompletionRequest {
|
|
@@ -25,6 +27,30 @@ export interface CompletionModel {
|
|
|
25
27
|
readonly complete: (request: TextCompletionRequest) => Promise<TextCompletion>;
|
|
26
28
|
}
|
|
27
29
|
|
|
30
|
+
type Completer = (model: Model<Api>, context: Context, options: SimpleStreamOptions) => Promise<AssistantMessage>;
|
|
31
|
+
|
|
32
|
+
const completionModel = (id: string, model: Model<Api>, levels: Model<Api>, completeSimple: Completer): CompletionModel => ({
|
|
33
|
+
id,
|
|
34
|
+
thinkingLevels: getSupportedThinkingLevels(levels),
|
|
35
|
+
complete: async (request) => {
|
|
36
|
+
const response = await completeSimple(model, {
|
|
37
|
+
systemPrompt: request.systemPrompt,
|
|
38
|
+
messages: [{ role: "user", content: request.text, timestamp: Date.now() }],
|
|
39
|
+
}, {
|
|
40
|
+
// An omitted effort is the off setting of the model; OpenRouter gets it explicitly.
|
|
41
|
+
reasoning: request.thinking === "off" ? undefined : request.thinking,
|
|
42
|
+
temperature: request.temperature,
|
|
43
|
+
maxTokens: request.maxTokens,
|
|
44
|
+
maxRetries: 0,
|
|
45
|
+
timeoutMs: request.timeoutMs,
|
|
46
|
+
signal: request.signal,
|
|
47
|
+
});
|
|
48
|
+
if (response.stopReason !== "stop") return { kind: "unfinished" };
|
|
49
|
+
if (response.content.some((part) => part.type !== "text" && part.type !== "thinking")) return { kind: "not-text" };
|
|
50
|
+
return { kind: "text", text: response.content.flatMap((part) => part.type === "text" ? [part.text] : []).join("") };
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
|
|
28
54
|
/** An OpenRouter model of the built-in catalog that answers over the fastest provider and never retries; the key comes from OPENROUTER_API_KEY. */
|
|
29
55
|
export const openRouterCompletionModel = (id: string): CompletionModel | undefined => {
|
|
30
56
|
const models = createModels();
|
|
@@ -34,25 +60,20 @@ export const openRouterCompletionModel = (id: string): CompletionModel | undefin
|
|
|
34
60
|
const model: Model<Api> = { ...selected, compat: { ...selected.compat,
|
|
35
61
|
openRouterRouting: { ...selected.compat?.openRouterRouting, sort: "latency" },
|
|
36
62
|
} };
|
|
37
|
-
return
|
|
38
|
-
id,
|
|
39
|
-
thinkingLevels: getSupportedThinkingLevels(selected),
|
|
40
|
-
complete: async (request) => {
|
|
41
|
-
const response = await models.completeSimple(model, {
|
|
42
|
-
systemPrompt: request.systemPrompt,
|
|
43
|
-
messages: [{ role: "user", content: request.text, timestamp: Date.now() }],
|
|
44
|
-
}, {
|
|
45
|
-
// An omitted effort is the off setting of the model; OpenRouter gets it explicitly.
|
|
46
|
-
reasoning: request.thinking === "off" ? undefined : request.thinking,
|
|
47
|
-
temperature: request.temperature,
|
|
48
|
-
maxTokens: request.maxTokens,
|
|
49
|
-
maxRetries: 0,
|
|
50
|
-
timeoutMs: request.timeoutMs,
|
|
51
|
-
signal: request.signal,
|
|
52
|
-
});
|
|
53
|
-
if (response.stopReason !== "stop") return { kind: "unfinished" };
|
|
54
|
-
if (response.content.some((part) => part.type !== "text" && part.type !== "thinking")) return { kind: "not-text" };
|
|
55
|
-
return { kind: "text", text: response.content.flatMap((part) => part.type === "text" ? [part.text] : []).join("") };
|
|
56
|
-
},
|
|
57
|
-
};
|
|
63
|
+
return completionModel(id, model, selected, (target, context, options) => models.completeSimple(target, context, options));
|
|
58
64
|
};
|
|
65
|
+
|
|
66
|
+
/** A profile alias (MODEL_ALIASES) over the server's model runtime, with the levels the alias offers; none for an unknown alias. */
|
|
67
|
+
export const aliasCompletionModel = (runtime: () => Promise<ModelRuntime>, alias: string): CompletionModel | undefined => {
|
|
68
|
+
if (!configuredModelAliases().some((entry) => entry.alias === alias)) return undefined;
|
|
69
|
+
const offered = aliasCatalog().find((model) => model.id === alias)!;
|
|
70
|
+
return completionModel(alias, offered, offered, async (_model, context, options) => {
|
|
71
|
+
const models = await runtime();
|
|
72
|
+
const model = models.getModel(ALIAS_PROVIDER, alias);
|
|
73
|
+
if (!model) throw new Error(`The model runtime offers no alias ${alias}`);
|
|
74
|
+
return models.completeSimple(model, context, options);
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/** Resolves a profile alias to a completion model over the server's model runtime; plugins take it with host.service(...) and call it at any time. */
|
|
79
|
+
export const aliasCompletionModelToken: ServiceToken<(alias: string) => CompletionModel | undefined> = serviceToken("host.alias-completion-model");
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { EXTENDED_THINKING_LEVELS, type Api, type InputModality, type Model } from "@ragents/ai";
|
|
2
|
+
import { builtinProviders } from "@ragents/ai/providers/all";
|
|
3
|
+
import type { ModelProviderRegistration } from "@ragents/engine";
|
|
4
|
+
import { isEnvironmentReference } from "../config-definition.js";
|
|
5
|
+
import { MissingEnvironmentError } from "../missing-environment.js";
|
|
6
|
+
import type { ModelUpstream } from "./model-upstreams.js";
|
|
7
|
+
import { declaredEnvironment } from "./plugin-config.js";
|
|
8
|
+
import { RELAY_PROVIDER } from "./product-relay.js";
|
|
9
|
+
|
|
10
|
+
export const modelProviderEnvDescriptors = [
|
|
11
|
+
{ key: "MODEL_PROVIDERS", source: "environment" },
|
|
12
|
+
] as const;
|
|
13
|
+
|
|
14
|
+
const PROVIDER_ID = /^[a-z0-9][a-z0-9._-]{0,63}$/;
|
|
15
|
+
const ENVIRONMENT_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
16
|
+
const PROVIDER_KEYS: readonly string[] = ["id", "baseUrl", "apiKey", "compat", "models"];
|
|
17
|
+
const COMPAT_KEYS: readonly string[] = ["thinkingFormat", "requiresReasoningContentOnAssistantMessages"];
|
|
18
|
+
const THINKING_FORMATS: readonly string[] = ["qwen-chat-template"];
|
|
19
|
+
const MODEL_KEYS: readonly string[] = ["id", "contextWindow", "maxTokens", "reasoning", "input", "thinkingLevelMap"];
|
|
20
|
+
const INPUTS: readonly InputModality[] = ["text", "image", "video", "file", "audio"];
|
|
21
|
+
|
|
22
|
+
type Entry = Record<string, unknown>;
|
|
23
|
+
|
|
24
|
+
const objectAt = (value: unknown, location: string, expected: string): Entry => {
|
|
25
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`${location} must be an object with ${expected}`);
|
|
26
|
+
return value as Entry;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const onlyKeys = (entry: Entry, allowed: readonly string[], location: string): void => {
|
|
30
|
+
const unknown = Object.keys(entry).find((key) => !allowed.includes(key));
|
|
31
|
+
if (unknown) throw new Error(`${location}.${unknown} is not supported; allowed are ${allowed.join(", ")}`);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const positiveInteger = (value: unknown, location: string): number => {
|
|
35
|
+
if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) throw new Error(`${location} must be a positive integer`);
|
|
36
|
+
return value;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const baseUrlOf = (value: unknown, location: string): string => {
|
|
40
|
+
const text = typeof value === "string" ? value : "";
|
|
41
|
+
const url = URL.canParse(text) ? new URL(text) : undefined;
|
|
42
|
+
if (!url || (url.protocol !== "http:" && url.protocol !== "https:") || text.endsWith("/")) {
|
|
43
|
+
throw new Error(`${location}.baseUrl needs an http or https address without a trailing slash, such as http://localhost:8000/v1`);
|
|
44
|
+
}
|
|
45
|
+
return text;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const apiKeyOf = (value: unknown, location: string, environment: Readonly<Record<string, string | undefined>>): string => {
|
|
49
|
+
if (!isEnvironmentReference(value) || typeof value.name !== "string" || !ENVIRONMENT_NAME.test(value.name)) {
|
|
50
|
+
throw new Error(`${location}.apiKey must be env("NAME"); a key never appears in plain text in the configuration`);
|
|
51
|
+
}
|
|
52
|
+
const key = environment[value.name];
|
|
53
|
+
if (!key) {
|
|
54
|
+
throw new MissingEnvironmentError({ variable: value.name, section: "host", key: "MODEL_PROVIDERS" },
|
|
55
|
+
`${location}.apiKey refers with env("${value.name}") to an environment variable that is not set in this shell`);
|
|
56
|
+
}
|
|
57
|
+
return key;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const compatOf = (value: unknown, location: string): Model<Api>["compat"] => {
|
|
61
|
+
if (value === undefined) return undefined;
|
|
62
|
+
const entry = objectAt(value, `${location}.compat`, COMPAT_KEYS.join(" and/or "));
|
|
63
|
+
onlyKeys(entry, COMPAT_KEYS, `${location}.compat`);
|
|
64
|
+
if (entry.thinkingFormat !== undefined && !THINKING_FORMATS.includes(entry.thinkingFormat as string)) {
|
|
65
|
+
throw new Error(`${location}.compat.thinkingFormat "${String(entry.thinkingFormat)}" is not supported; supported are ${THINKING_FORMATS.join(", ")}`);
|
|
66
|
+
}
|
|
67
|
+
const reasoningContent = entry.requiresReasoningContentOnAssistantMessages;
|
|
68
|
+
if (reasoningContent !== undefined && typeof reasoningContent !== "boolean") {
|
|
69
|
+
throw new Error(`${location}.compat.requiresReasoningContentOnAssistantMessages must be true or false`);
|
|
70
|
+
}
|
|
71
|
+
return entry as Model<Api>["compat"];
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const thinkingLevelMapOf = (value: unknown, reasoning: boolean, location: string): Model<Api>["thinkingLevelMap"] => {
|
|
75
|
+
if (value === undefined) return undefined;
|
|
76
|
+
if (!reasoning) throw new Error(`${location}.thinkingLevelMap needs reasoning: true`);
|
|
77
|
+
const entry = objectAt(value, `${location}.thinkingLevelMap`, "thinking levels as keys");
|
|
78
|
+
for (const [level, sent] of Object.entries(entry)) {
|
|
79
|
+
if (!EXTENDED_THINKING_LEVELS.includes(level as never)) throw new Error(`${location}.thinkingLevelMap.${level} is not a thinking level`);
|
|
80
|
+
if (sent !== null && (typeof sent !== "string" || !sent)) {
|
|
81
|
+
throw new Error(`${location}.thinkingLevelMap.${level} must be the value to send or null for a level the model does not offer`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return entry as Model<Api>["thinkingLevelMap"];
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const modelOf = (value: unknown, index: number, provider: { id: string; baseUrl: string; compat: Model<Api>["compat"] }, location: string): Model<Api> => {
|
|
88
|
+
const at = `${location}.models[${index}]`;
|
|
89
|
+
const entry = objectAt(value, at, "id, contextWindow, maxTokens, reasoning, input and optionally thinkingLevelMap");
|
|
90
|
+
onlyKeys(entry, MODEL_KEYS, at);
|
|
91
|
+
if (typeof entry.id !== "string" || !entry.id.trim()) throw new Error(`${at}.id must name the model as the server knows it`);
|
|
92
|
+
const contextWindow = positiveInteger(entry.contextWindow, `${at}.contextWindow`);
|
|
93
|
+
const maxTokens = positiveInteger(entry.maxTokens, `${at}.maxTokens`);
|
|
94
|
+
if (maxTokens > contextWindow) throw new Error(`${at}.maxTokens (${maxTokens}) exceeds the contextWindow (${contextWindow})`);
|
|
95
|
+
if (typeof entry.reasoning !== "boolean") throw new Error(`${at}.reasoning must be true or false`);
|
|
96
|
+
const input = entry.input;
|
|
97
|
+
if (!Array.isArray(input) || !input.includes("text") || input.some((kind) => !INPUTS.includes(kind as InputModality))) {
|
|
98
|
+
throw new Error(`${at}.input needs "text" and optionally ${INPUTS.filter((kind) => kind !== "text").join(", ")}`);
|
|
99
|
+
}
|
|
100
|
+
const thinkingLevelMap = thinkingLevelMapOf(entry.thinkingLevelMap, entry.reasoning, at);
|
|
101
|
+
return {
|
|
102
|
+
id: entry.id,
|
|
103
|
+
name: entry.id,
|
|
104
|
+
api: "openai-completions",
|
|
105
|
+
provider: provider.id,
|
|
106
|
+
baseUrl: provider.baseUrl,
|
|
107
|
+
reasoning: entry.reasoning,
|
|
108
|
+
input: [...new Set(input as InputModality[])],
|
|
109
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
110
|
+
contextWindow,
|
|
111
|
+
maxTokens,
|
|
112
|
+
...(thinkingLevelMap ? { thinkingLevelMap } : {}),
|
|
113
|
+
...(provider.compat ? { compat: provider.compat } : {}),
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const providerOf = (value: unknown, index: number, reserved: ReadonlySet<string>, environment: Readonly<Record<string, string | undefined>>): ModelUpstream => {
|
|
118
|
+
const location = `MODEL_PROVIDERS[${index}]`;
|
|
119
|
+
const entry = objectAt(value, location, "id, baseUrl, apiKey, models and optionally compat");
|
|
120
|
+
onlyKeys(entry, PROVIDER_KEYS, location);
|
|
121
|
+
if (typeof entry.id !== "string" || !PROVIDER_ID.test(entry.id)) {
|
|
122
|
+
throw new Error(`${location}.id needs 1 to 64 lowercase letters, digits, dots, underscores or hyphens`);
|
|
123
|
+
}
|
|
124
|
+
if (reserved.has(entry.id)) throw new Error(`${location}.id ${entry.id} is already a provider of the host`);
|
|
125
|
+
const at = `${location} (${entry.id})`;
|
|
126
|
+
const baseUrl = baseUrlOf(entry.baseUrl, at);
|
|
127
|
+
const apiKey = apiKeyOf(entry.apiKey, at, environment);
|
|
128
|
+
const compat = compatOf(entry.compat, at);
|
|
129
|
+
if (!Array.isArray(entry.models) || entry.models.length === 0) throw new Error(`${at}.models needs at least one model`);
|
|
130
|
+
const models = entry.models.map((model, modelIndex) => modelOf(model, modelIndex, { id: entry.id as string, baseUrl, compat }, at));
|
|
131
|
+
const duplicate = models.find((model, modelIndex) => models.findIndex((other) => other.id === model.id) !== modelIndex);
|
|
132
|
+
if (duplicate) throw new Error(`${at}.models names the model ${duplicate.id} more than once`);
|
|
133
|
+
return { id: entry.id, baseUrl, apiKey, models };
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
/** MODEL_PROVIDERS: a list of OpenAI-compatible servers { id, baseUrl, apiKey: env("NAME"), compat?, models }, for instance self-hosted ones. */
|
|
137
|
+
export const parseModelProviders = (entries: unknown, environment: Readonly<Record<string, string | undefined>> = process.env): readonly ModelUpstream[] => {
|
|
138
|
+
if (!Array.isArray(entries)) throw new Error("MODEL_PROVIDERS must be a list of providers");
|
|
139
|
+
const reserved = new Set([...builtinProviders().map((provider) => provider.id), RELAY_PROVIDER]);
|
|
140
|
+
const providers = entries.map((entry, index) => providerOf(entry, index, reserved, environment));
|
|
141
|
+
const duplicate = providers.find((entry, index) => providers.findIndex((other) => other.id === entry.id) !== index);
|
|
142
|
+
if (duplicate) throw new Error(`MODEL_PROVIDERS names the provider ${duplicate.id} more than once`);
|
|
143
|
+
return providers;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const env = declaredEnvironment(modelProviderEnvDescriptors);
|
|
147
|
+
|
|
148
|
+
/** The profile's providers; the environment holds MODEL_PROVIDERS as JSON of the list from the profile file, each key as its env reference. */
|
|
149
|
+
export const configuredModelProviders = (): readonly ModelUpstream[] => {
|
|
150
|
+
const value = env.optional("MODEL_PROVIDERS");
|
|
151
|
+
if (value === undefined || value === "") return [];
|
|
152
|
+
let parsed: unknown;
|
|
153
|
+
try {
|
|
154
|
+
parsed = JSON.parse(value);
|
|
155
|
+
} catch {
|
|
156
|
+
throw new Error("MODEL_PROVIDERS is no JSON list of providers");
|
|
157
|
+
}
|
|
158
|
+
return parseModelProviders(parsed);
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/** The registration in the model runtime: every model over the OpenAI-compatible transport with the provider's address and key. */
|
|
162
|
+
export const modelProviderRegistration = (provider: ModelUpstream): ModelProviderRegistration => ({
|
|
163
|
+
id: provider.id,
|
|
164
|
+
config: {
|
|
165
|
+
baseUrl: provider.baseUrl,
|
|
166
|
+
apiKey: provider.apiKey,
|
|
167
|
+
api: "openai-completions",
|
|
168
|
+
models: provider.models.map((model) => ({ ...model })),
|
|
169
|
+
},
|
|
170
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Api, Model } from "@ragents/ai";
|
|
2
2
|
import { serviceToken, type ServiceToken } from "@ragents/engine";
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/** A model provider this server reaches with its own key; the relay passes calls through to it. */
|
|
5
5
|
export interface ModelUpstream {
|
|
6
6
|
readonly id: string;
|
|
7
7
|
readonly baseUrl: string;
|
|
@@ -5,7 +5,7 @@ import type { NativeTypeScriptRequest } from "../../../../packages/ragents/src/t
|
|
|
5
5
|
import { assertJsonValue, type JsonValue } from "../../../../packages/ragents/src/domain/json.ts";
|
|
6
6
|
|
|
7
7
|
const send = (message: unknown): void => {
|
|
8
|
-
if (!process.send || !process.connected) throw new Error("
|
|
8
|
+
if (!process.send || !process.connected) throw new Error("The run connection is closed.");
|
|
9
9
|
process.send(message as Parameters<NonNullable<typeof process.send>>[0]);
|
|
10
10
|
};
|
|
11
11
|
const errors = (error: unknown): string => error instanceof Error ? error.message : String(error);
|
|
@@ -32,12 +32,12 @@ process.on("message", (raw: unknown) => {
|
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
if (message.kind === "cancel") {
|
|
35
|
-
active?.abort(new Error("
|
|
35
|
+
active?.abort(new Error("The run call was cancelled."));
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
if (message.kind !== "execute") return;
|
|
39
39
|
if (!loaded || active) {
|
|
40
|
-
send({ kind: "failed", error: "
|
|
40
|
+
send({ kind: "failed", error: "The backend process is not ready." });
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
const request = message.request!;
|
|
@@ -68,7 +68,7 @@ process.on("message", (raw: unknown) => {
|
|
|
68
68
|
capabilities,
|
|
69
69
|
}) : undefined;
|
|
70
70
|
const handle = loaded![request.program.exportName ?? "handle"];
|
|
71
|
-
if (typeof handle !== "function") throw new Error(`Backend
|
|
71
|
+
if (typeof handle !== "function") throw new Error(`Backend export ${request.program.exportName ?? "handle"} is not a function.`);
|
|
72
72
|
const result: unknown = await handle(request.input, { ...context, actor: request.context.actor, ...(std ? { std } : {}) });
|
|
73
73
|
controller.signal.throwIfAborted();
|
|
74
74
|
if (result !== undefined) assertJsonValue(result, "TypeScript result");
|
|
@@ -10,7 +10,7 @@ import { syncWorkspaceOwnership } from "./workspace-ownership.js";
|
|
|
10
10
|
|
|
11
11
|
interface ExecutorOptions {
|
|
12
12
|
directoryFor(runId: string): string;
|
|
13
|
-
/**
|
|
13
|
+
/** Node execution always runs on the server, even for a workspace on a workstation. */
|
|
14
14
|
serverProcessContextFor(runId: string): Promise<WorkspaceProcessContext>;
|
|
15
15
|
}
|
|
16
16
|
interface Backend {
|
|
@@ -51,7 +51,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
|
|
|
51
51
|
|
|
52
52
|
async execute(request: NativeTypeScriptRequest, binding: NativeTypeScriptBinding): Promise<NativeTypeScriptResult> {
|
|
53
53
|
binding.signal?.throwIfAborted();
|
|
54
|
-
if (this.#closed || this.#stopping.has(request.context.runId)) throw new Error("
|
|
54
|
+
if (this.#closed || this.#stopping.has(request.context.runId)) throw new Error("Node execution is shutting down.");
|
|
55
55
|
const instanceId = request.instanceId ?? `invocation-${randomUUID()}`;
|
|
56
56
|
const key = `${request.context.runId}\0${instanceId}`;
|
|
57
57
|
const fingerprint = createHash("sha256").update(JSON.stringify({ entry: request.program.entry, files: request.program.files })).digest("hex");
|
|
@@ -65,7 +65,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
|
|
|
65
65
|
}
|
|
66
66
|
slot.controller.signal.throwIfAborted();
|
|
67
67
|
const backend = await slot.pending;
|
|
68
|
-
if (backend.fingerprint !== fingerprint) throw new Error("
|
|
68
|
+
if (backend.fingerprint !== fingerprint) throw new Error("The backend revision must be stopped before the code changes.");
|
|
69
69
|
const operation = backend.queue.then(() => this.#invoke(backend, request, binding));
|
|
70
70
|
backend.queue = operation.then(() => undefined, () => undefined);
|
|
71
71
|
try { return await operation; }
|
|
@@ -82,13 +82,13 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
|
|
|
82
82
|
await mkdir(directory, { recursive: true });
|
|
83
83
|
for (const file of request.program.files) {
|
|
84
84
|
const target = path.resolve(directory, file.fileName);
|
|
85
|
-
if (!target.startsWith(`${directory}${path.sep}`)) throw new Error("Backend
|
|
85
|
+
if (!target.startsWith(`${directory}${path.sep}`)) throw new Error("Backend file lies outside the build.");
|
|
86
86
|
await mkdir(path.dirname(target), { recursive: true });
|
|
87
87
|
await writeFile(target, file.text);
|
|
88
88
|
}
|
|
89
89
|
const entry = path.resolve(directory, request.program.entry);
|
|
90
90
|
if (!entry.startsWith(`${directory}${path.sep}`) || !request.program.files.some((file) => path.resolve(directory, file.fileName) === entry))
|
|
91
|
-
throw new Error("
|
|
91
|
+
throw new Error("The built backend entry is missing.");
|
|
92
92
|
await writeFile(path.join(directory, "package.json"), JSON.stringify({ type: "module" }));
|
|
93
93
|
await writeFile(path.join(directory, "__runner.mjs"), await runner());
|
|
94
94
|
const toolkit = fileURLToPath(new URL("../../../../node_modules", import.meta.url));
|
|
@@ -143,7 +143,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
|
|
|
143
143
|
},
|
|
144
144
|
onError: fail,
|
|
145
145
|
onExit: (code) => {
|
|
146
|
-
const error = new Error(`
|
|
146
|
+
const error = new Error(`Backend process exited (code ${code}).${stderr.trim() ? `\n${stderr.trim()}` : ""}`);
|
|
147
147
|
controller.abort(error);
|
|
148
148
|
backend.reject(error);
|
|
149
149
|
void backend.service.finished.then(() => backend.queue).finally(() => {
|
|
@@ -153,15 +153,15 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
|
|
|
153
153
|
}).catch(() => undefined);
|
|
154
154
|
},
|
|
155
155
|
});
|
|
156
|
-
const timeout = setTimeout(() => rejectReady(new Error("
|
|
157
|
-
const abort = () => rejectReady(errorOf(signal?.reason ?? "
|
|
156
|
+
const timeout = setTimeout(() => rejectReady(new Error("The backend did not become ready within 15 seconds.")), 15_000);
|
|
157
|
+
const abort = () => rejectReady(errorOf(signal?.reason ?? "The backend start was cancelled."));
|
|
158
158
|
signal?.addEventListener("abort", abort, { once: true });
|
|
159
159
|
try {
|
|
160
160
|
signal?.throwIfAborted();
|
|
161
161
|
await backend.service.send({ kind: "load", entry });
|
|
162
162
|
await ready;
|
|
163
163
|
signal.throwIfAborted();
|
|
164
|
-
if (this.#closed || this.#stopping.has(backend.runId)) throw new Error("
|
|
164
|
+
if (this.#closed || this.#stopping.has(backend.runId)) throw new Error("The run was stopped during the backend start.");
|
|
165
165
|
return backend;
|
|
166
166
|
} catch (error) {
|
|
167
167
|
backend.service.kill("SIGKILL");
|
|
@@ -180,7 +180,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
|
|
|
180
180
|
const abort = (): void => {
|
|
181
181
|
void backend.service.send({ kind: "cancel" }).catch(() => undefined);
|
|
182
182
|
force = setTimeout(() => backend.service.kill("SIGKILL"), 200);
|
|
183
|
-
rejectInvocation(errorOf(signal.reason ?? "
|
|
183
|
+
rejectInvocation(errorOf(signal.reason ?? "The call was cancelled."));
|
|
184
184
|
};
|
|
185
185
|
const operation = new Promise<NativeTypeScriptResult>((resolve, reject) => {
|
|
186
186
|
rejectInvocation = reject;
|
|
@@ -195,7 +195,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
|
|
|
195
195
|
const operation = (async () => {
|
|
196
196
|
try {
|
|
197
197
|
signal.throwIfAborted();
|
|
198
|
-
if (!capabilities.has(message.name!)) throw new Error(`Capability ${message.name}
|
|
198
|
+
if (!capabilities.has(message.name!)) throw new Error(`Capability ${message.name} is not granted.`);
|
|
199
199
|
const value = await binding.call(message.name!, message.input!);
|
|
200
200
|
await backend.service.send({ kind: "reply", callId: message.callId, value });
|
|
201
201
|
} catch (error) {
|
|
@@ -234,7 +234,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
|
|
|
234
234
|
const slot = this.#backends.get(key);
|
|
235
235
|
if (!slot) return Promise.resolve();
|
|
236
236
|
if (slot.stopping) return slot.stopping;
|
|
237
|
-
slot.controller.abort(new Error("
|
|
237
|
+
slot.controller.abort(new Error("The Node instance is shutting down."));
|
|
238
238
|
slot.stopping = (async () => {
|
|
239
239
|
const backend = await slot.pending.catch(() => undefined);
|
|
240
240
|
if (!backend) return;
|
|
@@ -21,7 +21,7 @@ export const declaredEnvironment = <const T extends readonly PluginConfigDescrip
|
|
|
21
21
|
descriptors.filter((descriptor) => descriptor.source === "environment").map((descriptor) => descriptor.key),
|
|
22
22
|
);
|
|
23
23
|
const read = (key: string): string | undefined => {
|
|
24
|
-
if (!declared.has(key)) throw new Error(`
|
|
24
|
+
if (!declared.has(key)) throw new Error(`Environment variable ${key} is not declared for this plugin`);
|
|
25
25
|
return process.env[key];
|
|
26
26
|
};
|
|
27
27
|
return {
|
|
@@ -30,7 +30,7 @@ export const declaredEnvironment = <const T extends readonly PluginConfigDescrip
|
|
|
30
30
|
optional: (key) => read(key),
|
|
31
31
|
required: (key) => {
|
|
32
32
|
const value = read(key);
|
|
33
|
-
if (!value) throw new Error(`
|
|
33
|
+
if (!value) throw new Error(`Environment variable ${key} is missing`);
|
|
34
34
|
return value;
|
|
35
35
|
},
|
|
36
36
|
list: (key) => {
|
|
@@ -41,7 +41,7 @@ export const declaredEnvironment = <const T extends readonly PluginConfigDescrip
|
|
|
41
41
|
flag: (key) => read(key) === "1",
|
|
42
42
|
positiveNumber: (key, fallback) => {
|
|
43
43
|
const value = Number(read(key) ?? fallback);
|
|
44
|
-
if (!Number.isFinite(value) || value <= 0) throw new Error(`${key}
|
|
44
|
+
if (!Number.isFinite(value) || value <= 0) throw new Error(`${key} must be a positive number`);
|
|
45
45
|
return value;
|
|
46
46
|
},
|
|
47
47
|
};
|
|
@@ -20,7 +20,7 @@ const assetFolder = (folder: string, name: string): string | undefined => {
|
|
|
20
20
|
const directory = path.join(folder, name);
|
|
21
21
|
const stats = statSync(directory, { throwIfNoEntry: false });
|
|
22
22
|
if (!stats) return undefined;
|
|
23
|
-
if (!stats.isDirectory()) throw new Error(`${directory}
|
|
23
|
+
if (!stats.isDirectory()) throw new Error(`${directory} must be a directory`);
|
|
24
24
|
return directory;
|
|
25
25
|
};
|
|
26
26
|
|
|
@@ -74,7 +74,7 @@ export const withFolderAssets = (plugin: RAgentsPlugin): RAgentsPlugin => ({
|
|
|
74
74
|
if (skillPaths.length === 0) return;
|
|
75
75
|
host.skills({
|
|
76
76
|
id: `${plugin.manifest.id}.folder-skills`,
|
|
77
|
-
//
|
|
77
|
+
// An explicitly registered path belongs to the explicit contribution in every run, even where it omits the path for this run.
|
|
78
78
|
paths: async (context) => {
|
|
79
79
|
const explicit = await Promise.all(explicitSkills.flatMap((skill) => [skill.paths(undefined), skill.paths(context)]));
|
|
80
80
|
const taken = new Set(explicit.flat());
|
|
@@ -25,13 +25,13 @@ const folders = new Map<string, string>();
|
|
|
25
25
|
|
|
26
26
|
export const registerPluginFolder = (id: string, folder: string): void => {
|
|
27
27
|
const known = folders.get(id);
|
|
28
|
-
if (known && known !== folder) throw new Error(`
|
|
28
|
+
if (known && known !== folder) throw new Error(`The plugin ${id} already lives under ${known}, not under ${folder}`);
|
|
29
29
|
folders.set(id, folder);
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export const pluginFolder = (pluginId: string): string => {
|
|
33
33
|
const folder = folders.get(pluginId) ?? path.join(pluginsRoot, pluginId);
|
|
34
34
|
const stats = statSync(folder, { throwIfNoEntry: false });
|
|
35
|
-
if (!stats?.isDirectory()) throw new Error(`
|
|
35
|
+
if (!stats?.isDirectory()) throw new Error(`The plugin ${pluginId} has no folder ${folder}`);
|
|
36
36
|
return folder;
|
|
37
37
|
};
|