@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,78 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
import { withFileLock } from "../../runtime/adapters/long-term-memory/file-lock.js";
|
|
5
|
+
const pendingPublications = new Map();
|
|
6
|
+
export function isMissingSessionFile(error) {
|
|
7
|
+
return error?.code === "ENOENT";
|
|
8
|
+
}
|
|
9
|
+
export function sessionSourceStamp(source) {
|
|
10
|
+
return `${source.dev}:${source.ino}:${source.size}:${source.mtimeNs}`;
|
|
11
|
+
}
|
|
12
|
+
export async function currentSourceStamp(path) {
|
|
13
|
+
try {
|
|
14
|
+
return sessionSourceStamp(await stat(path, { bigint: true }));
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (isMissingSessionFile(error))
|
|
18
|
+
return null;
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function reportMetadataFailure(sessionId, error) {
|
|
23
|
+
process.emitWarning(`Session metadata update failed for ${sessionId}: ${String(error)}`, {
|
|
24
|
+
code: "SESSION_METADATA_WRITE_FAILED",
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/** Only the derived index is expendable; canonical session read failures still propagate. */
|
|
28
|
+
export async function readMetadataJson(path) {
|
|
29
|
+
try {
|
|
30
|
+
return JSON.parse(await readFile(path, "utf8"));
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (isMissingSessionFile(error))
|
|
34
|
+
return null;
|
|
35
|
+
if (error instanceof SyntaxError)
|
|
36
|
+
return null;
|
|
37
|
+
reportMetadataFailure(path, error);
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Serialize index publication/deletion by session, never across unrelated sessions. */
|
|
42
|
+
export async function publishSessionMetadata(path, operation) {
|
|
43
|
+
const key = resolve(path);
|
|
44
|
+
const previous = pendingPublications.get(key) ?? Promise.resolve();
|
|
45
|
+
const pending = previous.then(operation).catch((error) => reportMetadataFailure(path, error));
|
|
46
|
+
pendingPublications.set(key, pending);
|
|
47
|
+
try {
|
|
48
|
+
await pending;
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
if (pendingPublications.get(key) === pending)
|
|
52
|
+
pendingPublications.delete(key);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** List backfills and the Runtime owner may run in different processes. */
|
|
56
|
+
export async function publishSessionProjection(path, operation) {
|
|
57
|
+
return publishSessionMetadata(path, async () => {
|
|
58
|
+
await mkdir(dirname(path), { recursive: true });
|
|
59
|
+
await withFileLock(`${path}.lock`, operation);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export async function writeMetadataJson(target, value, sourcePath, source) {
|
|
63
|
+
if (await currentSourceStamp(sourcePath) !== source)
|
|
64
|
+
return false;
|
|
65
|
+
await mkdir(dirname(target), { recursive: true });
|
|
66
|
+
const temporary = `${target}.${process.pid}.${randomUUID()}.tmp`;
|
|
67
|
+
try {
|
|
68
|
+
await writeFile(temporary, JSON.stringify(value), { encoding: "utf8", mode: 0o600 });
|
|
69
|
+
// Validate at publication too: the canonical file may change while writing the temporary.
|
|
70
|
+
if (await currentSourceStamp(sourcePath) !== source)
|
|
71
|
+
return false;
|
|
72
|
+
await rename(temporary, target);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
await rm(temporary, { force: true });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SessionMetadata } from "./projection.js";
|
|
2
|
+
export type SessionMetadataChange = "projection" | "request-only";
|
|
3
|
+
export declare function writeSourceReceipt(path: string, sourcePath: string, source: string, updatedAt: string, previousSource?: string): Promise<void>;
|
|
4
|
+
/** Bind request-only changes to the exact projection they left unchanged. */
|
|
5
|
+
export declare function applySourceReceipt(path: string, record: SessionMetadata, source: string): Promise<SessionMetadata | null>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { toEpochMs } from "../record/projection.js";
|
|
2
|
+
import { readMetadataJson, writeMetadataJson } from "./publication.js";
|
|
3
|
+
function isSourceReceipt(value) {
|
|
4
|
+
if (!value || typeof value !== "object")
|
|
5
|
+
return false;
|
|
6
|
+
const receipt = value;
|
|
7
|
+
if (receipt.version !== 1)
|
|
8
|
+
return false;
|
|
9
|
+
if (typeof receipt.source !== "string")
|
|
10
|
+
return false;
|
|
11
|
+
if (typeof receipt.projectionSource !== "string")
|
|
12
|
+
return false;
|
|
13
|
+
return typeof receipt.updatedAt === "string";
|
|
14
|
+
}
|
|
15
|
+
async function receiptProjectionSource(path, source, previousSource) {
|
|
16
|
+
if (previousSource === undefined)
|
|
17
|
+
return source;
|
|
18
|
+
const previous = await readMetadataJson(path);
|
|
19
|
+
if (!isSourceReceipt(previous))
|
|
20
|
+
return previousSource;
|
|
21
|
+
if (previous.source !== previousSource)
|
|
22
|
+
return previousSource;
|
|
23
|
+
return previous.projectionSource;
|
|
24
|
+
}
|
|
25
|
+
export async function writeSourceReceipt(path, sourcePath, source, updatedAt, previousSource) {
|
|
26
|
+
const projectionSource = await receiptProjectionSource(path, source, previousSource);
|
|
27
|
+
await writeMetadataJson(path, { version: 1, source, projectionSource, updatedAt }, sourcePath, source);
|
|
28
|
+
}
|
|
29
|
+
/** Bind request-only changes to the exact projection they left unchanged. */
|
|
30
|
+
export async function applySourceReceipt(path, record, source) {
|
|
31
|
+
const receipt = await readMetadataJson(path);
|
|
32
|
+
if (!isSourceReceipt(receipt))
|
|
33
|
+
return null;
|
|
34
|
+
if (receipt.source !== source)
|
|
35
|
+
return null;
|
|
36
|
+
if (receipt.projectionSource !== record.source)
|
|
37
|
+
return null;
|
|
38
|
+
return {
|
|
39
|
+
...record, source, updatedAt: receipt.updatedAt,
|
|
40
|
+
summary: { ...record.summary, updatedAt: toEpochMs(receipt.updatedAt) },
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SessionRecord } from "../types.js";
|
|
2
|
+
import { type SessionMetadata } from "./projection.js";
|
|
3
|
+
export { currentSourceStamp, sessionSourceStamp } from "./publication.js";
|
|
4
|
+
/** The canonical session has already committed. A derived-index failure cannot undo it. */
|
|
5
|
+
export declare function updateSessionMetadata(sessionsDir: string, session: SessionRecord, source: string, previousSource?: string | null): Promise<void>;
|
|
6
|
+
export declare function deleteSessionMetadata(sessionsDir: string, sessionId: string): Promise<void>;
|
|
7
|
+
export declare function listSessionMetadata(sessionsDir: string): Promise<SessionMetadata[]>;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { mkdir, open, readdir, rm } from "node:fs/promises";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { compareSessionMetadata, isCurrentSessionMetadata, projectSessionMetadata, } from "./projection.js";
|
|
4
|
+
import { currentSourceStamp, isMissingSessionFile, publishSessionMetadata, publishSessionProjection, readMetadataJson, reportMetadataFailure, sessionSourceStamp, writeMetadataJson, } from "./publication.js";
|
|
5
|
+
import { applySourceReceipt, writeSourceReceipt } from "./source-receipt.js";
|
|
6
|
+
export { currentSourceStamp, sessionSourceStamp } from "./publication.js";
|
|
7
|
+
const pendingLists = new Map();
|
|
8
|
+
const concurrentMetadataReads = 4;
|
|
9
|
+
function metadataPath(sessionsDir, sessionId) {
|
|
10
|
+
return join(sessionsDir, ".metadata", `${sessionId}.json`);
|
|
11
|
+
}
|
|
12
|
+
async function writeMetadata(sessionsDir, record) {
|
|
13
|
+
const target = metadataPath(sessionsDir, record.summary.id);
|
|
14
|
+
const sourcePath = join(sessionsDir, `${record.summary.id}.json`);
|
|
15
|
+
await publishSessionProjection(target, async () => {
|
|
16
|
+
if (!await writeMetadataJson(target, record, sourcePath, record.source))
|
|
17
|
+
return;
|
|
18
|
+
// The full projection already carries its source; only request-only changes need a receipt.
|
|
19
|
+
await rm(`${target}.source`, { force: true });
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/** The canonical session has already committed. A derived-index failure cannot undo it. */
|
|
23
|
+
export async function updateSessionMetadata(sessionsDir, session, source, previousSource) {
|
|
24
|
+
if (previousSource) {
|
|
25
|
+
const target = metadataPath(sessionsDir, session.id);
|
|
26
|
+
return publishSessionMetadata(target, () => writeSourceReceipt(`${target}.source`, join(sessionsDir, `${session.id}.json`), source, session.updatedAt, previousSource));
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
await writeMetadata(sessionsDir, projectSessionMetadata(session, source));
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
reportMetadataFailure(session.id, error);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export async function deleteSessionMetadata(sessionsDir, sessionId) {
|
|
36
|
+
const target = metadataPath(sessionsDir, sessionId);
|
|
37
|
+
await publishSessionProjection(target, async () => {
|
|
38
|
+
await rm(target, { force: true });
|
|
39
|
+
await rm(`${target}.source`, { force: true });
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async function readSourceMetadata(path) {
|
|
43
|
+
const handle = await open(path, "r").catch((error) => {
|
|
44
|
+
if (isMissingSessionFile(error))
|
|
45
|
+
return null;
|
|
46
|
+
throw error;
|
|
47
|
+
});
|
|
48
|
+
if (!handle)
|
|
49
|
+
return null;
|
|
50
|
+
try {
|
|
51
|
+
const source = sessionSourceStamp(await handle.stat({ bigint: true }));
|
|
52
|
+
const session = JSON.parse(await handle.readFile("utf8"));
|
|
53
|
+
return projectSessionMetadata(session, source);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
await handle.close();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function readCurrentMetadata(target, sessionId, source) {
|
|
60
|
+
const stored = await readMetadataJson(target);
|
|
61
|
+
if (isCurrentSessionMetadata(stored, sessionId, source))
|
|
62
|
+
return stored;
|
|
63
|
+
const projectionSource = stored?.source;
|
|
64
|
+
if (typeof projectionSource !== "string")
|
|
65
|
+
return null;
|
|
66
|
+
if (!isCurrentSessionMetadata(stored, sessionId, projectionSource))
|
|
67
|
+
return null;
|
|
68
|
+
return applySourceReceipt(`${target}.source`, stored, source);
|
|
69
|
+
}
|
|
70
|
+
async function loadMetadata(sessionsDir, sessionId) {
|
|
71
|
+
const path = join(sessionsDir, `${sessionId}.json`);
|
|
72
|
+
const source = await currentSourceStamp(path);
|
|
73
|
+
if (source === null)
|
|
74
|
+
return null;
|
|
75
|
+
const current = await readCurrentMetadata(metadataPath(sessionsDir, sessionId), sessionId, source);
|
|
76
|
+
if (current)
|
|
77
|
+
return current;
|
|
78
|
+
const rebuilt = await readSourceMetadata(path);
|
|
79
|
+
if (!rebuilt)
|
|
80
|
+
return null;
|
|
81
|
+
await writeMetadata(sessionsDir, rebuilt);
|
|
82
|
+
return rebuilt;
|
|
83
|
+
}
|
|
84
|
+
function settledMetadata(result) {
|
|
85
|
+
if (result.status === "rejected")
|
|
86
|
+
throw result.reason;
|
|
87
|
+
return result.value;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Each atomically published record completes its own backfill. Restarts reuse
|
|
91
|
+
* those records; interrupted backfills only rebuild missing/stale entries.
|
|
92
|
+
* Source stamps also detect older writers and a crash between the two commits.
|
|
93
|
+
*/
|
|
94
|
+
async function readMetadataList(sessionsDir) {
|
|
95
|
+
await mkdir(sessionsDir, { recursive: true });
|
|
96
|
+
const names = (await readdir(sessionsDir)).filter((name) => name.endsWith(".json"));
|
|
97
|
+
const records = [];
|
|
98
|
+
for (let offset = 0; offset < names.length; offset += concurrentMetadataReads) {
|
|
99
|
+
// Bound disk fan-out and drain the batch before propagating a canonical read failure.
|
|
100
|
+
const batch = await Promise.allSettled(names.slice(offset, offset + concurrentMetadataReads)
|
|
101
|
+
.map((name) => loadMetadata(sessionsDir, name.slice(0, -5))));
|
|
102
|
+
records.push(...batch.map(settledMetadata).filter((record) => record !== null));
|
|
103
|
+
}
|
|
104
|
+
return records.sort(compareSessionMetadata);
|
|
105
|
+
}
|
|
106
|
+
export async function listSessionMetadata(sessionsDir) {
|
|
107
|
+
const directory = resolve(sessionsDir);
|
|
108
|
+
const existing = pendingLists.get(directory);
|
|
109
|
+
if (existing)
|
|
110
|
+
return existing;
|
|
111
|
+
const pending = readMetadataList(directory);
|
|
112
|
+
pendingLists.set(directory, pending);
|
|
113
|
+
try {
|
|
114
|
+
return await pending;
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
pendingLists.delete(directory);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Windows replacement can be denied while another reader holds the destination.
|
|
3
|
+
* EPERM can also be permanent: bounded failure retains the latest filesystem error.
|
|
4
|
+
* Only retry publication of this prepared file; callers retain cleanup and durability.
|
|
5
|
+
*/
|
|
6
|
+
export declare function replacePreparedSessionFile(temporary: string, target: string, assertCurrent?: () => void): Promise<void>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { rename } from "node:fs/promises";
|
|
2
|
+
import { performance } from "node:perf_hooks";
|
|
3
|
+
const WINDOWS_REPLACEMENT_WAIT_MS = 1_000;
|
|
4
|
+
const WINDOWS_REPLACEMENT_DELAY_MS = 25;
|
|
5
|
+
const MAX_REPLACEMENT_ATTEMPTS = 41;
|
|
6
|
+
function isRetryableWindowsReplacementError(error) {
|
|
7
|
+
if (process.platform !== "win32")
|
|
8
|
+
return false;
|
|
9
|
+
if (error === null || typeof error !== "object")
|
|
10
|
+
return false;
|
|
11
|
+
return "code" in error && error.code === "EPERM";
|
|
12
|
+
}
|
|
13
|
+
function canWaitForSessionReplacement(attempts, deadline) {
|
|
14
|
+
if (attempts >= MAX_REPLACEMENT_ATTEMPTS)
|
|
15
|
+
return false;
|
|
16
|
+
return performance.now() < deadline;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Windows replacement can be denied while another reader holds the destination.
|
|
20
|
+
* EPERM can also be permanent: bounded failure retains the latest filesystem error.
|
|
21
|
+
* Only retry publication of this prepared file; callers retain cleanup and durability.
|
|
22
|
+
*/
|
|
23
|
+
export async function replacePreparedSessionFile(temporary, target, assertCurrent) {
|
|
24
|
+
const deadline = performance.now() + WINDOWS_REPLACEMENT_WAIT_MS;
|
|
25
|
+
let attempts = 0;
|
|
26
|
+
for (;;) {
|
|
27
|
+
// A guard failure is never a filesystem contention error, even if coded EPERM.
|
|
28
|
+
assertCurrent?.();
|
|
29
|
+
attempts += 1;
|
|
30
|
+
try {
|
|
31
|
+
await rename(temporary, target);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
if (!isRetryableWindowsReplacementError(error))
|
|
36
|
+
throw error;
|
|
37
|
+
if (!canWaitForSessionReplacement(attempts, deadline))
|
|
38
|
+
throw error;
|
|
39
|
+
const delayMs = Math.min(WINDOWS_REPLACEMENT_DELAY_MS, deadline - performance.now());
|
|
40
|
+
await new Promise((resolve) => setTimeout(resolve, Math.max(0, delayMs)));
|
|
41
|
+
// Timer scheduling can run late. Do not begin another attempt beyond the bound.
|
|
42
|
+
if (performance.now() >= deadline)
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -7,10 +7,12 @@ export declare function normalizeAfterSeq(afterSeq: number): number;
|
|
|
7
7
|
export declare function toEpochMs(timestamp: string): number;
|
|
8
8
|
export declare function toClientReplayEvent(event: SessionRuntimeEvent): Record<string, unknown>;
|
|
9
9
|
export declare function getRequestFinalState(request: SessionRequestRecord): SessionRequestReplay["finalState"];
|
|
10
|
+
export declare function toMessageIdForUi(id: string): string | number;
|
|
10
11
|
export declare function isSameMessageId(messageId: string, requestedId: string): boolean;
|
|
11
12
|
export declare function filterMessagesAfter(messages: SessionRecord["messages"], afterMessageId: string | number | null | undefined): SessionRecord["messages"];
|
|
12
13
|
export declare function clientVisibleMessages(messages: SessionRecord["messages"]): SessionRecord["messages"];
|
|
13
|
-
export declare function toSnapshotMessage(sessionId: string, message: SessionRecord["messages"][number], requests: SessionRequestRecord[]): SessionSnapshotMessage;
|
|
14
|
+
export declare function toSnapshotMessage(sessionId: string, message: SessionRecord["messages"][number], requests: SessionRequestRecord[], resolveRequestId?: (message: SessionRecord["messages"][number]) => string | null): SessionSnapshotMessage;
|
|
15
|
+
export declare function createMessageRequestIdResolver(requests: SessionRequestRecord[]): (message: SessionRecord["messages"][number]) => string | null;
|
|
14
16
|
export declare function toSnapshotRequest(request: SessionRequestRecord): SessionSnapshotRequest;
|
|
15
17
|
export declare function normalizeSessionTitle(title: string): string;
|
|
16
18
|
export declare function toSessionListItem(session: SessionRecord): {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isAssistantInitiativeMessage } from "../assistant-initiative.js";
|
|
1
|
+
import { isAssistantInitiativeMessage } from "../assistant-initiative-message.js";
|
|
2
2
|
import { projectSessionRequestLifecycle } from "../request-lifecycle/projection.js";
|
|
3
3
|
function getRequestEventCompactionKey(payload) {
|
|
4
4
|
const type = typeof payload.type === "string" ? payload.type : "";
|
|
@@ -87,7 +87,7 @@ export function getRequestFinalState(request) {
|
|
|
87
87
|
}
|
|
88
88
|
return null;
|
|
89
89
|
}
|
|
90
|
-
function toMessageIdForUi(id) {
|
|
90
|
+
export function toMessageIdForUi(id) {
|
|
91
91
|
const match = /^msg-(\d+)$/.exec(id);
|
|
92
92
|
if (match) {
|
|
93
93
|
return Number(match[1]);
|
|
@@ -143,7 +143,7 @@ function messageSource(message) {
|
|
|
143
143
|
}
|
|
144
144
|
return message.role === "user" ? "user" : "request";
|
|
145
145
|
}
|
|
146
|
-
export function toSnapshotMessage(sessionId, message, requests) {
|
|
146
|
+
export function toSnapshotMessage(sessionId, message, requests, resolveRequestId = createMessageRequestIdResolver(requests)) {
|
|
147
147
|
return {
|
|
148
148
|
...(message.kind ? { kind: message.kind } : {}),
|
|
149
149
|
...(message.approvalRequest
|
|
@@ -155,7 +155,7 @@ export function toSnapshotMessage(sessionId, message, requests) {
|
|
|
155
155
|
text: message.content,
|
|
156
156
|
source: messageSource(message),
|
|
157
157
|
createdAt: toEpochMs(message.createdAt),
|
|
158
|
-
requestId:
|
|
158
|
+
requestId: resolveRequestId(message),
|
|
159
159
|
cronJobId: message.cronJobId ?? null,
|
|
160
160
|
...(message.initiative ? { initiative: message.initiative } : {}),
|
|
161
161
|
...(message.schedule ? { schedule: message.schedule } : {}),
|
|
@@ -166,22 +166,30 @@ export function toSnapshotMessage(sessionId, message, requests) {
|
|
|
166
166
|
: {}),
|
|
167
167
|
};
|
|
168
168
|
}
|
|
169
|
-
function
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
169
|
+
export function createMessageRequestIdResolver(requests) {
|
|
170
|
+
let completedOutputs;
|
|
171
|
+
return (message) => {
|
|
172
|
+
if (message.requestId != null)
|
|
173
|
+
return message.requestId;
|
|
174
|
+
if (isAssistantInitiativeMessage(message))
|
|
175
|
+
return null;
|
|
176
|
+
if (message.role !== "assistant")
|
|
177
|
+
return null;
|
|
178
|
+
completedOutputs ??= indexCompletedRequestOutputs(requests);
|
|
179
|
+
return completedOutputs.get(message.content) ?? null;
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function indexCompletedRequestOutputs(requests) {
|
|
183
|
+
const outputs = new Map();
|
|
184
|
+
for (const request of requests) {
|
|
177
185
|
const finalState = getRequestFinalState(request);
|
|
178
|
-
if (finalState?.status
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
186
|
+
if (finalState?.status !== "completed")
|
|
187
|
+
continue;
|
|
188
|
+
if (typeof finalState.output !== "string")
|
|
189
|
+
continue;
|
|
190
|
+
outputs.set(finalState.output, request.requestId);
|
|
183
191
|
}
|
|
184
|
-
return
|
|
192
|
+
return outputs;
|
|
185
193
|
}
|
|
186
194
|
export function toSnapshotRequest(request) {
|
|
187
195
|
return {
|
|
@@ -10,7 +10,7 @@ import { acceptedLifecycle, appendLifecycleEvent, lifecycleRequest, rejectLifecy
|
|
|
10
10
|
/** Commands share SessionService's queue and file, never a parallel checkpoint store. */
|
|
11
11
|
export function createSessionRequestLifecycle(dependencies) {
|
|
12
12
|
const blobs = createSessionContinuationBlobs(dependencies.sessionsDir);
|
|
13
|
-
async function mutate(sessionId, operation) {
|
|
13
|
+
async function mutate(sessionId, operation, metadataChange = "projection") {
|
|
14
14
|
assertValidSessionId(sessionId);
|
|
15
15
|
return dependencies.enqueue(sessionId, async () => {
|
|
16
16
|
const session = await dependencies.read(sessionId);
|
|
@@ -24,7 +24,7 @@ export function createSessionRequestLifecycle(dependencies) {
|
|
|
24
24
|
});
|
|
25
25
|
if (!result.accepted || result.duplicate)
|
|
26
26
|
return result;
|
|
27
|
-
await saveDurableSessionFile(dependencies.sessionsDir, session);
|
|
27
|
+
await saveDurableSessionFile(dependencies.sessionsDir, session, undefined, metadataChange);
|
|
28
28
|
await cleanupConsumedSessionContinuations(dependencies.sessionsDir, session, previousBlobs);
|
|
29
29
|
return result;
|
|
30
30
|
});
|
|
@@ -59,7 +59,7 @@ export function createSessionRequestLifecycle(dependencies) {
|
|
|
59
59
|
return acceptedLifecycle(request, [
|
|
60
60
|
appendLifecycleEvent(context, request, command.payload),
|
|
61
61
|
]);
|
|
62
|
-
}),
|
|
62
|
+
}, "request-only"),
|
|
63
63
|
async get(sessionId, requestId) {
|
|
64
64
|
const request = await readRequest(sessionId, requestId);
|
|
65
65
|
return request ? (projectSessionRequestLifecycle(request) ?? null) : null;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type SessionSnapshotOptions } from "./snapshot.js";
|
|
1
2
|
import { type AutomationSessionHandle, type AutomationSessionOrigin } from "./automation-session-origin.js";
|
|
2
3
|
import type { SessionRequestLifecycleStore } from "./request-lifecycle/contracts.js";
|
|
3
4
|
import { type CreateAssistantConversationInput } from "./assistant-initiative.js";
|
|
@@ -31,10 +32,7 @@ export declare class SessionService {
|
|
|
31
32
|
cursor?: string | null;
|
|
32
33
|
}): Promise<SessionListResult>;
|
|
33
34
|
getSessionById(sessionId: string): Promise<SessionRecord | null>;
|
|
34
|
-
getSessionSnapshot(sessionId: string, options?:
|
|
35
|
-
afterMessageId?: string | number | null;
|
|
36
|
-
includeRequests?: boolean;
|
|
37
|
-
}): Promise<SessionSnapshot | null>;
|
|
35
|
+
getSessionSnapshot(sessionId: string, options?: SessionSnapshotOptions): Promise<SessionSnapshot | null>;
|
|
38
36
|
getRequestReplayById(requestId: string, afterSeq?: number): Promise<SessionRequestReplay | null>;
|
|
39
37
|
deleteSession(sessionId: string): Promise<boolean>;
|
|
40
38
|
deleteSessionWithStats(sessionId: string): Promise<SessionDeleteResult>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { projectSessionSnapshot } from "./snapshot.js";
|
|
1
2
|
import { randomUUID } from "node:crypto";
|
|
2
3
|
import { AutomationSessionLockedError, createAutomationSessionAccess, hasAutomationSessionOrigin, } from "./automation-session-origin.js";
|
|
3
4
|
import { createAutomationSessionStore } from "./automation-session-store.js";
|
|
@@ -9,7 +10,7 @@ import { createAssistantConversationRecord, } from "./assistant-initiative.js";
|
|
|
9
10
|
import { assertSessionProjectUnchanged, copySessionProject, } from "./project-binding.js";
|
|
10
11
|
import { getDefaultSessionsDir } from "../runtime/config/layout.js";
|
|
11
12
|
import { assertValidSessionArtifactPathInputs, upsertSessionArtifactPaths, } from "./artifact-paths.js";
|
|
12
|
-
import {
|
|
13
|
+
import { compactRequestEvents, getRequestFinalState, getSessionRequest, isSameMessageId, normalizeAfterSeq, normalizeCursor, normalizeLimit, normalizeSessionTitle, toClientReplayEvent, toEpochMs, toSessionListItem, } from "./record/projection.js";
|
|
13
14
|
import { assertValidRequestId, assertValidSessionId, createContextEntryId, defaultCreateMessageId, pruneSupersededContextEntries, } from "./record/rules.js";
|
|
14
15
|
import { deleteSessionFile, ensureSessionsDir, loadAllSessionFiles, loadSessionFile, saveSessionFile, } from "./session-store.js";
|
|
15
16
|
import { resolveSessionMemoryCheckpointCommit } from "./memory/rules.js";
|
|
@@ -115,20 +116,7 @@ export class SessionService {
|
|
|
115
116
|
}
|
|
116
117
|
async getSessionSnapshot(sessionId, options = {}) {
|
|
117
118
|
const session = await this.getSessionById(sessionId);
|
|
118
|
-
|
|
119
|
-
return null;
|
|
120
|
-
}
|
|
121
|
-
return {
|
|
122
|
-
sessionId,
|
|
123
|
-
...(session.kind ? { kind: session.kind } : {}),
|
|
124
|
-
...(session.project ? { project: session.project } : {}),
|
|
125
|
-
title: session.title,
|
|
126
|
-
messages: filterMessagesAfter(clientVisibleMessages(session.messages), options.afterMessageId).map((message) => toSnapshotMessage(sessionId, message, session.requests ?? [])),
|
|
127
|
-
requests: options.includeRequests === false
|
|
128
|
-
? []
|
|
129
|
-
: (session.requests ?? []).map(toSnapshotRequest),
|
|
130
|
-
nextCursor: null,
|
|
131
|
-
};
|
|
119
|
+
return session ? projectSessionSnapshot(session, options) : null;
|
|
132
120
|
}
|
|
133
121
|
async getRequestReplayById(requestId, afterSeq = 0) {
|
|
134
122
|
assertValidRequestId(requestId);
|
|
@@ -440,7 +428,7 @@ export class SessionService {
|
|
|
440
428
|
request.status = "streaming";
|
|
441
429
|
}
|
|
442
430
|
session.updatedAt = timestamp;
|
|
443
|
-
await saveSessionFile(this.sessionsDir, session);
|
|
431
|
+
await saveSessionFile(this.sessionsDir, session, undefined, "request-only");
|
|
444
432
|
return session;
|
|
445
433
|
});
|
|
446
434
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SessionRecord } from "./types.js";
|
|
2
|
+
import type { SessionMetadataChange } from "./metadata/source-receipt.js";
|
|
2
3
|
export declare function ensureSessionsDir(sessionsDir: string): Promise<void>;
|
|
3
4
|
export declare function loadSessionFile(sessionsDir: string, sessionId: string): Promise<SessionRecord | null>;
|
|
4
|
-
export declare function saveSessionFile(sessionsDir: string, session: SessionRecord, assertCurrent?: () => void): Promise<void>;
|
|
5
|
+
export declare function saveSessionFile(sessionsDir: string, session: SessionRecord, assertCurrent?: () => void, metadataChange?: SessionMetadataChange): Promise<void>;
|
|
5
6
|
export declare function deleteSessionFile(sessionsDir: string, sessionId: string): Promise<boolean>;
|
|
6
7
|
export declare function loadAllSessionFiles(sessionsDir: string): Promise<SessionRecord[]>;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { mkdir, readdir, readFile,
|
|
1
|
+
import { mkdir, readdir, readFile, rm, stat, writeFile, } from "node:fs/promises";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
+
import { replacePreparedSessionFile } from "./prepared-session-replacement.js";
|
|
4
5
|
import { saveDurableSessionFile, syncSessionDirectory, } from "./durable-session-commit.js";
|
|
5
6
|
import { cleanupSessionContinuations } from "./request-lifecycle/continuation-cleanup.js";
|
|
7
|
+
import { currentSourceStamp, deleteSessionMetadata, sessionSourceStamp, updateSessionMetadata } from "./metadata/store.js";
|
|
6
8
|
function getSessionFilePath(sessionsDir, sessionId) {
|
|
7
9
|
return join(sessionsDir, `${sessionId}.json`);
|
|
8
10
|
}
|
|
@@ -22,27 +24,31 @@ export async function loadSessionFile(sessionsDir, sessionId) {
|
|
|
22
24
|
throw error;
|
|
23
25
|
}
|
|
24
26
|
}
|
|
25
|
-
export async function saveSessionFile(sessionsDir, session, assertCurrent) {
|
|
27
|
+
export async function saveSessionFile(sessionsDir, session, assertCurrent, metadataChange = "projection") {
|
|
26
28
|
if (session.requests?.some((request) => request.lifecycle)) {
|
|
27
|
-
return saveDurableSessionFile(sessionsDir, session, assertCurrent);
|
|
29
|
+
return saveDurableSessionFile(sessionsDir, session, assertCurrent, metadataChange);
|
|
28
30
|
}
|
|
29
31
|
const filePath = getSessionFilePath(sessionsDir, session.id);
|
|
32
|
+
const previousSource = metadataChange === "request-only" ? await currentSourceStamp(filePath) : undefined;
|
|
30
33
|
const tempPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;
|
|
34
|
+
let source;
|
|
31
35
|
try {
|
|
32
36
|
await writeFile(tempPath, JSON.stringify(session, null, 2), "utf-8");
|
|
33
|
-
|
|
34
|
-
await
|
|
37
|
+
source = sessionSourceStamp(await stat(tempPath, { bigint: true }));
|
|
38
|
+
await replacePreparedSessionFile(tempPath, filePath, assertCurrent);
|
|
35
39
|
}
|
|
36
40
|
catch (error) {
|
|
37
41
|
await rm(tempPath, { force: true }).catch(() => undefined);
|
|
38
42
|
throw error;
|
|
39
43
|
}
|
|
44
|
+
await updateSessionMetadata(sessionsDir, session, source, previousSource);
|
|
40
45
|
}
|
|
41
46
|
export async function deleteSessionFile(sessionsDir, sessionId) {
|
|
42
47
|
const filePath = getSessionFilePath(sessionsDir, sessionId);
|
|
43
48
|
try {
|
|
44
49
|
await rm(filePath);
|
|
45
50
|
await syncSessionDirectory(sessionsDir);
|
|
51
|
+
await deleteSessionMetadata(sessionsDir, sessionId);
|
|
46
52
|
await cleanupSessionContinuations(sessionsDir, sessionId);
|
|
47
53
|
return true;
|
|
48
54
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SessionRecord, SessionSnapshot, SessionSnapshotMessage } from "./types.js";
|
|
2
|
+
export type SessionMessageIdentity = Pick<SessionSnapshotMessage, "id" | "role" | "createdAt" | "requestId">;
|
|
3
|
+
export type SessionSnapshotOptions = {
|
|
4
|
+
afterMessageId?: string | number | null;
|
|
5
|
+
includeRequests?: boolean;
|
|
6
|
+
/** Web read receipts need identities, never message bodies or request events. */
|
|
7
|
+
identitiesOnly?: boolean;
|
|
8
|
+
page?: {
|
|
9
|
+
limit: number;
|
|
10
|
+
cursor?: string | null;
|
|
11
|
+
targetMessageId?: string;
|
|
12
|
+
targetCreatedAt?: number;
|
|
13
|
+
targetRequestId?: string;
|
|
14
|
+
waitingRequestId?: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare function projectSessionSnapshot(session: SessionRecord, options?: SessionSnapshotOptions): SessionSnapshot;
|