@timurproko/a1 0.1.8-dev.50ebb19 → 0.1.8-dev.512
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 +168 -65
- 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 +35 -0
- package/dist/app/session-shell/prompt-suggestion-controller.js +207 -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 +265 -0
- package/dist/app/session-shell/session-shell-root.js +1366 -0
- package/dist/app/session-shell/session-shell.d.ts +59 -0
- package/dist/app/session-shell/session-shell.js +1917 -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 +136 -0
- package/dist/composition/settings-route-host.d.ts +7 -0
- package/dist/composition/settings-route-host.js +110 -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 +378 -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 +6 -0
- package/dist/features/owned-ui/index.js +4 -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/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 +807 -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 +21 -0
- package/dist/integrations/pi/components/index.js +13 -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.js +298 -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 +248 -0
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +43 -0
- package/dist/integrations/pi/components/shell-presenters-info.js +114 -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 +123 -0
- package/dist/integrations/pi/components/shell-selectors-dialogs.js +242 -0
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +217 -0
- package/dist/integrations/pi/components/shell-shared-facade.js +92 -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 +46 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +187 -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 +135 -0
- package/dist/integrations/pi/engine/adapter.js +648 -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 +49 -0
- package/dist/integrations/pi/engine/resource-catalog.js +289 -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 +59 -0
- package/dist/integrations/pi/engine/workflow-contexts.js +316 -0
- package/dist/integrations/pi/engine/workflow-runner.d.ts +60 -0
- package/dist/integrations/pi/engine/workflow-runner.js +509 -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 +251 -0
- package/dist/integrations/pi/engine/workflows.js +63 -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 +64 -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 +141 -0
- package/dist/ui/settings/declarations.js +135 -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 +74 -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 +60 -6
- package/docs/ci-release-runbook.md +256 -79
- package/docs/features/launch-profiles.md +24 -17
- package/docs/features/modal-content-interaction.md +37 -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.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}/shell-editor-autocomplete.d.ts +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,180 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { PRODUCT_TEXT } from "../../product-identity.js";
|
|
3
|
+
import { readLaunchContext } from "../launch-context/index.js";
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
import { assertLaunchProfileId, sessionSelectionArguments } from "../lifecycle/index.js";
|
|
6
|
+
import { closeVerifiedContainment, DarwinNativeProcessInspector, LinuxNativeProcessInspector, NativeGuardianContainment, resolveProcessGuardianPath, verifyProcessGuardianArtifact, WindowsNativeProcessInspector, } from "../process-containment/index.js";
|
|
7
|
+
import { SupervisorClient } from "../protocol/index.js";
|
|
8
|
+
import { resolveCohortEndpoint, resolveProductPaths } from "../supervision/index.js";
|
|
9
|
+
import { markStartupPhase } from "../startup/index.js";
|
|
10
|
+
export async function runLaunchGuardian(options) {
|
|
11
|
+
assertLaunchProfileId(options.profileId);
|
|
12
|
+
const sessionArgs = sessionSelectionArguments(options.sessionSelection);
|
|
13
|
+
if (sessionArgs.length > 0 && options.profileId !== "a1")
|
|
14
|
+
throw new Error("session selection requires the normal A1 profile");
|
|
15
|
+
const environment = { ...(options.environment ?? process.env) };
|
|
16
|
+
const paths = resolveProductPaths(environment);
|
|
17
|
+
const instanceId = randomUUID();
|
|
18
|
+
const helperPath = options.helperPath ?? resolveProcessGuardianPath(options.releaseRoot, environment);
|
|
19
|
+
const inspector = options.inspector ?? platformInspector(helperPath);
|
|
20
|
+
await (options.ensureHelper ?? verifyProcessGuardianArtifact)(helperPath);
|
|
21
|
+
const guardianIdentity = await inspector.observe(process.pid);
|
|
22
|
+
if (!guardianIdentity)
|
|
23
|
+
throw diagnosticError("launch guardian cannot verify its own native process identity", "PROCESS_IDENTITY_UNAVAILABLE");
|
|
24
|
+
const context = readLaunchContext(environment);
|
|
25
|
+
const client = options.control ?? new SupervisorClient(context.releaseId);
|
|
26
|
+
// Invariant: an instance belongs to the cohort that launched it and talks to that cohort's endpoint
|
|
27
|
+
// for its whole life, whatever release becomes the active one meanwhile.
|
|
28
|
+
const releaseId = context.releaseId;
|
|
29
|
+
const endpoint = releaseId
|
|
30
|
+
? resolveCohortEndpoint(paths, releaseId, environment).endpoint
|
|
31
|
+
: paths.endpoint;
|
|
32
|
+
await client.connect(endpoint);
|
|
33
|
+
await markStartupPhase(environment, "guardian-connected");
|
|
34
|
+
const containment = options.containment ?? new NativeGuardianContainment(instanceId, helperPath, resolve(paths.runtimeDir, "launch-instances", `${instanceId}.ready.json`));
|
|
35
|
+
const stop = stopRequests(client, instanceId);
|
|
36
|
+
let rootIdentity = null;
|
|
37
|
+
try {
|
|
38
|
+
await requireAccepted(client, {
|
|
39
|
+
type: "create-launch-instance",
|
|
40
|
+
requestId: randomUUID(),
|
|
41
|
+
instanceId,
|
|
42
|
+
profileId: options.profileId,
|
|
43
|
+
shutdownPolicy: "terminate-tree-on-close",
|
|
44
|
+
guardianIdentity,
|
|
45
|
+
});
|
|
46
|
+
let handle;
|
|
47
|
+
try {
|
|
48
|
+
handle = await containment.spawn(process.execPath, [options.uiEntry, ...sessionArgs], {
|
|
49
|
+
cwd: options.cwd ?? process.cwd(),
|
|
50
|
+
environment: environmentEntries(environment),
|
|
51
|
+
...(environment.TERM ? { terminalType: environment.TERM } : {}),
|
|
52
|
+
});
|
|
53
|
+
rootIdentity = handle.identity;
|
|
54
|
+
await requireAccepted(client, {
|
|
55
|
+
type: "activate-launch-instance",
|
|
56
|
+
requestId: randomUUID(),
|
|
57
|
+
instanceId,
|
|
58
|
+
rootIdentity,
|
|
59
|
+
containmentIdentity: containment.identity,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
const outcome = failureOutcome(error, "guardian-error");
|
|
64
|
+
await completeBestEffort(client, instanceId, "completed", outcome);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
const outcome = await Promise.race([
|
|
68
|
+
handle.outcome,
|
|
69
|
+
stop.requested.then(async (reason) => {
|
|
70
|
+
if (reason !== "supervisor-disconnect") {
|
|
71
|
+
await requireAccepted(client, {
|
|
72
|
+
type: "begin-launch-instance-stop",
|
|
73
|
+
requestId: randomUUID(),
|
|
74
|
+
instanceId,
|
|
75
|
+
reason,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
if (!rootIdentity)
|
|
79
|
+
return failureOutcome(new Error("launch root identity is unavailable"), "cleanup-error");
|
|
80
|
+
const result = await closeVerifiedContainment(containment, inspector, rootIdentity, reason);
|
|
81
|
+
await containment.close();
|
|
82
|
+
if (reason === "supervisor-disconnect" && result.outcome.kind === "stopped") {
|
|
83
|
+
return {
|
|
84
|
+
kind: "interrupted",
|
|
85
|
+
reason,
|
|
86
|
+
message: "supervisor disconnected after local launch-instance containment closed",
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return result.outcome;
|
|
90
|
+
}),
|
|
91
|
+
]);
|
|
92
|
+
await containment.close();
|
|
93
|
+
if (outcome.kind !== "interrupted" || outcome.reason !== "supervisor-disconnect") {
|
|
94
|
+
await completeBestEffort(client, instanceId, outcome.kind === "interrupted" || outcome.kind === "cleanup-error" ? "interrupted" : "completed", outcome);
|
|
95
|
+
}
|
|
96
|
+
return exitCode(outcome);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
await containment.close().catch(() => undefined);
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
stop.dispose();
|
|
104
|
+
client.close();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function platformInspector(helperPath) {
|
|
108
|
+
if (process.platform === "win32")
|
|
109
|
+
return new WindowsNativeProcessInspector(helperPath);
|
|
110
|
+
if (process.platform === "linux")
|
|
111
|
+
return new LinuxNativeProcessInspector();
|
|
112
|
+
if (process.platform === "darwin")
|
|
113
|
+
return new DarwinNativeProcessInspector(helperPath);
|
|
114
|
+
throw diagnosticError(`launch-instance process containment is unsupported on ${process.platform}`, "CONTAINMENT_UNSUPPORTED");
|
|
115
|
+
}
|
|
116
|
+
function stopRequests(client, instanceId) {
|
|
117
|
+
let resolveStop;
|
|
118
|
+
let settled = false;
|
|
119
|
+
const requested = new Promise(resolvePromise => { resolveStop = resolvePromise; });
|
|
120
|
+
const request = (reason) => {
|
|
121
|
+
if (settled)
|
|
122
|
+
return;
|
|
123
|
+
settled = true;
|
|
124
|
+
resolveStop(reason);
|
|
125
|
+
};
|
|
126
|
+
const onStopIntent = (intent) => {
|
|
127
|
+
if (intent.instanceId === instanceId)
|
|
128
|
+
request(intent.reason);
|
|
129
|
+
};
|
|
130
|
+
const onDisconnect = () => request("supervisor-disconnect");
|
|
131
|
+
const onSigterm = () => request("user-request");
|
|
132
|
+
const onSigint = () => undefined;
|
|
133
|
+
client.on("stopIntent", onStopIntent);
|
|
134
|
+
client.on("disconnect", onDisconnect);
|
|
135
|
+
process.once("SIGTERM", onSigterm);
|
|
136
|
+
process.on("SIGINT", onSigint);
|
|
137
|
+
return {
|
|
138
|
+
requested,
|
|
139
|
+
dispose() {
|
|
140
|
+
client.off("stopIntent", onStopIntent);
|
|
141
|
+
client.off("disconnect", onDisconnect);
|
|
142
|
+
process.off("SIGTERM", onSigterm);
|
|
143
|
+
process.off("SIGINT", onSigint);
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async function requireAccepted(client, command) {
|
|
148
|
+
const result = await client.command(command);
|
|
149
|
+
if (!result.ok)
|
|
150
|
+
throw diagnosticError(result.error?.message ?? `supervisor rejected ${command.type}`, result.error?.code ?? "SUPERVISOR_REJECTED");
|
|
151
|
+
}
|
|
152
|
+
async function completeBestEffort(client, instanceId, terminalState, outcome) {
|
|
153
|
+
await requireAccepted(client, {
|
|
154
|
+
type: "complete-launch-instance",
|
|
155
|
+
requestId: randomUUID(),
|
|
156
|
+
instanceId,
|
|
157
|
+
terminalState,
|
|
158
|
+
outcome,
|
|
159
|
+
}).catch(() => undefined);
|
|
160
|
+
}
|
|
161
|
+
function environmentEntries(environment) {
|
|
162
|
+
return Object.fromEntries(Object.entries(environment).filter((entry) => entry[1] !== undefined));
|
|
163
|
+
}
|
|
164
|
+
function failureOutcome(error, kind) {
|
|
165
|
+
return {
|
|
166
|
+
kind,
|
|
167
|
+
message: error instanceof Error ? error.message : String(error),
|
|
168
|
+
code: error instanceof Error && "code" in error && typeof error.code === "string" ? error.code : null,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function exitCode(outcome) {
|
|
172
|
+
if (outcome.kind === "exited")
|
|
173
|
+
return outcome.exitCode;
|
|
174
|
+
if (outcome.kind === "stopped")
|
|
175
|
+
return 0;
|
|
176
|
+
return 1;
|
|
177
|
+
}
|
|
178
|
+
function diagnosticError(message, code) {
|
|
179
|
+
return Object.assign(new Error(`${PRODUCT_TEXT.displayName}: ${message}`), { code });
|
|
180
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type { LaunchInstanceStopIntent, SupervisorCommand } from "./commands.js";
|
|
2
|
+
export { assertLaunchInstance, assertLaunchInstanceOutcome, assertLaunchInstanceTransition, assertProcessContainmentIdentity } from "./launch-instance.js";
|
|
3
|
+
export type { LaunchInstance, LaunchInstanceId, LaunchInstanceOutcome, LaunchInstanceShutdownPolicy, LaunchInstanceState, LaunchInstanceStopReason, ProcessContainmentIdentity, } from "./launch-instance.js";
|
|
4
|
+
export { assertDimensions, assertLaunchProfileId, assertNativeProcessIdentity, assertTransparentTerminalLaunchProfile } from "./model.js";
|
|
5
|
+
export type { CommandResult, DriverProfileId, GenerationId, LaunchProfileId, NativeProcessIdentity, RequestId, SupervisorSnapshot, TerminalDimensions, TransparentTerminalLaunchProfile, TransparentTerminalLifecycleOutcome, } from "./model.js";
|
|
6
|
+
export { resolveCohortEndpoint, resolveProductPaths } from "./paths.js";
|
|
7
|
+
export type { CohortEndpointPaths, ProductPaths } from "./paths.js";
|
|
8
|
+
export { parseSessionSelection, sessionSelectionArguments } from "./session-selection.js";
|
|
9
|
+
export type { SessionSelection } from "./session-selection.js";
|
|
10
|
+
export { createSupervisorStartupAttempt, publishSupervisorStartupResult, readSupervisorStartupResult, supervisorStartupFailure, supervisorStartupReady, supervisorStartupResultPath, } from "./supervisor-startup.js";
|
|
11
|
+
export type { SupervisorStartupAttemptIdentity, SupervisorStartupResult } from "./supervisor-startup.js";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { assertLaunchInstance, assertLaunchInstanceOutcome, assertLaunchInstanceTransition, assertProcessContainmentIdentity } from "./launch-instance.js";
|
|
2
|
+
export { assertDimensions, assertLaunchProfileId, assertNativeProcessIdentity, assertTransparentTerminalLaunchProfile } from "./model.js";
|
|
3
|
+
export { resolveCohortEndpoint, resolveProductPaths } from "./paths.js";
|
|
4
|
+
export { parseSessionSelection, sessionSelectionArguments } from "./session-selection.js";
|
|
5
|
+
export { createSupervisorStartupAttempt, publishSupervisorStartupResult, readSupervisorStartupResult, supervisorStartupFailure, supervisorStartupReady, supervisorStartupResultPath, } from "./supervisor-startup.js";
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export type LaunchProfileId = "a1" | "pi";
|
|
2
|
+
export type GenerationId = string;
|
|
3
|
+
export type DriverProfileId = string;
|
|
4
|
+
export type RequestId = string;
|
|
5
|
+
export interface TerminalDimensions {
|
|
6
|
+
readonly columns: number;
|
|
7
|
+
readonly rows: number;
|
|
8
|
+
}
|
|
9
|
+
export interface TransparentTerminalLaunchProfile {
|
|
10
|
+
readonly id: DriverProfileId;
|
|
11
|
+
readonly terminalCapability: "transparent";
|
|
12
|
+
readonly executable: string;
|
|
13
|
+
readonly arguments: readonly string[];
|
|
14
|
+
readonly cwd: string;
|
|
15
|
+
readonly environment: Readonly<Record<string, string>>;
|
|
16
|
+
readonly terminalType: string;
|
|
17
|
+
readonly dimensions: TerminalDimensions;
|
|
18
|
+
readonly ownerDisconnect: "stop" | "detach";
|
|
19
|
+
readonly recovery: "detach-only" | "none";
|
|
20
|
+
readonly surface: "none";
|
|
21
|
+
readonly visualReconnection: "none";
|
|
22
|
+
}
|
|
23
|
+
export interface NativeProcessIdentity {
|
|
24
|
+
readonly pid: number;
|
|
25
|
+
readonly startIdentity: string;
|
|
26
|
+
}
|
|
27
|
+
export type TransparentTerminalLifecycleOutcome = {
|
|
28
|
+
readonly kind: "exited";
|
|
29
|
+
readonly exitCode: number;
|
|
30
|
+
} | {
|
|
31
|
+
readonly kind: "signaled";
|
|
32
|
+
readonly signal: string;
|
|
33
|
+
} | {
|
|
34
|
+
readonly kind: "stopped";
|
|
35
|
+
readonly reason: "owner-disconnect" | "user-request" | "update";
|
|
36
|
+
} | {
|
|
37
|
+
readonly kind: "detached";
|
|
38
|
+
readonly reason: "owner-disconnect";
|
|
39
|
+
} | {
|
|
40
|
+
readonly kind: "spawn-error" | "broker-error";
|
|
41
|
+
readonly message: string;
|
|
42
|
+
readonly code: string | null;
|
|
43
|
+
};
|
|
44
|
+
export interface SupervisorSnapshot {
|
|
45
|
+
readonly revision: number;
|
|
46
|
+
readonly activeInstances: readonly {
|
|
47
|
+
readonly id: string;
|
|
48
|
+
readonly profileId: LaunchProfileId;
|
|
49
|
+
readonly state: "requested" | "active" | "stopping";
|
|
50
|
+
}[];
|
|
51
|
+
}
|
|
52
|
+
export interface CommandResult {
|
|
53
|
+
readonly requestId: RequestId;
|
|
54
|
+
readonly ok: boolean;
|
|
55
|
+
readonly revision: number;
|
|
56
|
+
readonly error?: {
|
|
57
|
+
readonly code: "invalid-command" | "not-found" | "stale-generation" | "capability-error" | "containment-unsupported" | "ownership-error" | "driver-error";
|
|
58
|
+
readonly message: string;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export declare function assertLaunchProfileId(value: unknown): asserts value is LaunchProfileId;
|
|
62
|
+
export declare function assertDimensions(dimensions: TerminalDimensions): void;
|
|
63
|
+
export declare function assertTransparentTerminalLaunchProfile(profile: TransparentTerminalLaunchProfile): void;
|
|
64
|
+
export declare function assertNativeProcessIdentity(identity: NativeProcessIdentity): void;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { PRODUCT_TEXT } from "../../product-identity.js";
|
|
2
|
+
export function assertLaunchProfileId(value) {
|
|
3
|
+
if (value !== "a1" && value !== "pi")
|
|
4
|
+
throw new TypeError(PRODUCT_TEXT.diagnostic(`launch profile is invalid: ${String(value)}`));
|
|
5
|
+
}
|
|
6
|
+
export function assertDimensions(dimensions) {
|
|
7
|
+
if (!Number.isInteger(dimensions.columns) || dimensions.columns < 2 || dimensions.columns > 500) {
|
|
8
|
+
throw new RangeError("terminal columns must be an integer from 2 to 500");
|
|
9
|
+
}
|
|
10
|
+
if (!Number.isInteger(dimensions.rows) || dimensions.rows < 1 || dimensions.rows > 300) {
|
|
11
|
+
throw new RangeError("terminal rows must be an integer from 1 to 300");
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function assertTransparentTerminalLaunchProfile(profile) {
|
|
15
|
+
if (!profile.id || profile.terminalCapability !== "transparent")
|
|
16
|
+
throw new TypeError("invalid transparent terminal profile identity");
|
|
17
|
+
if (!profile.executable || profile.executable.includes("\0"))
|
|
18
|
+
throw new TypeError("transparent executable must be non-empty and contain no null byte");
|
|
19
|
+
if (!profile.cwd || profile.cwd.includes("\0"))
|
|
20
|
+
throw new TypeError("transparent working directory must be non-empty and contain no null byte");
|
|
21
|
+
if (profile.arguments.some(value => typeof value !== "string" || value.includes("\0")))
|
|
22
|
+
throw new TypeError("transparent arguments must contain no null byte");
|
|
23
|
+
if (Object.entries(profile.environment).some(([name, value]) => !name || name.includes("=") || name.includes("\0") || value.includes("\0"))) {
|
|
24
|
+
throw new TypeError("transparent environment contains an invalid name or value");
|
|
25
|
+
}
|
|
26
|
+
if (!profile.terminalType || profile.terminalType.includes("\0"))
|
|
27
|
+
throw new TypeError("transparent terminal type is invalid");
|
|
28
|
+
assertDimensions(profile.dimensions);
|
|
29
|
+
if (profile.surface !== "none" || profile.visualReconnection !== "none")
|
|
30
|
+
throw new TypeError("transparent profiles cannot declare a surface or visual reconnection");
|
|
31
|
+
if (profile.ownerDisconnect === "detach" && profile.recovery !== "detach-only")
|
|
32
|
+
throw new TypeError("transparent detach policy requires detach-only recovery");
|
|
33
|
+
if (profile.ownerDisconnect === "stop" && profile.recovery !== "none")
|
|
34
|
+
throw new TypeError("transparent stop policy requires no recovery claim");
|
|
35
|
+
}
|
|
36
|
+
export function assertNativeProcessIdentity(identity) {
|
|
37
|
+
if (!Number.isSafeInteger(identity.pid) || identity.pid <= 0 || !identity.startIdentity || identity.startIdentity.includes("\0")) {
|
|
38
|
+
throw new TypeError("invalid native process identity");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface ProductPaths {
|
|
2
|
+
readonly configDir: string;
|
|
3
|
+
readonly dataDir: string;
|
|
4
|
+
readonly runtimeDir: string;
|
|
5
|
+
readonly databasePath: string;
|
|
6
|
+
/** The endpoint written by releases that predate cohort-scoped identity. */
|
|
7
|
+
readonly endpoint: string;
|
|
8
|
+
/** The metadata written by releases that predate cohort-scoped identity. */
|
|
9
|
+
readonly endpointMetadataPath: string;
|
|
10
|
+
readonly endpointsDir: string;
|
|
11
|
+
/** A short, A1-managed socket directory when the host imposes a small Unix-path limit. */
|
|
12
|
+
readonly endpointDirectory?: string | null;
|
|
13
|
+
readonly supervisorLogPath: string;
|
|
14
|
+
}
|
|
15
|
+
/** Where one cohort listens, and where it records that it is listening. */
|
|
16
|
+
export interface CohortEndpointPaths {
|
|
17
|
+
readonly endpoint: string;
|
|
18
|
+
readonly endpointMetadataPath: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Endpoint identity for one release cohort. Two cohorts can be live at once — an update
|
|
22
|
+
* leaves a working session on the release it started on — so the name a supervisor listens
|
|
23
|
+
* on has to name the release as well as the runtime directory, or the two contend for one
|
|
24
|
+
* endpoint and replacing one means ending the other.
|
|
25
|
+
*
|
|
26
|
+
* An explicit endpoint override keeps its single endpoint: it is how an isolated run pins
|
|
27
|
+
* the address it is going to talk to.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveCohortEndpoint(paths: ProductPaths, releaseId: string, environment?: NodeJS.ProcessEnv, hostPlatform?: NodeJS.Platform): CohortEndpointPaths;
|
|
30
|
+
export declare function resolveProductPaths(environment?: NodeJS.ProcessEnv, hostPlatform?: NodeJS.Platform, fallbackHome?: string): ProductPaths;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { homedir, platform } from "node:os";
|
|
3
|
+
import { posix, win32 } from "node:path";
|
|
4
|
+
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
5
|
+
/**
|
|
6
|
+
* Endpoint identity for one release cohort. Two cohorts can be live at once — an update
|
|
7
|
+
* leaves a working session on the release it started on — so the name a supervisor listens
|
|
8
|
+
* on has to name the release as well as the runtime directory, or the two contend for one
|
|
9
|
+
* endpoint and replacing one means ending the other.
|
|
10
|
+
*
|
|
11
|
+
* An explicit endpoint override keeps its single endpoint: it is how an isolated run pins
|
|
12
|
+
* the address it is going to talk to.
|
|
13
|
+
*/
|
|
14
|
+
export function resolveCohortEndpoint(paths, releaseId, environment = process.env, hostPlatform = platform()) {
|
|
15
|
+
if (environment[PRODUCT_IDENTITY.environment.endpoint]) {
|
|
16
|
+
return { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath };
|
|
17
|
+
}
|
|
18
|
+
const path = hostPlatform === "win32" ? win32 : posix;
|
|
19
|
+
const token = createHash("sha256").update(releaseId).digest("hex").slice(0, 16);
|
|
20
|
+
const endpoint = hostPlatform === "win32"
|
|
21
|
+
? `${paths.endpoint}-${token}`
|
|
22
|
+
: path.join(paths.endpointDirectory ?? paths.runtimeDir, `${token}-${PRODUCT_IDENTITY.endpoint.unixSocketFilename}`);
|
|
23
|
+
return { endpoint, endpointMetadataPath: path.join(paths.endpointsDir, `${token}.json`) };
|
|
24
|
+
}
|
|
25
|
+
export function resolveProductPaths(environment = process.env, hostPlatform = platform(), fallbackHome = homedir()) {
|
|
26
|
+
const windows = hostPlatform === "win32";
|
|
27
|
+
const path = windows ? win32 : posix;
|
|
28
|
+
const home = environment.HOME ?? environment.USERPROFILE ?? fallbackHome;
|
|
29
|
+
const configOverride = environment[PRODUCT_IDENTITY.environment.configDir];
|
|
30
|
+
const dataOverride = environment[PRODUCT_IDENTITY.environment.dataDir];
|
|
31
|
+
const runtimeOverride = environment[PRODUCT_IDENTITY.environment.runtimeDir];
|
|
32
|
+
const databaseOverride = environment[PRODUCT_IDENTITY.environment.databasePath];
|
|
33
|
+
const endpointOverride = environment[PRODUCT_IDENTITY.environment.endpoint];
|
|
34
|
+
const configDir = path.resolve(configOverride
|
|
35
|
+
?? (windows
|
|
36
|
+
? path.join(environment.APPDATA ?? home, PRODUCT_IDENTITY.state.windowsControlDirectory)
|
|
37
|
+
: path.join(environment.XDG_CONFIG_HOME ?? path.join(home, ".config"), PRODUCT_IDENTITY.state.unixControlDirectory)));
|
|
38
|
+
const dataDir = path.resolve(dataOverride
|
|
39
|
+
?? (windows
|
|
40
|
+
? path.join(environment.LOCALAPPDATA ?? home, PRODUCT_IDENTITY.state.windowsControlDirectory)
|
|
41
|
+
: path.join(environment.XDG_DATA_HOME ?? path.join(home, ".local", "share"), PRODUCT_IDENTITY.state.unixControlDirectory)));
|
|
42
|
+
const runtimeDir = path.resolve(runtimeOverride
|
|
43
|
+
?? (windows
|
|
44
|
+
? path.join(dataDir, "runtime")
|
|
45
|
+
: environment.XDG_RUNTIME_DIR
|
|
46
|
+
? path.join(environment.XDG_RUNTIME_DIR, PRODUCT_IDENTITY.state.unixControlDirectory)
|
|
47
|
+
: path.join(dataDir, "runtime")));
|
|
48
|
+
const namespace = createHash("sha256").update(runtimeDir.toLowerCase()).digest("hex").slice(0, 20);
|
|
49
|
+
// Platform: Darwin limits Unix-domain socket paths to roughly 104 bytes. Runtime roots
|
|
50
|
+
// under /var/folders can exceed that before the cohort suffix is added, so only socket
|
|
51
|
+
// files use a short owned namespace while metadata remains under the selected runtime.
|
|
52
|
+
const endpointDirectory = !endpointOverride && hostPlatform === "darwin"
|
|
53
|
+
? posix.join("/tmp", `${PRODUCT_IDENTITY.state.unixControlDirectory}-${namespace}`)
|
|
54
|
+
: null;
|
|
55
|
+
const endpoint = endpointOverride
|
|
56
|
+
?? (windows
|
|
57
|
+
? `\\\\.\\pipe\\${PRODUCT_IDENTITY.endpoint.windowsPipeStem}-${namespace}`
|
|
58
|
+
: path.join(endpointDirectory ?? runtimeDir, PRODUCT_IDENTITY.endpoint.unixSocketFilename));
|
|
59
|
+
return {
|
|
60
|
+
configDir,
|
|
61
|
+
dataDir,
|
|
62
|
+
runtimeDir,
|
|
63
|
+
databasePath: path.resolve(databaseOverride ?? path.join(dataDir, PRODUCT_IDENTITY.endpoint.databaseFilename)),
|
|
64
|
+
endpoint,
|
|
65
|
+
endpointMetadataPath: path.join(runtimeDir, PRODUCT_IDENTITY.endpoint.metadataFilename),
|
|
66
|
+
endpointsDir: path.join(runtimeDir, "endpoints"),
|
|
67
|
+
endpointDirectory,
|
|
68
|
+
supervisorLogPath: path.join(runtimeDir, PRODUCT_IDENTITY.endpoint.supervisorLogFilename),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Invocation-scoped selection; never inferred from a parent's active-session environment. */
|
|
2
|
+
export interface SessionSelection {
|
|
3
|
+
readonly target: string;
|
|
4
|
+
readonly sessionDir?: string;
|
|
5
|
+
}
|
|
6
|
+
/** Shared public/internal grammar, deliberately not arbitrary Pi argument passthrough. */
|
|
7
|
+
export declare function parseSessionSelection(arguments_: readonly string[]): SessionSelection | undefined;
|
|
8
|
+
/** Encode only validated values into separate argv entries; no shell quoting or evaluation. */
|
|
9
|
+
export declare function sessionSelectionArguments(selection?: SessionSelection): string[];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Shared public/internal grammar, deliberately not arbitrary Pi argument passthrough. */
|
|
2
|
+
export function parseSessionSelection(arguments_) {
|
|
3
|
+
if (arguments_.length === 0)
|
|
4
|
+
return undefined;
|
|
5
|
+
let target;
|
|
6
|
+
let sessionDir;
|
|
7
|
+
for (let index = 0; index < arguments_.length; index += 2) {
|
|
8
|
+
const option = arguments_[index];
|
|
9
|
+
if (option !== "--session" && option !== "--session-dir")
|
|
10
|
+
throw new Error("expected --session <path|id> with optional --session-dir <dir>");
|
|
11
|
+
const value = arguments_[index + 1];
|
|
12
|
+
if (value === undefined || value.startsWith("-") || !validValue(value))
|
|
13
|
+
throw new Error(`${option} requires a nonempty value`);
|
|
14
|
+
if (option === "--session") {
|
|
15
|
+
if (target !== undefined)
|
|
16
|
+
throw new Error("--session may occur only once");
|
|
17
|
+
target = value;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
if (sessionDir !== undefined)
|
|
21
|
+
throw new Error("--session-dir may occur only once");
|
|
22
|
+
sessionDir = value;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target === undefined)
|
|
26
|
+
throw new Error("--session-dir requires --session <path|id>");
|
|
27
|
+
return Object.freeze({ target, ...(sessionDir === undefined ? {} : { sessionDir }) });
|
|
28
|
+
}
|
|
29
|
+
/** Encode only validated values into separate argv entries; no shell quoting or evaluation. */
|
|
30
|
+
export function sessionSelectionArguments(selection) {
|
|
31
|
+
if (selection === undefined)
|
|
32
|
+
return [];
|
|
33
|
+
const args = [...(selection.sessionDir === undefined ? [] : ["--session-dir", selection.sessionDir]), "--session", selection.target];
|
|
34
|
+
parseSessionSelection(args);
|
|
35
|
+
return args;
|
|
36
|
+
}
|
|
37
|
+
function validValue(value) {
|
|
38
|
+
return value.trim().length > 0 && value.length <= 32_768 && !/[\u0000\r\n]/.test(value);
|
|
39
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
declare const STARTUP_SCHEMA = "a1-supervisor-startup-v1";
|
|
2
|
+
export interface SupervisorStartupAttemptIdentity {
|
|
3
|
+
readonly attemptId: string;
|
|
4
|
+
readonly releaseId: string;
|
|
5
|
+
readonly resultPath: string;
|
|
6
|
+
}
|
|
7
|
+
export type SupervisorStartupResult = {
|
|
8
|
+
readonly schema: typeof STARTUP_SCHEMA;
|
|
9
|
+
readonly attemptId: string;
|
|
10
|
+
readonly releaseId: string;
|
|
11
|
+
readonly outcome: "ready";
|
|
12
|
+
readonly pid: number;
|
|
13
|
+
} | {
|
|
14
|
+
readonly schema: typeof STARTUP_SCHEMA;
|
|
15
|
+
readonly attemptId: string;
|
|
16
|
+
readonly releaseId: string;
|
|
17
|
+
readonly outcome: "failure";
|
|
18
|
+
readonly stage: string;
|
|
19
|
+
readonly code: string | null;
|
|
20
|
+
readonly message: string;
|
|
21
|
+
};
|
|
22
|
+
/** Create one unguessable startup result authority under the protected runtime root. */
|
|
23
|
+
export declare function createSupervisorStartupAttempt(runtimeDir: string, releaseId: string): Promise<SupervisorStartupAttemptIdentity>;
|
|
24
|
+
export declare function supervisorStartupResultPath(runtimeDir: string, attemptId: string): string;
|
|
25
|
+
/** Atomically publish the bounded result for one detached supervisor startup attempt. */
|
|
26
|
+
export declare function publishSupervisorStartupResult(path: string, result: SupervisorStartupResult): Promise<void>;
|
|
27
|
+
export declare function readSupervisorStartupResult(path: string, attemptId: string, releaseId: string): Promise<SupervisorStartupResult | null>;
|
|
28
|
+
export declare function supervisorStartupFailure(error: unknown, attemptId: string, releaseId: string, stage: string): SupervisorStartupResult;
|
|
29
|
+
export declare function supervisorStartupReady(attemptId: string, releaseId: string): SupervisorStartupResult;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { mkdir, readFile, readdir, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
const STARTUP_SCHEMA = "a1-supervisor-startup-v1";
|
|
5
|
+
const MAX_RESULT_BYTES = 8 * 1024;
|
|
6
|
+
const MAX_MESSAGE_LENGTH = 1_024;
|
|
7
|
+
const MAX_RETAINED_RESULTS = 16;
|
|
8
|
+
const MAX_RESULT_AGE_MS = 7 * 24 * 60 * 60 * 1_000;
|
|
9
|
+
const ATTEMPT_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/;
|
|
10
|
+
/** Create one unguessable startup result authority under the protected runtime root. */
|
|
11
|
+
export async function createSupervisorStartupAttempt(runtimeDir, releaseId) {
|
|
12
|
+
const attemptId = randomUUID();
|
|
13
|
+
const directory = resolve(runtimeDir, "supervisor-startup");
|
|
14
|
+
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
15
|
+
await pruneSupervisorStartupResults(directory);
|
|
16
|
+
return { attemptId, releaseId, resultPath: supervisorStartupResultPath(runtimeDir, attemptId) };
|
|
17
|
+
}
|
|
18
|
+
export function supervisorStartupResultPath(runtimeDir, attemptId) {
|
|
19
|
+
if (!ATTEMPT_PATTERN.test(attemptId))
|
|
20
|
+
throw new TypeError("supervisor startup attempt identity is invalid");
|
|
21
|
+
return resolve(runtimeDir, "supervisor-startup", `${attemptId}.json`);
|
|
22
|
+
}
|
|
23
|
+
/** Atomically publish the bounded result for one detached supervisor startup attempt. */
|
|
24
|
+
export async function publishSupervisorStartupResult(path, result) {
|
|
25
|
+
validateSupervisorStartupResult(result, result.attemptId, result.releaseId);
|
|
26
|
+
const body = `${JSON.stringify(result)}\n`;
|
|
27
|
+
if (Buffer.byteLength(body) > MAX_RESULT_BYTES)
|
|
28
|
+
throw new Error("supervisor startup result exceeds its size bound");
|
|
29
|
+
const temporary = `${path}.${process.pid}.tmp`;
|
|
30
|
+
await writeFile(temporary, body, { encoding: "utf8", mode: 0o600 });
|
|
31
|
+
await rename(temporary, path);
|
|
32
|
+
}
|
|
33
|
+
export async function readSupervisorStartupResult(path, attemptId, releaseId) {
|
|
34
|
+
let metadata;
|
|
35
|
+
try {
|
|
36
|
+
metadata = await stat(path);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (isNodeError(error, "ENOENT"))
|
|
40
|
+
return null;
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
if (!metadata.isFile() || metadata.size > MAX_RESULT_BYTES)
|
|
44
|
+
throw new Error("supervisor startup result is invalid or oversized");
|
|
45
|
+
const value = JSON.parse(await readFile(path, "utf8"));
|
|
46
|
+
return validateSupervisorStartupResult(value, attemptId, releaseId);
|
|
47
|
+
}
|
|
48
|
+
export function supervisorStartupFailure(error, attemptId, releaseId, stage) {
|
|
49
|
+
const source = error instanceof Error ? error : new Error(String(error));
|
|
50
|
+
return {
|
|
51
|
+
schema: STARTUP_SCHEMA,
|
|
52
|
+
attemptId,
|
|
53
|
+
releaseId,
|
|
54
|
+
outcome: "failure",
|
|
55
|
+
stage: boundedToken(stage, "unknown"),
|
|
56
|
+
code: "code" in source && typeof source.code === "string" ? boundedToken(source.code, "UNKNOWN") : null,
|
|
57
|
+
message: sanitizeMessage(source.message),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export function supervisorStartupReady(attemptId, releaseId) {
|
|
61
|
+
return { schema: STARTUP_SCHEMA, attemptId, releaseId, outcome: "ready", pid: process.pid };
|
|
62
|
+
}
|
|
63
|
+
async function pruneSupervisorStartupResults(directory) {
|
|
64
|
+
const now = Date.now();
|
|
65
|
+
const entries = await readdir(directory, { withFileTypes: true });
|
|
66
|
+
const files = (await Promise.all(entries.filter(entry => entry.isFile() && entry.name.endsWith(".json")).map(async (entry) => {
|
|
67
|
+
const path = resolve(directory, entry.name);
|
|
68
|
+
const metadata = await stat(path).catch(() => null);
|
|
69
|
+
return metadata ? { path, modified: metadata.mtimeMs } : null;
|
|
70
|
+
}))).filter((file) => file !== null);
|
|
71
|
+
files.sort((left, right) => right.modified - left.modified);
|
|
72
|
+
await Promise.all(files.flatMap((file, index) => index >= MAX_RETAINED_RESULTS - 1 || now - file.modified > MAX_RESULT_AGE_MS
|
|
73
|
+
? [rm(file.path, { force: true })]
|
|
74
|
+
: []));
|
|
75
|
+
}
|
|
76
|
+
function validateSupervisorStartupResult(value, attemptId, releaseId) {
|
|
77
|
+
if (!value || typeof value !== "object")
|
|
78
|
+
throw new Error("supervisor startup result is malformed");
|
|
79
|
+
const result = value;
|
|
80
|
+
if (result.schema !== STARTUP_SCHEMA || result.attemptId !== attemptId || result.releaseId !== releaseId) {
|
|
81
|
+
throw new Error("supervisor startup result does not match the selected attempt and release");
|
|
82
|
+
}
|
|
83
|
+
if (result.outcome === "ready" && Number.isSafeInteger(result.pid) && Number(result.pid) > 0)
|
|
84
|
+
return result;
|
|
85
|
+
if (result.outcome === "failure" && typeof result.stage === "string" && result.stage.length > 0 && result.stage.length <= 128
|
|
86
|
+
&& (result.code === null || typeof result.code === "string") && typeof result.message === "string" && result.message.length <= MAX_MESSAGE_LENGTH) {
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
throw new Error("supervisor startup result is malformed");
|
|
90
|
+
}
|
|
91
|
+
function sanitizeMessage(message) {
|
|
92
|
+
let value = message.replace(/[\u0000-\u001f\u007f]+/g, " ").replace(/:\/\/[^\s/@:]+:[^\s/@]+@/g, "://<redacted>@");
|
|
93
|
+
for (const [name, secret] of Object.entries(process.env)) {
|
|
94
|
+
if (!secret || secret.length < 4 || !/(?:TOKEN|SECRET|PASSWORD|COOKIE|CREDENTIAL|AUTH)/i.test(name))
|
|
95
|
+
continue;
|
|
96
|
+
value = value.split(secret).join("<redacted>");
|
|
97
|
+
}
|
|
98
|
+
return value.trim().slice(0, MAX_MESSAGE_LENGTH) || "supervisor startup failed";
|
|
99
|
+
}
|
|
100
|
+
function boundedToken(value, fallback) {
|
|
101
|
+
const normalized = value.replace(/[^A-Za-z0-9_.:-]/g, "-").slice(0, 128);
|
|
102
|
+
return normalized || fallback;
|
|
103
|
+
}
|
|
104
|
+
function isNodeError(error, code) {
|
|
105
|
+
return error instanceof Error && "code" in error && error.code === code;
|
|
106
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { WindowsNativeProcessInspector, type InspectorCommandRunner } from "./windows-process-inspector.js";
|
|
2
|
+
/** Verifies Darwin process identity through the bounded native guardian inspection command. */
|
|
3
|
+
export declare class DarwinNativeProcessInspector extends WindowsNativeProcessInspector {
|
|
4
|
+
constructor(helperPath: string, runner?: InspectorCommandRunner);
|
|
5
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { WindowsNativeProcessInspector } from "./windows-process-inspector.js";
|
|
2
|
+
/** Verifies Darwin process identity through the bounded native guardian inspection command. */
|
|
3
|
+
export class DarwinNativeProcessInspector extends WindowsNativeProcessInspector {
|
|
4
|
+
constructor(helperPath, runner) {
|
|
5
|
+
super(helperPath, runner, "darwin-proc-start:");
|
|
6
|
+
}
|
|
7
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { verifyProcessGuardianArtifact } from "./artifact.js";
|
|
2
|
+
export { closeVerifiedContainment } from "./contracts.js";
|
|
3
|
+
export type { ContainedProcessHandle, ContainedSpawnOptions, ContainmentCloseResult, NativeProcessInspector, ProcessContainment, ProcessContainmentFactory, } from "./contracts.js";
|
|
4
|
+
export { DarwinNativeProcessInspector } from "./darwin-process-inspector.js";
|
|
5
|
+
export { LinuxNativeProcessInspector } from "./linux-process-inspector.js";
|
|
6
|
+
export { NativeGuardianContainment, resolveProcessGuardianPath } from "./native-guardian-containment.js";
|
|
7
|
+
export { WindowsNativeProcessInspector } from "./windows-process-inspector.js";
|
|
8
|
+
export type { InspectorCommandResult, InspectorCommandRunner } from "./windows-process-inspector.js";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { verifyProcessGuardianArtifact } from "./artifact.js";
|
|
2
|
+
export { closeVerifiedContainment } from "./contracts.js";
|
|
3
|
+
export { DarwinNativeProcessInspector } from "./darwin-process-inspector.js";
|
|
4
|
+
export { LinuxNativeProcessInspector } from "./linux-process-inspector.js";
|
|
5
|
+
export { NativeGuardianContainment, resolveProcessGuardianPath } from "./native-guardian-containment.js";
|
|
6
|
+
export { WindowsNativeProcessInspector } from "./windows-process-inspector.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NativeProcessIdentity } from "../lifecycle/index.js";
|
|
2
|
+
import type { NativeProcessInspector } from "./contracts.js";
|
|
3
|
+
/** Verifies Linux process identity from the PID and kernel start-time field in procfs. */
|
|
4
|
+
export declare class LinuxNativeProcessInspector implements NativeProcessInspector {
|
|
5
|
+
observe(pid: number): Promise<NativeProcessIdentity | null>;
|
|
6
|
+
matches(identity: NativeProcessIdentity): Promise<boolean>;
|
|
7
|
+
}
|