@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,29 @@
|
|
|
1
|
+
# Local Search
|
|
2
|
+
|
|
3
|
+
Searches file names and file contents on Linux, macOS and native Windows using
|
|
4
|
+
bundled ripgrep. Paths remain relative to the configured agent work directory;
|
|
5
|
+
`workspace/...` selects configured workspace sources. Absolute paths and
|
|
6
|
+
request-specific roots use the same Runtime authorization checks.
|
|
7
|
+
|
|
8
|
+
The existing query modes, literal matching, 200-result ceiling, bounded streamed
|
|
9
|
+
records, output budget and ten-second search deadline apply on every platform.
|
|
10
|
+
Inherited ripgrep configuration is ignored. Search does not execute project
|
|
11
|
+
scripts or modify files. Directory links are not followed by ripgrep.
|
|
12
|
+
|
|
13
|
+
## Windows requirements
|
|
14
|
+
|
|
15
|
+
Built-in Windows PowerShell and its C# helper hold the selected path and its
|
|
16
|
+
ancestors open while the search runs. Their identities are checked before
|
|
17
|
+
starting ripgrep. Moving or replacing that path is temporarily blocked until
|
|
18
|
+
the search finishes; a selected individual file is also protected against
|
|
19
|
+
writes while it is being searched.
|
|
20
|
+
|
|
21
|
+
The helper uses the same Job Object mechanism as EXEC. Cancellation, timeout
|
|
22
|
+
and reaching the result limit terminate its child processes. This requires no
|
|
23
|
+
Companion, WSL, Docker, elevation, policy bypass or separately installed shell.
|
|
24
|
+
If policy blocks the helper, `local_search_windows_unavailable` tells the model
|
|
25
|
+
not to retry or bypass the restriction. Failure to retain the path authority
|
|
26
|
+
returns `local_search_authority_unavailable` and no partial results.
|
|
27
|
+
|
|
28
|
+
Linux retains its descriptor-based execution; macOS retains its existing
|
|
29
|
+
directory-authority bridge. Windows support does not change those paths.
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "local-search",
|
|
4
4
|
"version": "0.1.0",
|
|
5
|
-
"description": "Search filenames and
|
|
5
|
+
"description": "Search filenames and file contents within configured agent-work and workspace roots.",
|
|
6
6
|
"extensions": {
|
|
7
|
+
"ai.abot.compatibility": { "version": 1, "runtimePlatforms": ["linux", "darwin", "win32"] },
|
|
7
8
|
"ai.abot.runtime": {
|
|
8
9
|
"version": 1,
|
|
9
10
|
"entrypoint": "./src/index.cjs",
|
|
@@ -4,6 +4,8 @@ export type LocalSearchErrorCode =
|
|
|
4
4
|
| "local_search_result_encoding_unsupported"
|
|
5
5
|
| "local_search_result_invalid"
|
|
6
6
|
| "local_search_path_roundtrip_unsafe"
|
|
7
|
+
| "local_search_authority_unavailable"
|
|
8
|
+
| "local_search_windows_unavailable"
|
|
7
9
|
| "local_search_failed";
|
|
8
10
|
|
|
9
11
|
export class LocalSearchError extends Error {
|
|
@@ -8,6 +8,7 @@ import type {
|
|
|
8
8
|
} from "../../../src/plugin-sdk/index.js";
|
|
9
9
|
import { resolvePluginPath } from "../../../src/plugin-sdk/index.js";
|
|
10
10
|
|
|
11
|
+
import { openWindowsSearchAuthority } from "./windows-authority.js";
|
|
11
12
|
import { LocalSearchError } from "./errors.js";
|
|
12
13
|
import type { SearchDirectoryAuthority } from "./ripgrep-process.js";
|
|
13
14
|
|
|
@@ -164,6 +165,8 @@ export async function resolveSearchRoot(
|
|
|
164
165
|
requirePath: true,
|
|
165
166
|
allowedLocations: ["agent_work", "workspace"],
|
|
166
167
|
});
|
|
168
|
+
const needsWindowsSearchAuthority = process.platform === "win32";
|
|
169
|
+
if (needsWindowsSearchAuthority) return openWindowsSearchAuthority(target);
|
|
167
170
|
return openSearchAuthority(target);
|
|
168
171
|
}
|
|
169
172
|
|
|
@@ -5,10 +5,22 @@ import { rgPath } from "@vscode/ripgrep";
|
|
|
5
5
|
|
|
6
6
|
import { spawnDirectoryAuthorityCommand } from "../../../src/shared/directory-authority/index.js";
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
import type { WindowsSearchAuthority } from "./windows-authority.js";
|
|
9
|
+
import { spawnWindowsSearch } from "./windows-search-process.js";
|
|
10
|
+
import type { LocalSearchError } from "./errors.js";
|
|
11
|
+
|
|
12
|
+
export type SearchDirectoryAuthority =
|
|
13
|
+
| WindowsSearchAuthority
|
|
14
|
+
| Readonly<{
|
|
15
|
+
directoryPath: string;
|
|
16
|
+
directoryFd: number;
|
|
17
|
+
}>;
|
|
18
|
+
|
|
19
|
+
function isWindowsSearchAuthority(
|
|
20
|
+
authority?: SearchDirectoryAuthority,
|
|
21
|
+
): authority is WindowsSearchAuthority {
|
|
22
|
+
return authority !== undefined && "platform" in authority;
|
|
23
|
+
}
|
|
12
24
|
|
|
13
25
|
function controlledRipgrepEnvironment(): NodeJS.ProcessEnv {
|
|
14
26
|
const environment = { ...process.env };
|
|
@@ -37,14 +49,28 @@ function terminateAuthorityGroup(
|
|
|
37
49
|
}
|
|
38
50
|
}
|
|
39
51
|
|
|
52
|
+
type RipgrepInvocation = Readonly<{
|
|
53
|
+
child: ChildProcessByStdio<null, Readable, Readable>;
|
|
54
|
+
terminate(): void;
|
|
55
|
+
failureForExit?: (code: number | null | undefined) => LocalSearchError;
|
|
56
|
+
}>;
|
|
57
|
+
|
|
40
58
|
export function spawnRipgrepProcess(
|
|
41
59
|
args: readonly string[],
|
|
42
60
|
cwd: string,
|
|
43
61
|
stdinFd?: number,
|
|
44
62
|
directoryAuthority?: SearchDirectoryAuthority,
|
|
45
|
-
) {
|
|
63
|
+
): RipgrepInvocation {
|
|
46
64
|
const commandArgs = ["--no-config", ...args];
|
|
47
65
|
const env = controlledRipgrepEnvironment();
|
|
66
|
+
if (isWindowsSearchAuthority(directoryAuthority)) {
|
|
67
|
+
return spawnWindowsSearch({
|
|
68
|
+
authority: directoryAuthority,
|
|
69
|
+
command: rgPath,
|
|
70
|
+
args: commandArgs,
|
|
71
|
+
env,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
48
74
|
if (directoryAuthority) {
|
|
49
75
|
const child = spawnDirectoryAuthorityCommand({
|
|
50
76
|
...directoryAuthority,
|
|
@@ -134,7 +134,7 @@ async function runRipgrepBounded<T>(
|
|
|
134
134
|
let timedOut = false;
|
|
135
135
|
let aborted = false;
|
|
136
136
|
let parserError: unknown;
|
|
137
|
-
const { child, terminate } = spawnRipgrepProcess(
|
|
137
|
+
const { child, terminate, failureForExit } = spawnRipgrepProcess(
|
|
138
138
|
args,
|
|
139
139
|
cwd,
|
|
140
140
|
stdinFd,
|
|
@@ -194,7 +194,7 @@ async function runRipgrepBounded<T>(
|
|
|
194
194
|
});
|
|
195
195
|
// Always drain stderr so the child cannot block on its diagnostic pipe.
|
|
196
196
|
child.stderr.on("data", () => undefined);
|
|
197
|
-
child.on("error", (error) => settleFailure(error));
|
|
197
|
+
child.on("error", (error) => settleFailure(failureForExit?.(undefined) ?? error));
|
|
198
198
|
child.on("close", (code) => {
|
|
199
199
|
if (completed) return;
|
|
200
200
|
if (parserError) {
|
|
@@ -214,7 +214,7 @@ async function runRipgrepBounded<T>(
|
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
216
|
if (!stoppedAfterExtraResult && code !== 0 && code !== 1) {
|
|
217
|
-
settleFailure();
|
|
217
|
+
settleFailure(failureForExit?.(code));
|
|
218
218
|
return;
|
|
219
219
|
}
|
|
220
220
|
completed = true;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { open, realpath, type FileHandle } from "node:fs/promises";
|
|
2
|
+
import { win32 } from "node:path";
|
|
3
|
+
import type { BigIntStats } from "node:fs";
|
|
4
|
+
import type { ResolvedRuntimeToolPath } from "../../../src/plugin-sdk/index.js";
|
|
5
|
+
import { LocalSearchError } from "./errors.js";
|
|
6
|
+
import type { SearchRoot } from "./paths.js";
|
|
7
|
+
|
|
8
|
+
export type WindowsSearchIdentity = Readonly<{
|
|
9
|
+
device: string;
|
|
10
|
+
inode: string;
|
|
11
|
+
birthtimeNs: string;
|
|
12
|
+
}>;
|
|
13
|
+
export type WindowsSearchAuthority = Readonly<{
|
|
14
|
+
platform: "win32";
|
|
15
|
+
rootPath: string;
|
|
16
|
+
targetPath: string;
|
|
17
|
+
rootIdentity: WindowsSearchIdentity;
|
|
18
|
+
targetIdentity: WindowsSearchIdentity;
|
|
19
|
+
isFile: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
|
|
22
|
+
function identity(stats: BigIntStats): WindowsSearchIdentity {
|
|
23
|
+
return {
|
|
24
|
+
device: String(stats.dev),
|
|
25
|
+
inode: String(stats.ino),
|
|
26
|
+
birthtimeNs: String(stats.birthtimeNs),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function sameWindowsPath(left: string, right: string): boolean {
|
|
31
|
+
return (
|
|
32
|
+
win32.resolve(left).toLowerCase() === win32.resolve(right).toLowerCase()
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function windowsSearchAuthorityUnavailable(): LocalSearchError {
|
|
37
|
+
return new LocalSearchError(
|
|
38
|
+
"local_search_authority_unavailable",
|
|
39
|
+
"Local search could not keep the selected Windows path safely bound to its authorized root. No results were returned. Do not retry or bypass this restriction with another tool; ask the user to check the path and access permissions.",
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function openWindowsSearchAuthority(
|
|
44
|
+
target: ResolvedRuntimeToolPath,
|
|
45
|
+
): Promise<SearchRoot> {
|
|
46
|
+
const handles: FileHandle[] = [];
|
|
47
|
+
try {
|
|
48
|
+
const root = await open(target.rootPath, "r");
|
|
49
|
+
handles.push(root);
|
|
50
|
+
const selected = await open(target.absolutePath, "r");
|
|
51
|
+
handles.push(selected);
|
|
52
|
+
const [rootStats, selectedStats, rootPath, targetPath] = await Promise.all([
|
|
53
|
+
root.stat({ bigint: true }),
|
|
54
|
+
selected.stat({ bigint: true }),
|
|
55
|
+
realpath(target.rootPath),
|
|
56
|
+
realpath(target.absolutePath),
|
|
57
|
+
]);
|
|
58
|
+
if (!rootStats.isDirectory()) throw windowsSearchAuthorityUnavailable();
|
|
59
|
+
if (!sameWindowsPath(rootPath, target.rootPath))
|
|
60
|
+
throw windowsSearchAuthorityUnavailable();
|
|
61
|
+
if (!sameWindowsPath(targetPath, target.absolutePath))
|
|
62
|
+
throw windowsSearchAuthorityUnavailable();
|
|
63
|
+
if (!selectedStats.isFile() && !selectedStats.isDirectory()) {
|
|
64
|
+
throw new LocalSearchError(
|
|
65
|
+
"local_search_target_invalid",
|
|
66
|
+
"The selected search target must be a regular file or directory.",
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
const isFile = selectedStats.isFile();
|
|
70
|
+
return Object.freeze({
|
|
71
|
+
target,
|
|
72
|
+
isFile,
|
|
73
|
+
commandDirectory: isFile ? win32.dirname(targetPath) : targetPath,
|
|
74
|
+
commandTarget: isFile ? win32.basename(targetPath) : ".",
|
|
75
|
+
directoryAuthority: {
|
|
76
|
+
platform: "win32" as const,
|
|
77
|
+
rootPath,
|
|
78
|
+
targetPath,
|
|
79
|
+
rootIdentity: identity(rootStats),
|
|
80
|
+
targetIdentity: identity(selectedStats),
|
|
81
|
+
isFile,
|
|
82
|
+
},
|
|
83
|
+
close: async () => {
|
|
84
|
+
for (const handle of handles.splice(0)) await handle.close();
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
} catch (error) {
|
|
88
|
+
await Promise.all(handles.splice(0).map((handle) => handle.close()));
|
|
89
|
+
if (error instanceof LocalSearchError) throw error;
|
|
90
|
+
const code = (error as NodeJS.ErrnoException)?.code;
|
|
91
|
+
if (code === "ENOENT" || code === "ENOTDIR") {
|
|
92
|
+
throw new LocalSearchError(
|
|
93
|
+
"local_search_root_not_found",
|
|
94
|
+
"The selected logical search root does not exist.",
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
throw windowsSearchAuthorityUnavailable();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// The external search program uses paths, so pin every ancestor from the volume
|
|
2
|
+
// root. The ordinary SDK reader instead reads through handles relative to its root.
|
|
3
|
+
export const WINDOWS_SEARCH_LEASE = String.raw`
|
|
4
|
+
public static partial class AbotFilesystem {
|
|
5
|
+
sealed class SearchPathLease : IDisposable {
|
|
6
|
+
readonly List<SafeFileHandle> held = new List<SafeFileHandle>();
|
|
7
|
+
public readonly string Target;
|
|
8
|
+
public readonly bool IsFile;
|
|
9
|
+
public SearchPathLease(Dictionary<string,object> request) {
|
|
10
|
+
try {
|
|
11
|
+
Target = Path.GetFullPath(Text(request, "targetPath"));
|
|
12
|
+
string root = Path.GetFullPath(Text(request, "rootPath")).TrimEnd('\\');
|
|
13
|
+
if (!String.Equals(Target.TrimEnd('\\'), root, StringComparison.OrdinalIgnoreCase) &&
|
|
14
|
+
!Target.StartsWith(root + "\\", StringComparison.OrdinalIgnoreCase))
|
|
15
|
+
throw new FsFault("filesystem_invalid_path");
|
|
16
|
+
IsFile = (bool)request["isFile"];
|
|
17
|
+
string current = Path.GetPathRoot(Target);
|
|
18
|
+
var handle = OpenHandle(null, NativePath(current), true, 1, 0x80000000, 3);
|
|
19
|
+
held.Add(handle);
|
|
20
|
+
bool foundRoot = VerifyRoot(current, root, handle, request);
|
|
21
|
+
string rest = Target.Substring(current.Length).TrimEnd('\\');
|
|
22
|
+
string[] parts = rest.Length == 0 ? new string[0] : rest.Split('\\');
|
|
23
|
+
for (int i = 0; i < parts.Length; i++) {
|
|
24
|
+
ValidateComponent(parts[i]);
|
|
25
|
+
bool isFile = IsFile && i == parts.Length - 1;
|
|
26
|
+
handle = OpenHandle(handle, parts[i], !isFile, 1, 0x80000000, isFile ? 1u : 3u);
|
|
27
|
+
held.Add(handle);
|
|
28
|
+
current = Path.Combine(current, parts[i]);
|
|
29
|
+
if (!String.Equals(FinalPath(handle).TrimEnd('\\'), current.TrimEnd('\\'), StringComparison.OrdinalIgnoreCase))
|
|
30
|
+
throw new FsFault("filesystem_path_changed");
|
|
31
|
+
foundRoot |= VerifyRoot(current, root, handle, request);
|
|
32
|
+
}
|
|
33
|
+
if (!foundRoot || !MatchesIdentity(Identity(handle), request["targetIdentity"] as Dictionary<string,object>))
|
|
34
|
+
throw new FsFault("filesystem_path_changed");
|
|
35
|
+
} catch { Dispose(); throw; }
|
|
36
|
+
}
|
|
37
|
+
static bool VerifyRoot(string current, string root, SafeFileHandle handle, Dictionary<string,object> request) {
|
|
38
|
+
if (!String.Equals(current.TrimEnd('\\'), root, StringComparison.OrdinalIgnoreCase)) return false;
|
|
39
|
+
var expected = request["rootIdentity"] as Dictionary<string,object>;
|
|
40
|
+
if (expected == null || !MatchesIdentity(Identity(handle), expected)) throw new FsFault("filesystem_path_changed");
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
public void Dispose() {
|
|
44
|
+
for (int i = held.Count - 1; i >= 0; i--) held[i].Dispose();
|
|
45
|
+
held.Clear();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { spawn, type ChildProcessByStdio } from "node:child_process";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import type { Readable } from "node:stream";
|
|
4
|
+
import { WINDOWS_EXEC_JOB_SOURCE } from "../../../src/shared/windows-job-object.js";
|
|
5
|
+
import { LocalSearchError } from "./errors.js";
|
|
6
|
+
import {
|
|
7
|
+
windowsSearchAuthorityUnavailable,
|
|
8
|
+
type WindowsSearchAuthority,
|
|
9
|
+
} from "./windows-authority.js";
|
|
10
|
+
import { WINDOWS_SEARCH_SOURCE } from "./windows-search-script.js";
|
|
11
|
+
|
|
12
|
+
const BOOTSTRAP = [
|
|
13
|
+
"$ErrorActionPreference='Stop'",
|
|
14
|
+
"$ProgressPreference='SilentlyContinue'",
|
|
15
|
+
"if ($ExecutionContext.SessionState.LanguageMode -ne 'FullLanguage') { exit 126 }",
|
|
16
|
+
"$env:PSModulePath=[IO.Path]::Combine($PSHOME,'Modules')",
|
|
17
|
+
"try {",
|
|
18
|
+
"[Console]::InputEncoding=[Text.UTF8Encoding]::new($false)",
|
|
19
|
+
"$envelope=[Console]::In.ReadToEnd() | ConvertFrom-Json",
|
|
20
|
+
"Add-Type -TypeDefinition $envelope.jobSource",
|
|
21
|
+
"[AbotExecJob]::Attach()",
|
|
22
|
+
"Add-Type -ReferencedAssemblies @('System.Web.Extensions') -TypeDefinition $envelope.source",
|
|
23
|
+
"$result=[AbotFilesystem]::Search($envelope.request)",
|
|
24
|
+
"exit $result",
|
|
25
|
+
"} catch { exit 126 }",
|
|
26
|
+
].join(";\n");
|
|
27
|
+
|
|
28
|
+
function windowsSearchUnavailable(): LocalSearchError {
|
|
29
|
+
return new LocalSearchError(
|
|
30
|
+
"local_search_windows_unavailable",
|
|
31
|
+
"The Windows local-search helper is unavailable or blocked by computer policy. No results were returned. Do not retry or bypass this restriction with another tool; ask the user to check PowerShell/C# availability or contact their administrator.",
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function windowsSearchExitFailure(
|
|
36
|
+
code: number | null | undefined,
|
|
37
|
+
): LocalSearchError {
|
|
38
|
+
if (code === 125) return windowsSearchAuthorityUnavailable();
|
|
39
|
+
const helperUnavailable = code === 126 || code === undefined;
|
|
40
|
+
if (helperUnavailable) return windowsSearchUnavailable();
|
|
41
|
+
return new LocalSearchError(
|
|
42
|
+
"local_search_failed",
|
|
43
|
+
"Local search could not complete under the selected logical root.",
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function spawnWindowsSearch(
|
|
48
|
+
params: Readonly<{
|
|
49
|
+
authority: WindowsSearchAuthority;
|
|
50
|
+
command: string;
|
|
51
|
+
args: readonly string[];
|
|
52
|
+
env: NodeJS.ProcessEnv;
|
|
53
|
+
}>,
|
|
54
|
+
) {
|
|
55
|
+
const input = JSON.stringify({
|
|
56
|
+
source: WINDOWS_SEARCH_SOURCE,
|
|
57
|
+
jobSource: WINDOWS_EXEC_JOB_SOURCE,
|
|
58
|
+
request: JSON.stringify({
|
|
59
|
+
...params.authority,
|
|
60
|
+
command: params.command,
|
|
61
|
+
args: params.args,
|
|
62
|
+
}),
|
|
63
|
+
});
|
|
64
|
+
if (Buffer.byteLength(input) > 2 * 1024 * 1024)
|
|
65
|
+
throw windowsSearchUnavailable();
|
|
66
|
+
const executable = join(
|
|
67
|
+
process.env.SystemRoot ?? "C:\\Windows",
|
|
68
|
+
"System32",
|
|
69
|
+
"WindowsPowerShell",
|
|
70
|
+
"v1.0",
|
|
71
|
+
"powershell.exe",
|
|
72
|
+
);
|
|
73
|
+
const child = spawn(
|
|
74
|
+
executable,
|
|
75
|
+
["-NoLogo", "-NoProfile", "-NonInteractive", "-Command", BOOTSTRAP],
|
|
76
|
+
{
|
|
77
|
+
env: params.env,
|
|
78
|
+
windowsHide: true,
|
|
79
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
80
|
+
},
|
|
81
|
+
);
|
|
82
|
+
child.stdin.on("error", () => undefined);
|
|
83
|
+
child.stdin.end(input, "utf8");
|
|
84
|
+
return {
|
|
85
|
+
child: child as unknown as ChildProcessByStdio<null, Readable, Readable>,
|
|
86
|
+
terminate: () => {
|
|
87
|
+
child.kill("SIGKILL");
|
|
88
|
+
},
|
|
89
|
+
failureForExit: windowsSearchExitFailure,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { WINDOWS_FILESYSTEM_NATIVE } from "../../../src/shared/windows-file-io/native-script.js";
|
|
2
|
+
import { WINDOWS_FILESYSTEM_AUTHORITY } from "../../../src/shared/windows-file-io/authority-script.js";
|
|
3
|
+
|
|
4
|
+
import { WINDOWS_SEARCH_LEASE } from "./windows-search-lease.js";
|
|
5
|
+
|
|
6
|
+
const SEARCH_COMMAND = String.raw`
|
|
7
|
+
public static partial class AbotFilesystem {
|
|
8
|
+
static string QuoteSearchArgument(string value) {
|
|
9
|
+
var quoted = new StringBuilder("\"");
|
|
10
|
+
int slashes = 0;
|
|
11
|
+
foreach (char c in value) {
|
|
12
|
+
if (c == '\\') { slashes++; continue; }
|
|
13
|
+
if (c == '"') { quoted.Append('\\', slashes * 2 + 1); quoted.Append(c); slashes = 0; continue; }
|
|
14
|
+
quoted.Append('\\', slashes); slashes = 0; quoted.Append(c);
|
|
15
|
+
}
|
|
16
|
+
quoted.Append('\\', slashes * 2); quoted.Append('"');
|
|
17
|
+
return quoted.ToString();
|
|
18
|
+
}
|
|
19
|
+
public static int Search(string input) {
|
|
20
|
+
var json = new JavaScriptSerializer { MaxJsonLength = 2 * 1024 * 1024 };
|
|
21
|
+
try {
|
|
22
|
+
var request = json.Deserialize<Dictionary<string,object>>(input);
|
|
23
|
+
using (var lease = new SearchPathLease(request)) {
|
|
24
|
+
var args = (System.Collections.IEnumerable)request["args"];
|
|
25
|
+
var quoted = new List<string>();
|
|
26
|
+
foreach (object arg in args) quoted.Add(QuoteSearchArgument((string)arg));
|
|
27
|
+
var start = new System.Diagnostics.ProcessStartInfo {
|
|
28
|
+
FileName = Text(request, "command"), Arguments = String.Join(" ", quoted),
|
|
29
|
+
WorkingDirectory = lease.IsFile ? Path.GetDirectoryName(lease.Target) : lease.Target,
|
|
30
|
+
UseShellExecute = false, CreateNoWindow = true,
|
|
31
|
+
RedirectStandardInput = true, RedirectStandardOutput = true, RedirectStandardError = true
|
|
32
|
+
};
|
|
33
|
+
using (var process = System.Diagnostics.Process.Start(start)) {
|
|
34
|
+
process.StandardInput.Close();
|
|
35
|
+
var output = process.StandardOutput.BaseStream.CopyToAsync(Console.OpenStandardOutput());
|
|
36
|
+
var errors = process.StandardError.BaseStream.CopyToAsync(Console.OpenStandardError());
|
|
37
|
+
process.WaitForExit();
|
|
38
|
+
System.Threading.Tasks.Task.WaitAll(output, errors);
|
|
39
|
+
return process.ExitCode;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
} catch { return 125; }
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
`;
|
|
46
|
+
|
|
47
|
+
export const WINDOWS_SEARCH_SOURCE = [
|
|
48
|
+
WINDOWS_FILESYSTEM_NATIVE,
|
|
49
|
+
WINDOWS_FILESYSTEM_AUTHORITY,
|
|
50
|
+
WINDOWS_SEARCH_LEASE,
|
|
51
|
+
SEARCH_COMMAND,
|
|
52
|
+
].join("\n");
|