@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
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
"version": "1.0.0",
|
|
5
5
|
"description": "Read, search, add, and delete deterministic long-term memory entries.",
|
|
6
6
|
"extensions": {
|
|
7
|
+
"ai.abot.compatibility": {
|
|
8
|
+
"version": 1,
|
|
9
|
+
"runtimePlatforms": ["linux", "darwin", "win32"]
|
|
10
|
+
},
|
|
7
11
|
"ai.abot.runtime": {
|
|
8
12
|
"version": 1,
|
|
9
13
|
"entrypoint": "./src/index.cjs",
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { BigIntStats } from "node:fs";
|
|
2
|
+
import { lstat, mkdir } from "node:fs/promises";
|
|
3
|
+
|
|
4
|
+
import { isWindowsLockObservationDenial } from "./lock-path-observation.js";
|
|
5
|
+
|
|
6
|
+
type LockClaimObservation = Readonly<{
|
|
7
|
+
observed: boolean;
|
|
8
|
+
entry?: BigIntStats;
|
|
9
|
+
}>;
|
|
10
|
+
|
|
11
|
+
function isAbsentLockClaimEntry(error: unknown): boolean {
|
|
12
|
+
if (!error || typeof error !== "object" || !("code" in error)) return false;
|
|
13
|
+
return error.code === "ENOENT";
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async function observeLockClaimPath(path: string): Promise<LockClaimObservation> {
|
|
17
|
+
try {
|
|
18
|
+
return { observed: true, entry: await lstat(path, { bigint: true }) };
|
|
19
|
+
} catch (error) {
|
|
20
|
+
return { observed: isAbsentLockClaimEntry(error) };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function hasObservedLockNameTransition(
|
|
25
|
+
before: LockClaimObservation,
|
|
26
|
+
after: LockClaimObservation,
|
|
27
|
+
): boolean {
|
|
28
|
+
if (!before.observed || !after.observed) return false;
|
|
29
|
+
if (!before.entry) return after.entry !== undefined;
|
|
30
|
+
if (!after.entry) return true;
|
|
31
|
+
if (before.entry.dev !== after.entry.dev) return true;
|
|
32
|
+
if (before.entry.ino !== after.entry.ino) return true;
|
|
33
|
+
if (before.entry.isDirectory() !== after.entry.isDirectory()) return true;
|
|
34
|
+
if (before.entry.isFile() !== after.entry.isFile()) return true;
|
|
35
|
+
return before.entry.isSymbolicLink() !== after.entry.isSymbolicLink();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Successful mkdir alone grants ownership; a proven name race is contention. */
|
|
39
|
+
export async function claimStoreLockDirectory(path: string): Promise<void> {
|
|
40
|
+
if (process.platform !== "win32") {
|
|
41
|
+
await mkdir(path, { mode: 0o700 });
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const before = await observeLockClaimPath(path);
|
|
45
|
+
try {
|
|
46
|
+
await mkdir(path, { mode: 0o700 });
|
|
47
|
+
} catch (error) {
|
|
48
|
+
if (!isWindowsLockObservationDenial(error)) throw error;
|
|
49
|
+
const after = await observeLockClaimPath(path);
|
|
50
|
+
if (!hasObservedLockNameTransition(before, after)) throw error;
|
|
51
|
+
throw Object.assign(new Error("Memory lock name changed during its directory claim."), {
|
|
52
|
+
code: "EEXIST",
|
|
53
|
+
cause: error,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { constants, type BigIntStats } from "node:fs";
|
|
2
|
+
import { lstat, open, type FileHandle } from "node:fs/promises";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
isWindowsLockObservationDenial,
|
|
6
|
+
rethrowLockObservationError,
|
|
7
|
+
} from "./lock-path-observation.js";
|
|
8
|
+
|
|
9
|
+
function lockOwnerOpenError(code: "ELOOP" | "EAGAIN"): Error {
|
|
10
|
+
return Object.assign(new Error("Memory lock owner is not a stable regular file."), {
|
|
11
|
+
code,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function hasSameRegularOwnerIdentity(
|
|
16
|
+
before: BigIntStats,
|
|
17
|
+
current: BigIntStats,
|
|
18
|
+
): boolean {
|
|
19
|
+
if (!current.isFile()) return false;
|
|
20
|
+
if (current.dev !== before.dev) return false;
|
|
21
|
+
return current.ino === before.ino;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async function openObservedLockOwner(
|
|
25
|
+
path: string,
|
|
26
|
+
flags: number,
|
|
27
|
+
before: BigIntStats,
|
|
28
|
+
): Promise<FileHandle> {
|
|
29
|
+
try {
|
|
30
|
+
return await open(path, flags);
|
|
31
|
+
} catch (error) {
|
|
32
|
+
if (!isWindowsLockObservationDenial(error)) throw error;
|
|
33
|
+
// Windows can report a pending deletion as EPERM. Only a fresh name
|
|
34
|
+
// observation may classify it as a vanished or replaced owner.
|
|
35
|
+
const named = await lstat(path, { bigint: true });
|
|
36
|
+
if (!hasSameRegularOwnerIdentity(before, named)) {
|
|
37
|
+
throw lockOwnerOpenError("EAGAIN");
|
|
38
|
+
}
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Preserve atomic no-follow where Node supports it. On Windows, verify the
|
|
45
|
+
* named regular file and opened handle before accepting any owner record.
|
|
46
|
+
* This guards lock ownership; it is not a general filesystem sandbox.
|
|
47
|
+
*/
|
|
48
|
+
export async function openLockOwnerFile(path: string): Promise<FileHandle> {
|
|
49
|
+
const before = await lstat(path, { bigint: true });
|
|
50
|
+
if (!before.isFile()) throw lockOwnerOpenError("ELOOP");
|
|
51
|
+
const noFollow = constants.O_NOFOLLOW;
|
|
52
|
+
const flags = typeof noFollow === "number"
|
|
53
|
+
? constants.O_RDONLY | noFollow
|
|
54
|
+
: constants.O_RDONLY;
|
|
55
|
+
const handle = await openObservedLockOwner(path, flags, before);
|
|
56
|
+
try {
|
|
57
|
+
const opened = await handle.stat({ bigint: true });
|
|
58
|
+
const named = await lstat(path, { bigint: true });
|
|
59
|
+
if (!hasSameRegularOwnerIdentity(before, opened)) {
|
|
60
|
+
throw lockOwnerOpenError("EAGAIN");
|
|
61
|
+
}
|
|
62
|
+
if (!hasSameRegularOwnerIdentity(before, named)) {
|
|
63
|
+
throw lockOwnerOpenError("EAGAIN");
|
|
64
|
+
}
|
|
65
|
+
return handle;
|
|
66
|
+
} catch (error) {
|
|
67
|
+
await handle.close().catch(() => undefined);
|
|
68
|
+
// Closing our handle can complete a Windows pending deletion.
|
|
69
|
+
return rethrowLockObservationError(path, error);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { lstat } from "node:fs/promises";
|
|
2
|
+
|
|
3
|
+
export function isWindowsLockObservationDenial(error: unknown): boolean {
|
|
4
|
+
if (process.platform !== "win32") return false;
|
|
5
|
+
if (!error || typeof error !== "object" || !("code" in error)) return false;
|
|
6
|
+
return error.code === "EPERM";
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function isMissingLockObservation(error: unknown): boolean {
|
|
10
|
+
if (!error || typeof error !== "object" || !("code" in error)) return false;
|
|
11
|
+
return error.code === "ENOENT";
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Normalize only a freshly confirmed disappearance; never accept opaque locks. */
|
|
15
|
+
export async function rethrowLockObservationError(
|
|
16
|
+
path: string,
|
|
17
|
+
error: unknown,
|
|
18
|
+
): Promise<never> {
|
|
19
|
+
if (!isWindowsLockObservationDenial(error)) throw error;
|
|
20
|
+
try {
|
|
21
|
+
await lstat(path);
|
|
22
|
+
} catch (observationError) {
|
|
23
|
+
if (isMissingLockObservation(observationError)) throw observationError;
|
|
24
|
+
}
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { rename } from "node:fs/promises";
|
|
2
|
+
import { performance } from "node:perf_hooks";
|
|
3
|
+
|
|
4
|
+
const WINDOWS_REPLACEMENT_WAIT_MS = 1_000;
|
|
5
|
+
const WINDOWS_REPLACEMENT_DELAY_MS = 25;
|
|
6
|
+
const MAX_REPLACEMENT_ATTEMPTS = 41;
|
|
7
|
+
|
|
8
|
+
function isRetryableWindowsMemoryReplacementError(error: unknown): boolean {
|
|
9
|
+
if (process.platform !== "win32") return false;
|
|
10
|
+
if (error === null || typeof error !== "object") return false;
|
|
11
|
+
return "code" in error && error.code === "EPERM";
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function canWaitForMemoryReplacement(attempts: number, deadline: number): boolean {
|
|
15
|
+
if (attempts >= MAX_REPLACEMENT_ATTEMPTS) return false;
|
|
16
|
+
return performance.now() < deadline;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Readers can temporarily deny Windows replacement. Permanent EPERM stays an error.
|
|
21
|
+
* The caller keeps the mutation lock and owns cleanup; never rerun the mutation.
|
|
22
|
+
*/
|
|
23
|
+
export async function replacePreparedMemoryFile(temporary: string, target: string): Promise<void> {
|
|
24
|
+
const deadline = performance.now() + WINDOWS_REPLACEMENT_WAIT_MS;
|
|
25
|
+
let attempts = 0;
|
|
26
|
+
for (;;) {
|
|
27
|
+
attempts += 1;
|
|
28
|
+
try {
|
|
29
|
+
await rename(temporary, target);
|
|
30
|
+
return;
|
|
31
|
+
} catch (error) {
|
|
32
|
+
if (!isRetryableWindowsMemoryReplacementError(error)) throw error;
|
|
33
|
+
if (!canWaitForMemoryReplacement(attempts, deadline)) throw error;
|
|
34
|
+
const delayMs = Math.min(WINDOWS_REPLACEMENT_DELAY_MS, deadline - performance.now());
|
|
35
|
+
await new Promise<void>((resolve) => setTimeout(resolve, Math.max(0, delayMs)));
|
|
36
|
+
// A late timer must not start another attempt beyond the monotonic deadline.
|
|
37
|
+
if (performance.now() >= deadline) throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { constants } from "node:fs";
|
|
3
2
|
import {
|
|
4
3
|
lstat,
|
|
5
4
|
mkdir,
|
|
@@ -13,6 +12,9 @@ import {
|
|
|
13
12
|
import { dirname, join } from "node:path";
|
|
14
13
|
|
|
15
14
|
import { MemoryStoreError } from "./types.js";
|
|
15
|
+
import { openLockOwnerFile } from "./lock-owner-file.js";
|
|
16
|
+
import { rethrowLockObservationError } from "./lock-path-observation.js";
|
|
17
|
+
import { claimStoreLockDirectory } from "./lock-directory-claim.js";
|
|
16
18
|
|
|
17
19
|
const DEFAULT_WAIT_MS = 10_000;
|
|
18
20
|
const DEFAULT_RETRY_MS = 10;
|
|
@@ -112,9 +114,8 @@ async function readOwnerRecord(
|
|
|
112
114
|
): Promise<DirectoryLockSnapshot> {
|
|
113
115
|
let handle: FileHandle | undefined;
|
|
114
116
|
try {
|
|
115
|
-
handle = await
|
|
117
|
+
handle = await openLockOwnerFile(
|
|
116
118
|
join(lockPath, LEASE_DIRECTORY_NAME, entryName),
|
|
117
|
-
constants.O_RDONLY | constants.O_NOFOLLOW,
|
|
118
119
|
);
|
|
119
120
|
const info = await handle.stat({ bigint: true });
|
|
120
121
|
const modifiedAtMs = Math.max(directoryModifiedAtMs, Number(info.mtimeMs));
|
|
@@ -179,7 +180,7 @@ async function readOwnerRecord(
|
|
|
179
180
|
});
|
|
180
181
|
} catch (error) {
|
|
181
182
|
const code = fileSystemErrorCode(error);
|
|
182
|
-
if (code === "ENOENT") {
|
|
183
|
+
if (code === "ENOENT" || code === "EAGAIN") {
|
|
183
184
|
return Object.freeze({
|
|
184
185
|
kind: "directory",
|
|
185
186
|
modifiedAtMs: directoryModifiedAtMs,
|
|
@@ -218,7 +219,9 @@ async function readLockSnapshot(
|
|
|
218
219
|
|
|
219
220
|
let entries;
|
|
220
221
|
try {
|
|
221
|
-
entries = await readdir(lockPath, { withFileTypes: true })
|
|
222
|
+
entries = await readdir(lockPath, { withFileTypes: true }).catch(
|
|
223
|
+
(error) => rethrowLockObservationError(lockPath, error),
|
|
224
|
+
);
|
|
222
225
|
} catch (error) {
|
|
223
226
|
const code = fileSystemErrorCode(error);
|
|
224
227
|
if (code === "ENOENT") return undefined;
|
|
@@ -259,7 +262,9 @@ async function readLockSnapshot(
|
|
|
259
262
|
reclaimable: false,
|
|
260
263
|
});
|
|
261
264
|
}
|
|
262
|
-
leaseEntries = await readdir(leasePath, { withFileTypes: true })
|
|
265
|
+
leaseEntries = await readdir(leasePath, { withFileTypes: true }).catch(
|
|
266
|
+
(error) => rethrowLockObservationError(leasePath, error),
|
|
267
|
+
);
|
|
263
268
|
} catch (error) {
|
|
264
269
|
const code = fileSystemErrorCode(error);
|
|
265
270
|
if (code === "ENOENT") {
|
|
@@ -417,7 +422,7 @@ async function installLockDirectory(
|
|
|
417
422
|
await handle.sync();
|
|
418
423
|
await handle.close();
|
|
419
424
|
handle = undefined;
|
|
420
|
-
await
|
|
425
|
+
await claimStoreLockDirectory(lockPath);
|
|
421
426
|
claimedLockPath = true;
|
|
422
427
|
await rename(stagingPath, join(lockPath, LEASE_DIRECTORY_NAME));
|
|
423
428
|
installed = true;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { access, mkdir, open,
|
|
2
|
+
import { access, mkdir, open, rm, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname } from "node:path";
|
|
4
4
|
|
|
5
5
|
import {
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
type MemoryStoreState,
|
|
9
9
|
} from "./types.js";
|
|
10
10
|
import { acquireStoreLock } from "./store-lock.js";
|
|
11
|
+
import { replacePreparedMemoryFile } from "./prepared-memory-replacement.js";
|
|
11
12
|
|
|
12
13
|
const MAX_STORE_BYTES = 4 * 1024 * 1024;
|
|
13
14
|
const MAX_STORE_ENTRIES = 2_000;
|
|
@@ -133,7 +134,7 @@ async function atomicWrite(
|
|
|
133
134
|
encoding: "utf8",
|
|
134
135
|
mode: 0o600,
|
|
135
136
|
});
|
|
136
|
-
await
|
|
137
|
+
await replacePreparedMemoryFile(temporaryPath, filePath);
|
|
137
138
|
} finally {
|
|
138
139
|
await rm(temporaryPath, { force: true });
|
|
139
140
|
}
|
|
@@ -311,7 +311,7 @@ function searchMemory(entries, query, maximum) {
|
|
|
311
311
|
|
|
312
312
|
// plugins/memory/source/store.ts
|
|
313
313
|
var import_node_crypto2 = require("node:crypto");
|
|
314
|
-
var
|
|
314
|
+
var import_promises6 = require("node:fs/promises");
|
|
315
315
|
var import_node_path2 = require("node:path");
|
|
316
316
|
|
|
317
317
|
// plugins/memory/source/types.ts
|
|
@@ -329,9 +329,122 @@ function isMemoryStoreError(error) {
|
|
|
329
329
|
|
|
330
330
|
// plugins/memory/source/store-lock.ts
|
|
331
331
|
var import_node_crypto = require("node:crypto");
|
|
332
|
+
var import_promises4 = require("node:fs/promises");
|
|
333
|
+
var import_node_path = require("node:path");
|
|
334
|
+
|
|
335
|
+
// plugins/memory/source/lock-owner-file.ts
|
|
332
336
|
var import_node_fs = require("node:fs");
|
|
337
|
+
var import_promises2 = require("node:fs/promises");
|
|
338
|
+
|
|
339
|
+
// plugins/memory/source/lock-path-observation.ts
|
|
333
340
|
var import_promises = require("node:fs/promises");
|
|
334
|
-
|
|
341
|
+
function isWindowsLockObservationDenial(error) {
|
|
342
|
+
if (process.platform !== "win32") return false;
|
|
343
|
+
if (!error || typeof error !== "object" || !("code" in error)) return false;
|
|
344
|
+
return error.code === "EPERM";
|
|
345
|
+
}
|
|
346
|
+
function isMissingLockObservation(error) {
|
|
347
|
+
if (!error || typeof error !== "object" || !("code" in error)) return false;
|
|
348
|
+
return error.code === "ENOENT";
|
|
349
|
+
}
|
|
350
|
+
async function rethrowLockObservationError(path, error) {
|
|
351
|
+
if (!isWindowsLockObservationDenial(error)) throw error;
|
|
352
|
+
try {
|
|
353
|
+
await (0, import_promises.lstat)(path);
|
|
354
|
+
} catch (observationError) {
|
|
355
|
+
if (isMissingLockObservation(observationError)) throw observationError;
|
|
356
|
+
}
|
|
357
|
+
throw error;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// plugins/memory/source/lock-owner-file.ts
|
|
361
|
+
function lockOwnerOpenError(code) {
|
|
362
|
+
return Object.assign(new Error("Memory lock owner is not a stable regular file."), {
|
|
363
|
+
code
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
function hasSameRegularOwnerIdentity(before, current) {
|
|
367
|
+
if (!current.isFile()) return false;
|
|
368
|
+
if (current.dev !== before.dev) return false;
|
|
369
|
+
return current.ino === before.ino;
|
|
370
|
+
}
|
|
371
|
+
async function openObservedLockOwner(path, flags, before) {
|
|
372
|
+
try {
|
|
373
|
+
return await (0, import_promises2.open)(path, flags);
|
|
374
|
+
} catch (error) {
|
|
375
|
+
if (!isWindowsLockObservationDenial(error)) throw error;
|
|
376
|
+
const named = await (0, import_promises2.lstat)(path, { bigint: true });
|
|
377
|
+
if (!hasSameRegularOwnerIdentity(before, named)) {
|
|
378
|
+
throw lockOwnerOpenError("EAGAIN");
|
|
379
|
+
}
|
|
380
|
+
throw error;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
async function openLockOwnerFile(path) {
|
|
384
|
+
const before = await (0, import_promises2.lstat)(path, { bigint: true });
|
|
385
|
+
if (!before.isFile()) throw lockOwnerOpenError("ELOOP");
|
|
386
|
+
const noFollow = import_node_fs.constants.O_NOFOLLOW;
|
|
387
|
+
const flags = typeof noFollow === "number" ? import_node_fs.constants.O_RDONLY | noFollow : import_node_fs.constants.O_RDONLY;
|
|
388
|
+
const handle = await openObservedLockOwner(path, flags, before);
|
|
389
|
+
try {
|
|
390
|
+
const opened = await handle.stat({ bigint: true });
|
|
391
|
+
const named = await (0, import_promises2.lstat)(path, { bigint: true });
|
|
392
|
+
if (!hasSameRegularOwnerIdentity(before, opened)) {
|
|
393
|
+
throw lockOwnerOpenError("EAGAIN");
|
|
394
|
+
}
|
|
395
|
+
if (!hasSameRegularOwnerIdentity(before, named)) {
|
|
396
|
+
throw lockOwnerOpenError("EAGAIN");
|
|
397
|
+
}
|
|
398
|
+
return handle;
|
|
399
|
+
} catch (error) {
|
|
400
|
+
await handle.close().catch(() => void 0);
|
|
401
|
+
return rethrowLockObservationError(path, error);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// plugins/memory/source/lock-directory-claim.ts
|
|
406
|
+
var import_promises3 = require("node:fs/promises");
|
|
407
|
+
function isAbsentLockClaimEntry(error) {
|
|
408
|
+
if (!error || typeof error !== "object" || !("code" in error)) return false;
|
|
409
|
+
return error.code === "ENOENT";
|
|
410
|
+
}
|
|
411
|
+
async function observeLockClaimPath(path) {
|
|
412
|
+
try {
|
|
413
|
+
return { observed: true, entry: await (0, import_promises3.lstat)(path, { bigint: true }) };
|
|
414
|
+
} catch (error) {
|
|
415
|
+
return { observed: isAbsentLockClaimEntry(error) };
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
function hasObservedLockNameTransition(before, after) {
|
|
419
|
+
if (!before.observed || !after.observed) return false;
|
|
420
|
+
if (!before.entry) return after.entry !== void 0;
|
|
421
|
+
if (!after.entry) return true;
|
|
422
|
+
if (before.entry.dev !== after.entry.dev) return true;
|
|
423
|
+
if (before.entry.ino !== after.entry.ino) return true;
|
|
424
|
+
if (before.entry.isDirectory() !== after.entry.isDirectory()) return true;
|
|
425
|
+
if (before.entry.isFile() !== after.entry.isFile()) return true;
|
|
426
|
+
return before.entry.isSymbolicLink() !== after.entry.isSymbolicLink();
|
|
427
|
+
}
|
|
428
|
+
async function claimStoreLockDirectory(path) {
|
|
429
|
+
if (process.platform !== "win32") {
|
|
430
|
+
await (0, import_promises3.mkdir)(path, { mode: 448 });
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
const before = await observeLockClaimPath(path);
|
|
434
|
+
try {
|
|
435
|
+
await (0, import_promises3.mkdir)(path, { mode: 448 });
|
|
436
|
+
} catch (error) {
|
|
437
|
+
if (!isWindowsLockObservationDenial(error)) throw error;
|
|
438
|
+
const after = await observeLockClaimPath(path);
|
|
439
|
+
if (!hasObservedLockNameTransition(before, after)) throw error;
|
|
440
|
+
throw Object.assign(new Error("Memory lock name changed during its directory claim."), {
|
|
441
|
+
code: "EEXIST",
|
|
442
|
+
cause: error
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// plugins/memory/source/store-lock.ts
|
|
335
448
|
var DEFAULT_WAIT_MS = 1e4;
|
|
336
449
|
var DEFAULT_RETRY_MS = 10;
|
|
337
450
|
var MAX_LOCK_BYTES = 1024;
|
|
@@ -379,9 +492,8 @@ function parseLockContents(raw, expectedToken) {
|
|
|
379
492
|
async function readOwnerRecord(lockPath, entryName, expectedToken, directoryModifiedAtMs) {
|
|
380
493
|
let handle;
|
|
381
494
|
try {
|
|
382
|
-
handle = await (
|
|
383
|
-
(0, import_node_path.join)(lockPath, LEASE_DIRECTORY_NAME, entryName)
|
|
384
|
-
import_node_fs.constants.O_RDONLY | import_node_fs.constants.O_NOFOLLOW
|
|
495
|
+
handle = await openLockOwnerFile(
|
|
496
|
+
(0, import_node_path.join)(lockPath, LEASE_DIRECTORY_NAME, entryName)
|
|
385
497
|
);
|
|
386
498
|
const info = await handle.stat({ bigint: true });
|
|
387
499
|
const modifiedAtMs = Math.max(directoryModifiedAtMs, Number(info.mtimeMs));
|
|
@@ -435,7 +547,7 @@ async function readOwnerRecord(lockPath, entryName, expectedToken, directoryModi
|
|
|
435
547
|
});
|
|
436
548
|
} catch (error) {
|
|
437
549
|
const code = fileSystemErrorCode(error);
|
|
438
|
-
if (code === "ENOENT") {
|
|
550
|
+
if (code === "ENOENT" || code === "EAGAIN") {
|
|
439
551
|
return Object.freeze({
|
|
440
552
|
kind: "directory",
|
|
441
553
|
modifiedAtMs: directoryModifiedAtMs,
|
|
@@ -460,7 +572,7 @@ async function readOwnerRecord(lockPath, entryName, expectedToken, directoryModi
|
|
|
460
572
|
async function readLockSnapshot(lockPath) {
|
|
461
573
|
let lockInfo;
|
|
462
574
|
try {
|
|
463
|
-
lockInfo = await (0,
|
|
575
|
+
lockInfo = await (0, import_promises4.lstat)(lockPath);
|
|
464
576
|
} catch (error) {
|
|
465
577
|
if (fileSystemErrorCode(error) === "ENOENT") return void 0;
|
|
466
578
|
throw error;
|
|
@@ -470,7 +582,9 @@ async function readLockSnapshot(lockPath) {
|
|
|
470
582
|
}
|
|
471
583
|
let entries;
|
|
472
584
|
try {
|
|
473
|
-
entries = await (0,
|
|
585
|
+
entries = await (0, import_promises4.readdir)(lockPath, { withFileTypes: true }).catch(
|
|
586
|
+
(error) => rethrowLockObservationError(lockPath, error)
|
|
587
|
+
);
|
|
474
588
|
} catch (error) {
|
|
475
589
|
const code = fileSystemErrorCode(error);
|
|
476
590
|
if (code === "ENOENT") return void 0;
|
|
@@ -497,7 +611,7 @@ async function readLockSnapshot(lockPath) {
|
|
|
497
611
|
let leaseInfo;
|
|
498
612
|
let leaseEntries;
|
|
499
613
|
try {
|
|
500
|
-
leaseInfo = await (0,
|
|
614
|
+
leaseInfo = await (0, import_promises4.lstat)(leasePath);
|
|
501
615
|
if (!leaseInfo.isDirectory()) {
|
|
502
616
|
return Object.freeze({
|
|
503
617
|
kind: "directory",
|
|
@@ -506,7 +620,9 @@ async function readLockSnapshot(lockPath) {
|
|
|
506
620
|
reclaimable: false
|
|
507
621
|
});
|
|
508
622
|
}
|
|
509
|
-
leaseEntries = await (0,
|
|
623
|
+
leaseEntries = await (0, import_promises4.readdir)(leasePath, { withFileTypes: true }).catch(
|
|
624
|
+
(error) => rethrowLockObservationError(leasePath, error)
|
|
625
|
+
);
|
|
510
626
|
} catch (error) {
|
|
511
627
|
const code = fileSystemErrorCode(error);
|
|
512
628
|
if (code === "ENOENT") {
|
|
@@ -550,7 +666,7 @@ async function readLockSnapshot(lockPath) {
|
|
|
550
666
|
}
|
|
551
667
|
async function removeDirectoryIfEmpty(path) {
|
|
552
668
|
try {
|
|
553
|
-
await (0,
|
|
669
|
+
await (0, import_promises4.rmdir)(path);
|
|
554
670
|
return true;
|
|
555
671
|
} catch (error) {
|
|
556
672
|
const code = fileSystemErrorCode(error);
|
|
@@ -569,7 +685,7 @@ async function removeEmptyLockTree(lockPath, hasLeaseDirectory) {
|
|
|
569
685
|
}
|
|
570
686
|
async function removeObservedOwner(lockPath, observedOwnerFileName) {
|
|
571
687
|
try {
|
|
572
|
-
await (0,
|
|
688
|
+
await (0, import_promises4.unlink)((0, import_node_path.join)(lockPath, LEASE_DIRECTORY_NAME, observedOwnerFileName));
|
|
573
689
|
} catch (error) {
|
|
574
690
|
if (fileSystemErrorCode(error) === "ENOENT") return false;
|
|
575
691
|
throw error;
|
|
@@ -603,12 +719,12 @@ function isLockConflict(error) {
|
|
|
603
719
|
}
|
|
604
720
|
async function removeStagingLock(stagingPath, stagingOwnerPath) {
|
|
605
721
|
try {
|
|
606
|
-
await (0,
|
|
722
|
+
await (0, import_promises4.unlink)(stagingOwnerPath);
|
|
607
723
|
} catch (error) {
|
|
608
724
|
if (fileSystemErrorCode(error) !== "ENOENT") throw error;
|
|
609
725
|
}
|
|
610
726
|
try {
|
|
611
|
-
await (0,
|
|
727
|
+
await (0, import_promises4.rmdir)(stagingPath);
|
|
612
728
|
} catch (error) {
|
|
613
729
|
if (fileSystemErrorCode(error) !== "ENOENT") throw error;
|
|
614
730
|
}
|
|
@@ -620,8 +736,8 @@ async function installLockDirectory(lockPath, token) {
|
|
|
620
736
|
let installed = false;
|
|
621
737
|
let claimedLockPath = false;
|
|
622
738
|
try {
|
|
623
|
-
await (0,
|
|
624
|
-
handle = await (0,
|
|
739
|
+
await (0, import_promises4.mkdir)(stagingPath, { mode: 448 });
|
|
740
|
+
handle = await (0, import_promises4.open)(stagingOwnerPath, "wx", 384);
|
|
625
741
|
await handle.writeFile(
|
|
626
742
|
JSON.stringify({
|
|
627
743
|
pid: process.pid,
|
|
@@ -633,9 +749,9 @@ async function installLockDirectory(lockPath, token) {
|
|
|
633
749
|
await handle.sync();
|
|
634
750
|
await handle.close();
|
|
635
751
|
handle = void 0;
|
|
636
|
-
await (
|
|
752
|
+
await claimStoreLockDirectory(lockPath);
|
|
637
753
|
claimedLockPath = true;
|
|
638
|
-
await (0,
|
|
754
|
+
await (0, import_promises4.rename)(stagingPath, (0, import_node_path.join)(lockPath, LEASE_DIRECTORY_NAME));
|
|
639
755
|
installed = true;
|
|
640
756
|
} finally {
|
|
641
757
|
await handle?.close().catch(() => void 0);
|
|
@@ -653,7 +769,7 @@ async function acquireStoreLock(filePath, options = {}) {
|
|
|
653
769
|
const retryMs = options.retryMs ?? DEFAULT_RETRY_MS;
|
|
654
770
|
const processIsAlive = options.processIsAlive ?? defaultProcessIsAlive;
|
|
655
771
|
const deadline = Date.now() + waitMs;
|
|
656
|
-
await (0,
|
|
772
|
+
await (0, import_promises4.mkdir)((0, import_node_path.dirname)(filePath), { recursive: true });
|
|
657
773
|
while (true) {
|
|
658
774
|
const token = (0, import_node_crypto.randomUUID)();
|
|
659
775
|
try {
|
|
@@ -692,6 +808,39 @@ async function acquireStoreLock(filePath, options = {}) {
|
|
|
692
808
|
}
|
|
693
809
|
}
|
|
694
810
|
|
|
811
|
+
// plugins/memory/source/prepared-memory-replacement.ts
|
|
812
|
+
var import_promises5 = require("node:fs/promises");
|
|
813
|
+
var import_node_perf_hooks = require("node:perf_hooks");
|
|
814
|
+
var WINDOWS_REPLACEMENT_WAIT_MS = 1e3;
|
|
815
|
+
var WINDOWS_REPLACEMENT_DELAY_MS = 25;
|
|
816
|
+
var MAX_REPLACEMENT_ATTEMPTS = 41;
|
|
817
|
+
function isRetryableWindowsMemoryReplacementError(error) {
|
|
818
|
+
if (process.platform !== "win32") return false;
|
|
819
|
+
if (error === null || typeof error !== "object") return false;
|
|
820
|
+
return "code" in error && error.code === "EPERM";
|
|
821
|
+
}
|
|
822
|
+
function canWaitForMemoryReplacement(attempts, deadline) {
|
|
823
|
+
if (attempts >= MAX_REPLACEMENT_ATTEMPTS) return false;
|
|
824
|
+
return import_node_perf_hooks.performance.now() < deadline;
|
|
825
|
+
}
|
|
826
|
+
async function replacePreparedMemoryFile(temporary, target) {
|
|
827
|
+
const deadline = import_node_perf_hooks.performance.now() + WINDOWS_REPLACEMENT_WAIT_MS;
|
|
828
|
+
let attempts = 0;
|
|
829
|
+
for (; ; ) {
|
|
830
|
+
attempts += 1;
|
|
831
|
+
try {
|
|
832
|
+
await (0, import_promises5.rename)(temporary, target);
|
|
833
|
+
return;
|
|
834
|
+
} catch (error) {
|
|
835
|
+
if (!isRetryableWindowsMemoryReplacementError(error)) throw error;
|
|
836
|
+
if (!canWaitForMemoryReplacement(attempts, deadline)) throw error;
|
|
837
|
+
const delayMs = Math.min(WINDOWS_REPLACEMENT_DELAY_MS, deadline - import_node_perf_hooks.performance.now());
|
|
838
|
+
await new Promise((resolve) => setTimeout(resolve, Math.max(0, delayMs)));
|
|
839
|
+
if (import_node_perf_hooks.performance.now() >= deadline) throw error;
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
|
|
695
844
|
// plugins/memory/source/store.ts
|
|
696
845
|
var MAX_STORE_BYTES = 4 * 1024 * 1024;
|
|
697
846
|
var MAX_STORE_ENTRIES = 2e3;
|
|
@@ -792,13 +941,13 @@ async function atomicWrite(filePath, state) {
|
|
|
792
941
|
);
|
|
793
942
|
}
|
|
794
943
|
try {
|
|
795
|
-
await (0,
|
|
944
|
+
await (0, import_promises6.writeFile)(temporaryPath, serialized, {
|
|
796
945
|
encoding: "utf8",
|
|
797
946
|
mode: 384
|
|
798
947
|
});
|
|
799
|
-
await (
|
|
948
|
+
await replacePreparedMemoryFile(temporaryPath, filePath);
|
|
800
949
|
} finally {
|
|
801
|
-
await (0,
|
|
950
|
+
await (0, import_promises6.rm)(temporaryPath, { force: true });
|
|
802
951
|
}
|
|
803
952
|
}
|
|
804
953
|
function nextSequenceAfter(entries) {
|
|
@@ -818,7 +967,7 @@ function fileSystemErrorCode2(error) {
|
|
|
818
967
|
return error && typeof error === "object" && "code" in error ? String(error.code) : void 0;
|
|
819
968
|
}
|
|
820
969
|
async function readStoreFile(filePath) {
|
|
821
|
-
const handle = await (0,
|
|
970
|
+
const handle = await (0, import_promises6.open)(filePath, "r");
|
|
822
971
|
try {
|
|
823
972
|
const info = await handle.stat();
|
|
824
973
|
if (!info.isFile()) {
|
|
@@ -869,9 +1018,9 @@ var MemoryStore = class {
|
|
|
869
1018
|
return initialization;
|
|
870
1019
|
}
|
|
871
1020
|
async #initialize() {
|
|
872
|
-
await (0,
|
|
1021
|
+
await (0, import_promises6.mkdir)((0, import_node_path2.dirname)(this.#filePath), { recursive: true });
|
|
873
1022
|
try {
|
|
874
|
-
await (0,
|
|
1023
|
+
await (0, import_promises6.access)(this.#filePath);
|
|
875
1024
|
return;
|
|
876
1025
|
} catch (error) {
|
|
877
1026
|
if (fileSystemErrorCode2(error) !== "ENOENT") {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Project Orientation
|
|
2
|
+
|
|
3
|
+
Inspects a bounded directory tree and project manifest metadata on Linux, macOS
|
|
4
|
+
and native Windows. Relative paths use the configured agent work directory;
|
|
5
|
+
`workspace/...` selects configured workspace sources. Absolute paths retain
|
|
6
|
+
the same authorization boundary, including request-specific restrictions.
|
|
7
|
+
|
|
8
|
+
Package metadata uses the SDK's bounded reader (256 KiB maximum). Other known
|
|
9
|
+
manifest names are detected without reading their contents. Inspection never
|
|
10
|
+
executes package scripts or changes project files. Existing depth, entry,
|
|
11
|
+
script-name and output limits apply on every platform.
|
|
12
|
+
|
|
13
|
+
## Windows requirements
|
|
14
|
+
|
|
15
|
+
Built-in Windows PowerShell and its C# helper provide safe package-manifest
|
|
16
|
+
reading. No Companion, WSL, Docker, elevation or policy bypass is needed.
|
|
17
|
+
If the helper is blocked, `project_safe_read_unavailable` tells the model not
|
|
18
|
+
to retry or bypass the restriction. Cancellation stops the manifest read and
|
|
19
|
+
directory traversal.
|
|
20
|
+
|
|
21
|
+
A project without `package.json` can still be inspected without starting
|
|
22
|
+
the file-reading helper. Junctions or traversal outside the configured roots
|
|
23
|
+
are rejected by the same Runtime path resolver.
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"version": "0.3.1",
|
|
5
5
|
"description": "Inspect a bounded project tree and its manifest metadata.",
|
|
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",
|