@abot-ai/runtime 1.6.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/src/bridge/request-steering.js +60 -15
- package/dist/src/capabilities/normal-invocation/contracts.d.ts +3 -0
- package/dist/src/capabilities/normal-invocation/output-channels.d.ts +10 -0
- package/dist/src/capabilities/normal-invocation/output-channels.js +29 -0
- package/dist/src/capabilities/normal-invocation/validator.js +4 -2
- package/dist/src/capabilities/tool-request-resources.d.ts +3 -0
- package/dist/src/capabilities/tool-types.d.ts +1 -1
- package/dist/src/cli/abot.js +2 -0
- package/dist/src/cli/host-companion-bundle.mjs +8003 -6796
- package/dist/src/cli/host-companion-entry.js +5 -22
- package/dist/src/cli/host-companion-input.d.ts +3 -0
- package/dist/src/cli/host-companion-input.js +21 -0
- package/dist/src/cli/host-companion-lifecycle.d.ts +11 -0
- package/dist/src/cli/host-companion-lifecycle.js +32 -0
- package/dist/src/cli/host-companion-setup-target.d.ts +4 -0
- package/dist/src/cli/host-companion-setup-target.js +17 -0
- package/dist/src/cli/host-companion-startup.d.ts +2 -0
- package/dist/src/cli/host-companion-startup.js +7 -2
- package/dist/src/cli/host-companion.d.ts +6 -0
- package/dist/src/cli/host-companion.js +30 -27
- package/dist/src/cli/windows-companion-store-entry.d.ts +9 -0
- package/dist/src/cli/windows-companion-store-entry.js +67 -0
- package/dist/src/computer-access/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 +48 -0
- package/dist/src/computer-access/command-output-capture.js +202 -0
- 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/command-output-retention.d.ts +5 -0
- package/dist/src/computer-access/command-output-retention.js +90 -0
- package/dist/src/computer-access/command-output.d.ts +7 -0
- package/dist/src/computer-access/command-output.js +1 -0
- package/dist/src/computer-access/commands.d.ts +1 -0
- package/dist/src/computer-access/commands.js +1 -1
- package/dist/src/computer-access/companion/command-output-protocol.d.ts +12 -0
- package/dist/src/computer-access/companion/command-output-protocol.js +28 -0
- package/dist/src/computer-access/companion/command-output.d.ts +14 -0
- package/dist/src/computer-access/companion/command-output.js +127 -0
- package/dist/src/computer-access/companion/install-link-macos.d.ts +7 -0
- package/dist/src/computer-access/companion/install-link-macos.js +49 -0
- package/dist/src/computer-access/companion/install-link-registration.d.ts +4 -0
- package/dist/src/computer-access/companion/install-link-registration.js +184 -0
- package/dist/src/computer-access/companion/install-link-windows.d.ts +4 -0
- package/dist/src/computer-access/companion/install-link-windows.js +65 -0
- package/dist/src/computer-access/companion/install-link.d.ts +9 -0
- package/dist/src/computer-access/companion/install-link.js +54 -0
- package/dist/src/computer-access/companion/native-messages.js +3 -0
- package/dist/src/computer-access/companion/native-notifications.js +3 -2
- package/dist/src/computer-access/companion/native-session.d.ts +1 -0
- package/dist/src/computer-access/companion/native-session.js +20 -4
- package/dist/src/computer-access/companion/native-supervisor.js +1 -0
- package/dist/src/computer-access/companion/notification-windows.d.ts +1 -1
- package/dist/src/computer-access/companion/notification-windows.js +8 -3
- package/dist/src/computer-access/companion/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/protocol.d.ts +1 -1
- package/dist/src/computer-access/companion/protocol.js +6 -0
- package/dist/src/computer-access/companion/release-version.d.ts +1 -1
- package/dist/src/computer-access/companion/release-version.js +1 -1
- package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
- package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
- package/dist/src/computer-access/companion/windows-store/connection-error.d.ts +7 -0
- package/dist/src/computer-access/companion/windows-store/connection-error.js +19 -0
- package/dist/src/computer-access/companion/windows-store/connection-link.d.ts +13 -0
- package/dist/src/computer-access/companion/windows-store/connection-link.js +109 -0
- package/dist/src/computer-access/companion/windows-store/identity.d.ts +13 -0
- package/dist/src/computer-access/companion/windows-store/identity.js +13 -0
- package/dist/src/computer-access/companion/windows-store/lifecycle.d.ts +5 -0
- package/dist/src/computer-access/companion/windows-store/lifecycle.js +90 -0
- package/dist/src/computer-access/computer/companion-sessions.js +7 -6
- package/dist/src/computer-access/computer/unix-native-process.js +23 -11
- package/dist/src/computer-access/contracts.d.ts +1 -1
- package/dist/src/computer-access/handlers.d.ts +3 -1
- package/dist/src/computer-access/handlers.js +83 -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/process-capture.d.ts +6 -0
- package/dist/src/computer-access/process-capture.js +1 -0
- package/dist/src/computer-access/process-result.d.ts +2 -0
- package/dist/src/computer-access/process-result.js +14 -6
- package/dist/src/computer-access/process-runner.d.ts +2 -1
- package/dist/src/computer-access/process-runner.js +21 -13
- package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
- package/dist/src/computer-access/security/desktop-result.js +146 -0
- package/dist/src/computer-access/security/observed-error.d.ts +2 -0
- package/dist/src/computer-access/security/observed-error.js +10 -0
- package/dist/src/computer-access/security/secret-text.d.ts +7 -0
- package/dist/src/computer-access/security/secret-text.js +111 -0
- package/dist/src/computer-access/security/system-results.d.ts +2 -0
- package/dist/src/computer-access/security/system-results.js +53 -0
- package/dist/src/computer-access/system-result-protection.d.ts +11 -0
- package/dist/src/computer-access/system-result-protection.js +1 -0
- package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
- package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
- package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
- package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
- package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
- package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
- package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
- package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
- package/dist/src/model-gateway/observability/provider-trace.js +30 -8
- package/dist/src/model-gateway/providers/ollama/adapter.js +8 -2
- package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
- package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
- package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
- package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
- package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
- package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
- package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
- package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
- package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
- package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
- package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
- package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
- package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
- package/dist/src/model-gateway/providers/openai/payload.js +6 -23
- package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
- package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
- package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
- package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
- package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
- package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
- package/dist/src/model-gateway/providers/openai/stream.js +13 -41
- package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
- package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
- package/dist/src/model-gateway/server/configuration.d.ts +2 -0
- package/dist/src/model-gateway/server/configuration.js +73 -21
- 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/install-source.d.ts +13 -0
- package/dist/src/plugin-contract/install-source.js +99 -0
- package/dist/src/plugin-contract/manifest.d.ts +4 -1
- 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 +12 -0
- package/dist/src/plugin-sdk/computer-access.js +6 -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/in-memory-session-store.js +6 -16
- package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
- package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
- package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
- package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
- package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
- package/dist/src/runtime/adapters/runtime-observation-connection.d.ts +5 -0
- package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
- package/dist/src/runtime/admin/config-control.js +2 -1
- package/dist/src/runtime/automations/catalog.d.ts +3 -0
- package/dist/src/runtime/automations/catalog.js +1 -0
- package/dist/src/runtime/automations/model-dependency-projection.d.ts +2 -0
- package/dist/src/runtime/automations/service.d.ts +2 -0
- package/dist/src/runtime/capabilities/automation-builder/authoring-reference.d.ts +10 -5
- package/dist/src/runtime/capabilities/automation-builder/authoring-reference.js +8 -7
- package/dist/src/runtime/capabilities/automation-builder/payload-instructions.d.ts +2 -2
- package/dist/src/runtime/capabilities/automation-builder/payload-instructions.js +2 -2
- package/dist/src/runtime/capabilities/automation-builder/tool-contract.d.ts +2 -2
- package/dist/src/runtime/capabilities/automations/authoring-catalog.js +1 -1
- package/dist/src/runtime/capabilities/automations/authoring-preparation.d.ts +11 -5
- package/dist/src/runtime/capabilities/automations/tool-module.js +1 -1
- package/dist/src/runtime/capabilities/request-permission-catalog.d.ts +3 -1
- package/dist/src/runtime/capabilities/request-permission-catalog.js +21 -2
- package/dist/src/runtime/capabilities/request-permission-tool-registry.d.ts +2 -1
- package/dist/src/runtime/capabilities/request-permission-tool-registry.js +18 -10
- package/dist/src/runtime/capabilities/request-runtime-tool-registry.d.ts +2 -0
- package/dist/src/runtime/capabilities/request-runtime-tool-registry.js +1 -1
- package/dist/src/runtime/capabilities/scheduling/create-operations.d.ts +6 -0
- package/dist/src/runtime/config/builders.js +6 -5
- package/dist/src/runtime/config/effective-model-config-validation.js +4 -35
- package/dist/src/runtime/config/fields.js +15 -0
- package/dist/src/runtime/config/model-context-capacity.d.ts +20 -0
- package/dist/src/runtime/config/model-context-capacity.js +55 -0
- package/dist/src/runtime/config/model-execution-policy.d.ts +5 -1
- package/dist/src/runtime/config/model-execution-policy.js +16 -0
- package/dist/src/runtime/config/model-plugin-config.d.ts +8 -0
- package/dist/src/runtime/config/model-plugin-config.js +40 -0
- package/dist/src/runtime/config/schema.js +5 -1
- package/dist/src/runtime/config/validation/model-profile-validation.js +2 -0
- package/dist/src/runtime/config/validation/runtime-config-validation-contract.d.ts +3 -1
- package/dist/src/runtime/config/validation/runtime-config-validation-contract.js +3 -1
- package/dist/src/runtime/config/validation/runtime-root-section-validation.js +11 -4
- package/dist/src/runtime/config/validation/web-ui-config-validation.js +3 -2
- package/dist/src/runtime/config/web-ui.d.ts +5 -0
- package/dist/src/runtime/config/web-ui.js +5 -0
- package/dist/src/runtime/config.js +2 -0
- package/dist/src/runtime/local-application.d.ts +2 -0
- package/dist/src/runtime/local-host/app-owner.js +50 -6
- package/dist/src/runtime/local-host/app-request-control.d.ts +3 -1
- package/dist/src/runtime/local-host/app-request-control.js +91 -11
- package/dist/src/runtime/local-host/client-requests.js +32 -5
- package/dist/src/runtime/local-host/client-services.d.ts +2 -0
- package/dist/src/runtime/local-host/local-request-diagnostics.d.ts +9 -0
- package/dist/src/runtime/local-host/local-request-diagnostics.js +47 -0
- package/dist/src/runtime/local-host/saved-approvals.js +23 -2
- package/dist/src/runtime/local-host/windows-private-access.js +2 -0
- package/dist/src/runtime/model/model-selection.js +4 -1
- package/dist/src/runtime/observability/request-control-diagnostics.d.ts +6 -0
- package/dist/src/runtime/observability/request-control-diagnostics.js +52 -0
- package/dist/src/runtime/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/configuration-context.d.ts +9 -0
- package/dist/src/runtime/plugins/configuration-context.js +42 -0
- package/dist/src/runtime/plugins/configuration-settings.d.ts +2 -0
- package/dist/src/runtime/plugins/configuration-settings.js +26 -0
- package/dist/src/runtime/plugins/configuration-store.d.ts +23 -0
- package/dist/src/runtime/plugins/configuration-store.js +100 -0
- package/dist/src/runtime/plugins/configuration-write.d.ts +5 -0
- package/dist/src/runtime/plugins/configuration-write.js +58 -0
- package/dist/src/runtime/plugins/installation/archive.d.ts +2 -0
- package/dist/src/runtime/plugins/installation/archive.js +107 -0
- package/dist/src/runtime/plugins/installation/github-download.d.ts +9 -0
- package/dist/src/runtime/plugins/installation/github-download.js +72 -0
- package/dist/src/runtime/plugins/installation/installed-package.d.ts +9 -0
- package/dist/src/runtime/plugins/installation/installed-package.js +66 -0
- package/dist/src/runtime/plugins/installation/package.d.ts +53 -0
- package/dist/src/runtime/plugins/installation/package.js +81 -0
- package/dist/src/runtime/plugins/installation/portable-path.d.ts +2 -0
- package/dist/src/runtime/plugins/installation/portable-path.js +10 -0
- package/dist/src/runtime/plugins/installation/publication.d.ts +10 -0
- package/dist/src/runtime/plugins/installation/publication.js +17 -0
- package/dist/src/runtime/plugins/installation/service.d.ts +48 -0
- package/dist/src/runtime/plugins/installation/service.js +80 -0
- package/dist/src/runtime/plugins/loader.js +34 -38
- 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 +1 -0
- package/dist/src/runtime/plugins/manifest-validator.js +12 -1
- package/dist/src/runtime/plugins/module-cache.d.ts +2 -0
- package/dist/src/runtime/plugins/module-cache.js +19 -0
- package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
- package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
- package/dist/src/runtime/plugins/selection.d.ts +2 -0
- package/dist/src/runtime/plugins/selection.js +16 -11
- package/dist/src/runtime/ports.d.ts +6 -4
- package/dist/src/runtime/request/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/dependencies.d.ts +2 -1
- package/dist/src/runtime/request/execution-payload-compacted-evidence.d.ts +1 -1
- package/dist/src/runtime/request/handler.js +8 -0
- package/dist/src/runtime/request/prepared-execution.js +9 -1
- package/dist/src/runtime/request/request-steering.d.ts +4 -0
- package/dist/src/runtime/request/request-steering.js +37 -12
- package/dist/src/runtime/request/worker-capability-composition.d.ts +2 -0
- package/dist/src/runtime/request/worker-capability-composition.js +4 -1
- package/dist/src/runtime/scheduler/journal-index-state.d.ts +1 -1
- package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
- package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
- package/dist/src/runtime/steps/execution-agent/format.js +2 -3
- package/dist/src/runtime/steps/execution-agent/input.js +1 -1
- package/dist/src/runtime/steps/execution-agent/prompt.js +5 -5
- package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
- package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -3
- package/dist/src/runtime/steps/execution-agent/state-context.js +26 -35
- package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
- package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
- package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
- package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
- package/dist/src/sessions/assistant-initiative-message.d.ts +3 -0
- package/dist/src/sessions/assistant-initiative-message.js +12 -0
- package/dist/src/sessions/assistant-initiative.d.ts +2 -2
- package/dist/src/sessions/assistant-initiative.js +1 -7
- package/dist/src/sessions/durable-session-commit.d.ts +2 -1
- package/dist/src/sessions/durable-session-commit.js +9 -4
- package/dist/src/sessions/metadata/projection.d.ts +15 -0
- package/dist/src/sessions/metadata/projection.js +55 -0
- package/dist/src/sessions/metadata/publication.d.ts +12 -0
- package/dist/src/sessions/metadata/publication.js +78 -0
- package/dist/src/sessions/metadata/source-receipt.d.ts +5 -0
- package/dist/src/sessions/metadata/source-receipt.js +42 -0
- package/dist/src/sessions/metadata/store.d.ts +7 -0
- package/dist/src/sessions/metadata/store.js +119 -0
- package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
- package/dist/src/sessions/prepared-session-replacement.js +46 -0
- package/dist/src/sessions/record/projection.d.ts +3 -1
- package/dist/src/sessions/record/projection.js +26 -18
- package/dist/src/sessions/request-lifecycle/service.js +3 -3
- package/dist/src/sessions/session-service.d.ts +2 -4
- package/dist/src/sessions/session-service.js +4 -16
- package/dist/src/sessions/session-store.d.ts +2 -1
- package/dist/src/sessions/session-store.js +11 -5
- package/dist/src/sessions/snapshot.d.ts +17 -0
- package/dist/src/sessions/snapshot.js +105 -0
- package/dist/src/sessions/types.d.ts +2 -0
- package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
- package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
- package/dist/src/shared/tool-selection.d.ts +2 -0
- package/dist/src/shared/tool-selection.js +7 -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 +14 -0
- package/dist/src/web-ui/app/app-bootstrap.js +14 -1
- package/dist/src/web-ui/app/app-state.js +0 -7
- package/dist/src/web-ui/app/app.js +59 -159
- package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
- package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
- package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
- package/dist/src/web-ui/app/components/config-workspace/config-model.js +2 -0
- package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +136 -0
- package/dist/src/web-ui/app/components/config-workspace/model-plugin-selection.js +180 -0
- package/dist/src/web-ui/app/components/config-workspace/model-plugin-view-state.js +114 -0
- package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +3 -0
- package/dist/src/web-ui/app/components/config-workspace/model-summary.js +39 -0
- package/dist/src/web-ui/app/components/config-workspace/summary-rendering.js +30 -0
- package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +37 -0
- package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +24 -2
- package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +9 -1
- package/dist/src/web-ui/app/components/config-workspace/workspace-view.js +23 -67
- package/dist/src/web-ui/app/components/config-workspace.js +11 -2
- package/dist/src/web-ui/app/components/conversation-view.js +36 -5
- package/dist/src/web-ui/app/components/dashboard/recent-conversations.js +2 -1
- package/dist/src/web-ui/app/components/dashboard/workspace.js +2 -1
- package/dist/src/web-ui/app/components/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 +105 -0
- package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
- package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
- package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
- package/dist/src/web-ui/app/components/passive-learning/home.js +8 -11
- 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/configuration-draft.js +34 -0
- package/dist/src/web-ui/app/components/plugins/configuration-editor.js +147 -0
- package/dist/src/web-ui/app/components/plugins/configuration-fields.js +103 -0
- package/dist/src/web-ui/app/components/plugins/configuration-retained-secrets.js +20 -0
- package/dist/src/web-ui/app/components/plugins/configuration-settings.js +108 -0
- package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +45 -0
- package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
- package/dist/src/web-ui/app/components/plugins/installation.js +213 -0
- package/dist/src/web-ui/app/components/plugins/manager.js +160 -6
- package/dist/src/web-ui/app/components/plugins/removal.js +130 -0
- package/dist/src/web-ui/app/components/plugins/rendering.js +17 -2
- package/dist/src/web-ui/app/components/plugins/summary.js +54 -0
- package/dist/src/web-ui/app/components/plugins/tabs.js +31 -0
- package/dist/src/web-ui/app/components/plugins/view-state.js +3 -1
- package/dist/src/web-ui/app/components/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/connection-form.js +5 -2
- package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +9 -1
- package/dist/src/web-ui/app/components/runtime-setup/context-window-feedback.js +71 -0
- package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +9 -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/runtime-setup-guide.js +15 -3
- 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/empty-state.js +1 -0
- 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 -0
- package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
- package/dist/src/web-ui/app/components/spark-chat/settings.js +7 -3
- package/dist/src/web-ui/app/components/system-host/connection-card.js +35 -0
- package/dist/src/web-ui/app/components/system-host/macos-permissions.js +2 -0
- package/dist/src/web-ui/app/components/system-host/macos-setup.js +1 -1
- package/dist/src/web-ui/app/components/system-host/manager.js +45 -12
- package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
- package/dist/src/web-ui/app/components/system-host/rendering.js +114 -106
- package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +293 -0
- package/dist/src/web-ui/app/components/workspace-shell.js +6 -0
- package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
- package/dist/src/web-ui/app/computer-access-feature.js +22 -5
- package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
- package/dist/src/web-ui/app/configuration-feature.js +44 -3
- package/dist/src/web-ui/app/controllers/app-event-bindings.js +41 -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-read-state-controller.d.ts +1 -0
- package/dist/src/web-ui/app/controllers/conversation-read-state-controller.js +7 -3
- package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +91 -0
- package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +10 -5
- package/dist/src/web-ui/app/controllers/conversation-session-controller.js +97 -162
- 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/history-pagination.js +111 -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.d.ts +12 -0
- package/dist/src/web-ui/app/controllers/operations-controller.js +28 -21
- 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-onboarding-controller.d.ts +1 -0
- package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.js +11 -0
- package/dist/src/web-ui/app/controllers/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 +43 -19
- package/dist/src/web-ui/app/controllers/session-list-pagination.js +71 -0
- package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
- package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +17 -17
- package/dist/src/web-ui/app/controllers/spark-chat-reading.js +1 -0
- package/dist/src/web-ui/app/controllers/spark-chat-sync.js +26 -7
- 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/controllers/workspace-route-controller.js +21 -19
- package/dist/src/web-ui/app/dashboard-feature.js +4 -3
- package/dist/src/web-ui/app/index.html +6 -2
- package/dist/src/web-ui/app/lib/history-page-messages.js +49 -0
- package/dist/src/web-ui/app/lib/reasoning-controls.js +35 -0
- package/dist/src/web-ui/app/lib/request-lifecycle-view.js +8 -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/lib/workspace-route.d.ts +3 -0
- package/dist/src/web-ui/app/lib/workspace-route.js +4 -0
- package/dist/src/web-ui/app/passive-learning-feature.js +16 -4
- package/dist/src/web-ui/app/runtime-onboarding-feature.js +3 -0
- 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/configuration.js +20 -0
- package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
- package/dist/src/web-ui/app/services/runtime-web-client/plugin-configuration.js +19 -0
- package/dist/src/web-ui/app/services/runtime-web-client/spark-chat.js +4 -4
- package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +4 -0
- package/dist/src/web-ui/app/services/runtime-web-client.d.ts +8 -1
- package/dist/src/web-ui/app/services/runtime-web-client.js +14 -3
- 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 +84 -21
- package/dist/src/web-ui/app/styles/11-product-links.css +30 -0
- package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
- package/dist/src/web-ui/app/styles/41-plugin-configuration.css +79 -0
- package/dist/src/web-ui/app/styles/41-plugin-discovery.css +132 -0
- package/dist/src/web-ui/app/styles/41-plugin-management.css +14 -0
- package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +174 -0
- package/dist/src/web-ui/app/styles/46-system-host.css +61 -107
- package/dist/src/web-ui/app/styles/47-config-controls.css +13 -1
- package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
- package/dist/src/web-ui/app/styles/54-spark-chat.css +33 -1
- package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
- package/dist/src/web-ui/app/styles.css +6 -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/api-router.js +11 -6
- package/dist/src/web-ui/local-runtime/approval-request-attachment.js +14 -5
- package/dist/src/web-ui/local-runtime/configuration-activation-source.d.ts +1 -1
- package/dist/src/web-ui/local-runtime/configuration-activation-source.js +11 -3
- package/dist/src/web-ui/local-runtime/contracts.d.ts +4 -3
- package/dist/src/web-ui/local-runtime/environment-registry.d.ts +5 -1
- package/dist/src/web-ui/local-runtime/environment-registry.js +53 -11
- package/dist/src/web-ui/local-runtime/history-pagination.d.ts +16 -0
- package/dist/src/web-ui/local-runtime/history-pagination.js +20 -0
- package/dist/src/web-ui/local-runtime/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/plugin-configuration-routes.d.ts +16 -0
- package/dist/src/web-ui/local-runtime/plugin-configuration-routes.js +68 -0
- package/dist/src/web-ui/local-runtime/plugin-installation-routes.d.ts +16 -0
- package/dist/src/web-ui/local-runtime/plugin-installation-routes.js +96 -0
- package/dist/src/web-ui/local-runtime/plugin-management-routes.d.ts +8 -1
- package/dist/src/web-ui/local-runtime/plugin-management-routes.js +17 -0
- package/dist/src/web-ui/local-runtime/plugin-mutation-admission.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/plugin-mutation-admission.js +17 -0
- package/dist/src/web-ui/local-runtime/plugin-removal-routes.d.ts +18 -0
- package/dist/src/web-ui/local-runtime/plugin-removal-routes.js +60 -0
- package/dist/src/web-ui/local-runtime/realtime-controller.js +41 -2
- package/dist/src/web-ui/local-runtime/request-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-cancellation-route.js +28 -1
- package/dist/src/web-ui/local-runtime/request-control-observation.d.ts +19 -0
- package/dist/src/web-ui/local-runtime/request-control-observation.js +80 -0
- package/dist/src/web-ui/local-runtime/request-execution.js +66 -34
- 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 +13 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +21 -0
- 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-routes.js +2 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-validation.js +9 -2
- package/dist/src/web-ui/local-runtime/session-routes.d.ts +1 -0
- package/dist/src/web-ui/local-runtime/session-routes.js +16 -4
- package/dist/src/web-ui/local-runtime/spark-chat-routes.js +4 -3
- package/dist/src/web-ui/local-runtime-backend.js +14 -0
- package/dist/src/web-ui/plugin-capability-selection.js +4 -1
- package/dist/src/web-ui/plugin-configuration-input.d.ts +12 -0
- package/dist/src/web-ui/plugin-configuration-input.js +68 -0
- package/dist/src/web-ui/plugin-configuration-retained-secrets.d.ts +9 -0
- package/dist/src/web-ui/plugin-configuration-retained-secrets.js +48 -0
- package/dist/src/web-ui/plugin-configuration-service.d.ts +52 -0
- package/dist/src/web-ui/plugin-configuration-service.js +66 -0
- package/dist/src/web-ui/plugin-configuration-view.d.ts +25 -0
- package/dist/src/web-ui/plugin-configuration-view.js +45 -0
- package/dist/src/web-ui/plugin-disabled-selection.d.ts +7 -0
- package/dist/src/web-ui/plugin-disabled-selection.js +17 -0
- package/dist/src/web-ui/plugin-management-catalog.d.ts +5 -1
- package/dist/src/web-ui/plugin-management-catalog.js +13 -1
- package/dist/src/web-ui/plugin-management-selection.js +22 -9
- package/dist/src/web-ui/plugin-management-service.d.ts +6 -1
- package/dist/src/web-ui/plugin-management-service.js +11 -7
- package/dist/src/web-ui/plugin-removal-error.d.ts +7 -0
- package/dist/src/web-ui/plugin-removal-error.js +16 -0
- package/dist/src/web-ui/plugin-removal-service.d.ts +31 -0
- package/dist/src/web-ui/plugin-removal-service.js +109 -0
- package/dist/src/web-ui/runtime-setup-gateway.d.ts +6 -2
- package/dist/src/web-ui/runtime-setup-gateway.js +30 -10
- package/dist/src/web-ui/server-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 +29 -3
- package/dist/src/web-ui/session-read-state/overview.d.ts +42 -0
- package/dist/src/web-ui/session-read-state/overview.js +16 -0
- package/dist/src/web-ui/session-read-state/pagination.d.ts +15 -0
- package/dist/src/web-ui/session-read-state/pagination.js +42 -0
- package/dist/src/web-ui/session-read-state/projection.d.ts +4 -3
- package/dist/src/web-ui/session-read-state/service.d.ts +213 -20
- package/dist/src/web-ui/session-read-state/service.js +25 -23
- package/dist/src/web-ui/session-read-state/visible-messages.d.ts +3 -3
- package/dist/src/web-ui/system-host-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/dist/src/web-ui/system-host-setup/companion-linux.js +1 -1
- package/dist/src/web-ui/system-host-setup/installer-contract.d.ts +1 -1
- package/dist/src/web-ui/system-host-setup/installer-contract.js +2 -2
- package/dist/src/web-ui/system-host-setup/installers.js +0 -7
- package/dist/src/web-ui/system-host-setup/local-connection.d.ts +4 -1
- package/dist/src/web-ui/system-host-setup/local-connection.js +10 -17
- package/dist/src/web-ui/system-host-setup/routes.d.ts +2 -0
- package/dist/src/web-ui/system-host-setup/routes.js +32 -9
- package/dist/src/web-ui/system-host-setup/setup-mutation.d.ts +9 -0
- package/dist/src/web-ui/system-host-setup/setup-mutation.js +27 -0
- package/dist/src/web-ui/system-host-setup/windows-store-route.d.ts +13 -0
- package/dist/src/web-ui/system-host-setup/windows-store-route.js +68 -0
- package/docs/configuration.md +46 -0
- package/docs/installation.md +88 -28
- package/docs/plugins.md +310 -6
- package/docs/projects-and-full-plus.md +2 -6
- package/docs/runtime-library.md +0 -1
- package/docs/tool-execution-result-evidence-contract.md +57 -0
- package/docs/windows-companion-store.md +132 -0
- package/package.json +6 -4
- package/plugins/capability-brief/plugin.json +4 -0
- package/plugins/code-outline/README.md +20 -0
- package/plugins/code-outline/plugin.json +1 -0
- package/plugins/code-outline/source/index.ts +16 -20
- package/plugins/code-outline/source/read-failure.ts +40 -0
- package/plugins/code-outline/src/index.cjs +614 -29
- package/plugins/document-reader/README.md +33 -0
- package/plugins/document-reader/plugin.json +2 -0
- package/plugins/document-reader/source/pdf-contract.ts +57 -0
- package/plugins/document-reader/source/pdf-parser.ts +139 -0
- package/plugins/document-reader/source/pdf-process-main.ts +56 -0
- package/plugins/document-reader/source/pdf-process.ts +207 -0
- package/plugins/document-reader/source/pdf-result.ts +79 -0
- package/plugins/document-reader/source/pdf-worker.ts +39 -303
- package/plugins/document-reader/source/pdf.ts +4 -1
- package/plugins/document-reader/source/read-failure.ts +37 -0
- package/plugins/document-reader/source/reader.ts +3 -19
- package/plugins/document-reader/src/index.cjs +995 -211
- package/plugins/exec/README.md +19 -0
- package/plugins/exec/plugin.json +7 -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 +8 -2
- package/plugins/filesystem/source/atomic-write.ts +2 -0
- package/plugins/filesystem/source/bounded-io.ts +80 -306
- package/plugins/filesystem/source/directory-sample.ts +2 -0
- package/plugins/filesystem/source/errors.ts +14 -0
- package/plugins/filesystem/source/file-observation.ts +151 -0
- package/plugins/filesystem/source/file-version.ts +41 -0
- package/plugins/filesystem/source/index.ts +6 -0
- package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
- package/plugins/filesystem/source/windows/authority-script.ts +1 -0
- package/plugins/filesystem/source/windows/native-script.ts +1 -0
- package/plugins/filesystem/source/windows/operations.ts +197 -0
- package/plugins/filesystem/source/windows/process.ts +214 -0
- package/plugins/filesystem/source/windows/publication-script.ts +29 -0
- package/plugins/filesystem/source/windows/read-script.ts +63 -0
- package/plugins/filesystem/source/windows/request-availability.ts +67 -0
- package/plugins/filesystem/source/windows/source.ts +42 -0
- package/plugins/filesystem/source/windows/storage-script.ts +11 -0
- package/plugins/filesystem/source/windows/streams-script.ts +24 -0
- package/plugins/filesystem/source/windows/write-script.ts +86 -0
- package/plugins/filesystem/src/index.cjs +1208 -322
- package/plugins/json-inspector/README.md +18 -0
- package/plugins/json-inspector/plugin.json +1 -0
- package/plugins/json-inspector/source/index.ts +16 -19
- package/plugins/json-inspector/source/read-failure.ts +42 -0
- package/plugins/json-inspector/src/index.cjs +612 -27
- package/plugins/local-search/README.md +29 -0
- package/plugins/local-search/plugin.json +2 -0
- package/plugins/local-search/source/errors.ts +2 -0
- package/plugins/local-search/source/paths.ts +3 -0
- package/plugins/local-search/source/ripgrep-process.ts +31 -5
- package/plugins/local-search/source/ripgrep.ts +3 -3
- package/plugins/local-search/source/windows-authority.ts +99 -0
- package/plugins/local-search/source/windows-search-lease.ts +49 -0
- package/plugins/local-search/source/windows-search-process.ts +91 -0
- package/plugins/local-search/source/windows-search-script.ts +52 -0
- package/plugins/local-search/src/index.cjs +595 -26
- package/plugins/memory/plugin.json +4 -0
- package/plugins/memory/source/lock-directory-claim.ts +56 -0
- package/plugins/memory/source/lock-owner-file.ts +71 -0
- package/plugins/memory/source/lock-path-observation.ts +26 -0
- package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
- package/plugins/memory/source/store-lock.ts +12 -7
- package/plugins/memory/source/store.ts +3 -2
- package/plugins/memory/src/index.cjs +174 -25
- package/plugins/project-orientation/README.md +23 -0
- package/plugins/project-orientation/plugin.json +1 -0
- package/plugins/project-orientation/source/index.ts +12 -9
- package/plugins/project-orientation/source/inspection-failure.ts +70 -0
- package/plugins/project-orientation/source/manifest-summary.ts +9 -2
- package/plugins/project-orientation/source/tree.ts +6 -0
- package/plugins/project-orientation/src/index.cjs +647 -31
- package/plugins/system/README.md +81 -5
- package/plugins/system/plugin.json +10 -1
- package/plugins/system/skills/system_actions/SKILL.md +1 -1
- package/plugins/system/source/command-working-directory.ts +47 -0
- package/plugins/system/source/companion-command-output.ts +82 -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 +21 -1
- package/plugins/system/source/index.ts +14 -6
- package/plugins/system/source/local-command-output-retention.ts +16 -0
- package/plugins/system/source/local-command-output.ts +69 -0
- package/plugins/system/source/request-system-modules.ts +14 -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 +1207 -86
- package/plugins/system-probe/plugin.json +8 -2
- package/plugins/system-probe/source/disk-path.ts +8 -0
- package/plugins/system-probe/source/index.ts +10 -5
- package/plugins/system-probe/source/machine-load.ts +33 -0
- package/plugins/system-probe/source/metrics.ts +6 -8
- package/plugins/system-probe/src/index.cjs +49 -16
- package/plugins/web/README.md +2 -2
- package/plugins/web/plugin.json +8 -0
- package/runtime.config.schema.json +25 -1
- package/src/runtime/README.md +12 -2
- package/dist/src/web-ui/system-host-setup/companion-windows.d.ts +0 -2
- package/dist/src/web-ui/system-host-setup/companion-windows.js +0 -108
- package/docs/publishing.md +0 -167
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# EXEC
|
|
2
|
+
|
|
3
|
+
EXEC runs trusted, non-interactive commands on the Runtime host. Linux/macOS and WSL use `/bin/bash -lc`; native Windows uses the system Windows PowerShell with no profile or visible console window. Companion routing belongs to SYSTEM.
|
|
4
|
+
|
|
5
|
+
The existing `exec`, `exec_wait`, and `exec_cancel` operations retain their exact-action approvals, request/session ownership, output cursors, retained output and time limits. Relative directories use the same agent-work root as filesystem; `workspace/...` uses the workspace, and absolute directories keep their explicit meaning. Commands run with the Runtime user's permissions; the directory is not a sandbox.
|
|
6
|
+
|
|
7
|
+
## Windows process lifetime
|
|
8
|
+
|
|
9
|
+
Before executing the supplied command, a PowerShell bootstrap compiles an internal C# adapter and attaches the shell to an unnamed Windows Job Object. The shell holds the sole, non-inheritable handle with `JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE`; ordinary child processes inherit job membership. Cancellation, time limits and shell exit terminate the group. The adapter does not support escaping background services or elevate privileges.
|
|
10
|
+
|
|
11
|
+
The command is sent over closed stdin, so multiline text and the full command limit do not depend on Windows command-line length. Output is UTF-8 and uses the existing retained-output path. Native program exit codes are preserved. PowerShell script execution policies are never changed or bypassed.
|
|
12
|
+
|
|
13
|
+
If language policy, compilation or job setup blocks startup, the command never runs and the returned diagnostic tells the model not to retry or bypass the restriction. The user or administrator must restore helper availability. The adapter requires no separate installation.
|
|
14
|
+
|
|
15
|
+
No live process is persisted or replayed during request restoration. The existing terminal-output snapshot remains the only saved execution state. A Job Object is process-local and ends with its owning shell.
|
|
16
|
+
|
|
17
|
+
Output metadata is written to a synced temporary file and atomically renamed on every platform. Unix also syncs the parent directory; Node does not support that directory sync on Windows, so directory-entry durability across sudden power loss is not guaranteed there. Write, file-sync and rename errors remain failures.
|
|
18
|
+
|
|
19
|
+
Filesystem change summaries on Windows use non-following file metadata (size and modification time). They do not read file contents for hashing, because Node has no Windows `O_NOFOLLOW`; a same-size edit that preserves the modification time can be unobserved. Command output and exit status are still reported. Linux/macOS retain bounded content hashing.
|
package/plugins/exec/plugin.json
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "exec",
|
|
4
4
|
"version": "1.0.0",
|
|
5
|
-
"description": "Execute, observe, and cancel trusted non-interactive
|
|
5
|
+
"description": "Execute, observe, and cancel trusted non-interactive shell processes: Bash on Linux/macOS, Windows PowerShell on native Windows with per-action approval in Ask/Full.",
|
|
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",
|
|
@@ -19,7 +20,7 @@
|
|
|
19
20
|
"capabilities": {
|
|
20
21
|
"exec": {
|
|
21
22
|
"catalogGroups": ["read", "write", "exec"],
|
|
22
|
-
"description": "Execute one trusted non-interactive /bin/bash
|
|
23
|
+
"description": "Execute one trusted non-interactive shell command: /bin/bash on Linux/macOS, Windows PowerShell on native Windows. Use an explicit existing directory: `.` and relative paths start at the agent-work root, `workspace/...` selects the workspace, and absolute host paths are accepted. Commands run with the runtime OS user permissions without parsing their contents for path or sensitivity restrictions. Ask/Full require approval of the exact action; FULL+ executes without that prompt. A command still running after the foreground window yields a process ID and cursor that exec_wait can resume without restarting it.",
|
|
23
24
|
"routingCapability": "filesystem_inspection",
|
|
24
25
|
"developmentRoles": ["inspect", "establish", "mutate", "verify", "auxiliary"],
|
|
25
26
|
"eventPresentation": {
|
|
@@ -41,7 +42,8 @@
|
|
|
41
42
|
"skills": ["exec_skill"],
|
|
42
43
|
"operations": {
|
|
43
44
|
"execute_command": {
|
|
44
|
-
"summary": "Execute one trusted non-interactive
|
|
45
|
+
"summary": "Execute one trusted non-interactive command in an explicit existing directory: Bash on Linux/macOS, Windows PowerShell on native Windows. This sensitive operation requires exact-action approval in Ask/Full and runs automatically in FULL+. The OS user permissions still apply; the selected folder is not a sandbox.",
|
|
46
|
+
"outputChannels": {"text": "metadata", "data": "metadata"},
|
|
45
47
|
"input": {
|
|
46
48
|
"type": "object",
|
|
47
49
|
"additionalProperties": false,
|
|
@@ -75,6 +77,7 @@
|
|
|
75
77
|
"operations": {
|
|
76
78
|
"wait_for_process": {
|
|
77
79
|
"summary": "Wait for the next bounded observation from one running exec process without restarting it.",
|
|
80
|
+
"outputChannels": {"text": "metadata", "data": "metadata"},
|
|
78
81
|
"input": {
|
|
79
82
|
"type": "object",
|
|
80
83
|
"additionalProperties": false,
|
|
@@ -111,6 +114,7 @@
|
|
|
111
114
|
"operations": {
|
|
112
115
|
"cancel_process": {
|
|
113
116
|
"summary": "Stop one active exec process and report its final state.",
|
|
117
|
+
"outputChannels": {"text": "metadata", "data": "metadata"},
|
|
114
118
|
"input": {
|
|
115
119
|
"type": "object",
|
|
116
120
|
"additionalProperties": false,
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# Exec Skill
|
|
2
2
|
|
|
3
3
|
- Use `exec` for shell work needed by the user's task. Prefer dedicated capabilities when they express that work directly.
|
|
4
|
-
- `exec` uses non-interactive `/bin/bash` on Linux
|
|
4
|
+
- `exec` uses non-interactive `/bin/bash` on Linux/macOS (including WSL) and Windows PowerShell on native Windows. Use the syntax of that shell. It executes on the Runtime host; it does not target a paired computer.
|
|
5
5
|
- Supply an explicit existing `cwd`. `.` and relative paths start from the configured agent-work directory, not an implicit Worker directory. `workspace/...` selects the configured workspace; absolute host directories are accepted.
|
|
6
6
|
- To create a project, select an existing parent `cwd` and create its directory in the command. A selected project provides working context, not a filesystem sandbox.
|
|
7
7
|
- The whole exec family is sensitive: Ask and Full request approval of each exact action through the normal tool flow; FULL+ executes without an additional ABot prompt. Submit the needed operation instead of declaring it unavailable solely because of the selected mode.
|
|
8
8
|
- Commands run as the runtime OS user. The plugin does not parse command contents to infer sensitivity or restrict referenced paths. OS permissions still apply; FULL+ does not grant root or Administrator rights.
|
|
9
9
|
- Execution has no interactive terminal and retains time, output and process limits. Use non-interactive forms; a terminal prompt cannot be answered through this tool.
|
|
10
|
-
- For multi-line input, use a
|
|
10
|
+
- For multi-line input, use the selected shell's syntax: a Bash here-document or a PowerShell here-string. Windows script execution policy remains in force; do not bypass it.
|
|
11
11
|
- If a process remains active, continue that exact process with `exec_wait`; do not launch the command again.
|
|
12
|
+
- Native Windows commands and their ordinary child processes share a Job Object. Cancelling, timing out, or exiting the shell ends that group; detached background services are not a persistent execution mode. If Windows blocks helper setup, no command runs: report the restriction to the user without retrying or bypassing it.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { constants, type Stats } from "node:fs";
|
|
3
|
+
import { lstat, open } from "node:fs/promises";
|
|
4
|
+
import type { ExecFilesystemEntry } from "./types.js";
|
|
5
|
+
|
|
6
|
+
const SNAPSHOT_MAX_HASHED_FILE_BYTES = 2 * 1024 * 1024;
|
|
7
|
+
|
|
8
|
+
export function isMissingPathError(error: unknown): boolean {
|
|
9
|
+
return (
|
|
10
|
+
error instanceof Error &&
|
|
11
|
+
"code" in error &&
|
|
12
|
+
(error.code === "ENOENT" || error.code === "ENOTDIR")
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function hashBuffer(content: Buffer): string {
|
|
17
|
+
return createHash("sha256").update(content).digest("hex");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export async function inspectExecRegularFile(
|
|
21
|
+
absolutePath: string,
|
|
22
|
+
remainingHashBytes: number,
|
|
23
|
+
): Promise<
|
|
24
|
+
| Readonly<{
|
|
25
|
+
entry: ExecFilesystemEntry;
|
|
26
|
+
hashedBytes: number;
|
|
27
|
+
}>
|
|
28
|
+
| undefined
|
|
29
|
+
> {
|
|
30
|
+
if (process.platform === "win32") {
|
|
31
|
+
// Windows has no O_NOFOLLOW. Observe metadata without opening content or
|
|
32
|
+
// following a reparse point; size/mtime deltas already support unhashed files.
|
|
33
|
+
const info = await lstat(absolutePath).catch((error: unknown) => {
|
|
34
|
+
if (isMissingPathError(error)) return null;
|
|
35
|
+
throw error;
|
|
36
|
+
});
|
|
37
|
+
if (!info?.isFile()) return undefined;
|
|
38
|
+
return Object.freeze({
|
|
39
|
+
entry: Object.freeze({
|
|
40
|
+
kind: "file" as const,
|
|
41
|
+
mode: info.mode,
|
|
42
|
+
size: info.size,
|
|
43
|
+
mtimeMs: info.mtimeMs,
|
|
44
|
+
}),
|
|
45
|
+
hashedBytes: 0,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
const noFollow = constants.O_NOFOLLOW;
|
|
49
|
+
if (!Number.isInteger(noFollow)) return undefined;
|
|
50
|
+
let file;
|
|
51
|
+
try {
|
|
52
|
+
file = await open(absolutePath, constants.O_RDONLY | noFollow);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
if (
|
|
55
|
+
isMissingPathError(error) ||
|
|
56
|
+
(error instanceof Error && "code" in error && error.code === "ELOOP")
|
|
57
|
+
) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const info: Stats = await file.stat();
|
|
64
|
+
if (!info.isFile()) return undefined;
|
|
65
|
+
let contentHash: string | undefined;
|
|
66
|
+
let hashedBytes = 0;
|
|
67
|
+
if (
|
|
68
|
+
info.size <= SNAPSHOT_MAX_HASHED_FILE_BYTES &&
|
|
69
|
+
info.size <= remainingHashBytes
|
|
70
|
+
) {
|
|
71
|
+
const length = Math.max(0, Math.floor(info.size));
|
|
72
|
+
const content = Buffer.alloc(length);
|
|
73
|
+
while (hashedBytes < length) {
|
|
74
|
+
const { bytesRead } = await file.read(
|
|
75
|
+
content,
|
|
76
|
+
hashedBytes,
|
|
77
|
+
length - hashedBytes,
|
|
78
|
+
hashedBytes,
|
|
79
|
+
);
|
|
80
|
+
if (bytesRead === 0) break;
|
|
81
|
+
hashedBytes += bytesRead;
|
|
82
|
+
}
|
|
83
|
+
contentHash = hashBuffer(content.subarray(0, hashedBytes));
|
|
84
|
+
}
|
|
85
|
+
return Object.freeze({
|
|
86
|
+
entry: Object.freeze({
|
|
87
|
+
kind: "file",
|
|
88
|
+
mode: info.mode,
|
|
89
|
+
size: info.size,
|
|
90
|
+
mtimeMs: info.mtimeMs,
|
|
91
|
+
...(contentHash === undefined ? {} : { contentHash }),
|
|
92
|
+
}),
|
|
93
|
+
hashedBytes,
|
|
94
|
+
});
|
|
95
|
+
} finally {
|
|
96
|
+
await file.close();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { lstat, open, opendir, readlink } from "node:fs/promises";
|
|
1
|
+
import type { Dirent } from "node:fs";
|
|
2
|
+
import { lstat, opendir, readlink } from "node:fs/promises";
|
|
4
3
|
import { join, posix } from "node:path";
|
|
5
4
|
|
|
6
5
|
import { sanitizeJsonText } from "../../../src/plugin-sdk/index.js";
|
|
7
6
|
|
|
7
|
+
import {
|
|
8
|
+
inspectExecRegularFile,
|
|
9
|
+
isMissingPathError,
|
|
10
|
+
} from "./filesystem-file-observer.js";
|
|
11
|
+
|
|
8
12
|
import type {
|
|
9
13
|
ExecActionSummary,
|
|
10
14
|
ExecFilesystemDelta,
|
|
@@ -14,22 +18,9 @@ import type {
|
|
|
14
18
|
|
|
15
19
|
const SNAPSHOT_MAX_ENTRIES = 4_096;
|
|
16
20
|
const SNAPSHOT_MAX_HASHED_BYTES = 16 * 1024 * 1024;
|
|
17
|
-
const SNAPSHOT_MAX_HASHED_FILE_BYTES = 2 * 1024 * 1024;
|
|
18
21
|
const DELTA_ACTION_LIMIT = 64;
|
|
19
22
|
const ACTION_TARGET_MAX_CHARS = 96;
|
|
20
23
|
|
|
21
|
-
function isMissingPathError(error: unknown): boolean {
|
|
22
|
-
return (
|
|
23
|
-
error instanceof Error &&
|
|
24
|
-
"code" in error &&
|
|
25
|
-
(error.code === "ENOENT" || error.code === "ENOTDIR")
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function hashBuffer(content: Buffer): string {
|
|
30
|
-
return createHash("sha256").update(content).digest("hex");
|
|
31
|
-
}
|
|
32
|
-
|
|
33
24
|
async function readBoundedDirectory(
|
|
34
25
|
absoluteDirectory: string,
|
|
35
26
|
maxItems: number,
|
|
@@ -70,68 +61,6 @@ async function readBoundedDirectory(
|
|
|
70
61
|
return Object.freeze({ children: Object.freeze(children), complete });
|
|
71
62
|
}
|
|
72
63
|
|
|
73
|
-
async function inspectRegularFile(
|
|
74
|
-
absolutePath: string,
|
|
75
|
-
remainingHashBytes: number,
|
|
76
|
-
): Promise<
|
|
77
|
-
| Readonly<{
|
|
78
|
-
entry: ExecFilesystemEntry;
|
|
79
|
-
hashedBytes: number;
|
|
80
|
-
}>
|
|
81
|
-
| undefined
|
|
82
|
-
> {
|
|
83
|
-
const noFollow = constants.O_NOFOLLOW;
|
|
84
|
-
if (!Number.isInteger(noFollow)) return undefined;
|
|
85
|
-
let file;
|
|
86
|
-
try {
|
|
87
|
-
file = await open(absolutePath, constants.O_RDONLY | noFollow);
|
|
88
|
-
} catch (error) {
|
|
89
|
-
if (
|
|
90
|
-
isMissingPathError(error) ||
|
|
91
|
-
(error instanceof Error && "code" in error && error.code === "ELOOP")
|
|
92
|
-
) {
|
|
93
|
-
return undefined;
|
|
94
|
-
}
|
|
95
|
-
throw error;
|
|
96
|
-
}
|
|
97
|
-
try {
|
|
98
|
-
const info: Stats = await file.stat();
|
|
99
|
-
if (!info.isFile()) return undefined;
|
|
100
|
-
let contentHash: string | undefined;
|
|
101
|
-
let hashedBytes = 0;
|
|
102
|
-
if (
|
|
103
|
-
info.size <= SNAPSHOT_MAX_HASHED_FILE_BYTES &&
|
|
104
|
-
info.size <= remainingHashBytes
|
|
105
|
-
) {
|
|
106
|
-
const length = Math.max(0, Math.floor(info.size));
|
|
107
|
-
const content = Buffer.alloc(length);
|
|
108
|
-
while (hashedBytes < length) {
|
|
109
|
-
const { bytesRead } = await file.read(
|
|
110
|
-
content,
|
|
111
|
-
hashedBytes,
|
|
112
|
-
length - hashedBytes,
|
|
113
|
-
hashedBytes,
|
|
114
|
-
);
|
|
115
|
-
if (bytesRead === 0) break;
|
|
116
|
-
hashedBytes += bytesRead;
|
|
117
|
-
}
|
|
118
|
-
contentHash = hashBuffer(content.subarray(0, hashedBytes));
|
|
119
|
-
}
|
|
120
|
-
return Object.freeze({
|
|
121
|
-
entry: Object.freeze({
|
|
122
|
-
kind: "file",
|
|
123
|
-
mode: info.mode,
|
|
124
|
-
size: info.size,
|
|
125
|
-
mtimeMs: info.mtimeMs,
|
|
126
|
-
...(contentHash === undefined ? {} : { contentHash }),
|
|
127
|
-
}),
|
|
128
|
-
hashedBytes,
|
|
129
|
-
});
|
|
130
|
-
} finally {
|
|
131
|
-
await file.close();
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
64
|
export async function captureExecFilesystemSnapshot(
|
|
136
65
|
absoluteRoot: string,
|
|
137
66
|
logicalRoot: string,
|
|
@@ -201,7 +130,7 @@ export async function captureExecFilesystemSnapshot(
|
|
|
201
130
|
continue;
|
|
202
131
|
}
|
|
203
132
|
if (info.isFile()) {
|
|
204
|
-
const inspected = await
|
|
133
|
+
const inspected = await inspectExecRegularFile(
|
|
205
134
|
absolutePath,
|
|
206
135
|
remainingHashBytes,
|
|
207
136
|
);
|
|
@@ -51,17 +51,23 @@ export async function writeOutputMetadata(
|
|
|
51
51
|
await file.close();
|
|
52
52
|
}
|
|
53
53
|
await rename(temporary, path);
|
|
54
|
-
|
|
55
|
-
try {
|
|
56
|
-
await directory.sync();
|
|
57
|
-
} finally {
|
|
58
|
-
await directory.close();
|
|
59
|
-
}
|
|
54
|
+
await syncOutputDirectoryEntry(path);
|
|
60
55
|
} catch (error) {
|
|
61
56
|
await rm(temporary, { force: true }).catch(() => undefined);
|
|
62
57
|
throw outputFailure("metadata_write_failed", error);
|
|
63
58
|
}
|
|
64
59
|
}
|
|
60
|
+
// Node cannot fsync a directory handle on Windows. The file is still synced
|
|
61
|
+
// before atomic rename; Unix also flushes the parent directory entry.
|
|
62
|
+
async function syncOutputDirectoryEntry(path: string): Promise<void> {
|
|
63
|
+
if (process.platform === "win32") return;
|
|
64
|
+
const directory = await open(dirname(path), "r");
|
|
65
|
+
try {
|
|
66
|
+
await directory.sync();
|
|
67
|
+
} finally {
|
|
68
|
+
await directory.close();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
65
71
|
export async function prepareOutputOwnerDirectory(
|
|
66
72
|
directory: string,
|
|
67
73
|
): Promise<void> {
|
|
@@ -54,11 +54,13 @@ export async function resolveExecWorkingDirectory(
|
|
|
54
54
|
executionContext: ToolExecutionContext | undefined,
|
|
55
55
|
rawPath: unknown,
|
|
56
56
|
): Promise<ExecWorkingDirectory> {
|
|
57
|
-
const
|
|
57
|
+
const inputPath = readRequiredString(rawPath, {
|
|
58
58
|
name: "cwd",
|
|
59
59
|
trim: false,
|
|
60
60
|
maxLength: 4_096,
|
|
61
61
|
});
|
|
62
|
+
const requestedPath =
|
|
63
|
+
process.platform === "win32" ? inputPath.replaceAll("\\", "/") : inputPath;
|
|
62
64
|
if (requestedPath.includes("\0")) {
|
|
63
65
|
throw new ExecPluginError(
|
|
64
66
|
"exec_cwd_invalid",
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { spawn, type ChildProcessByStdio } from "node:child_process";
|
|
2
1
|
import { randomUUID } from "node:crypto";
|
|
3
|
-
import type { Readable } from "node:stream";
|
|
4
2
|
import { tmpdir } from "node:os";
|
|
5
3
|
import { join } from "node:path";
|
|
6
4
|
import { ExecTerminalDelivery } from "./terminal-delivery.js";
|
|
@@ -13,13 +11,16 @@ import {
|
|
|
13
11
|
} from "./output-snapshot.js";
|
|
14
12
|
|
|
15
13
|
import { ExecPluginError } from "./errors.js";
|
|
16
|
-
import { assertSupportedShell
|
|
14
|
+
import { assertSupportedShell } from "./shell-platform.js";
|
|
15
|
+
import {
|
|
16
|
+
spawnExecShell,
|
|
17
|
+
killExecProcessTree,
|
|
18
|
+
type ExecChild,
|
|
19
|
+
} from "./shell-process.js";
|
|
17
20
|
import type { ExecProcessSnapshot, ExecTerminationReason } from "./types.js";
|
|
18
21
|
|
|
19
22
|
const MAX_ACTIVE_PROCESSES_PER_SCOPE = 4;
|
|
20
23
|
|
|
21
|
-
type ExecChild = ChildProcessByStdio<null, Readable, Readable>;
|
|
22
|
-
|
|
23
24
|
type ManagedExecProcess = {
|
|
24
25
|
processId: string;
|
|
25
26
|
scope: string;
|
|
@@ -108,26 +109,13 @@ export function createExecProcessManager(
|
|
|
108
109
|
(managed) => managed.scope === scope && !managed.settled,
|
|
109
110
|
).length + (opening.get(scope) ?? 0);
|
|
110
111
|
|
|
111
|
-
const killProcessTree = (managed: ManagedExecProcess): void => {
|
|
112
|
-
const pid = managed.child.pid;
|
|
113
|
-
if (typeof pid === "number") {
|
|
114
|
-
try {
|
|
115
|
-
process.kill(-pid, "SIGKILL");
|
|
116
|
-
return;
|
|
117
|
-
} catch {
|
|
118
|
-
// Fall through to the direct child as a best-effort fallback.
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
managed.child.kill("SIGKILL");
|
|
122
|
-
};
|
|
123
|
-
|
|
124
112
|
const requestTermination = (
|
|
125
113
|
managed: ManagedExecProcess,
|
|
126
114
|
reason: ExecTerminationReason,
|
|
127
115
|
): void => {
|
|
128
116
|
if (managed.settled || managed.terminationReason) return;
|
|
129
117
|
managed.terminationReason = reason;
|
|
130
|
-
|
|
118
|
+
killExecProcessTree(managed.child);
|
|
131
119
|
if (reason === "output_storage_failed") {
|
|
132
120
|
// A failed sink cannot drain the pipes; close them so child close settles.
|
|
133
121
|
managed.child.stdout.destroy();
|
|
@@ -298,11 +286,7 @@ export function createExecProcessManager(
|
|
|
298
286
|
});
|
|
299
287
|
let child: ExecChild;
|
|
300
288
|
try {
|
|
301
|
-
child =
|
|
302
|
-
cwd: params.cwd,
|
|
303
|
-
detached: true,
|
|
304
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
305
|
-
});
|
|
289
|
+
child = spawnExecShell(params.shellCommand, params.cwd);
|
|
306
290
|
} catch {
|
|
307
291
|
await output.dispose();
|
|
308
292
|
throw new ExecPluginError(
|
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
import { constants } from "node:fs";
|
|
2
2
|
import { access } from "node:fs/promises";
|
|
3
|
+
import { win32 } from "node:path";
|
|
3
4
|
|
|
4
5
|
import { ExecPluginError } from "./errors.js";
|
|
5
6
|
|
|
6
7
|
export const EXEC_SHELL = "/bin/bash";
|
|
7
8
|
|
|
9
|
+
export function execShell(
|
|
10
|
+
platform: NodeJS.Platform = process.platform,
|
|
11
|
+
): string {
|
|
12
|
+
if (platform === "win32")
|
|
13
|
+
return win32.join(
|
|
14
|
+
process.env.SystemRoot ?? "C:\\Windows",
|
|
15
|
+
"System32",
|
|
16
|
+
"WindowsPowerShell",
|
|
17
|
+
"v1.0",
|
|
18
|
+
"powershell.exe",
|
|
19
|
+
);
|
|
20
|
+
return EXEC_SHELL;
|
|
21
|
+
}
|
|
22
|
+
|
|
8
23
|
function isSupportedExecPlatform(platform: NodeJS.Platform): boolean {
|
|
24
|
+
if (platform === "win32") return true;
|
|
9
25
|
return platform === "linux" || platform === "darwin";
|
|
10
26
|
}
|
|
11
27
|
|
|
@@ -15,15 +31,15 @@ export async function assertSupportedShell(
|
|
|
15
31
|
if (!isSupportedExecPlatform(platform)) {
|
|
16
32
|
throw new ExecPluginError(
|
|
17
33
|
"exec_platform_unsupported",
|
|
18
|
-
"The exec plugin requires Linux or
|
|
34
|
+
"The exec plugin requires Linux/macOS with Bash or native Windows with Windows PowerShell.",
|
|
19
35
|
);
|
|
20
36
|
}
|
|
21
37
|
try {
|
|
22
|
-
await access(
|
|
38
|
+
await access(execShell(platform), constants.X_OK);
|
|
23
39
|
} catch {
|
|
24
40
|
throw new ExecPluginError(
|
|
25
41
|
"exec_shell_unavailable",
|
|
26
|
-
|
|
42
|
+
`The exec shell is unavailable: ${execShell(platform)}. No command ran. Do not retry until the user restores shell availability.`,
|
|
27
43
|
);
|
|
28
44
|
}
|
|
29
45
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { spawn, type ChildProcessByStdio } from "node:child_process";
|
|
2
|
+
import type { Readable, Writable } from "node:stream";
|
|
3
|
+
import { execShell } from "./shell-platform.js";
|
|
4
|
+
import { WINDOWS_EXEC_BOOTSTRAP } from "./windows-shell-bootstrap.js";
|
|
5
|
+
import { WINDOWS_EXEC_JOB_SOURCE } from "./windows-job-source.js";
|
|
6
|
+
|
|
7
|
+
export type ExecChild = ChildProcessByStdio<
|
|
8
|
+
Writable | null,
|
|
9
|
+
Readable,
|
|
10
|
+
Readable
|
|
11
|
+
>;
|
|
12
|
+
|
|
13
|
+
export function spawnExecShell(command: string, cwd: string): ExecChild {
|
|
14
|
+
if (process.platform !== "win32")
|
|
15
|
+
return spawn(execShell(), ["-lc", command], {
|
|
16
|
+
cwd,
|
|
17
|
+
detached: true,
|
|
18
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
19
|
+
});
|
|
20
|
+
const child = spawn(
|
|
21
|
+
execShell(),
|
|
22
|
+
[
|
|
23
|
+
"-NoLogo",
|
|
24
|
+
"-NoProfile",
|
|
25
|
+
"-NonInteractive",
|
|
26
|
+
"-EncodedCommand",
|
|
27
|
+
Buffer.from(WINDOWS_EXEC_BOOTSTRAP, "utf16le").toString("base64"),
|
|
28
|
+
],
|
|
29
|
+
{ cwd, windowsHide: true, stdio: ["pipe", "pipe", "pipe"] },
|
|
30
|
+
);
|
|
31
|
+
// Startup denial may close stdin early. The existing error/close path reports it.
|
|
32
|
+
child.stdin.on("error", () => {});
|
|
33
|
+
child.stdin.end(
|
|
34
|
+
JSON.stringify({ source: WINDOWS_EXEC_JOB_SOURCE, command }),
|
|
35
|
+
"utf8",
|
|
36
|
+
);
|
|
37
|
+
return child;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function killExecProcessTree(child: ExecChild): void {
|
|
41
|
+
if (process.platform === "win32") {
|
|
42
|
+
// The Job Object closes with its owning shell and terminates its descendants.
|
|
43
|
+
child.kill("SIGKILL");
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (typeof child.pid === "number") {
|
|
47
|
+
try {
|
|
48
|
+
process.kill(-child.pid, "SIGKILL");
|
|
49
|
+
return;
|
|
50
|
+
} catch {
|
|
51
|
+
// Preserve the existing Unix best-effort direct-child fallback.
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
child.kill("SIGKILL");
|
|
55
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WINDOWS_EXEC_JOB_SOURCE } from "../../../src/shared/windows-job-object.js";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** No execution-policy override: setup must succeed before any supplied command runs. */
|
|
2
|
+
export const WINDOWS_EXEC_BOOTSTRAP = [
|
|
3
|
+
"$ErrorActionPreference='Stop'",
|
|
4
|
+
"$ProgressPreference='SilentlyContinue'",
|
|
5
|
+
"if ($ExecutionContext.SessionState.LanguageMode -ne 'FullLanguage') { Write-Error 'Windows policy blocks the EXEC helper. No command ran. Do not retry or bypass this restriction; ask the user to contact their administrator.' -ErrorAction Continue; exit 126 }",
|
|
6
|
+
"$abotExecOriginalPSModulePath=$env:PSModulePath",
|
|
7
|
+
"try {",
|
|
8
|
+
"$env:PSModulePath=[IO.Path]::Combine($PSHOME,'Modules')",
|
|
9
|
+
"[Console]::InputEncoding=[Text.UTF8Encoding]::new($false)",
|
|
10
|
+
"[Console]::OutputEncoding=[Text.UTF8Encoding]::new($false)",
|
|
11
|
+
"$OutputEncoding=[Text.UTF8Encoding]::new($false)",
|
|
12
|
+
"$abotExecEnvelope=[Console]::In.ReadToEnd() | ConvertFrom-Json",
|
|
13
|
+
"Add-Type -TypeDefinition $abotExecEnvelope.source",
|
|
14
|
+
"[AbotExecJob]::Attach()",
|
|
15
|
+
"} catch { [Console]::Error.WriteLine('The Windows EXEC helper is unavailable or blocked. No command ran. Do not retry or bypass the restriction; the user must resolve helper availability first.'); exit 126 }",
|
|
16
|
+
"$env:PSModulePath=$abotExecOriginalPSModulePath",
|
|
17
|
+
"$global:LASTEXITCODE=0",
|
|
18
|
+
". ([ScriptBlock]::Create($abotExecEnvelope.command))",
|
|
19
|
+
"if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }",
|
|
20
|
+
].join(";\n");
|