@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
|
@@ -15,17 +15,17 @@ import { readProfileTarget } from "../../apps/server/src/profile-target.ts";
|
|
|
15
15
|
import { RpcClient } from "../../apps/web/src/rpc/client.ts";
|
|
16
16
|
import { profileDistributionContracts, type ClientProfileDescription } from "../../plugins/ragents.profile-distribution/contract.ts";
|
|
17
17
|
|
|
18
|
-
const usage = (): string => `
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
const usage = (): string => `Usage: RAGENTS_TOKEN=<token> ragents connect <server-url> [--port <n>] [--clean] [--no-start]
|
|
19
|
+
Fetches the server's client profile together with its bundles into the local cache, checks the host
|
|
20
|
+
API against this host and starts the local server with the profile and this host's web app. --clean
|
|
21
|
+
removes older versions, --no-start ends after fetching and names the profile file and data folder.
|
|
22
|
+
In the checkout the command is pnpm connect.`;
|
|
23
23
|
|
|
24
24
|
export interface ConnectOptions {
|
|
25
25
|
readonly serverUrl: string;
|
|
26
26
|
readonly token: string;
|
|
27
27
|
readonly dataRoot?: string;
|
|
28
|
-
/**
|
|
28
|
+
/** The host whose host API and built-in bundles must fit the profile: checkout or package; defaults to this one. */
|
|
29
29
|
readonly hostPath?: string;
|
|
30
30
|
readonly clean?: boolean;
|
|
31
31
|
readonly fetch?: typeof fetch;
|
|
@@ -39,7 +39,7 @@ export interface ConnectedProfile {
|
|
|
39
39
|
readonly downloaded: boolean;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
/**
|
|
42
|
+
/** The version that ragents start brings up again without the server. */
|
|
43
43
|
export interface CachedProfile {
|
|
44
44
|
readonly serverUrl: string;
|
|
45
45
|
readonly profile: string;
|
|
@@ -59,22 +59,22 @@ export const parseArguments = (argv: readonly string[]): { serverUrl: string; po
|
|
|
59
59
|
if (argument === "--no-start") { start = false; continue; }
|
|
60
60
|
if (argument === "--port") {
|
|
61
61
|
const value = Number(argv[index + 1]);
|
|
62
|
-
if (!Number.isInteger(value) || value < 0 || value > 65535) throw new Error(`--port
|
|
62
|
+
if (!Number.isInteger(value) || value < 0 || value > 65535) throw new Error(`--port needs an integer from 0 to 65535, not ${argv[index + 1]}`);
|
|
63
63
|
port = value;
|
|
64
64
|
index += 1;
|
|
65
65
|
continue;
|
|
66
66
|
}
|
|
67
|
-
if (argument.startsWith("-") || serverUrl) throw new Error(`
|
|
67
|
+
if (argument.startsWith("-") || serverUrl) throw new Error(`Unknown argument: ${argument}\n${usage()}`);
|
|
68
68
|
serverUrl = argument;
|
|
69
69
|
}
|
|
70
|
-
if (!serverUrl) throw new Error(`
|
|
70
|
+
if (!serverUrl) throw new Error(`The server address is missing.\n${usage()}`);
|
|
71
71
|
return { serverUrl, port, clean, start };
|
|
72
72
|
};
|
|
73
73
|
|
|
74
|
-
/**
|
|
74
|
+
/** One folder name per server: hostname and port, so two servers never share the same cache. */
|
|
75
75
|
export const serverFolderName = (serverUrl: string): string => {
|
|
76
76
|
const parsed = new URL(serverUrl);
|
|
77
|
-
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") throw new Error(`
|
|
77
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") throw new Error(`The server address needs http or https: ${serverUrl}`);
|
|
78
78
|
const host = parsed.hostname.toLowerCase().replace(/[^a-z0-9.-]/g, "_");
|
|
79
79
|
return parsed.port ? `${host}-${parsed.port}` : host;
|
|
80
80
|
};
|
|
@@ -92,15 +92,15 @@ const describeProfile = async (options: ConnectOptions): Promise<ClientProfileDe
|
|
|
92
92
|
fetch: (input, init) => fetchImpl(input, { ...init, headers: { ...init?.headers as Record<string, string> | undefined, authorization: `Bearer ${options.token}` } }),
|
|
93
93
|
});
|
|
94
94
|
const description = await rpc.call(profileDistributionContracts.describe, {}).catch((error: unknown) => {
|
|
95
|
-
throw new Error(`
|
|
95
|
+
throw new Error(`The server ${baseUrl} provides no client profile: ${error instanceof Error ? error.message : String(error)}`);
|
|
96
96
|
});
|
|
97
97
|
return checkedDescription(baseUrl, description);
|
|
98
98
|
};
|
|
99
99
|
|
|
100
|
-
/**
|
|
100
|
+
/** Version, profile and file become paths in the cache; only what cannot lead out of it is accepted. */
|
|
101
101
|
const checkedDescription = (baseUrl: string, description: ClientProfileDescription): ClientProfileDescription => {
|
|
102
102
|
const rejected = (field: string, value: string): Error =>
|
|
103
|
-
new Error(`
|
|
103
|
+
new Error(`The server ${baseUrl} names an invalid client profile: ${field} ${JSON.stringify(value)}`);
|
|
104
104
|
if (!/^[0-9a-f]{64}$/.test(description.version)) throw rejected("version", description.version);
|
|
105
105
|
if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(description.profile)) throw rejected("profile", description.profile);
|
|
106
106
|
const segments = description.file.split("/");
|
|
@@ -112,15 +112,15 @@ const checkedDescription = (baseUrl: string, description: ClientProfileDescripti
|
|
|
112
112
|
const downloadArchive = async (options: ConnectOptions, description: ClientProfileDescription): Promise<Buffer> => {
|
|
113
113
|
const address = `${options.serverUrl.replace(/\/+$/, "")}${description.archivePath}`;
|
|
114
114
|
const response = await (options.fetch ?? fetch)(address, { headers: { authorization: `Bearer ${options.token}` } });
|
|
115
|
-
if (!response.ok) throw new Error(`
|
|
115
|
+
if (!response.ok) throw new Error(`The archive ${address} does not arrive: ${response.status} ${(await response.text()).slice(0, 200)}`);
|
|
116
116
|
const archive = Buffer.from(await response.arrayBuffer());
|
|
117
117
|
const digest = createHash("sha256").update(archive).digest("hex");
|
|
118
|
-
if (digest !== description.version) throw new Error(`
|
|
119
|
-
if (archive.byteLength !== description.size) throw new Error(`
|
|
118
|
+
if (digest !== description.version) throw new Error(`The archive ${address} does not match the announced version: expected ${description.version}, received ${digest}`);
|
|
119
|
+
if (archive.byteLength !== description.size) throw new Error(`The archive ${address} has ${archive.byteLength} bytes, ${description.size} were announced`);
|
|
120
120
|
return archive;
|
|
121
121
|
};
|
|
122
122
|
|
|
123
|
-
/**
|
|
123
|
+
/** The profile file is ESM; without this marker Node reads it as CommonJS in the cache. The host's hook loads bundles as ESM anyway. */
|
|
124
124
|
const markAsModule = async (directory: string): Promise<void> => {
|
|
125
125
|
const file = path.join(directory, "package.json");
|
|
126
126
|
if (!existsSync(file)) {
|
|
@@ -128,47 +128,47 @@ const markAsModule = async (directory: string): Promise<void> => {
|
|
|
128
128
|
return;
|
|
129
129
|
}
|
|
130
130
|
const declared = (JSON.parse(await readFile(file, "utf8")) as { type?: unknown }).type;
|
|
131
|
-
if (declared !== "module") throw new Error(`
|
|
131
|
+
if (declared !== "module") throw new Error(`The archive brings a package.json with type ${JSON.stringify(declared)}; RAgents profiles are ESM`);
|
|
132
132
|
};
|
|
133
133
|
|
|
134
|
-
/**
|
|
134
|
+
/** Every bundle in the archive must carry exactly the files it was built with; lossy packing would otherwise only show up when loading. */
|
|
135
135
|
const assertArchivedBundles = (staging: string): void => {
|
|
136
136
|
for (const manifestFile of filesBelow(staging).filter((file) => path.posix.basename(file) === BUNDLE_MANIFEST_FILE)) {
|
|
137
137
|
const folder = path.join(staging, ...path.posix.dirname(manifestFile).split("/"));
|
|
138
138
|
const manifest = JSON.parse(readFileSync(path.join(folder, BUNDLE_MANIFEST_FILE), "utf8")) as { id?: unknown; stand?: unknown };
|
|
139
139
|
if (bundleStand(folder) !== manifest.stand) {
|
|
140
|
-
throw new Error(`
|
|
140
|
+
throw new Error(`The bundle ${String(manifest.id)} in the server's archive does not have the files it was built with (stand in ${manifestFile}); rebuild it on the server and repeat ragents connect`);
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
};
|
|
144
144
|
|
|
145
|
-
/**
|
|
145
|
+
/** How a host gets to the server's version depends on where it comes from: package or checkout. */
|
|
146
146
|
const hostAdvice = (hostPath: string, description: ClientProfileDescription): string => {
|
|
147
147
|
const packaged = readHostPackage(hostPath);
|
|
148
148
|
return packaged
|
|
149
|
-
? `
|
|
150
|
-
: `
|
|
149
|
+
? `Get the server's version: npm install -g ${packaged.name}@${description.packageVersion} (installed is ${packaged.version}).`
|
|
150
|
+
: `Switch to the server's commit: git -C ${JSON.stringify(hostPath)} fetch && git -C ${JSON.stringify(hostPath)} checkout ${description.hostVersion}, then pnpm build:plugins and pnpm build:web.`;
|
|
151
151
|
};
|
|
152
152
|
|
|
153
|
-
/**
|
|
153
|
+
/** The profile's built-in plugins for which the host has no bundle; without them the profile does not start. */
|
|
154
154
|
const missingBuiltIns = (hostPath: string, description: ClientProfileDescription): readonly string[] =>
|
|
155
155
|
description.plugins
|
|
156
156
|
.filter((plugin) => plugin.source === "host" && !existsSync(path.join(hostPath, "bundles", plugin.id, "ragents-bundle.json")))
|
|
157
157
|
.map((plugin) => plugin.id);
|
|
158
158
|
|
|
159
|
-
/**
|
|
159
|
+
/** The bundles in the archive are built against the server's host API, the built-in ones come from the client's host; both must fit there. */
|
|
160
160
|
const assertHostFits = (hostPath: string, description: ClientProfileDescription): void => {
|
|
161
161
|
const localApi = readHostApiVersion(hostPath);
|
|
162
162
|
if (localApi !== description.hostApi) {
|
|
163
|
-
throw new Error(`
|
|
163
|
+
throw new Error(`The server distributes its profile for host API ${description.hostApi}, the host ${hostPath} offers host API ${localApi}.\n${hostAdvice(hostPath, description)}`);
|
|
164
164
|
}
|
|
165
165
|
const missing = missingBuiltIns(hostPath, description);
|
|
166
166
|
if (missing.length === 0) return;
|
|
167
|
-
const rebuild = readHostPackage(hostPath) ? "" : "
|
|
168
|
-
throw new Error(`
|
|
167
|
+
const rebuild = readHostPackage(hostPath) ? "" : "In the checkout, run pnpm build:plugins first; if the source under plugins/ is missing: ";
|
|
168
|
+
throw new Error(`The profile names built-in plugins for which the host ${hostPath} has no bundle: ${missing.join(", ")}.\n${rebuild}${hostAdvice(hostPath, description)}`);
|
|
169
169
|
};
|
|
170
170
|
|
|
171
|
-
/**
|
|
171
|
+
/** Fetches description and archive, checks host API, built-in bundles and version and stores the version in the cache; starts nothing. */
|
|
172
172
|
export const prepareProfile = async (options: ConnectOptions): Promise<ConnectedProfile> => {
|
|
173
173
|
const description = await describeProfile(options);
|
|
174
174
|
assertHostFits(options.hostPath ?? hostRoot(), description);
|
|
@@ -190,9 +190,9 @@ export const prepareProfile = async (options: ConnectOptions): Promise<Connected
|
|
|
190
190
|
foreign.push(`${entryPath} (${String(type)})`);
|
|
191
191
|
return false;
|
|
192
192
|
} });
|
|
193
|
-
if (foreign.length > 0) throw new Error(`
|
|
193
|
+
if (foreign.length > 0) throw new Error(`The archive contains entries that are neither file nor folder: ${foreign.join(", ")}; a client profile carries only files`);
|
|
194
194
|
await rm(file);
|
|
195
|
-
if (!existsSync(path.join(staging, ...description.file.split("/")))) throw new Error(`
|
|
195
|
+
if (!existsSync(path.join(staging, ...description.file.split("/")))) throw new Error(`The archive does not contain the profile file ${description.file}`);
|
|
196
196
|
assertArchivedBundles(staging);
|
|
197
197
|
await markAsModule(staging);
|
|
198
198
|
await rm(cacheDirectory, { recursive: true, force: true });
|
|
@@ -216,7 +216,7 @@ export const prepareProfile = async (options: ConnectOptions): Promise<Connected
|
|
|
216
216
|
return { description, profileFile, dataDirectory: layout.data, cacheDirectory, downloaded };
|
|
217
217
|
};
|
|
218
218
|
|
|
219
|
-
/**
|
|
219
|
+
/** Starts a host script like the checkout does: Node with the tsx loader, working directory apps/server, without pnpm. */
|
|
220
220
|
export const hostScript = (script: string, args: readonly string[] = []): { file: string; args: readonly string[]; cwd: string } => ({
|
|
221
221
|
file: process.execPath,
|
|
222
222
|
args: ["--import", "tsx", path.join(hostRoot(), script), ...args],
|
|
@@ -246,12 +246,12 @@ const run = (
|
|
|
246
246
|
const main = async (): Promise<void> => {
|
|
247
247
|
const arguments_ = parseArguments(process.argv.slice(2));
|
|
248
248
|
const token = process.env.RAGENTS_TOKEN;
|
|
249
|
-
if (!token) throw new Error(`RAGENTS_TOKEN
|
|
249
|
+
if (!token) throw new Error(`RAGENTS_TOKEN is missing: the personal token from the server profile.\n${usage()}`);
|
|
250
250
|
const prepared = await prepareProfile({ serverUrl: arguments_.serverUrl, token, clean: arguments_.clean });
|
|
251
251
|
const { description } = prepared;
|
|
252
|
-
console.log(`==
|
|
253
|
-
console.log(`==
|
|
254
|
-
console.log(`==
|
|
252
|
+
console.log(`== Profile ${description.profile} from server ${arguments_.serverUrl}, version ${description.version.slice(0, 12)} (${prepared.downloaded ? "fetched" : "in cache"})`);
|
|
253
|
+
console.log(`== Profile file ${prepared.profileFile}`);
|
|
254
|
+
console.log(`== Data ${prepared.dataDirectory}`);
|
|
255
255
|
if (!arguments_.start) return;
|
|
256
256
|
process.exitCode = await startCached({
|
|
257
257
|
serverUrl: arguments_.serverUrl,
|
|
@@ -265,12 +265,12 @@ const main = async (): Promise<void> => {
|
|
|
265
265
|
export interface StartedProfile {
|
|
266
266
|
readonly profile: string;
|
|
267
267
|
readonly profileFile: string;
|
|
268
|
-
/**
|
|
268
|
+
/** Set only for a fetched version; a host profile takes the defaults of its own configuration. */
|
|
269
269
|
readonly dataDirectory?: string;
|
|
270
270
|
readonly port: number | undefined;
|
|
271
271
|
}
|
|
272
272
|
|
|
273
|
-
/** ragents run
|
|
273
|
+
/** ragents run and ragents start record the same host in the profile's data folder; a port 0 picks its own port and cannot be recorded. */
|
|
274
274
|
export const noteHost = (profile: string, dataDirectory: string, port: number): ((pid: number) => void) | undefined =>
|
|
275
275
|
port > 0 ? (pid: number): void => writeHostRecord(dataDirectory, {
|
|
276
276
|
profile,
|
|
@@ -280,7 +280,7 @@ export const noteHost = (profile: string, dataDirectory: string, port: number):
|
|
|
280
280
|
startedAt: new Date().toISOString(),
|
|
281
281
|
}) : undefined;
|
|
282
282
|
|
|
283
|
-
/**
|
|
283
|
+
/** Provisions the profile's tools and starts the server with them. */
|
|
284
284
|
export const startProfile = async (started: StartedProfile): Promise<number> => {
|
|
285
285
|
const target = await readProfileTarget(started.profile, started.profileFile);
|
|
286
286
|
const dataDirectory = started.dataDirectory ?? target.dataDirectory;
|
|
@@ -291,10 +291,10 @@ export const startProfile = async (started: StartedProfile): Promise<number> =>
|
|
|
291
291
|
PRODUCT_PROFILE_FILE: started.profileFile,
|
|
292
292
|
DATA_DIR: dataDirectory,
|
|
293
293
|
};
|
|
294
|
-
console.log("==
|
|
294
|
+
console.log("== Provisioning tools");
|
|
295
295
|
const provisioned = await run(hostScript("scripts/provision/run-provision.ts"), env);
|
|
296
|
-
if (provisioned !== 0) throw new Error(`
|
|
297
|
-
console.log(`==
|
|
296
|
+
if (provisioned !== 0) throw new Error(`Provisioning ended with code ${provisioned}`);
|
|
297
|
+
console.log(`== Starting server (data ${dataDirectory})`);
|
|
298
298
|
const note = noteHost(started.profile, dataDirectory, port);
|
|
299
299
|
try {
|
|
300
300
|
return await run(hostScript("apps/server/src/main.ts", started.port !== undefined ? ["--port", String(started.port)] : []), env, note);
|
|
@@ -303,7 +303,7 @@ export const startProfile = async (started: StartedProfile): Promise<number> =>
|
|
|
303
303
|
}
|
|
304
304
|
};
|
|
305
305
|
|
|
306
|
-
/**
|
|
306
|
+
/** Starts a version that connect has fetched; the web app comes from the host as with every profile. */
|
|
307
307
|
export const startCached = (cached: CachedProfile, port: number | undefined): Promise<number> => startProfile({
|
|
308
308
|
profile: cached.profile,
|
|
309
309
|
profileFile: cached.profileFile,
|
|
@@ -311,7 +311,7 @@ export const startCached = (cached: CachedProfile, port: number | undefined): Pr
|
|
|
311
311
|
port,
|
|
312
312
|
});
|
|
313
313
|
|
|
314
|
-
//
|
|
314
|
+
// In the extension's bundle import.meta is empty; then there is no command line entry.
|
|
315
315
|
const moduleUrl: string | undefined = import.meta.url;
|
|
316
316
|
if (moduleUrl && process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(moduleUrl)) {
|
|
317
317
|
main().catch((error: unknown) => {
|
package/scripts/remote/start.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// The hook resolves @ragents/* also for a profile file outside the host; in the package there is no node_modules there.
|
|
2
2
|
import "../../apps/server/src/host-resolution.ts";
|
|
3
3
|
import { readFile, readdir } from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
@@ -7,10 +7,10 @@ import { ragentsDataRoot } from "../../apps/server/src/data-directory.ts";
|
|
|
7
7
|
import { localProfile } from "../../apps/server/src/profile-target.ts";
|
|
8
8
|
import { startCached, startProfile, type CachedProfile } from "./connect.ts";
|
|
9
9
|
|
|
10
|
-
const usage = (): string => `
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
const usage = (): string => `Usage: ragents start <profile|path> [--port <n>]
|
|
11
|
+
Starts a profile of this host (core, developer, showcase), your own ragents.config.<profile>.ts at
|
|
12
|
+
any location or a version that ragents connect has already fetched, without asking the server.
|
|
13
|
+
The web app comes ready-made with the host, the same for every profile.`;
|
|
14
14
|
|
|
15
15
|
export const parseArguments = (argv: readonly string[]): { selection: string; port: number | undefined } => {
|
|
16
16
|
let profile: string | undefined;
|
|
@@ -19,22 +19,22 @@ export const parseArguments = (argv: readonly string[]): { selection: string; po
|
|
|
19
19
|
const argument = argv[index]!;
|
|
20
20
|
if (argument === "--port") {
|
|
21
21
|
const value = Number(argv[index + 1]);
|
|
22
|
-
if (!Number.isInteger(value) || value < 0 || value > 65535) throw new Error(`--port
|
|
22
|
+
if (!Number.isInteger(value) || value < 0 || value > 65535) throw new Error(`--port needs an integer from 0 to 65535, not ${argv[index + 1]}`);
|
|
23
23
|
port = value;
|
|
24
24
|
index += 1;
|
|
25
25
|
continue;
|
|
26
26
|
}
|
|
27
|
-
if (argument.startsWith("-") || profile) throw new Error(`
|
|
27
|
+
if (argument.startsWith("-") || profile) throw new Error(`Unknown argument: ${argument}\n${usage()}`);
|
|
28
28
|
profile = argument;
|
|
29
29
|
}
|
|
30
|
-
if (!profile) throw new Error(`
|
|
30
|
+
if (!profile) throw new Error(`The profile name is missing.\n${usage()}`);
|
|
31
31
|
return { selection: profile, port };
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
const directories = async (folder: string): Promise<readonly string[]> =>
|
|
35
35
|
(await readdir(folder, { withFileTypes: true }).catch(() => [])).filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
36
36
|
|
|
37
|
-
/**
|
|
37
|
+
/** All versions that connect has left in this data folder. */
|
|
38
38
|
export const cachedProfiles = async (dataRoot: string): Promise<readonly CachedProfile[]> => {
|
|
39
39
|
const remote = path.join(dataRoot, "remote");
|
|
40
40
|
const found: CachedProfile[] = [];
|
|
@@ -53,26 +53,26 @@ export const selectCachedProfile = (cached: readonly CachedProfile[], profile: s
|
|
|
53
53
|
if (matching.length === 1) return matching[0]!;
|
|
54
54
|
if (matching.length === 0) {
|
|
55
55
|
const known = cached.map((entry) => `${entry.profile} (${entry.serverUrl})`);
|
|
56
|
-
throw new Error(`
|
|
57
|
-
+ (known.length ? `
|
|
56
|
+
throw new Error(`The profile ${profile} is not in the cache. `
|
|
57
|
+
+ (known.length ? `Fetched are: ${known.join(", ")}.` : "No profile has been fetched yet; fetch it with ragents connect <server-url>."));
|
|
58
58
|
}
|
|
59
|
-
throw new Error(`
|
|
60
|
-
+ "
|
|
59
|
+
throw new Error(`The profile ${profile} comes from several servers (${matching.map((entry) => entry.serverUrl).join(", ")}); `
|
|
60
|
+
+ "use ragents connect <server-url>.");
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
const main = async (): Promise<void> => {
|
|
64
64
|
const arguments_ = parseArguments(process.argv.slice(2));
|
|
65
65
|
const own = localProfile(arguments_.selection);
|
|
66
66
|
if (own) {
|
|
67
|
-
console.log(`==
|
|
68
|
-
console.log(`==
|
|
67
|
+
console.log(`== Profile ${own.profile}`);
|
|
68
|
+
console.log(`== Profile file ${own.profileFile}`);
|
|
69
69
|
process.exitCode = await startProfile({ profile: own.profile, profileFile: own.profileFile, port: arguments_.port });
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
72
72
|
const cached = selectCachedProfile(await cachedProfiles(ragentsDataRoot()), arguments_.selection);
|
|
73
|
-
console.log(`==
|
|
74
|
-
console.log(`==
|
|
75
|
-
console.log(`==
|
|
73
|
+
console.log(`== Profile ${cached.profile} from server ${cached.serverUrl}, version ${cached.version.slice(0, 12)} (from cache)`);
|
|
74
|
+
console.log(`== Profile file ${cached.profileFile}`);
|
|
75
|
+
console.log(`== Data ${cached.dataDirectory}`);
|
|
76
76
|
process.exitCode = await startCached(cached, arguments_.port);
|
|
77
77
|
};
|
|
78
78
|
|
|
@@ -9,17 +9,17 @@ import { provisionWorkspace } from "../../apps/server/src/profile/provisioning.t
|
|
|
9
9
|
import { workspaceClientTransport } from "../../plugins/ragents.workspace/client/transport.ts";
|
|
10
10
|
import { WorkspaceClient, workstationRunsDirectory } from "../../plugins/ragents.workspace/client/workspace-client.ts";
|
|
11
11
|
|
|
12
|
-
const usage = (): string => `
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
(
|
|
19
|
-
RAGENTS_BASH
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
const usage = (): string => `Usage: [RAGENTS_TOKEN=<token>] pnpm workspace-client <server-url> [folder ...] [--id <id>] [--label <name>]
|
|
13
|
+
Registers the folders as a workspace with the server and executes its tasks with the executor
|
|
14
|
+
of this machine - the same as the VS Code extension does, just without VS Code. Without folders
|
|
15
|
+
the current directory applies. Every tool call appears as one line on stdout.
|
|
16
|
+
What the server's plugins contribute to the executor, such as language servers, the workspace loads
|
|
17
|
+
at registration from this host's bundles; startup fetches their tools onto this machine
|
|
18
|
+
(the same as pnpm provision --workspace). On Windows
|
|
19
|
+
RAGENTS_BASH names the bash.exe that RAgents brings along (from the Windows build of the VS Code
|
|
20
|
+
extension); without it the bash tool fails. RAGENTS_RG names an rg whose folder the bash has at the
|
|
21
|
+
front of its PATH, such as the one from the extension; if not given, one in the PATH applies. The
|
|
22
|
+
script runs until it is ended with Ctrl-C.`;
|
|
23
23
|
|
|
24
24
|
export interface WorkspaceClientArguments {
|
|
25
25
|
readonly serverUrl: string;
|
|
@@ -37,30 +37,30 @@ export const parseArguments = (argv: readonly string[]): WorkspaceClientArgument
|
|
|
37
37
|
const argument = argv[index]!;
|
|
38
38
|
if (argument === "--id" || argument === "--label") {
|
|
39
39
|
const value = argv[index + 1];
|
|
40
|
-
if (!value || value.startsWith("-")) throw new Error(`${argument}
|
|
40
|
+
if (!value || value.startsWith("-")) throw new Error(`${argument} needs a value.\n${usage()}`);
|
|
41
41
|
if (argument === "--id") id = value;
|
|
42
42
|
else label = value;
|
|
43
43
|
index += 1;
|
|
44
44
|
continue;
|
|
45
45
|
}
|
|
46
|
-
if (argument.startsWith("-")) throw new Error(`
|
|
46
|
+
if (argument.startsWith("-")) throw new Error(`Unknown argument: ${argument}\n${usage()}`);
|
|
47
47
|
if (serverUrl === undefined) serverUrl = argument;
|
|
48
48
|
else folders.push(argument);
|
|
49
49
|
}
|
|
50
|
-
if (!serverUrl) throw new Error(`
|
|
51
|
-
if (id !== undefined && !/^[A-Za-z0-9_-]{8,64}$/.test(id)) throw new Error("--id
|
|
50
|
+
if (!serverUrl) throw new Error(`The server address is missing.\n${usage()}`);
|
|
51
|
+
if (id !== undefined && !/^[A-Za-z0-9_-]{8,64}$/.test(id)) throw new Error("--id needs 8 to 64 characters from A-Z, a-z, 0-9, _ and -.");
|
|
52
52
|
return { serverUrl, folders, id, label };
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
/**
|
|
55
|
+
/** A stable id per machine and folder set, so the server recognizes the same workspace again. */
|
|
56
56
|
export const workspaceClientId = (host: string, folders: readonly string[]): string =>
|
|
57
57
|
`cli-${createHash("sha256").update([host, ...folders].join("\n")).digest("hex").slice(0, 32)}`;
|
|
58
58
|
|
|
59
|
-
/**
|
|
59
|
+
/** Folders are resolved from the caller; pnpm and the bin command start the script in apps/server. */
|
|
60
60
|
export const resolvedFolders = (folders: readonly string[], caller = callerDirectory()): string[] => {
|
|
61
61
|
const resolved = (folders.length > 0 ? folders : [caller]).map((folder) => path.resolve(caller, folder));
|
|
62
62
|
for (const folder of resolved) {
|
|
63
|
-
if (!statSync(folder, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`
|
|
63
|
+
if (!statSync(folder, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`Not a directory: ${folder}`);
|
|
64
64
|
}
|
|
65
65
|
return resolved;
|
|
66
66
|
};
|
|
@@ -85,14 +85,14 @@ const main = async (): Promise<void> => {
|
|
|
85
85
|
onExecuted: ({ runId, operation, durationMs, error }) =>
|
|
86
86
|
console.log(`== ${runId.slice(0, 8)} ${operation} ${durationMs} ms ${error ?? "ok"}`),
|
|
87
87
|
});
|
|
88
|
-
console.log(`==
|
|
89
|
-
for (const folder of folders) console.log(`==
|
|
90
|
-
console.log("==
|
|
88
|
+
console.log(`== Workspace ${identity.label} (${identity.id})`);
|
|
89
|
+
for (const folder of folders) console.log(`== Folder ${folder}`);
|
|
90
|
+
console.log("== Provisioning tools");
|
|
91
91
|
await provisionWorkspace((line) => console.log(line));
|
|
92
92
|
console.log(`== Server ${parsed.serverUrl}`);
|
|
93
93
|
client.onChange(() => {
|
|
94
94
|
const status = client.status;
|
|
95
|
-
console.log(status.kind === "failed" ? `==
|
|
95
|
+
console.log(status.kind === "failed" ? `== Registration failed: ${status.message}` : `== State ${status.kind}`);
|
|
96
96
|
});
|
|
97
97
|
await client.register();
|
|
98
98
|
if (client.status.kind !== "registered") {
|
|
@@ -100,7 +100,7 @@ const main = async (): Promise<void> => {
|
|
|
100
100
|
transport.rpc.close();
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
|
-
console.log("==
|
|
103
|
+
console.log("== Registered; Ctrl-C ends the workspace");
|
|
104
104
|
await new Promise<void>((finish) => {
|
|
105
105
|
const stop = () => {
|
|
106
106
|
process.off("SIGINT", stop);
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{a as oe,r as t,j as e,D as ce,b as de,d as G,B as g,X as Le,M as Pe,C as ue,e as Oe,f as Ie,g as He,h as _e,u as Be,i as Fe,k as Ue,l as qe,m as Ke,A as Te,n as $e,o as We,U as Qe,P as Ve,W as Ge,R as Xe,p as ae,q as V,s as Je,t as Ye,v as Ze,w as et,x as tt,y as st,z as nt,Q as rt,F as at,G as it}from"./mermaid-HWGCJPDP-BLLeth5_.js";/**
|
|
2
|
-
* @license lucide-react v1.46.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const fe={name:"circle-question-mark",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],aliases:["help-circle","circle-help"]};fe.node;const lt=oe(fe);/**
|
|
7
|
-
* @license lucide-react v1.46.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const he={name:"sparkles",size:24,node:[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],aliases:["stars"]};he.node;const ot=oe(he);function ct(n,r,a,u){if(!r||n.source!==r||n.origin!==a)return;const i=n.data;if(!(!i||typeof i!="object"||Array.isArray(i))&&"type"in i){if(i.type==="ragents:help-ready")return{type:"ready"};if(i.type==="ragents:start-sample"&&"entry"in i&&typeof i.entry=="string"&&u.includes(i.entry))return{type:"start",entry:i.entry}}}function dt({onClose:n,sampleEntries:r,onStartSample:a}){const u=t.useRef(null),i=t.useRef(null),h=t.useRef(void 0),x=t.useRef(!1);t.useEffect(()=>()=>{var l;return(l=h.current)==null?void 0:l.call(h)},[]),t.useEffect(()=>{var j;const l=(j=i.current)==null?void 0:j.contentWindow;if(!l)return;const o=()=>l.postMessage({type:"ragents:help-context",canStartSamples:r.length>0,entries:r},window.location.origin),p=C=>{const c=ct(C,l,window.location.origin,r);(c==null?void 0:c.type)==="ready"&&o(),(c==null?void 0:c.type)==="start"&&!x.current&&(x.current=!0,a(c.entry))};return window.addEventListener("message",p),o(),()=>window.removeEventListener("message",p)},[a,r]);const m=()=>{var C;(C=h.current)==null||C.call(h);const l=i.current,o=l==null?void 0:l.contentDocument,p=o==null?void 0:o.defaultView;if(!l||!o||!p)return;o.documentElement.dataset.helpEmbedded="true";for(const c of o.querySelectorAll("a[href]"))new URL(c.href).origin!==window.location.origin&&(c.target="_blank",c.rel="noopener noreferrer");const j=c=>{var v;if(!c.defaultPrevented){if(c.key==="Escape")c.preventDefault(),n();else if(c.key==="Tab"){const b=[...o.querySelectorAll("a[href], button, input, select, textarea, summary, [tabindex]")].filter(y=>y.tabIndex>=0&&!y.matches(":disabled")&&y.getClientRects().length>0),O=c.shiftKey?b[0]:b.at(-1);if(!b.length||o.activeElement===O||o.activeElement===o.body){if(!c.shiftKey&&o.activeElement===o.body&&b.length)return;c.preventDefault(),(v=u.current)==null||v.focus()}}}};p.addEventListener("keydown",j),h.current=()=>p.removeEventListener("keydown",j)};return e.jsx(ce,{open:!0,onOpenChange:l=>{l||n()},children:e.jsxs(de,{className:"gap-0 p-0",initialFocus:u,scope:"page",showCloseButton:!1,size:"full",children:[e.jsx(G,{className:"sr-only",children:"Hilfe"}),e.jsx(g,{"aria-label":"Hilfe schließen",className:"absolute top-3 right-4.5 z-1 rounded-full",onClick:n,ref:u,size:"icon",variant:"outline",children:e.jsx(Le,{})}),e.jsx("iframe",{className:"min-h-0 w-full min-w-0 flex-[1_1_0] bg-background",onLoad:m,ref:i,src:"/help/index.html",tabIndex:0,title:"RAgents: Homepage und Dokumentation"})]})})}const ut="button:not([disabled]), a[href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex='-1'])",me="pointer-events-auto shadow-pop";function ft({onBusy:n,onClose:r,onOpen:a,open:u,panels:i,registry:h,runs:x}){const m=t.useRef(null);return t.useEffect(()=>{if(!u)return;const l=requestAnimationFrame(()=>{var p;const o=m.current;!o||o.contains(document.activeElement)||(p=o.querySelector(ut))==null||p.focus({preventScroll:!0})});return()=>cancelAnimationFrame(l)},[u]),e.jsxs(Pe,{className:"pointer-events-none flex h-[min(900px,100%)] w-[min(1440px,100%)] flex-col rounded-none bg-transparent p-0 ring-0",keepMounted:!0,onClose:r,open:u,scope:"workspace",size:"full",children:[e.jsx(G,{className:"sr-only",children:"Übersicht"}),e.jsxs("div",{className:"flex min-h-0 min-w-0 flex-1 gap-4 max-[900px]:flex-col",id:"app-overview",ref:m,children:[i.map(({id:l,Panel:o})=>e.jsx(ht,{id:l,onBusy:n,onClose:r,onOpen:a,open:u,Panel:o,registry:h},l)),x&&e.jsx(mt,{...x})]})]})}function ht({id:n,onBusy:r,onClose:a,onOpen:u,open:i,Panel:h,registry:x}){const m=t.useCallback(l=>r(n,l),[n,r]);return t.useEffect(()=>()=>r(n,!1),[n,r]),e.jsx(ue,{className:`${me} min-h-0 min-w-0 flex-1 gap-0 p-0`,children:e.jsx(h,{onBusy:m,onClose:a,onOpen:u,open:i,registry:x})})}function mt({activeId:n,canCreate:r,canDelete:a,onCreate:u,onDelete:i,onOpen:h,registry:x,sessions:m,seenRevisions:l,unreachable:o}){const[p,j]=t.useState(),[C,c]=t.useState(!1),[v,b]=t.useState(()=>new Set),[O,y]=t.useState(!1),[N,_]=t.useState(!1),B=()=>{c(!1),b(new Set)},w=f=>{b(z=>{const I=new Set(z);return I.delete(f)||I.add(f),I})},E=async f=>{_(!0),j(void 0);try{await i(f)}catch(z){j(z instanceof Error?z.message:String(z))}finally{_(!1)}},k=async()=>{await E(m.filter(f=>v.has(f.id)).map(f=>f.id)),y(!1),B()};return e.jsx("section",{"aria-labelledby":"overview-runs-title",className:"flex min-h-0 min-w-0 flex-1 flex-col max-[900px]:flex-[1_1_50%]",children:e.jsxs(ue,{className:`${me} min-h-0 flex-1 gap-workspace-inset overflow-y-auto overscroll-contain pt-workspace-inset pr-6 pb-6 pl-6 max-[900px]:px-3 max-[900px]:pt-3.5 max-[900px]:pb-4`,children:[e.jsxs("header",{className:"flex flex-wrap items-center gap-x-3.5 gap-y-2.5",children:[e.jsxs("h2",{className:"text-[0.95rem] font-semibold",id:"overview-runs-title",children:["Runs ",e.jsx("span",{className:"ml-1 text-[0.8rem] font-medium tabular-nums text-muted-foreground",children:m.length})]}),o&&e.jsx("span",{className:"text-[0.72rem] font-medium text-destructive",role:"alert",children:"Server nicht erreichbar"}),a&&m.length>0&&e.jsx("div",{className:"ml-auto flex flex-wrap items-center gap-1",children:C?e.jsxs(e.Fragment,{children:[e.jsx(g,{onClick:()=>b(new Set(m.map(f=>f.id))),size:"sm",variant:"ghost",children:"Alle"}),e.jsx(g,{onClick:()=>b(new Set),size:"sm",variant:"ghost",children:"Keine"}),e.jsxs(g,{className:"ml-auto",disabled:v.size===0||N,onClick:()=>y(!0),size:"sm",variant:"destructive",children:["Löschen (",v.size,")"]}),e.jsx(g,{onClick:B,size:"sm",variant:"ghost",children:"Fertig"})]}):e.jsx(g,{onClick:()=>c(!0),size:"sm",variant:"ghost",children:"Auswählen"})})]}),p&&e.jsx("p",{className:"text-[0.72rem] font-medium text-destructive",role:"alert",children:p}),e.jsx("p",{className:"mb-5.5 text-[0.75rem] text-muted-foreground",children:"Nach letzter Aktivität im Run. Neue Aktivität ist seit Deinem letzten Ansehen hinzugekommen."}),e.jsx(Oe,{seenRevisions:l,activeId:n,onCreate:r?u:void 0,onDelete:a?f=>void E([f]):void 0,onSelect:h,onToggleSelected:w,registry:x,selectMode:C,selectedIds:v,sessions:m}),O&&e.jsx(ce,{open:!0,onOpenChange:f=>{!f&&!N&&y(!1)},children:e.jsxs(de,{scope:"page",showCloseButton:!1,size:"small",children:[e.jsxs(Ie,{children:[e.jsx(G,{children:"Runs löschen"}),e.jsx(He,{children:v.size===1?"Ein Run wird endgültig gelöscht.":`${v.size} Runs werden endgültig gelöscht.`})]}),e.jsxs(_e,{children:[e.jsx(g,{disabled:N,onClick:()=>y(!1),variant:"outline",children:"Abbrechen"}),e.jsx(g,{disabled:N,onClick:()=>void k(),children:N?"Löscht ...":`Löschen (${v.size})`})]})]})})]})})}const ie="flex min-h-0 min-w-0 flex-1 flex-col",xt="inline-flex w-header min-h-header items-center justify-center border-r border-border text-primary transition-colors duration-100 not-disabled:cursor-pointer hover:not-disabled:bg-accent focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:-outline-offset-3 aria-expanded:bg-primary aria-expanded:text-primary-foreground aria-pressed:bg-primary aria-pressed:text-primary-foreground disabled:opacity-45";function pt(){var re;const n=Be(),r=Fe((re=n.user)==null?void 0:re.id),a=n.can("runs.read"),u=a&&n.can("runs.write"),i=n.can("runs.inspect"),h=a&&n.can("runs.delete"),x=Ue(),m=t.useRef(null),l=t.useRef(null),[o,p]=t.useState(null),[j,C]=t.useState(null),[c,v]=t.useState(null),[b,O]=t.useState(null),[y,N]=t.useState(null),[_,B]=t.useState([]),[w,E]=t.useState(),[k,f]=t.useState(),[z,I]=t.useState(),[U,X]=t.useState(!1),[q,K]=t.useState(!1),[D,J]=t.useState(!1),[Y,A]=t.useState(),[pe,ve]=t.useState(!1),[ge,be]=t.useState(()=>new Set),[we,Z]=t.useState(!1),H=t.useRef(void 0),T=t.useRef(!1),L=t.useCallback(()=>{if(!a)return Promise.resolve();if(H.current)return T.current=!0,H.current;const s=async()=>{do{T.current=!1;try{B(await Ye()),Z(!1)}catch{Z(!0)}}while(T.current)};return H.current=s().finally(()=>{H.current=void 0}),H.current},[a]);t.useEffect(()=>{if(!a||w)return;L();const s=qe.subscribe(Ke.channels.runs,{},()=>void L()),d=setInterval(()=>void L(),5e3);return()=>{s(),clearInterval(d)}},[w,a,L]);const M=t.useCallback((s=!1)=>{var d;J(!1),s&&((d=m.current)==null||d.focus({preventScroll:!0}))},[]),$=t.useCallback(()=>{A(void 0),ve(!0),J(!0)},[]),W=t.useCallback(()=>{D?M(!0):$()},[M,$,D]);t.useEffect(()=>{const s=d=>{if(d.defaultPrevented||d.repeat||d.altKey||d.shiftKey||d.key.toLowerCase()!=="i"||d.metaKey===d.ctrlKey)return;const R=m.current;!R||R.closest("[inert]")||(d.preventDefault(),W())};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[W]);const ee=t.useCallback((s,d)=>be(R=>{if(R.has(s)===d)return R;const P=new Set(R);return d?P.add(s):P.delete(s),P}),[]),te=_,je=te.find(s=>s.id===k),ye=t.useCallback(()=>{A(void 0),X(!0)},[]),ke=t.useCallback(()=>K(!1),[]),Se=t.useCallback(()=>{X(!1),requestAnimationFrame(()=>{var s;return(s=l.current)==null?void 0:s.focus()})},[]),Ce=e.jsx(g,{"aria-label":"Einstellungen öffnen",onClick:ye,ref:l,size:"icon-lg",title:"Einstellungen",variant:"ghost",children:e.jsx(Ze,{})}),Re=s=>{f(s),M(!0)},Ne=()=>{A(void 0),M(!0),E({id:crypto.randomUUID(),title:"Neuer Run",updatedAt:Date.now()})},Ee=async s=>{const d=await Promise.allSettled(s.map(F=>et(F))),R=s.filter((F,Me)=>d[Me].status==="fulfilled");k!==void 0&&R.includes(k)&&f(void 0),await L();const P=d.find(F=>F.status==="rejected");if(P)throw P.reason};if(x.status==="loading")return e.jsx("div",{className:"m-auto p-6 text-muted-foreground",children:"Profil wird geladen."});if(x.status==="failed")return e.jsx("div",{className:"flex h-full",children:e.jsx("main",{className:"relative z-1 flex min-h-0 min-w-0 flex-1 bg-[image:var(--surface-backdrop)]",children:e.jsxs("div",{className:ie,children:[e.jsx("header",{className:"flex min-h-[42px] flex-none items-center gap-3 border-b border-border-soft pr-0.5 pb-2 pl-2.5",children:e.jsx("div",{className:"flex min-w-0 flex-1 items-center gap-3 text-[0.82rem] font-semibold text-foreground",children:"Profil nicht verfügbar"})}),e.jsxs(Te,{className:"m-auto max-w-[560px] gap-3 p-6",variant:"destructive",children:[e.jsx("p",{children:x.error}),e.jsx(g,{variant:"outline",onClick:()=>window.location.reload(),children:"Neu laden"})]})]})})});const S=x.registry,se=S.overviewPanels.filter(s=>s.readRight===void 0||n.can(s.readRight)),Q=se.filter(s=>s.placement!=="toolbar"),ze=se.filter(s=>s.placement==="toolbar"),De=a||Q.length>0,ne=Q.some(s=>ge.has(s.id)),Ae=$e(a?k:void 0,D,z);return e.jsxs("div",{className:"flex h-full flex-col",children:[e.jsxs("header",{className:"relative z-[80] flex h-header flex-none items-stretch border-b border-border bg-shell shadow-bar",children:[De&&e.jsx("div",{className:"relative flex flex-none self-stretch",children:e.jsx("button",{"aria-controls":"app-overview","aria-expanded":D,"aria-haspopup":"dialog","aria-keyshortcuts":"Meta+I Control+I","aria-label":D?"Übersicht schließen":"Übersicht öffnen",className:xt,onClick:W,ref:m,title:`Übersicht (Cmd+I / Ctrl+I)${ne?": Bearbeitung läuft":""}`,type:"button",children:ne?e.jsx(We,{"aria-hidden":!0,className:"size-[18px]"}):e.jsx(ot,{size:22})})}),ze.map(({id:s,Panel:d})=>e.jsx(vt,{id:s,onBusy:ee,onClose:()=>A(void 0),onOpen:()=>{!U&&!q&&!w&&(M(),A(s))},open:Y===s,Panel:d,registry:S,userLocation:Ae},s)),e.jsx("div",{"aria-label":"Run-Titelleiste",className:"flex min-w-0 flex-1 items-stretch overflow-x-auto no-scrollbar focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:-outline-offset-3 max-md:in-[header:has([data-slot=overseer-toolbar][data-open=true])]:flex-[0_1_0]",ref:p,role:"region",tabIndex:0}),e.jsx(Qe,{}),e.jsxs("div",{className:"flex min-w-0 flex-[0_1_auto] items-stretch bg-shell has-data-[workspace-state=expanded]:w-[var(--workspace-panel-width,560px)] has-data-[workspace-state=expanded]:border-l has-data-[workspace-state=expanded]:border-border",children:[e.jsx("div",{className:"flex min-w-0 flex-1 empty:hidden",ref:C}),e.jsxs("div",{className:"flex flex-none items-center gap-1.5 px-2 max-md:gap-0.5 max-md:px-1",children:[n.can("settings.read")&&Ce,i&&e.jsx(g,{"aria-haspopup":"dialog","aria-label":"Hilfe öffnen",onClick:()=>{A(void 0),K(!0)},size:"icon-lg",title:"Hilfe",variant:"ghost",children:e.jsx(lt,{})})]})]})]}),e.jsx(Ve,{failures:x.failures}),e.jsx(Ge.Provider,{value:b,children:e.jsx("div",{className:"relative flex min-h-0 flex-1 flex-col",ref:O,children:e.jsxs(Xe.Provider,{value:y,children:[e.jsxs("div",{className:"relative flex h-auto min-h-0 flex-1",ref:N,children:[e.jsx("main",{className:"relative z-1 flex min-h-0 min-w-0 flex-1 bg-[image:var(--surface-backdrop)] @container/chat-content",children:a&&k?e.jsx(ae,{headerContainer:o,workspaceHeaderContainer:j,statusContainer:c,onLocationChange:I,onViewed:r.markViewed,viewing:!D&&!U&&!q&&!w&&!Y,registry:S,session:je??{id:k,title:"Neuer Run",updatedAt:Date.now()}},k):e.jsx("div",{className:ie,children:e.jsx("div",{className:"m-auto text-center text-muted-foreground",children:a?u?"Öffne oben links die Übersicht, um einen Run zu wählen oder einen neuen zu starten.":"Öffne oben links die Übersicht, um einen Run zu wählen. Du hast Lesezugriff.":"Für dieses Benutzerkonto sind keine Runs freigegeben."})})}),pe&&e.jsx(ft,{onOpen:$,onBusy:ee,onClose:()=>M(!0),open:D,panels:Q,registry:S,runs:a?{activeId:k,canCreate:u&&(n.can("runs.create")||S.scriptEntries.some(s=>V(n,s.id))),canDelete:h,onCreate:Ne,onDelete:Ee,onOpen:Re,registry:S,sessions:te,seenRevisions:r.revisions,unreachable:we}:void 0}),w&&e.jsx(ae,{onStarted:()=>{f(w.id),E(void 0),L()},registry:S,session:w,startDialog:{onClose:()=>E(void 0),initialEntryId:w.startEntryId}},w.id),U&&e.jsx(Je,{onClose:Se,registry:S}),i&&q&&e.jsx(dt,{onClose:ke,sampleEntries:S.scriptEntries.filter(s=>V(n,s.id)).map(s=>s.id),onStartSample:s=>{!V(n,s)||!S.scriptEntries.some(d=>d.id===s)||(K(!1),A(void 0),M(),E({id:crypto.randomUUID(),title:"Neuer Run",updatedAt:Date.now(),startEntryId:s}))}})]}),e.jsx("footer",{"aria-label":"Run-Statusleiste",className:"relative flex h-statusbar w-full flex-none items-stretch pl-3 before:pointer-events-none before:absolute before:inset-0 before:z-[2] before:border-t before:border-border before:bg-shell before:shadow-status before:backdrop-blur-[16px] before:content-['']",ref:v})]})})})]})}function vt({id:n,onBusy:r,Panel:a,...u}){const i=t.useCallback(h=>r(n,h),[n,r]);return t.useEffect(()=>()=>r(n,!1),[n,r]),e.jsx(a,{...u,onBusy:i})}tt();const xe=document.getElementById("root");if(!xe)throw new Error("Root-Element fehlt");const le=st.createRoot(xe);try{const n=nt(window);le.render(e.jsx(t.StrictMode,{children:e.jsx(rt,{children:e.jsx(at,{children:e.jsx(pt,{})})})}))}catch(n){le.render(e.jsxs(it,{children:[e.jsx("h1",{className:"my-3 text-[1.5rem]",children:"Darstellung konnte nicht geladen werden"}),e.jsx("p",{className:"mb-6 leading-normal",role:"alert",children:n instanceof Error?n.message:String(n)}),e.jsx(g,{onClick:()=>window.location.reload(),variant:"outline",children:"Erneut laden"})]}))}
|