@schlenkr/ragents 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/server/package.json +1 -1
- package/apps/server/src/access-projection.ts +9 -39
- package/apps/server/src/access-service.ts +3 -3
- package/apps/server/src/access-session.ts +19 -19
- package/apps/server/src/api/contracts.ts +32 -29
- package/apps/server/src/api/core-methods.ts +21 -19
- package/apps/server/src/api/delivery.ts +2 -2
- package/apps/server/src/api/reference.ts +27 -27
- package/apps/server/src/api/rights.ts +18 -18
- package/apps/server/src/chat-handler.ts +5 -5
- package/apps/server/src/config-definition.ts +37 -10
- package/apps/server/src/config-file.ts +49 -49
- package/apps/server/src/config.ts +2 -0
- package/apps/server/src/data-directory.ts +2 -2
- package/apps/server/src/external-access.ts +1 -1
- package/apps/server/src/folder-install.ts +1 -1
- package/apps/server/src/help-files.ts +1 -1
- package/apps/server/src/host-api.json +8 -1
- package/apps/server/src/host-api.ts +3 -2
- package/apps/server/src/host-record.ts +3 -3
- package/apps/server/src/host-resolution-hooks.mjs +4 -4
- package/apps/server/src/host-version.ts +17 -17
- package/apps/server/src/host-web.ts +5 -5
- package/apps/server/src/main.ts +6 -6
- package/apps/server/src/missing-environment.ts +6 -6
- package/apps/server/src/parent-watch.ts +4 -4
- package/apps/server/src/plugin-build/build.ts +31 -31
- package/apps/server/src/plugin-build/host-api-names.ts +7 -7
- package/apps/server/src/plugin-build/plugin-description.ts +15 -15
- package/apps/server/src/plugin-build/typecheck.ts +1 -1
- package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
- package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
- package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
- package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
- package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
- package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
- package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
- package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
- package/apps/server/src/plugin-support/front-matter.ts +6 -6
- package/apps/server/src/plugin-support/http.ts +2 -2
- package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
- package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
- package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
- package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
- package/apps/server/src/plugin-support/model-aliases.ts +30 -20
- package/apps/server/src/plugin-support/model-choice.ts +15 -15
- package/apps/server/src/plugin-support/model-completion.ts +44 -23
- package/apps/server/src/plugin-support/model-providers.ts +170 -0
- package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
- package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
- package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
- package/apps/server/src/plugin-support/plugin-config.ts +3 -3
- package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
- package/apps/server/src/plugin-support/plugins-root.ts +2 -2
- package/apps/server/src/plugin-support/process-sandbox.ts +48 -47
- package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
- package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
- package/apps/server/src/plugin-support/product-relay.ts +9 -9
- package/apps/server/src/plugin-support/product-start-options.ts +4 -4
- package/apps/server/src/plugin-support/prompt.ts +1 -1
- package/apps/server/src/plugin-support/provision.ts +8 -8
- package/apps/server/src/plugin-support/run-scripts.ts +17 -17
- package/apps/server/src/plugin-support/skills.ts +18 -18
- package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
- package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
- package/apps/server/src/plugin-support/system-prompts.ts +11 -11
- package/apps/server/src/plugin-support/thinking-level.ts +2 -2
- package/apps/server/src/plugin-support/tool-availability.ts +2 -2
- package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
- package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
- package/apps/server/src/plugin-support/zip.ts +7 -7
- package/apps/server/src/profile/bundle-manifest.ts +17 -17
- package/apps/server/src/profile/compose.ts +12 -7
- package/apps/server/src/profile/plugin-discovery.ts +12 -12
- package/apps/server/src/profile/provisioning.ts +5 -5
- package/apps/server/src/profile-target.ts +10 -10
- package/apps/server/src/protocol.ts +2 -2
- package/apps/server/src/provider.ts +63 -58
- package/apps/server/src/ragents/actor-chat-history.ts +8 -8
- package/apps/server/src/ragents/chat-text-positions.ts +2 -2
- package/apps/server/src/ragents/coordinator.ts +2 -2
- package/apps/server/src/ragents/engine.ts +25 -24
- package/apps/server/src/ragents/global-chat.ts +14 -8
- package/apps/server/src/ragents/host-services.ts +6 -3
- package/apps/server/src/ragents/journal-chat-events.ts +1 -1
- package/apps/server/src/ragents/run-owner.ts +2 -2
- package/apps/server/src/ragents/session.ts +49 -49
- package/apps/server/src/ragents/typescript-tools.ts +12 -12
- package/apps/server/src/ragents/workspace-runtime.ts +28 -28
- package/apps/server/src/rpc/dispatcher.ts +19 -19
- package/apps/server/src/rpc/http-transport.ts +11 -11
- package/apps/server/src/rpc/stdio-transport.ts +3 -3
- package/apps/server/src/run-preparation-input.ts +5 -5
- package/apps/server/src/run-preparation.ts +24 -24
- package/apps/server/src/run-transfer.ts +39 -39
- package/apps/server/src/server.ts +51 -49
- package/apps/server/src/settings.ts +1 -1
- package/apps/server/src/startup.ts +3 -3
- package/apps/server/src/title-compactor.ts +9 -9
- package/apps/server/src/title-settings.ts +3 -3
- package/apps/server/src/web-bundles.ts +2 -2
- package/apps/server/src/web-stylesheet.ts +2 -2
- package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-xXXhTDbh.js → highlighted-body-KPVGNVTW-BfNSGxjB.js} +1 -1
- package/apps/web/dist/assets/main-D6bsKcIK.js +11 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-DROEqEeg.js +608 -0
- package/apps/web/dist/assets/runPanel-Dumuuqry.js +21 -0
- package/apps/web/dist/help/guide-access.html +5 -5
- package/apps/web/dist/help/guide-access.md +2 -2
- package/apps/web/dist/help/guide-clients.html +64 -55
- package/apps/web/dist/help/guide-clients.md +62 -52
- package/apps/web/dist/help/guide-distributed.html +12 -7
- package/apps/web/dist/help/guide-distributed.md +9 -4
- package/apps/web/dist/help/guide-functions.html +3 -3
- package/apps/web/dist/help/guide-getting-started.html +24 -15
- package/apps/web/dist/help/guide-getting-started.md +22 -12
- package/apps/web/dist/help/guide-ideas.html +3 -3
- package/apps/web/dist/help/guide-plugins.html +5 -4
- package/apps/web/dist/help/guide-plugins.md +2 -1
- package/apps/web/dist/help/guide-programs.html +3 -3
- package/apps/web/dist/help/guide-runtime.html +6 -6
- package/apps/web/dist/help/guide-runtime.md +3 -3
- package/apps/web/dist/help/guide.html +3 -3
- package/apps/web/dist/help/index.html +1997 -942
- package/apps/web/dist/help/mini-app.css +30 -0
- package/apps/web/dist/help/mini-app.js +14 -14
- package/apps/web/dist/host-web.json +90 -90
- package/apps/web/dist/index.html +3 -3
- package/apps/web/dist/run-panel.html +3 -3
- package/apps/web/package.json +1 -1
- package/apps/web/src/AccessContext.tsx +15 -15
- package/apps/web/src/App.tsx +13 -13
- package/apps/web/src/DiffCode.tsx +2 -2
- package/apps/web/src/HelpDialog.tsx +3 -3
- package/apps/web/src/Overview.tsx +13 -13
- package/apps/web/src/PluginActivation.ts +1 -1
- package/apps/web/src/PluginChat.tsx +15 -15
- package/apps/web/src/PluginFailureNotice.tsx +1 -1
- package/apps/web/src/PluginRegistry.tsx +44 -44
- package/apps/web/src/RunPreparationChat.tsx +11 -11
- package/apps/web/src/RunStore.ts +1 -1
- package/apps/web/src/SessionList.tsx +14 -14
- package/apps/web/src/SettingsModal.tsx +112 -112
- package/apps/web/src/StartOptions.tsx +11 -11
- package/apps/web/src/StartSelection.tsx +11 -11
- package/apps/web/src/StartTiles.tsx +8 -8
- package/apps/web/src/SurfaceShortcuts.tsx +3 -3
- package/apps/web/src/ThemeSettings.tsx +8 -8
- package/apps/web/src/TitleModelSettings.tsx +13 -13
- package/apps/web/src/WorkspacePanel.tsx +9 -9
- package/apps/web/src/access-session.ts +4 -4
- package/apps/web/src/access-token.ts +5 -5
- package/apps/web/src/actor-conversation.ts +3 -3
- package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
- package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
- package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
- package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
- package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
- package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
- package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
- package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
- package/apps/web/src/api.ts +7 -7
- package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
- package/apps/web/src/chat/chat-target.ts +3 -3
- package/apps/web/src/chat/requests.ts +2 -2
- package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
- package/apps/web/src/chat-view-settings.tsx +5 -6
- package/apps/web/src/diff-view.css +1 -1
- package/apps/web/src/highlighting.css +1 -1
- package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
- package/apps/web/src/lib/labels.ts +6 -6
- package/apps/web/src/main.tsx +4 -4
- package/apps/web/src/offered-machines.ts +2 -2
- package/apps/web/src/page-opener.tsx +1 -1
- package/apps/web/src/panel/ConnectionsPage.tsx +26 -23
- package/apps/web/src/panel/LoginForm.tsx +6 -6
- package/apps/web/src/panel/PanelDialogs.tsx +22 -22
- package/apps/web/src/panel/PanelHeader.tsx +2 -2
- package/apps/web/src/panel/PanelPage.tsx +1 -1
- package/apps/web/src/panel/RunLine.tsx +4 -4
- package/apps/web/src/panel/RunsPage.tsx +15 -15
- package/apps/web/src/panel/StartPage.tsx +29 -26
- package/apps/web/src/panel/connection-state.ts +9 -9
- package/apps/web/src/panel/contract.ts +34 -27
- package/apps/web/src/panel.tsx +1 -1
- package/apps/web/src/plugin-bootstrap.ts +5 -5
- package/apps/web/src/product/ModelControl.tsx +3 -3
- package/apps/web/src/product/ProductModelSettings.tsx +16 -16
- package/apps/web/src/product/SystemPromptControl.tsx +11 -11
- package/apps/web/src/product/model-settings.ts +2 -2
- package/apps/web/src/rpc/client.ts +16 -16
- package/apps/web/src/rpc.ts +1 -1
- package/apps/web/src/run-overview.ts +1 -1
- package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
- package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
- package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
- package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
- package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
- package/apps/web/src/run-panel/clipboard.ts +3 -3
- package/apps/web/src/run-panel/host-contract.ts +5 -5
- package/apps/web/src/run-panel/host.ts +15 -15
- package/apps/web/src/run-panel/input-bridge.ts +1 -1
- package/apps/web/src/run-panel/run-panel-location.ts +5 -5
- package/apps/web/src/run-panel/use-session-list.ts +1 -1
- package/apps/web/src/run-panel/workspace-state.ts +3 -3
- package/apps/web/src/run-panel.tsx +4 -4
- package/apps/web/src/run-preparation.ts +2 -2
- package/apps/web/src/run-view.ts +3 -3
- package/apps/web/src/settings-contributions.ts +32 -32
- package/apps/web/src/theme.ts +9 -9
- package/apps/web/src/title-model-settings.ts +6 -6
- package/apps/web/src/ui/ListDetail.tsx +9 -9
- package/apps/web/src/ui/dialog.tsx +2 -2
- package/apps/web/src/ui/modal-controller.ts +3 -3
- package/apps/web/src/ui/modal.tsx +2 -2
- package/apps/web/src/ui/popover.tsx +1 -1
- package/apps/web/src/ui/relative-time.ts +8 -8
- package/apps/web/src/ui/startup-notice.tsx +2 -2
- package/apps/web/src/ui/state-icon.tsx +1 -1
- package/apps/web/src/ui/state-vocabulary.ts +16 -16
- package/apps/web/src/ui/stop-button.tsx +2 -2
- package/bundles/ragents.activity/ragents-bundle.json +2 -2
- package/bundles/ragents.activity/web/classes.json +1 -1
- package/bundles/ragents.activity/web/index.js +1 -1
- package/bundles/ragents.activity/web/index.js.map +2 -2
- package/bundles/ragents.actor-programs/ragents-bundle.json +2 -2
- package/bundles/ragents.actor-programs/server/index.js +256 -228
- package/bundles/ragents.actor-programs/server/index.js.map +4 -4
- package/bundles/ragents.actor-programs/web/classes.json +1 -1
- package/bundles/ragents.actor-programs/web/index.js +1 -1
- package/bundles/ragents.actor-programs/web/index.js.map +3 -3
- package/bundles/ragents.ask/ragents-bundle.json +2 -4
- package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
- package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
- package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
- package/bundles/ragents.ask/server/index.js +23 -23
- package/bundles/ragents.ask/server/index.js.map +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
- package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/{chunk-V7W3QDVS.js → chunk-IQBHK7MV.js} +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-V7W3QDVS.js.map → chunk-IQBHK7MV.js.map} +4 -4
- package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
- package/bundles/ragents.ask/web/classes.json +1 -1
- package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
- package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
- package/bundles/ragents.ask/web/exports/web/api.js +1 -1
- package/bundles/ragents.ask/web/index.js +1 -1
- package/bundles/ragents.ask/web/index.js.map +4 -4
- package/bundles/ragents.browser/executor/index.mjs +35 -35
- package/bundles/ragents.browser/executor/index.mjs.map +2 -2
- package/bundles/ragents.browser/ragents-bundle.json +2 -2
- package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
- package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
- package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
- package/bundles/ragents.browser/server/index.js +31 -31
- package/bundles/ragents.browser/server/index.js.map +2 -2
- package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
- package/bundles/ragents.documents/prompt.hbs +1 -1
- package/bundles/ragents.documents/ragents-bundle.json +2 -2
- package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
- package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
- package/bundles/ragents.documents/server/exports/contract.js +1 -1
- package/bundles/ragents.documents/server/index.js +26 -26
- package/bundles/ragents.documents/server/index.js.map +2 -2
- package/bundles/ragents.documents/web/classes.json +1 -1
- package/bundles/ragents.documents/web/index.js +1 -1
- package/bundles/ragents.documents/web/index.js.map +3 -3
- package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
- package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-fsharp/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
- package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
- package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
- package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
- package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
- package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-roslyn/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
- package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
- package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
- package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
- package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
- package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-typescript/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
- package/bundles/ragents.lsp-typescript/web/index.js +1 -1
- package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
- package/bundles/ragents.model-relay/ragents-bundle.json +7 -3
- package/bundles/ragents.model-relay/server/index.js +25 -21
- package/bundles/ragents.model-relay/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/ragents-bundle.json +2 -2
- package/bundles/ragents.orchestration/server/index.js +28 -28
- package/bundles/ragents.orchestration/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
- package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
- package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
- package/bundles/ragents.orchestration/web/classes.json +1 -1
- package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
- package/bundles/ragents.orchestration/web/index.js +8 -8
- package/bundles/ragents.orchestration/web/index.js.map +3 -3
- package/bundles/ragents.overseer/ragents-bundle.json +2 -2
- package/bundles/ragents.overseer/server/index.js +99 -99
- package/bundles/ragents.overseer/server/index.js.map +2 -2
- package/bundles/ragents.overseer/web/classes.json +1 -1
- package/bundles/ragents.overseer/web/index.js +1 -1
- package/bundles/ragents.overseer/web/index.js.map +2 -2
- package/bundles/ragents.processes/ragents-bundle.json +2 -2
- package/bundles/ragents.processes/server/index.js +11 -11
- package/bundles/ragents.processes/server/index.js.map +2 -2
- package/bundles/ragents.processes/web/classes.json +1 -1
- package/bundles/ragents.processes/web/index.js +3 -3
- package/bundles/ragents.processes/web/index.js.map +2 -2
- package/bundles/ragents.product/ragents-bundle.json +2 -2
- package/bundles/ragents.product/server/index.js +12 -13
- package/bundles/ragents.product/server/index.js.map +2 -2
- package/bundles/ragents.product/web/classes.json +1 -1
- package/bundles/ragents.product/web/index.js +1 -1
- package/bundles/ragents.product/web/index.js.map +2 -2
- package/bundles/ragents.profile-distribution/ragents-bundle.json +2 -2
- package/bundles/ragents.profile-distribution/server/index.js +31 -31
- package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
- package/bundles/ragents.reference/ragents-bundle.json +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
- package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
- package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
- package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
- package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
- package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
- package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
- package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
- package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
- package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
- package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
- package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
- package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
- package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
- package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
- package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
- package/bundles/ragents.reference/web/classes.json +1 -1
- package/bundles/ragents.reference/web/index.js +1 -1
- package/bundles/ragents.reference/web/index.js.map +2 -2
- package/bundles/ragents.todo/ragents-bundle.json +2 -2
- package/bundles/ragents.todo/server/index.js +5 -5
- package/bundles/ragents.todo/server/index.js.map +2 -2
- package/bundles/ragents.todo/web/classes.json +1 -1
- package/bundles/ragents.todo/web/index.js +1 -1
- package/bundles/ragents.todo/web/index.js.map +2 -2
- package/bundles/ragents.transcript/ragents-bundle.json +2 -2
- package/bundles/ragents.transcript/server/index.js +11 -11
- package/bundles/ragents.transcript/server/index.js.map +2 -2
- package/bundles/ragents.watch/ragents-bundle.json +2 -2
- package/bundles/ragents.watch/server/index.js +48 -48
- package/bundles/ragents.watch/server/index.js.map +2 -2
- package/bundles/ragents.workspace/ragents-bundle.json +2 -2
- package/bundles/ragents.workspace/server/index.js +83 -81
- package/bundles/ragents.workspace/server/index.js.map +2 -2
- package/bundles/ragents.workspace/web/classes.json +1 -1
- package/bundles/ragents.workspace/web/index.js +1 -1
- package/bundles/ragents.workspace/web/index.js.map +2 -2
- package/package.json +4 -4
- package/packages/agent/dist/core/model-runtime.d.ts +7 -2
- package/packages/agent/dist/core/tools/bash.d.ts +1 -1
- package/packages/agent/dist/index.d.ts +1 -1
- package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
- package/packages/agent/src/core/compaction/utils.ts +1 -1
- package/packages/agent/src/core/model-runtime.ts +45 -5
- package/packages/agent/src/core/tools/bash.ts +1 -1
- package/packages/agent/src/index.ts +1 -1
- package/packages/agent/src/loop/agent-loop.ts +2 -2
- package/packages/ai/dist/models.d.ts +1 -0
- package/packages/ai/dist/models.generated.d.ts +4544 -983
- package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
- package/packages/ai/src/api/ai-sdk.ts +33 -7
- package/packages/ai/src/api-registry.ts +1 -1
- package/packages/ai/src/index.ts +2 -2
- package/packages/ai/src/models.generated.ts +1 -1
- package/packages/ai/src/models.ts +1 -1
- package/packages/ai/src/providers/openrouter.models.ts +3723 -550
- package/packages/ragents/src/access.ts +12 -12
- package/packages/ragents/src/agents/actor-input.ts +33 -33
- package/packages/ragents/src/agents/catalog.ts +1 -1
- package/packages/ragents/src/agents/delivery.ts +17 -17
- package/packages/ragents/src/agents/plugins.ts +1 -1
- package/packages/ragents/src/agents/scheduler.ts +7 -7
- package/packages/ragents/src/agents/schemas.ts +1 -1
- package/packages/ragents/src/agents/tool-orientation.ts +4 -4
- package/packages/ragents/src/agents/tools.ts +20 -20
- package/packages/ragents/src/agents/toolset.ts +5 -5
- package/packages/ragents/src/agents/workspaces.ts +1 -1
- package/packages/ragents/src/domain/events.ts +1 -1
- package/packages/ragents/src/domain/model.ts +5 -5
- package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
- package/packages/ragents/src/drivers/agent-turn.ts +4 -4
- package/packages/ragents/src/drivers/agent.ts +2 -2
- package/packages/ragents/src/drivers/attachments.ts +4 -4
- package/packages/ragents/src/http/contracts.ts +14 -14
- package/packages/ragents/src/http/methods.ts +6 -6
- package/packages/ragents/src/index.ts +1 -0
- package/packages/ragents/src/plugin-host.ts +162 -116
- package/packages/ragents/src/plugin-types.ts +29 -10
- package/packages/ragents/src/rpc/contract.ts +5 -5
- package/packages/ragents/src/rpc/contribution.ts +2 -2
- package/packages/ragents/src/rpc/peer.ts +11 -11
- package/packages/ragents/src/rpc/protocol.ts +2 -2
- package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
- package/packages/ragents/src/runtime/journal.ts +10 -10
- package/packages/ragents/src/runtime/orchestration.ts +8 -8
- package/packages/ragents/src/runtime/stop.ts +2 -2
- package/packages/ragents/src/script/mediators.ts +35 -35
- package/packages/ragents/src/typescript/async-compiler.ts +14 -14
- package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
- package/packages/ragents/src/typescript/compiler.ts +7 -7
- package/packages/ragents/src/typescript/snippet.ts +5 -5
- package/packages/workspace-executor/src/bash-launch.ts +13 -13
- package/packages/workspace-executor/src/commands.ts +18 -18
- package/packages/workspace-executor/src/context.ts +15 -15
- package/packages/workspace-executor/src/contributions.ts +35 -35
- package/packages/workspace-executor/src/errors.ts +1 -1
- package/packages/workspace-executor/src/executor.ts +15 -15
- package/packages/workspace-executor/src/files.ts +30 -30
- package/packages/workspace-executor/src/language-server/contract.ts +2 -2
- package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
- package/packages/workspace-executor/src/language-server/host.ts +35 -35
- package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
- package/packages/workspace-executor/src/language-server/module.ts +11 -11
- package/packages/workspace-executor/src/language-server/roots.ts +3 -3
- package/packages/workspace-executor/src/language-server/session.ts +15 -15
- package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
- package/packages/workspace-executor/src/managed-process.ts +35 -7
- package/packages/workspace-executor/src/module.ts +8 -8
- package/packages/workspace-executor/src/modules.ts +3 -3
- package/packages/workspace-executor/src/paths.ts +11 -11
- package/packages/workspace-executor/src/process-sandbox.ts +3 -3
- package/packages/workspace-executor/src/processes/module.ts +3 -3
- package/packages/workspace-executor/src/processes/process-table.ts +20 -20
- package/packages/workspace-executor/src/processes/scanner.ts +3 -3
- package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
- package/packages/workspace-executor/src/processes/terminator.ts +13 -13
- package/packages/workspace-executor/src/run-folders.ts +3 -3
- package/packages/workspace-executor/src/safe-environment.ts +4 -4
- package/packages/workspace-executor/src/sandbox-tools.ts +37 -31
- package/packages/workspace-executor/src/session-ident.ts +2 -2
- package/packages/workspace-executor/src/shell-platform.ts +2 -2
- package/packages/workspace-executor/src/tools.ts +5 -5
- package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
- package/plugins/ragents.activity/web/activity.ts +2 -2
- package/plugins/ragents.actor-programs/server/access-projections.ts +31 -0
- package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
- package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
- package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
- package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
- package/plugins/ragents.actor-programs/server/index.ts +2 -0
- package/plugins/ragents.actor-programs/server/limits.ts +3 -3
- package/plugins/ragents.actor-programs/server/methods.ts +1 -1
- package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
- package/plugins/ragents.actor-programs/server/routes.ts +8 -8
- package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
- package/plugins/ragents.actor-programs/server/templates.ts +59 -59
- package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
- package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
- package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
- package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
- package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
- package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
- package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
- package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
- package/plugins/ragents.actor-programs/web/api.ts +36 -36
- package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
- package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
- package/plugins/ragents.actor-programs/web/context.ts +1 -1
- package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
- package/plugins/ragents.actor-programs/web/index.tsx +1 -1
- package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
- package/plugins/ragents.ask/ask-payload.ts +1 -1
- package/plugins/ragents.ask/contract.ts +5 -5
- package/plugins/ragents.ask/server/answer-method.ts +1 -1
- package/plugins/ragents.ask/server/ask-service.ts +9 -9
- package/plugins/ragents.ask/server/ask-tool.ts +10 -10
- package/plugins/ragents.ask/server/contract.ts +5 -5
- package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
- package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
- package/plugins/ragents.ask/web/index.tsx +2 -8
- package/plugins/ragents.browser/executor/contract.ts +6 -6
- package/plugins/ragents.browser/executor/index.ts +1 -1
- package/plugins/ragents.browser/executor/module.ts +6 -6
- package/plugins/ragents.browser/executor/pages.ts +32 -32
- package/plugins/ragents.browser/executor/playwright.ts +8 -8
- package/plugins/ragents.browser/provision.ts +7 -7
- package/plugins/ragents.browser/server/browser.ts +14 -14
- package/plugins/ragents.browser/server/contract.ts +1 -1
- package/plugins/ragents.browser/server/index.ts +1 -1
- package/plugins/ragents.browser/server/tools.ts +14 -14
- package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
- package/plugins/ragents.documents/contract.ts +2 -2
- package/plugins/ragents.documents/prompt.hbs +1 -1
- package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
- package/plugins/ragents.documents/server/files-route.ts +6 -6
- package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
- package/plugins/ragents.documents/server/store.ts +1 -1
- package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
- package/plugins/ragents.documents/web/index.tsx +11 -11
- package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
- package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
- package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
- package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
- package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
- package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
- package/plugins/ragents.lsp-typescript/executor.ts +3 -3
- package/plugins/ragents.model-relay/server/config.ts +6 -2
- package/plugins/ragents.model-relay/server/index.ts +2 -2
- package/plugins/ragents.model-relay/server/relay.ts +23 -22
- package/plugins/ragents.orchestration/contract.ts +8 -8
- package/plugins/ragents.orchestration/server/index.ts +4 -4
- package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
- package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
- package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
- package/plugins/ragents.orchestration/web/ActorChat.tsx +2 -2
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
- package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
- package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
- package/plugins/ragents.orchestration/web/ActorTile.tsx +1 -1
- package/plugins/ragents.orchestration/web/Center.tsx +5 -5
- package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
- package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
- package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
- package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
- package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
- package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
- package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
- package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
- package/plugins/ragents.orchestration/web/constants.ts +2 -2
- package/plugins/ragents.orchestration/web/executions.ts +6 -6
- package/plugins/ragents.orchestration/web/format.ts +1 -1
- package/plugins/ragents.orchestration/web/index.tsx +2 -2
- package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
- package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
- package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +29 -28
- package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
- package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
- package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
- package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
- package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
- package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
- package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +10 -10
- package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
- package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
- package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
- package/plugins/ragents.overseer/contract.ts +20 -20
- package/plugins/ragents.overseer/server/api.ts +8 -8
- package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
- package/plugins/ragents.overseer/server/coordinator.ts +4 -4
- package/plugins/ragents.overseer/server/index.ts +24 -24
- package/plugins/ragents.overseer/server/orientation.ts +8 -8
- package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
- package/plugins/ragents.overseer/server/run-directory.ts +5 -5
- package/plugins/ragents.overseer/server/settings.ts +6 -6
- package/plugins/ragents.overseer/server/user-location.ts +16 -16
- package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
- package/plugins/ragents.overseer/web/index.tsx +20 -20
- package/plugins/ragents.overseer/web/model-settings.ts +1 -1
- package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
- package/plugins/ragents.processes/contract.ts +5 -5
- package/plugins/ragents.processes/server/methods.ts +4 -4
- package/plugins/ragents.processes/server/observer.ts +8 -8
- package/plugins/ragents.processes/server/run-processes.ts +2 -2
- package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
- package/plugins/ragents.processes/web/processes.ts +10 -10
- package/plugins/ragents.product/server/config.ts +1 -1
- package/plugins/ragents.product/server/index.ts +4 -4
- package/plugins/ragents.product/server/runtime.ts +9 -10
- package/plugins/ragents.product/web/index.tsx +1 -1
- package/plugins/ragents.profile-distribution/contract.ts +10 -10
- package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
- package/plugins/ragents.profile-distribution/server/config.ts +2 -2
- package/plugins/ragents.profile-distribution/server/index.ts +4 -4
- package/plugins/ragents.reference/examples.ts +27 -27
- package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
- package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
- package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
- package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
- package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
- package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
- package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
- package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
- package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
- package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
- package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
- package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
- package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
- package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
- package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
- package/plugins/ragents.reference/walkthroughs.ts +128 -128
- package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
- package/plugins/ragents.todo/server/todo-tool.ts +6 -6
- package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
- package/plugins/ragents.transcript/server/transcript.ts +11 -11
- package/plugins/ragents.watch/server/condition.ts +4 -4
- package/plugins/ragents.watch/server/functions.ts +27 -27
- package/plugins/ragents.watch/server/observation.ts +2 -2
- package/plugins/ragents.watch/server/service.ts +14 -14
- package/plugins/ragents.workspace/client/transport.ts +1 -1
- package/plugins/ragents.workspace/client/workspace-client.ts +62 -49
- package/plugins/ragents.workspace/contract.ts +46 -46
- package/plugins/ragents.workspace/server/binding.ts +20 -20
- package/plugins/ragents.workspace/server/browse-route.ts +8 -8
- package/plugins/ragents.workspace/server/clients.ts +42 -42
- package/plugins/ragents.workspace/server/config.ts +8 -5
- package/plugins/ragents.workspace/server/index.ts +5 -4
- package/plugins/ragents.workspace/server/runtime.ts +26 -26
- package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
- package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
- package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
- package/plugins/ragents.workspace/web/index.tsx +1 -1
- package/ragents.config.core.ts +1 -1
- package/ragents.config.developer.ts +3 -3
- package/ragents.config.showcase.ts +2 -2
- package/scripts/agent/agent-cli.ts +96 -96
- package/scripts/agent/journal.ts +5 -5
- package/scripts/agent/turn-control.ts +4 -4
- package/scripts/package/build-package.ts +29 -29
- package/scripts/package/host-links.mjs +3 -3
- package/scripts/package/publish-package.ts +29 -29
- package/scripts/package/ragents.mjs +19 -19
- package/scripts/plugin/build-builtin-plugins.ts +5 -5
- package/scripts/plugin/plugin-cli.ts +14 -14
- package/scripts/provision/run-provision.ts +14 -15
- package/scripts/remote/connect.ts +46 -46
- package/scripts/remote/start.ts +18 -18
- package/scripts/workspace-client/run-workspace-client.ts +23 -23
- package/apps/web/dist/assets/main-C7JeZFjs.js +0 -6
- package/apps/web/dist/assets/mermaid-HWGCJPDP-DfsU5ofC.js +0 -478
- package/apps/web/dist/assets/runPanel-ZT6TPDLM.js +0 -21
- package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
- package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
- package/plugins/ragents.ask/web/QuestionSection.tsx +0 -48
- /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
- /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
|
@@ -27,31 +27,31 @@ type SkillEnvironment = DeclaredEnvironment<(typeof skillEnvDescriptors)[number]
|
|
|
27
27
|
/** Reads and checks the SKILL.md of a skill folder; the one parser for templates and the skills of agents. */
|
|
28
28
|
const readSkill = (directory: string): { skill: Skill; start: (idPrefix: string) => SkillStartEntry | undefined } => {
|
|
29
29
|
const file = path.join(directory, "SKILL.md");
|
|
30
|
-
if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`
|
|
30
|
+
if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`The skill ${directory} is missing its SKILL.md`);
|
|
31
31
|
const raw = readFileSync(file, "utf8");
|
|
32
|
-
if (!FRONT_MATTER.test(raw)) throw new Error(`${file}:
|
|
32
|
+
if (!FRONT_MATTER.test(raw)) throw new Error(`${file}: the --- header with name and description is missing`);
|
|
33
33
|
const { frontmatter, body } = parseFrontmatter(raw);
|
|
34
|
-
if (!frontmatter || typeof frontmatter !== "object" || Array.isArray(frontmatter)) throw new Error(`${file}:
|
|
34
|
+
if (!frontmatter || typeof frontmatter !== "object" || Array.isArray(frontmatter)) throw new Error(`${file}: header must be an object`);
|
|
35
35
|
const metadata = ["license", "compatibility", "metadata", "allowed-tools"];
|
|
36
36
|
const fields = new Map(Object.entries(frontmatter).filter(([key]) => !metadata.includes(key)).map(([key, value]) => {
|
|
37
37
|
const flagField = ["start", "disable-model-invocation", "user-invokable"].includes(key);
|
|
38
|
-
if (flagField && typeof value !== "boolean") throw new Error(`${file}: ${key}
|
|
38
|
+
if (flagField && typeof value !== "boolean") throw new Error(`${file}: ${key} must be true or false`);
|
|
39
39
|
if (value === null) return [key, ""];
|
|
40
40
|
if (typeof value !== "string" && !(flagField && typeof value === "boolean") && !(key === "order" && typeof value === "number")) {
|
|
41
|
-
throw new Error(`${file}: ${key}
|
|
41
|
+
throw new Error(`${file}: ${key} has an invalid value`);
|
|
42
42
|
}
|
|
43
43
|
return [key, String(value)];
|
|
44
44
|
}));
|
|
45
45
|
const allowed = ["name", "description", "start", "title", "category", "order", "tags", "guide", "prompt", "disable-model-invocation", "user-invokable"];
|
|
46
46
|
const unknown = [...fields.keys()].filter((key) => !allowed.includes(key));
|
|
47
|
-
if (unknown.length > 0) throw new Error(`${file}:
|
|
47
|
+
if (unknown.length > 0) throw new Error(`${file}: unknown header lines ${unknown.join(", ")}`);
|
|
48
48
|
const name = fields.get("name");
|
|
49
|
-
if (!name) throw new Error(`${file}: name
|
|
50
|
-
if (name.length > 64 || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name)) throw new Error(`${file}: name
|
|
51
|
-
if (name !== path.basename(directory)) throw new Error(`${file}: name
|
|
49
|
+
if (!name) throw new Error(`${file}: name is missing`);
|
|
50
|
+
if (name.length > 64 || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name)) throw new Error(`${file}: name is not a valid skill name`);
|
|
51
|
+
if (name !== path.basename(directory)) throw new Error(`${file}: name must match the skill folder`);
|
|
52
52
|
const description = fields.get("description");
|
|
53
|
-
if (!description) throw new Error(`${file}: description
|
|
54
|
-
if (!body.trim()) throw new Error(`${file}:
|
|
53
|
+
if (!description) throw new Error(`${file}: description is missing`);
|
|
54
|
+
if (!body.trim()) throw new Error(`${file}: skill instructions are empty`);
|
|
55
55
|
const disableModelInvocation = flag(file, "disable-model-invocation", fields.get("disable-model-invocation"));
|
|
56
56
|
flag(file, "user-invokable", fields.get("user-invokable"));
|
|
57
57
|
const order = numberOf(file, "order", fields.get("order"));
|
|
@@ -61,13 +61,13 @@ const readSkill = (directory: string): { skill: Skill; start: (idPrefix: string)
|
|
|
61
61
|
};
|
|
62
62
|
if (!flag(file, "start", fields.get("start"))) return { skill, start: () => undefined };
|
|
63
63
|
const title = fields.get("title");
|
|
64
|
-
if (!title) throw new Error(`${file}: title
|
|
64
|
+
if (!title) throw new Error(`${file}: title is missing`);
|
|
65
65
|
const category = fields.get("category");
|
|
66
|
-
if (!category) throw new Error(`${file}: category
|
|
66
|
+
if (!category) throw new Error(`${file}: category is missing`);
|
|
67
67
|
const prompt = fields.get("prompt") ?? body.trim();
|
|
68
|
-
if (!prompt.trim()) throw new Error(`${file}: prompt
|
|
68
|
+
if (!prompt.trim()) throw new Error(`${file}: prompt is empty`);
|
|
69
69
|
const guide = fields.get("guide");
|
|
70
|
-
if (guide !== undefined && !guide) throw new Error(`${file}: guide
|
|
70
|
+
if (guide !== undefined && !guide) throw new Error(`${file}: guide is empty`);
|
|
71
71
|
return {
|
|
72
72
|
skill,
|
|
73
73
|
start: (idPrefix) => ({
|
|
@@ -94,12 +94,12 @@ export const skillsFromDirectory = (directory: string, idPrefix: string): Folder
|
|
|
94
94
|
try {
|
|
95
95
|
entries = readdirSync(resolved, { withFileTypes: true });
|
|
96
96
|
} catch (error) {
|
|
97
|
-
throw new Error(`
|
|
97
|
+
throw new Error(`The skill directory ${resolved} is not readable (${error instanceof Error ? error.message : String(error)})`);
|
|
98
98
|
}
|
|
99
99
|
const stray = entries.filter((entry) => !entry.isDirectory()).map((entry) => entry.name);
|
|
100
|
-
if (stray.length > 0) throw new Error(`${resolved}
|
|
100
|
+
if (stray.length > 0) throw new Error(`${resolved} contains files instead of skill folders: ${stray.join(", ")}`);
|
|
101
101
|
const paths = entries.map((entry) => path.join(resolved, entry.name)).sort();
|
|
102
|
-
if (paths.length === 0) throw new Error(`${resolved}
|
|
102
|
+
if (paths.length === 0) throw new Error(`${resolved} contains no skill folder`);
|
|
103
103
|
const startEntries = paths.flatMap((skillPath) => {
|
|
104
104
|
const entry = readSkill(skillPath).start(idPrefix);
|
|
105
105
|
return entry ? [entry] : [];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type StartEntryAction = "skill" | "script";
|
|
2
2
|
|
|
3
|
-
/**
|
|
3
|
+
/** The same JSON shape as in the core; the contract stays free of imports. */
|
|
4
4
|
export type JsonValue = null | string | number | boolean | JsonValue[] | { [key: string]: JsonValue | undefined };
|
|
5
5
|
|
|
6
6
|
export interface StartEntryBase {
|
|
@@ -11,7 +11,7 @@ export interface StartEntryBase {
|
|
|
11
11
|
order?: number;
|
|
12
12
|
guide?: string;
|
|
13
13
|
tags?: readonly string[];
|
|
14
|
-
/**
|
|
14
|
+
/** Start options the template fixes: a run started from it runs with exactly these values. */
|
|
15
15
|
fixedStartOptions?: Readonly<Record<string, JsonValue>>;
|
|
16
16
|
}
|
|
17
17
|
|
|
@@ -31,22 +31,22 @@ const text = (value: unknown): value is string => typeof value === "string" && v
|
|
|
31
31
|
|
|
32
32
|
const BASE_FIELDS = ["id", "owner", "title", "description", "order", "guide", "tags", "fixedStartOptions", "action"];
|
|
33
33
|
|
|
34
|
-
const invalid = (detail: string): Error => new Error(`
|
|
34
|
+
const invalid = (detail: string): Error => new Error(`The plugin configuration contains an invalid template: ${detail}`);
|
|
35
35
|
|
|
36
36
|
export const startEntryFrom = (value: unknown): StartEntry => {
|
|
37
|
-
if (!isRecord(value)) throw invalid("
|
|
38
|
-
if (!text(value.id)) throw invalid("id
|
|
37
|
+
if (!isRecord(value)) throw invalid("not an object");
|
|
38
|
+
if (!text(value.id)) throw invalid("id is missing");
|
|
39
39
|
const id = value.id;
|
|
40
|
-
if (!text(value.owner) || !text(value.title) || !text(value.description)) throw invalid(`${id}: owner, title
|
|
41
|
-
if (value.order !== undefined && typeof value.order !== "number") throw invalid(`${id}: order
|
|
42
|
-
if (value.guide !== undefined && !text(value.guide)) throw invalid(`${id}: guide
|
|
40
|
+
if (!text(value.owner) || !text(value.title) || !text(value.description)) throw invalid(`${id}: owner, title and description are required`);
|
|
41
|
+
if (value.order !== undefined && typeof value.order !== "number") throw invalid(`${id}: order is not a number`);
|
|
42
|
+
if (value.guide !== undefined && !text(value.guide)) throw invalid(`${id}: guide is empty`);
|
|
43
43
|
if (value.tags !== undefined && (!Array.isArray(value.tags)
|
|
44
44
|
|| value.tags.some((tag) => !text(tag) || tag !== tag.trim())
|
|
45
45
|
|| new Set(value.tags).size !== value.tags.length)) {
|
|
46
|
-
throw invalid(`${id}: tags
|
|
46
|
+
throw invalid(`${id}: tags must be unique, non-empty keywords`);
|
|
47
47
|
}
|
|
48
48
|
if (value.fixedStartOptions !== undefined && (!isRecord(value.fixedStartOptions) || Object.keys(value.fixedStartOptions).length === 0)) {
|
|
49
|
-
throw invalid(`${id}: fixedStartOptions
|
|
49
|
+
throw invalid(`${id}: fixedStartOptions must fix at least one start option`);
|
|
50
50
|
}
|
|
51
51
|
const base: StartEntryBase = {
|
|
52
52
|
id,
|
|
@@ -60,22 +60,22 @@ export const startEntryFrom = (value: unknown): StartEntry => {
|
|
|
60
60
|
};
|
|
61
61
|
const allowed = (extra: readonly string[]) => {
|
|
62
62
|
const unknown = Object.keys(value).filter((field) => !BASE_FIELDS.includes(field) && !extra.includes(field));
|
|
63
|
-
if (unknown.length > 0) throw invalid(`${id}:
|
|
63
|
+
if (unknown.length > 0) throw invalid(`${id}: unknown fields ${unknown.join(", ")}`);
|
|
64
64
|
};
|
|
65
65
|
switch (value.action) {
|
|
66
66
|
case "skill": {
|
|
67
67
|
allowed(["skill", "prompt", "category"]);
|
|
68
|
-
if (!text(value.skill)) throw invalid(`${id}: skill
|
|
69
|
-
if (!text(value.category) || !value.category.trim() || value.category !== value.category.trim()) throw invalid(`${id}: category
|
|
70
|
-
if (!text(value.prompt) || !value.prompt.trim()) throw invalid(`${id}: prompt
|
|
68
|
+
if (!text(value.skill)) throw invalid(`${id}: skill is missing`);
|
|
69
|
+
if (!text(value.category) || !value.category.trim() || value.category !== value.category.trim()) throw invalid(`${id}: category must be a single non-empty text`);
|
|
70
|
+
if (!text(value.prompt) || !value.prompt.trim()) throw invalid(`${id}: prompt is missing or empty`);
|
|
71
71
|
return { ...base, action: "skill", skill: value.skill, category: value.category, prompt: value.prompt };
|
|
72
72
|
}
|
|
73
73
|
case "script":
|
|
74
74
|
allowed(["coordinator", "category"]);
|
|
75
|
-
if (typeof value.coordinator !== "boolean") throw invalid(`${id}: coordinator
|
|
76
|
-
if (value.category !== undefined && (!text(value.category) || value.category !== value.category.trim())) throw invalid(`${id}: category
|
|
75
|
+
if (typeof value.coordinator !== "boolean") throw invalid(`${id}: coordinator must be true or false`);
|
|
76
|
+
if (value.category !== undefined && (!text(value.category) || value.category !== value.category.trim())) throw invalid(`${id}: category must be a single non-empty text`);
|
|
77
77
|
return { ...base, action: "script", coordinator: value.coordinator, ...(value.category !== undefined ? { category: value.category } : {}) };
|
|
78
78
|
default:
|
|
79
|
-
throw invalid(`${id}:
|
|
79
|
+
throw invalid(`${id}: unknown action ${String(value.action)}; valid are skill and script`);
|
|
80
80
|
}
|
|
81
81
|
};
|
|
@@ -9,7 +9,7 @@ export interface StartOptionState {
|
|
|
9
9
|
presentation: unknown;
|
|
10
10
|
selectable: boolean;
|
|
11
11
|
locked: boolean;
|
|
12
|
-
/**
|
|
12
|
+
/** Whether someone chose the value before the start; a template that sets something else then rejects the start. */
|
|
13
13
|
chosen: boolean;
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -35,13 +35,13 @@ const isChoiceOption = (value: unknown): value is ChoicePresentationOption =>
|
|
|
35
35
|
&& (value.hint === undefined || typeof value.hint === "string");
|
|
36
36
|
|
|
37
37
|
export const choicePresentationFrom = (presentation: unknown, optionId: string): ChoicePresentation | undefined => {
|
|
38
|
-
if (!isRecord(presentation)) throw new Error(`
|
|
38
|
+
if (!isRecord(presentation)) throw new Error(`The start option ${optionId} provides no presentation`);
|
|
39
39
|
if (presentation.kind !== "choice") return undefined;
|
|
40
40
|
if (typeof presentation.label !== "string" || !presentation.label) {
|
|
41
|
-
throw new Error(`
|
|
41
|
+
throw new Error(`The choice presentation of the start option ${optionId} has no label`);
|
|
42
42
|
}
|
|
43
43
|
if (!Array.isArray(presentation.options) || !presentation.options.every(isChoiceOption)) {
|
|
44
|
-
throw new Error(`
|
|
44
|
+
throw new Error(`The choice presentation of the start option ${optionId} needs options made of value and label`);
|
|
45
45
|
}
|
|
46
46
|
return { kind: "choice", label: presentation.label, options: presentation.options };
|
|
47
47
|
};
|
|
@@ -55,7 +55,7 @@ export const startOptionStateFrom = (value: unknown): StartOptionState => {
|
|
|
55
55
|
|| typeof value.selectable !== "boolean"
|
|
56
56
|
|| typeof value.locked !== "boolean"
|
|
57
57
|
|| typeof value.chosen !== "boolean") {
|
|
58
|
-
throw new Error("
|
|
58
|
+
throw new Error("The start option does not match the expected format");
|
|
59
59
|
}
|
|
60
60
|
return {
|
|
61
61
|
id: value.id,
|
|
@@ -38,7 +38,7 @@ const flag = (value: string | undefined, key: string): boolean => {
|
|
|
38
38
|
if (value === undefined || value === "") return false;
|
|
39
39
|
if (value === "1") return true;
|
|
40
40
|
if (value === "0") return false;
|
|
41
|
-
throw new Error(`${key}
|
|
41
|
+
throw new Error(`${key} must be "0" or "1", not "${value}"`);
|
|
42
42
|
};
|
|
43
43
|
|
|
44
44
|
const labelOf = (text: string, id: string): string => {
|
|
@@ -52,7 +52,7 @@ export const systemPromptOptionsFromDirectory = (directory: string): readonly Sy
|
|
|
52
52
|
entries = readdirSync(directory, { withFileTypes: true });
|
|
53
53
|
} catch (error) {
|
|
54
54
|
throw new Error(
|
|
55
|
-
`
|
|
55
|
+
`The prompt directory ${directory} is not readable (${error instanceof Error ? error.message : String(error)})`);
|
|
56
56
|
}
|
|
57
57
|
const files = entries
|
|
58
58
|
.filter((entry) => entry.isFile() && PROMPT_EXTENSIONS.includes(path.extname(entry.name)))
|
|
@@ -65,9 +65,9 @@ export const systemPromptOptionsFromDirectory = (directory: string): readonly Sy
|
|
|
65
65
|
return { id, label: labelOf(text, id), file, text };
|
|
66
66
|
});
|
|
67
67
|
const duplicate = options.find((option, index) => options.findIndex((other) => other.id === option.id) !== index);
|
|
68
|
-
if (duplicate) throw new Error(`
|
|
68
|
+
if (duplicate) throw new Error(`The prompt directory ${directory} contains the identifier ${duplicate.id} more than once`);
|
|
69
69
|
if (options.length === 0) {
|
|
70
|
-
throw new Error(`
|
|
70
|
+
throw new Error(`The prompt directory ${directory} contains no ${PROMPT_EXTENSIONS.join(" or ")} file`);
|
|
71
71
|
}
|
|
72
72
|
return options;
|
|
73
73
|
};
|
|
@@ -94,28 +94,28 @@ export const systemPromptCatalogFromEnvironment = (
|
|
|
94
94
|
];
|
|
95
95
|
const collision = options.find((option, index) => options.findIndex((other) => other.id === option.id) !== index);
|
|
96
96
|
if (collision) {
|
|
97
|
-
throw new Error(`
|
|
97
|
+
throw new Error(`The system prompt ${collision.id} comes from the plugin folder and from SYSTEM_PROMPTS_DIR`);
|
|
98
98
|
}
|
|
99
99
|
if (options.length === 0) {
|
|
100
100
|
return Object.freeze({ mode: "fixed" as const, options: [], defaultIds: [], shareDefault: false });
|
|
101
101
|
}
|
|
102
102
|
if (mode !== undefined && !SYSTEM_PROMPT_MODES.includes(mode as SystemPromptMode)) {
|
|
103
|
-
throw new Error(`SYSTEM_PROMPT_MODE
|
|
103
|
+
throw new Error(`SYSTEM_PROMPT_MODE must be one of ${SYSTEM_PROMPT_MODES.join(", ")}, not "${mode}"`);
|
|
104
104
|
}
|
|
105
105
|
const effectiveMode = (mode ?? "selectable") as SystemPromptMode;
|
|
106
106
|
const wanted = (defaultId ?? "").split(",").map((entry) => entry.trim()).filter(Boolean);
|
|
107
107
|
if (effectiveMode === "fixed" && wanted.length === 0) {
|
|
108
|
-
throw new Error("SYSTEM_PROMPT_MODE
|
|
108
|
+
throw new Error("SYSTEM_PROMPT_MODE is fixed, so SYSTEM_PROMPT_DEFAULT names the valid prompts");
|
|
109
109
|
}
|
|
110
110
|
for (const id of wanted) {
|
|
111
111
|
if (!options.some((option) => option.id === id)) {
|
|
112
112
|
throw new Error(
|
|
113
|
-
`SYSTEM_PROMPT_DEFAULT ${id}
|
|
114
|
-
+ `
|
|
113
|
+
`SYSTEM_PROMPT_DEFAULT ${id} is not a selectable system prompt; `
|
|
114
|
+
+ `available are ${options.map((option) => option.id).join(", ")}`);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
const duplicate = wanted.find((id, index) => wanted.indexOf(id) !== index);
|
|
118
|
-
if (duplicate) throw new Error(`SYSTEM_PROMPT_DEFAULT
|
|
118
|
+
if (duplicate) throw new Error(`SYSTEM_PROMPT_DEFAULT names ${duplicate} more than once`);
|
|
119
119
|
return Object.freeze({
|
|
120
120
|
mode: effectiveMode,
|
|
121
121
|
options,
|
|
@@ -132,7 +132,7 @@ export const selectedSystemPrompts = (
|
|
|
132
132
|
const wanted = catalog.mode === "fixed" ? catalog.defaultIds : selection ?? catalog.defaultIds;
|
|
133
133
|
return wanted.map((id) => {
|
|
134
134
|
const option = catalog.options.find((entry) => entry.id === id);
|
|
135
|
-
if (!option) throw new Error(`
|
|
135
|
+
if (!option) throw new Error(`The system prompt ${id} is no longer configured`);
|
|
136
136
|
return option;
|
|
137
137
|
});
|
|
138
138
|
};
|
|
@@ -3,11 +3,11 @@ import { modelDefaultThinking } from "./model-aliases.js";
|
|
|
3
3
|
|
|
4
4
|
export const checkedThinkingLevel = (value: string, label: string): ThinkingLevel => {
|
|
5
5
|
if (!isThinkingLevel(value)) {
|
|
6
|
-
throw new Error(`${label}
|
|
6
|
+
throw new Error(`${label} has the unknown thinking level "${value}"; allowed are ${thinkingLevels.join(", ")}.`);
|
|
7
7
|
}
|
|
8
8
|
return value;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
/**
|
|
11
|
+
/** The thinking level of a role: its key, otherwise the thinking level the alias of its model brings along, otherwise high. */
|
|
12
12
|
export const roleThinkingLevel = (configured: string | undefined, label: string, provider: string, model: string): ThinkingLevel =>
|
|
13
13
|
checkedThinkingLevel(configured || modelDefaultThinking(provider, model) || "high", label);
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
|
|
6
6
|
export const alwaysAvailable = defineToolAvailability({
|
|
7
7
|
availability: "always",
|
|
8
|
-
availabilityDetail: "
|
|
8
|
+
availabilityDetail: "Available in every model turn.",
|
|
9
9
|
}, () => true);
|
|
10
10
|
|
|
11
11
|
export const facesOperator: ToolAvailability = defineToolAvailability({
|
|
12
12
|
availability: "always",
|
|
13
|
-
availabilityDetail: "
|
|
13
|
+
availabilityDetail: "Available in every turn; the question always goes to the user of the run.",
|
|
14
14
|
}, () => true);
|
|
@@ -8,7 +8,7 @@ export interface WorkspaceIdentity {
|
|
|
8
8
|
storageRoot?: string;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
/**
|
|
11
|
+
/** Whatever vanishes during the sync, such as a renamed package from staging, no longer needs rights. */
|
|
12
12
|
const unlessVanished = (error: NodeJS.ErrnoException): undefined => {
|
|
13
13
|
if (error.code === "ENOENT") return undefined;
|
|
14
14
|
throw error;
|
|
@@ -17,11 +17,11 @@ const unlessVanished = (error: NodeJS.ErrnoException): undefined => {
|
|
|
17
17
|
export const syncWorkspaceOwnership = async (directory: string, identity: WorkspaceIdentity): Promise<void> => {
|
|
18
18
|
if (identity.uid === undefined && identity.gid === undefined) return;
|
|
19
19
|
if (identity.uid === undefined || identity.gid === undefined || !identity.storageRoot) {
|
|
20
|
-
throw new Error("
|
|
20
|
+
throw new Error("Private working files are missing a UID, GID or the run storage boundary.");
|
|
21
21
|
}
|
|
22
|
-
if ((await lstat(directory)).isSymbolicLink()) throw new Error("
|
|
22
|
+
if ((await lstat(directory)).isSymbolicLink()) throw new Error("The private working directory must not be a symlink.");
|
|
23
23
|
const [root, target] = await Promise.all([realpath(identity.storageRoot), realpath(directory)]);
|
|
24
|
-
if (!containsWorkspacePath(root, target) || target === root) throw new Error("
|
|
24
|
+
if (!containsWorkspacePath(root, target) || target === root) throw new Error("The private working directory lies outside its run storage boundary.");
|
|
25
25
|
const { uid, gid } = identity;
|
|
26
26
|
const visit = async (file: string): Promise<void> => {
|
|
27
27
|
const info = await lstat(file).catch(unlessVanished);
|
|
@@ -34,7 +34,7 @@ export const syncWorkspaceOwnership = async (directory: string, identity: Worksp
|
|
|
34
34
|
await visit(target);
|
|
35
35
|
for (let ancestor = path.dirname(target); containsWorkspacePath(root, ancestor); ancestor = path.dirname(ancestor)) {
|
|
36
36
|
const info = await lstat(ancestor);
|
|
37
|
-
if (!info.isDirectory()) throw new Error("
|
|
37
|
+
if (!info.isDirectory()) throw new Error("An ancestor of the working directory is not a directory.");
|
|
38
38
|
const mode = (info.mode & 0o7777) | 0o111;
|
|
39
39
|
if ((info.mode & 0o7777) !== mode) await chmod(ancestor, mode);
|
|
40
40
|
if (ancestor === root) break;
|
|
@@ -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
|
}
|