@timurproko/a1 0.1.8-dev.50ebb19 → 0.1.8-dev.510
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 +209 -63
- package/bin/activate.js +8 -0
- package/bin/cli.js +33 -11
- package/bin/guardian.js +16 -6
- package/bin/module-identity.js +76 -69
- package/bin/module-resolver.js +138 -0
- package/bin/pinned-pi-public.d.ts +3 -0
- package/bin/pinned-pi-public.js +93 -0
- package/bin/release-cleanup.js +8 -0
- package/bin/supervisor.js +2 -2
- package/bin/sync-pi-tui-proxy.js +7 -0
- package/bin/ui.js +67 -22
- package/bin/update-recovery.js +343 -0
- package/bin/warmup.js +28 -0
- package/dist/app/session-shell/clipboard-diagnostics.d.ts +16 -0
- package/dist/app/session-shell/clipboard-diagnostics.js +65 -0
- package/dist/app/session-shell/clipboard-image.d.ts +11 -0
- package/dist/app/session-shell/clipboard-image.js +38 -0
- package/dist/app/session-shell/editor-hyperlink-budget.d.ts +9 -0
- package/dist/app/session-shell/editor-hyperlink-budget.js +23 -0
- package/dist/app/session-shell/helper-pool.d.ts +33 -0
- package/dist/app/session-shell/helper-pool.js +98 -0
- package/dist/app/session-shell/image-preparation-client.d.ts +20 -0
- package/dist/app/session-shell/image-preparation-client.js +145 -0
- package/dist/app/session-shell/image-preparation.d.ts +18 -0
- package/dist/app/session-shell/image-preparation.js +126 -0
- package/dist/app/session-shell/image-source.d.ts +13 -0
- package/dist/app/session-shell/image-source.js +171 -0
- package/dist/app/session-shell/image-worker.d.ts +17 -0
- package/dist/app/session-shell/image-worker.js +23 -0
- package/dist/app/session-shell/index.d.ts +7 -0
- package/dist/app/session-shell/index.js +4 -0
- package/dist/app/session-shell/paste-executor.d.ts +18 -0
- package/dist/app/session-shell/paste-executor.js +253 -0
- package/dist/app/session-shell/paste-helper.js +173 -0
- package/dist/app/session-shell/paste-preparation-client.d.ts +31 -0
- package/dist/app/session-shell/paste-preparation-client.js +170 -0
- package/dist/app/session-shell/paste-protocol.d.ts +78 -0
- package/dist/app/session-shell/paste-protocol.js +18 -0
- package/dist/app/session-shell/paste-text-preparation.d.ts +6 -0
- package/dist/app/session-shell/paste-text-preparation.js +134 -0
- package/dist/app/session-shell/paste-text-worker.js +12 -0
- package/dist/app/session-shell/paste-types.d.ts +17 -0
- package/dist/app/session-shell/path-chip-presentation.d.ts +7 -0
- package/dist/app/session-shell/path-chip-presentation.js +24 -0
- package/dist/app/session-shell/prompt-chips.d.ts +76 -0
- package/dist/app/session-shell/prompt-chips.js +507 -0
- package/dist/app/session-shell/prompt-history-controller.d.ts +36 -0
- package/dist/app/session-shell/prompt-history-controller.js +170 -0
- package/dist/app/session-shell/prompt-suggestion-controller.d.ts +37 -0
- package/dist/app/session-shell/prompt-suggestion-controller.js +219 -0
- package/dist/app/session-shell/quit-outro-effects.d.ts +29 -0
- package/dist/app/session-shell/quit-outro-effects.js +242 -0
- package/dist/app/session-shell/quit-outro.d.ts +38 -0
- package/dist/app/session-shell/quit-outro.js +98 -0
- package/dist/app/session-shell/response-copy-coordinator.d.ts +27 -0
- package/dist/app/session-shell/response-copy-coordinator.js +187 -0
- package/dist/app/session-shell/response-copy-helper.js +122 -0
- package/dist/app/session-shell/response-copy-protocol.d.ts +56 -0
- package/dist/app/session-shell/response-copy-protocol.js +5 -0
- package/dist/app/session-shell/response-copy-transport.d.ts +39 -0
- package/dist/app/session-shell/response-copy-transport.js +217 -0
- package/dist/app/session-shell/session-shell-root.d.ts +275 -0
- package/dist/app/session-shell/session-shell-root.js +1376 -0
- package/dist/app/session-shell/session-shell.d.ts +66 -0
- package/dist/app/session-shell/session-shell.js +2116 -0
- package/dist/app/session-shell/session-viewport-controller.d.ts +61 -0
- package/dist/app/session-shell/session-viewport-controller.js +597 -0
- package/dist/app/session-shell/stream-presentation-coalescer.d.ts +29 -0
- package/dist/app/session-shell/stream-presentation-coalescer.js +79 -0
- package/dist/app/session-shell/system-clipboard.d.ts +20 -0
- package/dist/app/session-shell/system-clipboard.js +159 -0
- package/dist/app/session-shell/text-paste.d.ts +5 -0
- package/dist/app/session-shell/text-paste.js +16 -0
- package/dist/cli/capabilities.d.ts +6 -0
- package/dist/cli/capabilities.js +7 -0
- package/dist/cli/dispatch.d.ts +46 -0
- package/dist/cli/dispatch.js +261 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/package-messages.d.ts +26 -0
- package/dist/cli/package-messages.js +71 -0
- package/dist/cli/packages.d.ts +32 -0
- package/dist/cli/packages.js +81 -0
- package/dist/cli/version-stats.d.ts +22 -0
- package/dist/cli/version-stats.js +112 -0
- package/dist/composition/index.d.ts +2 -0
- package/dist/composition/index.js +2 -0
- package/dist/composition/owned-ui.d.ts +37 -0
- package/dist/composition/owned-ui.js +154 -0
- package/dist/composition/settings-route-host.d.ts +20 -0
- package/dist/composition/settings-route-host.js +141 -0
- package/dist/contracts/agent-engine/capability-ports.d.ts +95 -0
- package/dist/contracts/agent-engine/domain-validation.js +107 -0
- package/dist/contracts/agent-engine/domain.d.ts +138 -0
- package/dist/contracts/agent-engine/index.d.ts +11 -0
- package/dist/contracts/agent-engine/index.js +6 -0
- package/dist/contracts/agent-engine/package-ports.d.ts +60 -0
- package/dist/contracts/agent-engine/ports.js +1 -0
- package/dist/contracts/owned-ui/extension-ui.d.ts +310 -0
- package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
- package/dist/contracts/owned-ui/image-attachments.js +67 -0
- package/dist/contracts/owned-ui/index.d.ts +12 -0
- package/dist/contracts/owned-ui/index.js +8 -0
- package/dist/contracts/owned-ui/model.d.ts +374 -0
- package/dist/contracts/owned-ui/prompt-history.d.ts +55 -0
- package/dist/contracts/owned-ui/prompt-history.js +23 -0
- package/dist/contracts/owned-ui/prompt-suggestions.d.ts +3 -0
- package/dist/contracts/owned-ui/prompt-suggestions.js +44 -0
- package/dist/contracts/owned-ui/suggestion-diagnostics.d.ts +22 -0
- package/dist/contracts/owned-ui/suggestion-diagnostics.js +9 -0
- package/dist/contracts/owned-ui/transcript-lifecycle.d.ts +5 -0
- package/dist/contracts/owned-ui/transcript-lifecycle.js +33 -0
- package/dist/contracts/owned-ui/validation.d.ts +15 -0
- package/dist/contracts/owned-ui/validation.js +523 -0
- package/dist/contracts/presentation/index.d.ts +104 -0
- package/dist/features/launch/development-launch.js +36 -0
- package/dist/features/launch/index.d.ts +12 -0
- package/dist/features/launch/index.js +6 -0
- package/dist/features/launch/intent.d.ts +12 -0
- package/dist/features/launch/intent.js +8 -0
- package/dist/features/launch/prepare-launch.d.ts +11 -0
- package/dist/features/launch/prepare-launch.js +14 -0
- package/dist/features/launch/profile-paths.d.ts +16 -0
- package/dist/features/launch/profile-paths.js +36 -0
- package/dist/features/launch/runtime-selection.d.ts +16 -0
- package/dist/features/launch/runtime-selection.js +13 -0
- package/dist/features/owned-ui/index.d.ts +9 -0
- package/dist/features/owned-ui/index.js +6 -0
- package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
- package/dist/features/owned-ui/project-trust-prompt.js +149 -0
- package/dist/features/owned-ui/reference-routes.d.ts +6 -0
- package/dist/features/owned-ui/reference-routes.js +6 -0
- package/dist/features/owned-ui/reference-screen-app.d.ts +37 -0
- package/dist/features/owned-ui/reference-screen-app.js +232 -0
- package/dist/features/owned-ui/run.d.ts +17 -0
- package/dist/features/owned-ui/run.js +64 -0
- package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
- package/dist/features/owned-ui/session-fork-prompt.js +34 -0
- package/dist/features/owned-ui/settings-app.d.ts +21 -0
- package/dist/features/owned-ui/settings-app.js +802 -0
- package/dist/features/owned-ui/settings-route.d.ts +2 -0
- package/dist/features/owned-ui/settings-route.js +2 -0
- package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
- package/dist/features/prompt-history/image-sidecar.js +130 -0
- package/dist/features/prompt-history/index.d.ts +4 -0
- package/dist/features/prompt-history/index.js +3 -0
- package/dist/features/prompt-history/paths.d.ts +5 -0
- package/dist/features/prompt-history/paths.js +17 -0
- package/dist/features/prompt-history/service.d.ts +54 -0
- package/dist/features/prompt-history/service.js +425 -0
- package/dist/features/prompt-history/store.d.ts +16 -0
- package/dist/features/prompt-history/store.js +219 -0
- package/dist/features/prompt-history/worker.d.ts +9 -0
- package/dist/features/prompt-history/worker.js +45 -0
- package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
- package/dist/features/prompt-suggestions/diagnostics.js +82 -0
- package/dist/features/prompt-suggestions/index.d.ts +2 -0
- package/dist/features/prompt-suggestions/index.js +1 -0
- package/dist/foundation/launch-context/index.d.ts +59 -0
- package/dist/foundation/launch-context/index.js +136 -0
- package/dist/foundation/launch-guardian/index.d.ts +2 -0
- package/dist/foundation/launch-guardian/index.js +1 -0
- package/dist/foundation/launch-guardian/main.d.ts +33 -0
- package/dist/foundation/launch-guardian/main.js +180 -0
- package/dist/foundation/lifecycle/commands.js +1 -0
- package/dist/foundation/lifecycle/index.d.ts +11 -0
- package/dist/foundation/lifecycle/index.js +5 -0
- package/dist/foundation/lifecycle/model.d.ts +64 -0
- package/dist/foundation/lifecycle/model.js +40 -0
- package/dist/foundation/lifecycle/paths.d.ts +30 -0
- package/dist/foundation/lifecycle/paths.js +70 -0
- package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
- package/dist/foundation/lifecycle/session-selection.js +39 -0
- package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
- package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
- package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
- package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
- package/dist/foundation/process-containment/index.d.ts +8 -0
- package/dist/foundation/process-containment/index.js +6 -0
- package/dist/foundation/process-containment/linux-process-inspector.d.ts +7 -0
- package/dist/foundation/process-containment/linux-process-inspector.js +27 -0
- package/dist/foundation/process-containment/native-guardian-containment.d.ts +17 -0
- package/dist/foundation/process-containment/native-guardian-containment.js +140 -0
- package/dist/foundation/process-containment/windows-process-inspector.d.ts +19 -0
- package/dist/foundation/process-containment/windows-process-inspector.js +56 -0
- package/dist/foundation/protocol/client.d.ts +18 -0
- package/dist/foundation/protocol/client.js +130 -0
- package/dist/foundation/protocol/index.d.ts +3 -0
- package/dist/foundation/protocol/index.js +2 -0
- package/dist/foundation/protocol/messages.d.ts +90 -0
- package/dist/foundation/protocol/messages.js +100 -0
- package/dist/foundation/release/bootstrap.d.ts +51 -0
- package/dist/foundation/release/bootstrap.js +427 -0
- package/dist/foundation/release/cohort-state.d.ts +157 -0
- package/dist/foundation/release/cohort-state.js +472 -0
- package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
- package/dist/foundation/release/dependency-certification-retention.js +88 -0
- package/dist/foundation/release/dependency-certification.d.ts +24 -0
- package/dist/foundation/release/dependency-certification.js +266 -0
- package/dist/foundation/release/dependency-layer.d.ts +78 -0
- package/dist/foundation/release/dependency-layer.js +466 -0
- package/dist/foundation/release/endpoints.d.ts +24 -0
- package/dist/foundation/release/endpoints.js +134 -0
- package/dist/foundation/release/immutable-platform.d.ts +6 -0
- package/dist/foundation/release/immutable-platform.js +13 -0
- package/dist/foundation/release/index.d.ts +32 -0
- package/dist/foundation/release/index.js +17 -0
- package/dist/foundation/release/release-gc.d.ts +71 -0
- package/dist/foundation/release/release-gc.js +764 -0
- package/dist/foundation/release/release-store.d.ts +49 -0
- package/dist/foundation/release/release-store.js +235 -0
- package/dist/foundation/release/release.d.ts +43 -0
- package/dist/foundation/release/release.js +215 -0
- package/dist/foundation/release/restart-certification.d.ts +68 -0
- package/dist/foundation/release/restart-certification.js +227 -0
- package/dist/foundation/release/types.d.ts +11 -0
- package/dist/foundation/release/types.js +1 -0
- package/dist/foundation/release/update-activation.d.ts +72 -0
- package/dist/foundation/release/update-activation.js +204 -0
- package/dist/foundation/release/update-launch.d.ts +6 -0
- package/dist/foundation/release/update-launch.js +17 -0
- package/dist/foundation/release/update-recovery.d.ts +76 -0
- package/dist/foundation/release/update-recovery.js +356 -0
- package/dist/foundation/release/update-transaction.d.ts +42 -0
- package/dist/foundation/release/update-transaction.js +101 -0
- package/dist/foundation/release/update.d.ts +114 -0
- package/dist/foundation/release/update.js +633 -0
- package/dist/foundation/release/warmup.d.ts +3 -0
- package/dist/foundation/release/warmup.js +47 -0
- package/dist/foundation/startup/index.d.ts +4 -0
- package/dist/foundation/startup/index.js +2 -0
- package/dist/foundation/startup/startup-budget.d.ts +46 -0
- package/dist/foundation/startup/startup-budget.js +42 -0
- package/dist/foundation/startup/startup-descriptor.js +34 -0
- package/dist/foundation/startup/startup-runtime.d.ts +27 -0
- package/dist/foundation/startup/startup-runtime.js +128 -0
- package/dist/foundation/storage/control-store.d.ts +18 -0
- package/dist/foundation/storage/control-store.js +342 -0
- package/dist/foundation/storage/index.d.ts +1 -0
- package/dist/foundation/storage/index.js +1 -0
- package/dist/foundation/supervision/index.d.ts +3 -0
- package/dist/foundation/supervision/index.js +3 -0
- package/dist/foundation/supervision/main.d.ts +1 -0
- package/dist/foundation/supervision/main.js +84 -0
- package/dist/foundation/supervision/paths.d.ts +1 -0
- package/dist/foundation/supervision/paths.js +1 -0
- package/dist/foundation/supervision/server.d.ts +46 -0
- package/dist/foundation/supervision/server.js +573 -0
- package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
- package/dist/foundation/terminal-cleanup/fatal-exit.js +87 -0
- package/dist/foundation/terminal-cleanup/index.d.ts +3 -0
- package/dist/foundation/terminal-cleanup/index.js +2 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
- package/dist/integrations/pi/components/components.d.ts +4 -0
- package/dist/integrations/pi/components/components.js +64 -0
- package/dist/integrations/pi/components/conformance.d.ts +18 -0
- package/dist/integrations/pi/components/conformance.js +70 -0
- package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
- package/dist/integrations/pi/components/editor-interaction.js +1 -0
- package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
- package/dist/integrations/pi/components/history-editor-loader.js +5 -0
- package/dist/integrations/pi/components/index.d.ts +23 -0
- package/dist/integrations/pi/components/index.js +14 -0
- package/dist/integrations/pi/components/models-dialog.d.ts +55 -0
- package/dist/integrations/pi/components/models-dialog.js +310 -0
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
- package/dist/integrations/pi/components/owned-editor-ux.js +1094 -0
- package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
- package/dist/integrations/pi/components/path-word-ranges.js +37 -0
- package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
- package/dist/integrations/pi/components/prompt-input-port.js +1 -0
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +167 -0
- package/dist/integrations/pi/components/resources/builtin-themes.js +168 -0
- package/dist/integrations/pi/components/shell-components.d.ts +7 -0
- package/dist/integrations/pi/components/shell-components.js +7 -0
- package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +21 -0
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +322 -0
- package/dist/integrations/pi/components/shell-extension-ui.d.ts +35 -0
- package/dist/integrations/pi/components/shell-extension-ui.js +280 -0
- package/dist/integrations/pi/components/shell-footer-status.d.ts +7 -0
- package/dist/integrations/pi/components/shell-footer-status.js +249 -0
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +53 -0
- package/dist/integrations/pi/components/shell-presenters-info.js +134 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.js +433 -0
- package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +133 -0
- package/dist/integrations/pi/components/shell-selectors-dialogs.js +255 -0
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +225 -0
- package/dist/integrations/pi/components/shell-shared-facade.js +92 -0
- package/dist/integrations/pi/components/skills-command.d.ts +47 -0
- package/dist/integrations/pi/components/skills-command.js +118 -0
- package/dist/integrations/pi/components/skills-dialog.d.ts +9 -0
- package/dist/integrations/pi/components/skills-dialog.js +112 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +17 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +49 -0
- package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
- package/dist/integrations/pi/components/tool-image-presentation.js +83 -0
- package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
- package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
- package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
- package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +445 -0
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +370 -0
- package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
- package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +13 -0
- package/dist/integrations/pi/components/upstream/components/daxnuts.d.ts +29 -0
- package/dist/integrations/pi/components/upstream/components/daxnuts.js +146 -0
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.d.ts +4 -0
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +48 -0
- package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +20 -0
- package/dist/integrations/pi/components/upstream/components/extension-editor.js +84 -0
- package/dist/integrations/pi/components/upstream/components/mermaid.js +81 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +52 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +222 -0
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +59 -0
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +346 -0
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +11 -0
- package/dist/integrations/pi/components/upstream/components/session-footer.js +123 -0
- package/dist/integrations/pi/components/upstream/components/session-selector-search.js +161 -0
- package/dist/integrations/pi/components/upstream/components/session-selector.d.ts +95 -0
- package/dist/integrations/pi/components/upstream/components/session-selector.js +893 -0
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +21 -0
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +46 -0
- package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +35 -0
- package/dist/integrations/pi/components/upstream/components/status-indicator.js +69 -0
- package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +67 -0
- package/dist/integrations/pi/components/upstream/components/tool-execution.js +365 -0
- package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +101 -0
- package/dist/integrations/pi/components/upstream/components/tree-selector.js +1275 -0
- package/dist/integrations/pi/components/upstream/components/trust-selector.d.ts +33 -0
- package/dist/integrations/pi/components/upstream/components/trust-selector.js +81 -0
- package/dist/integrations/pi/components/upstream/external-editor.js +43 -0
- package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +289 -0
- package/dist/integrations/pi/components/upstream/history/editor-core.js +2144 -0
- package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +35 -0
- package/dist/integrations/pi/components/upstream/history/kill-ring.js +51 -0
- package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
- package/dist/integrations/pi/components/upstream/history/printable-key.js +43 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +14 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +31 -0
- package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +25 -0
- package/dist/integrations/pi/components/upstream/history/undo-stack.js +39 -0
- package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
- package/dist/integrations/pi/components/upstream/history/word-navigation.js +103 -0
- package/dist/integrations/pi/components/upstream/model-search.d.ts +18 -0
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +33 -0
- package/dist/integrations/pi/components/upstream/theme/theme-controller.js +114 -0
- package/dist/integrations/pi/components/upstream/theme/theme.d.ts +61 -0
- package/dist/integrations/pi/components/upstream/theme/theme.js +337 -0
- package/dist/integrations/pi/engine/adapter.d.ts +139 -0
- package/dist/integrations/pi/engine/adapter.js +660 -0
- package/dist/integrations/pi/engine/changelog.d.ts +2 -0
- package/dist/integrations/pi/engine/changelog.js +63 -0
- package/dist/integrations/pi/engine/command-dispatch.d.ts +41 -0
- package/dist/integrations/pi/engine/command-dispatch.js +125 -0
- package/dist/integrations/pi/engine/compaction-progress.d.ts +28 -0
- package/dist/integrations/pi/engine/compaction-progress.js +96 -0
- package/dist/integrations/pi/engine/conformance.d.ts +39 -0
- package/dist/integrations/pi/engine/conformance.js +140 -0
- package/dist/integrations/pi/engine/event-delivery.d.ts +100 -0
- package/dist/integrations/pi/engine/event-delivery.js +184 -0
- package/dist/integrations/pi/engine/extension-ui-binding.d.ts +35 -0
- package/dist/integrations/pi/engine/extension-ui-binding.js +81 -0
- package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
- package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
- package/dist/integrations/pi/engine/index.d.ts +18 -0
- package/dist/integrations/pi/engine/index.js +10 -0
- package/dist/integrations/pi/engine/message-values.d.ts +29 -0
- package/dist/integrations/pi/engine/message-values.js +168 -0
- package/dist/integrations/pi/engine/package-integration.d.ts +13 -0
- package/dist/integrations/pi/engine/package-integration.js +118 -0
- package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
- package/dist/integrations/pi/engine/pending-delivery.js +156 -0
- package/dist/integrations/pi/engine/pi-settings-metadata.json +385 -0
- package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
- package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +30 -0
- package/dist/integrations/pi/engine/prompt-suggestions.js +102 -0
- package/dist/integrations/pi/engine/provider-authentication.d.ts +34 -0
- package/dist/integrations/pi/engine/provider-authentication.js +209 -0
- package/dist/integrations/pi/engine/resource-catalog.d.ts +50 -0
- package/dist/integrations/pi/engine/resource-catalog.js +299 -0
- package/dist/integrations/pi/engine/resources/changelog.json +12 -0
- package/dist/integrations/pi/engine/runtime-integration.d.ts +53 -0
- package/dist/integrations/pi/engine/runtime-integration.js +118 -0
- package/dist/integrations/pi/engine/session-events.d.ts +48 -0
- package/dist/integrations/pi/engine/session-events.js +223 -0
- package/dist/integrations/pi/engine/session-integration.d.ts +67 -0
- package/dist/integrations/pi/engine/session-integration.js +195 -0
- package/dist/integrations/pi/engine/session-runtime.d.ts +84 -0
- package/dist/integrations/pi/engine/session-runtime.js +249 -0
- package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
- package/dist/integrations/pi/engine/session-selection.js +90 -0
- package/dist/integrations/pi/engine/settings-bridge.d.ts +121 -0
- package/dist/integrations/pi/engine/settings-bridge.js +514 -0
- package/dist/integrations/pi/engine/settings-metadata.d.ts +31 -0
- package/dist/integrations/pi/engine/settings-metadata.js +67 -0
- package/dist/integrations/pi/engine/settings-port.d.ts +42 -0
- package/dist/integrations/pi/engine/settings-port.js +353 -0
- package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
- package/dist/integrations/pi/engine/tool-rendering.js +145 -0
- package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
- package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
- package/dist/integrations/pi/engine/transcript-projection.d.ts +39 -0
- package/dist/integrations/pi/engine/transcript-projection.js +405 -0
- package/dist/integrations/pi/engine/usage-view.d.ts +4 -0
- package/dist/integrations/pi/engine/usage-view.js +56 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
- package/dist/integrations/pi/engine/workflow-contexts.d.ts +66 -0
- package/dist/integrations/pi/engine/workflow-contexts.js +360 -0
- package/dist/integrations/pi/engine/workflow-runner.d.ts +60 -0
- package/dist/integrations/pi/engine/workflow-runner.js +533 -0
- package/dist/integrations/pi/engine/workflow-support.d.ts +33 -0
- package/dist/integrations/pi/engine/workflow-support.js +352 -0
- package/dist/integrations/pi/engine/workflows.d.ts +275 -0
- package/dist/integrations/pi/engine/workflows.js +71 -0
- package/dist/integrations/pi/startup-public.d.ts +2 -0
- package/dist/integrations/pi/startup-public.js +2223 -0
- package/dist/integrations/pi/startup-public.manifest.json +12502 -0
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +56 -0
- package/dist/integrations/pi/tui-runtime/adapter.js +783 -0
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +156 -0
- package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +88 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +433 -0
- package/dist/integrations/pi/tui-runtime/index.d.ts +9 -0
- package/dist/integrations/pi/tui-runtime/index.js +5 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +13 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.js +57 -0
- package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
- package/dist/integrations/pi/tui-runtime/overlay-geometry.js +158 -0
- package/dist/integrations/pi/tui-runtime/presentation-adapter.d.ts +4 -0
- package/dist/integrations/pi/tui-runtime/presentation-adapter.js +48 -0
- package/dist/native/darwin-arm64/manifest.json +4 -4
- package/dist/native/darwin-arm64/process-guardian +0 -0
- package/dist/native/linux-x64/manifest.json +3 -3
- package/dist/native/linux-x64/process-guardian +0 -0
- package/dist/native/win32-x64/manifest.json +3 -3
- package/dist/native/win32-x64/process-guardian.exe +0 -0
- package/dist/product-identity.d.ts +37 -0
- package/dist/product-identity.js +119 -0
- package/dist/product-identity.json +85 -0
- package/dist/runtime-payload-inventory.json +127148 -0
- package/dist/ui/apps/contracts.d.ts +72 -0
- package/dist/ui/apps/host.d.ts +42 -0
- package/dist/ui/apps/host.js +156 -0
- package/dist/ui/apps/index.d.ts +5 -0
- package/dist/ui/apps/index.js +3 -0
- package/dist/ui/apps/registry.d.ts +12 -0
- package/dist/ui/apps/registry.js +33 -0
- package/dist/ui/components/dialog-panel.js +49 -0
- package/dist/ui/components/frame.d.ts +22 -0
- package/dist/ui/components/frame.js +55 -0
- package/dist/ui/components/index.d.ts +47 -0
- package/dist/ui/components/index.js +25 -0
- package/dist/ui/components/line-input.d.ts +68 -0
- package/dist/ui/components/line-input.js +224 -0
- package/dist/ui/components/list-view.d.ts +60 -0
- package/dist/ui/components/list-view.js +82 -0
- package/dist/ui/components/mouse.d.ts +25 -0
- package/dist/ui/components/mouse.js +70 -0
- package/dist/ui/components/progress-status.d.ts +2 -0
- package/dist/ui/components/progress-status.js +4 -0
- package/dist/ui/components/prompt-input.d.ts +32 -0
- package/dist/ui/components/prompt-input.js +51 -0
- package/dist/ui/components/scrollbar.d.ts +88 -0
- package/dist/ui/components/scrollbar.js +137 -0
- package/dist/ui/components/selection-copy.d.ts +24 -0
- package/dist/ui/components/selection-copy.js +39 -0
- package/dist/ui/components/shortcuts.d.ts +58 -0
- package/dist/ui/components/shortcuts.js +82 -0
- package/dist/ui/components/spans.d.ts +28 -0
- package/dist/ui/components/spans.js +266 -0
- package/dist/ui/components/submitted-prompt.d.ts +23 -0
- package/dist/ui/components/submitted-prompt.js +50 -0
- package/dist/ui/components/surface.d.ts +20 -0
- package/dist/ui/components/surface.js +44 -0
- package/dist/ui/components/text-selection.d.ts +62 -0
- package/dist/ui/components/text-selection.js +210 -0
- package/dist/ui/components/text.d.ts +38 -0
- package/dist/ui/components/text.js +185 -0
- package/dist/ui/components/transcript-viewport.d.ts +173 -0
- package/dist/ui/components/transcript-viewport.js +753 -0
- package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
- package/dist/ui/components/visible-hyperlinks.js +97 -0
- package/dist/ui/settings/declarations.d.ts +127 -0
- package/dist/ui/settings/declarations.js +124 -0
- package/dist/ui/settings/index.d.ts +10 -0
- package/dist/ui/settings/index.js +5 -0
- package/dist/ui/settings/manager.d.ts +54 -0
- package/dist/ui/settings/manager.js +256 -0
- package/dist/ui/settings/migrations.d.ts +13 -0
- package/dist/ui/settings/migrations.js +92 -0
- package/dist/ui/settings/sections.d.ts +52 -0
- package/dist/ui/settings/sections.js +112 -0
- package/docs/architecture/boundaries.md +17 -13
- package/docs/architecture/code-documentation.md +77 -0
- package/docs/architecture/history-editor-provenance.md +100 -0
- package/docs/architecture/internal-naming.md +93 -0
- package/docs/architecture/process-guardian-provenance.md +3 -1
- package/docs/architecture/project-structure.md +69 -30
- package/docs/architecture/prompt-suggestions.md +68 -0
- package/docs/architecture/resource-and-data-policy.md +28 -2
- package/docs/architecture/response-copy-delivery.md +85 -0
- package/docs/architecture/terminal-host-proof-gate.md +1 -1
- package/docs/architecture/terminal-host-spike-evidence.md +1 -1
- package/docs/architecture/tool-image-presentation.md +62 -0
- package/docs/architecture/toolchain.md +32 -10
- package/docs/architecture/ui-reference-provenance.md +61 -6
- package/docs/ci-release-runbook.md +256 -79
- package/docs/features/launch-profiles.md +24 -17
- package/docs/features/modal-content-interaction.md +38 -0
- package/docs/features/prompt-history.md +149 -0
- package/docs/local-worktree-cleanup.md +212 -0
- package/docs/manual-code-streaming-cleanup.md +88 -0
- package/docs/manual-ghost-link-baseline.md +89 -0
- package/docs/manual-launch-instance-acceptance.md +12 -35
- package/docs/manual-owned-ui-checkpoint.md +79 -0
- package/docs/manual-pi-boundary-candidate.md +4 -5
- package/docs/manual-terminal-colour-check.md +4 -3
- package/docs/openspec-archive-automation.md +259 -0
- package/docs/repository-governance-live-acceptance.md +77 -0
- package/docs/validation.md +100 -0
- package/package.json +52 -34
- package/dist/src/cli/capabilities.d.ts +0 -15
- package/dist/src/cli/capabilities.js +0 -7
- package/dist/src/cli/dispatch.d.ts +0 -32
- package/dist/src/cli/dispatch.js +0 -142
- package/dist/src/cli/index.d.ts +0 -5
- package/dist/src/cli/index.js +0 -5
- package/dist/src/cli/packages.d.ts +0 -23
- package/dist/src/cli/packages.js +0 -84
- package/dist/src/cli/version-stats.d.ts +0 -16
- package/dist/src/cli/version-stats.js +0 -72
- package/dist/src/cli/version.d.ts +0 -2
- package/dist/src/cli/version.js +0 -23
- package/dist/src/composition/index.d.ts +0 -48
- package/dist/src/composition/index.js +0 -258
- package/dist/src/features/launch/development-launch.js +0 -28
- package/dist/src/features/launch/index.d.ts +0 -7
- package/dist/src/features/launch/index.js +0 -7
- package/dist/src/features/launch/intent.d.ts +0 -7
- package/dist/src/features/launch/intent.js +0 -4
- package/dist/src/features/launch/prepare-launch.d.ts +0 -13
- package/dist/src/features/launch/prepare-launch.js +0 -21
- package/dist/src/features/launch/profile-paths.d.ts +0 -15
- package/dist/src/features/launch/profile-paths.js +0 -31
- package/dist/src/features/launch/profiles.d.ts +0 -12
- package/dist/src/features/launch/profiles.js +0 -26
- package/dist/src/features/launch/runtime-selection.d.ts +0 -19
- package/dist/src/features/launch/runtime-selection.js +0 -13
- package/dist/src/features/owned-ui/customization.d.ts +0 -38
- package/dist/src/features/owned-ui/customization.js +0 -108
- package/dist/src/features/owned-ui/diagnostics.d.ts +0 -33
- package/dist/src/features/owned-ui/diagnostics.js +0 -94
- package/dist/src/features/owned-ui/index.d.ts +0 -4
- package/dist/src/features/owned-ui/index.js +0 -4
- package/dist/src/features/owned-ui/run.d.ts +0 -11
- package/dist/src/features/owned-ui/run.js +0 -15
- package/dist/src/features/owned-ui/settings-app.d.ts +0 -22
- package/dist/src/features/owned-ui/settings-app.js +0 -633
- package/dist/src/features/workspace/capabilities.d.ts +0 -31
- package/dist/src/features/workspace/capabilities.js +0 -75
- package/dist/src/features/workspace/index.d.ts +0 -6
- package/dist/src/features/workspace/index.js +0 -6
- package/dist/src/features/workspace/presentation.d.ts +0 -30
- package/dist/src/features/workspace/presentation.js +0 -70
- package/dist/src/features/workspace/reconciliation.d.ts +0 -15
- package/dist/src/features/workspace/reconciliation.js +0 -82
- package/dist/src/features/workspace/reducer.d.ts +0 -42
- package/dist/src/features/workspace/reducer.js +0 -213
- package/dist/src/features/workspace/router.d.ts +0 -31
- package/dist/src/features/workspace/router.js +0 -124
- package/dist/src/features/workspace/store.d.ts +0 -17
- package/dist/src/features/workspace/store.js +0 -54
- package/dist/src/foundation/agent-engine-contracts/capability-ports.d.ts +0 -95
- package/dist/src/foundation/agent-engine-contracts/domain-validation.js +0 -89
- package/dist/src/foundation/agent-engine-contracts/domain.d.ts +0 -116
- package/dist/src/foundation/agent-engine-contracts/index.d.ts +0 -8
- package/dist/src/foundation/agent-engine-contracts/index.js +0 -8
- package/dist/src/foundation/agent-engine-contracts/package-ports.d.ts +0 -54
- package/dist/src/foundation/launch-guardian/index.d.ts +0 -1
- package/dist/src/foundation/launch-guardian/index.js +0 -1
- package/dist/src/foundation/launch-guardian/main.d.ts +0 -31
- package/dist/src/foundation/launch-guardian/main.js +0 -165
- package/dist/src/foundation/lifecycle/index.d.ts +0 -4
- package/dist/src/foundation/lifecycle/index.js +0 -4
- package/dist/src/foundation/lifecycle/model.d.ts +0 -64
- package/dist/src/foundation/lifecycle/model.js +0 -40
- package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
- package/dist/src/foundation/lifecycle/paths.js +0 -42
- package/dist/src/foundation/native-host-protocol/codec.d.ts +0 -11
- package/dist/src/foundation/native-host-protocol/codec.js +0 -56
- package/dist/src/foundation/native-host-protocol/evidence.d.ts +0 -67
- package/dist/src/foundation/native-host-protocol/evidence.js +0 -141
- package/dist/src/foundation/native-host-protocol/index.d.ts +0 -4
- package/dist/src/foundation/native-host-protocol/index.js +0 -4
- package/dist/src/foundation/native-host-protocol/messages.d.ts +0 -56
- package/dist/src/foundation/native-host-protocol/messages.js +0 -149
- package/dist/src/foundation/native-host-protocol/proof-gate.d.ts +0 -13
- package/dist/src/foundation/native-host-protocol/proof-gate.js +0 -33
- package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts +0 -302
- package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
- package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
- package/dist/src/foundation/owned-ui-contracts/model.d.ts +0 -241
- package/dist/src/foundation/owned-ui-contracts/validation.d.ts +0 -11
- package/dist/src/foundation/owned-ui-contracts/validation.js +0 -395
- package/dist/src/foundation/owned-ui-settings/declarations.d.ts +0 -13
- package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
- package/dist/src/foundation/owned-ui-settings/index.d.ts +0 -6
- package/dist/src/foundation/owned-ui-settings/index.js +0 -6
- package/dist/src/foundation/owned-ui-settings/migrations.d.ts +0 -13
- package/dist/src/foundation/owned-ui-settings/migrations.js +0 -28
- package/dist/src/foundation/owned-ui-settings/sections.d.ts +0 -70
- package/dist/src/foundation/owned-ui-settings/sections.js +0 -93
- package/dist/src/foundation/owned-ui-settings/session.d.ts +0 -44
- package/dist/src/foundation/owned-ui-settings/session.js +0 -145
- package/dist/src/foundation/owned-ui-settings/store.d.ts +0 -28
- package/dist/src/foundation/owned-ui-settings/store.js +0 -90
- package/dist/src/foundation/pi-component-adapter/components.d.ts +0 -4
- package/dist/src/foundation/pi-component-adapter/components.js +0 -64
- package/dist/src/foundation/pi-component-adapter/conformance.d.ts +0 -17
- package/dist/src/foundation/pi-component-adapter/conformance.js +0 -69
- package/dist/src/foundation/pi-component-adapter/index.d.ts +0 -13
- package/dist/src/foundation/pi-component-adapter/index.js +0 -13
- package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.d.ts +0 -165
- package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.js +0 -166
- package/dist/src/foundation/pi-component-adapter/shell-components.d.ts +0 -6
- package/dist/src/foundation/pi-component-adapter/shell-components.js +0 -6
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.d.ts +0 -11
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts +0 -35
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js +0 -279
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts +0 -7
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.js +0 -189
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js +0 -429
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts +0 -113
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +0 -235
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js +0 -87
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts +0 -422
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js +0 -296
- package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts +0 -10
- package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts +0 -17
- package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js +0 -51
- package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts +0 -22
- package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js +0 -142
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts +0 -4
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
- package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts +0 -17
- package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js +0 -81
- package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts +0 -24
- package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js +0 -105
- package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts +0 -2
- package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js +0 -18
- package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js +0 -77
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
- package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts +0 -55
- package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js +0 -342
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.d.ts +0 -10
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.js +0 -120
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js +0 -159
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts +0 -95
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js +0 -889
- package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts +0 -19
- package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js +0 -44
- package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts +0 -30
- package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js +0 -59
- package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts +0 -98
- package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js +0 -1272
- package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts +0 -33
- package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js +0 -76
- package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js +0 -39
- package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts +0 -15
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts +0 -25
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js +0 -117
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts +0 -61
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js +0 -326
- package/dist/src/foundation/pi-engine-adapter/adapter.d.ts +0 -164
- package/dist/src/foundation/pi-engine-adapter/adapter.js +0 -2367
- package/dist/src/foundation/pi-engine-adapter/conformance.d.ts +0 -37
- package/dist/src/foundation/pi-engine-adapter/conformance.js +0 -130
- package/dist/src/foundation/pi-engine-adapter/index.d.ts +0 -10
- package/dist/src/foundation/pi-engine-adapter/index.js +0 -10
- package/dist/src/foundation/pi-engine-adapter/model-auth-integration.d.ts +0 -30
- package/dist/src/foundation/pi-engine-adapter/model-auth-integration.js +0 -61
- package/dist/src/foundation/pi-engine-adapter/package-integration.d.ts +0 -13
- package/dist/src/foundation/pi-engine-adapter/package-integration.js +0 -112
- package/dist/src/foundation/pi-engine-adapter/pi-settings-metadata.json +0 -374
- package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.d.ts +0 -31
- package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.js +0 -80
- package/dist/src/foundation/pi-engine-adapter/runtime-integration.d.ts +0 -35
- package/dist/src/foundation/pi-engine-adapter/runtime-integration.js +0 -67
- package/dist/src/foundation/pi-engine-adapter/session-integration.d.ts +0 -43
- package/dist/src/foundation/pi-engine-adapter/session-integration.js +0 -97
- package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
- package/dist/src/foundation/pi-engine-adapter/settings-integration.js +0 -233
- package/dist/src/foundation/pi-engine-adapter/workflow-controllers.d.ts +0 -20
- package/dist/src/foundation/pi-engine-adapter/workflow-controllers.js +0 -48
- package/dist/src/foundation/pi-engine-adapter/workflows.d.ts +0 -173
- package/dist/src/foundation/pi-engine-adapter/workflows.js +0 -60
- package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
- package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
- package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
- package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
- package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts +0 -39
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js +0 -493
- package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts +0 -18
- package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js +0 -145
- package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts +0 -120
- package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.d.ts +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.js +0 -48
- package/dist/src/foundation/presentation-contracts/index.d.ts +0 -96
- package/dist/src/foundation/process-containment/index.d.ts +0 -5
- package/dist/src/foundation/process-containment/index.js +0 -5
- package/dist/src/foundation/process-containment/linux-process-inspector.d.ts +0 -6
- package/dist/src/foundation/process-containment/linux-process-inspector.js +0 -26
- package/dist/src/foundation/process-containment/native-guardian-containment.d.ts +0 -16
- package/dist/src/foundation/process-containment/native-guardian-containment.js +0 -139
- package/dist/src/foundation/process-containment/windows-process-inspector.d.ts +0 -17
- package/dist/src/foundation/process-containment/windows-process-inspector.js +0 -53
- package/dist/src/foundation/protocol/client.d.ts +0 -17
- package/dist/src/foundation/protocol/client.js +0 -129
- package/dist/src/foundation/protocol/index.d.ts +0 -2
- package/dist/src/foundation/protocol/index.js +0 -2
- package/dist/src/foundation/protocol/messages.d.ts +0 -89
- package/dist/src/foundation/protocol/messages.js +0 -99
- package/dist/src/foundation/release/bootstrap.d.ts +0 -29
- package/dist/src/foundation/release/bootstrap.js +0 -335
- package/dist/src/foundation/release/cohort-state.d.ts +0 -70
- package/dist/src/foundation/release/cohort-state.js +0 -202
- package/dist/src/foundation/release/index.d.ts +0 -10
- package/dist/src/foundation/release/index.js +0 -10
- package/dist/src/foundation/release/release-gc.d.ts +0 -5
- package/dist/src/foundation/release/release-gc.js +0 -16
- package/dist/src/foundation/release/release-store.d.ts +0 -43
- package/dist/src/foundation/release/release-store.js +0 -175
- package/dist/src/foundation/release/release.d.ts +0 -38
- package/dist/src/foundation/release/release.js +0 -204
- package/dist/src/foundation/release/update-transaction.d.ts +0 -31
- package/dist/src/foundation/release/update-transaction.js +0 -89
- package/dist/src/foundation/release/update.d.ts +0 -82
- package/dist/src/foundation/release/update.js +0 -527
- package/dist/src/foundation/storage/control-store.d.ts +0 -61
- package/dist/src/foundation/storage/control-store.js +0 -530
- package/dist/src/foundation/storage/index.d.ts +0 -1
- package/dist/src/foundation/storage/index.js +0 -1
- package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts +0 -46
- package/dist/src/foundation/structured-agent-runtime/backpressure.js +0 -118
- package/dist/src/foundation/structured-agent-runtime/commands.d.ts +0 -52
- package/dist/src/foundation/structured-agent-runtime/commands.js +0 -164
- package/dist/src/foundation/structured-agent-runtime/handshake.d.ts +0 -41
- package/dist/src/foundation/structured-agent-runtime/handshake.js +0 -151
- package/dist/src/foundation/structured-agent-runtime/index.d.ts +0 -5
- package/dist/src/foundation/structured-agent-runtime/index.js +0 -5
- package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts +0 -37
- package/dist/src/foundation/structured-agent-runtime/reconnection.js +0 -129
- package/dist/src/foundation/structured-agent-runtime/state.d.ts +0 -56
- package/dist/src/foundation/structured-agent-runtime/state.js +0 -118
- package/dist/src/foundation/supervision/index.d.ts +0 -3
- package/dist/src/foundation/supervision/index.js +0 -3
- package/dist/src/foundation/supervision/main.d.ts +0 -1
- package/dist/src/foundation/supervision/main.js +0 -41
- package/dist/src/foundation/supervision/paths.d.ts +0 -1
- package/dist/src/foundation/supervision/paths.js +0 -1
- package/dist/src/foundation/supervision/server.d.ts +0 -22
- package/dist/src/foundation/supervision/server.js +0 -451
- package/dist/src/foundation/ui-apps/contracts.d.ts +0 -42
- package/dist/src/foundation/ui-apps/host.d.ts +0 -42
- package/dist/src/foundation/ui-apps/host.js +0 -152
- package/dist/src/foundation/ui-apps/index.d.ts +0 -3
- package/dist/src/foundation/ui-apps/index.js +0 -3
- package/dist/src/foundation/ui-apps/registry.d.ts +0 -11
- package/dist/src/foundation/ui-apps/registry.js +0 -32
- package/dist/src/foundation/ui-components/dialog-panel.js +0 -47
- package/dist/src/foundation/ui-components/frame.d.ts +0 -21
- package/dist/src/foundation/ui-components/frame.js +0 -54
- package/dist/src/foundation/ui-components/index.d.ts +0 -18
- package/dist/src/foundation/ui-components/index.js +0 -18
- package/dist/src/foundation/ui-components/line-input.d.ts +0 -74
- package/dist/src/foundation/ui-components/line-input.js +0 -245
- package/dist/src/foundation/ui-components/list-view.d.ts +0 -66
- package/dist/src/foundation/ui-components/list-view.js +0 -76
- package/dist/src/foundation/ui-components/mouse.d.ts +0 -15
- package/dist/src/foundation/ui-components/mouse.js +0 -46
- package/dist/src/foundation/ui-components/scrollbar.d.ts +0 -62
- package/dist/src/foundation/ui-components/scrollbar.js +0 -102
- package/dist/src/foundation/ui-components/shortcuts.d.ts +0 -57
- package/dist/src/foundation/ui-components/shortcuts.js +0 -81
- package/dist/src/foundation/ui-components/spans.d.ts +0 -7
- package/dist/src/foundation/ui-components/spans.js +0 -59
- package/dist/src/foundation/ui-components/surface.d.ts +0 -20
- package/dist/src/foundation/ui-components/surface.js +0 -38
- package/dist/src/foundation/ui-components/text.d.ts +0 -24
- package/dist/src/foundation/ui-components/text.js +0 -123
- package/dist/src/foundation/workspace-contracts/index.d.ts +0 -2
- package/dist/src/foundation/workspace-contracts/index.js +0 -2
- package/dist/src/foundation/workspace-contracts/model.d.ts +0 -248
- package/dist/src/foundation/workspace-contracts/model.js +0 -2
- package/dist/src/foundation/workspace-contracts/validation.d.ts +0 -13
- package/dist/src/foundation/workspace-contracts/validation.js +0 -335
- package/dist/src/product-identity.d.ts +0 -37
- package/dist/src/product-identity.js +0 -150
- package/dist/src/product-identity.json +0 -99
- package/docs/manual-transparent-checkpoint.md +0 -53
- /package/dist/{src/foundation/agent-engine-contracts/domain.js → app/session-shell/paste-helper.d.ts} +0 -0
- /package/dist/{src/foundation/agent-engine-contracts/ports.js → app/session-shell/paste-text-worker.d.ts} +0 -0
- /package/dist/{src/foundation/lifecycle/commands.js → app/session-shell/paste-types.js} +0 -0
- /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → app/session-shell/response-copy-helper.d.ts} +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → contracts/agent-engine/domain.js} +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
- /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
- /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
- /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
- /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
- /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
- /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
- /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
- /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
- /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { restoreAfterOwnedExit } from "../terminal-cleanup/index.js";
|
|
3
|
+
import { chmod, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import { connect } from "node:net";
|
|
5
|
+
import { platform } from "node:os";
|
|
6
|
+
import { resolve } from "node:path";
|
|
7
|
+
import { selectCohortLaunch } from "./cohort-selection.js";
|
|
8
|
+
import { CohortStateStore } from "./cohort-state.js";
|
|
9
|
+
import { assertLaunchProfileId, createSupervisorStartupAttempt, readSupervisorStartupResult, resolveCohortEndpoint, resolveProductPaths, sessionSelectionArguments } from "../lifecycle/index.js";
|
|
10
|
+
import { encodeFrame, LineFrameDecoder } from "../protocol/index.js";
|
|
11
|
+
import { cleanupProvenIdleOwner, processIsAlive } from "./process-cleanup.js";
|
|
12
|
+
import { probeOwnership, readEndpointMetadata, removeEndpointArtifacts, sweepDeadEndpoints } from "./endpoints.js";
|
|
13
|
+
import { UpdateTransactionStore } from "./update-transaction.js";
|
|
14
|
+
import { selectUpdateLaunchRelease } from "./update-launch.js";
|
|
15
|
+
import { consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease } from "./release-store.js";
|
|
16
|
+
import { scheduleReleaseCleanup } from "./release-gc.js";
|
|
17
|
+
import { createRestartSeal, readRestartCertifiedRelease, releaseCertificationDocument } from "./restart-certification.js";
|
|
18
|
+
import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
|
|
19
|
+
import { markStartupPhase } from "../startup/index.js";
|
|
20
|
+
import { launchContractTarget, readLaunchContext, withLaunchContext } from "../launch-context/index.js";
|
|
21
|
+
export async function runBootstrap(options) {
|
|
22
|
+
const environment = withLaunchContext(options.environment ?? process.env, { launchProfile: options.launchIntent?.profileId ?? "a1" });
|
|
23
|
+
await markStartupPhase(environment, "bootstrap-start");
|
|
24
|
+
const launchProfileId = options.launchIntent?.profileId ?? "a1";
|
|
25
|
+
assertLaunchProfileId(launchProfileId);
|
|
26
|
+
const sessionArgs = sessionSelectionArguments(options.launchIntent?.sessionSelection);
|
|
27
|
+
if (sessionArgs.length > 0 && launchProfileId !== "a1")
|
|
28
|
+
throw new Error("session selection requires the normal A1 profile");
|
|
29
|
+
const output = options.output ?? process.stderr;
|
|
30
|
+
const paths = resolveProductPaths(environment);
|
|
31
|
+
await mkdir(paths.runtimeDir, { recursive: true, mode: 0o700 });
|
|
32
|
+
const stateStore = new CohortStateStore(paths.dataDir);
|
|
33
|
+
let state = await stateStore.read();
|
|
34
|
+
const launchDuringUpdate = async () => {
|
|
35
|
+
// Concurrency: read the journal before touching npm's mutable tree, including package.json.
|
|
36
|
+
const transaction = await new UpdateTransactionStore(paths.dataDir).read();
|
|
37
|
+
if (!transaction || transaction.status === "completed")
|
|
38
|
+
return null;
|
|
39
|
+
const prior = selectUpdateLaunchRelease(await stateStore.read(), transaction);
|
|
40
|
+
if (!prior)
|
|
41
|
+
return null;
|
|
42
|
+
const retained = await readCertifiedReleaseManifest(prior, resolve(paths.dataDir, "releases"));
|
|
43
|
+
await ensureSupervisor(retained, environment);
|
|
44
|
+
return await launchUi(retained, environment, sessionArgs);
|
|
45
|
+
};
|
|
46
|
+
const duringUpdate = await launchDuringUpdate();
|
|
47
|
+
if (duringUpdate !== null)
|
|
48
|
+
return duringUpdate;
|
|
49
|
+
// Invariant: records left by cohorts whose processes are gone say nothing about ownership, and there
|
|
50
|
+
// can now be several of them. Clearing them first keeps the decision below about what is
|
|
51
|
+
// actually running.
|
|
52
|
+
await sweepDeadEndpoints(paths).catch(() => []);
|
|
53
|
+
// Performance: reconciliation is serialized by cohort state, but launch never awaits a physical
|
|
54
|
+
// backlog. The scheduler commits a plan and starts a detached bounded worker.
|
|
55
|
+
const scheduleMaintenance = options.scheduleMaintenance ?? scheduleReleaseCleanup;
|
|
56
|
+
void scheduleMaintenance(paths.dataDir, paths).catch(() => { });
|
|
57
|
+
// Protocol: each cohort keeps its own endpoint, so a launch looks for the endpoint of the release it
|
|
58
|
+
// is about to run rather than for the one endpoint the runtime directory used to have.
|
|
59
|
+
const activeReleaseId = state.references.active;
|
|
60
|
+
let endpointPaths = activeReleaseId === null
|
|
61
|
+
? { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath }
|
|
62
|
+
: resolveCohortEndpoint(paths, activeReleaseId, environment);
|
|
63
|
+
let endpoint = await readEndpointMetadata(endpointPaths.endpointMetadataPath);
|
|
64
|
+
if (endpoint === null) {
|
|
65
|
+
// Compatibility: a release that predates cohort-scoped endpoints published one endpoint for the whole
|
|
66
|
+
// runtime directory. Recognizing it is what lets a session started by that release keep
|
|
67
|
+
// working through the first launch that knows about cohorts.
|
|
68
|
+
const legacy = await readEndpointMetadata(paths.endpointMetadataPath);
|
|
69
|
+
if (legacy !== null) {
|
|
70
|
+
endpoint = legacy;
|
|
71
|
+
endpointPaths = { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
let probe = endpoint ? await probeOwnership(endpoint) : "dead";
|
|
75
|
+
const installedVersion = await readInstalledVersion(options.packageRoot);
|
|
76
|
+
const activeId = state.references.active;
|
|
77
|
+
const active = activeId === null ? undefined : state.releases[activeId];
|
|
78
|
+
const activeIsLaunchable = active === undefined || (options.releaseIsLaunchable?.(active.releaseRoot) ?? true);
|
|
79
|
+
if (activeIsLaunchable && active?.approval === "approved" && active.packageVersion === installedVersion) {
|
|
80
|
+
const endpointMatches = endpoint?.releaseId === active.releaseId
|
|
81
|
+
&& endpoint.releaseRoot === active.releaseRoot
|
|
82
|
+
&& endpoint.contentDigest === active.contentDigest;
|
|
83
|
+
if (endpointMatches && probe === "live-verified") {
|
|
84
|
+
const retained = await readCertifiedReleaseManifest(active, resolve(paths.dataDir, "releases"));
|
|
85
|
+
return await launchUi(retained, environment, sessionArgs);
|
|
86
|
+
}
|
|
87
|
+
if (endpoint === null || probe === "dead") {
|
|
88
|
+
if (endpoint)
|
|
89
|
+
await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint);
|
|
90
|
+
await markStartupPhase(environment, "durable-validation-start");
|
|
91
|
+
const retained = await readRestartCertifiedRelease(active, paths.dataDir).catch(async () => {
|
|
92
|
+
const verified = await readMaterializedRelease(active.releaseRoot, resolve(paths.dataDir, "releases"));
|
|
93
|
+
if (verified.releaseId !== active.releaseId || verified.contentDigest !== active.contentDigest || verified.packageVersion !== active.packageVersion) {
|
|
94
|
+
throw new Error("completely verified release differs from the approved active record");
|
|
95
|
+
}
|
|
96
|
+
await certifyMaterializedRelease(verified, paths.dataDir);
|
|
97
|
+
return verified;
|
|
98
|
+
});
|
|
99
|
+
await markStartupPhase(environment, "durable-validation-complete");
|
|
100
|
+
await markStartupPhase(environment, "replacement-supervisor-start");
|
|
101
|
+
await ensureSupervisor(retained, environment);
|
|
102
|
+
await markStartupPhase(environment, "replacement-supervisor-ready");
|
|
103
|
+
return await launchUi(retained, environment, sessionArgs);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Concurrency: an installation being replaced is not a reason to refuse a launch. While
|
|
107
|
+
// npm is rewriting the package tree the candidate cannot be read consistently, so a
|
|
108
|
+
// launch that cannot take the installed payload starts the retained active release
|
|
109
|
+
// instead and leaves activation to the launch that follows the replacement.
|
|
110
|
+
let candidate;
|
|
111
|
+
try {
|
|
112
|
+
candidate = await materializeRelease(options.packageRoot, paths.dataDir);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
const fallback = await launchRetainedActive(state, paths, environment, sessionArgs, output);
|
|
116
|
+
if (fallback === null)
|
|
117
|
+
throw error;
|
|
118
|
+
return fallback;
|
|
119
|
+
}
|
|
120
|
+
// Concurrency: an update may have begun while this launch was reading the installed payload.
|
|
121
|
+
const afterMaterialization = await launchDuringUpdate();
|
|
122
|
+
if (afterMaterialization !== null)
|
|
123
|
+
return afterMaterialization;
|
|
124
|
+
await stateStore.recordCandidate(candidate);
|
|
125
|
+
state = await stateStore.read();
|
|
126
|
+
if (!state.references.active) {
|
|
127
|
+
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
128
|
+
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
129
|
+
await stateStore.activate(candidate.releaseId);
|
|
130
|
+
state = await stateStore.read();
|
|
131
|
+
}
|
|
132
|
+
else if (!activeIsLaunchable && candidate.releaseId !== activeId
|
|
133
|
+
&& state.releases[candidate.releaseId]?.approval !== "approved") {
|
|
134
|
+
// Invariant: the active reference points at a copy that cannot launch, so reusing it
|
|
135
|
+
// is off the table — but an unapproved candidate would lose the selection
|
|
136
|
+
// below to that same broken active (`start-active`). Approving the healed
|
|
137
|
+
// candidate here lets ordinary cohort selection activate it, while a live
|
|
138
|
+
// busy cohort still wins the endpoint checks and keeps its sessions.
|
|
139
|
+
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
140
|
+
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
141
|
+
state = await stateStore.read();
|
|
142
|
+
}
|
|
143
|
+
// Protocol: the candidate's own endpoint decides whether this launch attaches or starts a supervisor.
|
|
144
|
+
// A cohort other than this one is not in the way: it listens somewhere else.
|
|
145
|
+
endpointPaths = resolveCohortEndpoint(paths, candidate.releaseId, environment);
|
|
146
|
+
endpoint = await readEndpointMetadata(endpointPaths.endpointMetadataPath);
|
|
147
|
+
if (endpoint === null) {
|
|
148
|
+
const legacy = await readEndpointMetadata(paths.endpointMetadataPath);
|
|
149
|
+
if (legacy !== null) {
|
|
150
|
+
endpoint = legacy;
|
|
151
|
+
endpointPaths = { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
probe = endpoint ? await probeOwnership(endpoint) : "dead";
|
|
155
|
+
let decision = selectCohortLaunch(candidate, state, endpoint, probe);
|
|
156
|
+
if (decision.action === "blocked") {
|
|
157
|
+
await stateStore.blockPending(decision.reason, endpoint?.ownership.liveInstanceIds ?? []);
|
|
158
|
+
output.write(`${PRODUCT_TEXT.diagnostic(`startup is blocked to preserve uncertain live ownership: ${decision.reason}`)}\n`);
|
|
159
|
+
return 1;
|
|
160
|
+
}
|
|
161
|
+
if (decision.action === "clean-stale-owner" && endpoint) {
|
|
162
|
+
const diagnostics = await cleanupProvenIdleOwner(endpoint);
|
|
163
|
+
await writeFile(resolve(paths.dataDir, `cleanup-${Date.now()}.json`), JSON.stringify(diagnostics, null, 2));
|
|
164
|
+
if (!diagnostics.terminated)
|
|
165
|
+
throw new Error(`could not safely clean stale ${PRODUCT_TEXT.displayName} supervisor ${endpoint.pid}`);
|
|
166
|
+
await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint);
|
|
167
|
+
decision = selectCohortLaunch(candidate, await stateStore.read(), null, "dead");
|
|
168
|
+
}
|
|
169
|
+
else if (endpoint && probe === "dead") {
|
|
170
|
+
await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint);
|
|
171
|
+
}
|
|
172
|
+
if (decision.action === "launch-retained-ui") {
|
|
173
|
+
const retained = await verifyMaterializedRelease(decision.releaseRoot, undefined, resolve(paths.dataDir, "releases"));
|
|
174
|
+
if (decision.recordPending && endpoint) {
|
|
175
|
+
await stateStore.blockPending("candidate activation deferred by live non-resumable instances", endpoint.ownership.nonResumableInstanceIds);
|
|
176
|
+
}
|
|
177
|
+
const code = await launchUi(retained, environment, sessionArgs);
|
|
178
|
+
if (decision.recordPending)
|
|
179
|
+
await activatePendingAfterBlockerExit(candidate, stateStore, paths, environment);
|
|
180
|
+
return code;
|
|
181
|
+
}
|
|
182
|
+
if (decision.action === "replace-idle-cohort" && endpoint) {
|
|
183
|
+
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
184
|
+
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
185
|
+
const released = await requestIdleOwnershipRelease(endpoint, candidate.releaseId, 2_000);
|
|
186
|
+
if (!released) {
|
|
187
|
+
await stateStore.blockPending("idle supervisor did not verify ownership release", endpoint.ownership.liveInstanceIds);
|
|
188
|
+
output.write(`${PRODUCT_TEXT.diagnostic("could not verify idle cohort ownership release; the retained release remains selected.")}\n`);
|
|
189
|
+
return 1;
|
|
190
|
+
}
|
|
191
|
+
if (!await releaseVerifiedIdleOwner(endpoint, paths.dataDir)) {
|
|
192
|
+
await stateStore.blockPending("idle supervisor acknowledged release but did not terminate", endpoint.ownership.liveInstanceIds);
|
|
193
|
+
output.write(`${PRODUCT_TEXT.diagnostic("could not complete bounded idle cohort shutdown; the candidate remains pending.")}\n`);
|
|
194
|
+
return 1;
|
|
195
|
+
}
|
|
196
|
+
await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint);
|
|
197
|
+
await stateStore.activate(candidate.releaseId);
|
|
198
|
+
decision = { action: "activate-candidate", releaseId: candidate.releaseId, releaseRoot: candidate.releaseRoot, reason: "idle cohort released ownership" };
|
|
199
|
+
}
|
|
200
|
+
let selected;
|
|
201
|
+
if (decision.action === "activate-candidate") {
|
|
202
|
+
const current = await stateStore.read();
|
|
203
|
+
if (current.releases[candidate.releaseId]?.approval !== "approved") {
|
|
204
|
+
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
205
|
+
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
206
|
+
}
|
|
207
|
+
if ((await stateStore.read()).references.active !== candidate.releaseId)
|
|
208
|
+
await stateStore.activate(candidate.releaseId);
|
|
209
|
+
selected = candidate;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
selected = await readMaterializedRelease(decision.releaseRoot);
|
|
213
|
+
}
|
|
214
|
+
await ensureSupervisor(selected, environment);
|
|
215
|
+
return await launchUi(selected, environment, sessionArgs);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Start the retained active cohort when the installed payload cannot be taken. The
|
|
219
|
+
* release already carries certified evidence, so this reuses it rather than
|
|
220
|
+
* certifying anything new, and reports no selection when there is nothing safe
|
|
221
|
+
* to fall back to.
|
|
222
|
+
*/
|
|
223
|
+
async function launchRetainedActive(state, paths, environment, sessionArgs, output) {
|
|
224
|
+
const activeId = state.references.active;
|
|
225
|
+
const active = activeId === null ? undefined : state.releases[activeId];
|
|
226
|
+
if (!active || active.approval !== "approved")
|
|
227
|
+
return null;
|
|
228
|
+
try {
|
|
229
|
+
const retained = await readCertifiedReleaseManifest(active, resolve(paths.dataDir, "releases"));
|
|
230
|
+
await ensureSupervisor(retained, environment);
|
|
231
|
+
output.write(`${PRODUCT_TEXT.diagnostic(`installation is being replaced; starting the retained release ${retained.packageVersion}`)}\n`);
|
|
232
|
+
return await launchUi(retained, environment, sessionArgs);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
async function readInstalledVersion(packageRoot) {
|
|
239
|
+
const manifest = JSON.parse(await readFile(resolve(packageRoot, "package.json"), "utf8"));
|
|
240
|
+
if (typeof manifest.version !== "string" || manifest.version.length === 0) {
|
|
241
|
+
throw new Error(PRODUCT_TEXT.diagnostic("package metadata has no version"));
|
|
242
|
+
}
|
|
243
|
+
return manifest.version;
|
|
244
|
+
}
|
|
245
|
+
export async function certifyMaterializedRelease(release, dataDir, verification = {}) {
|
|
246
|
+
if (!consumeMaterializationProof(release)) {
|
|
247
|
+
await verifyMaterializedRelease(release.releaseRoot, release, resolve(dataDir, "releases"), verification);
|
|
248
|
+
}
|
|
249
|
+
return await recordParentCertifiedRelease(release, dataDir);
|
|
250
|
+
}
|
|
251
|
+
/** Persist current-format evidence after an authenticated parent has certified the exact release. */
|
|
252
|
+
export async function recordParentCertifiedRelease(release, dataDir) {
|
|
253
|
+
const path = resolve(dataDir, `certification-${release.releaseId}.json`);
|
|
254
|
+
const restartSeal = await createRestartSeal(release, dataDir);
|
|
255
|
+
await chmod(path, 0o600).catch(() => { });
|
|
256
|
+
await writeFile(path, JSON.stringify(releaseCertificationDocument(release, restartSeal), null, 2), { mode: 0o600 });
|
|
257
|
+
await chmod(path, 0o400);
|
|
258
|
+
return path;
|
|
259
|
+
}
|
|
260
|
+
/** Reuse a verified owner, or join the winner if another launch starts the same cohort first. */
|
|
261
|
+
export async function ensureSupervisor(release, environment) {
|
|
262
|
+
const paths = resolveCohortEndpoint(resolveProductPaths(environment), release.releaseId, environment);
|
|
263
|
+
const metadata = await readEndpointMetadata(paths.endpointMetadataPath);
|
|
264
|
+
if (metadata) {
|
|
265
|
+
const probe = await probeOwnership(metadata);
|
|
266
|
+
if (probe !== "dead") {
|
|
267
|
+
if (probe === "live-verified" && endpointMatchesRelease(metadata, release))
|
|
268
|
+
return;
|
|
269
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`refused duplicate supervisor startup: existing ownership is ${probe}`));
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const startup = await startSupervisor(release, environment);
|
|
273
|
+
await waitForVerifiedEndpoint(paths.endpointMetadataPath, release, 8_000, startup);
|
|
274
|
+
}
|
|
275
|
+
function endpointMatchesRelease(metadata, release) {
|
|
276
|
+
return metadata.releaseId === release.releaseId && metadata.releaseRoot === release.releaseRoot
|
|
277
|
+
&& metadata.contentDigest === release.contentDigest;
|
|
278
|
+
}
|
|
279
|
+
export async function startSupervisor(release, environment) {
|
|
280
|
+
const entry = await resolveReleaseEntryPoint(release, "bin/supervisor.js");
|
|
281
|
+
const paths = resolveProductPaths(environment);
|
|
282
|
+
const attempt = await createSupervisorStartupAttempt(paths.runtimeDir, release.releaseId);
|
|
283
|
+
const child = spawn(process.execPath, [entry, "--startup-attempt", attempt.attemptId], {
|
|
284
|
+
detached: true,
|
|
285
|
+
env: releaseEnvironment(environment, release),
|
|
286
|
+
stdio: "ignore",
|
|
287
|
+
windowsHide: true,
|
|
288
|
+
});
|
|
289
|
+
const childOutcome = new Promise(resolvePromise => {
|
|
290
|
+
child.once("close", (exitCode, signal) => resolvePromise({ exitCode, signal }));
|
|
291
|
+
});
|
|
292
|
+
await new Promise((resolvePromise, rejectPromise) => {
|
|
293
|
+
child.once("spawn", resolvePromise);
|
|
294
|
+
child.once("error", rejectPromise);
|
|
295
|
+
});
|
|
296
|
+
child.unref();
|
|
297
|
+
return { ...attempt, childOutcome };
|
|
298
|
+
}
|
|
299
|
+
async function launchUi(release, environment, sessionArgs) {
|
|
300
|
+
await markStartupPhase(environment, "bootstrap-selected");
|
|
301
|
+
const entry = await resolveReleaseEntryPoint(release, "bin/guardian.js");
|
|
302
|
+
return await new Promise((resolvePromise, rejectPromise) => {
|
|
303
|
+
const child = spawn(process.execPath, [entry, ...sessionArgs], {
|
|
304
|
+
env: releaseEnvironment(environment, release, readLaunchContext(environment, "profile").launchProfile),
|
|
305
|
+
stdio: "inherit",
|
|
306
|
+
windowsHide: false,
|
|
307
|
+
});
|
|
308
|
+
child.once("error", rejectPromise);
|
|
309
|
+
child.once("close", (code, signal) => resolvePromise(restoreAfterOwnedExit(readLaunchContext(environment).launchProfile === "a1", code, signal)));
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Hand a release the key set its own build reads. A retained pre-cutover release is
|
|
314
|
+
* still startable this way, which is what lets a launch fall back to the previous
|
|
315
|
+
* version instead of failing while an installation is being replaced.
|
|
316
|
+
*/
|
|
317
|
+
export function releaseEnvironment(environment, release, profile) {
|
|
318
|
+
return withLaunchContext(environment, {
|
|
319
|
+
releaseId: release.releaseId,
|
|
320
|
+
releaseLayers: (release.dependencyLayers ?? []).map(layer => layer.layerId).join(","),
|
|
321
|
+
releaseRoot: release.releaseRoot,
|
|
322
|
+
releaseDigest: release.contentDigest,
|
|
323
|
+
...(profile === undefined ? {} : { launchProfile: profile }),
|
|
324
|
+
}, process.platform, launchContractTarget(release));
|
|
325
|
+
}
|
|
326
|
+
export async function waitForVerifiedEndpoint(path, release, timeoutMs, startup) {
|
|
327
|
+
const deadline = Date.now() + timeoutMs;
|
|
328
|
+
let childOutcome = null;
|
|
329
|
+
let collision = null;
|
|
330
|
+
void startup?.childOutcome.then(outcome => { childOutcome = outcome; });
|
|
331
|
+
while (Date.now() < deadline) {
|
|
332
|
+
const metadata = await readEndpointMetadata(path);
|
|
333
|
+
if (metadata && endpointMatchesRelease(metadata, release) && await probeOwnership(metadata) === "live-verified") {
|
|
334
|
+
if (startup)
|
|
335
|
+
await rm(startup.resultPath, { force: true });
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
if (startup) {
|
|
339
|
+
const result = await readSupervisorStartupResult(startup.resultPath, startup.attemptId, startup.releaseId);
|
|
340
|
+
if (result?.outcome === "failure") {
|
|
341
|
+
const error = Object.assign(new Error(PRODUCT_TEXT.diagnostic(`supervisor startup failed at ${result.stage}: ${result.message}`)), {
|
|
342
|
+
code: result.code ?? "SUPERVISOR_STARTUP_FAILED",
|
|
343
|
+
});
|
|
344
|
+
if (result.code !== "EADDRINUSE")
|
|
345
|
+
throw error;
|
|
346
|
+
// Concurrency: the winning process may not have published its authenticated metadata yet.
|
|
347
|
+
collision = error;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
if (childOutcome && !collision)
|
|
351
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`supervisor exited before readiness: ${JSON.stringify(childOutcome)}`));
|
|
352
|
+
await new Promise(resolvePromise => setTimeout(resolvePromise, 40));
|
|
353
|
+
}
|
|
354
|
+
if (collision)
|
|
355
|
+
throw collision;
|
|
356
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`supervisor did not publish verified endpoint metadata within ${timeoutMs}ms`));
|
|
357
|
+
}
|
|
358
|
+
async function activatePendingAfterBlockerExit(candidate, stateStore, paths, environment) {
|
|
359
|
+
const deadline = Date.now() + 2_000;
|
|
360
|
+
let endpoint = null;
|
|
361
|
+
while (Date.now() < deadline) {
|
|
362
|
+
endpoint = await readEndpointMetadata(paths.endpointMetadataPath);
|
|
363
|
+
if (!endpoint || endpoint.ownership.liveInstanceIds.length === 0)
|
|
364
|
+
break;
|
|
365
|
+
await new Promise(resolvePromise => setTimeout(resolvePromise, 40));
|
|
366
|
+
}
|
|
367
|
+
if (!endpoint || endpoint.ownership.liveInstanceIds.length > 0 || await probeOwnership(endpoint) !== "live-verified")
|
|
368
|
+
return;
|
|
369
|
+
const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
|
|
370
|
+
await stateStore.approve(candidate.releaseId, diagnosticsPath);
|
|
371
|
+
if (!await requestIdleOwnershipRelease(endpoint, candidate.releaseId, 2_000))
|
|
372
|
+
return;
|
|
373
|
+
if (!await releaseVerifiedIdleOwner(endpoint, paths.dataDir))
|
|
374
|
+
return;
|
|
375
|
+
await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint);
|
|
376
|
+
await stateStore.activate(candidate.releaseId);
|
|
377
|
+
await ensureSupervisor(candidate, environment);
|
|
378
|
+
}
|
|
379
|
+
export async function releaseVerifiedIdleOwner(metadata, dataDir, operations = {}) {
|
|
380
|
+
try {
|
|
381
|
+
await (operations.waitForExit ?? waitForProcessExit)(metadata.pid, 3_000);
|
|
382
|
+
return true;
|
|
383
|
+
}
|
|
384
|
+
catch {
|
|
385
|
+
// Security: the authenticated idle-release handshake authorizes bounded cleanup of
|
|
386
|
+
// this exact boot when a native handle outlives graceful shutdown.
|
|
387
|
+
const diagnostics = await (operations.cleanup ?? cleanupProvenIdleOwner)(metadata);
|
|
388
|
+
await writeFile(resolve(dataDir, `cleanup-${Date.now()}.json`), JSON.stringify(diagnostics, null, 2));
|
|
389
|
+
return diagnostics.terminated;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
async function requestIdleOwnershipRelease(metadata, candidateReleaseId, timeoutMs) {
|
|
393
|
+
return await new Promise(resolvePromise => {
|
|
394
|
+
const socket = connect(metadata.endpoint);
|
|
395
|
+
const decoder = new LineFrameDecoder();
|
|
396
|
+
let settled = false;
|
|
397
|
+
const finish = (released) => {
|
|
398
|
+
if (settled)
|
|
399
|
+
return;
|
|
400
|
+
settled = true;
|
|
401
|
+
socket.destroy();
|
|
402
|
+
resolvePromise(released);
|
|
403
|
+
};
|
|
404
|
+
socket.once("error", () => finish(false));
|
|
405
|
+
socket.once("connect", () => socket.write(encodeFrame({ type: "release-idle-ownership", bootNonce: metadata.bootNonce, candidateReleaseId })));
|
|
406
|
+
socket.on("data", chunk => {
|
|
407
|
+
try {
|
|
408
|
+
const message = decoder.push(chunk)[0];
|
|
409
|
+
if (message?.type === "release-ownership-result")
|
|
410
|
+
finish(message.released === true);
|
|
411
|
+
}
|
|
412
|
+
catch {
|
|
413
|
+
finish(false);
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
setTimeout(() => finish(false), timeoutMs).unref();
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
export async function waitForProcessExit(pid, timeoutMs) {
|
|
420
|
+
const deadline = Date.now() + timeoutMs;
|
|
421
|
+
while (Date.now() < deadline) {
|
|
422
|
+
if (!processIsAlive(pid))
|
|
423
|
+
return;
|
|
424
|
+
await new Promise(resolvePromise => setTimeout(resolvePromise, 25));
|
|
425
|
+
}
|
|
426
|
+
throw new Error(PRODUCT_TEXT.diagnostic(`supervisor ${pid} did not release process ownership within ${timeoutMs}ms`));
|
|
427
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import type { MaterializedRelease } from "./release-store.js";
|
|
2
|
+
export declare const RELEASE_COHORT_SCHEMA: string;
|
|
3
|
+
export type ReleaseApproval = "candidate" | "approved" | "rejected";
|
|
4
|
+
export interface ReleaseRecord {
|
|
5
|
+
readonly releaseId: string;
|
|
6
|
+
readonly releaseRoot: string;
|
|
7
|
+
readonly packageVersion: string;
|
|
8
|
+
readonly contentDigest: string;
|
|
9
|
+
readonly launchContract?: string;
|
|
10
|
+
readonly approval: ReleaseApproval;
|
|
11
|
+
readonly materializedAt: string;
|
|
12
|
+
readonly certifiedAt: string | null;
|
|
13
|
+
readonly diagnosticsPath: string | null;
|
|
14
|
+
}
|
|
15
|
+
export interface ReleaseReferences {
|
|
16
|
+
readonly active: string | null;
|
|
17
|
+
readonly pending: string | null;
|
|
18
|
+
readonly approved: string | null;
|
|
19
|
+
readonly rollback: string | null;
|
|
20
|
+
readonly retention: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
export type ExternalReleaseHoldAuthority = "agent" | "migration";
|
|
23
|
+
/** A current hold supplied by an authority that must participate in every reconciliation. */
|
|
24
|
+
export interface ExternalReleaseHold {
|
|
25
|
+
readonly authority: ExternalReleaseHoldAuthority;
|
|
26
|
+
readonly releaseId: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ActiveReleaseTransactionReference {
|
|
29
|
+
readonly status: "active" | "completed" | "rolled-back" | "failed";
|
|
30
|
+
readonly priorActiveReleaseId: string | null;
|
|
31
|
+
}
|
|
32
|
+
export type ReleaseCleanupStage = "detached" | "trash";
|
|
33
|
+
export interface ReleaseCleanupDisposition {
|
|
34
|
+
readonly release: ReleaseRecord;
|
|
35
|
+
readonly stage: ReleaseCleanupStage;
|
|
36
|
+
readonly trashPath: string | null;
|
|
37
|
+
readonly attempts: number;
|
|
38
|
+
readonly lastAttemptAt: string | null;
|
|
39
|
+
readonly lastError: string | null;
|
|
40
|
+
}
|
|
41
|
+
export interface ReleaseCleanupDiagnostic {
|
|
42
|
+
readonly releaseId: string;
|
|
43
|
+
readonly stage: string;
|
|
44
|
+
readonly attemptedAt: string;
|
|
45
|
+
readonly error: string;
|
|
46
|
+
}
|
|
47
|
+
export type ReleaseCleanupWorkerStatus = "scheduled" | "running" | "completed" | "blocked" | "continued" | "failed" | "skipped";
|
|
48
|
+
export interface ReleaseCleanupWorkerRun {
|
|
49
|
+
readonly runId: string;
|
|
50
|
+
readonly status: ReleaseCleanupWorkerStatus;
|
|
51
|
+
readonly scheduledAt: string;
|
|
52
|
+
readonly startedAt: string | null;
|
|
53
|
+
readonly completedAt: string | null;
|
|
54
|
+
readonly pid: number | null;
|
|
55
|
+
readonly batches: number;
|
|
56
|
+
readonly attempted: number;
|
|
57
|
+
readonly completed: number;
|
|
58
|
+
readonly remaining: number;
|
|
59
|
+
readonly error: string | null;
|
|
60
|
+
}
|
|
61
|
+
export interface ReleaseCleanupWorkerSummary {
|
|
62
|
+
readonly batches: number;
|
|
63
|
+
readonly attempted: number;
|
|
64
|
+
readonly completed: number;
|
|
65
|
+
readonly remaining: number;
|
|
66
|
+
}
|
|
67
|
+
export interface ReleaseCleanupState {
|
|
68
|
+
readonly pending: Readonly<Record<string, ReleaseCleanupDisposition>>;
|
|
69
|
+
readonly diagnostics: readonly ReleaseCleanupDiagnostic[];
|
|
70
|
+
readonly workerRuns: readonly ReleaseCleanupWorkerRun[];
|
|
71
|
+
}
|
|
72
|
+
export interface CohortState {
|
|
73
|
+
readonly schema: typeof RELEASE_COHORT_SCHEMA;
|
|
74
|
+
readonly revision: number;
|
|
75
|
+
readonly releases: Readonly<Record<string, ReleaseRecord>>;
|
|
76
|
+
readonly references: ReleaseReferences;
|
|
77
|
+
readonly cleanup: ReleaseCleanupState;
|
|
78
|
+
readonly activation: {
|
|
79
|
+
readonly state: "idle" | "pending" | "draining" | "blocked" | "failed";
|
|
80
|
+
readonly reason: string | null;
|
|
81
|
+
readonly blockerGenerationIds: readonly string[];
|
|
82
|
+
readonly updatedAt: string;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export interface EndpointOwnership {
|
|
86
|
+
readonly state: "idle" | "busy" | "draining" | "released" | "blocked";
|
|
87
|
+
readonly liveInstanceIds: readonly string[];
|
|
88
|
+
readonly nonResumableInstanceIds: readonly string[];
|
|
89
|
+
readonly uncertainInstanceIds: readonly string[];
|
|
90
|
+
}
|
|
91
|
+
export interface SupervisorEndpointMetadata {
|
|
92
|
+
readonly schema: string;
|
|
93
|
+
readonly supervisorId: string;
|
|
94
|
+
readonly endpoint: string;
|
|
95
|
+
readonly pid: number;
|
|
96
|
+
readonly pidStartIdentity: string;
|
|
97
|
+
readonly bootNonce: string;
|
|
98
|
+
readonly startedAt: string;
|
|
99
|
+
readonly releaseId: string;
|
|
100
|
+
readonly releaseRoot: string;
|
|
101
|
+
readonly contentDigest: string;
|
|
102
|
+
readonly ownership: EndpointOwnership;
|
|
103
|
+
readonly envelope: string;
|
|
104
|
+
readonly envelopeRevision: number;
|
|
105
|
+
readonly requiredFeatures: readonly string[];
|
|
106
|
+
readonly optionalFeatures: readonly string[];
|
|
107
|
+
readonly contractDigest: string;
|
|
108
|
+
}
|
|
109
|
+
export interface ProtectedReleaseInputs {
|
|
110
|
+
readonly liveReleaseIds?: readonly string[];
|
|
111
|
+
readonly externalHolds?: readonly ExternalReleaseHold[];
|
|
112
|
+
readonly transaction?: ActiveReleaseTransactionReference | null;
|
|
113
|
+
}
|
|
114
|
+
export interface ProtectedReleasePlan {
|
|
115
|
+
readonly protectedReleaseIds: readonly string[];
|
|
116
|
+
readonly retainedReleaseIds: readonly string[];
|
|
117
|
+
readonly collectibleReleaseIds: readonly string[];
|
|
118
|
+
}
|
|
119
|
+
export interface OrphanReleaseDisposition {
|
|
120
|
+
readonly release: ReleaseRecord;
|
|
121
|
+
readonly stage: ReleaseCleanupStage;
|
|
122
|
+
readonly trashPath?: string | null;
|
|
123
|
+
}
|
|
124
|
+
export interface ReleaseRetentionReconciliation {
|
|
125
|
+
readonly state: CohortState;
|
|
126
|
+
readonly plan: ProtectedReleasePlan;
|
|
127
|
+
readonly detachedReleaseIds: readonly string[];
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Derive protection exclusively from current selectors and ownership authorities.
|
|
131
|
+
* The historical retention snapshot is deliberately not an input to this plan.
|
|
132
|
+
*/
|
|
133
|
+
export declare function planProtectedReleases(state: CohortState, inputs?: ProtectedReleaseInputs): ProtectedReleasePlan;
|
|
134
|
+
/** Serializes validated cohort-state revisions under a lock and commits each update atomically. */
|
|
135
|
+
export declare class CohortStateStore {
|
|
136
|
+
readonly path: string;
|
|
137
|
+
constructor(dataDir: string);
|
|
138
|
+
read(): Promise<CohortState>;
|
|
139
|
+
update(operation: (current: CohortState) => CohortState | Promise<CohortState>): Promise<CohortState>;
|
|
140
|
+
recordCandidate(release: MaterializedRelease): Promise<CohortState>;
|
|
141
|
+
approve(releaseId: string, diagnosticsPath: string): Promise<CohortState>;
|
|
142
|
+
activate(releaseId: string): Promise<CohortState>;
|
|
143
|
+
blockPending(reason: string, blockerGenerationIds: readonly string[]): Promise<CohortState>;
|
|
144
|
+
rollback(ownershipReleased: boolean): Promise<CohortState>;
|
|
145
|
+
setRetention(releaseIds: readonly string[]): Promise<CohortState>;
|
|
146
|
+
/** Atomically replace legacy retention history and detach every currently collectible record. */
|
|
147
|
+
reconcileRetention(resolveInputs: (current: CohortState) => ProtectedReleaseInputs | Promise<ProtectedReleaseInputs>, orphans?: readonly OrphanReleaseDisposition[]): Promise<ReleaseRetentionReconciliation>;
|
|
148
|
+
markCleanupTrash(releaseId: string, trashPath: string): Promise<CohortState>;
|
|
149
|
+
recordCleanupFailure(releaseId: string, stage: string, error: unknown): Promise<CohortState>;
|
|
150
|
+
completeCleanup(releaseId: string): Promise<CohortState>;
|
|
151
|
+
recordCleanupWorkerScheduled(runId: string): Promise<CohortState>;
|
|
152
|
+
recordCleanupWorkerStarted(runId: string, pid: number): Promise<CohortState>;
|
|
153
|
+
recordCleanupWorkerProgress(runId: string, summary: ReleaseCleanupWorkerSummary): Promise<CohortState>;
|
|
154
|
+
recordCleanupWorkerFinished(runId: string, status: Exclude<ReleaseCleanupWorkerStatus, "scheduled" | "running">, summary: ReleaseCleanupWorkerSummary, error?: unknown): Promise<CohortState>;
|
|
155
|
+
removeUnreferencedRelease(releaseId: string, externalReferences: readonly string[]): Promise<CohortState>;
|
|
156
|
+
}
|
|
157
|
+
export declare function emptyState(): CohortState;
|