@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
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createRequire } from "node:module";
|
|
1
|
+
import { existsSync, mkdirSync, realpathSync, statSync } from "node:fs";
|
|
3
2
|
import { tmpdir } from "node:os";
|
|
4
3
|
import { basename, dirname, join, resolve } from "node:path";
|
|
5
|
-
import { fileURLToPath } from "node:url";
|
|
6
4
|
import { createHash } from "node:crypto";
|
|
7
|
-
import
|
|
5
|
+
import lockfile from "proper-lockfile";
|
|
8
6
|
/** Reports that a canonical session identity already has a live writer. */
|
|
9
7
|
export class SessionWriterConflict extends Error {
|
|
10
8
|
path;
|
|
@@ -16,107 +14,60 @@ export class SessionWriterConflict extends Error {
|
|
|
16
14
|
this.holderKind = holderKind;
|
|
17
15
|
}
|
|
18
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* A crashed writer is not released by the kernel; its lock becomes stale once its holder stops
|
|
19
|
+
* refreshing it. The bound keeps resume after a crash a matter of seconds.
|
|
20
|
+
*/
|
|
21
|
+
export const SESSION_WRITER_STALE_MS = 10_000;
|
|
19
22
|
let backendOverride;
|
|
20
23
|
let cachedBackend;
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const override = env[PRODUCT_IDENTITY.environment.developmentInstanceId]
|
|
27
|
-
? env[PRODUCT_IDENTITY.environment.terminalHostPath]?.trim() || undefined
|
|
28
|
-
: undefined;
|
|
29
|
-
const local = exists(own)
|
|
30
|
-
? [own]
|
|
31
|
-
: [resolve(cwd, "dist", "native", `${process.platform}-${process.arch}`, addon), resolve(cwd, ".artifacts", "terminal-host", addon)];
|
|
32
|
-
return override ? [override, ...local] : local;
|
|
33
|
-
}
|
|
34
|
-
function loadNativeBackend() {
|
|
35
|
-
const require = createRequire(import.meta.url);
|
|
36
|
-
for (const candidate of nativeCandidates()) {
|
|
37
|
-
if (!existsSync(candidate))
|
|
38
|
-
continue;
|
|
39
|
-
try {
|
|
40
|
-
const loaded = require(candidate);
|
|
41
|
-
if (loaded.SessionLock?.acquire)
|
|
42
|
-
return loaded.SessionLock;
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
// Compatibility: an addon for another Node ABI is unusable; try the next location.
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return undefined;
|
|
49
|
-
}
|
|
50
|
-
function processIsLive(pid) {
|
|
51
|
-
try {
|
|
52
|
-
process.kill(pid, 0);
|
|
53
|
-
return true;
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
/** Development fallback. Installed releases carry the verified Node-API lock resolved above. */
|
|
60
|
-
function portableBackend() {
|
|
61
|
-
const root = join(tmpdir(), "a1-session-writer-locks");
|
|
62
|
-
mkdirSync(root, { recursive: true, mode: 0o700 });
|
|
24
|
+
/**
|
|
25
|
+
* Locks live in one per-user directory keyed by canonical identity, not beside the session, so two
|
|
26
|
+
* spellings of one file (case, short names, links, hard links) contend for the same lock.
|
|
27
|
+
*/
|
|
28
|
+
export function lockfileBackend(root = join(tmpdir(), "a1-session-writer-locks"), staleMs = SESSION_WRITER_STALE_MS) {
|
|
63
29
|
const authorityPath = (kind, key) => join(root, `${createHash("sha256").update(`${kind}\0${key}`).digest("hex")}.lock`);
|
|
30
|
+
// Platform: Windows file names are case-insensitive, and realpath canonicalizes only existing parents.
|
|
64
31
|
const locationKey = (path) => `${realpathSync.native(dirname(path))}\0${process.platform === "win32" ? basename(path).toLowerCase() : basename(path)}`;
|
|
65
32
|
const identityKey = (path) => {
|
|
66
|
-
const
|
|
67
|
-
const metadata = statSync(physical, { bigint: true });
|
|
33
|
+
const metadata = statSync(realpathSync.native(path), { bigint: true });
|
|
68
34
|
return `${metadata.dev}:${metadata.ino}`;
|
|
69
35
|
};
|
|
70
36
|
const acquireAuthority = (path) => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const record = JSON.parse(readFileSync(path, "utf8"));
|
|
82
|
-
if (typeof record.pid === "number" && !processIsLive(record.pid)) {
|
|
83
|
-
rmSync(path, { force: true });
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
// Security: malformed or racing lock evidence remains authoritative and fails closed.
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
throw error;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
37
|
+
mkdirSync(root, { recursive: true, mode: 0o700 });
|
|
38
|
+
// Rationale: the lock directory is the authority; no target file exists or is needed.
|
|
39
|
+
return lockfile.lockSync(path, {
|
|
40
|
+
realpath: false,
|
|
41
|
+
lockfilePath: path,
|
|
42
|
+
stale: staleMs,
|
|
43
|
+
// Rationale: a missed refresh means this process stalled; the next writer takes over, and the
|
|
44
|
+
// stalled one must not crash for it.
|
|
45
|
+
onCompromised: () => { },
|
|
46
|
+
});
|
|
94
47
|
};
|
|
95
48
|
return {
|
|
96
49
|
acquire(requested) {
|
|
97
50
|
const absolute = resolve(requested);
|
|
98
|
-
|
|
99
|
-
acquireAuthority(location);
|
|
100
|
-
let identity;
|
|
101
|
-
let identityAcquired = false;
|
|
51
|
+
let releaseCurrent = acquireAuthority(authorityPath("location", locationKey(absolute)));
|
|
102
52
|
let bound = false;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
if (identityKey(absolute) !== key) {
|
|
110
|
-
throw new Error("session identity changed while its writer lock was acquired");
|
|
111
|
-
}
|
|
112
|
-
rmSync(location, { force: true });
|
|
113
|
-
bound = true;
|
|
53
|
+
const bindTo = () => {
|
|
54
|
+
const key = identityKey(absolute);
|
|
55
|
+
const releaseIdentity = acquireAuthority(authorityPath("identity", key));
|
|
56
|
+
if (identityKey(absolute) !== key) {
|
|
57
|
+
releaseIdentity();
|
|
58
|
+
throw new Error("session identity changed while its writer lock was acquired");
|
|
114
59
|
}
|
|
60
|
+
// Invariant: the identity lock is held before the location lock goes, so there is no gap.
|
|
61
|
+
releaseCurrent();
|
|
62
|
+
releaseCurrent = releaseIdentity;
|
|
63
|
+
bound = true;
|
|
64
|
+
};
|
|
65
|
+
try {
|
|
66
|
+
if (existsSync(absolute))
|
|
67
|
+
bindTo();
|
|
115
68
|
}
|
|
116
69
|
catch (error) {
|
|
117
|
-
|
|
118
|
-
if (identityAcquired && identity !== undefined)
|
|
119
|
-
rmSync(identity, { force: true });
|
|
70
|
+
releaseCurrent();
|
|
120
71
|
throw error;
|
|
121
72
|
}
|
|
122
73
|
let released = false;
|
|
@@ -126,29 +77,23 @@ function portableBackend() {
|
|
|
126
77
|
if (bound || resolve(created) !== absolute || !existsSync(absolute)) {
|
|
127
78
|
throw new Error("created session does not match its reservation");
|
|
128
79
|
}
|
|
129
|
-
|
|
130
|
-
identity = authorityPath("identity", key);
|
|
131
|
-
acquireAuthority(identity);
|
|
132
|
-
if (identityKey(absolute) !== key) {
|
|
133
|
-
rmSync(identity, { force: true });
|
|
134
|
-
identity = undefined;
|
|
135
|
-
throw new Error("created session identity changed during bind");
|
|
136
|
-
}
|
|
137
|
-
rmSync(location, { force: true });
|
|
138
|
-
bound = true;
|
|
80
|
+
bindTo();
|
|
139
81
|
},
|
|
140
82
|
release() {
|
|
141
83
|
if (released)
|
|
142
84
|
throw new Error("session lock was already released");
|
|
143
85
|
released = true;
|
|
144
|
-
|
|
86
|
+
try {
|
|
87
|
+
releaseCurrent();
|
|
88
|
+
}
|
|
89
|
+
catch { /* Compatibility: a reclaimed stale lock is already gone. */ }
|
|
145
90
|
},
|
|
146
91
|
};
|
|
147
92
|
},
|
|
148
93
|
};
|
|
149
94
|
}
|
|
150
95
|
function backend() {
|
|
151
|
-
return backendOverride ?? (cachedBackend ??=
|
|
96
|
+
return backendOverride ?? (cachedBackend ??= lockfileBackend());
|
|
152
97
|
}
|
|
153
98
|
function acquire(path) {
|
|
154
99
|
const absolute = resolve(path);
|
|
@@ -157,7 +102,7 @@ function acquire(path) {
|
|
|
157
102
|
lock = backend().acquire(absolute);
|
|
158
103
|
}
|
|
159
104
|
catch {
|
|
160
|
-
throw new SessionWriterConflict(absolute
|
|
105
|
+
throw new SessionWriterConflict(absolute);
|
|
161
106
|
}
|
|
162
107
|
let released = false;
|
|
163
108
|
return {
|
|
@@ -196,7 +141,7 @@ export function bind(handle, createdPath) {
|
|
|
196
141
|
export function release(handle) {
|
|
197
142
|
handle.release();
|
|
198
143
|
}
|
|
199
|
-
/** Test-only backend seam; passing undefined restores
|
|
144
|
+
/** Test-only backend seam; passing undefined restores the default backend. */
|
|
200
145
|
export function setSessionWriterLockBackendForTest(value) {
|
|
201
146
|
backendOverride = value;
|
|
202
147
|
cachedBackend = undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { StartupTraceEvent } from "./startup-runtime.js";
|
|
2
2
|
export interface StartupPerformanceEvidence {
|
|
3
3
|
readonly profileId: "a1" | "pi";
|
|
4
|
-
readonly launchKind: "post-update" | "
|
|
4
|
+
readonly launchKind: "post-update" | "restart" | "warm";
|
|
5
5
|
readonly events: readonly StartupTraceEvent[];
|
|
6
6
|
readonly moduleGraph?: {
|
|
7
7
|
readonly loadedFiles: number;
|
|
@@ -15,7 +15,7 @@ export interface StartupPerformanceEvidence {
|
|
|
15
15
|
}
|
|
16
16
|
export interface StartupBudgetViolation {
|
|
17
17
|
readonly profileId: "a1" | "pi";
|
|
18
|
-
readonly launchKind: "post-update" | "
|
|
18
|
+
readonly launchKind: "post-update" | "restart" | "warm";
|
|
19
19
|
readonly elapsedMs: number;
|
|
20
20
|
readonly budgetMs: number;
|
|
21
21
|
readonly dominantPhases: readonly {
|
|
@@ -27,13 +27,13 @@ export interface StartupBudgetViolation {
|
|
|
27
27
|
/** Resolve the declared budget for one launch kind so measurement and reporting never restate the numbers. */
|
|
28
28
|
export declare function resolveStartupBudgetMs(launchKind: StartupPerformanceEvidence["launchKind"], budgets?: {
|
|
29
29
|
readonly postUpdateMs: number;
|
|
30
|
-
readonly
|
|
30
|
+
readonly restartMs: number;
|
|
31
31
|
readonly warmMs: number;
|
|
32
32
|
}): number;
|
|
33
33
|
/** Compare measured startup evidence with its budget without deciding whether the channel enforces it. */
|
|
34
34
|
export declare function evaluateStartupPerformanceBudget(evidence: StartupPerformanceEvidence, budgets?: {
|
|
35
35
|
readonly postUpdateMs: number;
|
|
36
|
-
readonly
|
|
36
|
+
readonly restartMs: number;
|
|
37
37
|
readonly warmMs: number;
|
|
38
38
|
}): StartupBudgetViolation | null;
|
|
39
39
|
/** Render one budget violation as the single message used by failures, evidence, and run summaries. */
|
|
@@ -41,6 +41,6 @@ export declare function formatStartupBudgetViolation(violation: StartupBudgetVio
|
|
|
41
41
|
/** Enforce the startup budget in a channel that fails on an overrun. */
|
|
42
42
|
export declare function assertStartupPerformanceBudget(evidence: StartupPerformanceEvidence, budgets?: {
|
|
43
43
|
readonly postUpdateMs: number;
|
|
44
|
-
readonly
|
|
44
|
+
readonly restartMs: number;
|
|
45
45
|
readonly warmMs: number;
|
|
46
46
|
}): void;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const STARTUP_PERFORMANCE_BUDGETS = { postUpdateMs: 2_000,
|
|
1
|
+
const STARTUP_PERFORMANCE_BUDGETS = { postUpdateMs: 2_000, restartMs: 2_500, warmMs: 2_000 };
|
|
2
2
|
/** Resolve the declared budget for one launch kind so measurement and reporting never restate the numbers. */
|
|
3
3
|
export function resolveStartupBudgetMs(launchKind, budgets = STARTUP_PERFORMANCE_BUDGETS) {
|
|
4
|
-
return launchKind === "warm" ? budgets.warmMs : launchKind === "
|
|
4
|
+
return launchKind === "warm" ? budgets.warmMs : launchKind === "restart" ? budgets.restartMs : budgets.postUpdateMs;
|
|
5
5
|
}
|
|
6
6
|
/** Compare measured startup evidence with its budget without deciding whether the channel enforces it. */
|
|
7
7
|
export function evaluateStartupPerformanceBudget(evidence, budgets = STARTUP_PERFORMANCE_BUDGETS) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
2
|
-
export type StartupPhase = "command-invoked" | "bootstrap-start" | "bootstrap-selected" | "durable-validation-start" | "durable-validation-complete" | "
|
|
2
|
+
export type StartupPhase = "command-invoked" | "bootstrap-start" | "bootstrap-selected" | "durable-validation-start" | "durable-validation-complete" | "ui-entry" | "ui-modules-loaded" | "pi-services" | "resource-discovery" | "session-created" | "settings-loaded" | "first-input-ready-render";
|
|
3
3
|
export interface StartupTraceEvent {
|
|
4
4
|
readonly schema: typeof PRODUCT_IDENTITY.evidence.startupTraceSchema;
|
|
5
5
|
readonly traceId: string;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The launcher's half of the unclean-exit protocol. The UI arms a notice file while it runs and
|
|
3
|
+
* removes it on a clean exit, so a notice that is still present when the UI ends means the UI was
|
|
4
|
+
* stopped unexpectedly: restore the terminal, print the notice as plain text, and consume it.
|
|
5
|
+
*/
|
|
6
|
+
export declare function deliverExitNotice(path: string, write: (text: string) => void, restore?: () => void): boolean;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { readFileSync, rmSync } from "node:fs";
|
|
2
|
+
import { restoreProcessTerminal } from "./terminal-reset.js";
|
|
3
|
+
/** Notices are a few plain lines; anything larger is not one this build wrote. */
|
|
4
|
+
const MAX_NOTICE_BYTES = 4096;
|
|
5
|
+
/**
|
|
6
|
+
* The launcher's half of the unclean-exit protocol. The UI arms a notice file while it runs and
|
|
7
|
+
* removes it on a clean exit, so a notice that is still present when the UI ends means the UI was
|
|
8
|
+
* stopped unexpectedly: restore the terminal, print the notice as plain text, and consume it.
|
|
9
|
+
*/
|
|
10
|
+
export function deliverExitNotice(path, write, restore = restoreProcessTerminal) {
|
|
11
|
+
let text;
|
|
12
|
+
try {
|
|
13
|
+
const bytes = readFileSync(path);
|
|
14
|
+
text = bytes.byteLength > MAX_NOTICE_BYTES ? "" : bytes.toString("utf8");
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
rmSync(path, { force: true });
|
|
21
|
+
}
|
|
22
|
+
catch { }
|
|
23
|
+
// Security: the notice is printed after the UI is gone, so it must not carry terminal controls.
|
|
24
|
+
const lines = text.split(/\r?\n/u).map(line => line.replace(/[\x00-\x1f\x7f-\x9f]/gu, "")).filter(line => line.length > 0);
|
|
25
|
+
if (lines.length === 0)
|
|
26
|
+
return false;
|
|
27
|
+
try {
|
|
28
|
+
restore();
|
|
29
|
+
}
|
|
30
|
+
catch { }
|
|
31
|
+
try {
|
|
32
|
+
write(`\n${lines.join("\n")}\n`);
|
|
33
|
+
}
|
|
34
|
+
catch { }
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { CLEAR_EXIT_INTERVAL_MS, EMERGENCY_TERMINAL_RESET,
|
|
1
|
+
export { CLEAR_EXIT_INTERVAL_MS, EMERGENCY_TERMINAL_RESET, boundedCleanup, restoreAfterOwnedExit, restoreProcessTerminal } from "./terminal-reset.js";
|
|
2
|
+
export { deliverExitNotice } from "./exit-notice.js";
|
|
2
3
|
export { installFatalExit, writeFatalDiagnostic } from "./fatal-exit.js";
|
|
3
4
|
export type { FatalExitOptions } from "./fatal-exit.js";
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { CLEAR_EXIT_INTERVAL_MS, EMERGENCY_TERMINAL_RESET,
|
|
1
|
+
export { CLEAR_EXIT_INTERVAL_MS, EMERGENCY_TERMINAL_RESET, boundedCleanup, restoreAfterOwnedExit, restoreProcessTerminal } from "./terminal-reset.js";
|
|
2
|
+
export { deliverExitNotice } from "./exit-notice.js";
|
|
2
3
|
export { installFatalExit, writeFatalDiagnostic } from "./fatal-exit.js";
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
export declare const CLEAR_EXIT_INTERVAL_MS = 500;
|
|
2
|
-
/**
|
|
3
|
-
* How long a first `Ctrl+C` keeps the resident attach client's detach chord armed. It matches the
|
|
4
|
-
* owned dialogs' interrupt chord so an unhurried double press leaves resident tabs from any tab.
|
|
5
|
-
*/
|
|
6
|
-
export declare const RESIDENT_DETACH_INTERVAL_MS = 1500;
|
|
7
2
|
export declare const EMERGENCY_TERMINAL_RESET: string;
|
|
8
3
|
export declare function restoreProcessTerminal(): void;
|
|
9
4
|
export declare function restoreAfterOwnedExit(ownsTerminal: boolean, code: number | null, signal: string | null, restore?: () => void): number;
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { writeSync } from "node:fs";
|
|
2
2
|
export const CLEAR_EXIT_INTERVAL_MS = 500;
|
|
3
|
-
/**
|
|
4
|
-
* How long a first `Ctrl+C` keeps the resident attach client's detach chord armed. It matches the
|
|
5
|
-
* owned dialogs' interrupt chord so an unhurried double press leaves resident tabs from any tab.
|
|
6
|
-
*/
|
|
7
|
-
export const RESIDENT_DETACH_INTERVAL_MS = 1_500;
|
|
8
3
|
// Protocol: reset modes on both screens; setting keyboard flags to zero is idempotent,
|
|
9
4
|
// unlike repeatedly popping a keyboard-protocol stack owned by a parent application.
|
|
10
5
|
// Resetting parent-screen margins homes the cursor, so preserve its restored position.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { OwnedUiShellEditorRecall } from "../../../contracts/owned-ui/index.js";
|
|
1
2
|
import type { Editor } from "@earendil-works/pi-tui";
|
|
2
|
-
|
|
3
|
+
interface EditorInteractionState {
|
|
3
4
|
lines: string[];
|
|
4
5
|
cursorLine: number;
|
|
5
6
|
cursorCol: number;
|
|
@@ -17,17 +18,7 @@ export interface EditorInteractionPort {
|
|
|
17
18
|
}>;
|
|
18
19
|
setSegmentTransform(transform: (text: string, mode: "word" | "grapheme", segments: Iterable<Intl.SegmentData>) => Iterable<Intl.SegmentData>): void;
|
|
19
20
|
}
|
|
20
|
-
export
|
|
21
|
-
replace(entries: readonly string[]): void;
|
|
22
|
-
position(): {
|
|
23
|
-
readonly index: number;
|
|
24
|
-
readonly total: number;
|
|
25
|
-
};
|
|
26
|
-
observe(listener: () => void): () => void;
|
|
27
|
-
reset(): void;
|
|
28
|
-
/** Exit a recall browse cycle by restoring the unsent draft rather than keeping the recalled entry. */
|
|
29
|
-
restoreDraft?(): void;
|
|
30
|
-
}
|
|
21
|
+
export type EditorRecallPort = OwnedUiShellEditorRecall;
|
|
31
22
|
export interface EditorSurface extends Pick<Editor, Exclude<keyof Editor, "setText" | "render" | "handleInput">> {
|
|
32
23
|
setText(text: string): void;
|
|
33
24
|
render(width: number): string[];
|
|
@@ -38,3 +29,4 @@ export interface EditorSurface extends Pick<Editor, Exclude<keyof Editor, "setTe
|
|
|
38
29
|
export type SelectionEditor = Pick<Editor, "getText" | "getCursor" | "setText" | "insertTextAtCursor" | "invalidate" | "onChange" | "getPaddingX" | "isShowingAutocomplete"> & {
|
|
39
30
|
readonly interaction?: EditorInteractionPort;
|
|
40
31
|
};
|
|
32
|
+
export {};
|
|
@@ -1,16 +1,22 @@
|
|
|
1
|
-
export { adaptPiAssistantMessage, adaptPiToolExecution, adaptPiUserMessage } from "./components.js";
|
|
2
1
|
export { loadHistoryEditor, type HistoryEditorConstructor } from "./history-editor-loader.js";
|
|
3
|
-
export { PiComponentConformanceError, runPiComponentConformance } from "./conformance.js";
|
|
4
|
-
export type { PiComponentConformanceReport, PiComponentConformanceResult } from "./conformance.js";
|
|
5
2
|
export { createPiShellOperationLoader, createPiShellShareOperationDialog, type PiShellOperationLoaderPort, } from "./share-operation-dialog.js";
|
|
6
|
-
export { OWNED_BUILTIN_SLASH_COMMANDS, PINNED_PI_BUILTIN_SLASH_COMMANDS,
|
|
3
|
+
export { OWNED_BUILTIN_SLASH_COMMANDS, PINNED_PI_BUILTIN_SLASH_COMMANDS, createPiShellEditor, } from "./shell-editor-autocomplete.js";
|
|
4
|
+
export { componentFromPort, componentPort, createTuiFacade, createPiKeybindingsHost, ensureTheme, formatSessionTokens, isAutocompleteProvider, isRecord, piShellHyperlink, piShellTruncateToWidth, piShellVisibleWidth, } from "./shell-shared-facade.js";
|
|
5
|
+
export { createPiExtensionUiBridge, } from "./shell-extension-ui.js";
|
|
6
|
+
export { createPiQueuedInputStatus, createPiShellFooter, createPiShellHeader, createPiShellLoadedResources, createPiShellStatus, } from "./shell-footer-status.js";
|
|
7
|
+
export { createPiShellArmin, createPiShellAuthProviderSelector, createPiShellDialog, createPiShellEarendilAnnouncement, createPiShellExtensionSelector, createPiShellLoginDialog, createPiShellModelSelector, createPiShellModelsDialog, createPiShellReloadBox, createPiShellScopedModelsSelector, createPiShellSelector, createPiShellSessionSelector, createPiShellSettingsSelector, createPiShellShowImagesSelector, createPiShellSkillsSelector, createPiShellThemeSelector, createPiShellTreeSelector, createPiShellTrustSelector, createPiShellUserMessageSelector, } from "./shell-selectors-dialogs.js";
|
|
8
|
+
export { createPiShellChangelog, createPiShellCollapsedChangelog, createPiShellHotkeys, createPiShellSessionInfo, renderPiShellChangelogLines, renderPiShellCommandMessage, renderPiShellHotkeysLines, renderPiShellPackageUpdateNotice, renderPiShellReleaseUpdateBanner, renderPiShellReleaseUpdateNotice, renderPiShellStatusText, } from "./shell-presenters-info.js";
|
|
9
|
+
export { createPiShellTranscriptComponent, isPiPromptStyleCompaction, renderPiShellStartupDiagnostic, renderPiShellTranscriptBlock, validatedAssistantMessage, } from "./shell-presenters-transcript.js";
|
|
7
10
|
export { renderPiShellHotkeySections } from "./shell-hotkey-sections.js";
|
|
8
11
|
export type { PiShellHotkeySection } from "./shell-hotkey-sections.js";
|
|
9
|
-
export type { PiExtensionUiBridge, PiExtensionUiBridgeHost,
|
|
10
|
-
export {
|
|
11
|
-
export type {
|
|
12
|
-
export {
|
|
13
|
-
export type {
|
|
12
|
+
export type { PiExtensionUiBridge, PiExtensionUiBridgeHost, } from "./shell-extension-ui.js";
|
|
13
|
+
export type { PiShellAuthProviderOption, PiShellLoginDialogPort, PiShellModelSelectorOptions, PiShellModelsDialogOptions, PiShellModelsDialogPort, PiShellScopedModelDescriptor, PiShellScopedModelsSelectorOptions, PiShellScopedModelsSelectorPort, PiShellSettingsSelectorOptions, } from "./shell-selectors-dialogs.js";
|
|
14
|
+
export type { PiShellAutocompleteCommand, PiShellClipboardContent, PiShellComponentPort, PiShellEditorBodyGeometry, PiShellEditorOptions, PiShellEditorPointerEvent, PiKeybindingsHost, PiShellEditorPort, PiShellEditorTextRange, PiShellExtensionRendererResolver, PiShellHeaderOptions, PiShellHeaderPort, PiShellImageAssetResolver, PiShellLoadedResourcesPort, PiShellPasteReservation, PiShellQueuedInputPort, PiShellResourceEntry, PiShellResourceSection, PiShellSelectorOption, PiShellSelectorOptions, PiShellStartupNotice, PiShellStatusPlacement, PiShellStatusPort, PiShellTranscriptComponentPort, PiShellViewComponentPort, } from "./shell-shared-facade.js";
|
|
15
|
+
export type { PiShellCommandMessagePresentation, PiShellHotkeysPresentation, PiShellSessionInfoPresentation, } from "./shell-presenters-info.js";
|
|
16
|
+
export type { PiShellSubmittedPromptComposer, } from "./shell-presenters-transcript.js";
|
|
17
|
+
export { PINNED_PI_LAYOUT, applyConfiguredPiTheme, applyPiTheme, applyPiThemeInstance, currentPiAccentColor, currentPiThemeName, derivePiAccentProjection, derivePiCanvasBackground, detectPiTerminalBackgroundFromEnv, detectPiTerminalBackgroundTheme, detectPiTerminalThemeForAuto, ensurePiTheme, getAvailablePiThemes, loadPiTheme, onPiThemeChange, parsePiAutoThemeSetting, piCanvasBackgroundAnsi, piTheme, resolvePiThemeSetting, setPiAccentColor, setPiPackageBorderProjectionEnabled, stopPiThemeWatcher, } from "./upstream/theme/theme.js";
|
|
18
|
+
export type { PiAccentProjection, PiColorMode, PiTerminalTheme, PiTerminalThemeDetection, PiTerminalThemeDetector, PiThemeBackground, PiThemeResult } from "./upstream/theme/theme.js";
|
|
19
|
+
export { PI_THEME_SOURCE, getPiSelectListTheme, piUiTheme } from "./theme.js";
|
|
14
20
|
export { PI_MODAL_CONTENT_PADDING_X, PiModalFrame, PiModalHeader, addPiModalHeader, adoptPiModalFrame, adoptPiModalHeader, } from "./modal-frame.js";
|
|
15
21
|
export { ModelsDialogComponent } from "./models-dialog.js";
|
|
16
22
|
export type { ModelsDialogCallbacks, ModelsDialogConfig, ModelsDialogFilter, ModelsDialogModel } from "./models-dialog.js";
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
export { adaptPiAssistantMessage, adaptPiToolExecution, adaptPiUserMessage } from "./components.js";
|
|
2
1
|
export { loadHistoryEditor } from "./history-editor-loader.js";
|
|
3
|
-
export { PiComponentConformanceError, runPiComponentConformance } from "./conformance.js";
|
|
4
2
|
export { createPiShellOperationLoader, createPiShellShareOperationDialog, } from "./share-operation-dialog.js";
|
|
5
|
-
export { OWNED_BUILTIN_SLASH_COMMANDS, PINNED_PI_BUILTIN_SLASH_COMMANDS,
|
|
3
|
+
export { OWNED_BUILTIN_SLASH_COMMANDS, PINNED_PI_BUILTIN_SLASH_COMMANDS, createPiShellEditor, } from "./shell-editor-autocomplete.js";
|
|
4
|
+
export { componentFromPort, componentPort, createTuiFacade, createPiKeybindingsHost, ensureTheme, formatSessionTokens, isAutocompleteProvider, isRecord, piShellHyperlink, piShellTruncateToWidth, piShellVisibleWidth, } from "./shell-shared-facade.js";
|
|
5
|
+
export { createPiExtensionUiBridge, } from "./shell-extension-ui.js";
|
|
6
|
+
export { createPiQueuedInputStatus, createPiShellFooter, createPiShellHeader, createPiShellLoadedResources, createPiShellStatus, } from "./shell-footer-status.js";
|
|
7
|
+
export { createPiShellArmin, createPiShellAuthProviderSelector, createPiShellDialog, createPiShellEarendilAnnouncement, createPiShellExtensionSelector, createPiShellLoginDialog, createPiShellModelSelector, createPiShellModelsDialog, createPiShellReloadBox, createPiShellScopedModelsSelector, createPiShellSelector, createPiShellSessionSelector, createPiShellSettingsSelector, createPiShellShowImagesSelector, createPiShellSkillsSelector, createPiShellThemeSelector, createPiShellTreeSelector, createPiShellTrustSelector, createPiShellUserMessageSelector, } from "./shell-selectors-dialogs.js";
|
|
8
|
+
export { createPiShellChangelog, createPiShellCollapsedChangelog, createPiShellHotkeys, createPiShellSessionInfo, renderPiShellChangelogLines, renderPiShellCommandMessage, renderPiShellHotkeysLines, renderPiShellPackageUpdateNotice, renderPiShellReleaseUpdateBanner, renderPiShellReleaseUpdateNotice, renderPiShellStatusText, } from "./shell-presenters-info.js";
|
|
9
|
+
export { createPiShellTranscriptComponent, isPiPromptStyleCompaction, renderPiShellStartupDiagnostic, renderPiShellTranscriptBlock, validatedAssistantMessage, } from "./shell-presenters-transcript.js";
|
|
6
10
|
export { renderPiShellHotkeySections } from "./shell-hotkey-sections.js";
|
|
7
|
-
export { PINNED_PI_LAYOUT, applyConfiguredPiTheme, applyPiTheme, applyPiThemeInstance, currentPiAccentColor, currentPiThemeName, derivePiAccentProjection, derivePiCanvasBackground, detectPiTerminalBackgroundFromEnv, detectPiTerminalBackgroundTheme, detectPiTerminalThemeForAuto, ensurePiTheme, getAvailablePiThemes,
|
|
8
|
-
export {
|
|
11
|
+
export { PINNED_PI_LAYOUT, applyConfiguredPiTheme, applyPiTheme, applyPiThemeInstance, currentPiAccentColor, currentPiThemeName, derivePiAccentProjection, derivePiCanvasBackground, detectPiTerminalBackgroundFromEnv, detectPiTerminalBackgroundTheme, detectPiTerminalThemeForAuto, ensurePiTheme, getAvailablePiThemes, loadPiTheme, onPiThemeChange, parsePiAutoThemeSetting, piCanvasBackgroundAnsi, piTheme, resolvePiThemeSetting, setPiAccentColor, setPiPackageBorderProjectionEnabled, stopPiThemeWatcher, } from "./upstream/theme/theme.js";
|
|
12
|
+
export { PI_THEME_SOURCE, getPiSelectListTheme, piUiTheme } from "./theme.js";
|
|
9
13
|
export { PI_MODAL_CONTENT_PADDING_X, PiModalFrame, PiModalHeader, addPiModalHeader, adoptPiModalFrame, adoptPiModalHeader, } from "./modal-frame.js";
|
|
10
14
|
export { ModelsDialogComponent } from "./models-dialog.js";
|
|
11
15
|
export { CountdownTimer } from "./upstream/components/countdown-timer.js";
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import type { PiShellComponentPort } from "./shell-shared-facade.js";
|
|
2
2
|
import type { ThinkingSelectorLevel } from "./upstream/components/thinking-selector.js";
|
|
3
3
|
import type { FilterMode } from "./upstream/components/tree-selector.js";
|
|
4
|
-
|
|
5
|
-
type TreeSelectorModule = typeof import("./upstream/components/tree-selector.js");
|
|
6
|
-
export interface PiShellLazyThinkingSelectorOptions {
|
|
4
|
+
interface PiShellLazyThinkingSelectorOptions {
|
|
7
5
|
readonly currentLevel: ThinkingSelectorLevel;
|
|
8
6
|
readonly availableLevels: readonly ThinkingSelectorLevel[];
|
|
9
7
|
readonly onSelect: (level: ThinkingSelectorLevel) => void;
|
|
@@ -15,7 +13,7 @@ export interface PiShellLazyThinkingSelectorOptions {
|
|
|
15
13
|
readonly cycleBinding: string | readonly string[];
|
|
16
14
|
};
|
|
17
15
|
}
|
|
18
|
-
|
|
16
|
+
interface PiShellLazyTreeSelectorOptions {
|
|
19
17
|
readonly tree: readonly unknown[];
|
|
20
18
|
readonly currentLeafId: string | null;
|
|
21
19
|
readonly terminalHeight: number;
|
|
@@ -31,12 +29,6 @@ export interface PiShellLazySelectorLoader {
|
|
|
31
29
|
createThinking(options: PiShellLazyThinkingSelectorOptions): Promise<PiShellComponentPort>;
|
|
32
30
|
createTree(options: PiShellLazyTreeSelectorOptions): Promise<PiShellComponentPort>;
|
|
33
31
|
}
|
|
34
|
-
export interface PiShellLazySelectorImports {
|
|
35
|
-
readonly thinking: () => Promise<ThinkingSelectorModule>;
|
|
36
|
-
readonly tree: () => Promise<TreeSelectorModule>;
|
|
37
|
-
}
|
|
38
|
-
/** Builds one idempotent selector loader; fulfilled, in-flight, and rejected imports remain shared. */
|
|
39
|
-
export declare function createPiShellLazySelectorLoader(imports?: PiShellLazySelectorImports): PiShellLazySelectorLoader;
|
|
40
32
|
/** Production selector loader, dynamically reached only after the first input-ready frame. */
|
|
41
33
|
export declare const piShellLazySelectors: PiShellLazySelectorLoader;
|
|
42
34
|
export {};
|
|
@@ -4,7 +4,7 @@ const DEFAULT_IMPORTS = {
|
|
|
4
4
|
tree: () => import("./upstream/components/tree-selector.js"),
|
|
5
5
|
};
|
|
6
6
|
/** Builds one idempotent selector loader; fulfilled, in-flight, and rejected imports remain shared. */
|
|
7
|
-
|
|
7
|
+
function createPiShellLazySelectorLoader(imports = DEFAULT_IMPORTS) {
|
|
8
8
|
let thinkingSelectorModule;
|
|
9
9
|
let treeSelectorModule;
|
|
10
10
|
const loadThinkingSelector = () => thinkingSelectorModule ??= imports.thinking();
|
|
@@ -1,31 +1,13 @@
|
|
|
1
|
-
import { Container, Input, type Component, type Focusable
|
|
1
|
+
import { Container, Input, type Component, type Focusable } from "@earendil-works/pi-tui";
|
|
2
2
|
export declare const PI_MODAL_CONTENT_PADDING_X = 1;
|
|
3
3
|
/** Paints the standard Pi Input prompt as a live-themed dialog-search marker. */
|
|
4
4
|
export declare function renderPiModalSearchInput(input: Input, width: number): string[];
|
|
5
|
-
/** Keeps Pi Input behavior and geometry while owning only its standard dialog-search presentation. */
|
|
6
|
-
export declare class PiModalSearchInput implements Component, Focusable {
|
|
7
|
-
#private;
|
|
8
|
-
constructor(input: Input);
|
|
9
|
-
get focused(): boolean;
|
|
10
|
-
set focused(value: boolean);
|
|
11
|
-
invalidate(): void;
|
|
12
|
-
render(width: number): string[];
|
|
13
|
-
handleMouse(event: TuiMouseEvent): TuiMouseEventResult | undefined;
|
|
14
|
-
}
|
|
15
5
|
/** Replaces one explicitly identified direct Input child with the standard search presentation. */
|
|
16
|
-
export declare function adoptPiModalSearchInput(container: Container, input: Component):
|
|
6
|
+
export declare function adoptPiModalSearchInput(container: Container, input: Component): Component & Focusable;
|
|
17
7
|
/** Adds one standard dialog-search presentation while callers retain the Input controller. */
|
|
18
|
-
export declare function addPiModalSearchInput(container: Container, input: Input):
|
|
8
|
+
export declare function addPiModalSearchInput(container: Container, input: Input): Component & Focusable;
|
|
19
9
|
/** Adds the standard navigation/select/close footer before a dependency component's bottom rule. */
|
|
20
10
|
export declare function addPiModalSelectFooter(container: Container): void;
|
|
21
|
-
/** Owned cancellable operation frame with the canonical dialog close guidance. */
|
|
22
|
-
export declare class PiCancellableOperationFrame extends Container {
|
|
23
|
-
#private;
|
|
24
|
-
constructor(tui: TUI, message: string);
|
|
25
|
-
get signal(): AbortSignal;
|
|
26
|
-
handleInput(data: string): void;
|
|
27
|
-
dispose(): void;
|
|
28
|
-
}
|
|
29
11
|
/** The semantic top rule/title pair used while a modal assembles its frame. */
|
|
30
12
|
export declare class PiModalHeader implements Component {
|
|
31
13
|
readonly rule: Component;
|
|
@@ -46,7 +28,7 @@ export declare class PiModalFrame implements Component {
|
|
|
46
28
|
}
|
|
47
29
|
/** Add compact titled-modal chrome while a component assembles its semantic body. */
|
|
48
30
|
export declare function addPiModalHeader(container: Container, rule: Component, title: Component): PiModalHeader;
|
|
49
|
-
|
|
31
|
+
interface PiModalFrameAdoption {
|
|
50
32
|
readonly topIndex: number;
|
|
51
33
|
readonly bottomIndex: number;
|
|
52
34
|
readonly header?: PiModalHeader;
|
|
@@ -65,3 +47,4 @@ export declare function adoptPiModalFrame(container: Container, adoption: PiModa
|
|
|
65
47
|
* never inspected or rewritten. The pinned comparison profile does not call this adapter.
|
|
66
48
|
*/
|
|
67
49
|
export declare function adoptPiModalHeader(container: Container, ruleIndex: number, titleIndex: number): PiModalHeader;
|
|
50
|
+
export {};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Container, Input, Spacer, Text, } from "@earendil-works/pi-tui";
|
|
2
2
|
import { DIALOG_CONTENT_PADDING_X, dialogFrameGeometry, insetDialogContent } from "../../../contracts/presentation/index.js";
|
|
3
|
-
import {
|
|
4
|
-
import { DIALOG_CLOSE_SHORTCUT_HINT, paintPiBorder, piTheme, renderPiModalShortcutHints } from "./theme.js";
|
|
3
|
+
import { DIALOG_CLOSE_SHORTCUT_HINT, piTheme, renderPiModalShortcutHints } from "./theme.js";
|
|
5
4
|
export const PI_MODAL_CONTENT_PADDING_X = DIALOG_CONTENT_PADDING_X;
|
|
6
5
|
/** Paints the standard Pi Input prompt as a live-themed dialog-search marker. */
|
|
7
6
|
export function renderPiModalSearchInput(input, width) {
|
|
@@ -14,7 +13,7 @@ export function renderPiModalSearchInput(input, width) {
|
|
|
14
13
|
});
|
|
15
14
|
}
|
|
16
15
|
/** Keeps Pi Input behavior and geometry while owning only its standard dialog-search presentation. */
|
|
17
|
-
|
|
16
|
+
class PiModalSearchInput {
|
|
18
17
|
#input;
|
|
19
18
|
constructor(input) {
|
|
20
19
|
this.#input = input;
|
|
@@ -48,25 +47,6 @@ export function addPiModalSelectFooter(container) {
|
|
|
48
47
|
{ key: "↑↓", action: "navigate" }, { key: "enter", action: "select" }, DIALOG_CLOSE_SHORTCUT_HINT,
|
|
49
48
|
]), 0, 0));
|
|
50
49
|
}
|
|
51
|
-
/** Owned cancellable operation frame with the canonical dialog close guidance. */
|
|
52
|
-
export class PiCancellableOperationFrame extends Container {
|
|
53
|
-
#loader;
|
|
54
|
-
constructor(tui, message) {
|
|
55
|
-
super();
|
|
56
|
-
const theme = piTheme();
|
|
57
|
-
this.#loader = new CancellableLoader(tui, text => theme.fg("accent", text), text => theme.fg("muted", text), message);
|
|
58
|
-
this.addChild(new DynamicBorder(paintPiBorder));
|
|
59
|
-
this.addChild(this.#loader);
|
|
60
|
-
this.addChild(new Spacer(1));
|
|
61
|
-
this.addChild(new Text(renderPiModalShortcutHints([DIALOG_CLOSE_SHORTCUT_HINT]), 0, 0));
|
|
62
|
-
this.addChild(new Spacer(1));
|
|
63
|
-
this.addChild(new DynamicBorder(paintPiBorder));
|
|
64
|
-
adoptPiModalFrame(this, { topIndex: 0, bottomIndex: this.children.length - 1 });
|
|
65
|
-
}
|
|
66
|
-
get signal() { return this.#loader.signal; }
|
|
67
|
-
handleInput(data) { this.#loader.handleInput(data); }
|
|
68
|
-
dispose() { this.#loader.dispose(); }
|
|
69
|
-
}
|
|
70
50
|
/** The semantic top rule/title pair used while a modal assembles its frame. */
|
|
71
51
|
export class PiModalHeader {
|
|
72
52
|
rule;
|
|
@@ -7,7 +7,7 @@ import type { PiShellClipboardContent, PiShellEditorTextRange, PiShellPasteReser
|
|
|
7
7
|
* vanilla Pi renders. This keeps owned UX additions out of the synchronized
|
|
8
8
|
* Pi editor port and gives future interactions one registration point.
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
interface OwnedEditorUxInterceptor {
|
|
11
11
|
handleInput(data: string, next: (data?: string) => void): void;
|
|
12
12
|
render(width: number, next: () => string[]): string[];
|
|
13
13
|
reset(): void;
|
|
@@ -18,7 +18,7 @@ export interface OwnedEditorUxInterceptor {
|
|
|
18
18
|
pasteClipboard?(): boolean;
|
|
19
19
|
cancelPendingPastes?(): void;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
interface OwnedEditorPointerEvent {
|
|
22
22
|
readonly kind: "press" | "motion" | "release";
|
|
23
23
|
readonly button: number;
|
|
24
24
|
readonly column: number;
|
|
@@ -45,7 +45,7 @@ export declare class OwnedEditorUxInterception {
|
|
|
45
45
|
ownsPointer(): boolean;
|
|
46
46
|
pasteClipboard(): boolean;
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
interface PromptSelectionUxOptions {
|
|
49
49
|
readonly copyText: (text: string, cut: boolean) => void;
|
|
50
50
|
readonly readClipboardContent: () => Promise<PiShellClipboardContent | null>;
|
|
51
51
|
readonly beginClipboardPaste?: () => PiShellPasteReservation;
|
|
@@ -77,3 +77,4 @@ export declare function createPromptSelectionInterceptor(editor: Editor, keybind
|
|
|
77
77
|
export declare function editorInsertedText(data: string): string | undefined;
|
|
78
78
|
/** Shares the existing atomic-aware body layout with prompt/menu composition. */
|
|
79
79
|
export declare function editorVisualLineCount(editor: Editor, width: number): number | undefined;
|
|
80
|
+
export {};
|