@timurproko/a1 0.1.0 → 0.1.1-dev.1
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 +8 -6
- package/bin/a1-ui.js +24 -0
- package/bin/{addone.js → a1.js} +2 -2
- 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 +22 -0
- package/dist/src/composition/index.js +166 -0
- package/dist/src/composition/transparent-runtime.d.ts +6 -0
- package/dist/src/composition/transparent-runtime.js +19 -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 +1 -2
- 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 +2 -3
- package/dist/src/features/launch/profiles.js +5 -6
- package/dist/src/features/launch/runtime-selection.d.ts +1 -2
- package/dist/src/features/launch/runtime-selection.js +1 -2
- 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 +0 -2
- package/dist/src/features/owned-ui/index.js +0 -2
- package/dist/src/features/owned-ui/run.d.ts +3 -7
- package/dist/src/features/owned-ui/run.js +7 -15
- 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 +90 -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/lifecycle/index.d.ts +0 -1
- package/dist/src/foundation/lifecycle/index.js +0 -1
- package/dist/src/foundation/lifecycle/model.d.ts +1 -2
- 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/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 +0 -1
- package/dist/src/foundation/pi-component-adapter/index.js +0 -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 +0 -1
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +0 -1
- 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 +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js +18 -15
- package/dist/src/foundation/pi-engine-adapter/adapter.d.ts +2 -202
- package/dist/src/foundation/pi-engine-adapter/adapter.js +76 -174
- 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/public-main-entry.d.ts +5 -0
- package/dist/src/foundation/pi-engine-adapter/public-main-entry.js +18 -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 +17 -0
- package/dist/src/foundation/pi-engine-adapter/settings-integration.js +85 -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 +0 -1
- package/dist/src/foundation/pi-engine-adapter/workflows.js +0 -1
- package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +1 -0
- package/dist/src/foundation/pi-owned-ui-integration/index.js +1 -0
- package/dist/src/{features/owned-ui/pi-session-shell.d.ts → foundation/pi-owned-ui-integration/session-shell.d.ts} +17 -14
- package/dist/src/{features/owned-ui/pi-session-shell.js → foundation/pi-owned-ui-integration/session-shell.js} +59 -60
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts +0 -1
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js +0 -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/protocol/client.d.ts +0 -1
- package/dist/src/foundation/protocol/client.js +0 -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 +1 -2
- package/dist/src/foundation/protocol/messages.js +2 -2
- package/dist/src/foundation/release/bootstrap.d.ts +0 -1
- package/dist/src/foundation/release/bootstrap.js +18 -17
- package/dist/src/foundation/release/cohort-selection.d.ts +0 -1
- package/dist/src/foundation/release/cohort-selection.js +0 -1
- package/dist/src/foundation/release/cohort-state.d.ts +3 -2
- package/dist/src/foundation/release/cohort-state.js +5 -4
- 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 +0 -1
- package/dist/src/foundation/release/process-cleanup.js +0 -1
- 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 +4 -5
- package/dist/src/foundation/release/release-store.js +14 -13
- package/dist/src/foundation/release/release.d.ts +5 -6
- package/dist/src/foundation/release/release.js +14 -14
- 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 +1 -2
- package/dist/src/foundation/release/update.js +26 -26
- package/dist/src/foundation/storage/control-store.d.ts +0 -1
- package/dist/src/foundation/storage/control-store.js +28 -7
- 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 +7 -7
- 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 +3 -4
- package/dist/src/foundation/supervision/server.js +7 -6
- package/dist/src/foundation/transparent-terminal/command-resolution.d.ts +0 -1
- package/dist/src/foundation/transparent-terminal/command-resolution.js +0 -1
- package/dist/src/foundation/transparent-terminal/foreground-broker.d.ts +0 -1
- package/dist/src/foundation/transparent-terminal/foreground-broker.js +0 -1
- package/dist/src/foundation/transparent-terminal/index.d.ts +1 -1
- package/dist/src/foundation/transparent-terminal/index.js +1 -1
- package/dist/src/foundation/transparent-terminal/main.d.ts +3 -4
- package/dist/src/foundation/transparent-terminal/main.js +8 -21
- package/dist/src/foundation/transparent-terminal/native-launcher.d.ts +0 -1
- package/dist/src/foundation/transparent-terminal/native-launcher.js +0 -1
- 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 +149 -0
- package/dist/src/product-identity.json +96 -0
- package/docs/architecture/boundaries.md +2 -2
- 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 +33 -7
- package/docs/features/launch-profiles.md +6 -6
- package/docs/manual-pi-boundary-candidate.md +33 -0
- package/docs/manual-transparent-checkpoint.md +11 -11
- package/package.json +10 -3
- 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.map +0 -1
- package/dist/src/foundation/transparent-terminal/command-resolution.js.map +0 -1
- package/dist/src/foundation/transparent-terminal/foreground-broker.d.ts.map +0 -1
- package/dist/src/foundation/transparent-terminal/foreground-broker.js.map +0 -1
- package/dist/src/foundation/transparent-terminal/index.d.ts.map +0 -1
- package/dist/src/foundation/transparent-terminal/index.js.map +0 -1
- package/dist/src/foundation/transparent-terminal/main.d.ts.map +0 -1
- package/dist/src/foundation/transparent-terminal/main.js.map +0 -1
- package/dist/src/foundation/transparent-terminal/native-launcher.d.ts.map +0 -1
- 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 → a1-supervisor.js} +0 -0
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare const
|
|
3
|
-
export interface MaterializedRelease extends
|
|
1
|
+
import { type ReleaseIdentity } from "./release.js";
|
|
2
|
+
export declare const RELEASE_MANIFEST_FILENAME: string;
|
|
3
|
+
export interface MaterializedRelease extends ReleaseIdentity {
|
|
4
4
|
readonly releaseRoot: string;
|
|
5
5
|
}
|
|
6
6
|
export declare function materializeRelease(packageRoot: string, dataDir: string): Promise<MaterializedRelease>;
|
|
7
7
|
export declare function readMaterializedRelease(releaseRoot: string): Promise<MaterializedRelease>;
|
|
8
|
-
export declare function verifyMaterializedRelease(releaseRoot: string, expected?:
|
|
8
|
+
export declare function verifyMaterializedRelease(releaseRoot: string, expected?: ReleaseIdentity, selectedStoreRoot?: string): Promise<MaterializedRelease>;
|
|
9
9
|
export declare function assertImmutableExecutionRoot(release: MaterializedRelease, dataDir: string): Promise<void>;
|
|
10
10
|
export declare function resolveReleaseEntryPoint(release: MaterializedRelease, entryPoint: string): Promise<string>;
|
|
11
|
-
//# sourceMappingURL=release-store.d.ts.map
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
2
|
import { chmod, copyFile, lstat, mkdir, readFile, realpath, rename, rm, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { PRODUCT_PACKAGE_NAME, deriveReleaseIdentity, resolveWithin } from "./release.js";
|
|
5
|
+
import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
|
|
6
|
+
export const RELEASE_MANIFEST_FILENAME = PRODUCT_IDENTITY.manifest.releaseFilename;
|
|
6
7
|
export async function materializeRelease(packageRoot, dataDir) {
|
|
7
8
|
const identity = await deriveReleaseIdentity(packageRoot);
|
|
8
9
|
const storeRoot = resolve(dataDir, "releases");
|
|
@@ -21,7 +22,7 @@ export async function materializeRelease(packageRoot, dataDir) {
|
|
|
21
22
|
await copyFile(source, destination);
|
|
22
23
|
await chmod(destination, file.executable ? 0o500 : 0o400);
|
|
23
24
|
}
|
|
24
|
-
await writeFile(resolve(candidate,
|
|
25
|
+
await writeFile(resolve(candidate, RELEASE_MANIFEST_FILENAME), JSON.stringify(identity, null, 2), { mode: 0o400, flag: "wx" });
|
|
25
26
|
await verifyMaterializedRelease(candidate, identity);
|
|
26
27
|
await rename(candidate, releaseRoot);
|
|
27
28
|
return await verifyMaterializedRelease(releaseRoot, identity);
|
|
@@ -33,14 +34,14 @@ export async function materializeRelease(packageRoot, dataDir) {
|
|
|
33
34
|
}
|
|
34
35
|
export async function readMaterializedRelease(releaseRoot) {
|
|
35
36
|
const canonical = await realpath(releaseRoot);
|
|
36
|
-
const manifest = JSON.parse(await readFile(resolve(canonical,
|
|
37
|
+
const manifest = JSON.parse(await readFile(resolve(canonical, RELEASE_MANIFEST_FILENAME), "utf8"));
|
|
37
38
|
return await verifyMaterializedRelease(canonical, manifest);
|
|
38
39
|
}
|
|
39
40
|
export async function verifyMaterializedRelease(releaseRoot, expected, selectedStoreRoot) {
|
|
40
41
|
const canonical = await realpath(releaseRoot);
|
|
41
42
|
if (selectedStoreRoot)
|
|
42
43
|
assertContained(await realpath(selectedStoreRoot), canonical, "release root is outside the selected release store");
|
|
43
|
-
const manifestPath = resolveWithin(canonical,
|
|
44
|
+
const manifestPath = resolveWithin(canonical, RELEASE_MANIFEST_FILENAME);
|
|
44
45
|
const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
|
|
45
46
|
validateManifest(manifest);
|
|
46
47
|
if (expected && (manifest.releaseId !== expected.releaseId || manifest.contentDigest !== expected.contentDigest)) {
|
|
@@ -58,11 +59,12 @@ export async function verifyMaterializedRelease(releaseRoot, expected, selectedS
|
|
|
58
59
|
}
|
|
59
60
|
export async function assertImmutableExecutionRoot(release, dataDir) {
|
|
60
61
|
await verifyMaterializedRelease(release.releaseRoot, release, resolve(dataDir, "releases"));
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
const selectedRoot = process.env[PRODUCT_IDENTITY.environment.releaseRoot];
|
|
63
|
+
if (!selectedRoot)
|
|
64
|
+
throw new Error(PRODUCT_TEXT.diagnostic("persistent process has no immutable release root"));
|
|
65
|
+
const selected = await realpath(selectedRoot);
|
|
64
66
|
if (selected !== release.releaseRoot)
|
|
65
|
-
throw new Error("persistent
|
|
67
|
+
throw new Error(PRODUCT_TEXT.diagnostic("persistent process selected a different immutable release root"));
|
|
66
68
|
}
|
|
67
69
|
export async function resolveReleaseEntryPoint(release, entryPoint) {
|
|
68
70
|
const normalized = entryPoint.split("\\").join("/").replace(/^\.\//, "");
|
|
@@ -85,10 +87,10 @@ async function verifyFile(root, file) {
|
|
|
85
87
|
throw new Error(`release file digest mismatch: ${file.path}`);
|
|
86
88
|
}
|
|
87
89
|
function validateManifest(value) {
|
|
88
|
-
if (value.packageName !==
|
|
89
|
-
throw new Error("
|
|
90
|
+
if (value.packageName !== PRODUCT_PACKAGE_NAME || typeof value.packageVersion !== "string")
|
|
91
|
+
throw new Error(PRODUCT_TEXT.diagnostic("release manifest metadata is invalid"));
|
|
90
92
|
if (!/^[a-f0-9]{64}$/.test(value.contentDigest) || !/^[0-9A-Za-z.+_-]+-[a-f0-9]{20}$/.test(value.releaseId))
|
|
91
|
-
throw new Error("
|
|
93
|
+
throw new Error(PRODUCT_TEXT.diagnostic("release identity is invalid"));
|
|
92
94
|
if (!Array.isArray(value.files) || value.files.length === 0)
|
|
93
95
|
throw new Error("release manifest contains no files");
|
|
94
96
|
for (const file of value.files) {
|
|
@@ -112,4 +114,3 @@ function assertContained(parent, child, message) {
|
|
|
112
114
|
return;
|
|
113
115
|
throw new Error(`${message}: ${child}`);
|
|
114
116
|
}
|
|
115
|
-
//# sourceMappingURL=release-store.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const PRODUCT_PACKAGE_NAME: string;
|
|
2
2
|
export interface ReleaseFileIdentity {
|
|
3
3
|
readonly path: string;
|
|
4
4
|
readonly bytes: number;
|
|
5
5
|
readonly sha256: string;
|
|
6
6
|
readonly executable: boolean;
|
|
7
7
|
}
|
|
8
|
-
export interface
|
|
9
|
-
readonly packageName: typeof
|
|
8
|
+
export interface ReleaseIdentity {
|
|
9
|
+
readonly packageName: typeof PRODUCT_PACKAGE_NAME;
|
|
10
10
|
readonly packageVersion: string;
|
|
11
11
|
readonly contentDigest: string;
|
|
12
12
|
readonly releaseId: string;
|
|
@@ -14,11 +14,10 @@ export interface AddOneReleaseIdentity {
|
|
|
14
14
|
readonly files: readonly ReleaseFileIdentity[];
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
* Derive
|
|
17
|
+
* Derive release execution identity only from installed distribution metadata and
|
|
18
18
|
* bytes. The version remains display metadata; the digest selects executable
|
|
19
19
|
* content.
|
|
20
20
|
*/
|
|
21
|
-
export declare function deriveReleaseIdentity(packageRoot: string): Promise<
|
|
21
|
+
export declare function deriveReleaseIdentity(packageRoot: string): Promise<ReleaseIdentity>;
|
|
22
22
|
export declare function resolveWithin(root: string, candidate: string): string;
|
|
23
23
|
export declare function packageRootFromModule(moduleUrl: string): string;
|
|
24
|
-
//# sourceMappingURL=release.d.ts.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { lstat, readFile, readdir, realpath } from "node:fs/promises";
|
|
3
3
|
import { basename, dirname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
4
|
-
|
|
4
|
+
import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
|
|
5
|
+
export const PRODUCT_PACKAGE_NAME = PRODUCT_IDENTITY.packageName;
|
|
5
6
|
/**
|
|
6
|
-
* Derive
|
|
7
|
+
* Derive release execution identity only from installed distribution metadata and
|
|
7
8
|
* bytes. The version remains display metadata; the digest selects executable
|
|
8
9
|
* content.
|
|
9
10
|
*/
|
|
@@ -11,10 +12,10 @@ export async function deriveReleaseIdentity(packageRoot) {
|
|
|
11
12
|
const canonicalRoot = await realpath(packageRoot);
|
|
12
13
|
const manifestPath = resolve(canonicalRoot, "package.json");
|
|
13
14
|
const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
|
|
14
|
-
if (manifest.name !==
|
|
15
|
-
throw new Error(`unexpected
|
|
15
|
+
if (manifest.name !== PRODUCT_PACKAGE_NAME)
|
|
16
|
+
throw new Error(`unexpected ${PRODUCT_TEXT.displayName} package name: ${String(manifest.name)}`);
|
|
16
17
|
if (typeof manifest.version !== "string" || manifest.version.length === 0)
|
|
17
|
-
throw new Error("
|
|
18
|
+
throw new Error(PRODUCT_TEXT.diagnostic("package metadata has no version"));
|
|
18
19
|
const roots = distributionRoots(manifest);
|
|
19
20
|
const paths = new Set(["package.json"]);
|
|
20
21
|
for (const root of roots) {
|
|
@@ -41,7 +42,7 @@ export async function deriveReleaseIdentity(packageRoot) {
|
|
|
41
42
|
digest.update(`${file.path}\0${file.bytes}\0${file.sha256}\0${file.executable ? 1 : 0}\n`);
|
|
42
43
|
const contentDigest = digest.digest("hex");
|
|
43
44
|
return {
|
|
44
|
-
packageName:
|
|
45
|
+
packageName: PRODUCT_PACKAGE_NAME,
|
|
45
46
|
packageVersion: manifest.version,
|
|
46
47
|
contentDigest,
|
|
47
48
|
releaseId: `${manifest.version}-${contentDigest.slice(0, 20)}`,
|
|
@@ -60,15 +61,15 @@ export function resolveWithin(root, candidate) {
|
|
|
60
61
|
}
|
|
61
62
|
function distributionRoots(manifest) {
|
|
62
63
|
if (!Array.isArray(manifest.files))
|
|
63
|
-
throw new Error("
|
|
64
|
+
throw new Error(PRODUCT_TEXT.diagnostic("package metadata has no distribution files list"));
|
|
64
65
|
const roots = manifest.files.map(value => {
|
|
65
66
|
if (typeof value !== "string" || value.length === 0)
|
|
66
|
-
throw new Error("
|
|
67
|
+
throw new Error(PRODUCT_TEXT.diagnostic("distribution file entry is invalid"));
|
|
67
68
|
const normalized = normalizeRelative(value);
|
|
68
69
|
if (normalized === "package.json")
|
|
69
70
|
return normalized;
|
|
70
71
|
if (isAbsolute(value) || normalized === ".." || normalized.startsWith("../"))
|
|
71
|
-
throw new Error(`
|
|
72
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`distribution path escapes package root: ${value}`));
|
|
72
73
|
return normalized;
|
|
73
74
|
});
|
|
74
75
|
return [...new Set(roots)];
|
|
@@ -98,7 +99,7 @@ async function collectDependencyClosure(root, requesterRoot, manifest, output, v
|
|
|
98
99
|
if (!packagePath) {
|
|
99
100
|
if (optional.has(name))
|
|
100
101
|
continue;
|
|
101
|
-
throw new Error(`installed
|
|
102
|
+
throw new Error(`installed ${PRODUCT_TEXT.displayName} dependency is missing: ${name}`);
|
|
102
103
|
}
|
|
103
104
|
if (visited.has(packagePath))
|
|
104
105
|
continue;
|
|
@@ -130,7 +131,7 @@ function dependencyNames(value) {
|
|
|
130
131
|
if (value === undefined)
|
|
131
132
|
return [];
|
|
132
133
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
133
|
-
throw new Error("
|
|
134
|
+
throw new Error(PRODUCT_TEXT.diagnostic("dependency metadata is invalid"));
|
|
134
135
|
return Object.keys(value);
|
|
135
136
|
}
|
|
136
137
|
function normalizeRelative(path) {
|
|
@@ -139,13 +140,12 @@ function normalizeRelative(path) {
|
|
|
139
140
|
export function packageRootFromModule(moduleUrl) {
|
|
140
141
|
const url = new URL(moduleUrl);
|
|
141
142
|
if (url.protocol !== "file:")
|
|
142
|
-
throw new Error(`
|
|
143
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`module URL must be a file URL: ${moduleUrl}`));
|
|
143
144
|
let directory = dirname(url.pathname.replace(/^\/(.:)/, "$1"));
|
|
144
145
|
while (basename(directory) !== "") {
|
|
145
146
|
if (basename(directory) === "dist")
|
|
146
147
|
return dirname(directory);
|
|
147
148
|
directory = dirname(directory);
|
|
148
149
|
}
|
|
149
|
-
throw new Error("could not
|
|
150
|
+
throw new Error(PRODUCT_TEXT.diagnostic("package root could not be derived from module URL"));
|
|
150
151
|
}
|
|
151
|
-
//# sourceMappingURL=release.js.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export declare const STABLE_RELEASE_SCHEMA: string;
|
|
1
2
|
export interface StableReleaseEvidenceInput {
|
|
2
3
|
readonly packageName: string;
|
|
3
4
|
readonly version: string;
|
|
@@ -9,7 +10,7 @@ export interface StableReleaseEvidenceInput {
|
|
|
9
10
|
readonly recordedAt: string;
|
|
10
11
|
}
|
|
11
12
|
export interface StableReleaseEvidence extends StableReleaseEvidenceInput {
|
|
12
|
-
readonly schema:
|
|
13
|
+
readonly schema: typeof STABLE_RELEASE_SCHEMA;
|
|
13
14
|
readonly channel: "latest";
|
|
14
15
|
}
|
|
15
16
|
export interface StableRegistryState {
|
|
@@ -27,4 +28,3 @@ export interface StableRegistryVerificationOptions {
|
|
|
27
28
|
}
|
|
28
29
|
export declare function createStableReleaseEvidence(input: StableReleaseEvidenceInput): StableReleaseEvidence;
|
|
29
30
|
export declare function verifyStableRegistry(expected: StableReleaseEvidence, observe: () => Promise<StableRegistryState>, options?: StableRegistryVerificationOptions): Promise<void>;
|
|
30
|
-
//# sourceMappingURL=stable-release.d.ts.map
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { prerelease, valid } from "semver";
|
|
2
|
-
import {
|
|
2
|
+
import { PRODUCT_PACKAGE_NAME } from "./release.js";
|
|
3
|
+
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
4
|
+
export const STABLE_RELEASE_SCHEMA = PRODUCT_IDENTITY.evidence.stableReleaseSchema;
|
|
3
5
|
export function createStableReleaseEvidence(input) {
|
|
4
|
-
if (input.packageName !==
|
|
6
|
+
if (input.packageName !== PRODUCT_PACKAGE_NAME)
|
|
5
7
|
throw new Error(`unexpected stable package: ${input.packageName}`);
|
|
6
8
|
if (valid(input.version) === null || prerelease(input.version) !== null)
|
|
7
9
|
throw new Error(`stable release requires an exact stable version: ${input.version}`);
|
|
@@ -11,7 +13,7 @@ export function createStableReleaseEvidence(input) {
|
|
|
11
13
|
throw new Error("stable release integrity is malformed");
|
|
12
14
|
if (!/^[a-f0-9]{40}$/.test(input.shasum))
|
|
13
15
|
throw new Error("stable release shasum is malformed");
|
|
14
|
-
return { schema:
|
|
16
|
+
return { schema: STABLE_RELEASE_SCHEMA, channel: "latest", ...input };
|
|
15
17
|
}
|
|
16
18
|
export async function verifyStableRegistry(expected, observe, options = {}) {
|
|
17
19
|
const attempts = options.attempts ?? 12;
|
|
@@ -28,11 +30,10 @@ export async function verifyStableRegistry(expected, observe, options = {}) {
|
|
|
28
30
|
&& state.integrity === expected.integrity
|
|
29
31
|
&& state.shasum === expected.shasum
|
|
30
32
|
&& state.bins.length === 1
|
|
31
|
-
&& state.bins[0] ===
|
|
33
|
+
&& state.bins[0] === PRODUCT_IDENTITY.commandName)
|
|
32
34
|
return;
|
|
33
35
|
if (attempt < attempts)
|
|
34
36
|
await delay(delayMs);
|
|
35
37
|
}
|
|
36
38
|
throw new Error(`npm latest did not match accepted ${expected.packageName}@${expected.version} after ${attempts} attempts: ${JSON.stringify(state)}`);
|
|
37
39
|
}
|
|
38
|
-
//# sourceMappingURL=stable-release.js.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
export declare const UPDATE_JOURNAL_SCHEMA: string;
|
|
1
2
|
import type { UpdateChannel } from "./update.js";
|
|
2
3
|
export type UpdateTransactionPhase = "shutdown-intent" | "ownership-released" | "package-installed" | "materialized" | "certified" | "active-reference-committed" | "supervisor-verified";
|
|
3
4
|
export interface UpdateTransaction {
|
|
4
|
-
readonly
|
|
5
|
+
readonly schema: typeof UPDATE_JOURNAL_SCHEMA;
|
|
5
6
|
readonly transactionId: string;
|
|
6
7
|
readonly channel: UpdateChannel;
|
|
7
8
|
readonly targetVersion: string;
|
|
@@ -28,4 +29,3 @@ export declare class UpdateTransactionStore {
|
|
|
28
29
|
finish(status: "completed" | "rolled-back" | "failed", error?: string | null): Promise<UpdateTransaction>;
|
|
29
30
|
clearCompleted(): Promise<void>;
|
|
30
31
|
}
|
|
31
|
-
//# sourceMappingURL=update-transaction.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, PRODUCT_TEXT } from "../../product-identity.js";
|
|
5
|
+
export const UPDATE_JOURNAL_SCHEMA = PRODUCT_IDENTITY.protocol.updateJournalSchema;
|
|
4
6
|
export class UpdateTransactionStore {
|
|
5
7
|
path;
|
|
6
8
|
constructor(dataDir) { this.path = resolve(dataDir, "update-transaction.json"); }
|
|
@@ -20,13 +22,13 @@ export class UpdateTransactionStore {
|
|
|
20
22
|
const current = await this.read();
|
|
21
23
|
if (current?.status === "active") {
|
|
22
24
|
if (current.targetVersion !== input.targetVersion || current.channel !== input.channel) {
|
|
23
|
-
throw new Error(`unfinished
|
|
25
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`has unfinished update ${current.transactionId} targeting ${current.targetVersion}; reconcile it before starting ${input.targetVersion}`));
|
|
24
26
|
}
|
|
25
27
|
return current;
|
|
26
28
|
}
|
|
27
29
|
const now = new Date().toISOString();
|
|
28
30
|
return await this.#write({
|
|
29
|
-
|
|
31
|
+
schema: UPDATE_JOURNAL_SCHEMA,
|
|
30
32
|
transactionId: randomUUID(),
|
|
31
33
|
...input,
|
|
32
34
|
phase: "shutdown-intent",
|
|
@@ -45,7 +47,7 @@ export class UpdateTransactionStore {
|
|
|
45
47
|
async finish(status, error = null) {
|
|
46
48
|
const current = await this.read();
|
|
47
49
|
if (!current)
|
|
48
|
-
throw new Error(
|
|
50
|
+
throw new Error(`no ${PRODUCT_TEXT.displayName} update transaction is recorded`);
|
|
49
51
|
return await this.#write({ ...current, status, error, updatedAt: new Date().toISOString() });
|
|
50
52
|
}
|
|
51
53
|
async clearCompleted() {
|
|
@@ -56,7 +58,7 @@ export class UpdateTransactionStore {
|
|
|
56
58
|
async #requiredActive() {
|
|
57
59
|
const current = await this.read();
|
|
58
60
|
if (!current || current.status !== "active")
|
|
59
|
-
throw new Error(
|
|
61
|
+
throw new Error(`no active ${PRODUCT_TEXT.displayName} update transaction is recorded`);
|
|
60
62
|
return current;
|
|
61
63
|
}
|
|
62
64
|
async #write(value) {
|
|
@@ -79,10 +81,9 @@ function phaseOrder(phase) {
|
|
|
79
81
|
return ["shutdown-intent", "ownership-released", "package-installed", "materialized", "certified", "active-reference-committed", "supervisor-verified"].indexOf(phase);
|
|
80
82
|
}
|
|
81
83
|
function validate(value) {
|
|
82
|
-
if (value.
|
|
84
|
+
if (value.schema !== UPDATE_JOURNAL_SCHEMA || typeof value.transactionId !== "string" || !["stable", "next"].includes(value.channel)
|
|
83
85
|
|| typeof value.targetVersion !== "string" || typeof value.packageRoot !== "string" || typeof value.startedAt !== "string"
|
|
84
86
|
|| typeof value.updatedAt !== "string" || phaseOrder(value.phase) < 0 || !["active", "completed", "rolled-back", "failed"].includes(value.status)) {
|
|
85
|
-
throw new Error(
|
|
87
|
+
throw new Error(`invalid ${PRODUCT_TEXT.displayName} update transaction journal`);
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
|
-
//# sourceMappingURL=update-transaction.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type UpdateTransaction, type UpdateTransactionPhase } from "./update-transaction.js";
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const PRODUCT_PACKAGE: string;
|
|
3
3
|
export type UpdateChannel = "stable" | "next";
|
|
4
4
|
export interface ProcessRequest {
|
|
5
5
|
captureStdout: boolean;
|
|
@@ -52,4 +52,3 @@ export interface UpdateTransactionJournal {
|
|
|
52
52
|
export declare function createNpmProcessRunner(platform?: NodeJS.Platform): UpdateProcessRunner;
|
|
53
53
|
export declare function createUpdateLifecycleCoordinator(environment?: NodeJS.ProcessEnv, fileSystem?: UpdateFileSystem): UpdateLifecycleCoordinator;
|
|
54
54
|
export declare function runSelfUpdate(options: SelfUpdateOptions): Promise<number>;
|
|
55
|
-
//# sourceMappingURL=update.d.ts.map
|
|
@@ -4,14 +4,15 @@ import { connect } from "node:net";
|
|
|
4
4
|
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
5
5
|
import crossSpawn from "cross-spawn";
|
|
6
6
|
import { valid as validSemver } from "semver";
|
|
7
|
+
import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
|
|
7
8
|
import { certifyMaterializedRelease, probeOwnership, readEndpointMetadata, removeEndpointArtifacts, startSupervisor, waitForProcessExit, waitForVerifiedEndpoint, } from "./bootstrap.js";
|
|
8
|
-
import {
|
|
9
|
+
import { resolveProductPaths } from "../lifecycle/index.js";
|
|
9
10
|
import { encodeFrame, LineFrameDecoder } from "../protocol/index.js";
|
|
10
11
|
import { CohortStateStore } from "./cohort-state.js";
|
|
11
12
|
import { cleanupVerifiedOwner, processIsAlive } from "./process-cleanup.js";
|
|
12
13
|
import { materializeRelease, readMaterializedRelease } from "./release-store.js";
|
|
13
14
|
import { UpdateTransactionStore } from "./update-transaction.js";
|
|
14
|
-
export const
|
|
15
|
+
export const PRODUCT_PACKAGE = PRODUCT_TEXT.packageName;
|
|
15
16
|
const UPDATE_DIST_TAGS = { stable: "latest", next: "next" };
|
|
16
17
|
const defaultFileSystem = {
|
|
17
18
|
async readFile(path) { return await readFile(path, "utf8"); },
|
|
@@ -40,7 +41,7 @@ export function createNpmProcessRunner(platform = process.platform) {
|
|
|
40
41
|
});
|
|
41
42
|
}
|
|
42
43
|
export function createUpdateLifecycleCoordinator(environment = process.env, fileSystem = defaultFileSystem) {
|
|
43
|
-
const paths =
|
|
44
|
+
const paths = resolveProductPaths(environment);
|
|
44
45
|
const stateStore = new CohortStateStore(paths.dataDir);
|
|
45
46
|
return {
|
|
46
47
|
async targetIsActive(targetVersion) {
|
|
@@ -59,7 +60,7 @@ export function createUpdateLifecycleCoordinator(environment = process.env, file
|
|
|
59
60
|
return { priorActiveVersion };
|
|
60
61
|
const ownership = await probeOwnership(endpoint);
|
|
61
62
|
if (ownership !== "live-verified" && ownership !== "dead") {
|
|
62
|
-
throw new Error(`
|
|
63
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`refused update shutdown because supervisor ownership is ${ownership}`));
|
|
63
64
|
}
|
|
64
65
|
const immutableRoot = await canonicalImmutableRoot(paths.dataDir, endpoint.releaseRoot);
|
|
65
66
|
const legacyMutableInstall = ownership === "live-verified" && !immutableRoot;
|
|
@@ -74,7 +75,7 @@ export function createUpdateLifecycleCoordinator(environment = process.env, file
|
|
|
74
75
|
reason: legacyMutableInstall ? "legacy-mutable-install" : "explicit-update",
|
|
75
76
|
});
|
|
76
77
|
if (!cleanup.terminated)
|
|
77
|
-
throw new Error(`verified
|
|
78
|
+
throw new Error(`verified ${PRODUCT_TEXT.displayName} owner ${endpoint.pid} rejected shutdown and could not be terminated: ${identity.reason}`);
|
|
78
79
|
}
|
|
79
80
|
else if (identity.accepted) {
|
|
80
81
|
await waitForProcessExit(endpoint.pid, 3_000).catch(async () => {
|
|
@@ -83,7 +84,7 @@ export function createUpdateLifecycleCoordinator(environment = process.env, file
|
|
|
83
84
|
reason: legacyMutableInstall ? "legacy-mutable-install" : "explicit-update",
|
|
84
85
|
});
|
|
85
86
|
if (!cleanup.terminated)
|
|
86
|
-
throw new Error(`verified
|
|
87
|
+
throw new Error(`verified ${PRODUCT_TEXT.displayName} owner ${endpoint.pid} did not terminate`);
|
|
87
88
|
});
|
|
88
89
|
}
|
|
89
90
|
await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint);
|
|
@@ -92,7 +93,7 @@ export function createUpdateLifecycleCoordinator(environment = process.env, file
|
|
|
92
93
|
async verifyPackageUnlocked(packageRoot) {
|
|
93
94
|
if (fileSystem.access)
|
|
94
95
|
await fileSystem.access(packageRoot);
|
|
95
|
-
const probe = `${packageRoot}.
|
|
96
|
+
const probe = `${packageRoot}.${PRODUCT_IDENTITY.filesystem.slug}-unlock-probe`;
|
|
96
97
|
const { rename } = await import("node:fs/promises");
|
|
97
98
|
try {
|
|
98
99
|
await rename(packageRoot, probe);
|
|
@@ -101,13 +102,13 @@ export function createUpdateLifecycleCoordinator(environment = process.env, file
|
|
|
101
102
|
catch (error) {
|
|
102
103
|
// Best-effort rollback if the first rename succeeded and the second did not.
|
|
103
104
|
await rename(probe, packageRoot).catch(() => { });
|
|
104
|
-
throw new Error(`
|
|
105
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`package remains locked after verified shutdown: ${errorMessage(error)}`));
|
|
105
106
|
}
|
|
106
107
|
},
|
|
107
108
|
async activateInstalled(packageRoot, targetVersion, phase) {
|
|
108
109
|
const candidate = await materializeRelease(packageRoot, paths.dataDir);
|
|
109
110
|
if (candidate.packageVersion !== targetVersion)
|
|
110
|
-
throw new Error(`installed
|
|
111
|
+
throw new Error(`installed ${PRODUCT_TEXT.displayName} version ${candidate.packageVersion} does not match target ${targetVersion}`);
|
|
111
112
|
await stateStore.recordCandidate(candidate);
|
|
112
113
|
await phase("materialized");
|
|
113
114
|
const diagnostics = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
@@ -135,23 +136,23 @@ export async function runSelfUpdate(options) {
|
|
|
135
136
|
runningVersion = parsedVersion;
|
|
136
137
|
}
|
|
137
138
|
catch (error) {
|
|
138
|
-
output.stderr(`
|
|
139
|
+
output.stderr(`${PRODUCT_TEXT.diagnostic(`could not read its running package version: ${errorMessage(error)}`)}\n`);
|
|
139
140
|
return 1;
|
|
140
141
|
}
|
|
141
|
-
const targetLookup = await runNpm(runner, ["view", `${
|
|
142
|
+
const targetLookup = await runNpm(runner, ["view", `${PRODUCT_PACKAGE}@${distTag}`, "version"], true, output, `query the npm ${distTag} channel`);
|
|
142
143
|
if (targetLookup.result === null)
|
|
143
144
|
return targetLookup.exitCode;
|
|
144
145
|
const targetVersion = validSemver(targetLookup.result.stdout.trim());
|
|
145
146
|
if (targetVersion === null) {
|
|
146
|
-
output.stderr(`
|
|
147
|
+
output.stderr(`${PRODUCT_TEXT.diagnostic(`received a malformed ${distTag} version from npm: ${JSON.stringify(targetLookup.result.stdout.trim())}.`)}\n`);
|
|
147
148
|
return 1;
|
|
148
149
|
}
|
|
149
|
-
output.stdout(`
|
|
150
|
+
output.stdout(`${PRODUCT_TEXT.diagnostic(`update (${channel}): ${runningVersion} → ${targetVersion}.`)}\n`);
|
|
150
151
|
const rootLookup = await runNpm(runner, ["root", "--global"], true, output, "resolve npm's global package root");
|
|
151
152
|
if (rootLookup.result === null)
|
|
152
153
|
return rootLookup.exitCode;
|
|
153
154
|
if (rootLookup.result.stdout.trim().length === 0) {
|
|
154
|
-
output.stderr("
|
|
155
|
+
output.stderr(`${PRODUCT_TEXT.diagnostic("could not verify its installation because npm returned an empty global package root.")}\n`);
|
|
155
156
|
return 1;
|
|
156
157
|
}
|
|
157
158
|
let packageRoot;
|
|
@@ -160,15 +161,15 @@ export async function runSelfUpdate(options) {
|
|
|
160
161
|
[packageRoot, globalRoot] = await Promise.all([fileSystem.realpath(options.packageRoot), fileSystem.realpath(rootLookup.result.stdout.trim())]);
|
|
161
162
|
}
|
|
162
163
|
catch (error) {
|
|
163
|
-
output.stderr(`
|
|
164
|
+
output.stderr(`${PRODUCT_TEXT.diagnostic(`could not canonicalize the running and global npm paths: ${errorMessage(error)}`)}\n`);
|
|
164
165
|
return 1;
|
|
165
166
|
}
|
|
166
167
|
if (!isContainedBy(globalRoot, packageRoot)) {
|
|
167
|
-
output.stderr(`
|
|
168
|
+
output.stderr(`${PRODUCT_TEXT.diagnostic(`refused to update automatically because ${packageRoot} is not managed beneath npm's global package root ${globalRoot}.`)}\n`);
|
|
168
169
|
return 1;
|
|
169
170
|
}
|
|
170
171
|
const environment = options.environment ?? process.env;
|
|
171
|
-
const paths =
|
|
172
|
+
const paths = resolveProductPaths(environment);
|
|
172
173
|
const lifecycle = options.lifecycle ?? createUpdateLifecycleCoordinator(environment, fileSystem);
|
|
173
174
|
const transactionStore = options.transactionStore ?? new UpdateTransactionStore(paths.dataDir);
|
|
174
175
|
let transaction = await transactionStore.read();
|
|
@@ -179,7 +180,7 @@ export async function runSelfUpdate(options) {
|
|
|
179
180
|
await transactionStore.finish("completed");
|
|
180
181
|
}
|
|
181
182
|
await transactionStore.clearCompleted();
|
|
182
|
-
output.stdout("
|
|
183
|
+
output.stdout(`${PRODUCT_TEXT.diagnostic("is already current and active for this channel; no installation was changed.")}\n`);
|
|
183
184
|
return 0;
|
|
184
185
|
}
|
|
185
186
|
const cohortState = await new CohortStateStore(paths.dataDir).read();
|
|
@@ -195,8 +196,8 @@ export async function runSelfUpdate(options) {
|
|
|
195
196
|
transaction = await transactionStore.advance("ownership-released");
|
|
196
197
|
}
|
|
197
198
|
if (phaseBefore(transaction.phase, "package-installed")) {
|
|
198
|
-
output.stdout(`
|
|
199
|
-
const installation = await runNpm(runner, ["install", "--global", `${
|
|
199
|
+
output.stdout(`${PRODUCT_TEXT.diagnostic(`is installing ${PRODUCT_TEXT.packageName}@${targetVersion}.`)}\n`);
|
|
200
|
+
const installation = await runNpm(runner, ["install", "--global", `${PRODUCT_PACKAGE}@${targetVersion}`], false, output, "start the global npm installation", false);
|
|
200
201
|
if (installation.result === null)
|
|
201
202
|
throw new UpdateFailure(installation.exitCode, "npm process failed");
|
|
202
203
|
if (installation.result.code !== 0)
|
|
@@ -207,7 +208,7 @@ export async function runSelfUpdate(options) {
|
|
|
207
208
|
await transactionStore.advance("supervisor-verified");
|
|
208
209
|
await transactionStore.finish("completed");
|
|
209
210
|
await transactionStore.clearCompleted();
|
|
210
|
-
output.stdout(`
|
|
211
|
+
output.stdout(`${PRODUCT_TEXT.diagnostic(`updated successfully: ${targetVersion} (${channel}).`)}\n`);
|
|
211
212
|
return 0;
|
|
212
213
|
}
|
|
213
214
|
catch (error) {
|
|
@@ -217,7 +218,7 @@ export async function runSelfUpdate(options) {
|
|
|
217
218
|
: await rollbackPriorCohort(paths.dataDir, environment, transaction?.priorActiveReleaseId ?? null).catch(rollbackError => `rollback failed: ${errorMessage(rollbackError)}`);
|
|
218
219
|
if (transaction)
|
|
219
220
|
await transactionStore.finish(rollback === "rolled back" ? "rolled-back" : "failed", `${message}; ${rollback}`);
|
|
220
|
-
output.stderr(`
|
|
221
|
+
output.stderr(`${PRODUCT_TEXT.diagnostic(`update failed: ${message}. ${rollback}. Diagnostics: ${transactionStore.path}`)}\n`);
|
|
221
222
|
return error instanceof UpdateFailure ? error.exitCode : 1;
|
|
222
223
|
}
|
|
223
224
|
}
|
|
@@ -256,11 +257,11 @@ async function runNpm(runner, arguments_, captureStdout, output, action, reportN
|
|
|
256
257
|
result = await runner("npm", arguments_, { captureStdout });
|
|
257
258
|
}
|
|
258
259
|
catch (error) {
|
|
259
|
-
output.stderr(`
|
|
260
|
+
output.stderr(`${PRODUCT_TEXT.diagnostic(`could not execute npm to ${action}: ${errorMessage(error)}`)}\n`);
|
|
260
261
|
return { result: null, exitCode: 1 };
|
|
261
262
|
}
|
|
262
263
|
if (result.code !== 0 && reportNonzero) {
|
|
263
|
-
output.stderr(`
|
|
264
|
+
output.stderr(`${PRODUCT_TEXT.diagnostic(`could not ${action}; npm exited with status ${formatExitCode(result.code)}. Review npm's diagnostics above.`)}\n`);
|
|
264
265
|
return { result: null, exitCode: unsuccessfulCode(result.code) };
|
|
265
266
|
}
|
|
266
267
|
return { result, exitCode: 0 };
|
|
@@ -280,7 +281,7 @@ async function rollbackPriorCohort(dataDir, environment, priorReleaseId) {
|
|
|
280
281
|
throw new Error(`prior release ${priorReleaseId} is not the recorded rollback cohort`);
|
|
281
282
|
}
|
|
282
283
|
const release = await readMaterializedRelease(prior.releaseRoot);
|
|
283
|
-
const paths =
|
|
284
|
+
const paths = resolveProductPaths(environment);
|
|
284
285
|
await startSupervisor(release, environment);
|
|
285
286
|
await waitForVerifiedEndpoint(paths.endpointMetadataPath, release, 8_000);
|
|
286
287
|
return "rolled back";
|
|
@@ -313,4 +314,3 @@ function isContainedBy(parent, child) {
|
|
|
313
314
|
function unsuccessfulCode(code) { return code === null || code === 0 ? 1 : code; }
|
|
314
315
|
function formatExitCode(code) { return code === null ? "unknown" : String(code); }
|
|
315
316
|
function errorMessage(error) { return error instanceof Error ? error.message : String(error); }
|
|
316
|
-
//# sourceMappingURL=update.js.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DatabaseSync } from "node:sqlite";
|
|
2
2
|
import { mkdirSync } from "node:fs";
|
|
3
3
|
import { dirname } from "node:path";
|
|
4
|
+
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
4
5
|
import { assertManagedAgentDescriptor, assertRecoveryAuthority, assertTerminalSessionLaunch, assertTerminalTopologySnapshot, } from "../workspace-contracts/index.js";
|
|
5
6
|
export const DEFAULT_WORKSPACE_ID = "workspace-default";
|
|
6
7
|
const INITIAL_WORKSPACE_ID = DEFAULT_WORKSPACE_ID;
|
|
@@ -11,12 +12,18 @@ export class ControlStore {
|
|
|
11
12
|
this.bootNonce = bootNonce;
|
|
12
13
|
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
13
14
|
this.database = new DatabaseSync(path);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
try {
|
|
16
|
+
this.database.exec("PRAGMA journal_mode = WAL");
|
|
17
|
+
this.database.exec("PRAGMA foreign_keys = ON");
|
|
18
|
+
this.migrate();
|
|
19
|
+
if (bootNonce !== null) {
|
|
20
|
+
this.reconcilePriorBootGenerations(bootNonce);
|
|
21
|
+
this.reconcilePriorBootForegroundTerminalLeases(bootNonce);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
this.database.close();
|
|
26
|
+
throw error;
|
|
20
27
|
}
|
|
21
28
|
}
|
|
22
29
|
migrate() {
|
|
@@ -24,6 +31,8 @@ export class ControlStore {
|
|
|
24
31
|
const version = versionRow.user_version;
|
|
25
32
|
if (version > 4)
|
|
26
33
|
throw new Error(`control database version ${version} is newer than supported version 4`);
|
|
34
|
+
if (version !== 0)
|
|
35
|
+
this.#assertCurrentControlSchema();
|
|
27
36
|
if (version === 0) {
|
|
28
37
|
this.database.exec(`
|
|
29
38
|
BEGIN IMMEDIATE;
|
|
@@ -165,6 +174,19 @@ export class ControlStore {
|
|
|
165
174
|
COMMIT;
|
|
166
175
|
`);
|
|
167
176
|
}
|
|
177
|
+
if (version === 0) {
|
|
178
|
+
this.database.exec("CREATE TABLE product_identity (schema TEXT PRIMARY KEY NOT NULL)");
|
|
179
|
+
this.database.prepare("INSERT INTO product_identity (schema) VALUES (?)").run(PRODUCT_IDENTITY.protocol.controlStoreSchema);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
#assertCurrentControlSchema() {
|
|
183
|
+
const table = this.database.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'product_identity'").get();
|
|
184
|
+
if (!table)
|
|
185
|
+
throw new Error("control database has no A1 product schema; legacy state is unsupported");
|
|
186
|
+
const identity = this.database.prepare("SELECT schema FROM product_identity").get();
|
|
187
|
+
if (identity?.schema !== PRODUCT_IDENTITY.protocol.controlStoreSchema) {
|
|
188
|
+
throw new Error(`control database schema ${String(identity?.schema)} is unsupported; expected ${PRODUCT_IDENTITY.protocol.controlStoreSchema}`);
|
|
189
|
+
}
|
|
168
190
|
}
|
|
169
191
|
reconcilePriorBootGenerations(bootNonce) {
|
|
170
192
|
const now = new Date().toISOString();
|
|
@@ -456,4 +478,3 @@ function foregroundLeaseFromRow(row) {
|
|
|
456
478
|
outcome: row.outcome_json ? JSON.parse(row.outcome_json) : null,
|
|
457
479
|
};
|
|
458
480
|
}
|
|
459
|
-
//# sourceMappingURL=control-store.js.map
|