@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
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The identity every record written by this build carries. Liveness is a pid probe, so the
|
|
3
|
+
* identity only distinguishes records this build wrote from records an older build left.
|
|
4
|
+
*/
|
|
5
|
+
export const PID_LIVENESS_IDENTITY = "pid-liveness";
|
|
6
|
+
/** Observe whether a process is running; a permission refusal still proves the pid exists. */
|
|
7
|
+
export async function inspectLiveProcess(pid) {
|
|
8
|
+
if (!Number.isSafeInteger(pid) || pid <= 0)
|
|
9
|
+
return null;
|
|
10
|
+
try {
|
|
11
|
+
process.kill(pid, 0);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (!(error instanceof Error && "code" in error && error.code === "EPERM"))
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return { pid, startIdentity: PID_LIVENESS_IDENTITY };
|
|
18
|
+
}
|
|
@@ -5,7 +5,7 @@ interface ClaimLockOptions {
|
|
|
5
5
|
/** Inventory is advisory and read-only, including when abandoned metadata needs recovery. */
|
|
6
6
|
export declare function claimMutationPending(directory: string): Promise<boolean>;
|
|
7
7
|
/**
|
|
8
|
-
* The persistent directory excludes legacy wx-file writers. Only
|
|
8
|
+
* The persistent directory excludes legacy wx-file writers. Only the gate beside the authority file
|
|
9
9
|
* permits upgraded mutations; owner.json is disposable evidence, never a liveness oracle.
|
|
10
10
|
* Never remove the barrier or authority file: doing so would create a second lock universe.
|
|
11
11
|
*/
|
|
@@ -2,7 +2,7 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import { lstat, mkdir, open, readdir, realpath, rename, rm } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { setTimeout as delay } from "node:timers/promises";
|
|
5
|
-
import { tryAcquireClaimGate } from "./
|
|
5
|
+
import { tryAcquireClaimGate } from "./claim-gate.js";
|
|
6
6
|
const FILES = new Set(["owner.json", "owner.next", "recovery.json", "recovery.next"]);
|
|
7
7
|
/** Inventory is advisory and read-only, including when abandoned metadata needs recovery. */
|
|
8
8
|
export async function claimMutationPending(directory) {
|
|
@@ -19,7 +19,7 @@ export async function claimMutationPending(directory) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* The persistent directory excludes legacy wx-file writers. Only
|
|
22
|
+
* The persistent directory excludes legacy wx-file writers. Only the gate beside the authority file
|
|
23
23
|
* permits upgraded mutations; owner.json is disposable evidence, never a liveness oracle.
|
|
24
24
|
* Never remove the barrier or authority file: doing so would create a second lock universe.
|
|
25
25
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ProcessIdentity } from "./model.js";
|
|
2
2
|
/** Records without an agent id were written by a single-agent release and belong to its one agent. */
|
|
3
3
|
export declare const PRIMARY_SESSION_AGENT_ID = "primary";
|
|
4
4
|
export interface SessionRepositoryIdentity {
|
|
@@ -21,16 +21,16 @@ export interface SessionRepositoryContextOptions {
|
|
|
21
21
|
readonly runtimeId?: string;
|
|
22
22
|
/** Agent within the runtime that owns the claim; defaults to the primary agent. */
|
|
23
23
|
readonly agentId?: string;
|
|
24
|
-
readonly runtimeIdentity?:
|
|
25
|
-
readonly inspectProcess?: (pid: number) => Promise<
|
|
24
|
+
readonly runtimeIdentity?: ProcessIdentity;
|
|
25
|
+
readonly inspectProcess?: (pid: number) => Promise<ProcessIdentity | null>;
|
|
26
26
|
readonly lockTimeoutMs?: number;
|
|
27
27
|
}
|
|
28
28
|
/** Publish the exact live runtime that may acquire a delivery worktree. */
|
|
29
|
-
export declare function registerSessionRepositoryRuntime(identity: SessionRepositoryIdentity, runtimeId: string, runtimeIdentity:
|
|
29
|
+
export declare function registerSessionRepositoryRuntime(identity: SessionRepositoryIdentity, runtimeId: string, runtimeIdentity: ProcessIdentity, options?: SessionRepositoryContextOptions): Promise<void>;
|
|
30
30
|
/** Revalidate a durable association and acquire its live claim for this runtime's agent; sibling agents' claims stay. */
|
|
31
|
-
export declare function activateSessionRepositoryContext(identity: SessionRepositoryIdentity, runtimeId: string, runtimeIdentity:
|
|
31
|
+
export declare function activateSessionRepositoryContext(identity: SessionRepositoryIdentity, runtimeId: string, runtimeIdentity: ProcessIdentity, options?: SessionRepositoryContextOptions): Promise<SessionRepositoryContext | null>;
|
|
32
32
|
/** Release every agent's cooperative editing claims held by this exact runtime generation. */
|
|
33
|
-
export declare function releaseSessionRepositoryRuntime(runtimeId: string, runtimeIdentity:
|
|
33
|
+
export declare function releaseSessionRepositoryRuntime(runtimeId: string, runtimeIdentity: ProcessIdentity, options?: SessionRepositoryContextOptions): Promise<void>;
|
|
34
34
|
/** Persist one explicit same-repository worktree association after atomically claiming it. */
|
|
35
35
|
export declare function setSessionRepositoryContext(identity: SessionRepositoryIdentity, worktreePath: string, options?: SessionRepositoryContextOptions): Promise<SessionRepositoryContext>;
|
|
36
36
|
/** Remove only the association and live claim belonging to the supplied stable session/runtime. */
|
|
@@ -3,6 +3,7 @@ import { open, lstat, mkdir, readFile, readdir, realpath, rename, rm, writeFile
|
|
|
3
3
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
4
|
import { promisify } from "node:util";
|
|
5
5
|
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
6
|
+
import { inspectLiveProcess } from "./process-liveness.js";
|
|
6
7
|
import { resolveProductPaths } from "./paths.js";
|
|
7
8
|
import { claimMutationPending, withSessionClaimLock } from "./session-claim-lock.js";
|
|
8
9
|
const CONTEXT_SCHEMA = "a1-session-repository-context-v1";
|
|
@@ -512,9 +513,7 @@ function ownedBy(record, owner) {
|
|
|
512
513
|
return record.runtimeId === owner.runtimeId && record.agentId === owner.agentId;
|
|
513
514
|
}
|
|
514
515
|
function requireInspector(options) {
|
|
515
|
-
|
|
516
|
-
throw contextError("native process identity inspection is unavailable", "process-inspection-unavailable");
|
|
517
|
-
return options.inspectProcess;
|
|
516
|
+
return options.inspectProcess ?? inspectLiveProcess;
|
|
518
517
|
}
|
|
519
518
|
function processIdentityOf(record) {
|
|
520
519
|
return { pid: record.pid, startIdentity: record.startIdentity };
|
|
@@ -1,36 +1,25 @@
|
|
|
1
1
|
import { type AvailableRelease, type ReleaseChannel } from "./latest-release.js";
|
|
2
|
-
|
|
3
|
-
export declare const AUTOMATIC_UPDATE_RETRY_MS: number;
|
|
4
|
-
export declare const AUTOMATIC_UPDATE_ACTIVATION_RETRY_MS = 15000;
|
|
5
|
-
export declare const ACTIVE_RELEASE_FALLBACK_MS = 5000;
|
|
2
|
+
declare const AUTOMATIC_UPDATE_STATE_SCHEMA = 1;
|
|
6
3
|
export interface AutomaticUpdateState {
|
|
7
4
|
readonly schema: typeof AUTOMATIC_UPDATE_STATE_SCHEMA;
|
|
8
5
|
readonly channel: ReleaseChannel;
|
|
9
6
|
readonly targetVersion: string;
|
|
10
|
-
readonly status: "running" | "
|
|
7
|
+
readonly status: "running" | "installed" | "failed";
|
|
11
8
|
readonly attemptedAt: number;
|
|
12
9
|
readonly updatedAt: number;
|
|
13
10
|
readonly installedVersion: string | null;
|
|
14
11
|
readonly failure: string | null;
|
|
15
12
|
}
|
|
16
|
-
|
|
17
|
-
readonly path: string;
|
|
18
|
-
constructor(dataDir: string);
|
|
19
|
-
read(): Promise<AutomaticUpdateState | null>;
|
|
20
|
-
write(value: AutomaticUpdateState): Promise<void>;
|
|
21
|
-
}
|
|
22
|
-
export interface ActiveReleaseObservationOptions {
|
|
13
|
+
interface ActiveReleaseObservationOptions {
|
|
23
14
|
readonly runningVersion: string;
|
|
24
15
|
readonly environment?: NodeJS.ProcessEnv;
|
|
25
16
|
readonly signal?: AbortSignal;
|
|
26
17
|
readonly onNewer: (version: string) => void;
|
|
27
18
|
readonly fallbackMs?: number;
|
|
28
19
|
}
|
|
29
|
-
/** Read the approved active release only when this process executes an older release on that channel. */
|
|
30
|
-
export declare function readNewerActiveRelease(runningVersion: string, environment?: NodeJS.ProcessEnv): Promise<string | null>;
|
|
31
20
|
/** Observe local release activation promptly, with a bounded fallback for missed filesystem events. */
|
|
32
21
|
export declare function observeNewerActiveRelease(options: ActiveReleaseObservationOptions): () => void;
|
|
33
|
-
|
|
22
|
+
interface AutomaticUpdateRequestOptions {
|
|
34
23
|
readonly release: AvailableRelease;
|
|
35
24
|
readonly runningVersion: string;
|
|
36
25
|
readonly environment?: NodeJS.ProcessEnv;
|
|
@@ -38,14 +27,14 @@ export interface AutomaticUpdateRequestOptions {
|
|
|
38
27
|
readonly now?: () => number;
|
|
39
28
|
readonly spawnWorker?: (entry: string, arguments_: readonly string[], environment: NodeJS.ProcessEnv) => Promise<void>;
|
|
40
29
|
readonly sleep?: (durationMs: number) => Promise<void>;
|
|
41
|
-
/** Focused-test seams; production resolves both from the certified launch
|
|
30
|
+
/** Focused-test seams; production resolves both from the certified launch release. */
|
|
42
31
|
readonly worker?: {
|
|
43
32
|
readonly entry: string;
|
|
44
33
|
readonly packageRoot: string;
|
|
45
34
|
};
|
|
46
35
|
readonly activeVersion?: () => Promise<string | null>;
|
|
47
|
-
readonly onActivationBlocked?: (version: string | null) => void;
|
|
48
36
|
}
|
|
49
37
|
/** Start or observe one silent update and resolve with the active newer version once restart is useful. */
|
|
50
38
|
export declare function requestAutomaticUpdate(options: AutomaticUpdateRequestOptions): Promise<string | null>;
|
|
51
39
|
export declare function runAutomaticUpdateWorker(argv: readonly string[], environment?: NodeJS.ProcessEnv): Promise<number>;
|
|
40
|
+
export {};
|
|
@@ -6,22 +6,21 @@ import { basename, dirname, resolve } from "node:path";
|
|
|
6
6
|
import { valid as validSemver } from "semver";
|
|
7
7
|
import { readLaunchContext } from "../launch-context/index.js";
|
|
8
8
|
import { resolveProductPaths } from "../lifecycle/index.js";
|
|
9
|
-
import {
|
|
10
|
-
import { processIsAlive } from "./process-
|
|
9
|
+
import { ReleaseStateStore } from "./release-state.js";
|
|
10
|
+
import { processIsAlive } from "./process-liveness.js";
|
|
11
11
|
import { isNewerRelease, releaseChannelOf } from "./latest-release.js";
|
|
12
12
|
import { readCertifiedReleaseManifest, resolveReleaseEntryPoint } from "./release-store.js";
|
|
13
13
|
import { acquireUpdateExecutionLease, readUpdateExecutionOwner } from "./update-execution-lease.js";
|
|
14
14
|
import { UpdateTransactionStore } from "./update-transaction.js";
|
|
15
|
-
import { runSelfUpdate,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export const AUTOMATIC_UPDATE_ACTIVATION_RETRY_MS = 15_000;
|
|
15
|
+
import { runSelfUpdate, UPDATE_ALREADY_RUNNING_EXIT_CODE } from "./update.js";
|
|
16
|
+
const AUTOMATIC_UPDATE_STATE_SCHEMA = 1;
|
|
17
|
+
const AUTOMATIC_UPDATE_RETRY_MS = 24 * 60 * 60_000;
|
|
19
18
|
const AUTOMATIC_UPDATE_STATE_FILENAME = "automatic-update.json";
|
|
20
19
|
const MAX_STATE_BYTES = 16_384;
|
|
21
20
|
const OBSERVER_POLL_MS = 250;
|
|
22
21
|
const WORKER_START_GRACE_MS = 5_000;
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
const ACTIVE_RELEASE_FALLBACK_MS = 5_000;
|
|
23
|
+
class AutomaticUpdateStateStore {
|
|
25
24
|
path;
|
|
26
25
|
constructor(dataDir) { this.path = resolve(dataDir, AUTOMATIC_UPDATE_STATE_FILENAME); }
|
|
27
26
|
async read() {
|
|
@@ -37,6 +36,10 @@ export class AutomaticUpdateStateStore {
|
|
|
37
36
|
if (Buffer.byteLength(source, "utf8") > MAX_STATE_BYTES)
|
|
38
37
|
throw new Error("automatic update state is oversized");
|
|
39
38
|
const value = JSON.parse(source);
|
|
39
|
+
// Compatibility: a record left by an activation that waited on resident tabs says nothing
|
|
40
|
+
// about the next attempt, so it is read as no record at all.
|
|
41
|
+
if (value?.status === "blocked")
|
|
42
|
+
return null;
|
|
40
43
|
validateState(value);
|
|
41
44
|
return value;
|
|
42
45
|
}
|
|
@@ -62,7 +65,7 @@ export class AutomaticUpdateStateStore {
|
|
|
62
65
|
}
|
|
63
66
|
}
|
|
64
67
|
/** Read the approved active release only when this process executes an older release on that channel. */
|
|
65
|
-
|
|
68
|
+
async function readNewerActiveRelease(runningVersion, environment = process.env) {
|
|
66
69
|
const channel = releaseChannelOf(runningVersion);
|
|
67
70
|
if (channel === null)
|
|
68
71
|
return null;
|
|
@@ -80,7 +83,7 @@ export function observeNewerActiveRelease(options) {
|
|
|
80
83
|
if (releaseChannelOf(options.runningVersion) === null || options.signal?.aborted)
|
|
81
84
|
return () => { };
|
|
82
85
|
const paths = resolveProductPaths(options.environment ?? process.env);
|
|
83
|
-
const store = new
|
|
86
|
+
const store = new ReleaseStateStore(paths.dataDir);
|
|
84
87
|
let closed = false;
|
|
85
88
|
let checking = false;
|
|
86
89
|
let requested = false;
|
|
@@ -183,14 +186,6 @@ export async function requestAutomaticUpdate(options) {
|
|
|
183
186
|
await store.write(existing).catch(() => undefined);
|
|
184
187
|
}
|
|
185
188
|
}
|
|
186
|
-
const blockedUpdatedAt = existing?.status === "blocked" && existing.channel === options.release.channel
|
|
187
|
-
&& existing.targetVersion === options.release.version ? existing.updatedAt : null;
|
|
188
|
-
const observedBlocked = blockedUpdatedAt !== null;
|
|
189
|
-
if (observedBlocked) {
|
|
190
|
-
options.onActivationBlocked?.(options.release.version);
|
|
191
|
-
if (now() - blockedUpdatedAt >= 0 && now() - blockedUpdatedAt < AUTOMATIC_UPDATE_ACTIVATION_RETRY_MS)
|
|
192
|
-
return null;
|
|
193
|
-
}
|
|
194
189
|
if (existing?.status === "failed" && existing.channel === options.release.channel && now() - existing.attemptedAt >= 0
|
|
195
190
|
&& now() - existing.attemptedAt < AUTOMATIC_UPDATE_RETRY_MS
|
|
196
191
|
&& !isNewerRelease(options.release.version, existing.targetVersion))
|
|
@@ -198,8 +193,8 @@ export async function requestAutomaticUpdate(options) {
|
|
|
198
193
|
let worker = options.worker;
|
|
199
194
|
if (worker === undefined) {
|
|
200
195
|
const launch = readLaunchContext(environment, "release");
|
|
201
|
-
const
|
|
202
|
-
const record = launch.releaseId === undefined ? undefined :
|
|
196
|
+
const releaseState = await new ReleaseStateStore(paths.dataDir).read();
|
|
197
|
+
const record = launch.releaseId === undefined ? undefined : releaseState.releases[launch.releaseId];
|
|
203
198
|
if (!record || record.approval !== "approved" || record.releaseRoot !== launch.releaseRoot
|
|
204
199
|
|| record.contentDigest !== launch.releaseDigest)
|
|
205
200
|
return null;
|
|
@@ -223,8 +218,6 @@ export async function requestAutomaticUpdate(options) {
|
|
|
223
218
|
// Invariant: no worker began this attempt. Do not invent a successful install or an owner.
|
|
224
219
|
await store.write(state({ packageRoot: worker.packageRoot, channel: options.release.channel,
|
|
225
220
|
targetVersion: options.release.version, dataDir: paths.dataDir }, "failed", now(), null, "worker-start-failed")).catch(() => undefined);
|
|
226
|
-
if (observedBlocked)
|
|
227
|
-
options.onActivationBlocked?.(null);
|
|
228
221
|
return null;
|
|
229
222
|
}
|
|
230
223
|
}
|
|
@@ -238,15 +231,8 @@ export async function requestAutomaticUpdate(options) {
|
|
|
238
231
|
if (installed !== null)
|
|
239
232
|
return installed;
|
|
240
233
|
const state = await store.read().catch(() => null);
|
|
241
|
-
if (state?.targetVersion === options.release.version && state.status === "
|
|
242
|
-
options.onActivationBlocked?.(state.targetVersion);
|
|
243
|
-
return null;
|
|
244
|
-
}
|
|
245
|
-
if (state?.targetVersion === options.release.version && state.status === "failed" && state.attemptedAt >= startedAt) {
|
|
246
|
-
if (observedBlocked)
|
|
247
|
-
options.onActivationBlocked?.(null);
|
|
234
|
+
if (state?.targetVersion === options.release.version && state.status === "failed" && state.attemptedAt >= startedAt)
|
|
248
235
|
return null;
|
|
249
|
-
}
|
|
250
236
|
const owner = await readUpdateExecutionOwner(paths.dataDir).catch(() => null);
|
|
251
237
|
if ((owner === null || !processIsAlive(owner.pid)) && now() - startedAt >= WORKER_START_GRACE_MS)
|
|
252
238
|
return null;
|
|
@@ -262,8 +248,8 @@ export async function runAutomaticUpdateWorker(argv, environment = process.env)
|
|
|
262
248
|
let verified = false;
|
|
263
249
|
try {
|
|
264
250
|
const launch = readLaunchContext(environment, "release");
|
|
265
|
-
const
|
|
266
|
-
const record = launch.releaseId === undefined ? undefined :
|
|
251
|
+
const releaseState = await new ReleaseStateStore(paths.dataDir).read();
|
|
252
|
+
const record = launch.releaseId === undefined ? undefined : releaseState.releases[launch.releaseId];
|
|
267
253
|
if (record?.approval === "approved" && samePath(record.releaseRoot, launch.releaseRoot ?? "")
|
|
268
254
|
&& record.contentDigest === launch.releaseDigest) {
|
|
269
255
|
const selected = await readCertifiedReleaseManifest(record, resolve(paths.dataDir, "releases"));
|
|
@@ -296,12 +282,6 @@ export async function runAutomaticUpdateWorker(argv, environment = process.env)
|
|
|
296
282
|
});
|
|
297
283
|
if (code === UPDATE_ALREADY_RUNNING_EXIT_CODE)
|
|
298
284
|
return 0;
|
|
299
|
-
if (code === UPDATE_ACTIVATION_BLOCKED_EXIT_CODE) {
|
|
300
|
-
await runningWrite;
|
|
301
|
-
if (acquired)
|
|
302
|
-
await store.write(state(parsed, "blocked", attemptedAt, null, "resident-continuity-blocked"));
|
|
303
|
-
return code;
|
|
304
|
-
}
|
|
305
285
|
if (code !== 0) {
|
|
306
286
|
await runningWrite;
|
|
307
287
|
if (acquired)
|
|
@@ -380,11 +360,11 @@ function activeNewerPackageVersion(active, runningVersion, channel, minimum) {
|
|
|
380
360
|
? active.packageVersion : null;
|
|
381
361
|
}
|
|
382
362
|
async function activeRelease(dataDir) {
|
|
383
|
-
const
|
|
384
|
-
const activeId =
|
|
363
|
+
const releaseState = await new ReleaseStateStore(dataDir).read();
|
|
364
|
+
const activeId = releaseState.references.active;
|
|
385
365
|
if (activeId === null)
|
|
386
366
|
return null;
|
|
387
|
-
const active =
|
|
367
|
+
const active = releaseState.releases[activeId];
|
|
388
368
|
return active?.approval === "approved" ? active : null;
|
|
389
369
|
}
|
|
390
370
|
function state(parsed, status, attemptedAt, installedVersion, failure) {
|
|
@@ -419,11 +399,10 @@ function parseWorkerArguments(argv) {
|
|
|
419
399
|
}
|
|
420
400
|
function validateState(value) {
|
|
421
401
|
if (value.schema !== AUTOMATIC_UPDATE_STATE_SCHEMA || (value.channel !== "stable" && value.channel !== "development")
|
|
422
|
-
|| validSemver(value.targetVersion) === null || !["running", "
|
|
402
|
+
|| validSemver(value.targetVersion) === null || !["running", "installed", "failed"].includes(value.status)
|
|
423
403
|
|| !Number.isFinite(value.attemptedAt) || !Number.isFinite(value.updatedAt)
|
|
424
404
|
|| (value.installedVersion !== null && validSemver(value.installedVersion) === null)
|
|
425
|
-
|| (value.failure !== null && (typeof value.failure !== "string" || value.failure.length > 512))
|
|
426
|
-
|| value.status === "blocked" && (value.installedVersion !== null || value.failure !== "resident-continuity-blocked")) {
|
|
405
|
+
|| (value.failure !== null && (typeof value.failure !== "string" || value.failure.length > 512))) {
|
|
427
406
|
throw new Error("invalid automatic update state");
|
|
428
407
|
}
|
|
429
408
|
}
|
|
@@ -1,49 +1,26 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { resolveProductPaths, type SessionSelection, type LaunchProfileId, type SupervisorStartupAttemptIdentity } from "../lifecycle/index.js";
|
|
3
|
-
import { cleanupProvenIdleOwner } from "./process-cleanup.js";
|
|
1
|
+
import { resolveProductPaths, type SessionSelection, type LaunchProfileId } from "../lifecycle/index.js";
|
|
4
2
|
import { type MaterializedRelease, type VerifyMaterializedReleaseOptions } from "./release-store.js";
|
|
5
|
-
import { type EnsureTerminalHostOptions, type EnsureTerminalHostResult } from "../resident-tabs/index.js";
|
|
6
3
|
export interface BootstrapOptions {
|
|
7
4
|
readonly packageRoot: string;
|
|
8
5
|
readonly launchIntent?: {
|
|
9
6
|
readonly kind: "interactive";
|
|
10
7
|
readonly profileId: LaunchProfileId;
|
|
11
|
-
readonly launchMode: "tabs" | "solo";
|
|
12
8
|
readonly sessionSelection?: SessionSelection;
|
|
13
9
|
};
|
|
14
10
|
readonly environment?: NodeJS.ProcessEnv;
|
|
15
11
|
readonly output?: Pick<NodeJS.WriteStream, "write">;
|
|
16
12
|
/** Optional package-resolution probe that excludes a damaged retained release. */
|
|
17
13
|
readonly releaseIsLaunchable?: (releaseRoot: string) => boolean;
|
|
18
|
-
/** Test seam for bounded maintenance scheduled
|
|
14
|
+
/** Test seam for bounded maintenance scheduled before the UI starts. */
|
|
19
15
|
readonly scheduleMaintenance?: (dataDir: string, paths: ReturnType<typeof resolveProductPaths>) => Promise<void>;
|
|
20
|
-
/** Test seam for resident launch routing before the guardian starts. */
|
|
21
|
-
readonly ensureTerminalHost?: (options: EnsureTerminalHostOptions) => Promise<EnsureTerminalHostResult>;
|
|
22
|
-
/** Test seam for whether this process's standard input and output are terminals; absent reads them. */
|
|
23
|
-
readonly interactiveTerminal?: boolean;
|
|
24
16
|
}
|
|
25
17
|
export declare function runBootstrap(options: BootstrapOptions): Promise<number>;
|
|
26
18
|
export declare function certifyMaterializedRelease(release: MaterializedRelease, dataDir: string, verification?: VerifyMaterializedReleaseOptions): Promise<string>;
|
|
27
19
|
/** Persist current-format evidence after an authenticated parent has certified the exact release. */
|
|
28
20
|
export declare function recordParentCertifiedRelease(release: MaterializedRelease, dataDir: string): Promise<string>;
|
|
29
|
-
export interface SupervisorStartupAttempt extends SupervisorStartupAttemptIdentity {
|
|
30
|
-
readonly childOutcome: Promise<{
|
|
31
|
-
readonly exitCode: number | null;
|
|
32
|
-
readonly signal: NodeJS.Signals | null;
|
|
33
|
-
}>;
|
|
34
|
-
}
|
|
35
|
-
/** Reuse a verified owner, or join the winner if another launch starts the same cohort first. */
|
|
36
|
-
export declare function ensureSupervisor(release: MaterializedRelease, environment: NodeJS.ProcessEnv): Promise<void>;
|
|
37
|
-
export declare function startSupervisor(release: MaterializedRelease, environment: NodeJS.ProcessEnv): Promise<SupervisorStartupAttempt>;
|
|
38
21
|
/**
|
|
39
22
|
* Hand a release the key set its own build reads. A retained pre-cutover release is
|
|
40
23
|
* still startable this way, which is what lets a launch fall back to the previous
|
|
41
24
|
* version instead of failing while an installation is being replaced.
|
|
42
25
|
*/
|
|
43
26
|
export declare function releaseEnvironment(environment: NodeJS.ProcessEnv, release: MaterializedRelease, profile?: LaunchProfileId): NodeJS.ProcessEnv;
|
|
44
|
-
export declare function waitForVerifiedEndpoint(path: string, release: MaterializedRelease, timeoutMs: number, startup?: SupervisorStartupAttempt): Promise<void>;
|
|
45
|
-
export declare function releaseVerifiedIdleOwner(metadata: SupervisorEndpointMetadata, dataDir: string, operations?: {
|
|
46
|
-
readonly waitForExit?: typeof waitForProcessExit;
|
|
47
|
-
readonly cleanup?: typeof cleanupProvenIdleOwner;
|
|
48
|
-
}): Promise<boolean>;
|
|
49
|
-
export declare function waitForProcessExit(pid: number, timeoutMs: number): Promise<void>;
|