@timurproko/a1 0.1.8-dev.ece8cef → 0.2.1-dev.590
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -58
- package/bin/activate.js +8 -0
- package/bin/cli.js +39 -13
- package/bin/guardian.js +21 -6
- package/bin/module-identity.js +76 -69
- package/bin/module-resolver.js +138 -0
- package/bin/pinned-pi-public.d.ts +3 -0
- package/bin/pinned-pi-public.js +93 -0
- package/bin/release-cleanup.js +8 -0
- package/bin/supervisor.js +2 -2
- package/bin/sync-pi-tui-proxy.js +7 -0
- package/bin/ui.js +67 -22
- package/bin/update-recovery.js +365 -0
- package/bin/warmup.js +28 -0
- package/dist/app/session-shell/clipboard-diagnostics.d.ts +16 -0
- package/dist/app/session-shell/clipboard-diagnostics.js +65 -0
- package/dist/app/session-shell/clipboard-image.d.ts +11 -0
- package/dist/app/session-shell/clipboard-image.js +38 -0
- package/dist/app/session-shell/editor-hyperlink-budget.d.ts +9 -0
- package/dist/app/session-shell/editor-hyperlink-budget.js +23 -0
- package/dist/app/session-shell/helper-pool.d.ts +33 -0
- package/dist/app/session-shell/helper-pool.js +98 -0
- package/dist/app/session-shell/image-preparation-client.d.ts +20 -0
- package/dist/app/session-shell/image-preparation-client.js +145 -0
- package/dist/app/session-shell/image-preparation.d.ts +18 -0
- package/dist/app/session-shell/image-preparation.js +126 -0
- package/dist/app/session-shell/image-source.d.ts +13 -0
- package/dist/app/session-shell/image-source.js +171 -0
- package/dist/app/session-shell/image-worker.d.ts +17 -0
- package/dist/app/session-shell/image-worker.js +23 -0
- package/dist/app/session-shell/index.d.ts +7 -0
- package/dist/app/session-shell/index.js +4 -0
- package/dist/app/session-shell/paste-executor.d.ts +18 -0
- package/dist/app/session-shell/paste-executor.js +253 -0
- package/dist/app/session-shell/paste-helper.js +173 -0
- package/dist/app/session-shell/paste-preparation-client.d.ts +31 -0
- package/dist/app/session-shell/paste-preparation-client.js +170 -0
- package/dist/app/session-shell/paste-protocol.d.ts +78 -0
- package/dist/app/session-shell/paste-protocol.js +18 -0
- package/dist/app/session-shell/paste-text-preparation.d.ts +6 -0
- package/dist/app/session-shell/paste-text-preparation.js +134 -0
- package/dist/app/session-shell/paste-text-worker.js +12 -0
- package/dist/app/session-shell/paste-types.d.ts +17 -0
- package/dist/app/session-shell/path-chip-presentation.d.ts +7 -0
- package/dist/app/session-shell/path-chip-presentation.js +24 -0
- package/dist/app/session-shell/prompt-chips.d.ts +76 -0
- package/dist/app/session-shell/prompt-chips.js +499 -0
- package/dist/app/session-shell/prompt-history-controller.d.ts +36 -0
- package/dist/app/session-shell/prompt-history-controller.js +170 -0
- package/dist/app/session-shell/prompt-suggestion-controller.d.ts +37 -0
- package/dist/app/session-shell/prompt-suggestion-controller.js +219 -0
- package/dist/app/session-shell/quit-outro-effects.d.ts +29 -0
- package/dist/app/session-shell/quit-outro-effects.js +242 -0
- package/dist/app/session-shell/quit-outro.d.ts +38 -0
- package/dist/app/session-shell/quit-outro.js +98 -0
- package/dist/app/session-shell/response-copy-coordinator.d.ts +27 -0
- package/dist/app/session-shell/response-copy-coordinator.js +187 -0
- package/dist/app/session-shell/response-copy-helper.js +122 -0
- package/dist/app/session-shell/response-copy-protocol.d.ts +56 -0
- package/dist/app/session-shell/response-copy-protocol.js +5 -0
- package/dist/app/session-shell/response-copy-transport.d.ts +39 -0
- package/dist/app/session-shell/response-copy-transport.js +217 -0
- package/dist/app/session-shell/session-shell-root.d.ts +278 -0
- package/dist/app/session-shell/session-shell-root.js +1442 -0
- package/dist/app/session-shell/session-shell.d.ts +66 -0
- package/dist/app/session-shell/session-shell.js +2151 -0
- package/dist/app/session-shell/session-viewport-controller.d.ts +62 -0
- package/dist/app/session-shell/session-viewport-controller.js +623 -0
- package/dist/app/session-shell/stream-presentation-coalescer.d.ts +29 -0
- package/dist/app/session-shell/stream-presentation-coalescer.js +79 -0
- package/dist/app/session-shell/system-clipboard.d.ts +20 -0
- package/dist/app/session-shell/system-clipboard.js +159 -0
- package/dist/app/session-shell/text-paste.d.ts +5 -0
- package/dist/app/session-shell/text-paste.js +16 -0
- package/dist/cli/capabilities.d.ts +6 -0
- package/dist/cli/capabilities.js +7 -0
- package/dist/cli/dispatch.d.ts +53 -0
- package/dist/cli/dispatch.js +287 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/package-messages.d.ts +27 -0
- package/dist/cli/package-messages.js +83 -0
- package/dist/cli/packages.d.ts +32 -0
- package/dist/cli/packages.js +81 -0
- package/dist/cli/session-context.d.ts +9 -0
- package/dist/cli/session-context.js +29 -0
- package/dist/cli/version-stats.d.ts +22 -0
- package/dist/cli/version-stats.js +112 -0
- package/dist/composition/index.d.ts +2 -0
- package/dist/composition/index.js +2 -0
- package/dist/composition/owned-ui.d.ts +37 -0
- package/dist/composition/owned-ui.js +159 -0
- package/dist/composition/settings-route-host.d.ts +16 -0
- package/dist/composition/settings-route-host.js +141 -0
- package/dist/contracts/agent-engine/capability-ports.d.ts +95 -0
- package/dist/contracts/agent-engine/domain-validation.js +107 -0
- package/dist/contracts/agent-engine/domain.d.ts +138 -0
- package/dist/contracts/agent-engine/index.d.ts +11 -0
- package/dist/contracts/agent-engine/index.js +6 -0
- package/dist/contracts/agent-engine/package-ports.d.ts +60 -0
- package/dist/contracts/agent-engine/ports.js +1 -0
- package/dist/contracts/owned-ui/extension-ui.d.ts +310 -0
- package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
- package/dist/contracts/owned-ui/image-attachments.js +67 -0
- package/dist/contracts/owned-ui/index.d.ts +14 -0
- package/dist/contracts/owned-ui/index.js +9 -0
- package/dist/contracts/owned-ui/model.d.ts +383 -0
- package/dist/contracts/owned-ui/prompt-chips.d.ts +15 -0
- package/dist/contracts/owned-ui/prompt-chips.js +59 -0
- package/dist/contracts/owned-ui/prompt-history.d.ts +55 -0
- package/dist/contracts/owned-ui/prompt-history.js +23 -0
- package/dist/contracts/owned-ui/prompt-suggestions.d.ts +3 -0
- package/dist/contracts/owned-ui/prompt-suggestions.js +44 -0
- package/dist/contracts/owned-ui/suggestion-diagnostics.d.ts +22 -0
- package/dist/contracts/owned-ui/suggestion-diagnostics.js +9 -0
- package/dist/contracts/owned-ui/transcript-lifecycle.d.ts +5 -0
- package/dist/contracts/owned-ui/transcript-lifecycle.js +33 -0
- package/dist/contracts/owned-ui/validation.d.ts +15 -0
- package/dist/contracts/owned-ui/validation.js +554 -0
- package/dist/contracts/presentation/index.d.ts +117 -0
- package/dist/contracts/presentation/index.js +68 -0
- package/dist/features/launch/development-launch.js +36 -0
- package/dist/features/launch/index.d.ts +14 -0
- package/dist/features/launch/index.js +7 -0
- package/dist/features/launch/intent.d.ts +12 -0
- package/dist/features/launch/intent.js +8 -0
- package/dist/features/launch/prepare-launch.d.ts +11 -0
- package/dist/features/launch/prepare-launch.js +14 -0
- package/dist/features/launch/profile-paths.d.ts +16 -0
- package/dist/features/launch/profile-paths.js +36 -0
- package/dist/features/launch/runtime-selection.d.ts +16 -0
- package/dist/features/launch/runtime-selection.js +13 -0
- package/dist/features/launch/session-context.d.ts +8 -0
- package/dist/features/launch/session-context.js +8 -0
- package/dist/features/owned-ui/index.d.ts +9 -0
- package/dist/features/owned-ui/index.js +6 -0
- package/dist/features/owned-ui/project-trust-dialog.d.ts +2 -0
- package/dist/features/owned-ui/project-trust-dialog.js +55 -0
- package/dist/features/owned-ui/project-trust-prompt.d.ts +23 -0
- package/dist/features/owned-ui/project-trust-prompt.js +149 -0
- package/dist/features/owned-ui/reference-routes.d.ts +6 -0
- package/dist/features/owned-ui/reference-routes.js +6 -0
- package/dist/features/owned-ui/reference-screen-app.d.ts +43 -0
- package/dist/features/owned-ui/reference-screen-app.js +279 -0
- package/dist/features/owned-ui/run.d.ts +17 -0
- package/dist/features/owned-ui/run.js +64 -0
- package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
- package/dist/features/owned-ui/session-fork-prompt.js +34 -0
- package/dist/features/owned-ui/settings-app.d.ts +21 -0
- package/dist/features/owned-ui/settings-app.js +851 -0
- package/dist/features/owned-ui/settings-route.d.ts +2 -0
- package/dist/features/owned-ui/settings-route.js +2 -0
- package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
- package/dist/features/prompt-history/image-sidecar.js +130 -0
- package/dist/features/prompt-history/index.d.ts +4 -0
- package/dist/features/prompt-history/index.js +3 -0
- package/dist/features/prompt-history/paths.d.ts +5 -0
- package/dist/features/prompt-history/paths.js +17 -0
- package/dist/features/prompt-history/service.d.ts +54 -0
- package/dist/features/prompt-history/service.js +425 -0
- package/dist/features/prompt-history/store.d.ts +16 -0
- package/dist/features/prompt-history/store.js +219 -0
- package/dist/features/prompt-history/worker.d.ts +9 -0
- package/dist/features/prompt-history/worker.js +45 -0
- package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
- package/dist/features/prompt-suggestions/diagnostics.js +82 -0
- package/dist/features/prompt-suggestions/index.d.ts +2 -0
- package/dist/features/prompt-suggestions/index.js +1 -0
- package/dist/foundation/launch-context/index.d.ts +59 -0
- package/dist/foundation/launch-context/index.js +136 -0
- package/dist/foundation/launch-guardian/index.d.ts +2 -0
- package/dist/foundation/launch-guardian/index.js +1 -0
- package/dist/foundation/launch-guardian/main.d.ts +33 -0
- package/dist/foundation/launch-guardian/main.js +179 -0
- package/dist/foundation/lifecycle/commands.js +1 -0
- package/dist/foundation/lifecycle/index.d.ts +13 -0
- package/dist/foundation/lifecycle/index.js +6 -0
- package/dist/foundation/lifecycle/model.d.ts +64 -0
- package/dist/foundation/lifecycle/model.js +40 -0
- package/dist/foundation/lifecycle/paths.d.ts +30 -0
- package/dist/foundation/lifecycle/paths.js +70 -0
- package/dist/foundation/lifecycle/session-repository-context.d.ts +18 -0
- package/dist/foundation/lifecycle/session-repository-context.js +173 -0
- package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
- package/dist/foundation/lifecycle/session-selection.js +39 -0
- package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
- package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
- package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
- package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
- package/dist/foundation/process-containment/index.d.ts +8 -0
- package/dist/foundation/process-containment/index.js +6 -0
- package/dist/foundation/process-containment/linux-process-inspector.d.ts +7 -0
- package/dist/foundation/process-containment/linux-process-inspector.js +27 -0
- package/dist/foundation/process-containment/native-guardian-containment.d.ts +17 -0
- package/dist/foundation/process-containment/native-guardian-containment.js +140 -0
- package/dist/foundation/process-containment/windows-process-inspector.d.ts +19 -0
- package/dist/foundation/process-containment/windows-process-inspector.js +56 -0
- package/dist/foundation/protocol/client.d.ts +18 -0
- package/dist/foundation/protocol/client.js +130 -0
- package/dist/foundation/protocol/index.d.ts +3 -0
- package/dist/foundation/protocol/index.js +2 -0
- package/dist/foundation/protocol/messages.d.ts +90 -0
- package/dist/foundation/protocol/messages.js +100 -0
- package/dist/foundation/release/bootstrap.d.ts +51 -0
- package/dist/foundation/release/bootstrap.js +470 -0
- package/dist/foundation/release/cohort-state.d.ts +159 -0
- package/dist/foundation/release/cohort-state.js +507 -0
- package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
- package/dist/foundation/release/dependency-certification-retention.js +88 -0
- package/dist/foundation/release/dependency-certification.d.ts +24 -0
- package/dist/foundation/release/dependency-certification.js +266 -0
- package/dist/foundation/release/dependency-layer.d.ts +78 -0
- package/dist/foundation/release/dependency-layer.js +466 -0
- package/dist/foundation/release/endpoints.d.ts +24 -0
- package/dist/foundation/release/endpoints.js +134 -0
- package/dist/foundation/release/immutable-platform.d.ts +6 -0
- package/dist/foundation/release/immutable-platform.js +13 -0
- package/dist/foundation/release/index.d.ts +33 -0
- package/dist/foundation/release/index.js +18 -0
- package/dist/foundation/release/ordinary-launch-selection.d.ts +14 -0
- package/dist/foundation/release/ordinary-launch-selection.js +15 -0
- package/dist/foundation/release/release-gc.d.ts +71 -0
- package/dist/foundation/release/release-gc.js +764 -0
- package/dist/foundation/release/release-store.d.ts +49 -0
- package/dist/foundation/release/release-store.js +235 -0
- package/dist/foundation/release/release.d.ts +43 -0
- package/dist/foundation/release/release.js +215 -0
- package/dist/foundation/release/restart-certification.d.ts +68 -0
- package/dist/foundation/release/restart-certification.js +227 -0
- package/dist/foundation/release/types.d.ts +11 -0
- package/dist/foundation/release/types.js +1 -0
- package/dist/foundation/release/update-activation.d.ts +72 -0
- package/dist/foundation/release/update-activation.js +204 -0
- package/dist/foundation/release/update-launch.d.ts +6 -0
- package/dist/foundation/release/update-launch.js +17 -0
- package/dist/foundation/release/update-recovery.d.ts +82 -0
- package/dist/foundation/release/update-recovery.js +386 -0
- package/dist/foundation/release/update-transaction.d.ts +42 -0
- package/dist/foundation/release/update-transaction.js +101 -0
- package/dist/foundation/release/update.d.ts +142 -0
- package/dist/foundation/release/update.js +773 -0
- package/dist/foundation/release/warmup.d.ts +3 -0
- package/dist/foundation/release/warmup.js +47 -0
- package/dist/foundation/startup/index.d.ts +4 -0
- package/dist/foundation/startup/index.js +2 -0
- package/dist/foundation/startup/startup-budget.d.ts +46 -0
- package/dist/foundation/startup/startup-budget.js +42 -0
- package/dist/foundation/startup/startup-descriptor.js +34 -0
- package/dist/foundation/startup/startup-runtime.d.ts +27 -0
- package/dist/foundation/startup/startup-runtime.js +128 -0
- package/dist/foundation/storage/control-store.d.ts +18 -0
- package/dist/foundation/storage/control-store.js +342 -0
- package/dist/foundation/storage/index.d.ts +1 -0
- package/dist/foundation/storage/index.js +1 -0
- package/dist/foundation/supervision/index.d.ts +3 -0
- package/dist/foundation/supervision/index.js +3 -0
- package/dist/foundation/supervision/main.d.ts +1 -0
- package/dist/foundation/supervision/main.js +84 -0
- package/dist/foundation/supervision/paths.d.ts +1 -0
- package/dist/foundation/supervision/paths.js +1 -0
- package/dist/foundation/supervision/server.d.ts +46 -0
- package/dist/foundation/supervision/server.js +584 -0
- package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
- package/dist/foundation/terminal-cleanup/fatal-exit.js +87 -0
- package/dist/foundation/terminal-cleanup/index.d.ts +3 -0
- package/dist/foundation/terminal-cleanup/index.js +2 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
- package/dist/integrations/pi/components/components.d.ts +4 -0
- package/dist/integrations/pi/components/components.js +64 -0
- package/dist/integrations/pi/components/conformance.d.ts +18 -0
- package/dist/integrations/pi/components/conformance.js +70 -0
- package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
- package/dist/integrations/pi/components/editor-interaction.js +1 -0
- package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
- package/dist/integrations/pi/components/history-editor-loader.js +5 -0
- package/dist/integrations/pi/components/index.d.ts +26 -0
- package/dist/integrations/pi/components/index.js +16 -0
- package/dist/integrations/pi/components/modal-frame.d.ts +41 -0
- package/dist/integrations/pi/components/modal-frame.js +110 -0
- package/dist/integrations/pi/components/models-dialog.d.ts +55 -0
- package/dist/integrations/pi/components/models-dialog.js +403 -0
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
- package/dist/integrations/pi/components/owned-editor-ux.js +1094 -0
- package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
- package/dist/integrations/pi/components/path-word-ranges.js +37 -0
- package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
- package/dist/integrations/pi/components/prompt-input-port.js +1 -0
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +167 -0
- package/dist/integrations/pi/components/resources/builtin-themes.js +168 -0
- package/dist/integrations/pi/components/shell-components.d.ts +7 -0
- package/dist/integrations/pi/components/shell-components.js +7 -0
- package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +23 -0
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +357 -0
- package/dist/integrations/pi/components/shell-extension-ui.d.ts +35 -0
- package/dist/integrations/pi/components/shell-extension-ui.js +282 -0
- package/dist/integrations/pi/components/shell-footer-status.d.ts +8 -0
- package/dist/integrations/pi/components/shell-footer-status.js +287 -0
- package/dist/integrations/pi/components/shell-hotkey-sections.d.ts +7 -0
- package/dist/integrations/pi/components/shell-hotkey-sections.js +29 -0
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +73 -0
- package/dist/integrations/pi/components/shell-presenters-info.js +188 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.js +435 -0
- package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +134 -0
- package/dist/integrations/pi/components/shell-selectors-dialogs.js +286 -0
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +233 -0
- package/dist/integrations/pi/components/shell-shared-facade.js +92 -0
- package/dist/integrations/pi/components/skills-command.d.ts +49 -0
- package/dist/integrations/pi/components/skills-command.js +119 -0
- package/dist/integrations/pi/components/skills-dialog.d.ts +9 -0
- package/dist/integrations/pi/components/skills-dialog.js +128 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +17 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +52 -0
- package/dist/integrations/pi/components/theme.d.ts +5 -0
- package/dist/integrations/pi/components/theme.js +11 -0
- package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +8 -0
- package/dist/integrations/pi/components/thinking-selector-dialog.js +22 -0
- package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
- package/dist/integrations/pi/components/tool-image-presentation.js +83 -0
- package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
- package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
- package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
- package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +445 -0
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +371 -0
- package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
- package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +13 -0
- package/dist/integrations/pi/components/upstream/components/daxnuts.d.ts +29 -0
- package/dist/integrations/pi/components/upstream/components/daxnuts.js +146 -0
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.d.ts +4 -0
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +48 -0
- package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +22 -0
- package/dist/integrations/pi/components/upstream/components/extension-editor.js +89 -0
- package/dist/integrations/pi/components/upstream/components/extension-input.d.ts +17 -0
- package/dist/integrations/pi/components/upstream/components/extension-input.js +73 -0
- package/dist/integrations/pi/components/upstream/components/extension-selector.d.ts +15 -0
- package/dist/integrations/pi/components/upstream/components/extension-selector.js +93 -0
- package/dist/integrations/pi/components/upstream/components/mermaid.js +81 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +52 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +222 -0
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +60 -0
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +347 -0
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +12 -0
- package/dist/integrations/pi/components/upstream/components/session-footer.js +150 -0
- package/dist/integrations/pi/components/upstream/components/session-selector-search.js +161 -0
- package/dist/integrations/pi/components/upstream/components/session-selector.d.ts +97 -0
- package/dist/integrations/pi/components/upstream/components/session-selector.js +935 -0
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +21 -0
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +54 -0
- package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +35 -0
- package/dist/integrations/pi/components/upstream/components/status-indicator.js +69 -0
- package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +36 -0
- package/dist/integrations/pi/components/upstream/components/thinking-selector.js +153 -0
- package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +67 -0
- package/dist/integrations/pi/components/upstream/components/tool-execution.js +365 -0
- package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +102 -0
- package/dist/integrations/pi/components/upstream/components/tree-selector.js +1294 -0
- package/dist/integrations/pi/components/upstream/components/trust-selector.d.ts +33 -0
- package/dist/integrations/pi/components/upstream/components/trust-selector.js +87 -0
- package/dist/integrations/pi/components/upstream/external-editor.js +43 -0
- package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +289 -0
- package/dist/integrations/pi/components/upstream/history/editor-core.js +2145 -0
- package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +35 -0
- package/dist/integrations/pi/components/upstream/history/kill-ring.js +51 -0
- package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
- package/dist/integrations/pi/components/upstream/history/printable-key.js +43 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +17 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +34 -0
- package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +25 -0
- package/dist/integrations/pi/components/upstream/history/undo-stack.js +39 -0
- package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
- package/dist/integrations/pi/components/upstream/history/word-navigation.js +103 -0
- package/dist/integrations/pi/components/upstream/model-search.d.ts +18 -0
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +33 -0
- package/dist/integrations/pi/components/upstream/theme/theme-controller.js +114 -0
- package/dist/integrations/pi/components/upstream/theme/theme.d.ts +61 -0
- package/dist/integrations/pi/components/upstream/theme/theme.js +337 -0
- package/dist/integrations/pi/engine/adapter.d.ts +140 -0
- package/dist/integrations/pi/engine/adapter.js +663 -0
- package/dist/integrations/pi/engine/changelog.d.ts +2 -0
- package/dist/integrations/pi/engine/changelog.js +63 -0
- package/dist/integrations/pi/engine/command-dispatch.d.ts +41 -0
- package/dist/integrations/pi/engine/command-dispatch.js +125 -0
- package/dist/integrations/pi/engine/compaction-progress.d.ts +24 -0
- package/dist/integrations/pi/engine/compaction-progress.js +97 -0
- package/dist/integrations/pi/engine/conformance.d.ts +39 -0
- package/dist/integrations/pi/engine/conformance.js +140 -0
- package/dist/integrations/pi/engine/event-delivery.d.ts +100 -0
- package/dist/integrations/pi/engine/event-delivery.js +184 -0
- package/dist/integrations/pi/engine/extension-ui-binding.d.ts +35 -0
- package/dist/integrations/pi/engine/extension-ui-binding.js +81 -0
- package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
- package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
- package/dist/integrations/pi/engine/index.d.ts +18 -0
- package/dist/integrations/pi/engine/index.js +10 -0
- package/dist/integrations/pi/engine/message-values.d.ts +29 -0
- package/dist/integrations/pi/engine/message-values.js +169 -0
- package/dist/integrations/pi/engine/package-integration.d.ts +13 -0
- package/dist/integrations/pi/engine/package-integration.js +118 -0
- package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
- package/dist/integrations/pi/engine/pending-delivery.js +156 -0
- package/dist/integrations/pi/engine/pi-settings-metadata.json +397 -0
- package/dist/integrations/pi/engine/project-trust-preflight.d.ts +21 -0
- package/dist/integrations/pi/engine/project-trust-preflight.js +46 -0
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +30 -0
- package/dist/integrations/pi/engine/prompt-suggestions.js +102 -0
- package/dist/integrations/pi/engine/provider-authentication.d.ts +34 -0
- package/dist/integrations/pi/engine/provider-authentication.js +209 -0
- package/dist/integrations/pi/engine/repository-pr-rest.d.ts +21 -0
- package/dist/integrations/pi/engine/repository-pr-rest.js +155 -0
- package/dist/integrations/pi/engine/repository-pr.d.ts +16 -0
- package/dist/integrations/pi/engine/repository-pr.js +79 -0
- package/dist/integrations/pi/engine/resource-catalog.d.ts +50 -0
- package/dist/integrations/pi/engine/resource-catalog.js +299 -0
- package/dist/integrations/pi/engine/resources/changelog.json +12 -0
- package/dist/integrations/pi/engine/runtime-integration.d.ts +53 -0
- package/dist/integrations/pi/engine/runtime-integration.js +118 -0
- package/dist/integrations/pi/engine/session-events.d.ts +48 -0
- package/dist/integrations/pi/engine/session-events.js +223 -0
- package/dist/integrations/pi/engine/session-integration.d.ts +67 -0
- package/dist/integrations/pi/engine/session-integration.js +195 -0
- package/dist/integrations/pi/engine/session-runtime.d.ts +98 -0
- package/dist/integrations/pi/engine/session-runtime.js +412 -0
- package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
- package/dist/integrations/pi/engine/session-selection.js +90 -0
- package/dist/integrations/pi/engine/settings-bridge.d.ts +121 -0
- package/dist/integrations/pi/engine/settings-bridge.js +516 -0
- package/dist/integrations/pi/engine/settings-metadata.d.ts +31 -0
- package/dist/integrations/pi/engine/settings-metadata.js +67 -0
- package/dist/integrations/pi/engine/settings-port.d.ts +42 -0
- package/dist/integrations/pi/engine/settings-port.js +363 -0
- package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
- package/dist/integrations/pi/engine/tool-rendering.js +145 -0
- package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
- package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
- package/dist/integrations/pi/engine/transcript-projection.d.ts +39 -0
- package/dist/integrations/pi/engine/transcript-projection.js +440 -0
- package/dist/integrations/pi/engine/usage-view.d.ts +4 -0
- package/dist/integrations/pi/engine/usage-view.js +56 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
- package/dist/integrations/pi/engine/workflow-contexts.d.ts +66 -0
- package/dist/integrations/pi/engine/workflow-contexts.js +360 -0
- package/dist/integrations/pi/engine/workflow-runner.d.ts +60 -0
- package/dist/integrations/pi/engine/workflow-runner.js +536 -0
- package/dist/integrations/pi/engine/workflow-support.d.ts +38 -0
- package/dist/integrations/pi/engine/workflow-support.js +386 -0
- package/dist/integrations/pi/engine/workflows.d.ts +308 -0
- package/dist/integrations/pi/engine/workflows.js +81 -0
- package/dist/integrations/pi/startup-public.d.ts +2 -0
- package/dist/integrations/pi/startup-public.js +2254 -0
- package/dist/integrations/pi/startup-public.manifest.json +12679 -0
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +58 -0
- package/dist/integrations/pi/tui-runtime/adapter.js +792 -0
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +158 -0
- package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +88 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +439 -0
- package/dist/integrations/pi/tui-runtime/index.d.ts +9 -0
- package/dist/integrations/pi/tui-runtime/index.js +5 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +19 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.js +91 -0
- package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
- package/dist/integrations/pi/tui-runtime/overlay-geometry.js +158 -0
- package/dist/integrations/pi/tui-runtime/presentation-adapter.d.ts +4 -0
- package/dist/integrations/pi/tui-runtime/presentation-adapter.js +48 -0
- package/dist/native/darwin-arm64/manifest.json +4 -4
- package/dist/native/darwin-arm64/process-guardian +0 -0
- package/dist/native/linux-x64/manifest.json +3 -3
- package/dist/native/linux-x64/process-guardian +0 -0
- package/dist/native/win32-x64/manifest.json +3 -3
- package/dist/native/win32-x64/process-guardian.exe +0 -0
- package/dist/product-identity.d.ts +37 -0
- package/dist/product-identity.js +119 -0
- package/dist/product-identity.json +87 -0
- package/dist/runtime-payload-inventory.json +134179 -0
- package/dist/ui/apps/contracts.d.ts +72 -0
- package/dist/ui/apps/host.d.ts +42 -0
- package/dist/ui/apps/host.js +156 -0
- package/dist/ui/apps/index.d.ts +5 -0
- package/dist/ui/apps/index.js +3 -0
- package/dist/ui/apps/registry.d.ts +12 -0
- package/dist/ui/apps/registry.js +33 -0
- package/dist/ui/components/dialog-panel.d.ts +37 -0
- package/dist/ui/components/dialog-panel.js +58 -0
- package/dist/ui/components/frame.d.ts +22 -0
- package/dist/ui/components/frame.js +55 -0
- package/dist/ui/components/index.d.ts +50 -0
- package/dist/ui/components/index.js +26 -0
- package/dist/ui/components/line-input.d.ts +68 -0
- package/dist/ui/components/line-input.js +224 -0
- package/dist/ui/components/list-block.d.ts +70 -0
- package/dist/ui/components/list-block.js +189 -0
- package/dist/ui/components/list-view.d.ts +60 -0
- package/dist/ui/components/list-view.js +84 -0
- package/dist/ui/components/mouse.d.ts +25 -0
- package/dist/ui/components/mouse.js +72 -0
- package/dist/ui/components/progress-status.d.ts +9 -0
- package/dist/ui/components/progress-status.js +25 -0
- package/dist/ui/components/prompt-input.d.ts +32 -0
- package/dist/ui/components/prompt-input.js +51 -0
- package/dist/ui/components/scrollbar.d.ts +88 -0
- package/dist/ui/components/scrollbar.js +137 -0
- package/dist/ui/components/selection-copy.d.ts +24 -0
- package/dist/ui/components/selection-copy.js +39 -0
- package/dist/ui/components/shortcut-hints.d.ts +7 -0
- package/dist/ui/components/shortcut-hints.js +12 -0
- package/dist/ui/components/shortcuts.d.ts +60 -0
- package/dist/ui/components/shortcuts.js +85 -0
- package/dist/ui/components/spans.d.ts +28 -0
- package/dist/ui/components/spans.js +266 -0
- package/dist/ui/components/submitted-prompt.d.ts +23 -0
- package/dist/ui/components/submitted-prompt.js +50 -0
- package/dist/ui/components/surface.d.ts +20 -0
- package/dist/ui/components/surface.js +44 -0
- package/dist/ui/components/text-selection.d.ts +62 -0
- package/dist/ui/components/text-selection.js +210 -0
- package/dist/ui/components/text.d.ts +38 -0
- package/dist/ui/components/text.js +185 -0
- package/dist/ui/components/theme.d.ts +19 -0
- package/dist/ui/components/theme.js +9 -0
- package/dist/ui/components/transcript-viewport.d.ts +187 -0
- package/dist/ui/components/transcript-viewport.js +886 -0
- package/dist/ui/components/value-menu.d.ts +43 -0
- package/dist/ui/components/value-menu.js +41 -0
- package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
- package/dist/ui/components/visible-hyperlinks.js +97 -0
- package/dist/ui/settings/declarations.d.ts +127 -0
- package/dist/ui/settings/declarations.js +124 -0
- package/dist/ui/settings/index.d.ts +10 -0
- package/dist/ui/settings/index.js +5 -0
- package/dist/ui/settings/manager.d.ts +54 -0
- package/dist/ui/settings/manager.js +256 -0
- package/dist/ui/settings/migrations.d.ts +13 -0
- package/dist/ui/settings/migrations.js +92 -0
- package/dist/ui/settings/sections.d.ts +52 -0
- package/dist/ui/settings/sections.js +112 -0
- package/docs/architecture/boundaries.md +17 -13
- package/docs/architecture/code-documentation.md +77 -0
- package/docs/architecture/history-editor-provenance.md +100 -0
- package/docs/architecture/internal-naming.md +94 -0
- package/docs/architecture/process-guardian-provenance.md +3 -1
- package/docs/architecture/project-structure.md +72 -30
- package/docs/architecture/prompt-suggestions.md +68 -0
- package/docs/architecture/resource-and-data-policy.md +28 -2
- package/docs/architecture/response-copy-delivery.md +85 -0
- package/docs/architecture/terminal-host-proof-gate.md +1 -1
- package/docs/architecture/terminal-host-spike-evidence.md +1 -1
- package/docs/architecture/tool-image-presentation.md +62 -0
- package/docs/architecture/toolchain.md +34 -10
- package/docs/architecture/ui-reference-provenance.md +73 -6
- package/docs/ci-release-runbook.md +266 -77
- package/docs/features/launch-profiles.md +24 -17
- package/docs/features/modal-content-interaction.md +38 -0
- package/docs/features/prompt-history.md +149 -0
- package/docs/local-worktree-cleanup.md +214 -0
- package/docs/manual-code-streaming-cleanup.md +88 -0
- package/docs/manual-ghost-link-baseline.md +89 -0
- package/docs/manual-launch-instance-acceptance.md +12 -35
- package/docs/manual-owned-ui-checkpoint.md +79 -0
- package/docs/manual-pi-boundary-candidate.md +4 -5
- package/docs/manual-terminal-colour-check.md +4 -3
- package/docs/openspec-archive-automation.md +269 -0
- package/docs/repository-governance-live-acceptance.md +77 -0
- package/docs/validation.md +105 -0
- package/package.json +53 -34
- package/dist/src/cli/capabilities.d.ts +0 -15
- package/dist/src/cli/capabilities.js +0 -7
- package/dist/src/cli/dispatch.d.ts +0 -31
- package/dist/src/cli/dispatch.js +0 -123
- package/dist/src/cli/index.d.ts +0 -5
- package/dist/src/cli/index.js +0 -5
- package/dist/src/cli/packages.d.ts +0 -23
- package/dist/src/cli/packages.js +0 -84
- package/dist/src/cli/version-stats.d.ts +0 -16
- package/dist/src/cli/version-stats.js +0 -72
- package/dist/src/cli/version.d.ts +0 -2
- package/dist/src/cli/version.js +0 -23
- package/dist/src/composition/index.d.ts +0 -48
- package/dist/src/composition/index.js +0 -258
- package/dist/src/features/launch/development-launch.js +0 -28
- package/dist/src/features/launch/index.d.ts +0 -7
- package/dist/src/features/launch/index.js +0 -7
- package/dist/src/features/launch/intent.d.ts +0 -7
- package/dist/src/features/launch/intent.js +0 -4
- package/dist/src/features/launch/prepare-launch.d.ts +0 -13
- package/dist/src/features/launch/prepare-launch.js +0 -21
- package/dist/src/features/launch/profile-paths.d.ts +0 -15
- package/dist/src/features/launch/profile-paths.js +0 -31
- package/dist/src/features/launch/profiles.d.ts +0 -12
- package/dist/src/features/launch/profiles.js +0 -26
- package/dist/src/features/launch/runtime-selection.d.ts +0 -19
- package/dist/src/features/launch/runtime-selection.js +0 -13
- package/dist/src/features/owned-ui/customization.d.ts +0 -38
- package/dist/src/features/owned-ui/customization.js +0 -108
- package/dist/src/features/owned-ui/diagnostics.d.ts +0 -33
- package/dist/src/features/owned-ui/diagnostics.js +0 -94
- package/dist/src/features/owned-ui/index.d.ts +0 -4
- package/dist/src/features/owned-ui/index.js +0 -4
- package/dist/src/features/owned-ui/run.d.ts +0 -11
- package/dist/src/features/owned-ui/run.js +0 -15
- package/dist/src/features/owned-ui/settings-app.d.ts +0 -22
- package/dist/src/features/owned-ui/settings-app.js +0 -633
- package/dist/src/features/workspace/capabilities.d.ts +0 -31
- package/dist/src/features/workspace/capabilities.js +0 -75
- package/dist/src/features/workspace/index.d.ts +0 -6
- package/dist/src/features/workspace/index.js +0 -6
- package/dist/src/features/workspace/presentation.d.ts +0 -30
- package/dist/src/features/workspace/presentation.js +0 -70
- package/dist/src/features/workspace/reconciliation.d.ts +0 -15
- package/dist/src/features/workspace/reconciliation.js +0 -82
- package/dist/src/features/workspace/reducer.d.ts +0 -42
- package/dist/src/features/workspace/reducer.js +0 -213
- package/dist/src/features/workspace/router.d.ts +0 -31
- package/dist/src/features/workspace/router.js +0 -124
- package/dist/src/features/workspace/store.d.ts +0 -17
- package/dist/src/features/workspace/store.js +0 -54
- package/dist/src/foundation/agent-engine-contracts/capability-ports.d.ts +0 -95
- package/dist/src/foundation/agent-engine-contracts/domain-validation.js +0 -89
- package/dist/src/foundation/agent-engine-contracts/domain.d.ts +0 -116
- package/dist/src/foundation/agent-engine-contracts/index.d.ts +0 -8
- package/dist/src/foundation/agent-engine-contracts/index.js +0 -8
- package/dist/src/foundation/agent-engine-contracts/package-ports.d.ts +0 -54
- package/dist/src/foundation/launch-guardian/index.d.ts +0 -1
- package/dist/src/foundation/launch-guardian/index.js +0 -1
- package/dist/src/foundation/launch-guardian/main.d.ts +0 -31
- package/dist/src/foundation/launch-guardian/main.js +0 -165
- package/dist/src/foundation/lifecycle/index.d.ts +0 -4
- package/dist/src/foundation/lifecycle/index.js +0 -4
- package/dist/src/foundation/lifecycle/model.d.ts +0 -64
- package/dist/src/foundation/lifecycle/model.js +0 -40
- package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
- package/dist/src/foundation/lifecycle/paths.js +0 -42
- package/dist/src/foundation/native-host-protocol/codec.d.ts +0 -11
- package/dist/src/foundation/native-host-protocol/codec.js +0 -56
- package/dist/src/foundation/native-host-protocol/evidence.d.ts +0 -67
- package/dist/src/foundation/native-host-protocol/evidence.js +0 -141
- package/dist/src/foundation/native-host-protocol/index.d.ts +0 -4
- package/dist/src/foundation/native-host-protocol/index.js +0 -4
- package/dist/src/foundation/native-host-protocol/messages.d.ts +0 -56
- package/dist/src/foundation/native-host-protocol/messages.js +0 -149
- package/dist/src/foundation/native-host-protocol/proof-gate.d.ts +0 -13
- package/dist/src/foundation/native-host-protocol/proof-gate.js +0 -33
- package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts +0 -302
- package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
- package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
- package/dist/src/foundation/owned-ui-contracts/model.d.ts +0 -241
- package/dist/src/foundation/owned-ui-contracts/validation.d.ts +0 -11
- package/dist/src/foundation/owned-ui-contracts/validation.js +0 -395
- package/dist/src/foundation/owned-ui-settings/declarations.d.ts +0 -13
- package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
- package/dist/src/foundation/owned-ui-settings/index.d.ts +0 -6
- package/dist/src/foundation/owned-ui-settings/index.js +0 -6
- package/dist/src/foundation/owned-ui-settings/migrations.d.ts +0 -13
- package/dist/src/foundation/owned-ui-settings/migrations.js +0 -28
- package/dist/src/foundation/owned-ui-settings/sections.d.ts +0 -70
- package/dist/src/foundation/owned-ui-settings/sections.js +0 -93
- package/dist/src/foundation/owned-ui-settings/session.d.ts +0 -44
- package/dist/src/foundation/owned-ui-settings/session.js +0 -145
- package/dist/src/foundation/owned-ui-settings/store.d.ts +0 -28
- package/dist/src/foundation/owned-ui-settings/store.js +0 -90
- package/dist/src/foundation/pi-component-adapter/components.d.ts +0 -4
- package/dist/src/foundation/pi-component-adapter/components.js +0 -64
- package/dist/src/foundation/pi-component-adapter/conformance.d.ts +0 -17
- package/dist/src/foundation/pi-component-adapter/conformance.js +0 -69
- package/dist/src/foundation/pi-component-adapter/index.d.ts +0 -13
- package/dist/src/foundation/pi-component-adapter/index.js +0 -13
- package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.d.ts +0 -165
- package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.js +0 -166
- package/dist/src/foundation/pi-component-adapter/shell-components.d.ts +0 -6
- package/dist/src/foundation/pi-component-adapter/shell-components.js +0 -6
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.d.ts +0 -11
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts +0 -35
- package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js +0 -279
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts +0 -7
- package/dist/src/foundation/pi-component-adapter/shell-footer-status.js +0 -189
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js +0 -429
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts +0 -113
- package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +0 -235
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js +0 -87
- package/dist/src/foundation/pi-component-adapter/theme.d.ts +0 -1
- package/dist/src/foundation/pi-component-adapter/theme.js +0 -1
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts +0 -422
- package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js +0 -296
- package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts +0 -10
- package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts +0 -17
- package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js +0 -51
- package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts +0 -22
- package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js +0 -142
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts +0 -4
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
- package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts +0 -17
- package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js +0 -81
- package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts +0 -24
- package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js +0 -105
- package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts +0 -2
- package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js +0 -18
- package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js +0 -77
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
- package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts +0 -55
- package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js +0 -342
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.d.ts +0 -10
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.js +0 -120
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js +0 -159
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts +0 -95
- package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js +0 -889
- package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts +0 -19
- package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js +0 -44
- package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts +0 -30
- package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js +0 -59
- package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts +0 -98
- package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js +0 -1272
- package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts +0 -33
- package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js +0 -76
- package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js +0 -39
- package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts +0 -15
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts +0 -25
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js +0 -117
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts +0 -61
- package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js +0 -326
- package/dist/src/foundation/pi-engine-adapter/adapter.d.ts +0 -164
- package/dist/src/foundation/pi-engine-adapter/adapter.js +0 -2367
- package/dist/src/foundation/pi-engine-adapter/conformance.d.ts +0 -37
- package/dist/src/foundation/pi-engine-adapter/conformance.js +0 -130
- package/dist/src/foundation/pi-engine-adapter/index.d.ts +0 -10
- package/dist/src/foundation/pi-engine-adapter/index.js +0 -10
- package/dist/src/foundation/pi-engine-adapter/model-auth-integration.d.ts +0 -30
- package/dist/src/foundation/pi-engine-adapter/model-auth-integration.js +0 -61
- package/dist/src/foundation/pi-engine-adapter/package-integration.d.ts +0 -13
- package/dist/src/foundation/pi-engine-adapter/package-integration.js +0 -112
- package/dist/src/foundation/pi-engine-adapter/pi-settings-metadata.json +0 -374
- package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.d.ts +0 -31
- package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.js +0 -80
- package/dist/src/foundation/pi-engine-adapter/runtime-integration.d.ts +0 -35
- package/dist/src/foundation/pi-engine-adapter/runtime-integration.js +0 -67
- package/dist/src/foundation/pi-engine-adapter/session-integration.d.ts +0 -43
- package/dist/src/foundation/pi-engine-adapter/session-integration.js +0 -97
- package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
- package/dist/src/foundation/pi-engine-adapter/settings-integration.js +0 -233
- package/dist/src/foundation/pi-engine-adapter/workflow-controllers.d.ts +0 -20
- package/dist/src/foundation/pi-engine-adapter/workflow-controllers.js +0 -48
- package/dist/src/foundation/pi-engine-adapter/workflows.d.ts +0 -173
- package/dist/src/foundation/pi-engine-adapter/workflows.js +0 -60
- package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
- package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
- package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
- package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
- package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts +0 -39
- package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js +0 -493
- package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts +0 -18
- package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js +0 -145
- package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts +0 -120
- package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.d.ts +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.js +0 -48
- package/dist/src/foundation/presentation-contracts/index.d.ts +0 -96
- package/dist/src/foundation/presentation-contracts/index.js +0 -38
- package/dist/src/foundation/process-containment/index.d.ts +0 -5
- package/dist/src/foundation/process-containment/index.js +0 -5
- package/dist/src/foundation/process-containment/linux-process-inspector.d.ts +0 -6
- package/dist/src/foundation/process-containment/linux-process-inspector.js +0 -26
- package/dist/src/foundation/process-containment/native-guardian-containment.d.ts +0 -16
- package/dist/src/foundation/process-containment/native-guardian-containment.js +0 -139
- package/dist/src/foundation/process-containment/windows-process-inspector.d.ts +0 -17
- package/dist/src/foundation/process-containment/windows-process-inspector.js +0 -53
- package/dist/src/foundation/protocol/client.d.ts +0 -17
- package/dist/src/foundation/protocol/client.js +0 -129
- package/dist/src/foundation/protocol/index.d.ts +0 -2
- package/dist/src/foundation/protocol/index.js +0 -2
- package/dist/src/foundation/protocol/messages.d.ts +0 -89
- package/dist/src/foundation/protocol/messages.js +0 -99
- package/dist/src/foundation/release/bootstrap.d.ts +0 -29
- package/dist/src/foundation/release/bootstrap.js +0 -335
- package/dist/src/foundation/release/cohort-state.d.ts +0 -70
- package/dist/src/foundation/release/cohort-state.js +0 -202
- package/dist/src/foundation/release/development-preview-release.d.ts +0 -49
- package/dist/src/foundation/release/development-preview-release.js +0 -114
- package/dist/src/foundation/release/index.d.ts +0 -11
- package/dist/src/foundation/release/index.js +0 -11
- package/dist/src/foundation/release/release-gc.d.ts +0 -5
- package/dist/src/foundation/release/release-gc.js +0 -16
- package/dist/src/foundation/release/release-store.d.ts +0 -43
- package/dist/src/foundation/release/release-store.js +0 -175
- package/dist/src/foundation/release/release.d.ts +0 -38
- package/dist/src/foundation/release/release.js +0 -204
- package/dist/src/foundation/release/update-transaction.d.ts +0 -31
- package/dist/src/foundation/release/update-transaction.js +0 -89
- package/dist/src/foundation/release/update.d.ts +0 -80
- package/dist/src/foundation/release/update.js +0 -458
- package/dist/src/foundation/storage/control-store.d.ts +0 -61
- package/dist/src/foundation/storage/control-store.js +0 -530
- package/dist/src/foundation/storage/index.d.ts +0 -1
- package/dist/src/foundation/storage/index.js +0 -1
- package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts +0 -46
- package/dist/src/foundation/structured-agent-runtime/backpressure.js +0 -118
- package/dist/src/foundation/structured-agent-runtime/commands.d.ts +0 -52
- package/dist/src/foundation/structured-agent-runtime/commands.js +0 -164
- package/dist/src/foundation/structured-agent-runtime/handshake.d.ts +0 -41
- package/dist/src/foundation/structured-agent-runtime/handshake.js +0 -151
- package/dist/src/foundation/structured-agent-runtime/index.d.ts +0 -5
- package/dist/src/foundation/structured-agent-runtime/index.js +0 -5
- package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts +0 -37
- package/dist/src/foundation/structured-agent-runtime/reconnection.js +0 -129
- package/dist/src/foundation/structured-agent-runtime/state.d.ts +0 -56
- package/dist/src/foundation/structured-agent-runtime/state.js +0 -118
- package/dist/src/foundation/supervision/index.d.ts +0 -3
- package/dist/src/foundation/supervision/index.js +0 -3
- package/dist/src/foundation/supervision/main.d.ts +0 -1
- package/dist/src/foundation/supervision/main.js +0 -41
- package/dist/src/foundation/supervision/paths.d.ts +0 -1
- package/dist/src/foundation/supervision/paths.js +0 -1
- package/dist/src/foundation/supervision/server.d.ts +0 -22
- package/dist/src/foundation/supervision/server.js +0 -451
- package/dist/src/foundation/ui-apps/contracts.d.ts +0 -42
- package/dist/src/foundation/ui-apps/host.d.ts +0 -42
- package/dist/src/foundation/ui-apps/host.js +0 -152
- package/dist/src/foundation/ui-apps/index.d.ts +0 -3
- package/dist/src/foundation/ui-apps/index.js +0 -3
- package/dist/src/foundation/ui-apps/registry.d.ts +0 -11
- package/dist/src/foundation/ui-apps/registry.js +0 -32
- package/dist/src/foundation/ui-components/dialog-panel.d.ts +0 -36
- package/dist/src/foundation/ui-components/dialog-panel.js +0 -47
- package/dist/src/foundation/ui-components/frame.d.ts +0 -21
- package/dist/src/foundation/ui-components/frame.js +0 -54
- package/dist/src/foundation/ui-components/index.d.ts +0 -18
- package/dist/src/foundation/ui-components/index.js +0 -18
- package/dist/src/foundation/ui-components/line-input.d.ts +0 -74
- package/dist/src/foundation/ui-components/line-input.js +0 -245
- package/dist/src/foundation/ui-components/list-block.d.ts +0 -66
- package/dist/src/foundation/ui-components/list-block.js +0 -176
- package/dist/src/foundation/ui-components/list-view.d.ts +0 -66
- package/dist/src/foundation/ui-components/list-view.js +0 -76
- package/dist/src/foundation/ui-components/mouse.d.ts +0 -15
- package/dist/src/foundation/ui-components/mouse.js +0 -46
- package/dist/src/foundation/ui-components/scrollbar.d.ts +0 -62
- package/dist/src/foundation/ui-components/scrollbar.js +0 -102
- package/dist/src/foundation/ui-components/shortcuts.d.ts +0 -57
- package/dist/src/foundation/ui-components/shortcuts.js +0 -81
- package/dist/src/foundation/ui-components/spans.d.ts +0 -7
- package/dist/src/foundation/ui-components/spans.js +0 -59
- package/dist/src/foundation/ui-components/surface.d.ts +0 -20
- package/dist/src/foundation/ui-components/surface.js +0 -38
- package/dist/src/foundation/ui-components/text.d.ts +0 -24
- package/dist/src/foundation/ui-components/text.js +0 -123
- package/dist/src/foundation/ui-components/theme.d.ts +0 -23
- package/dist/src/foundation/ui-components/theme.js +0 -13
- package/dist/src/foundation/ui-components/value-menu.d.ts +0 -41
- package/dist/src/foundation/ui-components/value-menu.js +0 -33
- package/dist/src/foundation/workspace-contracts/index.d.ts +0 -2
- package/dist/src/foundation/workspace-contracts/index.js +0 -2
- package/dist/src/foundation/workspace-contracts/model.d.ts +0 -248
- package/dist/src/foundation/workspace-contracts/model.js +0 -2
- package/dist/src/foundation/workspace-contracts/validation.d.ts +0 -13
- package/dist/src/foundation/workspace-contracts/validation.js +0 -335
- package/dist/src/product-identity.d.ts +0 -37
- package/dist/src/product-identity.js +0 -150
- package/dist/src/product-identity.json +0 -99
- package/docs/manual-transparent-checkpoint.md +0 -53
- /package/dist/{src/foundation/agent-engine-contracts/domain.js → app/session-shell/paste-helper.d.ts} +0 -0
- /package/dist/{src/foundation/agent-engine-contracts/ports.js → app/session-shell/paste-text-worker.d.ts} +0 -0
- /package/dist/{src/foundation/lifecycle/commands.js → app/session-shell/paste-types.js} +0 -0
- /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → app/session-shell/response-copy-helper.d.ts} +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → contracts/agent-engine/domain.js} +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
- /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
- /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
- /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
- /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
- /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
- /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
- /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
- /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SGR mouse reporting. A screen that wants hover, click, and drag needs the
|
|
3
|
+
* terminal to send reports; nothing else in A1 turns this on, and the sequences
|
|
4
|
+
* are paired so the terminal is always left as it was found.
|
|
5
|
+
*/
|
|
6
|
+
export const MOUSE_TRACKING_ON = "\u001b[?1006h\u001b[?1000h\u001b[?1003h\u001b[?1004h";
|
|
7
|
+
export const MOUSE_TRACKING_OFF = "\u001b[?1004l\u001b[?1003l\u001b[?1000l\u001b[?1006l";
|
|
8
|
+
const SGR_PATTERN = /\u001b\[<(\d+);(\d+);(\d+)([Mm])/g;
|
|
9
|
+
/** Extracts SGR mouse reports, leaving any keyboard input untouched. */
|
|
10
|
+
export function parseMouseInput(data) {
|
|
11
|
+
if (!data.includes("\u001b[<"))
|
|
12
|
+
return { events: [], rest: data };
|
|
13
|
+
const events = [];
|
|
14
|
+
let rest = "";
|
|
15
|
+
let index = 0;
|
|
16
|
+
SGR_PATTERN.lastIndex = 0;
|
|
17
|
+
for (let match = SGR_PATTERN.exec(data); match !== null; match = SGR_PATTERN.exec(data)) {
|
|
18
|
+
rest += data.slice(index, match.index);
|
|
19
|
+
index = match.index + match[0].length;
|
|
20
|
+
const code = Number.parseInt(match[1] ?? "", 10);
|
|
21
|
+
const column = Number.parseInt(match[2] ?? "", 10);
|
|
22
|
+
const row = Number.parseInt(match[3] ?? "", 10);
|
|
23
|
+
const released = match[4] === "m";
|
|
24
|
+
if (!Number.isInteger(code) || !Number.isInteger(column) || !Number.isInteger(row))
|
|
25
|
+
continue;
|
|
26
|
+
const event = toEvent(code, column, row, released);
|
|
27
|
+
if (event !== null)
|
|
28
|
+
events.push(event);
|
|
29
|
+
}
|
|
30
|
+
rest += data.slice(index);
|
|
31
|
+
return { events: Object.freeze(events), rest };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Routes every SGR report independently, preserving keyboard bytes and mouse
|
|
35
|
+
* reports the caller does not claim even when they share one physical chunk.
|
|
36
|
+
*/
|
|
37
|
+
export function routeMouseInput(data, claim) {
|
|
38
|
+
if (!data.includes("\u001b[<"))
|
|
39
|
+
return { data, consumed: false };
|
|
40
|
+
let output = "";
|
|
41
|
+
let index = 0;
|
|
42
|
+
let consumed = false;
|
|
43
|
+
// Concurrency: reentrant routing may deliver a report to another component using this parser.
|
|
44
|
+
const pattern = new RegExp(SGR_PATTERN.source, "g");
|
|
45
|
+
for (let match = pattern.exec(data); match !== null; match = pattern.exec(data)) {
|
|
46
|
+
output += data.slice(index, match.index);
|
|
47
|
+
index = match.index + match[0].length;
|
|
48
|
+
const event = toEvent(Number(match[1]), Number(match[2]), Number(match[3]), match[4] === "m");
|
|
49
|
+
if (event === null || claim(event, match[0]))
|
|
50
|
+
consumed = true;
|
|
51
|
+
else
|
|
52
|
+
output += match[0];
|
|
53
|
+
}
|
|
54
|
+
output += data.slice(index);
|
|
55
|
+
return { data: output, consumed };
|
|
56
|
+
}
|
|
57
|
+
function toEvent(code, column, row, released) {
|
|
58
|
+
if ((code & 66) === 66)
|
|
59
|
+
return null;
|
|
60
|
+
if ((code & 64) !== 0) {
|
|
61
|
+
const kind = (code & 1) === 0 ? "wheel-up" : "wheel-down";
|
|
62
|
+
return { kind, button: 0, column, row };
|
|
63
|
+
}
|
|
64
|
+
const button = code & 3;
|
|
65
|
+
if ((code & 32) !== 0)
|
|
66
|
+
return { kind: "motion", button, column, row };
|
|
67
|
+
if (released)
|
|
68
|
+
return { kind: "release", button, column, row };
|
|
69
|
+
if (button === 3)
|
|
70
|
+
return { kind: "release", button: 0, column, row };
|
|
71
|
+
return { kind: "press", button, column, row };
|
|
72
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type ProgressStatusMarker = "…" | "...";
|
|
2
|
+
export interface ProgressStatusFrameStyles {
|
|
3
|
+
readonly muted: (text: string) => string;
|
|
4
|
+
readonly accent: (text: string) => string;
|
|
5
|
+
}
|
|
6
|
+
/** Returns spinner-backed status text with the selected terminal progress marker. */
|
|
7
|
+
export declare function progressStatusText(message: string, marker?: ProgressStatusMarker): string;
|
|
8
|
+
/** Paints one width-stable, grapheme-safe frame of the quiet progress-label sweep. */
|
|
9
|
+
export declare function progressStatusFrame(message: string, phase: number, styles: ProgressStatusFrameStyles): string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const GRAPHEMES = new Intl.Segmenter(undefined, { granularity: "grapheme" });
|
|
2
|
+
const HIGHLIGHT_WIDTH = 2;
|
|
3
|
+
const UPDATES_PER_STEP = 3;
|
|
4
|
+
/** Returns spinner-backed status text with the selected terminal progress marker. */
|
|
5
|
+
export function progressStatusText(message, marker = "…") {
|
|
6
|
+
return `${message.replace(/(?:…|\.+)$/u, "")}${marker}`;
|
|
7
|
+
}
|
|
8
|
+
/** Paints one width-stable, grapheme-safe frame of the quiet progress-label sweep. */
|
|
9
|
+
export function progressStatusFrame(message, phase, styles) {
|
|
10
|
+
const marker = message.endsWith("…") ? "…" : "";
|
|
11
|
+
const label = marker === "" ? message : message.slice(0, -marker.length);
|
|
12
|
+
const graphemes = [...GRAPHEMES.segment(label)].map(segment => segment.segment);
|
|
13
|
+
if (graphemes.length === 0)
|
|
14
|
+
return paint(marker, styles.muted);
|
|
15
|
+
const step = Math.floor(Math.max(0, phase) / UPDATES_PER_STEP) % (graphemes.length * 2);
|
|
16
|
+
if (step >= graphemes.length)
|
|
17
|
+
return paint(`${label}${marker}`, styles.muted);
|
|
18
|
+
const before = graphemes.slice(0, step).join("");
|
|
19
|
+
const highlight = graphemes.slice(step, step + HIGHLIGHT_WIDTH).join("");
|
|
20
|
+
const after = `${graphemes.slice(step + HIGHLIGHT_WIDTH).join("")}${marker}`;
|
|
21
|
+
return `${paint(before, styles.muted)}${paint(highlight, styles.accent)}${paint(after, styles.muted)}`;
|
|
22
|
+
}
|
|
23
|
+
function paint(text, style) {
|
|
24
|
+
return text === "" ? "" : style(text);
|
|
25
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type UiTheme } from "./theme.js";
|
|
2
|
+
export declare const PROMPT_GLYPH = "\u276F ";
|
|
3
|
+
export declare const PROMPT_PREFIX_WIDTH = 2;
|
|
4
|
+
export declare function promptRuleText(text: string): string;
|
|
5
|
+
export declare function promptRule(width: number): string;
|
|
6
|
+
export declare function promptArrow(text: string, theme: Pick<UiTheme, "fg">): string;
|
|
7
|
+
export interface PromptInputBody {
|
|
8
|
+
readonly rows: readonly string[];
|
|
9
|
+
/** Semantic border fragments retain editor history and scroll annotations. */
|
|
10
|
+
readonly topRule?: string | undefined;
|
|
11
|
+
readonly bottomRule?: string | undefined;
|
|
12
|
+
readonly after?: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
export interface PromptInputMetrics {
|
|
15
|
+
readonly measure: (text: string) => number;
|
|
16
|
+
readonly truncate: (text: string, width: number) => string;
|
|
17
|
+
}
|
|
18
|
+
/** Composes shared input chrome around controller-owned body rows without owning editing state. */
|
|
19
|
+
export declare class PromptInput {
|
|
20
|
+
readonly theme: Pick<UiTheme, "fg">;
|
|
21
|
+
readonly metrics: PromptInputMetrics;
|
|
22
|
+
constructor(theme?: Pick<UiTheme, "fg">, metrics?: PromptInputMetrics);
|
|
23
|
+
styleRule(text: string): string;
|
|
24
|
+
geometry(width: number, padding?: number): {
|
|
25
|
+
prefixWidth: number;
|
|
26
|
+
innerWidth: number;
|
|
27
|
+
paddingX: number;
|
|
28
|
+
contentWidth: number;
|
|
29
|
+
layoutWidth: number;
|
|
30
|
+
};
|
|
31
|
+
render(width: number, renderBody: (innerWidth: number) => PromptInputBody, ruled?: boolean, padding?: number): string[];
|
|
32
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { displayWidth, truncateToWidth } from "./text.js";
|
|
2
|
+
import { PLAIN_THEME } from "./theme.js";
|
|
3
|
+
export const PROMPT_GLYPH = "❯ ";
|
|
4
|
+
export const PROMPT_PREFIX_WIDTH = 2;
|
|
5
|
+
export function promptRuleText(text) {
|
|
6
|
+
return `\u001b[38;2;154;160;166m${text}\u001b[39m`;
|
|
7
|
+
}
|
|
8
|
+
export function promptRule(width) {
|
|
9
|
+
return promptRuleText("─".repeat(Math.max(0, width)));
|
|
10
|
+
}
|
|
11
|
+
export function promptArrow(text, theme) {
|
|
12
|
+
return theme.fg("muted", text);
|
|
13
|
+
}
|
|
14
|
+
/** Composes shared input chrome around controller-owned body rows without owning editing state. */
|
|
15
|
+
export class PromptInput {
|
|
16
|
+
theme;
|
|
17
|
+
metrics;
|
|
18
|
+
constructor(theme = PLAIN_THEME, metrics = { measure: displayWidth, truncate: truncateToWidth }) { this.theme = theme; this.metrics = metrics; }
|
|
19
|
+
styleRule(text) { return promptRuleText(text); }
|
|
20
|
+
geometry(width, padding = 0) {
|
|
21
|
+
const prefixWidth = Math.min(PROMPT_PREFIX_WIDTH, Math.max(0, width));
|
|
22
|
+
// Compatibility: editor wrapping needs room for a two-cell grapheme plus its cursor cell.
|
|
23
|
+
// Lay out against a safe virtual width, then clip only at the shared frame boundary.
|
|
24
|
+
const innerWidth = Math.max(3 + padding * 2, width - prefixWidth);
|
|
25
|
+
const paddingX = Math.min(padding, Math.max(0, Math.floor((innerWidth - 1) / 2)));
|
|
26
|
+
const contentWidth = Math.max(1, innerWidth - paddingX * 2);
|
|
27
|
+
return { prefixWidth, innerWidth, paddingX, contentWidth, layoutWidth: Math.max(1, contentWidth - (paddingX ? 0 : 1)) };
|
|
28
|
+
}
|
|
29
|
+
render(width, renderBody, ruled = true, padding = 0) {
|
|
30
|
+
if (width <= 0)
|
|
31
|
+
return [];
|
|
32
|
+
const { prefixWidth, innerWidth } = this.geometry(width, padding);
|
|
33
|
+
const body = renderBody(innerWidth);
|
|
34
|
+
const fit = (row) => {
|
|
35
|
+
const clipped = this.metrics.truncate(row, width);
|
|
36
|
+
return clipped + " ".repeat(Math.max(0, width - this.metrics.measure(clipped)));
|
|
37
|
+
};
|
|
38
|
+
const rows = body.rows.map((row, index) => fit(`${index === 0
|
|
39
|
+
? promptArrow(PROMPT_GLYPH, this.theme)
|
|
40
|
+
: " ".repeat(prefixWidth)}${row}`));
|
|
41
|
+
const rule = (fragment) => fragment === undefined
|
|
42
|
+
? promptRule(width)
|
|
43
|
+
: fit(fragment + promptRule(Math.max(0, width - this.metrics.measure(fragment))));
|
|
44
|
+
return [
|
|
45
|
+
...(ruled ? [rule(body.topRule)] : []),
|
|
46
|
+
...rows,
|
|
47
|
+
...(ruled ? [rule(body.bottomRule)] : []),
|
|
48
|
+
...(body.after ?? []).map(row => fit(`${" ".repeat(prefixWidth)}${row}`)),
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One scrollbar for every scrollable surface. Hover and drag belong to a named
|
|
3
|
+
* rail rather than to a global, because two scrollable surfaces can be visible
|
|
4
|
+
* at once and a shared flag lights up the wrong one.
|
|
5
|
+
*/
|
|
6
|
+
export interface ScrollbarGeometry {
|
|
7
|
+
/** Rows in the track. */
|
|
8
|
+
readonly trackHeight: number;
|
|
9
|
+
/** Thumb height in rows, at least one. */
|
|
10
|
+
readonly thumbHeight: number;
|
|
11
|
+
/** Zero-based row of the thumb's top within the track. */
|
|
12
|
+
readonly thumbTop: number;
|
|
13
|
+
/** Highest scroll position the content allows. */
|
|
14
|
+
readonly maxScroll: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ScrollbarInput {
|
|
17
|
+
readonly contentLength: number;
|
|
18
|
+
readonly viewportHeight: number;
|
|
19
|
+
readonly scroll: number;
|
|
20
|
+
readonly trackHeight: number;
|
|
21
|
+
}
|
|
22
|
+
export type ScrollbarAppearance = "auto" | "always" | "hidden";
|
|
23
|
+
export type ScrollbarStyle = "thin" | "thick";
|
|
24
|
+
export type ScrollbarSpeed = "normal" | "fast" | "high";
|
|
25
|
+
/** Wheel distance: normal (3), fast (6), high as normal + fast (9). */
|
|
26
|
+
export declare function scrollbarWheelRows(speed: ScrollbarSpeed): number;
|
|
27
|
+
/** Selection edge distance per auto-scroll tick: normal (1), fast (2), high (3). */
|
|
28
|
+
export declare function scrollbarSelectionRows(speed: ScrollbarSpeed): number;
|
|
29
|
+
export interface ScrollbarPresentationInput {
|
|
30
|
+
readonly geometry: ScrollbarGeometry | null;
|
|
31
|
+
readonly appearance: ScrollbarAppearance;
|
|
32
|
+
readonly style: ScrollbarStyle;
|
|
33
|
+
readonly hovered: boolean;
|
|
34
|
+
readonly dragging: boolean;
|
|
35
|
+
readonly activeUntil: number;
|
|
36
|
+
readonly now: number;
|
|
37
|
+
}
|
|
38
|
+
export interface ScrollbarPresentation {
|
|
39
|
+
readonly visible: boolean;
|
|
40
|
+
readonly reservesSpace: boolean;
|
|
41
|
+
readonly trackGlyph: "│" | "┃";
|
|
42
|
+
readonly thumbGlyph: "│" | "┃";
|
|
43
|
+
}
|
|
44
|
+
/** Pure appearance decision; activity time is supplied so tests own the clock. */
|
|
45
|
+
export declare function scrollbarPresentation(input: ScrollbarPresentationInput): ScrollbarPresentation;
|
|
46
|
+
/** Null when the content fits: no scrollbar is drawn and no width is reserved. */
|
|
47
|
+
export declare function scrollbarGeometry(input: ScrollbarInput): ScrollbarGeometry | null;
|
|
48
|
+
export declare function scrollbarReservesSpace(geometry: ScrollbarGeometry | null): boolean;
|
|
49
|
+
/** True when this track row is part of the thumb. */
|
|
50
|
+
export declare function isThumbRow(geometry: ScrollbarGeometry | null, trackRow: number): boolean;
|
|
51
|
+
/** Scroll position for a thumb dragged to a track row. */
|
|
52
|
+
export declare function scrollForThumbRow(geometry: ScrollbarGeometry | null, trackRow: number): number;
|
|
53
|
+
/** Scroll position after paging on the track above or below the thumb. */
|
|
54
|
+
export declare function scrollForTrackPage(geometry: ScrollbarGeometry | null, trackRow: number, scroll: number, viewportHeight: number): number;
|
|
55
|
+
export interface RailPosition {
|
|
56
|
+
/** Identity of this rail. Two surfaces never share one. */
|
|
57
|
+
readonly key: string;
|
|
58
|
+
/** Column the rail is drawn in, one-based. */
|
|
59
|
+
readonly column: number;
|
|
60
|
+
/** First row of the track within the surface, zero-based. */
|
|
61
|
+
readonly rowStart: number;
|
|
62
|
+
readonly trackHeight: number;
|
|
63
|
+
}
|
|
64
|
+
export interface RailPointer {
|
|
65
|
+
readonly column: number;
|
|
66
|
+
readonly row: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Hover and drag state for every rail on screen. State is keyed by rail, so a
|
|
70
|
+
* pointer over one rail cannot make another appear hot, and a drag started on
|
|
71
|
+
* one rail cannot be continued by a report addressed to another.
|
|
72
|
+
*/
|
|
73
|
+
export declare class ScrollbarRails {
|
|
74
|
+
#private;
|
|
75
|
+
noteActivity(key: string, now: number, lingerMs?: number): void;
|
|
76
|
+
isRecentlyActive(key: string, now: number): boolean;
|
|
77
|
+
isHovered(key: string): boolean;
|
|
78
|
+
isDragging(key: string): boolean;
|
|
79
|
+
get draggingKey(): string | null;
|
|
80
|
+
/** Records the pointer position. Returns the rail it is over, if any. */
|
|
81
|
+
notePointer(rails: readonly RailPosition[], pointer: RailPointer): string | null;
|
|
82
|
+
/** Starts a drag when the pointer is on that rail's thumb. */
|
|
83
|
+
beginDrag(rail: RailPosition, geometry: ScrollbarGeometry | null, pointer: RailPointer): boolean;
|
|
84
|
+
/** Scroll position for a drag in progress, or null when this rail is not being dragged. */
|
|
85
|
+
dragTo(rail: RailPosition, geometry: ScrollbarGeometry | null, pointer: RailPointer): number | null;
|
|
86
|
+
endDrag(): void;
|
|
87
|
+
clear(): void;
|
|
88
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One scrollbar for every scrollable surface. Hover and drag belong to a named
|
|
3
|
+
* rail rather than to a global, because two scrollable surfaces can be visible
|
|
4
|
+
* at once and a shared flag lights up the wrong one.
|
|
5
|
+
*/
|
|
6
|
+
/** Wheel distance: normal (3), fast (6), high as normal + fast (9). */
|
|
7
|
+
export function scrollbarWheelRows(speed) {
|
|
8
|
+
return speed === "high" ? 9 : speed === "fast" ? 6 : 3;
|
|
9
|
+
}
|
|
10
|
+
/** Selection edge distance per auto-scroll tick: normal (1), fast (2), high (3). */
|
|
11
|
+
export function scrollbarSelectionRows(speed) {
|
|
12
|
+
return speed === "high" ? 3 : speed === "fast" ? 2 : 1;
|
|
13
|
+
}
|
|
14
|
+
/** Pure appearance decision; activity time is supplied so tests own the clock. */
|
|
15
|
+
export function scrollbarPresentation(input) {
|
|
16
|
+
const overflowing = input.geometry !== null;
|
|
17
|
+
// Invariant: auto/always reserve the final rail cell even while content fits.
|
|
18
|
+
// The blank gutter prevents prompt timestamps from touching the terminal edge
|
|
19
|
+
// and keeps later scrollbar appearance from reflowing the transcript.
|
|
20
|
+
const reservesSpace = input.appearance !== "hidden";
|
|
21
|
+
const visible = overflowing && reservesSpace && (input.appearance === "always"
|
|
22
|
+
|| input.hovered
|
|
23
|
+
|| input.dragging
|
|
24
|
+
|| (input.activeUntil > 0 && input.now <= input.activeUntil));
|
|
25
|
+
const thick = input.style === "thick";
|
|
26
|
+
return {
|
|
27
|
+
visible,
|
|
28
|
+
reservesSpace,
|
|
29
|
+
trackGlyph: thick ? "┃" : "│",
|
|
30
|
+
thumbGlyph: thick || input.hovered || input.dragging ? "┃" : "│",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Null when the content fits: no scrollbar is drawn and no width is reserved. */
|
|
34
|
+
export function scrollbarGeometry(input) {
|
|
35
|
+
const { contentLength, viewportHeight, trackHeight } = input;
|
|
36
|
+
if (trackHeight <= 0 || viewportHeight <= 0)
|
|
37
|
+
return null;
|
|
38
|
+
if (contentLength <= viewportHeight)
|
|
39
|
+
return null;
|
|
40
|
+
const maxScroll = contentLength - viewportHeight;
|
|
41
|
+
const scroll = Math.min(Math.max(input.scroll, 0), maxScroll);
|
|
42
|
+
const thumbHeight = Math.max(1, Math.min(trackHeight, Math.round(trackHeight * viewportHeight / contentLength)));
|
|
43
|
+
const travel = trackHeight - thumbHeight;
|
|
44
|
+
const thumbTop = maxScroll === 0 ? 0 : Math.min(travel, Math.round(travel * scroll / maxScroll));
|
|
45
|
+
return { trackHeight, thumbHeight, thumbTop, maxScroll };
|
|
46
|
+
}
|
|
47
|
+
export function scrollbarReservesSpace(geometry) {
|
|
48
|
+
return geometry !== null;
|
|
49
|
+
}
|
|
50
|
+
/** True when this track row is part of the thumb. */
|
|
51
|
+
export function isThumbRow(geometry, trackRow) {
|
|
52
|
+
if (geometry === null)
|
|
53
|
+
return false;
|
|
54
|
+
return trackRow >= geometry.thumbTop && trackRow < geometry.thumbTop + geometry.thumbHeight;
|
|
55
|
+
}
|
|
56
|
+
/** Scroll position for a thumb dragged to a track row. */
|
|
57
|
+
export function scrollForThumbRow(geometry, trackRow) {
|
|
58
|
+
if (geometry === null)
|
|
59
|
+
return 0;
|
|
60
|
+
const travel = geometry.trackHeight - geometry.thumbHeight;
|
|
61
|
+
if (travel <= 0)
|
|
62
|
+
return 0;
|
|
63
|
+
const clamped = Math.min(Math.max(trackRow, 0), travel);
|
|
64
|
+
return Math.round(clamped * geometry.maxScroll / travel);
|
|
65
|
+
}
|
|
66
|
+
/** Scroll position after paging on the track above or below the thumb. */
|
|
67
|
+
export function scrollForTrackPage(geometry, trackRow, scroll, viewportHeight) {
|
|
68
|
+
if (geometry === null)
|
|
69
|
+
return scroll;
|
|
70
|
+
const page = Math.max(1, viewportHeight);
|
|
71
|
+
const next = trackRow < geometry.thumbTop ? scroll - page : scroll + page;
|
|
72
|
+
return Math.min(Math.max(next, 0), geometry.maxScroll);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Hover and drag state for every rail on screen. State is keyed by rail, so a
|
|
76
|
+
* pointer over one rail cannot make another appear hot, and a drag started on
|
|
77
|
+
* one rail cannot be continued by a report addressed to another.
|
|
78
|
+
*/
|
|
79
|
+
export class ScrollbarRails {
|
|
80
|
+
#hovered = new Set();
|
|
81
|
+
#activeUntil = new Map();
|
|
82
|
+
#dragging;
|
|
83
|
+
noteActivity(key, now, lingerMs = 900) {
|
|
84
|
+
this.#activeUntil.set(key, Math.max(this.#activeUntil.get(key) ?? 0, now + Math.max(0, lingerMs)));
|
|
85
|
+
}
|
|
86
|
+
isRecentlyActive(key, now) {
|
|
87
|
+
return now <= (this.#activeUntil.get(key) ?? 0);
|
|
88
|
+
}
|
|
89
|
+
isHovered(key) {
|
|
90
|
+
return this.#hovered.has(key);
|
|
91
|
+
}
|
|
92
|
+
isDragging(key) {
|
|
93
|
+
return this.#dragging?.key === key;
|
|
94
|
+
}
|
|
95
|
+
get draggingKey() {
|
|
96
|
+
return this.#dragging?.key ?? null;
|
|
97
|
+
}
|
|
98
|
+
/** Records the pointer position. Returns the rail it is over, if any. */
|
|
99
|
+
notePointer(rails, pointer) {
|
|
100
|
+
this.#hovered.clear();
|
|
101
|
+
for (const rail of rails) {
|
|
102
|
+
if (pointer.column !== rail.column)
|
|
103
|
+
continue;
|
|
104
|
+
const trackRow = pointer.row - rail.rowStart;
|
|
105
|
+
if (trackRow < 0 || trackRow >= rail.trackHeight)
|
|
106
|
+
continue;
|
|
107
|
+
this.#hovered.add(rail.key);
|
|
108
|
+
return rail.key;
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
/** Starts a drag when the pointer is on that rail's thumb. */
|
|
113
|
+
beginDrag(rail, geometry, pointer) {
|
|
114
|
+
if (geometry === null || pointer.column !== rail.column)
|
|
115
|
+
return false;
|
|
116
|
+
const trackRow = pointer.row - rail.rowStart;
|
|
117
|
+
if (!isThumbRow(geometry, trackRow))
|
|
118
|
+
return false;
|
|
119
|
+
this.#dragging = { key: rail.key, grabOffset: trackRow - geometry.thumbTop };
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
/** Scroll position for a drag in progress, or null when this rail is not being dragged. */
|
|
123
|
+
dragTo(rail, geometry, pointer) {
|
|
124
|
+
const dragging = this.#dragging;
|
|
125
|
+
if (dragging === undefined || dragging.key !== rail.key || geometry === null)
|
|
126
|
+
return null;
|
|
127
|
+
return scrollForThumbRow(geometry, pointer.row - rail.rowStart - dragging.grabOffset);
|
|
128
|
+
}
|
|
129
|
+
endDrag() {
|
|
130
|
+
this.#dragging = undefined;
|
|
131
|
+
}
|
|
132
|
+
clear() {
|
|
133
|
+
this.#hovered.clear();
|
|
134
|
+
this.#activeUntil.clear();
|
|
135
|
+
this.#dragging = undefined;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type OrderedTextSelection, type TextSelectionLineContent } from "./text-selection.js";
|
|
2
|
+
/** Bound selected-source retention independently of history length and encoded payload size. */
|
|
3
|
+
export declare const MAX_COPY_SOURCE_UNITS: number;
|
|
4
|
+
export declare const MAX_COPY_ROWS = 65536;
|
|
5
|
+
export type SelectionCopyPrompt = "first" | "continuation" | undefined;
|
|
6
|
+
export interface SelectionCopyRow {
|
|
7
|
+
readonly text: string;
|
|
8
|
+
readonly prompt?: "first" | "continuation";
|
|
9
|
+
}
|
|
10
|
+
/** Immutable selected rows only; safe to transfer to an isolated text preparer. */
|
|
11
|
+
export interface SelectionCopySnapshot {
|
|
12
|
+
readonly selection: OrderedTextSelection;
|
|
13
|
+
readonly revision: number;
|
|
14
|
+
/** Prompt copy/cut already supplies exact expanded text; do not apply transcript chrome stripping. */
|
|
15
|
+
readonly literal?: boolean;
|
|
16
|
+
readonly rows: readonly SelectionCopyRow[];
|
|
17
|
+
readonly sourceUnits: number;
|
|
18
|
+
readonly captureMs?: number;
|
|
19
|
+
readonly rejected?: "size";
|
|
20
|
+
}
|
|
21
|
+
/** Shares the viewport's semantic chrome exclusions with isolated copy preparation. */
|
|
22
|
+
export declare function selectionCopyLineContent(text: string, prompt: SelectionCopyPrompt): TextSelectionLineContent;
|
|
23
|
+
/** Extracts one snapshot row with the existing grapheme/newline policy; run expensive rows off-thread. */
|
|
24
|
+
export declare function selectionCopyRowText(snapshot: Pick<SelectionCopySnapshot, "selection" | "literal">, row: SelectionCopyRow, index: number): string;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { textSelectionText, usefulTextLineContent } from "./text-selection.js";
|
|
2
|
+
import { stripAnsi } from "./text.js";
|
|
3
|
+
/** Bound selected-source retention independently of history length and encoded payload size. */
|
|
4
|
+
export const MAX_COPY_SOURCE_UNITS = 32 * 1024 * 1024;
|
|
5
|
+
export const MAX_COPY_ROWS = 65_536;
|
|
6
|
+
/** Shares the viewport's semantic chrome exclusions with isolated copy preparation. */
|
|
7
|
+
export function selectionCopyLineContent(text, prompt) {
|
|
8
|
+
const plain = stripAnsi(text);
|
|
9
|
+
if (prompt !== undefined) {
|
|
10
|
+
if (prompt === "first") {
|
|
11
|
+
const timestamp = /\s+\d{2}:\d{2}\s*$/.exec(plain);
|
|
12
|
+
if (timestamp !== null)
|
|
13
|
+
return usefulTextLineContent(plain.slice(0, timestamp.index), 3);
|
|
14
|
+
}
|
|
15
|
+
return usefulTextLineContent(plain, 3);
|
|
16
|
+
}
|
|
17
|
+
const from = plain.trim().length === 0 || (plain.startsWith(" ") && !plain.startsWith(" ")) ? 2 : 1;
|
|
18
|
+
if (plain.trim().length === 0)
|
|
19
|
+
return { from, to: from + 1 };
|
|
20
|
+
return usefulTextLineContent(plain, from);
|
|
21
|
+
}
|
|
22
|
+
/** Extracts one snapshot row with the existing grapheme/newline policy; run expensive rows off-thread. */
|
|
23
|
+
export function selectionCopyRowText(snapshot, row, index) {
|
|
24
|
+
if (snapshot.literal)
|
|
25
|
+
return row.text;
|
|
26
|
+
let plain = stripAnsi(row.text);
|
|
27
|
+
if (row.prompt === "first") {
|
|
28
|
+
const timestamp = /\s+\d{2}:\d{2}\s*$/.exec(plain);
|
|
29
|
+
if (timestamp !== null)
|
|
30
|
+
plain = plain.slice(0, timestamp.index);
|
|
31
|
+
}
|
|
32
|
+
const from = row.prompt !== undefined ? 3 : plain.startsWith(" ") && !plain.startsWith(" ") ? 2 : 1;
|
|
33
|
+
// Performance: trailing chrome is excluded before extraction; full-row copy need not measure every grapheme.
|
|
34
|
+
plain = plain.trimEnd();
|
|
35
|
+
return textSelectionText({
|
|
36
|
+
start: { line: 0, column: index === snapshot.selection.start.line ? snapshot.selection.start.column : 0 },
|
|
37
|
+
end: { line: 0, column: index === snapshot.selection.end.line ? snapshot.selection.end.column : Number.MAX_SAFE_INTEGER },
|
|
38
|
+
}, [plain], () => ({ from }));
|
|
39
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type SemanticShortcutHint } from "../../contracts/presentation/index.js";
|
|
2
|
+
import type { UiTheme } from "./theme.js";
|
|
3
|
+
export type ShortcutHintEntry = SemanticShortcutHint;
|
|
4
|
+
/** Returns an unstyled modal instruction row for width-aware clipping. */
|
|
5
|
+
export declare function shortcutHintsText(entries: readonly ShortcutHintEntry[], indent?: number): string;
|
|
6
|
+
/** Paints one modal instruction row without decorative separator glyphs. */
|
|
7
|
+
export declare function renderShortcutHints(entries: readonly ShortcutHintEntry[], theme: Pick<UiTheme, "fg">, indent?: number): string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { renderSemanticShortcutHints, } from "../../contracts/presentation/index.js";
|
|
2
|
+
/** Returns an unstyled modal instruction row for width-aware clipping. */
|
|
3
|
+
export function shortcutHintsText(entries, indent = 0) {
|
|
4
|
+
return renderSemanticShortcutHints(entries, { key: text => text, action: text => text }, indent);
|
|
5
|
+
}
|
|
6
|
+
/** Paints one modal instruction row without decorative separator glyphs. */
|
|
7
|
+
export function renderShortcutHints(entries, theme, indent = 0) {
|
|
8
|
+
return renderSemanticShortcutHints(entries, {
|
|
9
|
+
key: text => theme.fg("dim", text),
|
|
10
|
+
action: text => theme.fg("muted", text),
|
|
11
|
+
}, indent);
|
|
12
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shortcuts as declared data. Dispatch resolves a key through declarations
|
|
3
|
+
* rather than inline comparisons, conflicts are reported when the registry is
|
|
4
|
+
* assembled, and any listing is generated from the same declarations — so a
|
|
5
|
+
* listed shortcut is one dispatch would actually invoke.
|
|
6
|
+
*/
|
|
7
|
+
import type { ShortcutHintEntry } from "./shortcut-hints.js";
|
|
8
|
+
export interface ShortcutDeclaration {
|
|
9
|
+
/** Key token, for example `up`, `shift+down`, `ctrl+c`, or a literal character. */
|
|
10
|
+
readonly key: string;
|
|
11
|
+
/** Screen this applies to, or `global` for every screen. */
|
|
12
|
+
readonly scope: string;
|
|
13
|
+
readonly description: string;
|
|
14
|
+
/** Grouping label for the listing. */
|
|
15
|
+
readonly section?: string;
|
|
16
|
+
/**
|
|
17
|
+
* How this key reads on a screen's hint line, when it belongs there. Keys that
|
|
18
|
+
* do one thing together — the two arrows, enter and space — declare the same
|
|
19
|
+
* pair and are shown once.
|
|
20
|
+
*/
|
|
21
|
+
readonly hint?: {
|
|
22
|
+
readonly keys: string;
|
|
23
|
+
readonly does: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare const GLOBAL_SCOPE = "global";
|
|
27
|
+
export interface ShortcutConflict {
|
|
28
|
+
readonly key: string;
|
|
29
|
+
readonly scopes: readonly [string, string];
|
|
30
|
+
readonly descriptions: readonly [string, string];
|
|
31
|
+
readonly kind: "duplicate" | "shadowed";
|
|
32
|
+
}
|
|
33
|
+
export interface ShortcutRegistryResult {
|
|
34
|
+
readonly declarations: readonly ShortcutDeclaration[];
|
|
35
|
+
readonly conflicts: readonly ShortcutConflict[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Assembles declarations and reports every key claimed twice in overlapping
|
|
39
|
+
* scopes. A screen claiming a global key is reported as shadowed rather than
|
|
40
|
+
* silently resolved by declaration order.
|
|
41
|
+
*/
|
|
42
|
+
export declare function assembleShortcuts(declarations: readonly ShortcutDeclaration[]): ShortcutRegistryResult;
|
|
43
|
+
export declare function assertNoShortcutConflicts(result: ShortcutRegistryResult): void;
|
|
44
|
+
/** Keeps shortcut dispatch and reader-facing listings derived from one ordered declaration set. */
|
|
45
|
+
export declare class ShortcutRegistry<Action extends string = string> {
|
|
46
|
+
#private;
|
|
47
|
+
declare(declaration: ShortcutDeclaration, action: Action): void;
|
|
48
|
+
/** The action this key invokes in this scope, preferring a screen over a global. */
|
|
49
|
+
resolve(key: string, scope: string): Action | null;
|
|
50
|
+
assemble(): ShortcutRegistryResult;
|
|
51
|
+
/**
|
|
52
|
+
* The hint line, in the order the screen declares its keys. It is rendered from
|
|
53
|
+
* the same declarations dispatch reads, so a key cannot be described here and
|
|
54
|
+
* bound to something else, or bound and never mentioned.
|
|
55
|
+
*/
|
|
56
|
+
hintEntries(scope: string): readonly ShortcutHintEntry[];
|
|
57
|
+
hint(scope: string, separator?: string): string;
|
|
58
|
+
/** The listing, derived from the declarations dispatch reads. */
|
|
59
|
+
list(scope?: string): readonly ShortcutDeclaration[];
|
|
60
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shortcuts as declared data. Dispatch resolves a key through declarations
|
|
3
|
+
* rather than inline comparisons, conflicts are reported when the registry is
|
|
4
|
+
* assembled, and any listing is generated from the same declarations — so a
|
|
5
|
+
* listed shortcut is one dispatch would actually invoke.
|
|
6
|
+
*/
|
|
7
|
+
export const GLOBAL_SCOPE = "global";
|
|
8
|
+
function overlaps(left, right) {
|
|
9
|
+
return left === right || left === GLOBAL_SCOPE || right === GLOBAL_SCOPE;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Assembles declarations and reports every key claimed twice in overlapping
|
|
13
|
+
* scopes. A screen claiming a global key is reported as shadowed rather than
|
|
14
|
+
* silently resolved by declaration order.
|
|
15
|
+
*/
|
|
16
|
+
export function assembleShortcuts(declarations) {
|
|
17
|
+
const conflicts = [];
|
|
18
|
+
for (let left = 0; left < declarations.length; left++) {
|
|
19
|
+
for (let right = left + 1; right < declarations.length; right++) {
|
|
20
|
+
const a = declarations[left];
|
|
21
|
+
const b = declarations[right];
|
|
22
|
+
if (a === undefined || b === undefined)
|
|
23
|
+
continue;
|
|
24
|
+
if (a.key !== b.key || !overlaps(a.scope, b.scope))
|
|
25
|
+
continue;
|
|
26
|
+
conflicts.push({
|
|
27
|
+
key: a.key,
|
|
28
|
+
scopes: [a.scope, b.scope],
|
|
29
|
+
descriptions: [a.description, b.description],
|
|
30
|
+
kind: a.scope === b.scope ? "duplicate" : "shadowed",
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return { declarations: Object.freeze([...declarations]), conflicts: Object.freeze(conflicts) };
|
|
35
|
+
}
|
|
36
|
+
export function assertNoShortcutConflicts(result) {
|
|
37
|
+
const duplicate = result.conflicts.find(conflict => conflict.kind === "duplicate");
|
|
38
|
+
if (duplicate) {
|
|
39
|
+
throw new Error(`shortcut ${duplicate.key} is declared twice in scope ${duplicate.scopes[0]}: `
|
|
40
|
+
+ `"${duplicate.descriptions[0]}" and "${duplicate.descriptions[1]}"`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Keeps shortcut dispatch and reader-facing listings derived from one ordered declaration set. */
|
|
44
|
+
export class ShortcutRegistry {
|
|
45
|
+
#declarations = [];
|
|
46
|
+
#actions = new Map();
|
|
47
|
+
declare(declaration, action) {
|
|
48
|
+
this.#declarations.push(declaration);
|
|
49
|
+
this.#actions.set(`${declaration.scope}\u0000${declaration.key}`, action);
|
|
50
|
+
}
|
|
51
|
+
/** The action this key invokes in this scope, preferring a screen over a global. */
|
|
52
|
+
resolve(key, scope) {
|
|
53
|
+
return this.#actions.get(`${scope}\u0000${key}`) ?? this.#actions.get(`${GLOBAL_SCOPE}\u0000${key}`) ?? null;
|
|
54
|
+
}
|
|
55
|
+
assemble() {
|
|
56
|
+
return assembleShortcuts(this.#declarations);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The hint line, in the order the screen declares its keys. It is rendered from
|
|
60
|
+
* the same declarations dispatch reads, so a key cannot be described here and
|
|
61
|
+
* bound to something else, or bound and never mentioned.
|
|
62
|
+
*/
|
|
63
|
+
hintEntries(scope) {
|
|
64
|
+
const shown = new Map();
|
|
65
|
+
for (const declaration of this.#declarations) {
|
|
66
|
+
if (declaration.hint === undefined)
|
|
67
|
+
continue;
|
|
68
|
+
if (declaration.scope !== scope && declaration.scope !== GLOBAL_SCOPE)
|
|
69
|
+
continue;
|
|
70
|
+
if (!shown.has(declaration.hint.keys))
|
|
71
|
+
shown.set(declaration.hint.keys, declaration.hint.does);
|
|
72
|
+
}
|
|
73
|
+
return Object.freeze([...shown].map(([key, action]) => ({ key, action })));
|
|
74
|
+
}
|
|
75
|
+
hint(scope, separator = " · ") {
|
|
76
|
+
return this.hintEntries(scope).map(({ key, action }) => `${key} ${action}`).join(separator);
|
|
77
|
+
}
|
|
78
|
+
/** The listing, derived from the declarations dispatch reads. */
|
|
79
|
+
list(scope) {
|
|
80
|
+
const inScope = scope === undefined
|
|
81
|
+
? this.#declarations
|
|
82
|
+
: this.#declarations.filter(declaration => declaration.scope === scope || declaration.scope === GLOBAL_SCOPE);
|
|
83
|
+
return Object.freeze([...inScope].sort((left, right) => (left.section ?? "").localeCompare(right.section ?? "") || left.key.localeCompare(right.key)));
|
|
84
|
+
}
|
|
85
|
+
}
|