@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
|
@@ -8,6 +8,14 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
8
8
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
9
9
|
var __getProtoOf = Object.getPrototypeOf;
|
|
10
10
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __esm = (fn, res, err) => function __init() {
|
|
12
|
+
if (err) throw err[0];
|
|
13
|
+
try {
|
|
14
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
15
|
+
} catch (e) {
|
|
16
|
+
throw err = [e], e;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
11
19
|
var __export = (target, all) => {
|
|
12
20
|
for (var name in all)
|
|
13
21
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -30,13 +38,242 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
30
38
|
));
|
|
31
39
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
40
|
|
|
41
|
+
// src/shared/windows-file-io/native-script.ts
|
|
42
|
+
var WINDOWS_FILESYSTEM_NATIVE;
|
|
43
|
+
var init_native_script = __esm({
|
|
44
|
+
"src/shared/windows-file-io/native-script.ts"() {
|
|
45
|
+
"use strict";
|
|
46
|
+
WINDOWS_FILESYSTEM_NATIVE = String.raw`
|
|
47
|
+
using System;
|
|
48
|
+
using System.IO;
|
|
49
|
+
using System.Text;
|
|
50
|
+
using System.Linq;
|
|
51
|
+
using System.Collections.Generic;
|
|
52
|
+
using System.ComponentModel;
|
|
53
|
+
using System.Runtime.InteropServices;
|
|
54
|
+
using System.Security.AccessControl;
|
|
55
|
+
using System.Security.Principal;
|
|
56
|
+
using System.Web.Script.Serialization;
|
|
57
|
+
using Microsoft.Win32.SafeHandles;
|
|
58
|
+
|
|
59
|
+
public sealed class FsFault : Exception {
|
|
60
|
+
public readonly string Code;
|
|
61
|
+
public FsFault(string code) : base(code) { Code = code; }
|
|
62
|
+
}
|
|
63
|
+
public static partial class AbotFilesystem {
|
|
64
|
+
[StructLayout(LayoutKind.Sequential)] struct UnicodeString { public ushort Length, MaximumLength; public IntPtr Buffer; }
|
|
65
|
+
[StructLayout(LayoutKind.Sequential)] struct ObjectAttributes {
|
|
66
|
+
public int Length; public IntPtr Root, Name; public uint Attributes; public IntPtr Security, Qos;
|
|
67
|
+
}
|
|
68
|
+
[StructLayout(LayoutKind.Sequential)] struct IoStatus { public IntPtr Status, Information; }
|
|
69
|
+
[StructLayout(LayoutKind.Sequential)] struct BasicInfo {
|
|
70
|
+
public long Created, Accessed, Modified, Changed; public uint Attributes;
|
|
71
|
+
}
|
|
72
|
+
[StructLayout(LayoutKind.Sequential)] struct FileInfo {
|
|
73
|
+
public uint Attributes; public System.Runtime.InteropServices.ComTypes.FILETIME Created, Accessed, Modified;
|
|
74
|
+
public uint Volume, SizeHigh, SizeLow, Links, IndexHigh, IndexLow;
|
|
75
|
+
}
|
|
76
|
+
[DllImport("ntdll.dll")] static extern int NtCreateFile(out SafeFileHandle file, uint access,
|
|
77
|
+
ref ObjectAttributes attributes, out IoStatus status, IntPtr allocation, uint fileAttributes,
|
|
78
|
+
uint share, uint disposition, uint options, IntPtr ea, uint eaLength);
|
|
79
|
+
[DllImport("ntdll.dll")] static extern uint RtlNtStatusToDosError(int status);
|
|
80
|
+
[DllImport("ntdll.dll")] static extern int NtSetInformationFile(SafeFileHandle file,
|
|
81
|
+
out IoStatus status, IntPtr info, uint length, int kind);
|
|
82
|
+
[DllImport("kernel32.dll", SetLastError=true)] static extern bool GetFileInformationByHandle(SafeFileHandle file, out FileInfo info);
|
|
83
|
+
[DllImport("kernel32.dll", SetLastError=true)] static extern bool GetFileInformationByHandleEx(SafeFileHandle file, int kind, IntPtr data, uint length);
|
|
84
|
+
[DllImport("kernel32.dll", SetLastError=true)] static extern bool SetFileInformationByHandle(SafeFileHandle file, int kind, ref BasicInfo info, uint length);
|
|
85
|
+
[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)] static extern uint GetFinalPathNameByHandle(SafeFileHandle file, StringBuilder name, uint length, uint flags);
|
|
86
|
+
[DllImport("kernel32.dll", SetLastError=true)] static extern bool SetFilePointerEx(SafeFileHandle file, long position, out long result, uint method);
|
|
87
|
+
[DllImport("kernel32.dll", SetLastError=true)] static extern bool ReadFile(SafeFileHandle file, byte[] bytes, uint count, out uint read, IntPtr overlapped);
|
|
88
|
+
[DllImport("kernel32.dll", SetLastError=true)] static extern bool WriteFile(SafeFileHandle file, byte[] bytes, uint count, out uint written, IntPtr overlapped);
|
|
89
|
+
[DllImport("kernel32.dll", SetLastError=true)] static extern bool FlushFileBuffers(SafeFileHandle file);
|
|
90
|
+
[DllImport("advapi32.dll")] static extern uint GetSecurityInfo(SafeFileHandle file, int kind, uint information,
|
|
91
|
+
out IntPtr owner, out IntPtr group, out IntPtr dacl, out IntPtr sacl, out IntPtr descriptor);
|
|
92
|
+
[DllImport("advapi32.dll")] static extern uint SetSecurityInfo(SafeFileHandle file, int kind, uint information,
|
|
93
|
+
IntPtr owner, IntPtr group, IntPtr dacl, IntPtr sacl);
|
|
94
|
+
[DllImport("advapi32.dll", SetLastError=true)] static extern bool GetSecurityDescriptorControl(IntPtr descriptor, out ushort control, out uint revision);
|
|
95
|
+
[DllImport("kernel32.dll")] static extern IntPtr LocalFree(IntPtr value);
|
|
96
|
+
|
|
97
|
+
static void Check(bool success) { if (!success) NativeFailure((uint)Marshal.GetLastWin32Error()); }
|
|
98
|
+
static bool IsNotDirectoryError(uint code) { return code == 267; } // ERROR_DIRECTORY
|
|
99
|
+
static void NativeFailure(uint code) {
|
|
100
|
+
if (IsNotDirectoryError(code)) throw new FsFault("not_a_directory");
|
|
101
|
+
if (code == 2 || code == 3) throw new FsFault("file_not_found");
|
|
102
|
+
if (code == 80 || code == 183) throw new FsFault("filesystem_target_changed");
|
|
103
|
+
if (code == 5 || code == 32 || code == 33) throw new FsFault("filesystem_access_denied");
|
|
104
|
+
throw new FsFault("filesystem_native_operation_failed");
|
|
105
|
+
}
|
|
106
|
+
static void CheckNt(int status) { if (status < 0) NativeFailure(RtlNtStatusToDosError(status)); }
|
|
107
|
+
static SafeFileHandle OpenHandle(SafeFileHandle root, string name, bool directory,
|
|
108
|
+
uint disposition, uint access, uint share, byte[] securityDescriptor = null, bool deleteOnClose = false) {
|
|
109
|
+
IntPtr text = Marshal.StringToHGlobalUni(name), unicodePointer = IntPtr.Zero, securityPointer = IntPtr.Zero;
|
|
110
|
+
try {
|
|
111
|
+
int length = Encoding.Unicode.GetByteCount(name);
|
|
112
|
+
if (length > 65532) throw new FsFault("filesystem_invalid_path");
|
|
113
|
+
UnicodeString unicode = new UnicodeString { Length=(ushort)length, MaximumLength=(ushort)(length+2), Buffer=text };
|
|
114
|
+
unicodePointer = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(UnicodeString)));
|
|
115
|
+
Marshal.StructureToPtr(unicode, unicodePointer, false);
|
|
116
|
+
if (securityDescriptor != null) {
|
|
117
|
+
securityPointer = Marshal.AllocHGlobal(securityDescriptor.Length);
|
|
118
|
+
Marshal.Copy(securityDescriptor, 0, securityPointer, securityDescriptor.Length);
|
|
119
|
+
}
|
|
120
|
+
ObjectAttributes attributes = new ObjectAttributes {
|
|
121
|
+
Length=Marshal.SizeOf(typeof(ObjectAttributes)), Root=root == null ? IntPtr.Zero : root.DangerousGetHandle(),
|
|
122
|
+
Name=unicodePointer, Attributes=0x40, Security=securityPointer
|
|
123
|
+
};
|
|
124
|
+
SafeFileHandle file;
|
|
125
|
+
IoStatus status;
|
|
126
|
+
int result = NtCreateFile(out file, access | 0x100000, ref attributes, out status,
|
|
127
|
+
IntPtr.Zero, 0x80, share, disposition, 0x200020u | (directory ? 1u : 0x40u) | (deleteOnClose ? 0x1000u : 0u), IntPtr.Zero, 0);
|
|
128
|
+
if (result < 0) { if (file != null) file.Dispose(); CheckNt(result); }
|
|
129
|
+
try {
|
|
130
|
+
FileInfo info; Check(GetFileInformationByHandle(file, out info));
|
|
131
|
+
if ((info.Attributes & 0x400) != 0) throw new FsFault("filesystem_path_changed");
|
|
132
|
+
if (((info.Attributes & 0x10) != 0) != directory) throw new FsFault("filesystem_path_changed");
|
|
133
|
+
return file;
|
|
134
|
+
} catch { file.Dispose(); throw; }
|
|
135
|
+
} finally {
|
|
136
|
+
if (securityPointer != IntPtr.Zero) Marshal.FreeHGlobal(securityPointer);
|
|
137
|
+
if (unicodePointer != IntPtr.Zero) Marshal.FreeHGlobal(unicodePointer);
|
|
138
|
+
Marshal.FreeHGlobal(text);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
static BasicInfo Basic(SafeFileHandle file) {
|
|
142
|
+
IntPtr buffer = Marshal.AllocHGlobal(40);
|
|
143
|
+
try { Check(GetFileInformationByHandleEx(file, 0, buffer, 40)); return (BasicInfo)Marshal.PtrToStructure(buffer, typeof(BasicInfo)); }
|
|
144
|
+
finally { Marshal.FreeHGlobal(buffer); }
|
|
145
|
+
}
|
|
146
|
+
static Dictionary<string,object> Record(params object[] pairs) {
|
|
147
|
+
var result = new Dictionary<string,object>();
|
|
148
|
+
for (int i=0;i<pairs.Length;i+=2) result.Add((string)pairs[i], pairs[i+1]);
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
static string Text(Dictionary<string,object> request, string key) {
|
|
152
|
+
object value;
|
|
153
|
+
if (!request.TryGetValue(key, out value) || !(value is string)) throw new FsFault("filesystem_invalid_request");
|
|
154
|
+
return (string)value;
|
|
155
|
+
}
|
|
156
|
+
static int Limit(Dictionary<string,object> request, string key, int maximum) {
|
|
157
|
+
object value;
|
|
158
|
+
if (!request.TryGetValue(key, out value) || !(value is int)) throw new FsFault("filesystem_invalid_request");
|
|
159
|
+
int number = (int)value;
|
|
160
|
+
if (number < 0 || number > maximum) throw new FsFault("filesystem_invalid_request");
|
|
161
|
+
return number;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
`;
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
// src/shared/windows-file-io/authority-script.ts
|
|
169
|
+
var WINDOWS_FILESYSTEM_AUTHORITY;
|
|
170
|
+
var init_authority_script = __esm({
|
|
171
|
+
"src/shared/windows-file-io/authority-script.ts"() {
|
|
172
|
+
"use strict";
|
|
173
|
+
WINDOWS_FILESYSTEM_AUTHORITY = String.raw`
|
|
174
|
+
public static partial class AbotFilesystem {
|
|
175
|
+
static string NativePath(string path) {
|
|
176
|
+
string full = Path.GetFullPath(path);
|
|
177
|
+
if (full.StartsWith(@"\\?\") || full.StartsWith(@"\\.\")) throw new FsFault("filesystem_invalid_path");
|
|
178
|
+
if (full.StartsWith(@"\\")) return @"\??\UNC\" + full.Substring(2);
|
|
179
|
+
if (full.Length < 3 || full[1] != ':' || full[2] != '\\') throw new FsFault("filesystem_invalid_path");
|
|
180
|
+
return @"\??\" + full;
|
|
181
|
+
}
|
|
182
|
+
static string FinalPath(SafeFileHandle handle) {
|
|
183
|
+
var value = new StringBuilder(32768);
|
|
184
|
+
uint length = GetFinalPathNameByHandle(handle, value, (uint)value.Capacity, 0);
|
|
185
|
+
Check(length != 0);
|
|
186
|
+
if (length >= value.Capacity) throw new FsFault("filesystem_invalid_path");
|
|
187
|
+
string path = value.ToString();
|
|
188
|
+
if (path.StartsWith(@"\\?\UNC\")) return @"\\" + path.Substring(8);
|
|
189
|
+
if (path.StartsWith(@"\\?\")) return path.Substring(4);
|
|
190
|
+
throw new FsFault("filesystem_path_changed");
|
|
191
|
+
}
|
|
192
|
+
static SafeFileHandle OpenRoot(Dictionary<string,object> request) {
|
|
193
|
+
string path = Path.GetFullPath(Text(request, "rootPath"));
|
|
194
|
+
SafeFileHandle root = OpenHandle(null, NativePath(path), true, 1, 0x80000000, 7);
|
|
195
|
+
try {
|
|
196
|
+
if (!String.Equals(FinalPath(root).TrimEnd('\\'), path.TrimEnd('\\'), StringComparison.OrdinalIgnoreCase))
|
|
197
|
+
throw new FsFault("filesystem_path_changed");
|
|
198
|
+
var expected = request["rootIdentity"] as Dictionary<string,object>;
|
|
199
|
+
if (expected == null || !MatchesIdentity(Identity(root), expected)) throw new FsFault("filesystem_path_changed");
|
|
200
|
+
return root;
|
|
201
|
+
} catch { root.Dispose(); throw; }
|
|
202
|
+
}
|
|
203
|
+
static string[] Components(Dictionary<string,object> request) {
|
|
204
|
+
string relative = Text(request, "relativePath");
|
|
205
|
+
if (relative == "") return new string[0];
|
|
206
|
+
string[] parts = relative.Split('/');
|
|
207
|
+
foreach (string part in parts) ValidateComponent(part);
|
|
208
|
+
return parts;
|
|
209
|
+
}
|
|
210
|
+
static void ValidateComponent(string name) {
|
|
211
|
+
if (name.Length == 0 || name == "." || name == "..") throw new FsFault("filesystem_invalid_path");
|
|
212
|
+
if (name.EndsWith(".") || name.EndsWith(" ")) throw new FsFault("filesystem_invalid_path");
|
|
213
|
+
foreach (char c in name) {
|
|
214
|
+
if (c < 32 || "\\/:*?\"<>|".IndexOf(c) >= 0) throw new FsFault("filesystem_invalid_path");
|
|
215
|
+
}
|
|
216
|
+
string stem = name.Split('.')[0].ToUpperInvariant();
|
|
217
|
+
if (stem == "CON" || stem == "PRN" || stem == "AUX" || stem == "NUL" ||
|
|
218
|
+
stem == "CONIN$" || stem == "CONOUT$") throw new FsFault("filesystem_invalid_path");
|
|
219
|
+
if (stem.Length == 4 && (stem.StartsWith("COM") || stem.StartsWith("LPT")) &&
|
|
220
|
+
"123456789\u00b9\u00b2\u00b3".IndexOf(stem[3]) >= 0) throw new FsFault("filesystem_invalid_path");
|
|
221
|
+
}
|
|
222
|
+
sealed class DirectoryChain : IDisposable {
|
|
223
|
+
public readonly SafeFileHandle Root;
|
|
224
|
+
readonly List<SafeFileHandle> children = new List<SafeFileHandle>();
|
|
225
|
+
public SafeFileHandle Current { get { return children.Count == 0 ? Root : children[children.Count-1]; } }
|
|
226
|
+
public DirectoryChain(Dictionary<string,object> request) { Root = OpenRoot(request); }
|
|
227
|
+
public void Walk(string[] parts, int count, bool create) {
|
|
228
|
+
for (int i=0;i<count;i++) children.Add(OpenHandle(Current, parts[i], true, create ? 3u : 1u, 0x80000000, 7));
|
|
229
|
+
}
|
|
230
|
+
public void Dispose() { for (int i=children.Count-1;i>=0;i--) children[i].Dispose(); Root.Dispose(); }
|
|
231
|
+
}
|
|
232
|
+
static ulong FileId(FileInfo info) {
|
|
233
|
+
ulong id=((ulong)info.IndexHigh << 32) | info.IndexLow;
|
|
234
|
+
if (id == 0) throw new FsFault("filesystem_safe_io_unsupported");
|
|
235
|
+
return id;
|
|
236
|
+
}
|
|
237
|
+
static Dictionary<string,object> Identity(SafeFileHandle file) {
|
|
238
|
+
FileInfo info; Check(GetFileInformationByHandle(file, out info));
|
|
239
|
+
BasicInfo basic = Basic(file);
|
|
240
|
+
return Record("device", info.Volume.ToString(), "inode", FileId(info).ToString(),
|
|
241
|
+
"birthtimeNs", ((basic.Created - 116444736000000000L) * 100L).ToString());
|
|
242
|
+
}
|
|
243
|
+
static bool MatchesIdentity(Dictionary<string,object> left, Dictionary<string,object> right) {
|
|
244
|
+
foreach (string key in new [] {"device", "inode", "birthtimeNs"}) {
|
|
245
|
+
if (!right.ContainsKey(key) || !Object.Equals(left[key], right[key])) return false;
|
|
246
|
+
}
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
static Dictionary<string,object> Metadata(SafeFileHandle file) {
|
|
250
|
+
FileInfo info; Check(GetFileInformationByHandle(file, out info));
|
|
251
|
+
BasicInfo basic = Basic(file);
|
|
252
|
+
ulong size = ((ulong)info.SizeHigh << 32) | info.SizeLow;
|
|
253
|
+
if (size > 9007199254740991UL) throw new FsFault("file_too_large");
|
|
254
|
+
return Record("device", info.Volume.ToString(), "inode", FileId(info).ToString(),
|
|
255
|
+
"size", (long)size, "mode", (basic.Attributes & 1) != 0 ? 292 : 438,
|
|
256
|
+
"modifiedNs", ((basic.Modified - 116444736000000000L) * 100L).ToString(),
|
|
257
|
+
"changedNs", ((basic.Changed - 116444736000000000L) * 100L).ToString());
|
|
258
|
+
}
|
|
259
|
+
static bool SameMetadata(Dictionary<string,object> left, Dictionary<string,object> right) {
|
|
260
|
+
foreach (string key in new [] {"device", "inode", "size", "mode", "modifiedNs", "changedNs"}) {
|
|
261
|
+
if (!right.ContainsKey(key) || Convert.ToString(left[key]) != Convert.ToString(right[key])) return false;
|
|
262
|
+
}
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
`;
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
|
|
33
270
|
// plugins/local-search/source/index.ts
|
|
34
271
|
var index_exports = {};
|
|
35
272
|
__export(index_exports, {
|
|
36
273
|
default: () => index_default
|
|
37
274
|
});
|
|
38
275
|
module.exports = __toCommonJS(index_exports);
|
|
39
|
-
var
|
|
276
|
+
var import_node_path5 = require("node:path");
|
|
40
277
|
|
|
41
278
|
// src/plugin-sdk/bounds.ts
|
|
42
279
|
function sanitizeJsonText(value) {
|
|
@@ -346,8 +583,85 @@ function budgetSearchOutput(query, mode, candidates, sourceTruncated, fitsSerial
|
|
|
346
583
|
|
|
347
584
|
// plugins/local-search/source/paths.ts
|
|
348
585
|
var import_node_fs = require("node:fs");
|
|
586
|
+
var import_promises2 = require("node:fs/promises");
|
|
587
|
+
var import_node_path2 = __toESM(require("node:path"), 1);
|
|
588
|
+
|
|
589
|
+
// plugins/local-search/source/windows-authority.ts
|
|
349
590
|
var import_promises = require("node:fs/promises");
|
|
350
|
-
var import_node_path =
|
|
591
|
+
var import_node_path = require("node:path");
|
|
592
|
+
function identity(stats) {
|
|
593
|
+
return {
|
|
594
|
+
device: String(stats.dev),
|
|
595
|
+
inode: String(stats.ino),
|
|
596
|
+
birthtimeNs: String(stats.birthtimeNs)
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
function sameWindowsPath(left, right) {
|
|
600
|
+
return import_node_path.win32.resolve(left).toLowerCase() === import_node_path.win32.resolve(right).toLowerCase();
|
|
601
|
+
}
|
|
602
|
+
function windowsSearchAuthorityUnavailable() {
|
|
603
|
+
return new LocalSearchError(
|
|
604
|
+
"local_search_authority_unavailable",
|
|
605
|
+
"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."
|
|
606
|
+
);
|
|
607
|
+
}
|
|
608
|
+
async function openWindowsSearchAuthority(target) {
|
|
609
|
+
const handles = [];
|
|
610
|
+
try {
|
|
611
|
+
const root = await (0, import_promises.open)(target.rootPath, "r");
|
|
612
|
+
handles.push(root);
|
|
613
|
+
const selected = await (0, import_promises.open)(target.absolutePath, "r");
|
|
614
|
+
handles.push(selected);
|
|
615
|
+
const [rootStats, selectedStats, rootPath, targetPath] = await Promise.all([
|
|
616
|
+
root.stat({ bigint: true }),
|
|
617
|
+
selected.stat({ bigint: true }),
|
|
618
|
+
(0, import_promises.realpath)(target.rootPath),
|
|
619
|
+
(0, import_promises.realpath)(target.absolutePath)
|
|
620
|
+
]);
|
|
621
|
+
if (!rootStats.isDirectory()) throw windowsSearchAuthorityUnavailable();
|
|
622
|
+
if (!sameWindowsPath(rootPath, target.rootPath))
|
|
623
|
+
throw windowsSearchAuthorityUnavailable();
|
|
624
|
+
if (!sameWindowsPath(targetPath, target.absolutePath))
|
|
625
|
+
throw windowsSearchAuthorityUnavailable();
|
|
626
|
+
if (!selectedStats.isFile() && !selectedStats.isDirectory()) {
|
|
627
|
+
throw new LocalSearchError(
|
|
628
|
+
"local_search_target_invalid",
|
|
629
|
+
"The selected search target must be a regular file or directory."
|
|
630
|
+
);
|
|
631
|
+
}
|
|
632
|
+
const isFile = selectedStats.isFile();
|
|
633
|
+
return Object.freeze({
|
|
634
|
+
target,
|
|
635
|
+
isFile,
|
|
636
|
+
commandDirectory: isFile ? import_node_path.win32.dirname(targetPath) : targetPath,
|
|
637
|
+
commandTarget: isFile ? import_node_path.win32.basename(targetPath) : ".",
|
|
638
|
+
directoryAuthority: {
|
|
639
|
+
platform: "win32",
|
|
640
|
+
rootPath,
|
|
641
|
+
targetPath,
|
|
642
|
+
rootIdentity: identity(rootStats),
|
|
643
|
+
targetIdentity: identity(selectedStats),
|
|
644
|
+
isFile
|
|
645
|
+
},
|
|
646
|
+
close: async () => {
|
|
647
|
+
for (const handle of handles.splice(0)) await handle.close();
|
|
648
|
+
}
|
|
649
|
+
});
|
|
650
|
+
} catch (error) {
|
|
651
|
+
await Promise.all(handles.splice(0).map((handle) => handle.close()));
|
|
652
|
+
if (error instanceof LocalSearchError) throw error;
|
|
653
|
+
const code = error?.code;
|
|
654
|
+
if (code === "ENOENT" || code === "ENOTDIR") {
|
|
655
|
+
throw new LocalSearchError(
|
|
656
|
+
"local_search_root_not_found",
|
|
657
|
+
"The selected logical search root does not exist."
|
|
658
|
+
);
|
|
659
|
+
}
|
|
660
|
+
throw windowsSearchAuthorityUnavailable();
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
// plugins/local-search/source/paths.ts
|
|
351
665
|
function fsCode(error) {
|
|
352
666
|
return error && typeof error === "object" && "code" in error ? String(error.code) : void 0;
|
|
353
667
|
}
|
|
@@ -355,8 +669,8 @@ function sameIdentity(left, right) {
|
|
|
355
669
|
return left.dev === right.dev && left.ino === right.ino && left.isFile() === right.isFile() && left.isDirectory() === right.isDirectory();
|
|
356
670
|
}
|
|
357
671
|
function isWithinRoot(root, target) {
|
|
358
|
-
const relative =
|
|
359
|
-
return relative === "" || relative !== ".." && !relative.startsWith(`..${
|
|
672
|
+
const relative = import_node_path2.default.relative(root, target);
|
|
673
|
+
return relative === "" || relative !== ".." && !relative.startsWith(`..${import_node_path2.default.sep}`) && !import_node_path2.default.isAbsolute(relative);
|
|
360
674
|
}
|
|
361
675
|
function authorityUnavailable() {
|
|
362
676
|
return new LocalSearchError(
|
|
@@ -376,7 +690,7 @@ async function openSearchAuthority(target) {
|
|
|
376
690
|
let handle;
|
|
377
691
|
let targetOpened = false;
|
|
378
692
|
try {
|
|
379
|
-
handle = await (0,
|
|
693
|
+
handle = await (0, import_promises2.open)(
|
|
380
694
|
target.absolutePath,
|
|
381
695
|
import_node_fs.constants.O_RDONLY | import_node_fs.constants.O_NOFOLLOW | import_node_fs.constants.O_NONBLOCK
|
|
382
696
|
);
|
|
@@ -389,15 +703,15 @@ async function openSearchAuthority(target) {
|
|
|
389
703
|
);
|
|
390
704
|
}
|
|
391
705
|
const [canonicalRoot, canonicalTarget] = await Promise.all([
|
|
392
|
-
(0,
|
|
393
|
-
(0,
|
|
706
|
+
(0, import_promises2.realpath)(target.rootPath),
|
|
707
|
+
(0, import_promises2.realpath)(target.absolutePath)
|
|
394
708
|
]);
|
|
395
|
-
if (
|
|
709
|
+
if (import_node_path2.default.resolve(canonicalRoot) !== import_node_path2.default.resolve(target.rootPath) || import_node_path2.default.resolve(canonicalTarget) !== import_node_path2.default.resolve(target.absolutePath) || !isWithinRoot(canonicalRoot, canonicalTarget)) {
|
|
396
710
|
throw authorityUnavailable();
|
|
397
711
|
}
|
|
398
712
|
const [pathIdentity, descriptorIdentity] = await Promise.all([
|
|
399
|
-
(0,
|
|
400
|
-
process.platform === "linux" ? (0,
|
|
713
|
+
(0, import_promises2.stat)(canonicalTarget, { bigint: true }),
|
|
714
|
+
process.platform === "linux" ? (0, import_promises2.stat)(`/proc/self/fd/${handle.fd}`, { bigint: true }) : handle.stat({ bigint: true })
|
|
401
715
|
]);
|
|
402
716
|
if (!sameIdentity(observed, pathIdentity) || !sameIdentity(observed, descriptorIdentity)) {
|
|
403
717
|
throw authorityUnavailable();
|
|
@@ -448,11 +762,13 @@ async function resolveSearchRoot(context, rawPath) {
|
|
|
448
762
|
requirePath: true,
|
|
449
763
|
allowedLocations: ["agent_work", "workspace"]
|
|
450
764
|
});
|
|
765
|
+
const needsWindowsSearchAuthority = process.platform === "win32";
|
|
766
|
+
if (needsWindowsSearchAuthority) return openWindowsSearchAuthority(target);
|
|
451
767
|
return openSearchAuthority(target);
|
|
452
768
|
}
|
|
453
769
|
function normalizeRelativeResult(value) {
|
|
454
|
-
const normalized =
|
|
455
|
-
if (!normalized || normalized.includes("\\") ||
|
|
770
|
+
const normalized = import_node_path2.default.sep === "/" ? value : value.replaceAll(import_node_path2.default.sep, "/");
|
|
771
|
+
if (!normalized || normalized.includes("\\") || import_node_path2.default.isAbsolute(normalized) || /^[A-Za-z]:[\\/]/u.test(normalized) || /^[\\/]{2}/u.test(normalized)) {
|
|
456
772
|
throw new LocalSearchError(
|
|
457
773
|
"local_search_path_roundtrip_unsafe",
|
|
458
774
|
"Local search found a path that cannot be reused as a logical path."
|
|
@@ -461,7 +777,7 @@ function normalizeRelativeResult(value) {
|
|
|
461
777
|
return normalized.replace(/^\.\/+/, "");
|
|
462
778
|
}
|
|
463
779
|
function qualifyMatchPath(context, root, rawPath) {
|
|
464
|
-
const logical = root.isFile ? root.target.logicalPath : root.target.logicalPath === "." ? normalizeRelativeResult(rawPath) :
|
|
780
|
+
const logical = root.isFile ? root.target.logicalPath : root.target.logicalPath === "." ? normalizeRelativeResult(rawPath) : import_node_path2.default.posix.join(
|
|
465
781
|
root.target.logicalPath,
|
|
466
782
|
normalizeRelativeResult(rawPath)
|
|
467
783
|
);
|
|
@@ -469,8 +785,8 @@ function qualifyMatchPath(context, root, rawPath) {
|
|
|
469
785
|
requirePath: true,
|
|
470
786
|
allowedLocations: ["agent_work", "workspace"]
|
|
471
787
|
});
|
|
472
|
-
const sourceAbsolutePath = root.isFile ? root.target.absolutePath :
|
|
473
|
-
if (roundTrip.logicalPath !== logical ||
|
|
788
|
+
const sourceAbsolutePath = root.isFile ? root.target.absolutePath : import_node_path2.default.resolve(root.target.absolutePath, rawPath);
|
|
789
|
+
if (roundTrip.logicalPath !== logical || import_node_path2.default.resolve(roundTrip.absolutePath) !== import_node_path2.default.resolve(sourceAbsolutePath)) {
|
|
474
790
|
throw new LocalSearchError(
|
|
475
791
|
"local_search_path_roundtrip_unsafe",
|
|
476
792
|
"Local search found a path that cannot be reused as a logical path."
|
|
@@ -483,7 +799,7 @@ function qualifyMatchPath(context, root, rawPath) {
|
|
|
483
799
|
var import_node_util = require("node:util");
|
|
484
800
|
|
|
485
801
|
// plugins/local-search/source/ripgrep-process.ts
|
|
486
|
-
var
|
|
802
|
+
var import_node_child_process3 = require("node:child_process");
|
|
487
803
|
var import_ripgrep = require("@vscode/ripgrep");
|
|
488
804
|
|
|
489
805
|
// src/shared/directory-authority/command.ts
|
|
@@ -562,9 +878,9 @@ function directoryAuthorityBootstrap(mode, messageLimit, task) {
|
|
|
562
878
|
writeResponse(1, encoded);
|
|
563
879
|
}
|
|
564
880
|
function runCommand(input) {
|
|
565
|
-
const { spawn:
|
|
881
|
+
const { spawn: spawn4 } = require("node:child_process");
|
|
566
882
|
const command = input;
|
|
567
|
-
const child =
|
|
883
|
+
const child = spawn4(command.command, command.args, {
|
|
568
884
|
stdio: ["ignore", "inherit", "inherit"],
|
|
569
885
|
env: process.env
|
|
570
886
|
});
|
|
@@ -596,7 +912,7 @@ function directoryAuthorityScript(mode, messageLimit, task) {
|
|
|
596
912
|
}
|
|
597
913
|
|
|
598
914
|
// src/shared/directory-authority/protocol.ts
|
|
599
|
-
var
|
|
915
|
+
var import_node_path3 = require("node:path");
|
|
600
916
|
|
|
601
917
|
// src/shared/directory-authority/errors.ts
|
|
602
918
|
var DirectoryAuthorityError = class extends Error {
|
|
@@ -614,7 +930,7 @@ var DirectoryAuthorityError = class extends Error {
|
|
|
614
930
|
var AUTHORITY_MESSAGE_LIMIT = 8 * 1024 * 1024;
|
|
615
931
|
var AUTHORITY_STDERR_LIMIT = 16 * 1024;
|
|
616
932
|
function assertDirectoryAuthorityLocation(location) {
|
|
617
|
-
if (!(0,
|
|
933
|
+
if (!(0, import_node_path3.isAbsolute)(location.directoryPath)) {
|
|
618
934
|
throw new DirectoryAuthorityError(
|
|
619
935
|
"directory_authority_invalid_path",
|
|
620
936
|
"The directory authority requires an absolute starting path."
|
|
@@ -684,7 +1000,252 @@ function spawnDirectoryAuthorityCommand(input) {
|
|
|
684
1000
|
return child;
|
|
685
1001
|
}
|
|
686
1002
|
|
|
1003
|
+
// plugins/local-search/source/windows-search-process.ts
|
|
1004
|
+
var import_node_child_process2 = require("node:child_process");
|
|
1005
|
+
var import_node_path4 = require("node:path");
|
|
1006
|
+
|
|
1007
|
+
// src/shared/windows-job-object.ts
|
|
1008
|
+
var WINDOWS_EXEC_JOB_SOURCE = String.raw`
|
|
1009
|
+
using System;
|
|
1010
|
+
using System.ComponentModel;
|
|
1011
|
+
using System.Runtime.InteropServices;
|
|
1012
|
+
|
|
1013
|
+
public static class AbotExecJob {
|
|
1014
|
+
private static IntPtr job = IntPtr.Zero;
|
|
1015
|
+
|
|
1016
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
1017
|
+
private struct BasicLimits {
|
|
1018
|
+
public long PerProcessUserTimeLimit;
|
|
1019
|
+
public long PerJobUserTimeLimit;
|
|
1020
|
+
public uint LimitFlags;
|
|
1021
|
+
public UIntPtr MinimumWorkingSetSize;
|
|
1022
|
+
public UIntPtr MaximumWorkingSetSize;
|
|
1023
|
+
public uint ActiveProcessLimit;
|
|
1024
|
+
public UIntPtr Affinity;
|
|
1025
|
+
public uint PriorityClass;
|
|
1026
|
+
public uint SchedulingClass;
|
|
1027
|
+
}
|
|
1028
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
1029
|
+
private struct IoCounters {
|
|
1030
|
+
public ulong ReadOperationCount, WriteOperationCount, OtherOperationCount;
|
|
1031
|
+
public ulong ReadTransferCount, WriteTransferCount, OtherTransferCount;
|
|
1032
|
+
}
|
|
1033
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
1034
|
+
private struct ExtendedLimits {
|
|
1035
|
+
public BasicLimits BasicLimitInformation;
|
|
1036
|
+
public IoCounters IoInfo;
|
|
1037
|
+
public UIntPtr ProcessMemoryLimit, JobMemoryLimit;
|
|
1038
|
+
public UIntPtr PeakProcessMemoryUsed, PeakJobMemoryUsed;
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
1042
|
+
private static extern IntPtr CreateJobObject(IntPtr attributes, string name);
|
|
1043
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
1044
|
+
private static extern bool SetInformationJobObject(IntPtr handle, int kind,
|
|
1045
|
+
ref ExtendedLimits limits, uint size);
|
|
1046
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
1047
|
+
private static extern bool AssignProcessToJobObject(IntPtr handle, IntPtr process);
|
|
1048
|
+
[DllImport("kernel32.dll")]
|
|
1049
|
+
private static extern IntPtr GetCurrentProcess();
|
|
1050
|
+
[DllImport("kernel32.dll")]
|
|
1051
|
+
private static extern bool CloseHandle(IntPtr handle);
|
|
1052
|
+
|
|
1053
|
+
public static void Attach() {
|
|
1054
|
+
if (job != IntPtr.Zero) throw new InvalidOperationException("Already attached");
|
|
1055
|
+
IntPtr candidate = CreateJobObject(IntPtr.Zero, null);
|
|
1056
|
+
if (candidate == IntPtr.Zero) throw new Win32Exception(Marshal.GetLastWin32Error());
|
|
1057
|
+
try {
|
|
1058
|
+
ExtendedLimits limits = new ExtendedLimits();
|
|
1059
|
+
limits.BasicLimitInformation.LimitFlags = 0x00002000; // KILL_ON_JOB_CLOSE
|
|
1060
|
+
if (!SetInformationJobObject(candidate, 9, ref limits,
|
|
1061
|
+
(uint)Marshal.SizeOf(typeof(ExtendedLimits))))
|
|
1062
|
+
throw new Win32Exception(Marshal.GetLastWin32Error());
|
|
1063
|
+
if (!AssignProcessToJobObject(candidate, GetCurrentProcess()))
|
|
1064
|
+
throw new Win32Exception(Marshal.GetLastWin32Error());
|
|
1065
|
+
job = candidate;
|
|
1066
|
+
candidate = IntPtr.Zero;
|
|
1067
|
+
} finally {
|
|
1068
|
+
if (candidate != IntPtr.Zero) CloseHandle(candidate);
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
`;
|
|
1073
|
+
|
|
1074
|
+
// plugins/local-search/source/windows-search-script.ts
|
|
1075
|
+
init_native_script();
|
|
1076
|
+
init_authority_script();
|
|
1077
|
+
|
|
1078
|
+
// plugins/local-search/source/windows-search-lease.ts
|
|
1079
|
+
var WINDOWS_SEARCH_LEASE = String.raw`
|
|
1080
|
+
public static partial class AbotFilesystem {
|
|
1081
|
+
sealed class SearchPathLease : IDisposable {
|
|
1082
|
+
readonly List<SafeFileHandle> held = new List<SafeFileHandle>();
|
|
1083
|
+
public readonly string Target;
|
|
1084
|
+
public readonly bool IsFile;
|
|
1085
|
+
public SearchPathLease(Dictionary<string,object> request) {
|
|
1086
|
+
try {
|
|
1087
|
+
Target = Path.GetFullPath(Text(request, "targetPath"));
|
|
1088
|
+
string root = Path.GetFullPath(Text(request, "rootPath")).TrimEnd('\\');
|
|
1089
|
+
if (!String.Equals(Target.TrimEnd('\\'), root, StringComparison.OrdinalIgnoreCase) &&
|
|
1090
|
+
!Target.StartsWith(root + "\\", StringComparison.OrdinalIgnoreCase))
|
|
1091
|
+
throw new FsFault("filesystem_invalid_path");
|
|
1092
|
+
IsFile = (bool)request["isFile"];
|
|
1093
|
+
string current = Path.GetPathRoot(Target);
|
|
1094
|
+
var handle = OpenHandle(null, NativePath(current), true, 1, 0x80000000, 3);
|
|
1095
|
+
held.Add(handle);
|
|
1096
|
+
bool foundRoot = VerifyRoot(current, root, handle, request);
|
|
1097
|
+
string rest = Target.Substring(current.Length).TrimEnd('\\');
|
|
1098
|
+
string[] parts = rest.Length == 0 ? new string[0] : rest.Split('\\');
|
|
1099
|
+
for (int i = 0; i < parts.Length; i++) {
|
|
1100
|
+
ValidateComponent(parts[i]);
|
|
1101
|
+
bool isFile = IsFile && i == parts.Length - 1;
|
|
1102
|
+
handle = OpenHandle(handle, parts[i], !isFile, 1, 0x80000000, isFile ? 1u : 3u);
|
|
1103
|
+
held.Add(handle);
|
|
1104
|
+
current = Path.Combine(current, parts[i]);
|
|
1105
|
+
if (!String.Equals(FinalPath(handle).TrimEnd('\\'), current.TrimEnd('\\'), StringComparison.OrdinalIgnoreCase))
|
|
1106
|
+
throw new FsFault("filesystem_path_changed");
|
|
1107
|
+
foundRoot |= VerifyRoot(current, root, handle, request);
|
|
1108
|
+
}
|
|
1109
|
+
if (!foundRoot || !MatchesIdentity(Identity(handle), request["targetIdentity"] as Dictionary<string,object>))
|
|
1110
|
+
throw new FsFault("filesystem_path_changed");
|
|
1111
|
+
} catch { Dispose(); throw; }
|
|
1112
|
+
}
|
|
1113
|
+
static bool VerifyRoot(string current, string root, SafeFileHandle handle, Dictionary<string,object> request) {
|
|
1114
|
+
if (!String.Equals(current.TrimEnd('\\'), root, StringComparison.OrdinalIgnoreCase)) return false;
|
|
1115
|
+
var expected = request["rootIdentity"] as Dictionary<string,object>;
|
|
1116
|
+
if (expected == null || !MatchesIdentity(Identity(handle), expected)) throw new FsFault("filesystem_path_changed");
|
|
1117
|
+
return true;
|
|
1118
|
+
}
|
|
1119
|
+
public void Dispose() {
|
|
1120
|
+
for (int i = held.Count - 1; i >= 0; i--) held[i].Dispose();
|
|
1121
|
+
held.Clear();
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
`;
|
|
1126
|
+
|
|
1127
|
+
// plugins/local-search/source/windows-search-script.ts
|
|
1128
|
+
var SEARCH_COMMAND = String.raw`
|
|
1129
|
+
public static partial class AbotFilesystem {
|
|
1130
|
+
static string QuoteSearchArgument(string value) {
|
|
1131
|
+
var quoted = new StringBuilder("\"");
|
|
1132
|
+
int slashes = 0;
|
|
1133
|
+
foreach (char c in value) {
|
|
1134
|
+
if (c == '\\') { slashes++; continue; }
|
|
1135
|
+
if (c == '"') { quoted.Append('\\', slashes * 2 + 1); quoted.Append(c); slashes = 0; continue; }
|
|
1136
|
+
quoted.Append('\\', slashes); slashes = 0; quoted.Append(c);
|
|
1137
|
+
}
|
|
1138
|
+
quoted.Append('\\', slashes * 2); quoted.Append('"');
|
|
1139
|
+
return quoted.ToString();
|
|
1140
|
+
}
|
|
1141
|
+
public static int Search(string input) {
|
|
1142
|
+
var json = new JavaScriptSerializer { MaxJsonLength = 2 * 1024 * 1024 };
|
|
1143
|
+
try {
|
|
1144
|
+
var request = json.Deserialize<Dictionary<string,object>>(input);
|
|
1145
|
+
using (var lease = new SearchPathLease(request)) {
|
|
1146
|
+
var args = (System.Collections.IEnumerable)request["args"];
|
|
1147
|
+
var quoted = new List<string>();
|
|
1148
|
+
foreach (object arg in args) quoted.Add(QuoteSearchArgument((string)arg));
|
|
1149
|
+
var start = new System.Diagnostics.ProcessStartInfo {
|
|
1150
|
+
FileName = Text(request, "command"), Arguments = String.Join(" ", quoted),
|
|
1151
|
+
WorkingDirectory = lease.IsFile ? Path.GetDirectoryName(lease.Target) : lease.Target,
|
|
1152
|
+
UseShellExecute = false, CreateNoWindow = true,
|
|
1153
|
+
RedirectStandardInput = true, RedirectStandardOutput = true, RedirectStandardError = true
|
|
1154
|
+
};
|
|
1155
|
+
using (var process = System.Diagnostics.Process.Start(start)) {
|
|
1156
|
+
process.StandardInput.Close();
|
|
1157
|
+
var output = process.StandardOutput.BaseStream.CopyToAsync(Console.OpenStandardOutput());
|
|
1158
|
+
var errors = process.StandardError.BaseStream.CopyToAsync(Console.OpenStandardError());
|
|
1159
|
+
process.WaitForExit();
|
|
1160
|
+
System.Threading.Tasks.Task.WaitAll(output, errors);
|
|
1161
|
+
return process.ExitCode;
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
} catch { return 125; }
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
`;
|
|
1168
|
+
var WINDOWS_SEARCH_SOURCE = [
|
|
1169
|
+
WINDOWS_FILESYSTEM_NATIVE,
|
|
1170
|
+
WINDOWS_FILESYSTEM_AUTHORITY,
|
|
1171
|
+
WINDOWS_SEARCH_LEASE,
|
|
1172
|
+
SEARCH_COMMAND
|
|
1173
|
+
].join("\n");
|
|
1174
|
+
|
|
1175
|
+
// plugins/local-search/source/windows-search-process.ts
|
|
1176
|
+
var BOOTSTRAP = [
|
|
1177
|
+
"$ErrorActionPreference='Stop'",
|
|
1178
|
+
"$ProgressPreference='SilentlyContinue'",
|
|
1179
|
+
"if ($ExecutionContext.SessionState.LanguageMode -ne 'FullLanguage') { exit 126 }",
|
|
1180
|
+
"$env:PSModulePath=[IO.Path]::Combine($PSHOME,'Modules')",
|
|
1181
|
+
"try {",
|
|
1182
|
+
"[Console]::InputEncoding=[Text.UTF8Encoding]::new($false)",
|
|
1183
|
+
"$envelope=[Console]::In.ReadToEnd() | ConvertFrom-Json",
|
|
1184
|
+
"Add-Type -TypeDefinition $envelope.jobSource",
|
|
1185
|
+
"[AbotExecJob]::Attach()",
|
|
1186
|
+
"Add-Type -ReferencedAssemblies @('System.Web.Extensions') -TypeDefinition $envelope.source",
|
|
1187
|
+
"$result=[AbotFilesystem]::Search($envelope.request)",
|
|
1188
|
+
"exit $result",
|
|
1189
|
+
"} catch { exit 126 }"
|
|
1190
|
+
].join(";\n");
|
|
1191
|
+
function windowsSearchUnavailable() {
|
|
1192
|
+
return new LocalSearchError(
|
|
1193
|
+
"local_search_windows_unavailable",
|
|
1194
|
+
"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."
|
|
1195
|
+
);
|
|
1196
|
+
}
|
|
1197
|
+
function windowsSearchExitFailure(code) {
|
|
1198
|
+
if (code === 125) return windowsSearchAuthorityUnavailable();
|
|
1199
|
+
const helperUnavailable = code === 126 || code === void 0;
|
|
1200
|
+
if (helperUnavailable) return windowsSearchUnavailable();
|
|
1201
|
+
return new LocalSearchError(
|
|
1202
|
+
"local_search_failed",
|
|
1203
|
+
"Local search could not complete under the selected logical root."
|
|
1204
|
+
);
|
|
1205
|
+
}
|
|
1206
|
+
function spawnWindowsSearch(params) {
|
|
1207
|
+
const input = JSON.stringify({
|
|
1208
|
+
source: WINDOWS_SEARCH_SOURCE,
|
|
1209
|
+
jobSource: WINDOWS_EXEC_JOB_SOURCE,
|
|
1210
|
+
request: JSON.stringify({
|
|
1211
|
+
...params.authority,
|
|
1212
|
+
command: params.command,
|
|
1213
|
+
args: params.args
|
|
1214
|
+
})
|
|
1215
|
+
});
|
|
1216
|
+
if (Buffer.byteLength(input) > 2 * 1024 * 1024)
|
|
1217
|
+
throw windowsSearchUnavailable();
|
|
1218
|
+
const executable = (0, import_node_path4.join)(
|
|
1219
|
+
process.env.SystemRoot ?? "C:\\Windows",
|
|
1220
|
+
"System32",
|
|
1221
|
+
"WindowsPowerShell",
|
|
1222
|
+
"v1.0",
|
|
1223
|
+
"powershell.exe"
|
|
1224
|
+
);
|
|
1225
|
+
const child = (0, import_node_child_process2.spawn)(
|
|
1226
|
+
executable,
|
|
1227
|
+
["-NoLogo", "-NoProfile", "-NonInteractive", "-Command", BOOTSTRAP],
|
|
1228
|
+
{
|
|
1229
|
+
env: params.env,
|
|
1230
|
+
windowsHide: true,
|
|
1231
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
1232
|
+
}
|
|
1233
|
+
);
|
|
1234
|
+
child.stdin.on("error", () => void 0);
|
|
1235
|
+
child.stdin.end(input, "utf8");
|
|
1236
|
+
return {
|
|
1237
|
+
child,
|
|
1238
|
+
terminate: () => {
|
|
1239
|
+
child.kill("SIGKILL");
|
|
1240
|
+
},
|
|
1241
|
+
failureForExit: windowsSearchExitFailure
|
|
1242
|
+
};
|
|
1243
|
+
}
|
|
1244
|
+
|
|
687
1245
|
// plugins/local-search/source/ripgrep-process.ts
|
|
1246
|
+
function isWindowsSearchAuthority(authority) {
|
|
1247
|
+
return authority !== void 0 && "platform" in authority;
|
|
1248
|
+
}
|
|
688
1249
|
function controlledRipgrepEnvironment() {
|
|
689
1250
|
const environment = { ...process.env };
|
|
690
1251
|
for (const name of Object.keys(environment)) {
|
|
@@ -710,6 +1271,14 @@ function terminateAuthorityGroup(child) {
|
|
|
710
1271
|
function spawnRipgrepProcess(args, cwd, stdinFd, directoryAuthority) {
|
|
711
1272
|
const commandArgs = ["--no-config", ...args];
|
|
712
1273
|
const env = controlledRipgrepEnvironment();
|
|
1274
|
+
if (isWindowsSearchAuthority(directoryAuthority)) {
|
|
1275
|
+
return spawnWindowsSearch({
|
|
1276
|
+
authority: directoryAuthority,
|
|
1277
|
+
command: import_ripgrep.rgPath,
|
|
1278
|
+
args: commandArgs,
|
|
1279
|
+
env
|
|
1280
|
+
});
|
|
1281
|
+
}
|
|
713
1282
|
if (directoryAuthority) {
|
|
714
1283
|
const child2 = spawnDirectoryAuthorityCommand({
|
|
715
1284
|
...directoryAuthority,
|
|
@@ -719,7 +1288,7 @@ function spawnRipgrepProcess(args, cwd, stdinFd, directoryAuthority) {
|
|
|
719
1288
|
});
|
|
720
1289
|
return { child: child2, terminate: () => terminateAuthorityGroup(child2) };
|
|
721
1290
|
}
|
|
722
|
-
const child = (0,
|
|
1291
|
+
const child = (0, import_node_child_process3.spawn)(import_ripgrep.rgPath, commandArgs, {
|
|
723
1292
|
cwd,
|
|
724
1293
|
env,
|
|
725
1294
|
stdio: [stdinFd ?? "ignore", "pipe", "pipe"],
|
|
@@ -818,7 +1387,7 @@ async function runRipgrepBounded(args, cwd, maxResults, parser, signal, stdinFd,
|
|
|
818
1387
|
let timedOut = false;
|
|
819
1388
|
let aborted = false;
|
|
820
1389
|
let parserError;
|
|
821
|
-
const { child, terminate } = spawnRipgrepProcess(
|
|
1390
|
+
const { child, terminate, failureForExit } = spawnRipgrepProcess(
|
|
822
1391
|
args,
|
|
823
1392
|
cwd,
|
|
824
1393
|
stdinFd,
|
|
@@ -873,7 +1442,7 @@ async function runRipgrepBounded(args, cwd, maxResults, parser, signal, stdinFd,
|
|
|
873
1442
|
}
|
|
874
1443
|
});
|
|
875
1444
|
child.stderr.on("data", () => void 0);
|
|
876
|
-
child.on("error", (error) => settleFailure(error));
|
|
1445
|
+
child.on("error", (error) => settleFailure(failureForExit?.(void 0) ?? error));
|
|
877
1446
|
child.on("close", (code) => {
|
|
878
1447
|
if (completed) return;
|
|
879
1448
|
if (parserError) {
|
|
@@ -893,7 +1462,7 @@ async function runRipgrepBounded(args, cwd, maxResults, parser, signal, stdinFd,
|
|
|
893
1462
|
}
|
|
894
1463
|
}
|
|
895
1464
|
if (!stoppedAfterExtraResult && code !== 0 && code !== 1) {
|
|
896
|
-
settleFailure();
|
|
1465
|
+
settleFailure(failureForExit?.(code));
|
|
897
1466
|
return;
|
|
898
1467
|
}
|
|
899
1468
|
completed = true;
|
|
@@ -1006,7 +1575,7 @@ function runRipgrepContentSearch(args, cwd, maxResults, signal, stdinFd, directo
|
|
|
1006
1575
|
var DEFAULT_MAX_RESULTS = 40;
|
|
1007
1576
|
var MAX_RESULTS = 200;
|
|
1008
1577
|
function fileNameMatches(logicalPath, query, caseSensitive) {
|
|
1009
|
-
const filename =
|
|
1578
|
+
const filename = import_node_path5.posix.basename(logicalPath);
|
|
1010
1579
|
return caseSensitive ? filename.includes(query) : filename.toLowerCase().includes(query.toLowerCase());
|
|
1011
1580
|
}
|
|
1012
1581
|
var index_default = defineRuntimePlugin((context) => ({
|
|
@@ -1045,7 +1614,7 @@ var index_default = defineRuntimePlugin((context) => ({
|
|
|
1045
1614
|
if (mode === "names" || mode === "both") {
|
|
1046
1615
|
const names = root.isFile ? Object.freeze({
|
|
1047
1616
|
items: Object.freeze(
|
|
1048
|
-
fileNameMatches(root.target.logicalPath, query, caseSensitive) ? [
|
|
1617
|
+
fileNameMatches(root.target.logicalPath, query, caseSensitive) ? [import_node_path5.posix.basename(root.target.logicalPath)] : []
|
|
1049
1618
|
),
|
|
1050
1619
|
truncated: false
|
|
1051
1620
|
}) : await runRipgrepPathSearch(
|