@timurproko/a1 0.1.8-dev.49ff83a → 0.1.8-dev.508
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -65
- package/bin/cli.js +33 -11
- package/bin/guardian.js +16 -6
- package/bin/module-identity.js +76 -69
- package/bin/module-resolver.js +138 -0
- package/bin/pinned-pi-public.d.ts +3 -0
- package/bin/pinned-pi-public.js +93 -0
- package/bin/release-cleanup.js +8 -0
- package/bin/supervisor.js +2 -2
- package/bin/ui.js +67 -22
- package/bin/update-recovery.js +343 -0
- package/bin/warmup.js +28 -0
- package/dist/app/session-shell/clipboard-diagnostics.d.ts +16 -0
- package/dist/app/session-shell/clipboard-diagnostics.js +65 -0
- package/dist/app/session-shell/clipboard-image.d.ts +11 -0
- package/dist/app/session-shell/clipboard-image.js +38 -0
- package/dist/app/session-shell/editor-hyperlink-budget.d.ts +9 -0
- package/dist/app/session-shell/editor-hyperlink-budget.js +23 -0
- package/dist/app/session-shell/helper-pool.d.ts +33 -0
- package/dist/app/session-shell/helper-pool.js +98 -0
- package/dist/app/session-shell/image-preparation-client.d.ts +20 -0
- package/dist/app/session-shell/image-preparation-client.js +145 -0
- package/dist/app/session-shell/image-preparation.d.ts +18 -0
- package/dist/app/session-shell/image-preparation.js +126 -0
- package/dist/app/session-shell/image-source.d.ts +13 -0
- package/dist/app/session-shell/image-source.js +171 -0
- package/dist/app/session-shell/image-worker.d.ts +17 -0
- package/dist/app/session-shell/image-worker.js +23 -0
- package/dist/app/session-shell/index.d.ts +7 -0
- package/dist/app/session-shell/index.js +4 -0
- package/dist/app/session-shell/paste-executor.d.ts +18 -0
- package/dist/app/session-shell/paste-executor.js +253 -0
- package/dist/app/session-shell/paste-helper.js +173 -0
- package/dist/app/session-shell/paste-preparation-client.d.ts +31 -0
- package/dist/app/session-shell/paste-preparation-client.js +170 -0
- package/dist/app/session-shell/paste-protocol.d.ts +78 -0
- package/dist/app/session-shell/paste-protocol.js +18 -0
- package/dist/app/session-shell/paste-text-preparation.d.ts +6 -0
- package/dist/app/session-shell/paste-text-preparation.js +134 -0
- package/dist/app/session-shell/paste-text-worker.js +12 -0
- package/dist/app/session-shell/paste-types.d.ts +17 -0
- package/dist/app/session-shell/path-chip-presentation.d.ts +7 -0
- package/dist/app/session-shell/path-chip-presentation.js +24 -0
- package/dist/app/session-shell/prompt-chips.d.ts +76 -0
- package/dist/app/session-shell/prompt-chips.js +507 -0
- package/dist/app/session-shell/prompt-history-controller.d.ts +36 -0
- package/dist/app/session-shell/prompt-history-controller.js +170 -0
- package/dist/app/session-shell/prompt-suggestion-controller.d.ts +35 -0
- package/dist/app/session-shell/prompt-suggestion-controller.js +207 -0
- package/dist/app/session-shell/quit-outro-effects.d.ts +29 -0
- package/dist/app/session-shell/quit-outro-effects.js +242 -0
- package/dist/app/session-shell/quit-outro.d.ts +38 -0
- package/dist/app/session-shell/quit-outro.js +98 -0
- package/dist/app/session-shell/response-copy-coordinator.d.ts +27 -0
- package/dist/app/session-shell/response-copy-coordinator.js +187 -0
- package/dist/app/session-shell/response-copy-helper.js +122 -0
- package/dist/app/session-shell/response-copy-protocol.d.ts +56 -0
- package/dist/app/session-shell/response-copy-protocol.js +5 -0
- package/dist/app/session-shell/response-copy-transport.d.ts +39 -0
- package/dist/app/session-shell/response-copy-transport.js +217 -0
- package/dist/app/session-shell/session-shell-root.d.ts +265 -0
- package/dist/app/session-shell/session-shell-root.js +1366 -0
- package/dist/app/session-shell/session-shell.d.ts +59 -0
- package/dist/app/session-shell/session-shell.js +1917 -0
- package/dist/app/session-shell/session-viewport-controller.d.ts +61 -0
- package/dist/app/session-shell/session-viewport-controller.js +597 -0
- package/dist/app/session-shell/stream-presentation-coalescer.d.ts +29 -0
- package/dist/app/session-shell/stream-presentation-coalescer.js +79 -0
- package/dist/app/session-shell/system-clipboard.d.ts +20 -0
- package/dist/app/session-shell/system-clipboard.js +159 -0
- package/dist/app/session-shell/text-paste.d.ts +5 -0
- package/dist/app/session-shell/text-paste.js +16 -0
- package/dist/cli/capabilities.d.ts +6 -0
- package/dist/cli/capabilities.js +7 -0
- package/dist/cli/dispatch.d.ts +46 -0
- package/dist/cli/dispatch.js +261 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/package-messages.d.ts +26 -0
- package/dist/cli/package-messages.js +71 -0
- package/dist/cli/packages.d.ts +32 -0
- package/dist/cli/packages.js +81 -0
- package/dist/cli/version-stats.d.ts +22 -0
- package/dist/cli/version-stats.js +112 -0
- package/dist/composition/index.d.ts +2 -0
- package/dist/composition/index.js +2 -0
- package/dist/composition/owned-ui.d.ts +37 -0
- package/dist/composition/owned-ui.js +136 -0
- package/dist/composition/settings-route-host.d.ts +7 -0
- package/dist/composition/settings-route-host.js +110 -0
- package/dist/contracts/agent-engine/capability-ports.d.ts +95 -0
- package/dist/contracts/agent-engine/domain-validation.js +107 -0
- package/dist/contracts/agent-engine/domain.d.ts +138 -0
- package/dist/contracts/agent-engine/index.d.ts +11 -0
- package/dist/contracts/agent-engine/index.js +6 -0
- package/dist/contracts/agent-engine/package-ports.d.ts +60 -0
- package/dist/contracts/agent-engine/ports.js +1 -0
- package/dist/contracts/owned-ui/extension-ui.d.ts +310 -0
- package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
- package/dist/contracts/owned-ui/image-attachments.js +67 -0
- package/dist/contracts/owned-ui/index.d.ts +12 -0
- package/dist/contracts/owned-ui/index.js +8 -0
- package/dist/contracts/owned-ui/model.d.ts +378 -0
- package/dist/contracts/owned-ui/prompt-history.d.ts +55 -0
- package/dist/contracts/owned-ui/prompt-history.js +23 -0
- package/dist/contracts/owned-ui/prompt-suggestions.d.ts +3 -0
- package/dist/contracts/owned-ui/prompt-suggestions.js +44 -0
- package/dist/contracts/owned-ui/suggestion-diagnostics.d.ts +22 -0
- package/dist/contracts/owned-ui/suggestion-diagnostics.js +9 -0
- package/dist/contracts/owned-ui/transcript-lifecycle.d.ts +5 -0
- package/dist/contracts/owned-ui/transcript-lifecycle.js +33 -0
- package/dist/contracts/owned-ui/validation.d.ts +15 -0
- package/dist/contracts/owned-ui/validation.js +523 -0
- package/dist/contracts/presentation/index.d.ts +104 -0
- package/dist/features/launch/development-launch.js +36 -0
- package/dist/features/launch/index.d.ts +12 -0
- package/dist/features/launch/index.js +6 -0
- package/dist/features/launch/intent.d.ts +12 -0
- package/dist/features/launch/intent.js +8 -0
- package/dist/features/launch/prepare-launch.d.ts +11 -0
- package/dist/features/launch/prepare-launch.js +14 -0
- package/dist/features/launch/profile-paths.d.ts +16 -0
- package/dist/features/launch/profile-paths.js +36 -0
- package/dist/features/launch/runtime-selection.d.ts +16 -0
- package/dist/features/launch/runtime-selection.js +13 -0
- package/dist/features/owned-ui/index.d.ts +6 -0
- package/dist/features/owned-ui/index.js +4 -0
- package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
- package/dist/features/owned-ui/project-trust-prompt.js +149 -0
- package/dist/features/owned-ui/run.d.ts +17 -0
- package/dist/features/owned-ui/run.js +64 -0
- package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
- package/dist/features/owned-ui/session-fork-prompt.js +34 -0
- package/dist/features/owned-ui/settings-app.d.ts +21 -0
- package/dist/features/owned-ui/settings-app.js +807 -0
- package/dist/features/owned-ui/settings-route.d.ts +2 -0
- package/dist/features/owned-ui/settings-route.js +2 -0
- package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
- package/dist/features/prompt-history/image-sidecar.js +130 -0
- package/dist/features/prompt-history/index.d.ts +4 -0
- package/dist/features/prompt-history/index.js +3 -0
- package/dist/features/prompt-history/paths.d.ts +5 -0
- package/dist/features/prompt-history/paths.js +17 -0
- package/dist/features/prompt-history/service.d.ts +54 -0
- package/dist/features/prompt-history/service.js +425 -0
- package/dist/features/prompt-history/store.d.ts +16 -0
- package/dist/features/prompt-history/store.js +219 -0
- package/dist/features/prompt-history/worker.d.ts +9 -0
- package/dist/features/prompt-history/worker.js +45 -0
- package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
- package/dist/features/prompt-suggestions/diagnostics.js +82 -0
- package/dist/features/prompt-suggestions/index.d.ts +2 -0
- package/dist/features/prompt-suggestions/index.js +1 -0
- package/dist/foundation/launch-context/index.d.ts +59 -0
- package/dist/foundation/launch-context/index.js +136 -0
- package/dist/foundation/launch-guardian/index.d.ts +2 -0
- package/dist/foundation/launch-guardian/index.js +1 -0
- package/dist/foundation/launch-guardian/main.d.ts +33 -0
- package/dist/foundation/launch-guardian/main.js +180 -0
- package/dist/foundation/lifecycle/commands.js +1 -0
- package/dist/foundation/lifecycle/index.d.ts +11 -0
- package/dist/foundation/lifecycle/index.js +5 -0
- package/dist/foundation/lifecycle/model.d.ts +64 -0
- package/dist/foundation/lifecycle/model.js +40 -0
- package/dist/foundation/lifecycle/paths.d.ts +30 -0
- package/dist/foundation/lifecycle/paths.js +70 -0
- package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
- package/dist/foundation/lifecycle/session-selection.js +39 -0
- package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
- package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
- package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
- package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
- package/dist/foundation/process-containment/index.d.ts +8 -0
- package/dist/foundation/process-containment/index.js +6 -0
- package/dist/foundation/process-containment/linux-process-inspector.d.ts +7 -0
- package/dist/foundation/process-containment/linux-process-inspector.js +27 -0
- package/dist/foundation/process-containment/native-guardian-containment.d.ts +17 -0
- package/dist/foundation/process-containment/native-guardian-containment.js +140 -0
- package/dist/foundation/process-containment/windows-process-inspector.d.ts +19 -0
- package/dist/foundation/process-containment/windows-process-inspector.js +56 -0
- package/dist/foundation/protocol/client.d.ts +18 -0
- package/dist/foundation/protocol/client.js +130 -0
- package/dist/foundation/protocol/index.d.ts +3 -0
- package/dist/foundation/protocol/index.js +2 -0
- package/dist/foundation/protocol/messages.d.ts +90 -0
- package/dist/foundation/protocol/messages.js +100 -0
- package/dist/foundation/release/bootstrap.d.ts +51 -0
- package/dist/foundation/release/bootstrap.js +427 -0
- package/dist/foundation/release/cohort-state.d.ts +157 -0
- package/dist/foundation/release/cohort-state.js +472 -0
- package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
- package/dist/foundation/release/dependency-certification-retention.js +88 -0
- package/dist/foundation/release/dependency-certification.d.ts +24 -0
- package/dist/foundation/release/dependency-certification.js +266 -0
- package/dist/foundation/release/dependency-layer.d.ts +78 -0
- package/dist/foundation/release/dependency-layer.js +466 -0
- package/dist/foundation/release/endpoints.d.ts +24 -0
- package/dist/foundation/release/endpoints.js +134 -0
- package/dist/foundation/release/immutable-platform.d.ts +6 -0
- package/dist/foundation/release/immutable-platform.js +13 -0
- package/dist/foundation/release/index.d.ts +30 -0
- package/dist/foundation/release/index.js +16 -0
- package/dist/foundation/release/release-gc.d.ts +71 -0
- package/dist/foundation/release/release-gc.js +764 -0
- package/dist/foundation/release/release-store.d.ts +49 -0
- package/dist/foundation/release/release-store.js +235 -0
- package/dist/foundation/release/release.d.ts +43 -0
- package/dist/foundation/release/release.js +215 -0
- package/dist/foundation/release/restart-certification.d.ts +68 -0
- package/dist/foundation/release/restart-certification.js +227 -0
- package/dist/foundation/release/types.d.ts +11 -0
- package/dist/foundation/release/types.js +1 -0
- package/dist/foundation/release/update-launch.d.ts +6 -0
- package/dist/foundation/release/update-launch.js +17 -0
- package/dist/foundation/release/update-recovery.d.ts +76 -0
- package/dist/foundation/release/update-recovery.js +356 -0
- package/dist/foundation/release/update-transaction.d.ts +42 -0
- package/dist/foundation/release/update-transaction.js +101 -0
- package/dist/foundation/release/update.d.ts +119 -0
- package/dist/foundation/release/update.js +632 -0
- package/dist/foundation/release/warmup.d.ts +3 -0
- package/dist/foundation/release/warmup.js +47 -0
- package/dist/foundation/startup/index.d.ts +4 -0
- package/dist/foundation/startup/index.js +2 -0
- package/dist/foundation/startup/startup-budget.d.ts +46 -0
- package/dist/foundation/startup/startup-budget.js +42 -0
- package/dist/foundation/startup/startup-descriptor.js +34 -0
- package/dist/foundation/startup/startup-runtime.d.ts +27 -0
- package/dist/foundation/startup/startup-runtime.js +128 -0
- package/dist/foundation/storage/control-store.d.ts +18 -0
- package/dist/foundation/storage/control-store.js +342 -0
- package/dist/foundation/storage/index.d.ts +1 -0
- package/dist/foundation/storage/index.js +1 -0
- package/dist/foundation/supervision/index.d.ts +3 -0
- package/dist/foundation/supervision/index.js +3 -0
- package/dist/foundation/supervision/main.d.ts +1 -0
- package/dist/foundation/supervision/main.js +84 -0
- package/dist/foundation/supervision/paths.d.ts +1 -0
- package/dist/foundation/supervision/paths.js +1 -0
- package/dist/foundation/supervision/server.d.ts +46 -0
- package/dist/foundation/supervision/server.js +573 -0
- package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
- package/dist/foundation/terminal-cleanup/fatal-exit.js +87 -0
- package/dist/foundation/terminal-cleanup/index.d.ts +3 -0
- package/dist/foundation/terminal-cleanup/index.js +2 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
- package/dist/integrations/pi/components/components.d.ts +4 -0
- package/dist/integrations/pi/components/components.js +64 -0
- package/dist/integrations/pi/components/conformance.d.ts +18 -0
- package/dist/integrations/pi/components/conformance.js +70 -0
- package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
- package/dist/integrations/pi/components/editor-interaction.js +1 -0
- package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
- package/dist/integrations/pi/components/history-editor-loader.js +5 -0
- package/dist/integrations/pi/components/index.d.ts +21 -0
- package/dist/integrations/pi/components/index.js +13 -0
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
- package/dist/integrations/pi/components/owned-editor-ux.js +1094 -0
- package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
- package/dist/integrations/pi/components/path-word-ranges.js +37 -0
- package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
- package/dist/integrations/pi/components/prompt-input-port.js +1 -0
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +167 -0
- package/dist/integrations/pi/components/resources/builtin-themes.js +168 -0
- package/dist/integrations/pi/components/shell-components.d.ts +7 -0
- package/dist/integrations/pi/components/shell-components.js +7 -0
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +298 -0
- package/dist/integrations/pi/components/shell-extension-ui.d.ts +35 -0
- package/dist/integrations/pi/components/shell-extension-ui.js +280 -0
- package/dist/integrations/pi/components/shell-footer-status.d.ts +7 -0
- package/dist/integrations/pi/components/shell-footer-status.js +248 -0
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +43 -0
- package/dist/integrations/pi/components/shell-presenters-info.js +114 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.js +433 -0
- package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +123 -0
- package/dist/integrations/pi/components/shell-selectors-dialogs.js +242 -0
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +217 -0
- package/dist/integrations/pi/components/shell-shared-facade.js +92 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +17 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +49 -0
- package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
- package/dist/integrations/pi/components/tool-image-presentation.js +83 -0
- package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
- package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
- package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
- package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +445 -0
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +370 -0
- package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
- package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +13 -0
- package/dist/integrations/pi/components/upstream/components/daxnuts.d.ts +29 -0
- package/dist/integrations/pi/components/upstream/components/daxnuts.js +146 -0
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.d.ts +4 -0
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +48 -0
- package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +20 -0
- package/dist/integrations/pi/components/upstream/components/extension-editor.js +84 -0
- package/dist/integrations/pi/components/upstream/components/mermaid.js +81 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +46 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +187 -0
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +59 -0
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +346 -0
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +11 -0
- package/dist/integrations/pi/components/upstream/components/session-footer.js +123 -0
- package/dist/integrations/pi/components/upstream/components/session-selector-search.js +161 -0
- package/dist/integrations/pi/components/upstream/components/session-selector.d.ts +95 -0
- package/dist/integrations/pi/components/upstream/components/session-selector.js +893 -0
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +21 -0
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +46 -0
- package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +35 -0
- package/dist/integrations/pi/components/upstream/components/status-indicator.js +69 -0
- package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +67 -0
- package/dist/integrations/pi/components/upstream/components/tool-execution.js +365 -0
- package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +101 -0
- package/dist/integrations/pi/components/upstream/components/tree-selector.js +1275 -0
- package/dist/integrations/pi/components/upstream/components/trust-selector.d.ts +33 -0
- package/dist/integrations/pi/components/upstream/components/trust-selector.js +81 -0
- package/dist/integrations/pi/components/upstream/external-editor.js +43 -0
- package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +289 -0
- package/dist/integrations/pi/components/upstream/history/editor-core.js +2144 -0
- package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +35 -0
- package/dist/integrations/pi/components/upstream/history/kill-ring.js +51 -0
- package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
- package/dist/integrations/pi/components/upstream/history/printable-key.js +43 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +14 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +31 -0
- package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +25 -0
- package/dist/integrations/pi/components/upstream/history/undo-stack.js +39 -0
- package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
- package/dist/integrations/pi/components/upstream/history/word-navigation.js +103 -0
- package/dist/integrations/pi/components/upstream/model-search.d.ts +18 -0
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +33 -0
- package/dist/integrations/pi/components/upstream/theme/theme-controller.js +114 -0
- package/dist/integrations/pi/components/upstream/theme/theme.d.ts +61 -0
- package/dist/integrations/pi/components/upstream/theme/theme.js +337 -0
- package/dist/integrations/pi/engine/adapter.d.ts +135 -0
- package/dist/integrations/pi/engine/adapter.js +648 -0
- package/dist/integrations/pi/engine/changelog.d.ts +2 -0
- package/dist/integrations/pi/engine/changelog.js +63 -0
- package/dist/integrations/pi/engine/command-dispatch.d.ts +41 -0
- package/dist/integrations/pi/engine/command-dispatch.js +125 -0
- package/dist/integrations/pi/engine/compaction-progress.d.ts +28 -0
- package/dist/integrations/pi/engine/compaction-progress.js +96 -0
- package/dist/integrations/pi/engine/conformance.d.ts +39 -0
- package/dist/integrations/pi/engine/conformance.js +140 -0
- package/dist/integrations/pi/engine/event-delivery.d.ts +100 -0
- package/dist/integrations/pi/engine/event-delivery.js +184 -0
- package/dist/integrations/pi/engine/extension-ui-binding.d.ts +35 -0
- package/dist/integrations/pi/engine/extension-ui-binding.js +81 -0
- package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
- package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
- package/dist/integrations/pi/engine/index.d.ts +18 -0
- package/dist/integrations/pi/engine/index.js +10 -0
- package/dist/integrations/pi/engine/message-values.d.ts +29 -0
- package/dist/integrations/pi/engine/message-values.js +168 -0
- package/dist/integrations/pi/engine/package-integration.d.ts +13 -0
- package/dist/integrations/pi/engine/package-integration.js +118 -0
- package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
- package/dist/integrations/pi/engine/pending-delivery.js +156 -0
- package/dist/integrations/pi/engine/pi-settings-metadata.json +385 -0
- package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
- package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +30 -0
- package/dist/integrations/pi/engine/prompt-suggestions.js +102 -0
- package/dist/integrations/pi/engine/provider-authentication.d.ts +34 -0
- package/dist/integrations/pi/engine/provider-authentication.js +209 -0
- package/dist/integrations/pi/engine/resource-catalog.d.ts +49 -0
- package/dist/integrations/pi/engine/resource-catalog.js +289 -0
- package/dist/integrations/pi/engine/resources/changelog.json +12 -0
- package/dist/integrations/pi/engine/runtime-integration.d.ts +53 -0
- package/dist/integrations/pi/engine/runtime-integration.js +118 -0
- package/dist/integrations/pi/engine/session-events.d.ts +48 -0
- package/dist/integrations/pi/engine/session-events.js +223 -0
- package/dist/integrations/pi/engine/session-integration.d.ts +67 -0
- package/dist/integrations/pi/engine/session-integration.js +195 -0
- package/dist/integrations/pi/engine/session-runtime.d.ts +84 -0
- package/dist/integrations/pi/engine/session-runtime.js +249 -0
- package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
- package/dist/integrations/pi/engine/session-selection.js +90 -0
- package/dist/integrations/pi/engine/settings-bridge.d.ts +121 -0
- package/dist/integrations/pi/engine/settings-bridge.js +514 -0
- package/dist/integrations/pi/engine/settings-metadata.d.ts +31 -0
- package/dist/integrations/pi/engine/settings-metadata.js +67 -0
- package/dist/integrations/pi/engine/settings-port.d.ts +42 -0
- package/dist/integrations/pi/engine/settings-port.js +353 -0
- package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
- package/dist/integrations/pi/engine/tool-rendering.js +145 -0
- package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
- package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
- package/dist/integrations/pi/engine/transcript-projection.d.ts +39 -0
- package/dist/integrations/pi/engine/transcript-projection.js +405 -0
- package/dist/integrations/pi/engine/usage-view.d.ts +4 -0
- package/dist/integrations/pi/engine/usage-view.js +56 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
- package/dist/integrations/pi/engine/workflow-contexts.d.ts +59 -0
- package/dist/integrations/pi/engine/workflow-contexts.js +316 -0
- package/dist/integrations/pi/engine/workflow-runner.d.ts +60 -0
- package/dist/integrations/pi/engine/workflow-runner.js +509 -0
- package/dist/integrations/pi/engine/workflow-support.d.ts +33 -0
- package/dist/integrations/pi/engine/workflow-support.js +352 -0
- package/dist/integrations/pi/engine/workflows.d.ts +251 -0
- package/dist/integrations/pi/engine/workflows.js +63 -0
- package/dist/integrations/pi/startup-public.d.ts +2 -0
- package/dist/integrations/pi/startup-public.js +2223 -0
- package/dist/integrations/pi/startup-public.manifest.json +12502 -0
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +56 -0
- package/dist/integrations/pi/tui-runtime/adapter.js +783 -0
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +156 -0
- package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +88 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +433 -0
- package/dist/integrations/pi/tui-runtime/index.d.ts +9 -0
- package/dist/integrations/pi/tui-runtime/index.js +5 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +13 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.js +57 -0
- package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
- package/dist/integrations/pi/tui-runtime/overlay-geometry.js +158 -0
- package/dist/integrations/pi/tui-runtime/presentation-adapter.d.ts +4 -0
- package/dist/integrations/pi/tui-runtime/presentation-adapter.js +48 -0
- package/dist/native/darwin-arm64/manifest.json +4 -4
- package/dist/native/darwin-arm64/process-guardian +0 -0
- package/dist/native/linux-x64/manifest.json +3 -3
- package/dist/native/linux-x64/process-guardian +0 -0
- package/dist/native/win32-x64/manifest.json +3 -3
- package/dist/native/win32-x64/process-guardian.exe +0 -0
- package/dist/product-identity.d.ts +37 -0
- package/dist/product-identity.js +119 -0
- package/dist/product-identity.json +85 -0
- package/dist/runtime-payload-inventory.json +127147 -0
- package/dist/ui/apps/contracts.d.ts +64 -0
- package/dist/ui/apps/host.d.ts +42 -0
- package/dist/ui/apps/host.js +156 -0
- package/dist/ui/apps/index.d.ts +5 -0
- package/dist/ui/apps/index.js +3 -0
- package/dist/ui/apps/registry.d.ts +12 -0
- package/dist/ui/apps/registry.js +33 -0
- package/dist/ui/components/dialog-panel.js +49 -0
- package/dist/ui/components/frame.d.ts +22 -0
- package/dist/ui/components/frame.js +55 -0
- package/dist/ui/components/index.d.ts +47 -0
- package/dist/ui/components/index.js +25 -0
- package/dist/ui/components/line-input.d.ts +68 -0
- package/dist/ui/components/line-input.js +224 -0
- package/dist/ui/components/list-view.d.ts +60 -0
- package/dist/ui/components/list-view.js +82 -0
- package/dist/ui/components/mouse.d.ts +25 -0
- package/dist/ui/components/mouse.js +70 -0
- package/dist/ui/components/progress-status.d.ts +2 -0
- package/dist/ui/components/progress-status.js +4 -0
- package/dist/ui/components/prompt-input.d.ts +32 -0
- package/dist/ui/components/prompt-input.js +51 -0
- package/dist/ui/components/scrollbar.d.ts +88 -0
- package/dist/ui/components/scrollbar.js +137 -0
- package/dist/ui/components/selection-copy.d.ts +24 -0
- package/dist/ui/components/selection-copy.js +39 -0
- package/dist/ui/components/shortcuts.d.ts +58 -0
- package/dist/ui/components/shortcuts.js +82 -0
- package/dist/ui/components/spans.d.ts +28 -0
- package/dist/ui/components/spans.js +266 -0
- package/dist/ui/components/submitted-prompt.d.ts +23 -0
- package/dist/ui/components/submitted-prompt.js +50 -0
- package/dist/ui/components/surface.d.ts +20 -0
- package/dist/ui/components/surface.js +44 -0
- package/dist/ui/components/text-selection.d.ts +62 -0
- package/dist/ui/components/text-selection.js +210 -0
- package/dist/ui/components/text.d.ts +38 -0
- package/dist/ui/components/text.js +185 -0
- package/dist/ui/components/transcript-viewport.d.ts +173 -0
- package/dist/ui/components/transcript-viewport.js +753 -0
- package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
- package/dist/ui/components/visible-hyperlinks.js +97 -0
- package/dist/ui/settings/declarations.d.ts +141 -0
- package/dist/ui/settings/declarations.js +135 -0
- package/dist/ui/settings/index.d.ts +10 -0
- package/dist/ui/settings/index.js +5 -0
- package/dist/ui/settings/manager.d.ts +54 -0
- package/dist/ui/settings/manager.js +256 -0
- package/dist/ui/settings/migrations.d.ts +13 -0
- package/dist/ui/settings/migrations.js +74 -0
- package/dist/ui/settings/sections.d.ts +52 -0
- package/dist/ui/settings/sections.js +112 -0
- package/docs/architecture/boundaries.md +17 -13
- package/docs/architecture/code-documentation.md +77 -0
- package/docs/architecture/history-editor-provenance.md +100 -0
- package/docs/architecture/internal-naming.md +91 -0
- package/docs/architecture/process-guardian-provenance.md +3 -1
- package/docs/architecture/project-structure.md +69 -30
- package/docs/architecture/prompt-suggestions.md +68 -0
- package/docs/architecture/resource-and-data-policy.md +28 -2
- package/docs/architecture/response-copy-delivery.md +85 -0
- package/docs/architecture/terminal-host-proof-gate.md +1 -1
- package/docs/architecture/terminal-host-spike-evidence.md +1 -1
- package/docs/architecture/tool-image-presentation.md +62 -0
- package/docs/architecture/toolchain.md +32 -10
- package/docs/architecture/ui-reference-provenance.md +60 -6
- package/docs/ci-release-runbook.md +256 -79
- package/docs/features/launch-profiles.md +24 -17
- package/docs/features/modal-content-interaction.md +37 -0
- package/docs/features/prompt-history.md +149 -0
- package/docs/local-worktree-cleanup.md +212 -0
- package/docs/manual-code-streaming-cleanup.md +88 -0
- package/docs/manual-ghost-link-baseline.md +89 -0
- package/docs/manual-launch-instance-acceptance.md +12 -35
- package/docs/manual-owned-ui-checkpoint.md +79 -0
- package/docs/manual-pi-boundary-candidate.md +4 -5
- package/docs/manual-terminal-colour-check.md +4 -3
- package/docs/openspec-archive-automation.md +259 -0
- package/docs/repository-governance-live-acceptance.md +77 -0
- package/docs/validation.md +100 -0
- package/package.json +49 -34
- package/dist/src/cli/capabilities.d.ts +0 -15
- package/dist/src/cli/capabilities.js +0 -7
- package/dist/src/cli/dispatch.d.ts +0 -32
- package/dist/src/cli/dispatch.js +0 -142
- package/dist/src/cli/index.d.ts +0 -5
- package/dist/src/cli/index.js +0 -5
- package/dist/src/cli/packages.d.ts +0 -23
- package/dist/src/cli/packages.js +0 -84
- package/dist/src/cli/version-stats.d.ts +0 -16
- package/dist/src/cli/version-stats.js +0 -72
- package/dist/src/cli/version.d.ts +0 -2
- package/dist/src/cli/version.js +0 -23
- package/dist/src/composition/index.d.ts +0 -48
- package/dist/src/composition/index.js +0 -258
- package/dist/src/features/launch/development-launch.js +0 -28
- package/dist/src/features/launch/index.d.ts +0 -7
- package/dist/src/features/launch/index.js +0 -7
- package/dist/src/features/launch/intent.d.ts +0 -7
- package/dist/src/features/launch/intent.js +0 -4
- package/dist/src/features/launch/prepare-launch.d.ts +0 -13
- package/dist/src/features/launch/prepare-launch.js +0 -21
- package/dist/src/features/launch/profile-paths.d.ts +0 -15
- package/dist/src/features/launch/profile-paths.js +0 -31
- package/dist/src/features/launch/profiles.d.ts +0 -12
- package/dist/src/features/launch/profiles.js +0 -26
- package/dist/src/features/launch/runtime-selection.d.ts +0 -19
- package/dist/src/features/launch/runtime-selection.js +0 -13
- package/dist/src/features/owned-ui/customization.d.ts +0 -38
- package/dist/src/features/owned-ui/customization.js +0 -108
- package/dist/src/features/owned-ui/diagnostics.d.ts +0 -33
- package/dist/src/features/owned-ui/diagnostics.js +0 -94
- package/dist/src/features/owned-ui/index.d.ts +0 -4
- package/dist/src/features/owned-ui/index.js +0 -4
- package/dist/src/features/owned-ui/run.d.ts +0 -11
- package/dist/src/features/owned-ui/run.js +0 -15
- package/dist/src/features/owned-ui/settings-app.d.ts +0 -22
- package/dist/src/features/owned-ui/settings-app.js +0 -633
- package/dist/src/features/workspace/capabilities.d.ts +0 -31
- package/dist/src/features/workspace/capabilities.js +0 -75
- package/dist/src/features/workspace/index.d.ts +0 -6
- package/dist/src/features/workspace/index.js +0 -6
- package/dist/src/features/workspace/presentation.d.ts +0 -30
- package/dist/src/features/workspace/presentation.js +0 -70
- package/dist/src/features/workspace/reconciliation.d.ts +0 -15
- package/dist/src/features/workspace/reconciliation.js +0 -82
- package/dist/src/features/workspace/reducer.d.ts +0 -42
- package/dist/src/features/workspace/reducer.js +0 -213
- package/dist/src/features/workspace/router.d.ts +0 -31
- package/dist/src/features/workspace/router.js +0 -124
- package/dist/src/features/workspace/store.d.ts +0 -17
- package/dist/src/features/workspace/store.js +0 -54
- package/dist/src/foundation/agent-engine-contracts/capability-ports.d.ts +0 -95
- package/dist/src/foundation/agent-engine-contracts/domain-validation.js +0 -89
- package/dist/src/foundation/agent-engine-contracts/domain.d.ts +0 -116
- package/dist/src/foundation/agent-engine-contracts/index.d.ts +0 -8
- package/dist/src/foundation/agent-engine-contracts/index.js +0 -8
- package/dist/src/foundation/agent-engine-contracts/package-ports.d.ts +0 -54
- package/dist/src/foundation/launch-guardian/index.d.ts +0 -1
- package/dist/src/foundation/launch-guardian/index.js +0 -1
- package/dist/src/foundation/launch-guardian/main.d.ts +0 -31
- package/dist/src/foundation/launch-guardian/main.js +0 -165
- package/dist/src/foundation/lifecycle/index.d.ts +0 -4
- package/dist/src/foundation/lifecycle/index.js +0 -4
- package/dist/src/foundation/lifecycle/model.d.ts +0 -64
- package/dist/src/foundation/lifecycle/model.js +0 -40
- package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
- package/dist/src/foundation/lifecycle/paths.js +0 -42
- package/dist/src/foundation/native-host-protocol/codec.d.ts +0 -11
- package/dist/src/foundation/native-host-protocol/codec.js +0 -56
- package/dist/src/foundation/native-host-protocol/evidence.d.ts +0 -67
- package/dist/src/foundation/native-host-protocol/evidence.js +0 -141
- package/dist/src/foundation/native-host-protocol/index.d.ts +0 -4
- package/dist/src/foundation/native-host-protocol/index.js +0 -4
- package/dist/src/foundation/native-host-protocol/messages.d.ts +0 -56
- package/dist/src/foundation/native-host-protocol/messages.js +0 -149
- package/dist/src/foundation/native-host-protocol/proof-gate.d.ts +0 -13
- package/dist/src/foundation/native-host-protocol/proof-gate.js +0 -33
- package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts +0 -302
- package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
- package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
- package/dist/src/foundation/owned-ui-contracts/model.d.ts +0 -241
- package/dist/src/foundation/owned-ui-contracts/validation.d.ts +0 -11
- package/dist/src/foundation/owned-ui-contracts/validation.js +0 -395
- package/dist/src/foundation/owned-ui-settings/declarations.d.ts +0 -13
- package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
- package/dist/src/foundation/owned-ui-settings/index.d.ts +0 -6
- package/dist/src/foundation/owned-ui-settings/index.js +0 -6
- package/dist/src/foundation/owned-ui-settings/migrations.d.ts +0 -13
- package/dist/src/foundation/owned-ui-settings/migrations.js +0 -28
- package/dist/src/foundation/owned-ui-settings/sections.d.ts +0 -70
- package/dist/src/foundation/owned-ui-settings/sections.js +0 -93
- package/dist/src/foundation/owned-ui-settings/session.d.ts +0 -44
- package/dist/src/foundation/owned-ui-settings/session.js +0 -145
- package/dist/src/foundation/owned-ui-settings/store.d.ts +0 -28
- package/dist/src/foundation/owned-ui-settings/store.js +0 -90
- package/dist/src/foundation/pi-component-adapter/components.d.ts +0 -4
- package/dist/src/foundation/pi-component-adapter/components.js +0 -64
- package/dist/src/foundation/pi-component-adapter/conformance.d.ts +0 -17
- package/dist/src/foundation/pi-component-adapter/conformance.js +0 -69
- package/dist/src/foundation/pi-component-adapter/index.d.ts +0 -13
- package/dist/src/foundation/pi-component-adapter/index.js +0 -13
- package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.d.ts +0 -165
- package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.js +0 -166
- package/dist/src/foundation/pi-component-adapter/shell-components.d.ts +0 -6
- package/dist/src/foundation/pi-component-adapter/shell-components.js +0 -6
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts +0 -35
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js +0 -279
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts +0 -7
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.js +0 -189
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js +0 -429
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts +0 -113
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +0 -235
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js +0 -87
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts +0 -422
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js +0 -296
- package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts +0 -10
- package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts +0 -17
- package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js +0 -51
- package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts +0 -22
- package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js +0 -142
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts +0 -4
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
- package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts +0 -17
- package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js +0 -81
- package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts +0 -24
- package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js +0 -105
- package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts +0 -2
- package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js +0 -18
- package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js +0 -77
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
- package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts +0 -55
- package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js +0 -342
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.d.ts +0 -10
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.js +0 -120
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js +0 -159
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts +0 -95
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js +0 -889
- package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts +0 -19
- package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js +0 -44
- package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts +0 -30
- package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js +0 -59
- package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts +0 -98
- package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js +0 -1272
- package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts +0 -33
- package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js +0 -76
- package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js +0 -39
- package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts +0 -15
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts +0 -25
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js +0 -117
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts +0 -61
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js +0 -326
- package/dist/src/foundation/pi-engine-adapter/adapter.d.ts +0 -164
- package/dist/src/foundation/pi-engine-adapter/adapter.js +0 -2367
- package/dist/src/foundation/pi-engine-adapter/conformance.d.ts +0 -37
- package/dist/src/foundation/pi-engine-adapter/conformance.js +0 -130
- package/dist/src/foundation/pi-engine-adapter/index.d.ts +0 -10
- package/dist/src/foundation/pi-engine-adapter/index.js +0 -10
- package/dist/src/foundation/pi-engine-adapter/model-auth-integration.d.ts +0 -30
- package/dist/src/foundation/pi-engine-adapter/model-auth-integration.js +0 -61
- package/dist/src/foundation/pi-engine-adapter/package-integration.d.ts +0 -13
- package/dist/src/foundation/pi-engine-adapter/package-integration.js +0 -112
- package/dist/src/foundation/pi-engine-adapter/pi-settings-metadata.json +0 -374
- package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.d.ts +0 -31
- package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.js +0 -80
- package/dist/src/foundation/pi-engine-adapter/runtime-integration.d.ts +0 -35
- package/dist/src/foundation/pi-engine-adapter/runtime-integration.js +0 -67
- package/dist/src/foundation/pi-engine-adapter/session-integration.d.ts +0 -43
- package/dist/src/foundation/pi-engine-adapter/session-integration.js +0 -97
- package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
- package/dist/src/foundation/pi-engine-adapter/settings-integration.js +0 -233
- package/dist/src/foundation/pi-engine-adapter/workflow-controllers.d.ts +0 -20
- package/dist/src/foundation/pi-engine-adapter/workflow-controllers.js +0 -48
- package/dist/src/foundation/pi-engine-adapter/workflows.d.ts +0 -173
- package/dist/src/foundation/pi-engine-adapter/workflows.js +0 -60
- package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
- package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
- package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
- package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
- package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts +0 -39
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js +0 -493
- package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts +0 -18
- package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js +0 -145
- package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts +0 -120
- package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.d.ts +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.js +0 -48
- package/dist/src/foundation/presentation-contracts/index.d.ts +0 -96
- package/dist/src/foundation/process-containment/index.d.ts +0 -5
- package/dist/src/foundation/process-containment/index.js +0 -5
- package/dist/src/foundation/process-containment/linux-process-inspector.d.ts +0 -6
- package/dist/src/foundation/process-containment/linux-process-inspector.js +0 -26
- package/dist/src/foundation/process-containment/native-guardian-containment.d.ts +0 -16
- package/dist/src/foundation/process-containment/native-guardian-containment.js +0 -139
- package/dist/src/foundation/process-containment/windows-process-inspector.d.ts +0 -17
- package/dist/src/foundation/process-containment/windows-process-inspector.js +0 -53
- package/dist/src/foundation/protocol/client.d.ts +0 -17
- package/dist/src/foundation/protocol/client.js +0 -129
- package/dist/src/foundation/protocol/index.d.ts +0 -2
- package/dist/src/foundation/protocol/index.js +0 -2
- package/dist/src/foundation/protocol/messages.d.ts +0 -89
- package/dist/src/foundation/protocol/messages.js +0 -99
- package/dist/src/foundation/release/bootstrap.d.ts +0 -29
- package/dist/src/foundation/release/bootstrap.js +0 -335
- package/dist/src/foundation/release/cohort-state.d.ts +0 -70
- package/dist/src/foundation/release/cohort-state.js +0 -202
- package/dist/src/foundation/release/index.d.ts +0 -10
- package/dist/src/foundation/release/index.js +0 -10
- package/dist/src/foundation/release/release-gc.d.ts +0 -5
- package/dist/src/foundation/release/release-gc.js +0 -16
- package/dist/src/foundation/release/release-store.d.ts +0 -43
- package/dist/src/foundation/release/release-store.js +0 -175
- package/dist/src/foundation/release/release.d.ts +0 -38
- package/dist/src/foundation/release/release.js +0 -204
- package/dist/src/foundation/release/update-transaction.d.ts +0 -31
- package/dist/src/foundation/release/update-transaction.js +0 -89
- package/dist/src/foundation/release/update.d.ts +0 -82
- package/dist/src/foundation/release/update.js +0 -529
- package/dist/src/foundation/storage/control-store.d.ts +0 -61
- package/dist/src/foundation/storage/control-store.js +0 -530
- package/dist/src/foundation/storage/index.d.ts +0 -1
- package/dist/src/foundation/storage/index.js +0 -1
- package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts +0 -46
- package/dist/src/foundation/structured-agent-runtime/backpressure.js +0 -118
- package/dist/src/foundation/structured-agent-runtime/commands.d.ts +0 -52
- package/dist/src/foundation/structured-agent-runtime/commands.js +0 -164
- package/dist/src/foundation/structured-agent-runtime/handshake.d.ts +0 -41
- package/dist/src/foundation/structured-agent-runtime/handshake.js +0 -151
- package/dist/src/foundation/structured-agent-runtime/index.d.ts +0 -5
- package/dist/src/foundation/structured-agent-runtime/index.js +0 -5
- package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts +0 -37
- package/dist/src/foundation/structured-agent-runtime/reconnection.js +0 -129
- package/dist/src/foundation/structured-agent-runtime/state.d.ts +0 -56
- package/dist/src/foundation/structured-agent-runtime/state.js +0 -118
- package/dist/src/foundation/supervision/index.d.ts +0 -3
- package/dist/src/foundation/supervision/index.js +0 -3
- package/dist/src/foundation/supervision/main.d.ts +0 -1
- package/dist/src/foundation/supervision/main.js +0 -41
- package/dist/src/foundation/supervision/paths.d.ts +0 -1
- package/dist/src/foundation/supervision/paths.js +0 -1
- package/dist/src/foundation/supervision/server.d.ts +0 -22
- package/dist/src/foundation/supervision/server.js +0 -451
- package/dist/src/foundation/ui-apps/contracts.d.ts +0 -42
- package/dist/src/foundation/ui-apps/host.d.ts +0 -42
- package/dist/src/foundation/ui-apps/host.js +0 -152
- package/dist/src/foundation/ui-apps/index.d.ts +0 -3
- package/dist/src/foundation/ui-apps/index.js +0 -3
- package/dist/src/foundation/ui-apps/registry.d.ts +0 -11
- package/dist/src/foundation/ui-apps/registry.js +0 -32
- package/dist/src/foundation/ui-components/dialog-panel.js +0 -47
- package/dist/src/foundation/ui-components/frame.d.ts +0 -21
- package/dist/src/foundation/ui-components/frame.js +0 -54
- package/dist/src/foundation/ui-components/index.d.ts +0 -18
- package/dist/src/foundation/ui-components/index.js +0 -18
- package/dist/src/foundation/ui-components/line-input.d.ts +0 -74
- package/dist/src/foundation/ui-components/line-input.js +0 -245
- package/dist/src/foundation/ui-components/list-view.d.ts +0 -66
- package/dist/src/foundation/ui-components/list-view.js +0 -76
- package/dist/src/foundation/ui-components/mouse.d.ts +0 -15
- package/dist/src/foundation/ui-components/mouse.js +0 -46
- package/dist/src/foundation/ui-components/scrollbar.d.ts +0 -62
- package/dist/src/foundation/ui-components/scrollbar.js +0 -102
- package/dist/src/foundation/ui-components/shortcuts.d.ts +0 -57
- package/dist/src/foundation/ui-components/shortcuts.js +0 -81
- package/dist/src/foundation/ui-components/spans.d.ts +0 -7
- package/dist/src/foundation/ui-components/spans.js +0 -59
- package/dist/src/foundation/ui-components/surface.d.ts +0 -20
- package/dist/src/foundation/ui-components/surface.js +0 -38
- package/dist/src/foundation/ui-components/text.d.ts +0 -24
- package/dist/src/foundation/ui-components/text.js +0 -123
- package/dist/src/foundation/workspace-contracts/index.d.ts +0 -2
- package/dist/src/foundation/workspace-contracts/index.js +0 -2
- package/dist/src/foundation/workspace-contracts/model.d.ts +0 -248
- package/dist/src/foundation/workspace-contracts/model.js +0 -2
- package/dist/src/foundation/workspace-contracts/validation.d.ts +0 -13
- package/dist/src/foundation/workspace-contracts/validation.js +0 -335
- package/dist/src/product-identity.d.ts +0 -37
- package/dist/src/product-identity.js +0 -150
- package/dist/src/product-identity.json +0 -99
- package/docs/manual-transparent-checkpoint.md +0 -53
- /package/dist/{src/foundation/agent-engine-contracts/domain.js → app/session-shell/paste-helper.d.ts} +0 -0
- /package/dist/{src/foundation/agent-engine-contracts/ports.js → app/session-shell/paste-text-worker.d.ts} +0 -0
- /package/dist/{src/foundation/lifecycle/commands.js → app/session-shell/paste-types.js} +0 -0
- /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → app/session-shell/response-copy-helper.d.ts} +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → contracts/agent-engine/domain.js} +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
- /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
- /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
- /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
- /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
- /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
- /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
- /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
- /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
- /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { displayWidth, truncateToWidth } from "./text.js";
|
|
2
|
+
/** Visible width of the submitted-prompt prefix (`❯ `). */
|
|
3
|
+
export const SUBMITTED_PROMPT_PREFIX_WIDTH = 2;
|
|
4
|
+
const TIMESTAMP_MARGIN = 3;
|
|
5
|
+
const MIN_USEFUL_CONTENT_WIDTH = 8;
|
|
6
|
+
/** Formats transcript metadata, never render time, as local 24-hour HH:mm. */
|
|
7
|
+
export function formatSubmittedPromptTime(source) {
|
|
8
|
+
const date = source instanceof Date ? source : new Date(source);
|
|
9
|
+
if (!Number.isFinite(date.getTime()))
|
|
10
|
+
return null;
|
|
11
|
+
return `${String(date.getHours()).padStart(2, "0")}:${String(date.getMinutes()).padStart(2, "0")}`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Computes the width at which the prompt's Markdown body must be rendered.
|
|
15
|
+
* The timestamp is omitted rather than allowing it to crowd useful content.
|
|
16
|
+
*/
|
|
17
|
+
export function submittedPromptLayout(width, source) {
|
|
18
|
+
const boundedWidth = Math.max(1, width);
|
|
19
|
+
const timestamp = source === undefined || source === null ? null : formatSubmittedPromptTime(source);
|
|
20
|
+
const timestampReserve = timestamp === null ? 0 : displayWidth(timestamp) + TIMESTAMP_MARGIN;
|
|
21
|
+
const canShowTimestamp = timestamp !== null
|
|
22
|
+
&& boundedWidth - SUBMITTED_PROMPT_PREFIX_WIDTH - timestampReserve >= MIN_USEFUL_CONTENT_WIDTH;
|
|
23
|
+
return {
|
|
24
|
+
contentWidth: Math.max(1, boundedWidth - SUBMITTED_PROMPT_PREFIX_WIDTH - (canShowTimestamp ? timestampReserve : 0)),
|
|
25
|
+
timestamp: canShowTimestamp ? timestamp : null,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Composes already-rendered prompt content into the compact submitted bar.
|
|
30
|
+
* Continuations align below the content, not below the prefix, and no row can
|
|
31
|
+
* exceed the supplied terminal width even when the content renderer misbehaves.
|
|
32
|
+
*/
|
|
33
|
+
export function composeSubmittedPromptRows(contentRows, width, source, style = {}) {
|
|
34
|
+
if (width <= 0)
|
|
35
|
+
return [];
|
|
36
|
+
const layout = submittedPromptLayout(width, source);
|
|
37
|
+
const prefix = (style.prefix ?? identity)("❯ ");
|
|
38
|
+
const rows = (contentRows.length === 0 ? [""] : contentRows).map((row, index) => {
|
|
39
|
+
const content = truncateToWidth(row, layout.contentWidth);
|
|
40
|
+
return `${index === 0 ? prefix : " ".repeat(SUBMITTED_PROMPT_PREFIX_WIDTH)}${content}`;
|
|
41
|
+
});
|
|
42
|
+
if (layout.timestamp !== null && rows[0] !== undefined) {
|
|
43
|
+
const gap = Math.max(1, width - displayWidth(rows[0]) - displayWidth(layout.timestamp));
|
|
44
|
+
rows[0] = `${rows[0]}${" ".repeat(gap)}${(style.timestamp ?? identity)(layout.timestamp)}`;
|
|
45
|
+
}
|
|
46
|
+
return rows.map(row => truncateToWidth(row, width));
|
|
47
|
+
}
|
|
48
|
+
function identity(text) {
|
|
49
|
+
return text;
|
|
50
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ScrollbarGeometry, type ScrollbarPresentation } from "./scrollbar.js";
|
|
2
|
+
import type { UiTheme } from "./theme.js";
|
|
3
|
+
/** Columns the rail occupies: its own, plus the gap before it. */
|
|
4
|
+
export declare const RAIL_COLUMNS = 2;
|
|
5
|
+
export interface RailOptions {
|
|
6
|
+
/** Rows at the top the rail does not run beside, such as a sticky header. */
|
|
7
|
+
readonly topInset?: number;
|
|
8
|
+
/** How the rail shows. Absent draws the thin rail whenever the content overflows. */
|
|
9
|
+
readonly presentation?: ScrollbarPresentation;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Draws the rail beside each row, padding the rows to a common width first.
|
|
13
|
+
* A presentation that reserves no space returns the rows untouched.
|
|
14
|
+
*/
|
|
15
|
+
export declare function withScrollbarRail(lines: readonly string[], geometry: ScrollbarGeometry | null, contentWidth: number, theme: UiTheme, options?: RailOptions): readonly string[];
|
|
16
|
+
/**
|
|
17
|
+
* What a list shows instead of rows: a mark and a line, both quiet, sitting in
|
|
18
|
+
* the middle of the space the rows would have had.
|
|
19
|
+
*/
|
|
20
|
+
export declare function renderEmptyState(message: string, mark: string, height: number, width: number, theme: UiTheme): readonly string[];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { isThumbRow } from "./scrollbar.js";
|
|
2
|
+
import { displayWidth } from "./text.js";
|
|
3
|
+
// Rationale: shared list chrome belongs here rather than in individual screens.
|
|
4
|
+
/** Columns the rail occupies: its own, plus the gap before it. */
|
|
5
|
+
export const RAIL_COLUMNS = 2;
|
|
6
|
+
/**
|
|
7
|
+
* Draws the rail beside each row, padding the rows to a common width first.
|
|
8
|
+
* A presentation that reserves no space returns the rows untouched.
|
|
9
|
+
*/
|
|
10
|
+
export function withScrollbarRail(lines, geometry, contentWidth, theme, options = {}) {
|
|
11
|
+
const inset = options.topInset ?? 0;
|
|
12
|
+
const presentation = options.presentation
|
|
13
|
+
?? { visible: geometry !== null, reservesSpace: true, trackGlyph: "│", thumbGlyph: "│" };
|
|
14
|
+
if (!presentation.reservesSpace)
|
|
15
|
+
return lines;
|
|
16
|
+
const drawn = presentation.visible && geometry !== null;
|
|
17
|
+
return lines.map((line, offset) => {
|
|
18
|
+
const cell = offset < inset || !drawn
|
|
19
|
+
? " "
|
|
20
|
+
: isThumbRow(geometry, offset - inset)
|
|
21
|
+
? theme.fg("accent", presentation.thumbGlyph)
|
|
22
|
+
: theme.fg("dim", presentation.trackGlyph);
|
|
23
|
+
return `${pad(line, contentWidth)} ${cell}`;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* What a list shows instead of rows: a mark and a line, both quiet, sitting in
|
|
28
|
+
* the middle of the space the rows would have had.
|
|
29
|
+
*/
|
|
30
|
+
export function renderEmptyState(message, mark, height, width, theme) {
|
|
31
|
+
const middle = Math.floor(height / 2);
|
|
32
|
+
return Array.from({ length: Math.max(0, height) }, (_line, index) => {
|
|
33
|
+
if (index === middle - 1)
|
|
34
|
+
return centre(theme.fg("muted", mark), mark, width);
|
|
35
|
+
return index === middle ? centre(theme.fg("muted", message), message, width) : "";
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function centre(painted, raw, width) {
|
|
39
|
+
return `${" ".repeat(Math.max(0, Math.floor((width - displayWidth(raw)) / 2)))}${painted}`;
|
|
40
|
+
}
|
|
41
|
+
function pad(line, width) {
|
|
42
|
+
const visible = displayWidth(line);
|
|
43
|
+
return visible >= width ? line : line + " ".repeat(width - visible);
|
|
44
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** A reported pointer cell plus its grapheme-aligned zero-based boundaries. */
|
|
2
|
+
export interface TextSelectionPoint {
|
|
3
|
+
readonly line: number;
|
|
4
|
+
readonly column: number;
|
|
5
|
+
readonly from?: number;
|
|
6
|
+
readonly to?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface TextSelection {
|
|
9
|
+
readonly anchor: TextSelectionPoint;
|
|
10
|
+
readonly head: TextSelectionPoint;
|
|
11
|
+
readonly selecting: boolean;
|
|
12
|
+
/** Ordinary point selection has received at least one distinct motion report. */
|
|
13
|
+
readonly dragged?: boolean;
|
|
14
|
+
/** Word selection uses inclusive pointer-cell endpoints supplied by its semantic range. */
|
|
15
|
+
readonly cell?: boolean;
|
|
16
|
+
readonly fullRow?: boolean;
|
|
17
|
+
/** Paint an edge whitespace run through the viewport's overlaid rail cell. */
|
|
18
|
+
readonly throughFinalColumn?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface TextSelectionClick {
|
|
21
|
+
readonly time: number;
|
|
22
|
+
readonly line: number;
|
|
23
|
+
readonly column: number;
|
|
24
|
+
readonly count: number;
|
|
25
|
+
}
|
|
26
|
+
export interface TextSelectionLineContent {
|
|
27
|
+
readonly from?: number;
|
|
28
|
+
readonly to?: number;
|
|
29
|
+
readonly selectable?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** Ordered zero-based, half-open display-column boundaries. */
|
|
32
|
+
export interface OrderedTextSelection {
|
|
33
|
+
readonly start: TextSelectionPoint;
|
|
34
|
+
readonly end: TextSelectionPoint;
|
|
35
|
+
readonly fullRow?: boolean;
|
|
36
|
+
readonly throughFinalColumn?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface TextSelectionPressInput {
|
|
39
|
+
readonly line: number;
|
|
40
|
+
readonly column: number;
|
|
41
|
+
readonly contentWidth: number;
|
|
42
|
+
readonly lineText: string;
|
|
43
|
+
readonly lineContent?: TextSelectionLineContent;
|
|
44
|
+
readonly previousClick?: TextSelectionClick;
|
|
45
|
+
readonly now?: number;
|
|
46
|
+
}
|
|
47
|
+
export declare const TEXT_SELECTION_MULTI_CLICK_MS = 500;
|
|
48
|
+
export declare function orderedTextSelection(selection: TextSelection | undefined): OrderedTextSelection | undefined;
|
|
49
|
+
export declare function pressTextSelection(input: TextSelectionPressInput): {
|
|
50
|
+
readonly selection?: TextSelection;
|
|
51
|
+
readonly click: TextSelectionClick;
|
|
52
|
+
readonly kind: "point" | "word" | "line";
|
|
53
|
+
};
|
|
54
|
+
export declare function extendTextSelection(selection: TextSelection | undefined, point: TextSelectionPoint): TextSelection | undefined;
|
|
55
|
+
export declare function releaseTextSelection(selection: TextSelection | undefined): TextSelection | undefined;
|
|
56
|
+
export declare function textSelectionLineExtendColumn(selection: TextSelection, line: number, contentWidth: number): number;
|
|
57
|
+
/** Resolves a reported one-based pointer cell to the complete grapheme it intersects. */
|
|
58
|
+
export declare function textSelectionPointAt(line: number, column: number, lineText: string): TextSelectionPoint;
|
|
59
|
+
export declare function textSelectionText(selection: OrderedTextSelection, rows: readonly string[], lineContent?: (line: number) => TextSelectionLineContent | undefined): string;
|
|
60
|
+
/** Returns the plain cells covered by [from,to), expanding at grapheme edges. */
|
|
61
|
+
export declare function plainTextBetweenColumns(line: string, from: number, to: number): string;
|
|
62
|
+
export declare function usefulTextLineContent(line: string, from?: number): TextSelectionLineContent;
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { displayWidth, stripAnsi } from "./text.js";
|
|
2
|
+
const GRAPHEMES = new Intl.Segmenter(undefined, { granularity: "grapheme" });
|
|
3
|
+
export const TEXT_SELECTION_MULTI_CLICK_MS = 500;
|
|
4
|
+
export function orderedTextSelection(selection) {
|
|
5
|
+
if (selection === undefined)
|
|
6
|
+
return undefined;
|
|
7
|
+
const { anchor, head } = selection;
|
|
8
|
+
if (selection.fullRow) {
|
|
9
|
+
const startLine = Math.min(anchor.line, head.line);
|
|
10
|
+
const endLine = Math.max(anchor.line, head.line);
|
|
11
|
+
return {
|
|
12
|
+
start: { line: startLine, column: 0 },
|
|
13
|
+
end: { line: endLine, column: Number.MAX_SAFE_INTEGER },
|
|
14
|
+
fullRow: true,
|
|
15
|
+
...(selection.throughFinalColumn ? { throughFinalColumn: true } : {}),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (!selection.cell && selection.dragged !== true)
|
|
19
|
+
return undefined;
|
|
20
|
+
// Invariant: an accepted drag includes both endpoint graphemes, even after returning
|
|
21
|
+
// to its anchor. Only an unextended point press is empty; paint and copy stay half-open.
|
|
22
|
+
const anchorFirst = comparePoints(anchor, head) <= 0;
|
|
23
|
+
const first = anchorFirst ? anchor : head;
|
|
24
|
+
const last = anchorFirst ? head : anchor;
|
|
25
|
+
return {
|
|
26
|
+
start: { line: first.line, column: pointBefore(first) },
|
|
27
|
+
end: { line: last.line, column: pointAfter(last) },
|
|
28
|
+
...(selection.throughFinalColumn ? { throughFinalColumn: true } : {}),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function pressTextSelection(input) {
|
|
32
|
+
const now = input.now ?? Date.now();
|
|
33
|
+
const previous = input.previousClick;
|
|
34
|
+
const count = previous !== undefined
|
|
35
|
+
&& now - previous.time <= TEXT_SELECTION_MULTI_CLICK_MS
|
|
36
|
+
&& previous.line === input.line
|
|
37
|
+
&& Math.abs(previous.column - input.column) <= 1
|
|
38
|
+
? previous.count + 1
|
|
39
|
+
: 1;
|
|
40
|
+
const click = { time: now, line: input.line, column: input.column, count };
|
|
41
|
+
const column = clamp(input.column, 1, Math.max(1, input.contentWidth));
|
|
42
|
+
const kind = ((count - 1) % 3) + 1;
|
|
43
|
+
if (kind === 2) {
|
|
44
|
+
const selection = selectWord(input.line, column, input.contentWidth, input.lineText);
|
|
45
|
+
return selection === undefined ? { click, kind: "word" } : { selection, click, kind: "word" };
|
|
46
|
+
}
|
|
47
|
+
if (kind === 3) {
|
|
48
|
+
if (input.lineContent?.selectable === false)
|
|
49
|
+
return { click, kind: "line" };
|
|
50
|
+
const from = clamp(input.lineContent?.from ?? 1, 1, Math.max(1, input.contentWidth));
|
|
51
|
+
const to = clamp(input.lineContent?.to ?? input.contentWidth, from, Math.max(1, input.contentWidth));
|
|
52
|
+
return {
|
|
53
|
+
selection: {
|
|
54
|
+
anchor: { line: input.line, column: from },
|
|
55
|
+
head: { line: input.line, column: to },
|
|
56
|
+
selecting: true,
|
|
57
|
+
cell: true,
|
|
58
|
+
fullRow: true,
|
|
59
|
+
},
|
|
60
|
+
click,
|
|
61
|
+
kind: "line",
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const point = textSelectionPointAt(input.line, column, input.lineText);
|
|
65
|
+
return {
|
|
66
|
+
selection: {
|
|
67
|
+
anchor: point,
|
|
68
|
+
head: point,
|
|
69
|
+
selecting: true,
|
|
70
|
+
dragged: false,
|
|
71
|
+
},
|
|
72
|
+
click,
|
|
73
|
+
kind: "point",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function extendTextSelection(selection, point) {
|
|
77
|
+
if (selection?.selecting !== true)
|
|
78
|
+
return selection;
|
|
79
|
+
const distinctMotion = comparePoints(selection.head, point) !== 0;
|
|
80
|
+
if (!distinctMotion)
|
|
81
|
+
return selection;
|
|
82
|
+
if (selection.fullRow)
|
|
83
|
+
return { ...selection, head: point };
|
|
84
|
+
return {
|
|
85
|
+
...selection,
|
|
86
|
+
head: point,
|
|
87
|
+
dragged: true,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function releaseTextSelection(selection) {
|
|
91
|
+
if (selection === undefined)
|
|
92
|
+
return undefined;
|
|
93
|
+
const released = selection.selecting ? { ...selection, selecting: false } : selection;
|
|
94
|
+
return orderedTextSelection(released) === undefined ? undefined : released;
|
|
95
|
+
}
|
|
96
|
+
export function textSelectionLineExtendColumn(selection, line, contentWidth) {
|
|
97
|
+
return line < selection.anchor.line ? 1 : Math.max(1, contentWidth);
|
|
98
|
+
}
|
|
99
|
+
/** Resolves a reported one-based pointer cell to the complete grapheme it intersects. */
|
|
100
|
+
export function textSelectionPointAt(line, column, lineText) {
|
|
101
|
+
const plain = stripAnsi(lineText);
|
|
102
|
+
const target = Math.max(0, column - 1);
|
|
103
|
+
let width = 0;
|
|
104
|
+
for (const { segment } of GRAPHEMES.segment(plain)) {
|
|
105
|
+
const cellWidth = displayWidth(segment);
|
|
106
|
+
const next = width + cellWidth;
|
|
107
|
+
if (cellWidth > 0 && target >= width && target < next) {
|
|
108
|
+
return { line, column, from: width, to: next };
|
|
109
|
+
}
|
|
110
|
+
width = next;
|
|
111
|
+
}
|
|
112
|
+
return { line, column, from: target, to: target + 1 };
|
|
113
|
+
}
|
|
114
|
+
export function textSelectionText(selection, rows, lineContent) {
|
|
115
|
+
const parts = [];
|
|
116
|
+
for (let line = selection.start.line; line <= selection.end.line && line < rows.length; line += 1) {
|
|
117
|
+
const plain = stripAnsi(rows[line] ?? "");
|
|
118
|
+
const content = lineContent?.(line);
|
|
119
|
+
if (content?.selectable === false) {
|
|
120
|
+
parts.push("");
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const baseFrom = line === selection.start.line ? selection.start.column : 0;
|
|
124
|
+
const baseTo = line === selection.end.line ? selection.end.column : Number.MAX_SAFE_INTEGER;
|
|
125
|
+
const contentFrom = Math.max(0, (content?.from ?? 1) - 1);
|
|
126
|
+
const contentTo = Math.max(contentFrom, (content?.to ?? Number.MAX_SAFE_INTEGER) - 1);
|
|
127
|
+
const from = Math.max(baseFrom, contentFrom);
|
|
128
|
+
const to = Math.max(from, Math.min(baseTo, contentTo));
|
|
129
|
+
parts.push(plain.slice(indexAtDisplayBoundary(plain, from, "start"), indexAtDisplayBoundary(plain, to, "end")).trimEnd());
|
|
130
|
+
}
|
|
131
|
+
return parts.join("\n");
|
|
132
|
+
}
|
|
133
|
+
/** Returns the plain cells covered by [from,to), expanding at grapheme edges. */
|
|
134
|
+
export function plainTextBetweenColumns(line, from, to) {
|
|
135
|
+
const plain = stripAnsi(line);
|
|
136
|
+
return plain.slice(indexAtDisplayBoundary(plain, from, "start"), indexAtDisplayBoundary(plain, to, "end"));
|
|
137
|
+
}
|
|
138
|
+
export function usefulTextLineContent(line, from = 1) {
|
|
139
|
+
const start = Math.max(1, from);
|
|
140
|
+
const end = displayWidth(stripAnsi(line).replace(/\s+$/, "")) + 1;
|
|
141
|
+
return { from: start, to: Math.max(start, end) };
|
|
142
|
+
}
|
|
143
|
+
function selectWord(line, column, contentWidth, lineText) {
|
|
144
|
+
const plain = stripAnsi(lineText);
|
|
145
|
+
const segments = [];
|
|
146
|
+
let width = 0;
|
|
147
|
+
for (const { segment } of GRAPHEMES.segment(plain)) {
|
|
148
|
+
const cellWidth = displayWidth(segment);
|
|
149
|
+
if (cellWidth <= 0)
|
|
150
|
+
continue;
|
|
151
|
+
segments.push({ cls: characterClass(segment), from: width, to: width + cellWidth });
|
|
152
|
+
width += cellWidth;
|
|
153
|
+
}
|
|
154
|
+
const at = clamp(column, 1, Math.max(1, contentWidth)) - 1;
|
|
155
|
+
const index = segments.findIndex(segment => at >= segment.from && at < segment.to);
|
|
156
|
+
if (index < 0)
|
|
157
|
+
return undefined;
|
|
158
|
+
let low = index;
|
|
159
|
+
let high = index;
|
|
160
|
+
while (low > 0 && segments[low - 1]?.cls === segments[index]?.cls)
|
|
161
|
+
low -= 1;
|
|
162
|
+
while (high + 1 < segments.length && segments[high + 1]?.cls === segments[index]?.cls)
|
|
163
|
+
high += 1;
|
|
164
|
+
const end = segments[high]?.to ?? 1;
|
|
165
|
+
return {
|
|
166
|
+
anchor: { line, column: (segments[low]?.from ?? 0) + 1 },
|
|
167
|
+
head: { line, column: end },
|
|
168
|
+
selecting: true,
|
|
169
|
+
cell: true,
|
|
170
|
+
throughFinalColumn: segments[index]?.cls === 0 && end >= contentWidth,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function characterClass(character) {
|
|
174
|
+
if (/\s/u.test(character))
|
|
175
|
+
return 0;
|
|
176
|
+
if (/[\p{L}\p{N}_]/u.test(character))
|
|
177
|
+
return 1;
|
|
178
|
+
return 2;
|
|
179
|
+
}
|
|
180
|
+
function indexAtDisplayBoundary(plain, column, edge) {
|
|
181
|
+
if (column <= 0)
|
|
182
|
+
return 0;
|
|
183
|
+
if (column >= Number.MAX_SAFE_INTEGER - 1)
|
|
184
|
+
return plain.length;
|
|
185
|
+
let width = 0;
|
|
186
|
+
let index = 0;
|
|
187
|
+
for (const { segment } of GRAPHEMES.segment(plain)) {
|
|
188
|
+
const cellWidth = displayWidth(segment);
|
|
189
|
+
const next = width + cellWidth;
|
|
190
|
+
if (column < next)
|
|
191
|
+
return edge === "start" ? index : index + segment.length;
|
|
192
|
+
index += segment.length;
|
|
193
|
+
width = next;
|
|
194
|
+
if (width >= column)
|
|
195
|
+
return index;
|
|
196
|
+
}
|
|
197
|
+
return index;
|
|
198
|
+
}
|
|
199
|
+
function pointBefore(point) {
|
|
200
|
+
return point.from ?? Math.max(0, point.column - 1);
|
|
201
|
+
}
|
|
202
|
+
function pointAfter(point) {
|
|
203
|
+
return point.to ?? Math.max(0, point.column);
|
|
204
|
+
}
|
|
205
|
+
function comparePoints(left, right) {
|
|
206
|
+
return left.line === right.line ? left.column - right.column : left.line - right.line;
|
|
207
|
+
}
|
|
208
|
+
function clamp(value, minimum, maximum) {
|
|
209
|
+
return Math.max(minimum, Math.min(value, maximum));
|
|
210
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Display-width text handling. Terminals lay out by column, not by code unit,
|
|
3
|
+
* so measuring with `String.length` mis-sizes CJK, emoji, and combining marks,
|
|
4
|
+
* and counting styling escapes as visible width breaks every layout that uses
|
|
5
|
+
* colour.
|
|
6
|
+
*/
|
|
7
|
+
/** Removes styling sequences so only visible characters remain. */
|
|
8
|
+
export declare function stripAnsi(text: string): string;
|
|
9
|
+
export interface DisplayColumnRange {
|
|
10
|
+
readonly from: number;
|
|
11
|
+
readonly to: number;
|
|
12
|
+
}
|
|
13
|
+
/** Visible-column segment (word, whitespace, or punctuation) under a pointer column. */
|
|
14
|
+
export declare function displayWordColumnRange(text: string, pointerColumn: number): DisplayColumnRange | null;
|
|
15
|
+
export interface DisplayColumnSlice {
|
|
16
|
+
/** Grapheme-aligned visible bounds in the source row. */
|
|
17
|
+
readonly from: number;
|
|
18
|
+
readonly to: number;
|
|
19
|
+
readonly text: string;
|
|
20
|
+
}
|
|
21
|
+
/** Plain graphemes intersecting a visible-column range, expanded at wide-character edges. */
|
|
22
|
+
export declare function displayColumnSlice(text: string, requestedFrom: number, requestedTo: number): DisplayColumnSlice;
|
|
23
|
+
/** Columns this text occupies once styling is removed. */
|
|
24
|
+
export declare function displayWidth(text: string): number;
|
|
25
|
+
/**
|
|
26
|
+
* Truncates to a column budget without splitting a grapheme. Styling sequences
|
|
27
|
+
* are carried through and a reset is appended when any style was opened, so a
|
|
28
|
+
* truncated row cannot leak colour into the rest of the line.
|
|
29
|
+
*/
|
|
30
|
+
export declare function truncateToWidth(text: string, maxWidth: number): string;
|
|
31
|
+
/** Pads to an exact column count, truncating when the text is already wider. */
|
|
32
|
+
export declare function padToWidth(text: string, width: number): string;
|
|
33
|
+
/**
|
|
34
|
+
* A control that is present but cannot be used: the terminal own faint
|
|
35
|
+
* attribute over whatever colour it already carries, so it reads as half of what
|
|
36
|
+
* it would otherwise be in any theme.
|
|
37
|
+
*/
|
|
38
|
+
export declare function faint(text: string): string;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Display-width text handling. Terminals lay out by column, not by code unit,
|
|
3
|
+
* so measuring with `String.length` mis-sizes CJK, emoji, and combining marks,
|
|
4
|
+
* and counting styling escapes as visible width breaks every layout that uses
|
|
5
|
+
* colour.
|
|
6
|
+
*/
|
|
7
|
+
const ANSI_PATTERN = /\[[0-9;:?]*[ -/]*[@-~]|[\]_][^]*(?:|\\)|[@-Z\\-_]/g;
|
|
8
|
+
const SEGMENTER = new Intl.Segmenter(undefined, { granularity: "grapheme" });
|
|
9
|
+
const WORD_SEGMENTER = new Intl.Segmenter(undefined, { granularity: "word" });
|
|
10
|
+
/**
|
|
11
|
+
* Recommended-for-general-interchange emoji. Terminals give every one of these
|
|
12
|
+
* two columns wherever its code points sit, so the wide blocks in
|
|
13
|
+
* `codePointWidth` cannot carry the measurement alone: a lone U+26A1 or any
|
|
14
|
+
* U+FE0F presentation sequence escapes them and would measure one column short.
|
|
15
|
+
*/
|
|
16
|
+
const RGI_EMOJI_PATTERN = /^\p{RGI_Emoji}$/v;
|
|
17
|
+
/** Columns a terminal advances for a tab, matching the host runtime. */
|
|
18
|
+
const TAB_WIDTH = 3;
|
|
19
|
+
/** Removes styling sequences so only visible characters remain. */
|
|
20
|
+
export function stripAnsi(text) {
|
|
21
|
+
return text.replace(ANSI_PATTERN, "");
|
|
22
|
+
}
|
|
23
|
+
function codePointWidth(codePoint) {
|
|
24
|
+
// Protocol: zero-width includes combining marks, joiners, variation selectors, and format characters.
|
|
25
|
+
if (codePoint === 0x200d || codePoint === 0xfeff)
|
|
26
|
+
return 0;
|
|
27
|
+
if (codePoint >= 0x0300 && codePoint <= 0x036f)
|
|
28
|
+
return 0;
|
|
29
|
+
if (codePoint >= 0x200b && codePoint <= 0x200f)
|
|
30
|
+
return 0;
|
|
31
|
+
if (codePoint >= 0xfe00 && codePoint <= 0xfe0f)
|
|
32
|
+
return 0;
|
|
33
|
+
if (codePoint >= 0x20d0 && codePoint <= 0x20f0)
|
|
34
|
+
return 0;
|
|
35
|
+
if (codePoint >= 0x1ab0 && codePoint <= 0x1aff)
|
|
36
|
+
return 0;
|
|
37
|
+
if (codePoint >= 0x1dc0 && codePoint <= 0x1dff)
|
|
38
|
+
return 0;
|
|
39
|
+
if (codePoint >= 0xe0100 && codePoint <= 0xe01ef)
|
|
40
|
+
return 0;
|
|
41
|
+
// Protocol: wide cells include CJK, Hangul, fullwidth forms, and the emoji planes terminals render double-width.
|
|
42
|
+
if (codePoint >= 0x1100 && codePoint <= 0x115f)
|
|
43
|
+
return 2;
|
|
44
|
+
if (codePoint >= 0x2e80 && codePoint <= 0xa4cf && codePoint !== 0x303f)
|
|
45
|
+
return 2;
|
|
46
|
+
if (codePoint >= 0xac00 && codePoint <= 0xd7a3)
|
|
47
|
+
return 2;
|
|
48
|
+
if (codePoint >= 0xf900 && codePoint <= 0xfaff)
|
|
49
|
+
return 2;
|
|
50
|
+
if (codePoint >= 0xfe30 && codePoint <= 0xfe6f)
|
|
51
|
+
return 2;
|
|
52
|
+
if (codePoint >= 0xff00 && codePoint <= 0xff60)
|
|
53
|
+
return 2;
|
|
54
|
+
if (codePoint >= 0xffe0 && codePoint <= 0xffe6)
|
|
55
|
+
return 2;
|
|
56
|
+
if (codePoint >= 0x1f300 && codePoint <= 0x1f64f)
|
|
57
|
+
return 2;
|
|
58
|
+
if (codePoint >= 0x1f900 && codePoint <= 0x1f9ff)
|
|
59
|
+
return 2;
|
|
60
|
+
if (codePoint >= 0x20000 && codePoint <= 0x3fffd)
|
|
61
|
+
return 2;
|
|
62
|
+
// Protocol: a tab advances to the host runtime's stop; other control characters occupy nothing.
|
|
63
|
+
if (codePoint === 0x09)
|
|
64
|
+
return TAB_WIDTH;
|
|
65
|
+
if (codePoint < 0x20 || (codePoint >= 0x7f && codePoint < 0xa0))
|
|
66
|
+
return 0;
|
|
67
|
+
return 1;
|
|
68
|
+
}
|
|
69
|
+
/** Cheap pre-filter: only clusters that could be emoji pay for the RGI test. */
|
|
70
|
+
function couldBeEmoji(grapheme) {
|
|
71
|
+
const codePoint = grapheme.codePointAt(0) ?? 0;
|
|
72
|
+
return ((codePoint >= 0x1f000 && codePoint <= 0x1fbff) ||
|
|
73
|
+
(codePoint >= 0x2300 && codePoint <= 0x23ff) ||
|
|
74
|
+
(codePoint >= 0x2600 && codePoint <= 0x27bf) ||
|
|
75
|
+
(codePoint >= 0x2b00 && codePoint <= 0x2bff) ||
|
|
76
|
+
grapheme.length > 1);
|
|
77
|
+
}
|
|
78
|
+
/** Width of one grapheme cluster: two for emoji, else the widest code point it contains. */
|
|
79
|
+
function graphemeWidth(grapheme) {
|
|
80
|
+
if (couldBeEmoji(grapheme) && RGI_EMOJI_PATTERN.test(grapheme))
|
|
81
|
+
return 2;
|
|
82
|
+
let width = 0;
|
|
83
|
+
for (const character of grapheme) {
|
|
84
|
+
width = Math.max(width, codePointWidth(character.codePointAt(0) ?? 0));
|
|
85
|
+
}
|
|
86
|
+
return width;
|
|
87
|
+
}
|
|
88
|
+
/** Visible-column segment (word, whitespace, or punctuation) under a pointer column. */
|
|
89
|
+
export function displayWordColumnRange(text, pointerColumn) {
|
|
90
|
+
const plain = stripAnsi(text);
|
|
91
|
+
const pointer = Math.max(0, pointerColumn);
|
|
92
|
+
let column = 0;
|
|
93
|
+
for (const { segment } of WORD_SEGMENTER.segment(plain)) {
|
|
94
|
+
const width = displayWidth(segment);
|
|
95
|
+
const from = column;
|
|
96
|
+
const to = column + width;
|
|
97
|
+
if (pointer >= from && pointer < to)
|
|
98
|
+
return { from, to };
|
|
99
|
+
column = to;
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
/** Plain graphemes intersecting a visible-column range, expanded at wide-character edges. */
|
|
104
|
+
export function displayColumnSlice(text, requestedFrom, requestedTo) {
|
|
105
|
+
const plain = stripAnsi(text);
|
|
106
|
+
const from = Math.max(0, requestedFrom);
|
|
107
|
+
const to = Math.max(from, requestedTo);
|
|
108
|
+
let column = 0;
|
|
109
|
+
let actualFrom;
|
|
110
|
+
let actualTo = from;
|
|
111
|
+
let selected = "";
|
|
112
|
+
for (const { segment } of SEGMENTER.segment(plain)) {
|
|
113
|
+
const width = graphemeWidth(segment);
|
|
114
|
+
const start = column;
|
|
115
|
+
const end = column + width;
|
|
116
|
+
if (end > from && start < to) {
|
|
117
|
+
actualFrom ??= start;
|
|
118
|
+
actualTo = end;
|
|
119
|
+
selected += segment;
|
|
120
|
+
}
|
|
121
|
+
column = end;
|
|
122
|
+
if (start >= to)
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
return { from: actualFrom ?? from, to: actualFrom === undefined ? from : actualTo, text: selected };
|
|
126
|
+
}
|
|
127
|
+
/** Columns this text occupies once styling is removed. */
|
|
128
|
+
export function displayWidth(text) {
|
|
129
|
+
let width = 0;
|
|
130
|
+
for (const { segment } of SEGMENTER.segment(stripAnsi(text)))
|
|
131
|
+
width += graphemeWidth(segment);
|
|
132
|
+
return width;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Truncates to a column budget without splitting a grapheme. Styling sequences
|
|
136
|
+
* are carried through and a reset is appended when any style was opened, so a
|
|
137
|
+
* truncated row cannot leak colour into the rest of the line.
|
|
138
|
+
*/
|
|
139
|
+
export function truncateToWidth(text, maxWidth) {
|
|
140
|
+
if (maxWidth <= 0)
|
|
141
|
+
return "";
|
|
142
|
+
if (displayWidth(text) <= maxWidth)
|
|
143
|
+
return text;
|
|
144
|
+
let out = "";
|
|
145
|
+
let width = 0;
|
|
146
|
+
let styled = false;
|
|
147
|
+
let index = 0;
|
|
148
|
+
while (index < text.length) {
|
|
149
|
+
ANSI_PATTERN.lastIndex = index;
|
|
150
|
+
const match = ANSI_PATTERN.exec(text);
|
|
151
|
+
if (match && match.index === index) {
|
|
152
|
+
out += match[0];
|
|
153
|
+
styled = true;
|
|
154
|
+
index += match[0].length;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const nextEscape = match ? match.index : text.length;
|
|
158
|
+
for (const { segment } of SEGMENTER.segment(text.slice(index, nextEscape))) {
|
|
159
|
+
const segmentWidth = graphemeWidth(segment);
|
|
160
|
+
if (width + segmentWidth > maxWidth)
|
|
161
|
+
return styled ? `${out}[0m` : out;
|
|
162
|
+
out += segment;
|
|
163
|
+
width += segmentWidth;
|
|
164
|
+
}
|
|
165
|
+
index = nextEscape;
|
|
166
|
+
}
|
|
167
|
+
return styled ? `${out}[0m` : out;
|
|
168
|
+
}
|
|
169
|
+
/** Pads to an exact column count, truncating when the text is already wider. */
|
|
170
|
+
export function padToWidth(text, width) {
|
|
171
|
+
if (width <= 0)
|
|
172
|
+
return "";
|
|
173
|
+
const current = displayWidth(text);
|
|
174
|
+
if (current > width)
|
|
175
|
+
return truncateToWidth(text, width);
|
|
176
|
+
return text + " ".repeat(width - current);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* A control that is present but cannot be used: the terminal own faint
|
|
180
|
+
* attribute over whatever colour it already carries, so it reads as half of what
|
|
181
|
+
* it would otherwise be in any theme.
|
|
182
|
+
*/
|
|
183
|
+
export function faint(text) {
|
|
184
|
+
return `[2m${text}[22m`;
|
|
185
|
+
}
|