@schlenkr/ragents 0.1.10 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/apps/server/package.json +1 -1
- package/apps/server/src/access-projection.ts +6 -6
- package/apps/server/src/access-service.ts +3 -3
- package/apps/server/src/access-session.ts +19 -19
- package/apps/server/src/api/contracts.ts +29 -29
- package/apps/server/src/api/core-methods.ts +17 -17
- package/apps/server/src/api/delivery.ts +2 -2
- package/apps/server/src/api/reference.ts +27 -27
- package/apps/server/src/api/rights.ts +18 -18
- package/apps/server/src/chat-handler.ts +5 -5
- package/apps/server/src/config-definition.ts +37 -10
- package/apps/server/src/config-file.ts +49 -49
- package/apps/server/src/config.ts +2 -0
- package/apps/server/src/data-directory.ts +2 -2
- package/apps/server/src/external-access.ts +1 -1
- package/apps/server/src/folder-install.ts +1 -1
- package/apps/server/src/help-files.ts +1 -1
- package/apps/server/src/host-api.json +6 -1
- package/apps/server/src/host-api.ts +3 -2
- package/apps/server/src/host-record.ts +3 -3
- package/apps/server/src/host-resolution-hooks.mjs +4 -4
- package/apps/server/src/host-version.ts +17 -17
- package/apps/server/src/host-web.ts +5 -5
- package/apps/server/src/main.ts +6 -6
- package/apps/server/src/missing-environment.ts +6 -6
- package/apps/server/src/parent-watch.ts +4 -4
- package/apps/server/src/plugin-build/build.ts +38 -38
- package/apps/server/src/plugin-build/host-api-names.ts +7 -7
- package/apps/server/src/plugin-build/plugin-description.ts +15 -15
- package/apps/server/src/plugin-build/typecheck.ts +1 -1
- package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
- package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
- package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
- package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
- package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
- package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
- package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
- package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
- package/apps/server/src/plugin-support/front-matter.ts +6 -6
- package/apps/server/src/plugin-support/http.ts +2 -2
- package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
- package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
- package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
- package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
- package/apps/server/src/plugin-support/model-aliases.ts +30 -20
- package/apps/server/src/plugin-support/model-choice.ts +15 -15
- package/apps/server/src/plugin-support/model-completion.ts +44 -23
- package/apps/server/src/plugin-support/model-providers.ts +170 -0
- package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
- package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
- package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
- package/apps/server/src/plugin-support/plugin-config.ts +3 -3
- package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
- package/apps/server/src/plugin-support/plugins-root.ts +2 -2
- package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
- package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
- package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
- package/apps/server/src/plugin-support/product-relay.ts +9 -9
- package/apps/server/src/plugin-support/product-start-options.ts +4 -4
- package/apps/server/src/plugin-support/prompt.ts +1 -1
- package/apps/server/src/plugin-support/provision.ts +8 -8
- package/apps/server/src/plugin-support/run-scripts.ts +17 -17
- package/apps/server/src/plugin-support/skills.ts +18 -18
- package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
- package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
- package/apps/server/src/plugin-support/system-prompts.ts +11 -11
- package/apps/server/src/plugin-support/thinking-level.ts +2 -2
- package/apps/server/src/plugin-support/tool-availability.ts +2 -2
- package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
- package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
- package/apps/server/src/plugin-support/zip.ts +7 -7
- package/apps/server/src/profile/bundle-manifest.ts +27 -27
- package/apps/server/src/profile/compose.ts +12 -7
- package/apps/server/src/profile/plugin-discovery.ts +14 -14
- package/apps/server/src/profile/provisioning.ts +5 -5
- package/apps/server/src/profile-target.ts +10 -10
- package/apps/server/src/protocol.ts +2 -2
- package/apps/server/src/provider.ts +62 -57
- package/apps/server/src/ragents/actor-chat-history.ts +8 -8
- package/apps/server/src/ragents/chat-text-positions.ts +2 -2
- package/apps/server/src/ragents/coordinator.ts +2 -2
- package/apps/server/src/ragents/engine.ts +23 -23
- package/apps/server/src/ragents/global-chat.ts +8 -8
- package/apps/server/src/ragents/host-services.ts +6 -3
- package/apps/server/src/ragents/journal-chat-events.ts +1 -1
- package/apps/server/src/ragents/run-owner.ts +2 -2
- package/apps/server/src/ragents/session.ts +49 -49
- package/apps/server/src/ragents/typescript-tools.ts +12 -12
- package/apps/server/src/ragents/workspace-runtime.ts +28 -28
- package/apps/server/src/rpc/dispatcher.ts +19 -19
- package/apps/server/src/rpc/http-transport.ts +11 -11
- package/apps/server/src/rpc/stdio-transport.ts +3 -3
- package/apps/server/src/run-preparation-input.ts +5 -5
- package/apps/server/src/run-preparation.ts +24 -24
- package/apps/server/src/run-transfer.ts +39 -39
- package/apps/server/src/server.ts +48 -48
- package/apps/server/src/settings.ts +1 -1
- package/apps/server/src/startup.ts +3 -3
- package/apps/server/src/title-compactor.ts +9 -9
- package/apps/server/src/title-settings.ts +3 -3
- package/apps/server/src/web-bundles.ts +2 -2
- package/apps/server/src/web-stylesheet.ts +2 -2
- package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-CpPi6QLr.js} +1 -1
- package/apps/web/dist/assets/main-DJmCHGzM.js +11 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-q-mf1kLN.js +608 -0
- package/apps/web/dist/assets/runPanel-nk_aMxSn.js +21 -0
- package/apps/web/dist/help/guide-access.html +5 -5
- package/apps/web/dist/help/guide-access.md +2 -2
- package/apps/web/dist/help/guide-clients.html +53 -54
- package/apps/web/dist/help/guide-clients.md +50 -51
- package/apps/web/dist/help/guide-distributed.html +12 -7
- package/apps/web/dist/help/guide-distributed.md +9 -4
- package/apps/web/dist/help/guide-functions.html +3 -3
- package/apps/web/dist/help/guide-getting-started.html +24 -15
- package/apps/web/dist/help/guide-getting-started.md +22 -12
- package/apps/web/dist/help/guide-ideas.html +3 -3
- package/apps/web/dist/help/guide-plugins.html +5 -4
- package/apps/web/dist/help/guide-plugins.md +2 -1
- package/apps/web/dist/help/guide-programs.html +3 -3
- package/apps/web/dist/help/guide-runtime.html +6 -6
- package/apps/web/dist/help/guide-runtime.md +3 -3
- package/apps/web/dist/help/guide.html +3 -3
- package/apps/web/dist/help/index.html +196 -144
- package/apps/web/dist/help/mini-app.css +6 -0
- package/apps/web/dist/help/mini-app.js +14 -14
- package/apps/web/dist/host-web.json +91 -91
- package/apps/web/dist/index.html +3 -3
- package/apps/web/dist/run-panel.html +3 -3
- package/apps/web/package.json +1 -1
- package/apps/web/src/AccessContext.tsx +15 -15
- package/apps/web/src/App.tsx +13 -13
- package/apps/web/src/DiffCode.tsx +2 -2
- package/apps/web/src/HelpDialog.tsx +3 -3
- package/apps/web/src/Overview.tsx +13 -13
- package/apps/web/src/PluginActivation.ts +1 -1
- package/apps/web/src/PluginChat.tsx +15 -15
- package/apps/web/src/PluginFailureNotice.tsx +1 -1
- package/apps/web/src/PluginRegistry.tsx +44 -44
- package/apps/web/src/RunPreparationChat.tsx +11 -11
- package/apps/web/src/RunStore.ts +1 -1
- package/apps/web/src/SessionList.tsx +14 -14
- package/apps/web/src/SettingsModal.tsx +112 -112
- package/apps/web/src/StartOptions.tsx +11 -11
- package/apps/web/src/StartSelection.tsx +11 -11
- package/apps/web/src/StartTiles.tsx +8 -8
- package/apps/web/src/SurfaceShortcuts.tsx +3 -3
- package/apps/web/src/ThemeSettings.tsx +8 -8
- package/apps/web/src/TitleModelSettings.tsx +13 -13
- package/apps/web/src/WorkspacePanel.tsx +9 -9
- package/apps/web/src/access-session.ts +4 -4
- package/apps/web/src/access-token.ts +5 -5
- package/apps/web/src/actor-conversation.ts +3 -3
- package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
- package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
- package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
- package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
- package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
- package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
- package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
- package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
- package/apps/web/src/api.ts +7 -7
- package/apps/web/src/chat/QuasselHost.tsx +1 -1
- package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
- package/apps/web/src/chat/chat-target.ts +3 -3
- package/apps/web/src/chat/requests.ts +2 -2
- package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
- package/apps/web/src/chat-view-settings.tsx +5 -6
- package/apps/web/src/diff-view.css +1 -1
- package/apps/web/src/highlighting.css +1 -1
- package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
- package/apps/web/src/lib/labels.ts +6 -6
- package/apps/web/src/main.tsx +4 -4
- package/apps/web/src/offered-machines.ts +2 -2
- package/apps/web/src/page-opener.tsx +1 -1
- package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
- package/apps/web/src/panel/LoginForm.tsx +6 -6
- package/apps/web/src/panel/PanelDialogs.tsx +22 -22
- package/apps/web/src/panel/PanelHeader.tsx +2 -2
- package/apps/web/src/panel/PanelPage.tsx +1 -1
- package/apps/web/src/panel/RunLine.tsx +4 -4
- package/apps/web/src/panel/RunsPage.tsx +15 -15
- package/apps/web/src/panel/StartPage.tsx +26 -26
- package/apps/web/src/panel/connection-state.ts +9 -9
- package/apps/web/src/panel/contract.ts +28 -28
- package/apps/web/src/panel.tsx +1 -1
- package/apps/web/src/plugin-bootstrap.ts +5 -5
- package/apps/web/src/product/ModelControl.tsx +3 -3
- package/apps/web/src/product/ProductModelSettings.tsx +16 -16
- package/apps/web/src/product/SystemPromptControl.tsx +11 -11
- package/apps/web/src/product/model-settings.ts +2 -2
- package/apps/web/src/rpc/client.ts +16 -16
- package/apps/web/src/rpc.ts +1 -1
- package/apps/web/src/run-overview.ts +1 -1
- package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
- package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
- package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
- package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
- package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
- package/apps/web/src/run-panel/clipboard.ts +3 -3
- package/apps/web/src/run-panel/host-contract.ts +5 -5
- package/apps/web/src/run-panel/host.ts +15 -15
- package/apps/web/src/run-panel/input-bridge.ts +1 -1
- package/apps/web/src/run-panel/run-panel-location.ts +5 -5
- package/apps/web/src/run-panel/use-session-list.ts +1 -1
- package/apps/web/src/run-panel/workspace-state.ts +3 -3
- package/apps/web/src/run-panel.tsx +4 -4
- package/apps/web/src/run-preparation.ts +2 -2
- package/apps/web/src/run-view.ts +3 -3
- package/apps/web/src/settings-contributions.ts +32 -32
- package/apps/web/src/theme.ts +9 -9
- package/apps/web/src/title-model-settings.ts +6 -6
- package/apps/web/src/ui/ListDetail.tsx +9 -9
- package/apps/web/src/ui/dialog.tsx +2 -2
- package/apps/web/src/ui/modal-controller.ts +3 -3
- package/apps/web/src/ui/modal.tsx +2 -2
- package/apps/web/src/ui/popover.tsx +1 -1
- package/apps/web/src/ui/relative-time.ts +8 -8
- package/apps/web/src/ui/startup-notice.tsx +2 -2
- package/apps/web/src/ui/state-icon.tsx +1 -1
- package/apps/web/src/ui/state-vocabulary.ts +16 -16
- package/apps/web/src/ui/stop-button.tsx +2 -2
- package/bundles/ragents.activity/ragents-bundle.json +3 -3
- package/bundles/ragents.activity/web/classes.json +1 -1
- package/bundles/ragents.activity/web/index.js +1 -1
- package/bundles/ragents.activity/web/index.js.map +2 -2
- package/bundles/ragents.actor-programs/ragents-bundle.json +3 -3
- package/bundles/ragents.actor-programs/server/index.js +225 -225
- package/bundles/ragents.actor-programs/server/index.js.map +2 -2
- package/bundles/ragents.actor-programs/web/classes.json +1 -1
- package/bundles/ragents.actor-programs/web/index.js +1 -1
- package/bundles/ragents.actor-programs/web/index.js.map +3 -3
- package/bundles/ragents.ask/ragents-bundle.json +3 -3
- package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
- package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
- package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
- package/bundles/ragents.ask/server/index.js +23 -23
- package/bundles/ragents.ask/server/index.js.map +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
- package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
- package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
- package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
- package/bundles/ragents.ask/web/classes.json +1 -1
- package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
- package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
- package/bundles/ragents.ask/web/exports/web/api.js +1 -1
- package/bundles/ragents.ask/web/index.js +1 -1
- package/bundles/ragents.ask/web/index.js.map +2 -2
- package/bundles/ragents.browser/executor/index.mjs +35 -35
- package/bundles/ragents.browser/executor/index.mjs.map +2 -2
- package/bundles/ragents.browser/ragents-bundle.json +3 -3
- package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
- package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
- package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
- package/bundles/ragents.browser/server/index.js +31 -31
- package/bundles/ragents.browser/server/index.js.map +2 -2
- package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
- package/bundles/ragents.documents/prompt.hbs +1 -1
- package/bundles/ragents.documents/ragents-bundle.json +3 -3
- package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
- package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
- package/bundles/ragents.documents/server/exports/contract.js +1 -1
- package/bundles/ragents.documents/server/index.js +26 -26
- package/bundles/ragents.documents/server/index.js.map +2 -2
- package/bundles/ragents.documents/web/classes.json +1 -1
- package/bundles/ragents.documents/web/index.js +1 -1
- package/bundles/ragents.documents/web/index.js.map +3 -3
- package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
- package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-fsharp/ragents-bundle.json +3 -3
- package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
- package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
- package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
- package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
- package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
- package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-roslyn/ragents-bundle.json +3 -3
- package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
- package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
- package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
- package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
- package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
- package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
- package/bundles/ragents.lsp-typescript/ragents-bundle.json +3 -3
- package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
- package/bundles/ragents.lsp-typescript/web/index.js +1 -1
- package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
- package/bundles/ragents.model-relay/ragents-bundle.json +8 -4
- package/bundles/ragents.model-relay/server/index.js +25 -21
- package/bundles/ragents.model-relay/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/ragents-bundle.json +3 -3
- package/bundles/ragents.orchestration/server/index.js +28 -28
- package/bundles/ragents.orchestration/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
- package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
- package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
- package/bundles/ragents.orchestration/web/classes.json +1 -1
- package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
- package/bundles/ragents.orchestration/web/index.js +8 -8
- package/bundles/ragents.orchestration/web/index.js.map +2 -2
- package/bundles/ragents.overseer/ragents-bundle.json +3 -3
- package/bundles/ragents.overseer/server/index.js +98 -98
- package/bundles/ragents.overseer/server/index.js.map +2 -2
- package/bundles/ragents.overseer/web/classes.json +1 -1
- package/bundles/ragents.overseer/web/index.js +1 -1
- package/bundles/ragents.overseer/web/index.js.map +2 -2
- package/bundles/ragents.processes/ragents-bundle.json +3 -3
- package/bundles/ragents.processes/server/index.js +11 -11
- package/bundles/ragents.processes/server/index.js.map +2 -2
- package/bundles/ragents.processes/web/classes.json +1 -1
- package/bundles/ragents.processes/web/index.js +3 -3
- package/bundles/ragents.processes/web/index.js.map +2 -2
- package/bundles/ragents.product/ragents-bundle.json +3 -3
- package/bundles/ragents.product/server/index.js +12 -13
- package/bundles/ragents.product/server/index.js.map +2 -2
- package/bundles/ragents.product/web/classes.json +1 -1
- package/bundles/ragents.product/web/index.js +1 -1
- package/bundles/ragents.product/web/index.js.map +2 -2
- package/bundles/ragents.profile-distribution/ragents-bundle.json +3 -3
- package/bundles/ragents.profile-distribution/server/index.js +31 -31
- package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
- package/bundles/ragents.reference/ragents-bundle.json +3 -3
- package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
- package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
- package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
- package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
- package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
- package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
- package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
- package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
- package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
- package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
- package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
- package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
- package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
- package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
- package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
- package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
- package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
- package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
- package/bundles/ragents.reference/web/classes.json +1 -1
- package/bundles/ragents.reference/web/index.js +1 -1
- package/bundles/ragents.reference/web/index.js.map +2 -2
- package/bundles/ragents.todo/ragents-bundle.json +3 -3
- package/bundles/ragents.todo/server/index.js +5 -8
- package/bundles/ragents.todo/server/index.js.map +2 -2
- package/bundles/ragents.todo/web/classes.json +1 -1
- package/bundles/ragents.todo/web/index.js +1 -1
- package/bundles/ragents.todo/web/index.js.map +2 -2
- package/bundles/ragents.transcript/ragents-bundle.json +3 -3
- package/bundles/ragents.transcript/server/index.js +11 -11
- package/bundles/ragents.transcript/server/index.js.map +2 -2
- package/bundles/ragents.watch/ragents-bundle.json +3 -3
- package/bundles/ragents.watch/server/index.js +48 -48
- package/bundles/ragents.watch/server/index.js.map +2 -2
- package/bundles/ragents.workspace/ragents-bundle.json +3 -3
- package/bundles/ragents.workspace/server/index.js +83 -83
- package/bundles/ragents.workspace/server/index.js.map +2 -2
- package/bundles/ragents.workspace/web/classes.json +1 -1
- package/bundles/ragents.workspace/web/index.js +1 -1
- package/bundles/ragents.workspace/web/index.js.map +2 -2
- package/package.json +4 -4
- package/packages/agent/dist/core/model-runtime.d.ts +7 -2
- package/packages/agent/dist/index.d.ts +1 -1
- package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
- package/packages/agent/src/core/compaction/utils.ts +1 -1
- package/packages/agent/src/core/model-runtime.ts +45 -5
- package/packages/agent/src/index.ts +1 -1
- package/packages/agent/src/loop/agent-loop.ts +2 -2
- package/packages/ai/dist/models.d.ts +1 -0
- package/packages/ai/dist/models.generated.d.ts +4544 -983
- package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
- package/packages/ai/src/api/ai-sdk.ts +33 -7
- package/packages/ai/src/api-registry.ts +1 -1
- package/packages/ai/src/index.ts +2 -2
- package/packages/ai/src/models.generated.ts +1 -1
- package/packages/ai/src/models.ts +1 -1
- package/packages/ai/src/providers/openrouter.models.ts +3725 -552
- package/packages/ragents/src/access.ts +12 -12
- package/packages/ragents/src/agents/actor-input.ts +33 -33
- package/packages/ragents/src/agents/catalog.ts +1 -1
- package/packages/ragents/src/agents/delivery.ts +17 -17
- package/packages/ragents/src/agents/plugins.ts +1 -1
- package/packages/ragents/src/agents/scheduler.ts +7 -7
- package/packages/ragents/src/agents/schemas.ts +1 -1
- package/packages/ragents/src/agents/tool-orientation.ts +4 -4
- package/packages/ragents/src/agents/tools.ts +20 -20
- package/packages/ragents/src/agents/toolset.ts +5 -5
- package/packages/ragents/src/agents/workspaces.ts +1 -1
- package/packages/ragents/src/domain/events.ts +1 -1
- package/packages/ragents/src/domain/model.ts +5 -5
- package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
- package/packages/ragents/src/drivers/agent-turn.ts +4 -4
- package/packages/ragents/src/drivers/agent.ts +2 -2
- package/packages/ragents/src/drivers/attachments.ts +4 -4
- package/packages/ragents/src/http/contracts.ts +14 -14
- package/packages/ragents/src/http/methods.ts +6 -6
- package/packages/ragents/src/plugin-host.ts +119 -119
- package/packages/ragents/src/plugin-types.ts +16 -16
- package/packages/ragents/src/rpc/contract.ts +5 -5
- package/packages/ragents/src/rpc/contribution.ts +2 -2
- package/packages/ragents/src/rpc/peer.ts +11 -11
- package/packages/ragents/src/rpc/protocol.ts +2 -2
- package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
- package/packages/ragents/src/runtime/journal-storage.ts +1 -1
- package/packages/ragents/src/runtime/journal.ts +10 -10
- package/packages/ragents/src/runtime/orchestration.ts +8 -8
- package/packages/ragents/src/runtime/stop.ts +2 -2
- package/packages/ragents/src/script/mediators.ts +35 -35
- package/packages/ragents/src/typescript/async-compiler.ts +14 -14
- package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
- package/packages/ragents/src/typescript/compiler.ts +7 -7
- package/packages/ragents/src/typescript/snippet.ts +5 -5
- package/packages/workspace-executor/src/bash-launch.ts +13 -13
- package/packages/workspace-executor/src/commands.ts +18 -18
- package/packages/workspace-executor/src/context.ts +15 -15
- package/packages/workspace-executor/src/contributions.ts +44 -44
- package/packages/workspace-executor/src/errors.ts +1 -1
- package/packages/workspace-executor/src/executor.ts +16 -16
- package/packages/workspace-executor/src/files.ts +31 -31
- package/packages/workspace-executor/src/index.ts +1 -1
- package/packages/workspace-executor/src/language-server/contract.ts +2 -2
- package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
- package/packages/workspace-executor/src/language-server/host.ts +36 -36
- package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
- package/packages/workspace-executor/src/language-server/module.ts +11 -11
- package/packages/workspace-executor/src/language-server/roots.ts +3 -3
- package/packages/workspace-executor/src/language-server/session.ts +15 -15
- package/packages/workspace-executor/src/language-server/workspace-solutions.ts +3 -3
- package/packages/workspace-executor/src/managed-process.ts +12 -12
- package/packages/workspace-executor/src/module.ts +8 -8
- package/packages/workspace-executor/src/modules.ts +3 -3
- package/packages/workspace-executor/src/paths.ts +11 -11
- package/packages/workspace-executor/src/process-sandbox.ts +3 -3
- package/packages/workspace-executor/src/processes/module.ts +3 -3
- package/packages/workspace-executor/src/processes/process-table.ts +20 -20
- package/packages/workspace-executor/src/processes/scanner.ts +3 -3
- package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
- package/packages/workspace-executor/src/processes/terminator.ts +13 -13
- package/packages/workspace-executor/src/run-folders.ts +3 -3
- package/packages/workspace-executor/src/safe-environment.ts +4 -4
- package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
- package/packages/workspace-executor/src/session-ident.ts +2 -2
- package/packages/workspace-executor/src/shell-platform.ts +2 -2
- package/packages/workspace-executor/src/tools.ts +5 -5
- package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
- package/plugins/ragents.activity/web/activity.ts +2 -2
- package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
- package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
- package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
- package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
- package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
- package/plugins/ragents.actor-programs/server/limits.ts +3 -3
- package/plugins/ragents.actor-programs/server/methods.ts +1 -1
- package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
- package/plugins/ragents.actor-programs/server/routes.ts +8 -8
- package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
- package/plugins/ragents.actor-programs/server/templates.ts +59 -59
- package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
- package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
- package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
- package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
- package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
- package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
- package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
- package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
- package/plugins/ragents.actor-programs/web/api.ts +36 -36
- package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
- package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
- package/plugins/ragents.actor-programs/web/context.ts +1 -1
- package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
- package/plugins/ragents.actor-programs/web/index.tsx +1 -1
- package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
- package/plugins/ragents.ask/ask-payload.ts +1 -1
- package/plugins/ragents.ask/contract.ts +5 -5
- package/plugins/ragents.ask/server/answer-method.ts +1 -1
- package/plugins/ragents.ask/server/ask-service.ts +9 -9
- package/plugins/ragents.ask/server/ask-tool.ts +10 -10
- package/plugins/ragents.ask/server/contract.ts +5 -5
- package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
- package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
- package/plugins/ragents.ask/web/index.tsx +2 -2
- package/plugins/ragents.browser/executor/contract.ts +6 -6
- package/plugins/ragents.browser/executor/index.ts +1 -1
- package/plugins/ragents.browser/executor/module.ts +6 -6
- package/plugins/ragents.browser/executor/pages.ts +32 -32
- package/plugins/ragents.browser/executor/playwright.ts +8 -8
- package/plugins/ragents.browser/provision.ts +7 -7
- package/plugins/ragents.browser/server/browser.ts +14 -14
- package/plugins/ragents.browser/server/contract.ts +1 -1
- package/plugins/ragents.browser/server/index.ts +1 -1
- package/plugins/ragents.browser/server/tools.ts +14 -14
- package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
- package/plugins/ragents.documents/contract.ts +2 -2
- package/plugins/ragents.documents/prompt.hbs +1 -1
- package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
- package/plugins/ragents.documents/server/files-route.ts +6 -6
- package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
- package/plugins/ragents.documents/server/store.ts +1 -1
- package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
- package/plugins/ragents.documents/web/index.tsx +11 -11
- package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
- package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
- package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
- package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
- package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
- package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
- package/plugins/ragents.lsp-typescript/executor.ts +3 -3
- package/plugins/ragents.model-relay/server/config.ts +6 -2
- package/plugins/ragents.model-relay/server/index.ts +2 -2
- package/plugins/ragents.model-relay/server/relay.ts +23 -22
- package/plugins/ragents.orchestration/contract.ts +8 -8
- package/plugins/ragents.orchestration/server/index.ts +4 -4
- package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
- package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
- package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
- package/plugins/ragents.orchestration/web/ActorChat.tsx +3 -3
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -5
- package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
- package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
- package/plugins/ragents.orchestration/web/Center.tsx +5 -5
- package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
- package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
- package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
- package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
- package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
- package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
- package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
- package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
- package/plugins/ragents.orchestration/web/constants.ts +2 -2
- package/plugins/ragents.orchestration/web/executions.ts +6 -6
- package/plugins/ragents.orchestration/web/format.ts +1 -1
- package/plugins/ragents.orchestration/web/index.tsx +2 -2
- package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
- package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
- package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
- package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
- package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
- package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
- package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
- package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
- package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
- package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
- package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
- package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
- package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
- package/plugins/ragents.overseer/contract.ts +20 -20
- package/plugins/ragents.overseer/server/api.ts +6 -6
- package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
- package/plugins/ragents.overseer/server/coordinator.ts +4 -4
- package/plugins/ragents.overseer/server/index.ts +24 -24
- package/plugins/ragents.overseer/server/orientation.ts +8 -8
- package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
- package/plugins/ragents.overseer/server/run-directory.ts +5 -5
- package/plugins/ragents.overseer/server/settings.ts +6 -6
- package/plugins/ragents.overseer/server/user-location.ts +16 -16
- package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
- package/plugins/ragents.overseer/web/index.tsx +20 -20
- package/plugins/ragents.overseer/web/model-settings.ts +1 -1
- package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
- package/plugins/ragents.processes/contract.ts +5 -5
- package/plugins/ragents.processes/server/methods.ts +4 -4
- package/plugins/ragents.processes/server/observer.ts +8 -8
- package/plugins/ragents.processes/server/run-processes.ts +2 -2
- package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
- package/plugins/ragents.processes/web/processes.ts +10 -10
- package/plugins/ragents.product/server/config.ts +1 -1
- package/plugins/ragents.product/server/index.ts +4 -4
- package/plugins/ragents.product/server/runtime.ts +9 -10
- package/plugins/ragents.product/web/index.tsx +1 -1
- package/plugins/ragents.profile-distribution/contract.ts +10 -10
- package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
- package/plugins/ragents.profile-distribution/server/config.ts +2 -2
- package/plugins/ragents.profile-distribution/server/index.ts +4 -4
- package/plugins/ragents.reference/examples.ts +27 -27
- package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
- package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
- package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
- package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
- package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
- package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
- package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
- package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
- package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
- package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
- package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
- package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
- package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
- package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
- package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
- package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
- package/plugins/ragents.reference/walkthroughs.ts +128 -128
- package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
- package/plugins/ragents.todo/contract.ts +0 -3
- package/plugins/ragents.todo/server/todo-tool.ts +6 -6
- package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
- package/plugins/ragents.transcript/server/transcript.ts +11 -11
- package/plugins/ragents.watch/server/condition.ts +4 -4
- package/plugins/ragents.watch/server/functions.ts +27 -27
- package/plugins/ragents.watch/server/observation.ts +2 -2
- package/plugins/ragents.watch/server/service.ts +14 -14
- package/plugins/ragents.workspace/client/transport.ts +1 -1
- package/plugins/ragents.workspace/client/workspace-client.ts +63 -63
- package/plugins/ragents.workspace/contract.ts +46 -46
- package/plugins/ragents.workspace/server/binding.ts +20 -20
- package/plugins/ragents.workspace/server/browse-route.ts +8 -8
- package/plugins/ragents.workspace/server/clients.ts +50 -50
- package/plugins/ragents.workspace/server/config.ts +7 -7
- package/plugins/ragents.workspace/server/index.ts +3 -3
- package/plugins/ragents.workspace/server/runtime.ts +26 -26
- package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
- package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
- package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
- package/plugins/ragents.workspace/web/index.tsx +1 -1
- package/ragents.config.core.ts +1 -1
- package/ragents.config.developer.ts +3 -3
- package/ragents.config.showcase.ts +2 -2
- package/scripts/agent/agent-cli.ts +96 -96
- package/scripts/agent/journal.ts +5 -5
- package/scripts/agent/turn-control.ts +4 -4
- package/scripts/package/build-package.ts +31 -31
- package/scripts/package/host-links.mjs +3 -3
- package/scripts/package/publish-package.ts +29 -29
- package/scripts/package/ragents.mjs +19 -19
- package/scripts/plugin/build-builtin-plugins.ts +5 -5
- package/scripts/plugin/plugin-cli.ts +14 -14
- package/scripts/provision/run-provision.ts +14 -15
- package/scripts/remote/connect.ts +49 -49
- package/scripts/remote/start.ts +18 -18
- package/scripts/workspace-client/run-workspace-client.ts +23 -23
- package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
- package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
- package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
- package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
- package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
- package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
- /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
- /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
|
@@ -10,7 +10,7 @@ import { PanelHeader } from "./PanelHeader";
|
|
|
10
10
|
|
|
11
11
|
const fileNameOf = (address: string): string => address.split(/[/\\]/).pop() ?? address;
|
|
12
12
|
|
|
13
|
-
/**
|
|
13
|
+
/** The extension starts a local profile itself; only a server by address knows connect, disconnect, and sign-in. */
|
|
14
14
|
function RowActions({ connection, busy, send, onLogin }: {
|
|
15
15
|
connection: ConnectionView;
|
|
16
16
|
busy: boolean;
|
|
@@ -22,16 +22,16 @@ function RowActions({ connection, busy, send, onLogin }: {
|
|
|
22
22
|
const missing = connection.missingEnvironment;
|
|
23
23
|
if (missing) {
|
|
24
24
|
return <>
|
|
25
|
-
<Button aria-label={`
|
|
26
|
-
onClick={() => send({ action: "setSecret", name: missing.variable, connection: connection.name })} size="xs"><KeyIcon data-icon="inline-start" />
|
|
27
|
-
<Button disabled={busy} onClick={() => send({ action: "retry", name: connection.name })} size="xs" variant="secondary">
|
|
25
|
+
<Button aria-label={`Set value for ${missing.variable} and restart ${connection.name}`} disabled={busy}
|
|
26
|
+
onClick={() => send({ action: "setSecret", name: missing.variable, connection: connection.name })} size="xs"><KeyIcon data-icon="inline-start" />Set value</Button>
|
|
27
|
+
<Button disabled={busy} onClick={() => send({ action: "retry", name: connection.name })} size="xs" variant="secondary">Retry</Button>
|
|
28
28
|
</>;
|
|
29
29
|
}
|
|
30
|
-
if (state === "login-required" || state === "forbidden") return <Button disabled={busy} onClick={() => onLogin(connection.name)} size="xs" variant="secondary">
|
|
31
|
-
if (state === "unreachable" || state === "failed") return <Button disabled={busy} onClick={() => send({ action: "retry", name: connection.name })} size="xs" variant="secondary">
|
|
30
|
+
if (state === "login-required" || state === "forbidden") return <Button disabled={busy} onClick={() => onLogin(connection.name)} size="xs" variant="secondary">Sign in</Button>;
|
|
31
|
+
if (state === "unreachable" || state === "failed") return <Button disabled={busy} onClick={() => send({ action: "retry", name: connection.name })} size="xs" variant="secondary">Retry</Button>;
|
|
32
32
|
if (profile) return null;
|
|
33
|
-
if (state === "connected") return <Button disabled={busy} onClick={() => send({ action: "disconnect", name: connection.name })} size="xs" variant="ghost">
|
|
34
|
-
if (state === "stopped") return <Button disabled={busy} onClick={() => send({ action: "connect", name: connection.name })} size="xs" variant="secondary">
|
|
33
|
+
if (state === "connected") return <Button disabled={busy} onClick={() => send({ action: "disconnect", name: connection.name })} size="xs" variant="ghost">Disconnect</Button>;
|
|
34
|
+
if (state === "stopped") return <Button disabled={busy} onClick={() => send({ action: "connect", name: connection.name })} size="xs" variant="secondary">Connect</Button>;
|
|
35
35
|
return null;
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -62,31 +62,31 @@ function ConnectionRow({ connection, send, onEdit, onLogin, onRemove }: {
|
|
|
62
62
|
{notice && <p className={cn("col-span-2 text-[0.7rem] leading-normal [overflow-wrap:anywhere]", notice.level === "error" ? "text-destructive" : "text-warning")} data-notice={notice.level} role={notice.level === "error" ? "alert" : "status"}>{notice.text}</p>}
|
|
63
63
|
<span className="col-span-2 flex flex-wrap items-center gap-1.5">
|
|
64
64
|
<RowActions busy={busy} connection={connection} onLogin={onLogin} send={send} />
|
|
65
|
-
{connection.savedLogin && <Button disabled={busy} onClick={() => send({ action: "logout", name: connection.name })} size="xs" variant="ghost">
|
|
66
|
-
<Button onClick={() => onEdit(connection.name)} size="xs" variant="ghost"><PencilIcon data-icon="inline-start" />
|
|
67
|
-
<Button aria-label={
|
|
65
|
+
{connection.savedLogin && <Button disabled={busy} onClick={() => send({ action: "logout", name: connection.name })} size="xs" variant="ghost">Sign out</Button>}
|
|
66
|
+
<Button onClick={() => onEdit(connection.name)} size="xs" variant="ghost"><PencilIcon data-icon="inline-start" />Edit</Button>
|
|
67
|
+
<Button aria-label={`Remove ${connection.name}`} className="ml-auto" onClick={() => onRemove(connection.name)} size="icon-sm" variant="ghost"><Trash2Icon /></Button>
|
|
68
68
|
</span>
|
|
69
69
|
</li>;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
/**
|
|
72
|
+
/** Names from ragents.hostEnvironment with no saved value; without it the local host starts without this environment variable. */
|
|
73
73
|
function MissingSecrets({ names, send }: { names: readonly string[]; send: (action: PanelAction) => void }) {
|
|
74
74
|
return <section className="grid grid-cols-1 gap-1.5">
|
|
75
|
-
<h2 className="text-[0.66rem] font-bold uppercase tracking-[0.06em] text-muted-foreground">
|
|
75
|
+
<h2 className="text-[0.66rem] font-bold uppercase tracking-[0.06em] text-muted-foreground">Missing values</h2>
|
|
76
76
|
<p className="text-[0.7rem] leading-normal text-muted-foreground">
|
|
77
|
-
|
|
77
|
+
These names from ragents.hostEnvironment have no value in the SecretStorage; a locally started host does not get the environment variable.
|
|
78
78
|
</p>
|
|
79
79
|
<ul className="grid grid-cols-1">
|
|
80
80
|
{names.map((name) => <li className="flex items-center gap-2 border-b border-border-soft px-1 py-2.5 last:border-b-0" key={name}>
|
|
81
81
|
<KeyIcon aria-hidden className="size-3.5 flex-none text-muted-foreground" />
|
|
82
82
|
<span className="min-w-0 flex-1 truncate font-mono text-[0.72rem]" title={name}>{name}</span>
|
|
83
|
-
<Button aria-label={`
|
|
83
|
+
<Button aria-label={`Set value for ${name}`} onClick={() => send({ action: "setSecret", name })} size="xs" variant="secondary">Set value</Button>
|
|
84
84
|
</li>)}
|
|
85
85
|
</ul>
|
|
86
86
|
</section>;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
/**
|
|
89
|
+
/** The setup: the servers as rows, behind them the dialogs to create, edit, sign in, and remove. */
|
|
90
90
|
export function ConnectionsPage({ state, send }: PanelPageProps) {
|
|
91
91
|
const [dialog, setDialog] = useState<{ kind: "new" } | { kind: "edit"; name: string }>();
|
|
92
92
|
const [login, setLogin] = useState<string>();
|
|
@@ -100,21 +100,21 @@ export function ConnectionsPage({ state, send }: PanelPageProps) {
|
|
|
100
100
|
{state.problem && <p className="text-[0.8rem] leading-normal text-destructive [overflow-wrap:anywhere]" role="alert">{state.problem}</p>}
|
|
101
101
|
<section className="grid grid-cols-1 gap-1.5">
|
|
102
102
|
{state.connections.length === 0
|
|
103
|
-
? <p className="text-[0.85rem] leading-normal text-muted-foreground">
|
|
103
|
+
? <p className="text-[0.85rem] leading-normal text-muted-foreground">No server yet.</p>
|
|
104
104
|
: <ul className="grid grid-cols-1">
|
|
105
105
|
{state.connections.map((connection) => <ConnectionRow connection={connection} key={connection.name} onEdit={(name) => setDialog({ kind: "edit", name })} onLogin={setLogin} onRemove={setRemoving} send={send} />)}
|
|
106
106
|
</ul>}
|
|
107
107
|
</section>
|
|
108
108
|
{missingSecrets.length > 0 && <MissingSecrets names={missingSecrets} send={send} />}
|
|
109
109
|
<div className="flex flex-wrap items-center gap-2">
|
|
110
|
-
<Button onClick={() => setDialog({ kind: "new" })} size="sm"><PlusIcon data-icon="inline-start" />
|
|
111
|
-
<Button aria-label="
|
|
110
|
+
<Button onClick={() => setDialog({ kind: "new" })} size="sm"><PlusIcon data-icon="inline-start" />New server</Button>
|
|
111
|
+
<Button aria-label="Open setting" onClick={() => send({ action: "settingsFile" })} size="sm" title="Open setting (settings.json)" variant="ghost"><SettingsIcon data-icon="inline-start" />settings.json</Button>
|
|
112
112
|
</div>
|
|
113
|
-
{open && <ConnectionDialog connection={editing} key={editing?.name ?? "
|
|
113
|
+
{open && <ConnectionDialog connection={editing} key={editing?.name ?? "new"} onClose={() => setDialog(undefined)} send={send} state={state} />}
|
|
114
114
|
{loginConnection && <LoginDialog connection={loginConnection} onClose={() => setLogin(undefined)} send={send} />}
|
|
115
|
-
{removing !== undefined && <ConfirmDialog confirmLabel="
|
|
116
|
-
onConfirm={() => { send({ action: "remove", name: removing }); setRemoving(undefined); }} title={
|
|
117
|
-
|
|
115
|
+
{removing !== undefined && <ConfirmDialog confirmLabel="Remove" onClose={() => setRemoving(undefined)}
|
|
116
|
+
onConfirm={() => { send({ action: "remove", name: removing }); setRemoving(undefined); }} title={`Remove ${removing}?`}>
|
|
117
|
+
The server is removed from ragents.connections. Saved credentials are lost. Runs on the server stay where they are.
|
|
118
118
|
</ConfirmDialog>}
|
|
119
119
|
</div>;
|
|
120
120
|
}
|
|
@@ -2,7 +2,7 @@ import { useState, type FormEvent } from "react";
|
|
|
2
2
|
import { Button, Input, Label } from "../ui";
|
|
3
3
|
import type { ConnectionView, PanelAction } from "./contract";
|
|
4
4
|
|
|
5
|
-
/**
|
|
5
|
+
/** Signing in to a server in the dialog body: user and password or an access token. */
|
|
6
6
|
export function LoginForm({ connection, mode, busy, send, submitLabel, onCancel }: {
|
|
7
7
|
connection: ConnectionView;
|
|
8
8
|
mode: "password" | "token";
|
|
@@ -22,15 +22,15 @@ export function LoginForm({ connection, mode, busy, send, submitLabel, onCancel
|
|
|
22
22
|
};
|
|
23
23
|
return <form className="grid gap-2.5" onSubmit={submit}>
|
|
24
24
|
{mode === "token"
|
|
25
|
-
? <div className="grid gap-1.5"><Label htmlFor={`token-${field}`}>
|
|
25
|
+
? <div className="grid gap-1.5"><Label htmlFor={`token-${field}`}>Access token</Label><Input autoComplete="off" disabled={busy} id={`token-${field}`} onChange={(event) => setToken(event.target.value)} type="password" value={token} /></div>
|
|
26
26
|
: <>
|
|
27
|
-
<div className="grid gap-1.5"><Label htmlFor={`user-${field}`}>
|
|
28
|
-
<div className="grid gap-1.5"><Label htmlFor={`password-${field}`}>
|
|
27
|
+
<div className="grid gap-1.5"><Label htmlFor={`user-${field}`}>User</Label><Input autoComplete="username" disabled={busy} id={`user-${field}`} onChange={(event) => setUser(event.target.value)} value={user} /></div>
|
|
28
|
+
<div className="grid gap-1.5"><Label htmlFor={`password-${field}`}>Password</Label><Input autoComplete="current-password" disabled={busy} id={`password-${field}`} onChange={(event) => setPassword(event.target.value)} type="password" value={password} /></div>
|
|
29
29
|
</>}
|
|
30
30
|
{connection.problem && <p className="text-[0.75rem] leading-normal text-destructive [overflow-wrap:anywhere]" role="alert">{connection.problem}</p>}
|
|
31
|
-
<p className="text-[0.72rem] leading-normal text-muted-foreground">
|
|
31
|
+
<p className="text-[0.72rem] leading-normal text-muted-foreground">The credentials are stored in the VS Code secret storage; the extension then signs in to the server silently.</p>
|
|
32
32
|
<div className="mt-1 flex flex-wrap justify-end gap-2">
|
|
33
|
-
{onCancel && <Button onClick={onCancel} size="sm" type="button" variant="ghost">
|
|
33
|
+
{onCancel && <Button onClick={onCancel} size="sm" type="button" variant="ghost">Cancel</Button>}
|
|
34
34
|
<Button disabled={busy || !complete} size="sm" type="submit">{submitLabel}</Button>
|
|
35
35
|
</div>
|
|
36
36
|
</form>;
|
|
@@ -7,7 +7,7 @@ import { LoginForm } from "./LoginForm";
|
|
|
7
7
|
|
|
8
8
|
const PROFILE_FILE = /^ragents\.config\.([a-z0-9]+(?:-[a-z0-9]+)*)\.ts$/;
|
|
9
9
|
|
|
10
|
-
/**
|
|
10
|
+
/** A profile file is named ragents.config.<profile>.ts; its profile is the name the dialog suggests. */
|
|
11
11
|
export const profileNameOf = (profileFile: string): string =>
|
|
12
12
|
PROFILE_FILE.exec(profileFile.split(/[/\\]/).pop() ?? "")?.[1] ?? "";
|
|
13
13
|
|
|
@@ -22,7 +22,7 @@ function PanelDialog({ title, onClose, children }: { title: string; onClose: ()
|
|
|
22
22
|
</Dialog>;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
/**
|
|
25
|
+
/** The confirmation before an action that cannot be undone: removing a server, deleting runs. */
|
|
26
26
|
export function ConfirmDialog({ title, confirmLabel, onConfirm, onClose, children }: {
|
|
27
27
|
title: string;
|
|
28
28
|
confirmLabel: string;
|
|
@@ -33,27 +33,27 @@ export function ConfirmDialog({ title, confirmLabel, onConfirm, onClose, childre
|
|
|
33
33
|
return <PanelDialog onClose={onClose} title={title}>
|
|
34
34
|
<p className="text-[0.78rem] leading-normal text-muted-foreground [overflow-wrap:anywhere]">{children}</p>
|
|
35
35
|
<div className="mt-1 flex flex-wrap justify-end gap-2">
|
|
36
|
-
<Button onClick={onClose} size="sm" type="button" variant="ghost">
|
|
36
|
+
<Button onClick={onClose} size="sm" type="button" variant="ghost">Cancel</Button>
|
|
37
37
|
<Button onClick={onConfirm} size="sm" type="button" variant="destructive">{confirmLabel}</Button>
|
|
38
38
|
</div>
|
|
39
39
|
</PanelDialog>;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
/**
|
|
42
|
+
/** Signing in to a server, the same dialog from the Start page and from the Server page. */
|
|
43
43
|
export function LoginDialog({ connection, onClose, send }: { connection: ConnectionView; onClose: () => void; send: (action: PanelAction) => void }) {
|
|
44
44
|
const demanded = connection.state.kind === "login-required" ? connection.state.mode : "password";
|
|
45
45
|
const [mode, setMode] = useState<"password" | "token">(demanded);
|
|
46
46
|
useEffect(() => { if (connection.state.kind === "connected") onClose(); }, [onClose, connection.state.kind]);
|
|
47
|
-
return <PanelDialog onClose={onClose} title={`
|
|
48
|
-
<div aria-label="
|
|
49
|
-
<Toggle onPressedChange={() => setMode("password")} pressed={mode === "password"} size="sm" variant="outline">
|
|
50
|
-
<Toggle onPressedChange={() => setMode("token")} pressed={mode === "token"} size="sm" variant="outline">
|
|
47
|
+
return <PanelDialog onClose={onClose} title={`Sign in to ${connection.name}`}>
|
|
48
|
+
<div aria-label="Sign-in method" className="flex gap-1.5" role="group">
|
|
49
|
+
<Toggle onPressedChange={() => setMode("password")} pressed={mode === "password"} size="sm" variant="outline">User</Toggle>
|
|
50
|
+
<Toggle onPressedChange={() => setMode("token")} pressed={mode === "token"} size="sm" variant="outline">Access token</Toggle>
|
|
51
51
|
</div>
|
|
52
|
-
<LoginForm busy={busyState(connection)} connection={connection} key={mode} mode={mode} onCancel={onClose} send={send} submitLabel="
|
|
52
|
+
<LoginForm busy={busyState(connection)} connection={connection} key={mode} mode={mode} onCancel={onClose} send={send} submitLabel="Sign in" />
|
|
53
53
|
</PanelDialog>;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
/**
|
|
56
|
+
/** Creating and editing a server; editing sends update and so keeps the saved credentials. */
|
|
57
57
|
export function ConnectionDialog({ state, connection, onClose, send }: {
|
|
58
58
|
state: PanelState;
|
|
59
59
|
connection: ConnectionView | undefined;
|
|
@@ -91,22 +91,22 @@ export function ConnectionDialog({ state, connection, onClose, send }: {
|
|
|
91
91
|
? { action: "updateServer", name: connection.name, newName: name, url }
|
|
92
92
|
: { action: "updateProfile", name: connection.name, newName: name, profileFile });
|
|
93
93
|
};
|
|
94
|
-
return <PanelDialog onClose={onClose} title={connection ?
|
|
94
|
+
return <PanelDialog onClose={onClose} title={connection ? `Edit ${connection.name}` : "New server"}>
|
|
95
95
|
<form className="grid gap-3" onSubmit={submit}>
|
|
96
|
-
<div aria-label="
|
|
96
|
+
<div aria-label="Server type" className="flex gap-1.5" role="group">
|
|
97
97
|
<Toggle onPressedChange={() => setKind("server")} pressed={kind === "server"} size="sm" variant="outline">Server</Toggle>
|
|
98
|
-
<Toggle onPressedChange={() => setKind("profile")} pressed={kind === "profile"} size="sm" variant="outline">
|
|
98
|
+
<Toggle onPressedChange={() => setKind("profile")} pressed={kind === "profile"} size="sm" variant="outline">Local profile</Toggle>
|
|
99
99
|
</div>
|
|
100
100
|
{kind === "server"
|
|
101
|
-
? <div className="grid gap-1.5"><Label htmlFor="connection-url">
|
|
101
|
+
? <div className="grid gap-1.5"><Label htmlFor="connection-url">Address</Label><Input id="connection-url" onChange={(event) => setUrl(event.target.value)} placeholder="https://workshop.example.com" value={url} /></div>
|
|
102
102
|
: <div className="grid gap-1.5">
|
|
103
|
-
<Label htmlFor="connection-profile-file">
|
|
103
|
+
<Label htmlFor="connection-profile-file">Profile file</Label>
|
|
104
104
|
<div className="flex items-center gap-2">
|
|
105
|
-
<Input aria-label="
|
|
106
|
-
<Button className="flex-none" onClick={() => send({ action: "pickProfile" })} size="sm" type="button" variant="secondary"><FolderOpenIcon data-icon="inline-start" />
|
|
105
|
+
<Input aria-label="Profile file" className="min-w-0 flex-1 font-mono text-[0.72rem]" id="connection-profile-file" onChange={(event) => setProfileFile(event.target.value)} placeholder="~/repos/RAgents/ragents.config.core.ts" title={profileFile} value={profileFile} />
|
|
106
|
+
<Button className="flex-none" onClick={() => send({ action: "pickProfile" })} size="sm" type="button" variant="secondary"><FolderOpenIcon data-icon="inline-start" />Choose file ...</Button>
|
|
107
107
|
</div>
|
|
108
108
|
{state.profileSuggestions.length > 0 && <>
|
|
109
|
-
<p className="text-[0.7rem] leading-normal text-muted-foreground">
|
|
109
|
+
<p className="text-[0.7rem] leading-normal text-muted-foreground">Found in the host folder, click one to use it:</p>
|
|
110
110
|
<ul className="grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-1.5">
|
|
111
111
|
{state.profileSuggestions.map((file) => <li key={file}>
|
|
112
112
|
<button aria-pressed={profileFile === file} className="flex w-full min-w-0 flex-col gap-0.5 rounded-md border border-border-soft px-2.5 py-1.5 text-left hover:border-border aria-pressed:border-primary aria-pressed:bg-accent" onClick={() => takeProfile(file)} type="button">
|
|
@@ -119,13 +119,13 @@ export function ConnectionDialog({ state, connection, onClose, send }: {
|
|
|
119
119
|
</div>}
|
|
120
120
|
<div className="grid gap-1.5">
|
|
121
121
|
<Label htmlFor="connection-name">Name</Label>
|
|
122
|
-
<Input id="connection-name" onChange={(event) => setName(event.target.value)} placeholder={kind === "server" ? "
|
|
123
|
-
{kind === "profile" && <span className="text-[0.68rem] text-muted-foreground">
|
|
122
|
+
<Input id="connection-name" onChange={(event) => setName(event.target.value)} placeholder={kind === "server" ? "Workshop" : "core"} value={name} />
|
|
123
|
+
{kind === "profile" && <span className="text-[0.68rem] text-muted-foreground">taken from the file name, can be changed</span>}
|
|
124
124
|
</div>
|
|
125
125
|
{state.problem && <p className="text-[0.75rem] leading-normal text-destructive [overflow-wrap:anywhere]" role="alert">{state.problem}</p>}
|
|
126
126
|
<div className="mt-1 flex flex-wrap justify-end gap-2">
|
|
127
|
-
<Button onClick={onClose} size="sm" type="button" variant="ghost">
|
|
128
|
-
<Button disabled={!name.trim() || !value.trim()} size="sm" type="submit">{connection ? "
|
|
127
|
+
<Button onClick={onClose} size="sm" type="button" variant="ghost">Cancel</Button>
|
|
128
|
+
<Button disabled={!name.trim() || !value.trim()} size="sm" type="submit">{connection ? "Save" : "Create"}</Button>
|
|
129
129
|
</div>
|
|
130
130
|
</form>
|
|
131
131
|
</PanelDialog>;
|
|
@@ -2,10 +2,10 @@ import { ArrowLeftIcon } from "lucide-react";
|
|
|
2
2
|
import { Button } from "../ui";
|
|
3
3
|
import type { PanelAction } from "./contract";
|
|
4
4
|
|
|
5
|
-
/**
|
|
5
|
+
/** The header of the Runs and Server pages: the way back to Start and the page title; the actions are in the VS Code title bar. */
|
|
6
6
|
export function PanelHeader({ title, send }: { title: string; send: (action: PanelAction) => void }) {
|
|
7
7
|
return <div className="flex items-center gap-1.5">
|
|
8
|
-
<Button aria-label="
|
|
8
|
+
<Button aria-label="Back to Start" onClick={() => send({ action: "page", page: "start" })} size="icon-sm" title="Back to Start" variant="ghost"><ArrowLeftIcon /></Button>
|
|
9
9
|
<h1 className="min-w-0 flex-1 text-[1.1rem] font-semibold">{title}</h1>
|
|
10
10
|
</div>;
|
|
11
11
|
}
|
|
@@ -3,7 +3,7 @@ import type { PanelPageProps } from "./page-props";
|
|
|
3
3
|
import { RunsPage } from "./RunsPage";
|
|
4
4
|
import { StartPage } from "./StartPage";
|
|
5
5
|
|
|
6
|
-
/**
|
|
6
|
+
/** The panel without an open run: Start, Runs, or Server; the run itself lives in the run panel. */
|
|
7
7
|
export function PanelPage(props: PanelPageProps) {
|
|
8
8
|
const page = props.state.page;
|
|
9
9
|
return <main className="h-full overflow-y-auto p-3">
|
|
@@ -7,12 +7,12 @@ import type { ConnectionRun, ConnectionView } from "./contract";
|
|
|
7
7
|
const lineClass = "grid grid-cols-subgrid items-center rounded-md px-2 py-1.5 text-left hover:bg-accent"
|
|
8
8
|
+ " focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-ring/60";
|
|
9
9
|
|
|
10
|
-
/**
|
|
10
|
+
/** The list columns: checkbox (only in selection mode), state, title, time, and server (only with two or more servers). */
|
|
11
11
|
const columnsOf = (showConnection: boolean, selecting: boolean): string => selecting
|
|
12
12
|
? (showConnection ? "grid-cols-[auto_auto_minmax(0,1fr)_auto_auto]" : "grid-cols-[auto_auto_minmax(0,1fr)_auto]")
|
|
13
13
|
: (showConnection ? "grid-cols-[auto_minmax(0,1fr)_auto_auto]" : "grid-cols-[auto_minmax(0,1fr)_auto]");
|
|
14
14
|
|
|
15
|
-
/**
|
|
15
|
+
/** The list of run lines: a grid whose columns the rows share via subgrid so everything lines up. */
|
|
16
16
|
export function RunList({ label, showConnection, selecting = false, children }: {
|
|
17
17
|
label: string;
|
|
18
18
|
showConnection: boolean;
|
|
@@ -22,7 +22,7 @@ export function RunList({ label, showConnection, selecting = false, children }:
|
|
|
22
22
|
return <ul aria-label={label} className={cn("-mx-2 grid gap-x-2 gap-y-0.5", columnsOf(showConnection, selecting))}>{children}</ul>;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
/**
|
|
25
|
+
/** One line per run, the same on Start and on Runs: state and title on the left, time and server on the right in the list columns. */
|
|
26
26
|
export function RunLine({ connection, run, showConnection, selecting, selected, onOpen, onToggle }: {
|
|
27
27
|
connection: ConnectionView;
|
|
28
28
|
run: ConnectionRun;
|
|
@@ -35,7 +35,7 @@ export function RunLine({ connection, run, showConnection, selecting, selected,
|
|
|
35
35
|
const time = shortTime(run.updatedAt);
|
|
36
36
|
const problem = run.locked !== undefined ? `Locked: ${run.locked}` : run.problem;
|
|
37
37
|
return <li className="col-span-full grid grid-cols-subgrid items-center">
|
|
38
|
-
{selecting && <Checkbox aria-label={
|
|
38
|
+
{selecting && <Checkbox aria-label={`Select ${run.title}`} checked={selected === true} className="ml-1" onCheckedChange={() => onToggle?.()} />}
|
|
39
39
|
<button aria-disabled={run.locked !== undefined && !selecting} className={cn(lineClass, selecting ? "col-[2/-1]" : "col-span-full", "aria-disabled:cursor-default aria-disabled:hover:bg-transparent")}
|
|
40
40
|
onClick={() => (selecting ? onToggle?.() : run.locked === undefined && onOpen())} title={showConnection ? `${run.title} (${connection.name})` : run.title} type="button">
|
|
41
41
|
<RunStateIcon open={run.pendingActions} state={run.state} />
|
|
@@ -10,9 +10,9 @@ import { RunLine, RunList } from "./RunLine";
|
|
|
10
10
|
const keyOf = (connection: string, runId: string): string => `${connection}\u0000${runId}`;
|
|
11
11
|
|
|
12
12
|
const matches = (connection: ConnectionView, run: ConnectionRun, query: string): boolean =>
|
|
13
|
-
`${run.title} ${connection.name}`.toLocaleLowerCase("
|
|
13
|
+
`${run.title} ${connection.name}`.toLocaleLowerCase("en-US").includes(query);
|
|
14
14
|
|
|
15
|
-
/**
|
|
15
|
+
/** All runs of all servers as one list: search, hide ended, the server filter from the chip on Start, and a multi-selection for deleting. */
|
|
16
16
|
export function RunsPage({ state, send }: PanelPageProps) {
|
|
17
17
|
const [query, setQuery] = useState("");
|
|
18
18
|
const [onlyConnection, setOnlyConnection] = useState(state.runsConnection);
|
|
@@ -23,7 +23,7 @@ export function RunsPage({ state, send }: PanelPageProps) {
|
|
|
23
23
|
const marked = state.connections.length > 1;
|
|
24
24
|
const all = state.connections.flatMap((connection) => connection.runs.map((run) => ({ connection, run })))
|
|
25
25
|
.sort((left, right) => right.run.updatedAt - left.run.updatedAt);
|
|
26
|
-
const needle = query.trim().toLocaleLowerCase("
|
|
26
|
+
const needle = query.trim().toLocaleLowerCase("en-US");
|
|
27
27
|
const shown = all
|
|
28
28
|
.filter(({ connection }) => onlyConnection === undefined || connection.name === onlyConnection)
|
|
29
29
|
.filter(({ run }) => !hideEnded || run.state !== "ended")
|
|
@@ -49,36 +49,36 @@ export function RunsPage({ state, send }: PanelPageProps) {
|
|
|
49
49
|
<PanelHeader send={send} title="Runs" />
|
|
50
50
|
<div className="relative">
|
|
51
51
|
<SearchIcon aria-hidden className="pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground" />
|
|
52
|
-
<Input aria-label="
|
|
53
|
-
placeholder="
|
|
52
|
+
<Input aria-label="Search runs" className="h-8 pl-8 text-[0.76rem]" onChange={(event) => setQuery(event.target.value)}
|
|
53
|
+
placeholder="Search runs ..." type="search" value={query} />
|
|
54
54
|
</div>
|
|
55
55
|
<div className="flex flex-wrap items-center gap-1.5">
|
|
56
|
-
{onlyConnection !== undefined && <Toggle aria-label={`
|
|
56
|
+
{onlyConnection !== undefined && <Toggle aria-label={`Only ${onlyConnection}`} onPressedChange={() => setOnlyConnection(undefined)} pressed size="sm" title={`Only runs on ${onlyConnection}; click to show all`} variant="outline">
|
|
57
57
|
{onlyConnection}<XIcon data-icon="inline-end" />
|
|
58
58
|
</Toggle>}
|
|
59
|
-
<Toggle onPressedChange={setHideEnded} pressed={hideEnded} size="sm" variant="outline">
|
|
59
|
+
<Toggle onPressedChange={setHideEnded} pressed={hideEnded} size="sm" variant="outline">Hide ended</Toggle>
|
|
60
60
|
<Toggle onPressedChange={(next) => (next ? setSelecting(true) : leaveSelection())} pressed={selecting} size="sm" variant="outline">
|
|
61
|
-
<CheckSquareIcon data-icon="inline-start" />
|
|
61
|
+
<CheckSquareIcon data-icon="inline-start" />Select
|
|
62
62
|
</Toggle>
|
|
63
63
|
</div>
|
|
64
64
|
{shown.length === 0
|
|
65
|
-
? <p className="text-[0.75rem] text-muted-foreground" role="status">{all.length === 0 ? "
|
|
65
|
+
? <p className="text-[0.75rem] text-muted-foreground" role="status">{all.length === 0 ? "No runs yet." : "No matching run."}</p>
|
|
66
66
|
: <RunList label="Runs" selecting={selecting} showConnection={marked}>
|
|
67
67
|
{shown.map(({ connection, run }) => <RunLine connection={connection} key={keyOf(connection.name, run.id)}
|
|
68
68
|
onOpen={() => send({ action: "openRun", name: connection.name, runId: run.id })}
|
|
69
69
|
onToggle={() => toggle(keyOf(connection.name, run.id))} run={run} selected={selected.has(keyOf(connection.name, run.id))} selecting={selecting} showConnection={marked} />)}
|
|
70
70
|
</RunList>}
|
|
71
71
|
{selecting && <div className="sticky bottom-0 flex flex-wrap items-center gap-2 border-t border-border-soft bg-background py-2">
|
|
72
|
-
<span className="flex-1 text-[0.72rem] text-muted-foreground" role="status">{selected.size}
|
|
73
|
-
<Button disabled={selected.size === 0} onClick={() => setConfirming(true)} size="xs" variant="destructive"><Trash2Icon data-icon="inline-start" />
|
|
74
|
-
<Button onClick={leaveSelection} size="xs" variant="ghost">
|
|
72
|
+
<span className="flex-1 text-[0.72rem] text-muted-foreground" role="status">{selected.size} selected</span>
|
|
73
|
+
<Button disabled={selected.size === 0} onClick={() => setConfirming(true)} size="xs" variant="destructive"><Trash2Icon data-icon="inline-start" />Delete</Button>
|
|
74
|
+
<Button onClick={leaveSelection} size="xs" variant="ghost">Cancel</Button>
|
|
75
75
|
</div>}
|
|
76
76
|
{confirming && <ConfirmDialog
|
|
77
|
-
confirmLabel="
|
|
77
|
+
confirmLabel="Delete"
|
|
78
78
|
onClose={() => setConfirming(false)}
|
|
79
79
|
onConfirm={remove}
|
|
80
|
-
title={selected.size === 1 ? "
|
|
81
|
-
|
|
80
|
+
title={selected.size === 1 ? "Delete one run?" : `Delete ${selected.size} runs?`}>
|
|
81
|
+
The selected runs are removed from their server along with their journals. This cannot be undone.
|
|
82
82
|
</ConfirmDialog>}
|
|
83
83
|
</div>;
|
|
84
84
|
}
|
|
@@ -11,25 +11,25 @@ import { RunLine, RunList } from "./RunLine";
|
|
|
11
11
|
|
|
12
12
|
const RECENT_RUNS = 5;
|
|
13
13
|
|
|
14
|
-
/**
|
|
14
|
+
/** The template behind defaultEntry; the extension names only an id from entries. */
|
|
15
15
|
const defaultEntryOf = (connection: ConnectionView): ConnectionEntry | undefined => connection.entries.find((entry) => entry.id === connection.defaultEntry);
|
|
16
16
|
|
|
17
17
|
const chipPartClass = "focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-ring/60 enabled:hover:bg-accent";
|
|
18
18
|
const iconPartClass = "flex w-8 flex-none items-center justify-center";
|
|
19
19
|
|
|
20
|
-
/**
|
|
20
|
+
/** What the left part of the chip does: the word stands next to the name, the label in the tooltip; without run it is disabled. */
|
|
21
21
|
const chipAction = (connection: ConnectionView, send: PanelPageProps["send"], onLogin: (name: string) => void): { word: string; label: string; run?: () => void } => {
|
|
22
22
|
switch (connectionState(connection)) {
|
|
23
23
|
case "login-required":
|
|
24
|
-
case "forbidden": return { word: "
|
|
24
|
+
case "forbidden": return { word: "Sign in", label: `Sign in to ${connection.name}`, run: () => onLogin(connection.name) };
|
|
25
25
|
case "unreachable":
|
|
26
|
-
case "failed": return { word: "
|
|
26
|
+
case "failed": return { word: "Retry", label: `Retry ${connection.name}`, run: () => send({ action: "retry", name: connection.name }) };
|
|
27
27
|
case "stopped": return connection.kind === "profile"
|
|
28
|
-
? { word: "
|
|
29
|
-
: { word: "
|
|
30
|
-
case "starting": return { word: "
|
|
28
|
+
? { word: "Start", label: `Start ${connection.name}`, run: () => send({ action: "startProfile", name: connection.name }) }
|
|
29
|
+
: { word: "Connect", label: `Connect to ${connection.name}`, run: () => send({ action: "connect", name: connection.name }) };
|
|
30
|
+
case "starting": return { word: "starting ...", label: `${connection.name} is starting` };
|
|
31
31
|
case "connected":
|
|
32
|
-
case "ready": return { word: "", label: `Runs
|
|
32
|
+
case "ready": return { word: "", label: `Runs on ${connection.name}`, run: () => send({ action: "page", page: "runs", connection: connection.name }) };
|
|
33
33
|
}
|
|
34
34
|
};
|
|
35
35
|
|
|
@@ -38,7 +38,7 @@ interface Failure {
|
|
|
38
38
|
readonly message: string;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
/**
|
|
41
|
+
/** The state icon as a button of its own: on an error it opens the popover with the message, the lock opens the sign-in dialog. */
|
|
42
42
|
function StateButton({ connection, action, failure, onFailure, send, onLogin }: {
|
|
43
43
|
connection: ConnectionView;
|
|
44
44
|
action: ReturnType<typeof chipAction>;
|
|
@@ -51,29 +51,29 @@ function StateButton({ connection, action, failure, onFailure, send, onLogin }:
|
|
|
51
51
|
const detail = stateDetail(connection);
|
|
52
52
|
const missing = connection.missingEnvironment;
|
|
53
53
|
if (state === "login-required") {
|
|
54
|
-
return <button aria-label={`
|
|
54
|
+
return <button aria-label={`Sign-in for ${connection.name}`} className={cn(iconPartClass, chipPartClass)} onClick={() => onLogin(connection.name)} type="button">
|
|
55
55
|
<ConnectionStateIcon state={state} />
|
|
56
56
|
</button>;
|
|
57
57
|
}
|
|
58
58
|
const shown = detail !== undefined ? { title: connectionStateWord(state), message: detail } : failure;
|
|
59
59
|
return <Popover onOpenChange={(next) => onFailure(next ? shown : undefined)} open={failure !== undefined}>
|
|
60
|
-
<PopoverTrigger aria-label={`
|
|
60
|
+
<PopoverTrigger aria-label={`Show error of ${connection.name}`} className={cn(iconPartClass, chipPartClass)}>
|
|
61
61
|
<ConnectionStateIcon state={state} />
|
|
62
62
|
</PopoverTrigger>
|
|
63
63
|
{shown && <PopoverContent align="start" className="w-[min(360px,calc(100vw-16px))] gap-2 p-3" collisionPadding={8} dim side="bottom">
|
|
64
64
|
<PopoverHeader><PopoverTitle className="text-[0.8rem] font-semibold text-destructive">{shown.title}</PopoverTitle></PopoverHeader>
|
|
65
65
|
<p className={cn("max-h-[50vh] overflow-auto select-text whitespace-pre-wrap text-[0.72rem] leading-normal [overflow-wrap:anywhere]", shown.message.includes("\n") && "font-mono")}>{shown.message}</p>
|
|
66
66
|
<div className="flex flex-wrap justify-end gap-2">
|
|
67
|
-
<Button onClick={() => send({ action: "showOutput" })} size="xs" variant="ghost">
|
|
68
|
-
{missing && <Button aria-label={`
|
|
69
|
-
onClick={() => { onFailure(undefined); send({ action: "setSecret", name: missing.variable, connection: connection.name }); }} size="xs">
|
|
67
|
+
<Button onClick={() => send({ action: "showOutput" })} size="xs" variant="ghost">Open output</Button>
|
|
68
|
+
{missing && <Button aria-label={`Set value for ${missing.variable} and restart ${connection.name}`}
|
|
69
|
+
onClick={() => { onFailure(undefined); send({ action: "setSecret", name: missing.variable, connection: connection.name }); }} size="xs">Set value</Button>}
|
|
70
70
|
{action.run && action.word && <Button onClick={() => { onFailure(undefined); action.run?.(); }} size="xs" variant="secondary">{action.word}</Button>}
|
|
71
71
|
</div>
|
|
72
72
|
</PopoverContent>}
|
|
73
73
|
</Popover>;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
/**
|
|
76
|
+
/** A server as a split button: state, name, action word, and route line on the left, the plus for the default or a new chat on the right. */
|
|
77
77
|
function ConnectionChip({ connection, send, onLogin }: {
|
|
78
78
|
connection: ConnectionView;
|
|
79
79
|
send: PanelPageProps["send"];
|
|
@@ -88,7 +88,7 @@ function ConnectionChip({ connection, send, onLogin }: {
|
|
|
88
88
|
const canCreate = connection.state.kind === "connected" && connection.canCreate;
|
|
89
89
|
const route = routeLabel(connection);
|
|
90
90
|
const starter = defaultEntryOf(connection);
|
|
91
|
-
const plusLabel = starter ? `
|
|
91
|
+
const plusLabel = starter ? `New run from ${starter.title} on ${connection.name}` : `New chat on ${connection.name}`;
|
|
92
92
|
const ownIcon = state === "login-required" || detail !== undefined || failure !== undefined;
|
|
93
93
|
return <li className="flex min-w-0 items-stretch overflow-hidden rounded-md bg-secondary">
|
|
94
94
|
{ownIcon && <StateButton action={action} connection={connection} failure={failure} onFailure={setFailure} onLogin={onLogin} send={send} />}
|
|
@@ -110,16 +110,16 @@ function ConnectionChip({ connection, send, onLogin }: {
|
|
|
110
110
|
</li>;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
/**
|
|
113
|
+
/** The templates of a server: the default template or New chat first, then the rest; with a heading when there are two or more servers. */
|
|
114
114
|
function ConnectionOffers({ connection, marked, send }: { connection: ConnectionView; marked: boolean; send: PanelPageProps["send"] }) {
|
|
115
115
|
return <div className="grid grid-cols-1 gap-1.5">
|
|
116
116
|
{marked && <h3 className="flex items-center gap-1.5 pt-1 text-[0.78rem] font-semibold"><ConnectionStateIcon state={connectionState(connection)} />{connection.name}</h3>}
|
|
117
|
-
<StartTiles defaultEntry={connection.defaultEntry} entries={connection.entries} label={marked ? `
|
|
117
|
+
<StartTiles defaultEntry={connection.defaultEntry} entries={connection.entries} label={marked ? `Templates on ${connection.name}` : "Templates"}
|
|
118
118
|
onNewChat={() => send({ action: "newRun", name: connection.name })} onStart={(entryId) => send({ action: "newRun", name: connection.name, entryId })} />
|
|
119
119
|
</div>;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
/**
|
|
122
|
+
/** The start page: the servers as a block, below them the latest runs and, per reachable server, its templates, the default template or New chat first. */
|
|
123
123
|
export function StartPage({ state, send }: PanelPageProps) {
|
|
124
124
|
const [login, setLogin] = useState<string>();
|
|
125
125
|
const connections = state.connections;
|
|
@@ -136,8 +136,8 @@ export function StartPage({ state, send }: PanelPageProps) {
|
|
|
136
136
|
role={notice.level === "error" ? "alert" : "status"}>{marked ? `${name}: ${notice.text}` : notice.text}</p>)}
|
|
137
137
|
{connections.length === 0
|
|
138
138
|
? <div className="grid gap-3">
|
|
139
|
-
<p className="text-[0.85rem] leading-normal text-muted-foreground">
|
|
140
|
-
<Button onClick={() => send({ action: "page", page: "connections" })}><ServerIcon data-icon="inline-start" />
|
|
139
|
+
<p className="text-[0.85rem] leading-normal text-muted-foreground">No server yet. Add a server by address or a local profile.</p>
|
|
140
|
+
<Button onClick={() => send({ action: "page", page: "connections" })}><ServerIcon data-icon="inline-start" />Add server</Button>
|
|
141
141
|
</div>
|
|
142
142
|
: <>
|
|
143
143
|
<section className="grid grid-cols-1 gap-1.5">
|
|
@@ -147,17 +147,17 @@ export function StartPage({ state, send }: PanelPageProps) {
|
|
|
147
147
|
</ul>
|
|
148
148
|
</section>
|
|
149
149
|
<section className="grid grid-cols-1 gap-1.5">
|
|
150
|
-
<StartSection title="
|
|
151
|
-
{runs.length > 0 && <Button className="text-[0.66rem]" onClick={() => send({ action: "page", page: "runs" })} size="xs" variant="ghost">
|
|
150
|
+
<StartSection title="Continue">
|
|
151
|
+
{runs.length > 0 && <Button className="text-[0.66rem]" onClick={() => send({ action: "page", page: "runs" })} size="xs" variant="ghost">All {runs.length} runs<ChevronRightIcon data-icon="inline-end" /></Button>}
|
|
152
152
|
</StartSection>
|
|
153
153
|
{runs.length === 0
|
|
154
|
-
? <p className="text-[0.75rem] text-muted-foreground">
|
|
155
|
-
: <RunList label="
|
|
154
|
+
? <p className="text-[0.75rem] text-muted-foreground">No runs yet.</p>
|
|
155
|
+
: <RunList label="Recent" showConnection={marked}>
|
|
156
156
|
{runs.slice(0, RECENT_RUNS).map(({ connection, run }) => <RunLine connection={connection} key={`${connection.name}:${run.id}`} onOpen={() => send({ action: "openRun", name: connection.name, runId: run.id })} run={run} showConnection={marked} />)}
|
|
157
157
|
</RunList>}
|
|
158
158
|
</section>
|
|
159
159
|
{reachable.length > 0 && <section className="grid grid-cols-1 gap-1.5">
|
|
160
|
-
<StartSection count={tiles} title="
|
|
160
|
+
<StartSection count={tiles} title="New" />
|
|
161
161
|
{reachable.map((connection) => <ConnectionOffers connection={connection} key={connection.name} marked={marked} send={send} />)}
|
|
162
162
|
</section>}
|
|
163
163
|
</>}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ConnectionStateName } from "../ui/state-vocabulary";
|
|
2
2
|
import type { ConnectionView, MissingEnvironment } from "./contract";
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/** The state of a server in the vocabulary of the pages; a connected local profile is not "connected" but ready. */
|
|
5
5
|
export const connectionState = (connection: ConnectionView): ConnectionStateName => {
|
|
6
6
|
switch (connection.state.kind) {
|
|
7
7
|
case "stopped": return "stopped";
|
|
@@ -15,12 +15,12 @@ export const connectionState = (connection: ConnectionView): ConnectionStateName
|
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
/**
|
|
18
|
+
/** Why a missing environment variable holds up the start: which one, what the profile needs it for, and where its value belongs. */
|
|
19
19
|
const missingEnvironmentDetail = (missing: MissingEnvironment): string =>
|
|
20
|
-
`
|
|
21
|
-
+ "
|
|
20
|
+
`The environment variable ${missing.variable} is not set; the configuration requires it for ${missing.section}.${missing.key}. `
|
|
21
|
+
+ "Store its value as a secret in VS Code; it stays in the SecretStorage and goes into the host's environment on the next start.";
|
|
22
22
|
|
|
23
|
-
/**
|
|
23
|
+
/** The reason that belongs to the state; it appears below the server's row. */
|
|
24
24
|
export const stateDetail = (connection: ConnectionView): string | undefined => {
|
|
25
25
|
if (connection.missingEnvironment) return missingEnvironmentDetail(connection.missingEnvironment);
|
|
26
26
|
const state = connection.state;
|
|
@@ -28,13 +28,13 @@ export const stateDetail = (connection: ConnectionView): string | undefined => {
|
|
|
28
28
|
return undefined;
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
-
export const kindLabel = (connection: ConnectionView): string => connection.kind === "profile" ? "
|
|
31
|
+
export const kindLabel = (connection: ConnectionView): string => connection.kind === "profile" ? "local profile" : "server";
|
|
32
32
|
|
|
33
|
-
/**
|
|
33
|
+
/** The route line below the name: the local profile, the server's host, or the server whose profile runs locally. */
|
|
34
34
|
export const routeLabel = (connection: ConnectionView): string => {
|
|
35
35
|
const route = connection.route;
|
|
36
|
-
if (route.kind === "profile") return `
|
|
37
|
-
return route.localHost ? `${route.host} \u00b7
|
|
36
|
+
if (route.kind === "profile") return `local \u00b7 ${route.profile}`;
|
|
37
|
+
return route.localHost ? `${route.host} \u00b7 local` : route.host;
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
export const busyState = (connection: ConnectionView): boolean => connection.state.kind === "starting" || connection.state.kind === "connecting";
|