@timurproko/a1 0.1.0 → 0.1.1-dev.10
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 +10 -43
- package/bin/{addone.js → cli.js} +2 -2
- package/bin/guardian.js +22 -0
- package/bin/ui.js +20 -0
- package/dist/native/darwin-arm64/manifest.json +20 -0
- package/dist/native/darwin-arm64/process-guardian +0 -0
- package/dist/native/linux-x64/manifest.json +20 -0
- package/dist/native/linux-x64/process-guardian +0 -0
- package/dist/native/win32-x64/manifest.json +20 -0
- package/dist/native/win32-x64/process-guardian.exe +0 -0
- package/dist/src/cli/dispatch.d.ts +4 -5
- package/dist/src/cli/dispatch.js +11 -11
- package/dist/src/cli/index.d.ts +0 -1
- package/dist/src/cli/index.js +0 -1
- package/dist/src/cli/version-stats.d.ts +0 -1
- package/dist/src/cli/version-stats.js +27 -23
- package/dist/src/cli/version.d.ts +1 -2
- package/dist/src/cli/version.js +4 -4
- package/dist/src/composition/index.d.ts +48 -0
- package/dist/src/composition/index.js +258 -0
- package/dist/src/features/launch/development-launch.d.ts +0 -1
- package/dist/src/features/launch/development-launch.js +12 -11
- package/dist/src/features/launch/index.d.ts +0 -1
- package/dist/src/features/launch/index.js +0 -1
- package/dist/src/features/launch/initialize-profile.d.ts +1 -2
- package/dist/src/features/launch/initialize-profile.js +24 -4
- package/dist/src/features/launch/intent.d.ts +0 -1
- package/dist/src/features/launch/intent.js +0 -1
- package/dist/src/features/launch/prepare-launch.d.ts +2 -3
- package/dist/src/features/launch/prepare-launch.js +3 -4
- package/dist/src/features/launch/profile-paths.d.ts +2 -3
- package/dist/src/features/launch/profile-paths.js +9 -8
- package/dist/src/features/launch/profiles.d.ts +3 -4
- package/dist/src/features/launch/profiles.js +7 -8
- package/dist/src/features/launch/runtime-selection.d.ts +13 -9
- package/dist/src/features/launch/runtime-selection.js +6 -7
- package/dist/src/features/owned-ui/customization.d.ts +5 -3
- package/dist/src/features/owned-ui/customization.js +2 -4
- package/dist/src/features/owned-ui/diagnostics.d.ts +0 -1
- package/dist/src/features/owned-ui/diagnostics.js +0 -1
- package/dist/src/features/owned-ui/index.d.ts +1 -2
- package/dist/src/features/owned-ui/index.js +1 -2
- package/dist/src/features/owned-ui/run.d.ts +9 -7
- package/dist/src/features/owned-ui/run.js +9 -15
- package/dist/src/features/owned-ui/settings-app.d.ts +22 -0
- package/dist/src/features/owned-ui/settings-app.js +633 -0
- package/dist/src/features/workspace/capabilities.d.ts +0 -1
- package/dist/src/features/workspace/capabilities.js +0 -1
- package/dist/src/features/workspace/index.d.ts +0 -1
- package/dist/src/features/workspace/index.js +0 -1
- package/dist/src/features/workspace/presentation.d.ts +1 -2
- package/dist/src/features/workspace/presentation.js +5 -4
- package/dist/src/features/workspace/reconciliation.d.ts +0 -1
- package/dist/src/features/workspace/reconciliation.js +0 -1
- package/dist/src/features/workspace/reducer.d.ts +0 -1
- package/dist/src/features/workspace/reducer.js +0 -1
- package/dist/src/features/workspace/router.d.ts +0 -1
- package/dist/src/features/workspace/router.js +0 -1
- package/dist/src/features/workspace/store.d.ts +0 -1
- package/dist/src/features/workspace/store.js +0 -1
- package/dist/src/foundation/agent-engine-contracts/capability-ports.d.ts +95 -0
- package/dist/src/foundation/agent-engine-contracts/capability-ports.js +35 -0
- package/dist/src/foundation/agent-engine-contracts/domain-validation.d.ts +12 -0
- package/dist/src/foundation/agent-engine-contracts/domain-validation.js +89 -0
- package/dist/src/foundation/agent-engine-contracts/domain.d.ts +116 -0
- package/dist/src/foundation/agent-engine-contracts/domain.js +1 -0
- package/dist/src/foundation/agent-engine-contracts/index.d.ts +7 -0
- package/dist/src/foundation/agent-engine-contracts/index.js +7 -0
- package/dist/src/foundation/agent-engine-contracts/model.d.ts +78 -0
- package/dist/src/foundation/agent-engine-contracts/model.js +1 -0
- package/dist/src/foundation/agent-engine-contracts/ports.d.ts +18 -0
- package/dist/src/foundation/agent-engine-contracts/ports.js +1 -0
- package/dist/src/foundation/agent-engine-contracts/serialization.d.ts +7 -0
- package/dist/src/foundation/agent-engine-contracts/serialization.js +58 -0
- package/dist/src/foundation/agent-engine-contracts/validation.d.ts +5 -0
- package/dist/src/foundation/agent-engine-contracts/validation.js +128 -0
- package/dist/src/foundation/launch-guardian/index.d.ts +1 -0
- package/dist/src/foundation/launch-guardian/index.js +1 -0
- package/dist/src/foundation/launch-guardian/main.d.ts +31 -0
- package/dist/src/foundation/launch-guardian/main.js +165 -0
- package/dist/src/foundation/lifecycle/commands.d.ts +40 -0
- package/dist/src/foundation/lifecycle/commands.js +1 -0
- package/dist/src/foundation/lifecycle/index.d.ts +2 -1
- package/dist/src/foundation/lifecycle/index.js +2 -1
- package/dist/src/foundation/lifecycle/launch-instance.d.ts +46 -0
- package/dist/src/foundation/lifecycle/launch-instance.js +134 -0
- package/dist/src/foundation/lifecycle/model.d.ts +7 -44
- package/dist/src/foundation/lifecycle/model.js +3 -3
- package/dist/src/foundation/lifecycle/paths.d.ts +2 -3
- package/dist/src/foundation/lifecycle/paths.js +32 -16
- package/dist/src/foundation/native-host-protocol/codec.d.ts +0 -1
- package/dist/src/foundation/native-host-protocol/codec.js +0 -1
- package/dist/src/foundation/native-host-protocol/evidence.d.ts +2 -3
- package/dist/src/foundation/native-host-protocol/evidence.js +4 -4
- package/dist/src/foundation/native-host-protocol/index.d.ts +0 -1
- package/dist/src/foundation/native-host-protocol/index.js +0 -1
- package/dist/src/foundation/native-host-protocol/messages.d.ts +1 -2
- package/dist/src/foundation/native-host-protocol/messages.js +2 -2
- package/dist/src/foundation/native-host-protocol/proof-gate.d.ts +0 -1
- package/dist/src/foundation/native-host-protocol/proof-gate.js +0 -1
- package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts +0 -1
- package/dist/src/foundation/owned-ui-contracts/extension-ui.js +0 -1
- package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -1
- package/dist/src/foundation/owned-ui-contracts/index.js +0 -1
- package/dist/src/foundation/owned-ui-contracts/model.d.ts +0 -1
- package/dist/src/foundation/owned-ui-contracts/model.js +0 -1
- package/dist/src/foundation/owned-ui-contracts/validation.d.ts +0 -1
- package/dist/src/foundation/owned-ui-contracts/validation.js +0 -1
- package/dist/src/foundation/owned-ui-settings/declarations.d.ts +13 -0
- package/dist/src/foundation/owned-ui-settings/declarations.js +39 -0
- package/dist/src/foundation/owned-ui-settings/index.d.ts +6 -0
- package/dist/src/foundation/owned-ui-settings/index.js +6 -0
- package/dist/src/foundation/owned-ui-settings/migrations.d.ts +13 -0
- package/dist/src/foundation/owned-ui-settings/migrations.js +28 -0
- package/dist/src/foundation/owned-ui-settings/resolution.d.ts +45 -0
- package/dist/src/foundation/owned-ui-settings/resolution.js +147 -0
- package/dist/src/foundation/owned-ui-settings/sections.d.ts +70 -0
- package/dist/src/foundation/owned-ui-settings/sections.js +93 -0
- package/dist/src/foundation/owned-ui-settings/session.d.ts +44 -0
- package/dist/src/foundation/owned-ui-settings/session.js +145 -0
- package/dist/src/foundation/owned-ui-settings/store.d.ts +28 -0
- package/dist/src/foundation/owned-ui-settings/store.js +90 -0
- package/dist/src/foundation/pi-component-adapter/components.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/components.js +0 -1
- package/dist/src/foundation/pi-component-adapter/conformance.d.ts +1 -1
- package/dist/src/foundation/pi-component-adapter/conformance.js +10 -4
- package/dist/src/foundation/pi-component-adapter/index.d.ts +1 -1
- package/dist/src/foundation/pi-component-adapter/index.js +1 -1
- package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.d.ts +165 -0
- package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.js +166 -0
- package/dist/src/foundation/pi-component-adapter/shell-components.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-components.js +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +10 -13
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.js +5 -62
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts +9 -2
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +10 -9
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js +0 -1
- package/dist/src/foundation/pi-component-adapter/theme.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/theme.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +3 -27
- package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +18 -0
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +55 -0
- package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.d.ts +10 -0
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.js +120 -0
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts +1 -2
- package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js +1 -2
- package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/external-editor.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/model-search.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js +1 -2
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts +8 -1
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js +30 -15
- package/dist/src/foundation/pi-engine-adapter/adapter.d.ts +19 -205
- package/dist/src/foundation/pi-engine-adapter/adapter.js +156 -181
- package/dist/src/foundation/pi-engine-adapter/conformance.d.ts +24 -1
- package/dist/src/foundation/pi-engine-adapter/conformance.js +60 -15
- package/dist/src/foundation/pi-engine-adapter/index.d.ts +6 -1
- package/dist/src/foundation/pi-engine-adapter/index.js +6 -1
- package/dist/src/foundation/pi-engine-adapter/model-auth-integration.d.ts +30 -0
- package/dist/src/foundation/pi-engine-adapter/model-auth-integration.js +61 -0
- package/dist/src/foundation/pi-engine-adapter/pi-settings-metadata.json +374 -0
- package/dist/src/foundation/pi-engine-adapter/public-main-entry.d.ts +5 -0
- package/dist/src/foundation/pi-engine-adapter/public-main-entry.js +27 -0
- package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.d.ts +31 -0
- package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.js +80 -0
- package/dist/src/foundation/pi-engine-adapter/runtime-integration.d.ts +18 -0
- package/dist/src/foundation/pi-engine-adapter/runtime-integration.js +32 -0
- package/dist/src/foundation/pi-engine-adapter/session-integration.d.ts +43 -0
- package/dist/src/foundation/pi-engine-adapter/session-integration.js +97 -0
- package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +55 -0
- package/dist/src/foundation/pi-engine-adapter/settings-integration.js +233 -0
- package/dist/src/foundation/pi-engine-adapter/workflow-controllers.d.ts +20 -0
- package/dist/src/foundation/pi-engine-adapter/workflow-controllers.js +48 -0
- package/dist/src/foundation/pi-engine-adapter/workflows.d.ts +9 -1
- package/dist/src/foundation/pi-engine-adapter/workflows.js +0 -1
- package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +2 -0
- package/dist/src/foundation/pi-owned-ui-integration/index.js +2 -0
- package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +29 -0
- package/dist/src/foundation/pi-owned-ui-integration/route-host.js +1 -0
- package/dist/src/{features/owned-ui/pi-session-shell.d.ts → foundation/pi-owned-ui-integration/session-shell.d.ts} +23 -14
- package/dist/src/{features/owned-ui/pi-session-shell.js → foundation/pi-owned-ui-integration/session-shell.js} +130 -61
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts +6 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js +9 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts +8 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js +22 -9
- package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts +0 -2
- package/dist/src/foundation/pi-tui-runtime-adapter/contracts.js +1 -2
- package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +1 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/index.js +1 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.d.ts +4 -0
- package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.js +48 -0
- package/dist/src/foundation/presentation-contracts/index.d.ts +96 -0
- package/dist/src/foundation/presentation-contracts/index.js +38 -0
- package/dist/src/foundation/process-containment/artifact.d.ts +1 -0
- package/dist/src/foundation/process-containment/artifact.js +34 -0
- package/dist/src/foundation/process-containment/contracts.d.ts +31 -0
- package/dist/src/foundation/process-containment/contracts.js +35 -0
- package/dist/src/foundation/process-containment/index.d.ts +5 -0
- package/dist/src/foundation/process-containment/index.js +5 -0
- package/dist/src/foundation/process-containment/linux-process-inspector.d.ts +6 -0
- package/dist/src/foundation/process-containment/linux-process-inspector.js +26 -0
- package/dist/src/foundation/process-containment/native-guardian-containment.d.ts +16 -0
- package/dist/src/foundation/process-containment/native-guardian-containment.js +139 -0
- package/dist/src/foundation/process-containment/windows-process-inspector.d.ts +17 -0
- package/dist/src/foundation/process-containment/windows-process-inspector.js +53 -0
- package/dist/src/foundation/protocol/client.d.ts +2 -2
- package/dist/src/foundation/protocol/client.js +3 -1
- package/dist/src/foundation/protocol/index.d.ts +0 -1
- package/dist/src/foundation/protocol/index.js +0 -1
- package/dist/src/foundation/protocol/messages.d.ts +6 -7
- package/dist/src/foundation/protocol/messages.js +3 -3
- package/dist/src/foundation/release/bootstrap.d.ts +2 -3
- package/dist/src/foundation/release/bootstrap.js +85 -33
- package/dist/src/foundation/release/cohort-selection.d.ts +0 -1
- package/dist/src/foundation/release/cohort-selection.js +3 -4
- package/dist/src/foundation/release/cohort-state.d.ts +6 -4
- package/dist/src/foundation/release/cohort-state.js +5 -4
- package/dist/src/foundation/release/concurrency.d.ts +1 -0
- package/dist/src/foundation/release/concurrency.js +17 -0
- package/dist/src/foundation/release/development-preview-release.d.ts +2 -2
- package/dist/src/foundation/release/development-preview-release.js +3 -2
- package/dist/src/foundation/release/index.d.ts +0 -1
- package/dist/src/foundation/release/index.js +0 -1
- package/dist/src/foundation/release/process-cleanup.d.ts +1 -2
- package/dist/src/foundation/release/process-cleanup.js +2 -3
- package/dist/src/foundation/release/release-gc.d.ts +0 -1
- package/dist/src/foundation/release/release-gc.js +0 -1
- package/dist/src/foundation/release/release-store.d.ts +38 -6
- package/dist/src/foundation/release/release-store.js +103 -43
- package/dist/src/foundation/release/release.d.ts +20 -6
- package/dist/src/foundation/release/release.js +77 -48
- package/dist/src/foundation/release/stable-release.d.ts +2 -2
- package/dist/src/foundation/release/stable-release.js +6 -5
- package/dist/src/foundation/release/update-transaction.d.ts +2 -2
- package/dist/src/foundation/release/update-transaction.js +8 -7
- package/dist/src/foundation/release/update.d.ts +20 -4
- package/dist/src/foundation/release/update.js +152 -36
- package/dist/src/foundation/storage/control-store.d.ts +8 -8
- package/dist/src/foundation/storage/control-store.js +132 -61
- package/dist/src/foundation/storage/index.d.ts +0 -1
- package/dist/src/foundation/storage/index.js +0 -1
- package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts +0 -1
- package/dist/src/foundation/structured-agent-runtime/backpressure.js +0 -1
- package/dist/src/foundation/structured-agent-runtime/commands.d.ts +0 -1
- package/dist/src/foundation/structured-agent-runtime/commands.js +0 -1
- package/dist/src/foundation/structured-agent-runtime/handshake.d.ts +2 -3
- package/dist/src/foundation/structured-agent-runtime/handshake.js +13 -13
- package/dist/src/foundation/structured-agent-runtime/index.d.ts +0 -1
- package/dist/src/foundation/structured-agent-runtime/index.js +0 -1
- package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts +0 -1
- package/dist/src/foundation/structured-agent-runtime/reconnection.js +0 -1
- package/dist/src/foundation/structured-agent-runtime/state.d.ts +0 -1
- package/dist/src/foundation/structured-agent-runtime/state.js +0 -1
- package/dist/src/foundation/supervision/index.d.ts +1 -2
- package/dist/src/foundation/supervision/index.js +1 -2
- package/dist/src/foundation/supervision/main.d.ts +0 -1
- package/dist/src/foundation/supervision/main.js +11 -10
- package/dist/src/foundation/supervision/paths.d.ts +1 -2
- package/dist/src/foundation/supervision/paths.js +1 -2
- package/dist/src/foundation/supervision/server.d.ts +6 -5
- package/dist/src/foundation/supervision/server.js +259 -91
- package/dist/src/foundation/ui-apps/contracts.d.ts +42 -0
- package/dist/src/foundation/ui-apps/contracts.js +12 -0
- package/dist/src/foundation/ui-apps/host.d.ts +42 -0
- package/dist/src/foundation/ui-apps/host.js +152 -0
- package/dist/src/foundation/ui-apps/index.d.ts +3 -0
- package/dist/src/foundation/ui-apps/index.js +3 -0
- package/dist/src/foundation/ui-apps/registry.d.ts +11 -0
- package/dist/src/foundation/ui-apps/registry.js +32 -0
- package/dist/src/foundation/ui-components/dialog-panel.d.ts +36 -0
- package/dist/src/foundation/ui-components/dialog-panel.js +47 -0
- package/dist/src/foundation/ui-components/frame.d.ts +21 -0
- package/dist/src/foundation/ui-components/frame.js +54 -0
- package/dist/src/foundation/ui-components/index.d.ts +18 -0
- package/dist/src/foundation/ui-components/index.js +18 -0
- package/dist/src/foundation/ui-components/label.d.ts +8 -0
- package/dist/src/foundation/ui-components/label.js +36 -0
- package/dist/src/foundation/ui-components/line-input.d.ts +74 -0
- package/dist/src/foundation/ui-components/line-input.js +245 -0
- package/dist/src/foundation/ui-components/list-block.d.ts +66 -0
- package/dist/src/foundation/ui-components/list-block.js +176 -0
- package/dist/src/foundation/ui-components/list-view.d.ts +66 -0
- package/dist/src/foundation/ui-components/list-view.js +76 -0
- package/dist/src/foundation/ui-components/mouse.d.ts +15 -0
- package/dist/src/foundation/ui-components/mouse.js +46 -0
- package/dist/src/foundation/ui-components/pane.d.ts +33 -0
- package/dist/src/foundation/ui-components/pane.js +7 -0
- package/dist/src/foundation/ui-components/revision.d.ts +35 -0
- package/dist/src/foundation/ui-components/revision.js +79 -0
- package/dist/src/foundation/ui-components/scrollbar.d.ts +62 -0
- package/dist/src/foundation/ui-components/scrollbar.js +102 -0
- package/dist/src/foundation/ui-components/shortcuts.d.ts +57 -0
- package/dist/src/foundation/ui-components/shortcuts.js +81 -0
- package/dist/src/foundation/ui-components/spans.d.ts +7 -0
- package/dist/src/foundation/ui-components/spans.js +59 -0
- package/dist/src/foundation/ui-components/status-line.d.ts +16 -0
- package/dist/src/foundation/ui-components/status-line.js +14 -0
- package/dist/src/foundation/ui-components/stepper.d.ts +24 -0
- package/dist/src/foundation/ui-components/stepper.js +33 -0
- package/dist/src/foundation/ui-components/surface.d.ts +20 -0
- package/dist/src/foundation/ui-components/surface.js +38 -0
- package/dist/src/foundation/ui-components/text.d.ts +24 -0
- package/dist/src/foundation/ui-components/text.js +123 -0
- package/dist/src/foundation/ui-components/theme.d.ts +23 -0
- package/dist/src/foundation/ui-components/theme.js +13 -0
- package/dist/src/foundation/ui-components/value-menu.d.ts +41 -0
- package/dist/src/foundation/ui-components/value-menu.js +33 -0
- package/dist/src/foundation/workspace-contracts/index.d.ts +0 -1
- package/dist/src/foundation/workspace-contracts/index.js +0 -1
- package/dist/src/foundation/workspace-contracts/model.d.ts +0 -1
- package/dist/src/foundation/workspace-contracts/model.js +0 -1
- package/dist/src/foundation/workspace-contracts/validation.d.ts +0 -1
- package/dist/src/foundation/workspace-contracts/validation.js +0 -1
- package/dist/src/product-identity.d.ts +37 -0
- package/dist/src/product-identity.js +150 -0
- package/dist/src/product-identity.json +99 -0
- package/docs/architecture/boundaries.md +32 -14
- package/docs/architecture/process-guardian-provenance.md +26 -0
- package/docs/architecture/project-structure.md +2 -2
- package/docs/architecture/resource-and-data-policy.md +1 -1
- package/docs/architecture/terminal-host-proof-gate.md +2 -2
- package/docs/architecture/terminal-host-provenance.md +3 -3
- package/docs/architecture/terminal-host-spike-evidence.md +1 -1
- package/docs/architecture/toolchain.md +40 -8
- package/docs/architecture/ui-reference-provenance.md +50 -0
- package/docs/ci-release-runbook.md +67 -0
- package/docs/features/launch-profiles.md +12 -6
- package/docs/manual-launch-instance-acceptance.md +66 -0
- package/docs/manual-pi-boundary-candidate.md +33 -0
- package/docs/manual-terminal-colour-check.md +55 -0
- package/docs/manual-transparent-checkpoint.md +11 -11
- package/package.json +27 -14
- package/bin/addone-ui.js +0 -20
- package/dist/src/cli/dispatch.d.ts.map +0 -1
- package/dist/src/cli/dispatch.js.map +0 -1
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/version-stats.d.ts.map +0 -1
- package/dist/src/cli/version-stats.js.map +0 -1
- package/dist/src/cli/version.d.ts.map +0 -1
- package/dist/src/cli/version.js.map +0 -1
- package/dist/src/features/launch/development-launch.d.ts.map +0 -1
- package/dist/src/features/launch/development-launch.js.map +0 -1
- package/dist/src/features/launch/index.d.ts.map +0 -1
- package/dist/src/features/launch/index.js.map +0 -1
- package/dist/src/features/launch/initialize-profile.d.ts.map +0 -1
- package/dist/src/features/launch/initialize-profile.js.map +0 -1
- package/dist/src/features/launch/intent.d.ts.map +0 -1
- package/dist/src/features/launch/intent.js.map +0 -1
- package/dist/src/features/launch/prepare-launch.d.ts.map +0 -1
- package/dist/src/features/launch/prepare-launch.js.map +0 -1
- package/dist/src/features/launch/profile-paths.d.ts.map +0 -1
- package/dist/src/features/launch/profile-paths.js.map +0 -1
- package/dist/src/features/launch/profiles.d.ts.map +0 -1
- package/dist/src/features/launch/profiles.js.map +0 -1
- package/dist/src/features/launch/runtime-selection.d.ts.map +0 -1
- package/dist/src/features/launch/runtime-selection.js.map +0 -1
- package/dist/src/features/owned-ui/customization.d.ts.map +0 -1
- package/dist/src/features/owned-ui/customization.js.map +0 -1
- package/dist/src/features/owned-ui/diagnostics.d.ts.map +0 -1
- package/dist/src/features/owned-ui/diagnostics.js.map +0 -1
- package/dist/src/features/owned-ui/index.d.ts.map +0 -1
- package/dist/src/features/owned-ui/index.js.map +0 -1
- package/dist/src/features/owned-ui/pi-session-shell.d.ts.map +0 -1
- package/dist/src/features/owned-ui/pi-session-shell.js.map +0 -1
- package/dist/src/features/owned-ui/run.d.ts.map +0 -1
- package/dist/src/features/owned-ui/run.js.map +0 -1
- package/dist/src/features/workspace/capabilities.d.ts.map +0 -1
- package/dist/src/features/workspace/capabilities.js.map +0 -1
- package/dist/src/features/workspace/index.d.ts.map +0 -1
- package/dist/src/features/workspace/index.js.map +0 -1
- package/dist/src/features/workspace/presentation.d.ts.map +0 -1
- package/dist/src/features/workspace/presentation.js.map +0 -1
- package/dist/src/features/workspace/reconciliation.d.ts.map +0 -1
- package/dist/src/features/workspace/reconciliation.js.map +0 -1
- package/dist/src/features/workspace/reducer.d.ts.map +0 -1
- package/dist/src/features/workspace/reducer.js.map +0 -1
- package/dist/src/features/workspace/router.d.ts.map +0 -1
- package/dist/src/features/workspace/router.js.map +0 -1
- package/dist/src/features/workspace/store.d.ts.map +0 -1
- package/dist/src/features/workspace/store.js.map +0 -1
- package/dist/src/foundation/lifecycle/index.d.ts.map +0 -1
- package/dist/src/foundation/lifecycle/index.js.map +0 -1
- package/dist/src/foundation/lifecycle/model.d.ts.map +0 -1
- package/dist/src/foundation/lifecycle/model.js.map +0 -1
- package/dist/src/foundation/lifecycle/paths.d.ts.map +0 -1
- package/dist/src/foundation/lifecycle/paths.js.map +0 -1
- package/dist/src/foundation/native-host-protocol/codec.d.ts.map +0 -1
- package/dist/src/foundation/native-host-protocol/codec.js.map +0 -1
- package/dist/src/foundation/native-host-protocol/evidence.d.ts.map +0 -1
- package/dist/src/foundation/native-host-protocol/evidence.js.map +0 -1
- package/dist/src/foundation/native-host-protocol/index.d.ts.map +0 -1
- package/dist/src/foundation/native-host-protocol/index.js.map +0 -1
- package/dist/src/foundation/native-host-protocol/messages.d.ts.map +0 -1
- package/dist/src/foundation/native-host-protocol/messages.js.map +0 -1
- package/dist/src/foundation/native-host-protocol/proof-gate.d.ts.map +0 -1
- package/dist/src/foundation/native-host-protocol/proof-gate.js.map +0 -1
- package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts.map +0 -1
- package/dist/src/foundation/owned-ui-contracts/extension-ui.js.map +0 -1
- package/dist/src/foundation/owned-ui-contracts/index.d.ts.map +0 -1
- package/dist/src/foundation/owned-ui-contracts/index.js.map +0 -1
- package/dist/src/foundation/owned-ui-contracts/model.d.ts.map +0 -1
- package/dist/src/foundation/owned-ui-contracts/model.js.map +0 -1
- package/dist/src/foundation/owned-ui-contracts/validation.d.ts.map +0 -1
- package/dist/src/foundation/owned-ui-contracts/validation.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/components.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/components.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/conformance.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/conformance.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/index.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/index.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-components.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-components.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/theme.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/theme.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/external-editor.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/model-search.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts.map +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js.map +0 -1
- package/dist/src/foundation/pi-engine-adapter/adapter.d.ts.map +0 -1
- package/dist/src/foundation/pi-engine-adapter/adapter.js.map +0 -1
- package/dist/src/foundation/pi-engine-adapter/conformance.d.ts.map +0 -1
- package/dist/src/foundation/pi-engine-adapter/conformance.js.map +0 -1
- package/dist/src/foundation/pi-engine-adapter/index.d.ts.map +0 -1
- package/dist/src/foundation/pi-engine-adapter/index.js.map +0 -1
- package/dist/src/foundation/pi-engine-adapter/workflows.d.ts.map +0 -1
- package/dist/src/foundation/pi-engine-adapter/workflows.js.map +0 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts.map +0 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js.map +0 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts.map +0 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js.map +0 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts.map +0 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/contracts.js.map +0 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts.map +0 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/index.js.map +0 -1
- package/dist/src/foundation/protocol/client.d.ts.map +0 -1
- package/dist/src/foundation/protocol/client.js.map +0 -1
- package/dist/src/foundation/protocol/index.d.ts.map +0 -1
- package/dist/src/foundation/protocol/index.js.map +0 -1
- package/dist/src/foundation/protocol/messages.d.ts.map +0 -1
- package/dist/src/foundation/protocol/messages.js.map +0 -1
- package/dist/src/foundation/release/bootstrap.d.ts.map +0 -1
- package/dist/src/foundation/release/bootstrap.js.map +0 -1
- package/dist/src/foundation/release/cohort-selection.d.ts.map +0 -1
- package/dist/src/foundation/release/cohort-selection.js.map +0 -1
- package/dist/src/foundation/release/cohort-state.d.ts.map +0 -1
- package/dist/src/foundation/release/cohort-state.js.map +0 -1
- package/dist/src/foundation/release/development-preview-release.d.ts.map +0 -1
- package/dist/src/foundation/release/development-preview-release.js.map +0 -1
- package/dist/src/foundation/release/index.d.ts.map +0 -1
- package/dist/src/foundation/release/index.js.map +0 -1
- package/dist/src/foundation/release/process-cleanup.d.ts.map +0 -1
- package/dist/src/foundation/release/process-cleanup.js.map +0 -1
- package/dist/src/foundation/release/release-gc.d.ts.map +0 -1
- package/dist/src/foundation/release/release-gc.js.map +0 -1
- package/dist/src/foundation/release/release-store.d.ts.map +0 -1
- package/dist/src/foundation/release/release-store.js.map +0 -1
- package/dist/src/foundation/release/release.d.ts.map +0 -1
- package/dist/src/foundation/release/release.js.map +0 -1
- package/dist/src/foundation/release/stable-release.d.ts.map +0 -1
- package/dist/src/foundation/release/stable-release.js.map +0 -1
- package/dist/src/foundation/release/update-transaction.d.ts.map +0 -1
- package/dist/src/foundation/release/update-transaction.js.map +0 -1
- package/dist/src/foundation/release/update.d.ts.map +0 -1
- package/dist/src/foundation/release/update.js.map +0 -1
- package/dist/src/foundation/storage/control-store.d.ts.map +0 -1
- package/dist/src/foundation/storage/control-store.js.map +0 -1
- package/dist/src/foundation/storage/index.d.ts.map +0 -1
- package/dist/src/foundation/storage/index.js.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/backpressure.js.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/commands.d.ts.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/commands.js.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/handshake.d.ts.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/handshake.js.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/index.d.ts.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/index.js.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/reconnection.js.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/state.d.ts.map +0 -1
- package/dist/src/foundation/structured-agent-runtime/state.js.map +0 -1
- package/dist/src/foundation/supervision/index.d.ts.map +0 -1
- package/dist/src/foundation/supervision/index.js.map +0 -1
- package/dist/src/foundation/supervision/main.d.ts.map +0 -1
- package/dist/src/foundation/supervision/main.js.map +0 -1
- package/dist/src/foundation/supervision/paths.d.ts.map +0 -1
- package/dist/src/foundation/supervision/paths.js.map +0 -1
- package/dist/src/foundation/supervision/server.d.ts.map +0 -1
- package/dist/src/foundation/supervision/server.js.map +0 -1
- package/dist/src/foundation/transparent-terminal/command-resolution.d.ts +0 -14
- package/dist/src/foundation/transparent-terminal/command-resolution.d.ts.map +0 -1
- package/dist/src/foundation/transparent-terminal/command-resolution.js +0 -70
- package/dist/src/foundation/transparent-terminal/command-resolution.js.map +0 -1
- package/dist/src/foundation/transparent-terminal/foreground-broker.d.ts +0 -33
- package/dist/src/foundation/transparent-terminal/foreground-broker.d.ts.map +0 -1
- package/dist/src/foundation/transparent-terminal/foreground-broker.js +0 -88
- package/dist/src/foundation/transparent-terminal/foreground-broker.js.map +0 -1
- package/dist/src/foundation/transparent-terminal/index.d.ts +0 -4
- package/dist/src/foundation/transparent-terminal/index.d.ts.map +0 -1
- package/dist/src/foundation/transparent-terminal/index.js +0 -4
- package/dist/src/foundation/transparent-terminal/index.js.map +0 -1
- package/dist/src/foundation/transparent-terminal/main.d.ts +0 -10
- package/dist/src/foundation/transparent-terminal/main.d.ts.map +0 -1
- package/dist/src/foundation/transparent-terminal/main.js +0 -107
- package/dist/src/foundation/transparent-terminal/main.js.map +0 -1
- package/dist/src/foundation/transparent-terminal/native-launcher.d.ts +0 -26
- package/dist/src/foundation/transparent-terminal/native-launcher.d.ts.map +0 -1
- package/dist/src/foundation/transparent-terminal/native-launcher.js +0 -147
- package/dist/src/foundation/transparent-terminal/native-launcher.js.map +0 -1
- package/dist/src/foundation/workspace-contracts/index.d.ts.map +0 -1
- package/dist/src/foundation/workspace-contracts/index.js.map +0 -1
- package/dist/src/foundation/workspace-contracts/model.d.ts.map +0 -1
- package/dist/src/foundation/workspace-contracts/model.js.map +0 -1
- package/dist/src/foundation/workspace-contracts/validation.d.ts.map +0 -1
- package/dist/src/foundation/workspace-contracts/validation.js.map +0 -1
- /package/bin/{addone-supervisor.js → supervisor.js} +0 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
export class WindowsNativeProcessInspector {
|
|
3
|
+
helperPath;
|
|
4
|
+
runner;
|
|
5
|
+
constructor(helperPath, runner = defaultRunner) {
|
|
6
|
+
this.helperPath = helperPath;
|
|
7
|
+
this.runner = runner;
|
|
8
|
+
if (!helperPath || helperPath.includes("\0"))
|
|
9
|
+
throw new TypeError("process guardian helper path is invalid");
|
|
10
|
+
}
|
|
11
|
+
async observe(pid) {
|
|
12
|
+
if (!Number.isSafeInteger(pid) || pid <= 0)
|
|
13
|
+
throw new TypeError("inspected PID must be a positive safe integer");
|
|
14
|
+
const result = await this.runner.run(this.helperPath, ["--inspect-pid", String(pid)]);
|
|
15
|
+
if (result.exitCode === 3)
|
|
16
|
+
return null;
|
|
17
|
+
if (result.exitCode !== 0) {
|
|
18
|
+
const detail = result.stderr.trim() || `helper exited ${result.exitCode}`;
|
|
19
|
+
throw Object.assign(new Error(`cannot inspect native process identity: ${detail}`), { code: "PROCESS_INSPECTION_FAILED" });
|
|
20
|
+
}
|
|
21
|
+
let value;
|
|
22
|
+
try {
|
|
23
|
+
value = JSON.parse(result.stdout);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
throw Object.assign(new Error("process guardian returned malformed identity data"), { code: "PROCESS_INSPECTION_INVALID" });
|
|
27
|
+
}
|
|
28
|
+
if (!isIdentity(value) || value.pid !== pid || !value.startIdentity.startsWith("windows-filetime:")) {
|
|
29
|
+
throw Object.assign(new Error("process guardian returned mismatched identity data"), { code: "PROCESS_INSPECTION_INVALID" });
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
async matches(identity) {
|
|
34
|
+
const observed = await this.observe(identity.pid);
|
|
35
|
+
return observed !== null && observed.startIdentity === identity.startIdentity;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const defaultRunner = {
|
|
39
|
+
async run(executable, arguments_) {
|
|
40
|
+
return await new Promise(resolvePromise => {
|
|
41
|
+
execFile(executable, [...arguments_], { windowsHide: true, timeout: 2_000, maxBuffer: 8 * 1_024 }, (error, stdout, stderr) => {
|
|
42
|
+
const exitCode = error && "code" in error && typeof error.code === "number" ? error.code : error ? 1 : 0;
|
|
43
|
+
resolvePromise({ exitCode, stdout, stderr });
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
function isIdentity(value) {
|
|
49
|
+
return typeof value === "object" && value !== null
|
|
50
|
+
&& "pid" in value && Number.isSafeInteger(value.pid) && Number(value.pid) > 0
|
|
51
|
+
&& "startIdentity" in value && typeof value.startIdentity === "string"
|
|
52
|
+
&& value.startIdentity.length > 0 && value.startIdentity.length <= 512 && !value.startIdentity.includes("\0");
|
|
53
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
|
-
import type { CommandResult, SupervisorCommand, SupervisorSnapshot } from "../lifecycle/index.js";
|
|
2
|
+
import type { CommandResult, LaunchInstanceStopIntent, SupervisorCommand, SupervisorSnapshot } from "../lifecycle/index.js";
|
|
3
3
|
interface ClientEvents {
|
|
4
4
|
snapshot: [SupervisorSnapshot];
|
|
5
|
+
stopIntent: [LaunchInstanceStopIntent];
|
|
5
6
|
disconnect: [];
|
|
6
7
|
}
|
|
7
8
|
export declare class SupervisorClient extends EventEmitter<ClientEvents> {
|
|
@@ -14,4 +15,3 @@ export declare class SupervisorClient extends EventEmitter<ClientEvents> {
|
|
|
14
15
|
close(): void;
|
|
15
16
|
}
|
|
16
17
|
export {};
|
|
17
|
-
//# sourceMappingURL=client.d.ts.map
|
|
@@ -91,6 +91,9 @@ export class SupervisorClient extends EventEmitter {
|
|
|
91
91
|
pending.resolve(message.result);
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
+
else if (message.type === "stop-launch-instance" && message.instanceId && message.requestId && message.reason) {
|
|
95
|
+
this.emit("stopIntent", message);
|
|
96
|
+
}
|
|
94
97
|
else if (message.type === "protocol-error") {
|
|
95
98
|
fail(new Error(message.message ?? "protocol error"));
|
|
96
99
|
}
|
|
@@ -124,4 +127,3 @@ function isTransientEndpointError(error) {
|
|
|
124
127
|
function transientError(message, code) {
|
|
125
128
|
return Object.assign(new Error(message), { code });
|
|
126
129
|
}
|
|
127
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { CommandResult, SupervisorCommand, SupervisorSnapshot } from "../lifecycle/index.js";
|
|
2
|
-
export declare const CONTROL_ENVELOPE:
|
|
1
|
+
import type { CommandResult, LaunchInstanceStopIntent, SupervisorCommand, SupervisorSnapshot } from "../lifecycle/index.js";
|
|
2
|
+
export declare const CONTROL_ENVELOPE: string;
|
|
3
3
|
export declare const CONTROL_ENVELOPE_REVISION: 1;
|
|
4
|
-
export declare const REQUIRED_CONTROL_FEATURES: readonly ["handshake.features.v1", "snapshot.revision.v1", "commands.request-identity.v1", "generation.lifecycle.v1", "
|
|
4
|
+
export declare const REQUIRED_CONTROL_FEATURES: readonly ["handshake.features.v1", "snapshot.revision.v1", "commands.request-identity.v1", "generation.lifecycle.v1", "launch.instance-lifecycle.v1"];
|
|
5
5
|
export declare const OPTIONAL_CONTROL_FEATURES: readonly ["messages.unknown-additive-ignore.v1", "snapshot.resynchronize.v1"];
|
|
6
6
|
export type ControlFeature = string;
|
|
7
7
|
export declare const GENERATED_CONTRACT_DIGEST: string;
|
|
@@ -41,12 +41,12 @@ export type ServerMessage = {
|
|
|
41
41
|
readonly type: "release-ownership-result";
|
|
42
42
|
readonly released: boolean;
|
|
43
43
|
readonly reason: string;
|
|
44
|
-
readonly
|
|
44
|
+
readonly liveInstanceIds: readonly string[];
|
|
45
45
|
} | {
|
|
46
46
|
readonly type: "release-update-result";
|
|
47
47
|
readonly accepted: boolean;
|
|
48
48
|
readonly reason: string;
|
|
49
|
-
readonly
|
|
49
|
+
readonly liveInstanceIds: readonly string[];
|
|
50
50
|
} | ({
|
|
51
51
|
readonly type: "server-hello";
|
|
52
52
|
readonly supervisorId: string;
|
|
@@ -60,7 +60,7 @@ export type ServerMessage = {
|
|
|
60
60
|
} | {
|
|
61
61
|
readonly type: "command-result";
|
|
62
62
|
readonly result: CommandResult;
|
|
63
|
-
} | {
|
|
63
|
+
} | LaunchInstanceStopIntent | {
|
|
64
64
|
readonly type: "protocol-error";
|
|
65
65
|
readonly code: string;
|
|
66
66
|
readonly message: string;
|
|
@@ -87,4 +87,3 @@ export declare function isControlHello(value: unknown): value is {
|
|
|
87
87
|
export declare function isCommandMessage(value: unknown): value is Extract<ClientMessage, {
|
|
88
88
|
type: "command";
|
|
89
89
|
}>;
|
|
90
|
-
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
|
|
2
|
+
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
3
|
+
export const CONTROL_ENVELOPE = PRODUCT_IDENTITY.protocol.controlEnvelope;
|
|
3
4
|
export const CONTROL_ENVELOPE_REVISION = 1;
|
|
4
5
|
export const REQUIRED_CONTROL_FEATURES = [
|
|
5
6
|
"handshake.features.v1",
|
|
6
7
|
"snapshot.revision.v1",
|
|
7
8
|
"commands.request-identity.v1",
|
|
8
9
|
"generation.lifecycle.v1",
|
|
9
|
-
"
|
|
10
|
+
"launch.instance-lifecycle.v1",
|
|
10
11
|
];
|
|
11
12
|
export const OPTIONAL_CONTROL_FEATURES = [
|
|
12
13
|
"messages.unknown-additive-ignore.v1",
|
|
@@ -96,4 +97,3 @@ function isRecord(value) {
|
|
|
96
97
|
function isStringArray(value) {
|
|
97
98
|
return Array.isArray(value) && value.every(item => typeof item === "string" && item.length > 0);
|
|
98
99
|
}
|
|
99
|
-
//# sourceMappingURL=messages.js.map
|
|
@@ -2,7 +2,7 @@ import { type OwnershipProbe } from "./cohort-selection.js";
|
|
|
2
2
|
import { type SupervisorEndpointMetadata } from "./cohort-state.js";
|
|
3
3
|
import { type LaunchProfileId } from "../lifecycle/index.js";
|
|
4
4
|
import { cleanupProvenIdleOwner } from "./process-cleanup.js";
|
|
5
|
-
import { type MaterializedRelease } from "./release-store.js";
|
|
5
|
+
import { type MaterializedRelease, type VerifyMaterializedReleaseOptions } from "./release-store.js";
|
|
6
6
|
export interface BootstrapOptions {
|
|
7
7
|
readonly packageRoot: string;
|
|
8
8
|
readonly launchIntent?: {
|
|
@@ -15,7 +15,7 @@ export interface BootstrapOptions {
|
|
|
15
15
|
readonly output?: Pick<NodeJS.WriteStream, "write">;
|
|
16
16
|
}
|
|
17
17
|
export declare function runBootstrap(options: BootstrapOptions): Promise<number>;
|
|
18
|
-
export declare function certifyMaterializedRelease(release: MaterializedRelease, dataDir: string): Promise<string>;
|
|
18
|
+
export declare function certifyMaterializedRelease(release: MaterializedRelease, dataDir: string, verification?: VerifyMaterializedReleaseOptions): Promise<string>;
|
|
19
19
|
export declare function startSupervisor(release: MaterializedRelease, environment: NodeJS.ProcessEnv): Promise<void>;
|
|
20
20
|
export declare function releaseEnvironment(environment: NodeJS.ProcessEnv, release: MaterializedRelease): NodeJS.ProcessEnv;
|
|
21
21
|
export declare function waitForVerifiedEndpoint(path: string, release: MaterializedRelease, timeoutMs: number): Promise<void>;
|
|
@@ -27,4 +27,3 @@ export declare function releaseVerifiedIdleOwner(metadata: SupervisorEndpointMet
|
|
|
27
27
|
}): Promise<boolean>;
|
|
28
28
|
export declare function waitForProcessExit(pid: number, timeoutMs: number): Promise<void>;
|
|
29
29
|
export declare function removeEndpointArtifacts(metadataPath: string, endpoint: string): Promise<void>;
|
|
30
|
-
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -5,41 +5,65 @@ import { platform } from "node:os";
|
|
|
5
5
|
import { resolve } from "node:path";
|
|
6
6
|
import { selectCohortLaunch } from "./cohort-selection.js";
|
|
7
7
|
import { CohortStateStore } from "./cohort-state.js";
|
|
8
|
-
import { assertLaunchProfileId,
|
|
8
|
+
import { assertLaunchProfileId, resolveProductPaths } from "../lifecycle/index.js";
|
|
9
9
|
import { encodeFrame, LineFrameDecoder } from "../protocol/index.js";
|
|
10
10
|
import { cleanupProvenIdleOwner, processIsAlive } from "./process-cleanup.js";
|
|
11
|
-
import { materializeRelease, readMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease } from "./release-store.js";
|
|
11
|
+
import { consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease } from "./release-store.js";
|
|
12
|
+
import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
|
|
12
13
|
export async function runBootstrap(options) {
|
|
13
14
|
const environment = { ...(options.environment ?? process.env) };
|
|
14
|
-
const launchProfileId = options.launchIntent?.profile.id ?? "
|
|
15
|
+
const launchProfileId = options.launchIntent?.profile.id ?? "a1";
|
|
15
16
|
assertLaunchProfileId(launchProfileId);
|
|
16
|
-
environment.
|
|
17
|
+
environment[PRODUCT_IDENTITY.environment.launchProfile] = launchProfileId;
|
|
17
18
|
const output = options.output ?? process.stderr;
|
|
18
|
-
const paths =
|
|
19
|
+
const paths = resolveProductPaths(environment);
|
|
19
20
|
await mkdir(paths.runtimeDir, { recursive: true, mode: 0o700 });
|
|
20
|
-
const candidate = await materializeRelease(options.packageRoot, paths.dataDir);
|
|
21
21
|
const stateStore = new CohortStateStore(paths.dataDir);
|
|
22
|
-
await stateStore.recordCandidate(candidate);
|
|
23
22
|
let state = await stateStore.read();
|
|
23
|
+
let endpoint = await readEndpointMetadata(paths.endpointMetadataPath);
|
|
24
|
+
let probe = endpoint ? await probeOwnership(endpoint) : "dead";
|
|
25
|
+
const installedVersion = await readInstalledVersion(options.packageRoot);
|
|
26
|
+
const activeId = state.references.active;
|
|
27
|
+
const active = activeId === null ? undefined : state.releases[activeId];
|
|
28
|
+
if (active?.approval === "approved" && active.packageVersion === installedVersion) {
|
|
29
|
+
const endpointMatches = endpoint?.releaseId === active.releaseId
|
|
30
|
+
&& endpoint.releaseRoot === active.releaseRoot
|
|
31
|
+
&& endpoint.contentDigest === active.contentDigest;
|
|
32
|
+
if (endpointMatches && probe === "live-verified") {
|
|
33
|
+
const retained = await readCertifiedReleaseManifest(active, resolve(paths.dataDir, "releases"));
|
|
34
|
+
return await launchUi(retained, environment);
|
|
35
|
+
}
|
|
36
|
+
if (endpoint === null || probe === "dead") {
|
|
37
|
+
if (endpoint)
|
|
38
|
+
await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint);
|
|
39
|
+
const retained = await readMaterializedRelease(active.releaseRoot);
|
|
40
|
+
await startSupervisor(retained, environment);
|
|
41
|
+
await waitForVerifiedEndpoint(paths.endpointMetadataPath, retained, 8_000);
|
|
42
|
+
return await launchUi(retained, environment);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const candidate = await materializeRelease(options.packageRoot, paths.dataDir);
|
|
46
|
+
await stateStore.recordCandidate(candidate);
|
|
47
|
+
state = await stateStore.read();
|
|
24
48
|
if (!state.references.active) {
|
|
25
49
|
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
26
50
|
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
27
51
|
await stateStore.activate(candidate.releaseId);
|
|
28
52
|
state = await stateStore.read();
|
|
29
53
|
}
|
|
30
|
-
|
|
31
|
-
|
|
54
|
+
endpoint = await readEndpointMetadata(paths.endpointMetadataPath);
|
|
55
|
+
probe = endpoint ? await probeOwnership(endpoint) : "dead";
|
|
32
56
|
let decision = selectCohortLaunch(candidate, state, endpoint, probe);
|
|
33
57
|
if (decision.action === "blocked") {
|
|
34
|
-
await stateStore.blockPending(decision.reason, endpoint?.ownership.
|
|
35
|
-
output.write(`
|
|
58
|
+
await stateStore.blockPending(decision.reason, endpoint?.ownership.liveInstanceIds ?? []);
|
|
59
|
+
output.write(`${PRODUCT_TEXT.diagnostic(`startup is blocked to preserve uncertain live ownership: ${decision.reason}`)}\n`);
|
|
36
60
|
return 1;
|
|
37
61
|
}
|
|
38
62
|
if (decision.action === "clean-stale-owner" && endpoint) {
|
|
39
63
|
const diagnostics = await cleanupProvenIdleOwner(endpoint);
|
|
40
64
|
await writeFile(resolve(paths.dataDir, `cleanup-${Date.now()}.json`), JSON.stringify(diagnostics, null, 2));
|
|
41
65
|
if (!diagnostics.terminated)
|
|
42
|
-
throw new Error(`could not safely clean stale
|
|
66
|
+
throw new Error(`could not safely clean stale ${PRODUCT_TEXT.displayName} supervisor ${endpoint.pid}`);
|
|
43
67
|
await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint);
|
|
44
68
|
decision = selectCohortLaunch(candidate, await stateStore.read(), null, "dead");
|
|
45
69
|
}
|
|
@@ -49,7 +73,7 @@ export async function runBootstrap(options) {
|
|
|
49
73
|
if (decision.action === "launch-retained-ui") {
|
|
50
74
|
const retained = await verifyMaterializedRelease(decision.releaseRoot, undefined, resolve(paths.dataDir, "releases"));
|
|
51
75
|
if (decision.recordPending && endpoint) {
|
|
52
|
-
await stateStore.blockPending("candidate activation deferred by live non-resumable
|
|
76
|
+
await stateStore.blockPending("candidate activation deferred by live non-resumable instances", endpoint.ownership.nonResumableInstanceIds);
|
|
53
77
|
}
|
|
54
78
|
const code = await launchUi(retained, environment);
|
|
55
79
|
if (decision.recordPending)
|
|
@@ -61,13 +85,13 @@ export async function runBootstrap(options) {
|
|
|
61
85
|
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
62
86
|
const released = await requestIdleOwnershipRelease(endpoint, candidate.releaseId, 2_000);
|
|
63
87
|
if (!released) {
|
|
64
|
-
await stateStore.blockPending("idle supervisor did not verify ownership release", endpoint.ownership.
|
|
65
|
-
output.write("
|
|
88
|
+
await stateStore.blockPending("idle supervisor did not verify ownership release", endpoint.ownership.liveInstanceIds);
|
|
89
|
+
output.write(`${PRODUCT_TEXT.diagnostic("could not verify idle cohort ownership release; the retained release remains selected.")}\n`);
|
|
66
90
|
return 1;
|
|
67
91
|
}
|
|
68
92
|
if (!await releaseVerifiedIdleOwner(endpoint, paths.dataDir)) {
|
|
69
|
-
await stateStore.blockPending("idle supervisor acknowledged release but did not terminate", endpoint.ownership.
|
|
70
|
-
output.write("
|
|
93
|
+
await stateStore.blockPending("idle supervisor acknowledged release but did not terminate", endpoint.ownership.liveInstanceIds);
|
|
94
|
+
output.write(`${PRODUCT_TEXT.diagnostic("could not complete bounded idle cohort shutdown; the candidate remains pending.")}\n`);
|
|
71
95
|
return 1;
|
|
72
96
|
}
|
|
73
97
|
await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint);
|
|
@@ -92,10 +116,20 @@ export async function runBootstrap(options) {
|
|
|
92
116
|
await waitForVerifiedEndpoint(paths.endpointMetadataPath, selected, 8_000);
|
|
93
117
|
return await launchUi(selected, environment);
|
|
94
118
|
}
|
|
95
|
-
|
|
96
|
-
await
|
|
119
|
+
async function readInstalledVersion(packageRoot) {
|
|
120
|
+
const manifest = JSON.parse(await readFile(resolve(packageRoot, "package.json"), "utf8"));
|
|
121
|
+
if (typeof manifest.version !== "string" || manifest.version.length === 0) {
|
|
122
|
+
throw new Error(PRODUCT_TEXT.diagnostic("package metadata has no version"));
|
|
123
|
+
}
|
|
124
|
+
return manifest.version;
|
|
125
|
+
}
|
|
126
|
+
export async function certifyMaterializedRelease(release, dataDir, verification = {}) {
|
|
127
|
+
if (!consumeMaterializationProof(release)) {
|
|
128
|
+
await verifyMaterializedRelease(release.releaseRoot, release, resolve(dataDir, "releases"), verification);
|
|
129
|
+
}
|
|
97
130
|
const path = resolve(dataDir, `certification-${release.releaseId}.json`);
|
|
98
131
|
await writeFile(path, JSON.stringify({
|
|
132
|
+
schema: PRODUCT_IDENTITY.evidence.releaseCertificationSchema,
|
|
99
133
|
releaseId: release.releaseId,
|
|
100
134
|
contentDigest: release.contentDigest,
|
|
101
135
|
verifiedAt: new Date().toISOString(),
|
|
@@ -104,7 +138,7 @@ export async function certifyMaterializedRelease(release, dataDir) {
|
|
|
104
138
|
return path;
|
|
105
139
|
}
|
|
106
140
|
export async function startSupervisor(release, environment) {
|
|
107
|
-
const entry = await resolveReleaseEntryPoint(release, "bin/
|
|
141
|
+
const entry = await resolveReleaseEntryPoint(release, "bin/supervisor.js");
|
|
108
142
|
const child = spawn(process.execPath, [entry], {
|
|
109
143
|
detached: true,
|
|
110
144
|
env: releaseEnvironment(environment, release),
|
|
@@ -118,7 +152,7 @@ export async function startSupervisor(release, environment) {
|
|
|
118
152
|
child.unref();
|
|
119
153
|
}
|
|
120
154
|
async function launchUi(release, environment) {
|
|
121
|
-
const entry = await resolveReleaseEntryPoint(release, "bin/
|
|
155
|
+
const entry = await resolveReleaseEntryPoint(release, "bin/guardian.js");
|
|
122
156
|
return await new Promise((resolvePromise, rejectPromise) => {
|
|
123
157
|
const child = spawn(process.execPath, [entry], {
|
|
124
158
|
env: releaseEnvironment(environment, release),
|
|
@@ -132,9 +166,9 @@ async function launchUi(release, environment) {
|
|
|
132
166
|
export function releaseEnvironment(environment, release) {
|
|
133
167
|
return {
|
|
134
168
|
...environment,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
169
|
+
[PRODUCT_IDENTITY.environment.releaseId]: release.releaseId,
|
|
170
|
+
[PRODUCT_IDENTITY.environment.releaseRoot]: release.releaseRoot,
|
|
171
|
+
[PRODUCT_IDENTITY.environment.releaseDigest]: release.contentDigest,
|
|
138
172
|
};
|
|
139
173
|
}
|
|
140
174
|
export async function waitForVerifiedEndpoint(path, release, timeoutMs) {
|
|
@@ -145,18 +179,34 @@ export async function waitForVerifiedEndpoint(path, release, timeoutMs) {
|
|
|
145
179
|
return;
|
|
146
180
|
await new Promise(resolvePromise => setTimeout(resolvePromise, 40));
|
|
147
181
|
}
|
|
148
|
-
throw new Error(`
|
|
182
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`supervisor did not publish verified endpoint metadata within ${timeoutMs}ms`));
|
|
149
183
|
}
|
|
150
184
|
export async function readEndpointMetadata(path) {
|
|
151
185
|
try {
|
|
152
186
|
const value = JSON.parse(await readFile(path, "utf8"));
|
|
153
|
-
|
|
187
|
+
const ownership = value.ownership;
|
|
188
|
+
const liveInstanceIds = Array.isArray(ownership?.liveInstanceIds)
|
|
189
|
+
? ownership.liveInstanceIds
|
|
190
|
+
: Array.isArray(ownership?.liveGenerationIds) ? ownership.liveGenerationIds : null;
|
|
191
|
+
const nonResumableInstanceIds = Array.isArray(ownership?.nonResumableInstanceIds)
|
|
192
|
+
? ownership.nonResumableInstanceIds
|
|
193
|
+
: Array.isArray(ownership?.nonResumableGenerationIds) ? ownership.nonResumableGenerationIds : null;
|
|
194
|
+
const uncertainInstanceIds = Array.isArray(ownership?.uncertainInstanceIds) ? ownership.uncertainInstanceIds : [];
|
|
195
|
+
if (!value || value.schema !== PRODUCT_IDENTITY.protocol.supervisorSchema || typeof value.supervisorId !== "string" || typeof value.endpoint !== "string" || !Number.isSafeInteger(value.pid)
|
|
154
196
|
|| typeof value.pidStartIdentity !== "string" || typeof value.bootNonce !== "string" || typeof value.releaseId !== "string"
|
|
155
|
-
|| typeof value.releaseRoot !== "string" || typeof value.contentDigest !== "string" || !
|
|
156
|
-
|| !
|
|
197
|
+
|| typeof value.releaseRoot !== "string" || typeof value.contentDigest !== "string" || !ownership
|
|
198
|
+
|| !isStringArray(liveInstanceIds) || !isStringArray(nonResumableInstanceIds) || !isStringArray(uncertainInstanceIds)) {
|
|
157
199
|
return null;
|
|
158
200
|
}
|
|
159
|
-
return
|
|
201
|
+
return {
|
|
202
|
+
...value,
|
|
203
|
+
ownership: {
|
|
204
|
+
...ownership,
|
|
205
|
+
liveInstanceIds,
|
|
206
|
+
nonResumableInstanceIds,
|
|
207
|
+
uncertainInstanceIds,
|
|
208
|
+
},
|
|
209
|
+
};
|
|
160
210
|
}
|
|
161
211
|
catch {
|
|
162
212
|
return null;
|
|
@@ -209,11 +259,11 @@ async function activatePendingAfterBlockerExit(candidate, stateStore, paths, env
|
|
|
209
259
|
let endpoint = null;
|
|
210
260
|
while (Date.now() < deadline) {
|
|
211
261
|
endpoint = await readEndpointMetadata(paths.endpointMetadataPath);
|
|
212
|
-
if (!endpoint || endpoint.ownership.
|
|
262
|
+
if (!endpoint || endpoint.ownership.liveInstanceIds.length === 0)
|
|
213
263
|
break;
|
|
214
264
|
await new Promise(resolvePromise => setTimeout(resolvePromise, 40));
|
|
215
265
|
}
|
|
216
|
-
if (!endpoint || endpoint.ownership.
|
|
266
|
+
if (!endpoint || endpoint.ownership.liveInstanceIds.length > 0 || await probeOwnership(endpoint) !== "live-verified")
|
|
217
267
|
return;
|
|
218
268
|
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
219
269
|
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
@@ -266,6 +316,9 @@ async function requestIdleOwnershipRelease(metadata, candidateReleaseId, timeout
|
|
|
266
316
|
setTimeout(() => finish(false), timeoutMs).unref();
|
|
267
317
|
});
|
|
268
318
|
}
|
|
319
|
+
function isStringArray(value) {
|
|
320
|
+
return Array.isArray(value) && value.every(item => typeof item === "string" && item.length > 0);
|
|
321
|
+
}
|
|
269
322
|
export async function waitForProcessExit(pid, timeoutMs) {
|
|
270
323
|
const deadline = Date.now() + timeoutMs;
|
|
271
324
|
while (Date.now() < deadline) {
|
|
@@ -273,11 +326,10 @@ export async function waitForProcessExit(pid, timeoutMs) {
|
|
|
273
326
|
return;
|
|
274
327
|
await new Promise(resolvePromise => setTimeout(resolvePromise, 25));
|
|
275
328
|
}
|
|
276
|
-
throw new Error(`
|
|
329
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`supervisor ${pid} did not release process ownership within ${timeoutMs}ms`));
|
|
277
330
|
}
|
|
278
331
|
export async function removeEndpointArtifacts(metadataPath, endpoint) {
|
|
279
332
|
await rm(metadataPath, { force: true });
|
|
280
333
|
if (platform() !== "win32")
|
|
281
334
|
await rm(endpoint, { force: true });
|
|
282
335
|
}
|
|
283
|
-
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -37,4 +37,3 @@ export type CohortLaunchDecision = {
|
|
|
37
37
|
readonly pid: number | null;
|
|
38
38
|
};
|
|
39
39
|
export declare function selectCohortLaunch(candidate: MaterializedRelease, state: CohortState, endpoint: SupervisorEndpointMetadata | null, probe: OwnershipProbe): CohortLaunchDecision;
|
|
40
|
-
//# sourceMappingURL=cohort-selection.d.ts.map
|
|
@@ -10,7 +10,7 @@ export function selectCohortLaunch(candidate, state, endpoint, probe) {
|
|
|
10
10
|
pid: endpoint.pid,
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
-
if (endpoint.releaseId !== candidate.releaseId && endpoint.ownership.
|
|
13
|
+
if (endpoint.releaseId !== candidate.releaseId && endpoint.ownership.liveInstanceIds.length === 0) {
|
|
14
14
|
return {
|
|
15
15
|
action: "replace-idle-cohort",
|
|
16
16
|
releaseId: candidate.releaseId,
|
|
@@ -30,12 +30,12 @@ export function selectCohortLaunch(candidate, state, endpoint, probe) {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
if (endpoint && probe === "unresponsive") {
|
|
33
|
-
if (endpoint.ownership.
|
|
33
|
+
if (endpoint.ownership.liveInstanceIds.length > 0 || endpoint.ownership.nonResumableInstanceIds.length > 0) {
|
|
34
34
|
return {
|
|
35
35
|
action: "blocked",
|
|
36
36
|
releaseId: endpoint.releaseId,
|
|
37
37
|
releaseRoot: endpoint.releaseRoot,
|
|
38
|
-
reason: "ownership of live
|
|
38
|
+
reason: "ownership of live launch instances is uncertain; preserving the unresponsive supervisor",
|
|
39
39
|
pid: endpoint.pid,
|
|
40
40
|
};
|
|
41
41
|
}
|
|
@@ -73,4 +73,3 @@ export function selectCohortLaunch(candidate, state, endpoint, probe) {
|
|
|
73
73
|
reason: "candidate is not approved; retaining the active release",
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
|
-
//# sourceMappingURL=cohort-selection.js.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { MaterializedRelease } from "./release-store.js";
|
|
2
|
+
export declare const RELEASE_COHORT_SCHEMA: string;
|
|
2
3
|
export type ReleaseApproval = "candidate" | "approved" | "rejected";
|
|
3
4
|
export interface ReleaseRecord {
|
|
4
5
|
readonly releaseId: string;
|
|
@@ -18,7 +19,7 @@ export interface ReleaseReferences {
|
|
|
18
19
|
readonly retention: readonly string[];
|
|
19
20
|
}
|
|
20
21
|
export interface CohortState {
|
|
21
|
-
readonly
|
|
22
|
+
readonly schema: typeof RELEASE_COHORT_SCHEMA;
|
|
22
23
|
readonly revision: number;
|
|
23
24
|
readonly releases: Readonly<Record<string, ReleaseRecord>>;
|
|
24
25
|
readonly references: ReleaseReferences;
|
|
@@ -31,10 +32,12 @@ export interface CohortState {
|
|
|
31
32
|
}
|
|
32
33
|
export interface EndpointOwnership {
|
|
33
34
|
readonly state: "idle" | "busy" | "draining" | "released" | "blocked";
|
|
34
|
-
readonly
|
|
35
|
-
readonly
|
|
35
|
+
readonly liveInstanceIds: readonly string[];
|
|
36
|
+
readonly nonResumableInstanceIds: readonly string[];
|
|
37
|
+
readonly uncertainInstanceIds: readonly string[];
|
|
36
38
|
}
|
|
37
39
|
export interface SupervisorEndpointMetadata {
|
|
40
|
+
readonly schema: string;
|
|
38
41
|
readonly supervisorId: string;
|
|
39
42
|
readonly endpoint: string;
|
|
40
43
|
readonly pid: number;
|
|
@@ -65,4 +68,3 @@ export declare class CohortStateStore {
|
|
|
65
68
|
removeUnreferencedRelease(releaseId: string, externalReferences: readonly string[]): Promise<CohortState>;
|
|
66
69
|
}
|
|
67
70
|
export declare function emptyState(): CohortState;
|
|
68
|
-
//# sourceMappingURL=cohort-state.d.ts.map
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { mkdir, open, readFile, rename, rm } from "node:fs/promises";
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
|
+
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
5
|
+
export const RELEASE_COHORT_SCHEMA = PRODUCT_IDENTITY.protocol.releaseCohortSchema;
|
|
4
6
|
export class CohortStateStore {
|
|
5
7
|
path;
|
|
6
8
|
constructor(dataDir) {
|
|
@@ -153,7 +155,7 @@ export class CohortStateStore {
|
|
|
153
155
|
}
|
|
154
156
|
export function emptyState() {
|
|
155
157
|
return {
|
|
156
|
-
|
|
158
|
+
schema: RELEASE_COHORT_SCHEMA,
|
|
157
159
|
revision: 0,
|
|
158
160
|
releases: {},
|
|
159
161
|
references: { active: null, pending: null, approved: null, rollback: null, retention: [] },
|
|
@@ -184,7 +186,7 @@ async function acquireLock(path) {
|
|
|
184
186
|
}
|
|
185
187
|
}
|
|
186
188
|
function validateState(state) {
|
|
187
|
-
if (state.
|
|
189
|
+
if (state.schema !== RELEASE_COHORT_SCHEMA || !Number.isSafeInteger(state.revision) || state.revision < 0)
|
|
188
190
|
throw new Error("invalid release cohort state");
|
|
189
191
|
for (const reference of [state.references.active, state.references.pending, state.references.approved, state.references.rollback]) {
|
|
190
192
|
if (reference !== null && !state.releases[reference])
|
|
@@ -193,9 +195,8 @@ function validateState(state) {
|
|
|
193
195
|
}
|
|
194
196
|
function validateTransition(current, next) {
|
|
195
197
|
validateState(next);
|
|
196
|
-
if (next.
|
|
198
|
+
if (next.schema !== current.schema)
|
|
197
199
|
throw new Error("release cohort schema cannot change during a state update");
|
|
198
200
|
if (next.revision !== current.revision)
|
|
199
201
|
throw new Error("release cohort revision is controlled by the state store");
|
|
200
202
|
}
|
|
201
|
-
//# sourceMappingURL=cohort-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function mapWithConcurrency<Value, Result>(values: readonly Value[], concurrency: number, operation: (value: Value, index: number) => Promise<Result>): Promise<Result[]>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export async function mapWithConcurrency(values, concurrency, operation) {
|
|
2
|
+
if (!Number.isSafeInteger(concurrency) || concurrency < 1)
|
|
3
|
+
throw new RangeError("concurrency must be a positive safe integer");
|
|
4
|
+
const results = new Array(values.length);
|
|
5
|
+
let nextIndex = 0;
|
|
6
|
+
const worker = async () => {
|
|
7
|
+
while (true) {
|
|
8
|
+
const index = nextIndex;
|
|
9
|
+
nextIndex += 1;
|
|
10
|
+
if (index >= values.length)
|
|
11
|
+
return;
|
|
12
|
+
results[index] = await operation(values[index], index);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
await Promise.all(Array.from({ length: Math.min(concurrency, values.length) }, worker));
|
|
16
|
+
return results;
|
|
17
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export declare const PREVIEW_RELEASE_SCHEMA: string;
|
|
1
2
|
export interface DevelopmentPreviewCandidate {
|
|
2
3
|
readonly version: string;
|
|
3
4
|
readonly requiresVersionCommit: boolean;
|
|
@@ -27,7 +28,7 @@ export interface UncertifiedDevelopmentPreviewEvidenceInput {
|
|
|
27
28
|
readonly recordedAt: string;
|
|
28
29
|
}
|
|
29
30
|
export interface UncertifiedDevelopmentPreviewEvidence extends UncertifiedDevelopmentPreviewEvidenceInput {
|
|
30
|
-
readonly schema:
|
|
31
|
+
readonly schema: typeof PREVIEW_RELEASE_SCHEMA;
|
|
31
32
|
readonly channel: "next";
|
|
32
33
|
readonly certificationStatus: "uncertified-development-preview";
|
|
33
34
|
readonly terminalCapability: "owned-ui";
|
|
@@ -46,4 +47,3 @@ export declare function selectDevelopmentPreviewCandidate(currentVersion: string
|
|
|
46
47
|
export declare function publishDevelopmentPreviewWithRecovery(publish: () => Promise<void>, verify: () => Promise<void>): Promise<DevelopmentPreviewPublishResult>;
|
|
47
48
|
export declare function verifyDevelopmentPreviewRegistry(version: string, observe: () => Promise<DevelopmentPreviewRegistryState>, repairNextTag: () => Promise<void>, options?: DevelopmentPreviewVerificationOptions): Promise<void>;
|
|
48
49
|
export declare function developmentPreviewTarballName(packageName: string, version: string): string;
|
|
49
|
-
//# sourceMappingURL=development-preview-release.d.ts.map
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { compare, inc, prerelease, valid } from "semver";
|
|
2
|
+
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
3
|
+
export const PREVIEW_RELEASE_SCHEMA = PRODUCT_IDENTITY.evidence.previewReleaseSchema;
|
|
2
4
|
export function createUncertifiedDevelopmentPreviewEvidence(input) {
|
|
3
5
|
const prereleaseParts = prerelease(input.version);
|
|
4
6
|
if (valid(input.version) === null || prereleaseParts?.[0] !== "dev") {
|
|
5
7
|
throw new Error(`uncertified preview requires a development prerelease: ${input.version}`);
|
|
6
8
|
}
|
|
7
9
|
return {
|
|
8
|
-
schema:
|
|
10
|
+
schema: PREVIEW_RELEASE_SCHEMA,
|
|
9
11
|
channel: "next",
|
|
10
12
|
certificationStatus: "uncertified-development-preview",
|
|
11
13
|
terminalCapability: "owned-ui",
|
|
@@ -110,4 +112,3 @@ export function developmentPreviewTarballName(packageName, version) {
|
|
|
110
112
|
throw new Error(`invalid package name: ${packageName}`);
|
|
111
113
|
return `${unscopedName}-${version}.tgz`;
|
|
112
114
|
}
|
|
113
|
-
//# sourceMappingURL=development-preview-release.js.map
|
|
@@ -9,7 +9,6 @@ export declare function processIsAlive(pid: number): boolean;
|
|
|
9
9
|
export declare function cleanupProvenIdleOwner(metadata: SupervisorEndpointMetadata, graceMs?: number): Promise<CleanupDiagnostics>;
|
|
10
10
|
export declare function cleanupVerifiedOwner(metadata: SupervisorEndpointMetadata, options?: {
|
|
11
11
|
readonly graceMs?: number;
|
|
12
|
-
readonly
|
|
12
|
+
readonly allowLiveInstances?: boolean;
|
|
13
13
|
readonly reason?: "stale-idle-owner" | "explicit-update" | "legacy-mutable-install";
|
|
14
14
|
}): Promise<CleanupDiagnostics>;
|
|
15
|
-
//# sourceMappingURL=process-cleanup.d.ts.map
|
|
@@ -11,11 +11,11 @@ export function processIsAlive(pid) {
|
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
export async function cleanupProvenIdleOwner(metadata, graceMs = 1_500) {
|
|
14
|
-
return await cleanupVerifiedOwner(metadata, { graceMs,
|
|
14
|
+
return await cleanupVerifiedOwner(metadata, { graceMs, allowLiveInstances: false });
|
|
15
15
|
}
|
|
16
16
|
export async function cleanupVerifiedOwner(metadata, options = {}) {
|
|
17
17
|
const graceMs = options.graceMs ?? 1_500;
|
|
18
|
-
if (!options.
|
|
18
|
+
if (!options.allowLiveInstances && (metadata.ownership.liveInstanceIds.length > 0 || metadata.ownership.nonResumableInstanceIds.length > 0)) {
|
|
19
19
|
throw new Error("refusing to terminate an owner with recorded live generations");
|
|
20
20
|
}
|
|
21
21
|
const started = Date.now();
|
|
@@ -64,4 +64,3 @@ async function waitUntilDead(pid, timeoutMs) {
|
|
|
64
64
|
}
|
|
65
65
|
return !processIsAlive(pid);
|
|
66
66
|
}
|
|
67
|
-
//# sourceMappingURL=process-cleanup.js.map
|
|
@@ -3,4 +3,3 @@ import { CohortStateStore } from "./cohort-state.js";
|
|
|
3
3
|
* retention, process, agent, or migration reference. State is detached first;
|
|
4
4
|
* a filesystem failure can leave a safe orphan but never a dangling selector. */
|
|
5
5
|
export declare function collectRelease(store: CohortStateStore, dataDir: string, releaseId: string, externalReferences: readonly string[]): Promise<void>;
|
|
6
|
-
//# sourceMappingURL=release-gc.d.ts.map
|