@schlenkr/ragents 0.1.10 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/server/package.json +1 -1
- package/apps/server/src/access-projection.ts +4 -4
- package/apps/server/src/access-service.ts +3 -3
- package/apps/server/src/access-session.ts +19 -19
- package/apps/server/src/api/contracts.ts +29 -29
- package/apps/server/src/api/core-methods.ts +17 -17
- package/apps/server/src/api/delivery.ts +2 -2
- package/apps/server/src/api/reference.ts +27 -27
- package/apps/server/src/api/rights.ts +18 -18
- package/apps/server/src/chat-handler.ts +5 -5
- package/apps/server/src/config-definition.ts +37 -10
- package/apps/server/src/config-file.ts +49 -49
- package/apps/server/src/config.ts +2 -0
- package/apps/server/src/data-directory.ts +2 -2
- package/apps/server/src/external-access.ts +1 -1
- package/apps/server/src/folder-install.ts +1 -1
- package/apps/server/src/help-files.ts +1 -1
- package/apps/server/src/host-api.json +6 -1
- package/apps/server/src/host-api.ts +3 -2
- package/apps/server/src/host-record.ts +3 -3
- package/apps/server/src/host-resolution-hooks.mjs +4 -4
- package/apps/server/src/host-version.ts +17 -17
- package/apps/server/src/host-web.ts +5 -5
- package/apps/server/src/main.ts +6 -6
- package/apps/server/src/missing-environment.ts +6 -6
- package/apps/server/src/parent-watch.ts +4 -4
- package/apps/server/src/plugin-build/build.ts +31 -31
- package/apps/server/src/plugin-build/host-api-names.ts +7 -7
- package/apps/server/src/plugin-build/plugin-description.ts +15 -15
- package/apps/server/src/plugin-build/typecheck.ts +1 -1
- package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
- package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
- package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
- package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
- package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
- package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
- package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
- package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
- package/apps/server/src/plugin-support/front-matter.ts +6 -6
- package/apps/server/src/plugin-support/http.ts +2 -2
- package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
- package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
- package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
- package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
- package/apps/server/src/plugin-support/model-aliases.ts +30 -20
- package/apps/server/src/plugin-support/model-choice.ts +15 -15
- package/apps/server/src/plugin-support/model-completion.ts +44 -23
- package/apps/server/src/plugin-support/model-providers.ts +170 -0
- package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
- package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
- package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
- package/apps/server/src/plugin-support/plugin-config.ts +3 -3
- package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
- package/apps/server/src/plugin-support/plugins-root.ts +2 -2
- package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
- package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
- package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
- package/apps/server/src/plugin-support/product-relay.ts +9 -9
- package/apps/server/src/plugin-support/product-start-options.ts +4 -4
- package/apps/server/src/plugin-support/prompt.ts +1 -1
- package/apps/server/src/plugin-support/provision.ts +8 -8
- package/apps/server/src/plugin-support/run-scripts.ts +17 -17
- package/apps/server/src/plugin-support/skills.ts +18 -18
- package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
- package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
- package/apps/server/src/plugin-support/system-prompts.ts +11 -11
- package/apps/server/src/plugin-support/thinking-level.ts +2 -2
- package/apps/server/src/plugin-support/tool-availability.ts +2 -2
- package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
- package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
- package/apps/server/src/plugin-support/zip.ts +7 -7
- package/apps/server/src/profile/bundle-manifest.ts +17 -17
- package/apps/server/src/profile/compose.ts +12 -7
- package/apps/server/src/profile/plugin-discovery.ts +12 -12
- package/apps/server/src/profile/provisioning.ts +5 -5
- package/apps/server/src/profile-target.ts +10 -10
- package/apps/server/src/protocol.ts +2 -2
- package/apps/server/src/provider.ts +61 -56
- package/apps/server/src/ragents/actor-chat-history.ts +8 -8
- package/apps/server/src/ragents/chat-text-positions.ts +2 -2
- package/apps/server/src/ragents/coordinator.ts +2 -2
- package/apps/server/src/ragents/engine.ts +23 -23
- package/apps/server/src/ragents/global-chat.ts +8 -8
- package/apps/server/src/ragents/host-services.ts +6 -3
- package/apps/server/src/ragents/journal-chat-events.ts +1 -1
- package/apps/server/src/ragents/run-owner.ts +2 -2
- package/apps/server/src/ragents/session.ts +49 -49
- package/apps/server/src/ragents/typescript-tools.ts +12 -12
- package/apps/server/src/ragents/workspace-runtime.ts +28 -28
- package/apps/server/src/rpc/dispatcher.ts +19 -19
- package/apps/server/src/rpc/http-transport.ts +11 -11
- package/apps/server/src/rpc/stdio-transport.ts +3 -3
- package/apps/server/src/run-preparation-input.ts +5 -5
- package/apps/server/src/run-preparation.ts +24 -24
- package/apps/server/src/run-transfer.ts +39 -39
- package/apps/server/src/server.ts +48 -48
- package/apps/server/src/settings.ts +1 -1
- package/apps/server/src/startup.ts +3 -3
- package/apps/server/src/title-compactor.ts +9 -9
- package/apps/server/src/title-settings.ts +3 -3
- package/apps/server/src/web-bundles.ts +2 -2
- package/apps/server/src/web-stylesheet.ts +2 -2
- package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-BfNSGxjB.js} +1 -1
- package/apps/web/dist/assets/main-D6bsKcIK.js +11 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-DROEqEeg.js +608 -0
- package/apps/web/dist/assets/runPanel-Dumuuqry.js +21 -0
- package/apps/web/dist/help/guide-access.html +5 -5
- package/apps/web/dist/help/guide-access.md +2 -2
- package/apps/web/dist/help/guide-clients.html +53 -54
- package/apps/web/dist/help/guide-clients.md +50 -51
- package/apps/web/dist/help/guide-distributed.html +12 -7
- package/apps/web/dist/help/guide-distributed.md +9 -4
- package/apps/web/dist/help/guide-functions.html +3 -3
- package/apps/web/dist/help/guide-getting-started.html +24 -15
- package/apps/web/dist/help/guide-getting-started.md +22 -12
- package/apps/web/dist/help/guide-ideas.html +3 -3
- package/apps/web/dist/help/guide-plugins.html +5 -4
- package/apps/web/dist/help/guide-plugins.md +2 -1
- package/apps/web/dist/help/guide-programs.html +3 -3
- package/apps/web/dist/help/guide-runtime.html +6 -6
- package/apps/web/dist/help/guide-runtime.md +3 -3
- package/apps/web/dist/help/guide.html +3 -3
- package/apps/web/dist/help/index.html +196 -144
- package/apps/web/dist/help/mini-app.css +6 -0
- package/apps/web/dist/help/mini-app.js +14 -14
- package/apps/web/dist/host-web.json +90 -90
- package/apps/web/dist/index.html +3 -3
- package/apps/web/dist/run-panel.html +3 -3
- package/apps/web/package.json +1 -1
- package/apps/web/src/AccessContext.tsx +15 -15
- package/apps/web/src/App.tsx +13 -13
- package/apps/web/src/DiffCode.tsx +2 -2
- package/apps/web/src/HelpDialog.tsx +3 -3
- package/apps/web/src/Overview.tsx +13 -13
- package/apps/web/src/PluginActivation.ts +1 -1
- package/apps/web/src/PluginChat.tsx +15 -15
- package/apps/web/src/PluginFailureNotice.tsx +1 -1
- package/apps/web/src/PluginRegistry.tsx +44 -44
- package/apps/web/src/RunPreparationChat.tsx +11 -11
- package/apps/web/src/RunStore.ts +1 -1
- package/apps/web/src/SessionList.tsx +14 -14
- package/apps/web/src/SettingsModal.tsx +112 -112
- package/apps/web/src/StartOptions.tsx +11 -11
- package/apps/web/src/StartSelection.tsx +11 -11
- package/apps/web/src/StartTiles.tsx +8 -8
- package/apps/web/src/SurfaceShortcuts.tsx +3 -3
- package/apps/web/src/ThemeSettings.tsx +8 -8
- package/apps/web/src/TitleModelSettings.tsx +13 -13
- package/apps/web/src/WorkspacePanel.tsx +9 -9
- package/apps/web/src/access-session.ts +4 -4
- package/apps/web/src/access-token.ts +5 -5
- package/apps/web/src/actor-conversation.ts +3 -3
- package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
- package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
- package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
- package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
- package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
- package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
- package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
- package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
- package/apps/web/src/api.ts +7 -7
- package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
- package/apps/web/src/chat/chat-target.ts +3 -3
- package/apps/web/src/chat/requests.ts +2 -2
- package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
- package/apps/web/src/chat-view-settings.tsx +5 -6
- package/apps/web/src/diff-view.css +1 -1
- package/apps/web/src/highlighting.css +1 -1
- package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
- package/apps/web/src/lib/labels.ts +6 -6
- package/apps/web/src/main.tsx +4 -4
- package/apps/web/src/offered-machines.ts +2 -2
- package/apps/web/src/page-opener.tsx +1 -1
- package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
- package/apps/web/src/panel/LoginForm.tsx +6 -6
- package/apps/web/src/panel/PanelDialogs.tsx +22 -22
- package/apps/web/src/panel/PanelHeader.tsx +2 -2
- package/apps/web/src/panel/PanelPage.tsx +1 -1
- package/apps/web/src/panel/RunLine.tsx +4 -4
- package/apps/web/src/panel/RunsPage.tsx +15 -15
- package/apps/web/src/panel/StartPage.tsx +26 -26
- package/apps/web/src/panel/connection-state.ts +9 -9
- package/apps/web/src/panel/contract.ts +28 -28
- package/apps/web/src/panel.tsx +1 -1
- package/apps/web/src/plugin-bootstrap.ts +5 -5
- package/apps/web/src/product/ModelControl.tsx +3 -3
- package/apps/web/src/product/ProductModelSettings.tsx +16 -16
- package/apps/web/src/product/SystemPromptControl.tsx +11 -11
- package/apps/web/src/product/model-settings.ts +2 -2
- package/apps/web/src/rpc/client.ts +16 -16
- package/apps/web/src/rpc.ts +1 -1
- package/apps/web/src/run-overview.ts +1 -1
- package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
- package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
- package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
- package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
- package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
- package/apps/web/src/run-panel/clipboard.ts +3 -3
- package/apps/web/src/run-panel/host-contract.ts +5 -5
- package/apps/web/src/run-panel/host.ts +15 -15
- package/apps/web/src/run-panel/input-bridge.ts +1 -1
- package/apps/web/src/run-panel/run-panel-location.ts +5 -5
- package/apps/web/src/run-panel/use-session-list.ts +1 -1
- package/apps/web/src/run-panel/workspace-state.ts +3 -3
- package/apps/web/src/run-panel.tsx +4 -4
- package/apps/web/src/run-preparation.ts +2 -2
- package/apps/web/src/run-view.ts +3 -3
- package/apps/web/src/settings-contributions.ts +32 -32
- package/apps/web/src/theme.ts +9 -9
- package/apps/web/src/title-model-settings.ts +6 -6
- package/apps/web/src/ui/ListDetail.tsx +9 -9
- package/apps/web/src/ui/dialog.tsx +2 -2
- package/apps/web/src/ui/modal-controller.ts +3 -3
- package/apps/web/src/ui/modal.tsx +2 -2
- package/apps/web/src/ui/popover.tsx +1 -1
- package/apps/web/src/ui/relative-time.ts +8 -8
- package/apps/web/src/ui/startup-notice.tsx +2 -2
- package/apps/web/src/ui/state-icon.tsx +1 -1
- package/apps/web/src/ui/state-vocabulary.ts +16 -16
- package/apps/web/src/ui/stop-button.tsx +2 -2
- package/bundles/ragents.activity/ragents-bundle.json +2 -2
- package/bundles/ragents.activity/web/classes.json +1 -1
- package/bundles/ragents.activity/web/index.js +1 -1
- package/bundles/ragents.activity/web/index.js.map +2 -2
- package/bundles/ragents.actor-programs/ragents-bundle.json +2 -2
- package/bundles/ragents.actor-programs/server/index.js +225 -225
- package/bundles/ragents.actor-programs/server/index.js.map +2 -2
- package/bundles/ragents.actor-programs/web/classes.json +1 -1
- package/bundles/ragents.actor-programs/web/index.js +1 -1
- package/bundles/ragents.actor-programs/web/index.js.map +3 -3
- package/bundles/ragents.ask/ragents-bundle.json +2 -2
- package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
- package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
- package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
- package/bundles/ragents.ask/server/index.js +23 -23
- package/bundles/ragents.ask/server/index.js.map +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
- package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
- package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
- package/bundles/ragents.ask/web/classes.json +1 -1
- package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
- package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
- package/bundles/ragents.ask/web/exports/web/api.js +1 -1
- package/bundles/ragents.ask/web/index.js +1 -1
- package/bundles/ragents.ask/web/index.js.map +2 -2
- package/bundles/ragents.browser/executor/index.mjs +35 -35
- package/bundles/ragents.browser/executor/index.mjs.map +2 -2
- package/bundles/ragents.browser/ragents-bundle.json +2 -2
- package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
- package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
- package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
- package/bundles/ragents.browser/server/index.js +31 -31
- package/bundles/ragents.browser/server/index.js.map +2 -2
- package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
- package/bundles/ragents.documents/prompt.hbs +1 -1
- package/bundles/ragents.documents/ragents-bundle.json +2 -2
- package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
- package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
- package/bundles/ragents.documents/server/exports/contract.js +1 -1
- package/bundles/ragents.documents/server/index.js +26 -26
- package/bundles/ragents.documents/server/index.js.map +2 -2
- package/bundles/ragents.documents/web/classes.json +1 -1
- package/bundles/ragents.documents/web/index.js +1 -1
- package/bundles/ragents.documents/web/index.js.map +3 -3
- package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
- package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-fsharp/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
- package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
- package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
- package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
- package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
- package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-roslyn/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
- package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
- package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
- package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
- package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
- package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-typescript/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
- package/bundles/ragents.lsp-typescript/web/index.js +1 -1
- package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
- package/bundles/ragents.model-relay/ragents-bundle.json +7 -3
- package/bundles/ragents.model-relay/server/index.js +25 -21
- package/bundles/ragents.model-relay/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/ragents-bundle.json +2 -2
- package/bundles/ragents.orchestration/server/index.js +28 -28
- package/bundles/ragents.orchestration/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
- package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
- package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
- package/bundles/ragents.orchestration/web/classes.json +1 -1
- package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
- package/bundles/ragents.orchestration/web/index.js +8 -8
- package/bundles/ragents.orchestration/web/index.js.map +2 -2
- package/bundles/ragents.overseer/ragents-bundle.json +2 -2
- package/bundles/ragents.overseer/server/index.js +98 -98
- package/bundles/ragents.overseer/server/index.js.map +2 -2
- package/bundles/ragents.overseer/web/classes.json +1 -1
- package/bundles/ragents.overseer/web/index.js +1 -1
- package/bundles/ragents.overseer/web/index.js.map +2 -2
- package/bundles/ragents.processes/ragents-bundle.json +2 -2
- package/bundles/ragents.processes/server/index.js +11 -11
- package/bundles/ragents.processes/server/index.js.map +2 -2
- package/bundles/ragents.processes/web/classes.json +1 -1
- package/bundles/ragents.processes/web/index.js +3 -3
- package/bundles/ragents.processes/web/index.js.map +2 -2
- package/bundles/ragents.product/ragents-bundle.json +2 -2
- package/bundles/ragents.product/server/index.js +12 -13
- package/bundles/ragents.product/server/index.js.map +2 -2
- package/bundles/ragents.product/web/classes.json +1 -1
- package/bundles/ragents.product/web/index.js +1 -1
- package/bundles/ragents.product/web/index.js.map +2 -2
- package/bundles/ragents.profile-distribution/ragents-bundle.json +2 -2
- package/bundles/ragents.profile-distribution/server/index.js +31 -31
- package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
- package/bundles/ragents.reference/ragents-bundle.json +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
- package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
- package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
- package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
- package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
- package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
- package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
- package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
- package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
- package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
- package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
- package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
- package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
- package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
- package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
- package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
- package/bundles/ragents.reference/web/classes.json +1 -1
- package/bundles/ragents.reference/web/index.js +1 -1
- package/bundles/ragents.reference/web/index.js.map +2 -2
- package/bundles/ragents.todo/ragents-bundle.json +2 -2
- package/bundles/ragents.todo/server/index.js +5 -5
- package/bundles/ragents.todo/server/index.js.map +2 -2
- package/bundles/ragents.todo/web/classes.json +1 -1
- package/bundles/ragents.todo/web/index.js +1 -1
- package/bundles/ragents.todo/web/index.js.map +2 -2
- package/bundles/ragents.transcript/ragents-bundle.json +2 -2
- package/bundles/ragents.transcript/server/index.js +11 -11
- package/bundles/ragents.transcript/server/index.js.map +2 -2
- package/bundles/ragents.watch/ragents-bundle.json +2 -2
- package/bundles/ragents.watch/server/index.js +48 -48
- package/bundles/ragents.watch/server/index.js.map +2 -2
- package/bundles/ragents.workspace/ragents-bundle.json +2 -2
- package/bundles/ragents.workspace/server/index.js +81 -81
- package/bundles/ragents.workspace/server/index.js.map +2 -2
- package/bundles/ragents.workspace/web/classes.json +1 -1
- package/bundles/ragents.workspace/web/index.js +1 -1
- package/bundles/ragents.workspace/web/index.js.map +2 -2
- package/package.json +4 -4
- package/packages/agent/dist/core/model-runtime.d.ts +7 -2
- package/packages/agent/dist/index.d.ts +1 -1
- package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
- package/packages/agent/src/core/compaction/utils.ts +1 -1
- package/packages/agent/src/core/model-runtime.ts +45 -5
- package/packages/agent/src/index.ts +1 -1
- package/packages/agent/src/loop/agent-loop.ts +2 -2
- package/packages/ai/dist/models.d.ts +1 -0
- package/packages/ai/dist/models.generated.d.ts +4544 -983
- package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
- package/packages/ai/src/api/ai-sdk.ts +33 -7
- package/packages/ai/src/api-registry.ts +1 -1
- package/packages/ai/src/index.ts +2 -2
- package/packages/ai/src/models.generated.ts +1 -1
- package/packages/ai/src/models.ts +1 -1
- package/packages/ai/src/providers/openrouter.models.ts +3723 -550
- package/packages/ragents/src/access.ts +12 -12
- package/packages/ragents/src/agents/actor-input.ts +33 -33
- package/packages/ragents/src/agents/catalog.ts +1 -1
- package/packages/ragents/src/agents/delivery.ts +17 -17
- package/packages/ragents/src/agents/plugins.ts +1 -1
- package/packages/ragents/src/agents/scheduler.ts +7 -7
- package/packages/ragents/src/agents/schemas.ts +1 -1
- package/packages/ragents/src/agents/tool-orientation.ts +4 -4
- package/packages/ragents/src/agents/tools.ts +20 -20
- package/packages/ragents/src/agents/toolset.ts +5 -5
- package/packages/ragents/src/agents/workspaces.ts +1 -1
- package/packages/ragents/src/domain/events.ts +1 -1
- package/packages/ragents/src/domain/model.ts +5 -5
- package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
- package/packages/ragents/src/drivers/agent-turn.ts +4 -4
- package/packages/ragents/src/drivers/agent.ts +2 -2
- package/packages/ragents/src/drivers/attachments.ts +4 -4
- package/packages/ragents/src/http/contracts.ts +14 -14
- package/packages/ragents/src/http/methods.ts +6 -6
- package/packages/ragents/src/plugin-host.ts +119 -119
- package/packages/ragents/src/plugin-types.ts +16 -16
- package/packages/ragents/src/rpc/contract.ts +5 -5
- package/packages/ragents/src/rpc/contribution.ts +2 -2
- package/packages/ragents/src/rpc/peer.ts +11 -11
- package/packages/ragents/src/rpc/protocol.ts +2 -2
- package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
- package/packages/ragents/src/runtime/journal.ts +10 -10
- package/packages/ragents/src/runtime/orchestration.ts +8 -8
- package/packages/ragents/src/runtime/stop.ts +2 -2
- package/packages/ragents/src/script/mediators.ts +35 -35
- package/packages/ragents/src/typescript/async-compiler.ts +14 -14
- package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
- package/packages/ragents/src/typescript/compiler.ts +7 -7
- package/packages/ragents/src/typescript/snippet.ts +5 -5
- package/packages/workspace-executor/src/bash-launch.ts +13 -13
- package/packages/workspace-executor/src/commands.ts +18 -18
- package/packages/workspace-executor/src/context.ts +15 -15
- package/packages/workspace-executor/src/contributions.ts +35 -35
- package/packages/workspace-executor/src/errors.ts +1 -1
- package/packages/workspace-executor/src/executor.ts +15 -15
- package/packages/workspace-executor/src/files.ts +30 -30
- package/packages/workspace-executor/src/language-server/contract.ts +2 -2
- package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
- package/packages/workspace-executor/src/language-server/host.ts +35 -35
- package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
- package/packages/workspace-executor/src/language-server/module.ts +11 -11
- package/packages/workspace-executor/src/language-server/roots.ts +3 -3
- package/packages/workspace-executor/src/language-server/session.ts +15 -15
- package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
- package/packages/workspace-executor/src/managed-process.ts +12 -12
- package/packages/workspace-executor/src/module.ts +8 -8
- package/packages/workspace-executor/src/modules.ts +3 -3
- package/packages/workspace-executor/src/paths.ts +11 -11
- package/packages/workspace-executor/src/process-sandbox.ts +3 -3
- package/packages/workspace-executor/src/processes/module.ts +3 -3
- package/packages/workspace-executor/src/processes/process-table.ts +20 -20
- package/packages/workspace-executor/src/processes/scanner.ts +3 -3
- package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
- package/packages/workspace-executor/src/processes/terminator.ts +13 -13
- package/packages/workspace-executor/src/run-folders.ts +3 -3
- package/packages/workspace-executor/src/safe-environment.ts +4 -4
- package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
- package/packages/workspace-executor/src/session-ident.ts +2 -2
- package/packages/workspace-executor/src/shell-platform.ts +2 -2
- package/packages/workspace-executor/src/tools.ts +5 -5
- package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
- package/plugins/ragents.activity/web/activity.ts +2 -2
- package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
- package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
- package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
- package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
- package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
- package/plugins/ragents.actor-programs/server/limits.ts +3 -3
- package/plugins/ragents.actor-programs/server/methods.ts +1 -1
- package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
- package/plugins/ragents.actor-programs/server/routes.ts +8 -8
- package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
- package/plugins/ragents.actor-programs/server/templates.ts +59 -59
- package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
- package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
- package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
- package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
- package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
- package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
- package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
- package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
- package/plugins/ragents.actor-programs/web/api.ts +36 -36
- package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
- package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
- package/plugins/ragents.actor-programs/web/context.ts +1 -1
- package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
- package/plugins/ragents.actor-programs/web/index.tsx +1 -1
- package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
- package/plugins/ragents.ask/ask-payload.ts +1 -1
- package/plugins/ragents.ask/contract.ts +5 -5
- package/plugins/ragents.ask/server/answer-method.ts +1 -1
- package/plugins/ragents.ask/server/ask-service.ts +9 -9
- package/plugins/ragents.ask/server/ask-tool.ts +10 -10
- package/plugins/ragents.ask/server/contract.ts +5 -5
- package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
- package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
- package/plugins/ragents.ask/web/index.tsx +2 -2
- package/plugins/ragents.browser/executor/contract.ts +6 -6
- package/plugins/ragents.browser/executor/index.ts +1 -1
- package/plugins/ragents.browser/executor/module.ts +6 -6
- package/plugins/ragents.browser/executor/pages.ts +32 -32
- package/plugins/ragents.browser/executor/playwright.ts +8 -8
- package/plugins/ragents.browser/provision.ts +7 -7
- package/plugins/ragents.browser/server/browser.ts +14 -14
- package/plugins/ragents.browser/server/contract.ts +1 -1
- package/plugins/ragents.browser/server/index.ts +1 -1
- package/plugins/ragents.browser/server/tools.ts +14 -14
- package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
- package/plugins/ragents.documents/contract.ts +2 -2
- package/plugins/ragents.documents/prompt.hbs +1 -1
- package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
- package/plugins/ragents.documents/server/files-route.ts +6 -6
- package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
- package/plugins/ragents.documents/server/store.ts +1 -1
- package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
- package/plugins/ragents.documents/web/index.tsx +11 -11
- package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
- package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
- package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
- package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
- package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
- package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
- package/plugins/ragents.lsp-typescript/executor.ts +3 -3
- package/plugins/ragents.model-relay/server/config.ts +6 -2
- package/plugins/ragents.model-relay/server/index.ts +2 -2
- package/plugins/ragents.model-relay/server/relay.ts +23 -22
- package/plugins/ragents.orchestration/contract.ts +8 -8
- package/plugins/ragents.orchestration/server/index.ts +4 -4
- package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
- package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
- package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
- package/plugins/ragents.orchestration/web/ActorChat.tsx +2 -2
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
- package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
- package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
- package/plugins/ragents.orchestration/web/Center.tsx +5 -5
- package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
- package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
- package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
- package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
- package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
- package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
- package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
- package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
- package/plugins/ragents.orchestration/web/constants.ts +2 -2
- package/plugins/ragents.orchestration/web/executions.ts +6 -6
- package/plugins/ragents.orchestration/web/format.ts +1 -1
- package/plugins/ragents.orchestration/web/index.tsx +2 -2
- package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
- package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
- package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
- package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
- package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
- package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
- package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
- package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
- package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
- package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
- package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
- package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
- package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
- package/plugins/ragents.overseer/contract.ts +20 -20
- package/plugins/ragents.overseer/server/api.ts +6 -6
- package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
- package/plugins/ragents.overseer/server/coordinator.ts +4 -4
- package/plugins/ragents.overseer/server/index.ts +24 -24
- package/plugins/ragents.overseer/server/orientation.ts +8 -8
- package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
- package/plugins/ragents.overseer/server/run-directory.ts +5 -5
- package/plugins/ragents.overseer/server/settings.ts +6 -6
- package/plugins/ragents.overseer/server/user-location.ts +16 -16
- package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
- package/plugins/ragents.overseer/web/index.tsx +20 -20
- package/plugins/ragents.overseer/web/model-settings.ts +1 -1
- package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
- package/plugins/ragents.processes/contract.ts +5 -5
- package/plugins/ragents.processes/server/methods.ts +4 -4
- package/plugins/ragents.processes/server/observer.ts +8 -8
- package/plugins/ragents.processes/server/run-processes.ts +2 -2
- package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
- package/plugins/ragents.processes/web/processes.ts +10 -10
- package/plugins/ragents.product/server/config.ts +1 -1
- package/plugins/ragents.product/server/index.ts +4 -4
- package/plugins/ragents.product/server/runtime.ts +9 -10
- package/plugins/ragents.product/web/index.tsx +1 -1
- package/plugins/ragents.profile-distribution/contract.ts +10 -10
- package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
- package/plugins/ragents.profile-distribution/server/config.ts +2 -2
- package/plugins/ragents.profile-distribution/server/index.ts +4 -4
- package/plugins/ragents.reference/examples.ts +27 -27
- package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
- package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
- package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
- package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
- package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
- package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
- package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
- package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
- package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
- package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
- package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
- package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
- package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
- package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
- package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
- package/plugins/ragents.reference/walkthroughs.ts +128 -128
- package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
- package/plugins/ragents.todo/server/todo-tool.ts +6 -6
- package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
- package/plugins/ragents.transcript/server/transcript.ts +11 -11
- package/plugins/ragents.watch/server/condition.ts +4 -4
- package/plugins/ragents.watch/server/functions.ts +27 -27
- package/plugins/ragents.watch/server/observation.ts +2 -2
- package/plugins/ragents.watch/server/service.ts +14 -14
- package/plugins/ragents.workspace/client/transport.ts +1 -1
- package/plugins/ragents.workspace/client/workspace-client.ts +54 -54
- package/plugins/ragents.workspace/contract.ts +46 -46
- package/plugins/ragents.workspace/server/binding.ts +20 -20
- package/plugins/ragents.workspace/server/browse-route.ts +8 -8
- package/plugins/ragents.workspace/server/clients.ts +42 -42
- package/plugins/ragents.workspace/server/config.ts +7 -7
- package/plugins/ragents.workspace/server/index.ts +3 -3
- package/plugins/ragents.workspace/server/runtime.ts +26 -26
- package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
- package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
- package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
- package/plugins/ragents.workspace/web/index.tsx +1 -1
- package/ragents.config.core.ts +1 -1
- package/ragents.config.developer.ts +3 -3
- package/ragents.config.showcase.ts +2 -2
- package/scripts/agent/agent-cli.ts +96 -96
- package/scripts/agent/journal.ts +5 -5
- package/scripts/agent/turn-control.ts +4 -4
- package/scripts/package/build-package.ts +29 -29
- package/scripts/package/host-links.mjs +3 -3
- package/scripts/package/publish-package.ts +29 -29
- package/scripts/package/ragents.mjs +19 -19
- package/scripts/plugin/build-builtin-plugins.ts +5 -5
- package/scripts/plugin/plugin-cli.ts +14 -14
- package/scripts/provision/run-provision.ts +14 -15
- package/scripts/remote/connect.ts +46 -46
- package/scripts/remote/start.ts +18 -18
- package/scripts/workspace-client/run-workspace-client.ts +23 -23
- package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
- package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
- package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
- package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
- package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
- /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
- /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
|
@@ -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)));
|
|
@@ -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}}`]) {
|
|
@@ -153,7 +153,7 @@ export const createSandboxTools = async (
|
|
|
153
153
|
await killProcessGroup(pid);
|
|
154
154
|
const deadline = Date.now() + 5_000;
|
|
155
155
|
while (await processGroupExists(pid)) {
|
|
156
|
-
if (Date.now() >= deadline) throw new Error(`Bash
|
|
156
|
+
if (Date.now() >= deadline) throw new Error(`Bash process group ${pid} could not be ended`);
|
|
157
157
|
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
158
158
|
}
|
|
159
159
|
processGroups.delete(pid);
|
|
@@ -176,8 +176,8 @@ export const createSandboxTools = async (
|
|
|
176
176
|
};
|
|
177
177
|
|
|
178
178
|
const concurrent = (execute: ToolExecute): ToolExecute => (toolCallId, input, signal, onUpdate) => {
|
|
179
|
-
if (shuttingDown) throw new Error("
|
|
180
|
-
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");
|
|
181
181
|
const run = () => execute(toolCallId, input, signal, onUpdate);
|
|
182
182
|
return initial.runOperation ? initial.runOperation(run) : run();
|
|
183
183
|
};
|
|
@@ -192,7 +192,7 @@ export const createSandboxTools = async (
|
|
|
192
192
|
};
|
|
193
193
|
};
|
|
194
194
|
|
|
195
|
-
/**
|
|
195
|
+
/** On a direct call of the model a write checks the seen state, and a repeated read of an unchanged section answers briefly. */
|
|
196
196
|
const checkedAgainstSeen = async (name: FileToolName, file: string, shown: string, input: FileToolInput, seen: SeenFile | null): Promise<ToolResult | undefined> => {
|
|
197
197
|
if (name === "read") {
|
|
198
198
|
const sameView = seen?.read !== undefined && seen.file === file && seen.read.offset === input.offset && seen.read.limit === input.limit;
|
|
@@ -200,10 +200,10 @@ export const createSandboxTools = async (
|
|
|
200
200
|
}
|
|
201
201
|
const current = await currentHash(file);
|
|
202
202
|
if (current === undefined) return undefined;
|
|
203
|
-
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);
|
|
204
204
|
if (seen.hash !== current) {
|
|
205
205
|
throw new WorkspaceOperationError("workspace-file-changed",
|
|
206
|
-
`${shown}:
|
|
206
|
+
`${shown}: the file was changed since it was read (by the user, a formatter or another actor); read it again.`, 409);
|
|
207
207
|
}
|
|
208
208
|
return undefined;
|
|
209
209
|
};
|
|
@@ -245,32 +245,32 @@ export const createSandboxTools = async (
|
|
|
245
245
|
return writing ? serial(checked) : concurrent(checked);
|
|
246
246
|
};
|
|
247
247
|
|
|
248
|
-
/**
|
|
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. */
|
|
249
249
|
const inFolder = (execute: ToolExecute): ToolExecute => async (toolCallId, input, signal, onUpdate) => {
|
|
250
250
|
const params = input as { cwd?: unknown } | undefined;
|
|
251
251
|
if (params?.cwd === undefined) return execute(toolCallId, input, signal, onUpdate);
|
|
252
252
|
const requested = params.cwd;
|
|
253
253
|
if (typeof requested !== "string" || requested === "" || path.isAbsolute(requested)) {
|
|
254
254
|
throw new WorkspaceOperationError("workspace-path-invalid",
|
|
255
|
-
`cwd
|
|
255
|
+
`cwd names a folder relative to the working directory or starts with an alias like @actors; ${JSON.stringify(requested)} is neither`, 400);
|
|
256
256
|
}
|
|
257
257
|
const context = await contextFor();
|
|
258
258
|
const directory = await allowedWorkspacePath(path.resolve(cwd, expandWorkspaceAlias(requested, context.workspaceAliases ?? {})),
|
|
259
259
|
[context.root, ...context.additionalRoots ?? [], ...context.readOnlyRoots ?? []]);
|
|
260
260
|
if (!(await stat(directory).catch(() => undefined))?.isDirectory()) {
|
|
261
|
-
throw new WorkspaceOperationError("workspace-path-not-found", `
|
|
261
|
+
throw new WorkspaceOperationError("workspace-path-not-found", `The folder ${requested} does not exist`, 404);
|
|
262
262
|
}
|
|
263
263
|
return execute(toolCallId, { ...params, cwd: directory }, signal, onUpdate);
|
|
264
264
|
};
|
|
265
265
|
|
|
266
266
|
const startBash: BashOperations["exec"] = async (command, commandCwd, options) => {
|
|
267
|
-
if (shuttingDown) throw new Error("
|
|
267
|
+
if (shuttingDown) throw new Error("The tools are being killed");
|
|
268
268
|
const context = await contextFor();
|
|
269
|
-
if (shuttingDown) throw new Error("
|
|
269
|
+
if (shuttingDown) throw new Error("The tools are being killed");
|
|
270
270
|
options.signal?.throwIfAborted();
|
|
271
271
|
const bash = bashLaunch({ bash: context.bash, rg: context.rg }, command, context.env);
|
|
272
272
|
const launch = await sandboxedLaunch(context, bash);
|
|
273
|
-
if (shuttingDown) throw new Error("
|
|
273
|
+
if (shuttingDown) throw new Error("The tools are being killed");
|
|
274
274
|
options.signal?.throwIfAborted();
|
|
275
275
|
const marker = onWindows ? randomUUID() : undefined;
|
|
276
276
|
return new Promise((resolve, reject) => {
|
|
@@ -300,7 +300,7 @@ export const createSandboxTools = async (
|
|
|
300
300
|
child.kill("SIGKILL");
|
|
301
301
|
} catch (failure) {
|
|
302
302
|
cleanup();
|
|
303
|
-
reject(new AggregateError([error, failure], "Bash
|
|
303
|
+
reject(new AggregateError([error, failure], "Bash process could not be ended"));
|
|
304
304
|
}
|
|
305
305
|
});
|
|
306
306
|
};
|
|
@@ -339,8 +339,8 @@ export const createSandboxTools = async (
|
|
|
339
339
|
|
|
340
340
|
const bashOperations: BashOperations = {
|
|
341
341
|
exec: (command, commandCwd, options) => {
|
|
342
|
-
if (shuttingDown) throw new Error("
|
|
343
|
-
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");
|
|
344
344
|
return startBash(command, commandCwd, options);
|
|
345
345
|
},
|
|
346
346
|
};
|
|
@@ -359,16 +359,16 @@ export const createSandboxTools = async (
|
|
|
359
359
|
};
|
|
360
360
|
};
|
|
361
361
|
|
|
362
|
-
/**
|
|
362
|
+
/** The operations of the module are named like the tools the model sees. */
|
|
363
363
|
export const SANDBOX_TOOL_NAMES = ["read", "edit", "write", "bash"] as const;
|
|
364
364
|
|
|
365
|
-
/**
|
|
365
|
+
/** An explicitly requested timeout in seconds extends how long a remote executor may wait for the bash. */
|
|
366
366
|
const bashDuration = (input: unknown): { durationMs?: number } => {
|
|
367
367
|
const seconds = typeof input === "object" && input !== null ? (input as { timeout?: unknown }).timeout : undefined;
|
|
368
368
|
return typeof seconds === "number" && seconds > 0 ? { durationMs: seconds * 1000 } : {};
|
|
369
369
|
};
|
|
370
370
|
|
|
371
|
-
/**
|
|
371
|
+
/** The file tools address the root of their path, bash the root of its folder and without a folder no specific one. */
|
|
372
372
|
const sandboxToolFootprints: Readonly<Record<(typeof SANDBOX_TOOL_NAMES)[number], (input: unknown) => OperationFootprint>> = {
|
|
373
373
|
read: (input) => ({ roots: rootsOfFields(input, "path") }),
|
|
374
374
|
edit: (input) => ({ roots: rootsOfFields(input, "path") }),
|
|
@@ -382,7 +382,7 @@ const textOf = (update: ToolUpdate): string =>
|
|
|
382
382
|
.map((part) => part.text)
|
|
383
383
|
.join("\n");
|
|
384
384
|
|
|
385
|
-
/**
|
|
385
|
+
/** The four sandbox tools as operations; the sandbox of a run is created on the first call, bash reports its output as `{ text }`. */
|
|
386
386
|
export const sandboxToolsModule: WorkspaceModuleFactory = (host) => {
|
|
387
387
|
const sandboxes = new Map<string, Promise<SandboxTools>>();
|
|
388
388
|
const sandboxOf = (runId: string): Promise<SandboxTools> => {
|
|
@@ -407,7 +407,7 @@ export const sandboxToolsModule: WorkspaceModuleFactory = (host) => {
|
|
|
407
407
|
const operation = (name: string): WorkspaceOperation => async ({ runId, input, toolCallId, signal, progress }) => {
|
|
408
408
|
const { tools } = await sandboxOf(runId);
|
|
409
409
|
const run = tools.get(name);
|
|
410
|
-
if (!run) throw new Error(`
|
|
410
|
+
if (!run) throw new Error(`The sandbox does not know the tool ${name}`);
|
|
411
411
|
return run(input, {
|
|
412
412
|
toolCallId: toolCallId ?? name,
|
|
413
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),
|
|
@@ -4,7 +4,7 @@ import { ACTOR_INVOCATIONS_STATE_ID, ACTOR_PROGRAMS_STATE_ID } from "@ragents/ho
|
|
|
4
4
|
const record = (value: JsonValue | undefined): Record<string, JsonValue | undefined> | undefined =>
|
|
5
5
|
value !== null && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
6
6
|
|
|
7
|
-
/**
|
|
7
|
+
/** Without runs.inspect, only the name, actor, and views of a program remain; sources, functions, and directories are missing. */
|
|
8
8
|
const visibleProgram = (state: JsonValue): JsonValue => {
|
|
9
9
|
const program = record(record(state)?.program);
|
|
10
10
|
if (!program) return state;
|
|
@@ -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 }));
|