@schlenkr/ragents 0.1.10 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/apps/server/package.json +1 -1
- package/apps/server/src/access-projection.ts +6 -6
- 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 +38 -38
- 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 +27 -27
- package/apps/server/src/profile/compose.ts +12 -7
- package/apps/server/src/profile/plugin-discovery.ts +14 -14
- 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 +62 -57
- 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-CpPi6QLr.js} +1 -1
- package/apps/web/dist/assets/main-DJmCHGzM.js +11 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-q-mf1kLN.js +608 -0
- package/apps/web/dist/assets/runPanel-nk_aMxSn.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 +91 -91
- 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/QuasselHost.tsx +1 -1
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +8 -4
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- package/bundles/ragents.todo/server/index.js +5 -8
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- package/bundles/ragents.workspace/server/index.js +83 -83
- 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 +3725 -552
- 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-storage.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 +44 -44
- package/packages/workspace-executor/src/errors.ts +1 -1
- package/packages/workspace-executor/src/executor.ts +16 -16
- package/packages/workspace-executor/src/files.ts +31 -31
- package/packages/workspace-executor/src/index.ts +1 -1
- 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 +36 -36
- 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 +3 -3
- 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 +3 -3
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -5
- 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/contract.ts +0 -3
- 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 +63 -63
- 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 +50 -50
- 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 +31 -31
- 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 +49 -49
- 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
|
@@ -48,23 +48,23 @@ export interface RegisteredWorkspaceRoot {
|
|
|
48
48
|
ownershipDirectoryFor?: (runId: string) => string | Promise<string>;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
/**
|
|
51
|
+
/** A root of the server as a prompt names it: its alias, whether tools may write in it, and the variable that names it in a bash on the server. */
|
|
52
52
|
export interface ServerRootDescription {
|
|
53
53
|
readonly alias: string;
|
|
54
54
|
readonly writable: boolean;
|
|
55
55
|
readonly environmentVariable?: string;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
/**
|
|
58
|
+
/** The plugins' only access to a run's workspace: an operation runs at the executor of the machine that owns the addressed root. */
|
|
59
59
|
export interface SandboxServices {
|
|
60
60
|
execute: (runId: string, operation: string, input: unknown, options?: WorkspaceExecuteOptions) => Promise<unknown>;
|
|
61
|
-
/**
|
|
61
|
+
/** The context for work that runs on the server (TypeScript platform, actor programs); never the folder of a workstation. */
|
|
62
62
|
serverProcessContextFor: (runId: string) => Promise<WorkspaceProcessContext>;
|
|
63
63
|
registerWorkspaceRoot: (root: RegisteredWorkspaceRoot) => void;
|
|
64
64
|
shutdown: (runId: string) => Promise<void>;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
/**
|
|
67
|
+
/** A domain error of the executor looks to the caller like any other error of the server. */
|
|
68
68
|
export const withDomainCause = (error: unknown): unknown =>
|
|
69
69
|
error instanceof WorkspaceOperationError ? new DomainError(error.code, error.message, error.status) : error;
|
|
70
70
|
|
|
@@ -72,24 +72,24 @@ export const sandboxServicesToken = serviceToken<SandboxServices>("ragents.works
|
|
|
72
72
|
|
|
73
73
|
export interface WorkspaceSandboxHostOptions {
|
|
74
74
|
contributorName: string;
|
|
75
|
-
/**
|
|
75
|
+
/** What the profile's plugins contribute to this server's executor; every workstation of the runs carries the same contributions. */
|
|
76
76
|
contributions: readonly WorkspaceExecutorParts[];
|
|
77
77
|
workspaceFor: (runId: string) => Promise<SessionWorkspace>;
|
|
78
78
|
identFor: (runId: string) => Promise<SessionIdent | undefined>;
|
|
79
79
|
skillPaths: () => Promise<readonly string[]>;
|
|
80
80
|
homeFor: (runId: string) => Promise<SandboxHomeEnvironment>;
|
|
81
81
|
storageRootFor?: (runId: string) => string;
|
|
82
|
-
/**
|
|
82
|
+
/** The executor of a run that does not work on the server; without an answer the server's executor executes. */
|
|
83
83
|
executorFor?: (runId: string) => Promise<WorkspaceExecutor | undefined>;
|
|
84
|
-
/**
|
|
84
|
+
/** The own folder of such a run on the server, for work that runs there. */
|
|
85
85
|
serverDirectoryFor?: (runId: string) => Promise<string>;
|
|
86
|
-
/**
|
|
86
|
+
/** The process sandbox in which every process of this server's executor starts; without it processes run without one. */
|
|
87
87
|
processSandbox?: RunProcessSandboxes;
|
|
88
|
-
/**
|
|
88
|
+
/** The bash of this server's executor; required on Windows, otherwise the system's when not set. */
|
|
89
89
|
bash?: string;
|
|
90
|
-
/**
|
|
90
|
+
/** The rg of this server's executor; when not set, one on the PATH applies. */
|
|
91
91
|
rg?: string;
|
|
92
|
-
/**
|
|
92
|
+
/** The bash time limit in seconds for calls without their own, on every machine of the runs; when not set, the tool's. */
|
|
93
93
|
bashTimeoutSeconds?: number;
|
|
94
94
|
}
|
|
95
95
|
|
|
@@ -102,7 +102,7 @@ const sandboxDescriptions: Readonly<Record<string, string>> = {
|
|
|
102
102
|
|
|
103
103
|
const describeSandboxTool = (definition: AgentToolDefinition): AgentToolDefinition => {
|
|
104
104
|
const description = sandboxDescriptions[definition.name];
|
|
105
|
-
if (!description) throw new Error(`
|
|
105
|
+
if (!description) throw new Error(`The sandbox tool ${definition.name} has no short description`);
|
|
106
106
|
return { ...definition, description, longDescription: definition.description, nativeTool: true };
|
|
107
107
|
};
|
|
108
108
|
|
|
@@ -119,39 +119,39 @@ interface StableRunParts {
|
|
|
119
119
|
ident?: SessionIdent;
|
|
120
120
|
home: SandboxHomeEnvironment;
|
|
121
121
|
readOnlyRoots: readonly ResolvedWorkspaceRoot[];
|
|
122
|
-
/**
|
|
122
|
+
/** The run's own temp folder in the sandbox. */
|
|
123
123
|
temporary?: string;
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
const mixedRoots = (aliases: readonly string[]): DomainError => new DomainError(
|
|
127
127
|
"workspace-roots-mixed",
|
|
128
|
-
`
|
|
129
|
-
+ "
|
|
128
|
+
`The call names ${aliases.join(", ")} on the server and at the same time a path in the workspace on the workstation; `
|
|
129
|
+
+ "a call reaches only one machine. Split it into one call per machine.",
|
|
130
130
|
400,
|
|
131
131
|
);
|
|
132
132
|
|
|
133
|
-
/**
|
|
133
|
+
/** The folders a workspace additionally opens to the process sandbox, separated by access; a relative path would have no location on the server. */
|
|
134
134
|
const sandboxFoldersWith = (folders: readonly SandboxFolder[], access: SandboxFolder["access"]): string[] =>
|
|
135
135
|
folders.filter((folder) => folder.access === access).map((folder) => {
|
|
136
|
-
if (!path.isAbsolute(folder.directory)) throw new Error(`
|
|
136
|
+
if (!path.isAbsolute(folder.directory)) throw new Error(`The folder ${folder.directory} for the process sandbox must be absolute`);
|
|
137
137
|
return folder.directory;
|
|
138
138
|
});
|
|
139
139
|
|
|
140
|
-
/**
|
|
140
|
+
/** A read-only path that does not exist is not a root; a missing skill folder must not prevent a run. */
|
|
141
141
|
const existingRoots = async (roots: readonly ResolvedWorkspaceRoot[]): Promise<ResolvedWorkspaceRoot[]> => {
|
|
142
142
|
const resolved = await Promise.all(roots.map((root) =>
|
|
143
143
|
realpath(root.directory).then((directory) => ({ ...root, directory }), () => undefined)));
|
|
144
144
|
return resolved.filter((root) => root !== undefined);
|
|
145
145
|
};
|
|
146
146
|
|
|
147
|
-
/**
|
|
147
|
+
/** The server's executor with the server's roots; an operation with an alias runs there, every other one at the executor of the run's binding. */
|
|
148
148
|
export class WorkspaceSandboxHost implements SandboxServices {
|
|
149
149
|
readonly #options: WorkspaceSandboxHostOptions;
|
|
150
150
|
readonly #definitions: readonly AgentToolDefinition[];
|
|
151
151
|
readonly #workspaceRoots: RegisteredWorkspaceRoot[] = [];
|
|
152
152
|
readonly #local: WorkspaceOperationExecutor;
|
|
153
153
|
readonly #stable = new Map<string, Promise<StableRunParts>>();
|
|
154
|
-
/**
|
|
154
|
+
/** Per run the file state a model saw last, by actor, model context and path; only in memory, a loss requires at most a new read. */
|
|
155
155
|
readonly #seen = new Map<string, Map<string, SeenFile>>();
|
|
156
156
|
|
|
157
157
|
constructor(options: WorkspaceSandboxHostOptions) {
|
|
@@ -165,14 +165,14 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
165
165
|
|
|
166
166
|
registerWorkspaceRoot(root: RegisteredWorkspaceRoot): void {
|
|
167
167
|
if (!root.id.trim() || this.#workspaceRoots.some((entry) => entry.id === root.id)) {
|
|
168
|
-
throw new Error(`
|
|
168
|
+
throw new Error(`Working directory ${root.id} is empty or already registered`);
|
|
169
169
|
}
|
|
170
170
|
if (root.alias && (!/^@[a-z][a-z0-9-]*$/.test(root.alias) || root.alias === SKILLS_ALIAS
|
|
171
171
|
|| this.#workspaceRoots.some((entry) => entry.alias === root.alias))) {
|
|
172
|
-
throw new Error(`
|
|
172
|
+
throw new Error(`Working directory alias ${root.alias} is invalid, reserved for the host or already registered`);
|
|
173
173
|
}
|
|
174
174
|
if (root.environmentVariable && (!/^RAGENTS_[A-Z_]+_DIR$/.test(root.environmentVariable) || this.#workspaceRoots.some((entry) => entry.environmentVariable === root.environmentVariable))) {
|
|
175
|
-
throw new Error(`
|
|
175
|
+
throw new Error(`Working directory variable ${root.environmentVariable} is invalid or already registered`);
|
|
176
176
|
}
|
|
177
177
|
this.#workspaceRoots.push(root);
|
|
178
178
|
}
|
|
@@ -181,7 +181,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
181
181
|
const roots = await Promise.all(this.#workspaceRoots.map(async (entry) => {
|
|
182
182
|
const directory = await entry.directoryFor(runId);
|
|
183
183
|
if (directory === undefined) return undefined;
|
|
184
|
-
if (!path.isAbsolute(directory)) throw new Error(`
|
|
184
|
+
if (!path.isAbsolute(directory)) throw new Error(`Working directory ${entry.id} must be absolute`);
|
|
185
185
|
if (ident) await syncWorkspaceOwnership(await entry.ownershipDirectoryFor?.(runId) ?? directory, {
|
|
186
186
|
...ident, storageRoot: this.#options.storageRootFor?.(runId),
|
|
187
187
|
});
|
|
@@ -190,7 +190,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
190
190
|
return roots.filter((root) => root !== undefined);
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
/**
|
|
193
|
+
/** The server's roots with an alias that a run reaches besides its workspace: the registered ones and the skill folders. */
|
|
194
194
|
async serverRoots(): Promise<readonly ServerRootDescription[]> {
|
|
195
195
|
const registered = this.#workspaceRoots.flatMap(({ alias, environmentVariable }) => alias === undefined ? [] : [{
|
|
196
196
|
alias, writable: true, ...(environmentVariable === undefined ? {} : { environmentVariable }),
|
|
@@ -199,15 +199,15 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
199
199
|
return [...registered, ...skills];
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
-
/**
|
|
202
|
+
/** For a run with its own executor a folder of the run on the server, otherwise the same context as for its tools. */
|
|
203
203
|
async serverProcessContextFor(runId: string): Promise<WorkspaceProcessContext> {
|
|
204
204
|
if (!await this.#options.executorFor?.(runId)) return this.#contextFor(runId);
|
|
205
205
|
const serverDirectoryFor = this.#options.serverDirectoryFor;
|
|
206
|
-
if (!serverDirectoryFor) throw new Error(`
|
|
206
|
+
if (!serverDirectoryFor) throw new Error(`The run ${runId} does not work on the server, and the sandbox host knows no server folder for it`);
|
|
207
207
|
return this.#contextFor(runId, await serverDirectoryFor(runId));
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
/**
|
|
210
|
+
/** The context of this server's executor; without its own folder the workspace itself, which must then lie on the server. */
|
|
211
211
|
async #contextFor(runId: string, serverDirectory?: string): Promise<WorkspaceProcessContext> {
|
|
212
212
|
const workspace = await this.#options.workspaceFor(runId);
|
|
213
213
|
const { ident, home, readOnlyRoots, temporary } = await this.#stableParts(runId, workspace);
|
|
@@ -245,18 +245,18 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
245
245
|
});
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
-
/**
|
|
248
|
+
/** A run's temp folder lies in its storage so that it vanishes with the run and no other run sees it. */
|
|
249
249
|
async #temporaryFor(runId: string, ident: SessionIdent | undefined): Promise<string | undefined> {
|
|
250
250
|
if (!this.#options.processSandbox) return undefined;
|
|
251
251
|
const storageRoot = this.#options.storageRootFor?.(runId);
|
|
252
|
-
if (!storageRoot) throw new Error(`
|
|
252
|
+
if (!storageRoot) throw new Error(`The process sandbox needs the storage of the run ${runId} for its temp folder`);
|
|
253
253
|
const directory = path.join(storageRoot, "tmp");
|
|
254
254
|
await mkdir(directory, { recursive: true });
|
|
255
255
|
if (ident) await syncWorkspaceOwnership(directory, { ...ident, storageRoot });
|
|
256
256
|
return realpath(directory);
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
-
/**
|
|
259
|
+
/** Identity, home folder and read-only roots are fixed per run; only they are remembered. */
|
|
260
260
|
#stableParts(runId: string, workspace: SessionWorkspace): Promise<StableRunParts> {
|
|
261
261
|
const known = this.#stable.get(runId);
|
|
262
262
|
if (known) return known;
|
|
@@ -301,7 +301,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
301
301
|
};
|
|
302
302
|
}
|
|
303
303
|
|
|
304
|
-
/**
|
|
304
|
+
/** The duration an input asks for itself applies when the caller names none; it only extends the wait for a remote executor. */
|
|
305
305
|
async execute(runId: string, operation: string, input: unknown, options: WorkspaceExecuteOptions = {}): Promise<unknown> {
|
|
306
306
|
try {
|
|
307
307
|
const { roots, durationMs } = this.#local.footprintOf(operation, input);
|
|
@@ -313,7 +313,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
313
313
|
}
|
|
314
314
|
}
|
|
315
315
|
|
|
316
|
-
/**
|
|
316
|
+
/** A run with its own executor also has marked TypeScript platform processes on the server; both executors clean up. */
|
|
317
317
|
async shutdown(runId: string): Promise<void> {
|
|
318
318
|
this.#stable.delete(runId);
|
|
319
319
|
this.#seen.delete(runId);
|
|
@@ -329,7 +329,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
329
329
|
return this.#local.shutdown();
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
-
/**
|
|
332
|
+
/** Aliases name roots of the server, every other path the run's root on the machine of its binding; without an alias the binding decides. */
|
|
333
333
|
async #executorFor(runId: string, { aliases, runRoot }: AddressedRoots): Promise<WorkspaceExecutor> {
|
|
334
334
|
const bound = await this.#options.executorFor?.(runId);
|
|
335
335
|
if (!bound || aliases.length === 0) return bound ?? this.#local;
|
|
@@ -342,7 +342,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
342
342
|
const described = describeSandboxTool(definition);
|
|
343
343
|
const proxy = {
|
|
344
344
|
...described,
|
|
345
|
-
//
|
|
345
|
+
// The server fills in the schema defaults, such as the bash time limit; so what the model sees in the schema applies on every machine.
|
|
346
346
|
execute: (toolCallId: string, params: unknown, signal: AbortSignal | undefined) =>
|
|
347
347
|
this.execute(context.runId, described.name, Value.Default(described.parameters, structuredClone(params)), {
|
|
348
348
|
toolCallId,
|
|
@@ -356,7 +356,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
356
356
|
}));
|
|
357
357
|
}
|
|
358
358
|
|
|
359
|
-
/**
|
|
359
|
+
/** A direct call of the model passes the state it has seen of the file and remembers the new one; a call from TypeScript works without it. */
|
|
360
360
|
async #fileToolCall(runId: string, name: string, scope: ToolScope, toolCallId: string, input: { path: string }): Promise<string> {
|
|
361
361
|
const options = { toolCallId, ...(scope.signal ? { signal: scope.signal } : {}) };
|
|
362
362
|
if (scope.modelContext === undefined) return textOf(await this.execute(runId, name, input, options) as ToolOutput);
|
|
@@ -364,7 +364,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
|
|
|
364
364
|
const key = [scope.caller.actorId, scope.modelContext, path.posix.normalize(input.path)].join("\0");
|
|
365
365
|
const result = await this.execute(runId, name, { ...input, seen: known.get(key) ?? null }, options) as ToolOutput & { details?: { seen?: SeenFile } };
|
|
366
366
|
const seen = result.details?.seen;
|
|
367
|
-
if (!seen) throw new Error(`
|
|
367
|
+
if (!seen) throw new Error(`The executor reports no file state after ${name}; server and workstation need the same executor version`);
|
|
368
368
|
this.#seen.set(runId, known.set(key, seen));
|
|
369
369
|
return textOf(result);
|
|
370
370
|
}
|
|
@@ -15,16 +15,16 @@ const endOffset = (archive: Buffer): number => {
|
|
|
15
15
|
for (let offset = archive.byteLength - 22; offset >= first; offset -= 1) {
|
|
16
16
|
if (archive.readUInt32LE(offset) === END_OF_CENTRAL_DIRECTORY) return offset;
|
|
17
17
|
}
|
|
18
|
-
throw new Error("
|
|
18
|
+
throw new Error("The archive has no end of central directory; it is not a ZIP file");
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
const contentOf = (archive: Buffer, localOffset: number, compression: number, compressedSize: number): Buffer => {
|
|
22
|
-
if (archive.readUInt32LE(localOffset) !== LOCAL_FILE_HEADER) throw new Error(`
|
|
22
|
+
if (archive.readUInt32LE(localOffset) !== LOCAL_FILE_HEADER) throw new Error(`The local entry at ${localOffset} is missing from the archive`);
|
|
23
23
|
const start = localOffset + 30 + archive.readUInt16LE(localOffset + 26) + archive.readUInt16LE(localOffset + 28);
|
|
24
24
|
const raw = archive.subarray(start, start + compressedSize);
|
|
25
25
|
if (compression === 0) return Buffer.from(raw);
|
|
26
26
|
if (compression === 8) return inflateRawSync(raw);
|
|
27
|
-
throw new Error(`
|
|
27
|
+
throw new Error(`The archive uses the unknown compression ${compression}`);
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
interface DirectoryEntry {
|
|
@@ -34,20 +34,20 @@ interface DirectoryEntry {
|
|
|
34
34
|
readonly localOffset: number;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
/**
|
|
37
|
+
/** Reads the central directory; Zip64 and encryption are hard errors. */
|
|
38
38
|
const readDirectory = (archive: Buffer): readonly DirectoryEntry[] => {
|
|
39
39
|
const end = endOffset(archive);
|
|
40
40
|
const count = archive.readUInt16LE(end + 10);
|
|
41
41
|
const directory = archive.readUInt32LE(end + 16);
|
|
42
|
-
if (count === 0xffff || directory === 0xffffffff) throw new Error("
|
|
42
|
+
if (count === 0xffff || directory === 0xffffffff) throw new Error("The archive is Zip64; this form is not read");
|
|
43
43
|
const entries: DirectoryEntry[] = [];
|
|
44
44
|
let offset = directory;
|
|
45
45
|
for (let index = 0; index < count; index += 1) {
|
|
46
|
-
if (archive.readUInt32LE(offset) !== CENTRAL_FILE_HEADER) throw new Error(`
|
|
46
|
+
if (archive.readUInt32LE(offset) !== CENTRAL_FILE_HEADER) throw new Error(`The directory entry ${index} is missing from the archive`);
|
|
47
47
|
const flags = archive.readUInt16LE(offset + 8);
|
|
48
48
|
const nameLength = archive.readUInt16LE(offset + 28);
|
|
49
49
|
const name = archive.subarray(offset + 46, offset + 46 + nameLength).toString("utf8");
|
|
50
|
-
if ((flags & 0x1) !== 0) throw new Error(`
|
|
50
|
+
if ((flags & 0x1) !== 0) throw new Error(`The archive entry ${name} is encrypted`);
|
|
51
51
|
if (!name.endsWith("/")) {
|
|
52
52
|
entries.push({
|
|
53
53
|
name,
|
|
@@ -10,7 +10,7 @@ import { isCheckout } from "../host-web.js";
|
|
|
10
10
|
import { bundlesRoot, pluginIdOf } from "../plugin-support/plugins-root.js";
|
|
11
11
|
|
|
12
12
|
export const BUNDLE_MANIFEST_FILE = "ragents-bundle.json";
|
|
13
|
-
export const BUNDLE_FORMAT =
|
|
13
|
+
export const BUNDLE_FORMAT = 5;
|
|
14
14
|
|
|
15
15
|
/** The value names a half imports from each module of the host API. */
|
|
16
16
|
export type HostNames = Readonly<Record<string, readonly string[]>>;
|
|
@@ -23,9 +23,9 @@ export interface BundleManifest {
|
|
|
23
23
|
/** The names of the host API the bundle uses, per half; a host that lacks one refuses the bundle. */
|
|
24
24
|
readonly hostNames: Readonly<Record<HostApiHalf, HostNames>>;
|
|
25
25
|
/** A hash over every file of the bundle; copies and the build tool check it. */
|
|
26
|
-
readonly
|
|
26
|
+
readonly revision: string;
|
|
27
27
|
/** A hash over the source folder and the host inputs of the build; a checkout compares it with its built-in plugins. */
|
|
28
|
-
readonly
|
|
28
|
+
readonly sourceRevision: string;
|
|
29
29
|
readonly server: string;
|
|
30
30
|
readonly web?: { readonly entry: string; readonly css?: string; readonly classes: string };
|
|
31
31
|
/** The contribution to every executor, a self-contained file that any Node process loads. */
|
|
@@ -35,7 +35,7 @@ export interface BundleManifest {
|
|
|
35
35
|
readonly assets: readonly string[];
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
const MANIFEST_KEYS = new Set(["format", "id", "api", "hostNames", "
|
|
38
|
+
const MANIFEST_KEYS = new Set(["format", "id", "api", "hostNames", "revision", "sourceRevision", "server", "web", "executor", "exports", "uses", "assets"]);
|
|
39
39
|
const SOURCE_MARKERS = ["ragents-plugin.json", "server/index.ts", "server/index.tsx"];
|
|
40
40
|
|
|
41
41
|
const isRecord = (value: unknown): value is Record<string, unknown> =>
|
|
@@ -69,9 +69,9 @@ export const isFetchedBundle = (folder: string, dataRoot = ragentsDataRoot()): b
|
|
|
69
69
|
|
|
70
70
|
/** How the author, or for a fetched bundle its user, gets a bundle that fits this host again. */
|
|
71
71
|
export const rebuildHint = (folder: string): string => {
|
|
72
|
-
if (isBuiltInBundle(folder)) return "
|
|
73
|
-
if (isFetchedBundle(folder)) return "
|
|
74
|
-
return "
|
|
72
|
+
if (isBuiltInBundle(folder)) return "rebuild in the checkout with pnpm build:plugins";
|
|
73
|
+
if (isFetchedBundle(folder)) return "this state comes from a server: fetch it again with ragents connect <server-url>, connect names the matching host version";
|
|
74
|
+
return "rebuild with ragents plugin build <source-folder>";
|
|
75
75
|
};
|
|
76
76
|
|
|
77
77
|
const SKIPPED_SOURCE_ENTRIES = new Set(["node_modules", ".DS_Store"]);
|
|
@@ -98,7 +98,7 @@ const buildInputsOf = (root: string): readonly string[] => [
|
|
|
98
98
|
];
|
|
99
99
|
|
|
100
100
|
/** A hash over every file of a plugin source folder except dependencies and the given output folders, together with the build inputs of the host. */
|
|
101
|
-
export const
|
|
101
|
+
export const sourceRevisionOf = (folder: string, skipped: readonly string[] = [], root = hostRoot()): string => {
|
|
102
102
|
const hash = createHash("sha256");
|
|
103
103
|
for (const relative of sourceFiles(folder, new Set(skipped))) hash.update(`${relative}\0${fileDigest(path.join(folder, relative))}\n`);
|
|
104
104
|
for (const input of buildInputsOf(root)) hash.update(`host:${input}\0${fileDigest(path.join(root, input))}\n`);
|
|
@@ -106,7 +106,7 @@ export const sourceStandOf = (folder: string, skipped: readonly string[] = [], r
|
|
|
106
106
|
};
|
|
107
107
|
|
|
108
108
|
/** A hash over every file of the bundle except its manifest and what Finder leaves behind, stable across machines. */
|
|
109
|
-
export const
|
|
109
|
+
export const bundleRevision = (folder: string): string => {
|
|
110
110
|
const hash = createHash("sha256");
|
|
111
111
|
const files = filesBelow(folder).filter((name) => name !== BUNDLE_MANIFEST_FILE && path.posix.basename(name) !== ".DS_Store");
|
|
112
112
|
for (const relative of files) hash.update(`${relative}\0${fileDigest(path.join(folder, relative))}\n`);
|
|
@@ -114,9 +114,9 @@ export const bundleStand = (folder: string): string => {
|
|
|
114
114
|
};
|
|
115
115
|
|
|
116
116
|
/** A copy of a bundle, from a package or an archive, must carry exactly the files it was built with. */
|
|
117
|
-
export const
|
|
118
|
-
if (
|
|
119
|
-
throw new Error(`
|
|
117
|
+
export const assertBundleRevision = (folder: string, manifest: Pick<BundleManifest, "id" | "revision">): void => {
|
|
118
|
+
if (bundleRevision(folder) !== manifest.revision) {
|
|
119
|
+
throw new Error(`The bundle ${manifest.id} in ${folder} no longer has the files it was built with (revision); ${rebuildHint(folder)}`);
|
|
120
120
|
}
|
|
121
121
|
};
|
|
122
122
|
|
|
@@ -133,8 +133,8 @@ const missingHostNames = (manifest: Pick<BundleManifest, "hostNames">, record: H
|
|
|
133
133
|
export const assertHostNames = (folder: string, manifest: Pick<BundleManifest, "id" | "hostNames">, record: HostApiRecord): void => {
|
|
134
134
|
const missing = missingHostNames(manifest, record);
|
|
135
135
|
if (missing.length === 0) return;
|
|
136
|
-
throw new Error(`
|
|
137
|
-
+ `
|
|
136
|
+
throw new Error(`The bundle ${manifest.id} needs names from host API ${record.version} that this host does not offer (${missing.join("; ")}); `
|
|
137
|
+
+ `it was built against a newer host: update the host, otherwise ${rebuildHint(folder)}`);
|
|
138
138
|
};
|
|
139
139
|
|
|
140
140
|
/** Reads and checks the manifest; format and host API must match this host exactly. */
|
|
@@ -142,32 +142,32 @@ export const readBundleManifest = (folder: string): BundleManifest => {
|
|
|
142
142
|
const file = path.join(folder, BUNDLE_MANIFEST_FILE);
|
|
143
143
|
if (!statSync(file, { throwIfNoEntry: false })?.isFile()) {
|
|
144
144
|
if (SOURCE_MARKERS.some((marker) => existsSync(path.join(folder, marker)))) {
|
|
145
|
-
throw new Error(`${folder}
|
|
145
|
+
throw new Error(`${folder} is a source folder, not a bundle: build it with ragents plugin build ${folder} and name the bundle folder in the profile`);
|
|
146
146
|
}
|
|
147
|
-
throw new Error(`${folder}
|
|
147
|
+
throw new Error(`${folder} is not a bundle: ${BUNDLE_MANIFEST_FILE} is missing`);
|
|
148
148
|
}
|
|
149
149
|
const id = pluginIdOf(folder);
|
|
150
150
|
const raw = ((): unknown => {
|
|
151
151
|
try {
|
|
152
152
|
return JSON.parse(readFileSync(file, "utf8"));
|
|
153
153
|
} catch (cause) {
|
|
154
|
-
throw new Error(`${file}
|
|
154
|
+
throw new Error(`${file} is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
155
155
|
}
|
|
156
156
|
})();
|
|
157
|
-
if (!isRecord(raw)) throw new Error(`${file}
|
|
157
|
+
if (!isRecord(raw)) throw new Error(`${file} must contain an object`);
|
|
158
158
|
if (raw.format !== BUNDLE_FORMAT) {
|
|
159
|
-
throw new Error(`
|
|
159
|
+
throw new Error(`The bundle ${id} has format ${String(raw.format)}, this host reads format ${BUNDLE_FORMAT}; ${rebuildHint(folder)}`);
|
|
160
160
|
}
|
|
161
|
-
if (raw.id !== id) throw new Error(`
|
|
161
|
+
if (raw.id !== id) throw new Error(`The bundle in ${folder} reports the id ${String(raw.id)}; the id is the folder name ${id}`);
|
|
162
162
|
if (raw.api !== HOST_API_VERSION) {
|
|
163
|
-
throw new Error(`
|
|
163
|
+
throw new Error(`The bundle ${id} is built for host API ${String(raw.api)}, this host offers ${HOST_API_VERSION}; ${rebuildHint(folder)}`);
|
|
164
164
|
}
|
|
165
165
|
const unknown = Object.keys(raw).filter((key) => !MANIFEST_KEYS.has(key));
|
|
166
|
-
if (unknown.length > 0) throw new Error(`${file}:
|
|
166
|
+
if (unknown.length > 0) throw new Error(`${file}: unknown fields ${unknown.join(", ")}; ${rebuildHint(folder)}`);
|
|
167
167
|
const malformed = [
|
|
168
168
|
...(isHostNames(raw.hostNames) ? [] : ["hostNames"]),
|
|
169
|
-
...(typeof raw.
|
|
170
|
-
...(typeof raw.
|
|
169
|
+
...(typeof raw.revision === "string" ? [] : ["revision"]),
|
|
170
|
+
...(typeof raw.sourceRevision === "string" ? [] : ["sourceRevision"]),
|
|
171
171
|
...(typeof raw.server === "string" ? [] : ["server"]),
|
|
172
172
|
...(isWeb(raw.web) ? [] : ["web"]),
|
|
173
173
|
...(raw.executor === undefined || raw.executor === EXECUTOR_CONTRIBUTION_FILE ? [] : ["executor"]),
|
|
@@ -175,13 +175,13 @@ export const readBundleManifest = (folder: string): BundleManifest => {
|
|
|
175
175
|
...(isStringList(raw.uses) ? [] : ["uses"]),
|
|
176
176
|
...(isStringList(raw.assets) ? [] : ["assets"]),
|
|
177
177
|
];
|
|
178
|
-
if (malformed.length > 0) throw new Error(`${file}: ${malformed.join(", ")}
|
|
178
|
+
if (malformed.length > 0) throw new Error(`${file}: ${malformed.join(", ")} is missing or has the wrong shape; ${rebuildHint(folder)}`);
|
|
179
179
|
const web = raw.web as BundleManifest["web"];
|
|
180
180
|
const webFiles = web === undefined ? [] : [web.entry, web.classes, ...(web.css === undefined ? [] : [web.css])];
|
|
181
181
|
const misplaced = webFiles.filter((entry) => !entry.startsWith("web/") || entry.split("/").includes(".."));
|
|
182
|
-
if (misplaced.length > 0) throw new Error(`${file}: ${misplaced.join(", ")}
|
|
182
|
+
if (misplaced.length > 0) throw new Error(`${file}: ${misplaced.join(", ")} is not under web/; ${rebuildHint(folder)}`);
|
|
183
183
|
for (const required of [raw.server as string, ...webFiles, ...(raw.executor === undefined ? [] : [EXECUTOR_CONTRIBUTION_FILE])]) {
|
|
184
|
-
if (!statSync(path.join(folder, required), { throwIfNoEntry: false })?.isFile()) throw new Error(`
|
|
184
|
+
if (!statSync(path.join(folder, required), { throwIfNoEntry: false })?.isFile()) throw new Error(`The bundle ${id} is missing ${required}; ${rebuildHint(folder)}`);
|
|
185
185
|
}
|
|
186
186
|
return raw as unknown as BundleManifest;
|
|
187
187
|
};
|
|
@@ -2,6 +2,7 @@ import { PluginHost, type PluginWebAddresses } from "@ragents/engine";
|
|
|
2
2
|
import { pluginToolsDirectory, prepareExecutorContribution, type LoadedExecutorContribution } from "@ragents/workspace-executor";
|
|
3
3
|
import { config, HOST_SECRET_ENV_NAMES } from "../config.js";
|
|
4
4
|
import { SESSION_MODE, SESSIONS_MODE } from "../layout.js";
|
|
5
|
+
import { aliasCompletionModel, aliasCompletionModelToken } from "../plugin-support/model-completion.js";
|
|
5
6
|
import { withFolderAssets } from "../plugin-support/plugin-folder.js";
|
|
6
7
|
import type { PluginModule } from "../plugin-support/plugin-module.js";
|
|
7
8
|
import { runManagementToken } from "../ragents/global-chat.js";
|
|
@@ -29,9 +30,9 @@ export interface ProfileComposition {
|
|
|
29
30
|
readonly modules: ReadonlyMap<string, PluginModule>;
|
|
30
31
|
/** The plugins with a web half and where the browser loads it; the web loads exactly these. */
|
|
31
32
|
readonly web: ReadonlyMap<string, PluginWebAddresses>;
|
|
32
|
-
/**
|
|
33
|
+
/** The bundles' contributions to the executor; the server builds them with the tool folders of its data folder. */
|
|
33
34
|
readonly executor: readonly LoadedExecutorContribution[];
|
|
34
|
-
/**
|
|
35
|
+
/** The template from defaultStartEntry of the profile file; the host rejects an unregistered one when sealing. */
|
|
35
36
|
readonly defaultStartEntry?: string;
|
|
36
37
|
}
|
|
37
38
|
|
|
@@ -50,23 +51,27 @@ export const composeProfile = (options: ProfileComposition, bridges: HostBridges
|
|
|
50
51
|
host.provideHost(executorContributionsToken, options.executor.map((loaded) =>
|
|
51
52
|
prepareExecutorContribution(loaded, pluginToolsDirectory(config.dataDir, loaded.plugin))));
|
|
52
53
|
host.provideHost(runManagementToken, () => {
|
|
53
|
-
if (!bridges.sessions) throw new Error("
|
|
54
|
+
if (!bridges.sessions) throw new Error("The host provides no session management");
|
|
54
55
|
return bridges.sessions();
|
|
55
56
|
});
|
|
57
|
+
host.provideHost(aliasCompletionModelToken, (alias) => aliasCompletionModel(() => {
|
|
58
|
+
if (!bridges.modelRuntime) throw new Error("The host provides no model runtime");
|
|
59
|
+
return bridges.modelRuntime();
|
|
60
|
+
}, alias));
|
|
56
61
|
host.provideHost(secretEnvNamesToken, () =>
|
|
57
62
|
[...new Set([...HOST_SECRET_ENV_NAMES, ...host.config.secretKeys()])]);
|
|
58
63
|
for (const id of options.pluginIds) {
|
|
59
64
|
const module = options.modules.get(id);
|
|
60
|
-
if (!module) throw new Error(`
|
|
65
|
+
if (!module) throw new Error(`The plugin ${id} was not loaded`);
|
|
61
66
|
const plugin = module.create(host);
|
|
62
67
|
if (plugin.manifest.id !== id) {
|
|
63
|
-
throw new Error(`
|
|
68
|
+
throw new Error(`The plugin folder ${id} reports the different id ${plugin.manifest.id}`);
|
|
64
69
|
}
|
|
65
70
|
if (plugin.manifest.requires !== undefined) {
|
|
66
|
-
throw new Error(`Plugin ${id}
|
|
71
|
+
throw new Error(`Plugin ${id} declares requires in the manifest; it belongs in the module contract`);
|
|
67
72
|
}
|
|
68
73
|
if (plugin.manifest.web !== undefined) {
|
|
69
|
-
throw new Error(`Plugin ${id}
|
|
74
|
+
throw new Error(`Plugin ${id} declares web in the manifest; that follows from the bundle`);
|
|
70
75
|
}
|
|
71
76
|
const web = options.web.get(id);
|
|
72
77
|
host.register(withFolderAssets({
|