@schlenkr/ragents 0.1.10 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/apps/server/package.json +1 -1
- package/apps/server/src/access-projection.ts +6 -6
- package/apps/server/src/access-service.ts +3 -3
- package/apps/server/src/access-session.ts +19 -19
- package/apps/server/src/api/contracts.ts +29 -29
- package/apps/server/src/api/core-methods.ts +17 -17
- package/apps/server/src/api/delivery.ts +2 -2
- package/apps/server/src/api/reference.ts +27 -27
- package/apps/server/src/api/rights.ts +18 -18
- package/apps/server/src/chat-handler.ts +5 -5
- package/apps/server/src/config-definition.ts +37 -10
- package/apps/server/src/config-file.ts +49 -49
- package/apps/server/src/config.ts +2 -0
- package/apps/server/src/data-directory.ts +2 -2
- package/apps/server/src/external-access.ts +1 -1
- package/apps/server/src/folder-install.ts +1 -1
- package/apps/server/src/help-files.ts +1 -1
- package/apps/server/src/host-api.json +6 -1
- package/apps/server/src/host-api.ts +3 -2
- package/apps/server/src/host-record.ts +3 -3
- package/apps/server/src/host-resolution-hooks.mjs +4 -4
- package/apps/server/src/host-version.ts +17 -17
- package/apps/server/src/host-web.ts +5 -5
- package/apps/server/src/main.ts +6 -6
- package/apps/server/src/missing-environment.ts +6 -6
- package/apps/server/src/parent-watch.ts +4 -4
- package/apps/server/src/plugin-build/build.ts +38 -38
- package/apps/server/src/plugin-build/host-api-names.ts +7 -7
- package/apps/server/src/plugin-build/plugin-description.ts +15 -15
- package/apps/server/src/plugin-build/typecheck.ts +1 -1
- package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
- package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
- package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
- package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
- package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
- package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
- package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
- package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
- package/apps/server/src/plugin-support/front-matter.ts +6 -6
- package/apps/server/src/plugin-support/http.ts +2 -2
- package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
- package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
- package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
- package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
- package/apps/server/src/plugin-support/model-aliases.ts +30 -20
- package/apps/server/src/plugin-support/model-choice.ts +15 -15
- package/apps/server/src/plugin-support/model-completion.ts +44 -23
- package/apps/server/src/plugin-support/model-providers.ts +170 -0
- package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
- package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
- package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
- package/apps/server/src/plugin-support/plugin-config.ts +3 -3
- package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
- package/apps/server/src/plugin-support/plugins-root.ts +2 -2
- package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
- package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
- package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
- package/apps/server/src/plugin-support/product-relay.ts +9 -9
- package/apps/server/src/plugin-support/product-start-options.ts +4 -4
- package/apps/server/src/plugin-support/prompt.ts +1 -1
- package/apps/server/src/plugin-support/provision.ts +8 -8
- package/apps/server/src/plugin-support/run-scripts.ts +17 -17
- package/apps/server/src/plugin-support/skills.ts +18 -18
- package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
- package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
- package/apps/server/src/plugin-support/system-prompts.ts +11 -11
- package/apps/server/src/plugin-support/thinking-level.ts +2 -2
- package/apps/server/src/plugin-support/tool-availability.ts +2 -2
- package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
- package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
- package/apps/server/src/plugin-support/zip.ts +7 -7
- package/apps/server/src/profile/bundle-manifest.ts +27 -27
- package/apps/server/src/profile/compose.ts +12 -7
- package/apps/server/src/profile/plugin-discovery.ts +14 -14
- package/apps/server/src/profile/provisioning.ts +5 -5
- package/apps/server/src/profile-target.ts +10 -10
- package/apps/server/src/protocol.ts +2 -2
- package/apps/server/src/provider.ts +62 -57
- package/apps/server/src/ragents/actor-chat-history.ts +8 -8
- package/apps/server/src/ragents/chat-text-positions.ts +2 -2
- package/apps/server/src/ragents/coordinator.ts +2 -2
- package/apps/server/src/ragents/engine.ts +23 -23
- package/apps/server/src/ragents/global-chat.ts +8 -8
- package/apps/server/src/ragents/host-services.ts +6 -3
- package/apps/server/src/ragents/journal-chat-events.ts +1 -1
- package/apps/server/src/ragents/run-owner.ts +2 -2
- package/apps/server/src/ragents/session.ts +49 -49
- package/apps/server/src/ragents/typescript-tools.ts +12 -12
- package/apps/server/src/ragents/workspace-runtime.ts +28 -28
- package/apps/server/src/rpc/dispatcher.ts +19 -19
- package/apps/server/src/rpc/http-transport.ts +11 -11
- package/apps/server/src/rpc/stdio-transport.ts +3 -3
- package/apps/server/src/run-preparation-input.ts +5 -5
- package/apps/server/src/run-preparation.ts +24 -24
- package/apps/server/src/run-transfer.ts +39 -39
- package/apps/server/src/server.ts +48 -48
- package/apps/server/src/settings.ts +1 -1
- package/apps/server/src/startup.ts +3 -3
- package/apps/server/src/title-compactor.ts +9 -9
- package/apps/server/src/title-settings.ts +3 -3
- package/apps/server/src/web-bundles.ts +2 -2
- package/apps/server/src/web-stylesheet.ts +2 -2
- package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-CpPi6QLr.js} +1 -1
- package/apps/web/dist/assets/main-DJmCHGzM.js +11 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-q-mf1kLN.js +608 -0
- package/apps/web/dist/assets/runPanel-nk_aMxSn.js +21 -0
- package/apps/web/dist/help/guide-access.html +5 -5
- package/apps/web/dist/help/guide-access.md +2 -2
- package/apps/web/dist/help/guide-clients.html +53 -54
- package/apps/web/dist/help/guide-clients.md +50 -51
- package/apps/web/dist/help/guide-distributed.html +12 -7
- package/apps/web/dist/help/guide-distributed.md +9 -4
- package/apps/web/dist/help/guide-functions.html +3 -3
- package/apps/web/dist/help/guide-getting-started.html +24 -15
- package/apps/web/dist/help/guide-getting-started.md +22 -12
- package/apps/web/dist/help/guide-ideas.html +3 -3
- package/apps/web/dist/help/guide-plugins.html +5 -4
- package/apps/web/dist/help/guide-plugins.md +2 -1
- package/apps/web/dist/help/guide-programs.html +3 -3
- package/apps/web/dist/help/guide-runtime.html +6 -6
- package/apps/web/dist/help/guide-runtime.md +3 -3
- package/apps/web/dist/help/guide.html +3 -3
- package/apps/web/dist/help/index.html +196 -144
- package/apps/web/dist/help/mini-app.css +6 -0
- package/apps/web/dist/help/mini-app.js +14 -14
- package/apps/web/dist/host-web.json +91 -91
- package/apps/web/dist/index.html +3 -3
- package/apps/web/dist/run-panel.html +3 -3
- package/apps/web/package.json +1 -1
- package/apps/web/src/AccessContext.tsx +15 -15
- package/apps/web/src/App.tsx +13 -13
- package/apps/web/src/DiffCode.tsx +2 -2
- package/apps/web/src/HelpDialog.tsx +3 -3
- package/apps/web/src/Overview.tsx +13 -13
- package/apps/web/src/PluginActivation.ts +1 -1
- package/apps/web/src/PluginChat.tsx +15 -15
- package/apps/web/src/PluginFailureNotice.tsx +1 -1
- package/apps/web/src/PluginRegistry.tsx +44 -44
- package/apps/web/src/RunPreparationChat.tsx +11 -11
- package/apps/web/src/RunStore.ts +1 -1
- package/apps/web/src/SessionList.tsx +14 -14
- package/apps/web/src/SettingsModal.tsx +112 -112
- package/apps/web/src/StartOptions.tsx +11 -11
- package/apps/web/src/StartSelection.tsx +11 -11
- package/apps/web/src/StartTiles.tsx +8 -8
- package/apps/web/src/SurfaceShortcuts.tsx +3 -3
- package/apps/web/src/ThemeSettings.tsx +8 -8
- package/apps/web/src/TitleModelSettings.tsx +13 -13
- package/apps/web/src/WorkspacePanel.tsx +9 -9
- package/apps/web/src/access-session.ts +4 -4
- package/apps/web/src/access-token.ts +5 -5
- package/apps/web/src/actor-conversation.ts +3 -3
- package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
- package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
- package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
- package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
- package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
- package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
- package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
- package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
- package/apps/web/src/api.ts +7 -7
- package/apps/web/src/chat/QuasselHost.tsx +1 -1
- package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
- package/apps/web/src/chat/chat-target.ts +3 -3
- package/apps/web/src/chat/requests.ts +2 -2
- package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
- package/apps/web/src/chat-view-settings.tsx +5 -6
- package/apps/web/src/diff-view.css +1 -1
- package/apps/web/src/highlighting.css +1 -1
- package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
- package/apps/web/src/lib/labels.ts +6 -6
- package/apps/web/src/main.tsx +4 -4
- package/apps/web/src/offered-machines.ts +2 -2
- package/apps/web/src/page-opener.tsx +1 -1
- package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
- package/apps/web/src/panel/LoginForm.tsx +6 -6
- package/apps/web/src/panel/PanelDialogs.tsx +22 -22
- package/apps/web/src/panel/PanelHeader.tsx +2 -2
- package/apps/web/src/panel/PanelPage.tsx +1 -1
- package/apps/web/src/panel/RunLine.tsx +4 -4
- package/apps/web/src/panel/RunsPage.tsx +15 -15
- package/apps/web/src/panel/StartPage.tsx +26 -26
- package/apps/web/src/panel/connection-state.ts +9 -9
- package/apps/web/src/panel/contract.ts +28 -28
- package/apps/web/src/panel.tsx +1 -1
- package/apps/web/src/plugin-bootstrap.ts +5 -5
- package/apps/web/src/product/ModelControl.tsx +3 -3
- package/apps/web/src/product/ProductModelSettings.tsx +16 -16
- package/apps/web/src/product/SystemPromptControl.tsx +11 -11
- package/apps/web/src/product/model-settings.ts +2 -2
- package/apps/web/src/rpc/client.ts +16 -16
- package/apps/web/src/rpc.ts +1 -1
- package/apps/web/src/run-overview.ts +1 -1
- package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
- package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
- package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
- package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
- package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
- package/apps/web/src/run-panel/clipboard.ts +3 -3
- package/apps/web/src/run-panel/host-contract.ts +5 -5
- package/apps/web/src/run-panel/host.ts +15 -15
- package/apps/web/src/run-panel/input-bridge.ts +1 -1
- package/apps/web/src/run-panel/run-panel-location.ts +5 -5
- package/apps/web/src/run-panel/use-session-list.ts +1 -1
- package/apps/web/src/run-panel/workspace-state.ts +3 -3
- package/apps/web/src/run-panel.tsx +4 -4
- package/apps/web/src/run-preparation.ts +2 -2
- package/apps/web/src/run-view.ts +3 -3
- package/apps/web/src/settings-contributions.ts +32 -32
- package/apps/web/src/theme.ts +9 -9
- package/apps/web/src/title-model-settings.ts +6 -6
- package/apps/web/src/ui/ListDetail.tsx +9 -9
- package/apps/web/src/ui/dialog.tsx +2 -2
- package/apps/web/src/ui/modal-controller.ts +3 -3
- package/apps/web/src/ui/modal.tsx +2 -2
- package/apps/web/src/ui/popover.tsx +1 -1
- package/apps/web/src/ui/relative-time.ts +8 -8
- package/apps/web/src/ui/startup-notice.tsx +2 -2
- package/apps/web/src/ui/state-icon.tsx +1 -1
- package/apps/web/src/ui/state-vocabulary.ts +16 -16
- package/apps/web/src/ui/stop-button.tsx +2 -2
- package/bundles/ragents.activity/ragents-bundle.json +3 -3
- package/bundles/ragents.activity/web/classes.json +1 -1
- package/bundles/ragents.activity/web/index.js +1 -1
- package/bundles/ragents.activity/web/index.js.map +2 -2
- package/bundles/ragents.actor-programs/ragents-bundle.json +3 -3
- package/bundles/ragents.actor-programs/server/index.js +225 -225
- package/bundles/ragents.actor-programs/server/index.js.map +2 -2
- package/bundles/ragents.actor-programs/web/classes.json +1 -1
- package/bundles/ragents.actor-programs/web/index.js +1 -1
- package/bundles/ragents.actor-programs/web/index.js.map +3 -3
- package/bundles/ragents.ask/ragents-bundle.json +3 -3
- package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
- package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
- package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
- package/bundles/ragents.ask/server/index.js +23 -23
- package/bundles/ragents.ask/server/index.js.map +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
- package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
- package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
- package/bundles/ragents.ask/web/classes.json +1 -1
- package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
- package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
- package/bundles/ragents.ask/web/exports/web/api.js +1 -1
- package/bundles/ragents.ask/web/index.js +1 -1
- package/bundles/ragents.ask/web/index.js.map +2 -2
- package/bundles/ragents.browser/executor/index.mjs +35 -35
- package/bundles/ragents.browser/executor/index.mjs.map +2 -2
- package/bundles/ragents.browser/ragents-bundle.json +3 -3
- package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
- package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
- package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
- package/bundles/ragents.browser/server/index.js +31 -31
- package/bundles/ragents.browser/server/index.js.map +2 -2
- package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
- package/bundles/ragents.documents/prompt.hbs +1 -1
- package/bundles/ragents.documents/ragents-bundle.json +3 -3
- package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
- package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
- package/bundles/ragents.documents/server/exports/contract.js +1 -1
- package/bundles/ragents.documents/server/index.js +26 -26
- package/bundles/ragents.documents/server/index.js.map +2 -2
- package/bundles/ragents.documents/web/classes.json +1 -1
- package/bundles/ragents.documents/web/index.js +1 -1
- package/bundles/ragents.documents/web/index.js.map +3 -3
- package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
- package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-fsharp/ragents-bundle.json +3 -3
- package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
- package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
- package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
- package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
- package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
- package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-roslyn/ragents-bundle.json +3 -3
- package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
- package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
- package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
- package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
- package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
- package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-typescript/ragents-bundle.json +3 -3
- package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
- package/bundles/ragents.lsp-typescript/web/index.js +1 -1
- package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
- package/bundles/ragents.model-relay/ragents-bundle.json +8 -4
- package/bundles/ragents.model-relay/server/index.js +25 -21
- package/bundles/ragents.model-relay/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/ragents-bundle.json +3 -3
- package/bundles/ragents.orchestration/server/index.js +28 -28
- package/bundles/ragents.orchestration/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
- package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
- package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
- package/bundles/ragents.orchestration/web/classes.json +1 -1
- package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
- package/bundles/ragents.orchestration/web/index.js +8 -8
- package/bundles/ragents.orchestration/web/index.js.map +2 -2
- package/bundles/ragents.overseer/ragents-bundle.json +3 -3
- package/bundles/ragents.overseer/server/index.js +98 -98
- package/bundles/ragents.overseer/server/index.js.map +2 -2
- package/bundles/ragents.overseer/web/classes.json +1 -1
- package/bundles/ragents.overseer/web/index.js +1 -1
- package/bundles/ragents.overseer/web/index.js.map +2 -2
- package/bundles/ragents.processes/ragents-bundle.json +3 -3
- package/bundles/ragents.processes/server/index.js +11 -11
- package/bundles/ragents.processes/server/index.js.map +2 -2
- package/bundles/ragents.processes/web/classes.json +1 -1
- package/bundles/ragents.processes/web/index.js +3 -3
- package/bundles/ragents.processes/web/index.js.map +2 -2
- package/bundles/ragents.product/ragents-bundle.json +3 -3
- package/bundles/ragents.product/server/index.js +12 -13
- package/bundles/ragents.product/server/index.js.map +2 -2
- package/bundles/ragents.product/web/classes.json +1 -1
- package/bundles/ragents.product/web/index.js +1 -1
- package/bundles/ragents.product/web/index.js.map +2 -2
- package/bundles/ragents.profile-distribution/ragents-bundle.json +3 -3
- package/bundles/ragents.profile-distribution/server/index.js +31 -31
- package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
- package/bundles/ragents.reference/ragents-bundle.json +3 -3
- package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
- package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
- package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
- package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
- package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
- package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
- package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
- package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
- package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
- package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
- package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
- package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
- package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
- package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
- package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
- package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
- package/bundles/ragents.reference/web/classes.json +1 -1
- package/bundles/ragents.reference/web/index.js +1 -1
- package/bundles/ragents.reference/web/index.js.map +2 -2
- package/bundles/ragents.todo/ragents-bundle.json +3 -3
- package/bundles/ragents.todo/server/index.js +5 -8
- package/bundles/ragents.todo/server/index.js.map +2 -2
- package/bundles/ragents.todo/web/classes.json +1 -1
- package/bundles/ragents.todo/web/index.js +1 -1
- package/bundles/ragents.todo/web/index.js.map +2 -2
- package/bundles/ragents.transcript/ragents-bundle.json +3 -3
- package/bundles/ragents.transcript/server/index.js +11 -11
- package/bundles/ragents.transcript/server/index.js.map +2 -2
- package/bundles/ragents.watch/ragents-bundle.json +3 -3
- package/bundles/ragents.watch/server/index.js +48 -48
- package/bundles/ragents.watch/server/index.js.map +2 -2
- package/bundles/ragents.workspace/ragents-bundle.json +3 -3
- package/bundles/ragents.workspace/server/index.js +83 -83
- package/bundles/ragents.workspace/server/index.js.map +2 -2
- package/bundles/ragents.workspace/web/classes.json +1 -1
- package/bundles/ragents.workspace/web/index.js +1 -1
- package/bundles/ragents.workspace/web/index.js.map +2 -2
- package/package.json +4 -4
- package/packages/agent/dist/core/model-runtime.d.ts +7 -2
- package/packages/agent/dist/index.d.ts +1 -1
- package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
- package/packages/agent/src/core/compaction/utils.ts +1 -1
- package/packages/agent/src/core/model-runtime.ts +45 -5
- package/packages/agent/src/index.ts +1 -1
- package/packages/agent/src/loop/agent-loop.ts +2 -2
- package/packages/ai/dist/models.d.ts +1 -0
- package/packages/ai/dist/models.generated.d.ts +4544 -983
- package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
- package/packages/ai/src/api/ai-sdk.ts +33 -7
- package/packages/ai/src/api-registry.ts +1 -1
- package/packages/ai/src/index.ts +2 -2
- package/packages/ai/src/models.generated.ts +1 -1
- package/packages/ai/src/models.ts +1 -1
- package/packages/ai/src/providers/openrouter.models.ts +3725 -552
- package/packages/ragents/src/access.ts +12 -12
- package/packages/ragents/src/agents/actor-input.ts +33 -33
- package/packages/ragents/src/agents/catalog.ts +1 -1
- package/packages/ragents/src/agents/delivery.ts +17 -17
- package/packages/ragents/src/agents/plugins.ts +1 -1
- package/packages/ragents/src/agents/scheduler.ts +7 -7
- package/packages/ragents/src/agents/schemas.ts +1 -1
- package/packages/ragents/src/agents/tool-orientation.ts +4 -4
- package/packages/ragents/src/agents/tools.ts +20 -20
- package/packages/ragents/src/agents/toolset.ts +5 -5
- package/packages/ragents/src/agents/workspaces.ts +1 -1
- package/packages/ragents/src/domain/events.ts +1 -1
- package/packages/ragents/src/domain/model.ts +5 -5
- package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
- package/packages/ragents/src/drivers/agent-turn.ts +4 -4
- package/packages/ragents/src/drivers/agent.ts +2 -2
- package/packages/ragents/src/drivers/attachments.ts +4 -4
- package/packages/ragents/src/http/contracts.ts +14 -14
- package/packages/ragents/src/http/methods.ts +6 -6
- package/packages/ragents/src/plugin-host.ts +119 -119
- package/packages/ragents/src/plugin-types.ts +16 -16
- package/packages/ragents/src/rpc/contract.ts +5 -5
- package/packages/ragents/src/rpc/contribution.ts +2 -2
- package/packages/ragents/src/rpc/peer.ts +11 -11
- package/packages/ragents/src/rpc/protocol.ts +2 -2
- package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
- package/packages/ragents/src/runtime/journal-storage.ts +1 -1
- package/packages/ragents/src/runtime/journal.ts +10 -10
- package/packages/ragents/src/runtime/orchestration.ts +8 -8
- package/packages/ragents/src/runtime/stop.ts +2 -2
- package/packages/ragents/src/script/mediators.ts +35 -35
- package/packages/ragents/src/typescript/async-compiler.ts +14 -14
- package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
- package/packages/ragents/src/typescript/compiler.ts +7 -7
- package/packages/ragents/src/typescript/snippet.ts +5 -5
- package/packages/workspace-executor/src/bash-launch.ts +13 -13
- package/packages/workspace-executor/src/commands.ts +18 -18
- package/packages/workspace-executor/src/context.ts +15 -15
- package/packages/workspace-executor/src/contributions.ts +44 -44
- package/packages/workspace-executor/src/errors.ts +1 -1
- package/packages/workspace-executor/src/executor.ts +16 -16
- package/packages/workspace-executor/src/files.ts +31 -31
- package/packages/workspace-executor/src/index.ts +1 -1
- package/packages/workspace-executor/src/language-server/contract.ts +2 -2
- package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
- package/packages/workspace-executor/src/language-server/host.ts +36 -36
- package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
- package/packages/workspace-executor/src/language-server/module.ts +11 -11
- package/packages/workspace-executor/src/language-server/roots.ts +3 -3
- package/packages/workspace-executor/src/language-server/session.ts +15 -15
- package/packages/workspace-executor/src/language-server/workspace-solutions.ts +3 -3
- package/packages/workspace-executor/src/managed-process.ts +12 -12
- package/packages/workspace-executor/src/module.ts +8 -8
- package/packages/workspace-executor/src/modules.ts +3 -3
- package/packages/workspace-executor/src/paths.ts +11 -11
- package/packages/workspace-executor/src/process-sandbox.ts +3 -3
- package/packages/workspace-executor/src/processes/module.ts +3 -3
- package/packages/workspace-executor/src/processes/process-table.ts +20 -20
- package/packages/workspace-executor/src/processes/scanner.ts +3 -3
- package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
- package/packages/workspace-executor/src/processes/terminator.ts +13 -13
- package/packages/workspace-executor/src/run-folders.ts +3 -3
- package/packages/workspace-executor/src/safe-environment.ts +4 -4
- package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
- package/packages/workspace-executor/src/session-ident.ts +2 -2
- package/packages/workspace-executor/src/shell-platform.ts +2 -2
- package/packages/workspace-executor/src/tools.ts +5 -5
- package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
- package/plugins/ragents.activity/web/activity.ts +2 -2
- package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
- package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
- package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
- package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
- package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
- package/plugins/ragents.actor-programs/server/limits.ts +3 -3
- package/plugins/ragents.actor-programs/server/methods.ts +1 -1
- package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
- package/plugins/ragents.actor-programs/server/routes.ts +8 -8
- package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
- package/plugins/ragents.actor-programs/server/templates.ts +59 -59
- package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
- package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
- package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
- package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
- package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
- package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
- package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
- package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
- package/plugins/ragents.actor-programs/web/api.ts +36 -36
- package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
- package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
- package/plugins/ragents.actor-programs/web/context.ts +1 -1
- package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
- package/plugins/ragents.actor-programs/web/index.tsx +1 -1
- package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
- package/plugins/ragents.ask/ask-payload.ts +1 -1
- package/plugins/ragents.ask/contract.ts +5 -5
- package/plugins/ragents.ask/server/answer-method.ts +1 -1
- package/plugins/ragents.ask/server/ask-service.ts +9 -9
- package/plugins/ragents.ask/server/ask-tool.ts +10 -10
- package/plugins/ragents.ask/server/contract.ts +5 -5
- package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
- package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
- package/plugins/ragents.ask/web/index.tsx +2 -2
- package/plugins/ragents.browser/executor/contract.ts +6 -6
- package/plugins/ragents.browser/executor/index.ts +1 -1
- package/plugins/ragents.browser/executor/module.ts +6 -6
- package/plugins/ragents.browser/executor/pages.ts +32 -32
- package/plugins/ragents.browser/executor/playwright.ts +8 -8
- package/plugins/ragents.browser/provision.ts +7 -7
- package/plugins/ragents.browser/server/browser.ts +14 -14
- package/plugins/ragents.browser/server/contract.ts +1 -1
- package/plugins/ragents.browser/server/index.ts +1 -1
- package/plugins/ragents.browser/server/tools.ts +14 -14
- package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
- package/plugins/ragents.documents/contract.ts +2 -2
- package/plugins/ragents.documents/prompt.hbs +1 -1
- package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
- package/plugins/ragents.documents/server/files-route.ts +6 -6
- package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
- package/plugins/ragents.documents/server/store.ts +1 -1
- package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
- package/plugins/ragents.documents/web/index.tsx +11 -11
- package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
- package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
- package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
- package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
- package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
- package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
- package/plugins/ragents.lsp-typescript/executor.ts +3 -3
- package/plugins/ragents.model-relay/server/config.ts +6 -2
- package/plugins/ragents.model-relay/server/index.ts +2 -2
- package/plugins/ragents.model-relay/server/relay.ts +23 -22
- package/plugins/ragents.orchestration/contract.ts +8 -8
- package/plugins/ragents.orchestration/server/index.ts +4 -4
- package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
- package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
- package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
- package/plugins/ragents.orchestration/web/ActorChat.tsx +3 -3
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -5
- package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
- package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
- package/plugins/ragents.orchestration/web/Center.tsx +5 -5
- package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
- package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
- package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
- package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
- package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
- package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
- package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
- package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
- package/plugins/ragents.orchestration/web/constants.ts +2 -2
- package/plugins/ragents.orchestration/web/executions.ts +6 -6
- package/plugins/ragents.orchestration/web/format.ts +1 -1
- package/plugins/ragents.orchestration/web/index.tsx +2 -2
- package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
- package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
- package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
- package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
- package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
- package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
- package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
- package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
- package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
- package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
- package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
- package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
- package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
- package/plugins/ragents.overseer/contract.ts +20 -20
- package/plugins/ragents.overseer/server/api.ts +6 -6
- package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
- package/plugins/ragents.overseer/server/coordinator.ts +4 -4
- package/plugins/ragents.overseer/server/index.ts +24 -24
- package/plugins/ragents.overseer/server/orientation.ts +8 -8
- package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
- package/plugins/ragents.overseer/server/run-directory.ts +5 -5
- package/plugins/ragents.overseer/server/settings.ts +6 -6
- package/plugins/ragents.overseer/server/user-location.ts +16 -16
- package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
- package/plugins/ragents.overseer/web/index.tsx +20 -20
- package/plugins/ragents.overseer/web/model-settings.ts +1 -1
- package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
- package/plugins/ragents.processes/contract.ts +5 -5
- package/plugins/ragents.processes/server/methods.ts +4 -4
- package/plugins/ragents.processes/server/observer.ts +8 -8
- package/plugins/ragents.processes/server/run-processes.ts +2 -2
- package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
- package/plugins/ragents.processes/web/processes.ts +10 -10
- package/plugins/ragents.product/server/config.ts +1 -1
- package/plugins/ragents.product/server/index.ts +4 -4
- package/plugins/ragents.product/server/runtime.ts +9 -10
- package/plugins/ragents.product/web/index.tsx +1 -1
- package/plugins/ragents.profile-distribution/contract.ts +10 -10
- package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
- package/plugins/ragents.profile-distribution/server/config.ts +2 -2
- package/plugins/ragents.profile-distribution/server/index.ts +4 -4
- package/plugins/ragents.reference/examples.ts +27 -27
- package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
- package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
- package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
- package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
- package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
- package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
- package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
- package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
- package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
- package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
- package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
- package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
- package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
- package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
- package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
- package/plugins/ragents.reference/walkthroughs.ts +128 -128
- package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
- package/plugins/ragents.todo/contract.ts +0 -3
- package/plugins/ragents.todo/server/todo-tool.ts +6 -6
- package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
- package/plugins/ragents.transcript/server/transcript.ts +11 -11
- package/plugins/ragents.watch/server/condition.ts +4 -4
- package/plugins/ragents.watch/server/functions.ts +27 -27
- package/plugins/ragents.watch/server/observation.ts +2 -2
- package/plugins/ragents.watch/server/service.ts +14 -14
- package/plugins/ragents.workspace/client/transport.ts +1 -1
- package/plugins/ragents.workspace/client/workspace-client.ts +63 -63
- package/plugins/ragents.workspace/contract.ts +46 -46
- package/plugins/ragents.workspace/server/binding.ts +20 -20
- package/plugins/ragents.workspace/server/browse-route.ts +8 -8
- package/plugins/ragents.workspace/server/clients.ts +50 -50
- package/plugins/ragents.workspace/server/config.ts +7 -7
- package/plugins/ragents.workspace/server/index.ts +3 -3
- package/plugins/ragents.workspace/server/runtime.ts +26 -26
- package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
- package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
- package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
- package/plugins/ragents.workspace/web/index.tsx +1 -1
- package/ragents.config.core.ts +1 -1
- package/ragents.config.developer.ts +3 -3
- package/ragents.config.showcase.ts +2 -2
- package/scripts/agent/agent-cli.ts +96 -96
- package/scripts/agent/journal.ts +5 -5
- package/scripts/agent/turn-control.ts +4 -4
- package/scripts/package/build-package.ts +31 -31
- package/scripts/package/host-links.mjs +3 -3
- package/scripts/package/publish-package.ts +29 -29
- package/scripts/package/ragents.mjs +19 -19
- package/scripts/plugin/build-builtin-plugins.ts +5 -5
- package/scripts/plugin/plugin-cli.ts +14 -14
- package/scripts/provision/run-provision.ts +14 -15
- package/scripts/remote/connect.ts +49 -49
- package/scripts/remote/start.ts +18 -18
- package/scripts/workspace-client/run-workspace-client.ts +23 -23
- package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
- package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
- package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
- package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
- package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
- /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
- /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
|
@@ -10,23 +10,23 @@ const contract = {
|
|
|
10
10
|
type Start = { input: unknown };
|
|
11
11
|
|
|
12
12
|
const settingsFrom = (value: unknown): { topic: string; rounds: number } => {
|
|
13
|
-
if (value === null) return { topic: "
|
|
13
|
+
if (value === null) return { topic: "Should city centers become car-free?", rounds: 2 };
|
|
14
14
|
if (typeof value !== "object" || Array.isArray(value)) {
|
|
15
|
-
throw new Error("
|
|
15
|
+
throw new Error("The start value needs topic (1 to 160 characters) and rounds (an integer from 1 to 5).");
|
|
16
16
|
}
|
|
17
17
|
const settings = value as Record<string, unknown>;
|
|
18
18
|
if (Object.keys(settings).some((key) => key !== "topic" && key !== "rounds")
|
|
19
19
|
|| typeof settings.topic !== "string" || !settings.topic.trim() || settings.topic.trim().length > 160
|
|
20
20
|
|| typeof settings.rounds !== "number" || !Number.isInteger(settings.rounds) || settings.rounds < 1 || settings.rounds > 5) {
|
|
21
|
-
throw new Error("
|
|
21
|
+
throw new Error("The start value needs topic (1 to 160 characters) and rounds (an integer from 1 to 5).");
|
|
22
22
|
}
|
|
23
23
|
return { topic: settings.topic.trim(), rounds: settings.rounds };
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
const roleOf = (name: string): string => {
|
|
27
|
-
if (name === "mira") return "
|
|
28
|
-
if (name === "jon") return "
|
|
29
|
-
return "
|
|
27
|
+
if (name === "mira") return "You are Mira and you ask curious questions.";
|
|
28
|
+
if (name === "jon") return "You are Jon and you politely disagree.";
|
|
29
|
+
return "You are Ada and you look for common ground.";
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export default defineActor(contract, {
|
|
@@ -42,15 +42,15 @@ export default defineActor(contract, {
|
|
|
42
42
|
const catalog = await context.functions.model_list({});
|
|
43
43
|
const profiles = catalog.profiles.filter((profile) => profile.driver === "agent" && profile.name !== "coordinator");
|
|
44
44
|
const first = profiles[0];
|
|
45
|
-
if (!first) throw new Error("
|
|
45
|
+
if (!first) throw new Error("No role other than coordinator; agent_spawn needs one.");
|
|
46
46
|
|
|
47
|
-
await context.functions.run_configure({ title: `
|
|
47
|
+
await context.functions.run_configure({ title: `Conversation circle: ${topic}` });
|
|
48
48
|
|
|
49
49
|
const participants: string[] = [];
|
|
50
50
|
for (const name of ["mira", "jon", "ada"]) {
|
|
51
51
|
const participant = await context.functions.agent_spawn({
|
|
52
52
|
handle: name,
|
|
53
|
-
prompt: `${roleOf(name)}
|
|
53
|
+
prompt: `${roleOf(name)} Reply only with one short sentence as the next contribution to the conversation.`,
|
|
54
54
|
profile: first.name,
|
|
55
55
|
tools: [],
|
|
56
56
|
});
|
|
@@ -70,10 +70,10 @@ export default defineActor(contract, {
|
|
|
70
70
|
|
|
71
71
|
await context.functions.actor_input({
|
|
72
72
|
actor: "@coordinator",
|
|
73
|
-
content: `
|
|
74
|
-
+ `
|
|
75
|
-
+ "
|
|
76
|
-
+ "
|
|
73
|
+
content: `The circle is ready: ${participants.join(", ")} are set up, the surface is split. Topic: "${topic}". `
|
|
74
|
+
+ `Run exactly ${rounds} conversation rounds: in each round ${participants.join(", ")} in this order. `
|
|
75
|
+
+ "Each one receives the previous contributions. Do not change the surface. "
|
|
76
|
+
+ "At the end, summarize the conversation in three sentences.",
|
|
77
77
|
});
|
|
78
78
|
|
|
79
79
|
context.state.replace({ built: true });
|
|
@@ -13,7 +13,7 @@ export const setupContext = (profiles = [{ name: "coordinator", driver: "agent"
|
|
|
13
13
|
return { name: value.name, actor: value.actor, views: 1, active: true };
|
|
14
14
|
}
|
|
15
15
|
return name === "model_list" ? {
|
|
16
|
-
profiles: profiles.map((profile) => ({ ...profile, description: "
|
|
16
|
+
profiles: profiles.map((profile) => ({ ...profile, description: "Test profile", turnTimeoutMs: null,
|
|
17
17
|
isolateWorkspace: false, provider: "test", model: "test" })), models: [],
|
|
18
18
|
} : name === "actor_input" ? [] : null;
|
|
19
19
|
}]));
|
|
@@ -3,31 +3,31 @@ import test from "node:test";
|
|
|
3
3
|
import program from "../src/server.ts";
|
|
4
4
|
import { setupContext, startInput } from "./helpers.ts";
|
|
5
5
|
|
|
6
|
-
test("
|
|
6
|
+
test("topic and number of rounds control participants, surface, and task", async () => {
|
|
7
7
|
const { calls, context } = setupContext();
|
|
8
|
-
await program.onInput!(startInput({ topic: "
|
|
8
|
+
await program.onInput!(startInput({ topic: "Team breakfast", rounds: 3 }), context);
|
|
9
9
|
assert.deepEqual(calls.filter((call) => call.name === "agent_spawn").map((call) => (call.input as { handle: string }).handle), ["mira", "jon", "ada"]);
|
|
10
|
-
assert.deepEqual(calls.find((call) => call.name === "run_configure")?.input, { title: "
|
|
10
|
+
assert.deepEqual(calls.find((call) => call.name === "run_configure")?.input, { title: "Conversation circle: Team breakfast" });
|
|
11
11
|
const layout = calls.find((call) => call.name === "canvas_layout_replace")?.input as { root: unknown };
|
|
12
12
|
assert.deepEqual(layout.root, { direction: "vertical", weights: [1, 1], children: [
|
|
13
13
|
{ entity: "@mira" },
|
|
14
14
|
{ direction: "horizontal", weights: [1, 1], children: [{ entity: "@jon" }, { entity: "@ada" }] },
|
|
15
15
|
] });
|
|
16
|
-
assert.match(JSON.stringify(calls.at(-1)), /
|
|
16
|
+
assert.match(JSON.stringify(calls.at(-1)), /exactly 3 conversation rounds/);
|
|
17
17
|
assert.deepEqual(context.state.read(), { built: true });
|
|
18
18
|
const completedCalls = calls.length;
|
|
19
19
|
await program.onInput!(startInput(null), context);
|
|
20
20
|
assert.equal(calls.length, completedCalls);
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
-
test("null
|
|
23
|
+
test("null has an explicit default, invalid values have no effect", async () => {
|
|
24
24
|
const initial = setupContext();
|
|
25
25
|
await program.onInput!(startInput(null), initial.context);
|
|
26
|
-
assert.match(JSON.stringify(initial.calls), /
|
|
27
|
-
assert.match(JSON.stringify(initial.calls.at(-1)), /
|
|
26
|
+
assert.match(JSON.stringify(initial.calls), /Should city centers become car-free/);
|
|
27
|
+
assert.match(JSON.stringify(initial.calls.at(-1)), /exactly 2 conversation rounds/);
|
|
28
28
|
for (const input of [{ topic: "Plan" }, { topic: "", rounds: 2 }, { topic: "Plan", rounds: 6 }, { topic: "Plan", rounds: 1.5 }, { topic: "Plan", rounds: 2, extra: true }, "Plan"]) {
|
|
29
29
|
const { calls, context } = setupContext();
|
|
30
|
-
await assert.rejects(async () => program.onInput!(startInput(input), context), /
|
|
30
|
+
await assert.rejects(async () => program.onInput!(startInput(input), context), /start value needs topic/);
|
|
31
31
|
assert.deepEqual(calls, []);
|
|
32
32
|
assert.deepEqual(context.state.read(), {});
|
|
33
33
|
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
3
|
-
description: "
|
|
2
|
+
title: Learning afternoon
|
|
3
|
+
description: "A prepared parallel round shows two independently working AI helpers and a TypeScript collector. The mini-app takes over one answer from each exactly once."
|
|
4
4
|
order: 150
|
|
5
5
|
coordinator: false
|
|
6
|
-
tags: Run
|
|
6
|
+
tags: Run scripts, Use case, Concept demo, Mini-apps, TypeScript actors, Agent teams, Subscriptions, Primary actor
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
The prepared TypeScript program sets up two AI helpers without tools and shows its
|
|
10
|
+
own mini-app. Both use the role `standard`. A coordinator is not needed;
|
|
11
|
+
the TypeScript actor controls the flow and is the primary actor.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
Only "Collect ideas" assigns the two helpers: Helper A suggests a simple experiment,
|
|
14
|
+
Helper B a small learning quiz. Each delivers exactly one idea for a learning afternoon with
|
|
15
|
+
primary school children. The tasks are independent and are sent at the same time. The app
|
|
16
|
+
shows the status of each helper and takes its completed answer into the shared
|
|
17
|
+
result list. The ideas are real model answers and are not checked for subject-matter accuracy.
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
An error in one helper leaves the result of the other in place. Empty answers and
|
|
20
|
+
interrupted model turns appear as errors. The flow starts once and repeats
|
|
21
|
+
neither tasks nor failed answers automatically. For new ideas, start a new run.
|
|
22
|
+
The template needs no start values and triggers no model call before the button.
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
The homepage uses the same React view with explicitly marked preview data.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
When you receive the experiment task, suggest an observation that children can make together with simple everyday materials. Describe the materials needed, the procedure, and what the children can discover. Avoid fire, dangerous substances, and elaborate equipment.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
You deliver exactly one concrete idea for a learning afternoon with primary school children. Two helpers work independently of each other; the application collects their answers automatically.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Your next message names your concrete task. Work only on this task, even if the shared flow describes further steps. Take over neither the other helper's task nor the collection.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Answer in English as a short normal text: a title and two to three sentences on materials and procedure. No questions, no tools, no further tasks. For open details, choose a simple, age-appropriate solution yourself. Keep the suggestion feasible with simple materials and without dangerous experiments.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
When you receive the quiz task, suggest a short knowledge game to play together. Name a child-friendly topic, explain how the game is played, and give a small sample question. The game should need only simple materials and involve all children.
|
|
@@ -26,7 +26,7 @@ const contract = {
|
|
|
26
26
|
}, { additionalProperties: false }),
|
|
27
27
|
functions: {
|
|
28
28
|
start: {
|
|
29
|
-
label: "
|
|
29
|
+
label: "Collect ideas",
|
|
30
30
|
input: Type.Object({}, { additionalProperties: false }),
|
|
31
31
|
output: Type.Object({}, { additionalProperties: false }),
|
|
32
32
|
capabilities: ["actor_input"],
|
|
@@ -61,12 +61,12 @@ export default defineActor(contract, {
|
|
|
61
61
|
onInput: async (input, context) => {
|
|
62
62
|
const state = context.state.read();
|
|
63
63
|
if (state.board && !input.event && input.content !== startMarker) {
|
|
64
|
-
throw new Error("
|
|
64
|
+
throw new Error("The learning afternoon does not understand free chat messages. Use the start button of the mini-app; new ideas need a new run.");
|
|
65
65
|
}
|
|
66
66
|
if (!state.board) {
|
|
67
67
|
const catalog = await context.functions.model_list({});
|
|
68
68
|
const profile = catalog.profiles.find((entry) => entry.driver === "agent" && entry.name === "standard");
|
|
69
|
-
if (!profile) throw new Error("
|
|
69
|
+
if (!profile) throw new Error("The role standard is missing.");
|
|
70
70
|
const prompt = await workflowInstructions(learningWorkflow, "helper", readPrompt);
|
|
71
71
|
const helpers = await Promise.all(initialState.helpers.map(async (helper) => {
|
|
72
72
|
const actor = await context.functions.agent_spawn({ handle: `learning-${helper.id}`, displayName: helper.label, profile: profile.name, prompt, tools: [] });
|
|
@@ -92,11 +92,11 @@ export default defineActor(contract, {
|
|
|
92
92
|
});
|
|
93
93
|
const results = await Promise.allSettled(state.board.helpers.map(async (helper): Promise<HelperState> => {
|
|
94
94
|
const step = helperSteps.find((entry) => entry.id === helper.id);
|
|
95
|
-
if (!step) throw new Error(`
|
|
95
|
+
if (!step) throw new Error(`Unknown helper: ${helper.id}`);
|
|
96
96
|
const content = step.goal;
|
|
97
97
|
const events = await context.functions.actor_input({ actor: `@learning-${helper.id}`, content });
|
|
98
98
|
const queued = events.find((event) => event.type === "actor.input.enqueued");
|
|
99
|
-
if (!queued || queued.type !== "actor.input.enqueued") throw new Error("
|
|
99
|
+
if (!queued || queued.type !== "actor.input.enqueued") throw new Error("The task was not confirmed.");
|
|
100
100
|
return { ...helper, inputId: queued.payload.inputId, status: "working" };
|
|
101
101
|
}));
|
|
102
102
|
const helpers = state.board.helpers.map((helper, index): HelperState => {
|
|
@@ -104,7 +104,7 @@ export default defineActor(contract, {
|
|
|
104
104
|
return result.status === "fulfilled" ? result.value : { ...helper, status: "error", error: result.reason instanceof Error ? result.reason.message : String(result.reason) };
|
|
105
105
|
});
|
|
106
106
|
const board = boardWith(helpers);
|
|
107
|
-
if (board.phase !== "working") await context.functions.event_unsubscribe({ subscriptionId: subscription.subscriptionId, reason: "
|
|
107
|
+
if (board.phase !== "working") await context.functions.event_unsubscribe({ subscriptionId: subscription.subscriptionId, reason: "Both tasks have ended." });
|
|
108
108
|
context.state.replace({ board, subscriptionId: subscription.subscriptionId });
|
|
109
109
|
return;
|
|
110
110
|
}
|
|
@@ -114,7 +114,7 @@ export default defineActor(contract, {
|
|
|
114
114
|
const helper = state.board.helpers.find((entry) => entry.actorId === event.sourceActorId && entry.status === "working");
|
|
115
115
|
if (!helper) return;
|
|
116
116
|
const next = await (async (): Promise<HelperState | undefined> => {
|
|
117
|
-
if (event.type === "actor.stopped") return { ...helper, status: "error", error: "
|
|
117
|
+
if (event.type === "actor.stopped") return { ...helper, status: "error", error: "The helper was stopped." };
|
|
118
118
|
if (event.type !== "turn.finished" && event.type !== "turn.interrupted") return;
|
|
119
119
|
const payload = event.payload;
|
|
120
120
|
const turnId = payload.turnId;
|
|
@@ -126,12 +126,12 @@ export default defineActor(contract, {
|
|
|
126
126
|
const text = events.filter((entry) => entry.type === "model.output.completed" && entry.payload.turnId === turnId)
|
|
127
127
|
.map((entry) => typeof entry.payload.text === "string" ? entry.payload.text.trim() : "").filter(Boolean).join("\n\n");
|
|
128
128
|
if (event.type === "turn.finished" && payload.outcome === "completed" && text) return { ...helper, text, status: "complete" };
|
|
129
|
-
const error = typeof payload.reason === "string" && payload.reason.trim() ? payload.reason : "
|
|
129
|
+
const error = typeof payload.reason === "string" && payload.reason.trim() ? payload.reason : "The helper delivered no idea.";
|
|
130
130
|
return { ...helper, status: "error", error };
|
|
131
131
|
})();
|
|
132
132
|
if (!next) return;
|
|
133
133
|
const board = boardWith(state.board.helpers.map((entry) => entry.id === next.id ? next : entry));
|
|
134
|
-
if (board.phase !== "working") await context.functions.event_unsubscribe({ subscriptionId: state.subscriptionId!, reason: "
|
|
134
|
+
if (board.phase !== "working") await context.functions.event_unsubscribe({ subscriptionId: state.subscriptionId!, reason: "Both tasks have ended." });
|
|
135
135
|
context.state.replace({ ...state, board });
|
|
136
136
|
},
|
|
137
137
|
});
|
|
@@ -22,7 +22,7 @@ function setup(options: { missingProfile?: boolean; failDispatch?: string; befor
|
|
|
22
22
|
"model_list", "agent_spawn", "canvas_layout_replace", "run_configure", "actor_input", "event_subscribe", "event_unsubscribe", "event_query",
|
|
23
23
|
].map((name) => [name, async (input: unknown) => {
|
|
24
24
|
calls.push({ name, input });
|
|
25
|
-
if (name === "model_list") return { profiles: options.missingProfile ? [] : [{ name: "standard", driver: "agent", description: "
|
|
25
|
+
if (name === "model_list") return { profiles: options.missingProfile ? [] : [{ name: "standard", driver: "agent", description: "Test profile", turnTimeoutMs: null, isolateWorkspace: false, provider: "test", model: "test" }], models: [] };
|
|
26
26
|
if (name === "agent_spawn") {
|
|
27
27
|
const handle = (input as { handle: string }).handle;
|
|
28
28
|
return { id: `actor-${handle}`, handle };
|
|
@@ -32,7 +32,7 @@ function setup(options: { missingProfile?: boolean; failDispatch?: string; befor
|
|
|
32
32
|
if (name === "actor_input") {
|
|
33
33
|
const actor = (input as { actor: string }).actor;
|
|
34
34
|
await options.beforeDispatch?.(actor);
|
|
35
|
-
if (actor === options.failDispatch) throw new Error("
|
|
35
|
+
if (actor === options.failDispatch) throw new Error("Task could not be sent.");
|
|
36
36
|
return [{ type: "actor.input.enqueued", payload: { actorId: `actor-${actor.slice(1)}`, inputId: `input-${actor.slice(1)}` } }];
|
|
37
37
|
}
|
|
38
38
|
return null;
|
|
@@ -56,7 +56,7 @@ async function complete(context: ReturnType<typeof setup>["context"], helper: st
|
|
|
56
56
|
await program.onInput(eventOf(helper, "turn.finished", { outcome: "completed" }), context);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
test("
|
|
59
|
+
test("start sets up only two plain helpers and its own app; only the button sends a task to the owner", async () => {
|
|
60
60
|
const { context, calls } = setup();
|
|
61
61
|
await program.onInput(setupInput, context);
|
|
62
62
|
assert.equal(context.state.read().board?.phase, "ready");
|
|
@@ -68,7 +68,7 @@ test("Start richtet nur zwei reine Helfer und die eigene App ein; erst der Butto
|
|
|
68
68
|
assert.equal(calls.some((call) => call.name === "actor_input" || call.name === "event_subscribe"), false);
|
|
69
69
|
const before = structuredClone(context.state.read());
|
|
70
70
|
const callCount = calls.length;
|
|
71
|
-
await assert.rejects(async () => program.onInput(setupInput, context), /
|
|
71
|
+
await assert.rejects(async () => program.onInput(setupInput, context), /does not understand free chat messages/);
|
|
72
72
|
assert.deepEqual(context.state.read(), before);
|
|
73
73
|
assert.equal(calls.length, callCount);
|
|
74
74
|
await program.functions.start({}, context);
|
|
@@ -76,13 +76,13 @@ test("Start richtet nur zwei reine Helfer und die eigene App ein; erst der Butto
|
|
|
76
76
|
assert.equal(context.state.read().board?.phase, "ready");
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
-
test("
|
|
79
|
+
test("the input handler subscribes first and sends both independent tasks in parallel exactly once", async () => {
|
|
80
80
|
const pending: (() => void)[] = [];
|
|
81
81
|
const { context, calls } = setup({ beforeDispatch: () => new Promise<void>((resolve) => pending.push(resolve)) });
|
|
82
82
|
await program.onInput(setupInput, context);
|
|
83
83
|
const starting = program.onInput(startInput, context);
|
|
84
84
|
for (let attempt = 0; attempt < 20 && pending.length < 2; attempt++) await Promise.resolve();
|
|
85
|
-
assert.equal(pending.length, 2, "
|
|
85
|
+
assert.equal(pending.length, 2, "Both inputs begin before one finishes.");
|
|
86
86
|
assert.equal(calls.filter((call) => call.name === "event_subscribe").length, 1);
|
|
87
87
|
for (const resolve of pending) resolve();
|
|
88
88
|
await starting;
|
|
@@ -93,104 +93,104 @@ test("der Input-Handler abonniert zuerst und sendet beide unabhängigen Aufträg
|
|
|
93
93
|
});
|
|
94
94
|
|
|
95
95
|
for (const phase of ["ready", "working", "complete"]) {
|
|
96
|
-
test(`
|
|
96
|
+
test(`free chat messages are rejected when ${phase} and keep the ideas`, async () => {
|
|
97
97
|
const { context, calls } = setup();
|
|
98
98
|
if (phase === "ready") {
|
|
99
99
|
await program.onInput(setupInput, context);
|
|
100
100
|
} else {
|
|
101
101
|
await begin(context);
|
|
102
|
-
await complete(context, "experiment", "
|
|
103
|
-
if (phase === "complete") await complete(context, "quiz", "
|
|
102
|
+
await complete(context, "experiment", "The experiment idea is ready.");
|
|
103
|
+
if (phase === "complete") await complete(context, "quiz", "The quiz idea is ready.");
|
|
104
104
|
}
|
|
105
105
|
assert.equal(context.state.read().board?.phase, phase);
|
|
106
106
|
const before = structuredClone(context.state.read());
|
|
107
107
|
const callCount = calls.length;
|
|
108
|
-
const content = "
|
|
109
|
-
await assert.rejects(async () => program.onInput(inputOf(content), context), /
|
|
108
|
+
const content = "Please collect new ideas for the learning afternoon again.";
|
|
109
|
+
await assert.rejects(async () => program.onInput(inputOf(content), context), /does not understand free chat messages.*start button.*new run/);
|
|
110
110
|
assert.deepEqual(context.state.read(), before);
|
|
111
111
|
assert.equal(calls.length, callCount);
|
|
112
112
|
if (phase === "ready") {
|
|
113
113
|
await program.onInput(startInput, context);
|
|
114
114
|
assert.equal(context.state.read().board?.phase, "working");
|
|
115
115
|
} else if (phase === "working") {
|
|
116
|
-
await complete(context, "quiz", "
|
|
116
|
+
await complete(context, "quiz", "The quiz idea is ready.");
|
|
117
117
|
assert.equal(context.state.read().board?.phase, "complete");
|
|
118
|
-
assert.equal(context.state.read().board?.helpers[0]?.text, "
|
|
118
|
+
assert.equal(context.state.read().board?.helpers[0]?.text, "The experiment idea is ready.");
|
|
119
119
|
}
|
|
120
120
|
});
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
for (const order of [["experiment", "quiz"], ["quiz", "experiment"]]) {
|
|
124
|
-
test(`
|
|
124
|
+
test(`collects answers in any order: ${order.join(", ")}`, async () => {
|
|
125
125
|
const { context, calls } = setup();
|
|
126
126
|
await begin(context);
|
|
127
|
-
await complete(context, order[0]!, "
|
|
127
|
+
await complete(context, order[0]!, "First real answer");
|
|
128
128
|
assert.equal(context.state.read().board?.phase, "working");
|
|
129
|
-
await complete(context, order[1]!, "
|
|
129
|
+
await complete(context, order[1]!, "Second real answer");
|
|
130
130
|
const board = context.state.read().board!;
|
|
131
131
|
assert.equal(board.phase, "complete");
|
|
132
|
-
assert.equal(board.helpers.find((helper) => helper.id === order[0])?.text, "
|
|
133
|
-
assert.equal(board.helpers.find((helper) => helper.id === order[1])?.text, "
|
|
132
|
+
assert.equal(board.helpers.find((helper) => helper.id === order[0])?.text, "First real answer");
|
|
133
|
+
assert.equal(board.helpers.find((helper) => helper.id === order[1])?.text, "Second real answer");
|
|
134
134
|
assert.equal(calls.filter((call) => call.name === "event_unsubscribe").length, 1);
|
|
135
|
-
for (let count = 0; count < 10; count++) await complete(context, order[0]!, "
|
|
135
|
+
for (let count = 0; count < 10; count++) await complete(context, order[0]!, "Late answer");
|
|
136
136
|
assert.deepEqual(context.state.read().board, board);
|
|
137
137
|
assert.equal(calls.filter((call) => call.name === "actor_input").length, 2);
|
|
138
138
|
});
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
test("
|
|
141
|
+
test("ignores wrong actors, inputs, turns, subscriptions, and duplicate answers", async () => {
|
|
142
142
|
const { context } = setup();
|
|
143
143
|
await program.onInput(setupInput, context);
|
|
144
144
|
await program.onInput(startInput, context);
|
|
145
|
-
record(context, "experiment", "turn.started", { inputId: "
|
|
146
|
-
record(context, "experiment", "model.output.completed", { text: "
|
|
145
|
+
record(context, "experiment", "turn.started", { inputId: "foreign", turnId: "foreign" });
|
|
146
|
+
record(context, "experiment", "model.output.completed", { text: "Foreign", turnId: "foreign" });
|
|
147
147
|
record(context, "experiment", "turn.started", { inputId: "input-learning-experiment" });
|
|
148
|
-
record(context, "experiment", "model.output.completed", { text: "
|
|
148
|
+
record(context, "experiment", "model.output.completed", { text: "My idea" });
|
|
149
149
|
const before = context.state.read();
|
|
150
150
|
await program.onInput(eventOf("foreign", "turn.finished", { outcome: "completed" }), context);
|
|
151
|
-
await program.onInput(eventOf("experiment", "turn.finished", { outcome: "completed", turnId: "
|
|
152
|
-
await program.onInput({ ...eventOf("experiment", "turn.finished", { outcome: "completed" }), subscriptionId: "
|
|
151
|
+
await program.onInput(eventOf("experiment", "turn.finished", { outcome: "completed", turnId: "foreign" }), context);
|
|
152
|
+
await program.onInput({ ...eventOf("experiment", "turn.finished", { outcome: "completed" }), subscriptionId: "foreign" }, context);
|
|
153
153
|
assert.deepEqual(context.state.read(), before);
|
|
154
154
|
const answer = eventOf("experiment", "turn.finished", { outcome: "completed" });
|
|
155
155
|
await program.onInput(answer, context);
|
|
156
156
|
await program.onInput(answer, context);
|
|
157
|
-
assert.equal(context.state.read().board?.helpers[0]?.text, "
|
|
157
|
+
assert.equal(context.state.read().board?.helpers[0]?.text, "My idea");
|
|
158
158
|
assert.equal(context.state.read().board?.helpers[0]?.status, "complete");
|
|
159
159
|
});
|
|
160
160
|
|
|
161
161
|
for (const ending of ["failed", "interrupted", "empty", "stopped"]) {
|
|
162
|
-
test(`
|
|
162
|
+
test(`a ${ending} result keeps the successful idea of the other helper`, async () => {
|
|
163
163
|
const { context, calls } = setup();
|
|
164
164
|
await begin(context);
|
|
165
|
-
await complete(context, "quiz", "
|
|
166
|
-
await program.onInput(eventOf("experiment", ending === "stopped" ? "actor.stopped" : ending === "interrupted" ? "turn.interrupted" : "turn.finished", { outcome: ending === "empty" ? "completed" : "failed", ...(ending === "empty" ? {} : { reason: "
|
|
165
|
+
await complete(context, "quiz", "The quiz is ready.");
|
|
166
|
+
await program.onInput(eventOf("experiment", ending === "stopped" ? "actor.stopped" : ending === "interrupted" ? "turn.interrupted" : "turn.finished", { outcome: ending === "empty" ? "completed" : "failed", ...(ending === "empty" ? {} : { reason: "Model error" }) }), context);
|
|
167
167
|
assert.equal(context.state.read().board?.phase, "error");
|
|
168
168
|
assert.equal(context.state.read().board?.helpers[0]?.status, "error");
|
|
169
169
|
assert.ok(context.state.read().board?.helpers[0]?.error);
|
|
170
|
-
assert.equal(context.state.read().board?.helpers[1]?.text, "
|
|
170
|
+
assert.equal(context.state.read().board?.helpers[1]?.text, "The quiz is ready.");
|
|
171
171
|
assert.equal(calls.filter((call) => call.name === "actor_input").length, 2);
|
|
172
172
|
assert.equal(calls.filter((call) => call.name === "event_unsubscribe").length, 1);
|
|
173
173
|
});
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
test("
|
|
176
|
+
test("a failed input does not prevent the other helper's task", async () => {
|
|
177
177
|
const { context } = setup({ failDispatch: "@learning-experiment" });
|
|
178
178
|
await begin(context);
|
|
179
179
|
assert.equal(context.state.read().board?.helpers[0]?.status, "error");
|
|
180
180
|
assert.equal(context.state.read().board?.phase, "working");
|
|
181
|
-
await complete(context, "quiz", "
|
|
181
|
+
await complete(context, "quiz", "A quiz idea.");
|
|
182
182
|
assert.equal(context.state.read().board?.phase, "error");
|
|
183
183
|
assert.equal(context.state.read().board?.helpers[1]?.status, "complete");
|
|
184
184
|
});
|
|
185
185
|
|
|
186
|
-
test("
|
|
186
|
+
test("without a standard profile no helper is created", async () => {
|
|
187
187
|
const { context, calls } = setup({ missingProfile: true });
|
|
188
|
-
await assert.rejects(async () => program.onInput(setupInput, context), /
|
|
188
|
+
await assert.rejects(async () => program.onInput(setupInput, context), /role standard is missing/);
|
|
189
189
|
assert.deepEqual(calls.map((call) => call.name), ["model_list"]);
|
|
190
190
|
assert.deepEqual(context.state.read(), {});
|
|
191
191
|
});
|
|
192
192
|
|
|
193
|
-
test("
|
|
193
|
+
test("the shared flow provides helper tasks, prompt, and parallel graph branches", async () => {
|
|
194
194
|
const { learningWorkflow, helperSteps } = await import("../src/workflow.ts");
|
|
195
195
|
const { learningWorkflowState, initialState } = await import("../src/state.ts");
|
|
196
196
|
const { workflowGraph } = await import("@ragents/workflow");
|
|
@@ -200,15 +200,15 @@ test("der gemeinsame Ablauf liefert Helferaufträge, Prompt und parallele Graphz
|
|
|
200
200
|
assert.equal(spawns.length, helperSteps.length);
|
|
201
201
|
for (const spawn of spawns) {
|
|
202
202
|
const prompt = (spawn.input as { prompt: string }).prompt;
|
|
203
|
-
assert.match(prompt, /
|
|
204
|
-
assert.match(prompt, /
|
|
205
|
-
assert.match(prompt, /
|
|
203
|
+
assert.match(prompt, /Work only on this task/);
|
|
204
|
+
assert.match(prompt, /sample question/);
|
|
205
|
+
assert.match(prompt, /dangerous substances/);
|
|
206
206
|
}
|
|
207
207
|
assert.deepEqual(calls.filter((call) => call.name === "actor_input").map((call) => (call.input as { content: string }).content), helperSteps.map((step) => step.goal));
|
|
208
208
|
const initial = workflowGraph(learningWorkflow, learningWorkflowState(initialState));
|
|
209
209
|
assert.ok(initial.nodes.every((node) => node.status === "pending"));
|
|
210
210
|
assert.deepEqual(initial.edges.map((edge) => [edge.source, edge.target]), [["experiment", "collect"], ["quiz", "collect"]]);
|
|
211
|
-
await complete(context, "quiz", "
|
|
211
|
+
await complete(context, "quiz", "A quiz idea.");
|
|
212
212
|
const partial = workflowGraph(learningWorkflow, learningWorkflowState(context.state.read().board!));
|
|
213
213
|
assert.deepEqual(partial.nodes.map((node) => [node.id, node.status]), [["experiment", "active"], ["quiz", "done"], ["collect", "active"]]);
|
|
214
214
|
await program.onInput(eventOf("experiment", "actor.stopped", {}), context);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
3
|
-
description: "
|
|
2
|
+
title: Moderated round without coordinator
|
|
3
|
+
description: "A prepared setup shows a run that works without a coordinator from the start. The moderator becomes the primary actor and your direct contact in the chat."
|
|
4
4
|
order: 130
|
|
5
5
|
coordinator: false
|
|
6
|
-
tags: Run
|
|
6
|
+
tags: Run scripts, Use case, Concept demo, Primary actor, Agent teams
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
`run_configure`
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
Reference case for `coordinator: false`: the host spawns no coordinator, the script uses
|
|
10
|
+
`run_configure` to choose the moderator as primary actor and sets the run title. The chat binds as soon as
|
|
11
|
+
the primary actor is determined. The moderator keeps its own actor prompt even as primary actor; it receives the concrete task
|
|
12
|
+
through the first ActorInput. A start value `{ "topic": "..." }` sets the topic.
|
|
@@ -10,7 +10,7 @@ const contract = {
|
|
|
10
10
|
type Start = { input: { topic?: string } | null };
|
|
11
11
|
|
|
12
12
|
const guestOf = (name: string): string =>
|
|
13
|
-
name === "kai" ? "
|
|
13
|
+
name === "kai" ? "You are Kai, pragmatic and brief." : "You are Lena, thorough and deliberate.";
|
|
14
14
|
|
|
15
15
|
export default defineActor(contract, {
|
|
16
16
|
functions: {},
|
|
@@ -18,17 +18,17 @@ export default defineActor(contract, {
|
|
|
18
18
|
const state = context.state.read();
|
|
19
19
|
if (state && state.built) return;
|
|
20
20
|
const start = JSON.parse(input.content) as Start;
|
|
21
|
-
const topic = start.input && start.input.topic ? start.input.topic : "
|
|
21
|
+
const topic = start.input && start.input.topic ? start.input.topic : "What makes a good team?";
|
|
22
22
|
|
|
23
23
|
const catalog = await context.functions.model_list({});
|
|
24
24
|
const profiles = catalog.profiles.filter((profile) => profile.driver === "agent" && profile.name !== "coordinator");
|
|
25
25
|
const first = profiles[0];
|
|
26
|
-
if (!first) throw new Error("
|
|
26
|
+
if (!first) throw new Error("No role other than coordinator; agent_spawn needs one.");
|
|
27
27
|
|
|
28
28
|
const moderator = await context.functions.agent_spawn({
|
|
29
29
|
handle: "moderator",
|
|
30
30
|
displayName: "Moderator",
|
|
31
|
-
prompt: "
|
|
31
|
+
prompt: "You moderate a conversation circle between the user and two guests.",
|
|
32
32
|
profile: first.name,
|
|
33
33
|
tools: ["actor_input", "event_subscribe", "event_unsubscribe", "event_subscription_list"],
|
|
34
34
|
});
|
|
@@ -36,7 +36,7 @@ export default defineActor(contract, {
|
|
|
36
36
|
for (const name of ["kai", "lena"]) {
|
|
37
37
|
const guest = await context.functions.agent_spawn({
|
|
38
38
|
handle: name,
|
|
39
|
-
prompt: `${guestOf(name)}
|
|
39
|
+
prompt: `${guestOf(name)} Reply with at most two sentences.`,
|
|
40
40
|
profile: first.name,
|
|
41
41
|
tools: [],
|
|
42
42
|
});
|
|
@@ -44,15 +44,15 @@ export default defineActor(contract, {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
await context.functions.run_configure({
|
|
47
|
-
title: `
|
|
47
|
+
title: `Moderated round: ${topic}`,
|
|
48
48
|
primaryActor: `@${moderator.handle}`,
|
|
49
49
|
});
|
|
50
50
|
|
|
51
51
|
await context.functions.actor_input({
|
|
52
52
|
actor: `@${moderator.handle}`,
|
|
53
|
-
content: "
|
|
54
|
-
+ `
|
|
55
|
-
+ `
|
|
53
|
+
content: "You are the moderator of this run and talk directly with the user in the chat; there is no coordinator. "
|
|
54
|
+
+ `Your guests are ${guests.join(" and ")}. Gather their contributions and include them in the conversation circle. `
|
|
55
|
+
+ `Topic: "${topic}". Greet the user with two sentences, name the topic, and ask whether they want to ask the first question or whether you should begin.`,
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
context.state.replace({ built: true });
|
|
@@ -13,7 +13,7 @@ export const setupContext = (profiles = [{ name: "coordinator", driver: "agent"
|
|
|
13
13
|
return { name: value.name, actor: value.actor, views: 1, active: true };
|
|
14
14
|
}
|
|
15
15
|
return name === "model_list" ? {
|
|
16
|
-
profiles: profiles.map((profile) => ({ ...profile, description: "
|
|
16
|
+
profiles: profiles.map((profile) => ({ ...profile, description: "Test profile", turnTimeoutMs: null,
|
|
17
17
|
isolateWorkspace: false, provider: "test", model: "test" })), models: [],
|
|
18
18
|
} : name === "actor_input" ? [] : null;
|
|
19
19
|
}]));
|