@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// The hook resolves @ragents/* also for a profile file outside the host; in the package there is no node_modules there.
|
|
2
2
|
import "../../apps/server/src/host-resolution.ts";
|
|
3
3
|
import { spawn } from "node:child_process";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
@@ -24,42 +24,42 @@ const POLL_INTERVAL_MS = 400;
|
|
|
24
24
|
const HEALTH_TIMEOUT_MS = 2_000;
|
|
25
25
|
const CHAT_READY_TIMEOUT_MS = 60_000;
|
|
26
26
|
|
|
27
|
-
/**
|
|
27
|
+
/** Default profile of the agent commands; RAGENTS_PROFILE applies to all commands of the same shell. */
|
|
28
28
|
export const defaultProfile = (): string => process.env.RAGENTS_PROFILE ?? DEFAULT_PROFILE;
|
|
29
29
|
|
|
30
|
-
export const usage = (): string => `
|
|
30
|
+
export const usage = (): string => `Usage: ragents <command> [arguments]
|
|
31
31
|
|
|
32
|
-
run [<
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
(pnpm workspace-client <server-url> <
|
|
39
|
-
|
|
32
|
+
run [<folder>] "<task>" [--profile <p>] [--entry <template>] [--workstation <id>] [--json]
|
|
33
|
+
Starts the profile's host if none is running, creates a run with a path binding to the
|
|
34
|
+
folder, sends the task and waits until the turn ends. A single value is always the task:
|
|
35
|
+
without <folder>, run chooses no binding; the default of the profile or of the template
|
|
36
|
+
applies. If the template fixes the binding, a <folder> is an error. With --workstation the
|
|
37
|
+
folder is on the workstation with this id that is registered with the host
|
|
38
|
+
(pnpm workspace-client <server-url> <folder> --id <id>) instead of on the server; without
|
|
39
|
+
it, run aborts, and without <folder> there is no --workstation.
|
|
40
40
|
send <run> "<text>" [--profile <p>] [--json]
|
|
41
|
-
|
|
41
|
+
Follow-up task in the same run, same waiting.
|
|
42
42
|
journal <run> [--profile <p>] [--json] [--tools]
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
stop <run> [--profile <p>]
|
|
46
|
-
|
|
43
|
+
Read the run's history compactly: from the profile's data folder, with RAGENTS_URL from the
|
|
44
|
+
server (there with the permission runs.inspect).
|
|
45
|
+
stop <run> [--profile <p>] interrupt the running turn of the primary actor; the run
|
|
46
|
+
stays active and accepts the next task
|
|
47
47
|
stop <run> --run [--profile <p>]
|
|
48
|
-
|
|
49
|
-
stop --host [--profile <p>]
|
|
50
|
-
plugin build <
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
<p>
|
|
54
|
-
|
|
55
|
-
0
|
|
56
|
-
|
|
57
|
-
ragents.runs.view),
|
|
58
|
-
runs.inspect, --json
|
|
59
|
-
|
|
60
|
-
host.PORT
|
|
61
|
-
|
|
62
|
-
|
|
48
|
+
Emergency stop: cancel all turns and stop all actors of the run
|
|
49
|
+
stop --host [--profile <p>] stop the remembered host
|
|
50
|
+
plugin build <folder...> [--out <o>] [--watch] [--no-typecheck]
|
|
51
|
+
Build plugin source folders into bundles; details with plugin --help.
|
|
52
|
+
|
|
53
|
+
<p> is a profile name next to the host or the path to a ragents.config.<profile>.ts anywhere;
|
|
54
|
+
without --profile, RAGENTS_PROFILE applies, otherwise ${DEFAULT_PROFILE}. Exit code:
|
|
55
|
+
0 done, 2 cancelled, 1 failed or connection problem. The last line on stdout
|
|
56
|
+
is "run: <id>". run and send follow the turn through the server (channel ragents.run and
|
|
57
|
+
ragents.runs.view), also on another machine; the server shows tool lines only with
|
|
58
|
+
runs.inspect, --json returns the same steps as JSON. If the connection breaks, the
|
|
59
|
+
command ends with 1 and the cause. The address comes from <data folder>/host.json, otherwise from RAGENTS_URL, otherwise from
|
|
60
|
+
host.PORT of the profile; RAGENTS_TOKEN is sent as a bearer token if the profile requires
|
|
61
|
+
sign-in. A host started this way does not build the UI - an agent does not need it; ragents
|
|
62
|
+
start <profile> starts it with the UI.`;
|
|
63
63
|
|
|
64
64
|
export type AgentCommand =
|
|
65
65
|
| { readonly kind: "run"; readonly profile: string; readonly folder: string | undefined; readonly text: string; readonly entry: string | undefined; readonly json: boolean; readonly workstation?: string }
|
|
@@ -92,13 +92,13 @@ const scan = (argv: readonly string[], allowed: readonly string[]): Flags => {
|
|
|
92
92
|
positional.push(argument);
|
|
93
93
|
continue;
|
|
94
94
|
}
|
|
95
|
-
if (!allowed.includes(argument)) throw new Error(`
|
|
95
|
+
if (!allowed.includes(argument)) throw new Error(`Unknown argument: ${argument}\n\n${usage()}`);
|
|
96
96
|
if (!VALUE_FLAGS.has(argument)) {
|
|
97
97
|
switches.add(argument);
|
|
98
98
|
continue;
|
|
99
99
|
}
|
|
100
100
|
const value = argv[index + 1];
|
|
101
|
-
if (value === undefined || value.startsWith("--")) throw new Error(`${argument}
|
|
101
|
+
if (value === undefined || value.startsWith("--")) throw new Error(`${argument} needs a value.`);
|
|
102
102
|
values.set(argument, value);
|
|
103
103
|
index += 1;
|
|
104
104
|
}
|
|
@@ -118,13 +118,13 @@ export const parseArguments = (argv: readonly string[]): AgentCommand => {
|
|
|
118
118
|
const [command, ...rest] = argv;
|
|
119
119
|
if (command === "run") {
|
|
120
120
|
const flags = scan(rest, ["--profile", "--entry", "--workstation", "--json"]);
|
|
121
|
-
if (flags.positional.length > 2) throw new Error(`run
|
|
121
|
+
if (flags.positional.length > 2) throw new Error(`run takes at most two values, not ${flags.positional.length}.`);
|
|
122
122
|
const [folder, text] = flags.positional.length === 2 ? flags.positional : [undefined, flags.positional[0]];
|
|
123
|
-
if (!text) throw new Error(`run
|
|
124
|
-
if (folder === "") throw new Error("run
|
|
125
|
-
if (flags.workstation !== undefined && folder === undefined) throw new Error("--workstation
|
|
123
|
+
if (!text) throw new Error(`run needs "<task>", optionally preceded by <folder>.\n\n${usage()}`);
|
|
124
|
+
if (folder === "") throw new Error("run needs a non-empty <folder> or only the task.");
|
|
125
|
+
if (flags.workstation !== undefined && folder === undefined) throw new Error("--workstation needs <folder>, the path on the workstation.");
|
|
126
126
|
if (flags.workstation !== undefined && !WORKSPACE_CLIENT_ID_PATTERN.test(flags.workstation)) {
|
|
127
|
-
throw new Error(`
|
|
127
|
+
throw new Error(`Invalid workstation id: ${flags.workstation} (8 to 64 characters from letters, digits, _ and -).`);
|
|
128
128
|
}
|
|
129
129
|
return { kind: "run", profile: flags.profile, folder, text, entry: flags.entry, json: flags.json,
|
|
130
130
|
...(flags.workstation ? { workstation: flags.workstation } : {}) };
|
|
@@ -132,33 +132,33 @@ export const parseArguments = (argv: readonly string[]): AgentCommand => {
|
|
|
132
132
|
if (command === "send") {
|
|
133
133
|
const flags = scan(rest, ["--profile", "--json"]);
|
|
134
134
|
const [runId, text, ...extra] = flags.positional;
|
|
135
|
-
if (!runId || !text) throw new Error(`send
|
|
136
|
-
if (extra.length > 0) throw new Error(`send
|
|
137
|
-
if (!RUN_ID_PATTERN.test(runId)) throw new Error(`
|
|
135
|
+
if (!runId || !text) throw new Error(`send needs <run> and "<text>".\n\n${usage()}`);
|
|
136
|
+
if (extra.length > 0) throw new Error(`send takes exactly two values, not ${flags.positional.length}.`);
|
|
137
|
+
if (!RUN_ID_PATTERN.test(runId)) throw new Error(`Invalid run id: ${runId}`);
|
|
138
138
|
return { kind: "send", profile: flags.profile, runId, text, json: flags.json };
|
|
139
139
|
}
|
|
140
140
|
if (command === "journal") {
|
|
141
141
|
const flags = scan(rest, ["--profile", "--json", "--tools"]);
|
|
142
142
|
const [runId, ...extra] = flags.positional;
|
|
143
|
-
if (!runId) throw new Error(`journal
|
|
144
|
-
if (extra.length > 0) throw new Error(`journal
|
|
145
|
-
if (!RUN_ID_PATTERN.test(runId)) throw new Error(`
|
|
143
|
+
if (!runId) throw new Error(`journal needs <run>.\n\n${usage()}`);
|
|
144
|
+
if (extra.length > 0) throw new Error(`journal takes exactly one value, not ${flags.positional.length}.`);
|
|
145
|
+
if (!RUN_ID_PATTERN.test(runId)) throw new Error(`Invalid run id: ${runId}`);
|
|
146
146
|
return { kind: "journal", profile: flags.profile, runId, json: flags.json, tools: flags.tools };
|
|
147
147
|
}
|
|
148
148
|
if (command === "stop") {
|
|
149
149
|
const flags = scan(rest, ["--profile", "--host", "--run"]);
|
|
150
|
-
if (flags.host && flags.run) throw new Error("stop
|
|
150
|
+
if (flags.host && flags.run) throw new Error("stop takes either --host or --run.");
|
|
151
151
|
if (flags.host) {
|
|
152
|
-
if (flags.positional.length > 0) throw new Error("stop --host
|
|
152
|
+
if (flags.positional.length > 0) throw new Error("stop --host takes no run id.");
|
|
153
153
|
return { kind: "stop-host", profile: flags.profile };
|
|
154
154
|
}
|
|
155
155
|
const [runId, ...extra] = flags.positional;
|
|
156
|
-
if (!runId) throw new Error(`stop
|
|
157
|
-
if (extra.length > 0) throw new Error(`stop
|
|
158
|
-
if (!RUN_ID_PATTERN.test(runId)) throw new Error(`
|
|
156
|
+
if (!runId) throw new Error(`stop needs <run> or --host.\n\n${usage()}`);
|
|
157
|
+
if (extra.length > 0) throw new Error(`stop takes exactly one value, not ${flags.positional.length}.`);
|
|
158
|
+
if (!RUN_ID_PATTERN.test(runId)) throw new Error(`Invalid run id: ${runId}`);
|
|
159
159
|
return { kind: flags.run ? "stop-run" : "stop", profile: flags.profile, runId };
|
|
160
160
|
}
|
|
161
|
-
throw new Error(command ? `
|
|
161
|
+
throw new Error(command ? `Unknown command: ${command}\n\n${usage()}` : usage());
|
|
162
162
|
};
|
|
163
163
|
|
|
164
164
|
export const loadProfile = (selection: string, root = hostRoot()): Promise<ProfileTarget> => selectProfileTarget(selection, root);
|
|
@@ -179,7 +179,7 @@ const note = (line: string): void => { process.stderr.write(`${line}\n`); };
|
|
|
179
179
|
const tail = (file: string, lines: number): string =>
|
|
180
180
|
(statSync(file, { throwIfNoEntry: false })?.isFile() ? readFileSync(file, "utf8") : "").split("\n").slice(-lines).join("\n");
|
|
181
181
|
|
|
182
|
-
/**
|
|
182
|
+
/** The remembered host, otherwise RAGENTS_URL, otherwise the address from host.PORT of the profile. */
|
|
183
183
|
export const addressOf = async (target: ProfileTarget): Promise<string> => {
|
|
184
184
|
const noted = readHostRecord(target.dataDirectory);
|
|
185
185
|
if (noted && await healthy(noted.url)) return noted.url;
|
|
@@ -204,8 +204,8 @@ const startHost = async (target: ProfileTarget): Promise<void> => {
|
|
|
204
204
|
});
|
|
205
205
|
child.unref();
|
|
206
206
|
closeSync(handle);
|
|
207
|
-
if (!child.pid) throw new Error(`
|
|
208
|
-
note(`== Host ${target.profile}
|
|
207
|
+
if (!child.pid) throw new Error(`The host ${target.profile} could not be started; the log is in ${log}.`);
|
|
208
|
+
note(`== Host ${target.profile} starting on ${target.baseUrl} (log ${log})`);
|
|
209
209
|
const deadline = Date.now() + HOST_START_TIMEOUT_MS;
|
|
210
210
|
while (Date.now() < deadline) {
|
|
211
211
|
if (await healthy(target.baseUrl)) {
|
|
@@ -216,19 +216,19 @@ const startHost = async (target: ProfileTarget): Promise<void> => {
|
|
|
216
216
|
log,
|
|
217
217
|
startedAt: new Date().toISOString(),
|
|
218
218
|
});
|
|
219
|
-
note(`== Host
|
|
219
|
+
note(`== Host ready at ${target.baseUrl} (PID ${child.pid})`);
|
|
220
220
|
return;
|
|
221
221
|
}
|
|
222
222
|
if (child.exitCode !== null || child.signalCode !== null) break;
|
|
223
223
|
await delay(500);
|
|
224
224
|
}
|
|
225
|
-
throw new Error(`
|
|
225
|
+
throw new Error(`The host ${target.profile} does not respond at ${target.baseUrl}. End of ${log}:\n${tail(log, 20)}`);
|
|
226
226
|
};
|
|
227
227
|
|
|
228
228
|
const ensureHost = async (target: ProfileTarget): Promise<string> => {
|
|
229
229
|
const address = await addressOf(target);
|
|
230
230
|
if (await healthy(address)) return address;
|
|
231
|
-
if (process.env.RAGENTS_URL) throw new Error(`
|
|
231
|
+
if (process.env.RAGENTS_URL) throw new Error(`No RAgents server responds at ${process.env.RAGENTS_URL} (RAGENTS_URL).`);
|
|
232
232
|
await startHost(target);
|
|
233
233
|
return target.baseUrl;
|
|
234
234
|
};
|
|
@@ -247,10 +247,10 @@ const client = (baseUrl: string): RpcClient => {
|
|
|
247
247
|
});
|
|
248
248
|
};
|
|
249
249
|
|
|
250
|
-
export const LOGIN_REQUIRED = "
|
|
251
|
-
+ "(
|
|
250
|
+
export const LOGIN_REQUIRED = "The profile requires sign-in; set RAGENTS_TOKEN to your user's personal token "
|
|
251
|
+
+ "(in the profile `token: env(...)`).";
|
|
252
252
|
|
|
253
|
-
/**
|
|
253
|
+
/** A 401 is not worth a server error message, but a hint to the profile's personal token. */
|
|
254
254
|
export const withLoginHint = async <T>(call: () => Promise<T>): Promise<T> => {
|
|
255
255
|
try {
|
|
256
256
|
return await call();
|
|
@@ -260,7 +260,7 @@ export const withLoginHint = async <T>(call: () => Promise<T>): Promise<T> => {
|
|
|
260
260
|
}
|
|
261
261
|
};
|
|
262
262
|
|
|
263
|
-
/**
|
|
263
|
+
/** A template first sets up the run and determines its chat partner in doing so; until then the server rejects the message. */
|
|
264
264
|
const sendWhenChatReady = async (rpc: RpcClient, runId: string, text: string): Promise<void> => {
|
|
265
265
|
const deadline = Date.now() + CHAT_READY_TIMEOUT_MS;
|
|
266
266
|
for (let attempt = 0; ; attempt += 1) {
|
|
@@ -269,7 +269,7 @@ const sendWhenChatReady = async (rpc: RpcClient, runId: string, text: string): P
|
|
|
269
269
|
return;
|
|
270
270
|
} catch (error) {
|
|
271
271
|
if (!(error instanceof RpcError) || error.domainCode !== "actor-chat-unsupported" || Date.now() >= deadline) throw error;
|
|
272
|
-
if (attempt === 0) note("==
|
|
272
|
+
if (attempt === 0) note("== The template is setting up the run; the task waits for its chat partner.");
|
|
273
273
|
await delay(POLL_INTERVAL_MS);
|
|
274
274
|
}
|
|
275
275
|
}
|
|
@@ -291,7 +291,7 @@ const seconds = (from: string | undefined, to: string | undefined): string => {
|
|
|
291
291
|
return Number.isNaN(start) || Number.isNaN(end) ? "?" : ((end - start) / 1000).toFixed(1);
|
|
292
292
|
};
|
|
293
293
|
|
|
294
|
-
/**
|
|
294
|
+
/** A step of the own turn: `line` for stdout (missing on a clean end), `data` for --json. */
|
|
295
295
|
export interface ProgressEntry {
|
|
296
296
|
readonly key: string;
|
|
297
297
|
readonly at: string;
|
|
@@ -307,7 +307,7 @@ export interface TurnProgress {
|
|
|
307
307
|
|
|
308
308
|
const PENDING: TurnProgress = { entries: [], outcome: undefined, reason: undefined };
|
|
309
309
|
|
|
310
|
-
const TOOL_ENDS: Readonly<Record<Exclude<TurnToolCall["status"], "running">, string>> = { completed: "ok", failed: "
|
|
310
|
+
const TOOL_ENDS: Readonly<Record<Exclude<TurnToolCall["status"], "running">, string>> = { completed: "ok", failed: "error", interrupted: "cancelled" };
|
|
311
311
|
|
|
312
312
|
const toolEntries = (call: TurnToolCall): ProgressEntry[] => [
|
|
313
313
|
{ key: `tool:${call.id}`, at: call.startedAt, line: `> ${call.name}`, data: { kind: "tool", call } },
|
|
@@ -322,12 +322,12 @@ const toolEntries = (call: TurnToolCall): ProgressEntry[] => [
|
|
|
322
322
|
const endEntry = (turn: Turn): ProgressEntry => ({
|
|
323
323
|
key: `turn:${turn.id}`,
|
|
324
324
|
at: turn.finishedAt ?? turn.startedAt,
|
|
325
|
-
line: turn.status === "failed" ? `! Turn
|
|
326
|
-
: turn.status === "interrupted" ? `! Turn
|
|
325
|
+
line: turn.status === "failed" ? `! Turn failed: ${shorten(turn.reason, 300)}`
|
|
326
|
+
: turn.status === "interrupted" ? `! Turn cancelled: ${shorten(turn.reason, 300)}` : undefined,
|
|
327
327
|
data: { kind: "turn", id: turn.id, status: turn.status, reason: turn.reason },
|
|
328
328
|
});
|
|
329
329
|
|
|
330
|
-
/**
|
|
330
|
+
/** The owner's new input with this text, the turn that started with it or had it fed in, and its steps from it on. */
|
|
331
331
|
export const progressOf = (view: RunView | null, known: ReadonlySet<string>, text: string): TurnProgress => {
|
|
332
332
|
const input = view?.inputs.find((entry) => !known.has(entry.id) && entry.enqueuedBy === view.ownerId && entry.subscriptionId === null
|
|
333
333
|
&& entry.content.trim() === text.trim());
|
|
@@ -347,12 +347,12 @@ export const progressOf = (view: RunView | null, known: ReadonlySet<string>, tex
|
|
|
347
347
|
};
|
|
348
348
|
|
|
349
349
|
interface RunWatch {
|
|
350
|
-
/**
|
|
350
|
+
/** Returns as soon as the channel has reported something since the last call; a broken stream is a hard error. */
|
|
351
351
|
readonly changed: () => Promise<void>;
|
|
352
352
|
readonly close: () => void;
|
|
353
353
|
}
|
|
354
354
|
|
|
355
|
-
/**
|
|
355
|
+
/** Like web and VS Code: the channel ragents.run first reports ready, then every journal change; ragents.runs.view returns the state. */
|
|
356
356
|
const watchRun = (rpc: RpcClient, runId: string): RunWatch => {
|
|
357
357
|
let dirty = false;
|
|
358
358
|
let failure: Error | undefined;
|
|
@@ -369,7 +369,7 @@ const watchRun = (rpc: RpcClient, runId: string): RunWatch => {
|
|
|
369
369
|
const unsubscribe = rpc.subscribe(coreContracts.channels.run, { runId }, () => {
|
|
370
370
|
dirty = true;
|
|
371
371
|
signal();
|
|
372
|
-
}, (message) => fail(`
|
|
372
|
+
}, (message) => fail(`The run's event stream failed: ${message}`));
|
|
373
373
|
const stopStatus = rpc.onStatus((status) => {
|
|
374
374
|
if (status.kind === "unauthorized") fail(LOGIN_REQUIRED);
|
|
375
375
|
});
|
|
@@ -396,7 +396,7 @@ interface FollowOptions {
|
|
|
396
396
|
readonly send: () => Promise<void>;
|
|
397
397
|
}
|
|
398
398
|
|
|
399
|
-
/**
|
|
399
|
+
/** Subscribes to the run, remembers the existing inputs, sends the task and follows it through the run view until the turn ends. */
|
|
400
400
|
const follow = async (options: FollowOptions): Promise<TurnOutcome> => {
|
|
401
401
|
const { rpc, runId } = options;
|
|
402
402
|
const watch = watchRun(rpc, runId);
|
|
@@ -411,7 +411,7 @@ const follow = async (options: FollowOptions): Promise<TurnOutcome> => {
|
|
|
411
411
|
}
|
|
412
412
|
};
|
|
413
413
|
|
|
414
|
-
/**
|
|
414
|
+
/** After sending, the turn keeps running on the server whatever fails here; the error says so. */
|
|
415
415
|
const followSent = async (options: FollowOptions, watch: RunWatch, known: ReadonlySet<string>): Promise<TurnOutcome> => {
|
|
416
416
|
const { rpc, runId } = options;
|
|
417
417
|
try {
|
|
@@ -431,7 +431,7 @@ const followSent = async (options: FollowOptions, watch: RunWatch, known: Readon
|
|
|
431
431
|
}
|
|
432
432
|
} catch (error) {
|
|
433
433
|
if (error instanceof RpcError && error.status === 401) throw error;
|
|
434
|
-
throw new Error(`
|
|
434
|
+
throw new Error(`The turn in ${runId} can no longer be followed through ${options.baseUrl} and may still be running there: `
|
|
435
435
|
+ (error instanceof Error ? error.message : String(error)));
|
|
436
436
|
}
|
|
437
437
|
};
|
|
@@ -440,26 +440,26 @@ export type LineWriter = (line: string) => void;
|
|
|
440
440
|
|
|
441
441
|
const toStdout: LineWriter = (line) => { process.stdout.write(`${line}\n`); };
|
|
442
442
|
|
|
443
|
-
/**
|
|
443
|
+
/** The registered workstation with this id, as the start option names it; if it is missing, run aborts with the cause. */
|
|
444
444
|
const workstationOf = (presentation: unknown, id: string): { client: string; label: string } => {
|
|
445
445
|
const clients = (presentation as WorkspaceBindingPresentation | null)?.clients ?? [];
|
|
446
446
|
const found = clients.find((entry) => entry.id === id);
|
|
447
447
|
if (!found) {
|
|
448
|
-
const registered = clients.map((entry) => `${entry.id} (${entry.label})`).join(", ") || "
|
|
449
|
-
throw new Error(`
|
|
448
|
+
const registered = clients.map((entry) => `${entry.id} (${entry.label})`).join(", ") || "none";
|
|
449
|
+
throw new Error(`No workstation with the id ${id} is registered with the host; registered: ${registered}. Register with pnpm workspace-client <server-url> <folder> --id ${id}.`);
|
|
450
450
|
}
|
|
451
451
|
return { client: found.id, label: found.label };
|
|
452
452
|
};
|
|
453
453
|
|
|
454
|
-
/**
|
|
454
|
+
/** If the template fixes the folder binding itself, any given folder contradicts it; run silently overrules neither side. */
|
|
455
455
|
const assertEntryLeavesBinding = async (rpc: RpcClient, entryId: string, folder: string): Promise<void> => {
|
|
456
456
|
const { startEntries } = await withLoginHint(() => rpc.call(coreContracts.plugins.bootstrap, {}));
|
|
457
457
|
const entry = startEntries.find((candidate) => candidate.id === entryId);
|
|
458
|
-
if (!entry) throw new Error(`
|
|
458
|
+
if (!entry) throw new Error(`The template ${entryId} does not exist in this profile, or it is not enabled for your user.`);
|
|
459
459
|
const fixed = entry.fixedStartOptions?.[WORKSPACE_BINDING_OPTION_ID];
|
|
460
460
|
if (fixed !== undefined) {
|
|
461
|
-
throw new Error(`
|
|
462
|
-
+ "
|
|
461
|
+
throw new Error(`The template ${entryId} fixes the folder binding itself (${JSON.stringify(fixed)}), but the folder ${folder} was given. `
|
|
462
|
+
+ "Leave out <folder> or start without this template.");
|
|
463
463
|
}
|
|
464
464
|
};
|
|
465
465
|
|
|
@@ -468,28 +468,28 @@ const bindFolder = async (rpc: RpcClient, runId: string, folder: string, command
|
|
|
468
468
|
const options = await withLoginHint(() => rpc.call(coreContracts.startOptions.list, { runId }));
|
|
469
469
|
const binding = options.find((option) => option.id === WORKSPACE_BINDING_OPTION_ID);
|
|
470
470
|
if (command.workstation) {
|
|
471
|
-
if (!binding) throw new Error(`
|
|
471
|
+
if (!binding) throw new Error(`The profile ${profile} does not know ${WORKSPACE_BINDING_OPTION_ID}; without a folder binding there is no workstation for --workstation.`);
|
|
472
472
|
const machine = workstationOf(binding.presentation, command.workstation);
|
|
473
473
|
await withLoginHint(() => rpc.call(coreContracts.startOptions.select, { runId, optionId: WORKSPACE_BINDING_OPTION_ID, value: { machine, folder: { path: folder } } }));
|
|
474
|
-
note(`== Run ${runId}
|
|
474
|
+
note(`== Run ${runId} on workstation ${machine.label}: ${folder} (${baseUrl})`);
|
|
475
475
|
} else if (binding) {
|
|
476
476
|
await withLoginHint(() => rpc.call(coreContracts.startOptions.select, { runId, optionId: WORKSPACE_BINDING_OPTION_ID, value: { machine: "server", folder: { path: folder } } }));
|
|
477
|
-
note(`== Run ${runId}
|
|
477
|
+
note(`== Run ${runId} on ${folder} (${baseUrl})`);
|
|
478
478
|
} else {
|
|
479
|
-
note(`== Run ${runId} (${baseUrl});
|
|
479
|
+
note(`== Run ${runId} (${baseUrl}); the profile ${profile} does not know ${WORKSPACE_BINDING_OPTION_ID} and creates its workspace itself, ${folder} stays unbound.`);
|
|
480
480
|
}
|
|
481
481
|
};
|
|
482
482
|
|
|
483
483
|
const runCommand = async (command: Extract<AgentCommand, { kind: "run" }>, write: LineWriter): Promise<number> => {
|
|
484
484
|
const folder = command.folder === undefined || (command.workstation && path.win32.isAbsolute(command.folder))
|
|
485
485
|
? command.folder : path.resolve(callerDirectory(), command.folder);
|
|
486
|
-
if (folder !== undefined && !command.workstation && !statSync(folder, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`
|
|
486
|
+
if (folder !== undefined && !command.workstation && !statSync(folder, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`Not a directory: ${folder}`);
|
|
487
487
|
const target = await loadProfile(command.profile);
|
|
488
488
|
const baseUrl = await ensureHost(target);
|
|
489
489
|
const rpc = client(baseUrl);
|
|
490
490
|
const runId = randomUUID();
|
|
491
491
|
if (folder !== undefined) await bindFolder(rpc, runId, folder, command, target.profile, baseUrl);
|
|
492
|
-
else note(`== Run ${runId} (${baseUrl})
|
|
492
|
+
else note(`== Run ${runId} (${baseUrl}) without a folder; the binding comes from ${command.entry ? `the template ${command.entry} or ` : ""}the default of the profile ${target.profile}.`);
|
|
493
493
|
if (command.entry) await withLoginHint(() => rpc.call(coreContracts.chat.start, { runId, entry: command.entry }));
|
|
494
494
|
const outcome = await withLoginHint(() => follow({ rpc, baseUrl, runId, text: command.text, json: command.json, write,
|
|
495
495
|
send: () => command.entry
|
|
@@ -502,7 +502,7 @@ const runCommand = async (command: Extract<AgentCommand, { kind: "run" }>, write
|
|
|
502
502
|
const sendCommand = async (command: Extract<AgentCommand, { kind: "send" }>, write: LineWriter): Promise<number> => {
|
|
503
503
|
const target = await loadProfile(command.profile);
|
|
504
504
|
const baseUrl = await addressOf(target);
|
|
505
|
-
if (!await healthy(baseUrl)) throw new Error(`
|
|
505
|
+
if (!await healthy(baseUrl)) throw new Error(`No RAgents server responds at ${baseUrl}; start it with ragents run.`);
|
|
506
506
|
const rpc = client(baseUrl);
|
|
507
507
|
const outcome = await withLoginHint(() => follow({ rpc, baseUrl, runId: command.runId, text: command.text, json: command.json, write,
|
|
508
508
|
send: () => rpc.call(coreContracts.chat.send, { runId: command.runId, text: command.text }).then(() => undefined) }));
|
|
@@ -510,7 +510,7 @@ const sendCommand = async (command: Extract<AgentCommand, { kind: "send" }>, wri
|
|
|
510
510
|
return EXIT_CODES[outcome];
|
|
511
511
|
};
|
|
512
512
|
|
|
513
|
-
/**
|
|
513
|
+
/** With RAGENTS_URL the journal is on the server, not in the data folder of the local profile; ragents.runs.events needs runs.inspect. */
|
|
514
514
|
const serverJournal = async (target: ProfileTarget, runId: string): Promise<readonly JournalEvent[]> => {
|
|
515
515
|
const baseUrl = await addressOf(target);
|
|
516
516
|
try {
|
|
@@ -518,7 +518,7 @@ const serverJournal = async (target: ProfileTarget, runId: string): Promise<read
|
|
|
518
518
|
return events.map((event) => ({ sequence: event.sequence, type: event.type, actorId: event.actorId, occurredAt: event.occurredAt,
|
|
519
519
|
payload: event.payload as Record<string, unknown> }));
|
|
520
520
|
} catch (error) {
|
|
521
|
-
if (error instanceof RpcError && error.status === 403) throw new Error(`
|
|
521
|
+
if (error instanceof RpcError && error.status === 403) throw new Error(`The journal through ${baseUrl} needs the permission runs.inspect: ${error.message}`);
|
|
522
522
|
throw error;
|
|
523
523
|
}
|
|
524
524
|
};
|
|
@@ -536,11 +536,11 @@ const stopCommand = async (command: Extract<AgentCommand, { kind: "stop" | "stop
|
|
|
536
536
|
const rpc = client(await addressOf(target));
|
|
537
537
|
if (command.kind === "stop-run") {
|
|
538
538
|
await withLoginHint(() => stopWholeRun(rpc, command.runId));
|
|
539
|
-
note(`== Run ${command.runId}
|
|
539
|
+
note(`== Run ${command.runId} stopped (emergency stop)`);
|
|
540
540
|
return 0;
|
|
541
541
|
}
|
|
542
542
|
const actorId = await withLoginHint(() => interruptPrimaryTurn(rpc, command.runId));
|
|
543
|
-
note(`==
|
|
543
|
+
note(`== Running turn of ${actorId} in ${command.runId} interrupted; the run stays active`);
|
|
544
544
|
return 0;
|
|
545
545
|
};
|
|
546
546
|
|
|
@@ -553,7 +553,7 @@ const alive = (pid: number): boolean => {
|
|
|
553
553
|
}
|
|
554
554
|
};
|
|
555
555
|
|
|
556
|
-
/**
|
|
556
|
+
/** The PID the host at this address reports itself; undefined if no host responds there. */
|
|
557
557
|
const hostPidAt = async (baseUrl: string): Promise<number | undefined> => {
|
|
558
558
|
try {
|
|
559
559
|
const response = await fetch(`${baseUrl}/health`, { signal: AbortSignal.timeout(HEALTH_TIMEOUT_MS) });
|
|
@@ -567,17 +567,17 @@ const hostPidAt = async (baseUrl: string): Promise<number | undefined> => {
|
|
|
567
567
|
const stopHostCommand = async (command: Extract<AgentCommand, { kind: "stop-host" }>): Promise<number> => {
|
|
568
568
|
const target = await loadProfile(command.profile);
|
|
569
569
|
const noted = readHostRecord(target.dataDirectory);
|
|
570
|
-
if (!noted) throw new Error(`
|
|
570
|
+
if (!noted) throw new Error(`No host is remembered for the profile ${command.profile} (${hostRecordFile(target.dataDirectory)} is missing).`);
|
|
571
571
|
if (!alive(noted.pid)) {
|
|
572
572
|
removeHostRecord(target.dataDirectory);
|
|
573
|
-
note(`==
|
|
573
|
+
note(`== The remembered host (PID ${noted.pid}) is no longer running; the record is removed.`);
|
|
574
574
|
return 0;
|
|
575
575
|
}
|
|
576
576
|
const answering = await hostPidAt(noted.url);
|
|
577
577
|
if (answering !== noted.pid) {
|
|
578
578
|
removeHostRecord(target.dataDirectory);
|
|
579
|
-
const found = answering === undefined ? "
|
|
580
|
-
throw new Error(`
|
|
579
|
+
const found = answering === undefined ? "no host that reports its PID" : `another host (PID ${answering})`;
|
|
580
|
+
throw new Error(`Found at ${noted.url}: ${found}; the remembered PID ${noted.pid} does not provably belong to the host and is not stopped. The record is removed.`);
|
|
581
581
|
}
|
|
582
582
|
process.kill(noted.pid, "SIGTERM");
|
|
583
583
|
const deadline = Date.now() + HOST_STOP_TIMEOUT_MS;
|
|
@@ -587,7 +587,7 @@ const stopHostCommand = async (command: Extract<AgentCommand, { kind: "stop-host
|
|
|
587
587
|
await delay(500);
|
|
588
588
|
}
|
|
589
589
|
removeHostRecord(target.dataDirectory);
|
|
590
|
-
note(`== Host ${noted.url} (PID ${noted.pid})
|
|
590
|
+
note(`== Host ${noted.url} (PID ${noted.pid}) stopped`);
|
|
591
591
|
return 0;
|
|
592
592
|
};
|
|
593
593
|
|
package/scripts/agent/journal.ts
CHANGED
|
@@ -26,11 +26,11 @@ export interface ActorUsage {
|
|
|
26
26
|
export const RUN_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
|
|
27
27
|
|
|
28
28
|
export const journalFile = (dataDirectory: string, runId: string): string => {
|
|
29
|
-
if (!RUN_ID_PATTERN.test(runId)) throw new Error(`
|
|
29
|
+
if (!RUN_ID_PATTERN.test(runId)) throw new Error(`Invalid run id: ${runId}`);
|
|
30
30
|
return path.join(dataDirectory, "runs", runId, "journal.jsonl");
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
/**
|
|
33
|
+
/** A journal record carries actor and time in the command, its events do not; both together make an event. */
|
|
34
34
|
const eventsOf = (line: string): readonly JournalEvent[] => {
|
|
35
35
|
const record = JSON.parse(line) as JournalRecord;
|
|
36
36
|
const actorId = record.command?.actorId ?? "";
|
|
@@ -43,7 +43,7 @@ const eventsOf = (line: string): readonly JournalEvent[] => {
|
|
|
43
43
|
}));
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
/**
|
|
46
|
+
/** Reads a journal continuously: each call returns the events added since the last one. */
|
|
47
47
|
export class JournalReader {
|
|
48
48
|
readonly #file: string;
|
|
49
49
|
#offset = 0;
|
|
@@ -76,7 +76,7 @@ export class JournalReader {
|
|
|
76
76
|
|
|
77
77
|
export const readJournal = (dataDirectory: string, runId: string): readonly JournalEvent[] => {
|
|
78
78
|
const reader = new JournalReader(dataDirectory, runId);
|
|
79
|
-
if (!existsSync(reader.file)) throw new Error(`Journal
|
|
79
|
+
if (!existsSync(reader.file)) throw new Error(`Journal missing: ${reader.file}`);
|
|
80
80
|
return reader.next();
|
|
81
81
|
};
|
|
82
82
|
|
|
@@ -126,6 +126,6 @@ export const journalLines = (events: readonly JournalEvent[], mode: JournalMode,
|
|
|
126
126
|
lines.push(`[${event.sequence}] ${type} ${actor}: ${JSON.stringify(payload).slice(0, 300)}`);
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
lines.push(`--
|
|
129
|
+
lines.push(`-- last sequence: ${events.at(-1)?.sequence ?? 0}`);
|
|
130
130
|
return lines;
|
|
131
131
|
};
|
|
@@ -3,17 +3,17 @@ import { coreContracts } from "../../apps/server/src/api/contracts.ts";
|
|
|
3
3
|
import type { RpcClient } from "../../apps/web/src/rpc/client.ts";
|
|
4
4
|
import { runContracts } from "../../packages/ragents/src/http/contracts.ts";
|
|
5
5
|
|
|
6
|
-
/**
|
|
6
|
+
/** Like the chat input: only the running turn of the primary actor ends, run and actors stay active. */
|
|
7
7
|
export const interruptPrimaryTurn = async (rpc: RpcClient, runId: string): Promise<string> => {
|
|
8
8
|
const view = await rpc.call(runContracts.view, { runId });
|
|
9
|
-
if (!view) throw new Error(`
|
|
9
|
+
if (!view) throw new Error(`The run ${runId} is not started.`);
|
|
10
10
|
const actorId = view.primaryActorId;
|
|
11
|
-
if (!actorId) throw new Error(`
|
|
11
|
+
if (!actorId) throw new Error(`The run ${runId} has no primary actor whose turn could be interrupted; stop with --run stops the whole run.`);
|
|
12
12
|
await rpc.call(runContracts.interruptTurn, { runId, commandId: randomUUID(), actorId });
|
|
13
13
|
return actorId;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
/**
|
|
16
|
+
/** Emergency stop: cancels all turns and stops all actors of the run. */
|
|
17
17
|
export const stopWholeRun = async (rpc: RpcClient, runId: string): Promise<void> => {
|
|
18
18
|
await rpc.call(coreContracts.chat.stop, { runId });
|
|
19
19
|
};
|