@abot-ai/runtime 1.6.0 → 1.7.0
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 +2 -0
- package/dist/src/bridge/request-steering.js +60 -15
- package/dist/src/capabilities/normal-invocation/contracts.d.ts +3 -0
- package/dist/src/capabilities/normal-invocation/output-channels.d.ts +10 -0
- package/dist/src/capabilities/normal-invocation/output-channels.js +29 -0
- package/dist/src/capabilities/normal-invocation/validator.js +4 -2
- package/dist/src/capabilities/tool-types.d.ts +1 -1
- package/dist/src/cli/host-companion-bundle.mjs +7570 -6781
- package/dist/src/cli/host-companion-entry.js +5 -22
- package/dist/src/cli/host-companion-input.d.ts +3 -0
- package/dist/src/cli/host-companion-input.js +21 -0
- package/dist/src/cli/host-companion-lifecycle.d.ts +11 -0
- package/dist/src/cli/host-companion-lifecycle.js +32 -0
- package/dist/src/cli/host-companion-setup-target.d.ts +4 -0
- package/dist/src/cli/host-companion-setup-target.js +17 -0
- package/dist/src/cli/host-companion-startup.d.ts +2 -0
- package/dist/src/cli/host-companion-startup.js +7 -2
- package/dist/src/cli/host-companion.d.ts +6 -0
- package/dist/src/cli/host-companion.js +30 -27
- package/dist/src/cli/windows-companion-store-entry.d.ts +9 -0
- package/dist/src/cli/windows-companion-store-entry.js +67 -0
- package/dist/src/computer-access/command-output-capture.d.ts +37 -0
- package/dist/src/computer-access/command-output-capture.js +136 -0
- package/dist/src/computer-access/command-output-retention.d.ts +5 -0
- package/dist/src/computer-access/command-output-retention.js +90 -0
- package/dist/src/computer-access/command-output.d.ts +7 -0
- package/dist/src/computer-access/command-output.js +1 -0
- package/dist/src/computer-access/commands.d.ts +1 -0
- package/dist/src/computer-access/commands.js +1 -1
- package/dist/src/computer-access/companion/command-output-protocol.d.ts +12 -0
- package/dist/src/computer-access/companion/command-output-protocol.js +28 -0
- package/dist/src/computer-access/companion/command-output.d.ts +13 -0
- package/dist/src/computer-access/companion/command-output.js +110 -0
- package/dist/src/computer-access/companion/install-link-macos.d.ts +7 -0
- package/dist/src/computer-access/companion/install-link-macos.js +48 -0
- package/dist/src/computer-access/companion/install-link-registration.d.ts +4 -0
- package/dist/src/computer-access/companion/install-link-registration.js +184 -0
- package/dist/src/computer-access/companion/install-link-windows.d.ts +4 -0
- package/dist/src/computer-access/companion/install-link-windows.js +65 -0
- package/dist/src/computer-access/companion/install-link.d.ts +9 -0
- package/dist/src/computer-access/companion/install-link.js +54 -0
- package/dist/src/computer-access/companion/native-messages.js +3 -0
- package/dist/src/computer-access/companion/native-session.d.ts +1 -0
- package/dist/src/computer-access/companion/native-session.js +14 -2
- package/dist/src/computer-access/companion/native-supervisor.js +1 -0
- package/dist/src/computer-access/companion/notification-windows.d.ts +1 -1
- package/dist/src/computer-access/companion/notification-windows.js +8 -3
- package/dist/src/computer-access/companion/protocol.d.ts +1 -1
- package/dist/src/computer-access/companion/protocol.js +6 -0
- package/dist/src/computer-access/companion/release-version.d.ts +1 -1
- package/dist/src/computer-access/companion/release-version.js +1 -1
- package/dist/src/computer-access/companion/windows-store/connection-error.d.ts +7 -0
- package/dist/src/computer-access/companion/windows-store/connection-error.js +19 -0
- package/dist/src/computer-access/companion/windows-store/connection-link.d.ts +13 -0
- package/dist/src/computer-access/companion/windows-store/connection-link.js +109 -0
- package/dist/src/computer-access/companion/windows-store/identity.d.ts +13 -0
- package/dist/src/computer-access/companion/windows-store/identity.js +13 -0
- package/dist/src/computer-access/companion/windows-store/lifecycle.d.ts +5 -0
- package/dist/src/computer-access/companion/windows-store/lifecycle.js +90 -0
- package/dist/src/computer-access/contracts.d.ts +1 -1
- package/dist/src/computer-access/handlers.d.ts +2 -1
- package/dist/src/computer-access/handlers.js +5 -1
- package/dist/src/computer-access/process-capture.d.ts +6 -0
- package/dist/src/computer-access/process-capture.js +1 -0
- package/dist/src/computer-access/process-result.d.ts +2 -0
- package/dist/src/computer-access/process-result.js +14 -6
- package/dist/src/computer-access/process-runner.d.ts +2 -1
- package/dist/src/computer-access/process-runner.js +21 -13
- package/dist/src/model-gateway/server/configuration.d.ts +2 -0
- package/dist/src/model-gateway/server/configuration.js +73 -21
- package/dist/src/plugin-contract/install-source.d.ts +13 -0
- package/dist/src/plugin-contract/install-source.js +99 -0
- package/dist/src/plugin-contract/manifest.d.ts +2 -1
- package/dist/src/plugin-sdk/computer-access.d.ts +8 -0
- package/dist/src/plugin-sdk/computer-access.js +5 -0
- package/dist/src/runtime/adapters/in-memory-session-store.js +6 -16
- package/dist/src/runtime/admin/config-control.js +2 -1
- package/dist/src/runtime/automations/catalog.d.ts +3 -0
- package/dist/src/runtime/automations/catalog.js +1 -0
- package/dist/src/runtime/automations/model-dependency-projection.d.ts +2 -0
- package/dist/src/runtime/automations/service.d.ts +2 -0
- package/dist/src/runtime/capabilities/automation-builder/authoring-reference.d.ts +10 -5
- package/dist/src/runtime/capabilities/automation-builder/authoring-reference.js +8 -7
- package/dist/src/runtime/capabilities/automation-builder/payload-instructions.d.ts +2 -2
- package/dist/src/runtime/capabilities/automation-builder/payload-instructions.js +2 -2
- package/dist/src/runtime/capabilities/automation-builder/tool-contract.d.ts +2 -2
- package/dist/src/runtime/capabilities/automations/authoring-catalog.js +1 -1
- package/dist/src/runtime/capabilities/automations/authoring-preparation.d.ts +11 -5
- package/dist/src/runtime/capabilities/automations/tool-module.js +1 -1
- package/dist/src/runtime/capabilities/request-permission-catalog.d.ts +3 -1
- package/dist/src/runtime/capabilities/request-permission-catalog.js +21 -2
- package/dist/src/runtime/capabilities/request-permission-tool-registry.d.ts +2 -1
- package/dist/src/runtime/capabilities/request-permission-tool-registry.js +18 -10
- package/dist/src/runtime/capabilities/request-runtime-tool-registry.d.ts +2 -0
- package/dist/src/runtime/capabilities/request-runtime-tool-registry.js +1 -1
- package/dist/src/runtime/capabilities/scheduling/create-operations.d.ts +6 -0
- package/dist/src/runtime/config/builders.js +6 -5
- package/dist/src/runtime/config/effective-model-config-validation.js +4 -35
- package/dist/src/runtime/config/fields.js +15 -0
- package/dist/src/runtime/config/model-context-capacity.d.ts +20 -0
- package/dist/src/runtime/config/model-context-capacity.js +55 -0
- package/dist/src/runtime/config/model-execution-policy.d.ts +5 -1
- package/dist/src/runtime/config/model-execution-policy.js +16 -0
- package/dist/src/runtime/config/model-plugin-config.d.ts +8 -0
- package/dist/src/runtime/config/model-plugin-config.js +40 -0
- package/dist/src/runtime/config/schema.js +5 -1
- package/dist/src/runtime/config/validation/model-profile-validation.js +2 -0
- package/dist/src/runtime/config/validation/runtime-config-validation-contract.d.ts +3 -1
- package/dist/src/runtime/config/validation/runtime-config-validation-contract.js +3 -1
- package/dist/src/runtime/config/validation/runtime-root-section-validation.js +11 -4
- package/dist/src/runtime/config/validation/web-ui-config-validation.js +3 -2
- package/dist/src/runtime/config/web-ui.d.ts +5 -0
- package/dist/src/runtime/config/web-ui.js +5 -0
- package/dist/src/runtime/config.js +2 -0
- package/dist/src/runtime/local-application.d.ts +2 -0
- package/dist/src/runtime/local-host/app-owner.js +50 -6
- package/dist/src/runtime/local-host/app-request-control.d.ts +3 -1
- package/dist/src/runtime/local-host/app-request-control.js +91 -11
- package/dist/src/runtime/local-host/client-requests.js +32 -5
- package/dist/src/runtime/local-host/client-services.d.ts +2 -0
- package/dist/src/runtime/local-host/local-request-diagnostics.d.ts +9 -0
- package/dist/src/runtime/local-host/local-request-diagnostics.js +47 -0
- package/dist/src/runtime/local-host/saved-approvals.js +23 -2
- package/dist/src/runtime/model/model-selection.js +4 -1
- package/dist/src/runtime/observability/request-control-diagnostics.d.ts +6 -0
- package/dist/src/runtime/observability/request-control-diagnostics.js +52 -0
- package/dist/src/runtime/plugins/configuration-context.d.ts +9 -0
- package/dist/src/runtime/plugins/configuration-context.js +42 -0
- package/dist/src/runtime/plugins/configuration-settings.d.ts +2 -0
- package/dist/src/runtime/plugins/configuration-settings.js +26 -0
- package/dist/src/runtime/plugins/configuration-store.d.ts +23 -0
- package/dist/src/runtime/plugins/configuration-store.js +100 -0
- package/dist/src/runtime/plugins/configuration-write.d.ts +5 -0
- package/dist/src/runtime/plugins/configuration-write.js +58 -0
- package/dist/src/runtime/plugins/installation/archive.d.ts +2 -0
- package/dist/src/runtime/plugins/installation/archive.js +107 -0
- package/dist/src/runtime/plugins/installation/github-download.d.ts +9 -0
- package/dist/src/runtime/plugins/installation/github-download.js +72 -0
- package/dist/src/runtime/plugins/installation/installed-package.d.ts +9 -0
- package/dist/src/runtime/plugins/installation/installed-package.js +66 -0
- package/dist/src/runtime/plugins/installation/package.d.ts +45 -0
- package/dist/src/runtime/plugins/installation/package.js +79 -0
- package/dist/src/runtime/plugins/installation/portable-path.d.ts +2 -0
- package/dist/src/runtime/plugins/installation/portable-path.js +10 -0
- package/dist/src/runtime/plugins/installation/publication.d.ts +10 -0
- package/dist/src/runtime/plugins/installation/publication.js +17 -0
- package/dist/src/runtime/plugins/installation/service.d.ts +41 -0
- package/dist/src/runtime/plugins/installation/service.js +80 -0
- package/dist/src/runtime/plugins/loader.js +15 -29
- package/dist/src/runtime/plugins/manifest-projection.js +1 -0
- package/dist/src/runtime/plugins/manifest-validator.js +3 -0
- package/dist/src/runtime/plugins/module-cache.d.ts +2 -0
- package/dist/src/runtime/plugins/module-cache.js +19 -0
- package/dist/src/runtime/plugins/selection.d.ts +2 -0
- package/dist/src/runtime/plugins/selection.js +16 -11
- package/dist/src/runtime/ports.d.ts +6 -4
- package/dist/src/runtime/request/dependencies.d.ts +2 -1
- package/dist/src/runtime/request/execution-payload-compacted-evidence.d.ts +1 -1
- package/dist/src/runtime/request/handler.js +8 -0
- package/dist/src/runtime/request/prepared-execution.js +6 -1
- package/dist/src/runtime/request/request-steering.d.ts +4 -0
- package/dist/src/runtime/request/request-steering.js +37 -12
- package/dist/src/runtime/request/worker-capability-composition.d.ts +2 -0
- package/dist/src/runtime/request/worker-capability-composition.js +4 -1
- package/dist/src/runtime/scheduler/journal-index-state.d.ts +1 -1
- package/dist/src/sessions/assistant-initiative-message.d.ts +3 -0
- package/dist/src/sessions/assistant-initiative-message.js +12 -0
- package/dist/src/sessions/assistant-initiative.d.ts +2 -2
- package/dist/src/sessions/assistant-initiative.js +1 -7
- package/dist/src/sessions/durable-session-commit.d.ts +2 -1
- package/dist/src/sessions/durable-session-commit.js +6 -1
- package/dist/src/sessions/metadata/projection.d.ts +15 -0
- package/dist/src/sessions/metadata/projection.js +55 -0
- package/dist/src/sessions/metadata/publication.d.ts +12 -0
- package/dist/src/sessions/metadata/publication.js +78 -0
- package/dist/src/sessions/metadata/source-receipt.d.ts +5 -0
- package/dist/src/sessions/metadata/source-receipt.js +42 -0
- package/dist/src/sessions/metadata/store.d.ts +7 -0
- package/dist/src/sessions/metadata/store.js +119 -0
- package/dist/src/sessions/record/projection.d.ts +3 -1
- package/dist/src/sessions/record/projection.js +26 -18
- package/dist/src/sessions/request-lifecycle/service.js +3 -3
- package/dist/src/sessions/session-service.d.ts +2 -4
- package/dist/src/sessions/session-service.js +4 -16
- package/dist/src/sessions/session-store.d.ts +2 -1
- package/dist/src/sessions/session-store.js +9 -3
- package/dist/src/sessions/snapshot.d.ts +17 -0
- package/dist/src/sessions/snapshot.js +105 -0
- package/dist/src/sessions/types.d.ts +2 -0
- package/dist/src/shared/tool-selection.d.ts +2 -0
- package/dist/src/shared/tool-selection.js +7 -0
- package/dist/src/web-ui/app/ARCHITECTURE.md +14 -0
- package/dist/src/web-ui/app/app.js +6 -3
- package/dist/src/web-ui/app/components/config-workspace/config-model.js +2 -0
- package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +130 -0
- package/dist/src/web-ui/app/components/config-workspace/model-plugin-selection.js +180 -0
- package/dist/src/web-ui/app/components/config-workspace/model-plugin-view-state.js +114 -0
- package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +3 -0
- package/dist/src/web-ui/app/components/config-workspace/model-summary.js +39 -0
- package/dist/src/web-ui/app/components/config-workspace/summary-rendering.js +30 -0
- package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +37 -0
- package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +2 -0
- package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +9 -1
- package/dist/src/web-ui/app/components/config-workspace/workspace-view.js +23 -67
- package/dist/src/web-ui/app/components/config-workspace.js +11 -2
- package/dist/src/web-ui/app/components/conversation-view.js +36 -5
- package/dist/src/web-ui/app/components/dashboard/recent-conversations.js +2 -1
- package/dist/src/web-ui/app/components/dashboard/workspace.js +2 -1
- package/dist/src/web-ui/app/components/operations-summary.js +105 -0
- package/dist/src/web-ui/app/components/passive-learning/home.js +1 -9
- package/dist/src/web-ui/app/components/plugins/configuration-draft.js +34 -0
- package/dist/src/web-ui/app/components/plugins/configuration-editor.js +147 -0
- package/dist/src/web-ui/app/components/plugins/configuration-fields.js +103 -0
- package/dist/src/web-ui/app/components/plugins/configuration-retained-secrets.js +20 -0
- package/dist/src/web-ui/app/components/plugins/configuration-settings.js +108 -0
- package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +37 -0
- package/dist/src/web-ui/app/components/plugins/installation.js +212 -0
- package/dist/src/web-ui/app/components/plugins/manager.js +160 -6
- package/dist/src/web-ui/app/components/plugins/removal.js +130 -0
- package/dist/src/web-ui/app/components/plugins/rendering.js +14 -2
- package/dist/src/web-ui/app/components/plugins/summary.js +54 -0
- package/dist/src/web-ui/app/components/plugins/tabs.js +31 -0
- package/dist/src/web-ui/app/components/plugins/view-state.js +3 -1
- package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +5 -2
- package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +9 -1
- package/dist/src/web-ui/app/components/runtime-setup/context-window-feedback.js +71 -0
- package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +2 -0
- package/dist/src/web-ui/app/components/runtime-setup-guide.js +15 -3
- package/dist/src/web-ui/app/components/spark-chat/empty-state.js +1 -0
- package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -0
- package/dist/src/web-ui/app/components/system-host/connection-card.js +35 -0
- package/dist/src/web-ui/app/components/system-host/macos-setup.js +1 -1
- package/dist/src/web-ui/app/components/system-host/manager.js +45 -12
- package/dist/src/web-ui/app/components/system-host/rendering.js +111 -106
- package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +293 -0
- package/dist/src/web-ui/app/components/workspace-shell.js +6 -0
- package/dist/src/web-ui/app/computer-access-feature.js +22 -5
- package/dist/src/web-ui/app/configuration-feature.js +35 -2
- package/dist/src/web-ui/app/controllers/app-event-bindings.js +4 -1
- package/dist/src/web-ui/app/controllers/conversation-read-state-controller.d.ts +1 -0
- package/dist/src/web-ui/app/controllers/conversation-read-state-controller.js +7 -3
- package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +88 -0
- package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +9 -3
- package/dist/src/web-ui/app/controllers/conversation-session-controller.js +52 -144
- package/dist/src/web-ui/app/controllers/history-pagination.js +111 -0
- package/dist/src/web-ui/app/controllers/operations-controller.d.ts +12 -0
- package/dist/src/web-ui/app/controllers/operations-controller.js +28 -21
- package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.d.ts +1 -0
- package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.js +11 -0
- package/dist/src/web-ui/app/controllers/session-controller.js +10 -2
- package/dist/src/web-ui/app/controllers/session-list-pagination.js +71 -0
- package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +6 -4
- package/dist/src/web-ui/app/controllers/spark-chat-reading.js +1 -0
- package/dist/src/web-ui/app/controllers/spark-chat-sync.js +24 -5
- package/dist/src/web-ui/app/controllers/workspace-route-controller.js +21 -19
- package/dist/src/web-ui/app/dashboard-feature.js +2 -2
- package/dist/src/web-ui/app/index.html +6 -2
- package/dist/src/web-ui/app/lib/history-page-messages.js +49 -0
- package/dist/src/web-ui/app/lib/request-lifecycle-view.js +8 -0
- package/dist/src/web-ui/app/lib/workspace-route.d.ts +3 -0
- package/dist/src/web-ui/app/lib/workspace-route.js +4 -0
- package/dist/src/web-ui/app/passive-learning-feature.js +0 -1
- package/dist/src/web-ui/app/runtime-onboarding-feature.js +3 -0
- package/dist/src/web-ui/app/schedules-feature.js +1 -1
- package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +20 -0
- package/dist/src/web-ui/app/services/runtime-web-client/plugin-configuration.js +19 -0
- package/dist/src/web-ui/app/services/runtime-web-client/spark-chat.js +4 -4
- package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +2 -0
- package/dist/src/web-ui/app/services/runtime-web-client.d.ts +6 -1
- package/dist/src/web-ui/app/services/runtime-web-client.js +12 -3
- package/dist/src/web-ui/app/spark-chat-feature.js +76 -19
- package/dist/src/web-ui/app/styles/11-product-links.css +30 -0
- package/dist/src/web-ui/app/styles/41-plugin-configuration.css +79 -0
- package/dist/src/web-ui/app/styles/41-plugin-discovery.css +132 -0
- package/dist/src/web-ui/app/styles/41-plugin-management.css +6 -0
- package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +173 -0
- package/dist/src/web-ui/app/styles/46-system-host.css +61 -107
- package/dist/src/web-ui/app/styles/47-config-controls.css +13 -1
- package/dist/src/web-ui/app/styles/54-spark-chat.css +33 -1
- package/dist/src/web-ui/app/styles.css +4 -0
- package/dist/src/web-ui/local-runtime/api-router.js +11 -6
- package/dist/src/web-ui/local-runtime/approval-request-attachment.js +14 -5
- package/dist/src/web-ui/local-runtime/configuration-activation-source.d.ts +1 -1
- package/dist/src/web-ui/local-runtime/configuration-activation-source.js +9 -3
- package/dist/src/web-ui/local-runtime/contracts.d.ts +4 -3
- package/dist/src/web-ui/local-runtime/environment-registry.d.ts +5 -1
- package/dist/src/web-ui/local-runtime/environment-registry.js +53 -11
- package/dist/src/web-ui/local-runtime/history-pagination.d.ts +16 -0
- package/dist/src/web-ui/local-runtime/history-pagination.js +20 -0
- package/dist/src/web-ui/local-runtime/plugin-configuration-routes.d.ts +16 -0
- package/dist/src/web-ui/local-runtime/plugin-configuration-routes.js +68 -0
- package/dist/src/web-ui/local-runtime/plugin-installation-routes.d.ts +16 -0
- package/dist/src/web-ui/local-runtime/plugin-installation-routes.js +96 -0
- package/dist/src/web-ui/local-runtime/plugin-management-routes.d.ts +8 -1
- package/dist/src/web-ui/local-runtime/plugin-management-routes.js +17 -0
- package/dist/src/web-ui/local-runtime/plugin-mutation-admission.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/plugin-mutation-admission.js +17 -0
- package/dist/src/web-ui/local-runtime/plugin-removal-routes.d.ts +18 -0
- package/dist/src/web-ui/local-runtime/plugin-removal-routes.js +60 -0
- package/dist/src/web-ui/local-runtime/realtime-controller.js +41 -2
- package/dist/src/web-ui/local-runtime/request-cancellation-route.js +28 -1
- package/dist/src/web-ui/local-runtime/request-control-observation.d.ts +19 -0
- package/dist/src/web-ui/local-runtime/request-control-observation.js +80 -0
- package/dist/src/web-ui/local-runtime/request-execution.js +69 -37
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +20 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +44 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +2 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-validation.js +9 -2
- package/dist/src/web-ui/local-runtime/session-routes.d.ts +1 -0
- package/dist/src/web-ui/local-runtime/session-routes.js +16 -4
- package/dist/src/web-ui/local-runtime/spark-chat-routes.js +4 -3
- package/dist/src/web-ui/plugin-capability-selection.js +4 -1
- package/dist/src/web-ui/plugin-configuration-input.d.ts +12 -0
- package/dist/src/web-ui/plugin-configuration-input.js +68 -0
- package/dist/src/web-ui/plugin-configuration-retained-secrets.d.ts +9 -0
- package/dist/src/web-ui/plugin-configuration-retained-secrets.js +48 -0
- package/dist/src/web-ui/plugin-configuration-service.d.ts +52 -0
- package/dist/src/web-ui/plugin-configuration-service.js +66 -0
- package/dist/src/web-ui/plugin-configuration-view.d.ts +25 -0
- package/dist/src/web-ui/plugin-configuration-view.js +45 -0
- package/dist/src/web-ui/plugin-disabled-selection.d.ts +7 -0
- package/dist/src/web-ui/plugin-disabled-selection.js +17 -0
- package/dist/src/web-ui/plugin-management-catalog.d.ts +3 -1
- package/dist/src/web-ui/plugin-management-catalog.js +11 -1
- package/dist/src/web-ui/plugin-management-selection.js +22 -9
- package/dist/src/web-ui/plugin-management-service.d.ts +5 -1
- package/dist/src/web-ui/plugin-management-service.js +11 -7
- package/dist/src/web-ui/plugin-removal-error.d.ts +7 -0
- package/dist/src/web-ui/plugin-removal-error.js +16 -0
- package/dist/src/web-ui/plugin-removal-service.d.ts +30 -0
- package/dist/src/web-ui/plugin-removal-service.js +109 -0
- package/dist/src/web-ui/runtime-setup-gateway.d.ts +6 -2
- package/dist/src/web-ui/runtime-setup-gateway.js +30 -10
- package/dist/src/web-ui/server.js +6 -2
- package/dist/src/web-ui/session-read-state/overview.d.ts +42 -0
- package/dist/src/web-ui/session-read-state/overview.js +16 -0
- package/dist/src/web-ui/session-read-state/pagination.d.ts +15 -0
- package/dist/src/web-ui/session-read-state/pagination.js +42 -0
- package/dist/src/web-ui/session-read-state/projection.d.ts +4 -3
- package/dist/src/web-ui/session-read-state/service.d.ts +213 -20
- package/dist/src/web-ui/session-read-state/service.js +25 -23
- package/dist/src/web-ui/session-read-state/visible-messages.d.ts +3 -3
- package/dist/src/web-ui/system-host-setup/companion-linux.js +1 -1
- package/dist/src/web-ui/system-host-setup/installer-contract.d.ts +1 -1
- package/dist/src/web-ui/system-host-setup/installer-contract.js +2 -2
- package/dist/src/web-ui/system-host-setup/installers.js +0 -7
- package/dist/src/web-ui/system-host-setup/local-connection.d.ts +4 -1
- package/dist/src/web-ui/system-host-setup/local-connection.js +10 -17
- package/dist/src/web-ui/system-host-setup/routes.d.ts +2 -0
- package/dist/src/web-ui/system-host-setup/routes.js +32 -9
- package/dist/src/web-ui/system-host-setup/setup-mutation.d.ts +9 -0
- package/dist/src/web-ui/system-host-setup/setup-mutation.js +27 -0
- package/dist/src/web-ui/system-host-setup/windows-store-route.d.ts +13 -0
- package/dist/src/web-ui/system-host-setup/windows-store-route.js +68 -0
- package/docs/configuration.md +46 -0
- package/docs/installation.md +45 -24
- package/docs/plugins.md +165 -2
- package/docs/projects-and-full-plus.md +2 -6
- package/docs/runtime-library.md +0 -1
- package/docs/windows-companion-store.md +127 -0
- package/package.json +3 -3
- package/plugins/document-reader/plugin.json +1 -0
- package/plugins/exec/plugin.json +3 -0
- package/plugins/filesystem/plugin.json +2 -0
- package/plugins/local-search/plugin.json +1 -0
- package/plugins/system/README.md +43 -3
- package/plugins/system/plugin.json +5 -0
- package/plugins/system/source/companion-command-output.ts +82 -0
- package/plugins/system/source/host-dispatch.ts +4 -0
- package/plugins/system/source/index.ts +11 -5
- package/plugins/system/source/local-command-output.ts +61 -0
- package/plugins/system/source/request-system-modules.ts +2 -0
- package/plugins/system/src/index.cjs +474 -39
- package/plugins/web/README.md +2 -2
- package/plugins/web/plugin.json +4 -0
- package/runtime.config.schema.json +25 -1
- package/src/runtime/README.md +12 -2
- package/dist/src/web-ui/system-host-setup/companion-windows.d.ts +0 -2
- package/dist/src/web-ui/system-host-setup/companion-windows.js +0 -108
- package/docs/publishing.md +0 -167
|
@@ -2,23 +2,21 @@ import { installLocalMacCompanion, LocalCompanionSetupError } from "../../comput
|
|
|
2
2
|
import { acceptConfigMutationRequest } from "../local-runtime/config-mutation-request.js";
|
|
3
3
|
import { readBody, sendJson } from "../local-runtime/http.js";
|
|
4
4
|
import { canSetUpLocalMac, localMacSetupRuntimeUrl } from "./local-setup-availability.js";
|
|
5
|
+
import { HostSetupMutation } from "./setup-mutation.js";
|
|
5
6
|
export const LOCAL_HOST_SETUP_PATH = "/web-api/runtime/system-host/connect-local";
|
|
6
7
|
function isEmptyLocalSetupRequest(body) {
|
|
7
8
|
return JSON.stringify(body) === "{}";
|
|
8
9
|
}
|
|
9
10
|
export class LocalHostConnection {
|
|
10
11
|
dependencies;
|
|
11
|
-
|
|
12
|
+
mutation;
|
|
12
13
|
constructor(dependencies) {
|
|
13
14
|
this.dependencies = dependencies;
|
|
15
|
+
this.mutation = dependencies.mutation ?? new HostSetupMutation();
|
|
14
16
|
}
|
|
15
|
-
get busy() { return this.
|
|
17
|
+
get busy() { return this.mutation.busy; }
|
|
16
18
|
rejectConcurrentMutation(response) {
|
|
17
|
-
|
|
18
|
-
return false;
|
|
19
|
-
sendJson(response, 409, { ok: false, error: "host_setup_in_progress",
|
|
20
|
-
message: "Computer access is being connected. Wait for setup to finish." });
|
|
21
|
-
return true;
|
|
19
|
+
return this.mutation.rejectConcurrentMutation(response);
|
|
22
20
|
}
|
|
23
21
|
async handle(request, response) {
|
|
24
22
|
if (request.method !== "POST") {
|
|
@@ -37,18 +35,17 @@ export class LocalHostConnection {
|
|
|
37
35
|
sendJson(response, 400, { ok: false, error: "unexpected_host_configuration_fields" });
|
|
38
36
|
return;
|
|
39
37
|
}
|
|
38
|
+
await this.mutation.run(response, () => this.completeConnection(request, response));
|
|
39
|
+
}
|
|
40
|
+
async completeConnection(request, response) {
|
|
40
41
|
const readiness = await this.dependencies.readiness();
|
|
41
42
|
if (!canSetUpLocalMac(request, readiness)) {
|
|
42
43
|
sendJson(response, 409, { ok: false, error: "host_local_setup_unavailable",
|
|
43
44
|
message: "Direct setup requires ABot running natively on this Mac through its local address. Use a pairing code on the Mac for Docker or a forwarded Runtime." });
|
|
44
45
|
return;
|
|
45
46
|
}
|
|
46
|
-
if (this.rejectConcurrentMutation(response))
|
|
47
|
-
return;
|
|
48
|
-
const pending = this.connect(localMacSetupRuntimeUrl(request));
|
|
49
|
-
this.pending = pending;
|
|
50
47
|
try {
|
|
51
|
-
await
|
|
48
|
+
await this.connect(localMacSetupRuntimeUrl(request));
|
|
52
49
|
sendJson(response, 200, { ok: true });
|
|
53
50
|
}
|
|
54
51
|
catch (error) {
|
|
@@ -56,10 +53,6 @@ export class LocalHostConnection {
|
|
|
56
53
|
throw error;
|
|
57
54
|
sendJson(response, 503, { ok: false, error: error.code, message: error.message });
|
|
58
55
|
}
|
|
59
|
-
finally {
|
|
60
|
-
if (this.pending === pending)
|
|
61
|
-
this.pending = undefined;
|
|
62
|
-
}
|
|
63
56
|
}
|
|
64
57
|
async connect(url) {
|
|
65
58
|
const bundle = await this.dependencies.bundle();
|
|
@@ -73,5 +66,5 @@ export class LocalHostConnection {
|
|
|
73
66
|
...(host ? { upgradeHostId: host.hostId } : {}),
|
|
74
67
|
});
|
|
75
68
|
}
|
|
76
|
-
async close() { await this.
|
|
69
|
+
async close() { await this.mutation.close(); }
|
|
77
70
|
}
|
|
@@ -12,12 +12,14 @@ export type HostSetupRouteDependencies = {
|
|
|
12
12
|
/** GUI writes use same-origin JSON; native code downloads use the expiring setup grant. */
|
|
13
13
|
export declare class HostSetupRoutes {
|
|
14
14
|
private readonly dependencies;
|
|
15
|
+
private readonly mutation;
|
|
15
16
|
private readonly local;
|
|
16
17
|
constructor(dependencies: HostSetupRouteDependencies);
|
|
17
18
|
rejectConcurrentMutation(response: ServerResponse): boolean;
|
|
18
19
|
close(): Promise<void>;
|
|
19
20
|
private bundle;
|
|
20
21
|
handle(request: IncomingMessage, response: ServerResponse, pathname: string): Promise<void>;
|
|
22
|
+
private issueSetupInstaller;
|
|
21
23
|
private downloadBundle;
|
|
22
24
|
private hasCurrentSetupGrant;
|
|
23
25
|
}
|
|
@@ -5,12 +5,15 @@ import { readBody, sendJson } from "../local-runtime/http.js";
|
|
|
5
5
|
import { hostBearerCredential } from "./native-authorization.js";
|
|
6
6
|
import { renderCompanionInstaller, } from "./installers.js";
|
|
7
7
|
import { InstallerInputError } from "./installer-contract.js";
|
|
8
|
+
import { WINDOWS_COMPANION_STORE_URL } from "../../computer-access/companion/windows-store/identity.js";
|
|
8
9
|
import { readInstallerCompanionBundle } from "./companion-bundle.js";
|
|
9
10
|
import { LocalHostConnection, LOCAL_HOST_SETUP_PATH } from "./local-connection.js";
|
|
11
|
+
import { handleWindowsStoreConnection, WINDOWS_STORE_CONNECTION_PATH } from "./windows-store-route.js";
|
|
12
|
+
import { HostSetupMutation } from "./setup-mutation.js";
|
|
10
13
|
const setupPath = "/web-api/runtime/system-host/setup";
|
|
11
14
|
const bundlePath = "/web-api/runtime/system-host/bundle";
|
|
12
15
|
export function isHostSetupRoute(pathname) {
|
|
13
|
-
return [setupPath, bundlePath, LOCAL_HOST_SETUP_PATH].includes(pathname);
|
|
16
|
+
return [setupPath, bundlePath, LOCAL_HOST_SETUP_PATH, WINDOWS_STORE_CONNECTION_PATH].includes(pathname);
|
|
14
17
|
}
|
|
15
18
|
export function sendHostSetupInputError(response, error) {
|
|
16
19
|
if (!(error instanceof InstallerInputError))
|
|
@@ -37,6 +40,9 @@ function isSetupPlatformRequest(value) {
|
|
|
37
40
|
return true;
|
|
38
41
|
return platform === "windows" || platform === "macos";
|
|
39
42
|
}
|
|
43
|
+
function canDownloadCompanionInstaller(platform) {
|
|
44
|
+
return platform === "macos" || platform === "linux";
|
|
45
|
+
}
|
|
40
46
|
function requestRuntimeOrigin(request) {
|
|
41
47
|
const encrypted = "encrypted" in request.socket && request.socket.encrypted;
|
|
42
48
|
return new URL(`${encrypted ? "https" : "http"}://${request.headers.host}`)
|
|
@@ -45,21 +51,29 @@ function requestRuntimeOrigin(request) {
|
|
|
45
51
|
/** GUI writes use same-origin JSON; native code downloads use the expiring setup grant. */
|
|
46
52
|
export class HostSetupRoutes {
|
|
47
53
|
dependencies;
|
|
54
|
+
mutation = new HostSetupMutation();
|
|
48
55
|
local;
|
|
49
56
|
constructor(dependencies) {
|
|
50
57
|
this.dependencies = dependencies;
|
|
51
|
-
this.local = new LocalHostConnection({ ...dependencies, bundle: () => this.bundle() });
|
|
58
|
+
this.local = new LocalHostConnection({ ...dependencies, mutation: this.mutation, bundle: () => this.bundle() });
|
|
52
59
|
}
|
|
53
60
|
rejectConcurrentMutation(response) {
|
|
54
|
-
return this.
|
|
61
|
+
return this.mutation.rejectConcurrentMutation(response);
|
|
55
62
|
}
|
|
56
|
-
async close() { await this.
|
|
63
|
+
async close() { await this.mutation.close(); }
|
|
57
64
|
async bundle() {
|
|
58
65
|
if (this.dependencies.bundleFile)
|
|
59
66
|
return readFile(this.dependencies.bundleFile);
|
|
60
67
|
return readInstallerCompanionBundle();
|
|
61
68
|
}
|
|
62
69
|
async handle(request, response, pathname) {
|
|
70
|
+
if (pathname === WINDOWS_STORE_CONNECTION_PATH) {
|
|
71
|
+
await handleWindowsStoreConnection(request, response, {
|
|
72
|
+
...this.dependencies,
|
|
73
|
+
mutation: this.mutation,
|
|
74
|
+
});
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
63
77
|
if (pathname === LOCAL_HOST_SETUP_PATH) {
|
|
64
78
|
await this.local.handle(request, response);
|
|
65
79
|
return;
|
|
@@ -89,10 +103,21 @@ export class HostSetupRoutes {
|
|
|
89
103
|
});
|
|
90
104
|
return;
|
|
91
105
|
}
|
|
92
|
-
|
|
106
|
+
const platform = input.platform;
|
|
107
|
+
if (!canDownloadCompanionInstaller(platform)) {
|
|
108
|
+
sendJson(response, 410, {
|
|
109
|
+
ok: false,
|
|
110
|
+
error: "windows_store_required",
|
|
111
|
+
message: "Install or update ABot AI Companion through Microsoft Store.",
|
|
112
|
+
storeUrl: WINDOWS_COMPANION_STORE_URL,
|
|
113
|
+
});
|
|
93
114
|
return;
|
|
115
|
+
}
|
|
116
|
+
await this.mutation.run(response, () => this.issueSetupInstaller(request, response, platform));
|
|
117
|
+
}
|
|
118
|
+
async issueSetupInstaller(request, response, platform) {
|
|
94
119
|
const readiness = await this.dependencies.readiness();
|
|
95
|
-
if (!readiness.platforms.includes(
|
|
120
|
+
if (!readiness.platforms.includes(platform)) {
|
|
96
121
|
sendJson(response, 409, {
|
|
97
122
|
ok: false,
|
|
98
123
|
error: "host_setup_not_required",
|
|
@@ -103,14 +128,12 @@ export class HostSetupRoutes {
|
|
|
103
128
|
// Read and hash the exact running build before creating a setup grant.
|
|
104
129
|
const bundle = await this.bundle();
|
|
105
130
|
await this.dependencies.prepareCompanion();
|
|
106
|
-
if (this.rejectConcurrentMutation(response))
|
|
107
|
-
return;
|
|
108
131
|
const upgrading = Boolean(this.dependencies.store.host());
|
|
109
132
|
const pairing = upgrading
|
|
110
133
|
? this.dependencies.store.beginBundleUpgrade()
|
|
111
134
|
: this.dependencies.store.begin(15 * 60_000);
|
|
112
135
|
const installer = await renderCompanionInstaller({
|
|
113
|
-
platform
|
|
136
|
+
platform,
|
|
114
137
|
url: requestRuntimeOrigin(request),
|
|
115
138
|
code: pairing.code,
|
|
116
139
|
expiresAt: pairing.expiresAt,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ServerResponse } from "node:http";
|
|
2
|
+
/** One installation owns one in-flight computer setup across connection routes. */
|
|
3
|
+
export declare class HostSetupMutation {
|
|
4
|
+
private pending?;
|
|
5
|
+
get busy(): boolean;
|
|
6
|
+
rejectConcurrentMutation(response: ServerResponse): boolean;
|
|
7
|
+
run(response: ServerResponse, operation: () => Promise<void>): Promise<void>;
|
|
8
|
+
close(): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { sendJson } from "../local-runtime/http.js";
|
|
2
|
+
/** One installation owns one in-flight computer setup across connection routes. */
|
|
3
|
+
export class HostSetupMutation {
|
|
4
|
+
pending;
|
|
5
|
+
get busy() { return this.pending !== undefined; }
|
|
6
|
+
rejectConcurrentMutation(response) {
|
|
7
|
+
if (!this.busy)
|
|
8
|
+
return false;
|
|
9
|
+
sendJson(response, 409, { ok: false, error: "host_setup_in_progress",
|
|
10
|
+
message: "Computer access is being connected. Wait for setup to finish." });
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
async run(response, operation) {
|
|
14
|
+
if (this.rejectConcurrentMutation(response))
|
|
15
|
+
return;
|
|
16
|
+
const pending = Promise.resolve().then(operation);
|
|
17
|
+
this.pending = pending;
|
|
18
|
+
try {
|
|
19
|
+
await pending;
|
|
20
|
+
}
|
|
21
|
+
finally {
|
|
22
|
+
if (this.pending === pending)
|
|
23
|
+
this.pending = undefined;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async close() { await this.pending?.catch(() => undefined); }
|
|
27
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
import type { HostPairingStore } from "../../computer-access/companion/pairing-store.js";
|
|
3
|
+
import type { HostReadiness } from "./readiness.js";
|
|
4
|
+
import type { HostSetupMutation } from "./setup-mutation.js";
|
|
5
|
+
export declare const WINDOWS_STORE_CONNECTION_PATH = "/web-api/runtime/system-host/store-connect";
|
|
6
|
+
type StoreConnectionDependencies = Readonly<{
|
|
7
|
+
store: HostPairingStore;
|
|
8
|
+
readiness(): Promise<HostReadiness>;
|
|
9
|
+
prepareCompanion(): Promise<void>;
|
|
10
|
+
mutation: HostSetupMutation;
|
|
11
|
+
}>;
|
|
12
|
+
export declare function handleWindowsStoreConnection(request: IncomingMessage, response: ServerResponse, dependencies: StoreConnectionDependencies): Promise<void>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { COMPANION_RELEASE_VERSION } from "../../computer-access/companion/release-version.js";
|
|
2
|
+
import { createStoreConnectionLink, normalizeStoreConnectionOrigin } from "../../computer-access/companion/windows-store/connection-link.js";
|
|
3
|
+
import { WINDOWS_COMPANION_STORE_URL } from "../../computer-access/companion/windows-store/identity.js";
|
|
4
|
+
import { acceptConfigMutationRequest } from "../local-runtime/config-mutation-request.js";
|
|
5
|
+
import { readBody, sendJson } from "../local-runtime/http.js";
|
|
6
|
+
export const WINDOWS_STORE_CONNECTION_PATH = "/web-api/runtime/system-host/store-connect";
|
|
7
|
+
function canStartWindowsStoreConnection(readiness) {
|
|
8
|
+
if (!readiness.platforms.includes("windows"))
|
|
9
|
+
return false;
|
|
10
|
+
if (readiness.restartRequired)
|
|
11
|
+
return false;
|
|
12
|
+
if (readiness.route === "wsl_interop")
|
|
13
|
+
return false;
|
|
14
|
+
return readiness.route !== "native";
|
|
15
|
+
}
|
|
16
|
+
function hasEmptyConnectionBody(value) {
|
|
17
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
18
|
+
return false;
|
|
19
|
+
return Object.keys(value).length === 0;
|
|
20
|
+
}
|
|
21
|
+
export async function handleWindowsStoreConnection(request, response, dependencies) {
|
|
22
|
+
response.setHeader("Cache-Control", "no-store");
|
|
23
|
+
if (request.method !== "POST") {
|
|
24
|
+
sendJson(response, 405, { ok: false, error: "method_not_allowed" });
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!acceptConfigMutationRequest(request, response))
|
|
28
|
+
return;
|
|
29
|
+
let body;
|
|
30
|
+
try {
|
|
31
|
+
body = JSON.parse((await readBody(request, { maxBytes: 1_024 })).toString());
|
|
32
|
+
}
|
|
33
|
+
catch { /* rejected below */ }
|
|
34
|
+
if (!hasEmptyConnectionBody(body)) {
|
|
35
|
+
sendJson(response, 400, { ok: false, error: "invalid_store_connection_request" });
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
await dependencies.mutation.run(response, () => issueWindowsStoreConnection(request, response, dependencies));
|
|
39
|
+
}
|
|
40
|
+
async function issueWindowsStoreConnection(request, response, dependencies) {
|
|
41
|
+
if (!canStartWindowsStoreConnection(await dependencies.readiness())) {
|
|
42
|
+
sendJson(response, 409, { ok: false, error: "host_setup_not_required", message: "Refresh the computer connection status." });
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const encrypted = "encrypted" in request.socket && request.socket.encrypted;
|
|
46
|
+
let origin;
|
|
47
|
+
try {
|
|
48
|
+
origin = normalizeStoreConnectionOrigin(`${encrypted ? "https" : "http"}://${request.headers.host}`);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
sendJson(response, 400, { ok: false, error: "host_store_connection_rejected", message: "Store connection requires a local HTTP Runtime origin on this computer." });
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
await dependencies.prepareCompanion();
|
|
55
|
+
const previous = dependencies.store.host();
|
|
56
|
+
const pairing = previous ? dependencies.store.beginBundleUpgrade() : dependencies.store.begin(15 * 60_000);
|
|
57
|
+
try {
|
|
58
|
+
const launchUrl = createStoreConnectionLink({
|
|
59
|
+
version: 1, url: origin, code: pairing.code, expiresAt: pairing.expiresAt,
|
|
60
|
+
companionRelease: COMPANION_RELEASE_VERSION,
|
|
61
|
+
...(previous ? { upgradeHostId: previous.hostId } : {}),
|
|
62
|
+
});
|
|
63
|
+
sendJson(response, 200, { ok: true, launchUrl, expiresAt: pairing.expiresAt, storeUrl: WINDOWS_COMPANION_STORE_URL });
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
sendJson(response, 400, { ok: false, error: "host_store_connection_rejected", message: "Store connection requires a local HTTP Runtime origin on this computer." });
|
|
67
|
+
}
|
|
68
|
+
}
|
package/docs/configuration.md
CHANGED
|
@@ -17,6 +17,21 @@ local paths, and profile choices there. The provider, concrete model id, and
|
|
|
17
17
|
default profile are required configuration; the runtime does not supply a
|
|
18
18
|
built-in model choice.
|
|
19
19
|
|
|
20
|
+
## Web UI history pages
|
|
21
|
+
|
|
22
|
+
`webUi.pageSize` controls the number of sessions or messages loaded per page in
|
|
23
|
+
ordinary conversations and SPARK. It defaults to `20` and accepts a positive integer:
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{ "webUi": { "pageSize": 20 } }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The Web UI loads more sessions while scrolling down and older messages while
|
|
30
|
+
scrolling up. Message activity travels with the corresponding message page.
|
|
31
|
+
Read state and active requests remain independent of the displayed page.
|
|
32
|
+
Pagination does not truncate model history or change the session file format;
|
|
33
|
+
opening a conversation still reads its canonical JSON file before projecting a page.
|
|
34
|
+
|
|
20
35
|
## Secrets
|
|
21
36
|
|
|
22
37
|
Do not put secret values in JSON config. Store them in `.env`, service
|
|
@@ -427,6 +442,37 @@ secrets declarations, and skill bindings remain in each plugin package.
|
|
|
427
442
|
Runtime orchestration does not hardcode concrete tool names or use the catalog
|
|
428
443
|
to classify the user request.
|
|
429
444
|
|
|
445
|
+
|
|
446
|
+
A model profile can further restrict that catalog with `plugins.deny`, including
|
|
447
|
+
inside its linked `models/<profile>.config.json` file:
|
|
448
|
+
|
|
449
|
+
```json
|
|
450
|
+
{
|
|
451
|
+
"plugins": {
|
|
452
|
+
"deny": ["filesystem.read_file", "memory"]
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
These selectors use the same matching rules as the global deny list. They can
|
|
458
|
+
only remove globally available capabilities. Omission or an empty list adds no
|
|
459
|
+
model restriction. The effective primary profile selected for the request owns
|
|
460
|
+
the restriction for the entire request, including delegated roles, per-step
|
|
461
|
+
model overrides and approval resumes. Both Supervisor/Worker and Execution
|
|
462
|
+
Agent use the same filtered catalog and execution guard. This metadata stays in
|
|
463
|
+
the Runtime and is not sent to the model provider. Plugin loading and
|
|
464
|
+
`prepareRequest` hooks remain part of the existing shared plugin lifecycle.
|
|
465
|
+
|
|
466
|
+
In the Web UI **Models** workspace, expand **Plugin access** to allow or block
|
|
467
|
+
plugins for the selected model. Expand a plugin to control its individual tools.
|
|
468
|
+
The switches edit exact plugin IDs and qualified `plugin.tool` deny selectors;
|
|
469
|
+
turning a plugin off and on preserves its individual tool restrictions. Counts
|
|
470
|
+
show the tools available after global and model restrictions. Save the model
|
|
471
|
+
file, then apply configuration changes. Global restrictions still apply and
|
|
472
|
+
cannot be lifted here. Shared bare-tool rules, wildcards, missing-plugin IDs and
|
|
473
|
+
selectors that affect another plugin remain unchanged; review them under
|
|
474
|
+
**Saved rules** and edit them in the displayed model configuration file.
|
|
475
|
+
|
|
430
476
|
For public or multi-model installs, keep each model's detailed calibration in a
|
|
431
477
|
separate model profile file instead of expanding the main runtime config:
|
|
432
478
|
|
package/docs/installation.md
CHANGED
|
@@ -145,6 +145,42 @@ Computer access connection shared by SYSTEM tools, ABot Spark and compatible
|
|
|
145
145
|
plugins. Direct native/WSL command access can already work; the shared companion
|
|
146
146
|
adds desktop access and background collection without a second ABot Spark setup.
|
|
147
147
|
|
|
148
|
+
#### Windows: Microsoft Store connection
|
|
149
|
+
|
|
150
|
+
**ABot AI Companion** is available from
|
|
151
|
+
[Microsoft Store](https://apps.microsoft.com/detail/9PK2FDQQLQS9).
|
|
152
|
+
The product ID is `9PK2FDQQLQS9`.
|
|
153
|
+
|
|
154
|
+
Start with the computer connection card on **Home**, or the optional **Computer**
|
|
155
|
+
setup step:
|
|
156
|
+
|
|
157
|
+
1. Choose **Install from Microsoft Store** to open **ABot AI Companion**.
|
|
158
|
+
2. Install it once on the Windows computer you want to connect.
|
|
159
|
+
3. Return to ABot and choose **I already have it**.
|
|
160
|
+
4. Choose **Open Companion**. The browser may ask permission to open it.
|
|
161
|
+
5. Check the Runtime address shown by Companion and approve the connection.
|
|
162
|
+
6. Companion shows connection progress; this can take a few seconds. Wait for
|
|
163
|
+
**Your computer is ready** in the Web UI.
|
|
164
|
+
|
|
165
|
+
If Companion is already installed, start at step 3. The short-lived connection
|
|
166
|
+
link is a private invitation; do not share it. Request a new link if it expires.
|
|
167
|
+
The Web UI confirms the live connection rather than guessing whether the app is
|
|
168
|
+
installed.
|
|
169
|
+
|
|
170
|
+
If the computer is already paired but offline, choose **Open Companion**, then
|
|
171
|
+
start the saved connection in the app. If you disconnected inside Companion or
|
|
172
|
+
removed its saved connection, choose **Set up again** in ABot. Confirm the
|
|
173
|
+
reset, then open Companion and approve the new connection. Re-pairing revokes the
|
|
174
|
+
previous computer connection; it does not erase saved insights.
|
|
175
|
+
|
|
176
|
+
Store updates are intended to preserve the saved pairing. Computer actions and
|
|
177
|
+
optional Spark collection retain their existing, separate permission controls.
|
|
178
|
+
Computer content used by ABot may reach your selected model provider. Installation
|
|
179
|
+
alone does not start Spark collection. See [Windows Companion Store delivery](windows-companion-store.md)
|
|
180
|
+
for connection details and update compatibility.
|
|
181
|
+
|
|
182
|
+
#### macOS
|
|
183
|
+
|
|
148
184
|
When ABot runs natively on your Mac, open its local Web UI and choose **Connect
|
|
149
185
|
this Mac**. ABot uses its installed Node runtime and companion bundle, pairs the
|
|
150
186
|
computer and enables startup at sign-in. This path does not download a Finder
|
|
@@ -205,11 +241,15 @@ not change Computer access pairing or send a model request. Application-specific
|
|
|
205
241
|
Automation/Apple Events and protected-file access may still require separate
|
|
206
242
|
consent for the applications or locations used by a later SYSTEM command.
|
|
207
243
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
244
|
+
#### Linux and WSL
|
|
245
|
+
|
|
246
|
+
For Linux, download setup and run it in that computer's graphical login. Setup
|
|
247
|
+
uses an existing Node.js installation, pairs automatically and enables startup
|
|
248
|
+
at sign-in. Wait for **Ready** in the Web UI; downloading alone does not establish
|
|
249
|
+
a connection. This Linux flow is unchanged by the Windows Store integration.
|
|
250
|
+
|
|
251
|
+
Running ABot in WSL and existing WSL interop access are unchanged. To connect the
|
|
252
|
+
Windows desktop to a WSL Runtime, use the Windows Companion flow above; it does
|
|
213
253
|
not require changing interop settings or restarting the distribution.
|
|
214
254
|
|
|
215
255
|
Installation does not enable ABot Spark collection or disabled plugin tools.
|
|
@@ -355,22 +395,3 @@ profile without changing runtime policy or another model's settings.
|
|
|
355
395
|
|
|
356
396
|
The repository ignores `.env`, `local/runtime.config.json`, `.runtime/`, and
|
|
357
397
|
`dist/`. Do not commit local secrets or generated runtime state.
|
|
358
|
-
|
|
359
|
-
## Verify Package Surface
|
|
360
|
-
|
|
361
|
-
Before publishing or opening a release PR:
|
|
362
|
-
|
|
363
|
-
```bash
|
|
364
|
-
npm test -- --run
|
|
365
|
-
npm run build
|
|
366
|
-
npm run smoke:runtime-package
|
|
367
|
-
npm run check:runtime-package
|
|
368
|
-
npm run smoke:packed-runtime-package
|
|
369
|
-
git diff --check
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
`npm run build` regenerates `runtime.config.schema.json`, clears stale `dist`,
|
|
373
|
-
and compiles the published TypeScript declarations.
|
|
374
|
-
|
|
375
|
-
For the full public release checklist, see
|
|
376
|
-
[`docs/publishing.md`](publishing.md).
|
package/docs/plugins.md
CHANGED
|
@@ -16,6 +16,9 @@ the same physical directory, the catalog is discovered only once.
|
|
|
16
16
|
Open **Plugins** to see installed manifests, capability counts,
|
|
17
17
|
and enabled, partially enabled or disabled selections. Switches save the selected
|
|
18
18
|
plugin's configuration while preserving capability-specific allow/deny rules.
|
|
19
|
+
Whole-plugin switches use `plugins.disabledPluginIds`, an exact list of plugin
|
|
20
|
+
IDs independent of capability names and qualified selectors. The list does not
|
|
21
|
+
interpret wildcards; legacy `allow` and `deny` rules keep their existing meaning.
|
|
19
22
|
Choose **Manage tools** on a plugin to manage its declared tools inside the same card.
|
|
20
23
|
The card keeps its size; the tool list scrolls when needed. Use **Back** or Escape
|
|
21
24
|
to return to the plugin overview. For example, disabling filesystem.read_file
|
|
@@ -26,14 +29,164 @@ tools switched off.
|
|
|
26
29
|
Global, parent-plugin and broad tool deny rules remain explicit blockers.
|
|
27
30
|
A child switch does not silently remove those rules or enable sibling tools.
|
|
28
31
|
|
|
32
|
+
Install, configuration saves, enable/disable and Remove require every owning Runtime to be idle.
|
|
33
|
+
While a conversation or Job is running, these actions return a clear message
|
|
34
|
+
without saving the requested change. Open but idle conversations do not block
|
|
35
|
+
changes; browsing and reviewing repositories remain available. If another process
|
|
36
|
+
owns an environment, use the owning Web UI so its activity can be verified.
|
|
37
|
+
|
|
29
38
|
Choose **Apply changes** to activate saved settings. The Web process replaces
|
|
30
39
|
only its own idle environments and preserves session and Job files. If any
|
|
31
40
|
environment is working, or another process owns it, changes remain saved and
|
|
32
41
|
the UI explains why they cannot yet be applied. Saving a switch alone does not
|
|
33
42
|
change tools available to an already running agent.
|
|
34
43
|
|
|
35
|
-
|
|
36
|
-
|
|
44
|
+
## Configure Plugin Values
|
|
45
|
+
|
|
46
|
+
Choose **Configure** on an installed plugin, or use the same form during its
|
|
47
|
+
installation review. Fields come from the existing `settings.defaults` and
|
|
48
|
+
`secrets` declarations. Strings, numbers and booleans use ordinary controls;
|
|
49
|
+
objects, arrays and null defaults use JSON. The host checks declared setting
|
|
50
|
+
names and top-level default types. A null default supplies no type information;
|
|
51
|
+
semantic checks such as URL validity remain the plugin's responsibility.
|
|
52
|
+
The form shows whether each setting uses the plugin default or a local value.
|
|
53
|
+
Saving credentials alone leaves inherited defaults unchanged. Editing a setting
|
|
54
|
+
creates a local override, even when its value equals today's default; **Use plugin
|
|
55
|
+
default** removes that override when saved. Existing saved values stay local until
|
|
56
|
+
explicitly reset, so no upgrade automatically rewrites a user's configuration.
|
|
57
|
+
No manifest schema or SDK changes are required. If an upgraded plugin changes a
|
|
58
|
+
setting's default type, an incompatible retained value blocks loading with an
|
|
59
|
+
explicit configuration error. Configure remains available to correct the value;
|
|
60
|
+
the host does not silently replace it with a default.
|
|
61
|
+
|
|
62
|
+
**Save changes** persists values locally; **Apply changes** loads them into new
|
|
63
|
+
idle Runtime owners. Existing owners retain their loaded values, including when
|
|
64
|
+
activation fails and restores the previous configuration. GET returns settings
|
|
65
|
+
and credential-presence flags, never secret values. Passwords remain in their
|
|
66
|
+
mounted controls until submitted, and are cleared after submission.
|
|
67
|
+
|
|
68
|
+
Values are shared across environments of the same consumer root and are stored
|
|
69
|
+
in `<consumer-root>/.runtime/plugin-configuration.json`, outside plugin packages,
|
|
70
|
+
with owner-only file permissions. On POSIX, an existing file with any group or
|
|
71
|
+
other-user permission is rejected before its contents are read. Restore its
|
|
72
|
+
permissions with `chmod 600 .runtime/plugin-configuration.json` from the installation
|
|
73
|
+
root; the host does not change permissions automatically. They are local plaintext
|
|
74
|
+
configuration, not an
|
|
75
|
+
encrypted vault. This file must not be committed, published, or shared with a
|
|
76
|
+
plugin repository. The existing `.runtime/` exclusion also keeps it out of Git
|
|
77
|
+
and packages. Settings override declared defaults; undeclared settings are not
|
|
78
|
+
passed to plugins. A locally configured secret is bound to its declared name
|
|
79
|
+
and environment-variable name and is delivered through `context.secrets.get`.
|
|
80
|
+
Without a local override, the existing process environment remains the source.
|
|
81
|
+
Saving plugin values does not write `.env` or change `process.env`. Browser revision
|
|
82
|
+
tokens use a private process key rather than an unkeyed digest of secret-bearing
|
|
83
|
+
content. Reload an open form after restarting its Web UI process.
|
|
84
|
+
|
|
85
|
+
Keys removed from the current manifest, or whose environment binding changed,
|
|
86
|
+
appear under **Keys no longer used by this plugin** without exposing their values.
|
|
87
|
+
They remain saved until the user selects **Delete saved key** and saves. Ordinary
|
|
88
|
+
settings edits do not delete them. A changed binding under the same key name
|
|
89
|
+
requires explicitly deleting the old saved key before setting or clearing its
|
|
90
|
+
replacement; both choices can be submitted in one save. Configure remains
|
|
91
|
+
available for these keys even when the plugin has no current settings or secrets.
|
|
92
|
+
|
|
93
|
+
For each secret, keep the current value, replace it, or explicitly clear it.
|
|
94
|
+
Clear suppresses an inherited value for this plugin without deleting a shared
|
|
95
|
+
environment variable. Clearing a required secret prevents the plugin from
|
|
96
|
+
loading on the next Apply until the key is configured again. Remove retains
|
|
97
|
+
local settings and secrets; a later installation review shows the retained
|
|
98
|
+
settings and presence flags. Required secrets are checked before installation
|
|
99
|
+
commits, and failed selection saves roll back the local configuration and package.
|
|
100
|
+
|
|
101
|
+
## Install Community Plugins
|
|
102
|
+
|
|
103
|
+
The **Installed** tab manages the existing catalog. **Discover** links to the
|
|
104
|
+
[ABot Marketplace](https://abot-ai.com/marketplace/) and installs public GitHub packages independently of that directory.
|
|
105
|
+
The Marketplace is a directory of community-owned repositories; listing approval
|
|
106
|
+
does not grant a repository permission to run on a user's machine.
|
|
107
|
+
|
|
108
|
+
Paste a repository URL in **Discover**, optionally choosing a branch, tag or
|
|
109
|
+
commit and a folder inside the repository. **Review plugin** resolves the source
|
|
110
|
+
to an exact commit, validates the manifest and its declared files without
|
|
111
|
+
executing plugin code, and displays its tools and configuration form.
|
|
112
|
+
Fill in required secrets before confirming installation.
|
|
113
|
+
**Install and enable** downloads the same commit, checks the reviewed content
|
|
114
|
+
digest, and installs it at `<consumer-root>/plugins/<manifest.name>`. Existing
|
|
115
|
+
plugin IDs and capability IDs are rejected; this flow never replaces a plugin.
|
|
116
|
+
Package publication and selection saving share the configuration lock with Apply;
|
|
117
|
+
a failed save removes the uncommitted package before Apply can discover it.
|
|
118
|
+
The normal configuration controls and global restrictions still apply.
|
|
119
|
+
The review offers **Install and enable** at both ends. After installation, the
|
|
120
|
+
UI returns to **Installed** with a status message. Choose **Apply changes** to
|
|
121
|
+
load the plugin into the Runtime.
|
|
122
|
+
|
|
123
|
+
Publishers must commit a complete package: `plugin.json`, its built CommonJS
|
|
124
|
+
`.cjs` entrypoint, referenced skills and all required assets. Bundle dependencies
|
|
125
|
+
that are not supplied by the public plugin SDK. Installation does not execute
|
|
126
|
+
`npm install`, build commands, lifecycle scripts or repository code. Public HTTPS
|
|
127
|
+
repositories on `github.com` are supported; private repositories, updates and
|
|
128
|
+
Studio packages are outside this first installation flow. Repository ZIPs are
|
|
129
|
+
limited to 25 MiB and 2,000 entries, with at most 16 MiB per extracted file and
|
|
130
|
+
64 MiB total. Symlinks, traversal and non-portable filenames are rejected.
|
|
131
|
+
|
|
132
|
+
### Install In ABot Links
|
|
133
|
+
|
|
134
|
+
Computer Access setup registers the `abot:` URL scheme on Windows, macOS and
|
|
135
|
+
Linux desktops. Existing installations can use **Update** in Computer Access
|
|
136
|
+
to install Companion release 12 and register links while keeping their pairing.
|
|
137
|
+
A website can render an ordinary link using this contract:
|
|
138
|
+
|
|
139
|
+
```js
|
|
140
|
+
const link = new URL("abot://install");
|
|
141
|
+
link.searchParams.set("kind", "plugin");
|
|
142
|
+
link.searchParams.set("repo", "https://github.com/owner/plugin");
|
|
143
|
+
link.searchParams.set("ref", "v1.0.0"); // optional; a commit is recommended
|
|
144
|
+
link.searchParams.set("path", "plugins/example"); // optional repository folder
|
|
145
|
+
installAnchor.href = link.toString();
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Clicking the link opens **Discover** in the Runtime saved in the local Computer
|
|
149
|
+
Access pairing, with the source ready for review. A link cannot choose another
|
|
150
|
+
Runtime address or bypass local installation confirmation. The browser may ask
|
|
151
|
+
to open ABot. Without Computer Access, users can paste the same repository URL.
|
|
152
|
+
Companion disconnect/uninstall removes its owned protocol registration.
|
|
153
|
+
|
|
154
|
+
The local API uses `POST /runtime/plugins/inspect` with
|
|
155
|
+
`{ repository, ref?, path? }`, returning `{ ok, review }`.
|
|
156
|
+
Installation uses `POST /runtime/plugins/install` with
|
|
157
|
+
`{ source: review.source, digest: review.digest }`. Both require same-origin
|
|
158
|
+
JSON requests and completed Runtime setup. These APIs operate on the configured
|
|
159
|
+
consumer root and configuration file; they do not depend on the Marketplace.
|
|
160
|
+
|
|
161
|
+
## Remove Community Plugins
|
|
162
|
+
|
|
163
|
+
**Remove** is available in the ongoing Plugins screen for packages installed by
|
|
164
|
+
this GitHub flow. After confirmation, it saves a disable, applies configuration
|
|
165
|
+
through the existing idle-owner checks, and only then deletes the installed
|
|
166
|
+
folder. Built-in plugins and manually copied folders without an installation
|
|
167
|
+
receipt do not offer Remove. Removal adds only the target's exact ID to
|
|
168
|
+
`plugins.disabledPluginIds`, so names shared with other tools or qualified
|
|
169
|
+
selectors cannot change another plugin's selection.
|
|
170
|
+
|
|
171
|
+
If work starts after the disable was saved but before Apply, the files remain.
|
|
172
|
+
Finish the active work, then choose **Remove** again. A failed Apply or any
|
|
173
|
+
concurrent configuration change also prevents deletion. Removal verifies the
|
|
174
|
+
moved directory before deleting it and retires its cached CommonJS modules so
|
|
175
|
+
a later installation loads the new entrypoint and package-local dependencies.
|
|
176
|
+
Selection rules remain in the configuration so removal cannot widen another
|
|
177
|
+
plugin's allow policy. Installing the same plugin again clears its exact disabled
|
|
178
|
+
ID and preserves other disabled IDs and capability-specific deny rules. Existing
|
|
179
|
+
qualified denies are not inferred to be removal-generated; review such legacy
|
|
180
|
+
rules explicitly in Advanced settings if they still disable the tools.
|
|
181
|
+
|
|
182
|
+
`POST /runtime/plugins/remove` accepts `{ pluginId }`, with the same origin,
|
|
183
|
+
JSON and completed-setup requirements as installation. It returns `removed`,
|
|
184
|
+
`activation`, a status message and the refreshed plugin snapshot. This removes
|
|
185
|
+
the installed plugin folder, including data the plugin kept inside it; files
|
|
186
|
+
stored elsewhere are retained. If Apply succeeds but a later removal check fails,
|
|
187
|
+
the error retains its HTTP status and code and includes `activation` with status
|
|
188
|
+
`ready`. The UI refreshes the active environments; `config_changed` still marks
|
|
189
|
+
the newer saved configuration as pending activation.
|
|
37
190
|
|
|
38
191
|
## Package Shape
|
|
39
192
|
|
|
@@ -143,6 +296,16 @@ input, effect, and approval. Optional capability metadata such as client event
|
|
|
143
296
|
presentation, payload authoring, development roles, and selection grounding
|
|
144
297
|
belongs here as well—not in runtime orchestration.
|
|
145
298
|
|
|
299
|
+
An operation may declare `outputChannels` alongside `summary`, for example
|
|
300
|
+
`{"text":"content","data":"metadata"}`. Both fields are required when declared:
|
|
301
|
+
`content` can carry substantive output (possibly bounded or summarized),
|
|
302
|
+
`metadata` contains only identifiers/status/counts/receipts, and `conditional`
|
|
303
|
+
depends on the operation inputs. Omission means unknown, not metadata. This
|
|
304
|
+
passive declaration describes the saved Studio channels, not every field in a
|
|
305
|
+
chat tool result; it changes no execution or binding behavior. Only selected
|
|
306
|
+
Studio `prepare_draft` operations expose it to models; ordinary tool summaries
|
|
307
|
+
and discovery stay concise. Whole Data bindings do not need field pointers.
|
|
308
|
+
|
|
146
309
|
A plugin declares sensitive operations with `approval: "always"` in its
|
|
147
310
|
manifest, as the bundled EXEC and SYSTEM plugins do. Apply that policy to every
|
|
148
311
|
operation when the whole plugin is sensitive. The generic approval boundary
|