@timurproko/a1 0.1.8-dev.ece8cef → 0.2.1-dev.590
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 +104 -58
- package/bin/activate.js +8 -0
- package/bin/cli.js +39 -13
- package/bin/guardian.js +21 -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 +365 -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 +499 -0
- package/dist/app/session-shell/prompt-history-controller.d.ts +36 -0
- package/dist/app/session-shell/prompt-history-controller.js +170 -0
- package/dist/app/session-shell/prompt-suggestion-controller.d.ts +37 -0
- package/dist/app/session-shell/prompt-suggestion-controller.js +219 -0
- package/dist/app/session-shell/quit-outro-effects.d.ts +29 -0
- package/dist/app/session-shell/quit-outro-effects.js +242 -0
- package/dist/app/session-shell/quit-outro.d.ts +38 -0
- package/dist/app/session-shell/quit-outro.js +98 -0
- package/dist/app/session-shell/response-copy-coordinator.d.ts +27 -0
- package/dist/app/session-shell/response-copy-coordinator.js +187 -0
- package/dist/app/session-shell/response-copy-helper.js +122 -0
- package/dist/app/session-shell/response-copy-protocol.d.ts +56 -0
- package/dist/app/session-shell/response-copy-protocol.js +5 -0
- package/dist/app/session-shell/response-copy-transport.d.ts +39 -0
- package/dist/app/session-shell/response-copy-transport.js +217 -0
- package/dist/app/session-shell/session-shell-root.d.ts +278 -0
- package/dist/app/session-shell/session-shell-root.js +1442 -0
- package/dist/app/session-shell/session-shell.d.ts +66 -0
- package/dist/app/session-shell/session-shell.js +2151 -0
- package/dist/app/session-shell/session-viewport-controller.d.ts +62 -0
- package/dist/app/session-shell/session-viewport-controller.js +623 -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 +53 -0
- package/dist/cli/dispatch.js +287 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/package-messages.d.ts +27 -0
- package/dist/cli/package-messages.js +83 -0
- package/dist/cli/packages.d.ts +32 -0
- package/dist/cli/packages.js +81 -0
- package/dist/cli/session-context.d.ts +9 -0
- package/dist/cli/session-context.js +29 -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 +159 -0
- package/dist/composition/settings-route-host.d.ts +16 -0
- package/dist/composition/settings-route-host.js +141 -0
- package/dist/contracts/agent-engine/capability-ports.d.ts +95 -0
- package/dist/contracts/agent-engine/domain-validation.js +107 -0
- package/dist/contracts/agent-engine/domain.d.ts +138 -0
- package/dist/contracts/agent-engine/index.d.ts +11 -0
- package/dist/contracts/agent-engine/index.js +6 -0
- package/dist/contracts/agent-engine/package-ports.d.ts +60 -0
- package/dist/contracts/agent-engine/ports.js +1 -0
- package/dist/contracts/owned-ui/extension-ui.d.ts +310 -0
- package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
- package/dist/contracts/owned-ui/image-attachments.js +67 -0
- package/dist/contracts/owned-ui/index.d.ts +14 -0
- package/dist/contracts/owned-ui/index.js +9 -0
- package/dist/contracts/owned-ui/model.d.ts +383 -0
- package/dist/contracts/owned-ui/prompt-chips.d.ts +15 -0
- package/dist/contracts/owned-ui/prompt-chips.js +59 -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 +554 -0
- package/dist/contracts/presentation/index.d.ts +117 -0
- package/dist/contracts/presentation/index.js +68 -0
- package/dist/features/launch/development-launch.js +36 -0
- package/dist/features/launch/index.d.ts +14 -0
- package/dist/features/launch/index.js +7 -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/launch/session-context.d.ts +8 -0
- package/dist/features/launch/session-context.js +8 -0
- package/dist/features/owned-ui/index.d.ts +9 -0
- package/dist/features/owned-ui/index.js +6 -0
- package/dist/features/owned-ui/project-trust-dialog.d.ts +2 -0
- package/dist/features/owned-ui/project-trust-dialog.js +55 -0
- package/dist/features/owned-ui/project-trust-prompt.d.ts +23 -0
- package/dist/features/owned-ui/project-trust-prompt.js +149 -0
- package/dist/features/owned-ui/reference-routes.d.ts +6 -0
- package/dist/features/owned-ui/reference-routes.js +6 -0
- package/dist/features/owned-ui/reference-screen-app.d.ts +43 -0
- package/dist/features/owned-ui/reference-screen-app.js +279 -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 +851 -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 +179 -0
- package/dist/foundation/lifecycle/commands.js +1 -0
- package/dist/foundation/lifecycle/index.d.ts +13 -0
- package/dist/foundation/lifecycle/index.js +6 -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-repository-context.d.ts +18 -0
- package/dist/foundation/lifecycle/session-repository-context.js +173 -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 +470 -0
- package/dist/foundation/release/cohort-state.d.ts +159 -0
- package/dist/foundation/release/cohort-state.js +507 -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 +33 -0
- package/dist/foundation/release/index.js +18 -0
- package/dist/foundation/release/ordinary-launch-selection.d.ts +14 -0
- package/dist/foundation/release/ordinary-launch-selection.js +15 -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 +82 -0
- package/dist/foundation/release/update-recovery.js +386 -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 +142 -0
- package/dist/foundation/release/update.js +773 -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 +584 -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 +26 -0
- package/dist/integrations/pi/components/index.js +16 -0
- package/dist/integrations/pi/components/modal-frame.d.ts +41 -0
- package/dist/integrations/pi/components/modal-frame.js +110 -0
- package/dist/integrations/pi/components/models-dialog.d.ts +55 -0
- package/dist/integrations/pi/components/models-dialog.js +403 -0
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
- package/dist/integrations/pi/components/owned-editor-ux.js +1094 -0
- package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
- package/dist/integrations/pi/components/path-word-ranges.js +37 -0
- package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
- package/dist/integrations/pi/components/prompt-input-port.js +1 -0
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +167 -0
- package/dist/integrations/pi/components/resources/builtin-themes.js +168 -0
- package/dist/integrations/pi/components/shell-components.d.ts +7 -0
- package/dist/integrations/pi/components/shell-components.js +7 -0
- package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +23 -0
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +357 -0
- package/dist/integrations/pi/components/shell-extension-ui.d.ts +35 -0
- package/dist/integrations/pi/components/shell-extension-ui.js +282 -0
- package/dist/integrations/pi/components/shell-footer-status.d.ts +8 -0
- package/dist/integrations/pi/components/shell-footer-status.js +287 -0
- package/dist/integrations/pi/components/shell-hotkey-sections.d.ts +7 -0
- package/dist/integrations/pi/components/shell-hotkey-sections.js +29 -0
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +73 -0
- package/dist/integrations/pi/components/shell-presenters-info.js +188 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.js +435 -0
- package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +134 -0
- package/dist/integrations/pi/components/shell-selectors-dialogs.js +286 -0
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +233 -0
- package/dist/integrations/pi/components/shell-shared-facade.js +92 -0
- package/dist/integrations/pi/components/skills-command.d.ts +49 -0
- package/dist/integrations/pi/components/skills-command.js +119 -0
- package/dist/integrations/pi/components/skills-dialog.d.ts +9 -0
- package/dist/integrations/pi/components/skills-dialog.js +128 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +17 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +52 -0
- package/dist/integrations/pi/components/theme.d.ts +5 -0
- package/dist/integrations/pi/components/theme.js +11 -0
- package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +8 -0
- package/dist/integrations/pi/components/thinking-selector-dialog.js +22 -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 +371 -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 +22 -0
- package/dist/integrations/pi/components/upstream/components/extension-editor.js +89 -0
- package/dist/integrations/pi/components/upstream/components/extension-input.d.ts +17 -0
- package/dist/integrations/pi/components/upstream/components/extension-input.js +73 -0
- package/dist/integrations/pi/components/upstream/components/extension-selector.d.ts +15 -0
- package/dist/integrations/pi/components/upstream/components/extension-selector.js +93 -0
- package/dist/integrations/pi/components/upstream/components/mermaid.js +81 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +52 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +222 -0
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +60 -0
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +347 -0
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +12 -0
- package/dist/integrations/pi/components/upstream/components/session-footer.js +150 -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 +97 -0
- package/dist/integrations/pi/components/upstream/components/session-selector.js +935 -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 +54 -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/thinking-selector.d.ts +36 -0
- package/dist/integrations/pi/components/upstream/components/thinking-selector.js +153 -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 +102 -0
- package/dist/integrations/pi/components/upstream/components/tree-selector.js +1294 -0
- package/dist/integrations/pi/components/upstream/components/trust-selector.d.ts +33 -0
- package/dist/integrations/pi/components/upstream/components/trust-selector.js +87 -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 +2145 -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 +17 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +34 -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 +140 -0
- package/dist/integrations/pi/engine/adapter.js +663 -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 +24 -0
- package/dist/integrations/pi/engine/compaction-progress.js +97 -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 +169 -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 +397 -0
- package/dist/integrations/pi/engine/project-trust-preflight.d.ts +21 -0
- package/dist/integrations/pi/engine/project-trust-preflight.js +46 -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/repository-pr-rest.d.ts +21 -0
- package/dist/integrations/pi/engine/repository-pr-rest.js +155 -0
- package/dist/integrations/pi/engine/repository-pr.d.ts +16 -0
- package/dist/integrations/pi/engine/repository-pr.js +79 -0
- package/dist/integrations/pi/engine/resource-catalog.d.ts +50 -0
- package/dist/integrations/pi/engine/resource-catalog.js +299 -0
- package/dist/integrations/pi/engine/resources/changelog.json +12 -0
- package/dist/integrations/pi/engine/runtime-integration.d.ts +53 -0
- package/dist/integrations/pi/engine/runtime-integration.js +118 -0
- package/dist/integrations/pi/engine/session-events.d.ts +48 -0
- package/dist/integrations/pi/engine/session-events.js +223 -0
- package/dist/integrations/pi/engine/session-integration.d.ts +67 -0
- package/dist/integrations/pi/engine/session-integration.js +195 -0
- package/dist/integrations/pi/engine/session-runtime.d.ts +98 -0
- package/dist/integrations/pi/engine/session-runtime.js +412 -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 +516 -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 +363 -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 +440 -0
- package/dist/integrations/pi/engine/usage-view.d.ts +4 -0
- package/dist/integrations/pi/engine/usage-view.js +56 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
- package/dist/integrations/pi/engine/workflow-contexts.d.ts +66 -0
- package/dist/integrations/pi/engine/workflow-contexts.js +360 -0
- package/dist/integrations/pi/engine/workflow-runner.d.ts +60 -0
- package/dist/integrations/pi/engine/workflow-runner.js +536 -0
- package/dist/integrations/pi/engine/workflow-support.d.ts +38 -0
- package/dist/integrations/pi/engine/workflow-support.js +386 -0
- package/dist/integrations/pi/engine/workflows.d.ts +308 -0
- package/dist/integrations/pi/engine/workflows.js +81 -0
- package/dist/integrations/pi/startup-public.d.ts +2 -0
- package/dist/integrations/pi/startup-public.js +2254 -0
- package/dist/integrations/pi/startup-public.manifest.json +12679 -0
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +58 -0
- package/dist/integrations/pi/tui-runtime/adapter.js +792 -0
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +158 -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 +439 -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 +19 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.js +91 -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 +87 -0
- package/dist/runtime-payload-inventory.json +134179 -0
- package/dist/ui/apps/contracts.d.ts +72 -0
- package/dist/ui/apps/host.d.ts +42 -0
- package/dist/ui/apps/host.js +156 -0
- package/dist/ui/apps/index.d.ts +5 -0
- package/dist/ui/apps/index.js +3 -0
- package/dist/ui/apps/registry.d.ts +12 -0
- package/dist/ui/apps/registry.js +33 -0
- package/dist/ui/components/dialog-panel.d.ts +37 -0
- package/dist/ui/components/dialog-panel.js +58 -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 +50 -0
- package/dist/ui/components/index.js +26 -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-block.d.ts +70 -0
- package/dist/ui/components/list-block.js +189 -0
- package/dist/ui/components/list-view.d.ts +60 -0
- package/dist/ui/components/list-view.js +84 -0
- package/dist/ui/components/mouse.d.ts +25 -0
- package/dist/ui/components/mouse.js +72 -0
- package/dist/ui/components/progress-status.d.ts +9 -0
- package/dist/ui/components/progress-status.js +25 -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/shortcut-hints.d.ts +7 -0
- package/dist/ui/components/shortcut-hints.js +12 -0
- package/dist/ui/components/shortcuts.d.ts +60 -0
- package/dist/ui/components/shortcuts.js +85 -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/theme.d.ts +19 -0
- package/dist/ui/components/theme.js +9 -0
- package/dist/ui/components/transcript-viewport.d.ts +187 -0
- package/dist/ui/components/transcript-viewport.js +886 -0
- package/dist/ui/components/value-menu.d.ts +43 -0
- package/dist/ui/components/value-menu.js +41 -0
- package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
- package/dist/ui/components/visible-hyperlinks.js +97 -0
- package/dist/ui/settings/declarations.d.ts +127 -0
- package/dist/ui/settings/declarations.js +124 -0
- package/dist/ui/settings/index.d.ts +10 -0
- package/dist/ui/settings/index.js +5 -0
- package/dist/ui/settings/manager.d.ts +54 -0
- package/dist/ui/settings/manager.js +256 -0
- package/dist/ui/settings/migrations.d.ts +13 -0
- package/dist/ui/settings/migrations.js +92 -0
- package/dist/ui/settings/sections.d.ts +52 -0
- package/dist/ui/settings/sections.js +112 -0
- package/docs/architecture/boundaries.md +17 -13
- package/docs/architecture/code-documentation.md +77 -0
- package/docs/architecture/history-editor-provenance.md +100 -0
- package/docs/architecture/internal-naming.md +94 -0
- package/docs/architecture/process-guardian-provenance.md +3 -1
- package/docs/architecture/project-structure.md +72 -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 +34 -10
- package/docs/architecture/ui-reference-provenance.md +73 -6
- package/docs/ci-release-runbook.md +266 -77
- package/docs/features/launch-profiles.md +24 -17
- package/docs/features/modal-content-interaction.md +38 -0
- package/docs/features/prompt-history.md +149 -0
- package/docs/local-worktree-cleanup.md +214 -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 +269 -0
- package/docs/repository-governance-live-acceptance.md +77 -0
- package/docs/validation.md +105 -0
- package/package.json +53 -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 -31
- package/dist/src/cli/dispatch.js +0 -123
- package/dist/src/cli/index.d.ts +0 -5
- package/dist/src/cli/index.js +0 -5
- package/dist/src/cli/packages.d.ts +0 -23
- package/dist/src/cli/packages.js +0 -84
- package/dist/src/cli/version-stats.d.ts +0 -16
- package/dist/src/cli/version-stats.js +0 -72
- package/dist/src/cli/version.d.ts +0 -2
- package/dist/src/cli/version.js +0 -23
- package/dist/src/composition/index.d.ts +0 -48
- package/dist/src/composition/index.js +0 -258
- package/dist/src/features/launch/development-launch.js +0 -28
- package/dist/src/features/launch/index.d.ts +0 -7
- package/dist/src/features/launch/index.js +0 -7
- package/dist/src/features/launch/intent.d.ts +0 -7
- package/dist/src/features/launch/intent.js +0 -4
- package/dist/src/features/launch/prepare-launch.d.ts +0 -13
- package/dist/src/features/launch/prepare-launch.js +0 -21
- package/dist/src/features/launch/profile-paths.d.ts +0 -15
- package/dist/src/features/launch/profile-paths.js +0 -31
- package/dist/src/features/launch/profiles.d.ts +0 -12
- package/dist/src/features/launch/profiles.js +0 -26
- package/dist/src/features/launch/runtime-selection.d.ts +0 -19
- package/dist/src/features/launch/runtime-selection.js +0 -13
- package/dist/src/features/owned-ui/customization.d.ts +0 -38
- package/dist/src/features/owned-ui/customization.js +0 -108
- package/dist/src/features/owned-ui/diagnostics.d.ts +0 -33
- package/dist/src/features/owned-ui/diagnostics.js +0 -94
- package/dist/src/features/owned-ui/index.d.ts +0 -4
- package/dist/src/features/owned-ui/index.js +0 -4
- package/dist/src/features/owned-ui/run.d.ts +0 -11
- package/dist/src/features/owned-ui/run.js +0 -15
- package/dist/src/features/owned-ui/settings-app.d.ts +0 -22
- package/dist/src/features/owned-ui/settings-app.js +0 -633
- package/dist/src/features/workspace/capabilities.d.ts +0 -31
- package/dist/src/features/workspace/capabilities.js +0 -75
- package/dist/src/features/workspace/index.d.ts +0 -6
- package/dist/src/features/workspace/index.js +0 -6
- package/dist/src/features/workspace/presentation.d.ts +0 -30
- package/dist/src/features/workspace/presentation.js +0 -70
- package/dist/src/features/workspace/reconciliation.d.ts +0 -15
- package/dist/src/features/workspace/reconciliation.js +0 -82
- package/dist/src/features/workspace/reducer.d.ts +0 -42
- package/dist/src/features/workspace/reducer.js +0 -213
- package/dist/src/features/workspace/router.d.ts +0 -31
- package/dist/src/features/workspace/router.js +0 -124
- package/dist/src/features/workspace/store.d.ts +0 -17
- package/dist/src/features/workspace/store.js +0 -54
- package/dist/src/foundation/agent-engine-contracts/capability-ports.d.ts +0 -95
- package/dist/src/foundation/agent-engine-contracts/domain-validation.js +0 -89
- package/dist/src/foundation/agent-engine-contracts/domain.d.ts +0 -116
- package/dist/src/foundation/agent-engine-contracts/index.d.ts +0 -8
- package/dist/src/foundation/agent-engine-contracts/index.js +0 -8
- package/dist/src/foundation/agent-engine-contracts/package-ports.d.ts +0 -54
- package/dist/src/foundation/launch-guardian/index.d.ts +0 -1
- package/dist/src/foundation/launch-guardian/index.js +0 -1
- package/dist/src/foundation/launch-guardian/main.d.ts +0 -31
- package/dist/src/foundation/launch-guardian/main.js +0 -165
- package/dist/src/foundation/lifecycle/index.d.ts +0 -4
- package/dist/src/foundation/lifecycle/index.js +0 -4
- package/dist/src/foundation/lifecycle/model.d.ts +0 -64
- package/dist/src/foundation/lifecycle/model.js +0 -40
- package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
- package/dist/src/foundation/lifecycle/paths.js +0 -42
- package/dist/src/foundation/native-host-protocol/codec.d.ts +0 -11
- package/dist/src/foundation/native-host-protocol/codec.js +0 -56
- package/dist/src/foundation/native-host-protocol/evidence.d.ts +0 -67
- package/dist/src/foundation/native-host-protocol/evidence.js +0 -141
- package/dist/src/foundation/native-host-protocol/index.d.ts +0 -4
- package/dist/src/foundation/native-host-protocol/index.js +0 -4
- package/dist/src/foundation/native-host-protocol/messages.d.ts +0 -56
- package/dist/src/foundation/native-host-protocol/messages.js +0 -149
- package/dist/src/foundation/native-host-protocol/proof-gate.d.ts +0 -13
- package/dist/src/foundation/native-host-protocol/proof-gate.js +0 -33
- package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts +0 -302
- package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
- package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
- package/dist/src/foundation/owned-ui-contracts/model.d.ts +0 -241
- package/dist/src/foundation/owned-ui-contracts/validation.d.ts +0 -11
- package/dist/src/foundation/owned-ui-contracts/validation.js +0 -395
- package/dist/src/foundation/owned-ui-settings/declarations.d.ts +0 -13
- package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
- package/dist/src/foundation/owned-ui-settings/index.d.ts +0 -6
- package/dist/src/foundation/owned-ui-settings/index.js +0 -6
- package/dist/src/foundation/owned-ui-settings/migrations.d.ts +0 -13
- package/dist/src/foundation/owned-ui-settings/migrations.js +0 -28
- package/dist/src/foundation/owned-ui-settings/sections.d.ts +0 -70
- package/dist/src/foundation/owned-ui-settings/sections.js +0 -93
- package/dist/src/foundation/owned-ui-settings/session.d.ts +0 -44
- package/dist/src/foundation/owned-ui-settings/session.js +0 -145
- package/dist/src/foundation/owned-ui-settings/store.d.ts +0 -28
- package/dist/src/foundation/owned-ui-settings/store.js +0 -90
- package/dist/src/foundation/pi-component-adapter/components.d.ts +0 -4
- package/dist/src/foundation/pi-component-adapter/components.js +0 -64
- package/dist/src/foundation/pi-component-adapter/conformance.d.ts +0 -17
- package/dist/src/foundation/pi-component-adapter/conformance.js +0 -69
- package/dist/src/foundation/pi-component-adapter/index.d.ts +0 -13
- package/dist/src/foundation/pi-component-adapter/index.js +0 -13
- package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.d.ts +0 -165
- package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.js +0 -166
- package/dist/src/foundation/pi-component-adapter/shell-components.d.ts +0 -6
- package/dist/src/foundation/pi-component-adapter/shell-components.js +0 -6
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.d.ts +0 -11
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts +0 -35
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js +0 -279
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts +0 -7
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.js +0 -189
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js +0 -429
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts +0 -113
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +0 -235
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js +0 -87
- package/dist/src/foundation/pi-component-adapter/theme.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/theme.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts +0 -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/presentation-contracts/index.js +0 -38
- 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/development-preview-release.d.ts +0 -49
- package/dist/src/foundation/release/development-preview-release.js +0 -114
- package/dist/src/foundation/release/index.d.ts +0 -11
- package/dist/src/foundation/release/index.js +0 -11
- 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 -80
- package/dist/src/foundation/release/update.js +0 -458
- 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.d.ts +0 -36
- 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-block.d.ts +0 -66
- package/dist/src/foundation/ui-components/list-block.js +0 -176
- 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/ui-components/theme.d.ts +0 -23
- package/dist/src/foundation/ui-components/theme.js +0 -13
- package/dist/src/foundation/ui-components/value-menu.d.ts +0 -41
- package/dist/src/foundation/ui-components/value-menu.js +0 -33
- 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/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}/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}/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}/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/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,179 @@
|
|
|
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, resolveCohortEndpoint, resolveProductPaths, 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 { markStartupPhase } from "../startup/index.js";
|
|
9
|
+
export async function runLaunchGuardian(options) {
|
|
10
|
+
assertLaunchProfileId(options.profileId);
|
|
11
|
+
const sessionArgs = sessionSelectionArguments(options.sessionSelection);
|
|
12
|
+
if (sessionArgs.length > 0 && options.profileId !== "a1")
|
|
13
|
+
throw new Error("session selection requires the normal A1 profile");
|
|
14
|
+
const environment = { ...(options.environment ?? process.env) };
|
|
15
|
+
const paths = resolveProductPaths(environment);
|
|
16
|
+
const instanceId = randomUUID();
|
|
17
|
+
const helperPath = options.helperPath ?? resolveProcessGuardianPath(options.releaseRoot, environment);
|
|
18
|
+
const inspector = options.inspector ?? platformInspector(helperPath);
|
|
19
|
+
await (options.ensureHelper ?? verifyProcessGuardianArtifact)(helperPath);
|
|
20
|
+
const guardianIdentity = await inspector.observe(process.pid);
|
|
21
|
+
if (!guardianIdentity)
|
|
22
|
+
throw diagnosticError("launch guardian cannot verify its own native process identity", "PROCESS_IDENTITY_UNAVAILABLE");
|
|
23
|
+
const context = readLaunchContext(environment);
|
|
24
|
+
const client = options.control ?? new SupervisorClient(context.releaseId);
|
|
25
|
+
// Invariant: an instance belongs to the cohort that launched it and talks to that cohort's endpoint
|
|
26
|
+
// for its whole life, whatever release becomes the active one meanwhile.
|
|
27
|
+
const releaseId = context.releaseId;
|
|
28
|
+
const endpoint = releaseId
|
|
29
|
+
? resolveCohortEndpoint(paths, releaseId, environment).endpoint
|
|
30
|
+
: paths.endpoint;
|
|
31
|
+
await client.connect(endpoint);
|
|
32
|
+
await markStartupPhase(environment, "guardian-connected");
|
|
33
|
+
const containment = options.containment ?? new NativeGuardianContainment(instanceId, helperPath, resolve(paths.runtimeDir, "launch-instances", `${instanceId}.ready.json`));
|
|
34
|
+
const stop = stopRequests(client, instanceId);
|
|
35
|
+
let rootIdentity = null;
|
|
36
|
+
try {
|
|
37
|
+
await requireAccepted(client, {
|
|
38
|
+
type: "create-launch-instance",
|
|
39
|
+
requestId: randomUUID(),
|
|
40
|
+
instanceId,
|
|
41
|
+
profileId: options.profileId,
|
|
42
|
+
shutdownPolicy: "terminate-tree-on-close",
|
|
43
|
+
guardianIdentity,
|
|
44
|
+
});
|
|
45
|
+
let handle;
|
|
46
|
+
try {
|
|
47
|
+
handle = await containment.spawn(process.execPath, [options.uiEntry, ...sessionArgs], {
|
|
48
|
+
cwd: options.cwd ?? process.cwd(),
|
|
49
|
+
environment: environmentEntries(environment),
|
|
50
|
+
...(environment.TERM ? { terminalType: environment.TERM } : {}),
|
|
51
|
+
});
|
|
52
|
+
rootIdentity = handle.identity;
|
|
53
|
+
await requireAccepted(client, {
|
|
54
|
+
type: "activate-launch-instance",
|
|
55
|
+
requestId: randomUUID(),
|
|
56
|
+
instanceId,
|
|
57
|
+
rootIdentity,
|
|
58
|
+
containmentIdentity: containment.identity,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const outcome = failureOutcome(error, "guardian-error");
|
|
63
|
+
await completeBestEffort(client, instanceId, "completed", outcome);
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
const outcome = await Promise.race([
|
|
67
|
+
handle.outcome,
|
|
68
|
+
stop.requested.then(async (reason) => {
|
|
69
|
+
if (reason !== "supervisor-disconnect") {
|
|
70
|
+
await requireAccepted(client, {
|
|
71
|
+
type: "begin-launch-instance-stop",
|
|
72
|
+
requestId: randomUUID(),
|
|
73
|
+
instanceId,
|
|
74
|
+
reason,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (!rootIdentity)
|
|
78
|
+
return failureOutcome(new Error("launch root identity is unavailable"), "cleanup-error");
|
|
79
|
+
const result = await closeVerifiedContainment(containment, inspector, rootIdentity, reason);
|
|
80
|
+
await containment.close();
|
|
81
|
+
if (reason === "supervisor-disconnect" && result.outcome.kind === "stopped") {
|
|
82
|
+
return {
|
|
83
|
+
kind: "interrupted",
|
|
84
|
+
reason,
|
|
85
|
+
message: "supervisor disconnected after local launch-instance containment closed",
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return result.outcome;
|
|
89
|
+
}),
|
|
90
|
+
]);
|
|
91
|
+
await containment.close();
|
|
92
|
+
if (outcome.kind !== "interrupted" || outcome.reason !== "supervisor-disconnect") {
|
|
93
|
+
await completeBestEffort(client, instanceId, outcome.kind === "interrupted" || outcome.kind === "cleanup-error" ? "interrupted" : "completed", outcome);
|
|
94
|
+
}
|
|
95
|
+
return exitCode(outcome);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
await containment.close().catch(() => undefined);
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
stop.dispose();
|
|
103
|
+
client.close();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function platformInspector(helperPath) {
|
|
107
|
+
if (process.platform === "win32")
|
|
108
|
+
return new WindowsNativeProcessInspector(helperPath);
|
|
109
|
+
if (process.platform === "linux")
|
|
110
|
+
return new LinuxNativeProcessInspector();
|
|
111
|
+
if (process.platform === "darwin")
|
|
112
|
+
return new DarwinNativeProcessInspector(helperPath);
|
|
113
|
+
throw diagnosticError(`launch-instance process containment is unsupported on ${process.platform}`, "CONTAINMENT_UNSUPPORTED");
|
|
114
|
+
}
|
|
115
|
+
function stopRequests(client, instanceId) {
|
|
116
|
+
let resolveStop;
|
|
117
|
+
let settled = false;
|
|
118
|
+
const requested = new Promise(resolvePromise => { resolveStop = resolvePromise; });
|
|
119
|
+
const request = (reason) => {
|
|
120
|
+
if (settled)
|
|
121
|
+
return;
|
|
122
|
+
settled = true;
|
|
123
|
+
resolveStop(reason);
|
|
124
|
+
};
|
|
125
|
+
const onStopIntent = (intent) => {
|
|
126
|
+
if (intent.instanceId === instanceId)
|
|
127
|
+
request(intent.reason);
|
|
128
|
+
};
|
|
129
|
+
const onDisconnect = () => request("supervisor-disconnect");
|
|
130
|
+
const onSigterm = () => request("user-request");
|
|
131
|
+
const onSigint = () => undefined;
|
|
132
|
+
client.on("stopIntent", onStopIntent);
|
|
133
|
+
client.on("disconnect", onDisconnect);
|
|
134
|
+
process.once("SIGTERM", onSigterm);
|
|
135
|
+
process.on("SIGINT", onSigint);
|
|
136
|
+
return {
|
|
137
|
+
requested,
|
|
138
|
+
dispose() {
|
|
139
|
+
client.off("stopIntent", onStopIntent);
|
|
140
|
+
client.off("disconnect", onDisconnect);
|
|
141
|
+
process.off("SIGTERM", onSigterm);
|
|
142
|
+
process.off("SIGINT", onSigint);
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
async function requireAccepted(client, command) {
|
|
147
|
+
const result = await client.command(command);
|
|
148
|
+
if (!result.ok)
|
|
149
|
+
throw diagnosticError(result.error?.message ?? `supervisor rejected ${command.type}`, result.error?.code ?? "SUPERVISOR_REJECTED");
|
|
150
|
+
}
|
|
151
|
+
async function completeBestEffort(client, instanceId, terminalState, outcome) {
|
|
152
|
+
await requireAccepted(client, {
|
|
153
|
+
type: "complete-launch-instance",
|
|
154
|
+
requestId: randomUUID(),
|
|
155
|
+
instanceId,
|
|
156
|
+
terminalState,
|
|
157
|
+
outcome,
|
|
158
|
+
}).catch(() => undefined);
|
|
159
|
+
}
|
|
160
|
+
function environmentEntries(environment) {
|
|
161
|
+
return Object.fromEntries(Object.entries(environment).filter((entry) => entry[1] !== undefined));
|
|
162
|
+
}
|
|
163
|
+
function failureOutcome(error, kind) {
|
|
164
|
+
return {
|
|
165
|
+
kind,
|
|
166
|
+
message: error instanceof Error ? error.message : String(error),
|
|
167
|
+
code: error instanceof Error && "code" in error && typeof error.code === "string" ? error.code : null,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function exitCode(outcome) {
|
|
171
|
+
if (outcome.kind === "exited")
|
|
172
|
+
return outcome.exitCode;
|
|
173
|
+
if (outcome.kind === "stopped")
|
|
174
|
+
return 0;
|
|
175
|
+
return 1;
|
|
176
|
+
}
|
|
177
|
+
function diagnosticError(message, code) {
|
|
178
|
+
return Object.assign(new Error(`${PRODUCT_TEXT.displayName}: ${message}`), { code });
|
|
179
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
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 { clearSessionRepositoryContext, readSessionRepositoryContext, setSessionRepositoryContext } from "./session-repository-context.js";
|
|
11
|
+
export type { SessionRepositoryContext, SessionRepositoryContextOptions, SessionRepositoryIdentity } from "./session-repository-context.js";
|
|
12
|
+
export { createSupervisorStartupAttempt, publishSupervisorStartupResult, readSupervisorStartupResult, supervisorStartupFailure, supervisorStartupReady, supervisorStartupResultPath, } from "./supervisor-startup.js";
|
|
13
|
+
export type { SupervisorStartupAttemptIdentity, SupervisorStartupResult } from "./supervisor-startup.js";
|
|
@@ -0,0 +1,6 @@
|
|
|
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 { clearSessionRepositoryContext, readSessionRepositoryContext, setSessionRepositoryContext } from "./session-repository-context.js";
|
|
6
|
+
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" | "release-superseded" | "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,18 @@
|
|
|
1
|
+
export interface SessionRepositoryIdentity {
|
|
2
|
+
readonly sessionId: string;
|
|
3
|
+
readonly sessionFile: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SessionRepositoryContext {
|
|
6
|
+
readonly cwd: string;
|
|
7
|
+
readonly branch: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SessionRepositoryContextOptions {
|
|
10
|
+
readonly dataDir?: string;
|
|
11
|
+
readonly signal?: AbortSignal;
|
|
12
|
+
}
|
|
13
|
+
/** Persist one explicit same-repository worktree association for a stable Pi session. */
|
|
14
|
+
export declare function setSessionRepositoryContext(identity: SessionRepositoryIdentity, worktreePath: string, options?: SessionRepositoryContextOptions): Promise<SessionRepositoryContext>;
|
|
15
|
+
/** Remove only the association belonging to the supplied stable session. */
|
|
16
|
+
export declare function clearSessionRepositoryContext(identity: SessionRepositoryIdentity, options?: SessionRepositoryContextOptions): Promise<void>;
|
|
17
|
+
/** Read and revalidate a persisted association; malformed or stale state fails closed to absence. */
|
|
18
|
+
export declare function readSessionRepositoryContext(identity: SessionRepositoryIdentity, options?: SessionRepositoryContextOptions): Promise<SessionRepositoryContext | null>;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { open, lstat, mkdir, readFile, realpath, rename, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
6
|
+
import { resolveProductPaths } from "./paths.js";
|
|
7
|
+
const SCHEMA = "a1-session-repository-context-v1";
|
|
8
|
+
const MAX_RECORD_BYTES = 16 * 1024;
|
|
9
|
+
const MAX_HEADER_BYTES = 64 * 1024;
|
|
10
|
+
const GIT_TIMEOUT_MS = 5_000;
|
|
11
|
+
/** Persist one explicit same-repository worktree association for a stable Pi session. */
|
|
12
|
+
export async function setSessionRepositoryContext(identity, worktreePath, options = {}) {
|
|
13
|
+
const header = await readSessionHeader(identity);
|
|
14
|
+
const startup = await readGitWorktreeIdentity(header.cwd, false, options.signal);
|
|
15
|
+
const selected = await readGitWorktreeIdentity(worktreePath, true, options.signal);
|
|
16
|
+
if (!samePath(startup.commonDir, selected.commonDir)) {
|
|
17
|
+
throw new Error("associated worktree belongs to a different Git repository");
|
|
18
|
+
}
|
|
19
|
+
const record = {
|
|
20
|
+
schema: SCHEMA,
|
|
21
|
+
sessionId: header.id,
|
|
22
|
+
sessionFile: header.file,
|
|
23
|
+
startupRoot: startup.root,
|
|
24
|
+
startupCommonDir: startup.commonDir,
|
|
25
|
+
worktreeRoot: selected.root,
|
|
26
|
+
worktreeCommonDir: selected.commonDir,
|
|
27
|
+
worktreeGitDir: selected.gitDir,
|
|
28
|
+
updatedAt: new Date().toISOString(),
|
|
29
|
+
};
|
|
30
|
+
const destination = recordPath(header, options);
|
|
31
|
+
const directory = dirname(destination);
|
|
32
|
+
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
33
|
+
const temporary = `${destination}.${process.pid}.${randomUUID()}.tmp`;
|
|
34
|
+
try {
|
|
35
|
+
await writeFile(temporary, `${JSON.stringify(record)}\n`, { encoding: "utf8", mode: 0o600, flag: "wx" });
|
|
36
|
+
await rename(temporary, destination);
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
await rm(temporary, { force: true }).catch(() => undefined);
|
|
40
|
+
}
|
|
41
|
+
return { cwd: selected.root, branch: requireBranch(selected) };
|
|
42
|
+
}
|
|
43
|
+
/** Remove only the association belonging to the supplied stable session. */
|
|
44
|
+
export async function clearSessionRepositoryContext(identity, options = {}) {
|
|
45
|
+
const header = await readSessionHeader(identity);
|
|
46
|
+
await rm(recordPath(header, options), { force: true });
|
|
47
|
+
}
|
|
48
|
+
/** Read and revalidate a persisted association; malformed or stale state fails closed to absence. */
|
|
49
|
+
export async function readSessionRepositoryContext(identity, options = {}) {
|
|
50
|
+
let header;
|
|
51
|
+
try {
|
|
52
|
+
header = await readSessionHeader(identity);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const path = recordPath(header, options);
|
|
59
|
+
const metadata = await lstat(path);
|
|
60
|
+
if (!metadata.isFile() || metadata.isSymbolicLink() || metadata.size === 0 || metadata.size > MAX_RECORD_BYTES)
|
|
61
|
+
return null;
|
|
62
|
+
const bytes = await readFile(path, { signal: options.signal });
|
|
63
|
+
const value = JSON.parse(bytes.toString("utf8"));
|
|
64
|
+
if (!isRecord(value)
|
|
65
|
+
|| value.schema !== SCHEMA
|
|
66
|
+
|| value.sessionId !== header.id
|
|
67
|
+
|| value.sessionFile !== header.file
|
|
68
|
+
|| !validPath(value.startupRoot)
|
|
69
|
+
|| !validPath(value.startupCommonDir)
|
|
70
|
+
|| !validPath(value.worktreeRoot)
|
|
71
|
+
|| !validPath(value.worktreeCommonDir)
|
|
72
|
+
|| !validPath(value.worktreeGitDir)
|
|
73
|
+
|| typeof value.updatedAt !== "string")
|
|
74
|
+
return null;
|
|
75
|
+
const startup = await readGitWorktreeIdentity(header.cwd, false, options.signal);
|
|
76
|
+
const selected = await readGitWorktreeIdentity(value.worktreeRoot, true, options.signal);
|
|
77
|
+
if (!samePath(startup.root, value.startupRoot)
|
|
78
|
+
|| !samePath(startup.commonDir, value.startupCommonDir)
|
|
79
|
+
|| !samePath(selected.root, value.worktreeRoot)
|
|
80
|
+
|| !samePath(selected.commonDir, value.worktreeCommonDir)
|
|
81
|
+
|| !samePath(selected.gitDir, value.worktreeGitDir)
|
|
82
|
+
|| !samePath(startup.commonDir, selected.commonDir))
|
|
83
|
+
return null;
|
|
84
|
+
return { cwd: selected.root, branch: requireBranch(selected) };
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function readSessionHeader(identity) {
|
|
91
|
+
if (!validSessionId(identity.sessionId) || !validPath(identity.sessionFile))
|
|
92
|
+
throw new Error("active session identity is unavailable");
|
|
93
|
+
const file = await realpath(resolve(identity.sessionFile));
|
|
94
|
+
const handle = await open(file, "r");
|
|
95
|
+
try {
|
|
96
|
+
const buffer = Buffer.alloc(MAX_HEADER_BYTES);
|
|
97
|
+
const { bytesRead } = await handle.read(buffer, 0, buffer.byteLength, 0);
|
|
98
|
+
const newline = buffer.subarray(0, bytesRead).indexOf(0x0a);
|
|
99
|
+
if (newline < 0)
|
|
100
|
+
throw new Error("session header is unavailable");
|
|
101
|
+
const value = JSON.parse(buffer.subarray(0, newline).toString("utf8"));
|
|
102
|
+
if (!isRecord(value) || value.type !== "session" || value.id !== identity.sessionId || !validPath(value.cwd)) {
|
|
103
|
+
throw new Error("active session identity does not match its session file");
|
|
104
|
+
}
|
|
105
|
+
return { id: identity.sessionId, cwd: await realpath(resolve(value.cwd)), file };
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
await handle.close();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function readGitWorktreeIdentity(path, requireWorktreeRoot, signal) {
|
|
112
|
+
if (!validPath(path))
|
|
113
|
+
throw new Error("associated worktree path is invalid");
|
|
114
|
+
const cwd = await realpath(resolve(path));
|
|
115
|
+
const { stdout } = await executeGit(["rev-parse", "--path-format=absolute", "--show-toplevel", "--git-common-dir", "--git-dir"], cwd, MAX_RECORD_BYTES, signal);
|
|
116
|
+
const lines = stdout.split(/\r?\n/u).filter(Boolean);
|
|
117
|
+
if (lines.length !== 3)
|
|
118
|
+
throw new Error("associated worktree identity is invalid");
|
|
119
|
+
const [rootValue, commonValue, gitValue] = lines;
|
|
120
|
+
if (!rootValue || !commonValue || !gitValue)
|
|
121
|
+
throw new Error("associated worktree identity is incomplete");
|
|
122
|
+
const root = await realpath(rootValue);
|
|
123
|
+
if (requireWorktreeRoot && !samePath(root, cwd))
|
|
124
|
+
throw new Error("associated path must be a Git worktree root");
|
|
125
|
+
const commonDir = await realpath(commonValue);
|
|
126
|
+
const gitDir = await realpath(gitValue);
|
|
127
|
+
let branch = null;
|
|
128
|
+
if (requireWorktreeRoot) {
|
|
129
|
+
const branchResult = await executeGit(["symbolic-ref", "--quiet", "--short", "HEAD"], cwd, 4_096, signal);
|
|
130
|
+
branch = branchResult.stdout.trim();
|
|
131
|
+
if (branch.length === 0 || branch.length > 256)
|
|
132
|
+
throw new Error("associated worktree has a detached or invalid branch");
|
|
133
|
+
}
|
|
134
|
+
return { root, commonDir, gitDir, branch };
|
|
135
|
+
}
|
|
136
|
+
async function executeGit(arguments_, cwd, maxBuffer, signal) {
|
|
137
|
+
const { execFile } = await import("node:child_process");
|
|
138
|
+
const execute = promisify(execFile);
|
|
139
|
+
return await execute("git", [...arguments_], {
|
|
140
|
+
cwd,
|
|
141
|
+
windowsHide: true,
|
|
142
|
+
timeout: GIT_TIMEOUT_MS,
|
|
143
|
+
maxBuffer,
|
|
144
|
+
encoding: "utf8",
|
|
145
|
+
signal,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function requireBranch(identity) {
|
|
149
|
+
if (identity.branch === null)
|
|
150
|
+
throw new Error("associated worktree branch is unavailable");
|
|
151
|
+
return identity.branch;
|
|
152
|
+
}
|
|
153
|
+
function recordPath(header, options) {
|
|
154
|
+
const dataDir = options.dataDir ?? resolveProductPaths().dataDir;
|
|
155
|
+
const digest = createHash("sha256").update(header.id).update("\0").update(pathKey(header.file)).digest("hex");
|
|
156
|
+
return join(dataDir, PRODUCT_IDENTITY.state.sessionRepositoryDirectory, `${digest}.json`);
|
|
157
|
+
}
|
|
158
|
+
function samePath(left, right) {
|
|
159
|
+
return pathKey(left) === pathKey(right);
|
|
160
|
+
}
|
|
161
|
+
function pathKey(value) {
|
|
162
|
+
const normalized = resolve(value);
|
|
163
|
+
return process.platform === "win32" ? normalized.toLowerCase() : normalized;
|
|
164
|
+
}
|
|
165
|
+
function validSessionId(value) {
|
|
166
|
+
return typeof value === "string" && /^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/u.test(value);
|
|
167
|
+
}
|
|
168
|
+
function validPath(value) {
|
|
169
|
+
return typeof value === "string" && value.length > 0 && value.length <= 32_768 && !value.includes("\0") && isAbsolute(value);
|
|
170
|
+
}
|
|
171
|
+
function isRecord(value) {
|
|
172
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
173
|
+
}
|
|
@@ -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
|
+
}
|