@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
|
@@ -40,7 +40,7 @@ var WatchConditionError = class extends Error {
|
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
42
|
var compileWatchCondition = async (condition, signal) => {
|
|
43
|
-
if (!condition.trim()) throw new WatchConditionError("
|
|
43
|
+
if (!condition.trim()) throw new WatchConditionError("The wake condition must not be empty.");
|
|
44
44
|
const compiled = await compileVirtualTypeScriptAsync({
|
|
45
45
|
sources: [{ fileName: conditionFile, text: `${watchStateDeclarations}
|
|
46
46
|
const wake = (now: WatchState, before: WatchState): string | undefined => {
|
|
@@ -50,11 +50,11 @@ ${condition}
|
|
|
50
50
|
emit: "node"
|
|
51
51
|
}, { signal });
|
|
52
52
|
if (!compiled.valid) {
|
|
53
|
-
throw new WatchConditionError(`
|
|
53
|
+
throw new WatchConditionError(`The wake condition is not valid TypeScript:
|
|
54
54
|
${compiled.diagnostics.map((diagnostic) => `${diagnostic.start ? `${Math.max(1, diagnostic.start.line - watchStateDeclarations.split("\n").length)}:${diagnostic.start.column} ` : ""}TS${diagnostic.code}: ${diagnostic.message}`).join("\n")}`);
|
|
55
55
|
}
|
|
56
56
|
const emitted = compiled.emittedFiles.find((file) => file.fileName.endsWith(".js"));
|
|
57
|
-
if (!emitted) throw new WatchConditionError("
|
|
57
|
+
if (!emitted) throw new WatchConditionError("The wake condition produced no JavaScript code.");
|
|
58
58
|
const sandbox = createContext(/* @__PURE__ */ Object.create(null));
|
|
59
59
|
runInContext(`${emitted.text}
|
|
60
60
|
globalThis.wake = wake;`, sandbox, { timeout: RUN_TIMEOUT_MS });
|
|
@@ -63,7 +63,7 @@ globalThis.wake = wake;`, sandbox, { timeout: RUN_TIMEOUT_MS });
|
|
|
63
63
|
sandbox.before = before;
|
|
64
64
|
const result = runInContext("wake(now, before)", sandbox, { timeout: RUN_TIMEOUT_MS });
|
|
65
65
|
if (result === void 0 || result === null || result === false) return void 0;
|
|
66
|
-
if (typeof result !== "string" || !result.trim()) throw new WatchConditionError(`
|
|
66
|
+
if (typeof result !== "string" || !result.trim()) throw new WatchConditionError(`The wake condition must return a reason as text or nothing, not ${JSON.stringify(result)}.`);
|
|
67
67
|
return result.trim().slice(0, REASON_CHARS);
|
|
68
68
|
};
|
|
69
69
|
};
|
|
@@ -72,38 +72,38 @@ globalThis.wake = wake;`, sandbox, { timeout: RUN_TIMEOUT_MS });
|
|
|
72
72
|
import { Type } from "typebox";
|
|
73
73
|
import { defineRunFunction, defineToolAvailability } from "@ragents/engine";
|
|
74
74
|
import { toolDescriptorFrom } from "@ragents/host/plugin-support/agent-tool.js";
|
|
75
|
-
var available = defineToolAvailability({ availability: "always", availabilityDetail: "
|
|
75
|
+
var available = defineToolAvailability({ availability: "always", availabilityDetail: "Available in every run." }, () => true);
|
|
76
76
|
var verdictSchema = Type.Object({
|
|
77
|
-
at: Type.String({ description: "
|
|
78
|
-
wake: Type.Boolean({ description: "
|
|
79
|
-
reason: Type.String({ description: "
|
|
80
|
-
changes: Type.Array(Type.String(), { description: "
|
|
77
|
+
at: Type.String({ description: "Time of the evaluation" }),
|
|
78
|
+
wake: Type.Boolean({ description: "Whether the watch woke" }),
|
|
79
|
+
reason: Type.String({ description: "Reason the condition returned, or 'Condition not met'" }),
|
|
80
|
+
changes: Type.Array(Type.String(), { description: "Changes since the last wake that the evaluation saw" })
|
|
81
81
|
}, { additionalProperties: false });
|
|
82
82
|
var summarySchema = Type.Object({
|
|
83
|
-
id: Type.String({ description: "
|
|
84
|
-
source: Type.String({ description: "
|
|
85
|
-
target: Type.String({ description: "
|
|
86
|
-
condition: Type.String({ description: "
|
|
87
|
-
observe: Type.Optional(Type.String({ description: "
|
|
88
|
-
stallAfterSeconds: Type.Optional(Type.Integer({ description: "
|
|
89
|
-
wakes: Type.Integer({ description: "
|
|
90
|
-
lastEvaluatedAt: Type.Optional(Type.String({ description: "
|
|
83
|
+
id: Type.String({ description: "Id of the watch for watch_remove" }),
|
|
84
|
+
source: Type.String({ description: "Observed actor as @handle" }),
|
|
85
|
+
target: Type.String({ description: "Woken actor as @handle" }),
|
|
86
|
+
condition: Type.String({ description: "Wake condition as a TypeScript function body" }),
|
|
87
|
+
observe: Type.Optional(Type.String({ description: "Named operation whose result belongs to the observed state" })),
|
|
88
|
+
stallAfterSeconds: Type.Optional(Type.Integer({ description: "Seconds without an event of the observed actor after which the state reports a stall" })),
|
|
89
|
+
wakes: Type.Integer({ description: "Number of wakes so far" }),
|
|
90
|
+
lastEvaluatedAt: Type.Optional(Type.String({ description: "Time of the last evaluation" })),
|
|
91
91
|
lastVerdict: Type.Optional(verdictSchema)
|
|
92
92
|
}, { additionalProperties: false });
|
|
93
93
|
var createSchema = Type.Object({
|
|
94
|
-
source: Type.String({ minLength: 1, description: "
|
|
95
|
-
condition: Type.String({ minLength: 1, maxLength: 4e3, description: '
|
|
96
|
-
target: Type.Optional(Type.String({ minLength: 1, description: "
|
|
97
|
-
observe: Type.Optional(Type.String({ minLength: 1, description: "
|
|
98
|
-
instruction: Type.Optional(Type.String({ minLength: 1, maxLength: 2e3, description: "Text
|
|
99
|
-
stallAfterSeconds: Type.Optional(Type.Integer({ minimum: 1, description: "
|
|
94
|
+
source: Type.String({ minLength: 1, description: "Observed actor as @handle or id" }),
|
|
95
|
+
condition: Type.String({ minLength: 1, maxLength: 4e3, description: 'Wake condition as a TypeScript function body of (now: WatchState, before: WatchState) => string | undefined; returns the wake reason as text or undefined. WatchState: source { lifecycle idle|running|stopped, completedTurns, lastTurn { status, reason? }, pendingInputs, pendingActions, lastOutput? }, observed (result of the observe operation as Record<string, unknown>), stalledForSeconds (only when stalled). before is the state at the last wake. Example: return now.source.completedTurns > before.source.completedTurns && now.observed?.phase !== "ready" ? "Turn ended, task not finished" : undefined;' }),
|
|
96
|
+
target: Type.Optional(Type.String({ minLength: 1, description: "Actor to wake as @handle or id; if omitted, the caller" })),
|
|
97
|
+
observe: Type.Optional(Type.String({ minLength: 1, description: "Named operation without input whose result extends the observed state and is compared by difference" })),
|
|
98
|
+
instruction: Type.Optional(Type.String({ minLength: 1, maxLength: 2e3, description: "Text appended to every wake, e.g. how the woken actor should react" })),
|
|
99
|
+
stallAfterSeconds: Type.Optional(Type.Integer({ minimum: 1, description: "Seconds without an event of the observed actor after which the state reports stalledForSeconds" }))
|
|
100
100
|
}, { additionalProperties: false });
|
|
101
101
|
var watchFunctions = (service) => {
|
|
102
102
|
const functions = [
|
|
103
103
|
defineRunFunction({
|
|
104
104
|
name: "watch_create",
|
|
105
|
-
label: "
|
|
106
|
-
description: "
|
|
105
|
+
label: "Create watch",
|
|
106
|
+
description: "Observes an actor of this run and wakes another with a background message as soon as the condition, written as a TypeScript function body, returns a reason for the changed state. No model: the condition is type-checked on creation and afterwards run deterministically on every change of the observed state, once the observed actor has come to rest; stalledForSeconds appears after stallAfterSeconds without activity and again after each further period. An identical watch is not created twice.",
|
|
107
107
|
schema: createSchema,
|
|
108
108
|
resultSchema: summarySchema,
|
|
109
109
|
available,
|
|
@@ -111,8 +111,8 @@ var watchFunctions = (service) => {
|
|
|
111
111
|
}),
|
|
112
112
|
defineRunFunction({
|
|
113
113
|
name: "watch_list",
|
|
114
|
-
label: "
|
|
115
|
-
description: "
|
|
114
|
+
label: "List watches",
|
|
115
|
+
description: "Lists the watches of this run with condition, number of wakes and last verdict.",
|
|
116
116
|
schema: Type.Object({}, { additionalProperties: false }),
|
|
117
117
|
resultSchema: Type.Array(summarySchema),
|
|
118
118
|
available,
|
|
@@ -120,11 +120,11 @@ var watchFunctions = (service) => {
|
|
|
120
120
|
}),
|
|
121
121
|
defineRunFunction({
|
|
122
122
|
name: "watch_remove",
|
|
123
|
-
label: "
|
|
124
|
-
description: "
|
|
123
|
+
label: "Remove watch",
|
|
124
|
+
description: "Removes a watch of this run; afterwards it no longer wakes.",
|
|
125
125
|
schema: Type.Object({
|
|
126
|
-
id: Type.String({ minLength: 1, description: "
|
|
127
|
-
reason: Type.String({ minLength: 1, description: "
|
|
126
|
+
id: Type.String({ minLength: 1, description: "Id from watch_create or watch_list" }),
|
|
127
|
+
reason: Type.String({ minLength: 1, description: "Reason for the removal" })
|
|
128
128
|
}, { additionalProperties: false }),
|
|
129
129
|
resultSchema: Type.Object({ removed: Type.Literal(true) }, { additionalProperties: false }),
|
|
130
130
|
available,
|
|
@@ -186,10 +186,10 @@ var changesBetween = (before, after) => {
|
|
|
186
186
|
const lines = [];
|
|
187
187
|
for (const [path, value] of current) {
|
|
188
188
|
const old = previous.get(path);
|
|
189
|
-
if (old === void 0) lines.push(`${path}: ${value}${before === void 0 ? "" : " (
|
|
189
|
+
if (old === void 0) lines.push(`${path}: ${value}${before === void 0 ? "" : " (new)"}`);
|
|
190
190
|
else if (old !== value) lines.push(`${path}: ${old} -> ${value}`);
|
|
191
191
|
}
|
|
192
|
-
for (const path of previous.keys()) if (!current.has(path)) lines.push(`${path}:
|
|
192
|
+
for (const path of previous.keys()) if (!current.has(path)) lines.push(`${path}: removed`);
|
|
193
193
|
return lines;
|
|
194
194
|
};
|
|
195
195
|
|
|
@@ -212,14 +212,14 @@ var invalid = (message) => new DomainError("watch-invalid", message, 400);
|
|
|
212
212
|
var cleanText = (value, field, limit) => {
|
|
213
213
|
if (value === void 0) return void 0;
|
|
214
214
|
const text = value.trim();
|
|
215
|
-
if (!text) throw invalid(`${field}
|
|
216
|
-
if (text.length > limit) throw invalid(`${field}
|
|
215
|
+
if (!text) throw invalid(`${field} must not be empty.`);
|
|
216
|
+
if (text.length > limit) throw invalid(`${field} may contain at most ${limit} characters.`);
|
|
217
217
|
return text;
|
|
218
218
|
};
|
|
219
219
|
var wakeMessage = (definition, reason, changes) => [
|
|
220
|
-
`
|
|
221
|
-
|
|
222
|
-
${changes.length ? changes.map((line) => `- ${line}`).join("\n") : "-
|
|
220
|
+
`The watch wakes you: ${reason}`,
|
|
221
|
+
`Changes at @${definition.sourceHandle} since the last wake:
|
|
222
|
+
${changes.length ? changes.map((line) => `- ${line}`).join("\n") : "- none"}`,
|
|
223
223
|
...definition.instruction ? [definition.instruction] : []
|
|
224
224
|
].join("\n");
|
|
225
225
|
var WatchService = class {
|
|
@@ -236,18 +236,18 @@ var WatchService = class {
|
|
|
236
236
|
const runtime = this.#options.runtime();
|
|
237
237
|
const view = runtime.view(runId);
|
|
238
238
|
const source = watchableActorOf(view, request.source);
|
|
239
|
-
if (!source) throw invalid(`
|
|
239
|
+
if (!source) throw invalid(`The observed actor ${request.source} does not exist in this run.`);
|
|
240
240
|
const target = request.target ? watchableActorOf(view, request.target) : watchableActorOf(view, callerActorId);
|
|
241
|
-
if (!target) throw invalid(`
|
|
241
|
+
if (!target) throw invalid(`The actor to wake ${request.target ?? callerActorId} does not exist in this run or is not an agent.`);
|
|
242
242
|
const condition = cleanText(request.condition, "condition", CONDITION_CHARS);
|
|
243
243
|
const instruction = cleanText(request.instruction, "instruction", INSTRUCTION_CHARS);
|
|
244
|
-
if (request.observe !== void 0 && !this.#options.operationExists(request.observe)) throw invalid(`
|
|
245
|
-
if (request.stallAfterSeconds !== void 0 && (!Number.isInteger(request.stallAfterSeconds) || request.stallAfterSeconds < 1)) throw invalid("stallAfterSeconds
|
|
244
|
+
if (request.observe !== void 0 && !this.#options.operationExists(request.observe)) throw invalid(`The operation ${request.observe} is not registered.`);
|
|
245
|
+
if (request.stallAfterSeconds !== void 0 && (!Number.isInteger(request.stallAfterSeconds) || request.stallAfterSeconds < 1)) throw invalid("stallAfterSeconds must be a positive integer.");
|
|
246
246
|
const run = this.#ensure(runId);
|
|
247
247
|
const existing = [...run.watches.values()].find((watch2) => watch2.definition.sourceActorId === source.id && watch2.definition.targetActorId === target.id && watch2.definition.condition === condition);
|
|
248
248
|
if (existing) return summaryOf(existing);
|
|
249
249
|
const predicate = await this.#options.compile(condition, run.abort.signal);
|
|
250
|
-
if (this.#runs.get(runId) !== run) throw invalid("
|
|
250
|
+
if (this.#runs.get(runId) !== run) throw invalid("The run ended while the watch was being created.");
|
|
251
251
|
const definition = {
|
|
252
252
|
id: `watch_${randomUUID()}`,
|
|
253
253
|
sourceActorId: source.id,
|
|
@@ -273,8 +273,8 @@ var WatchService = class {
|
|
|
273
273
|
remove(runId, watchId, reason) {
|
|
274
274
|
const run = this.#runs.get(runId);
|
|
275
275
|
const watch = run?.watches.get(watchId);
|
|
276
|
-
if (!run || !watch) throw new DomainError("watch-unknown", `
|
|
277
|
-
if (!reason.trim()) throw invalid("reason
|
|
276
|
+
if (!run || !watch) throw new DomainError("watch-unknown", `The watch ${watchId} does not exist in this run.`, 404);
|
|
277
|
+
if (!reason.trim()) throw invalid("reason must not be empty.");
|
|
278
278
|
run.watches.delete(watchId);
|
|
279
279
|
this.#persist(run);
|
|
280
280
|
this.#updateStallTimer(run);
|
|
@@ -313,7 +313,7 @@ var WatchService = class {
|
|
|
313
313
|
return state?.watches ?? [];
|
|
314
314
|
}
|
|
315
315
|
#ensure(runId) {
|
|
316
|
-
if (this.#closed) throw new Error("
|
|
316
|
+
if (this.#closed) throw new Error("The watch service has ended.");
|
|
317
317
|
const existing = this.#runs.get(runId);
|
|
318
318
|
if (existing) return existing;
|
|
319
319
|
const runtime = this.#options.runtime();
|
|
@@ -383,7 +383,7 @@ var WatchService = class {
|
|
|
383
383
|
await this.#evaluate(run, watch);
|
|
384
384
|
} catch (error) {
|
|
385
385
|
if (run.abort.signal.aborted) return;
|
|
386
|
-
(this.#options.log ?? ((message, cause) => console.error(message, cause)))(`
|
|
386
|
+
(this.#options.log ?? ((message, cause) => console.error(message, cause)))(`Watch ${watch.definition.id} in run ${run.runId} could not evaluate:`, error);
|
|
387
387
|
}
|
|
388
388
|
}
|
|
389
389
|
}
|
|
@@ -419,7 +419,7 @@ var WatchService = class {
|
|
|
419
419
|
watch.lastEvaluated = key;
|
|
420
420
|
watch.lastEvaluatedAt = at;
|
|
421
421
|
watch.lastJudgedChanges = judged;
|
|
422
|
-
watch.history = [...watch.history, { at, wake: reason !== void 0, reason: reason ?? "
|
|
422
|
+
watch.history = [...watch.history, { at, wake: reason !== void 0, reason: reason ?? "Condition not met", changes }].slice(-HISTORY_LENGTH);
|
|
423
423
|
if (reason === void 0) {
|
|
424
424
|
if (changes.some((line) => !line.startsWith("stalledForSeconds:"))) this.#persist(run);
|
|
425
425
|
return;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../plugins/ragents.watch/server/index.ts", "../../../plugins/ragents.watch/server/condition.ts", "../../../plugins/ragents.watch/server/functions.ts", "../../../plugins/ragents.watch/server/service.ts", "../../../plugins/ragents.watch/server/observation.ts"],
|
|
4
|
-
"sourcesContent": ["import type { JsonValue, RAgentsPlugin } from \"@ragents/engine\";\nimport { randomUUID } from \"node:crypto\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { runtimeProviderToken } from \"@ragents/host/ragents/host-services.js\";\nimport { WATCH_PLUGIN_ID } from \"../contract.js\";\nimport { watchServiceToken } from \"./contract.js\";\nimport { compileWatchCondition } from \"./condition.js\";\nimport { watchFunctions } from \"./functions.js\";\nimport { WatchService } from \"./service.js\";\n\nconst watchPlugin: RAgentsPlugin = {\n manifest: { id: WATCH_PLUGIN_ID },\n register: (host) => {\n const runtime = host.service(runtimeProviderToken);\n const service = new WatchService({\n runtime,\n compile: (condition, signal) => compileWatchCondition(condition, signal),\n operationExists: (id) => host.operation(id) !== undefined,\n observe: (runId, id, signal) => host.invokeOperation(id, {\n runId, invocationId: `ragents.watch:${randomUUID()}`, signal,\n principal: { kind: \"operator\", actorId: runtime().view(runId).ownerId },\n }, {}) as Promise<JsonValue>,\n });\n host.provide(watchServiceToken, service);\n host.functions(watchFunctions(service));\n host.lifecycle({\n id: \"ragents.watch.lifecycle\",\n prepareSession: ({ runId }) => service.prepare(runId),\n stopSession: ({ runId }) => service.stop(runId),\n deleteSession: ({ runId }) => service.stop(runId),\n shutdown: () => service.shutdown(),\n });\n },\n};\n\nexport const plugin: PluginModule = {\n requires: [\"ragents.orchestration\"],\n create: () => watchPlugin,\n};\n", "import { createContext, runInContext } from \"node:vm\";\nimport { compileVirtualTypeScriptAsync, type JsonValue } from \"@ragents/engine\";\n\nconst conditionFile = \"watch-condition.ts\";\nconst RUN_TIMEOUT_MS = 200;\nconst REASON_CHARS = 300;\n\nexport type WatchPredicate = (now: JsonValue, before: JsonValue) => string | undefined;\n\nexport const watchStateDeclarations = `interface WatchTurn { readonly status: string; readonly reason?: string }\ninterface WatchSource {\n readonly lifecycle: \"idle\" | \"running\" | \"stopped\";\n readonly stopReason?: string;\n readonly completedTurns: number;\n readonly lastTurn?: WatchTurn;\n readonly pendingInputs: number;\n readonly pendingActions: number;\n readonly lastOutput?: string;\n}\ninterface WatchState {\n readonly source: WatchSource;\n readonly observed?: Record<string, unknown>;\n readonly stalledForSeconds?: number;\n}\n`;\n\nexport class WatchConditionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"WatchConditionError\";\n }\n}\n\nexport const compileWatchCondition = async (condition: string, signal?: AbortSignal): Promise<WatchPredicate> => {\n if (!condition.trim()) throw new WatchConditionError(\"Die Weckbedingung darf nicht leer sein.\");\n const compiled = await compileVirtualTypeScriptAsync({\n sources: [{ fileName: conditionFile, text: `${watchStateDeclarations}\\nconst wake = (now: WatchState, before: WatchState): string | undefined => {\\n${condition}\\n};\\n` }],\n emit: \"node\",\n }, { signal });\n if (!compiled.valid) {\n throw new WatchConditionError(`Die Weckbedingung ist kein g\u00FCltiges TypeScript:\\n${compiled.diagnostics.map((diagnostic) =>\n `${diagnostic.start ? `${Math.max(1, diagnostic.start.line - watchStateDeclarations.split(\"\\n\").length)}:${diagnostic.start.column} ` : \"\"}TS${diagnostic.code}: ${diagnostic.message}`).join(\"\\n\")}`);\n }\n const emitted = compiled.emittedFiles.find((file) => file.fileName.endsWith(\".js\"));\n if (!emitted) throw new WatchConditionError(\"Die Weckbedingung hat keinen JavaScript-Code erzeugt.\");\n const sandbox = createContext(Object.create(null));\n runInContext(`${emitted.text}\\nglobalThis.wake = wake;`, sandbox, { timeout: RUN_TIMEOUT_MS });\n return (now, before) => {\n sandbox.now = now;\n sandbox.before = before;\n const result: unknown = runInContext(\"wake(now, before)\", sandbox, { timeout: RUN_TIMEOUT_MS });\n if (result === undefined || result === null || result === false) return undefined;\n if (typeof result !== \"string\" || !result.trim()) throw new WatchConditionError(`Die Weckbedingung muss einen Grund als Text oder nichts liefern, nicht ${JSON.stringify(result)}.`);\n return result.trim().slice(0, REASON_CHARS);\n };\n};\n", "import { Type } from \"typebox\";\nimport { defineRunFunction, defineToolAvailability, type ToolContributor } from \"@ragents/engine\";\nimport { toolDescriptorFrom } from \"@ragents/host/plugin-support/agent-tool.js\";\nimport type { WatchServiceApi } from \"../contract.js\";\n\nconst available = defineToolAvailability({ availability: \"always\", availabilityDetail: \"In jedem Run verf\u00FCgbar.\" }, () => true);\n\nconst verdictSchema = Type.Object({\n at: Type.String({ description: \"Zeitpunkt der Bewertung\" }),\n wake: Type.Boolean({ description: \"Ob der W\u00E4chter geweckt hat\" }),\n reason: Type.String({ description: \"Grund, den die Bedingung geliefert hat, oder 'Bedingung nicht erf\u00FCllt'\" }),\n changes: Type.Array(Type.String(), { description: \"\u00C4nderungen seit der letzten Weckung, die der Bewertung vorlagen\" }),\n}, { additionalProperties: false });\n\nconst summarySchema = Type.Object({\n id: Type.String({ description: \"Kennung des W\u00E4chters f\u00FCr watch_remove\" }),\n source: Type.String({ description: \"Beobachteter Actor als @handle\" }),\n target: Type.String({ description: \"Geweckter Actor als @handle\" }),\n condition: Type.String({ description: \"Weckbedingung als TypeScript-Funktionsrumpf\" }),\n observe: Type.Optional(Type.String({ description: \"Benannte Operation, deren Ergebnis zum beobachteten Stand geh\u00F6rt\" })),\n stallAfterSeconds: Type.Optional(Type.Integer({ description: \"Sekunden ohne Ereignis des beobachteten Actors, ab denen der Stand einen Stillstand nennt\" })),\n wakes: Type.Integer({ description: \"Anzahl der bisherigen Weckungen\" }),\n lastEvaluatedAt: Type.Optional(Type.String({ description: \"Zeitpunkt der letzten Bewertung\" })),\n lastVerdict: Type.Optional(verdictSchema),\n}, { additionalProperties: false });\n\nconst createSchema = Type.Object({\n source: Type.String({ minLength: 1, description: \"Beobachteter Actor als @handle oder Kennung\" }),\n condition: Type.String({ minLength: 1, maxLength: 4_000, description: \"Weckbedingung als TypeScript-Funktionsrumpf von (now: WatchState, before: WatchState) => string | undefined; liefert den Weckgrund als Text oder undefined. WatchState: source { lifecycle idle|running|stopped, completedTurns, lastTurn { status, reason? }, pendingInputs, pendingActions, lastOutput? }, observed (Ergebnis der observe-Operation als Record<string, unknown>), stalledForSeconds (nur bei Stillstand). before ist der Stand bei der letzten Weckung. Beispiel: return now.source.completedTurns > before.source.completedTurns && now.observed?.phase !== \\\"ready\\\" ? \\\"Turn beendet, Auftrag nicht fertig\\\" : undefined;\" }),\n target: Type.Optional(Type.String({ minLength: 1, description: \"Zu weckender Actor als @handle oder Kennung; ohne Angabe der Aufrufer\" })),\n observe: Type.Optional(Type.String({ minLength: 1, description: \"Benannte Operation ohne Eingabe, deren Ergebnis den beobachteten Stand erg\u00E4nzt und per Differenz verglichen wird\" })),\n instruction: Type.Optional(Type.String({ minLength: 1, maxLength: 2_000, description: \"Text, der jeder Weckung angeh\u00E4ngt wird, etwa wie der Geweckte reagieren soll\" })),\n stallAfterSeconds: Type.Optional(Type.Integer({ minimum: 1, description: \"Sekunden ohne Ereignis des beobachteten Actors, ab denen der Stand stalledForSeconds nennt\" })),\n}, { additionalProperties: false });\n\nexport const watchFunctions = (service: WatchServiceApi): ToolContributor => {\n const functions = [\n defineRunFunction({\n name: \"watch_create\", label: \"W\u00E4chter anlegen\",\n description: \"Beobachtet einen Actor dieses Runs und weckt einen anderen mit einer Hintergrundnachricht, sobald die als TypeScript-Funktionsrumpf formulierte Bedingung im ge\u00E4nderten Stand einen Grund liefert. Kein Modell: Die Bedingung wird beim Anlegen typgepr\u00FCft und danach deterministisch bei jeder \u00C4nderung des beobachteten Stands ausgef\u00FChrt, sobald der beobachtete Actor zur Ruhe gekommen ist; stalledForSeconds erscheint nach stallAfterSeconds ohne Aktivit\u00E4t und danach je weitere Periode erneut. Ein gleicher W\u00E4chter wird nicht doppelt angelegt.\",\n schema: createSchema, resultSchema: summarySchema, available,\n run: (scope, _toolCallId, input) => service.create(scope.caller.runId, scope.caller.actorId, input),\n }),\n defineRunFunction({\n name: \"watch_list\", label: \"W\u00E4chter auflisten\",\n description: \"Listet die W\u00E4chter dieses Runs mit Bedingung, Anzahl der Weckungen und letztem Urteil.\",\n schema: Type.Object({}, { additionalProperties: false }), resultSchema: Type.Array(summarySchema), available,\n run: (scope) => service.list(scope.caller.runId),\n }),\n defineRunFunction({\n name: \"watch_remove\", label: \"W\u00E4chter entfernen\",\n description: \"Entfernt einen W\u00E4chter dieses Runs; danach weckt er nicht mehr.\",\n schema: Type.Object({\n id: Type.String({ minLength: 1, description: \"Kennung aus watch_create oder watch_list\" }),\n reason: Type.String({ minLength: 1, description: \"Grund der Entfernung\" }),\n }, { additionalProperties: false }),\n resultSchema: Type.Object({ removed: Type.Literal(true) }, { additionalProperties: false }), available,\n run: (scope, _toolCallId, input) => { service.remove(scope.caller.runId, input.id, input.reason); return { removed: true as const }; },\n }),\n ];\n return { name: \"ragents.watch\", descriptors: functions.map((fn) => toolDescriptorFrom(fn, available)), tools: () => functions };\n};\n", "import { randomUUID } from \"node:crypto\";\nimport { DomainError, type ExecutableActor, type JournalEvent, type JsonValue, type Orchestration, type RunView } from \"@ragents/engine\";\nimport { WATCH_PLUGIN_ID, type WatchDefinition, type WatchRequest, type WatchServiceApi, type WatchSummary, type WatchVerdict } from \"../contract.js\";\nimport { changesBetween, lastActivityOf, observeActor, watchableActorOf } from \"./observation.js\";\nimport type { WatchPredicate } from \"./condition.js\";\n\nconst CONDITION_CHARS = 4_000;\nconst INSTRUCTION_CHARS = 2_000;\nconst HISTORY_LENGTH = 10;\n\ntype StoredWatch = WatchDefinition & { baseline?: JsonValue; wakes: number; history?: WatchVerdict[] };\ninterface WatchState { version: 1; watches: StoredWatch[] }\n\ninterface WatchRuntime {\n definition: WatchDefinition;\n predicate: WatchPredicate;\n baseline?: JsonValue;\n wakes: number;\n lastEvaluated?: string;\n lastEvaluatedAt?: string;\n lastJudgedChanges?: string;\n history: WatchVerdict[];\n}\n\ninterface RunWatches {\n runId: string;\n unsubscribe: () => void;\n abort: AbortController;\n watches: Map<string, WatchRuntime>;\n debounce?: ReturnType<typeof setTimeout>;\n stallTimer?: ReturnType<typeof setInterval>;\n evaluating?: Promise<void>;\n dirty: boolean;\n}\n\nexport interface WatchServiceOptions {\n runtime: () => Orchestration;\n compile: (condition: string, signal: AbortSignal) => Promise<WatchPredicate>;\n observe: (runId: string, operationId: string, signal: AbortSignal) => Promise<JsonValue>;\n operationExists: (operationId: string) => boolean;\n debounceMs?: number;\n stallCheckMs?: number;\n now?: () => number;\n log?: (message: string, error?: unknown) => void;\n}\n\nconst summaryOf = (watch: WatchRuntime): WatchSummary => ({\n id: watch.definition.id,\n source: `@${watch.definition.sourceHandle}`,\n target: `@${watch.definition.targetHandle}`,\n condition: watch.definition.condition,\n ...(watch.definition.observe ? { observe: watch.definition.observe } : {}),\n ...(watch.definition.stallAfterSeconds ? { stallAfterSeconds: watch.definition.stallAfterSeconds } : {}),\n wakes: watch.wakes,\n ...(watch.lastEvaluatedAt ? { lastEvaluatedAt: watch.lastEvaluatedAt } : {}),\n ...(watch.history.length ? { lastVerdict: watch.history[watch.history.length - 1] } : {}),\n});\n\nconst invalid = (message: string) => new DomainError(\"watch-invalid\", message, 400);\n\nconst cleanText = (value: string | undefined, field: string, limit: number): string | undefined => {\n if (value === undefined) return undefined;\n const text = value.trim();\n if (!text) throw invalid(`${field} darf nicht leer sein.`);\n if (text.length > limit) throw invalid(`${field} darf h\u00F6chstens ${limit} Zeichen enthalten.`);\n return text;\n};\n\nexport const wakeMessage = (definition: WatchDefinition, reason: string, changes: readonly string[]): string => [\n `Der W\u00E4chter weckt Dich: ${reason}`,\n `\u00C4nderungen bei @${definition.sourceHandle} seit der letzten Weckung:\\n${changes.length ? changes.map((line) => `- ${line}`).join(\"\\n\") : \"- keine\"}`,\n ...(definition.instruction ? [definition.instruction] : []),\n].join(\"\\n\");\n\nexport class WatchService implements WatchServiceApi {\n readonly #options: WatchServiceOptions;\n readonly #runs = new Map<string, RunWatches>();\n #closed = false;\n\n constructor(options: WatchServiceOptions) {\n this.#options = options;\n }\n\n #now(): number {\n return this.#options.now ? this.#options.now() : Date.parse(this.#options.runtime().now());\n }\n\n async create(runId: string, callerActorId: string, request: WatchRequest): Promise<WatchSummary> {\n const runtime = this.#options.runtime();\n const view = runtime.view(runId);\n const source = watchableActorOf(view, request.source);\n if (!source) throw invalid(`Der beobachtete Actor ${request.source} existiert in diesem Run nicht.`);\n const target = request.target ? watchableActorOf(view, request.target) : watchableActorOf(view, callerActorId);\n if (!target) throw invalid(`Der zu weckende Actor ${request.target ?? callerActorId} existiert in diesem Run nicht oder ist kein Agent.`);\n const condition = cleanText(request.condition, \"condition\", CONDITION_CHARS)!;\n const instruction = cleanText(request.instruction, \"instruction\", INSTRUCTION_CHARS);\n if (request.observe !== undefined && !this.#options.operationExists(request.observe)) throw invalid(`Die Operation ${request.observe} ist nicht registriert.`);\n if (request.stallAfterSeconds !== undefined && (!Number.isInteger(request.stallAfterSeconds) || request.stallAfterSeconds < 1)) throw invalid(\"stallAfterSeconds muss eine positive ganze Zahl sein.\");\n const run = this.#ensure(runId);\n const existing = [...run.watches.values()].find((watch) => watch.definition.sourceActorId === source.id && watch.definition.targetActorId === target.id && watch.definition.condition === condition);\n if (existing) return summaryOf(existing);\n const predicate = await this.#options.compile(condition, run.abort.signal);\n if (this.#runs.get(runId) !== run) throw invalid(\"Der Run wurde w\u00E4hrend des Anlegens beendet.\");\n const definition: WatchDefinition = {\n id: `watch_${randomUUID()}`,\n sourceActorId: source.id,\n sourceHandle: source.handle,\n targetActorId: target.id,\n targetHandle: target.handle,\n condition,\n ...(request.observe !== undefined ? { observe: request.observe } : {}),\n ...(instruction !== undefined ? { instruction } : {}),\n ...(request.stallAfterSeconds !== undefined ? { stallAfterSeconds: request.stallAfterSeconds } : {}),\n createdBy: callerActorId,\n };\n const watch: WatchRuntime = { definition, predicate, wakes: 0, history: [] };\n run.watches.set(definition.id, watch);\n this.#persist(run);\n this.#updateStallTimer(run);\n this.#schedule(run, true);\n return summaryOf(watch);\n }\n\n list(runId: string): WatchSummary[] {\n return [...(this.#runs.get(runId)?.watches.values() ?? [])].map(summaryOf);\n }\n\n remove(runId: string, watchId: string, reason: string): void {\n const run = this.#runs.get(runId);\n const watch = run?.watches.get(watchId);\n if (!run || !watch) throw new DomainError(\"watch-unknown\", `Der W\u00E4chter ${watchId} existiert in diesem Run nicht.`, 404);\n if (!reason.trim()) throw invalid(\"reason darf nicht leer sein.\");\n run.watches.delete(watchId);\n this.#persist(run);\n this.#updateStallTimer(run);\n }\n\n async prepare(runId: string): Promise<void> {\n if (this.#closed || this.#runs.has(runId)) return;\n const runtime = this.#options.runtime();\n if (runtime.events(runId).length === 0) return;\n const stored = this.#stored(runtime.view(runId));\n if (stored.length === 0) return;\n const run = this.#ensure(runId);\n for (const entry of stored) {\n const { baseline, wakes, history, ...definition } = entry;\n const predicate = await this.#options.compile(definition.condition, run.abort.signal);\n if (this.#runs.get(runId) !== run) return;\n run.watches.set(definition.id, { definition, predicate, ...(baseline !== undefined ? { baseline } : {}), wakes, history: history ?? [] });\n }\n this.#updateStallTimer(run);\n this.#schedule(run, true);\n }\n\n stop(runId: string): void {\n const run = this.#runs.get(runId);\n if (!run) return;\n this.#runs.delete(runId);\n run.unsubscribe();\n run.abort.abort();\n if (run.debounce) clearTimeout(run.debounce);\n if (run.stallTimer) clearInterval(run.stallTimer);\n }\n\n shutdown(): void {\n for (const runId of [...this.#runs.keys()]) this.stop(runId);\n this.#closed = true;\n }\n\n #stored(view: RunView): StoredWatch[] {\n const state = view.pluginStates.find((entry) => entry.pluginId === WATCH_PLUGIN_ID && entry.scope.kind === \"run\")?.state as unknown as WatchState | undefined;\n return state?.watches ?? [];\n }\n\n #ensure(runId: string): RunWatches {\n if (this.#closed) throw new Error(\"Der W\u00E4chterdienst ist beendet.\");\n const existing = this.#runs.get(runId);\n if (existing) return existing;\n const runtime = this.#options.runtime();\n const run: RunWatches = {\n runId,\n unsubscribe: runtime.subscribe((events) => { if (events.some((event) => event.runId === runId)) this.#schedule(run); }),\n abort: new AbortController(),\n watches: new Map(),\n dirty: false,\n };\n this.#runs.set(runId, run);\n return run;\n }\n\n #persist(run: RunWatches): void {\n const runtime = this.#options.runtime();\n const view = runtime.view(run.runId);\n const state: WatchState = { version: 1, watches: [...run.watches.values()].map((watch) => ({ ...watch.definition, ...(watch.baseline !== undefined ? { baseline: watch.baseline } : {}), wakes: watch.wakes, history: watch.history })) };\n runtime.replacePluginState({ actorId: view.ownerId, commandId: `ragents.watch:state:${randomUUID()}` }, run.runId, { pluginId: WATCH_PLUGIN_ID, scope: { kind: \"run\" }, state: state as unknown as JsonValue });\n }\n\n #updateStallTimer(run: RunWatches): void {\n const needed = [...run.watches.values()].some((watch) => watch.definition.stallAfterSeconds !== undefined);\n if (!needed && run.stallTimer) { clearInterval(run.stallTimer); run.stallTimer = undefined; }\n if (needed && !run.stallTimer) {\n run.stallTimer = setInterval(() => this.#schedule(run), this.#options.stallCheckMs ?? 30_000);\n run.stallTimer.unref();\n }\n }\n\n #schedule(run: RunWatches, immediate = false): void {\n if (this.#runs.get(run.runId) !== run) return;\n if (run.evaluating) { run.dirty = true; return; }\n if (immediate) {\n if (run.debounce) { clearTimeout(run.debounce); run.debounce = undefined; }\n this.#start(run);\n return;\n }\n if (run.debounce) return;\n run.debounce = setTimeout(() => { run.debounce = undefined; this.#start(run); }, this.#options.debounceMs ?? 1_000);\n run.debounce.unref();\n }\n\n #start(run: RunWatches): void {\n run.evaluating = this.#evaluateAll(run).finally(() => {\n run.evaluating = undefined;\n if (run.dirty) { run.dirty = false; this.#schedule(run); }\n });\n }\n\n async #evaluateAll(run: RunWatches): Promise<void> {\n for (const watch of [...run.watches.values()]) {\n if (this.#runs.get(run.runId) !== run || !run.watches.has(watch.definition.id)) return;\n try { await this.#evaluate(run, watch); }\n catch (error) {\n if (run.abort.signal.aborted) return;\n (this.#options.log ?? ((message, cause) => console.error(message, cause)))(`W\u00E4chter ${watch.definition.id} in Run ${run.runId} konnte nicht bewerten:`, error);\n }\n }\n }\n\n async #evaluate(run: RunWatches, watch: WatchRuntime): Promise<void> {\n const runtime = this.#options.runtime();\n const view = runtime.view(run.runId);\n const source = view.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === watch.definition.sourceActorId);\n const target = view.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === watch.definition.targetActorId);\n if (!source || !target || target.lifecycle.kind === \"stopped\") return;\n const observation = await this.#observe(run, watch, view, source, runtime.events(run.runId));\n if (this.#runs.get(run.runId) !== run || !run.watches.has(watch.definition.id)) return;\n const key = JSON.stringify(observation);\n if (watch.baseline === undefined) {\n watch.baseline = observation;\n watch.lastEvaluated = key;\n this.#persist(run);\n return;\n }\n if (key === watch.lastEvaluated) return;\n const current = runtime.view(run.runId);\n const busy = current.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === target.id)?.lifecycle.kind !== \"idle\"\n || current.inputs.some((input) => input.actorId === target.id && input.lifecycle.kind === \"pending\")\n || current.actions.some((action) => action.askedBy === target.id && action.status === \"pending\");\n if (busy) return;\n const unsettled = source.lifecycle.kind === \"running\" || current.inputs.some((input) => input.actorId === source.id && input.lifecycle.kind === \"pending\");\n if (unsettled && !(typeof observation === \"object\" && observation !== null && \"stalledForSeconds\" in observation)) return;\n const changes = changesBetween(watch.baseline, observation);\n const judged = JSON.stringify(changes);\n if (changes.length === 0 || judged === watch.lastJudgedChanges) { watch.lastEvaluated = key; return; }\n const reason = watch.predicate(observation, watch.baseline);\n const at = new Date(this.#now()).toISOString();\n watch.lastEvaluated = key;\n watch.lastEvaluatedAt = at;\n watch.lastJudgedChanges = judged;\n watch.history = [...watch.history, { at, wake: reason !== undefined, reason: reason ?? \"Bedingung nicht erf\u00FCllt\", changes }].slice(-HISTORY_LENGTH);\n if (reason === undefined) {\n if (changes.some((line) => !line.startsWith(\"stalledForSeconds:\"))) this.#persist(run);\n return;\n }\n runtime.enqueueInput({ actorId: current.ownerId, commandId: `ragents.watch:wake:${watch.definition.id}:${randomUUID()}` }, run.runId, {\n actorId: target.id,\n presentation: \"background\",\n content: wakeMessage(watch.definition, reason, changes),\n });\n watch.baseline = observation;\n watch.wakes += 1;\n this.#persist(run);\n }\n\n async #observe(run: RunWatches, watch: WatchRuntime, view: RunView, source: ExecutableActor, events: readonly JournalEvent[]): Promise<JsonValue> {\n const observed = watch.definition.observe ? await this.#options.observe(run.runId, watch.definition.observe, run.abort.signal) : undefined;\n const stall = watch.definition.stallAfterSeconds;\n const age = stall ? this.#now() - Date.parse(lastActivityOf(events, source)) : 0;\n return {\n source: observeActor(view, source.id) as unknown as JsonValue,\n ...(observed !== undefined ? { observed } : {}),\n ...(stall && age >= stall * 1_000 ? { stalledForSeconds: Math.floor(age / (stall * 1_000)) * stall } : {}),\n };\n }\n}\n", "import { actorByReference, type ExecutableActor, type JournalEvent, type JsonValue, type RunView } from \"@ragents/engine\";\n\nconst OUTPUT_CHARS = 600;\n\nexport interface ActorObservation {\n lifecycle: \"idle\" | \"running\" | \"stopped\";\n stopReason?: string;\n completedTurns: number;\n lastTurn?: { status: string; reason?: string };\n pendingInputs: number;\n pendingActions: number;\n lastOutput?: string;\n}\n\nexport const watchableActorOf = (view: RunView, reference: string): ExecutableActor | undefined => {\n const actor = actorByReference(view.actors, reference);\n return actor?.kind === \"human\" ? undefined : actor;\n};\n\nexport const observeActor = (view: RunView, actorId: string): ActorObservation | undefined => {\n const actor = view.actors.find((candidate): candidate is ExecutableActor => candidate.kind !== \"human\" && candidate.id === actorId);\n if (!actor) return undefined;\n const turns = view.turns.filter((turn) => turn.actorId === actorId);\n const last = turns.at(-1);\n const output = turns.findLast((turn) => turn.status !== \"running\" && turn.outputs.length > 0)?.outputs.at(-1)?.text;\n return {\n lifecycle: actor.lifecycle.kind,\n ...(actor.lifecycle.kind === \"stopped\" ? { stopReason: actor.lifecycle.reason } : {}),\n completedTurns: turns.filter((turn) => turn.status !== \"running\").length,\n ...(last ? { lastTurn: { status: last.status, ...(last.reason ? { reason: last.reason } : {}) } } : {}),\n pendingInputs: view.inputs.filter((input) => input.actorId === actorId && input.lifecycle.kind === \"pending\").length,\n pendingActions: view.actions.filter((action) => action.askedBy === actorId && action.status === \"pending\").length,\n ...(output ? { lastOutput: output.length > OUTPUT_CHARS ? `...${output.slice(-OUTPUT_CHARS)}` : output } : {}),\n };\n};\n\nexport const lastActivityOf = (events: readonly JournalEvent[], actor: ExecutableActor): string => {\n const event = events.findLast((candidate) => candidate.actorId === actor.id\n || candidate.type === \"actor.input.enqueued\" && candidate.payload.actorId === actor.id\n || (candidate.type === \"turn.finished\" || candidate.type === \"turn.interrupted\") && candidate.actorId === actor.id);\n return event?.occurredAt ?? actor.createdAt;\n};\n\nconst isObject = (value: JsonValue): value is { [key: string]: JsonValue } => typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const flattenJson = (value: JsonValue, prefix = \"\", into = new Map<string, string>()): Map<string, string> => {\n if (Array.isArray(value)) {\n if (value.length === 0 && prefix) into.set(prefix, \"[]\");\n value.forEach((entry, index) => flattenJson(entry, prefix ? `${prefix}.${index}` : String(index), into));\n } else if (isObject(value)) {\n const keys = Object.keys(value);\n if (keys.length === 0 && prefix) into.set(prefix, \"{}\");\n for (const key of keys) flattenJson(value[key], prefix ? `${prefix}.${key}` : key, into);\n } else into.set(prefix || \"$\", JSON.stringify(value));\n return into;\n};\n\nexport const changesBetween = (before: JsonValue | undefined, after: JsonValue): string[] => {\n const previous = before === undefined ? new Map<string, string>() : flattenJson(before);\n const current = flattenJson(after);\n const lines: string[] = [];\n for (const [path, value] of current) {\n const old = previous.get(path);\n if (old === undefined) lines.push(`${path}: ${value}${before === undefined ? \"\" : \" (neu)\"}`);\n else if (old !== value) lines.push(`${path}: ${old} -> ${value}`);\n }\n for (const path of previous.keys()) if (!current.has(path)) lines.push(`${path}: entfernt`);\n return lines;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import type { JsonValue, RAgentsPlugin } from \"@ragents/engine\";\nimport { randomUUID } from \"node:crypto\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { runtimeProviderToken } from \"@ragents/host/ragents/host-services.js\";\nimport { WATCH_PLUGIN_ID } from \"../contract.js\";\nimport { watchServiceToken } from \"./contract.js\";\nimport { compileWatchCondition } from \"./condition.js\";\nimport { watchFunctions } from \"./functions.js\";\nimport { WatchService } from \"./service.js\";\n\nconst watchPlugin: RAgentsPlugin = {\n manifest: { id: WATCH_PLUGIN_ID },\n register: (host) => {\n const runtime = host.service(runtimeProviderToken);\n const service = new WatchService({\n runtime,\n compile: (condition, signal) => compileWatchCondition(condition, signal),\n operationExists: (id) => host.operation(id) !== undefined,\n observe: (runId, id, signal) => host.invokeOperation(id, {\n runId, invocationId: `ragents.watch:${randomUUID()}`, signal,\n principal: { kind: \"operator\", actorId: runtime().view(runId).ownerId },\n }, {}) as Promise<JsonValue>,\n });\n host.provide(watchServiceToken, service);\n host.functions(watchFunctions(service));\n host.lifecycle({\n id: \"ragents.watch.lifecycle\",\n prepareSession: ({ runId }) => service.prepare(runId),\n stopSession: ({ runId }) => service.stop(runId),\n deleteSession: ({ runId }) => service.stop(runId),\n shutdown: () => service.shutdown(),\n });\n },\n};\n\nexport const plugin: PluginModule = {\n requires: [\"ragents.orchestration\"],\n create: () => watchPlugin,\n};\n", "import { createContext, runInContext } from \"node:vm\";\nimport { compileVirtualTypeScriptAsync, type JsonValue } from \"@ragents/engine\";\n\nconst conditionFile = \"watch-condition.ts\";\nconst RUN_TIMEOUT_MS = 200;\nconst REASON_CHARS = 300;\n\nexport type WatchPredicate = (now: JsonValue, before: JsonValue) => string | undefined;\n\nexport const watchStateDeclarations = `interface WatchTurn { readonly status: string; readonly reason?: string }\ninterface WatchSource {\n readonly lifecycle: \"idle\" | \"running\" | \"stopped\";\n readonly stopReason?: string;\n readonly completedTurns: number;\n readonly lastTurn?: WatchTurn;\n readonly pendingInputs: number;\n readonly pendingActions: number;\n readonly lastOutput?: string;\n}\ninterface WatchState {\n readonly source: WatchSource;\n readonly observed?: Record<string, unknown>;\n readonly stalledForSeconds?: number;\n}\n`;\n\nexport class WatchConditionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"WatchConditionError\";\n }\n}\n\nexport const compileWatchCondition = async (condition: string, signal?: AbortSignal): Promise<WatchPredicate> => {\n if (!condition.trim()) throw new WatchConditionError(\"The wake condition must not be empty.\");\n const compiled = await compileVirtualTypeScriptAsync({\n sources: [{ fileName: conditionFile, text: `${watchStateDeclarations}\\nconst wake = (now: WatchState, before: WatchState): string | undefined => {\\n${condition}\\n};\\n` }],\n emit: \"node\",\n }, { signal });\n if (!compiled.valid) {\n throw new WatchConditionError(`The wake condition is not valid TypeScript:\\n${compiled.diagnostics.map((diagnostic) =>\n `${diagnostic.start ? `${Math.max(1, diagnostic.start.line - watchStateDeclarations.split(\"\\n\").length)}:${diagnostic.start.column} ` : \"\"}TS${diagnostic.code}: ${diagnostic.message}`).join(\"\\n\")}`);\n }\n const emitted = compiled.emittedFiles.find((file) => file.fileName.endsWith(\".js\"));\n if (!emitted) throw new WatchConditionError(\"The wake condition produced no JavaScript code.\");\n const sandbox = createContext(Object.create(null));\n runInContext(`${emitted.text}\\nglobalThis.wake = wake;`, sandbox, { timeout: RUN_TIMEOUT_MS });\n return (now, before) => {\n sandbox.now = now;\n sandbox.before = before;\n const result: unknown = runInContext(\"wake(now, before)\", sandbox, { timeout: RUN_TIMEOUT_MS });\n if (result === undefined || result === null || result === false) return undefined;\n if (typeof result !== \"string\" || !result.trim()) throw new WatchConditionError(`The wake condition must return a reason as text or nothing, not ${JSON.stringify(result)}.`);\n return result.trim().slice(0, REASON_CHARS);\n };\n};\n", "import { Type } from \"typebox\";\nimport { defineRunFunction, defineToolAvailability, type ToolContributor } from \"@ragents/engine\";\nimport { toolDescriptorFrom } from \"@ragents/host/plugin-support/agent-tool.js\";\nimport type { WatchServiceApi } from \"../contract.js\";\n\nconst available = defineToolAvailability({ availability: \"always\", availabilityDetail: \"Available in every run.\" }, () => true);\n\nconst verdictSchema = Type.Object({\n at: Type.String({ description: \"Time of the evaluation\" }),\n wake: Type.Boolean({ description: \"Whether the watch woke\" }),\n reason: Type.String({ description: \"Reason the condition returned, or 'Condition not met'\" }),\n changes: Type.Array(Type.String(), { description: \"Changes since the last wake that the evaluation saw\" }),\n}, { additionalProperties: false });\n\nconst summarySchema = Type.Object({\n id: Type.String({ description: \"Id of the watch for watch_remove\" }),\n source: Type.String({ description: \"Observed actor as @handle\" }),\n target: Type.String({ description: \"Woken actor as @handle\" }),\n condition: Type.String({ description: \"Wake condition as a TypeScript function body\" }),\n observe: Type.Optional(Type.String({ description: \"Named operation whose result belongs to the observed state\" })),\n stallAfterSeconds: Type.Optional(Type.Integer({ description: \"Seconds without an event of the observed actor after which the state reports a stall\" })),\n wakes: Type.Integer({ description: \"Number of wakes so far\" }),\n lastEvaluatedAt: Type.Optional(Type.String({ description: \"Time of the last evaluation\" })),\n lastVerdict: Type.Optional(verdictSchema),\n}, { additionalProperties: false });\n\nconst createSchema = Type.Object({\n source: Type.String({ minLength: 1, description: \"Observed actor as @handle or id\" }),\n condition: Type.String({ minLength: 1, maxLength: 4_000, description: \"Wake condition as a TypeScript function body of (now: WatchState, before: WatchState) => string | undefined; returns the wake reason as text or undefined. WatchState: source { lifecycle idle|running|stopped, completedTurns, lastTurn { status, reason? }, pendingInputs, pendingActions, lastOutput? }, observed (result of the observe operation as Record<string, unknown>), stalledForSeconds (only when stalled). before is the state at the last wake. Example: return now.source.completedTurns > before.source.completedTurns && now.observed?.phase !== \\\"ready\\\" ? \\\"Turn ended, task not finished\\\" : undefined;\" }),\n target: Type.Optional(Type.String({ minLength: 1, description: \"Actor to wake as @handle or id; if omitted, the caller\" })),\n observe: Type.Optional(Type.String({ minLength: 1, description: \"Named operation without input whose result extends the observed state and is compared by difference\" })),\n instruction: Type.Optional(Type.String({ minLength: 1, maxLength: 2_000, description: \"Text appended to every wake, e.g. how the woken actor should react\" })),\n stallAfterSeconds: Type.Optional(Type.Integer({ minimum: 1, description: \"Seconds without an event of the observed actor after which the state reports stalledForSeconds\" })),\n}, { additionalProperties: false });\n\nexport const watchFunctions = (service: WatchServiceApi): ToolContributor => {\n const functions = [\n defineRunFunction({\n name: \"watch_create\", label: \"Create watch\",\n description: \"Observes an actor of this run and wakes another with a background message as soon as the condition, written as a TypeScript function body, returns a reason for the changed state. No model: the condition is type-checked on creation and afterwards run deterministically on every change of the observed state, once the observed actor has come to rest; stalledForSeconds appears after stallAfterSeconds without activity and again after each further period. An identical watch is not created twice.\",\n schema: createSchema, resultSchema: summarySchema, available,\n run: (scope, _toolCallId, input) => service.create(scope.caller.runId, scope.caller.actorId, input),\n }),\n defineRunFunction({\n name: \"watch_list\", label: \"List watches\",\n description: \"Lists the watches of this run with condition, number of wakes and last verdict.\",\n schema: Type.Object({}, { additionalProperties: false }), resultSchema: Type.Array(summarySchema), available,\n run: (scope) => service.list(scope.caller.runId),\n }),\n defineRunFunction({\n name: \"watch_remove\", label: \"Remove watch\",\n description: \"Removes a watch of this run; afterwards it no longer wakes.\",\n schema: Type.Object({\n id: Type.String({ minLength: 1, description: \"Id from watch_create or watch_list\" }),\n reason: Type.String({ minLength: 1, description: \"Reason for the removal\" }),\n }, { additionalProperties: false }),\n resultSchema: Type.Object({ removed: Type.Literal(true) }, { additionalProperties: false }), available,\n run: (scope, _toolCallId, input) => { service.remove(scope.caller.runId, input.id, input.reason); return { removed: true as const }; },\n }),\n ];\n return { name: \"ragents.watch\", descriptors: functions.map((fn) => toolDescriptorFrom(fn, available)), tools: () => functions };\n};\n", "import { randomUUID } from \"node:crypto\";\nimport { DomainError, type ExecutableActor, type JournalEvent, type JsonValue, type Orchestration, type RunView } from \"@ragents/engine\";\nimport { WATCH_PLUGIN_ID, type WatchDefinition, type WatchRequest, type WatchServiceApi, type WatchSummary, type WatchVerdict } from \"../contract.js\";\nimport { changesBetween, lastActivityOf, observeActor, watchableActorOf } from \"./observation.js\";\nimport type { WatchPredicate } from \"./condition.js\";\n\nconst CONDITION_CHARS = 4_000;\nconst INSTRUCTION_CHARS = 2_000;\nconst HISTORY_LENGTH = 10;\n\ntype StoredWatch = WatchDefinition & { baseline?: JsonValue; wakes: number; history?: WatchVerdict[] };\ninterface WatchState { version: 1; watches: StoredWatch[] }\n\ninterface WatchRuntime {\n definition: WatchDefinition;\n predicate: WatchPredicate;\n baseline?: JsonValue;\n wakes: number;\n lastEvaluated?: string;\n lastEvaluatedAt?: string;\n lastJudgedChanges?: string;\n history: WatchVerdict[];\n}\n\ninterface RunWatches {\n runId: string;\n unsubscribe: () => void;\n abort: AbortController;\n watches: Map<string, WatchRuntime>;\n debounce?: ReturnType<typeof setTimeout>;\n stallTimer?: ReturnType<typeof setInterval>;\n evaluating?: Promise<void>;\n dirty: boolean;\n}\n\nexport interface WatchServiceOptions {\n runtime: () => Orchestration;\n compile: (condition: string, signal: AbortSignal) => Promise<WatchPredicate>;\n observe: (runId: string, operationId: string, signal: AbortSignal) => Promise<JsonValue>;\n operationExists: (operationId: string) => boolean;\n debounceMs?: number;\n stallCheckMs?: number;\n now?: () => number;\n log?: (message: string, error?: unknown) => void;\n}\n\nconst summaryOf = (watch: WatchRuntime): WatchSummary => ({\n id: watch.definition.id,\n source: `@${watch.definition.sourceHandle}`,\n target: `@${watch.definition.targetHandle}`,\n condition: watch.definition.condition,\n ...(watch.definition.observe ? { observe: watch.definition.observe } : {}),\n ...(watch.definition.stallAfterSeconds ? { stallAfterSeconds: watch.definition.stallAfterSeconds } : {}),\n wakes: watch.wakes,\n ...(watch.lastEvaluatedAt ? { lastEvaluatedAt: watch.lastEvaluatedAt } : {}),\n ...(watch.history.length ? { lastVerdict: watch.history[watch.history.length - 1] } : {}),\n});\n\nconst invalid = (message: string) => new DomainError(\"watch-invalid\", message, 400);\n\nconst cleanText = (value: string | undefined, field: string, limit: number): string | undefined => {\n if (value === undefined) return undefined;\n const text = value.trim();\n if (!text) throw invalid(`${field} must not be empty.`);\n if (text.length > limit) throw invalid(`${field} may contain at most ${limit} characters.`);\n return text;\n};\n\nexport const wakeMessage = (definition: WatchDefinition, reason: string, changes: readonly string[]): string => [\n `The watch wakes you: ${reason}`,\n `Changes at @${definition.sourceHandle} since the last wake:\\n${changes.length ? changes.map((line) => `- ${line}`).join(\"\\n\") : \"- none\"}`,\n ...(definition.instruction ? [definition.instruction] : []),\n].join(\"\\n\");\n\nexport class WatchService implements WatchServiceApi {\n readonly #options: WatchServiceOptions;\n readonly #runs = new Map<string, RunWatches>();\n #closed = false;\n\n constructor(options: WatchServiceOptions) {\n this.#options = options;\n }\n\n #now(): number {\n return this.#options.now ? this.#options.now() : Date.parse(this.#options.runtime().now());\n }\n\n async create(runId: string, callerActorId: string, request: WatchRequest): Promise<WatchSummary> {\n const runtime = this.#options.runtime();\n const view = runtime.view(runId);\n const source = watchableActorOf(view, request.source);\n if (!source) throw invalid(`The observed actor ${request.source} does not exist in this run.`);\n const target = request.target ? watchableActorOf(view, request.target) : watchableActorOf(view, callerActorId);\n if (!target) throw invalid(`The actor to wake ${request.target ?? callerActorId} does not exist in this run or is not an agent.`);\n const condition = cleanText(request.condition, \"condition\", CONDITION_CHARS)!;\n const instruction = cleanText(request.instruction, \"instruction\", INSTRUCTION_CHARS);\n if (request.observe !== undefined && !this.#options.operationExists(request.observe)) throw invalid(`The operation ${request.observe} is not registered.`);\n if (request.stallAfterSeconds !== undefined && (!Number.isInteger(request.stallAfterSeconds) || request.stallAfterSeconds < 1)) throw invalid(\"stallAfterSeconds must be a positive integer.\");\n const run = this.#ensure(runId);\n const existing = [...run.watches.values()].find((watch) => watch.definition.sourceActorId === source.id && watch.definition.targetActorId === target.id && watch.definition.condition === condition);\n if (existing) return summaryOf(existing);\n const predicate = await this.#options.compile(condition, run.abort.signal);\n if (this.#runs.get(runId) !== run) throw invalid(\"The run ended while the watch was being created.\");\n const definition: WatchDefinition = {\n id: `watch_${randomUUID()}`,\n sourceActorId: source.id,\n sourceHandle: source.handle,\n targetActorId: target.id,\n targetHandle: target.handle,\n condition,\n ...(request.observe !== undefined ? { observe: request.observe } : {}),\n ...(instruction !== undefined ? { instruction } : {}),\n ...(request.stallAfterSeconds !== undefined ? { stallAfterSeconds: request.stallAfterSeconds } : {}),\n createdBy: callerActorId,\n };\n const watch: WatchRuntime = { definition, predicate, wakes: 0, history: [] };\n run.watches.set(definition.id, watch);\n this.#persist(run);\n this.#updateStallTimer(run);\n this.#schedule(run, true);\n return summaryOf(watch);\n }\n\n list(runId: string): WatchSummary[] {\n return [...(this.#runs.get(runId)?.watches.values() ?? [])].map(summaryOf);\n }\n\n remove(runId: string, watchId: string, reason: string): void {\n const run = this.#runs.get(runId);\n const watch = run?.watches.get(watchId);\n if (!run || !watch) throw new DomainError(\"watch-unknown\", `The watch ${watchId} does not exist in this run.`, 404);\n if (!reason.trim()) throw invalid(\"reason must not be empty.\");\n run.watches.delete(watchId);\n this.#persist(run);\n this.#updateStallTimer(run);\n }\n\n async prepare(runId: string): Promise<void> {\n if (this.#closed || this.#runs.has(runId)) return;\n const runtime = this.#options.runtime();\n if (runtime.events(runId).length === 0) return;\n const stored = this.#stored(runtime.view(runId));\n if (stored.length === 0) return;\n const run = this.#ensure(runId);\n for (const entry of stored) {\n const { baseline, wakes, history, ...definition } = entry;\n const predicate = await this.#options.compile(definition.condition, run.abort.signal);\n if (this.#runs.get(runId) !== run) return;\n run.watches.set(definition.id, { definition, predicate, ...(baseline !== undefined ? { baseline } : {}), wakes, history: history ?? [] });\n }\n this.#updateStallTimer(run);\n this.#schedule(run, true);\n }\n\n stop(runId: string): void {\n const run = this.#runs.get(runId);\n if (!run) return;\n this.#runs.delete(runId);\n run.unsubscribe();\n run.abort.abort();\n if (run.debounce) clearTimeout(run.debounce);\n if (run.stallTimer) clearInterval(run.stallTimer);\n }\n\n shutdown(): void {\n for (const runId of [...this.#runs.keys()]) this.stop(runId);\n this.#closed = true;\n }\n\n #stored(view: RunView): StoredWatch[] {\n const state = view.pluginStates.find((entry) => entry.pluginId === WATCH_PLUGIN_ID && entry.scope.kind === \"run\")?.state as unknown as WatchState | undefined;\n return state?.watches ?? [];\n }\n\n #ensure(runId: string): RunWatches {\n if (this.#closed) throw new Error(\"The watch service has ended.\");\n const existing = this.#runs.get(runId);\n if (existing) return existing;\n const runtime = this.#options.runtime();\n const run: RunWatches = {\n runId,\n unsubscribe: runtime.subscribe((events) => { if (events.some((event) => event.runId === runId)) this.#schedule(run); }),\n abort: new AbortController(),\n watches: new Map(),\n dirty: false,\n };\n this.#runs.set(runId, run);\n return run;\n }\n\n #persist(run: RunWatches): void {\n const runtime = this.#options.runtime();\n const view = runtime.view(run.runId);\n const state: WatchState = { version: 1, watches: [...run.watches.values()].map((watch) => ({ ...watch.definition, ...(watch.baseline !== undefined ? { baseline: watch.baseline } : {}), wakes: watch.wakes, history: watch.history })) };\n runtime.replacePluginState({ actorId: view.ownerId, commandId: `ragents.watch:state:${randomUUID()}` }, run.runId, { pluginId: WATCH_PLUGIN_ID, scope: { kind: \"run\" }, state: state as unknown as JsonValue });\n }\n\n #updateStallTimer(run: RunWatches): void {\n const needed = [...run.watches.values()].some((watch) => watch.definition.stallAfterSeconds !== undefined);\n if (!needed && run.stallTimer) { clearInterval(run.stallTimer); run.stallTimer = undefined; }\n if (needed && !run.stallTimer) {\n run.stallTimer = setInterval(() => this.#schedule(run), this.#options.stallCheckMs ?? 30_000);\n run.stallTimer.unref();\n }\n }\n\n #schedule(run: RunWatches, immediate = false): void {\n if (this.#runs.get(run.runId) !== run) return;\n if (run.evaluating) { run.dirty = true; return; }\n if (immediate) {\n if (run.debounce) { clearTimeout(run.debounce); run.debounce = undefined; }\n this.#start(run);\n return;\n }\n if (run.debounce) return;\n run.debounce = setTimeout(() => { run.debounce = undefined; this.#start(run); }, this.#options.debounceMs ?? 1_000);\n run.debounce.unref();\n }\n\n #start(run: RunWatches): void {\n run.evaluating = this.#evaluateAll(run).finally(() => {\n run.evaluating = undefined;\n if (run.dirty) { run.dirty = false; this.#schedule(run); }\n });\n }\n\n async #evaluateAll(run: RunWatches): Promise<void> {\n for (const watch of [...run.watches.values()]) {\n if (this.#runs.get(run.runId) !== run || !run.watches.has(watch.definition.id)) return;\n try { await this.#evaluate(run, watch); }\n catch (error) {\n if (run.abort.signal.aborted) return;\n (this.#options.log ?? ((message, cause) => console.error(message, cause)))(`Watch ${watch.definition.id} in run ${run.runId} could not evaluate:`, error);\n }\n }\n }\n\n async #evaluate(run: RunWatches, watch: WatchRuntime): Promise<void> {\n const runtime = this.#options.runtime();\n const view = runtime.view(run.runId);\n const source = view.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === watch.definition.sourceActorId);\n const target = view.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === watch.definition.targetActorId);\n if (!source || !target || target.lifecycle.kind === \"stopped\") return;\n const observation = await this.#observe(run, watch, view, source, runtime.events(run.runId));\n if (this.#runs.get(run.runId) !== run || !run.watches.has(watch.definition.id)) return;\n const key = JSON.stringify(observation);\n if (watch.baseline === undefined) {\n watch.baseline = observation;\n watch.lastEvaluated = key;\n this.#persist(run);\n return;\n }\n if (key === watch.lastEvaluated) return;\n const current = runtime.view(run.runId);\n const busy = current.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === target.id)?.lifecycle.kind !== \"idle\"\n || current.inputs.some((input) => input.actorId === target.id && input.lifecycle.kind === \"pending\")\n || current.actions.some((action) => action.askedBy === target.id && action.status === \"pending\");\n if (busy) return;\n const unsettled = source.lifecycle.kind === \"running\" || current.inputs.some((input) => input.actorId === source.id && input.lifecycle.kind === \"pending\");\n if (unsettled && !(typeof observation === \"object\" && observation !== null && \"stalledForSeconds\" in observation)) return;\n const changes = changesBetween(watch.baseline, observation);\n const judged = JSON.stringify(changes);\n if (changes.length === 0 || judged === watch.lastJudgedChanges) { watch.lastEvaluated = key; return; }\n const reason = watch.predicate(observation, watch.baseline);\n const at = new Date(this.#now()).toISOString();\n watch.lastEvaluated = key;\n watch.lastEvaluatedAt = at;\n watch.lastJudgedChanges = judged;\n watch.history = [...watch.history, { at, wake: reason !== undefined, reason: reason ?? \"Condition not met\", changes }].slice(-HISTORY_LENGTH);\n if (reason === undefined) {\n if (changes.some((line) => !line.startsWith(\"stalledForSeconds:\"))) this.#persist(run);\n return;\n }\n runtime.enqueueInput({ actorId: current.ownerId, commandId: `ragents.watch:wake:${watch.definition.id}:${randomUUID()}` }, run.runId, {\n actorId: target.id,\n presentation: \"background\",\n content: wakeMessage(watch.definition, reason, changes),\n });\n watch.baseline = observation;\n watch.wakes += 1;\n this.#persist(run);\n }\n\n async #observe(run: RunWatches, watch: WatchRuntime, view: RunView, source: ExecutableActor, events: readonly JournalEvent[]): Promise<JsonValue> {\n const observed = watch.definition.observe ? await this.#options.observe(run.runId, watch.definition.observe, run.abort.signal) : undefined;\n const stall = watch.definition.stallAfterSeconds;\n const age = stall ? this.#now() - Date.parse(lastActivityOf(events, source)) : 0;\n return {\n source: observeActor(view, source.id) as unknown as JsonValue,\n ...(observed !== undefined ? { observed } : {}),\n ...(stall && age >= stall * 1_000 ? { stalledForSeconds: Math.floor(age / (stall * 1_000)) * stall } : {}),\n };\n }\n}\n", "import { actorByReference, type ExecutableActor, type JournalEvent, type JsonValue, type RunView } from \"@ragents/engine\";\n\nconst OUTPUT_CHARS = 600;\n\nexport interface ActorObservation {\n lifecycle: \"idle\" | \"running\" | \"stopped\";\n stopReason?: string;\n completedTurns: number;\n lastTurn?: { status: string; reason?: string };\n pendingInputs: number;\n pendingActions: number;\n lastOutput?: string;\n}\n\nexport const watchableActorOf = (view: RunView, reference: string): ExecutableActor | undefined => {\n const actor = actorByReference(view.actors, reference);\n return actor?.kind === \"human\" ? undefined : actor;\n};\n\nexport const observeActor = (view: RunView, actorId: string): ActorObservation | undefined => {\n const actor = view.actors.find((candidate): candidate is ExecutableActor => candidate.kind !== \"human\" && candidate.id === actorId);\n if (!actor) return undefined;\n const turns = view.turns.filter((turn) => turn.actorId === actorId);\n const last = turns.at(-1);\n const output = turns.findLast((turn) => turn.status !== \"running\" && turn.outputs.length > 0)?.outputs.at(-1)?.text;\n return {\n lifecycle: actor.lifecycle.kind,\n ...(actor.lifecycle.kind === \"stopped\" ? { stopReason: actor.lifecycle.reason } : {}),\n completedTurns: turns.filter((turn) => turn.status !== \"running\").length,\n ...(last ? { lastTurn: { status: last.status, ...(last.reason ? { reason: last.reason } : {}) } } : {}),\n pendingInputs: view.inputs.filter((input) => input.actorId === actorId && input.lifecycle.kind === \"pending\").length,\n pendingActions: view.actions.filter((action) => action.askedBy === actorId && action.status === \"pending\").length,\n ...(output ? { lastOutput: output.length > OUTPUT_CHARS ? `...${output.slice(-OUTPUT_CHARS)}` : output } : {}),\n };\n};\n\nexport const lastActivityOf = (events: readonly JournalEvent[], actor: ExecutableActor): string => {\n const event = events.findLast((candidate) => candidate.actorId === actor.id\n || candidate.type === \"actor.input.enqueued\" && candidate.payload.actorId === actor.id\n || (candidate.type === \"turn.finished\" || candidate.type === \"turn.interrupted\") && candidate.actorId === actor.id);\n return event?.occurredAt ?? actor.createdAt;\n};\n\nconst isObject = (value: JsonValue): value is { [key: string]: JsonValue } => typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const flattenJson = (value: JsonValue, prefix = \"\", into = new Map<string, string>()): Map<string, string> => {\n if (Array.isArray(value)) {\n if (value.length === 0 && prefix) into.set(prefix, \"[]\");\n value.forEach((entry, index) => flattenJson(entry, prefix ? `${prefix}.${index}` : String(index), into));\n } else if (isObject(value)) {\n const keys = Object.keys(value);\n if (keys.length === 0 && prefix) into.set(prefix, \"{}\");\n for (const key of keys) flattenJson(value[key], prefix ? `${prefix}.${key}` : key, into);\n } else into.set(prefix || \"$\", JSON.stringify(value));\n return into;\n};\n\nexport const changesBetween = (before: JsonValue | undefined, after: JsonValue): string[] => {\n const previous = before === undefined ? new Map<string, string>() : flattenJson(before);\n const current = flattenJson(after);\n const lines: string[] = [];\n for (const [path, value] of current) {\n const old = previous.get(path);\n if (old === undefined) lines.push(`${path}: ${value}${before === undefined ? \"\" : \" (new)\"}`);\n else if (old !== value) lines.push(`${path}: ${old} -> ${value}`);\n }\n for (const path of previous.keys()) if (!current.has(path)) lines.push(`${path}: removed`);\n return lines;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["randomUUID", "watch", "randomUUID"]
|
|
7
7
|
}
|
|
@@ -136,8 +136,8 @@
|
|
|
136
136
|
]
|
|
137
137
|
}
|
|
138
138
|
},
|
|
139
|
-
"stand": "
|
|
140
|
-
"sourceStand": "
|
|
139
|
+
"stand": "50910db884fc0812f90824613eb13db90bd612a008fad1af6e2137d517b781da",
|
|
140
|
+
"sourceStand": "48d29d061e41e08d89a3a51e802d9a93c683cbb09369a3b0fa500b4ab4e04ed4",
|
|
141
141
|
"server": "server/index.js",
|
|
142
142
|
"web": {
|
|
143
143
|
"entry": "web/index.js",
|