@abot-ai/runtime 1.7.0 → 1.8.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/dist/src/capabilities/tool-request-resources.d.ts +3 -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/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.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/runtime-observation-connection.d.ts +5 -0
- package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
- package/dist/src/runtime/local-host/windows-private-access.js +2 -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-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/prepared-execution.js +3 -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/format.js +2 -3
- package/dist/src/runtime/steps/execution-agent/input.js +1 -1
- package/dist/src/runtime/steps/execution-agent/prompt.js +5 -5
- package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
- package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -3
- package/dist/src/runtime/steps/execution-agent/state-context.js +26 -35
- 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/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/app-bootstrap.js +14 -1
- package/dist/src/web-ui/app/app-state.js +0 -7
- package/dist/src/web-ui/app/app.js +53 -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/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/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/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.js +7 -2
- 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/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/placement.js +4 -7
- package/dist/src/web-ui/app/components/spark-chat/settings.js +7 -3
- 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 +3 -0
- package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
- package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
- package/dist/src/web-ui/app/configuration-feature.js +9 -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/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 +3 -2
- package/dist/src/web-ui/app/lib/reasoning-controls.js +35 -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 +16 -3
- 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.css +2 -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 +145 -4
- 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 +4 -0
- package/plugins/code-outline/README.md +20 -0
- package/plugins/code-outline/plugin.json +1 -0
- 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 +1 -0
- 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 +6 -2
- 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 +1 -0
- 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 +1 -0
- 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 +4 -0
- 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 +1 -0
- 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 +5 -1
- 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 +8 -2
- 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 +4 -0
|
@@ -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.
|
package/docs/plugins.md
CHANGED
|
@@ -237,12 +237,71 @@ options, or skill lists in `runtime.config.json`. Installing or changing a
|
|
|
237
237
|
plugin means changing its package under `plugins/`; runtime config only decides
|
|
238
238
|
whether that installed capability is available.
|
|
239
239
|
|
|
240
|
+
## Runtime Platform Compatibility
|
|
241
|
+
|
|
242
|
+
A plugin can declare where its code can run using a separate manifest extension:
|
|
243
|
+
`extensions["ai.abot.compatibility"] = { "version": 1, "runtimePlatforms": ["linux", "darwin"] }`.
|
|
244
|
+
The executable `ai.abot.runtime` extension remains at version 1.
|
|
245
|
+
|
|
246
|
+
`runtimePlatforms` is a non-empty, duplicate-free list of Node platform names:
|
|
247
|
+
`linux`, `darwin` (macOS), or `win32` (Windows). Unsupported versions, platform
|
|
248
|
+
names and fields are rejected. Declare only platforms on which the complete
|
|
249
|
+
plugin can safely load; individual operations may still require permissions,
|
|
250
|
+
external programs or a connected computer.
|
|
251
|
+
|
|
252
|
+
The declaration describes the **Runtime host**, not the browser or the computer
|
|
253
|
+
controlled by a tool. A Linux Runtime in WSL or a Linux Docker container remains
|
|
254
|
+
`linux`, including when SYSTEM controls a Windows Companion. It does not grant
|
|
255
|
+
permissions or replace the tool's request-time target checks.
|
|
256
|
+
|
|
257
|
+
Hosts with this compatibility support apply the following policy before resolving
|
|
258
|
+
plugin settings/secrets or importing executable plugin code:
|
|
259
|
+
|
|
260
|
+
- A declared matching platform can load, subject to the existing saved selection.
|
|
261
|
+
- A declared non-matching platform cannot load.
|
|
262
|
+
- Without a declaration, existing non-Windows behavior is preserved. Native
|
|
263
|
+
Windows reports **Compatibility not declared** and does not load the plugin.
|
|
264
|
+
|
|
265
|
+
Installed, onboarding and model-selection views show compatibility separately
|
|
266
|
+
from saved plugin/tool selection. Changing hosts does not rewrite saved selection
|
|
267
|
+
or erase settings and keys. An incompatible package remains inspectable,
|
|
268
|
+
configurable and removable. It can be installed for later use on a supported
|
|
269
|
+
host; the review and installation result explain that it will not load here.
|
|
270
|
+
Applying configuration cannot bypass the loader gate.
|
|
271
|
+
|
|
272
|
+
**Older hosts:** ABot 1.7.0 accepts and preserves additional extension namespaces
|
|
273
|
+
but does not enforce this declaration. Its existing behavior remains unchanged.
|
|
274
|
+
This metadata is not an enforcement guarantee on older hosts, nor a claim that
|
|
275
|
+
ABot 1.7.0 or its bundled plugins support native Windows. Existing bundled plugin
|
|
276
|
+
manifests are not certified for Windows by this contract change.
|
|
277
|
+
|
|
278
|
+
The required `windows-compatibility` CI job builds the Runtime, checks types and
|
|
279
|
+
plugin packages, and runs the focused platform contract and loader suites on
|
|
280
|
+
Windows with Node 24. It complements the Linux validation and macOS Companion
|
|
281
|
+
checks; it does not certify all native Windows tool operations or Store packaging.
|
|
282
|
+
|
|
240
283
|
## Manifest Contract
|
|
241
284
|
|
|
242
285
|
`@abot-ai/runtime/plugin-sdk` is the single public plugin-authoring entrypoint. It
|
|
243
286
|
exports the manifest constants and types, entrypoint contract, and bounded
|
|
244
287
|
authoring helpers consumed by plugin implementations.
|
|
245
288
|
|
|
289
|
+
The SDK's `readBoundedRegularFile(path, { rootPath, maxBytes, signal })` reads one
|
|
290
|
+
regular file within its authorized root and returns bounded bytes or a typed
|
|
291
|
+
refusal. On native Windows, it uses the same C# handle primitives as `filesystem`,
|
|
292
|
+
compiled by the built-in Windows PowerShell for each read. Root and file identity
|
|
293
|
+
are checked before reading; traversal rejects reparse points beneath the root,
|
|
294
|
+
including junctions. Binary content and documents up to 10 MiB are covered by
|
|
295
|
+
native tests; each caller still sets its own size limit. Linux/macOS retain the
|
|
296
|
+
existing no-follow file-descriptor path.
|
|
297
|
+
|
|
298
|
+
A Windows policy or compiler restriction returns `safe_open_unsupported`. Plugins
|
|
299
|
+
must report that safe reading is unavailable and avoid automatic retries or a
|
|
300
|
+
less restricted fallback. Cancellation stops the helper and throws `AbortError`;
|
|
301
|
+
a helper deadline (15 seconds) or ordinary I/O failure remains an explicit error.
|
|
302
|
+
This SDK support does not enable Windows compatibility in a plugin manifest.
|
|
303
|
+
Each plugin must still declare and validate its own Windows support.
|
|
304
|
+
|
|
246
305
|
The manifest follows the Agent Plugins 1.0 package shape and keeps the local
|
|
247
306
|
executable contract under `extensions.ai.abot.runtime`:
|
|
248
307
|
|
|
@@ -364,10 +423,14 @@ receive it. Planner uses this same brief instead of a separate aggregate-tag
|
|
|
364
423
|
catalog. Its existing group-selection schema and Worker scope enforcement stay
|
|
365
424
|
unchanged; descriptions do not select a group or execute an operation.
|
|
366
425
|
|
|
367
|
-
Under `execution-agent-v1`, the canonical root receives group
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
426
|
+
Under `execution-agent-v1`, the canonical root receives every group and member
|
|
427
|
+
in ASCII order on each decision, and may mechanically open or extend its own
|
|
428
|
+
RoleCall scope. A capability's exact summary appears as `capabilityId: summary`
|
|
429
|
+
at its first group membership; later memberships contain only its id, referring
|
|
430
|
+
to that definition. The first group has no selection priority. Descriptions
|
|
431
|
+
are neither sampled, truncated, nor synthesized. The active catalog supplies
|
|
432
|
+
each capability's id and effect; its selection controls remain in the decision
|
|
433
|
+
schema. It then selects a concrete capability only from that active scope. Scope
|
|
371
434
|
updates, capability binding, payload authoring, adapter execution, and
|
|
372
435
|
settlement use the same ledger and capability engine as delegated Worker
|
|
373
436
|
execution. Unknown, empty, invalid, repeated, or no-op scopes are rejected
|
|
@@ -492,6 +555,36 @@ they must not include secrets and they never act as instructions, new user
|
|
|
492
555
|
intent, or proof that the whole request completed. See
|
|
493
556
|
[tool-execution-result-evidence-contract.md](tool-execution-result-evidence-contract.md).
|
|
494
557
|
|
|
558
|
+
### Reporting a confirmed mutation
|
|
559
|
+
|
|
560
|
+
Use `successResult()` for ordinary successful observations. After the owning
|
|
561
|
+
plugin has confirmed a completed mutation, use `mutationSuccessResult()` to
|
|
562
|
+
preserve its receipt and add the Runtime's required `data.mutationEvidence: true`:
|
|
563
|
+
|
|
564
|
+
```ts
|
|
565
|
+
import { mutationSuccessResult } from "@abot-ai/runtime/plugin-sdk";
|
|
566
|
+
|
|
567
|
+
// apiReceipt is the result of a completed write already confirmed by this handler.
|
|
568
|
+
return mutationSuccessResult({
|
|
569
|
+
output: "The article was published.",
|
|
570
|
+
data: apiReceipt,
|
|
571
|
+
}, context.resultBudget);
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
The helper does not execute the operation or independently verify its effect.
|
|
575
|
+
Do not use it for a failed, ambiguous, pending, or no-op operation. It retains
|
|
576
|
+
the same JSON and result-size bounds as `successResult()`; a rejected receipt
|
|
577
|
+
returns a failure without asserting mutation evidence. The existing generic
|
|
578
|
+
helper does not infer a mutation from `ok`, `progress`, prose, or the presence of
|
|
579
|
+
arbitrary data. Explicit `actions`, `progress`, and other result fields remain
|
|
580
|
+
available to the owning plugin.
|
|
581
|
+
|
|
582
|
+
The adapter records operation outcome separately from observed effect.
|
|
583
|
+
For a `mutating` operation, `ok: true` without `mutationEvidence: true` is
|
|
584
|
+
classified as `mutation_evidence_missing`. The new helper supplies that marker
|
|
585
|
+
after the plugin has established the evidence; it does not change the Runtime's
|
|
586
|
+
classification rules or prove completion of the user's whole request.
|
|
587
|
+
|
|
495
588
|
### EXEC output storage
|
|
496
589
|
|
|
497
590
|
EXEC captures stdout and stderr in private files under its injected `stateDir`.
|
|
@@ -654,6 +747,54 @@ counts imply full-file coverage.
|
|
|
654
747
|
|
|
655
748
|
No concrete tool or skill mapping should be added anywhere under `src/runtime`.
|
|
656
749
|
|
|
750
|
+
### Native Windows plugin support
|
|
751
|
+
|
|
752
|
+
The native Windows group contains `capability-brief`, `code-outline`,
|
|
753
|
+
`document-reader`, `exec`, `filesystem`, `json-inspector`, `local-search`, `memory`, `web`,
|
|
754
|
+
`project-orientation`, `system-probe`, and `system`.
|
|
755
|
+
Each declares `win32` in its versioned
|
|
756
|
+
`ai.abot.compatibility` extension, alongside its existing Linux and macOS support.
|
|
757
|
+
Compatibility uses the Runtime process OS, not the browser or a paired computer.
|
|
758
|
+
A Windows-only plugin should declare only `win32`; other hosts will not load it.
|
|
759
|
+
|
|
760
|
+
On native Windows, SYSTEM provides `system_targets`, `system_command`,
|
|
761
|
+
`system_applications`, and `system_launch`. Commands run in local PowerShell and
|
|
762
|
+
retain existing approvals, cancellation, and protected output handling. Desktop
|
|
763
|
+
observation and input (`computer_*`) are excluded from the request catalog in
|
|
764
|
+
this phase. Linux/macOS Runtime and WSL/Docker Companion routes retain their
|
|
765
|
+
existing capabilities. This phase does not add screenshot OCR.
|
|
766
|
+
|
|
767
|
+
`system-probe` reports Windows load averages as unsupported instead of presenting
|
|
768
|
+
the OS's placeholder zeros as measured load. Its default disk probe uses the
|
|
769
|
+
Runtime installation's filesystem; an explicit path selects that path's volume.
|
|
770
|
+
|
|
771
|
+
`code-outline` uses the SDK's bounded file reader on Windows, with the same
|
|
772
|
+
authorized roots, parser and output limits as Linux/macOS. If safe reading is
|
|
773
|
+
unavailable, it reports the restriction explicitly and tells the model not to
|
|
774
|
+
retry or bypass it. See [Code Outline](../plugins/code-outline/README.md).
|
|
775
|
+
|
|
776
|
+
`document-reader` uses the SDK's bounded Windows reader for configured paths
|
|
777
|
+
and request attachments, with shared text, Office and PDF parsers and limits.
|
|
778
|
+
A blocked reader reports an explicit no-retry restriction.
|
|
779
|
+
See [Document Reader](../plugins/document-reader/README.md).
|
|
780
|
+
|
|
781
|
+
`json-inspector` uses the SDK's bounded Windows reader with the existing path,
|
|
782
|
+
UTF-8, size and summary limits. A blocked reader reports an explicit no-retry
|
|
783
|
+
restriction. See [JSON Inspector](../plugins/json-inspector/README.md).
|
|
784
|
+
|
|
785
|
+
`project-orientation` uses the SDK's bounded Windows reader for package
|
|
786
|
+
metadata and retains its existing directory-tree and result limits. Blocked
|
|
787
|
+
manifest reads return an explicit no-retry restriction.
|
|
788
|
+
See [Project Orientation](../plugins/project-orientation/README.md).
|
|
789
|
+
|
|
790
|
+
`local-search` uses native Windows ripgrep through a PowerShell/C# helper that
|
|
791
|
+
pins the selected path and owns the child process through a Job Object. Existing
|
|
792
|
+
query, output, timeout and cancellation limits still apply. A blocked helper
|
|
793
|
+
fails explicitly without a retry or policy bypass.
|
|
794
|
+
See [Local Search](../plugins/local-search/README.md).
|
|
795
|
+
|
|
796
|
+
Enabling manifests alone is not a validation step.
|
|
797
|
+
|
|
657
798
|
### Shared Computer access
|
|
658
799
|
|
|
659
800
|
Plugins that need host facilities can import the opt-in
|