@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
|
@@ -33,7 +33,7 @@ export const labelOf = (command: string): string => {
|
|
|
33
33
|
|
|
34
34
|
export interface ObservationInput {
|
|
35
35
|
runId: string;
|
|
36
|
-
/**
|
|
36
|
+
/** The process of this executor; its direct children are running tool calls. */
|
|
37
37
|
executorPid: number;
|
|
38
38
|
records: readonly ProcessRecord[];
|
|
39
39
|
markerOf: (record: ProcessRecord) => string | undefined;
|
|
@@ -49,7 +49,7 @@ const byPort = (left: WorkspaceProcessPort, right: WorkspaceProcessPort): number
|
|
|
49
49
|
const byAppearance = (left: WorkspaceProcess, right: WorkspaceProcess): number =>
|
|
50
50
|
left.seenSince.localeCompare(right.seenSince) || left.pid - right.pid;
|
|
51
51
|
|
|
52
|
-
/**
|
|
52
|
+
/** Processes of the run: background processes always, children of a running tool call only with an open port. */
|
|
53
53
|
export const runProcessesFrom = (input: ObservationInput): WorkspaceProcess[] => {
|
|
54
54
|
const toolCallGroups = new Set(
|
|
55
55
|
input.records.filter((record) => record.ppid === input.executorPid).map((record) => record.pgid),
|
|
@@ -4,7 +4,7 @@ import { processIdOf, type ProcessRecord, type ProcessTable } from "./process-ta
|
|
|
4
4
|
|
|
5
5
|
export interface ProcessTerminationOptions {
|
|
6
6
|
table: ProcessTable;
|
|
7
|
-
/**
|
|
7
|
+
/** The process of this executor; it and its ancestors are protected. */
|
|
8
8
|
executorPid: number;
|
|
9
9
|
executorUid: number | undefined;
|
|
10
10
|
termGraceMs?: number;
|
|
@@ -42,14 +42,14 @@ export class RunProcessTerminator {
|
|
|
42
42
|
this.#pollIntervalMs = options.pollIntervalMs ?? 100;
|
|
43
43
|
this.#sendSignal = options.sendSignal ?? ((pid, signal) => { process.kill(pid, signal); });
|
|
44
44
|
for (const duration of [this.#termGraceMs, this.#killGraceMs, this.#timeoutMs, this.#pollIntervalMs]) {
|
|
45
|
-
if (!Number.isSafeInteger(duration) || duration < 1) throw new Error("
|
|
45
|
+
if (!Number.isSafeInteger(duration) || duration < 1) throw new Error("Process stop timeouts must be positive integers");
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
async stop(runId: string, processId: string, context: ProcessTerminationContext = {}): Promise<void> {
|
|
50
50
|
const pid = Number(processId.split("-")[0]);
|
|
51
51
|
if (!/^[1-9]\d*-[a-f0-9]{64}$/.test(processId) || !Number.isSafeInteger(pid) || pid > 2_147_483_647)
|
|
52
|
-
throw new WorkspaceOperationError("invalid-process", "
|
|
52
|
+
throw new WorkspaceOperationError("invalid-process", "Invalid process reference", 400);
|
|
53
53
|
await this.#stop(runId, processId, context);
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -58,13 +58,13 @@ export class RunProcessTerminator {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
async #stop(runId: string, processId: string | undefined, context: ProcessTerminationContext): Promise<void> {
|
|
61
|
-
if (runMarkerOf(runId) !== runId) throw new WorkspaceOperationError("invalid-run", "
|
|
61
|
+
if (runMarkerOf(runId) !== runId) throw new WorkspaceOperationError("invalid-run", "Invalid run id", 400);
|
|
62
62
|
const deadline = Date.now() + this.#timeoutMs;
|
|
63
63
|
const attempts = new Map<string, Attempt>();
|
|
64
64
|
const failures = new Map<string, unknown>();
|
|
65
65
|
const assertClean = () => {
|
|
66
66
|
if (failures.size === 1) throw [...failures.values()][0];
|
|
67
|
-
if (failures.size > 1) throw new AggregateError([...failures.values()], `
|
|
67
|
+
if (failures.size > 1) throw new AggregateError([...failures.values()], `Process stop failed for ${failures.size} processes`);
|
|
68
68
|
};
|
|
69
69
|
let first = true;
|
|
70
70
|
let emptyScans = 0;
|
|
@@ -76,8 +76,8 @@ export class RunProcessTerminator {
|
|
|
76
76
|
const markers = await this.#bounded(this.#options.table.runMarkers(readable.map((record) => record.pid)), deadline);
|
|
77
77
|
if (first && processId !== undefined && selected.length > 0) {
|
|
78
78
|
const record = selected[0];
|
|
79
|
-
if (processIdOf(record) !== processId) throw new WorkspaceOperationError("stale-process", "
|
|
80
|
-
if (markers.get(record.pid) !== runId) throw new WorkspaceOperationError("process-run-mismatch", "
|
|
79
|
+
if (processIdOf(record) !== processId) throw new WorkspaceOperationError("stale-process", "The process ID has been reassigned in the meantime. Please refresh the process list.", 409);
|
|
80
|
+
if (markers.get(record.pid) !== runId) throw new WorkspaceOperationError("process-run-mismatch", "The process does not belong to this run", 403);
|
|
81
81
|
}
|
|
82
82
|
first = false;
|
|
83
83
|
const targets = readable.filter((record) => markers.get(record.pid) === runId
|
|
@@ -100,7 +100,7 @@ export class RunProcessTerminator {
|
|
|
100
100
|
} else if (attempt.killAt === undefined && Date.now() - attempt.termAt >= this.#termGraceMs) {
|
|
101
101
|
if (await this.#signal(record, runId, "SIGKILL", context, deadline)) attempt.killAt = Date.now();
|
|
102
102
|
} else if (attempt.killAt !== undefined && Date.now() - attempt.killAt >= this.#killGraceMs) {
|
|
103
|
-
throw new Error(`
|
|
103
|
+
throw new Error(`Process ${record.pid} of run ${runId} is still active after SIGKILL`);
|
|
104
104
|
}
|
|
105
105
|
} catch (error) {
|
|
106
106
|
this.#assertActive(context, deadline);
|
|
@@ -125,19 +125,19 @@ export class RunProcessTerminator {
|
|
|
125
125
|
protectedPids.add(parent);
|
|
126
126
|
parent = records.find((candidate) => candidate.pid === parent)?.ppid;
|
|
127
127
|
}
|
|
128
|
-
if (protectedPids.has(record.pid)) throw new WorkspaceOperationError("protected-process", `
|
|
128
|
+
if (protectedPids.has(record.pid)) throw new WorkspaceOperationError("protected-process", `Process ${record.pid} belongs to the protected process tree of the executor`, 403);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
#assertActive(context: ProcessTerminationContext, deadline: number): void {
|
|
132
132
|
context.signal?.throwIfAborted();
|
|
133
|
-
if (Date.now() >= deadline) throw new Error(`
|
|
133
|
+
if (Date.now() >= deadline) throw new Error(`Process stop exceeded the timeout of ${this.#timeoutMs} ms`);
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
async #bounded<T>(operation: Promise<T>, deadline: number): Promise<T> {
|
|
137
137
|
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
138
138
|
try {
|
|
139
139
|
return await Promise.race([operation, new Promise<never>((_, reject) => {
|
|
140
|
-
timer = setTimeout(() => reject(new Error("
|
|
140
|
+
timer = setTimeout(() => reject(new Error("The process table does not answer within the stop timeout")), Math.max(1, deadline - Date.now()));
|
|
141
141
|
})]);
|
|
142
142
|
} finally {
|
|
143
143
|
if (timer) clearTimeout(timer);
|
|
@@ -149,7 +149,7 @@ export class RunProcessTerminator {
|
|
|
149
149
|
const records = await this.#bounded(this.#options.table.list(), deadline);
|
|
150
150
|
const current = records.find((record) => record.pid === expected.pid);
|
|
151
151
|
if (!current || current.startKey !== expected.startKey || current.uid !== expected.uid) return false;
|
|
152
|
-
if (markers.get(current.pid) !== runId) throw new WorkspaceOperationError("process-run-mismatch", `
|
|
152
|
+
if (markers.get(current.pid) !== runId) throw new WorkspaceOperationError("process-run-mismatch", `Process ${current.pid} no longer belongs to this run`, 403);
|
|
153
153
|
this.#assertUnprotected(current, records);
|
|
154
154
|
this.#assertActive(context, deadline);
|
|
155
155
|
try {
|
|
@@ -157,7 +157,7 @@ export class RunProcessTerminator {
|
|
|
157
157
|
return true;
|
|
158
158
|
} catch (error) {
|
|
159
159
|
if (gone(error)) return false;
|
|
160
|
-
throw new Error(`${signal}
|
|
160
|
+
throw new Error(`${signal} for process ${current.pid} failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
}
|
|
@@ -8,15 +8,15 @@ export const RUN_FOLDER_OPERATIONS = {
|
|
|
8
8
|
} as const;
|
|
9
9
|
|
|
10
10
|
export interface RunFolderCreated {
|
|
11
|
-
/**
|
|
11
|
+
/** Whether the folder was just created; an existing one stays as it is. */
|
|
12
12
|
created: boolean;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
/**
|
|
15
|
+
/** The new folder per run on this machine; only an executor that knows a folder for runs creates it, and only this one per run. */
|
|
16
16
|
export const runFolderModule = (folderOf: ((runId: string) => string) | undefined): WorkspaceModuleFactory => () => {
|
|
17
17
|
const folder = (runId: string): string => {
|
|
18
18
|
if (!folderOf) {
|
|
19
|
-
throw new WorkspaceOperationError("run-folder-unavailable", "
|
|
19
|
+
throw new WorkspaceOperationError("run-folder-unavailable", "This executor creates no folders per run; on the server the host does that", 409);
|
|
20
20
|
}
|
|
21
21
|
return folderOf(runId);
|
|
22
22
|
};
|
|
@@ -46,16 +46,16 @@ export const safeProcessEnvironment = (source: NodeJS.ProcessEnv): NodeJS.Proces
|
|
|
46
46
|
return environment;
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
-
/**
|
|
49
|
+
/** The variables of the surrounding editor; a child process that inherits them attaches itself to VS Code or Electron. */
|
|
50
50
|
const isEditorVariable = (name: string): boolean => name.startsWith("VSCODE_") || name.startsWith("ELECTRON_");
|
|
51
51
|
|
|
52
|
-
/**
|
|
52
|
+
/** What a non-interactive bash reads in by itself; through it a startup file of the user would get into every command. */
|
|
53
53
|
const BASH_STARTUP_VARIABLES: ReadonlySet<string> = new Set(["BASH_ENV", "ENV"]);
|
|
54
54
|
|
|
55
|
-
/**
|
|
55
|
+
/** The whole environment of a process without the variables of the surrounding editor. */
|
|
56
56
|
export const editorFreeEnvironment = (source: NodeJS.ProcessEnv): Record<string, string> => Object.fromEntries(Object.entries(source)
|
|
57
57
|
.filter((entry): entry is [string, string] => typeof entry[1] === "string" && !isEditorVariable(entry[0])));
|
|
58
58
|
|
|
59
|
-
/**
|
|
59
|
+
/** The inherited environment for processes on the user's own machine: everything except editor variables and the startup files of the bash. */
|
|
60
60
|
export const inheritedProcessEnvironment = (source: NodeJS.ProcessEnv): Record<string, string> => Object.fromEntries(
|
|
61
61
|
Object.entries(editorFreeEnvironment(source)).filter(([name]) => !BASH_STARTUP_VARIABLES.has(name)));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import { createHash } from "node:crypto";
|
|
2
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
3
3
|
import { readFile, stat } from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import {
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
import { bashLaunch } from "./bash-launch.js";
|
|
13
13
|
import type { WorkspaceProcessContext } from "./context.js";
|
|
14
14
|
import { WorkspaceOperationError } from "./errors.js";
|
|
15
|
-
import { processGroupExists, stopProcessTree } from "./managed-process.js";
|
|
15
|
+
import { MSYS_CALL_ENV, processGroupExists, stopMsysCall, stopProcessTree } from "./managed-process.js";
|
|
16
16
|
import type { WorkspaceModuleFactory, WorkspaceOperation } from "./module.js";
|
|
17
17
|
import { sandboxedLaunch } from "./process-sandbox.js";
|
|
18
18
|
import { stopUidProcesses } from "./session-ident.js";
|
|
@@ -42,15 +42,15 @@ export interface SandboxTools {
|
|
|
42
42
|
|
|
43
43
|
type ToolResult = { content?: Array<{ type: string; text?: string }>; details?: unknown };
|
|
44
44
|
|
|
45
|
-
/**
|
|
45
|
+
/** The state of a file that the model saw last; the host keeps it per actor and passes it along, the model never names it. */
|
|
46
46
|
export interface SeenFile {
|
|
47
47
|
readonly file: string;
|
|
48
48
|
readonly hash: string;
|
|
49
|
-
/**
|
|
49
|
+
/** Only after a read: the section that was read. */
|
|
50
50
|
readonly read?: { readonly offset?: number; readonly limit?: number };
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
/**
|
|
53
|
+
/** The input of the file tools: what the model passes, and only on its direct call the state it has seen (`null`: none). */
|
|
54
54
|
type FileToolInput = {
|
|
55
55
|
readonly path?: unknown;
|
|
56
56
|
readonly offset?: number;
|
|
@@ -61,11 +61,11 @@ type FileToolInput = {
|
|
|
61
61
|
|
|
62
62
|
type FileToolName = "read" | "edit" | "write";
|
|
63
63
|
|
|
64
|
-
const unchangedNotice = "
|
|
64
|
+
const unchangedNotice = "Unchanged since the last read in this conversation; the earlier content still applies.";
|
|
65
65
|
|
|
66
66
|
const sha256 = (content: Buffer | string): string => createHash("sha256").update(content).digest("hex");
|
|
67
67
|
|
|
68
|
-
/**
|
|
68
|
+
/** The content hash of a file; a missing file has none. */
|
|
69
69
|
const currentHash = async (file: string): Promise<string | undefined> => {
|
|
70
70
|
try {
|
|
71
71
|
return sha256(await readFile(file));
|
|
@@ -77,11 +77,11 @@ const currentHash = async (file: string): Promise<string | undefined> => {
|
|
|
77
77
|
|
|
78
78
|
const detailHash = (result: unknown, name: FileToolName): string => {
|
|
79
79
|
const hash = (result as { details?: { contentHash?: unknown } }).details?.contentHash;
|
|
80
|
-
if (typeof hash !== "string") throw new Error(`
|
|
80
|
+
if (typeof hash !== "string") throw new Error(`The tool ${name} reports no content hash`);
|
|
81
81
|
return hash;
|
|
82
82
|
};
|
|
83
83
|
|
|
84
|
-
/**
|
|
84
|
+
/** A result and an error name the path as the model passed it, not the resolved one. */
|
|
85
85
|
const withShownPath = (result: unknown, resolved: string, shown: string): unknown => {
|
|
86
86
|
const typed = result as ToolResult;
|
|
87
87
|
if (resolved === shown || !Array.isArray(typed.content)) return result;
|
|
@@ -103,7 +103,7 @@ export const withAnnotation = (result: unknown, note: string | undefined): unkno
|
|
|
103
103
|
return { ...typed, content: [...typed.content, { type: "text", text: note }] };
|
|
104
104
|
};
|
|
105
105
|
|
|
106
|
-
/**
|
|
106
|
+
/** Resolves `$RAGENTS_..._DIR` and `${...}` at the start of a path against the variables of the context. */
|
|
107
107
|
const expandPathVariables = (value: string, variables: Readonly<Record<string, string>>): string => {
|
|
108
108
|
for (const [name, root] of Object.entries(variables)) {
|
|
109
109
|
for (const prefix of [`$${name}`, `\${${name}}`]) {
|
|
@@ -125,10 +125,14 @@ export const createSandboxTools = async (
|
|
|
125
125
|
let toolOperation: Promise<void> = Promise.resolve();
|
|
126
126
|
let shuttingDown = false;
|
|
127
127
|
const processGroups = new Set<number>();
|
|
128
|
+
const msysCalls = new Map<number, { readonly bash: string; readonly env: NodeJS.ProcessEnv; readonly marker: string }>();
|
|
128
129
|
|
|
129
130
|
const killProcessGroup = async (pid: number): Promise<void> => {
|
|
130
131
|
if (onWindows) {
|
|
131
132
|
stopProcessTree(pid);
|
|
133
|
+
const call = msysCalls.get(pid);
|
|
134
|
+
msysCalls.delete(pid);
|
|
135
|
+
if (call) await stopMsysCall(call.bash, call.env, call.marker);
|
|
132
136
|
processGroups.delete(pid);
|
|
133
137
|
return;
|
|
134
138
|
}
|
|
@@ -149,7 +153,7 @@ export const createSandboxTools = async (
|
|
|
149
153
|
await killProcessGroup(pid);
|
|
150
154
|
const deadline = Date.now() + 5_000;
|
|
151
155
|
while (await processGroupExists(pid)) {
|
|
152
|
-
if (Date.now() >= deadline) throw new Error(`Bash
|
|
156
|
+
if (Date.now() >= deadline) throw new Error(`Bash process group ${pid} could not be ended`);
|
|
153
157
|
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
154
158
|
}
|
|
155
159
|
processGroups.delete(pid);
|
|
@@ -172,8 +176,8 @@ export const createSandboxTools = async (
|
|
|
172
176
|
};
|
|
173
177
|
|
|
174
178
|
const concurrent = (execute: ToolExecute): ToolExecute => (toolCallId, input, signal, onUpdate) => {
|
|
175
|
-
if (shuttingDown) throw new Error("
|
|
176
|
-
if (signal?.aborted) throw new Error("
|
|
179
|
+
if (shuttingDown) throw new Error("The tools are being killed");
|
|
180
|
+
if (signal?.aborted) throw new Error("Cancelled");
|
|
177
181
|
const run = () => execute(toolCallId, input, signal, onUpdate);
|
|
178
182
|
return initial.runOperation ? initial.runOperation(run) : run();
|
|
179
183
|
};
|
|
@@ -188,7 +192,7 @@ export const createSandboxTools = async (
|
|
|
188
192
|
};
|
|
189
193
|
};
|
|
190
194
|
|
|
191
|
-
/**
|
|
195
|
+
/** On a direct call of the model a write checks the seen state, and a repeated read of an unchanged section answers briefly. */
|
|
192
196
|
const checkedAgainstSeen = async (name: FileToolName, file: string, shown: string, input: FileToolInput, seen: SeenFile | null): Promise<ToolResult | undefined> => {
|
|
193
197
|
if (name === "read") {
|
|
194
198
|
const sameView = seen?.read !== undefined && seen.file === file && seen.read.offset === input.offset && seen.read.limit === input.limit;
|
|
@@ -196,10 +200,10 @@ export const createSandboxTools = async (
|
|
|
196
200
|
}
|
|
197
201
|
const current = await currentHash(file);
|
|
198
202
|
if (current === undefined) return undefined;
|
|
199
|
-
if (seen === null || seen.file !== file) throw new WorkspaceOperationError("workspace-file-unread", `${shown}:
|
|
203
|
+
if (seen === null || seen.file !== file) throw new WorkspaceOperationError("workspace-file-unread", `${shown}: read the file with read first.`, 409);
|
|
200
204
|
if (seen.hash !== current) {
|
|
201
205
|
throw new WorkspaceOperationError("workspace-file-changed",
|
|
202
|
-
`${shown}:
|
|
206
|
+
`${shown}: the file was changed since it was read (by the user, a formatter or another actor); read it again.`, 409);
|
|
203
207
|
}
|
|
204
208
|
return undefined;
|
|
205
209
|
};
|
|
@@ -241,44 +245,46 @@ export const createSandboxTools = async (
|
|
|
241
245
|
return writing ? serial(checked) : concurrent(checked);
|
|
242
246
|
};
|
|
243
247
|
|
|
244
|
-
/**
|
|
248
|
+
/** The folder of a bash call: relative to the working directory or with an alias, the same on every machine, therefore never absolute, and always in a root of the run. */
|
|
245
249
|
const inFolder = (execute: ToolExecute): ToolExecute => async (toolCallId, input, signal, onUpdate) => {
|
|
246
250
|
const params = input as { cwd?: unknown } | undefined;
|
|
247
251
|
if (params?.cwd === undefined) return execute(toolCallId, input, signal, onUpdate);
|
|
248
252
|
const requested = params.cwd;
|
|
249
253
|
if (typeof requested !== "string" || requested === "" || path.isAbsolute(requested)) {
|
|
250
254
|
throw new WorkspaceOperationError("workspace-path-invalid",
|
|
251
|
-
`cwd
|
|
255
|
+
`cwd names a folder relative to the working directory or starts with an alias like @actors; ${JSON.stringify(requested)} is neither`, 400);
|
|
252
256
|
}
|
|
253
257
|
const context = await contextFor();
|
|
254
258
|
const directory = await allowedWorkspacePath(path.resolve(cwd, expandWorkspaceAlias(requested, context.workspaceAliases ?? {})),
|
|
255
259
|
[context.root, ...context.additionalRoots ?? [], ...context.readOnlyRoots ?? []]);
|
|
256
260
|
if (!(await stat(directory).catch(() => undefined))?.isDirectory()) {
|
|
257
|
-
throw new WorkspaceOperationError("workspace-path-not-found", `
|
|
261
|
+
throw new WorkspaceOperationError("workspace-path-not-found", `The folder ${requested} does not exist`, 404);
|
|
258
262
|
}
|
|
259
263
|
return execute(toolCallId, { ...params, cwd: directory }, signal, onUpdate);
|
|
260
264
|
};
|
|
261
265
|
|
|
262
266
|
const startBash: BashOperations["exec"] = async (command, commandCwd, options) => {
|
|
263
|
-
if (shuttingDown) throw new Error("
|
|
267
|
+
if (shuttingDown) throw new Error("The tools are being killed");
|
|
264
268
|
const context = await contextFor();
|
|
265
|
-
if (shuttingDown) throw new Error("
|
|
269
|
+
if (shuttingDown) throw new Error("The tools are being killed");
|
|
266
270
|
options.signal?.throwIfAborted();
|
|
267
271
|
const bash = bashLaunch({ bash: context.bash, rg: context.rg }, command, context.env);
|
|
268
272
|
const launch = await sandboxedLaunch(context, bash);
|
|
269
|
-
if (shuttingDown) throw new Error("
|
|
273
|
+
if (shuttingDown) throw new Error("The tools are being killed");
|
|
270
274
|
options.signal?.throwIfAborted();
|
|
275
|
+
const marker = onWindows ? randomUUID() : undefined;
|
|
271
276
|
return new Promise((resolve, reject) => {
|
|
272
277
|
const child = spawn(launch.command, [...launch.args], {
|
|
273
278
|
cwd: commandCwd,
|
|
274
279
|
detached: !onWindows,
|
|
275
280
|
stdio: ["ignore", "pipe", "pipe"],
|
|
276
|
-
env: bash.env,
|
|
281
|
+
env: marker === undefined ? bash.env : { ...bash.env, [MSYS_CALL_ENV]: marker },
|
|
277
282
|
uid: context.uid,
|
|
278
283
|
gid: context.gid,
|
|
279
284
|
windowsHide: true,
|
|
280
285
|
});
|
|
281
286
|
if (child.pid) processGroups.add(child.pid);
|
|
287
|
+
if (child.pid && marker !== undefined && context.bash !== undefined) msysCalls.set(child.pid, { bash: context.bash, env: context.env, marker });
|
|
282
288
|
child.stdout?.on("data", options.onData);
|
|
283
289
|
child.stderr?.on("data", options.onData);
|
|
284
290
|
let killed = false;
|
|
@@ -294,7 +300,7 @@ export const createSandboxTools = async (
|
|
|
294
300
|
child.kill("SIGKILL");
|
|
295
301
|
} catch (failure) {
|
|
296
302
|
cleanup();
|
|
297
|
-
reject(new AggregateError([error, failure], "Bash
|
|
303
|
+
reject(new AggregateError([error, failure], "Bash process could not be ended"));
|
|
298
304
|
}
|
|
299
305
|
});
|
|
300
306
|
};
|
|
@@ -333,8 +339,8 @@ export const createSandboxTools = async (
|
|
|
333
339
|
|
|
334
340
|
const bashOperations: BashOperations = {
|
|
335
341
|
exec: (command, commandCwd, options) => {
|
|
336
|
-
if (shuttingDown) throw new Error("
|
|
337
|
-
if (options.signal?.aborted) throw new Error("
|
|
342
|
+
if (shuttingDown) throw new Error("The tools are being killed");
|
|
343
|
+
if (options.signal?.aborted) throw new Error("Cancelled");
|
|
338
344
|
return startBash(command, commandCwd, options);
|
|
339
345
|
},
|
|
340
346
|
};
|
|
@@ -353,16 +359,16 @@ export const createSandboxTools = async (
|
|
|
353
359
|
};
|
|
354
360
|
};
|
|
355
361
|
|
|
356
|
-
/**
|
|
362
|
+
/** The operations of the module are named like the tools the model sees. */
|
|
357
363
|
export const SANDBOX_TOOL_NAMES = ["read", "edit", "write", "bash"] as const;
|
|
358
364
|
|
|
359
|
-
/**
|
|
365
|
+
/** An explicitly requested timeout in seconds extends how long a remote executor may wait for the bash. */
|
|
360
366
|
const bashDuration = (input: unknown): { durationMs?: number } => {
|
|
361
367
|
const seconds = typeof input === "object" && input !== null ? (input as { timeout?: unknown }).timeout : undefined;
|
|
362
368
|
return typeof seconds === "number" && seconds > 0 ? { durationMs: seconds * 1000 } : {};
|
|
363
369
|
};
|
|
364
370
|
|
|
365
|
-
/**
|
|
371
|
+
/** The file tools address the root of their path, bash the root of its folder and without a folder no specific one. */
|
|
366
372
|
const sandboxToolFootprints: Readonly<Record<(typeof SANDBOX_TOOL_NAMES)[number], (input: unknown) => OperationFootprint>> = {
|
|
367
373
|
read: (input) => ({ roots: rootsOfFields(input, "path") }),
|
|
368
374
|
edit: (input) => ({ roots: rootsOfFields(input, "path") }),
|
|
@@ -376,7 +382,7 @@ const textOf = (update: ToolUpdate): string =>
|
|
|
376
382
|
.map((part) => part.text)
|
|
377
383
|
.join("\n");
|
|
378
384
|
|
|
379
|
-
/**
|
|
385
|
+
/** The four sandbox tools as operations; the sandbox of a run is created on the first call, bash reports its output as `{ text }`. */
|
|
380
386
|
export const sandboxToolsModule: WorkspaceModuleFactory = (host) => {
|
|
381
387
|
const sandboxes = new Map<string, Promise<SandboxTools>>();
|
|
382
388
|
const sandboxOf = (runId: string): Promise<SandboxTools> => {
|
|
@@ -401,7 +407,7 @@ export const sandboxToolsModule: WorkspaceModuleFactory = (host) => {
|
|
|
401
407
|
const operation = (name: string): WorkspaceOperation => async ({ runId, input, toolCallId, signal, progress }) => {
|
|
402
408
|
const { tools } = await sandboxOf(runId);
|
|
403
409
|
const run = tools.get(name);
|
|
404
|
-
if (!run) throw new Error(`
|
|
410
|
+
if (!run) throw new Error(`The sandbox does not know the tool ${name}`);
|
|
405
411
|
return run(input, {
|
|
406
412
|
toolCallId: toolCallId ?? name,
|
|
407
413
|
...(signal ? { signal } : {}),
|
|
@@ -20,7 +20,7 @@ const processes = async (uid: number): Promise<number[]> => {
|
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
export const stopUidProcesses = async (uid: number): Promise<void> => {
|
|
23
|
-
for (let
|
|
23
|
+
for (let attempt = 0; attempt < 20; attempt++) {
|
|
24
24
|
const pids = await processes(uid);
|
|
25
25
|
if (pids.length === 0) return;
|
|
26
26
|
for (const pid of pids) {
|
|
@@ -33,5 +33,5 @@ export const stopUidProcesses = async (uid: number): Promise<void> => {
|
|
|
33
33
|
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
34
34
|
}
|
|
35
35
|
const pids = await processes(uid);
|
|
36
|
-
if (pids.length > 0) throw new Error(`
|
|
36
|
+
if (pids.length > 0) throw new Error(`Processes with UID ${uid} could not be ended: ${pids.join(", ")}`);
|
|
37
37
|
};
|
|
@@ -9,14 +9,14 @@ const searchTexts = {
|
|
|
9
9
|
grep: "`rg` (ripgrep) is not available here. `grep -r` also walks dependency and build folders, so exclude them: `grep -r --exclude-dir=node_modules --exclude-dir=.git --exclude-dir=bin --exclude-dir=obj ...`.",
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
/**
|
|
12
|
+
/** What the executor offers the bash tool beyond the platform. */
|
|
13
13
|
export interface ShellTools {
|
|
14
14
|
readonly ripgrep: boolean;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export const shellPlatformText = (platform: NodeJS.Platform, tools: ShellTools): string => {
|
|
18
18
|
const text = platformTexts[platform];
|
|
19
|
-
if (!text) throw new Error(`
|
|
19
|
+
if (!text) throw new Error(`There is no shell description for the platform ${platform}.`);
|
|
20
20
|
const search = tools.ripgrep ? searchTexts.ripgrep : searchTexts.grep;
|
|
21
21
|
return `${text} ${search} A nonzero exit code, for example \`grep\` without a match, comes back as an ordinary result with the code at the end, not as a tool error; only start, timeout and abort problems are tool errors.`;
|
|
22
22
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/** On Windows the data lives in `%LOCALAPPDATA%\ragents`, otherwise under `~/.local/share/ragents`. */
|
|
5
5
|
export const ragentsDataRoot = (
|
|
6
6
|
home = homedir(),
|
|
7
7
|
platform: NodeJS.Platform = process.platform,
|
|
@@ -9,17 +9,17 @@ export const ragentsDataRoot = (
|
|
|
9
9
|
): string => {
|
|
10
10
|
if (platform !== "win32") return path.resolve(home, ".local/share/ragents");
|
|
11
11
|
const local = environment.LOCALAPPDATA;
|
|
12
|
-
if (!local) throw new Error("LOCALAPPDATA
|
|
12
|
+
if (!local) throw new Error("LOCALAPPDATA is not set; on Windows the data folder is in %LOCALAPPDATA%\\ragents.");
|
|
13
13
|
return path.join(local, "ragents");
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
/**
|
|
16
|
+
/** The tools folder of a plugin: what its provisioning puts on this machine. */
|
|
17
17
|
export const pluginToolsDirectory = (dataDirectory: string, pluginId: string): string =>
|
|
18
18
|
path.join(dataDirectory, "tools", pluginId);
|
|
19
19
|
|
|
20
|
-
/**
|
|
20
|
+
/** A workspace has no profile; its tools live in a data folder of its own next to those of the profiles. */
|
|
21
21
|
export const workspaceDataDirectory = (home = homedir()): string => path.join(ragentsDataRoot(home), "workspace");
|
|
22
22
|
|
|
23
|
-
/**
|
|
23
|
+
/** The data folder of this process: DATA_DIR as on the server, otherwise the one of the workspace without a profile. */
|
|
24
24
|
export const hostDataDirectory = (environment: NodeJS.ProcessEnv = process.env): string =>
|
|
25
25
|
path.resolve(environment.DATA_DIR ?? workspaceDataDirectory());
|
|
@@ -14,7 +14,7 @@ const kindLabels: Readonly<Record<ActivityEntry["kind"], string>> = {
|
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
const titleOf = (entry: ActivityEntry) =>
|
|
17
|
-
entry.kind === "tool" ? `
|
|
17
|
+
entry.kind === "tool" ? `Tool running: ${entry.label}` : `Turn running: ${entry.label}`;
|
|
18
18
|
|
|
19
19
|
export function ActivityHeader({ session }: SessionHeaderContext) {
|
|
20
20
|
const state = useMemo(
|
|
@@ -34,7 +34,7 @@ export function ActivityHeader({ session }: SessionHeaderContext) {
|
|
|
34
34
|
if (!active) return null;
|
|
35
35
|
|
|
36
36
|
return (
|
|
37
|
-
<div aria-label="
|
|
37
|
+
<div aria-label="What is running right now" className="flex min-w-0 flex-none items-stretch self-stretch" role="status">
|
|
38
38
|
{state.entries.map((entry) => {
|
|
39
39
|
const elapsed = elapsedLabel(entry.startedAt, now);
|
|
40
40
|
return (
|
|
@@ -51,7 +51,7 @@ export function ActivityHeader({ session }: SessionHeaderContext) {
|
|
|
51
51
|
);
|
|
52
52
|
})}
|
|
53
53
|
{state.hidden > 0 && (
|
|
54
|
-
<ToolbarItem className="text-muted-foreground">+{state.hidden}
|
|
54
|
+
<ToolbarItem className="text-muted-foreground">+{state.hidden} more</ToolbarItem>
|
|
55
55
|
)}
|
|
56
56
|
</div>
|
|
57
57
|
);
|
|
@@ -72,7 +72,7 @@ const turnFrom = (value: unknown): ActivityTurn[] => {
|
|
|
72
72
|
}];
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
-
/**
|
|
75
|
+
/** Reads actors and turns from the run view; a structure that is not loaded yet or unknown yields nothing. */
|
|
76
76
|
export const activitySourceFrom = (
|
|
77
77
|
runView: unknown,
|
|
78
78
|
): ActivitySource => {
|
|
@@ -120,7 +120,7 @@ const runningTurns = (source: ActivitySource): ActivityEntry[] =>
|
|
|
120
120
|
}];
|
|
121
121
|
});
|
|
122
122
|
|
|
123
|
-
/**
|
|
123
|
+
/** The current state: open tool calls first, then running turns, oldest first in each group. */
|
|
124
124
|
export const activeActivity = (source: ActivitySource): ActivityState => {
|
|
125
125
|
const entries = [
|
|
126
126
|
...runningTools(source).sort(byStart),
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { AccessProjectionContribution, JsonValue } from "@ragents/engine";
|
|
2
|
+
import { ACTOR_INVOCATIONS_STATE_ID, ACTOR_PROGRAMS_STATE_ID } from "@ragents/host/plugin-support/actor-programs/contract.js";
|
|
3
|
+
|
|
4
|
+
const record = (value: JsonValue | undefined): Record<string, JsonValue | undefined> | undefined =>
|
|
5
|
+
value !== null && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
6
|
+
|
|
7
|
+
/** Without runs.inspect, only the name, actor, and views of a program remain; sources, functions, and directories are missing. */
|
|
8
|
+
const visibleProgram = (state: JsonValue): JsonValue => {
|
|
9
|
+
const program = record(record(state)?.program);
|
|
10
|
+
if (!program) return state;
|
|
11
|
+
const views = Array.isArray(program.views) ? program.views.map((value) => {
|
|
12
|
+
const view = record(value);
|
|
13
|
+
return view ? { id: view.id, key: view.key, title: view.title, visible: view.visible, placements: view.placements } : value;
|
|
14
|
+
}) : [];
|
|
15
|
+
return {
|
|
16
|
+
version: 1,
|
|
17
|
+
program: {
|
|
18
|
+
name: program.name,
|
|
19
|
+
title: program.title,
|
|
20
|
+
actorId: program.actorId,
|
|
21
|
+
actorHandle: program.actorHandle,
|
|
22
|
+
revision: program.revision,
|
|
23
|
+
views,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const actorProgramAccessProjections: readonly AccessProjectionContribution[] = [
|
|
29
|
+
{ id: ACTOR_PROGRAMS_STATE_ID, state: (entry) => visibleProgram(entry.state), chatEvent: () => undefined },
|
|
30
|
+
{ id: ACTOR_INVOCATIONS_STATE_ID, state: (entry) => ({ version: 1, revision: entry.updatedAt }), chatEvent: () => undefined },
|
|
31
|
+
];
|
|
@@ -7,7 +7,7 @@ export const agentToolsFrom = (host: PluginHost) =>
|
|
|
7
7
|
const view = runtime.view(runId);
|
|
8
8
|
const actor = provisional ?? view.actors.find((candidate) => candidate.id === actorId);
|
|
9
9
|
if (!actor || actor.kind === "human" || actor.lifecycle.kind === "stopped") {
|
|
10
|
-
throw new Error(`${actorId}
|
|
10
|
+
throw new Error(`${actorId} does not denote an active agent in this run.`);
|
|
11
11
|
}
|
|
12
12
|
const registry = new ToolRegistry();
|
|
13
13
|
host.tools.entries().forEach((contributor) => registry.register(contributor));
|
|
@@ -24,7 +24,7 @@ export const agentToolsFrom = (host: PluginHost) =>
|
|
|
24
24
|
const availableNames = new Set(tools.map((tool) => tool.name));
|
|
25
25
|
const unknown = actor.toolNames.filter((name) => !availableNames.has(name));
|
|
26
26
|
if (unknown.length > 0) {
|
|
27
|
-
throw new Error(`Actor ${actorId}
|
|
27
|
+
throw new Error(`Actor ${actorId} requires unknown tools: ${unknown.join(", ")}.`);
|
|
28
28
|
}
|
|
29
29
|
const selected = new Set(actor.toolNames);
|
|
30
30
|
return tools.filter((tool) => selected.has(tool.name));
|
|
@@ -37,7 +37,7 @@ const selected = <T>(
|
|
|
37
37
|
const byId = new Map(available.map((value) => [idOf(value), value]));
|
|
38
38
|
return capabilityIds.map((id) => {
|
|
39
39
|
const value = byId.get(id);
|
|
40
|
-
if (!value) throw unavailable(id, [...byId.keys()].sort().join(", ") || "
|
|
40
|
+
if (!value) throw unavailable(id, [...byId.keys()].sort().join(", ") || "none");
|
|
41
41
|
return value;
|
|
42
42
|
});
|
|
43
43
|
};
|
|
@@ -51,7 +51,7 @@ export const operatorCapabilityBinding = (
|
|
|
51
51
|
operations.filter((operation) => operation.operator !== "unavailable"),
|
|
52
52
|
capabilityIds,
|
|
53
53
|
(operation) => operation.id,
|
|
54
|
-
(id, names) => new Error(`Capability ${id}
|
|
54
|
+
(id, names) => new Error(`Capability ${id} is not available to the operator. Available: ${names}.`),
|
|
55
55
|
);
|
|
56
56
|
const descriptors = resolved.map(descriptorOf);
|
|
57
57
|
return {
|
|
@@ -76,7 +76,7 @@ export const agentCapabilityBinding = (
|
|
|
76
76
|
capabilityIds,
|
|
77
77
|
(tool) => tool.name,
|
|
78
78
|
(id, names) => new Error(
|
|
79
|
-
`Capability ${id}
|
|
79
|
+
`Capability ${id} is not available to @${actor.handle}. Available: ${names}.`,
|
|
80
80
|
),
|
|
81
81
|
);
|
|
82
82
|
const descriptors = resolved.map((tool) => descriptorOf({ ...tool, id: tool.name }));
|