@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,293 @@
|
|
|
1
|
+
import { escapeHtml } from "../../lib/text-format.js";
|
|
2
|
+
import { renderConnectionCard, renderComputerMetadata } from "./connection-card.js";
|
|
3
|
+
|
|
4
|
+
const companionStoreUrl = "https://apps.microsoft.com/detail/9PK2FDQQLQS9";
|
|
5
|
+
|
|
6
|
+
export function windowsStoreSetupIsAvailable(snapshot) {
|
|
7
|
+
const readiness = snapshot?.readiness;
|
|
8
|
+
if (readiness?.ready === true) return false;
|
|
9
|
+
if (!readiness?.platforms?.includes("windows")) return false;
|
|
10
|
+
if (readiness.restartRequired === true) return false;
|
|
11
|
+
return ["setup_required", "companion"].includes(readiness.route);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function windowsStorePanelIsAvailable(snapshot) {
|
|
15
|
+
if (windowsStoreSetupIsAvailable(snapshot)) return true;
|
|
16
|
+
if (snapshot?.readiness?.restartRequired === true) return false;
|
|
17
|
+
if (snapshot?.readiness?.route !== "companion") return false;
|
|
18
|
+
if (snapshot.readiness.ready !== true) return false;
|
|
19
|
+
return snapshot.identity?.os === "windows";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function windowsCompanionCanReconnect(snapshot) {
|
|
23
|
+
if (!windowsStoreSetupIsAvailable(snapshot)) return false;
|
|
24
|
+
if (snapshot?.paired !== true) return false;
|
|
25
|
+
return snapshot.connected === false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function hasConfirmedUnpairedConnection(snapshot) {
|
|
29
|
+
if (snapshot?.ok === false) return false;
|
|
30
|
+
if (snapshot?.paired !== false) return false;
|
|
31
|
+
return snapshot.connected === false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function storeInvitationIsCurrent(invitation) {
|
|
35
|
+
if (!invitation) return false;
|
|
36
|
+
return Date.parse(invitation.expiresAt) > Date.now();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function storeRepairConfirmationIsCurrent(snapshot, attempt) {
|
|
40
|
+
if (!windowsCompanionCanReconnect(snapshot)) return false;
|
|
41
|
+
return attempt?.phase === "confirm-repair";
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function storeConnectionStage(snapshot, invitation, attempt) {
|
|
45
|
+
if (snapshot?.readiness?.ready === true) return "ready";
|
|
46
|
+
if (attempt?.phase === "repairing") return "repairing";
|
|
47
|
+
if (storeRepairConfirmationIsCurrent(snapshot, attempt)) return "confirm-repair";
|
|
48
|
+
if (windowsCompanionCanReconnect(snapshot)) return "reconnect";
|
|
49
|
+
if (attempt?.expiresAt && Date.parse(attempt.expiresAt) <= Date.now()) return "expired";
|
|
50
|
+
if (attempt?.phase === "preparing") return "preparing";
|
|
51
|
+
if (attempt?.phase === "waiting") return "waiting";
|
|
52
|
+
if (storeInvitationIsCurrent(invitation)) return "open";
|
|
53
|
+
if (attempt?.phase === "expired") return "expired";
|
|
54
|
+
return "start";
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function connectionButton(label, disabled, secondary = false) {
|
|
58
|
+
return `<button type="button" class="system-host-card-${secondary ? "secondary" : "primary"}" data-system-host-store-connect ${disabled ? "disabled" : ""}>${label}</button>`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function companionLaunchLink(invitation, secondary = false) {
|
|
62
|
+
return `<a class="system-host-card-${secondary ? "secondary" : "primary"}" href="${escapeHtml(invitation.launchUrl)}" data-system-host-store-launch rel="noreferrer">${secondary ? "Open Companion again" : "Open Companion"}</a>`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function connectionStageContent(stage, snapshot, invitation, disabled) {
|
|
66
|
+
if (stage === "ready") return {
|
|
67
|
+
status: "Connected", step: "Your computer is ready", copy: "You can use computer tools from your ABot chat.",
|
|
68
|
+
};
|
|
69
|
+
if (stage === "reconnect") return {
|
|
70
|
+
status: "Offline", step: "Your computer is offline", copy: `Open Companion on ${snapshot?.identity?.name || "your computer"} to reconnect.`,
|
|
71
|
+
action: `<a class="system-host-card-primary" href="abot-companion://open" data-system-host-store-open-existing rel="noreferrer">Open Companion</a><button type="button" class="system-host-card-secondary" data-system-host-store-repair ${disabled ? "disabled" : ""}>Set up again</button>`,
|
|
72
|
+
help: "Removed the connection in Companion? Choose Set up again.",
|
|
73
|
+
};
|
|
74
|
+
if (stage === "confirm-repair") return {
|
|
75
|
+
status: "Confirm reset", step: "Set up this computer again?", copy: "The previous connection will be removed. You’ll approve a new connection in Companion.",
|
|
76
|
+
action: `<button type="button" class="system-host-card-primary" data-system-host-store-repair-confirm ${disabled ? "disabled" : ""}>Continue</button><button type="button" class="system-host-card-secondary" data-system-host-store-repair-cancel ${disabled ? "disabled" : ""}>Cancel</button>`,
|
|
77
|
+
help: "Your conversations and saved insights will be kept.",
|
|
78
|
+
};
|
|
79
|
+
if (stage === "repairing") return {
|
|
80
|
+
status: "Preparing", step: "Setting up this computer again", copy: "Removing the previous connection before preparing your new connection…",
|
|
81
|
+
action: '<button type="button" class="system-host-card-primary" disabled>Preparing connection…</button>',
|
|
82
|
+
};
|
|
83
|
+
if (stage === "preparing") return {
|
|
84
|
+
status: "Preparing", step: "Connect your Windows computer", copy: "Preparing your connection…",
|
|
85
|
+
action: connectionButton("Preparing connection…", true),
|
|
86
|
+
};
|
|
87
|
+
if (stage === "open") return {
|
|
88
|
+
status: "Waiting for you", step: "Approve the connection in Companion", copy: "Open the app and check the ABot address. This page will confirm when your computer is connected.",
|
|
89
|
+
action: companionLaunchLink(invitation),
|
|
90
|
+
help: "Your browser may ask permission to open the app.",
|
|
91
|
+
};
|
|
92
|
+
if (stage === "waiting") return {
|
|
93
|
+
status: "Waiting for approval", step: "Approve the connection in Companion", copy: "Check the ABot address and approve the connection in the app. This page will confirm when your computer is connected.",
|
|
94
|
+
help: "If Companion did not open, use the option below.",
|
|
95
|
+
action: storeInvitationIsCurrent(invitation)
|
|
96
|
+
? companionLaunchLink(invitation, true)
|
|
97
|
+
: connectionButton("Start connection again", disabled, true),
|
|
98
|
+
};
|
|
99
|
+
if (stage === "expired") return {
|
|
100
|
+
status: "Expired", step: "Connection link expired", copy: "Connect again to get a fresh invitation.",
|
|
101
|
+
action: connectionButton("Connect again", disabled),
|
|
102
|
+
};
|
|
103
|
+
const update = snapshot?.readiness?.companionUpdateRequired === true;
|
|
104
|
+
return {
|
|
105
|
+
status: update ? "Update needed" : "Not connected",
|
|
106
|
+
step: update ? "Update Companion" : "Connect your Windows computer",
|
|
107
|
+
copy: update ? "Update Companion from Microsoft Store, then return here to reconnect."
|
|
108
|
+
: "Companion lets ABot work with files, apps and desktop tools on this computer.",
|
|
109
|
+
action: `<a class="system-host-card-primary" href="${companionStoreUrl}" target="_blank" rel="noopener noreferrer"><svg class="system-host-store-icon" width="18" height="18" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M4 7h16v14H4ZM8 7V5a4 4 0 0 1 8 0v2" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M8 10h3v3H8Zm5 0h3v3h-3Zm-5 5h3v3H8Zm5 0h3v3h-3Z" fill="currentColor"/></svg><span>${update ? "Update in Microsoft Store" : "Install from Microsoft Store"}</span></a>${connectionButton(update ? "I already updated it" : "I already have it", disabled, true)}`,
|
|
110
|
+
help: update ? "Your saved connection is kept during an update." : "Install once from Microsoft Store, then return here to connect.",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function storeConnectionDisplayContent(stage, snapshot, invitation, disabled, statusUnavailable) {
|
|
115
|
+
if (statusUnavailable) return {
|
|
116
|
+
status: "Status unavailable", step: "Check your computer connection",
|
|
117
|
+
copy: "The current connection status could not be checked. Refresh to try again.",
|
|
118
|
+
};
|
|
119
|
+
if (disabled && stage === "ready") return {
|
|
120
|
+
status: "Checking", step: "Checking your computer connection",
|
|
121
|
+
copy: "Waiting for the current connection status…",
|
|
122
|
+
};
|
|
123
|
+
return connectionStageContent(stage, snapshot, invitation, disabled);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function shouldRenderReadyWindowsSummary(compact, ready, error, message, otherSetup) {
|
|
127
|
+
if (!compact || !ready) return false;
|
|
128
|
+
if (error || message || otherSetup) return false;
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function renderWindowsStoreSetup({ snapshot, invitation, attempt, disabled, statusUnavailable, error, message, compact, otherSetup = "" }) {
|
|
133
|
+
if (!windowsStorePanelIsAvailable(snapshot)) return "";
|
|
134
|
+
const stage = storeConnectionStage(snapshot, invitation, attempt);
|
|
135
|
+
const content = storeConnectionDisplayContent(stage, snapshot, invitation, disabled, statusUnavailable);
|
|
136
|
+
const ready = stage === "ready" && !statusUnavailable && !disabled;
|
|
137
|
+
const summary = shouldRenderReadyWindowsSummary(compact, ready, error, message, otherSetup);
|
|
138
|
+
const refresh = statusUnavailable || error ? '<button type="button" class="system-host-card-secondary" data-system-host-refresh' + (disabled ? " disabled" : "") + '>Refresh status</button>' : "";
|
|
139
|
+
return renderConnectionCard({
|
|
140
|
+
title: content.step, status: content.status, ready, disabled,
|
|
141
|
+
compact: summary,
|
|
142
|
+
description: content.copy, actions: content.action, help: content.help, error, message,
|
|
143
|
+
metadata: ["ready", "reconnect"].includes(stage) ? renderComputerMetadata(snapshot, disabled) : "",
|
|
144
|
+
details: summary ? "" : (ready ? '<p class="system-host-card-access-note">Computer actions follow your permission settings. Spark collection is managed separately.</p>' : "") + refresh + otherSetup,
|
|
145
|
+
attributes: `data-system-host-store-setup data-system-host-store-stage="${stage}"`,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function readStoreInvitation(receipt) {
|
|
150
|
+
if (!storeInvitationIsCurrent(receipt)) throw new Error("store_invitation_expired");
|
|
151
|
+
const launch = new URL(receipt.launchUrl);
|
|
152
|
+
if (launch.protocol !== "abot-companion:") throw new Error("store_invitation_invalid");
|
|
153
|
+
if (launch.hostname !== "connect") throw new Error("store_invitation_invalid");
|
|
154
|
+
if (launch.username || launch.password || launch.port || launch.hash) throw new Error("store_invitation_invalid");
|
|
155
|
+
if (launch.pathname !== "" && launch.pathname !== "/") throw new Error("store_invitation_invalid");
|
|
156
|
+
if (!/^[A-Za-z0-9_-]+$/.test(launch.searchParams.get("invitation") || "")) throw new Error("store_invitation_invalid");
|
|
157
|
+
if (receipt.storeUrl !== companionStoreUrl) throw new Error("store_invitation_invalid");
|
|
158
|
+
return { launchUrl: launch.href, expiresAt: receipt.expiresAt };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** The invitation exists only on the active surface, until readiness or expiry. */
|
|
162
|
+
export function createWindowsStoreConnectionActions({
|
|
163
|
+
state,
|
|
164
|
+
requestStoreConnection,
|
|
165
|
+
revokeConnection,
|
|
166
|
+
receiveUnpairedConnection,
|
|
167
|
+
canInstallOnPlatform,
|
|
168
|
+
beginRequest,
|
|
169
|
+
finishRequest,
|
|
170
|
+
isCurrentResponse,
|
|
171
|
+
getSurfaceRevision,
|
|
172
|
+
getEnvironmentId = () => "",
|
|
173
|
+
isVisible,
|
|
174
|
+
notify,
|
|
175
|
+
scheduleExpiration = setTimeout,
|
|
176
|
+
cancelExpiration = clearTimeout,
|
|
177
|
+
}) {
|
|
178
|
+
let expirationTimer;
|
|
179
|
+
function clear({ preserveWaiting = false } = {}) {
|
|
180
|
+
if (expirationTimer !== undefined) cancelExpiration(expirationTimer);
|
|
181
|
+
expirationTimer = undefined;
|
|
182
|
+
if (state.windowsStoreInvitation) state.message = "";
|
|
183
|
+
state.windowsStoreInvitation = null;
|
|
184
|
+
if (preserveWaiting && state.windowsStoreAttempt?.phase === "waiting") return;
|
|
185
|
+
state.windowsStoreAttempt = null;
|
|
186
|
+
}
|
|
187
|
+
function canApplyStoreResponse(operation, surface, environment) {
|
|
188
|
+
if (!isCurrentResponse(operation)) return false;
|
|
189
|
+
if (surface !== getSurfaceRevision()) return false;
|
|
190
|
+
if (environment !== getEnvironmentId()) return false;
|
|
191
|
+
return isVisible();
|
|
192
|
+
}
|
|
193
|
+
function receiveStoreInvitation(receipt) {
|
|
194
|
+
state.windowsStoreInvitation = readStoreInvitation(receipt);
|
|
195
|
+
state.windowsStoreAttempt = { phase: "open", expiresAt: receipt.expiresAt };
|
|
196
|
+
state.downloaded = null;
|
|
197
|
+
state.manualMac = null;
|
|
198
|
+
state.message = "";
|
|
199
|
+
expirationTimer = scheduleExpiration(() => {
|
|
200
|
+
clear();
|
|
201
|
+
state.windowsStoreAttempt = { phase: "expired" };
|
|
202
|
+
notify();
|
|
203
|
+
}, Date.parse(receipt.expiresAt) - Date.now());
|
|
204
|
+
}
|
|
205
|
+
async function connectWindowsStore() {
|
|
206
|
+
if (typeof requestStoreConnection !== "function") return false;
|
|
207
|
+
if (!canInstallOnPlatform("windows")) return false;
|
|
208
|
+
if (!windowsStoreSetupIsAvailable(state.snapshot)) return false;
|
|
209
|
+
if (windowsCompanionCanReconnect(state.snapshot)) return false;
|
|
210
|
+
if (storeInvitationIsCurrent(state.windowsStoreInvitation)) return false;
|
|
211
|
+
clear();
|
|
212
|
+
const operation = beginRequest();
|
|
213
|
+
const surface = getSurfaceRevision();
|
|
214
|
+
const environment = getEnvironmentId();
|
|
215
|
+
state.windowsStoreAttempt = { phase: "preparing" };
|
|
216
|
+
notify();
|
|
217
|
+
try {
|
|
218
|
+
const receipt = await requestStoreConnection();
|
|
219
|
+
if (!canApplyStoreResponse(operation, surface, environment)) return false;
|
|
220
|
+
receiveStoreInvitation(receipt);
|
|
221
|
+
return true;
|
|
222
|
+
} catch {
|
|
223
|
+
if (!canApplyStoreResponse(operation, surface, environment)) return false;
|
|
224
|
+
clear();
|
|
225
|
+
state.actionError = "The Companion connection link could not be created. Refresh status and try again.";
|
|
226
|
+
return false;
|
|
227
|
+
} finally {
|
|
228
|
+
finishRequest(operation);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function canRepairWindowsPairing() {
|
|
232
|
+
if (!canInstallOnPlatform("windows")) return false;
|
|
233
|
+
return windowsCompanionCanReconnect(state.snapshot);
|
|
234
|
+
}
|
|
235
|
+
function beginWindowsStoreRepair() {
|
|
236
|
+
if (!canRepairWindowsPairing()) return false;
|
|
237
|
+
clear();
|
|
238
|
+
state.windowsStoreAttempt = { phase: "confirm-repair" };
|
|
239
|
+
state.actionError = "";
|
|
240
|
+
notify();
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
function cancelWindowsStoreRepair() {
|
|
244
|
+
if (state.busy) return false;
|
|
245
|
+
if (state.windowsStoreAttempt?.phase !== "confirm-repair") return false;
|
|
246
|
+
clear();
|
|
247
|
+
notify();
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
async function confirmWindowsStoreRepair() {
|
|
251
|
+
if (!canRepairWindowsPairing()) return false;
|
|
252
|
+
if (state.windowsStoreAttempt?.phase !== "confirm-repair") return false;
|
|
253
|
+
if (typeof revokeConnection !== "function" || typeof requestStoreConnection !== "function") return false;
|
|
254
|
+
const operation = beginRequest();
|
|
255
|
+
const surface = getSurfaceRevision();
|
|
256
|
+
const environment = getEnvironmentId();
|
|
257
|
+
state.windowsStoreAttempt = { phase: "repairing" };
|
|
258
|
+
notify();
|
|
259
|
+
let revoked = false;
|
|
260
|
+
try {
|
|
261
|
+
const snapshot = await revokeConnection();
|
|
262
|
+
if (!canApplyStoreResponse(operation, surface, environment)) return false;
|
|
263
|
+
if (!hasConfirmedUnpairedConnection(snapshot)) throw new Error("unpair_not_confirmed");
|
|
264
|
+
receiveUnpairedConnection(snapshot);
|
|
265
|
+
revoked = true;
|
|
266
|
+
if (!windowsStoreSetupIsAvailable(snapshot)) throw new Error("store_setup_unavailable");
|
|
267
|
+
state.windowsStoreAttempt = { phase: "preparing" };
|
|
268
|
+
state.message = "";
|
|
269
|
+
notify();
|
|
270
|
+
const receipt = await requestStoreConnection();
|
|
271
|
+
if (!canApplyStoreResponse(operation, surface, environment)) return false;
|
|
272
|
+
receiveStoreInvitation(receipt);
|
|
273
|
+
return true;
|
|
274
|
+
} catch {
|
|
275
|
+
if (!canApplyStoreResponse(operation, surface, environment)) return false;
|
|
276
|
+
clear();
|
|
277
|
+
state.message = "";
|
|
278
|
+
state.actionError = revoked
|
|
279
|
+
? "The previous pairing was removed, but a new connection link could not be created. Connect again to continue."
|
|
280
|
+
: "The previous pairing could not be removed. No new connection was created. Refresh status and try again.";
|
|
281
|
+
return false;
|
|
282
|
+
} finally {
|
|
283
|
+
finishRequest(operation);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function markLaunchRequested() {
|
|
287
|
+
if (!storeInvitationIsCurrent(state.windowsStoreInvitation)) return;
|
|
288
|
+
state.windowsStoreAttempt = { phase: "waiting", expiresAt: state.windowsStoreInvitation.expiresAt };
|
|
289
|
+
// Leave the anchor intact until the browser has dispatched its native protocol.
|
|
290
|
+
setTimeout(notify, 0);
|
|
291
|
+
}
|
|
292
|
+
return { connectWindowsStore, beginWindowsStoreRepair, cancelWindowsStoreRepair, confirmWindowsStoreRepair, markLaunchRequested, clear };
|
|
293
|
+
}
|
|
@@ -29,6 +29,7 @@ export function createWorkspaceShell({
|
|
|
29
29
|
};
|
|
30
30
|
let navigationRevision = 0;
|
|
31
31
|
const workspaceListeners = new Set();
|
|
32
|
+
const runtimeAvailabilityListeners = new Set();
|
|
32
33
|
const workspaceGuards = new Set();
|
|
33
34
|
function notifyWorkspaceListeners(workspace) {
|
|
34
35
|
onWorkspaceChange(workspace);
|
|
@@ -406,6 +407,7 @@ export function createWorkspaceShell({
|
|
|
406
407
|
workspaceAccess.update(availability);
|
|
407
408
|
if (!workspaceAccess.isAvailable(shellState.workspace))
|
|
408
409
|
activateWorkspace("home", { focus: false });
|
|
410
|
+
for (const listener of runtimeAvailabilityListeners) listener();
|
|
409
411
|
}
|
|
410
412
|
|
|
411
413
|
function load() {
|
|
@@ -421,6 +423,10 @@ export function createWorkspaceShell({
|
|
|
421
423
|
runtimeAvailabilityChanged,
|
|
422
424
|
workspaceUnavailableMessage: workspaceAccess.unavailableMessage,
|
|
423
425
|
navigationRevision: () => navigationRevision,
|
|
426
|
+
subscribeRuntimeAvailabilityChange(listener) {
|
|
427
|
+
runtimeAvailabilityListeners.add(listener);
|
|
428
|
+
return () => runtimeAvailabilityListeners.delete(listener);
|
|
429
|
+
},
|
|
424
430
|
subscribeWorkspaceChange(listener) {
|
|
425
431
|
workspaceListeners.add(listener);
|
|
426
432
|
return () => workspaceListeners.delete(listener);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export async function acknowledgeWorkspaceStorage(storage, documentRoot = document) {
|
|
2
|
+
if (storage.snapshot().introductionSeen) return;
|
|
3
|
+
const dialog = documentRoot.createElement("dialog");
|
|
4
|
+
dialog.className = "workspace-storage-notice";
|
|
5
|
+
dialog.innerHTML = `<h2>Your workspace settings stay with ABot</h2>
|
|
6
|
+
<p>Settings and queued messages are now saved with this ABot installation, across browsers and app restarts.</p>
|
|
7
|
+
<p>This is a one-time fresh start. Previous browser-only pins, archives, model choices, memory review markers and queued messages are not imported.</p>
|
|
8
|
+
<p>Your conversations, memories, configuration and read status are kept. Tool permissions start in <strong>Ask</strong>; you can change them in the composer.</p>
|
|
9
|
+
<p role="alert" hidden></p><button type="button" class="primary">Continue</button>`;
|
|
10
|
+
documentRoot.body.append(dialog);
|
|
11
|
+
dialog.addEventListener("cancel", (event) => event.preventDefault());
|
|
12
|
+
dialog.showModal();
|
|
13
|
+
await new Promise((resolve) => {
|
|
14
|
+
const button = dialog.querySelector("button");
|
|
15
|
+
button.addEventListener("click", async () => {
|
|
16
|
+
button.disabled = true;
|
|
17
|
+
try { await storage.execute({ kind: "introduction" }); dialog.close(); dialog.remove(); resolve(); }
|
|
18
|
+
catch (error) {
|
|
19
|
+
const notice = dialog.querySelector('[role="alert"]');
|
|
20
|
+
notice.textContent = `${error.message} Reload to try again.`;
|
|
21
|
+
notice.hidden = false;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function showWorkspaceStorageFailure(error, documentRoot = document) {
|
|
28
|
+
let notice = documentRoot.querySelector("[data-workspace-storage-error]");
|
|
29
|
+
if (!notice) {
|
|
30
|
+
notice = documentRoot.createElement("div");
|
|
31
|
+
notice.dataset.workspaceStorageError = "";
|
|
32
|
+
notice.setAttribute("role", "alert");
|
|
33
|
+
notice.className = "workspace-storage-failure";
|
|
34
|
+
documentRoot.body.append(notice);
|
|
35
|
+
}
|
|
36
|
+
notice.textContent = `${error.message} Changes are not confirmed. Reload before sending more messages.`;
|
|
37
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { createSystemHostConnectionManager } from "./components/system-host/manager.js";
|
|
2
2
|
import { createSystemHostSetupNotice } from "./components/system-host/setup-notice.js";
|
|
3
3
|
|
|
4
|
-
/** One connection owner
|
|
4
|
+
/** One connection owner for configured Home and its shared chat notice. */
|
|
5
5
|
export function createComputerAccessFeature({
|
|
6
6
|
dom,
|
|
7
7
|
runtimeClient,
|
|
8
8
|
getEnvironmentId = () => "",
|
|
9
|
+
isComputerAccessAvailable = () => true,
|
|
9
10
|
onChange = () => {},
|
|
10
11
|
}) {
|
|
11
12
|
const documentRoot = dom.homeDashboardRoot?.ownerDocument;
|
|
@@ -18,6 +19,7 @@ export function createComputerAccessFeature({
|
|
|
18
19
|
loadConnection: () => runtimeClient.getSystemHostConnection(),
|
|
19
20
|
connectLocal: () => runtimeClient.connectLocalSystemHost(),
|
|
20
21
|
createPairing: () => runtimeClient.createSystemHostPairing(),
|
|
22
|
+
requestStoreConnection: () => runtimeClient.requestSystemHostStoreConnection(),
|
|
21
23
|
requestPermissions: (input) => runtimeClient.requestSystemHostPermissions(input),
|
|
22
24
|
downloadSetup: (platform) =>
|
|
23
25
|
runtimeClient.downloadSystemHostSetup(platform),
|
|
@@ -30,6 +32,7 @@ export function createComputerAccessFeature({
|
|
|
30
32
|
});
|
|
31
33
|
|
|
32
34
|
function open() {
|
|
35
|
+
if (!isComputerAccessAvailable()) return false;
|
|
33
36
|
dom.homeWorkspaceButton?.click();
|
|
34
37
|
if (dom.homeWorkspacePanel?.hidden !== false || !root) return false;
|
|
35
38
|
connection.openManagement();
|
|
@@ -38,16 +41,29 @@ export function createComputerAccessFeature({
|
|
|
38
41
|
return true;
|
|
39
42
|
}
|
|
40
43
|
|
|
44
|
+
function runtimeAvailabilityChanged() {
|
|
45
|
+
const ready = isComputerAccessAvailable();
|
|
46
|
+
if (root) root.hidden = !ready;
|
|
47
|
+
connection.setActive(ready);
|
|
48
|
+
notice?.render();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function load(background) {
|
|
52
|
+
if (!isComputerAccessAvailable()) return Promise.resolve(false);
|
|
53
|
+
return connection.load(background);
|
|
54
|
+
}
|
|
55
|
+
|
|
41
56
|
notice = createSystemHostSetupNotice({
|
|
42
57
|
container: dom.chatPanel?.querySelector(".composer-dock"),
|
|
43
58
|
conversationRegion: dom.messagesList,
|
|
44
59
|
getConnectionState: () => connection.state,
|
|
45
|
-
supportsConnection: () => runtimeClient.supportsSystemHostConnection(),
|
|
46
|
-
refreshConnection: () =>
|
|
60
|
+
supportsConnection: () => isComputerAccessAvailable() && runtimeClient.supportsSystemHostConnection(),
|
|
61
|
+
refreshConnection: () => load(true),
|
|
47
62
|
onOpen: open,
|
|
48
63
|
});
|
|
49
64
|
if (root) {
|
|
50
65
|
root.className = "home-computer-access";
|
|
66
|
+
root.hidden = !isComputerAccessAvailable();
|
|
51
67
|
root.setAttribute("tabindex", "-1");
|
|
52
68
|
root.setAttribute("aria-label", "Computer access");
|
|
53
69
|
dom.homeDashboardRoot.parentElement?.insertBefore(
|
|
@@ -55,13 +71,14 @@ export function createComputerAccessFeature({
|
|
|
55
71
|
dom.homeDashboardRoot,
|
|
56
72
|
);
|
|
57
73
|
connection.mount(root);
|
|
58
|
-
|
|
74
|
+
runtimeAvailabilityChanged();
|
|
59
75
|
}
|
|
60
76
|
dom.environmentSelect?.addEventListener("change", connection.environmentChanged);
|
|
61
77
|
return {
|
|
62
78
|
state: connection.state,
|
|
63
|
-
load
|
|
79
|
+
load,
|
|
64
80
|
open,
|
|
81
|
+
runtimeAvailabilityChanged,
|
|
65
82
|
dispose() {
|
|
66
83
|
dom.environmentSelect?.removeEventListener("change", connection.environmentChanged);
|
|
67
84
|
notice.dispose();
|
|
@@ -6,6 +6,7 @@ export function createAppliedEnvironmentProjection({
|
|
|
6
6
|
dom,
|
|
7
7
|
selection,
|
|
8
8
|
loadWebConfig,
|
|
9
|
+
changeEnvironment,
|
|
9
10
|
}) {
|
|
10
11
|
let generation = 0;
|
|
11
12
|
let pending = null;
|
|
@@ -23,11 +24,10 @@ export function createAppliedEnvironmentProjection({
|
|
|
23
24
|
);
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
function
|
|
27
|
+
function applyProjection(config, selected) {
|
|
27
28
|
state.config = config;
|
|
28
29
|
selection.renderEnvironmentOptions();
|
|
29
30
|
dom.environmentSelect.value = selected;
|
|
30
|
-
selection.renderAgentPicker();
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
function preferredEnvironmentId(options, selected, defaultId) {
|
|
@@ -36,45 +36,36 @@ export function createAppliedEnvironmentProjection({
|
|
|
36
36
|
return options[0]?.value || "";
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
function
|
|
40
|
-
next,
|
|
41
|
-
previousConfig,
|
|
42
|
-
previousEnvironment,
|
|
43
|
-
) {
|
|
44
|
-
const ChangeEvent = dom.environmentSelect.ownerDocument.defaultView.Event;
|
|
45
|
-
dom.environmentSelect.dispatchEvent(new ChangeEvent("change"));
|
|
46
|
-
if (dom.environmentSelect.value === next) return true;
|
|
47
|
-
restoreProjection(previousConfig, previousEnvironment);
|
|
48
|
-
// Existing listeners also own composer/environment presentation after a refusal.
|
|
49
|
-
dom.environmentSelect.dispatchEvent(new ChangeEvent("change"));
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function flush() {
|
|
39
|
+
async function flush() {
|
|
54
40
|
if (!pending) return "unchanged";
|
|
55
|
-
const previousConfig = state.config;
|
|
56
41
|
const previousEnvironment = selection.selectedEnvironmentId();
|
|
57
|
-
|
|
58
|
-
|
|
42
|
+
const projected = pending;
|
|
43
|
+
const revision = generation;
|
|
59
44
|
const next = preferredEnvironmentId(
|
|
60
|
-
selection.
|
|
45
|
+
selection.configuredEnvironmentOptions(projected),
|
|
61
46
|
previousEnvironment,
|
|
62
|
-
textOf(
|
|
47
|
+
textOf(projected.defaultEnvironmentId).trim(),
|
|
63
48
|
);
|
|
64
|
-
if (!next)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
dom.environmentSelect.value = next;
|
|
69
|
-
const unchanged = next === previousEnvironment;
|
|
70
|
-
if (unchanged) {
|
|
49
|
+
if (!next) return "blocked";
|
|
50
|
+
if (next === previousEnvironment) {
|
|
51
|
+
applyProjection(projected, next);
|
|
71
52
|
pending = null;
|
|
72
53
|
selection.renderAgentPicker();
|
|
73
54
|
return "unchanged";
|
|
74
55
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
56
|
+
// Keep the old catalog and selected option until draft preparation commits.
|
|
57
|
+
const commitEnvironmentOptions = () => {
|
|
58
|
+
applyProjection(projected, next);
|
|
59
|
+
pending = null;
|
|
60
|
+
};
|
|
61
|
+
commitEnvironmentOptions.canCommit = () => {
|
|
62
|
+
if (revision !== generation) return false;
|
|
63
|
+
return pending === projected;
|
|
64
|
+
};
|
|
65
|
+
let accepted = false;
|
|
66
|
+
try { accepted = await changeEnvironment(next, { commitEnvironmentOptions }); }
|
|
67
|
+
catch { /* The old catalog remains active when draft persistence fails. */ }
|
|
68
|
+
if (!accepted) return "blocked";
|
|
78
69
|
selection.renderAgentPicker();
|
|
79
70
|
return "changed";
|
|
80
71
|
}
|
|
@@ -87,6 +78,7 @@ export function createConfigurationFeature({
|
|
|
87
78
|
state,
|
|
88
79
|
selection,
|
|
89
80
|
onConfigurationApplied,
|
|
81
|
+
changeEnvironment,
|
|
90
82
|
...options
|
|
91
83
|
}) {
|
|
92
84
|
const projection = createAppliedEnvironmentProjection({
|
|
@@ -94,6 +86,7 @@ export function createConfigurationFeature({
|
|
|
94
86
|
dom: options.dom,
|
|
95
87
|
selection,
|
|
96
88
|
loadWebConfig: () => options.runtimeClient.loadWebConfig(),
|
|
89
|
+
changeEnvironment,
|
|
97
90
|
});
|
|
98
91
|
const workspace = createWorkspaceFeature({
|
|
99
92
|
...options,
|
|
@@ -101,13 +94,13 @@ export function createConfigurationFeature({
|
|
|
101
94
|
const currentStillConfigured = await projection.prepare();
|
|
102
95
|
if (currentStillConfigured) await onConfigurationApplied();
|
|
103
96
|
},
|
|
104
|
-
onConfigurationSettled: () => projection.flush() !== "blocked",
|
|
97
|
+
onConfigurationSettled: async () => await projection.flush() !== "blocked",
|
|
105
98
|
});
|
|
106
99
|
return {
|
|
107
100
|
...workspace,
|
|
108
101
|
async reloadAppliedEnvironmentModels() {
|
|
109
102
|
await projection.prepare();
|
|
110
|
-
const result = projection.flush();
|
|
103
|
+
const result = await projection.flush();
|
|
111
104
|
if (result === "blocked") return false;
|
|
112
105
|
if (result === "changed") return true;
|
|
113
106
|
const refreshed = await workspace.load();
|
|
@@ -15,11 +15,13 @@ export function createConfigurationFeature({
|
|
|
15
15
|
runtimeClient,
|
|
16
16
|
selectedEnvironmentId,
|
|
17
17
|
recordControlEvent,
|
|
18
|
+
getOperationsSummary,
|
|
18
19
|
onNavigationChange = () => {},
|
|
19
20
|
onConfigurationApplied = async () => {},
|
|
20
21
|
onConfigurationSettled = () => true,
|
|
21
22
|
getLearningSnapshot = () => null,
|
|
22
23
|
isRuntimeReady = () => true,
|
|
24
|
+
isComputerAccessAvailable = () => true,
|
|
23
25
|
}) {
|
|
24
26
|
let configWorkspace;
|
|
25
27
|
let activation;
|
|
@@ -72,9 +74,26 @@ export function createConfigurationFeature({
|
|
|
72
74
|
});
|
|
73
75
|
|
|
74
76
|
const pluginManager = createPluginManager({
|
|
77
|
+
onSummaryChange: () => configWorkspace?.syncSummary(),
|
|
75
78
|
getEnvironmentId: selectedEnvironmentId,
|
|
79
|
+
loadConfiguration: (id, environment) =>
|
|
80
|
+
runtimeClient.getPluginConfiguration(id, environment),
|
|
81
|
+
saveConfiguration: (id, input, environment) =>
|
|
82
|
+
runtimeClient.savePluginConfiguration(id, input, environment),
|
|
76
83
|
onConfigurationSaved: () => activation?.markPending(),
|
|
84
|
+
onConfigurationSettled,
|
|
77
85
|
loadPlugins: () => runtimeClient.getRuntimePlugins(),
|
|
86
|
+
inspectPlugin: (input, environment) =>
|
|
87
|
+
runtimeClient.inspectRuntimePlugin(input, environment),
|
|
88
|
+
removePlugin: (input, environment) =>
|
|
89
|
+
runtimeClient.removeRuntimePlugin(input, environment),
|
|
90
|
+
onConfigurationApplied: async () => {
|
|
91
|
+
activation?.markApplied();
|
|
92
|
+
await onConfigurationApplied();
|
|
93
|
+
},
|
|
94
|
+
installPlugin: (input, environment) =>
|
|
95
|
+
runtimeClient.installRuntimePlugin(input, environment),
|
|
96
|
+
onNavigationChange,
|
|
78
97
|
setPlugin: (input) => runtimeClient.setRuntimePlugin(input),
|
|
79
98
|
beginRuntimeMutation: (subject) =>
|
|
80
99
|
configWorkspace?.beginExternalRuntimeMutation(subject) ?? false,
|
|
@@ -90,6 +109,7 @@ export function createConfigurationFeature({
|
|
|
90
109
|
dom,
|
|
91
110
|
runtimeClient,
|
|
92
111
|
getEnvironmentId: selectedEnvironmentId,
|
|
112
|
+
isComputerAccessAvailable,
|
|
93
113
|
onChange: () => homeSetupSuggestion?.render(),
|
|
94
114
|
});
|
|
95
115
|
homeSetupSuggestion = createHomeGuidance({
|
|
@@ -99,7 +119,7 @@ export function createConfigurationFeature({
|
|
|
99
119
|
getEnvironmentId: selectedEnvironmentId,
|
|
100
120
|
getLearningSnapshot,
|
|
101
121
|
isRuntimeReady,
|
|
102
|
-
//
|
|
122
|
+
// Configured Home owns computer access above the suggestions.
|
|
103
123
|
getConnectionState: () => null,
|
|
104
124
|
supportsConnection: () => false,
|
|
105
125
|
refreshConnection: () => {},
|
|
@@ -115,6 +135,7 @@ export function createConfigurationFeature({
|
|
|
115
135
|
},
|
|
116
136
|
});
|
|
117
137
|
configWorkspace = createConfigWorkspace({
|
|
138
|
+
getOperationsSummary,
|
|
118
139
|
onNavigationChange,
|
|
119
140
|
onRemoveModel: (model) => {
|
|
120
141
|
if (modelSetup?.isOpen()) return;
|
|
@@ -127,6 +148,8 @@ export function createConfigurationFeature({
|
|
|
127
148
|
},
|
|
128
149
|
loadDashboard: () =>
|
|
129
150
|
runtimeClient.loadConfigDashboard(selectedEnvironmentId()),
|
|
151
|
+
loadModelPlugins: () =>
|
|
152
|
+
runtimeClient.getRuntimePlugins(selectedEnvironmentId()),
|
|
130
153
|
saveFile: async ({ kind, id, config, expectedRevision }) => {
|
|
131
154
|
const result = await runtimeClient.saveConfigFile({
|
|
132
155
|
environmentId: selectedEnvironmentId(),
|
|
@@ -231,21 +254,39 @@ export function createConfigurationFeature({
|
|
|
231
254
|
const prepareDiscardChanges = configWorkspace.prepareDiscardChanges;
|
|
232
255
|
return {
|
|
233
256
|
...configWorkspace,
|
|
257
|
+
activePluginTab: pluginManager.activeTab,
|
|
258
|
+
openPluginRoute: pluginManager.openRoute,
|
|
234
259
|
openComputerSetup: computerAccess.open,
|
|
235
260
|
refreshComputerAccess: computerAccess.load,
|
|
236
|
-
renderHomeGuidance: () =>
|
|
261
|
+
renderHomeGuidance: () => {
|
|
262
|
+
computerAccess.runtimeAvailabilityChanged();
|
|
263
|
+
homeSetupSuggestion.render();
|
|
264
|
+
},
|
|
237
265
|
showActivityMemories: () => {
|
|
238
266
|
memoryWorkspace.activate("memories");
|
|
239
267
|
void longTermMemoryController.setOriginFilter("passive_observation");
|
|
240
268
|
longTermMemoryManager.focus();
|
|
241
269
|
},
|
|
242
270
|
prepareDiscardChanges: (...args) => {
|
|
271
|
+
if (pluginManager.hasConfigurationDraft()) {
|
|
272
|
+
dom.configStatus.textContent =
|
|
273
|
+
"Finish or cancel plugin configuration before leaving.";
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
243
276
|
if (modelSetup.isOpen()) {
|
|
244
277
|
dom.configStatus.textContent =
|
|
245
278
|
"Finish or cancel model setup before leaving configuration.";
|
|
246
279
|
return null;
|
|
247
280
|
}
|
|
248
|
-
|
|
281
|
+
const prepared = prepareDiscardChanges(...args);
|
|
282
|
+
if (typeof prepared !== "function") return prepared;
|
|
283
|
+
const commit = () => prepared();
|
|
284
|
+
commit.canCommit = () => {
|
|
285
|
+
if (pluginManager.hasConfigurationDraft()) return false;
|
|
286
|
+
if (modelSetup.isOpen()) return false;
|
|
287
|
+
return prepared.canCommit?.() !== false;
|
|
288
|
+
};
|
|
289
|
+
return commit;
|
|
249
290
|
},
|
|
250
291
|
};
|
|
251
292
|
}
|