@timurproko/a1 0.2.7-dev.1249 → 0.2.7-dev.1255
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 +11 -36
- package/bin/cli.js +2 -17
- package/bin/ui.js +10 -51
- package/dist/app/session-shell/clipboard-diagnostics.d.ts +2 -2
- package/dist/app/session-shell/clipboard-image.d.ts +0 -1
- package/dist/app/session-shell/clipboard-image.js +1 -1
- package/dist/app/session-shell/dialog-coordinator.d.ts +6 -5
- package/dist/app/session-shell/dialog-coordinator.js +3 -4
- package/dist/app/session-shell/dock-chrome.d.ts +11 -6
- package/dist/app/session-shell/dock-chrome.js +5 -8
- package/dist/app/session-shell/editor-hyperlink-budget.d.ts +0 -2
- package/dist/app/session-shell/editor-hyperlink-budget.js +1 -1
- package/dist/app/session-shell/exit-notice.d.ts +3 -3
- package/dist/app/session-shell/exit-notice.js +10 -10
- package/dist/app/session-shell/extension-surface.d.ts +8 -7
- package/dist/app/session-shell/helper-pool.d.ts +3 -4
- package/dist/app/session-shell/helper-pool.js +1 -1
- package/dist/app/session-shell/image-preparation-client.d.ts +4 -3
- package/dist/app/session-shell/image-preparation.d.ts +0 -2
- package/dist/app/session-shell/image-preparation.js +2 -2
- package/dist/app/session-shell/image-source.d.ts +2 -3
- package/dist/app/session-shell/image-source.js +2 -2
- package/dist/app/session-shell/input-surface-switch.d.ts +9 -7
- package/dist/app/session-shell/input-surface-switch.js +1 -2
- package/dist/app/session-shell/login-interaction.d.ts +5 -4
- package/dist/app/session-shell/login-interaction.js +2 -3
- package/dist/app/session-shell/paste-executor.d.ts +4 -8
- package/dist/app/session-shell/paste-executor.js +2 -2
- package/dist/app/session-shell/paste-protocol.d.ts +2 -2
- package/dist/app/session-shell/path-chip-presentation.d.ts +0 -5
- package/dist/app/session-shell/path-chip-presentation.js +3 -3
- package/dist/app/session-shell/prompt-chips.d.ts +8 -7
- package/dist/app/session-shell/prompt-history-controller.d.ts +3 -3
- package/dist/app/session-shell/prompt-submission.d.ts +7 -6
- package/dist/app/session-shell/prompt-submission.js +7 -28
- package/dist/app/session-shell/quit-outro-effects.d.ts +3 -3
- package/dist/app/session-shell/quit-outro-effects.js +1 -4
- package/dist/app/session-shell/quit-outro.d.ts +9 -12
- package/dist/app/session-shell/quit-outro.js +11 -11
- package/dist/app/session-shell/response-copy-protocol.d.ts +3 -2
- package/dist/app/session-shell/response-copy-transport.d.ts +2 -14
- package/dist/app/session-shell/response-copy-transport.js +2 -3
- package/dist/app/session-shell/session-lifecycle.d.ts +3 -3
- package/dist/app/session-shell/session-lifecycle.js +2 -4
- package/dist/app/session-shell/session-shell-root.d.ts +74 -120
- package/dist/app/session-shell/session-shell-root.js +82 -115
- package/dist/app/session-shell/session-shell.d.ts +13 -16
- package/dist/app/session-shell/session-shell.js +149 -314
- package/dist/app/session-shell/session-viewport-controller.d.ts +7 -6
- package/dist/app/session-shell/session-viewport-controller.js +5 -8
- package/dist/app/session-shell/settings-bindings.d.ts +24 -2
- package/dist/app/session-shell/settings-bindings.js +24 -0
- package/dist/app/session-shell/share-operation.d.ts +3 -3
- package/dist/app/session-shell/share-operation.js +4 -6
- package/dist/app/session-shell/shell-clipboard.d.ts +59 -0
- package/dist/app/session-shell/shell-clipboard.js +119 -0
- package/dist/app/session-shell/shell-editor-factory.d.ts +8 -4
- package/dist/app/session-shell/shell-editor-factory.js +13 -15
- package/dist/app/session-shell/shell-host.d.ts +16 -17
- package/dist/app/session-shell/shell-host.js +20 -37
- package/dist/app/session-shell/shell-layout.d.ts +2 -2
- package/dist/app/session-shell/shell-prompt-suggestions.d.ts +26 -0
- package/dist/app/session-shell/shell-prompt-suggestions.js +48 -0
- package/dist/app/session-shell/suggestion-surface.d.ts +1 -6
- package/dist/app/session-shell/suggestion-surface.js +1 -1
- package/dist/app/session-shell/system-clipboard.d.ts +2 -14
- package/dist/app/session-shell/system-clipboard.js +2 -7
- package/dist/app/session-shell/transcript-document.d.ts +12 -10
- package/dist/app/session-shell/transcript-document.js +15 -41
- package/dist/app/session-shell/viewport-layout.d.ts +2 -2
- package/dist/app/session-shell/workflow-output.d.ts +5 -3
- package/dist/app/session-shell/workflow-output.js +13 -15
- package/dist/app/session-shell/workflow-router.d.ts +1 -3
- package/dist/app/session-shell/workflow-router.js +1 -4
- package/dist/cli/dispatch.d.ts +1 -11
- package/dist/cli/dispatch.js +5 -92
- package/dist/cli/package-messages.d.ts +0 -1
- package/dist/cli/package-messages.js +1 -1
- package/dist/cli/session-context.d.ts +1 -1
- package/dist/cli/session-context.js +5 -7
- package/dist/cli/uninstall.d.ts +4 -7
- package/dist/cli/uninstall.js +6 -35
- package/dist/cli/version-stats.js +4 -7
- package/dist/composition/owned-settings.d.ts +2 -2
- package/dist/composition/owned-settings.js +0 -4
- package/dist/composition/owned-ui.d.ts +3 -25
- package/dist/composition/owned-ui.js +37 -113
- package/dist/composition/reference-selection-options.d.ts +1 -1
- package/dist/composition/reference-selection-options.js +1 -1
- package/dist/composition/release-update-observation.d.ts +4 -4
- package/dist/composition/release-update-observation.js +17 -47
- package/dist/composition/session-backend.d.ts +0 -1
- package/dist/composition/session-runtime-registry.d.ts +5 -4
- package/dist/composition/settings-route-host.d.ts +0 -7
- package/dist/composition/settings-route-host.js +7 -20
- package/dist/composition/settings-search-input.d.ts +2 -1
- package/dist/composition/startup-route.d.ts +2 -3
- package/dist/composition/startup-route.js +2 -3
- package/dist/contracts/owned-ui/extension-ui.d.ts +2 -1
- package/dist/contracts/owned-ui/index.d.ts +2 -1
- package/dist/contracts/owned-ui/model.d.ts +0 -3
- package/dist/contracts/owned-ui/session-presenters.d.ts +3 -0
- package/dist/contracts/owned-ui/session-workflows.d.ts +1 -4
- package/dist/contracts/owned-ui/shell-components.d.ts +543 -0
- package/dist/contracts/presentation/component.d.ts +17 -0
- package/dist/contracts/presentation/component.js +8 -0
- package/dist/contracts/presentation/index.d.ts +6 -15
- package/dist/contracts/presentation/index.js +2 -0
- package/dist/contracts/presentation/terminal.d.ts +290 -0
- package/dist/contracts/presentation/theme.d.ts +46 -0
- package/dist/features/launch/development-launch.js +1 -2
- package/dist/features/launch/index.d.ts +1 -1
- package/dist/features/launch/intent.d.ts +1 -3
- package/dist/features/launch/intent.js +2 -4
- package/dist/features/launch/runtime-selection.d.ts +2 -2
- package/dist/features/launch/runtime-selection.js +2 -2
- package/dist/features/launch/session-context.d.ts +2 -2
- package/dist/features/owned-ui/project-trust-prompt.d.ts +2 -2
- package/dist/features/owned-ui/project-trust-prompt.js +1 -1
- package/dist/features/owned-ui/reference-screen-app.d.ts +0 -2
- package/dist/features/owned-ui/reference-screen-app.js +2 -9
- package/dist/features/owned-ui/release-note-state.d.ts +2 -1
- package/dist/features/owned-ui/settings-app.d.ts +0 -6
- package/dist/features/owned-ui/settings-app.js +42 -254
- package/dist/features/owned-ui/settings-edits.d.ts +31 -0
- package/dist/features/owned-ui/settings-edits.js +139 -0
- package/dist/features/owned-ui/settings-scroll-rail.d.ts +29 -0
- package/dist/features/owned-ui/settings-scroll-rail.js +79 -0
- package/dist/features/owned-ui/settings-search-input.d.ts +2 -1
- package/dist/features/prompt-history/service.d.ts +3 -2
- package/dist/foundation/launch-context/index.d.ts +0 -12
- package/dist/foundation/launch-context/index.js +0 -26
- package/dist/foundation/lifecycle/claim-gate.d.ts +9 -0
- package/dist/foundation/lifecycle/claim-gate.js +37 -0
- package/dist/foundation/lifecycle/index.d.ts +5 -9
- package/dist/foundation/lifecycle/index.js +3 -4
- package/dist/foundation/lifecycle/model.d.ts +2 -59
- package/dist/foundation/lifecycle/model.js +0 -35
- package/dist/foundation/lifecycle/paths.d.ts +0 -24
- package/dist/foundation/lifecycle/paths.js +0 -40
- package/dist/foundation/lifecycle/process-liveness.d.ts +8 -0
- package/dist/foundation/lifecycle/process-liveness.js +18 -0
- package/dist/foundation/lifecycle/session-claim-lock.d.ts +1 -1
- package/dist/foundation/lifecycle/session-claim-lock.js +2 -2
- package/dist/foundation/lifecycle/session-repository-context.d.ts +6 -6
- package/dist/foundation/lifecycle/session-repository-context.js +2 -3
- package/dist/foundation/release/automatic-update.d.ts +6 -17
- package/dist/foundation/release/automatic-update.js +23 -44
- package/dist/foundation/release/bootstrap.d.ts +2 -25
- package/dist/foundation/release/bootstrap.js +37 -348
- package/dist/foundation/release/dependency-certification.d.ts +1 -2
- package/dist/foundation/release/dependency-certification.js +1 -1
- package/dist/foundation/release/early-accent.d.ts +2 -2
- package/dist/foundation/release/early-accent.js +1 -1
- package/dist/foundation/release/index.d.ts +10 -17
- package/dist/foundation/release/index.js +7 -11
- package/dist/foundation/release/latest-release.d.ts +3 -19
- package/dist/foundation/release/latest-release.js +11 -12
- package/dist/foundation/release/ordinary-launch-selection.d.ts +1 -1
- package/dist/foundation/release/ordinary-launch-selection.js +1 -1
- package/dist/foundation/release/process-liveness.d.ts +2 -0
- package/dist/foundation/release/process-liveness.js +12 -0
- package/dist/foundation/release/release-gc.d.ts +13 -10
- package/dist/foundation/release/release-gc.js +37 -101
- package/dist/foundation/release/{cohort-state.d.ts → release-state.d.ts} +44 -69
- package/dist/foundation/release/{cohort-state.js → release-state.js} +38 -70
- package/dist/foundation/release/release-store.d.ts +2 -2
- package/dist/foundation/release/release-store.js +2 -2
- package/dist/foundation/release/restart-certification.js +1 -1
- package/dist/foundation/release/update-activation.d.ts +2 -9
- package/dist/foundation/release/update-activation.js +30 -45
- package/dist/foundation/release/update-execution-lease.d.ts +2 -3
- package/dist/foundation/release/update-execution-lease.js +2 -2
- package/dist/foundation/release/update-launch.d.ts +2 -4
- package/dist/foundation/release/update-launch.js +0 -7
- package/dist/foundation/release/update-recovery.js +1 -1
- package/dist/foundation/release/update-transaction.d.ts +1 -1
- package/dist/foundation/release/update-transaction.js +5 -2
- package/dist/foundation/release/update.d.ts +2 -12
- package/dist/foundation/release/update.js +37 -214
- package/dist/foundation/session-writer-lock/index.d.ts +14 -6
- package/dist/foundation/session-writer-lock/index.js +48 -103
- package/dist/foundation/startup/startup-budget.d.ts +5 -5
- package/dist/foundation/startup/startup-budget.js +2 -2
- package/dist/foundation/startup/startup-runtime.d.ts +1 -1
- package/dist/foundation/terminal-cleanup/exit-notice.d.ts +6 -0
- package/dist/foundation/terminal-cleanup/exit-notice.js +36 -0
- package/dist/foundation/terminal-cleanup/index.d.ts +2 -1
- package/dist/foundation/terminal-cleanup/index.js +2 -1
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +0 -5
- package/dist/foundation/terminal-cleanup/terminal-reset.js +0 -5
- package/dist/integrations/pi/components/editor-interaction.d.ts +4 -12
- package/dist/integrations/pi/components/index.d.ts +15 -9
- package/dist/integrations/pi/components/index.js +9 -5
- package/dist/integrations/pi/components/lazy-selectors.d.ts +2 -10
- package/dist/integrations/pi/components/lazy-selectors.js +1 -1
- package/dist/integrations/pi/components/modal-frame.d.ts +5 -22
- package/dist/integrations/pi/components/modal-frame.js +3 -23
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +4 -3
- package/dist/integrations/pi/components/prompt-input-port.d.ts +2 -19
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +3 -2
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -4
- package/dist/integrations/pi/components/shell-footer-status.d.ts +3 -3
- package/dist/integrations/pi/components/shell-footer-status.js +5 -4
- package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +6 -8
- package/dist/integrations/pi/components/shell-presenters-info.js +6 -19
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +1 -1
- package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
- package/dist/integrations/pi/components/shell-session-info-reference.d.ts +2 -1
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +33 -229
- package/dist/integrations/pi/components/shell-shared-facade.js +8 -1
- package/dist/integrations/pi/components/skills-command.d.ts +1 -9
- package/dist/integrations/pi/components/skills-command.js +5 -5
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +2 -5
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +2 -16
- package/dist/integrations/pi/components/theme.d.ts +9 -2
- package/dist/integrations/pi/components/theme.js +17 -2
- package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +2 -1
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.js +6 -8
- package/dist/integrations/pi/engine/adapter.d.ts +3 -6
- package/dist/integrations/pi/engine/adapter.js +4 -28
- package/dist/integrations/pi/engine/changelog.d.ts +2 -2
- package/dist/integrations/pi/engine/changelog.js +3 -3
- package/dist/integrations/pi/engine/compaction-progress.d.ts +2 -3
- package/dist/integrations/pi/engine/compaction-progress.js +1 -1
- package/dist/integrations/pi/engine/conformance.d.ts +2 -1
- package/dist/integrations/pi/engine/default-model-setting.d.ts +0 -2
- package/dist/integrations/pi/engine/default-model-setting.js +1 -2
- package/dist/integrations/pi/engine/diagnostics-state.d.ts +0 -1
- package/dist/integrations/pi/engine/diagnostics-state.js +0 -14
- package/dist/integrations/pi/engine/event-delivery.d.ts +2 -1
- package/dist/integrations/pi/engine/extension-ui-binding.d.ts +2 -1
- package/dist/integrations/pi/engine/host.js +2 -2
- package/dist/integrations/pi/engine/message-values.d.ts +0 -1
- package/dist/integrations/pi/engine/message-values.js +1 -1
- package/dist/integrations/pi/engine/pending-delivery.d.ts +0 -4
- package/dist/integrations/pi/engine/pending-delivery.js +3 -3
- package/dist/integrations/pi/engine/ports.d.ts +7 -1
- package/dist/integrations/pi/engine/ports.js +4 -0
- package/dist/integrations/pi/engine/project-trust-preflight.d.ts +2 -1
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +3 -3
- package/dist/integrations/pi/engine/prompt-suggestions.js +0 -40
- package/dist/integrations/pi/engine/provider-authentication.d.ts +1 -1
- package/dist/integrations/pi/engine/public-main-entry.d.ts +1 -5
- package/dist/integrations/pi/engine/public-main-entry.js +1 -1
- package/dist/integrations/pi/engine/repository-pr-rest.d.ts +1 -9
- package/dist/integrations/pi/engine/repository-pr-rest.js +2 -2
- package/dist/integrations/pi/engine/repository-pr.d.ts +1 -3
- package/dist/integrations/pi/engine/repository-pr.js +1 -1
- package/dist/integrations/pi/engine/resource-catalog.d.ts +2 -1
- package/dist/integrations/pi/engine/session-integration.d.ts +1 -1
- package/dist/integrations/pi/engine/session-runtime.d.ts +4 -3
- package/dist/integrations/pi/engine/session-runtime.js +0 -2
- package/dist/integrations/pi/engine/settings-bridge.d.ts +0 -2
- package/dist/integrations/pi/engine/settings-bridge.js +1 -1
- package/dist/integrations/pi/engine/settings-port.d.ts +3 -2
- package/dist/integrations/pi/engine/transcript-projection.d.ts +2 -1
- package/dist/integrations/pi/engine/workflow-contexts.d.ts +1 -1
- package/dist/integrations/pi/engine/workflow-runner.d.ts +1 -1
- package/dist/integrations/pi/engine/workflow-runner.js +1 -1
- package/dist/integrations/pi/engine/workflow-support.d.ts +0 -6
- package/dist/integrations/pi/engine/workflow-support.js +4 -18
- package/dist/integrations/pi/engine/workflows.d.ts +5 -5
- package/dist/integrations/pi/session-presenters/components.d.ts +3 -0
- package/dist/integrations/pi/session-presenters/components.js +75 -0
- package/dist/integrations/pi/session-presenters/index.d.ts +1 -0
- package/dist/integrations/pi/session-presenters/index.js +1 -0
- package/dist/integrations/pi/session-presenters/presentation.d.ts +3 -0
- package/dist/integrations/pi/session-presenters/presentation.js +10 -0
- package/dist/integrations/pi/session-presenters/presenters.d.ts +2 -1
- package/dist/integrations/pi/session-presenters/presenters.js +3 -1
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -2
- package/dist/integrations/pi/tui-runtime/adapter.js +23 -32
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +22 -166
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +5 -40
- package/dist/integrations/pi/tui-runtime/index.d.ts +1 -0
- package/dist/integrations/pi/tui-runtime/index.js +1 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +4 -6
- package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +2 -8
- package/dist/integrations/pi/tui-runtime/overlay-geometry.js +3 -9
- package/dist/integrations/pi/tui-runtime/runtime-factory.d.ts +3 -0
- package/dist/integrations/pi/tui-runtime/runtime-factory.js +11 -0
- package/dist/product-identity.d.ts +4 -6
- package/dist/product-identity.js +6 -11
- package/dist/product-identity.json +1 -40
- package/dist/runtime-payload-inventory.json +0 -3
- package/dist/ui/components/index.d.ts +4 -4
- package/dist/ui/components/index.js +2 -2
- package/dist/ui/components/selection-copy.d.ts +0 -1
- package/dist/ui/components/selection-copy.js +0 -12
- package/dist/ui/components/submitted-prompt.d.ts +3 -13
- package/dist/ui/components/submitted-prompt.js +8 -41
- package/dist/ui/components/theme.d.ts +4 -19
- package/dist/ui/components/theme.js +6 -0
- package/dist/ui/components/transcript-viewport.d.ts +1 -3
- package/dist/ui/components/transcript-viewport.js +1 -4
- package/dist/ui/settings/declarations.d.ts +2 -97
- package/dist/ui/settings/declarations.js +2 -78
- package/dist/ui/settings/early-accent.js +1 -1
- package/dist/ui/settings/index.d.ts +3 -5
- package/dist/ui/settings/index.js +2 -3
- package/dist/ui/settings/manager.d.ts +0 -4
- package/dist/ui/settings/manager.js +6 -62
- package/dist/ui/settings/resolution.d.ts +6 -18
- package/dist/ui/settings/resolution.js +4 -103
- package/dist/ui/settings/sections.d.ts +0 -4
- package/dist/ui/settings/sections.js +1 -1
- package/docs/architecture/boundaries.md +23 -40
- package/docs/architecture/code-documentation.md +2 -2
- package/docs/architecture/internal-naming.md +11 -17
- package/docs/architecture/project-structure.md +13 -16
- package/docs/architecture/resource-and-data-policy.md +16 -31
- package/docs/architecture/toolchain.md +14 -19
- package/docs/architecture/ui-reference-provenance.md +2 -2
- package/docs/ci-release-runbook.md +5 -5
- package/docs/features/launch-profiles.md +11 -17
- package/docs/features/prompt-history.md +10 -11
- package/docs/local-worktree-cleanup.md +28 -1
- package/docs/manual-owned-ui-checkpoint.md +0 -1
- package/docs/validation.md +5 -11
- package/docs/worktree-link-recovery.md +6 -6
- package/package.json +7 -20
- package/bin/guardian.js +0 -42
- package/bin/supervisor.js +0 -7
- package/bin/tab-launch-context.d.ts +0 -27
- package/bin/tab-launch-context.js +0 -94
- package/dist/app/session-shell/resident-tab-coordinator.d.ts +0 -38
- package/dist/app/session-shell/resident-tab-coordinator.js +0 -77
- package/dist/cli/tabs-request.d.ts +0 -7
- package/dist/cli/tabs.d.ts +0 -14
- package/dist/cli/tabs.js +0 -151
- package/dist/composition/resident-tab-bridge.d.ts +0 -41
- package/dist/composition/resident-tab-bridge.js +0 -209
- package/dist/composition/utility-tab.d.ts +0 -28
- package/dist/composition/utility-tab.js +0 -244
- package/dist/features/owned-ui/plus-menu-dialog.d.ts +0 -28
- package/dist/features/owned-ui/plus-menu-dialog.js +0 -89
- package/dist/features/resident-tab/auto-name.d.ts +0 -11
- package/dist/features/resident-tab/auto-name.js +0 -44
- package/dist/features/resident-tab/index.d.ts +0 -5
- package/dist/features/resident-tab/index.js +0 -7
- package/dist/features/resident-tab/shortcut-bindings-file.d.ts +0 -8
- package/dist/features/resident-tab/shortcut-bindings-file.js +0 -40
- package/dist/features/resident-tab/shortcut-declarations.d.ts +0 -13
- package/dist/features/resident-tab/shortcut-declarations.js +0 -26
- package/dist/features/resident-tab/shortcut-projection.d.ts +0 -29
- package/dist/features/resident-tab/shortcut-projection.js +0 -64
- package/dist/features/resident-tab/status-deriver.d.ts +0 -10
- package/dist/features/resident-tab/status-deriver.js +0 -12
- package/dist/foundation/launch-guardian/exit-watcher.d.ts +0 -14
- package/dist/foundation/launch-guardian/exit-watcher.js +0 -103
- package/dist/foundation/launch-guardian/index.d.ts +0 -2
- package/dist/foundation/launch-guardian/index.js +0 -1
- package/dist/foundation/launch-guardian/main.d.ts +0 -39
- package/dist/foundation/launch-guardian/main.js +0 -232
- package/dist/foundation/lifecycle/commands.d.ts +0 -40
- package/dist/foundation/lifecycle/launch-instance.d.ts +0 -46
- package/dist/foundation/lifecycle/launch-instance.js +0 -134
- package/dist/foundation/lifecycle/native-claim-gate.d.ts +0 -5
- package/dist/foundation/lifecycle/native-claim-gate.js +0 -41
- package/dist/foundation/lifecycle/supervisor-startup.d.ts +0 -30
- package/dist/foundation/lifecycle/supervisor-startup.js +0 -106
- package/dist/foundation/process-containment/addon-containment.d.ts +0 -20
- package/dist/foundation/process-containment/addon-containment.js +0 -139
- package/dist/foundation/process-containment/addon-process-inspector.d.ts +0 -11
- package/dist/foundation/process-containment/addon-process-inspector.js +0 -36
- package/dist/foundation/process-containment/addon.d.ts +0 -47
- package/dist/foundation/process-containment/addon.js +0 -57
- package/dist/foundation/process-containment/artifact.d.ts +0 -1
- package/dist/foundation/process-containment/artifact.js +0 -35
- package/dist/foundation/process-containment/contracts.d.ts +0 -33
- package/dist/foundation/process-containment/contracts.js +0 -35
- package/dist/foundation/process-containment/index.d.ts +0 -9
- package/dist/foundation/process-containment/index.js +0 -7
- package/dist/foundation/process-containment/linux-process-inspector.d.ts +0 -7
- package/dist/foundation/process-containment/linux-process-inspector.js +0 -27
- package/dist/foundation/process-containment/native-process-inspector.d.ts +0 -4
- package/dist/foundation/process-containment/native-process-inspector.js +0 -21
- package/dist/foundation/protocol/client.d.ts +0 -18
- package/dist/foundation/protocol/client.js +0 -130
- package/dist/foundation/protocol/index.d.ts +0 -3
- package/dist/foundation/protocol/index.js +0 -2
- package/dist/foundation/protocol/messages.d.ts +0 -90
- package/dist/foundation/protocol/messages.js +0 -100
- package/dist/foundation/release/cohort-selection.d.ts +0 -33
- package/dist/foundation/release/cohort-selection.js +0 -67
- package/dist/foundation/release/endpoint-lock.d.ts +0 -2
- package/dist/foundation/release/endpoint-lock.js +0 -37
- package/dist/foundation/release/endpoint-recovery.d.ts +0 -10
- package/dist/foundation/release/endpoint-recovery.js +0 -45
- package/dist/foundation/release/endpoints.d.ts +0 -32
- package/dist/foundation/release/endpoints.js +0 -152
- package/dist/foundation/release/prepared-update-activation.d.ts +0 -3
- package/dist/foundation/release/prepared-update-activation.js +0 -27
- package/dist/foundation/release/process-cleanup.d.ts +0 -14
- package/dist/foundation/release/process-cleanup.js +0 -76
- package/dist/foundation/release/supervisor-identity.d.ts +0 -15
- package/dist/foundation/release/supervisor-identity.js +0 -63
- package/dist/foundation/resident-tabs/boot-identity.d.ts +0 -6
- package/dist/foundation/resident-tabs/boot-identity.js +0 -16
- package/dist/foundation/resident-tabs/bounded-host-command.d.ts +0 -20
- package/dist/foundation/resident-tabs/bounded-host-command.js +0 -62
- package/dist/foundation/resident-tabs/bridge-client.d.ts +0 -73
- package/dist/foundation/resident-tabs/bridge-client.js +0 -327
- package/dist/foundation/resident-tabs/continuity.d.ts +0 -12
- package/dist/foundation/resident-tabs/continuity.js +0 -63
- package/dist/foundation/resident-tabs/doctor.d.ts +0 -28
- package/dist/foundation/resident-tabs/doctor.js +0 -166
- package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +0 -27
- package/dist/foundation/resident-tabs/draft-checkpoint.js +0 -145
- package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +0 -36
- package/dist/foundation/resident-tabs/ensure-terminal-host.js +0 -151
- package/dist/foundation/resident-tabs/fault-injection.d.ts +0 -8
- package/dist/foundation/resident-tabs/fault-injection.js +0 -26
- package/dist/foundation/resident-tabs/fixture-control.d.ts +0 -7
- package/dist/foundation/resident-tabs/fixture-control.js +0 -35
- package/dist/foundation/resident-tabs/host-entry.js +0 -17
- package/dist/foundation/resident-tabs/index.d.ts +0 -15
- package/dist/foundation/resident-tabs/index.js +0 -10
- package/dist/foundation/resident-tabs/maintenance.d.ts +0 -39
- package/dist/foundation/resident-tabs/maintenance.js +0 -75
- package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +0 -34
- package/dist/foundation/resident-tabs/progress-observation-schema.js +0 -1
- package/dist/foundation/resident-tabs/progress-observation.d.ts +0 -4
- package/dist/foundation/resident-tabs/progress-observation.js +0 -150
- package/dist/foundation/resident-tabs/prompt-journal.d.ts +0 -63
- package/dist/foundation/resident-tabs/prompt-journal.js +0 -213
- package/dist/foundation/resident-tabs/protocol.d.ts +0 -12
- package/dist/foundation/resident-tabs/protocol.js +0 -195
- package/dist/foundation/resident-tabs/recovery.d.ts +0 -26
- package/dist/foundation/resident-tabs/recovery.js +0 -205
- package/dist/foundation/resident-tabs/release-holds.d.ts +0 -28
- package/dist/foundation/resident-tabs/release-holds.js +0 -78
- package/dist/foundation/resident-tabs/routes.d.ts +0 -5
- package/dist/foundation/resident-tabs/routes.js +0 -5
- package/dist/foundation/resident-tabs/routing.d.ts +0 -11
- package/dist/foundation/resident-tabs/routing.js +0 -10
- package/dist/foundation/resident-tabs/runtime-control.d.ts +0 -38
- package/dist/foundation/resident-tabs/runtime-control.js +0 -74
- package/dist/foundation/resident-tabs/session-sync.d.ts +0 -14
- package/dist/foundation/resident-tabs/session-sync.js +0 -37
- package/dist/foundation/resident-tabs/settings.d.ts +0 -16
- package/dist/foundation/resident-tabs/settings.js +0 -60
- package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +0 -14
- package/dist/foundation/resident-tabs/terminal-host-artifact.js +0 -78
- package/dist/foundation/resident-tabs/zip-archive.d.ts +0 -9
- package/dist/foundation/resident-tabs/zip-archive.js +0 -56
- package/dist/foundation/storage/control-store.d.ts +0 -20
- package/dist/foundation/storage/control-store.js +0 -331
- package/dist/foundation/storage/index.d.ts +0 -1
- package/dist/foundation/storage/index.js +0 -1
- package/dist/foundation/supervision/index.d.ts +0 -3
- package/dist/foundation/supervision/index.js +0 -3
- package/dist/foundation/supervision/main.d.ts +0 -1
- package/dist/foundation/supervision/main.js +0 -86
- package/dist/foundation/supervision/paths.d.ts +0 -1
- package/dist/foundation/supervision/paths.js +0 -1
- package/dist/foundation/supervision/server.d.ts +0 -46
- package/dist/foundation/supervision/server.js +0 -611
- package/dist/integrations/pi/components/components.d.ts +0 -4
- package/dist/integrations/pi/components/components.js +0 -48
- package/dist/integrations/pi/components/conformance.d.ts +0 -18
- package/dist/integrations/pi/components/conformance.js +0 -70
- package/dist/integrations/pi/components/shell-components.d.ts +0 -7
- package/dist/integrations/pi/components/shell-components.js +0 -7
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +0 -33
- package/dist/integrations/pi/components/upstream/theme/theme-controller.js +0 -114
- package/dist/integrations/pi/engine/offline-settings-port.d.ts +0 -23
- package/dist/integrations/pi/engine/offline-settings-port.js +0 -54
- package/dist/native/darwin-arm64/manifest.json +0 -23
- package/dist/native/darwin-arm64/process-guardian.node +0 -0
- package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10500
- package/dist/native/darwin-arm64/terminal-host.manifest.json +0 -46
- package/dist/native/darwin-arm64/terminal-host.node +0 -0
- package/dist/native/darwin-x64/manifest.json +0 -23
- package/dist/native/darwin-x64/process-guardian.node +0 -0
- package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10737
- package/dist/native/darwin-x64/terminal-host.manifest.json +0 -46
- package/dist/native/darwin-x64/terminal-host.node +0 -0
- package/dist/native/linux-x64/manifest.json +0 -23
- package/dist/native/linux-x64/process-guardian.node +0 -0
- package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -11226
- package/dist/native/linux-x64/terminal-host.manifest.json +0 -46
- package/dist/native/linux-x64/terminal-host.node +0 -0
- package/dist/native/win32-x64/manifest.json +0 -23
- package/dist/native/win32-x64/process-guardian.node +0 -0
- package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10757
- package/dist/native/win32-x64/terminal-host.manifest.json +0 -46
- package/dist/native/win32-x64/terminal-host.node +0 -0
- package/dist/ui/settings/migrations.d.ts +0 -19
- package/dist/ui/settings/migrations.js +0 -209
- package/dist/ui/settings/progress-palette.generated.d.ts +0 -139
- package/dist/ui/settings/progress-palette.generated.js +0 -139
- package/docs/architecture/evidence/resident-tabs/linux-x64.md +0 -37
- package/docs/architecture/evidence/resident-tabs/macos-arm64.md +0 -36
- package/docs/architecture/evidence/resident-tabs/macos-x64.md +0 -35
- package/docs/architecture/evidence/resident-tabs/windows-x64.md +0 -36
- package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +0 -70
- package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +0 -32
- package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +0 -115
- package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +0 -48
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +0 -125
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +0 -56
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +0 -174
- package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +0 -18
- package/docs/architecture/native-fixture-isolation.md +0 -23
- package/docs/architecture/process-guardian-provenance.md +0 -36
- package/docs/architecture/resident-tabs-requirements.md +0 -18
- package/docs/architecture/resident-tabs.md +0 -668
- package/docs/architecture/terminal-host-proof-gate.md +0 -34
- package/docs/architecture/terminal-host-provenance.md +0 -81
- package/docs/architecture/terminal-host-spike-evidence.md +0 -39
- package/docs/launch-recovery.md +0 -23
- package/docs/manual-launch-instance-acceptance.md +0 -43
- package/docs/manual-resident-tabs-acceptance.md +0 -51
- /package/dist/{cli/tabs-request.js → contracts/owned-ui/shell-components.js} +0 -0
- /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.d.ts +0 -0
- /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.js +0 -0
- /package/dist/{foundation/lifecycle/commands.js → contracts/presentation/terminal.js} +0 -0
- /package/dist/{foundation/resident-tabs/host-entry.d.ts → contracts/presentation/theme.js} +0 -0
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { deliverExitNotice, restoreAfterOwnedExit } from "../terminal-cleanup/index.js";
|
|
4
|
+
import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
5
5
|
import { resolve } from "node:path";
|
|
6
|
-
import { selectCohortLaunch } from "./cohort-selection.js";
|
|
7
|
-
import { recoverSupervisorEndpoint } from "./endpoint-recovery.js";
|
|
8
6
|
import { selectOrdinaryLaunchReleaseId } from "./ordinary-launch-selection.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { assertLaunchProfileId, createSupervisorStartupAttempt, readSupervisorStartupResult, resolveCohortEndpoint, resolveProductPaths, sessionSelectionArguments } from "../lifecycle/index.js";
|
|
12
|
-
import { encodeFrame, LineFrameDecoder } from "../protocol/index.js";
|
|
13
|
-
import { cleanupProvenIdleOwner, processIsAlive } from "./process-cleanup.js";
|
|
14
|
-
import { probeOwnership, readEndpointMetadata, removeEndpointArtifacts, sweepDeadEndpoints } from "./endpoints.js";
|
|
7
|
+
import { ReleaseStateStore } from "./release-state.js";
|
|
8
|
+
import { assertLaunchProfileId, resolveProductPaths, sessionSelectionArguments } from "../lifecycle/index.js";
|
|
15
9
|
import { UpdateTransactionStore } from "./update-transaction.js";
|
|
16
10
|
import { selectUpdateLaunchRelease } from "./update-launch.js";
|
|
17
11
|
import { assertCertifiedFilesPresent, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, repairMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease } from "./release-store.js";
|
|
@@ -19,25 +13,14 @@ import { scheduleReleaseCleanup } from "./release-gc.js";
|
|
|
19
13
|
import { createRestartSeal, readRestartCertifiedRelease, releaseCertificationDocument } from "./restart-certification.js";
|
|
20
14
|
import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
|
|
21
15
|
import { markStartupPhase } from "../startup/index.js";
|
|
22
|
-
import {
|
|
23
|
-
import { assertResidentContinuity, ensureTerminalHost, readResidentTabLaunchSettings, selectResidentHost } from "../resident-tabs/index.js";
|
|
16
|
+
import { launchContractTarget, readLaunchContext, withLaunchContext } from "../launch-context/index.js";
|
|
24
17
|
const RELEASE_RESELECTION_MESSAGE = "a1-release-reselection";
|
|
25
18
|
export async function runBootstrap(options) {
|
|
26
|
-
|
|
27
|
-
return await runBootstrapAttempt(options, 1);
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
if (!(error instanceof Error && "code" in error && typeof error.code === "string" && error.code.startsWith("SUPERVISOR_RECOVERY_")))
|
|
31
|
-
throw error;
|
|
32
|
-
// Rationale: actionable recovery failures are a single line, not an uncaught Node stack trace.
|
|
33
|
-
(options.output ?? process.stderr).write(`${PRODUCT_TEXT.diagnostic(error.message)}\n`);
|
|
34
|
-
return 1;
|
|
35
|
-
}
|
|
19
|
+
return await runBootstrapAttempt(options, 1);
|
|
36
20
|
}
|
|
37
21
|
async function runBootstrapAttempt(options, retriesRemaining) {
|
|
38
22
|
const launchProfileId = options.launchIntent?.profileId ?? "a1";
|
|
39
|
-
const
|
|
40
|
-
const environment = withLaunchContext(options.environment ?? process.env, { launchProfile: launchProfileId, launchMode });
|
|
23
|
+
const environment = withLaunchContext(options.environment ?? process.env, { launchProfile: launchProfileId });
|
|
41
24
|
await markStartupPhase(environment, "bootstrap-start");
|
|
42
25
|
assertLaunchProfileId(launchProfileId);
|
|
43
26
|
const sessionArgs = sessionSelectionArguments(options.launchIntent?.sessionSelection);
|
|
@@ -48,8 +31,7 @@ async function runBootstrapAttempt(options, retriesRemaining) {
|
|
|
48
31
|
const paths = resolveProductPaths(environment);
|
|
49
32
|
await mkdir(paths.runtimeDir, { recursive: true, mode: 0o700 });
|
|
50
33
|
const launchSelected = async (release) => {
|
|
51
|
-
const
|
|
52
|
-
const result = await launchUi(release, environment, sessionArgs, residentContext);
|
|
34
|
+
const result = await launchUi(release, environment, sessionArgs, paths.runtimeDir);
|
|
53
35
|
if (!result.releaseSuperseded)
|
|
54
36
|
return result.code;
|
|
55
37
|
if (retriesRemaining > 0)
|
|
@@ -57,7 +39,7 @@ async function runBootstrapAttempt(options, retriesRemaining) {
|
|
|
57
39
|
output.write(`${PRODUCT_TEXT.diagnostic("active release changed repeatedly during startup; launch could not converge")}\n`);
|
|
58
40
|
return 1;
|
|
59
41
|
};
|
|
60
|
-
const stateStore = new
|
|
42
|
+
const stateStore = new ReleaseStateStore(paths.dataDir);
|
|
61
43
|
let state = await stateStore.read();
|
|
62
44
|
const launchDuringUpdate = async () => {
|
|
63
45
|
// Concurrency: read the journal before touching npm's mutable tree, including package.json.
|
|
@@ -68,41 +50,16 @@ async function runBootstrapAttempt(options, retriesRemaining) {
|
|
|
68
50
|
if (!prior)
|
|
69
51
|
return null;
|
|
70
52
|
const retained = await readCertifiedReleaseManifest(prior, resolve(paths.dataDir, "releases"));
|
|
71
|
-
await ensureSupervisor(retained, environment);
|
|
72
53
|
return await launchSelected(retained);
|
|
73
54
|
};
|
|
74
55
|
const duringUpdate = await launchDuringUpdate();
|
|
75
56
|
if (duringUpdate !== null)
|
|
76
57
|
return duringUpdate;
|
|
77
|
-
//
|
|
78
|
-
// can now be several of them. Clearing them first keeps the decision below about what is
|
|
79
|
-
// actually running.
|
|
80
|
-
await sweepDeadEndpoints(paths).catch(() => []);
|
|
81
|
-
// Performance: reconciliation is serialized by cohort state, but launch never awaits a physical
|
|
58
|
+
// Performance: reconciliation is serialized by the release state lock, but launch never awaits a physical
|
|
82
59
|
// backlog. The scheduler commits a plan and starts a detached bounded worker.
|
|
83
60
|
const scheduleMaintenance = options.scheduleMaintenance ?? scheduleReleaseCleanup;
|
|
84
61
|
void scheduleMaintenance(paths.dataDir, paths).catch(() => { });
|
|
85
|
-
// Protocol: each cohort keeps its own endpoint, so a launch looks for the endpoint of the release it
|
|
86
|
-
// is about to run rather than for the one endpoint the runtime directory used to have.
|
|
87
|
-
const activeReleaseId = state.references.active;
|
|
88
|
-
let endpointPaths = activeReleaseId === null
|
|
89
|
-
? { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath }
|
|
90
|
-
: resolveCohortEndpoint(paths, activeReleaseId, environment);
|
|
91
|
-
let endpoint = await readEndpointMetadata(endpointPaths.endpointMetadataPath);
|
|
92
|
-
if (endpoint === null) {
|
|
93
|
-
// Compatibility: a release that predates cohort-scoped endpoints published one endpoint for the whole
|
|
94
|
-
// runtime directory. Recognizing it is what lets a session started by that release keep
|
|
95
|
-
// working through the first launch that knows about cohorts.
|
|
96
|
-
const legacy = await readEndpointMetadata(paths.endpointMetadataPath);
|
|
97
|
-
if (legacy !== null) {
|
|
98
|
-
endpoint = legacy;
|
|
99
|
-
endpointPaths = { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath };
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
let probe = endpoint ? await probeOwnership(endpoint) : "dead";
|
|
103
62
|
const installedVersion = await readInstalledVersion(options.packageRoot);
|
|
104
|
-
if (releaseChannelOf(installedVersion) !== null)
|
|
105
|
-
environment[PRIVATE_ENVIRONMENT.updateVersion] = installedVersion;
|
|
106
63
|
const activeId = state.references.active;
|
|
107
64
|
const active = activeId === null ? undefined : state.releases[activeId];
|
|
108
65
|
let activeIsLaunchable = active === undefined || (options.releaseIsLaunchable?.(active.releaseRoot) ?? true);
|
|
@@ -123,16 +80,7 @@ async function runBootstrapAttempt(options, retriesRemaining) {
|
|
|
123
80
|
}
|
|
124
81
|
}
|
|
125
82
|
if (activeIsLaunchable && active?.approval === "approved" && active.packageVersion === installedVersion) {
|
|
126
|
-
|
|
127
|
-
&& endpoint.releaseRoot === active.releaseRoot
|
|
128
|
-
&& endpoint.contentDigest === active.contentDigest;
|
|
129
|
-
if (endpointMatches && probe === "live-verified") {
|
|
130
|
-
const retained = await readCertifiedReleaseManifest(active, resolve(paths.dataDir, "releases"));
|
|
131
|
-
return await launchSelected(retained);
|
|
132
|
-
}
|
|
133
|
-
if (endpoint === null || probe === "dead") {
|
|
134
|
-
if (endpoint)
|
|
135
|
-
await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint, endpoint);
|
|
83
|
+
{
|
|
136
84
|
await markStartupPhase(environment, "durable-validation-start");
|
|
137
85
|
const retained = await readRestartCertifiedRelease(active, paths.dataDir).catch(async () => {
|
|
138
86
|
let verified;
|
|
@@ -149,9 +97,6 @@ async function runBootstrapAttempt(options, retriesRemaining) {
|
|
|
149
97
|
}).catch(() => null);
|
|
150
98
|
if (retained !== null) {
|
|
151
99
|
await markStartupPhase(environment, "durable-validation-complete");
|
|
152
|
-
await markStartupPhase(environment, "replacement-supervisor-start");
|
|
153
|
-
await ensureSupervisor(retained, environment);
|
|
154
|
-
await markStartupPhase(environment, "replacement-supervisor-ready");
|
|
155
100
|
return await launchSelected(retained);
|
|
156
101
|
}
|
|
157
102
|
activeIsLaunchable = false;
|
|
@@ -167,7 +112,7 @@ async function runBootstrapAttempt(options, retriesRemaining) {
|
|
|
167
112
|
candidate = await materializeRelease(options.packageRoot, paths.dataDir);
|
|
168
113
|
}
|
|
169
114
|
catch (error) {
|
|
170
|
-
const fallback = await launchRetainedActive(state, paths,
|
|
115
|
+
const fallback = await launchRetainedActive(state, paths, launchSelected, excludedRetainedReleaseId);
|
|
171
116
|
if (fallback === null)
|
|
172
117
|
throw error;
|
|
173
118
|
return fallback;
|
|
@@ -185,7 +130,6 @@ async function runBootstrapAttempt(options, retriesRemaining) {
|
|
|
185
130
|
if (!retainedRecord || retainedRecord.approval !== "approved")
|
|
186
131
|
throw new Error("selected active release is not approved");
|
|
187
132
|
const retained = await readCertifiedReleaseManifest(retainedRecord, resolve(paths.dataDir, "releases"));
|
|
188
|
-
await ensureSupervisor(retained, environment);
|
|
189
133
|
return await launchSelected(retained);
|
|
190
134
|
}
|
|
191
135
|
await stateStore.recordCandidate(candidate);
|
|
@@ -194,148 +138,29 @@ async function runBootstrapAttempt(options, retriesRemaining) {
|
|
|
194
138
|
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
195
139
|
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
196
140
|
}
|
|
197
|
-
try {
|
|
198
|
-
await assertResidentContinuity({ releaseRoot: candidate.releaseRoot, dataDir: paths.dataDir, environment,
|
|
199
|
-
profileRoot: environment[PRODUCT_IDENTITY.environment.profileHome] ?? paths.configDir, runtimeDir: paths.runtimeDir });
|
|
200
|
-
}
|
|
201
|
-
catch (error) {
|
|
202
|
-
const fallback = await launchRetainedActive(await stateStore.read(), paths, environment, launchSelected, excludedRetainedReleaseId);
|
|
203
|
-
if (fallback !== null)
|
|
204
|
-
return fallback;
|
|
205
|
-
throw error;
|
|
206
|
-
}
|
|
207
141
|
state = await stateStore.activateForLaunch(candidate.releaseId, !activeIsLaunchable ? activeId ?? undefined : undefined);
|
|
208
142
|
if (state.references.active !== candidate.releaseId) {
|
|
209
143
|
const retainedRecord = state.references.active === null ? undefined : state.releases[state.references.active];
|
|
210
144
|
if (!retainedRecord || retainedRecord.approval !== "approved")
|
|
211
145
|
throw new Error("ordinary launch has no approved active release");
|
|
212
146
|
const retained = await readCertifiedReleaseManifest(retainedRecord, resolve(paths.dataDir, "releases"));
|
|
213
|
-
await ensureSupervisor(retained, environment);
|
|
214
147
|
return await launchSelected(retained);
|
|
215
148
|
}
|
|
216
|
-
|
|
217
|
-
// A cohort other than this one is not in the way: it listens somewhere else.
|
|
218
|
-
endpointPaths = resolveCohortEndpoint(paths, candidate.releaseId, environment);
|
|
219
|
-
endpoint = await readEndpointMetadata(endpointPaths.endpointMetadataPath);
|
|
220
|
-
if (endpoint === null) {
|
|
221
|
-
const legacy = await readEndpointMetadata(paths.endpointMetadataPath);
|
|
222
|
-
if (legacy?.releaseId === candidate.releaseId) {
|
|
223
|
-
endpoint = legacy;
|
|
224
|
-
endpointPaths = { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath };
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
probe = endpoint ? await probeOwnership(endpoint) : "dead";
|
|
228
|
-
let decision = selectCohortLaunch(candidate, state, endpoint, probe);
|
|
229
|
-
if (decision.action === "blocked") {
|
|
230
|
-
// Concurrency: reread through the common recovery path rather than fail on an old snapshot.
|
|
231
|
-
await ensureSupervisor(candidate, environment);
|
|
232
|
-
return await launchSelected(candidate);
|
|
233
|
-
}
|
|
234
|
-
if (endpoint && probe === "dead") {
|
|
235
|
-
await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint, endpoint);
|
|
236
|
-
}
|
|
237
|
-
if (decision.action === "launch-retained-ui") {
|
|
238
|
-
const retainedRecord = state.releases[decision.releaseId];
|
|
239
|
-
const retained = retainedRecord?.approval === "approved"
|
|
240
|
-
? await readCertifiedReleaseManifest(retainedRecord, resolve(paths.dataDir, "releases"))
|
|
241
|
-
: await verifyMaterializedRelease(decision.releaseRoot, undefined, resolve(paths.dataDir, "releases"));
|
|
242
|
-
if (decision.recordPending && endpoint) {
|
|
243
|
-
await stateStore.blockPending("candidate activation deferred by live non-resumable instances", endpoint.ownership.nonResumableInstanceIds);
|
|
244
|
-
}
|
|
245
|
-
const code = await launchSelected(retained);
|
|
246
|
-
if (decision.recordPending)
|
|
247
|
-
await activatePendingAfterBlockerExit(candidate, stateStore, paths, environment);
|
|
248
|
-
return code;
|
|
249
|
-
}
|
|
250
|
-
if (decision.action === "replace-idle-cohort" && endpoint) {
|
|
251
|
-
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
252
|
-
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
253
|
-
const released = await requestIdleOwnershipRelease(endpoint, candidate.releaseId, 2_000);
|
|
254
|
-
if (!released) {
|
|
255
|
-
await stateStore.blockPending("idle supervisor did not verify ownership release", endpoint.ownership.liveInstanceIds);
|
|
256
|
-
output.write(`${PRODUCT_TEXT.diagnostic("could not verify idle cohort ownership release; the retained release remains selected.")}\n`);
|
|
257
|
-
return 1;
|
|
258
|
-
}
|
|
259
|
-
if (!await releaseVerifiedIdleOwner(endpoint, paths.dataDir)) {
|
|
260
|
-
await stateStore.blockPending("idle supervisor acknowledged release but did not terminate", endpoint.ownership.liveInstanceIds);
|
|
261
|
-
output.write(`${PRODUCT_TEXT.diagnostic("could not complete bounded idle cohort shutdown; the candidate remains pending.")}\n`);
|
|
262
|
-
return 1;
|
|
263
|
-
}
|
|
264
|
-
await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint, endpoint);
|
|
265
|
-
await stateStore.activate(candidate.releaseId);
|
|
266
|
-
decision = { action: "activate-candidate", releaseId: candidate.releaseId, releaseRoot: candidate.releaseRoot, reason: "idle cohort released ownership" };
|
|
267
|
-
}
|
|
268
|
-
let selected;
|
|
269
|
-
if (decision.action === "activate-candidate") {
|
|
270
|
-
const current = await stateStore.read();
|
|
271
|
-
if (current.releases[candidate.releaseId]?.approval !== "approved") {
|
|
272
|
-
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
273
|
-
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
274
|
-
}
|
|
275
|
-
const activated = (await stateStore.read()).references.active === candidate.releaseId
|
|
276
|
-
? await stateStore.read()
|
|
277
|
-
: await stateStore.activateForLaunch(candidate.releaseId);
|
|
278
|
-
if (activated.references.active === candidate.releaseId)
|
|
279
|
-
selected = candidate;
|
|
280
|
-
else {
|
|
281
|
-
const retainedRecord = activated.references.active === null ? undefined : activated.releases[activated.references.active];
|
|
282
|
-
if (!retainedRecord || retainedRecord.approval !== "approved")
|
|
283
|
-
throw new Error("ordinary launch has no approved active release");
|
|
284
|
-
selected = await readCertifiedReleaseManifest(retainedRecord, resolve(paths.dataDir, "releases"));
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
else {
|
|
288
|
-
selected = await readMaterializedRelease(decision.releaseRoot);
|
|
289
|
-
}
|
|
290
|
-
await ensureSupervisor(selected, environment);
|
|
291
|
-
return await launchSelected(selected);
|
|
292
|
-
}
|
|
293
|
-
/** Select only client routing; a resident reconnect never asks execution to restart. */
|
|
294
|
-
async function residentLaunchContext(options, release, environment) {
|
|
295
|
-
const paths = resolveProductPaths(environment);
|
|
296
|
-
const profileId = options.launchIntent?.profileId ?? "a1";
|
|
297
|
-
const mode = options.launchIntent?.launchMode ?? (profileId === "a1" ? "tabs" : "solo");
|
|
298
|
-
const agentProfileDir = environment.PI_CODING_AGENT_DIR ?? paths.configDir;
|
|
299
|
-
const residentLaunchSettings = profileId === "a1" ? readResidentTabLaunchSettings(agentProfileDir, PRODUCT_IDENTITY.commandName, paths.configDir, profileId) : null;
|
|
300
|
-
const resident = await selectResidentHost({
|
|
301
|
-
profileId, currentLaunchContract: isCurrentLaunchContract(release), solo: mode === "solo",
|
|
302
|
-
interactive: options.interactiveTerminal ?? (process.stdin.isTTY === true && process.stdout.isTTY === true),
|
|
303
|
-
ensureHost: async () => (options.ensureTerminalHost ?? ensureTerminalHost)({
|
|
304
|
-
releaseRoot: release.releaseRoot, profileRoot: environment[PRODUCT_IDENTITY.environment.profileHome] ?? paths.configDir,
|
|
305
|
-
dataDir: paths.dataDir, runtimeDir: paths.runtimeDir, environment,
|
|
306
|
-
maxConcurrentStarts: (await residentLaunchSettings).maxConcurrentStarts, unresponsiveRestartSeconds: (await residentLaunchSettings).unresponsiveRestartSeconds,
|
|
307
|
-
}),
|
|
308
|
-
});
|
|
309
|
-
if (resident === null)
|
|
310
|
-
return {};
|
|
311
|
-
if (resident.status !== "ready")
|
|
312
|
-
return { residentFallback: resident.reason };
|
|
313
|
-
return {
|
|
314
|
-
residentRootExecutable: resident.executable.executable,
|
|
315
|
-
residentRootArguments: JSON.stringify([
|
|
316
|
-
resident.executable.entry, "attach", "--workspace", "--endpoint", resident.endpoint,
|
|
317
|
-
"--cwd", process.cwd(), "--clear-exit-ms", String(RESIDENT_DETACH_INTERVAL_MS),
|
|
318
|
-
"--profile", environment[PRODUCT_IDENTITY.environment.profileHome] ?? paths.configDir,
|
|
319
|
-
"--settings-file", resolve(agentProfileDir, "settings.json"), "--accent-color", (await residentLaunchSettings).accentColor,
|
|
320
|
-
"--data-dir", paths.dataDir, "--runtime-dir", paths.runtimeDir,
|
|
321
|
-
"--release-root", release.releaseRoot, "--node-executable", process.execPath,
|
|
322
|
-
]),
|
|
323
|
-
};
|
|
149
|
+
return await launchSelected(candidate);
|
|
324
150
|
}
|
|
325
151
|
/**
|
|
326
|
-
* Start the retained active
|
|
152
|
+
* Start the retained active release when the installed payload cannot be taken. The
|
|
327
153
|
* release already carries certified evidence, so this reuses it rather than
|
|
328
154
|
* certifying anything new, and reports no selection when there is nothing safe
|
|
329
155
|
* to fall back to.
|
|
330
156
|
*/
|
|
331
|
-
async function launchRetainedActive(state, paths,
|
|
157
|
+
async function launchRetainedActive(state, paths, launch, excludedReleaseId) {
|
|
332
158
|
const activeId = state.references.active;
|
|
333
159
|
const active = activeId === null ? undefined : state.releases[activeId];
|
|
334
160
|
if (!active || active.approval !== "approved" || active.releaseId === excludedReleaseId)
|
|
335
161
|
return null;
|
|
336
162
|
try {
|
|
337
163
|
const retained = await readCertifiedReleaseManifest(active, resolve(paths.dataDir, "releases"));
|
|
338
|
-
await ensureSupervisor(retained, environment);
|
|
339
164
|
return await launch(retained);
|
|
340
165
|
}
|
|
341
166
|
catch {
|
|
@@ -376,50 +201,23 @@ export async function recordParentCertifiedRelease(release, dataDir) {
|
|
|
376
201
|
await chmod(path, 0o400);
|
|
377
202
|
return path;
|
|
378
203
|
}
|
|
379
|
-
/**
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
endpoint: paths.endpoint,
|
|
385
|
-
matches: metadata => endpointMatchesRelease(metadata, release),
|
|
386
|
-
startAndWait: async () => {
|
|
387
|
-
const startup = await startSupervisor(release, environment);
|
|
388
|
-
await waitForVerifiedEndpoint(paths.endpointMetadataPath, release, 8_000, startup);
|
|
389
|
-
},
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
function endpointMatchesRelease(metadata, release) {
|
|
393
|
-
return metadata.releaseId === release.releaseId && metadata.releaseRoot === release.releaseRoot
|
|
394
|
-
&& metadata.contentDigest === release.contentDigest;
|
|
395
|
-
}
|
|
396
|
-
export async function startSupervisor(release, environment) {
|
|
397
|
-
const entry = await resolveReleaseEntryPoint(release, "bin/supervisor.js");
|
|
398
|
-
const paths = resolveProductPaths(environment);
|
|
399
|
-
const attempt = await createSupervisorStartupAttempt(paths.runtimeDir, release.releaseId);
|
|
400
|
-
const child = spawn(process.execPath, [entry, "--startup-attempt", attempt.attemptId], {
|
|
401
|
-
detached: true,
|
|
402
|
-
env: releaseEnvironment(environment, release),
|
|
403
|
-
stdio: "ignore",
|
|
404
|
-
windowsHide: true,
|
|
405
|
-
});
|
|
406
|
-
const childOutcome = new Promise(resolvePromise => {
|
|
407
|
-
child.once("close", (exitCode, signal) => resolvePromise({ exitCode, signal }));
|
|
408
|
-
});
|
|
409
|
-
await new Promise((resolvePromise, rejectPromise) => {
|
|
410
|
-
child.once("spawn", resolvePromise);
|
|
411
|
-
child.once("error", rejectPromise);
|
|
412
|
-
});
|
|
413
|
-
child.unref();
|
|
414
|
-
return { ...attempt, childOutcome };
|
|
415
|
-
}
|
|
416
|
-
async function launchUi(release, environment, sessionArgs, residentContext = {}) {
|
|
204
|
+
/**
|
|
205
|
+
* Run the selected release's UI as the one attached child. The launcher still owns the terminal,
|
|
206
|
+
* so when the child ends uncleanly it restores the terminal and prints any notice the UI left armed.
|
|
207
|
+
*/
|
|
208
|
+
async function launchUi(release, environment, sessionArgs, runtimeDir) {
|
|
417
209
|
await markStartupPhase(environment, "bootstrap-selected");
|
|
418
|
-
const entry = await resolveReleaseEntryPoint(release, "bin/
|
|
210
|
+
const entry = await resolveReleaseEntryPoint(release, "bin/ui.js");
|
|
211
|
+
const ownsTerminal = readLaunchContext(environment).launchProfile === "a1";
|
|
212
|
+
const noticeDirectory = resolve(runtimeDir, "exit-notices");
|
|
213
|
+
const noticePath = resolve(noticeDirectory, `${randomUUID()}.notice`);
|
|
214
|
+
if (ownsTerminal)
|
|
215
|
+
await mkdir(noticeDirectory, { recursive: true, mode: 0o700 });
|
|
216
|
+
const launchEnvironment = releaseEnvironment(environment, release, readLaunchContext(environment, "profile").launchProfile);
|
|
217
|
+
if (ownsTerminal)
|
|
218
|
+
launchEnvironment[PRODUCT_IDENTITY.environment.exitNoticePath] = noticePath;
|
|
419
219
|
return await new Promise((resolvePromise, rejectPromise) => {
|
|
420
220
|
let releaseSuperseded = false;
|
|
421
|
-
const releaseEnv = releaseEnvironment(environment, release, readLaunchContext(environment, "profile").launchProfile);
|
|
422
|
-
const launchEnvironment = Object.keys(residentContext).length === 0 ? releaseEnv : withLaunchContext(releaseEnv, { ...readLaunchContext(releaseEnv), ...residentContext }, process.platform, launchContractTarget(release));
|
|
423
221
|
const child = spawn(process.execPath, [entry, ...sessionArgs], {
|
|
424
222
|
env: launchEnvironment,
|
|
425
223
|
stdio: ["inherit", "inherit", "inherit", "ipc"],
|
|
@@ -431,12 +229,13 @@ async function launchUi(release, environment, sessionArgs, residentContext = {})
|
|
|
431
229
|
}
|
|
432
230
|
});
|
|
433
231
|
child.once("error", rejectPromise);
|
|
434
|
-
child.once("close", (code, signal) =>
|
|
435
|
-
code:
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
232
|
+
child.once("close", (code, signal) => {
|
|
233
|
+
const outcome = releaseSuperseded ? code ?? 1 : restoreAfterOwnedExit(ownsTerminal, code, signal);
|
|
234
|
+
// Invariant: the UI removes its notice on a clean exit; one still armed means the UI died.
|
|
235
|
+
if (ownsTerminal)
|
|
236
|
+
deliverExitNotice(noticePath, message => process.stderr.write(message));
|
|
237
|
+
resolvePromise({ code: outcome, releaseSuperseded });
|
|
238
|
+
});
|
|
440
239
|
});
|
|
441
240
|
}
|
|
442
241
|
/**
|
|
@@ -445,121 +244,11 @@ async function launchUi(release, environment, sessionArgs, residentContext = {})
|
|
|
445
244
|
* version instead of failing while an installation is being replaced.
|
|
446
245
|
*/
|
|
447
246
|
export function releaseEnvironment(environment, release, profile) {
|
|
448
|
-
const context = readLaunchContext(environment);
|
|
449
247
|
return withLaunchContext(environment, {
|
|
450
248
|
releaseId: release.releaseId,
|
|
451
249
|
releaseLayers: (release.dependencyLayers ?? []).map(layer => layer.layerId).join(","),
|
|
452
250
|
releaseRoot: release.releaseRoot,
|
|
453
251
|
releaseDigest: release.contentDigest,
|
|
454
252
|
...(profile === undefined ? {} : { launchProfile: profile }),
|
|
455
|
-
...(context.launchMode === undefined ? {} : { launchMode: context.launchMode }),
|
|
456
|
-
...(context.updateVersion === undefined ? {} : { updateVersion: context.updateVersion }),
|
|
457
253
|
}, process.platform, launchContractTarget(release));
|
|
458
254
|
}
|
|
459
|
-
export async function waitForVerifiedEndpoint(path, release, timeoutMs, startup) {
|
|
460
|
-
const deadline = Date.now() + timeoutMs;
|
|
461
|
-
let childOutcome = null;
|
|
462
|
-
let collision = null;
|
|
463
|
-
void startup?.childOutcome.then(outcome => { childOutcome = outcome; });
|
|
464
|
-
while (Date.now() < deadline) {
|
|
465
|
-
const metadata = await readEndpointMetadata(path);
|
|
466
|
-
if (metadata && endpointMatchesRelease(metadata, release) && await probeOwnership(metadata, { attempts: 1 }) === "live-verified") {
|
|
467
|
-
if (startup)
|
|
468
|
-
await rm(startup.resultPath, { force: true });
|
|
469
|
-
return;
|
|
470
|
-
}
|
|
471
|
-
if (startup) {
|
|
472
|
-
const result = await readSupervisorStartupResult(startup.resultPath, startup.attemptId, startup.releaseId);
|
|
473
|
-
if (result?.outcome === "failure") {
|
|
474
|
-
const error = Object.assign(new Error(PRODUCT_TEXT.diagnostic(`supervisor startup failed at ${result.stage}: ${result.message}`)), {
|
|
475
|
-
code: result.code ?? "SUPERVISOR_STARTUP_FAILED",
|
|
476
|
-
});
|
|
477
|
-
if (result.code !== "EADDRINUSE")
|
|
478
|
-
throw error;
|
|
479
|
-
// Concurrency: the winning process may not have published its authenticated metadata yet.
|
|
480
|
-
collision = error;
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
if (childOutcome && !collision)
|
|
484
|
-
throw new Error(PRODUCT_TEXT.diagnostic(`supervisor exited before readiness: ${JSON.stringify(childOutcome)}`));
|
|
485
|
-
await new Promise(resolvePromise => setTimeout(resolvePromise, 40));
|
|
486
|
-
}
|
|
487
|
-
if (collision)
|
|
488
|
-
throw collision;
|
|
489
|
-
throw new Error(PRODUCT_TEXT.diagnostic(`supervisor did not publish verified endpoint metadata within ${timeoutMs}ms`));
|
|
490
|
-
}
|
|
491
|
-
async function activatePendingAfterBlockerExit(candidate, stateStore, paths, environment) {
|
|
492
|
-
const deadline = Date.now() + 2_000;
|
|
493
|
-
let endpoint = null;
|
|
494
|
-
while (Date.now() < deadline) {
|
|
495
|
-
endpoint = await readEndpointMetadata(paths.endpointMetadataPath);
|
|
496
|
-
if (!endpoint || endpoint.ownership.liveInstanceIds.length === 0)
|
|
497
|
-
break;
|
|
498
|
-
await new Promise(resolvePromise => setTimeout(resolvePromise, 40));
|
|
499
|
-
}
|
|
500
|
-
if (!endpoint || endpoint.ownership.liveInstanceIds.length > 0 || await probeOwnership(endpoint) !== "live-verified")
|
|
501
|
-
return;
|
|
502
|
-
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
503
|
-
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
504
|
-
await assertResidentContinuity({ releaseRoot: candidate.releaseRoot, dataDir: paths.dataDir, environment,
|
|
505
|
-
profileRoot: environment[PRODUCT_IDENTITY.environment.profileHome] ?? paths.configDir, runtimeDir: paths.runtimeDir });
|
|
506
|
-
if (!await requestIdleOwnershipRelease(endpoint, candidate.releaseId, 2_000))
|
|
507
|
-
return;
|
|
508
|
-
if (!await releaseVerifiedIdleOwner(endpoint, paths.dataDir))
|
|
509
|
-
return;
|
|
510
|
-
await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint, endpoint);
|
|
511
|
-
await stateStore.activate(candidate.releaseId);
|
|
512
|
-
await ensureSupervisor(candidate, environment);
|
|
513
|
-
}
|
|
514
|
-
export async function releaseVerifiedIdleOwner(metadata, dataDir, operations = {}) {
|
|
515
|
-
try {
|
|
516
|
-
// Protocol: the owner rechecks its boot nonce and live instances before cooperative exit.
|
|
517
|
-
// A durable idle snapshot alone never authorizes a signal to a still-live process.
|
|
518
|
-
await requestIdleOwnershipRelease(metadata, metadata.releaseId, 2_000);
|
|
519
|
-
await (operations.waitForExit ?? waitForProcessExit)(metadata.pid, 3_000);
|
|
520
|
-
return true;
|
|
521
|
-
}
|
|
522
|
-
catch {
|
|
523
|
-
// Security: a lingering Windows handle can keep numeric PID probes positive after exit.
|
|
524
|
-
// Native observation may retire that exact dead boot, but never signals a still-live owner.
|
|
525
|
-
const diagnostics = await (operations.cleanup ?? cleanupProvenIdleOwner)(metadata);
|
|
526
|
-
await writeFile(resolve(dataDir, `cleanup-${Date.now()}.json`), JSON.stringify(diagnostics, null, 2));
|
|
527
|
-
return diagnostics.terminated;
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
async function requestIdleOwnershipRelease(metadata, candidateReleaseId, timeoutMs) {
|
|
531
|
-
return await new Promise(resolvePromise => {
|
|
532
|
-
const socket = connect(metadata.endpoint);
|
|
533
|
-
const decoder = new LineFrameDecoder();
|
|
534
|
-
let settled = false;
|
|
535
|
-
const finish = (released) => {
|
|
536
|
-
if (settled)
|
|
537
|
-
return;
|
|
538
|
-
settled = true;
|
|
539
|
-
socket.destroy();
|
|
540
|
-
resolvePromise(released);
|
|
541
|
-
};
|
|
542
|
-
socket.once("error", () => finish(false));
|
|
543
|
-
socket.once("connect", () => socket.write(encodeFrame({ type: "release-idle-ownership", bootNonce: metadata.bootNonce, candidateReleaseId })));
|
|
544
|
-
socket.on("data", chunk => {
|
|
545
|
-
try {
|
|
546
|
-
const message = decoder.push(chunk)[0];
|
|
547
|
-
if (message?.type === "release-ownership-result")
|
|
548
|
-
finish(message.released === true);
|
|
549
|
-
}
|
|
550
|
-
catch {
|
|
551
|
-
finish(false);
|
|
552
|
-
}
|
|
553
|
-
});
|
|
554
|
-
setTimeout(() => finish(false), timeoutMs).unref();
|
|
555
|
-
});
|
|
556
|
-
}
|
|
557
|
-
export async function waitForProcessExit(pid, timeoutMs) {
|
|
558
|
-
const deadline = Date.now() + timeoutMs;
|
|
559
|
-
while (Date.now() < deadline) {
|
|
560
|
-
if (!processIsAlive(pid))
|
|
561
|
-
return;
|
|
562
|
-
await new Promise(resolvePromise => setTimeout(resolvePromise, 25));
|
|
563
|
-
}
|
|
564
|
-
throw new Error(PRODUCT_TEXT.diagnostic(`supervisor ${pid} did not release process ownership within ${timeoutMs}ms`));
|
|
565
|
-
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
export declare const DEPENDENCY_CERTIFICATIONS_DIRECTORY = "dependency-certifications";
|
|
2
1
|
type LayerIdentity = {
|
|
3
2
|
readonly layerId: string;
|
|
4
3
|
readonly contentDigest: string;
|
|
5
4
|
};
|
|
6
5
|
export interface ReadDependencyCertificationOptions {
|
|
7
|
-
/** Only authenticated parent
|
|
6
|
+
/** Only an authenticated parent certifying the exact release may upgrade missing platform evidence. */
|
|
8
7
|
readonly allowLegacyParentCertification?: boolean;
|
|
9
8
|
/** Cleanup must validate canonical evidence without migrating or falling back. */
|
|
10
9
|
readonly canonicalOnly?: boolean;
|
|
@@ -3,7 +3,7 @@ import { chmod, lstat, mkdir, readFile, readdir, realpath, rename, rm, writeFile
|
|
|
3
3
|
import { basename, dirname, resolve } from "node:path";
|
|
4
4
|
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
5
5
|
import { immutablePlatformPolicy } from "./immutable-platform.js";
|
|
6
|
-
|
|
6
|
+
const DEPENDENCY_CERTIFICATIONS_DIRECTORY = "dependency-certifications";
|
|
7
7
|
/** Derive the canonical record path without accepting path components as layer identities. */
|
|
8
8
|
export function dependencyLayerCertificationPath(dataDir, layerId) {
|
|
9
9
|
assertLayerId(layerId);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
type UiAccentColor = "blue" | "purple" | "cyan" | "green" | "orange" | "pink";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
type EarlyAccentAppearance = "dark" | "light";
|
|
3
|
+
type EarlyAccentMode = "truecolor" | "256color";
|
|
4
4
|
/** Read only global profile data, never project settings or the interactive resource pipeline. */
|
|
5
5
|
export declare function resolveEarlyAccentColor(environment?: NodeJS.ProcessEnv, home?: () => string): UiAccentColor;
|
|
6
6
|
export declare function earlyAccentPalette(color: UiAccentColor, appearance?: EarlyAccentAppearance, mode?: EarlyAccentMode): {
|
|
@@ -2,7 +2,7 @@ import { readFileSync, statSync } from "node:fs";
|
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { isAbsolute, join } from "node:path";
|
|
4
4
|
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
5
|
-
import { SHARED_PROGRESS_PALETTE } from "
|
|
5
|
+
import { SHARED_PROGRESS_PALETTE } from "../../contracts/presentation/index.js";
|
|
6
6
|
const MAX_SETTINGS_BYTES = 256 * 1024;
|
|
7
7
|
/** Read only global profile data, never project settings or the interactive resource pipeline. */
|
|
8
8
|
export function resolveEarlyAccentColor(environment = process.env, home = homedir) {
|
|
@@ -1,21 +1,14 @@
|
|
|
1
|
-
export { certifyMaterializedRelease,
|
|
2
|
-
export type { BootstrapOptions
|
|
3
|
-
export { selectCohortLaunch } from "./cohort-selection.js";
|
|
1
|
+
export { certifyMaterializedRelease, recordParentCertifiedRelease, releaseEnvironment, runBootstrap, } from "./bootstrap.js";
|
|
2
|
+
export type { BootstrapOptions } from "./bootstrap.js";
|
|
4
3
|
export { selectOrdinaryLaunchReleaseId } from "./ordinary-launch-selection.js";
|
|
5
|
-
export
|
|
6
|
-
export {
|
|
7
|
-
export type { ActiveReleaseTransactionReference, CohortState, EndpointOwnership, ExternalReleaseHold, ExternalReleaseHoldAuthority, OrphanReleaseDisposition, ProtectedReleaseInputs, ProtectedReleasePlan, ReleaseApproval, ReleaseCleanupDiagnostic, ReleaseCleanupDisposition, ReleaseCleanupStage, ReleaseCleanupState, ReleaseCleanupWorkerRun, ReleaseCleanupWorkerStatus, ReleaseCleanupWorkerSummary, ReleaseRecord, ReleaseReferences, ReleaseRetentionReconciliation, SupervisorEndpointMetadata, } from "./cohort-state.js";
|
|
4
|
+
export { ReleaseStateStore, RELEASE_STATE_SCHEMA, RELEASE_RETENTION_MS, emptyState, planProtectedReleases, withinRetention } from "./release-state.js";
|
|
5
|
+
export type { ActiveReleaseTransactionReference, ReleaseState, OrphanReleaseDisposition, ProtectedReleaseInputs, ProtectedReleasePlan, ReleaseApproval, ReleaseCleanupDiagnostic, ReleaseCleanupDisposition, ReleaseCleanupStage, ReleaseCleanupState, ReleaseCleanupWorkerRun, ReleaseCleanupWorkerStatus, ReleaseCleanupWorkerSummary, ReleaseRecord, ReleaseReferences, ReleaseRetentionReconciliation, } from "./release-state.js";
|
|
8
6
|
export { DEPENDENCY_LAYER_MANIFEST, DEPENDENCY_LAYER_SCHEMA, RUNTIME_PAYLOAD_INVENTORY, dependencyLayerCertificationPath, dependencyReference, generateDependencyRuntimePayload, legacyDependencyLayerCertificationPath, materializeDependencyLayer, readCertifiedDependencyLayer, selectDependencyRuntimePayload, selectPublishedDependencyRuntimePayload, verifyDependencyLayer, } from "./dependency-layer.js";
|
|
9
7
|
export type { DependencyLayerIdentity, DependencyLayerOperationEvent, DependencyLayerReference, GeneratedRuntimePayload, MaterializeDependencyLayerOptions, MaterializedDependencyLayer, PublishedRuntimeFileClassification, PublishedRuntimePayload, ReadCertifiedDependencyLayerOptions, RuntimePayloadExclusion, RuntimePayloadInventory, SelectedRuntimePayload, } from "./dependency-layer.js";
|
|
10
|
-
export {
|
|
11
|
-
export { currentSupervisorStartIdentity, observeSupervisorProcess, supervisorProcessState } from "./supervisor-identity.js";
|
|
12
|
-
export { withEndpointLock } from "./endpoint-lock.js";
|
|
13
|
-
export type { RecordedEndpoint } from "./endpoints.js";
|
|
14
|
-
export { cleanupProvenIdleOwner, cleanupVerifiedOwner, processIsAlive } from "./process-cleanup.js";
|
|
15
|
-
export type { CleanupDiagnostics } from "./process-cleanup.js";
|
|
8
|
+
export { processIsAlive } from "./process-liveness.js";
|
|
16
9
|
export { PRODUCT_PACKAGE_NAME, createReleaseIdentity, deriveReleaseIdentity, digestManifestFiles, discoverReleasePayload, packageRootFromModule, releaseFileIdentity, resolveWithin, } from "./release.js";
|
|
17
10
|
export type { DiscoverReleasePayloadOptions, DiscoveredReleasePayload, ReleaseFileIdentity, ReleaseIdentity } from "./release.js";
|
|
18
|
-
export {
|
|
11
|
+
export { prepareReleaseCleanup, runBoundedReleaseCleanup, runReleaseCleanupWorker, scheduleReleaseCleanup } from "./release-gc.js";
|
|
19
12
|
export type { ReleaseCleanupLimits, ReleaseCleanupOperations, ReleaseCleanupOptions, ReleaseCleanupResult, ReleaseCleanupWorkerOptions } from "./release-gc.js";
|
|
20
13
|
export { RELEASE_MANIFEST_FILENAME, ReleaseRepairUnavailableError, assertCertifiedFilesPresent, assertImmutableExecutionRoot, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, repairMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease, } from "./release-store.js";
|
|
21
14
|
export type { CertifiedReleaseRecord, MaterializeReleaseOptions, MaterializedRelease, ReadCertifiedReleaseManifestOptions, ReleaseContentOperation, ReleaseContentOperationEvent, VerifyMaterializedReleaseOptions, } from "./release-store.js";
|
|
@@ -23,11 +16,11 @@ export { createRestartSeal, readRestartCertifiedRelease, releaseCertificationDoc
|
|
|
23
16
|
export type { RestartSeal, RestartValidationEvent } from "./restart-certification.js";
|
|
24
17
|
export { STABLE_RELEASE_SCHEMA, createStableReleaseEvidence, verifyStableRegistry } from "./stable-release.js";
|
|
25
18
|
export type { StableRegistryState, StableRegistryVerificationOptions, StableReleaseEvidence, StableReleaseEvidenceInput } from "./stable-release.js";
|
|
26
|
-
export { PACKAGE_UNLOCK_PATIENCE_MS,
|
|
27
|
-
export type { ProcessRequest, ProcessResult, SelfUpdateOptions, UpdateActivationPhase, UpdateChannel, UpdateFileMetadata, UpdateFileSystem, UpdateLifecycleCoordinator, UpdateMaterializationProgress, UpdateMeasuredPhase, UpdateOutput,
|
|
28
|
-
export { UPDATE_ACTIVATION_CONTRACT, UPDATE_ACTIVATION_ENTRY, UPDATE_ACTIVATION_MANIFEST_FIELD,
|
|
19
|
+
export { PACKAGE_UNLOCK_PATIENCE_MS, UPDATE_ALREADY_RUNNING_EXIT_CODE, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
|
|
20
|
+
export type { ProcessRequest, ProcessResult, SelfUpdateOptions, UpdateActivationPhase, UpdateChannel, UpdateFileMetadata, UpdateFileSystem, UpdateLifecycleCoordinator, UpdateMaterializationProgress, UpdateMeasuredPhase, UpdateOutput, UpdatePackageReplacementInput, UpdatePerformanceEvidence, UpdatePhaseTimingEvent, UpdateProcessRunner, UpdateTransactionJournal, UpdateUnlockPatience, } from "./update.js";
|
|
21
|
+
export { UPDATE_ACTIVATION_CONTRACT, UPDATE_ACTIVATION_ENTRY, UPDATE_ACTIVATION_MANIFEST_FIELD, activateInstalledRelease, delegateActivation, readActivationContracts, runActivationEntry, } from "./update-activation.js";
|
|
29
22
|
export type { UpdateActivationCallbacks, UpdateActivationEvent, UpdateActivationRequest } from "./update-activation.js";
|
|
30
|
-
export {
|
|
23
|
+
export { selectUpdateLaunchRelease } from "./update-launch.js";
|
|
31
24
|
export { UPDATE_RECOVERY_SCHEMA, cleanupUpdateRecoveryCapsules, inspectUpdateLauncherSet, npmPrefixForGlobalRoot, prepareUpdateRecoveryCapsule, readUpdateRecoveryCapsule, removeUpdateRecoveryCapsule, resolveNpmCli, runProtectedPackageReplacement, updateLauncherPaths, updateNpmInstallArguments, } from "./update-recovery.js";
|
|
32
25
|
export type { ProtectedPackageReplacementOptions, ProtectedPackageReplacementResult, UpdateRecoveryCapsule, UpdateRecoveryResult } from "./update-recovery.js";
|
|
33
26
|
export { UPDATE_JOURNAL_SCHEMA, UpdateTransactionStore } from "./update-transaction.js";
|