@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
|
@@ -5,22 +5,22 @@ import type { AskService } from "./contract.js";
|
|
|
5
5
|
|
|
6
6
|
export const askToolMetadata = {
|
|
7
7
|
name: "ask_user",
|
|
8
|
-
label: "
|
|
9
|
-
description: "
|
|
10
|
-
longDescription: "
|
|
11
|
-
+ "(
|
|
12
|
-
+ "
|
|
13
|
-
+ "
|
|
14
|
-
+ "
|
|
8
|
+
label: "Question",
|
|
9
|
+
description: "Asks the user for a required decision with answer options and waits for the answer.",
|
|
10
|
+
longDescription: "Always use this tool when you need a decision from the user "
|
|
11
|
+
+ "(e.g. choosing a branch or a time range), instead of only asking the question as text. "
|
|
12
|
+
+ "With multi=true the user may choose several options; the answer is then joined with '; '. "
|
|
13
|
+
+ "Instead of choosing an option, the user can always answer freely - so expect "
|
|
14
|
+
+ "the answer to be arbitrary text.",
|
|
15
15
|
} as const;
|
|
16
16
|
|
|
17
17
|
export const createAskTool = (service: AskService): RunFunction =>
|
|
18
18
|
defineRunFunction({
|
|
19
19
|
...askToolMetadata,
|
|
20
20
|
schema: Type.Object({
|
|
21
|
-
question: Type.String({ description: "
|
|
22
|
-
options: Type.Array(Type.String(), { description: "
|
|
23
|
-
multi: Type.Optional(Type.Boolean({ description: "true =
|
|
21
|
+
question: Type.String({ description: "The question to the user, short and concrete" }),
|
|
22
|
+
options: Type.Array(Type.String(), { description: "Answer options (2 to 6)" }),
|
|
23
|
+
multi: Type.Optional(Type.Boolean({ description: "true = multiple choice allowed" })),
|
|
24
24
|
}),
|
|
25
25
|
resultSchema: Type.String(),
|
|
26
26
|
available: facesOperator,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { serviceToken, type ServiceToken } from "@ragents/engine";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
export const DISMISSED_ANSWER = "
|
|
3
|
+
/** The answer `ask` returns when the user dismisses the question. */
|
|
4
|
+
export const DISMISSED_ANSWER = "The user dismissed the question.";
|
|
5
5
|
|
|
6
6
|
export interface AskCall {
|
|
7
7
|
runId: string;
|
|
8
|
-
/**
|
|
8
|
+
/** Who asks: an agent in its running turn, without a turn the run owner. */
|
|
9
9
|
agentId: string;
|
|
10
10
|
turnId: string | null;
|
|
11
11
|
commandId: string;
|
|
@@ -17,13 +17,13 @@ export interface AskRequest {
|
|
|
17
17
|
multi?: boolean;
|
|
18
18
|
description?: string;
|
|
19
19
|
parameters?: Record<string, string>;
|
|
20
|
-
/**
|
|
20
|
+
/** The actor that receives an answer nobody waits for anymore; if omitted, the asker. */
|
|
21
21
|
recipient?: string;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export interface AskService {
|
|
25
25
|
ask: (call: AskCall, request: AskRequest, signal: AbortSignal | undefined) => Promise<string>;
|
|
26
|
-
/**
|
|
26
|
+
/** Dismisses an open question: a waiting call gets DISMISSED_ANSWER, nobody gets an input. */
|
|
27
27
|
withdraw: (runId: string, actionId: string) => void;
|
|
28
28
|
}
|
|
29
29
|
|
|
@@ -26,7 +26,7 @@ export function AskActionView({ action, session, text }: ActionViewContext) {
|
|
|
26
26
|
answer={action.status === undefined
|
|
27
27
|
? undefined
|
|
28
28
|
: action.status === "approved" ? answerTextOf(action.result)
|
|
29
|
-
: supersedingInputOf(action.result) !== undefined ? SUPERSEDED_ANSWER : "
|
|
29
|
+
: supersedingInputOf(action.result) !== undefined ? SUPERSEDED_ANSWER : "The user dismissed the question."}
|
|
30
30
|
onAnswer={access.can("runs.write") ? answer : undefined}
|
|
31
31
|
question={question}
|
|
32
32
|
text={text}
|
|
@@ -7,8 +7,8 @@ const cardClasses = "gap-2.5 bg-background px-3.5 text-sm";
|
|
|
7
7
|
const optionClasses = "h-auto w-full justify-start gap-2 px-3 py-1.5 text-left text-sm font-normal whitespace-normal";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
* (question.multi),
|
|
10
|
+
* Question card: options stacked, either single or multiple choice
|
|
11
|
+
* (question.multi), plus always a free answer line. After the answer only the record remains.
|
|
12
12
|
*/
|
|
13
13
|
export function QuestionCard({
|
|
14
14
|
text,
|
|
@@ -21,8 +21,8 @@ export function QuestionCard({
|
|
|
21
21
|
answer?: string;
|
|
22
22
|
onAnswer?: (text: string) => void;
|
|
23
23
|
}) {
|
|
24
|
-
const [
|
|
25
|
-
const [
|
|
24
|
+
const [selected, setSelected] = useState<string[]>([]);
|
|
25
|
+
const [freeText, setFreeText] = useState("");
|
|
26
26
|
|
|
27
27
|
if (answer !== undefined) {
|
|
28
28
|
return (
|
|
@@ -45,13 +45,13 @@ export function QuestionCard({
|
|
|
45
45
|
);
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
const toggle = (option: string) =>
|
|
49
|
+
setSelected((previous) =>
|
|
50
|
+
previous.includes(option) ? previous.filter((o) => o !== option) : [...previous, option]);
|
|
51
51
|
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
if (
|
|
52
|
+
const sendFreeText = () => {
|
|
53
|
+
const value = freeText.trim();
|
|
54
|
+
if (value) onAnswer(value);
|
|
55
55
|
};
|
|
56
56
|
|
|
57
57
|
return (
|
|
@@ -61,15 +61,15 @@ export function QuestionCard({
|
|
|
61
61
|
{question.options.map((option) =>
|
|
62
62
|
question.multi ? (
|
|
63
63
|
<Button
|
|
64
|
-
aria-pressed={
|
|
64
|
+
aria-pressed={selected.includes(option)}
|
|
65
65
|
className={cn(optionClasses, "aria-pressed:border-primary aria-pressed:bg-accent")}
|
|
66
66
|
data-question="option"
|
|
67
67
|
key={option}
|
|
68
|
-
onClick={() =>
|
|
68
|
+
onClick={() => toggle(option)}
|
|
69
69
|
variant="outline"
|
|
70
70
|
>
|
|
71
71
|
<span className="inline-flex size-3.5 flex-none items-center justify-center rounded-sm border border-border text-primary group-aria-pressed/button:border-primary">
|
|
72
|
-
{
|
|
72
|
+
{selected.includes(option) && <CheckIcon size={10} />}
|
|
73
73
|
</span>
|
|
74
74
|
{option}
|
|
75
75
|
</Button>
|
|
@@ -83,25 +83,25 @@ export function QuestionCard({
|
|
|
83
83
|
{question.multi && (
|
|
84
84
|
<Button
|
|
85
85
|
className="self-start"
|
|
86
|
-
disabled={
|
|
87
|
-
onClick={() => onAnswer(
|
|
86
|
+
disabled={selected.length === 0}
|
|
87
|
+
onClick={() => onAnswer(selected.join("; "))}
|
|
88
88
|
size="sm"
|
|
89
89
|
>
|
|
90
|
-
|
|
90
|
+
Apply selection
|
|
91
91
|
</Button>
|
|
92
92
|
)}
|
|
93
93
|
<div className="flex gap-1.5">
|
|
94
94
|
<Input
|
|
95
95
|
className="flex-1"
|
|
96
|
-
onChange={(event) =>
|
|
96
|
+
onChange={(event) => setFreeText(event.target.value)}
|
|
97
97
|
onKeyDown={(event) => {
|
|
98
|
-
if (event.key === "Enter")
|
|
98
|
+
if (event.key === "Enter") sendFreeText();
|
|
99
99
|
}}
|
|
100
|
-
placeholder="...
|
|
101
|
-
value={
|
|
100
|
+
placeholder="... or answer freely"
|
|
101
|
+
value={freeText}
|
|
102
102
|
/>
|
|
103
|
-
<Button disabled={
|
|
104
|
-
|
|
103
|
+
<Button disabled={freeText.trim() === ""} onClick={sendFreeText} size="sm" variant="outline">
|
|
104
|
+
Answer
|
|
105
105
|
</Button>
|
|
106
106
|
</div>
|
|
107
107
|
</Card>
|
|
@@ -21,8 +21,8 @@ const attentionFor = (session: SessionContext) => {
|
|
|
21
21
|
return {
|
|
22
22
|
active: true as const,
|
|
23
23
|
label: rest.length === 0
|
|
24
|
-
? `@${askerHandle(view, askPayloadOf(first.payload)?.recipient ?? first.askedBy)}
|
|
25
|
-
: `${rest.length + 1}
|
|
24
|
+
? `@${askerHandle(view, askPayloadOf(first.payload)?.recipient ?? first.askedBy)} asks`
|
|
25
|
+
: `${rest.length + 1} open questions`,
|
|
26
26
|
};
|
|
27
27
|
};
|
|
28
28
|
|
|
@@ -12,7 +12,7 @@ export const BROWSER_OPERATIONS = {
|
|
|
12
12
|
close: "browser.close",
|
|
13
13
|
} as const;
|
|
14
14
|
|
|
15
|
-
/**
|
|
15
|
+
/** Names a custom Chrome; on a server the profile section `ragents.browser` sets it, on a workspace its environment. */
|
|
16
16
|
export const BROWSER_EXECUTABLE_VARIABLE = "BROWSER_EXECUTABLE_PATH";
|
|
17
17
|
|
|
18
18
|
export interface BrowserTarget {
|
|
@@ -48,23 +48,23 @@ export interface BrowserCheck {
|
|
|
48
48
|
noErrors?: boolean;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
/**
|
|
51
|
+
/** What a passed check proves; the time is set by whoever holds the run's evidence. */
|
|
52
52
|
export interface BrowserCheckResult {
|
|
53
53
|
url: string;
|
|
54
54
|
assertions: string[];
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
/**
|
|
57
|
+
/** The page state after an operation; the caller derives the run's evidence from it. */
|
|
58
58
|
export interface BrowserPageState {
|
|
59
59
|
url: string;
|
|
60
|
-
/**
|
|
60
|
+
/** A check has passed since the last action or navigation. */
|
|
61
61
|
checked: boolean;
|
|
62
62
|
errors: string[];
|
|
63
|
-
/**
|
|
63
|
+
/** The ids of the screenshots since the last action or navigation, as the caller assigned them. */
|
|
64
64
|
screenshots: string[];
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
/**
|
|
67
|
+
/** The result of an operation on the page and the state it leaves the page in. */
|
|
68
68
|
export interface BrowserStep<T> {
|
|
69
69
|
result: T;
|
|
70
70
|
page: BrowserPageState;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { WorkspaceExecutorContribution } from "@ragents/workspace-executor";
|
|
2
2
|
import { browserModule } from "./module.js";
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/** The browser runs where the run's workspace lives: in the server's executor or in the workspace's. */
|
|
5
5
|
export const executor: WorkspaceExecutorContribution = (machine) => ({ modules: [browserModule(machine)] });
|
|
@@ -7,33 +7,33 @@ import { launchChromium } from "./playwright.js";
|
|
|
7
7
|
const BROWSER_TIMEOUT_MS = 15_000;
|
|
8
8
|
|
|
9
9
|
export interface BrowserModuleOptions {
|
|
10
|
-
/**
|
|
10
|
+
/** Starts a run's browser; if omitted, Chrome via playwright-core from this machine's host. */
|
|
11
11
|
launch?: (runId: string) => Promise<Browser>;
|
|
12
12
|
timeoutMs?: number;
|
|
13
13
|
checkTimeoutMs?: number;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
/**
|
|
16
|
+
/** A run's browser on this machine: page, actions, checks and screenshots; the caller holds evidence and storage. */
|
|
17
17
|
export const browserModule = (machine: WorkspaceExecutorMachine, options: BrowserModuleOptions = {}): WorkspaceModuleFactory => (host) => {
|
|
18
18
|
const invalid = (message: string): Error => machine.operationError("browser-input-invalid", message, 400);
|
|
19
19
|
const fieldsOf = (input: unknown): Readonly<Record<string, unknown>> => {
|
|
20
|
-
if (typeof input !== "object" || input === null || Array.isArray(input)) throw invalid("
|
|
20
|
+
if (typeof input !== "object" || input === null || Array.isArray(input)) throw invalid("The input of a browser operation is an object");
|
|
21
21
|
return input as Readonly<Record<string, unknown>>;
|
|
22
22
|
};
|
|
23
23
|
const textOf = (input: unknown, key: string): string => {
|
|
24
24
|
const value = fieldsOf(input)[key];
|
|
25
|
-
if (typeof value !== "string") throw invalid(`
|
|
25
|
+
if (typeof value !== "string") throw invalid(`The browser operation needs ${key} as text`);
|
|
26
26
|
return value;
|
|
27
27
|
};
|
|
28
28
|
const targetOf = (input: unknown): BrowserTarget => {
|
|
29
29
|
const value = fieldsOf(input).target;
|
|
30
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) throw invalid("
|
|
30
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) throw invalid("The browser operation needs a target");
|
|
31
31
|
return value as BrowserTarget;
|
|
32
32
|
};
|
|
33
33
|
const viewportOf = (input: unknown): BrowserViewport => {
|
|
34
34
|
const { width, height } = fieldsOf(input);
|
|
35
35
|
if (typeof width !== "number" || typeof height !== "number" || !Number.isInteger(width) || !Number.isInteger(height) || width <= 0 || height <= 0) {
|
|
36
|
-
throw invalid("
|
|
36
|
+
throw invalid("A viewport needs width and height as positive integers");
|
|
37
37
|
}
|
|
38
38
|
return { width, height };
|
|
39
39
|
};
|
|
@@ -17,7 +17,7 @@ interface BrowserSession {
|
|
|
17
17
|
closed: boolean;
|
|
18
18
|
checked: boolean;
|
|
19
19
|
errors: string[];
|
|
20
|
-
/**
|
|
20
|
+
/** Addresses whose failed request is already reported; HTTP status, console and network report the same cause only once. */
|
|
21
21
|
failedRequests: Set<string>;
|
|
22
22
|
screenshots: string[];
|
|
23
23
|
}
|
|
@@ -29,9 +29,9 @@ export interface BrowserPagesOptions {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const errorText = (error: unknown): string => error instanceof Error ? error.message : String(error);
|
|
32
|
-
const endedError = (): Error => new Error("
|
|
32
|
+
const endedError = (): Error => new Error("The browser service of this executor has ended.");
|
|
33
33
|
const maxSnapshotLength = 40_000;
|
|
34
|
-
const ambiguityHint = "
|
|
34
|
+
const ambiguityHint = "Pick one match with nth (0-based) or first: true in the target, or check the number with count in browser_check.";
|
|
35
35
|
|
|
36
36
|
const withAmbiguityHint = (error: unknown): never => {
|
|
37
37
|
if (error instanceof Error && error.message.includes("strict mode violation")) throw new Error(`${error.message}\n${ambiguityHint}`, { cause: error });
|
|
@@ -41,9 +41,9 @@ const withAmbiguityHint = (error: unknown): never => {
|
|
|
41
41
|
export const browserLocator = (page: Page, target: BrowserTarget): Locator => {
|
|
42
42
|
const selectors = [target.role, target.label, target.text, target.testId, target.css].filter((value) => value !== undefined);
|
|
43
43
|
if (selectors.length !== 1 || (target.name !== undefined && target.role === undefined)) {
|
|
44
|
-
throw new Error("
|
|
44
|
+
throw new Error("A browser target needs exactly one of role (optional name), label, text, testId or css.");
|
|
45
45
|
}
|
|
46
|
-
if (target.nth !== undefined && target.first) throw new Error("
|
|
46
|
+
if (target.nth !== undefined && target.first) throw new Error("A browser target uses either nth or first, not both.");
|
|
47
47
|
const root = target.frame ? page.frameLocator(target.frame) : page;
|
|
48
48
|
const base = target.role ? root.getByRole(target.role as Parameters<Page["getByRole"]>[0], { name: target.name, exact: true })
|
|
49
49
|
: target.label ? root.getByLabel(target.label, { exact: true })
|
|
@@ -53,7 +53,7 @@ export const browserLocator = (page: Page, target: BrowserTarget): Locator => {
|
|
|
53
53
|
return target.first ? base.first() : target.nth !== undefined ? base.nth(target.nth) : base;
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
-
/**
|
|
56
|
+
/** One browser with one page per run on this machine; a run's actions run one after another. */
|
|
57
57
|
export class BrowserPages {
|
|
58
58
|
readonly #options: BrowserPagesOptions;
|
|
59
59
|
readonly #sessions = new Map<string, BrowserSession>();
|
|
@@ -66,13 +66,13 @@ export class BrowserPages {
|
|
|
66
66
|
async open(runId: string, url: string, viewport: BrowserViewport, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {
|
|
67
67
|
if (this.#shutDown) throw endedError();
|
|
68
68
|
const parsed = new URL(url);
|
|
69
|
-
if (!["http:", "https:"].includes(parsed.protocol)) throw new Error("browser_open
|
|
69
|
+
if (!["http:", "https:"].includes(parsed.protocol)) throw new Error("browser_open needs an HTTP or HTTPS address.");
|
|
70
70
|
signal?.throwIfAborted();
|
|
71
71
|
if (!this.#sessions.has(runId)) this.#start(runId, viewport);
|
|
72
72
|
return this.#perform(runId, signal, async (session, page) => {
|
|
73
73
|
this.#resetEvidence(session);
|
|
74
74
|
const response = await page.goto(parsed.href, { waitUntil: "domcontentloaded" });
|
|
75
|
-
if (response && !response.ok()) throw new Error(`
|
|
75
|
+
if (response && !response.ok()) throw new Error(`Browser navigation failed: HTTP ${response.status()} (${page.url()}).`);
|
|
76
76
|
return this.#snapshot(session, page);
|
|
77
77
|
});
|
|
78
78
|
}
|
|
@@ -108,45 +108,45 @@ export class BrowserPages {
|
|
|
108
108
|
return this.#perform(runId, signal, async (session, page) => {
|
|
109
109
|
session.checked = false;
|
|
110
110
|
if (!input.target && input.text === undefined && input.url === undefined && input.noErrors !== true) {
|
|
111
|
-
throw new Error("browser_check
|
|
111
|
+
throw new Error("browser_check needs at least target, text, url or noErrors: true.");
|
|
112
112
|
}
|
|
113
113
|
if (input.count !== undefined && (!input.target || input.target.nth !== undefined || input.target.first)) {
|
|
114
|
-
throw new Error("count in browser_check
|
|
114
|
+
throw new Error("count in browser_check needs a target without nth or first and counts its visible matches.");
|
|
115
115
|
}
|
|
116
116
|
const timeout = this.#options.checkTimeoutMs;
|
|
117
117
|
const assertions: string[] = [];
|
|
118
118
|
if (input.target && input.count !== undefined) {
|
|
119
119
|
const visible = browserLocator(page, input.target).filter({ visible: true });
|
|
120
120
|
const found = await this.#waitForCount(visible, input.count, timeout);
|
|
121
|
-
if (found !== input.count) throw new Error(`
|
|
122
|
-
assertions.push(`${input.count}
|
|
121
|
+
if (found !== input.count) throw new Error(`Expected ${input.count} visible matches, found ${found}.`);
|
|
122
|
+
assertions.push(`${input.count} visible matches`);
|
|
123
123
|
} else if (input.target) {
|
|
124
124
|
const locator = browserLocator(page, input.target);
|
|
125
125
|
await locator.waitFor({ state: "visible", timeout }).catch(withAmbiguityHint);
|
|
126
|
-
assertions.push("
|
|
126
|
+
assertions.push("Target is visible");
|
|
127
127
|
if (input.text !== undefined) {
|
|
128
128
|
try { await locator.filter({ hasText: input.text }).waitFor({ state: "visible", timeout }); }
|
|
129
|
-
catch (error) { throw new Error(`
|
|
130
|
-
assertions.push(`Text
|
|
129
|
+
catch (error) { throw new Error(`Expected text is missing in the target: ${input.text}`, { cause: error }); }
|
|
130
|
+
assertions.push(`Text in target: ${input.text}`);
|
|
131
131
|
}
|
|
132
132
|
} else if (input.text !== undefined) {
|
|
133
133
|
await page.getByText(input.text, { exact: false }).first().waitFor({ state: "visible", timeout });
|
|
134
|
-
assertions.push(`
|
|
134
|
+
assertions.push(`Visible text: ${input.text}`);
|
|
135
135
|
}
|
|
136
136
|
if (input.url !== undefined) {
|
|
137
137
|
await page.waitForURL(input.url, { timeout });
|
|
138
|
-
assertions.push(`
|
|
138
|
+
assertions.push(`Address: ${input.url}`);
|
|
139
139
|
}
|
|
140
140
|
if (input.noErrors !== false) {
|
|
141
|
-
if (session.errors.length > 0) throw new Error(`
|
|
142
|
-
assertions.push("
|
|
141
|
+
if (session.errors.length > 0) throw new Error(`Browser errors: ${session.errors.join("\n")}`);
|
|
142
|
+
assertions.push("No captured browser or network errors since the navigation");
|
|
143
143
|
}
|
|
144
144
|
session.checked = true;
|
|
145
145
|
return { url: page.url(), assertions };
|
|
146
146
|
});
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
/**
|
|
149
|
+
/** Captures the page as PNG and returns it Base64-encoded; the page remembers `id` as the current screenshot. */
|
|
150
150
|
screenshot(runId: string, id: string, fullPage: boolean, signal?: AbortSignal): Promise<BrowserStep<string>> {
|
|
151
151
|
return this.#perform(runId, signal, async (session, page) => {
|
|
152
152
|
const image = await page.screenshot({ fullPage, type: "png", timeout: this.#options.timeoutMs });
|
|
@@ -155,7 +155,7 @@ export class BrowserPages {
|
|
|
155
155
|
});
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
/**
|
|
158
|
+
/** The page state without waiting for running actions; `null` without an open page. */
|
|
159
159
|
state(runId: string): BrowserPageState | null {
|
|
160
160
|
const session = this.#sessions.get(runId);
|
|
161
161
|
return session && !session.closed && session.page ? this.#stateOf(session, session.page) : null;
|
|
@@ -171,7 +171,7 @@ export class BrowserPages {
|
|
|
171
171
|
await session.queue;
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
/**
|
|
174
|
+
/** Closes every browser; afterwards none starts anymore because nobody would close it. */
|
|
175
175
|
async shutdown(): Promise<void> {
|
|
176
176
|
this.#shutDown = true;
|
|
177
177
|
const results = await Promise.allSettled([...this.#sessions.keys()].map((runId) => this.close(runId)));
|
|
@@ -219,10 +219,10 @@ export class BrowserPages {
|
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
async #page(session: BrowserSession): Promise<Page> {
|
|
222
|
-
if (session.closed) throw new Error("
|
|
222
|
+
if (session.closed) throw new Error("The browser was closed.");
|
|
223
223
|
if (session.page) return session.page;
|
|
224
224
|
const browser = await session.browser;
|
|
225
|
-
if (session.closed) throw new Error("
|
|
225
|
+
if (session.closed) throw new Error("The browser was closed.");
|
|
226
226
|
const context = await browser.newContext({ viewport: session.viewport });
|
|
227
227
|
context.setDefaultTimeout(this.#options.timeoutMs);
|
|
228
228
|
context.setDefaultNavigationTimeout(this.#options.timeoutMs);
|
|
@@ -239,16 +239,16 @@ export class BrowserPages {
|
|
|
239
239
|
page.on("console", (message) => {
|
|
240
240
|
if (message.type() !== "error") return;
|
|
241
241
|
const source = message.text().startsWith("Failed to load resource") ? message.location().url : "";
|
|
242
|
-
if (source) addRequestError(source, `
|
|
243
|
-
else addError(`
|
|
242
|
+
if (source) addRequestError(source, `Console: ${message.text()} (${source})`);
|
|
243
|
+
else addError(`Console: ${message.text()}`);
|
|
244
244
|
});
|
|
245
245
|
page.on("pageerror", (error) => addError(`JavaScript: ${error.message}`));
|
|
246
|
-
page.on("requestfailed", (request) => addRequestError(request.url(), `
|
|
246
|
+
page.on("requestfailed", (request) => addRequestError(request.url(), `Network: ${request.method()} ${request.url()} ${request.failure()?.errorText}`));
|
|
247
247
|
page.on("response", (response) => { if (response.status() >= 400) addRequestError(response.url(), `HTTP ${response.status()}: ${response.url()}`); });
|
|
248
248
|
page.on("framenavigated", (frame) => { if (frame === page.mainFrame()) this.#resetEvidence(session); });
|
|
249
249
|
page.on("popup", (popup) => {
|
|
250
|
-
addError(`
|
|
251
|
-
void popup.close().catch((error) => addError(`
|
|
250
|
+
addError(`The application opened a new window: ${popup.url()}. Popups are not operated.`);
|
|
251
|
+
void popup.close().catch((error) => addError(`Closing window: ${errorText(error)}`));
|
|
252
252
|
});
|
|
253
253
|
session.page = page;
|
|
254
254
|
return page;
|
|
@@ -257,17 +257,17 @@ export class BrowserPages {
|
|
|
257
257
|
#perform<T>(runId: string, signal: AbortSignal | undefined, action: (session: BrowserSession, page: Page) => Promise<T>): Promise<BrowserStep<T>> {
|
|
258
258
|
if (this.#shutDown) return Promise.reject(endedError());
|
|
259
259
|
const session = this.#sessions.get(runId);
|
|
260
|
-
if (!session || session.closed) return Promise.reject(new Error("
|
|
260
|
+
if (!session || session.closed) return Promise.reject(new Error("No browser is open for this run. Call browser_open first."));
|
|
261
261
|
const pending = session.queue.then(async () => {
|
|
262
262
|
signal?.throwIfAborted();
|
|
263
|
-
const abort = () => { void this.close(runId).catch((error) => console.error("
|
|
263
|
+
const abort = () => { void this.close(runId).catch((error) => console.error("Browser stop failed:", errorText(error))); };
|
|
264
264
|
signal?.addEventListener("abort", abort, { once: true });
|
|
265
265
|
try {
|
|
266
266
|
const page = await this.#page(session);
|
|
267
267
|
signal?.throwIfAborted();
|
|
268
268
|
const result = await action(session, page);
|
|
269
269
|
signal?.throwIfAborted();
|
|
270
|
-
if (session.closed) throw new Error("
|
|
270
|
+
if (session.closed) throw new Error("The browser was closed.");
|
|
271
271
|
return { result, page: this.#stateOf(session, page) };
|
|
272
272
|
} finally {
|
|
273
273
|
signal?.removeEventListener("abort", abort);
|
|
@@ -7,26 +7,26 @@ import { BROWSER_EXECUTABLE_VARIABLE } from "./contract.js";
|
|
|
7
7
|
|
|
8
8
|
type Playwright = typeof import("playwright-core");
|
|
9
9
|
|
|
10
|
-
/** playwright-core
|
|
10
|
+
/** playwright-core lives in the node_modules of this machine's host and is loaded only on call, never with the contribution. */
|
|
11
11
|
export const hostPlaywright = async (machine: WorkspaceExecutorMachine, hostRoot: string | undefined): Promise<Playwright> => {
|
|
12
12
|
const loaded = await import(pathToFileURL(machine.hostPackageFile(hostRoot, "playwright-core")).href) as { default: Playwright };
|
|
13
13
|
return loaded.default;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
/**
|
|
16
|
+
/** This machine's Chrome: the one from its environment, otherwise the Chromium that provisioning fetches for playwright-core. */
|
|
17
17
|
export const browserExecutable = async (playwright: Playwright, environment: NodeJS.ProcessEnv = process.env): Promise<string> => {
|
|
18
18
|
const configured = environment[BROWSER_EXECUTABLE_VARIABLE];
|
|
19
19
|
const candidate = configured ? configured : playwright.chromium.executablePath();
|
|
20
20
|
if (await access(candidate, constants.X_OK).then(() => true, () => false)) return candidate;
|
|
21
21
|
throw new Error((configured
|
|
22
|
-
? `${BROWSER_EXECUTABLE_VARIABLE}
|
|
23
|
-
: `
|
|
24
|
-
+ "
|
|
25
|
-
+ `${BROWSER_EXECUTABLE_VARIABLE}
|
|
26
|
-
+ "
|
|
22
|
+
? `${BROWSER_EXECUTABLE_VARIABLE} names ${configured}; there is no executable browser there on this machine. `
|
|
23
|
+
: `There is no executable browser on this machine: ${BROWSER_EXECUTABLE_VARIABLE} is not set and Chromium is missing at ${candidate}. `)
|
|
24
|
+
+ "A workspace fetches Chromium with pnpm provision --workspace, a server with pnpm provision <profile>; "
|
|
25
|
+
+ `${BROWSER_EXECUTABLE_VARIABLE} names an existing Chrome, on a server in the profile section ragents.browser, `
|
|
26
|
+
+ "on a workspace in its environment.");
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
/**
|
|
29
|
+
/** Starts Chrome headless with this machine's environment and the run's marker so the process view can attribute it. */
|
|
30
30
|
export const launchChromium = async (machine: WorkspaceExecutorMachine, hostRoot: string | undefined, runId: string, timeoutMs: number): Promise<Browser> => {
|
|
31
31
|
const playwright = await hostPlaywright(machine, hostRoot);
|
|
32
32
|
return playwright.chromium.launch({
|
|
@@ -18,30 +18,30 @@ const install = (log: (line: string) => void): Promise<void> => new Promise((res
|
|
|
18
18
|
const child = spawn(process.execPath, [playwrightCli(), "install", ...(process.platform === "linux" ? ["--with-deps"] : []), "chromium"], { stdio: ["ignore", "pipe", "pipe"] });
|
|
19
19
|
for (const stream of [child.stdout, child.stderr]) stream.on("data", (chunk: Buffer) => log(chunk.toString().trimEnd()));
|
|
20
20
|
child.once("error", reject);
|
|
21
|
-
child.once("exit", (code) => code === 0 ? resolve() : reject(new Error(`playwright-core install chromium
|
|
21
|
+
child.once("exit", (code) => code === 0 ? resolve() : reject(new Error(`playwright-core install chromium exited with code ${code}`)));
|
|
22
22
|
});
|
|
23
23
|
|
|
24
|
-
// Playwright
|
|
24
|
+
// Playwright manages its browser cache itself; the plugin's tool folder stays empty.
|
|
25
25
|
export const createBrowserProvision = (): PluginProvision => ({
|
|
26
26
|
check: async () => {
|
|
27
27
|
const configured = process.env[BROWSER_EXECUTABLE_VARIABLE];
|
|
28
28
|
if (configured) {
|
|
29
29
|
return await executable(configured)
|
|
30
30
|
? provisionReady
|
|
31
|
-
: provisionGap("browser", `${BROWSER_EXECUTABLE_VARIABLE}
|
|
31
|
+
: provisionGap("browser", `${BROWSER_EXECUTABLE_VARIABLE} names ${configured}; there is no executable browser there`, false);
|
|
32
32
|
}
|
|
33
33
|
const bundled = chromium.executablePath();
|
|
34
34
|
return await executable(bundled)
|
|
35
35
|
? provisionReady
|
|
36
|
-
: provisionGap("chromium", `Chromium
|
|
37
|
-
+ "
|
|
38
|
-
+ "
|
|
36
|
+
: provisionGap("chromium", `Chromium is missing at ${bundled}; either set ${BROWSER_EXECUTABLE_VARIABLE} to an existing Chrome `
|
|
37
|
+
+ "(on a server in the profile section ragents.browser, on a workspace in its environment) or let "
|
|
38
|
+
+ "provisioning download the browser", true);
|
|
39
39
|
},
|
|
40
40
|
apply: async (_target, log) => {
|
|
41
41
|
const state = await createBrowserProvision().check("");
|
|
42
42
|
if (state.kind === "ready") return;
|
|
43
43
|
if (!state.installable) throw new Error(state.instruction);
|
|
44
|
-
log("Chromium
|
|
44
|
+
log("Downloading Chromium for playwright-core");
|
|
45
45
|
await install(log);
|
|
46
46
|
},
|
|
47
47
|
});
|