@schlenkr/ragents 0.1.10 → 0.1.12
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/README.md +1 -1
- package/apps/server/package.json +1 -1
- package/apps/server/src/access-projection.ts +6 -6
- 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 +38 -38
- 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 +27 -27
- package/apps/server/src/profile/compose.ts +12 -7
- package/apps/server/src/profile/plugin-discovery.ts +14 -14
- 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 +62 -57
- 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-CpPi6QLr.js} +1 -1
- package/apps/web/dist/assets/main-DJmCHGzM.js +11 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-q-mf1kLN.js +608 -0
- package/apps/web/dist/assets/runPanel-nk_aMxSn.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 +91 -91
- 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/QuasselHost.tsx +1 -1
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +8 -4
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- package/bundles/ragents.todo/server/index.js +5 -8
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- package/bundles/ragents.workspace/server/index.js +83 -83
- 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 +3725 -552
- 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-storage.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 +44 -44
- package/packages/workspace-executor/src/errors.ts +1 -1
- package/packages/workspace-executor/src/executor.ts +16 -16
- package/packages/workspace-executor/src/files.ts +31 -31
- package/packages/workspace-executor/src/index.ts +1 -1
- 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 +36 -36
- 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 +3 -3
- 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 +3 -3
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -5
- 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/contract.ts +0 -3
- 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 +63 -63
- 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 +50 -50
- 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 +31 -31
- 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 +49 -49
- 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
package/apps/server/src/main.ts
CHANGED
|
@@ -4,12 +4,12 @@ import { configuredAnonymousUser, configuredUsers, loadConfigFile, missingEnviro
|
|
|
4
4
|
const startupFailure = (error: unknown): never => {
|
|
5
5
|
const message = error instanceof Error ? error.message : String(error);
|
|
6
6
|
if (error instanceof Error && error.constructor !== Error && missingEnvironmentOf(error) === undefined) console.error(error.stack ?? message);
|
|
7
|
-
console.error(`\nRAgents
|
|
7
|
+
console.error(`\nRAgents does not start: ${message}`);
|
|
8
8
|
reportMissingEnvironment(error, (line) => console.error(line));
|
|
9
9
|
process.exit(1);
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
/**
|
|
12
|
+
/** Start modes: --stdio (JSON-RPC over stdin and stdout, no HTTP without --port), --port 0 (private port announced on stdout), --port N. */
|
|
13
13
|
const parseArguments = (argv: readonly string[]): { stdio: boolean; port: number | undefined } => {
|
|
14
14
|
let stdio = false;
|
|
15
15
|
let port: number | undefined;
|
|
@@ -18,12 +18,12 @@ const parseArguments = (argv: readonly string[]): { stdio: boolean; port: number
|
|
|
18
18
|
if (argument === "--stdio") { stdio = true; continue; }
|
|
19
19
|
if (argument === "--port") {
|
|
20
20
|
const value = Number(argv[index + 1]);
|
|
21
|
-
if (!Number.isInteger(value) || value < 0 || value > 65535) throw new Error(`--port
|
|
21
|
+
if (!Number.isInteger(value) || value < 0 || value > 65535) throw new Error(`--port needs an integer from 0 to 65535, not ${argv[index + 1]}`);
|
|
22
22
|
port = value;
|
|
23
23
|
index += 1;
|
|
24
24
|
continue;
|
|
25
25
|
}
|
|
26
|
-
throw new Error(`
|
|
26
|
+
throw new Error(`Unknown argument: ${argument} (allowed: --stdio, --port <n>)`);
|
|
27
27
|
}
|
|
28
28
|
return { stdio, port };
|
|
29
29
|
};
|
|
@@ -31,8 +31,8 @@ const parseArguments = (argv: readonly string[]): { stdio: boolean; port: number
|
|
|
31
31
|
try {
|
|
32
32
|
if (!process.env.PRODUCT_PROFILE) {
|
|
33
33
|
throw new Error(
|
|
34
|
-
"PRODUCT_PROFILE
|
|
35
|
-
+ "
|
|
34
|
+
"PRODUCT_PROFILE is not set. scripts/start.sh <profile> sets the profile; "
|
|
35
|
+
+ "for pnpm start, run export PRODUCT_PROFILE=<profile> first.",
|
|
36
36
|
);
|
|
37
37
|
}
|
|
38
38
|
const arguments_ = parseArguments(process.argv.slice(2));
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** A configuration names env("NAME") for an environment variable the process does not have; plus what it is needed for. */
|
|
2
2
|
export interface MissingEnvironment {
|
|
3
3
|
readonly variable: string;
|
|
4
4
|
readonly section: string;
|
|
5
5
|
readonly key: string;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
/**
|
|
8
|
+
/** The same error as before, except that it carries the name instead of hiding it in the sentence. */
|
|
9
9
|
export class MissingEnvironmentError extends Error {
|
|
10
10
|
constructor(readonly missing: MissingEnvironment, message: string) {
|
|
11
11
|
super(message);
|
|
@@ -23,14 +23,14 @@ const asMissingEnvironment = (value: unknown): MissingEnvironment | undefined =>
|
|
|
23
23
|
return { variable: missing.variable, section: missing.section, key: missing.key };
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
-
/**
|
|
26
|
+
/** The finding on an error; its content is checked, not its class, because it also comes from another module. */
|
|
27
27
|
export const missingEnvironmentOf = (error: unknown): MissingEnvironment | undefined =>
|
|
28
28
|
asMissingEnvironment((error as { missing?: unknown } | null | undefined)?.missing);
|
|
29
29
|
|
|
30
|
-
/**
|
|
30
|
+
/** The line with which a child process passes the finding on to whoever started it; its text stays alongside. */
|
|
31
31
|
export const missingEnvironmentNotice = (missing: MissingEnvironment): string => NOTICE + JSON.stringify(missing);
|
|
32
32
|
|
|
33
|
-
/**
|
|
33
|
+
/** The finding from an output line; anything else is none. */
|
|
34
34
|
export const parseMissingEnvironmentNotice = (line: string): MissingEnvironment | undefined => {
|
|
35
35
|
if (!line.startsWith(NOTICE)) return undefined;
|
|
36
36
|
try {
|
|
@@ -40,7 +40,7 @@ export const parseMissingEnvironmentNotice = (line: string): MissingEnvironment
|
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
-
/**
|
|
43
|
+
/** What a process additionally prints when it fails because of a missing environment variable. */
|
|
44
44
|
export const reportMissingEnvironment = (error: unknown, write: (line: string) => void): void => {
|
|
45
45
|
const missing = missingEnvironmentOf(error);
|
|
46
46
|
if (missing) write(missingEnvironmentNotice(missing));
|
|
@@ -3,12 +3,12 @@ const CHECK_INTERVAL_MS = 5_000;
|
|
|
3
3
|
export interface ParentWatch {
|
|
4
4
|
readonly parentPid: string | undefined;
|
|
5
5
|
readonly onGone: (pid: number) => void;
|
|
6
|
-
/**
|
|
6
|
+
/** Tests only: the liveness check and the watcher's interval. */
|
|
7
7
|
readonly alive?: (pid: number) => boolean;
|
|
8
8
|
readonly intervalMs?: number;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
/**
|
|
11
|
+
/** Is the process still alive? ESRCH means gone, EPERM means alive under another owner. */
|
|
12
12
|
export const processAlive = (pid: number): boolean => {
|
|
13
13
|
try {
|
|
14
14
|
process.kill(pid, 0);
|
|
@@ -18,12 +18,12 @@ export const processAlive = (pid: number): boolean => {
|
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
/**
|
|
21
|
+
/** Ends the host as soon as the process from RAGENTS_PARENT_PID disappears; without the variable there is no watcher. */
|
|
22
22
|
export const watchParentProcess = (watch: ParentWatch): (() => void) | undefined => {
|
|
23
23
|
const given = watch.parentPid;
|
|
24
24
|
if (given === undefined) return undefined;
|
|
25
25
|
if (!/^\d+$/.test(given) || !Number.isSafeInteger(Number(given)) || Number(given) <= 0) {
|
|
26
|
-
throw new Error(`RAGENTS_PARENT_PID
|
|
26
|
+
throw new Error(`RAGENTS_PARENT_PID names the caller's process id; ${JSON.stringify(given)} is not a positive integer.`);
|
|
27
27
|
}
|
|
28
28
|
const pid = Number(given);
|
|
29
29
|
const alive = watch.alive ?? processAlive;
|
|
@@ -12,8 +12,8 @@ import { checkedHostApiRecord, hostRoot, type HostApiRecord } from "../host-vers
|
|
|
12
12
|
import {
|
|
13
13
|
BUNDLE_FORMAT,
|
|
14
14
|
BUNDLE_MANIFEST_FILE,
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
bundleRevision,
|
|
16
|
+
sourceRevisionOf,
|
|
17
17
|
type BundleManifest,
|
|
18
18
|
type HostNames,
|
|
19
19
|
} from "../profile/bundle-manifest.js";
|
|
@@ -86,8 +86,8 @@ const hostModuleShim = (specifier: string, names: readonly string[]): string =>
|
|
|
86
86
|
const HOST_READ_SOURCE = [
|
|
87
87
|
`export const read = (specifier, name) => {`,
|
|
88
88
|
` const module = globalThis[${JSON.stringify(HOST_MODULES_GLOBAL)}]?.[specifier];`,
|
|
89
|
-
` if (module === undefined) throw new Error(\`
|
|
90
|
-
` if (!(name in module)) throw new Error(\`
|
|
89
|
+
` if (module === undefined) throw new Error(\`The host does not provide \${specifier}\`);`,
|
|
90
|
+
` if (!(name in module)) throw new Error(\`The host does not provide \${name} from \${specifier}; the bundle was built against a newer host\`);`,
|
|
91
91
|
` return module[name];`,
|
|
92
92
|
`};`,
|
|
93
93
|
].join("\n");
|
|
@@ -119,15 +119,15 @@ export const pluginCodeProblems = (file: string, text: string, id: string, asset
|
|
|
119
119
|
};
|
|
120
120
|
const visit = (node: ts.Node): void => {
|
|
121
121
|
if (ts.isMetaProperty(node) && node.keywordToken === ts.SyntaxKind.ImportKeyword) {
|
|
122
|
-
report(node, "import.meta
|
|
122
|
+
report(node, "import.meta is not allowed in a bundle; the plugin's files go through pluginAsset(id, name) or pluginFolder(id)");
|
|
123
123
|
} else if (ts.isIdentifier(node) && ["__dirname", "__filename", "createRequire"].includes(node.text)) {
|
|
124
|
-
report(node, `${node.text}
|
|
124
|
+
report(node, `${node.text} is not allowed in a bundle; the plugin's files go through pluginAsset(id, name) or pluginFolder(id)`);
|
|
125
125
|
} else if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "require" && node.name.text === "resolve") {
|
|
126
|
-
report(node, "require.resolve
|
|
126
|
+
report(node, "require.resolve is not allowed in a bundle; the plugin's files go through pluginAsset(id, name) or pluginFolder(id)");
|
|
127
127
|
} else if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "pluginAsset") {
|
|
128
128
|
const [owner, name] = node.arguments;
|
|
129
129
|
if (owner && name && ts.isStringLiteralLike(owner) && ts.isStringLiteralLike(name) && owner.text === id && !coveredByAssets(assets, name.text)) {
|
|
130
|
-
report(name, `pluginAsset
|
|
130
|
+
report(name, `pluginAsset names ${name.text}, which does not go into the bundle; name it under assets in ragents-plugin.json`);
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
ts.forEachChild(node, visit);
|
|
@@ -153,10 +153,10 @@ const platformProblem = (packageRoot: string): string | undefined => {
|
|
|
153
153
|
name?: string; os?: unknown; cpu?: unknown; optionalDependencies?: Record<string, string>;
|
|
154
154
|
};
|
|
155
155
|
const name = manifest.name ?? path.basename(packageRoot);
|
|
156
|
-
if (manifest.os !== undefined || manifest.cpu !== undefined) return `
|
|
156
|
+
if (manifest.os !== undefined || manifest.cpu !== undefined) return `The package ${name} is bound to an operating system or processor (os/cpu in package.json)`;
|
|
157
157
|
const platformDependencies = Object.keys(manifest.optionalDependencies ?? {}).filter((dependency) => PLATFORM_PACKAGE.test(dependency));
|
|
158
158
|
if (platformDependencies.length > 0) {
|
|
159
|
-
return `
|
|
159
|
+
return `The package ${name} has platform-dependent optional dependencies (${platformDependencies.join(", ")}); native code is provided by the host or fetched by the provisioning`;
|
|
160
160
|
}
|
|
161
161
|
return undefined;
|
|
162
162
|
};
|
|
@@ -188,8 +188,8 @@ const boundaryPlugin = (
|
|
|
188
188
|
|
|
189
189
|
/** The executor contribution loads in every process without the host's loader, the VS Code extension included. */
|
|
190
190
|
const outsideContribution = (specifier: string) => ({ errors: [{
|
|
191
|
-
text: `${specifier}:
|
|
192
|
-
+ "
|
|
191
|
+
text: `${specifier}: the executor contribution loads in every Node process without the host's resolution; it imports only node:*, its own files, `
|
|
192
|
+
+ "bundled libraries and types from the host (import type), everything else it gets through the machine",
|
|
193
193
|
}] });
|
|
194
194
|
|
|
195
195
|
const crossImport = (owner: string, name: string) => {
|
|
@@ -211,7 +211,7 @@ const boundaryPlugin = (
|
|
|
211
211
|
}));
|
|
212
212
|
|
|
213
213
|
build.onResolve({ filter: /\.node$/ }, (args) => ({
|
|
214
|
-
errors: [{ text: `${args.path}
|
|
214
|
+
errors: [{ text: `${args.path} is a platform-dependent binary; native code is provided by the host or fetched by the provisioning into <data-folder>/tools/${id}/` }],
|
|
215
215
|
}));
|
|
216
216
|
|
|
217
217
|
build.onResolve({ filter: /.*/ }, async (args) => {
|
|
@@ -221,35 +221,35 @@ const boundaryPlugin = (
|
|
|
221
221
|
if (specifier.startsWith("node:") || isBuiltin(specifier)) {
|
|
222
222
|
return half === "server"
|
|
223
223
|
? { path: specifier, external: true }
|
|
224
|
-
: { errors: [{ text: `${specifier}
|
|
224
|
+
: { errors: [{ text: `${specifier} is a Node module and does not exist in the browser` }] };
|
|
225
225
|
}
|
|
226
226
|
if (isBare(specifier)) {
|
|
227
227
|
const cross = /^@ragents\/plugins\/([^/]+)\/(.+)$/.exec(specifier);
|
|
228
228
|
if (cross) {
|
|
229
229
|
const [, owner, rawName] = cross as unknown as [string, string, string];
|
|
230
230
|
const name = normalizedSpecifier(rawName);
|
|
231
|
-
if (owner === id) return { errors: [{ text: `${specifier}
|
|
231
|
+
if (owner === id) return { errors: [{ text: `${specifier} imports the plugin itself through the package name; import own files relatively` }] };
|
|
232
232
|
const other = environment.catalog(owner);
|
|
233
|
-
if (!other) return { errors: [{ text: `
|
|
233
|
+
if (!other) return { errors: [{ text: `The plugin ${owner} from ${specifier} is neither next to ${id} nor in the host` }] };
|
|
234
234
|
if (!other.description.exports[half].includes(name)) {
|
|
235
|
-
return { errors: [{ text: `${owner}
|
|
235
|
+
return { errors: [{ text: `${owner} does not export ${name} for the ${half} half; the export belongs in its ragents-plugin.json under exports.${half}` }] };
|
|
236
236
|
}
|
|
237
237
|
return crossImport(owner, name);
|
|
238
238
|
}
|
|
239
239
|
if (selfContained && (providedByHost(half, specifier) || hostOnly(specifier))) return outsideContribution(specifier);
|
|
240
240
|
if (providedByHost(half, specifier)) {
|
|
241
241
|
if (args.kind === "dynamic-import" && (half === "web" || !isLibrary(half, specifier))) {
|
|
242
|
-
return { errors: [{ text: `import()
|
|
242
|
+
return { errors: [{ text: `import() of ${specifier}: a host module is imported statically so that the build checks every name against the host API` }] };
|
|
243
243
|
}
|
|
244
244
|
if (args.kind === "require-call" && half === "server") {
|
|
245
|
-
return { errors: [{ text: `require(${JSON.stringify(specifier)}):
|
|
245
|
+
return { errors: [{ text: `require(${JSON.stringify(specifier)}): the host provides ${specifier} only through import; otherwise the bundle would get a second copy or none` }] };
|
|
246
246
|
}
|
|
247
247
|
return half === "server"
|
|
248
248
|
? { path: specifier, external: true }
|
|
249
249
|
: { path: normalizedSpecifier(specifier), namespace: HOST_NAMESPACE, sideEffects: false };
|
|
250
250
|
}
|
|
251
251
|
if (hostOnly(specifier)) {
|
|
252
|
-
return { errors: [{ text: `${specifier}
|
|
252
|
+
return { errors: [{ text: `${specifier} is not in the ${half} list of the host API (apps/server/src/host-api.ts); a plugin gets from the host only what is listed there` }] };
|
|
253
253
|
}
|
|
254
254
|
return undefined;
|
|
255
255
|
}
|
|
@@ -258,19 +258,19 @@ const boundaryPlugin = (
|
|
|
258
258
|
if (resolved.errors.length > 0) return { errors: resolved.errors };
|
|
259
259
|
const owner = owningPluginFolder(resolved.path);
|
|
260
260
|
if (owner === source.folder) return { path: resolved.path, sideEffects: resolved.sideEffects };
|
|
261
|
-
if (!owner) return { errors: [{ text: `${specifier}
|
|
261
|
+
if (!owner) return { errors: [{ text: `${specifier} is outside the plugin folder (${resolved.path}); a plugin imports only its own files relatively` }] };
|
|
262
262
|
const other = readPluginSource(owner);
|
|
263
263
|
const name = exportOfFile(other, half, resolved.path);
|
|
264
264
|
if (!name) {
|
|
265
265
|
const relative = path.relative(owner, resolved.path).split(path.sep).join("/").replace(/\.(ts|tsx)$/, "");
|
|
266
|
-
return { errors: [{ text: `${other.description.id}
|
|
266
|
+
return { errors: [{ text: `${other.description.id} does not export ${relative} for the ${half} half; the export belongs in its ragents-plugin.json under exports.${half}` }] };
|
|
267
267
|
}
|
|
268
268
|
return crossImport(other.description.id, name);
|
|
269
269
|
});
|
|
270
270
|
|
|
271
271
|
build.onLoad({ filter: /.*/, namespace: HOST_NAMESPACE }, (args) => {
|
|
272
272
|
const names = environment.record.web[args.path];
|
|
273
|
-
if (!names) return { errors: [{ text: `host-api.json
|
|
273
|
+
if (!names) return { errors: [{ text: `host-api.json does not know ${args.path}; pnpm update:host-api` }] };
|
|
274
274
|
return { contents: hostModuleShim(args.path, names), loader: "js" };
|
|
275
275
|
});
|
|
276
276
|
build.onLoad({ filter: /.*/, namespace: HOST_VALUE_NAMESPACE }, (args) => {
|
|
@@ -293,7 +293,7 @@ const boundaryPlugin = (
|
|
|
293
293
|
const located = LIBRARY_LOCATIONS.filter(([pattern]) => pattern.test(text)).map(([, name]) => name);
|
|
294
294
|
const errors = [
|
|
295
295
|
...(platform ? [{ text: platform }] : []),
|
|
296
|
-
...(located.length > 0 ? [{ text: `${path.relative(packageRoot, args.path)} in ${path.basename(packageRoot)}
|
|
296
|
+
...(located.length > 0 ? [{ text: `${path.relative(packageRoot, args.path)} in ${path.basename(packageRoot)} locates files through its own location (${located.join(", ")}); in the bundle this location does not exist` }] : []),
|
|
297
297
|
];
|
|
298
298
|
return errors.length > 0 ? { errors } : { contents: text, loader };
|
|
299
299
|
});
|
|
@@ -329,7 +329,7 @@ const serverHostImports = (file: string, text: string, record: HostApiRecord): S
|
|
|
329
329
|
const problems: string[] = [];
|
|
330
330
|
const take = (specifier: string, name: string, offered: readonly string[]): void => {
|
|
331
331
|
if (offered.includes(name)) names.push([normalizedSpecifier(specifier), name]);
|
|
332
|
-
else problems.push(`${file}
|
|
332
|
+
else problems.push(`${file} imports ${name} from ${specifier}, which the host API does not offer (host-api.json)`);
|
|
333
333
|
};
|
|
334
334
|
for (const statement of source.statements) {
|
|
335
335
|
if (ts.isExportDeclaration(statement) && statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier)) {
|
|
@@ -338,7 +338,7 @@ const serverHostImports = (file: string, text: string, record: HostApiRecord): S
|
|
|
338
338
|
if (!offered) continue;
|
|
339
339
|
const clause = statement.exportClause;
|
|
340
340
|
if (clause && ts.isNamedExports(clause)) for (const element of clause.elements) take(specifier, (element.propertyName ?? element.name).text, offered);
|
|
341
|
-
else if (!isLibrary("server", specifier)) problems.push(`${file}
|
|
341
|
+
else if (!isLibrary("server", specifier)) problems.push(`${file} re-exports ${specifier} as a whole; import only individual names from a host module`);
|
|
342
342
|
continue;
|
|
343
343
|
}
|
|
344
344
|
if (!ts.isImportDeclaration(statement)) continue;
|
|
@@ -352,7 +352,7 @@ const serverHostImports = (file: string, text: string, record: HostApiRecord): S
|
|
|
352
352
|
for (const element of bindings.elements) take(specifier, (element.propertyName ?? element.name).text, offered);
|
|
353
353
|
} else if (bindings && ts.isNamespaceImport(bindings) && !isLibrary("server", specifier)) {
|
|
354
354
|
const reads = namespaceReads(source, bindings.name);
|
|
355
|
-
if (reads.escapes) problems.push(`${file}
|
|
355
|
+
if (reads.escapes) problems.push(`${file} uses the namespace ${bindings.name.text} from ${specifier} as a whole; read only individual names from a host module so that the build checks them`);
|
|
356
356
|
for (const name of new Set(reads.names)) take(specifier, name, offered);
|
|
357
357
|
}
|
|
358
358
|
}
|
|
@@ -461,9 +461,9 @@ const tailwindCandidates = (source: PluginSource, metafile: Metafile): readonly
|
|
|
461
461
|
|
|
462
462
|
const copyAsset = async (from: string, to: string, name: string): Promise<void> => {
|
|
463
463
|
const stats = lstatSync(from);
|
|
464
|
-
if (stats.isSymbolicLink()) throw new Error(`
|
|
464
|
+
if (stats.isSymbolicLink()) throw new Error(`The asset ${name} contains a link (${from}); a bundle contains only files`);
|
|
465
465
|
if (stats.isDirectory()) {
|
|
466
|
-
if (path.basename(from) === "node_modules") throw new Error(`
|
|
466
|
+
if (path.basename(from) === "node_modules") throw new Error(`The asset ${name} contains node_modules; a bundle brings no dependencies`);
|
|
467
467
|
await mkdir(to, { recursive: true });
|
|
468
468
|
for (const entry of readdirSync(from).sort()) {
|
|
469
469
|
if (!SKIPPED_ASSET_FILES.has(entry)) await copyAsset(path.join(from, entry), path.join(to, entry), name);
|
|
@@ -497,7 +497,7 @@ const buildPlugin = async (folder: string, environment: BuildEnvironment, typeEr
|
|
|
497
497
|
in: sourceFileOf(path.join(source.folder, name))!,
|
|
498
498
|
out: `exports/${name}`,
|
|
499
499
|
}));
|
|
500
|
-
if (!serverEntry) return failed(["server/index.ts
|
|
500
|
+
if (!serverEntry) return failed(["server/index.ts is missing; every plugin has a server half with the module contract"]);
|
|
501
501
|
const hasWeb = webEntry !== undefined || source.description.exports.web.length > 0;
|
|
502
502
|
const results = await Promise.all([
|
|
503
503
|
buildHalf(source, "server", [{ in: provision ? "ragents-entry:server" : serverEntry, out: "index" }, ...exportEntries("server")], environment, assets),
|
|
@@ -511,7 +511,7 @@ const buildPlugin = async (folder: string, environment: BuildEnvironment, typeEr
|
|
|
511
511
|
const target = path.join(environment.out, id);
|
|
512
512
|
const relativeOf = (file: OutputFile): string => path.relative(target, file.path).split(path.sep).join("/");
|
|
513
513
|
const strayCss = files.map(relativeOf).filter((name) => name.endsWith(".css") && name !== "web/index.css");
|
|
514
|
-
if (strayCss.length > 0) return failed(strayCss.map((name) => `${name}: CSS
|
|
514
|
+
if (strayCss.length > 0) return failed(strayCss.map((name) => `${name}: CSS exists only through the web entry (web/index.css)`));
|
|
515
515
|
const serverImports = files.filter((file) => relativeOf(file).startsWith("server/") && file.path.endsWith(".js"))
|
|
516
516
|
.map((file) => serverHostImports(relativeOf(file), file.text, environment.record));
|
|
517
517
|
const importProblems = serverImports.flatMap((imports) => imports.problems);
|
|
@@ -537,8 +537,8 @@ const buildPlugin = async (folder: string, environment: BuildEnvironment, typeEr
|
|
|
537
537
|
server: hostNamesOf(serverImports.flatMap((imports) => imports.names)),
|
|
538
538
|
web: hostNamesOf(web ? webHostNames(web.metafile) : []),
|
|
539
539
|
},
|
|
540
|
-
|
|
541
|
-
|
|
540
|
+
revision: bundleRevision(staging),
|
|
541
|
+
sourceRevision: sourceRevisionOf(source.folder, [realpathSync.native(environment.out)], environment.root),
|
|
542
542
|
server: "server/index.js",
|
|
543
543
|
...(webEntry ? {
|
|
544
544
|
web: {
|
|
@@ -573,7 +573,7 @@ interface HostBuildContext {
|
|
|
573
573
|
const hostContextFor = (folders: readonly string[], options: Pick<PluginBuildOptions, "out" | "root">): HostBuildContext => {
|
|
574
574
|
const ids = folders.map((folder) => path.basename(path.resolve(folder)));
|
|
575
575
|
const duplicate = ids.find((id, index) => ids.indexOf(id) !== index);
|
|
576
|
-
if (duplicate) throw new Error(`
|
|
576
|
+
if (duplicate) throw new Error(`The plugin ${duplicate} is named more than once`);
|
|
577
577
|
const root = options.root ?? hostRoot();
|
|
578
578
|
return { root, record: checkedHostApiRecord(root), out: path.resolve(options.out) };
|
|
579
579
|
};
|
|
@@ -589,8 +589,8 @@ const bundleIsCurrent = (folder: string, out: string, root = hostRoot()): boolea
|
|
|
589
589
|
if (!existsSync(file)) return false;
|
|
590
590
|
const manifest = JSON.parse(readFileSync(file, "utf8")) as Partial<BundleManifest>;
|
|
591
591
|
return manifest.format === BUNDLE_FORMAT && manifest.api === HOST_API_VERSION
|
|
592
|
-
&& manifest.
|
|
593
|
-
&& manifest.
|
|
592
|
+
&& manifest.sourceRevision === sourceRevisionOf(folder, [realpathSync.native(out)], root)
|
|
593
|
+
&& manifest.revision === bundleRevision(bundle);
|
|
594
594
|
};
|
|
595
595
|
|
|
596
596
|
/** Builds each plugin folder into <out>/<id>; a failing plugin does not stop the others, and parallel builds into the same folder wait for each other. */
|
|
@@ -603,7 +603,7 @@ export const buildPlugins = async (folders: readonly string[], options: PluginBu
|
|
|
603
603
|
const typeProblems = options.typecheck ? typecheckPlugins(chosen, context.root) : new Map<string, readonly string[]>();
|
|
604
604
|
const outcomes: PluginBuildOutcome[] = [];
|
|
605
605
|
for (const source of chosen) {
|
|
606
|
-
const typeErrors = (typeProblems.get(source.description.id) ?? []).map((problem) => `
|
|
606
|
+
const typeErrors = (typeProblems.get(source.description.id) ?? []).map((problem) => `Types: ${problem}`);
|
|
607
607
|
outcomes.push(await buildPlugin(source.folder, environmentOf(context, folders), typeErrors));
|
|
608
608
|
}
|
|
609
609
|
return outcomes;
|
|
@@ -654,7 +654,7 @@ export const watchPlugins = async (
|
|
|
654
654
|
running = current;
|
|
655
655
|
pending.add(current);
|
|
656
656
|
};
|
|
657
|
-
//
|
|
657
|
+
// At startup only outdated ones, so that a server that is just starting with these bundles sees no swapped files.
|
|
658
658
|
run(true);
|
|
659
659
|
watchers.push(watch(folder, { recursive: true }, (_event, name) => {
|
|
660
660
|
const changed = name ? path.join(folder, name.toString()) : folder;
|
|
@@ -23,7 +23,7 @@ const parsedConfig = (file: string): ts.ParsedCommandLine => {
|
|
|
23
23
|
throw new Error(ts.flattenDiagnosticMessageText(diagnostic.messageText, " "));
|
|
24
24
|
},
|
|
25
25
|
});
|
|
26
|
-
if (!parsed) throw new Error(`${file}
|
|
26
|
+
if (!parsed) throw new Error(`${file} is not a valid tsconfig`);
|
|
27
27
|
return parsed;
|
|
28
28
|
};
|
|
29
29
|
|
|
@@ -40,7 +40,7 @@ export const typeViews = (half: HostApiHalf, root = hostRoot()): ReadonlyMap<str
|
|
|
40
40
|
const importer = path.join(root, place.importer);
|
|
41
41
|
const resolved = hostApiModules(half).map((specifier) => {
|
|
42
42
|
const module = ts.resolveModuleName(specifier, importer, options, ts.sys).resolvedModule;
|
|
43
|
-
if (!module) throw new Error(`${specifier}
|
|
43
|
+
if (!module) throw new Error(`${specifier} cannot be resolved for the ${half} half`);
|
|
44
44
|
return { specifier, module };
|
|
45
45
|
});
|
|
46
46
|
const probe = path.join(path.dirname(importer), "__host-api-probe__.ts");
|
|
@@ -55,7 +55,7 @@ export const typeViews = (half: HostApiHalf, root = hostRoot()): ReadonlyMap<str
|
|
|
55
55
|
const imports = program.getSourceFile(probe)!.statements.filter(ts.isImportDeclaration);
|
|
56
56
|
return new Map(resolved.map(({ specifier, module }, index) => {
|
|
57
57
|
const symbol = checker.getSymbolAtLocation(imports[index]!.moduleSpecifier);
|
|
58
|
-
if (!symbol) throw new Error(`${specifier}: ${module.resolvedFileName}
|
|
58
|
+
if (!symbol) throw new Error(`${specifier}: ${module.resolvedFileName} has no module symbol`);
|
|
59
59
|
const values = checker.getExportsOfModule(symbol).filter((exported) => {
|
|
60
60
|
const target = exported.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(exported) : exported;
|
|
61
61
|
return (target.flags & ts.SymbolFlags.Value) !== 0;
|
|
@@ -120,7 +120,7 @@ const webRuntimeNames = async (specifiers: readonly string[], root: string): Pro
|
|
|
120
120
|
const document = { createElement: () => ({}) };
|
|
121
121
|
vm.runInNewContext(code, { module, exports: module.exports, console, setTimeout, clearTimeout, queueMicrotask, TextEncoder, TextDecoder, URL, document });
|
|
122
122
|
const modules = module.exports.hostModules;
|
|
123
|
-
if (!modules) throw new Error("
|
|
123
|
+
if (!modules) throw new Error("The web half's register yields no modules");
|
|
124
124
|
return Object.fromEntries(Object.entries(modules).map(([specifier, namespace]) => [specifier, Object.keys(namespace)]));
|
|
125
125
|
};
|
|
126
126
|
|
|
@@ -129,12 +129,12 @@ const listedNames = (half: HostApiHalf, specifier: string, view: TypeView): read
|
|
|
129
129
|
const listed = hostApi[half][specifier]!;
|
|
130
130
|
const hostCode = specifier.startsWith("@ragents/");
|
|
131
131
|
if (listed === LIBRARY) {
|
|
132
|
-
if (hostCode) throw new Error(`${specifier}
|
|
132
|
+
if (hostCode) throw new Error(`${specifier} is host code, not a library; host-api.ts names its names individually`);
|
|
133
133
|
return LIBRARY;
|
|
134
134
|
}
|
|
135
|
-
if (!hostCode) throw new Error(`${specifier}
|
|
135
|
+
if (!hostCode) throw new Error(`${specifier} is a library; host-api.ts releases it as a whole`);
|
|
136
136
|
const missing = listed.filter((name) => !view.names.includes(name));
|
|
137
|
-
if (missing.length > 0) throw new Error(`host-api.ts
|
|
137
|
+
if (missing.length > 0) throw new Error(`host-api.ts names ${missing.join(", ")} for ${specifier}, but the module does not export it as a value`);
|
|
138
138
|
return [...listed].sort();
|
|
139
139
|
};
|
|
140
140
|
|
|
@@ -25,7 +25,7 @@ const HALVES = new Set(["server", "web"]);
|
|
|
25
25
|
|
|
26
26
|
const stringList = (value: unknown, where: string): readonly string[] => {
|
|
27
27
|
if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string" || entry.length === 0)) {
|
|
28
|
-
throw new Error(`${where}
|
|
28
|
+
throw new Error(`${where} must be a list of paths`);
|
|
29
29
|
}
|
|
30
30
|
return value as readonly string[];
|
|
31
31
|
};
|
|
@@ -33,7 +33,7 @@ const stringList = (value: unknown, where: string): readonly string[] => {
|
|
|
33
33
|
/** A relative path inside the plugin folder, written with forward slashes and without leaving the folder. */
|
|
34
34
|
const insidePath = (value: string, where: string): string => {
|
|
35
35
|
if (path.isAbsolute(value) || value.includes("\\") || value.split("/").some((part) => part === ".." || part === "." || part === "")) {
|
|
36
|
-
throw new Error(`${where}: ${value}
|
|
36
|
+
throw new Error(`${where}: ${value} is not a relative path in the plugin folder`);
|
|
37
37
|
}
|
|
38
38
|
return value;
|
|
39
39
|
};
|
|
@@ -46,42 +46,42 @@ export const sourceFileOf = (stem: string): string | undefined =>
|
|
|
46
46
|
export const readPluginDescription = (folder: string): PluginDescription => {
|
|
47
47
|
const file = path.join(folder, PLUGIN_DESCRIPTION_FILE);
|
|
48
48
|
if (!existsSync(file)) {
|
|
49
|
-
throw new Error(`${folder}
|
|
49
|
+
throw new Error(`${folder} has no ${PLUGIN_DESCRIPTION_FILE}; a plugin describes itself there with { "id": "${path.basename(folder)}" }`);
|
|
50
50
|
}
|
|
51
51
|
const raw = JSON.parse(readFileSync(file, "utf8")) as unknown;
|
|
52
|
-
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) throw new Error(`${file}
|
|
52
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) throw new Error(`${file} must contain an object`);
|
|
53
53
|
const record = raw as Record<string, unknown>;
|
|
54
54
|
const unknown = Object.keys(record).filter((key) => !DESCRIPTION_KEYS.has(key));
|
|
55
|
-
if (unknown.length > 0) throw new Error(`${file}:
|
|
55
|
+
if (unknown.length > 0) throw new Error(`${file}: unknown fields ${unknown.join(", ")}; allowed are id, exports and assets`);
|
|
56
56
|
const id = record.id;
|
|
57
|
-
if (typeof id !== "string" || !ID_PATTERN.test(id)) throw new Error(`${file}: id
|
|
58
|
-
if (id !== path.basename(folder)) throw new Error(`${file}:
|
|
57
|
+
if (typeof id !== "string" || !ID_PATTERN.test(id)) throw new Error(`${file}: id must be an id such as acme.tickets`);
|
|
58
|
+
if (id !== path.basename(folder)) throw new Error(`${file}: the id ${id} differs from the folder name ${path.basename(folder)}`);
|
|
59
59
|
const exportsValue = record.exports ?? {};
|
|
60
60
|
if (typeof exportsValue !== "object" || exportsValue === null || Array.isArray(exportsValue)) {
|
|
61
|
-
throw new Error(`${file}: exports
|
|
61
|
+
throw new Error(`${file}: exports must be an object with server and web`);
|
|
62
62
|
}
|
|
63
63
|
const halves = Object.keys(exportsValue).filter((half) => !HALVES.has(half));
|
|
64
|
-
if (halves.length > 0) throw new Error(`${file}: exports
|
|
64
|
+
if (halves.length > 0) throw new Error(`${file}: exports knows only server and web, not ${halves.join(", ")}`);
|
|
65
65
|
const exportsOf = (half: HostApiHalf): readonly string[] => {
|
|
66
66
|
const names = stringList((exportsValue as Record<string, unknown>)[half] ?? [], `${file}: exports.${half}`)
|
|
67
67
|
.map((name) => insidePath(name, `${file}: exports.${half}`));
|
|
68
68
|
for (const name of names) {
|
|
69
|
-
if (/\.(js|ts|tsx|mjs)$/.test(name)) throw new Error(`${file}:
|
|
70
|
-
if (!sourceFileOf(path.join(folder, name))) throw new Error(`${file}:
|
|
69
|
+
if (/\.(js|ts|tsx|mjs)$/.test(name)) throw new Error(`${file}: the export ${name} is named without an extension`);
|
|
70
|
+
if (!sourceFileOf(path.join(folder, name))) throw new Error(`${file}: the export ${name} for ${half} has no source file`);
|
|
71
71
|
}
|
|
72
72
|
return names;
|
|
73
73
|
};
|
|
74
74
|
const assets = stringList(record.assets ?? [], `${file}: assets`).map((name) => insidePath(name, `${file}: assets`));
|
|
75
75
|
for (const name of assets) {
|
|
76
|
-
if (RESERVED_ASSET_ROOTS.has(name.split("/")[0]!)) throw new Error(`${file}:
|
|
77
|
-
if (!existsSync(path.join(folder, name))) throw new Error(`${file}:
|
|
76
|
+
if (RESERVED_ASSET_ROOTS.has(name.split("/")[0]!)) throw new Error(`${file}: the asset ${name} is under ${name.split("/")[0]}, which the build tool writes itself`);
|
|
77
|
+
if (!existsSync(path.join(folder, name))) throw new Error(`${file}: the asset ${name} is missing in the plugin folder`);
|
|
78
78
|
}
|
|
79
79
|
return { id, exports: { server: exportsOf("server"), web: exportsOf("web") }, assets };
|
|
80
80
|
};
|
|
81
81
|
|
|
82
82
|
export const readPluginSource = (folder: string): PluginSource => {
|
|
83
83
|
const given = path.resolve(folder);
|
|
84
|
-
if (!statSync(given, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`${given}
|
|
84
|
+
if (!statSync(given, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`${given} is not a folder`);
|
|
85
85
|
const real = realpathSync.native(given);
|
|
86
86
|
return { folder: real, description: readPluginDescription(real) };
|
|
87
87
|
};
|
|
@@ -110,7 +110,7 @@ export const pluginCatalog = (folders: readonly string[], builtIn = pluginsRoot)
|
|
|
110
110
|
if (known.has(id)) return known.get(id);
|
|
111
111
|
const found = roots.map((root) => path.join(root, id)).filter((folder) => existsSync(path.join(folder, PLUGIN_DESCRIPTION_FILE)));
|
|
112
112
|
const distinct = [...new Set(found.map((folder) => realpathSync.native(folder)))];
|
|
113
|
-
if (distinct.length > 1) throw new Error(`
|
|
113
|
+
if (distinct.length > 1) throw new Error(`The plugin ${id} exists more than once: ${distinct.join(", ")}`);
|
|
114
114
|
const source = distinct[0] ? readPluginSource(distinct[0]) : undefined;
|
|
115
115
|
known.set(id, source);
|
|
116
116
|
return source;
|
|
@@ -26,7 +26,7 @@ const configOptions = (file: string): ts.CompilerOptions => {
|
|
|
26
26
|
throw new Error(ts.flattenDiagnosticMessageText(diagnostic.messageText, " "));
|
|
27
27
|
},
|
|
28
28
|
});
|
|
29
|
-
if (!parsed) throw new Error(`${file}
|
|
29
|
+
if (!parsed) throw new Error(`${file} is not a valid tsconfig`);
|
|
30
30
|
return parsed.options;
|
|
31
31
|
};
|
|
32
32
|
|