@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
|
@@ -22,29 +22,29 @@ import { useSessionList } from "./use-session-list";
|
|
|
22
22
|
const headerClass = "relative z-[80] flex h-header flex-none items-stretch border-b border-border bg-shell shadow-bar";
|
|
23
23
|
const connectionClass = "max-w-[120px] self-center truncate rounded-full bg-secondary px-2 py-0.5 text-[0.66rem] font-semibold text-muted-foreground";
|
|
24
24
|
const pendingTitleClass = "min-w-0 flex-1 self-center truncate px-1.5 text-[0.82rem] font-semibold";
|
|
25
|
-
const STOP_REASON = "
|
|
26
|
-
/**
|
|
25
|
+
const STOP_REASON = "Stopped in the run panel";
|
|
26
|
+
/** How long the panel in VS Code without a run waits for its host's start request. */
|
|
27
27
|
const HOST_COMMAND_TIMEOUT_MS = 5000;
|
|
28
|
-
const NEW_RUN_TITLE = "
|
|
28
|
+
const NEW_RUN_TITLE = "New run";
|
|
29
29
|
const listHeaderClass = "relative z-[80] flex h-header flex-none items-center gap-2 border-b border-border bg-shell px-3 shadow-bar";
|
|
30
30
|
const noticeClass = "m-auto max-w-[420px] p-6 text-center text-muted-foreground";
|
|
31
31
|
const noSelection: ReadonlySet<string> = new Set();
|
|
32
32
|
const newDraft = (): SessionInfo => ({ id: crypto.randomUUID(), title: NEW_RUN_TITLE, updatedAt: Date.now() });
|
|
33
33
|
const placeholderSession = (id: string, title = "Run"): SessionInfo => ({ id, title, updatedAt: Date.now() });
|
|
34
|
-
const profileLoading: StartupNoticeState = { kind: "working", title: "
|
|
35
|
-
const hostStarting: StartupNoticeState = { kind: "working", title: "
|
|
36
|
-
const launchStarting: StartupNoticeState = { kind: "working", title: "
|
|
37
|
-
const noRunSelected: StartupNoticeState = { kind: "waiting", title: "
|
|
38
|
-
const noRunsReadable: StartupNoticeState = { kind: "error", title: "
|
|
34
|
+
const profileLoading: StartupNoticeState = { kind: "working", title: "Loading profile", detail: "Loading the server's interface." };
|
|
35
|
+
const hostStarting: StartupNoticeState = { kind: "working", title: "Starting run", detail: "Creating the new run." };
|
|
36
|
+
const launchStarting: StartupNoticeState = { kind: "working", title: "Starting run", detail: "Starting the template." };
|
|
37
|
+
const noRunSelected: StartupNoticeState = { kind: "waiting", title: "No run selected", detail: "On the Start page you start a new run or open an existing one." };
|
|
38
|
+
const noRunsReadable: StartupNoticeState = { kind: "error", title: "No runs enabled", detail: "No runs are enabled for this user account." };
|
|
39
39
|
|
|
40
|
-
/**
|
|
40
|
+
/** The run panel: a run with chat and mini-apps, without a run in the browser the run list; layout=app shows exactly one surface element. */
|
|
41
41
|
export function RunPanelApp({ location }: { location: RunPanelLocation }) {
|
|
42
42
|
const activation = usePluginActivation();
|
|
43
43
|
const headless = location.layout === "app";
|
|
44
44
|
if (activation.status === "loading") return <PendingPanel headless={headless} state={profileLoading} />;
|
|
45
45
|
if (activation.status === "failed") return (
|
|
46
|
-
<PendingPanel headless={headless} state={{ kind: "error", title: "
|
|
47
|
-
<Button onClick={() => window.location.reload()} size="sm" variant="outline">
|
|
46
|
+
<PendingPanel headless={headless} state={{ kind: "error", title: "The profile could not be loaded", detail: activation.error }}>
|
|
47
|
+
<Button onClick={() => window.location.reload()} size="sm" variant="outline">Reload</Button>
|
|
48
48
|
</PendingPanel>
|
|
49
49
|
);
|
|
50
50
|
const page = location.layout === "app"
|
|
@@ -74,7 +74,7 @@ function RunPanelPage({ connection, initialRunId, registry }: { connection: stri
|
|
|
74
74
|
const [runStartOptions, setRunStartOptions] = useState<Readonly<Record<string, unknown>>>();
|
|
75
75
|
const [draft, setDraft] = useState<{ session: SessionInfo; startOptions?: Readonly<Record<string, unknown>>; entryId?: string }>();
|
|
76
76
|
const [launch, setLaunch] = useState<Launch>();
|
|
77
|
-
/**
|
|
77
|
+
/** The run whose start still counts; a later click, another run, or going back replaces it. */
|
|
78
78
|
const launching = useRef<string>(undefined);
|
|
79
79
|
const replaceLaunch = useCallback((next: Launch | undefined) => {
|
|
80
80
|
launching.current = next?.runId;
|
|
@@ -99,7 +99,7 @@ function RunPanelPage({ connection, initialRunId, registry }: { connection: stri
|
|
|
99
99
|
setRunId(id);
|
|
100
100
|
setFocusRunId(host.kind === "vscode" ? id : undefined);
|
|
101
101
|
}, [host.kind, replaceLaunch]);
|
|
102
|
-
/**
|
|
102
|
+
/** A template without a guide starts right away; its result counts only as long as it is the current start. */
|
|
103
103
|
const startLaunch = useCallback((next: Launch) => {
|
|
104
104
|
setDraft(undefined);
|
|
105
105
|
replaceLaunch(next);
|
|
@@ -113,7 +113,7 @@ function RunPanelPage({ connection, initialRunId, registry }: { connection: stri
|
|
|
113
113
|
setRunTitle(undefined);
|
|
114
114
|
setRunId(id);
|
|
115
115
|
}, []);
|
|
116
|
-
/**
|
|
116
|
+
/** The back arrow always leads to the Start page; in the browser that is the run list of this server. */
|
|
117
117
|
const showStart = useCallback(() => {
|
|
118
118
|
setFocusRunId(undefined);
|
|
119
119
|
setDraft(undefined);
|
|
@@ -154,9 +154,9 @@ function RunPanelPage({ connection, initialRunId, registry }: { connection: stri
|
|
|
154
154
|
if (canCreate) startDraft(message.startOptions, message.entryId);
|
|
155
155
|
return;
|
|
156
156
|
}
|
|
157
|
-
//
|
|
158
|
-
const refused = !canCreate ? "
|
|
159
|
-
: message.entryId === undefined && !canCreateFree ? "
|
|
157
|
+
// In the panel a click is a click: only a guide asks questions first as in the web app, the free task is formed in the chat.
|
|
158
|
+
const refused = !canCreate ? "New runs are not enabled for this user account."
|
|
159
|
+
: message.entryId === undefined && !canCreateFree ? "Free runs are not enabled for this user account." : undefined;
|
|
160
160
|
setRefusal(refused);
|
|
161
161
|
if (refused !== undefined) return;
|
|
162
162
|
const entry = registry.startEntries.find((candidate) => candidate.id === message.entryId);
|
|
@@ -177,12 +177,12 @@ function RunPanelPage({ connection, initialRunId, registry }: { connection: stri
|
|
|
177
177
|
|
|
178
178
|
const settings = settingsOpen && <SettingsModal onClose={() => setSettingsOpen(false)} registry={registry} />;
|
|
179
179
|
const pendingHeader = (title: string) => <>
|
|
180
|
-
<Button aria-label="
|
|
180
|
+
<Button aria-label="Back to Start" className="self-center" onClick={showStart} size="icon-lg" title="Back to Start" variant="ghost"><ArrowLeftIcon /></Button>
|
|
181
181
|
<strong className={pendingTitleClass}>{title}</strong>
|
|
182
182
|
{connection && <span className={connectionClass} title={`Server ${connection}`}>{connection}</span>}
|
|
183
183
|
<RunPanelMenu onOpenSettings={openSettings} />
|
|
184
184
|
</>;
|
|
185
|
-
const toStart = <Button onClick={showStart} size="sm" variant="outline">
|
|
185
|
+
const toStart = <Button onClick={showStart} size="sm" variant="outline">Back to Start</Button>;
|
|
186
186
|
const draftChat = draft && <PluginChat
|
|
187
187
|
initialStartOptions={draft.startOptions}
|
|
188
188
|
key={draft.session.id}
|
|
@@ -194,7 +194,7 @@ function RunPanelPage({ connection, initialRunId, registry }: { connection: stri
|
|
|
194
194
|
if (launch) return <>
|
|
195
195
|
{launch.error === undefined
|
|
196
196
|
? <PendingPanel header={pendingHeader(runTitle ?? NEW_RUN_TITLE)} state={launchStarting} />
|
|
197
|
-
: <PendingPanel header={pendingHeader(runTitle ?? NEW_RUN_TITLE)} state={{ kind: "error", title: "
|
|
197
|
+
: <PendingPanel header={pendingHeader(runTitle ?? NEW_RUN_TITLE)} state={{ kind: "error", title: "The run could not be started", detail: launch.error }}>{toStart}</PendingPanel>}
|
|
198
198
|
{settings}
|
|
199
199
|
</>;
|
|
200
200
|
if (host.kind === "vscode" && draft) return <>
|
|
@@ -202,10 +202,10 @@ function RunPanelPage({ connection, initialRunId, registry }: { connection: stri
|
|
|
202
202
|
{draftChat}
|
|
203
203
|
{settings}
|
|
204
204
|
</>;
|
|
205
|
-
// In VS Code
|
|
205
|
+
// In VS Code the extension's Start page chooses the run; without one the panel waits for its request instead of showing a list.
|
|
206
206
|
if (host.kind === "vscode" && !(readRuns && runId)) return <>
|
|
207
207
|
{!readRuns ? <PendingPanel header={pendingHeader(NEW_RUN_TITLE)} state={noRunsReadable}>{toStart}</PendingPanel>
|
|
208
|
-
: refusal !== undefined ? <PendingPanel header={pendingHeader(NEW_RUN_TITLE)} state={{ kind: "error", title: "
|
|
208
|
+
: refusal !== undefined ? <PendingPanel header={pendingHeader(NEW_RUN_TITLE)} state={{ kind: "error", title: "No new run possible", detail: refusal }}>{toStart}</PendingPanel>
|
|
209
209
|
: <HostWaiting header={pendingHeader(NEW_RUN_TITLE)}>{toStart}</HostWaiting>}
|
|
210
210
|
{settings}
|
|
211
211
|
</>;
|
|
@@ -214,23 +214,23 @@ function RunPanelPage({ connection, initialRunId, registry }: { connection: stri
|
|
|
214
214
|
const stop = () => {
|
|
215
215
|
if (runId === undefined) return;
|
|
216
216
|
setStopError(undefined);
|
|
217
|
-
void stopRun(runId, STOP_REASON).catch((cause: unknown) => setStopError(`
|
|
217
|
+
void stopRun(runId, STOP_REASON).catch((cause: unknown) => setStopError(`Stop failed: ${cause instanceof Error ? cause.message : String(cause)}`));
|
|
218
218
|
};
|
|
219
219
|
const list = readRuns
|
|
220
220
|
? <SessionList activeId={runId} onCreate={canCreate ? createRun : undefined} onSelect={selectRun} onToggleSelected={() => undefined} registry={registry} seenRevisions={runReadState.revisions} selectMode={false} selectedIds={noSelection} sessions={sessions} />
|
|
221
|
-
: <p className={noticeClass}>
|
|
221
|
+
: <p className={noticeClass}>No runs are enabled for this user account.</p>;
|
|
222
222
|
return (
|
|
223
223
|
<div className="flex h-full flex-col bg-[image:var(--surface-backdrop)]">
|
|
224
224
|
{readRuns && runId
|
|
225
225
|
? (
|
|
226
226
|
<>
|
|
227
227
|
<header className={headerClass}>
|
|
228
|
-
<Button aria-label="
|
|
229
|
-
<div aria-label="Run
|
|
228
|
+
<Button aria-label="Back to Start" className="self-center" onClick={showStart} size="icon-lg" title="Back to Start" variant="ghost"><ArrowLeftIcon /></Button>
|
|
229
|
+
<div aria-label="Run title bar" className="flex min-w-0 flex-1 items-stretch overflow-x-auto no-scrollbar" ref={setHeaderContainer} role="region" />
|
|
230
230
|
{connection && <span className={connectionClass} title={`Server ${connection}`}>{connection}</span>}
|
|
231
231
|
<RunStateIcon className="self-center px-1.5" state={session?.running ? "running" : "idle"} />
|
|
232
|
-
<StopButton className="self-center" disabled={!writeRuns} label="
|
|
233
|
-
<div aria-label="
|
|
232
|
+
<StopButton className="self-center" disabled={!writeRuns} label="Stop run" onClick={stop} size="icon-lg" title="Stop the run with all agents and flows" />
|
|
233
|
+
<div aria-label="Panel tools" className="flex flex-none items-center empty:hidden" ref={setToolsContainer} role="toolbar" />
|
|
234
234
|
<RunPanelMenu onOpenSettings={openSettings} />
|
|
235
235
|
</header>
|
|
236
236
|
{stopError && <Alert variant="destructive">{stopError}</Alert>}
|
|
@@ -259,7 +259,7 @@ function RunPanelPage({ connection, initialRunId, registry }: { connection: stri
|
|
|
259
259
|
<RunPanelMenu onOpenSettings={openSettings} />
|
|
260
260
|
</header>
|
|
261
261
|
<div className="min-h-0 flex-1 overflow-auto p-3">
|
|
262
|
-
{unreachable && <Alert className="mb-3" variant="destructive">
|
|
262
|
+
{unreachable && <Alert className="mb-3" variant="destructive">The server is unreachable.</Alert>}
|
|
263
263
|
{list}
|
|
264
264
|
</div>
|
|
265
265
|
</>
|
|
@@ -277,11 +277,11 @@ interface Launch {
|
|
|
277
277
|
readonly error?: string;
|
|
278
278
|
}
|
|
279
279
|
|
|
280
|
-
/**
|
|
280
|
+
/** A click on a template of the start page: set start options, start the template, done. */
|
|
281
281
|
async function launchRun(launch: Launch, registry: PluginRegistry, access: AccessContext): Promise<void> {
|
|
282
282
|
const entry = registry.startEntries.find((candidate) => candidate.id === launch.entryId);
|
|
283
|
-
if (!entry) throw new Error("
|
|
284
|
-
if (!canStartEntry(access, entry.id)) throw new Error(`${entry.title}
|
|
283
|
+
if (!entry) throw new Error("This template does not exist in this profile.");
|
|
284
|
+
if (!canStartEntry(access, entry.id)) throw new Error(`${entry.title} is not enabled for this user account.`);
|
|
285
285
|
if (launch.startOptions) {
|
|
286
286
|
const options = await getStartOptions(launch.runId);
|
|
287
287
|
const preselected = withoutFixedStartOptions(launch.startOptions, entry.fixedStartOptions);
|
|
@@ -290,7 +290,7 @@ async function launchRun(launch: Launch, registry: PluginRegistry, access: Acces
|
|
|
290
290
|
await startEntryDirectly(launch.runId, entry, null);
|
|
291
291
|
}
|
|
292
292
|
|
|
293
|
-
/**
|
|
293
|
+
/** Without a run the panel in VS Code waits for its host's start request; if none comes, it shows the way back instead of an endless loading state. */
|
|
294
294
|
function HostWaiting({ children, header }: { children: ReactNode; header: ReactNode }) {
|
|
295
295
|
const [waited, setWaited] = useState(false);
|
|
296
296
|
useEffect(() => {
|
|
@@ -302,7 +302,7 @@ function HostWaiting({ children, header }: { children: ReactNode; header: ReactN
|
|
|
302
302
|
: <PendingPanel header={header} state={hostStarting} />;
|
|
303
303
|
}
|
|
304
304
|
|
|
305
|
-
/**
|
|
305
|
+
/** Header and below it the loading state, as the run panel later shows it centered in the chat; a single mini-app has no header. */
|
|
306
306
|
function PendingPanel({ children, header, headless = false, state }: { children?: ReactNode; header?: ReactNode; headless?: boolean; state: StartupNoticeState }) {
|
|
307
307
|
return <div className="flex h-full flex-col bg-[image:var(--surface-backdrop)]">
|
|
308
308
|
{!headless && <header className={headerClass}>{header}</header>}
|
|
@@ -315,7 +315,7 @@ function ElementPage({ elementId, registry, runId }: { elementId: string; regist
|
|
|
315
315
|
const readRuns = useAccess().can("runs.read");
|
|
316
316
|
const { sessions } = useSessionList(readRuns);
|
|
317
317
|
useEffect(() => { host.notify({ type: "ready" }); }, [host]);
|
|
318
|
-
if (!readRuns) return <p className={noticeClass}>
|
|
318
|
+
if (!readRuns) return <p className={noticeClass}>No runs are enabled for this user account.</p>;
|
|
319
319
|
return (
|
|
320
320
|
<main className="relative flex h-full min-h-0 min-w-0 flex-1 bg-background @container/chat-content">
|
|
321
321
|
<PluginChat key={runId} layout={{ element: elementId }} registry={registry} session={sessions.find((entry) => entry.id === runId) ?? placeholderSession(runId)} />
|
|
@@ -323,12 +323,12 @@ function ElementPage({ elementId, registry, runId }: { elementId: string; regist
|
|
|
323
323
|
);
|
|
324
324
|
}
|
|
325
325
|
|
|
326
|
-
/**
|
|
326
|
+
/** In the VS Code webview the extension handles sign-in; the panel only asks for it. */
|
|
327
327
|
export function HostLogin() {
|
|
328
328
|
const host = useRunPanelHost();
|
|
329
329
|
return <AccessScreen>
|
|
330
|
-
<h1 className="my-3 text-[1.5rem]">
|
|
331
|
-
<p className="mb-6 leading-normal text-muted-foreground">
|
|
332
|
-
<Button className="w-full" onClick={() => host.requestLogin()}>
|
|
330
|
+
<h1 className="my-3 text-[1.5rem]">Sign-in required</h1>
|
|
331
|
+
<p className="mb-6 leading-normal text-muted-foreground">Sign-in goes through VS Code. The panel then reloads.</p>
|
|
332
|
+
<Button className="w-full" onClick={() => host.requestLogin()}>Sign in with VS Code</Button>
|
|
333
333
|
</AccessScreen>;
|
|
334
334
|
}
|
|
@@ -6,7 +6,7 @@ import { Popover, PopoverContent } from "../ui";
|
|
|
6
6
|
|
|
7
7
|
const titleClass = "flex h-[30px] min-w-0 flex-1 cursor-pointer items-center gap-2 self-center rounded-md px-1.5 text-left hover:bg-accent aria-expanded:bg-accent focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:-outline-offset-2";
|
|
8
8
|
|
|
9
|
-
/**
|
|
9
|
+
/** The panel header: one line with title and state, the plugins' header contributions behind the title as a popover. */
|
|
10
10
|
export function RunPanelHeader({ attention, contributions, navigation, registry, runError, session, working }: {
|
|
11
11
|
attention: AttentionState | undefined;
|
|
12
12
|
contributions: PluginRegistry["sessionHeaders"];
|
|
@@ -19,19 +19,19 @@ export function RunPanelHeader({ attention, contributions, navigation, registry,
|
|
|
19
19
|
const [open, setOpen] = useState(false);
|
|
20
20
|
const buttonRef = useRef<HTMLButtonElement>(null);
|
|
21
21
|
const panelId = useId();
|
|
22
|
-
const title = session.session.title || "
|
|
22
|
+
const title = session.session.title || "New run";
|
|
23
23
|
const pressedAnchor = (details: { reason: string; event: Event }) =>
|
|
24
24
|
details.reason === "outside-press" && details.event.target instanceof Node && buttonRef.current?.contains(details.event.target) === true;
|
|
25
25
|
return <div className="flex min-w-0 flex-1 items-stretch">
|
|
26
|
-
<button aria-controls={open ? panelId : undefined} aria-expanded={open} aria-haspopup="dialog" className={titleClass} onClick={() => setOpen((value) => !value)} ref={buttonRef} title={`${title}.
|
|
26
|
+
<button aria-controls={open ? panelId : undefined} aria-expanded={open} aria-haspopup="dialog" className={titleClass} onClick={() => setOpen((value) => !value)} ref={buttonRef} title={`${title}. Click to show the run details`} type="button">
|
|
27
27
|
<strong className="min-w-0 truncate text-[0.82rem] font-semibold">{title}</strong>
|
|
28
|
-
{working && <span aria-label="
|
|
29
|
-
{runError && <span className="flex-none text-[0.68rem] font-medium text-destructive" title={runError}>Run
|
|
28
|
+
{working && <span aria-label="Processing" className="size-1.5 flex-none rounded-full bg-primary animate-fade-pulse motion-reduce:animate-none" role="status" />}
|
|
29
|
+
{runError && <span className="flex-none text-[0.68rem] font-medium text-destructive" title={runError}>Run unreachable</span>}
|
|
30
30
|
{attention && <span className="flex-none truncate rounded-full bg-primary/10 px-2 py-0.5 text-[0.66rem] font-semibold text-primary" role="status">{attention.label}</span>}
|
|
31
31
|
<ChevronDownIcon aria-hidden className="size-3.5 flex-none text-muted-foreground" />
|
|
32
32
|
</button>
|
|
33
33
|
<Popover onOpenChange={(next, details) => { if (!next && pressedAnchor(details)) return; setOpen(next); }} open={open}>
|
|
34
|
-
<PopoverContent align="start" anchor={buttonRef} aria-label="Run
|
|
34
|
+
<PopoverContent align="start" anchor={buttonRef} aria-label="Run details" className="max-h-[70vh] w-[calc(100vw-16px)] gap-0 overflow-auto rounded-md p-0 text-[0.76rem]" collisionPadding={8} dim id={panelId} role="dialog" side="bottom">
|
|
35
35
|
<div className="flex flex-wrap items-stretch [&>*]:border-b [&>*]:border-border-soft">
|
|
36
36
|
{registry.sessionMetadata.map(({ id, Metadata }) => <Metadata key={id} placement="header" session={session.session} />)}
|
|
37
37
|
<StartOptionBadges registry={registry} session={session} />
|
|
@@ -6,7 +6,7 @@ import { useRunPanelHost } from "./host";
|
|
|
6
6
|
|
|
7
7
|
const itemClass = "flex w-full cursor-pointer items-center gap-2.5 rounded-md px-2 py-1.5 text-left hover:bg-accent focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:-outline-offset-2 disabled:cursor-default disabled:opacity-50 [&>svg]:size-4 [&>svg]:flex-none [&>svg]:text-muted-foreground";
|
|
8
8
|
|
|
9
|
-
/**
|
|
9
|
+
/** The menu at the top right of the panel: settings, server in the browser, and sign-out behind one button. */
|
|
10
10
|
export function RunPanelMenu({ onOpenSettings }: { onOpenSettings: () => void }) {
|
|
11
11
|
const host = useRunPanelHost();
|
|
12
12
|
const access = useAccess();
|
|
@@ -24,12 +24,12 @@ export function RunPanelMenu({ onOpenSettings }: { onOpenSettings: () => void })
|
|
|
24
24
|
void access.logout().then(() => setOpen(false)).catch((cause: unknown) => setError(cause instanceof Error ? cause.message : String(cause))).finally(() => setPending(false));
|
|
25
25
|
};
|
|
26
26
|
return <>
|
|
27
|
-
<Button aria-controls={open ? panelId : undefined} aria-expanded={open} aria-haspopup="dialog" aria-label="
|
|
27
|
+
<Button aria-controls={open ? panelId : undefined} aria-expanded={open} aria-haspopup="dialog" aria-label="Panel menu" className="self-center" onClick={() => setOpen((value) => !value)} ref={buttonRef} size="icon-lg" title="Menu" variant="ghost"><MoreVerticalIcon /></Button>
|
|
28
28
|
<Popover onOpenChange={(next, details) => { if (!next && pressedAnchor(details)) return; setOpen(next); }} open={open}>
|
|
29
|
-
<PopoverContent align="end" anchor={buttonRef} aria-label="
|
|
30
|
-
<button className={itemClass} onClick={() => { setOpen(false); onOpenSettings(); }} type="button"><SettingsIcon />
|
|
31
|
-
{host.kind === "vscode" && <button className={itemClass} onClick={() => { setOpen(false); host.openExternal(new URL("/", window.location.href).toString()); }} type="button"><ExternalLinkIcon />
|
|
32
|
-
{access.enabled && access.user && <button className={itemClass} disabled={pending} onClick={logout} title={access.user.id} type="button"><LogOutIcon /><span className="grid min-w-0"><span>
|
|
29
|
+
<PopoverContent align="end" anchor={buttonRef} aria-label="Panel menu" className="w-[220px] gap-0 p-1 text-[0.8rem]" collisionPadding={8} dim id={panelId} role="dialog" side="bottom">
|
|
30
|
+
<button className={itemClass} onClick={() => { setOpen(false); onOpenSettings(); }} type="button"><SettingsIcon />Settings</button>
|
|
31
|
+
{host.kind === "vscode" && <button className={itemClass} onClick={() => { setOpen(false); host.openExternal(new URL("/", window.location.href).toString()); }} type="button"><ExternalLinkIcon />Open in browser</button>}
|
|
32
|
+
{access.enabled && access.user && <button className={itemClass} disabled={pending} onClick={logout} title={access.user.id} type="button"><LogOutIcon /><span className="grid min-w-0"><span>Sign out</span><span className="truncate text-[0.68rem] text-muted-foreground">{access.user.label}</span></span></button>}
|
|
33
33
|
{error && <p className="px-2 py-1.5 text-[0.72rem] text-destructive" role="alert">{error}</p>}
|
|
34
34
|
</PopoverContent>
|
|
35
35
|
</Popover>
|
|
@@ -2,10 +2,10 @@ import type { SessionContext, SessionNavigation, WorkspaceTabContribution } from
|
|
|
2
2
|
import { Button, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../ui";
|
|
3
3
|
import { RUN_PANEL_WORKSPACE_ID } from "./workspace-state";
|
|
4
4
|
|
|
5
|
-
/**
|
|
5
|
+
/** A contribution's counter badge sits small at the top right of the button, the dot for news at the bottom right. */
|
|
6
6
|
const railButtonClass = "relative aria-pressed:bg-accent aria-pressed:text-primary [&_[data-slot=badge]]:absolute [&_[data-slot=badge]]:-top-0.5 [&_[data-slot=badge]]:-right-0.5 [&_[data-slot=badge]]:h-3.5 [&_[data-slot=badge]]:min-w-3.5 [&_[data-slot=badge]]:px-1 [&_[data-slot=badge]]:py-0 [&_[data-slot=badge]]:text-[0.58rem] [&_[data-slot=badge]]:leading-none";
|
|
7
7
|
|
|
8
|
-
/**
|
|
8
|
+
/** The toolbar at the right edge of the run panel: one button per sidebar tab that opens the sidebar with this tab or closes it again. */
|
|
9
9
|
export function RunPanelRail({ navigation, onClose, open, pendingTabIds, session, tabs }: {
|
|
10
10
|
navigation: SessionNavigation;
|
|
11
11
|
onClose: () => void;
|
|
@@ -14,7 +14,7 @@ export function RunPanelRail({ navigation, onClose, open, pendingTabIds, session
|
|
|
14
14
|
session: SessionContext;
|
|
15
15
|
tabs: readonly WorkspaceTabContribution[];
|
|
16
16
|
}) {
|
|
17
|
-
return <TooltipProvider><nav aria-label="
|
|
17
|
+
return <TooltipProvider><nav aria-label="Sidebar tabs" className="flex w-9 flex-none flex-col items-center gap-1 border-l border-border bg-shell py-1.5">
|
|
18
18
|
{tabs.map((tab) => {
|
|
19
19
|
const active = open && tab.id === navigation.activeTabId;
|
|
20
20
|
const pending = pendingTabIds.includes(tab.id);
|
|
@@ -31,7 +31,7 @@ export function RunPanelRail({ navigation, onClose, open, pendingTabIds, session
|
|
|
31
31
|
{tab.Badge && <tab.Badge active={active} navigation={navigation} selection={navigation.selectionFor(tab.id)} session={session} />}
|
|
32
32
|
{pending && <span aria-hidden className="absolute right-1 bottom-1 size-1.5 rounded-full bg-primary" />}
|
|
33
33
|
</TooltipTrigger>
|
|
34
|
-
<TooltipContent side="left" sideOffset={8}>{pending ? `${tab.label} -
|
|
34
|
+
<TooltipContent side="left" sideOffset={8}>{pending ? `${tab.label} - new activity` : tab.label}</TooltipContent>
|
|
35
35
|
</Tooltip>;
|
|
36
36
|
})}
|
|
37
37
|
</nav></TooltipProvider>;
|
|
@@ -6,7 +6,7 @@ import { Button } from "../ui";
|
|
|
6
6
|
import { mountedTabs } from "../WorkspacePanel";
|
|
7
7
|
import { RUN_PANEL_WORKSPACE_ID } from "./workspace-state";
|
|
8
8
|
|
|
9
|
-
/**
|
|
9
|
+
/** The sidebar as a pop-out over the run panel's chat and stage, with two areas only over the right one; the rest is dimmed, a click outside, Escape, and X close it, visited keepMounted tabs stay mounted. */
|
|
10
10
|
export function RunPanelWorkspace({ navigation, onClose, open, session, tabs }: {
|
|
11
11
|
navigation: SessionNavigation;
|
|
12
12
|
onClose: () => void;
|
|
@@ -28,7 +28,7 @@ export function RunPanelWorkspace({ navigation, onClose, open, session, tabs }:
|
|
|
28
28
|
return <>
|
|
29
29
|
{open && <div aria-hidden className="absolute inset-0 z-[60] bg-backdrop duration-200 animate-in fade-in-0" onClick={onClose} />}
|
|
30
30
|
<section
|
|
31
|
-
aria-label="
|
|
31
|
+
aria-label="Sidebar"
|
|
32
32
|
className="absolute inset-2 z-[70] flex flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 animate-in fade-in-0 zoom-in-95 @min-[960px]/chat-content:left-[40%]"
|
|
33
33
|
hidden={!open}
|
|
34
34
|
id={RUN_PANEL_WORKSPACE_ID}
|
|
@@ -43,7 +43,7 @@ export function RunPanelWorkspace({ navigation, onClose, open, session, tabs }:
|
|
|
43
43
|
>
|
|
44
44
|
<header className="flex h-8 flex-none items-center gap-2 border-b border-border px-2.5">
|
|
45
45
|
<h2 className="min-w-0 flex-1 truncate text-[0.76rem] font-semibold">{activeTab?.label}</h2>
|
|
46
|
-
<Button aria-label="
|
|
46
|
+
<Button aria-label="Close sidebar" onClick={onClose} size="icon-xs" title="Close sidebar" variant="ghost"><XIcon /></Button>
|
|
47
47
|
</header>
|
|
48
48
|
<div className="relative min-h-0 flex-1 overflow-hidden">
|
|
49
49
|
{mountedTabs(tabs, activeTabId, visited).map((tab) => <div className={cn("absolute inset-0 flex min-h-0 flex-col", tab.id !== activeTabId && "pointer-events-none invisible")} key={tab.id}>
|
|
@@ -16,9 +16,9 @@ const isEditable = (element: Element | null): element is HTMLElement =>
|
|
|
16
16
|
element !== null && (element.tagName === "INPUT" || element.tagName === "TEXTAREA" || (element as HTMLElement).isContentEditable === true);
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* macOS
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* macOS delivers paste, copy, and cut through the application menu, and VS Code passes the
|
|
20
|
+
* command only to the document of its webview, not into a cross-origin iframe. The run panel
|
|
21
|
+
* therefore executes it itself; it fetches the clipboard text through the shell.
|
|
22
22
|
*/
|
|
23
23
|
export function createClipboardReader(browser: Window) {
|
|
24
24
|
const parent = browser.parent;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Contract between the run panel (run-panel.html) and a host that shows it in an iframe; import-free, the VS Code extension bundles it. */
|
|
2
2
|
|
|
3
3
|
export const RUN_PANEL_PAGE = "run-panel.html";
|
|
4
4
|
|
|
@@ -10,7 +10,7 @@ export interface RunPanelPageQuery {
|
|
|
10
10
|
run?: string;
|
|
11
11
|
element?: string;
|
|
12
12
|
host?: "vscode";
|
|
13
|
-
/**
|
|
13
|
+
/** The name of the server this run lives on; the header shows it as a pill. */
|
|
14
14
|
connection?: string;
|
|
15
15
|
theme?: RunPanelTheme;
|
|
16
16
|
access?: string;
|
|
@@ -22,7 +22,7 @@ export const runPanelPageUrl = (serverUrl: string, query: RunPanelPageQuery): st
|
|
|
22
22
|
return url.toString();
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
/**
|
|
25
|
+
/** Messages from the panel to its host. */
|
|
26
26
|
export type RunPanelHostMessage =
|
|
27
27
|
| { type: "ready" }
|
|
28
28
|
| { type: "runChanged"; runId: string | null }
|
|
@@ -34,7 +34,7 @@ export type RunPanelHostMessage =
|
|
|
34
34
|
| { type: "openExternal"; url: string }
|
|
35
35
|
| { type: "openPage"; url: string; title: string };
|
|
36
36
|
|
|
37
|
-
/**
|
|
37
|
+
/** The clipboard text: a cross-origin iframe may not read it in the webview, the shell above it may. */
|
|
38
38
|
export type RunPanelClipboardMessage = { type: "clipboardRead"; id: string };
|
|
39
39
|
export type ClipboardRunPanelMessage = { type: "clipboardText"; id: string; text: string };
|
|
40
40
|
|
|
@@ -64,7 +64,7 @@ export function isRunPanelKeyboardMessage(value: unknown): value is RunPanelKeyb
|
|
|
64
64
|
&& ["ctrlKey", "metaKey", "shiftKey", "altKey", "repeat"].every((key) => typeof event[key] === "boolean");
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
/**
|
|
67
|
+
/** Messages from the host to the panel. */
|
|
68
68
|
export type HostRunPanelMessage =
|
|
69
69
|
| { type: "selectRun"; runId: string | null }
|
|
70
70
|
| { type: "newRun"; startOptions?: Record<string, unknown>; entryId?: string }
|
|
@@ -5,28 +5,28 @@ import { isHostRunPanelMessage, type RunPanelHostMessage, type RunPanelTheme, ty
|
|
|
5
5
|
|
|
6
6
|
export interface RunPanelHost {
|
|
7
7
|
readonly kind: RunPanelHostKind;
|
|
8
|
-
/** VS Code
|
|
8
|
+
/** VS Code is a workstation itself and also offers workstations for new runs, the browser only the server. */
|
|
9
9
|
readonly machines: OfferedMachines;
|
|
10
|
-
/**
|
|
10
|
+
/** Elements of the run that the host currently shows in the center; always empty in the browser. */
|
|
11
11
|
centerElements(runId: string): ReadonlySet<string>;
|
|
12
12
|
subscribe(listener: () => void): () => void;
|
|
13
13
|
openInCenter(runId: string, elementId: string, title: string): void;
|
|
14
14
|
returnToRunPanel(runId: string, elementId: string): void;
|
|
15
15
|
requestLogin(): void;
|
|
16
|
-
/**
|
|
16
|
+
/** The host holds the session token and ends the session itself. */
|
|
17
17
|
requestLogout(): void;
|
|
18
18
|
openExternal(url: string): void;
|
|
19
|
-
/**
|
|
19
|
+
/** Shows a web page in the host, for example as a tab in the VS Code Simple Browser. */
|
|
20
20
|
openPage(url: string, title: string): void;
|
|
21
21
|
onCommand(listener: (message: HostRunPanelMessage) => void): () => void;
|
|
22
|
-
/**
|
|
22
|
+
/** Tells the host that the panel is ready, has switched its run, or wants to go back to the Start page. */
|
|
23
23
|
notify(message: Extract<RunPanelHostMessage, { type: "ready" | "runChanged" | "showStart" }>): void;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
const emptySet: ReadonlySet<string> = new Set();
|
|
27
27
|
|
|
28
28
|
const unsupported = (action: string) => (): never => {
|
|
29
|
-
throw new Error(`${action}
|
|
29
|
+
throw new Error(`${action} is only available in VS Code.`);
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export function createBrowserHost(browser: Window): RunPanelHost {
|
|
@@ -35,21 +35,21 @@ export function createBrowserHost(browser: Window): RunPanelHost {
|
|
|
35
35
|
machines: "server",
|
|
36
36
|
centerElements: () => emptySet,
|
|
37
37
|
subscribe: () => () => undefined,
|
|
38
|
-
openInCenter: unsupported("
|
|
39
|
-
returnToRunPanel: unsupported("
|
|
40
|
-
requestLogin: unsupported("
|
|
41
|
-
requestLogout: unsupported("
|
|
38
|
+
openInCenter: unsupported("Placing a mini-app in the center"),
|
|
39
|
+
returnToRunPanel: unsupported("Bringing a mini-app back"),
|
|
40
|
+
requestLogin: unsupported("Signing in through the host"),
|
|
41
|
+
requestLogout: unsupported("Signing out through the host"),
|
|
42
42
|
openExternal: (url) => { browser.open(url, "_blank", "noopener"); },
|
|
43
|
-
openPage: unsupported("
|
|
43
|
+
openPage: unsupported("Showing a web page in the host"),
|
|
44
44
|
onCommand: () => () => undefined,
|
|
45
45
|
notify: () => undefined,
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
/**
|
|
49
|
+
/** The panel in the iframe of a VS Code webview: messages go through the surrounding webview to the extension. */
|
|
50
50
|
export function createVsCodeHost(browser: Window): RunPanelHost {
|
|
51
51
|
const parent = browser.parent;
|
|
52
|
-
if (parent === browser) throw new Error("
|
|
52
|
+
if (parent === browser) throw new Error("The panel runs with host=vscode but is not embedded in a webview.");
|
|
53
53
|
const placements = new Map<string, ReadonlySet<string>>();
|
|
54
54
|
const placementListeners = new Set<() => void>();
|
|
55
55
|
const commandListeners = new Set<(message: HostRunPanelMessage) => void>();
|
|
@@ -90,14 +90,14 @@ export const createRunPanelHost = (kind: RunPanelHostKind, browser: Window): Run
|
|
|
90
90
|
|
|
91
91
|
const RunPanelHostContext = createContext<RunPanelHost | undefined>(undefined);
|
|
92
92
|
|
|
93
|
-
/**
|
|
93
|
+
/** Provides the host and with it which machines the start options offer. */
|
|
94
94
|
export function RunPanelHostProvider({ value, children }: PropsWithChildren<{ value: RunPanelHost }>) {
|
|
95
95
|
return createElement(RunPanelHostContext.Provider, { value }, createElement(OfferedMachinesProvider, { value: value.machines }, children));
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
export function useRunPanelHost(): RunPanelHost {
|
|
99
99
|
const host = useContext(RunPanelHostContext);
|
|
100
|
-
if (!host) throw new Error("
|
|
100
|
+
if (!host) throw new Error("The panel runs without a host provider.");
|
|
101
101
|
return host;
|
|
102
102
|
}
|
|
103
103
|
|
|
@@ -17,7 +17,7 @@ const transportOf = (browser: Window) => (browser as InputWindow)[serviceKey];
|
|
|
17
17
|
export const hostInputEnabled = (browser: Window): boolean => transportOf(browser) !== undefined;
|
|
18
18
|
|
|
19
19
|
function installInputTransport(browser: Window, transport: InputTransport): () => void {
|
|
20
|
-
if (hostInputEnabled(browser)) throw new Error("
|
|
20
|
+
if (hostInputEnabled(browser)) throw new Error("The input bridge is already installed.");
|
|
21
21
|
(browser as InputWindow)[serviceKey] = transport;
|
|
22
22
|
const clipboard = installClipboardBridge(browser, transport.readClipboard);
|
|
23
23
|
const keyboard = installKeyboardBridge(browser, transport.keyboard);
|
|
@@ -11,16 +11,16 @@ const text = (value: string | null): string | undefined => value?.trim() ? value
|
|
|
11
11
|
|
|
12
12
|
const hostKind = (value: string): RunPanelHostKind => {
|
|
13
13
|
if (value === "browser" || value === "vscode") return value;
|
|
14
|
-
throw new Error(`
|
|
14
|
+
throw new Error(`Unknown host ${JSON.stringify(value)}. Allowed are browser and vscode.`);
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
/**
|
|
17
|
+
/** Reads the panel's address; unknown values are a hard error instead of a silent default view. */
|
|
18
18
|
export function parseRunPanelLocation(search: string): RunPanelLocation {
|
|
19
19
|
const query = new URLSearchParams(search);
|
|
20
20
|
const layout = text(query.get("layout")) ?? "panel";
|
|
21
|
-
if (layout !== "panel" && layout !== "app") throw new Error(`
|
|
21
|
+
if (layout !== "panel" && layout !== "app") throw new Error(`Unknown layout ${JSON.stringify(layout)}. Allowed are panel and app.`);
|
|
22
22
|
const themeValue = text(query.get("theme"));
|
|
23
|
-
if (themeValue !== undefined && !isRunPanelTheme(themeValue)) throw new Error(`
|
|
23
|
+
if (themeValue !== undefined && !isRunPanelTheme(themeValue)) throw new Error(`Unknown theme ${JSON.stringify(themeValue)}. Allowed are light and dark.`);
|
|
24
24
|
const common = {
|
|
25
25
|
host: hostKind(text(query.get("host")) ?? "browser"),
|
|
26
26
|
connection: text(query.get("connection")),
|
|
@@ -30,6 +30,6 @@ export function parseRunPanelLocation(search: string): RunPanelLocation {
|
|
|
30
30
|
const runId = text(query.get("run"));
|
|
31
31
|
if (layout === "panel") return { layout, runId, ...common };
|
|
32
32
|
const elementId = text(query.get("element"));
|
|
33
|
-
if (!runId || !elementId) throw new Error("
|
|
33
|
+
if (!runId || !elementId) throw new Error("The app layout needs run and element.");
|
|
34
34
|
return { layout, runId, elementId, ...common };
|
|
35
35
|
}
|
|
@@ -5,7 +5,7 @@ import { rpc } from "../rpc";
|
|
|
5
5
|
|
|
6
6
|
const POLL_INTERVAL_MS = 5000;
|
|
7
7
|
|
|
8
|
-
/**
|
|
8
|
+
/** The server's run list, live over the ragents.runs channel and reloaded every five seconds as a safety net. */
|
|
9
9
|
export function useSessionList(enabled: boolean): { sessions: SessionInfo[]; unreachable: boolean; refresh: () => Promise<void> } {
|
|
10
10
|
const [sessions, setSessions] = useState<SessionInfo[]>([]);
|
|
11
11
|
const [unreachable, setUnreachable] = useState(false);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLocalStorageSetting } from "../lib/local-storage-setting";
|
|
2
2
|
import type { WorkspaceTabContribution } from "../PluginRegistry";
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/** Personal state of the sidebar in the run panel per run: the open tab, null means closed. */
|
|
5
5
|
export interface RunPanelWorkspaceState {
|
|
6
6
|
tab: string | null;
|
|
7
7
|
}
|
|
@@ -18,12 +18,12 @@ export function parseRunPanelWorkspaceState(raw: string | null): RunPanelWorkspa
|
|
|
18
18
|
if (!value || typeof value !== "object" || Array.isArray(value)
|
|
19
19
|
|| Object.keys(value).some((key) => key !== "tab")
|
|
20
20
|
|| !("tab" in value) || !(value.tab === null || typeof value.tab === "string")) {
|
|
21
|
-
throw new Error("
|
|
21
|
+
throw new Error("The saved sidebar state is invalid.");
|
|
22
22
|
}
|
|
23
23
|
return value as RunPanelWorkspaceState;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
/**
|
|
26
|
+
/** The tab of the open sidebar; empty when it is closed or the remembered tab is currently not available. */
|
|
27
27
|
export const activeWorkspaceTab = (state: RunPanelWorkspaceState, tabs: readonly WorkspaceTabContribution[]): string =>
|
|
28
28
|
state.tab !== null && tabs.some((tab) => tab.id === state.tab) ? state.tab : "";
|
|
29
29
|
|