@timurproko/a1 0.2.7-dev.1249 → 0.2.7-dev.1255
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -36
- package/bin/cli.js +2 -17
- package/bin/ui.js +10 -51
- package/dist/app/session-shell/clipboard-diagnostics.d.ts +2 -2
- package/dist/app/session-shell/clipboard-image.d.ts +0 -1
- package/dist/app/session-shell/clipboard-image.js +1 -1
- package/dist/app/session-shell/dialog-coordinator.d.ts +6 -5
- package/dist/app/session-shell/dialog-coordinator.js +3 -4
- package/dist/app/session-shell/dock-chrome.d.ts +11 -6
- package/dist/app/session-shell/dock-chrome.js +5 -8
- package/dist/app/session-shell/editor-hyperlink-budget.d.ts +0 -2
- package/dist/app/session-shell/editor-hyperlink-budget.js +1 -1
- package/dist/app/session-shell/exit-notice.d.ts +3 -3
- package/dist/app/session-shell/exit-notice.js +10 -10
- package/dist/app/session-shell/extension-surface.d.ts +8 -7
- package/dist/app/session-shell/helper-pool.d.ts +3 -4
- package/dist/app/session-shell/helper-pool.js +1 -1
- package/dist/app/session-shell/image-preparation-client.d.ts +4 -3
- package/dist/app/session-shell/image-preparation.d.ts +0 -2
- package/dist/app/session-shell/image-preparation.js +2 -2
- package/dist/app/session-shell/image-source.d.ts +2 -3
- package/dist/app/session-shell/image-source.js +2 -2
- package/dist/app/session-shell/input-surface-switch.d.ts +9 -7
- package/dist/app/session-shell/input-surface-switch.js +1 -2
- package/dist/app/session-shell/login-interaction.d.ts +5 -4
- package/dist/app/session-shell/login-interaction.js +2 -3
- package/dist/app/session-shell/paste-executor.d.ts +4 -8
- package/dist/app/session-shell/paste-executor.js +2 -2
- package/dist/app/session-shell/paste-protocol.d.ts +2 -2
- package/dist/app/session-shell/path-chip-presentation.d.ts +0 -5
- package/dist/app/session-shell/path-chip-presentation.js +3 -3
- package/dist/app/session-shell/prompt-chips.d.ts +8 -7
- package/dist/app/session-shell/prompt-history-controller.d.ts +3 -3
- package/dist/app/session-shell/prompt-submission.d.ts +7 -6
- package/dist/app/session-shell/prompt-submission.js +7 -28
- package/dist/app/session-shell/quit-outro-effects.d.ts +3 -3
- package/dist/app/session-shell/quit-outro-effects.js +1 -4
- package/dist/app/session-shell/quit-outro.d.ts +9 -12
- package/dist/app/session-shell/quit-outro.js +11 -11
- package/dist/app/session-shell/response-copy-protocol.d.ts +3 -2
- package/dist/app/session-shell/response-copy-transport.d.ts +2 -14
- package/dist/app/session-shell/response-copy-transport.js +2 -3
- package/dist/app/session-shell/session-lifecycle.d.ts +3 -3
- package/dist/app/session-shell/session-lifecycle.js +2 -4
- package/dist/app/session-shell/session-shell-root.d.ts +74 -120
- package/dist/app/session-shell/session-shell-root.js +82 -115
- package/dist/app/session-shell/session-shell.d.ts +13 -16
- package/dist/app/session-shell/session-shell.js +149 -314
- package/dist/app/session-shell/session-viewport-controller.d.ts +7 -6
- package/dist/app/session-shell/session-viewport-controller.js +5 -8
- package/dist/app/session-shell/settings-bindings.d.ts +24 -2
- package/dist/app/session-shell/settings-bindings.js +24 -0
- package/dist/app/session-shell/share-operation.d.ts +3 -3
- package/dist/app/session-shell/share-operation.js +4 -6
- package/dist/app/session-shell/shell-clipboard.d.ts +59 -0
- package/dist/app/session-shell/shell-clipboard.js +119 -0
- package/dist/app/session-shell/shell-editor-factory.d.ts +8 -4
- package/dist/app/session-shell/shell-editor-factory.js +13 -15
- package/dist/app/session-shell/shell-host.d.ts +16 -17
- package/dist/app/session-shell/shell-host.js +20 -37
- package/dist/app/session-shell/shell-layout.d.ts +2 -2
- package/dist/app/session-shell/shell-prompt-suggestions.d.ts +26 -0
- package/dist/app/session-shell/shell-prompt-suggestions.js +48 -0
- package/dist/app/session-shell/suggestion-surface.d.ts +1 -6
- package/dist/app/session-shell/suggestion-surface.js +1 -1
- package/dist/app/session-shell/system-clipboard.d.ts +2 -14
- package/dist/app/session-shell/system-clipboard.js +2 -7
- package/dist/app/session-shell/transcript-document.d.ts +12 -10
- package/dist/app/session-shell/transcript-document.js +15 -41
- package/dist/app/session-shell/viewport-layout.d.ts +2 -2
- package/dist/app/session-shell/workflow-output.d.ts +5 -3
- package/dist/app/session-shell/workflow-output.js +13 -15
- package/dist/app/session-shell/workflow-router.d.ts +1 -3
- package/dist/app/session-shell/workflow-router.js +1 -4
- package/dist/cli/dispatch.d.ts +1 -11
- package/dist/cli/dispatch.js +5 -92
- package/dist/cli/package-messages.d.ts +0 -1
- package/dist/cli/package-messages.js +1 -1
- package/dist/cli/session-context.d.ts +1 -1
- package/dist/cli/session-context.js +5 -7
- package/dist/cli/uninstall.d.ts +4 -7
- package/dist/cli/uninstall.js +6 -35
- package/dist/cli/version-stats.js +4 -7
- package/dist/composition/owned-settings.d.ts +2 -2
- package/dist/composition/owned-settings.js +0 -4
- package/dist/composition/owned-ui.d.ts +3 -25
- package/dist/composition/owned-ui.js +37 -113
- package/dist/composition/reference-selection-options.d.ts +1 -1
- package/dist/composition/reference-selection-options.js +1 -1
- package/dist/composition/release-update-observation.d.ts +4 -4
- package/dist/composition/release-update-observation.js +17 -47
- package/dist/composition/session-backend.d.ts +0 -1
- package/dist/composition/session-runtime-registry.d.ts +5 -4
- package/dist/composition/settings-route-host.d.ts +0 -7
- package/dist/composition/settings-route-host.js +7 -20
- package/dist/composition/settings-search-input.d.ts +2 -1
- package/dist/composition/startup-route.d.ts +2 -3
- package/dist/composition/startup-route.js +2 -3
- package/dist/contracts/owned-ui/extension-ui.d.ts +2 -1
- package/dist/contracts/owned-ui/index.d.ts +2 -1
- package/dist/contracts/owned-ui/model.d.ts +0 -3
- package/dist/contracts/owned-ui/session-presenters.d.ts +3 -0
- package/dist/contracts/owned-ui/session-workflows.d.ts +1 -4
- package/dist/contracts/owned-ui/shell-components.d.ts +543 -0
- package/dist/contracts/presentation/component.d.ts +17 -0
- package/dist/contracts/presentation/component.js +8 -0
- package/dist/contracts/presentation/index.d.ts +6 -15
- package/dist/contracts/presentation/index.js +2 -0
- package/dist/contracts/presentation/terminal.d.ts +290 -0
- package/dist/contracts/presentation/theme.d.ts +46 -0
- package/dist/features/launch/development-launch.js +1 -2
- package/dist/features/launch/index.d.ts +1 -1
- package/dist/features/launch/intent.d.ts +1 -3
- package/dist/features/launch/intent.js +2 -4
- package/dist/features/launch/runtime-selection.d.ts +2 -2
- package/dist/features/launch/runtime-selection.js +2 -2
- package/dist/features/launch/session-context.d.ts +2 -2
- package/dist/features/owned-ui/project-trust-prompt.d.ts +2 -2
- package/dist/features/owned-ui/project-trust-prompt.js +1 -1
- package/dist/features/owned-ui/reference-screen-app.d.ts +0 -2
- package/dist/features/owned-ui/reference-screen-app.js +2 -9
- package/dist/features/owned-ui/release-note-state.d.ts +2 -1
- package/dist/features/owned-ui/settings-app.d.ts +0 -6
- package/dist/features/owned-ui/settings-app.js +42 -254
- package/dist/features/owned-ui/settings-edits.d.ts +31 -0
- package/dist/features/owned-ui/settings-edits.js +139 -0
- package/dist/features/owned-ui/settings-scroll-rail.d.ts +29 -0
- package/dist/features/owned-ui/settings-scroll-rail.js +79 -0
- package/dist/features/owned-ui/settings-search-input.d.ts +2 -1
- package/dist/features/prompt-history/service.d.ts +3 -2
- package/dist/foundation/launch-context/index.d.ts +0 -12
- package/dist/foundation/launch-context/index.js +0 -26
- package/dist/foundation/lifecycle/claim-gate.d.ts +9 -0
- package/dist/foundation/lifecycle/claim-gate.js +37 -0
- package/dist/foundation/lifecycle/index.d.ts +5 -9
- package/dist/foundation/lifecycle/index.js +3 -4
- package/dist/foundation/lifecycle/model.d.ts +2 -59
- package/dist/foundation/lifecycle/model.js +0 -35
- package/dist/foundation/lifecycle/paths.d.ts +0 -24
- package/dist/foundation/lifecycle/paths.js +0 -40
- package/dist/foundation/lifecycle/process-liveness.d.ts +8 -0
- package/dist/foundation/lifecycle/process-liveness.js +18 -0
- package/dist/foundation/lifecycle/session-claim-lock.d.ts +1 -1
- package/dist/foundation/lifecycle/session-claim-lock.js +2 -2
- package/dist/foundation/lifecycle/session-repository-context.d.ts +6 -6
- package/dist/foundation/lifecycle/session-repository-context.js +2 -3
- package/dist/foundation/release/automatic-update.d.ts +6 -17
- package/dist/foundation/release/automatic-update.js +23 -44
- package/dist/foundation/release/bootstrap.d.ts +2 -25
- package/dist/foundation/release/bootstrap.js +37 -348
- package/dist/foundation/release/dependency-certification.d.ts +1 -2
- package/dist/foundation/release/dependency-certification.js +1 -1
- package/dist/foundation/release/early-accent.d.ts +2 -2
- package/dist/foundation/release/early-accent.js +1 -1
- package/dist/foundation/release/index.d.ts +10 -17
- package/dist/foundation/release/index.js +7 -11
- package/dist/foundation/release/latest-release.d.ts +3 -19
- package/dist/foundation/release/latest-release.js +11 -12
- package/dist/foundation/release/ordinary-launch-selection.d.ts +1 -1
- package/dist/foundation/release/ordinary-launch-selection.js +1 -1
- package/dist/foundation/release/process-liveness.d.ts +2 -0
- package/dist/foundation/release/process-liveness.js +12 -0
- package/dist/foundation/release/release-gc.d.ts +13 -10
- package/dist/foundation/release/release-gc.js +37 -101
- package/dist/foundation/release/{cohort-state.d.ts → release-state.d.ts} +44 -69
- package/dist/foundation/release/{cohort-state.js → release-state.js} +38 -70
- package/dist/foundation/release/release-store.d.ts +2 -2
- package/dist/foundation/release/release-store.js +2 -2
- package/dist/foundation/release/restart-certification.js +1 -1
- package/dist/foundation/release/update-activation.d.ts +2 -9
- package/dist/foundation/release/update-activation.js +30 -45
- package/dist/foundation/release/update-execution-lease.d.ts +2 -3
- package/dist/foundation/release/update-execution-lease.js +2 -2
- package/dist/foundation/release/update-launch.d.ts +2 -4
- package/dist/foundation/release/update-launch.js +0 -7
- package/dist/foundation/release/update-recovery.js +1 -1
- package/dist/foundation/release/update-transaction.d.ts +1 -1
- package/dist/foundation/release/update-transaction.js +5 -2
- package/dist/foundation/release/update.d.ts +2 -12
- package/dist/foundation/release/update.js +37 -214
- package/dist/foundation/session-writer-lock/index.d.ts +14 -6
- package/dist/foundation/session-writer-lock/index.js +48 -103
- package/dist/foundation/startup/startup-budget.d.ts +5 -5
- package/dist/foundation/startup/startup-budget.js +2 -2
- package/dist/foundation/startup/startup-runtime.d.ts +1 -1
- package/dist/foundation/terminal-cleanup/exit-notice.d.ts +6 -0
- package/dist/foundation/terminal-cleanup/exit-notice.js +36 -0
- package/dist/foundation/terminal-cleanup/index.d.ts +2 -1
- package/dist/foundation/terminal-cleanup/index.js +2 -1
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +0 -5
- package/dist/foundation/terminal-cleanup/terminal-reset.js +0 -5
- package/dist/integrations/pi/components/editor-interaction.d.ts +4 -12
- package/dist/integrations/pi/components/index.d.ts +15 -9
- package/dist/integrations/pi/components/index.js +9 -5
- package/dist/integrations/pi/components/lazy-selectors.d.ts +2 -10
- package/dist/integrations/pi/components/lazy-selectors.js +1 -1
- package/dist/integrations/pi/components/modal-frame.d.ts +5 -22
- package/dist/integrations/pi/components/modal-frame.js +3 -23
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +4 -3
- package/dist/integrations/pi/components/prompt-input-port.d.ts +2 -19
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +3 -2
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -4
- package/dist/integrations/pi/components/shell-footer-status.d.ts +3 -3
- package/dist/integrations/pi/components/shell-footer-status.js +5 -4
- package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +6 -8
- package/dist/integrations/pi/components/shell-presenters-info.js +6 -19
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +1 -1
- package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
- package/dist/integrations/pi/components/shell-session-info-reference.d.ts +2 -1
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +33 -229
- package/dist/integrations/pi/components/shell-shared-facade.js +8 -1
- package/dist/integrations/pi/components/skills-command.d.ts +1 -9
- package/dist/integrations/pi/components/skills-command.js +5 -5
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +2 -5
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +2 -16
- package/dist/integrations/pi/components/theme.d.ts +9 -2
- package/dist/integrations/pi/components/theme.js +17 -2
- package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +2 -1
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.js +6 -8
- package/dist/integrations/pi/engine/adapter.d.ts +3 -6
- package/dist/integrations/pi/engine/adapter.js +4 -28
- package/dist/integrations/pi/engine/changelog.d.ts +2 -2
- package/dist/integrations/pi/engine/changelog.js +3 -3
- package/dist/integrations/pi/engine/compaction-progress.d.ts +2 -3
- package/dist/integrations/pi/engine/compaction-progress.js +1 -1
- package/dist/integrations/pi/engine/conformance.d.ts +2 -1
- package/dist/integrations/pi/engine/default-model-setting.d.ts +0 -2
- package/dist/integrations/pi/engine/default-model-setting.js +1 -2
- package/dist/integrations/pi/engine/diagnostics-state.d.ts +0 -1
- package/dist/integrations/pi/engine/diagnostics-state.js +0 -14
- package/dist/integrations/pi/engine/event-delivery.d.ts +2 -1
- package/dist/integrations/pi/engine/extension-ui-binding.d.ts +2 -1
- package/dist/integrations/pi/engine/host.js +2 -2
- package/dist/integrations/pi/engine/message-values.d.ts +0 -1
- package/dist/integrations/pi/engine/message-values.js +1 -1
- package/dist/integrations/pi/engine/pending-delivery.d.ts +0 -4
- package/dist/integrations/pi/engine/pending-delivery.js +3 -3
- package/dist/integrations/pi/engine/ports.d.ts +7 -1
- package/dist/integrations/pi/engine/ports.js +4 -0
- package/dist/integrations/pi/engine/project-trust-preflight.d.ts +2 -1
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +3 -3
- package/dist/integrations/pi/engine/prompt-suggestions.js +0 -40
- package/dist/integrations/pi/engine/provider-authentication.d.ts +1 -1
- package/dist/integrations/pi/engine/public-main-entry.d.ts +1 -5
- package/dist/integrations/pi/engine/public-main-entry.js +1 -1
- package/dist/integrations/pi/engine/repository-pr-rest.d.ts +1 -9
- package/dist/integrations/pi/engine/repository-pr-rest.js +2 -2
- package/dist/integrations/pi/engine/repository-pr.d.ts +1 -3
- package/dist/integrations/pi/engine/repository-pr.js +1 -1
- package/dist/integrations/pi/engine/resource-catalog.d.ts +2 -1
- package/dist/integrations/pi/engine/session-integration.d.ts +1 -1
- package/dist/integrations/pi/engine/session-runtime.d.ts +4 -3
- package/dist/integrations/pi/engine/session-runtime.js +0 -2
- package/dist/integrations/pi/engine/settings-bridge.d.ts +0 -2
- package/dist/integrations/pi/engine/settings-bridge.js +1 -1
- package/dist/integrations/pi/engine/settings-port.d.ts +3 -2
- package/dist/integrations/pi/engine/transcript-projection.d.ts +2 -1
- package/dist/integrations/pi/engine/workflow-contexts.d.ts +1 -1
- package/dist/integrations/pi/engine/workflow-runner.d.ts +1 -1
- package/dist/integrations/pi/engine/workflow-runner.js +1 -1
- package/dist/integrations/pi/engine/workflow-support.d.ts +0 -6
- package/dist/integrations/pi/engine/workflow-support.js +4 -18
- package/dist/integrations/pi/engine/workflows.d.ts +5 -5
- package/dist/integrations/pi/session-presenters/components.d.ts +3 -0
- package/dist/integrations/pi/session-presenters/components.js +75 -0
- package/dist/integrations/pi/session-presenters/index.d.ts +1 -0
- package/dist/integrations/pi/session-presenters/index.js +1 -0
- package/dist/integrations/pi/session-presenters/presentation.d.ts +3 -0
- package/dist/integrations/pi/session-presenters/presentation.js +10 -0
- package/dist/integrations/pi/session-presenters/presenters.d.ts +2 -1
- package/dist/integrations/pi/session-presenters/presenters.js +3 -1
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -2
- package/dist/integrations/pi/tui-runtime/adapter.js +23 -32
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +22 -166
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +5 -40
- package/dist/integrations/pi/tui-runtime/index.d.ts +1 -0
- package/dist/integrations/pi/tui-runtime/index.js +1 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +4 -6
- package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +2 -8
- package/dist/integrations/pi/tui-runtime/overlay-geometry.js +3 -9
- package/dist/integrations/pi/tui-runtime/runtime-factory.d.ts +3 -0
- package/dist/integrations/pi/tui-runtime/runtime-factory.js +11 -0
- package/dist/product-identity.d.ts +4 -6
- package/dist/product-identity.js +6 -11
- package/dist/product-identity.json +1 -40
- package/dist/runtime-payload-inventory.json +0 -3
- package/dist/ui/components/index.d.ts +4 -4
- package/dist/ui/components/index.js +2 -2
- package/dist/ui/components/selection-copy.d.ts +0 -1
- package/dist/ui/components/selection-copy.js +0 -12
- package/dist/ui/components/submitted-prompt.d.ts +3 -13
- package/dist/ui/components/submitted-prompt.js +8 -41
- package/dist/ui/components/theme.d.ts +4 -19
- package/dist/ui/components/theme.js +6 -0
- package/dist/ui/components/transcript-viewport.d.ts +1 -3
- package/dist/ui/components/transcript-viewport.js +1 -4
- package/dist/ui/settings/declarations.d.ts +2 -97
- package/dist/ui/settings/declarations.js +2 -78
- package/dist/ui/settings/early-accent.js +1 -1
- package/dist/ui/settings/index.d.ts +3 -5
- package/dist/ui/settings/index.js +2 -3
- package/dist/ui/settings/manager.d.ts +0 -4
- package/dist/ui/settings/manager.js +6 -62
- package/dist/ui/settings/resolution.d.ts +6 -18
- package/dist/ui/settings/resolution.js +4 -103
- package/dist/ui/settings/sections.d.ts +0 -4
- package/dist/ui/settings/sections.js +1 -1
- package/docs/architecture/boundaries.md +23 -40
- package/docs/architecture/code-documentation.md +2 -2
- package/docs/architecture/internal-naming.md +11 -17
- package/docs/architecture/project-structure.md +13 -16
- package/docs/architecture/resource-and-data-policy.md +16 -31
- package/docs/architecture/toolchain.md +14 -19
- package/docs/architecture/ui-reference-provenance.md +2 -2
- package/docs/ci-release-runbook.md +5 -5
- package/docs/features/launch-profiles.md +11 -17
- package/docs/features/prompt-history.md +10 -11
- package/docs/local-worktree-cleanup.md +28 -1
- package/docs/manual-owned-ui-checkpoint.md +0 -1
- package/docs/validation.md +5 -11
- package/docs/worktree-link-recovery.md +6 -6
- package/package.json +7 -20
- package/bin/guardian.js +0 -42
- package/bin/supervisor.js +0 -7
- package/bin/tab-launch-context.d.ts +0 -27
- package/bin/tab-launch-context.js +0 -94
- package/dist/app/session-shell/resident-tab-coordinator.d.ts +0 -38
- package/dist/app/session-shell/resident-tab-coordinator.js +0 -77
- package/dist/cli/tabs-request.d.ts +0 -7
- package/dist/cli/tabs.d.ts +0 -14
- package/dist/cli/tabs.js +0 -151
- package/dist/composition/resident-tab-bridge.d.ts +0 -41
- package/dist/composition/resident-tab-bridge.js +0 -209
- package/dist/composition/utility-tab.d.ts +0 -28
- package/dist/composition/utility-tab.js +0 -244
- package/dist/features/owned-ui/plus-menu-dialog.d.ts +0 -28
- package/dist/features/owned-ui/plus-menu-dialog.js +0 -89
- package/dist/features/resident-tab/auto-name.d.ts +0 -11
- package/dist/features/resident-tab/auto-name.js +0 -44
- package/dist/features/resident-tab/index.d.ts +0 -5
- package/dist/features/resident-tab/index.js +0 -7
- package/dist/features/resident-tab/shortcut-bindings-file.d.ts +0 -8
- package/dist/features/resident-tab/shortcut-bindings-file.js +0 -40
- package/dist/features/resident-tab/shortcut-declarations.d.ts +0 -13
- package/dist/features/resident-tab/shortcut-declarations.js +0 -26
- package/dist/features/resident-tab/shortcut-projection.d.ts +0 -29
- package/dist/features/resident-tab/shortcut-projection.js +0 -64
- package/dist/features/resident-tab/status-deriver.d.ts +0 -10
- package/dist/features/resident-tab/status-deriver.js +0 -12
- package/dist/foundation/launch-guardian/exit-watcher.d.ts +0 -14
- package/dist/foundation/launch-guardian/exit-watcher.js +0 -103
- package/dist/foundation/launch-guardian/index.d.ts +0 -2
- package/dist/foundation/launch-guardian/index.js +0 -1
- package/dist/foundation/launch-guardian/main.d.ts +0 -39
- package/dist/foundation/launch-guardian/main.js +0 -232
- package/dist/foundation/lifecycle/commands.d.ts +0 -40
- package/dist/foundation/lifecycle/launch-instance.d.ts +0 -46
- package/dist/foundation/lifecycle/launch-instance.js +0 -134
- package/dist/foundation/lifecycle/native-claim-gate.d.ts +0 -5
- package/dist/foundation/lifecycle/native-claim-gate.js +0 -41
- package/dist/foundation/lifecycle/supervisor-startup.d.ts +0 -30
- package/dist/foundation/lifecycle/supervisor-startup.js +0 -106
- package/dist/foundation/process-containment/addon-containment.d.ts +0 -20
- package/dist/foundation/process-containment/addon-containment.js +0 -139
- package/dist/foundation/process-containment/addon-process-inspector.d.ts +0 -11
- package/dist/foundation/process-containment/addon-process-inspector.js +0 -36
- package/dist/foundation/process-containment/addon.d.ts +0 -47
- package/dist/foundation/process-containment/addon.js +0 -57
- package/dist/foundation/process-containment/artifact.d.ts +0 -1
- package/dist/foundation/process-containment/artifact.js +0 -35
- package/dist/foundation/process-containment/contracts.d.ts +0 -33
- package/dist/foundation/process-containment/contracts.js +0 -35
- package/dist/foundation/process-containment/index.d.ts +0 -9
- package/dist/foundation/process-containment/index.js +0 -7
- package/dist/foundation/process-containment/linux-process-inspector.d.ts +0 -7
- package/dist/foundation/process-containment/linux-process-inspector.js +0 -27
- package/dist/foundation/process-containment/native-process-inspector.d.ts +0 -4
- package/dist/foundation/process-containment/native-process-inspector.js +0 -21
- package/dist/foundation/protocol/client.d.ts +0 -18
- package/dist/foundation/protocol/client.js +0 -130
- package/dist/foundation/protocol/index.d.ts +0 -3
- package/dist/foundation/protocol/index.js +0 -2
- package/dist/foundation/protocol/messages.d.ts +0 -90
- package/dist/foundation/protocol/messages.js +0 -100
- package/dist/foundation/release/cohort-selection.d.ts +0 -33
- package/dist/foundation/release/cohort-selection.js +0 -67
- package/dist/foundation/release/endpoint-lock.d.ts +0 -2
- package/dist/foundation/release/endpoint-lock.js +0 -37
- package/dist/foundation/release/endpoint-recovery.d.ts +0 -10
- package/dist/foundation/release/endpoint-recovery.js +0 -45
- package/dist/foundation/release/endpoints.d.ts +0 -32
- package/dist/foundation/release/endpoints.js +0 -152
- package/dist/foundation/release/prepared-update-activation.d.ts +0 -3
- package/dist/foundation/release/prepared-update-activation.js +0 -27
- package/dist/foundation/release/process-cleanup.d.ts +0 -14
- package/dist/foundation/release/process-cleanup.js +0 -76
- package/dist/foundation/release/supervisor-identity.d.ts +0 -15
- package/dist/foundation/release/supervisor-identity.js +0 -63
- package/dist/foundation/resident-tabs/boot-identity.d.ts +0 -6
- package/dist/foundation/resident-tabs/boot-identity.js +0 -16
- package/dist/foundation/resident-tabs/bounded-host-command.d.ts +0 -20
- package/dist/foundation/resident-tabs/bounded-host-command.js +0 -62
- package/dist/foundation/resident-tabs/bridge-client.d.ts +0 -73
- package/dist/foundation/resident-tabs/bridge-client.js +0 -327
- package/dist/foundation/resident-tabs/continuity.d.ts +0 -12
- package/dist/foundation/resident-tabs/continuity.js +0 -63
- package/dist/foundation/resident-tabs/doctor.d.ts +0 -28
- package/dist/foundation/resident-tabs/doctor.js +0 -166
- package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +0 -27
- package/dist/foundation/resident-tabs/draft-checkpoint.js +0 -145
- package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +0 -36
- package/dist/foundation/resident-tabs/ensure-terminal-host.js +0 -151
- package/dist/foundation/resident-tabs/fault-injection.d.ts +0 -8
- package/dist/foundation/resident-tabs/fault-injection.js +0 -26
- package/dist/foundation/resident-tabs/fixture-control.d.ts +0 -7
- package/dist/foundation/resident-tabs/fixture-control.js +0 -35
- package/dist/foundation/resident-tabs/host-entry.js +0 -17
- package/dist/foundation/resident-tabs/index.d.ts +0 -15
- package/dist/foundation/resident-tabs/index.js +0 -10
- package/dist/foundation/resident-tabs/maintenance.d.ts +0 -39
- package/dist/foundation/resident-tabs/maintenance.js +0 -75
- package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +0 -34
- package/dist/foundation/resident-tabs/progress-observation-schema.js +0 -1
- package/dist/foundation/resident-tabs/progress-observation.d.ts +0 -4
- package/dist/foundation/resident-tabs/progress-observation.js +0 -150
- package/dist/foundation/resident-tabs/prompt-journal.d.ts +0 -63
- package/dist/foundation/resident-tabs/prompt-journal.js +0 -213
- package/dist/foundation/resident-tabs/protocol.d.ts +0 -12
- package/dist/foundation/resident-tabs/protocol.js +0 -195
- package/dist/foundation/resident-tabs/recovery.d.ts +0 -26
- package/dist/foundation/resident-tabs/recovery.js +0 -205
- package/dist/foundation/resident-tabs/release-holds.d.ts +0 -28
- package/dist/foundation/resident-tabs/release-holds.js +0 -78
- package/dist/foundation/resident-tabs/routes.d.ts +0 -5
- package/dist/foundation/resident-tabs/routes.js +0 -5
- package/dist/foundation/resident-tabs/routing.d.ts +0 -11
- package/dist/foundation/resident-tabs/routing.js +0 -10
- package/dist/foundation/resident-tabs/runtime-control.d.ts +0 -38
- package/dist/foundation/resident-tabs/runtime-control.js +0 -74
- package/dist/foundation/resident-tabs/session-sync.d.ts +0 -14
- package/dist/foundation/resident-tabs/session-sync.js +0 -37
- package/dist/foundation/resident-tabs/settings.d.ts +0 -16
- package/dist/foundation/resident-tabs/settings.js +0 -60
- package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +0 -14
- package/dist/foundation/resident-tabs/terminal-host-artifact.js +0 -78
- package/dist/foundation/resident-tabs/zip-archive.d.ts +0 -9
- package/dist/foundation/resident-tabs/zip-archive.js +0 -56
- package/dist/foundation/storage/control-store.d.ts +0 -20
- package/dist/foundation/storage/control-store.js +0 -331
- package/dist/foundation/storage/index.d.ts +0 -1
- package/dist/foundation/storage/index.js +0 -1
- package/dist/foundation/supervision/index.d.ts +0 -3
- package/dist/foundation/supervision/index.js +0 -3
- package/dist/foundation/supervision/main.d.ts +0 -1
- package/dist/foundation/supervision/main.js +0 -86
- package/dist/foundation/supervision/paths.d.ts +0 -1
- package/dist/foundation/supervision/paths.js +0 -1
- package/dist/foundation/supervision/server.d.ts +0 -46
- package/dist/foundation/supervision/server.js +0 -611
- package/dist/integrations/pi/components/components.d.ts +0 -4
- package/dist/integrations/pi/components/components.js +0 -48
- package/dist/integrations/pi/components/conformance.d.ts +0 -18
- package/dist/integrations/pi/components/conformance.js +0 -70
- package/dist/integrations/pi/components/shell-components.d.ts +0 -7
- package/dist/integrations/pi/components/shell-components.js +0 -7
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +0 -33
- package/dist/integrations/pi/components/upstream/theme/theme-controller.js +0 -114
- package/dist/integrations/pi/engine/offline-settings-port.d.ts +0 -23
- package/dist/integrations/pi/engine/offline-settings-port.js +0 -54
- package/dist/native/darwin-arm64/manifest.json +0 -23
- package/dist/native/darwin-arm64/process-guardian.node +0 -0
- package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10500
- package/dist/native/darwin-arm64/terminal-host.manifest.json +0 -46
- package/dist/native/darwin-arm64/terminal-host.node +0 -0
- package/dist/native/darwin-x64/manifest.json +0 -23
- package/dist/native/darwin-x64/process-guardian.node +0 -0
- package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10737
- package/dist/native/darwin-x64/terminal-host.manifest.json +0 -46
- package/dist/native/darwin-x64/terminal-host.node +0 -0
- package/dist/native/linux-x64/manifest.json +0 -23
- package/dist/native/linux-x64/process-guardian.node +0 -0
- package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -11226
- package/dist/native/linux-x64/terminal-host.manifest.json +0 -46
- package/dist/native/linux-x64/terminal-host.node +0 -0
- package/dist/native/win32-x64/manifest.json +0 -23
- package/dist/native/win32-x64/process-guardian.node +0 -0
- package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10757
- package/dist/native/win32-x64/terminal-host.manifest.json +0 -46
- package/dist/native/win32-x64/terminal-host.node +0 -0
- package/dist/ui/settings/migrations.d.ts +0 -19
- package/dist/ui/settings/migrations.js +0 -209
- package/dist/ui/settings/progress-palette.generated.d.ts +0 -139
- package/dist/ui/settings/progress-palette.generated.js +0 -139
- package/docs/architecture/evidence/resident-tabs/linux-x64.md +0 -37
- package/docs/architecture/evidence/resident-tabs/macos-arm64.md +0 -36
- package/docs/architecture/evidence/resident-tabs/macos-x64.md +0 -35
- package/docs/architecture/evidence/resident-tabs/windows-x64.md +0 -36
- package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +0 -70
- package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +0 -32
- package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +0 -115
- package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +0 -48
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +0 -125
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +0 -56
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +0 -174
- package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +0 -18
- package/docs/architecture/native-fixture-isolation.md +0 -23
- package/docs/architecture/process-guardian-provenance.md +0 -36
- package/docs/architecture/resident-tabs-requirements.md +0 -18
- package/docs/architecture/resident-tabs.md +0 -668
- package/docs/architecture/terminal-host-proof-gate.md +0 -34
- package/docs/architecture/terminal-host-provenance.md +0 -81
- package/docs/architecture/terminal-host-spike-evidence.md +0 -39
- package/docs/launch-recovery.md +0 -23
- package/docs/manual-launch-instance-acceptance.md +0 -43
- package/docs/manual-resident-tabs-acceptance.md +0 -51
- /package/dist/{cli/tabs-request.js → contracts/owned-ui/shell-components.js} +0 -0
- /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.d.ts +0 -0
- /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.js +0 -0
- /package/dist/{foundation/lifecycle/commands.js → contracts/presentation/terminal.js} +0 -0
- /package/dist/{foundation/resident-tabs/host-entry.d.ts → contracts/presentation/theme.js} +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The settings screen's edits: values shown ahead of the source, and an undo history ordered by edit
|
|
3
|
+
* sequence. Undo requests drain one at a time so each restores against the result of the one before.
|
|
4
|
+
*/
|
|
5
|
+
export class SettingsEdits {
|
|
6
|
+
#session;
|
|
7
|
+
#openStructured;
|
|
8
|
+
#pending = new Map();
|
|
9
|
+
#history = [];
|
|
10
|
+
#sequence = 0;
|
|
11
|
+
#requests = 0;
|
|
12
|
+
#active = false;
|
|
13
|
+
#closed = false;
|
|
14
|
+
constructor(session, openStructured) {
|
|
15
|
+
this.#session = session;
|
|
16
|
+
this.#openStructured = openStructured;
|
|
17
|
+
}
|
|
18
|
+
/** The value a row shows: a pending edit, or the source's value. */
|
|
19
|
+
shown(entry) {
|
|
20
|
+
return this.#pending.get(pendingKey(entry)) ?? entry.value;
|
|
21
|
+
}
|
|
22
|
+
apply(entry, value) {
|
|
23
|
+
const key = pendingKey(entry);
|
|
24
|
+
const previous = this.shown(entry);
|
|
25
|
+
const sequence = ++this.#sequence;
|
|
26
|
+
// Invariant: shown immediately so the row never lags a keypress, and so the next press
|
|
27
|
+
// steps from here rather than from a value the source has not caught up to.
|
|
28
|
+
this.#pending.set(key, value);
|
|
29
|
+
void this.#session.change(entry.backend, entry.id, value).then(outcome => {
|
|
30
|
+
const failed = changeFailure(outcome) !== null;
|
|
31
|
+
if (!failed && previous !== null && previous !== value)
|
|
32
|
+
this.#record({ kind: "scalar", sequence, entry, previous });
|
|
33
|
+
// Concurrency: a later press may have moved on; only the last request clears itself.
|
|
34
|
+
if (this.#pending.get(key) === value)
|
|
35
|
+
this.#pending.delete(key);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** Saves a structured dialog's record; `rollback` runs when the change fails. */
|
|
39
|
+
saveStructured(entry, previous, forward, rollback) {
|
|
40
|
+
const sequence = ++this.#sequence;
|
|
41
|
+
void this.#session.changeStructured(entry.backend, entry.id, structuredValue(entry, forward)).then(outcome => {
|
|
42
|
+
if (changeFailure(outcome) === null)
|
|
43
|
+
this.#record({ kind: "structured", sequence, entry, previous, forward });
|
|
44
|
+
else
|
|
45
|
+
rollback();
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
undo() {
|
|
49
|
+
this.#requests++;
|
|
50
|
+
this.#drain();
|
|
51
|
+
}
|
|
52
|
+
open() { this.#closed = false; }
|
|
53
|
+
/** Drops the history and queued requests; late results no longer record undo steps. */
|
|
54
|
+
close() {
|
|
55
|
+
this.#closed = true;
|
|
56
|
+
this.#history.length = 0;
|
|
57
|
+
this.#requests = 0;
|
|
58
|
+
}
|
|
59
|
+
#record(record) {
|
|
60
|
+
if (this.#closed)
|
|
61
|
+
return;
|
|
62
|
+
const after = this.#history.findIndex(candidate => candidate.sequence > record.sequence);
|
|
63
|
+
if (after < 0)
|
|
64
|
+
this.#history.push(record);
|
|
65
|
+
else
|
|
66
|
+
this.#history.splice(after, 0, record);
|
|
67
|
+
}
|
|
68
|
+
#drain() {
|
|
69
|
+
if (this.#active || this.#requests === 0)
|
|
70
|
+
return;
|
|
71
|
+
const record = this.#history.pop();
|
|
72
|
+
if (record === undefined) {
|
|
73
|
+
this.#requests = 0;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.#requests--;
|
|
77
|
+
this.#active = true;
|
|
78
|
+
if (record.kind === "scalar") {
|
|
79
|
+
const key = pendingKey(record.entry);
|
|
80
|
+
this.#pending.set(key, record.previous);
|
|
81
|
+
void this.#session.change(record.entry.backend, record.entry.id, record.previous).then(outcome => {
|
|
82
|
+
if (this.#pending.get(key) === record.previous)
|
|
83
|
+
this.#pending.delete(key);
|
|
84
|
+
this.#finish(record, outcome);
|
|
85
|
+
});
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const open = this.#openStructured();
|
|
89
|
+
const target = open !== null && sameEntry(open.entry, record.entry) ? open : null;
|
|
90
|
+
if (target !== null)
|
|
91
|
+
replaceRecord(target.record, record.previous);
|
|
92
|
+
void this.#session.changeStructured(record.entry.backend, record.entry.id, structuredValue(record.entry, record.previous)).then(outcome => {
|
|
93
|
+
if (changeFailure(outcome) !== null && target !== null && this.#openStructured() === target && sameRecord(target.record, record.previous)) {
|
|
94
|
+
replaceRecord(target.record, record.forward);
|
|
95
|
+
}
|
|
96
|
+
this.#finish(record, outcome);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
#finish(record, outcome) {
|
|
100
|
+
if (changeFailure(outcome) !== null)
|
|
101
|
+
this.#record(record);
|
|
102
|
+
this.#active = false;
|
|
103
|
+
this.#drain();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function pendingKey(entry) {
|
|
107
|
+
return `${entry.backend}:${entry.id}`;
|
|
108
|
+
}
|
|
109
|
+
/** The record the engine stores: a choice part at its fallback is unset, so the engine's default applies. */
|
|
110
|
+
export function structuredValue(entry, record) {
|
|
111
|
+
return Object.fromEntries(Object.entries(record).filter(([key, value]) => {
|
|
112
|
+
const part = entry.flags.find(candidate => candidate.key === key);
|
|
113
|
+
return part?.choices === undefined || value !== part.fallback;
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
export function sameRecord(left, right) {
|
|
117
|
+
const leftEntries = Object.entries(left);
|
|
118
|
+
const rightEntries = Object.entries(right);
|
|
119
|
+
return leftEntries.length === rightEntries.length
|
|
120
|
+
&& leftEntries.every(([key, value]) => right[key] === value);
|
|
121
|
+
}
|
|
122
|
+
export function replaceRecord(target, source) {
|
|
123
|
+
for (const key of Object.keys(target))
|
|
124
|
+
delete target[key];
|
|
125
|
+
Object.assign(target, source);
|
|
126
|
+
}
|
|
127
|
+
/** Why a change did not take effect, or null when it did. */
|
|
128
|
+
export function changeFailure(outcome) {
|
|
129
|
+
if (outcome.failure !== null)
|
|
130
|
+
return outcome.failure;
|
|
131
|
+
if (outcome.status === "failed")
|
|
132
|
+
return "the effect failed";
|
|
133
|
+
if (outcome.status === "unavailable")
|
|
134
|
+
return outcome.limitationReason ?? "the setting is unavailable";
|
|
135
|
+
return outcome.limitationReason;
|
|
136
|
+
}
|
|
137
|
+
function sameEntry(left, right) {
|
|
138
|
+
return left.backend === right.backend && left.id === right.id;
|
|
139
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type PaneMouseEvent, type RailPosition, type ScrollbarGeometry, type ScrollbarPresentation, type ScrollbarPresentationInput } from "../../ui/components/index.js";
|
|
2
|
+
/** Where the rail was painted in the last frame, with the list page it scrolls by. */
|
|
3
|
+
export interface SettingsRailFrame {
|
|
4
|
+
readonly rail: RailPosition;
|
|
5
|
+
readonly geometry: ScrollbarGeometry;
|
|
6
|
+
readonly page: number;
|
|
7
|
+
}
|
|
8
|
+
/** How a pointer report landed on the rail: owned keeps it from the list, and `scroll` is the list's new offset. */
|
|
9
|
+
export interface SettingsRailPointer {
|
|
10
|
+
readonly owned: boolean;
|
|
11
|
+
readonly changed: boolean;
|
|
12
|
+
readonly overRail: boolean;
|
|
13
|
+
readonly scroll?: number;
|
|
14
|
+
}
|
|
15
|
+
/** The settings list's scrollbar rail: hover, thumb drag, track paging, and the lingering highlight after a scroll. */
|
|
16
|
+
export declare class SettingsScrollRail {
|
|
17
|
+
#private;
|
|
18
|
+
/** Notes the frame's scroll; a moved list keeps the rail lit and repaints once the highlight lapses. */
|
|
19
|
+
noteRenderedScroll(scroll: number, now: number, requestRender: () => void): void;
|
|
20
|
+
presentation(input: Omit<ScrollbarPresentationInput, "hovered" | "dragging" | "activeUntil">): ScrollbarPresentation;
|
|
21
|
+
/** Records where the rail was painted, or null when this frame has no rail. */
|
|
22
|
+
setFrame(frame: Omit<SettingsRailFrame, "rail"> & {
|
|
23
|
+
readonly rail: Omit<RailPosition, "key">;
|
|
24
|
+
} | null): void;
|
|
25
|
+
pointer(event: PaneMouseEvent, scroll: number): SettingsRailPointer;
|
|
26
|
+
/** Drops hover and any drag, as when a dialog takes the screen. */
|
|
27
|
+
clear(): void;
|
|
28
|
+
dispose(): void;
|
|
29
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { scrollForTrackPage, scrollbarPresentation, ScrollbarRails, } from "../../ui/components/index.js";
|
|
2
|
+
/** Identity of the settings list rail in the shared rail state. */
|
|
3
|
+
const RAIL_KEY = "settings";
|
|
4
|
+
// Compatibility: the transcript rail stays lit this long after a scroll, and repaints just after.
|
|
5
|
+
const SCROLL_LINGER_MS = 900;
|
|
6
|
+
const SCROLL_LINGER_REPAINT_MS = 925;
|
|
7
|
+
/** The settings list's scrollbar rail: hover, thumb drag, track paging, and the lingering highlight after a scroll. */
|
|
8
|
+
export class SettingsScrollRail {
|
|
9
|
+
#rails = new ScrollbarRails();
|
|
10
|
+
#frame = null;
|
|
11
|
+
#activeUntil = 0;
|
|
12
|
+
#activityTimer;
|
|
13
|
+
#renderedScroll;
|
|
14
|
+
/** Notes the frame's scroll; a moved list keeps the rail lit and repaints once the highlight lapses. */
|
|
15
|
+
noteRenderedScroll(scroll, now, requestRender) {
|
|
16
|
+
// Rationale: every way of scrolling ends in this frame, so a moved list is noticed here
|
|
17
|
+
// once rather than at each wheel, drag, key, and search branch.
|
|
18
|
+
if (this.#renderedScroll !== undefined && this.#renderedScroll !== scroll) {
|
|
19
|
+
this.#activeUntil = Math.max(this.#activeUntil, now + SCROLL_LINGER_MS);
|
|
20
|
+
this.#clearTimer();
|
|
21
|
+
this.#activityTimer = setTimeout(() => {
|
|
22
|
+
this.#activityTimer = undefined;
|
|
23
|
+
requestRender();
|
|
24
|
+
}, SCROLL_LINGER_REPAINT_MS);
|
|
25
|
+
this.#activityTimer.unref?.();
|
|
26
|
+
}
|
|
27
|
+
this.#renderedScroll = scroll;
|
|
28
|
+
}
|
|
29
|
+
presentation(input) {
|
|
30
|
+
return scrollbarPresentation({
|
|
31
|
+
...input,
|
|
32
|
+
hovered: this.#rails.isHovered(RAIL_KEY),
|
|
33
|
+
dragging: this.#rails.isDragging(RAIL_KEY),
|
|
34
|
+
activeUntil: this.#activeUntil,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** Records where the rail was painted, or null when this frame has no rail. */
|
|
38
|
+
setFrame(frame) {
|
|
39
|
+
this.#frame = frame === null ? null : { ...frame, rail: { ...frame.rail, key: RAIL_KEY } };
|
|
40
|
+
}
|
|
41
|
+
// Rationale: the rail takes its share of a pointer report first: hover, a thumb drag, or a
|
|
42
|
+
// track page. Owned means the list must not see the report; changed means the rail looks different.
|
|
43
|
+
pointer(event, scroll) {
|
|
44
|
+
const frame = this.#frame;
|
|
45
|
+
const wasHovered = this.#rails.isHovered(RAIL_KEY);
|
|
46
|
+
if (frame === null) {
|
|
47
|
+
this.#rails.clear();
|
|
48
|
+
return { owned: false, changed: wasHovered, overRail: false };
|
|
49
|
+
}
|
|
50
|
+
const pointer = { column: event.column, row: event.row - 1 };
|
|
51
|
+
if (this.#rails.isDragging(RAIL_KEY)) {
|
|
52
|
+
// Invariant: a drag keeps the pointer wherever it goes until the button comes up.
|
|
53
|
+
if (event.kind === "release") {
|
|
54
|
+
this.#rails.endDrag();
|
|
55
|
+
return { owned: true, changed: true, overRail: false };
|
|
56
|
+
}
|
|
57
|
+
const target = this.#rails.dragTo(frame.rail, frame.geometry, pointer);
|
|
58
|
+
return target === null ? { owned: true, changed: true, overRail: false } : { owned: true, changed: true, overRail: false, scroll: target };
|
|
59
|
+
}
|
|
60
|
+
const over = this.#rails.notePointer([frame.rail], pointer) !== null;
|
|
61
|
+
if (!over)
|
|
62
|
+
return { owned: false, changed: wasHovered, overRail: false };
|
|
63
|
+
if (event.kind === "press" && !this.#rails.beginDrag(frame.rail, frame.geometry, pointer)) {
|
|
64
|
+
return { owned: true, changed: true, overRail: true, scroll: scrollForTrackPage(frame.geometry, pointer.row - frame.rail.rowStart, scroll, frame.page) };
|
|
65
|
+
}
|
|
66
|
+
return { owned: true, changed: true, overRail: true };
|
|
67
|
+
}
|
|
68
|
+
/** Drops hover and any drag, as when a dialog takes the screen. */
|
|
69
|
+
clear() { this.#rails.clear(); }
|
|
70
|
+
dispose() {
|
|
71
|
+
this.#clearTimer();
|
|
72
|
+
this.#rails.clear();
|
|
73
|
+
}
|
|
74
|
+
#clearTimer() {
|
|
75
|
+
if (this.#activityTimer !== undefined)
|
|
76
|
+
clearTimeout(this.#activityTimer);
|
|
77
|
+
this.#activityTimer = undefined;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { UiTheme } from "../../ui/components/index.js";
|
|
2
|
-
|
|
2
|
+
interface SettingsSearchPointerEvent {
|
|
3
3
|
readonly kind: "press" | "motion" | "release";
|
|
4
4
|
readonly button: number;
|
|
5
5
|
readonly column: number;
|
|
@@ -27,3 +27,4 @@ export interface SettingsSearchInputFactory {
|
|
|
27
27
|
create(options: SettingsSearchInputOptions): SettingsSearchInput;
|
|
28
28
|
isTextInput(data: string): boolean;
|
|
29
29
|
}
|
|
30
|
+
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Worker } from "node:worker_threads";
|
|
2
2
|
import { type PromptHistoryFailure, type PromptHistoryPort, type PromptHistoryResult, type PromptHistorySnapshot, type PromptHistorySubmission } from "../../contracts/owned-ui/index.js";
|
|
3
3
|
import { type PromptHistoryScope } from "./paths.js";
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
type HistoryRecoveryState = "starting" | "ready" | "recovering" | "blocked-storage" | "closing" | "closed";
|
|
5
|
+
interface HistoryClock {
|
|
6
6
|
now(): number;
|
|
7
7
|
setTimeout(callback: () => void, milliseconds: number): ReturnType<typeof setTimeout>;
|
|
8
8
|
clearTimeout(timer: ReturnType<typeof setTimeout> | undefined): void;
|
|
@@ -57,3 +57,4 @@ export declare class PromptHistoryService implements PromptHistoryPort {
|
|
|
57
57
|
onFailure(listener: (code: PromptHistoryFailure) => void): () => void;
|
|
58
58
|
close(): Promise<void>;
|
|
59
59
|
}
|
|
60
|
+
export {};
|
|
@@ -6,12 +6,7 @@ export declare const PRIVATE_ENVIRONMENT: Readonly<{
|
|
|
6
6
|
releaseDigest: "LAUNCH_CONTEXT_RELEASE_DIGEST";
|
|
7
7
|
releaseLayers: "LAUNCH_CONTEXT_RELEASE_LAYERS";
|
|
8
8
|
launchProfile: "LAUNCH_CONTEXT_PROFILE";
|
|
9
|
-
launchMode: "LAUNCH_CONTEXT_MODE";
|
|
10
|
-
updateVersion: "LAUNCH_CONTEXT_UPDATE_VERSION";
|
|
11
9
|
immutableWarmup: "LAUNCH_CONTEXT_WARMUP";
|
|
12
|
-
residentRootExecutable: "LAUNCH_CONTEXT_RESIDENT_ROOT_EXECUTABLE";
|
|
13
|
-
residentRootArguments: "LAUNCH_CONTEXT_RESIDENT_ROOT_ARGUMENTS";
|
|
14
|
-
residentFallback: "LAUNCH_CONTEXT_RESIDENT_FALLBACK";
|
|
15
10
|
}>;
|
|
16
11
|
/**
|
|
17
12
|
* Keys published by releases that predate the neutral cutover. They are read when
|
|
@@ -35,15 +30,8 @@ export interface LaunchContext {
|
|
|
35
30
|
readonly releaseDigest?: string;
|
|
36
31
|
readonly releaseLayers?: string;
|
|
37
32
|
readonly launchProfile?: "a1" | "pi";
|
|
38
|
-
readonly launchMode?: "tabs" | "solo";
|
|
39
|
-
readonly updateVersion?: string;
|
|
40
33
|
readonly immutableWarmup?: "1";
|
|
41
|
-
readonly residentRootExecutable?: string;
|
|
42
|
-
readonly residentRootArguments?: string;
|
|
43
|
-
readonly residentFallback?: string;
|
|
44
34
|
}
|
|
45
|
-
/** The Tabs settings configure resident tabs; a direct-route launch, by `a1 solo` or by a fallback, hides them. */
|
|
46
|
-
export declare function hidesTabSettings(context: Pick<LaunchContext, "launchMode" | "residentFallback">): boolean;
|
|
47
35
|
export type LaunchContextRequirement = "optional" | "profile" | "release" | "warmup";
|
|
48
36
|
/** Read current keys, fall back to superseded keys per field, with bounded diagnostics. */
|
|
49
37
|
export declare function readLaunchContext(environment: NodeJS.ProcessEnv, requirement?: LaunchContextRequirement, platform?: NodeJS.Platform): LaunchContext;
|
|
@@ -6,12 +6,7 @@ export const PRIVATE_ENVIRONMENT = Object.freeze({
|
|
|
6
6
|
releaseDigest: "LAUNCH_CONTEXT_RELEASE_DIGEST",
|
|
7
7
|
releaseLayers: "LAUNCH_CONTEXT_RELEASE_LAYERS",
|
|
8
8
|
launchProfile: "LAUNCH_CONTEXT_PROFILE",
|
|
9
|
-
launchMode: "LAUNCH_CONTEXT_MODE",
|
|
10
|
-
updateVersion: "LAUNCH_CONTEXT_UPDATE_VERSION",
|
|
11
9
|
immutableWarmup: "LAUNCH_CONTEXT_WARMUP",
|
|
12
|
-
residentRootExecutable: "LAUNCH_CONTEXT_RESIDENT_ROOT_EXECUTABLE",
|
|
13
|
-
residentRootArguments: "LAUNCH_CONTEXT_RESIDENT_ROOT_ARGUMENTS",
|
|
14
|
-
residentFallback: "LAUNCH_CONTEXT_RESIDENT_FALLBACK",
|
|
15
10
|
});
|
|
16
11
|
/**
|
|
17
12
|
* Keys published by releases that predate the neutral cutover. They are read when
|
|
@@ -32,10 +27,6 @@ const SUPERSEDED_ENTRIES = Object.entries(SUPERSEDED_ENVIRONMENT);
|
|
|
32
27
|
const PRIVATE_KEYS = new Set([...Object.values(PRIVATE_ENVIRONMENT), ...Object.values(SUPERSEDED_ENVIRONMENT)]);
|
|
33
28
|
const LOGICAL_KEYS = new Map(PRIVATE_ENTRIES.map(([logical, key]) => [key, logical]));
|
|
34
29
|
const SUPERSEDED_LOGICAL_KEYS = new Map(SUPERSEDED_ENTRIES.map(([logical, key]) => [key, logical]));
|
|
35
|
-
/** The Tabs settings configure resident tabs; a direct-route launch, by `a1 solo` or by a fallback, hides them. */
|
|
36
|
-
export function hidesTabSettings(context) {
|
|
37
|
-
return context.launchMode === "solo" || context.residentFallback !== undefined;
|
|
38
|
-
}
|
|
39
30
|
/** Read current keys, fall back to superseded keys per field, with bounded diagnostics. */
|
|
40
31
|
export function readLaunchContext(environment, requirement = "optional", platform = process.platform) {
|
|
41
32
|
const values = {};
|
|
@@ -70,25 +61,8 @@ export function readLaunchContext(environment, requirement = "optional", platfor
|
|
|
70
61
|
if (values.launchProfile !== undefined && values.launchProfile !== "a1" && values.launchProfile !== "pi") {
|
|
71
62
|
throw invalidContext("launchProfile", "unsupported profile");
|
|
72
63
|
}
|
|
73
|
-
if (values.launchMode !== undefined && values.launchMode !== "tabs" && values.launchMode !== "solo") {
|
|
74
|
-
throw invalidContext("launchMode", "unsupported launch mode");
|
|
75
|
-
}
|
|
76
|
-
if (values.launchProfile === "pi" && values.launchMode === "tabs")
|
|
77
|
-
throw invalidContext("launchMode", "Pi comparison cannot use tabs");
|
|
78
64
|
if (values.immutableWarmup !== undefined && values.immutableWarmup !== "1")
|
|
79
65
|
throw invalidContext("immutableWarmup", "invalid permission flag");
|
|
80
|
-
if ((values.residentRootExecutable === undefined) !== (values.residentRootArguments === undefined))
|
|
81
|
-
throw invalidContext("residentRootExecutable", "resident root command is incomplete");
|
|
82
|
-
if (values.residentRootArguments !== undefined) {
|
|
83
|
-
try {
|
|
84
|
-
const argumentsValue = JSON.parse(values.residentRootArguments);
|
|
85
|
-
if (!Array.isArray(argumentsValue) || argumentsValue.some(value => typeof value !== "string"))
|
|
86
|
-
throw new Error("not string arguments");
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
throw invalidContext("residentRootArguments", "invalid JSON argument list");
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
66
|
if (values.releaseDigest !== undefined && !/^[a-f0-9]{64}$/.test(values.releaseDigest))
|
|
93
67
|
throw invalidContext("releaseDigest", "invalid digest");
|
|
94
68
|
if (requirement === "profile")
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface ClaimGateHandle {
|
|
2
|
+
release(): void;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Try once to hold the worktree mutation gate. The gate is a lock directory beside the authority
|
|
6
|
+
* file; contention returns null so the caller keeps its own bounded retry.
|
|
7
|
+
*/
|
|
8
|
+
export declare function tryAcquireClaimGate(path: string): ClaimGateHandle | null;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import lockfile from "proper-lockfile";
|
|
2
|
+
/** A stalled mutation loses the gate after this bound instead of holding it until the process ends. */
|
|
3
|
+
const CLAIM_GATE_STALE_MS = 10_000;
|
|
4
|
+
/**
|
|
5
|
+
* Try once to hold the worktree mutation gate. The gate is a lock directory beside the authority
|
|
6
|
+
* file; contention returns null so the caller keeps its own bounded retry.
|
|
7
|
+
*/
|
|
8
|
+
export function tryAcquireClaimGate(path) {
|
|
9
|
+
let release;
|
|
10
|
+
try {
|
|
11
|
+
release = lockfile.lockSync(path, {
|
|
12
|
+
realpath: false,
|
|
13
|
+
lockfilePath: `${path}.gate`,
|
|
14
|
+
stale: CLAIM_GATE_STALE_MS,
|
|
15
|
+
onCompromised: () => { },
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch (cause) {
|
|
19
|
+
if (cause instanceof Error && "code" in cause && cause.code === "ELOCKED")
|
|
20
|
+
return null;
|
|
21
|
+
throw Object.assign(new Error("cannot access the worktree mutation gate; check A1 data-directory permissions and filesystem availability", { cause }), {
|
|
22
|
+
code: "worktree-coordination-io",
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
let released = false;
|
|
26
|
+
return {
|
|
27
|
+
release() {
|
|
28
|
+
if (released)
|
|
29
|
+
return;
|
|
30
|
+
released = true;
|
|
31
|
+
try {
|
|
32
|
+
release();
|
|
33
|
+
}
|
|
34
|
+
catch { /* Compatibility: a reclaimed stale gate is already gone. */ }
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {
|
|
3
|
-
export
|
|
4
|
-
export {
|
|
5
|
-
export type {
|
|
6
|
-
export { resolveCohortEndpoint, resolveProductPaths } from "./paths.js";
|
|
7
|
-
export type { CohortEndpointPaths, ProductPaths } from "./paths.js";
|
|
1
|
+
export { assertLaunchProfileId } from "./model.js";
|
|
2
|
+
export type { LaunchProfileId, ProcessIdentity } from "./model.js";
|
|
3
|
+
export { PID_LIVENESS_IDENTITY, inspectLiveProcess } from "./process-liveness.js";
|
|
4
|
+
export { resolveProductPaths } from "./paths.js";
|
|
5
|
+
export type { ProductPaths } from "./paths.js";
|
|
8
6
|
export { parseSessionSelection, sessionSelectionArguments } from "./session-selection.js";
|
|
9
7
|
export type { SessionSelection } from "./session-selection.js";
|
|
10
8
|
export { PRIMARY_SESSION_AGENT_ID, activateSessionRepositoryContext, clearSessionRepositoryContext, listSessionRepositoryWorktrees, readSessionRepositoryContext, registerSessionRepositoryRuntime, releaseSessionRepositoryRuntime, setSessionRepositoryContext, } from "./session-repository-context.js";
|
|
11
9
|
export type { SessionRepositoryContext, SessionRepositoryContextOptions, SessionRepositoryIdentity, SessionWorktreeInventoryEntry, SessionWorktreeStatus, } 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";
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
1
|
+
export { assertLaunchProfileId } from "./model.js";
|
|
2
|
+
export { PID_LIVENESS_IDENTITY, inspectLiveProcess } from "./process-liveness.js";
|
|
3
|
+
export { resolveProductPaths } from "./paths.js";
|
|
4
4
|
export { parseSessionSelection, sessionSelectionArguments } from "./session-selection.js";
|
|
5
5
|
export { PRIMARY_SESSION_AGENT_ID, activateSessionRepositoryContext, clearSessionRepositoryContext, listSessionRepositoryWorktrees, readSessionRepositoryContext, registerSessionRepositoryRuntime, releaseSessionRepositoryRuntime, setSessionRepositoryContext, } from "./session-repository-context.js";
|
|
6
|
-
export { createSupervisorStartupAttempt, publishSupervisorStartupResult, readSupervisorStartupResult, supervisorStartupFailure, supervisorStartupReady, supervisorStartupResultPath, } from "./supervisor-startup.js";
|
|
@@ -1,64 +1,7 @@
|
|
|
1
1
|
export type LaunchProfileId = "a1" | "pi";
|
|
2
|
-
|
|
3
|
-
export
|
|
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 {
|
|
2
|
+
/** A process as session coordination records it: a pid plus the identity its writer observed. */
|
|
3
|
+
export interface ProcessIdentity {
|
|
24
4
|
readonly pid: number;
|
|
25
5
|
readonly startIdentity: string;
|
|
26
6
|
}
|
|
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
7
|
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;
|
|
@@ -3,38 +3,3 @@ export function assertLaunchProfileId(value) {
|
|
|
3
3
|
if (value !== "a1" && value !== "pi")
|
|
4
4
|
throw new TypeError(PRODUCT_TEXT.diagnostic(`launch profile is invalid: ${String(value)}`));
|
|
5
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
|
-
}
|
|
@@ -2,29 +2,5 @@ export interface ProductPaths {
|
|
|
2
2
|
readonly configDir: string;
|
|
3
3
|
readonly dataDir: string;
|
|
4
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
5
|
}
|
|
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
6
|
export declare function resolveProductPaths(environment?: NodeJS.ProcessEnv, hostPlatform?: NodeJS.Platform, fallbackHome?: string): ProductPaths;
|
|
@@ -1,27 +1,6 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
1
|
import { homedir, platform } from "node:os";
|
|
3
2
|
import { posix, win32 } from "node:path";
|
|
4
3
|
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
4
|
export function resolveProductPaths(environment = process.env, hostPlatform = platform(), fallbackHome = homedir()) {
|
|
26
5
|
const windows = hostPlatform === "win32";
|
|
27
6
|
const path = windows ? win32 : posix;
|
|
@@ -29,8 +8,6 @@ export function resolveProductPaths(environment = process.env, hostPlatform = pl
|
|
|
29
8
|
const configOverride = environment[PRODUCT_IDENTITY.environment.configDir];
|
|
30
9
|
const dataOverride = environment[PRODUCT_IDENTITY.environment.dataDir];
|
|
31
10
|
const runtimeOverride = environment[PRODUCT_IDENTITY.environment.runtimeDir];
|
|
32
|
-
const databaseOverride = environment[PRODUCT_IDENTITY.environment.databasePath];
|
|
33
|
-
const endpointOverride = environment[PRODUCT_IDENTITY.environment.endpoint];
|
|
34
11
|
const configDir = path.resolve(configOverride
|
|
35
12
|
?? (windows
|
|
36
13
|
? path.join(environment.APPDATA ?? home, PRODUCT_IDENTITY.state.windowsControlDirectory)
|
|
@@ -45,26 +22,9 @@ export function resolveProductPaths(environment = process.env, hostPlatform = pl
|
|
|
45
22
|
: environment.XDG_RUNTIME_DIR
|
|
46
23
|
? path.join(environment.XDG_RUNTIME_DIR, PRODUCT_IDENTITY.state.unixControlDirectory)
|
|
47
24
|
: 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
25
|
return {
|
|
60
26
|
configDir,
|
|
61
27
|
dataDir,
|
|
62
28
|
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
29
|
};
|
|
70
30
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ProcessIdentity } from "./model.js";
|
|
2
|
+
/**
|
|
3
|
+
* The identity every record written by this build carries. Liveness is a pid probe, so the
|
|
4
|
+
* identity only distinguishes records this build wrote from records an older build left.
|
|
5
|
+
*/
|
|
6
|
+
export declare const PID_LIVENESS_IDENTITY = "pid-liveness";
|
|
7
|
+
/** Observe whether a process is running; a permission refusal still proves the pid exists. */
|
|
8
|
+
export declare function inspectLiveProcess(pid: number): Promise<ProcessIdentity | null>;
|