@abot-ai/runtime 1.7.0 → 1.8.1
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 +216 -222
- package/dist/src/capabilities/tool-definition-validator/definition-parser.js +8 -0
- package/dist/src/capabilities/tool-request-resources.d.ts +3 -0
- package/dist/src/capabilities/tool-types.d.ts +4 -0
- package/dist/src/cli/abot.js +2 -0
- package/dist/src/cli/host-companion-bundle.mjs +751 -333
- package/dist/src/computer-access/collection-consent.d.ts +9 -0
- package/dist/src/computer-access/collection-consent.js +47 -0
- package/dist/src/computer-access/command-output-capture.d.ts +17 -6
- package/dist/src/computer-access/command-output-capture.js +134 -68
- package/dist/src/computer-access/command-output-protection.d.ts +17 -0
- package/dist/src/computer-access/command-output-protection.js +59 -0
- package/dist/src/computer-access/companion/command-output.d.ts +1 -0
- package/dist/src/computer-access/companion/command-output.js +23 -6
- package/dist/src/computer-access/companion/install-link-macos.js +2 -1
- package/dist/src/computer-access/companion/native-notifications.js +3 -2
- package/dist/src/computer-access/companion/native-session.js +6 -2
- package/dist/src/computer-access/companion/observation-filter.js +2 -26
- package/dist/src/computer-access/companion/observation-process.d.ts +2 -0
- package/dist/src/computer-access/companion/observation-process.js +51 -25
- package/dist/src/computer-access/companion/observation-redaction.d.ts +2 -7
- package/dist/src/computer-access/companion/observation-redaction.js +2 -111
- package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
- package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
- package/dist/src/computer-access/computer/companion-sessions.js +7 -6
- package/dist/src/computer-access/computer/unix-native-process.js +23 -11
- package/dist/src/computer-access/handlers.d.ts +2 -1
- package/dist/src/computer-access/handlers.js +79 -11
- package/dist/src/computer-access/host-observation.d.ts +3 -3
- package/dist/src/computer-access/native-observation-connection.d.ts +12 -0
- package/dist/src/computer-access/native-observation-connection.js +78 -0
- package/dist/src/computer-access/native-observation-ownership.d.ts +6 -0
- package/dist/src/computer-access/native-observation-ownership.js +55 -0
- package/dist/src/computer-access/native-observation-shutdown.d.ts +7 -0
- package/dist/src/computer-access/native-observation-shutdown.js +58 -0
- package/dist/src/computer-access/observation-source.d.ts +6 -0
- package/dist/src/computer-access/observation-source.js +10 -0
- package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
- package/dist/src/computer-access/security/desktop-result.js +146 -0
- package/dist/src/computer-access/security/observed-error.d.ts +2 -0
- package/dist/src/computer-access/security/observed-error.js +10 -0
- package/dist/src/computer-access/security/secret-text.d.ts +7 -0
- package/dist/src/computer-access/security/secret-text.js +111 -0
- package/dist/src/computer-access/security/system-results.d.ts +2 -0
- package/dist/src/computer-access/security/system-results.js +53 -0
- package/dist/src/computer-access/system-result-protection.d.ts +11 -0
- package/dist/src/computer-access/system-result-protection.js +1 -0
- package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
- package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
- package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
- package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
- package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
- package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
- package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
- package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
- package/dist/src/model-gateway/observability/provider-trace.js +30 -8
- package/dist/src/model-gateway/protocol/message-contract.d.ts +1 -0
- package/dist/src/model-gateway/protocol/message-contract.js +1 -1
- package/dist/src/model-gateway/providers/ollama/adapter.js +8 -2
- package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
- package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
- package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
- package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
- package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
- package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
- package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
- package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
- package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
- package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
- package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
- package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
- package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
- package/dist/src/model-gateway/providers/openai/payload.js +6 -23
- package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
- package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
- package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
- package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
- package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
- package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
- package/dist/src/model-gateway/providers/openai/stream.js +13 -41
- package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
- package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
- package/dist/src/model-gateway/server/chat-handler.js +5 -7
- package/dist/src/model-gateway/server/chat-stream-response.d.ts +7 -0
- package/dist/src/model-gateway/server/chat-stream-response.js +25 -0
- package/dist/src/model-gateway/server.js +5 -1
- package/dist/src/plugin-contract/index.d.ts +1 -0
- package/dist/src/plugin-contract/index.js +1 -0
- package/dist/src/plugin-contract/manifest.d.ts +2 -0
- package/dist/src/plugin-contract/manifest.js +1 -0
- package/dist/src/plugin-contract/platform-compatibility.d.ts +16 -0
- package/dist/src/plugin-contract/platform-compatibility.js +3 -0
- package/dist/src/plugin-sdk/computer-access.d.ts +4 -0
- package/dist/src/plugin-sdk/computer-access.js +1 -0
- package/dist/src/plugin-sdk/files-windows/process.d.ts +3 -0
- package/dist/src/plugin-sdk/files-windows/process.js +93 -0
- package/dist/src/plugin-sdk/files-windows/read-script.d.ts +1 -0
- package/dist/src/plugin-sdk/files-windows/read-script.js +43 -0
- package/dist/src/plugin-sdk/files-windows/read.d.ts +6 -0
- package/dist/src/plugin-sdk/files-windows/read.js +56 -0
- package/dist/src/plugin-sdk/files-windows/result.d.ts +4 -0
- package/dist/src/plugin-sdk/files-windows/result.js +67 -0
- package/dist/src/plugin-sdk/files.js +4 -0
- package/dist/src/plugin-sdk/index.d.ts +1 -0
- package/dist/src/plugin-sdk/index.js +1 -0
- package/dist/src/plugin-sdk/mutation-result.d.ts +7 -0
- package/dist/src/plugin-sdk/mutation-result.js +11 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
- package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
- package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
- package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
- package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts +2 -2
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.js +2 -2
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/prepared-execution.js +17 -11
- package/dist/src/runtime/adapters/runtime-observation-connection.d.ts +5 -0
- package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
- package/dist/src/runtime/capabilities/tool-availability.js +6 -0
- package/dist/src/runtime/context/capability-brief.d.ts +2 -2
- package/dist/src/runtime/context/capability-brief.js +3 -3
- package/dist/src/runtime/context/capability-descriptions.d.ts +3 -2
- package/dist/src/runtime/context/capability-descriptions.js +57 -20
- package/dist/src/runtime/local-host/windows-private-access.js +2 -0
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +6 -1
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +51 -25
- package/dist/src/runtime/long-term-memory/initial-context.d.ts +17 -0
- package/dist/src/runtime/long-term-memory/initial-context.js +57 -0
- package/dist/src/runtime/long-term-memory/projection.js +1 -1
- package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +2 -1
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +5 -2
- package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +2 -1
- package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +2 -1
- package/dist/src/runtime/orchestration/role-calls/ledger.js +2 -2
- package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +7 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +2 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +88 -0
- package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-calls/reducer.js +2 -1
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +3 -1
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
- package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +5 -1
- package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.d.ts +5 -0
- package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.js +31 -0
- package/dist/src/runtime/passive-learning/application-catalog.js +3 -1
- package/dist/src/runtime/passive-learning/collection-source.js +7 -0
- package/dist/src/runtime/passive-learning/service.js +2 -3
- package/dist/src/runtime/passive-learning/status-projection.d.ts +2 -0
- package/dist/src/runtime/passive-learning/status-projection.js +9 -0
- package/dist/src/runtime/plugins/installation/package.d.ts +8 -0
- package/dist/src/runtime/plugins/installation/package.js +2 -0
- package/dist/src/runtime/plugins/installation/service.d.ts +7 -0
- package/dist/src/runtime/plugins/loader.js +24 -14
- package/dist/src/runtime/plugins/manifest-platform-compatibility.d.ts +2 -0
- package/dist/src/runtime/plugins/manifest-platform-compatibility.js +39 -0
- package/dist/src/runtime/plugins/manifest-projection.js +3 -0
- package/dist/src/runtime/plugins/manifest-validator.js +9 -1
- package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
- package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
- package/dist/src/runtime/request/approval-wait/activation-events.js +19 -7
- package/dist/src/runtime/request/approval-wait/execution-compaction-restore.d.ts +20 -0
- package/dist/src/runtime/request/approval-wait/execution-compaction-restore.js +118 -0
- package/dist/src/runtime/request/approval-wait/super-compaction-restore.js +2 -1
- package/dist/src/runtime/request/capability-execution-freshness.js +6 -1
- package/dist/src/runtime/request/execution-agent-root-execution.js +11 -1
- package/dist/src/runtime/request/prepared-execution.js +3 -0
- package/dist/src/runtime/request/root-contract.d.ts +2 -0
- package/dist/src/runtime/request/root-execution-kernel.js +1 -0
- package/dist/src/runtime/request/runner.js +9 -3
- package/dist/src/runtime/request/supervisor-root-execution.js +6 -0
- package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
- package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
- package/dist/src/runtime/steps/execution-agent/contracts.d.ts +10 -0
- package/dist/src/runtime/steps/execution-agent/decision-parsing.js +13 -1
- package/dist/src/runtime/steps/execution-agent/direct-response-configuration.d.ts +3 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-configuration.js +64 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-contract.d.ts +7 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-contract.js +56 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-policy.d.ts +9 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-policy.js +30 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-prompt.d.ts +7 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +43 -0
- package/dist/src/runtime/steps/execution-agent/format.js +4 -3
- package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -0
- package/dist/src/runtime/steps/execution-agent/input.js +22 -1
- package/dist/src/runtime/steps/execution-agent/plugin-catalog.d.ts +4 -0
- package/dist/src/runtime/steps/execution-agent/plugin-catalog.js +8 -0
- package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
- package/dist/src/runtime/steps/execution-agent/prompt.js +7 -8
- package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
- package/dist/src/runtime/steps/execution-agent/response-run.js +5 -11
- package/dist/src/runtime/steps/execution-agent/run.js +4 -1
- package/dist/src/runtime/steps/execution-agent/state-context.d.ts +3 -5
- package/dist/src/runtime/steps/execution-agent/state-context.js +5 -51
- package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
- package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
- package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
- package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
- package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +2 -0
- package/dist/src/runtime/steps/planner-decision/prompt.js +26 -49
- package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/input.js +5 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.js +6 -2
- package/dist/src/runtime/steps/supervisor-decision/run.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/run.js +4 -0
- package/dist/src/runtime/steps/supervisor-response/run.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-response/run.js +3 -6
- package/dist/src/sessions/durable-session-commit.js +3 -3
- package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
- package/dist/src/sessions/prepared-session-replacement.js +46 -0
- package/dist/src/sessions/session-store.js +3 -3
- package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
- package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
- package/dist/src/shared/windows-file-io/authority-script.d.ts +1 -0
- package/dist/src/shared/windows-file-io/authority-script.js +94 -0
- package/dist/src/shared/windows-file-io/native-script.d.ts +2 -0
- package/dist/src/shared/windows-file-io/native-script.js +120 -0
- package/dist/src/shared/windows-file-io/read-bytes-script.d.ts +1 -0
- package/dist/src/shared/windows-file-io/read-bytes-script.js +18 -0
- package/dist/src/shared/windows-job-object.d.ts +2 -0
- package/dist/src/shared/windows-job-object.js +66 -0
- package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
- package/dist/src/web-ui/app/app-bootstrap.js +14 -1
- package/dist/src/web-ui/app/app-state.js +0 -7
- package/dist/src/web-ui/app/app.js +54 -156
- package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
- package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
- package/dist/src/web-ui/app/components/automations/timeline.js +3 -2
- package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
- package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +7 -1
- package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +22 -2
- package/dist/src/web-ui/app/components/dashboard/compact-layout.js +137 -0
- package/dist/src/web-ui/app/components/dashboard/icons.js +5 -0
- package/dist/src/web-ui/app/components/dashboard/widget-card.js +85 -0
- package/dist/src/web-ui/app/components/dashboard/widget-dialog.js +83 -0
- package/dist/src/web-ui/app/components/dashboard/widget-summaries.js +155 -0
- package/dist/src/web-ui/app/components/dashboard/workspace.js +28 -4
- package/dist/src/web-ui/app/components/home-guidance/daily-review.js +2 -2
- package/dist/src/web-ui/app/components/home-guidance/home-guidance.js +20 -6
- package/dist/src/web-ui/app/components/model-setup/context-window-feedback.js +53 -0
- package/dist/src/web-ui/app/components/model-setup/save-flow.js +3 -1
- package/dist/src/web-ui/app/components/model-setup/save-outcome.js +1 -0
- package/dist/src/web-ui/app/components/model-setup/wizard.js +12 -0
- package/dist/src/web-ui/app/components/operations-summary.js +2 -1
- package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
- package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
- package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
- package/dist/src/web-ui/app/components/passive-learning/home-widget-preview.js +32 -0
- package/dist/src/web-ui/app/components/passive-learning/home.js +11 -3
- package/dist/src/web-ui/app/components/passive-learning/macos-collection-restart-notice.js +1 -0
- package/dist/src/web-ui/app/components/passive-learning/memory.js +2 -4
- package/dist/src/web-ui/app/components/passive-learning/workspace-view.js +2 -2
- package/dist/src/web-ui/app/components/plugins/compatibility.js +13 -0
- package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +9 -1
- package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
- package/dist/src/web-ui/app/components/plugins/installation.js +2 -1
- package/dist/src/web-ui/app/components/plugins/rendering.js +3 -0
- package/dist/src/web-ui/app/components/reasoning-override-prompt.js +82 -0
- package/dist/src/web-ui/app/components/runtime-config-activation.js +22 -8
- package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +7 -4
- package/dist/src/web-ui/app/components/runtime-setup/plugins.js +3 -1
- package/dist/src/web-ui/app/components/runtime-setup/rendering.js +6 -4
- package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +1 -0
- package/dist/src/web-ui/app/components/schedules/details.js +3 -2
- package/dist/src/web-ui/app/components/schedules/form.js +10 -8
- package/dist/src/web-ui/app/components/schedules/workspace.js +23 -4
- package/dist/src/web-ui/app/components/session-sidebar-sections.js +2 -2
- package/dist/src/web-ui/app/components/spark-chat/handoff-actions.js +9 -3
- package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -1
- package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
- package/dist/src/web-ui/app/components/spark-chat/settings.js +8 -4
- package/dist/src/web-ui/app/components/system-host/home-widget-permission-preview.js +75 -0
- package/dist/src/web-ui/app/components/system-host/home-widget-summary.js +93 -0
- package/dist/src/web-ui/app/components/system-host/macos-permission-rendering.js +2 -2
- package/dist/src/web-ui/app/components/system-host/macos-permissions.js +2 -0
- package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
- package/dist/src/web-ui/app/components/system-host/rendering.js +6 -3
- package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +2 -2
- package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
- package/dist/src/web-ui/app/computer-access-feature.js +13 -1
- package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
- package/dist/src/web-ui/app/configuration-feature.js +11 -1
- package/dist/src/web-ui/app/controllers/app-event-bindings.js +38 -105
- package/dist/src/web-ui/app/controllers/chat-request-controller.d.ts +28 -0
- package/dist/src/web-ui/app/controllers/chat-request-controller.js +34 -66
- package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +15 -40
- package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +26 -69
- package/dist/src/web-ui/app/controllers/composer-draft-view.d.ts +27 -0
- package/dist/src/web-ui/app/controllers/composer-draft-view.js +48 -0
- package/dist/src/web-ui/app/controllers/composer-drafts.d.ts +55 -0
- package/dist/src/web-ui/app/controllers/composer-drafts.js +120 -0
- package/dist/src/web-ui/app/controllers/composer-feature.d.ts +65 -0
- package/dist/src/web-ui/app/controllers/composer-feature.js +124 -0
- package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +33 -94
- package/dist/src/web-ui/app/controllers/composer-queue-controller.js +185 -251
- package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +48 -0
- package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.js +97 -0
- package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +30 -61
- package/dist/src/web-ui/app/controllers/composer-submit-controller.js +56 -138
- package/dist/src/web-ui/app/controllers/composer-surface-controller.js +6 -0
- package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +22 -40
- package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +49 -165
- package/dist/src/web-ui/app/controllers/conversation-navigation-intent.js +15 -0
- package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +20 -17
- package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +1 -2
- package/dist/src/web-ui/app/controllers/conversation-session-controller.js +49 -22
- package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +27 -0
- package/dist/src/web-ui/app/controllers/daily-memory-review.js +15 -16
- package/dist/src/web-ui/app/controllers/environment-transition.js +126 -0
- package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +18 -0
- package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +14 -36
- package/dist/src/web-ui/app/controllers/home-composer-feature.js +17 -114
- package/dist/src/web-ui/app/controllers/home-conversation-activation.js +6 -8
- package/dist/src/web-ui/app/controllers/operations-controller.js +2 -1
- package/dist/src/web-ui/app/controllers/passive-learning-controller.js +56 -0
- package/dist/src/web-ui/app/controllers/projects-controller.d.ts +1 -1
- package/dist/src/web-ui/app/controllers/projects-controller.js +6 -1
- package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +174 -0
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -0
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +20 -155
- package/dist/src/web-ui/app/controllers/session-controller.js +33 -17
- package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
- package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +12 -14
- package/dist/src/web-ui/app/controllers/spark-chat-sync.js +2 -2
- package/dist/src/web-ui/app/controllers/steer-controller.js +9 -7
- package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +1 -1
- package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +34 -0
- package/dist/src/web-ui/app/dashboard-feature.js +12 -2
- package/dist/src/web-ui/app/lib/reasoning-controls.js +40 -0
- package/dist/src/web-ui/app/lib/session-composer-queue-ownership.js +58 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +12 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.js +25 -6
- package/dist/src/web-ui/app/passive-learning-feature.js +18 -5
- package/dist/src/web-ui/app/schedules-feature.js +5 -3
- package/dist/src/web-ui/app/services/client-preferences.d.ts +18 -10
- package/dist/src/web-ui/app/services/client-preferences.js +25 -16
- package/dist/src/web-ui/app/services/home-guidance-preferences.js +13 -13
- package/dist/src/web-ui/app/services/reasoning-override.js +12 -0
- package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
- package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
- 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 +2 -0
- package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
- package/dist/src/web-ui/app/services/server-composer-queue.js +32 -0
- package/dist/src/web-ui/app/services/session-sidebar-preferences.js +5 -5
- package/dist/src/web-ui/app/services/workspace-state-storage.js +116 -0
- package/dist/src/web-ui/app/services/workspace-state.js +27 -0
- package/dist/src/web-ui/app/spark-chat-conversation.js +34 -45
- package/dist/src/web-ui/app/spark-chat-feature.js +10 -4
- package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
- package/dist/src/web-ui/app/styles/41-plugin-management.css +8 -0
- package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +1 -0
- package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
- package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
- package/dist/src/web-ui/app/styles/95-home-widgets.css +109 -0
- package/dist/src/web-ui/app/styles.css +3 -0
- package/dist/src/web-ui/client-state/contracts.d.ts +15 -0
- package/dist/src/web-ui/client-state/contracts.js +13 -0
- package/dist/src/web-ui/client-state/preference-shapes.d.ts +2 -0
- package/dist/src/web-ui/client-state/preference-shapes.js +80 -0
- package/dist/src/web-ui/client-state/preferences.d.ts +3 -0
- package/dist/src/web-ui/client-state/preferences.js +84 -0
- package/dist/src/web-ui/client-state/queue.d.ts +3 -0
- package/dist/src/web-ui/client-state/queue.js +43 -0
- package/dist/src/web-ui/client-state/routes.d.ts +7 -0
- package/dist/src/web-ui/client-state/routes.js +58 -0
- package/dist/src/web-ui/client-state/store.d.ts +14 -0
- package/dist/src/web-ui/client-state/store.js +88 -0
- package/dist/src/web-ui/local-runtime/configuration-activation-source.js +2 -0
- package/dist/src/web-ui/local-runtime/http.js +11 -2
- package/dist/src/web-ui/local-runtime/model-context-capacity-error.d.ts +14 -0
- package/dist/src/web-ui/local-runtime/model-context-capacity-error.js +28 -0
- package/dist/src/web-ui/local-runtime/model-setup-context-window.d.ts +15 -0
- package/dist/src/web-ui/local-runtime/model-setup-context-window.js +25 -0
- package/dist/src/web-ui/local-runtime/model-setup-routes.js +2 -0
- package/dist/src/web-ui/local-runtime/model-setup-service.js +5 -2
- package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +1 -0
- package/dist/src/web-ui/local-runtime/model-setup-validation.js +14 -7
- package/dist/src/web-ui/local-runtime/request-body-error.d.ts +11 -0
- package/dist/src/web-ui/local-runtime/request-body-error.js +14 -0
- package/dist/src/web-ui/local-runtime/request-control-observation.js +2 -2
- package/dist/src/web-ui/local-runtime/request-execution.js +18 -18
- package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +2 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +35 -22
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +2 -9
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +4 -27
- package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +15 -1
- package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +30 -11
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.d.ts +20 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.js +104 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.d.ts +29 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.js +151 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.js +87 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.d.ts +3 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.js +37 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
- package/dist/src/web-ui/local-runtime-backend.js +14 -0
- package/dist/src/web-ui/plugin-management-catalog.d.ts +3 -1
- package/dist/src/web-ui/plugin-management-catalog.js +3 -1
- package/dist/src/web-ui/plugin-management-service.d.ts +1 -0
- package/dist/src/web-ui/plugin-removal-service.d.ts +1 -0
- package/dist/src/web-ui/server-readiness.d.ts +3 -0
- package/dist/src/web-ui/server-readiness.js +36 -0
- package/dist/src/web-ui/server.d.ts +2 -0
- package/dist/src/web-ui/server.js +23 -1
- package/dist/src/web-ui/system-host-service.js +13 -2
- package/dist/src/web-ui/system-host-setup/collection-consent-route.d.ts +3 -0
- package/dist/src/web-ui/system-host-setup/collection-consent-route.js +30 -0
- package/docs/installation.md +44 -5
- package/docs/plugins.md +174 -28
- package/docs/tool-execution-result-evidence-contract.md +57 -0
- package/docs/windows-companion-store.md +5 -0
- package/package.json +4 -2
- package/plugins/capability-brief/plugin.json +5 -1
- package/plugins/code-outline/README.md +20 -0
- package/plugins/code-outline/plugin.json +2 -1
- package/plugins/code-outline/source/index.ts +16 -20
- package/plugins/code-outline/source/read-failure.ts +40 -0
- package/plugins/code-outline/src/index.cjs +614 -29
- package/plugins/document-reader/README.md +33 -0
- package/plugins/document-reader/plugin.json +2 -1
- package/plugins/document-reader/source/pdf-contract.ts +57 -0
- package/plugins/document-reader/source/pdf-parser.ts +139 -0
- package/plugins/document-reader/source/pdf-process-main.ts +56 -0
- package/plugins/document-reader/source/pdf-process.ts +207 -0
- package/plugins/document-reader/source/pdf-result.ts +79 -0
- package/plugins/document-reader/source/pdf-worker.ts +39 -303
- package/plugins/document-reader/source/pdf.ts +4 -1
- package/plugins/document-reader/source/read-failure.ts +37 -0
- package/plugins/document-reader/source/reader.ts +3 -19
- package/plugins/document-reader/src/index.cjs +995 -211
- package/plugins/exec/README.md +19 -0
- package/plugins/exec/plugin.json +4 -3
- package/plugins/exec/skills/exec_skill/SKILL.md +3 -2
- package/plugins/exec/source/filesystem-file-observer.ts +98 -0
- package/plugins/exec/source/filesystem-observer.ts +8 -79
- package/plugins/exec/source/output-files.ts +12 -6
- package/plugins/exec/source/paths.ts +3 -1
- package/plugins/exec/source/process-manager.ts +8 -24
- package/plugins/exec/source/shell-platform.ts +19 -3
- package/plugins/exec/source/shell-process.ts +55 -0
- package/plugins/exec/source/windows-job-source.ts +1 -0
- package/plugins/exec/source/windows-shell-bootstrap.ts +20 -0
- package/plugins/exec/src/index.cjs +252 -96
- package/plugins/filesystem/README.md +65 -0
- package/plugins/filesystem/plugin.json +7 -3
- package/plugins/filesystem/source/atomic-write.ts +2 -0
- package/plugins/filesystem/source/bounded-io.ts +80 -306
- package/plugins/filesystem/source/directory-sample.ts +2 -0
- package/plugins/filesystem/source/errors.ts +14 -0
- package/plugins/filesystem/source/file-observation.ts +151 -0
- package/plugins/filesystem/source/file-version.ts +41 -0
- package/plugins/filesystem/source/index.ts +6 -0
- package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
- package/plugins/filesystem/source/windows/authority-script.ts +1 -0
- package/plugins/filesystem/source/windows/native-script.ts +1 -0
- package/plugins/filesystem/source/windows/operations.ts +197 -0
- package/plugins/filesystem/source/windows/process.ts +214 -0
- package/plugins/filesystem/source/windows/publication-script.ts +29 -0
- package/plugins/filesystem/source/windows/read-script.ts +63 -0
- package/plugins/filesystem/source/windows/request-availability.ts +67 -0
- package/plugins/filesystem/source/windows/source.ts +42 -0
- package/plugins/filesystem/source/windows/storage-script.ts +11 -0
- package/plugins/filesystem/source/windows/streams-script.ts +24 -0
- package/plugins/filesystem/source/windows/write-script.ts +86 -0
- package/plugins/filesystem/src/index.cjs +1208 -322
- package/plugins/json-inspector/README.md +18 -0
- package/plugins/json-inspector/plugin.json +2 -1
- package/plugins/json-inspector/source/index.ts +16 -19
- package/plugins/json-inspector/source/read-failure.ts +42 -0
- package/plugins/json-inspector/src/index.cjs +612 -27
- package/plugins/local-search/README.md +29 -0
- package/plugins/local-search/plugin.json +2 -1
- package/plugins/local-search/source/errors.ts +2 -0
- package/plugins/local-search/source/paths.ts +3 -0
- package/plugins/local-search/source/ripgrep-process.ts +31 -5
- package/plugins/local-search/source/ripgrep.ts +3 -3
- package/plugins/local-search/source/windows-authority.ts +99 -0
- package/plugins/local-search/source/windows-search-lease.ts +49 -0
- package/plugins/local-search/source/windows-search-process.ts +91 -0
- package/plugins/local-search/source/windows-search-script.ts +52 -0
- package/plugins/local-search/src/index.cjs +595 -26
- package/plugins/memory/plugin.json +5 -1
- package/plugins/memory/source/lock-directory-claim.ts +56 -0
- package/plugins/memory/source/lock-owner-file.ts +71 -0
- package/plugins/memory/source/lock-path-observation.ts +26 -0
- package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
- package/plugins/memory/source/store-lock.ts +12 -7
- package/plugins/memory/source/store.ts +3 -2
- package/plugins/memory/src/index.cjs +174 -25
- package/plugins/project-orientation/README.md +23 -0
- package/plugins/project-orientation/plugin.json +2 -1
- package/plugins/project-orientation/source/index.ts +12 -9
- package/plugins/project-orientation/source/inspection-failure.ts +70 -0
- package/plugins/project-orientation/source/manifest-summary.ts +9 -2
- package/plugins/project-orientation/source/tree.ts +6 -0
- package/plugins/project-orientation/src/index.cjs +647 -31
- package/plugins/system/README.md +51 -15
- package/plugins/system/plugin.json +6 -2
- package/plugins/system/skills/system_actions/SKILL.md +1 -1
- package/plugins/system/source/command-working-directory.ts +47 -0
- package/plugins/system/source/computer/handlers.ts +13 -9
- package/plugins/system/source/computer/observation-result.ts +10 -5
- package/plugins/system/source/computer/request-computers.ts +10 -3
- package/plugins/system/source/computer/request-modules.ts +3 -6
- package/plugins/system/source/computer/runtime-platform.ts +18 -0
- package/plugins/system/source/host-dispatch.ts +18 -2
- package/plugins/system/source/index.ts +5 -3
- package/plugins/system/source/local-command-output-retention.ts +16 -0
- package/plugins/system/source/local-command-output.ts +16 -8
- package/plugins/system/source/request-system-modules.ts +12 -2
- package/plugins/system/source/request-target-snapshot.ts +2 -1
- package/plugins/system/source/security/desktop-result.ts +177 -0
- package/plugins/system/source/security/observed-error.ts +10 -0
- package/plugins/system/source/security/secret-text.ts +118 -0
- package/plugins/system/source/security/system-results.ts +62 -0
- package/plugins/system/source/security/windows-output-directory.ts +82 -0
- package/plugins/system/src/index.cjs +837 -151
- package/plugins/system-probe/plugin.json +9 -3
- package/plugins/system-probe/source/disk-path.ts +8 -0
- package/plugins/system-probe/source/index.ts +10 -5
- package/plugins/system-probe/source/machine-load.ts +33 -0
- package/plugins/system-probe/source/metrics.ts +6 -8
- package/plugins/system-probe/src/index.cjs +49 -16
- package/plugins/web/plugin.json +5 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { lstatSync, realpathSync } from "node:fs";
|
|
2
|
+
import { realpath, rm } from "node:fs/promises";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { withFileLock } from "../../runtime/adapters/long-term-memory/file-lock.js";
|
|
5
|
+
import { CONFIG_FILE_LOCK_OPTIONS } from "../../runtime/adapters/config-file-transaction.js";
|
|
6
|
+
import { isMissingSetupEditFile, readSetupEditFile, requireSetupEditFileSnapshot, restoreSetupEditFile, setupEditFileMatches, setupEditRecoveryRequired, setupEditTextSnapshot, syncSetupEditDirectory, } from "./runtime-setup-edit-files.js";
|
|
7
|
+
import { readSetupEditJournal, setupEditJournalPath, } from "./runtime-setup-edit-journal.js";
|
|
8
|
+
/** Synchronous consumers must not observe any part of an unresolved edit. */
|
|
9
|
+
export function requireRuntimeSetupEditSettled(rootDir) {
|
|
10
|
+
let path = resolve(rootDir);
|
|
11
|
+
try {
|
|
12
|
+
path = realpathSync(path);
|
|
13
|
+
lstatSync(setupEditJournalPath(path));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
if (isMissingSetupEditFile(error))
|
|
17
|
+
return;
|
|
18
|
+
throw setupEditRecoveryRequired();
|
|
19
|
+
}
|
|
20
|
+
throw setupEditRecoveryRequired();
|
|
21
|
+
}
|
|
22
|
+
async function requireRecoverableSetupEditFiles(journal) {
|
|
23
|
+
for (const file of journal.files) {
|
|
24
|
+
const current = await readSetupEditFile(file.path);
|
|
25
|
+
if (setupEditFileMatches(current, file.after))
|
|
26
|
+
continue;
|
|
27
|
+
if (journal.phase === "pending" &&
|
|
28
|
+
setupEditFileMatches(current, file.before))
|
|
29
|
+
continue;
|
|
30
|
+
throw setupEditRecoveryRequired();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Caller holds every participant lock; repeatable after interruption at any restore. */
|
|
34
|
+
export async function reconcileSetupEditJournal(journal) {
|
|
35
|
+
await requireRecoverableSetupEditFiles(journal);
|
|
36
|
+
if (journal.phase === "pending") {
|
|
37
|
+
for (const file of [...journal.files].reverse()) {
|
|
38
|
+
const current = await readSetupEditFile(file.path);
|
|
39
|
+
if (setupEditFileMatches(current, file.before))
|
|
40
|
+
continue;
|
|
41
|
+
if (!setupEditFileMatches(current, file.after))
|
|
42
|
+
throw setupEditRecoveryRequired();
|
|
43
|
+
await restoreSetupEditFile(file.path, file.after, file.before);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const path = setupEditJournalPath(journal.rootDir);
|
|
47
|
+
await requireSetupEditFileSnapshot(path, setupEditTextSnapshot(JSON.stringify(journal) + "\n", 0o600));
|
|
48
|
+
await rm(path);
|
|
49
|
+
await syncSetupEditDirectory(journal.rootDir);
|
|
50
|
+
}
|
|
51
|
+
async function withSetupEditRecoveryLocks(journal, operation) {
|
|
52
|
+
const [model, config, receipt] = journal.files;
|
|
53
|
+
const locks = [
|
|
54
|
+
config.path + ".config.lock",
|
|
55
|
+
model.path + ".config.lock",
|
|
56
|
+
join(journal.rootDir, ".env.credentials.lock"),
|
|
57
|
+
receipt.path + ".config.lock",
|
|
58
|
+
];
|
|
59
|
+
const acquire = (index) => {
|
|
60
|
+
if (index === locks.length)
|
|
61
|
+
return operation();
|
|
62
|
+
return withFileLock(locks[index], () => acquire(index + 1), CONFIG_FILE_LOCK_OPTIONS);
|
|
63
|
+
};
|
|
64
|
+
return acquire(0);
|
|
65
|
+
}
|
|
66
|
+
/** Runs before dotenv/configuration loading. No journal means no speculative repair. */
|
|
67
|
+
export async function recoverRuntimeSetupEdit(rootDir) {
|
|
68
|
+
try {
|
|
69
|
+
requireRuntimeSetupEditSettled(rootDir);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Parsing and lock acquisition below decide whether recovery is safe.
|
|
74
|
+
}
|
|
75
|
+
const root = await realpath(rootDir);
|
|
76
|
+
await withFileLock(join(root, ".runtime-setup.lock"), async () => {
|
|
77
|
+
const journal = await readSetupEditJournal(root);
|
|
78
|
+
if (!journal)
|
|
79
|
+
return;
|
|
80
|
+
await withSetupEditRecoveryLocks(journal, async () => {
|
|
81
|
+
const current = await readSetupEditJournal(root);
|
|
82
|
+
if (!current || JSON.stringify(current) !== JSON.stringify(journal))
|
|
83
|
+
throw setupEditRecoveryRequired();
|
|
84
|
+
await reconcileSetupEditJournal(journal);
|
|
85
|
+
});
|
|
86
|
+
}, CONFIG_FILE_LOCK_OPTIONS);
|
|
87
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type SetupEditFilePlan } from "./runtime-setup-edit-journal.js";
|
|
2
|
+
/** Setup, config, model and credential locks enclose this complete transaction. */
|
|
3
|
+
export declare function commitRuntimeSetupEdit(rootDir: string, files: readonly SetupEditFilePlan[], commit: () => Promise<void>, publishCommittedCredentials: () => void): Promise<void>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { realpath } from "node:fs/promises";
|
|
2
|
+
import { createSetupEditJournal, readSetupEditJournal, writeSetupEditJournal, } from "./runtime-setup-edit-journal.js";
|
|
3
|
+
import { requireSetupEditFileSnapshot, syncSetupEditFile, } from "./runtime-setup-edit-files.js";
|
|
4
|
+
import { reconcileSetupEditJournal, requireRuntimeSetupEditSettled, } from "./runtime-setup-edit-recovery.js";
|
|
5
|
+
/** Setup, config, model and credential locks enclose this complete transaction. */
|
|
6
|
+
export async function commitRuntimeSetupEdit(rootDir, files, commit, publishCommittedCredentials) {
|
|
7
|
+
const root = await realpath(rootDir);
|
|
8
|
+
requireRuntimeSetupEditSettled(root);
|
|
9
|
+
const journal = await createSetupEditJournal(root, files);
|
|
10
|
+
await writeSetupEditJournal(journal);
|
|
11
|
+
try {
|
|
12
|
+
await commit();
|
|
13
|
+
for (const file of journal.files) {
|
|
14
|
+
await requireSetupEditFileSnapshot(file.path, file.after);
|
|
15
|
+
await syncSetupEditFile(file.path);
|
|
16
|
+
}
|
|
17
|
+
await writeSetupEditJournal({ ...journal, phase: "committed" }, journal);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
try {
|
|
21
|
+
const persisted = await readSetupEditJournal(root);
|
|
22
|
+
if (persisted?.phase === "committed")
|
|
23
|
+
publishCommittedCredentials();
|
|
24
|
+
if (persisted)
|
|
25
|
+
await reconcileSetupEditJournal(persisted);
|
|
26
|
+
if (persisted?.phase === "committed")
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
catch (recoveryError) {
|
|
30
|
+
throw new AggregateError([error, recoveryError], "Connection edit failed and needs recovery before it can be applied.");
|
|
31
|
+
}
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
publishCommittedCredentials();
|
|
35
|
+
// A cleanup failure leaves a committed marker. Never roll it back.
|
|
36
|
+
await reconcileSetupEditJournal({ ...journal, phase: "committed" });
|
|
37
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { requireRuntimeSetupEditSettled } from "./runtime-setup-edit-recovery.js";
|
|
1
2
|
import { readDefaultContextWindowTokens } from "../../../scripts/runtime-setup-files.js";
|
|
2
3
|
import { initializeConfiguredRuntimeDirectories } from "../../../scripts/runtime-setup-directories.js";
|
|
3
4
|
import { configuredSetupModel, requiresConfiguredCredential, } from "./runtime-setup-provider.js";
|
|
@@ -20,6 +21,7 @@ export class RuntimeSetupService {
|
|
|
20
21
|
this.options = options;
|
|
21
22
|
}
|
|
22
23
|
source() {
|
|
24
|
+
requireRuntimeSetupEditSettled(this.options.rootDir);
|
|
23
25
|
return inspectRuntimeConfigFileWithMeta(this.options.rootDir, this.savedConfigPath ?? this.options.getConfigPath());
|
|
24
26
|
}
|
|
25
27
|
async status() {
|
|
@@ -156,7 +158,9 @@ export class RuntimeSetupService {
|
|
|
156
158
|
draft,
|
|
157
159
|
input,
|
|
158
160
|
credentialChanged,
|
|
161
|
+
credentialWrite,
|
|
159
162
|
});
|
|
163
|
+
credentialsPersisted = true;
|
|
160
164
|
draft = edited.draft;
|
|
161
165
|
embeddingInvalidated = edited.embeddingInvalidated;
|
|
162
166
|
}
|
|
@@ -3,6 +3,9 @@ import { LocalRuntimeApiRouter } from "./local-runtime/api-router.js";
|
|
|
3
3
|
import { LocalRuntimeControlRoutes } from "./local-runtime/control-routes.js";
|
|
4
4
|
import { RuntimeEnvironmentRegistry } from "./local-runtime/environment-registry.js";
|
|
5
5
|
import { sendJson } from "./local-runtime/http.js";
|
|
6
|
+
import { RequestBodyInputError } from "./local-runtime/request-body-error.js";
|
|
7
|
+
import { RuntimeSetupError } from "./local-runtime/runtime-setup-input.js";
|
|
8
|
+
import { requireRuntimeSetupEditSettled } from "./local-runtime/runtime-setup-edit-recovery.js";
|
|
6
9
|
import { LocalRealtimeController } from "./local-runtime/realtime-controller.js";
|
|
7
10
|
import { RealtimeClientHub } from "./local-runtime/realtime-hub.js";
|
|
8
11
|
import { LocalRequestExecution } from "./local-runtime/request-execution.js";
|
|
@@ -21,6 +24,7 @@ export class LocalRuntimeWebBackend {
|
|
|
21
24
|
notifications;
|
|
22
25
|
notificationRoutes;
|
|
23
26
|
constructor(options) {
|
|
27
|
+
requireRuntimeSetupEditSettled(options.rootDir ?? process.cwd());
|
|
24
28
|
const resolvedOptions = {
|
|
25
29
|
...options,
|
|
26
30
|
providerAdapters: resolveProviderAdapters({
|
|
@@ -87,6 +91,16 @@ export class LocalRuntimeWebBackend {
|
|
|
87
91
|
return false;
|
|
88
92
|
}
|
|
89
93
|
catch (error) {
|
|
94
|
+
const requiresSetupRecovery = error instanceof RuntimeSetupError &&
|
|
95
|
+
error.code === "setup_edit_recovery_required";
|
|
96
|
+
if (error instanceof RequestBodyInputError || requiresSetupRecovery) {
|
|
97
|
+
sendJson(res, error.statusCode, {
|
|
98
|
+
ok: false,
|
|
99
|
+
error: error.code,
|
|
100
|
+
message: error.message,
|
|
101
|
+
});
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
90
104
|
sendJson(res, 500, {
|
|
91
105
|
ok: false,
|
|
92
106
|
error: "local_runtime_backend_error",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolvePluginPlatformCompatibility } from "../runtime/plugins/platform-compatibility.js";
|
|
1
2
|
import type { RuntimePluginConfig } from "../runtime/ports.js";
|
|
2
3
|
import type { DiscoveredAgentPluginManifest } from "../runtime/plugins/discovered-manifest.js";
|
|
3
4
|
import { type PluginSelection } from "../runtime/plugins/selection.js";
|
|
@@ -15,6 +16,7 @@ export type RuntimePluginSnapshot = {
|
|
|
15
16
|
description?: string;
|
|
16
17
|
version?: string;
|
|
17
18
|
pluginEnabled: boolean;
|
|
19
|
+
compatibility: ReturnType<typeof resolvePluginPlatformCompatibility>;
|
|
18
20
|
removable: boolean;
|
|
19
21
|
configurable: boolean;
|
|
20
22
|
capabilities: RuntimePluginCapabilitySnapshot[];
|
|
@@ -25,4 +27,4 @@ export type RuntimePluginSnapshot = {
|
|
|
25
27
|
}>;
|
|
26
28
|
application: "restart_required";
|
|
27
29
|
};
|
|
28
|
-
export declare function projectPluginSnapshot(manifests: readonly DiscoveredAgentPluginManifest[], config: RuntimePluginConfig, consumerRoot?: string): RuntimePluginSnapshot;
|
|
30
|
+
export declare function projectPluginSnapshot(manifests: readonly DiscoveredAgentPluginManifest[], config: RuntimePluginConfig, consumerRoot?: string, runtimePlatform?: NodeJS.Platform): RuntimePluginSnapshot;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolvePluginPlatformCompatibility } from "../runtime/plugins/platform-compatibility.js";
|
|
1
2
|
import { readPluginConfigurationStore } from "../runtime/plugins/configuration-store.js";
|
|
2
3
|
import { hasConfigurablePluginValues } from "./plugin-configuration-view.js";
|
|
3
4
|
import { installedPluginPackage } from "../runtime/plugins/installation/installed-package.js";
|
|
@@ -33,7 +34,7 @@ function projectPluginCapabilities(plugin, selection) {
|
|
|
33
34
|
};
|
|
34
35
|
});
|
|
35
36
|
}
|
|
36
|
-
export function projectPluginSnapshot(manifests, config, consumerRoot) {
|
|
37
|
+
export function projectPluginSnapshot(manifests, config, consumerRoot, runtimePlatform = process.platform) {
|
|
37
38
|
const selection = normalizePluginSelection(config);
|
|
38
39
|
const local = consumerRoot
|
|
39
40
|
? readPluginConfigurationStore(consumerRoot).plugins
|
|
@@ -47,6 +48,7 @@ export function projectPluginSnapshot(manifests, config, consumerRoot) {
|
|
|
47
48
|
const selectedCapabilityCount = capabilities.filter((capability) => capability.enabled).length;
|
|
48
49
|
return {
|
|
49
50
|
id: manifest.name,
|
|
51
|
+
compatibility: resolvePluginPlatformCompatibility(manifest, runtimePlatform),
|
|
50
52
|
configurable: hasConfigurablePluginValues(manifest.extensions[ABOT_RUNTIME_EXTENSION], Object.hasOwn(local, manifest.name)
|
|
51
53
|
? local[manifest.name]
|
|
52
54
|
: undefined),
|
|
@@ -21,6 +21,7 @@ export declare function setRuntimePluginEnabled(options: PluginManagementOptions
|
|
|
21
21
|
description?: string;
|
|
22
22
|
version?: string;
|
|
23
23
|
pluginEnabled: boolean;
|
|
24
|
+
compatibility: ReturnType<typeof import("../runtime/plugins/platform-compatibility.js").resolvePluginPlatformCompatibility>;
|
|
24
25
|
removable: boolean;
|
|
25
26
|
configurable: boolean;
|
|
26
27
|
capabilities: import("./plugin-management-catalog.js").RuntimePluginCapabilitySnapshot[];
|
|
@@ -18,6 +18,7 @@ export declare function removeRuntimePlugin(options: PluginManagementOptions & P
|
|
|
18
18
|
description?: string;
|
|
19
19
|
version?: string;
|
|
20
20
|
pluginEnabled: boolean;
|
|
21
|
+
compatibility: ReturnType<typeof import("../runtime/plugins/platform-compatibility.js").resolvePluginPlatformCompatibility>;
|
|
21
22
|
removable: boolean;
|
|
22
23
|
configurable: boolean;
|
|
23
24
|
capabilities: import("./plugin-management-catalog.js").RuntimePluginCapabilitySnapshot[];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Resolve the actual bound address, including when the caller requested port 0. */
|
|
2
|
+
export function waitForWebUiListening(server, signal) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
const cleanup = () => {
|
|
5
|
+
server.off("listening", listening);
|
|
6
|
+
server.off("error", failed);
|
|
7
|
+
signal.removeEventListener("abort", aborted);
|
|
8
|
+
};
|
|
9
|
+
const failed = (error) => {
|
|
10
|
+
cleanup();
|
|
11
|
+
reject(error);
|
|
12
|
+
};
|
|
13
|
+
const aborted = () => failed(new Error("web_ui_closed_before_listening"));
|
|
14
|
+
const listening = () => {
|
|
15
|
+
const address = server.address();
|
|
16
|
+
if (!address || typeof address === "string") {
|
|
17
|
+
failed(new Error("web_ui_tcp_address_unavailable"));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
cleanup();
|
|
21
|
+
const host = address.family === "IPv6" ? `[${address.address}]` : address.address;
|
|
22
|
+
resolve(`http://${host}:${address.port}/`);
|
|
23
|
+
};
|
|
24
|
+
if (signal.aborted) {
|
|
25
|
+
aborted();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (server.listening) {
|
|
29
|
+
listening();
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
server.once("listening", listening);
|
|
33
|
+
server.once("error", failed);
|
|
34
|
+
signal.addEventListener("abort", aborted, { once: true });
|
|
35
|
+
});
|
|
36
|
+
}
|
|
@@ -26,6 +26,8 @@ type WebUiServerOptions = {
|
|
|
26
26
|
checkRuntimeSetupActivation?: (configPath: string) => Promise<RuntimeSetupActivation>;
|
|
27
27
|
};
|
|
28
28
|
type WebUiServerHandle = {
|
|
29
|
+
ready: () => Promise<string>;
|
|
29
30
|
close: () => Promise<void>;
|
|
30
31
|
};
|
|
31
32
|
export declare function startWebUiServer(overrides?: WebUiServerOptions): WebUiServerHandle;
|
|
33
|
+
export declare function startWebUiServerWithRecovery(overrides?: WebUiServerOptions): Promise<WebUiServerHandle>;
|
|
@@ -9,8 +9,11 @@ import { resolveWebUiEnvironmentConfig, } from "./environment-config.js";
|
|
|
9
9
|
export { resolveWebUiEnvironmentConfig, } from "./environment-config.js";
|
|
10
10
|
import { closeRuntimeSetupServices } from "./runtime-setup-shutdown.js";
|
|
11
11
|
import { loadDotEnvFile } from "../shared/load-dotenv.js";
|
|
12
|
+
import { waitForWebUiListening } from "./server-readiness.js";
|
|
13
|
+
import { recoverRuntimeSetupEdit, requireRuntimeSetupEditSettled, } from "./local-runtime/runtime-setup-edit-recovery.js";
|
|
12
14
|
import { createWebUiShutdown } from "./server-shutdown.js";
|
|
13
15
|
import { ExternalBridgeWebBackend } from "./external-bridge-backend.js";
|
|
16
|
+
import { WebClientStateRoutes } from "./client-state/routes.js";
|
|
14
17
|
import { LocalRuntimeWebBackend } from "./local-runtime-backend.js";
|
|
15
18
|
import { resolveWebUiAddress } from "./web-ui-address.js";
|
|
16
19
|
import { createLinkPreviewRouteHandler } from "./link-preview/routes.js";
|
|
@@ -126,6 +129,12 @@ async function serveStatic(req, res, appDir) {
|
|
|
126
129
|
sendJson(res, 404, { ok: false, error: "not_found" });
|
|
127
130
|
}
|
|
128
131
|
export function startWebUiServer(overrides = {}) {
|
|
132
|
+
const startupRoots = new Set([
|
|
133
|
+
process.cwd(),
|
|
134
|
+
overrides.rootDir ?? process.cwd(),
|
|
135
|
+
]);
|
|
136
|
+
for (const rootDir of startupRoots)
|
|
137
|
+
requireRuntimeSetupEditSettled(rootDir);
|
|
129
138
|
const envOptions = getOptionsFromEnv();
|
|
130
139
|
const rootDir = overrides.rootDir ?? envOptions.rootDir;
|
|
131
140
|
const configPath = overrides.configPath ?? envOptions.configPath;
|
|
@@ -206,6 +215,12 @@ export function startWebUiServer(overrides = {}) {
|
|
|
206
215
|
});
|
|
207
216
|
}
|
|
208
217
|
const handleLinkPreview = createLinkPreviewRouteHandler();
|
|
218
|
+
const clientState = new WebClientStateRoutes(rootDir, () => {
|
|
219
|
+
for (const client of wss.clients) {
|
|
220
|
+
if (client.readyState === 1)
|
|
221
|
+
client.send(JSON.stringify({ type: "workspace_changed", resources: ["client-state"] }));
|
|
222
|
+
}
|
|
223
|
+
});
|
|
209
224
|
const systemHost = localRuntimeBackend
|
|
210
225
|
? new WebSystemHostService(rootDir, () => localRuntimeBackend.notifyHostConnectionChanged(), (environmentId) => localRuntimeBackend.nativePermissions(environmentId))
|
|
211
226
|
: null;
|
|
@@ -217,6 +232,8 @@ export function startWebUiServer(overrides = {}) {
|
|
|
217
232
|
if (await handleLinkPreview(req, res))
|
|
218
233
|
return;
|
|
219
234
|
const pathname = new URL(req.url || "/", "http://localhost").pathname;
|
|
235
|
+
if (await clientState.handle(req, res, pathname))
|
|
236
|
+
return;
|
|
220
237
|
if (await systemHost?.handleHttp(req, res, pathname))
|
|
221
238
|
return;
|
|
222
239
|
if (pathname === "/web-config") {
|
|
@@ -317,10 +334,15 @@ export function startWebUiServer(overrides = {}) {
|
|
|
317
334
|
});
|
|
318
335
|
const schedulerStartup = localRuntimeBackend?.start(options.environments.map(({ id }) => id));
|
|
319
336
|
return {
|
|
337
|
+
ready: () => waitForWebUiListening(server, listenAbort.signal),
|
|
320
338
|
close: createWebUiShutdown(server, wss, schedulerStartup, () => closeRuntimeSetupServices(async () => localRuntimeBackend?.stop(), () => setupGateway.close(), async () => systemHost?.close()), listenAbort),
|
|
321
339
|
};
|
|
322
340
|
}
|
|
341
|
+
export async function startWebUiServerWithRecovery(overrides = {}) {
|
|
342
|
+
await recoverRuntimeSetupEdit(overrides.rootDir ?? process.cwd());
|
|
343
|
+
return startWebUiServer(overrides);
|
|
344
|
+
}
|
|
323
345
|
const invokedPath = process.argv[1] ? pathToFileURL(process.argv[1]).href : "";
|
|
324
346
|
if (import.meta.url === invokedPath) {
|
|
325
|
-
|
|
347
|
+
await startWebUiServerWithRecovery();
|
|
326
348
|
}
|
|
@@ -4,6 +4,9 @@ import { HostConnection } from "../computer-access/companion/connection.js";
|
|
|
4
4
|
import { HostPairingStore } from "../computer-access/companion/pairing-store.js";
|
|
5
5
|
import { startHostBroker } from "../computer-access/companion/broker-server.js";
|
|
6
6
|
import { hostStateDirectory } from "../computer-access/companion/private-store.js";
|
|
7
|
+
import { readCollectionConsent } from "../computer-access/collection-consent.js";
|
|
8
|
+
import { readRuntimeCollectionSource } from "../computer-access/observation-source.js";
|
|
9
|
+
import { COLLECTION_CONSENT_PATH, handleCollectionConsent } from "./system-host-setup/collection-consent-route.js";
|
|
7
10
|
import { HOST_SOCKET_PATH, HOST_WIRE_MAX_BYTES, } from "../computer-access/companion/protocol.js";
|
|
8
11
|
import { isProcessOwnerAlive, requireCurrentProcessOwnerIdentity, } from "../computer-access/companion/process-owner-identity.js";
|
|
9
12
|
import { ensurePrivateRuntimeDirectory } from "../runtime/local-host/private-directory.js";
|
|
@@ -21,6 +24,8 @@ import { NativeRuntimePermissionRoute } from "./system-host-setup/native-permiss
|
|
|
21
24
|
function isSystemHostRoute(pathname) {
|
|
22
25
|
if (pathname === "/web-api/runtime/system-host")
|
|
23
26
|
return true;
|
|
27
|
+
if (pathname === COLLECTION_CONSENT_PATH)
|
|
28
|
+
return true;
|
|
24
29
|
return pathname === "/web-api/runtime/system-host/pairing";
|
|
25
30
|
}
|
|
26
31
|
export class WebSystemHostService {
|
|
@@ -102,6 +107,10 @@ export class WebSystemHostService {
|
|
|
102
107
|
return false;
|
|
103
108
|
response.setHeader("cache-control", "no-store");
|
|
104
109
|
try {
|
|
110
|
+
if (pathname === COLLECTION_CONSENT_PATH) {
|
|
111
|
+
await handleCollectionConsent(request, response, this.rootDir);
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
105
114
|
if (pathname === HOST_PERMISSION_PATH) {
|
|
106
115
|
await this.permissions.handle(request, response);
|
|
107
116
|
return true;
|
|
@@ -115,7 +124,8 @@ export class WebSystemHostService {
|
|
|
115
124
|
const status = this.connection.status();
|
|
116
125
|
const readiness = withLocalMacSetup(request, await readHostReadiness(status));
|
|
117
126
|
const nativePermissions = await this.nativePermissions.status(request);
|
|
118
|
-
sendJson(response, 200, { ok: true, ...status, readiness, nativePermissions
|
|
127
|
+
sendJson(response, 200, { ok: true, ...status, readiness, nativePermissions,
|
|
128
|
+
collectionSource: readRuntimeCollectionSource(), collectionConsent: readCollectionConsent(this.rootDir) });
|
|
119
129
|
return true;
|
|
120
130
|
}
|
|
121
131
|
if (!acceptConfigMutationRequest(request, response))
|
|
@@ -145,7 +155,8 @@ export class WebSystemHostService {
|
|
|
145
155
|
this.connection.disconnect();
|
|
146
156
|
const status = this.connection.status();
|
|
147
157
|
sendJson(response, 200, { ok: true, ...status,
|
|
148
|
-
readiness: withLocalMacSetup(request, await readHostReadiness(status))
|
|
158
|
+
readiness: withLocalMacSetup(request, await readHostReadiness(status)),
|
|
159
|
+
collectionSource: readRuntimeCollectionSource(), collectionConsent: readCollectionConsent(this.rootDir) });
|
|
149
160
|
return true;
|
|
150
161
|
}
|
|
151
162
|
sendJson(response, 405, { ok: false, error: "method_not_allowed" });
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
export declare const COLLECTION_CONSENT_PATH = "/web-api/runtime/system-host/collection-consent";
|
|
3
|
+
export declare function handleCollectionConsent(request: IncomingMessage, response: ServerResponse, rootDir: string): Promise<void>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { acceptCollectionConsent } from "../../computer-access/collection-consent.js";
|
|
2
|
+
import { acceptConfigMutationRequest } from "../local-runtime/config-mutation-request.js";
|
|
3
|
+
import { readBody, sendJson } from "../local-runtime/http.js";
|
|
4
|
+
export const COLLECTION_CONSENT_PATH = "/web-api/runtime/system-host/collection-consent";
|
|
5
|
+
function hasExplicitCollectionAcknowledgment(value) {
|
|
6
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
7
|
+
return false;
|
|
8
|
+
if (Object.keys(value).length !== 1)
|
|
9
|
+
return false;
|
|
10
|
+
return value.acknowledged === true;
|
|
11
|
+
}
|
|
12
|
+
export async function handleCollectionConsent(request, response, rootDir) {
|
|
13
|
+
if (request.method !== "POST") {
|
|
14
|
+
sendJson(response, 405, { ok: false, error: "method_not_allowed" });
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (!acceptConfigMutationRequest(request, response))
|
|
18
|
+
return;
|
|
19
|
+
let body;
|
|
20
|
+
try {
|
|
21
|
+
body = JSON.parse((await readBody(request, { maxBytes: 1_024 })).toString());
|
|
22
|
+
}
|
|
23
|
+
catch { /* malformed or oversized input is rejected below */ }
|
|
24
|
+
if (!hasExplicitCollectionAcknowledgment(body)) {
|
|
25
|
+
sendJson(response, 400, { ok: false, error: "invalid_collection_acknowledgment" });
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const collectionConsent = await acceptCollectionConsent(rootDir);
|
|
29
|
+
sendJson(response, 200, { ok: true, collectionConsent });
|
|
30
|
+
}
|
package/docs/installation.md
CHANGED
|
@@ -140,12 +140,35 @@ See [Passive Long-Term Memory](long-term-memory.md) before enabling persistence.
|
|
|
140
140
|
|
|
141
141
|
### Computer Access During Setup
|
|
142
142
|
|
|
143
|
-
The
|
|
144
|
-
|
|
145
|
-
plugins
|
|
146
|
-
adds desktop access and background collection without a second ABot Spark setup.
|
|
143
|
+
The **Computer** step and computer card on **Home** use the platform where the
|
|
144
|
+
Runtime is running. Direct native/WSL command access can already work; compatible
|
|
145
|
+
plugins still require their own permissions.
|
|
147
146
|
|
|
148
|
-
#### Windows
|
|
147
|
+
#### Native Windows
|
|
148
|
+
|
|
149
|
+
When the Runtime runs directly on Windows, computer setup does not require
|
|
150
|
+
Companion or a pairing link. Compatible tools run locally with their existing
|
|
151
|
+
approval controls. Spark uses the same Windows collection implementation locally.
|
|
152
|
+
Opening a WSL or Docker Runtime in a Windows browser still uses the Companion
|
|
153
|
+
connection described below.
|
|
154
|
+
|
|
155
|
+
#### Spark collection acknowledgment
|
|
156
|
+
|
|
157
|
+
On every platform, Spark asks for an explicit, initially unchecked acknowledgment
|
|
158
|
+
before granting collection permission or starting collection. It explains the
|
|
159
|
+
application content collected and how the configured learning model may receive
|
|
160
|
+
it, with links to the [Software Terms](https://abot-ai.com/terms/#software) and
|
|
161
|
+
[Privacy Policy](https://abot-ai.com/privacy/#software).
|
|
162
|
+
|
|
163
|
+
The acknowledgment is saved once per ABot installation, shared across environments,
|
|
164
|
+
and retained across updates and computer re-pairing. Existing installations also
|
|
165
|
+
need to acknowledge it once. This record does not enable collection or learning:
|
|
166
|
+
activity permissions and Start/Stop remain separate. Previously enabled collection
|
|
167
|
+
resumes after a Runtime restart according to its saved schedule and permissions.
|
|
168
|
+
Where Companion is required, connect the computer as an additional step before
|
|
169
|
+
starting collection.
|
|
170
|
+
|
|
171
|
+
#### Windows computer connected to WSL or Docker: Microsoft Store connection
|
|
149
172
|
|
|
150
173
|
**ABot AI Companion** is available from
|
|
151
174
|
[Microsoft Store](https://apps.microsoft.com/detail/9PK2FDQQLQS9).
|
|
@@ -187,6 +210,22 @@ computer and enables startup at sign-in. This path does not download a Finder
|
|
|
187
210
|
installer or require an Apple Developer account. Use **Repair Mac connection**
|
|
188
211
|
to repair or update an existing connection while retaining its pairing.
|
|
189
212
|
|
|
213
|
+
After updating and restarting Runtime, an already connected Mac may still have
|
|
214
|
+
an older Marketplace installation-link handler. If **Repair Mac connection** is not
|
|
215
|
+
offered, use the updated CLI on that Mac to refresh the connection:
|
|
216
|
+
|
|
217
|
+
```sh
|
|
218
|
+
abot host status
|
|
219
|
+
abot host connect --url '<url from host status>'
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
For a project-local installation, run both commands as `npx --no-install abot ...`
|
|
223
|
+
from that project instead. Use the exact saved `url` reported by `host status`,
|
|
224
|
+
not a new address. This reuses the existing pairing, refreshes the managed
|
|
225
|
+
Companion and link handler, and briefly reconnects Computer Access. Do not run
|
|
226
|
+
`disconnect` first. Then retry the Marketplace link: it opens plugin review,
|
|
227
|
+
not an automatic installation.
|
|
228
|
+
|
|
190
229
|
For a Mac connecting to a Docker or forwarded Runtime, choose **Connect a Mac**.
|
|
191
230
|
Install the ABot CLI on that Mac, run the displayed `abot host connect --url ...`
|
|
192
231
|
command in its graphical login, then paste the one-time code when Terminal asks.
|