@timurproko/a1 0.2.6 → 0.2.7-dev.1222
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 +41 -3
- package/bin/automatic-update.js +7 -0
- package/bin/cli.js +4 -0
- package/bin/guardian.js +5 -0
- package/bin/tab-launch-context.d.ts +27 -0
- package/bin/tab-launch-context.js +94 -0
- package/bin/ui.js +107 -59
- package/dist/app/session-shell/clipboard-diagnostics.js +1 -1
- package/dist/app/session-shell/dialog-coordinator.d.ts +42 -0
- package/dist/app/session-shell/dialog-coordinator.js +133 -0
- package/dist/app/session-shell/dock-chrome.d.ts +34 -0
- package/dist/app/session-shell/dock-chrome.js +109 -0
- package/dist/app/session-shell/exit-notice.d.ts +1 -1
- package/dist/app/session-shell/exit-notice.js +1 -1
- package/dist/app/session-shell/extension-surface.d.ts +30 -0
- package/dist/app/session-shell/extension-surface.js +105 -0
- package/dist/app/session-shell/helper-pool.d.ts +3 -5
- package/dist/app/session-shell/helper-pool.js +3 -5
- package/dist/app/session-shell/input-surface-switch.d.ts +36 -0
- package/dist/app/session-shell/input-surface-switch.js +85 -0
- package/dist/app/session-shell/login-interaction.d.ts +27 -0
- package/dist/app/session-shell/login-interaction.js +91 -0
- package/dist/app/session-shell/prompt-submission.d.ts +48 -0
- package/dist/app/session-shell/prompt-submission.js +276 -0
- package/dist/app/session-shell/resident-tab-coordinator.d.ts +38 -0
- package/dist/app/session-shell/resident-tab-coordinator.js +77 -0
- package/dist/app/session-shell/response-copy-helper.js +21 -6
- package/dist/app/session-shell/response-copy-protocol.d.ts +1 -1
- package/dist/app/session-shell/response-copy-transport.d.ts +16 -6
- package/dist/app/session-shell/response-copy-transport.js +69 -17
- package/dist/app/session-shell/session-concern.d.ts +22 -0
- package/dist/app/session-shell/session-concern.js +29 -0
- package/dist/app/session-shell/session-lifecycle.d.ts +29 -0
- package/dist/app/session-shell/session-lifecycle.js +49 -0
- package/dist/app/session-shell/session-shell-root.d.ts +42 -6
- package/dist/app/session-shell/session-shell-root.js +197 -908
- package/dist/app/session-shell/session-shell.d.ts +3 -8
- package/dist/app/session-shell/session-shell.js +327 -835
- package/dist/app/session-shell/session-viewport-controller.d.ts +2 -1
- package/dist/app/session-shell/session-viewport-controller.js +41 -38
- package/dist/app/session-shell/settings-bindings.d.ts +17 -0
- package/dist/app/session-shell/settings-bindings.js +91 -0
- package/dist/app/session-shell/shell-editor-factory.d.ts +27 -0
- package/dist/app/session-shell/shell-editor-factory.js +105 -0
- package/dist/app/session-shell/shell-host.d.ts +6 -0
- package/dist/app/session-shell/shell-host.js +34 -7
- package/dist/app/session-shell/shell-layout.d.ts +64 -0
- package/dist/app/session-shell/shell-layout.js +18 -0
- package/dist/app/session-shell/suggestion-surface.d.ts +25 -0
- package/dist/app/session-shell/suggestion-surface.js +63 -0
- package/dist/app/session-shell/transcript-document.d.ts +78 -0
- package/dist/app/session-shell/transcript-document.js +365 -0
- package/dist/app/session-shell/viewport-layout.d.ts +31 -0
- package/dist/app/session-shell/viewport-layout.js +160 -0
- package/dist/app/session-shell/workflow-output.d.ts +33 -0
- package/dist/app/session-shell/workflow-output.js +174 -0
- package/dist/app/session-shell/workflow-router.d.ts +25 -0
- package/dist/app/session-shell/workflow-router.js +39 -0
- package/dist/cli/dispatch.d.ts +11 -1
- package/dist/cli/dispatch.js +79 -5
- package/dist/cli/tabs-request.d.ts +7 -0
- package/dist/cli/tabs-request.js +1 -0
- package/dist/cli/tabs.d.ts +14 -0
- package/dist/cli/tabs.js +151 -0
- package/dist/cli/version-stats.js +38 -3
- package/dist/composition/owned-settings.d.ts +12 -0
- package/dist/composition/owned-settings.js +36 -0
- package/dist/composition/owned-ui.d.ts +27 -28
- package/dist/composition/owned-ui.js +207 -153
- package/dist/composition/reference-selection-options.d.ts +3 -0
- package/dist/composition/reference-selection-options.js +16 -0
- package/dist/composition/resident-tab-bridge.d.ts +25 -0
- package/dist/composition/resident-tab-bridge.js +180 -0
- package/dist/composition/session-backend.d.ts +19 -0
- package/dist/composition/session-backend.js +1 -0
- package/dist/composition/session-runtime-registry.d.ts +20 -0
- package/dist/composition/session-runtime-registry.js +85 -0
- package/dist/composition/settings-route-host.d.ts +16 -2
- package/dist/composition/settings-route-host.js +42 -17
- package/dist/composition/settings-search-input.d.ts +9 -0
- package/dist/composition/settings-search-input.js +61 -0
- package/dist/composition/startup-route.d.ts +32 -0
- package/dist/composition/startup-route.js +72 -0
- package/dist/composition/utility-tab.d.ts +28 -0
- package/dist/composition/utility-tab.js +244 -0
- package/dist/contracts/owned-ui/index.d.ts +1 -1
- package/dist/contracts/owned-ui/model.d.ts +3 -0
- package/dist/contracts/owned-ui/session-backend.d.ts +3 -0
- package/dist/contracts/owned-ui/session-workflows.d.ts +11 -4
- package/dist/contracts/presentation/index.d.ts +11 -0
- package/dist/contracts/presentation/index.js +12 -0
- package/dist/features/launch/development-launch.js +6 -0
- package/dist/features/launch/index.d.ts +1 -1
- package/dist/features/launch/intent.d.ts +3 -1
- package/dist/features/launch/intent.js +7 -4
- package/dist/features/launch/profile-paths.js +4 -0
- package/dist/features/owned-ui/plus-menu-dialog.d.ts +22 -0
- package/dist/features/owned-ui/plus-menu-dialog.js +84 -0
- package/dist/features/owned-ui/project-trust-dialog.d.ts +1 -1
- package/dist/features/owned-ui/project-trust-dialog.js +6 -8
- package/dist/features/owned-ui/project-trust-prompt.d.ts +1 -0
- package/dist/features/owned-ui/project-trust-prompt.js +7 -3
- package/dist/features/owned-ui/reference-document-selection.d.ts +30 -0
- package/dist/features/owned-ui/reference-document-selection.js +179 -0
- package/dist/features/owned-ui/reference-screen-app.d.ts +6 -1
- package/dist/features/owned-ui/reference-screen-app.js +51 -10
- package/dist/features/owned-ui/settings-app.d.ts +13 -2
- package/dist/features/owned-ui/settings-app.js +136 -97
- package/dist/features/owned-ui/settings-search-input.d.ts +29 -0
- package/dist/features/owned-ui/settings-search-input.js +1 -0
- package/dist/features/prompt-history/index.d.ts +1 -1
- package/dist/features/prompt-history/paths.d.ts +2 -1
- package/dist/features/prompt-history/paths.js +10 -2
- package/dist/features/prompt-history/service.d.ts +5 -0
- package/dist/features/prompt-history/service.js +1 -1
- package/dist/features/resident-tab/auto-name.d.ts +11 -0
- package/dist/features/resident-tab/auto-name.js +44 -0
- package/dist/features/resident-tab/index.d.ts +5 -0
- package/dist/features/resident-tab/index.js +7 -0
- package/dist/features/resident-tab/shortcut-bindings-file.d.ts +8 -0
- package/dist/features/resident-tab/shortcut-bindings-file.js +40 -0
- package/dist/features/resident-tab/shortcut-declarations.d.ts +13 -0
- package/dist/features/resident-tab/shortcut-declarations.js +26 -0
- package/dist/features/resident-tab/shortcut-projection.d.ts +29 -0
- package/dist/features/resident-tab/shortcut-projection.js +64 -0
- package/dist/features/resident-tab/status-deriver.d.ts +10 -0
- package/dist/features/resident-tab/status-deriver.js +12 -0
- package/dist/foundation/launch-context/index.d.ts +12 -0
- package/dist/foundation/launch-context/index.js +26 -0
- package/dist/foundation/launch-guardian/exit-watcher.d.ts +14 -0
- package/dist/foundation/launch-guardian/exit-watcher.js +94 -0
- package/dist/foundation/launch-guardian/main.d.ts +7 -1
- package/dist/foundation/launch-guardian/main.js +60 -7
- package/dist/foundation/lifecycle/session-repository-context.js +16 -2
- package/dist/foundation/process-containment/{native-guardian-containment.d.ts → addon-containment.d.ts} +7 -5
- package/dist/foundation/process-containment/addon-containment.js +139 -0
- package/dist/foundation/process-containment/addon-process-inspector.d.ts +11 -0
- package/dist/foundation/process-containment/addon-process-inspector.js +36 -0
- package/dist/foundation/process-containment/addon.d.ts +42 -0
- package/dist/foundation/process-containment/addon.js +57 -0
- package/dist/foundation/process-containment/artifact.d.ts +1 -1
- package/dist/foundation/process-containment/artifact.js +6 -5
- package/dist/foundation/process-containment/contracts.d.ts +2 -0
- package/dist/foundation/process-containment/index.d.ts +4 -4
- package/dist/foundation/process-containment/index.js +3 -3
- package/dist/foundation/process-containment/native-process-inspector.d.ts +2 -1
- package/dist/foundation/process-containment/native-process-inspector.js +10 -10
- package/dist/foundation/release/automatic-update.d.ts +37 -0
- package/dist/foundation/release/automatic-update.js +265 -0
- package/dist/foundation/release/bootstrap.d.ts +7 -9
- package/dist/foundation/release/bootstrap.js +107 -24
- package/dist/foundation/release/cohort-state.d.ts +1 -1
- package/dist/foundation/release/cohort-state.js +1 -1
- package/dist/foundation/release/dependency-certification.js +54 -19
- package/dist/foundation/release/early-accent.d.ts +12 -0
- package/dist/foundation/release/early-accent.js +59 -0
- package/dist/foundation/release/index.d.ts +2 -2
- package/dist/foundation/release/index.js +2 -2
- package/dist/foundation/release/latest-release.d.ts +24 -2
- package/dist/foundation/release/latest-release.js +51 -1
- package/dist/foundation/release/progress-palette.generated.d.ts +137 -3
- package/dist/foundation/release/progress-palette.generated.js +137 -3
- package/dist/foundation/release/release-gc.d.ts +3 -0
- package/dist/foundation/release/release-gc.js +59 -8
- package/dist/foundation/release/release-store.d.ts +12 -0
- package/dist/foundation/release/release-store.js +124 -2
- package/dist/foundation/release/update-execution-lease.d.ts +48 -0
- package/dist/foundation/release/update-execution-lease.js +161 -0
- package/dist/foundation/release/update.d.ts +12 -7
- package/dist/foundation/release/update.js +281 -196
- package/dist/foundation/resident-tabs/bounded-host-command.d.ts +18 -0
- package/dist/foundation/resident-tabs/bounded-host-command.js +39 -0
- package/dist/foundation/resident-tabs/bridge-client.d.ts +70 -0
- package/dist/foundation/resident-tabs/bridge-client.js +321 -0
- package/dist/foundation/resident-tabs/doctor.d.ts +28 -0
- package/dist/foundation/resident-tabs/doctor.js +166 -0
- package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +27 -0
- package/dist/foundation/resident-tabs/draft-checkpoint.js +145 -0
- package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +36 -0
- package/dist/foundation/resident-tabs/ensure-terminal-host.js +151 -0
- package/dist/foundation/resident-tabs/fault-injection.d.ts +8 -0
- package/dist/foundation/resident-tabs/fault-injection.js +26 -0
- package/dist/foundation/resident-tabs/fixture-control.d.ts +7 -0
- package/dist/foundation/resident-tabs/fixture-control.js +35 -0
- package/dist/foundation/resident-tabs/host-entry.d.ts +1 -0
- package/dist/foundation/resident-tabs/host-entry.js +17 -0
- package/dist/foundation/resident-tabs/index.d.ts +12 -0
- package/dist/foundation/resident-tabs/index.js +6 -0
- package/dist/foundation/resident-tabs/maintenance.d.ts +39 -0
- package/dist/foundation/resident-tabs/maintenance.js +75 -0
- package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +34 -0
- package/dist/foundation/resident-tabs/progress-observation-schema.js +1 -0
- package/dist/foundation/resident-tabs/progress-observation.d.ts +4 -0
- package/dist/foundation/resident-tabs/progress-observation.js +150 -0
- package/dist/foundation/resident-tabs/prompt-journal.d.ts +63 -0
- package/dist/foundation/resident-tabs/prompt-journal.js +213 -0
- package/dist/foundation/resident-tabs/protocol.d.ts +12 -0
- package/dist/foundation/resident-tabs/protocol.js +195 -0
- package/dist/foundation/resident-tabs/recovery.d.ts +26 -0
- package/dist/foundation/resident-tabs/recovery.js +205 -0
- package/dist/foundation/resident-tabs/release-holds.d.ts +28 -0
- package/dist/foundation/resident-tabs/release-holds.js +75 -0
- package/dist/foundation/resident-tabs/routes.d.ts +5 -0
- package/dist/foundation/resident-tabs/routes.js +5 -0
- package/dist/foundation/resident-tabs/routing.d.ts +11 -0
- package/dist/foundation/resident-tabs/routing.js +10 -0
- package/dist/foundation/resident-tabs/session-sync.d.ts +14 -0
- package/dist/foundation/resident-tabs/session-sync.js +37 -0
- package/dist/foundation/resident-tabs/settings.d.ts +12 -0
- package/dist/foundation/resident-tabs/settings.js +58 -0
- package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +14 -0
- package/dist/foundation/resident-tabs/terminal-host-artifact.js +78 -0
- package/dist/foundation/resident-tabs/zip-archive.d.ts +9 -0
- package/dist/foundation/resident-tabs/zip-archive.js +56 -0
- package/dist/foundation/session-writer-lock/index.d.ts +30 -0
- package/dist/foundation/session-writer-lock/index.js +203 -0
- package/dist/foundation/startup/startup-descriptor.js +2 -2
- package/dist/foundation/terminal-cleanup/index.d.ts +1 -1
- package/dist/foundation/terminal-cleanup/index.js +1 -1
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +6 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.js +6 -0
- package/dist/integrations/pi/components/editor-interaction.d.ts +2 -0
- package/dist/integrations/pi/components/modal-frame.d.ts +17 -1
- package/dist/integrations/pi/components/modal-frame.js +48 -9
- package/dist/integrations/pi/components/models-dialog.js +4 -52
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +6 -1
- package/dist/integrations/pi/components/owned-editor-ux.js +138 -11
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +4 -4
- package/dist/integrations/pi/components/resources/builtin-themes.js +4 -4
- package/dist/integrations/pi/components/share-operation-dialog.d.ts +2 -0
- package/dist/integrations/pi/components/share-operation-dialog.js +2 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +58 -36
- package/dist/integrations/pi/components/shell-extension-ui.js +79 -60
- package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
- package/dist/integrations/pi/components/shell-footer-status.js +21 -5
- package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +5 -2
- package/dist/integrations/pi/components/shell-presenters-info.js +18 -4
- package/dist/integrations/pi/components/shell-presenters-transcript.js +4 -1
- package/dist/integrations/pi/components/shell-selectors-dialogs.js +5 -1
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +12 -1
- package/dist/integrations/pi/components/skills-dialog.js +2 -2
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +17 -4
- package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
- package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-editor.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-input.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-selector.js +1 -1
- package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +8 -6
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +16 -9
- package/dist/integrations/pi/components/upstream/components/pi-logo.js +1 -1
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +4 -4
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +2 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +2 -1
- package/dist/integrations/pi/components/upstream/components/session-footer.js +31 -25
- package/dist/integrations/pi/components/upstream/components/session-selector-search.js +1 -1
- package/dist/integrations/pi/components/upstream/components/session-selector.js +8 -7
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
- package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/components/status-indicator.js +3 -3
- package/dist/integrations/pi/components/upstream/components/themed-text.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/themed-text.js +1 -1
- package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +8 -7
- package/dist/integrations/pi/components/upstream/components/thinking-selector.js +10 -9
- package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +2 -6
- package/dist/integrations/pi/components/upstream/components/tool-execution.js +103 -101
- package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +9 -9
- package/dist/integrations/pi/components/upstream/components/tree-selector.js +13 -21
- package/dist/integrations/pi/components/upstream/components/trust-selector.js +1 -1
- package/dist/integrations/pi/components/upstream/external-editor.js +1 -1
- package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/history/editor-core.js +7 -5
- package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
- package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
- package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
- package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
- package/dist/integrations/pi/components/upstream/model-search.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/program-status-reporter.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/theme/theme.d.ts +5 -0
- package/dist/integrations/pi/components/upstream/theme/theme.js +29 -2
- package/dist/integrations/pi/engine/adapter.d.ts +5 -77
- package/dist/integrations/pi/engine/adapter.js +95 -394
- package/dist/integrations/pi/engine/command-dispatch.d.ts +13 -0
- package/dist/integrations/pi/engine/command-dispatch.js +57 -0
- package/dist/integrations/pi/engine/host.js +2 -2
- package/dist/integrations/pi/engine/offline-settings-port.d.ts +23 -0
- package/dist/integrations/pi/engine/offline-settings-port.js +53 -0
- package/dist/integrations/pi/engine/pi-settings-metadata.json +14 -2
- package/dist/integrations/pi/engine/ports.d.ts +56 -0
- package/dist/integrations/pi/engine/ports.js +93 -0
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +1 -0
- package/dist/integrations/pi/engine/prompt-suggestions.js +40 -0
- package/dist/integrations/pi/engine/resources/changelog.json +4 -4
- package/dist/integrations/pi/engine/runtime-integration.js +102 -29
- package/dist/integrations/pi/engine/session-runtime.d.ts +0 -6
- package/dist/integrations/pi/engine/session-runtime.js +13 -5
- package/dist/integrations/pi/engine/session-selection.d.ts +3 -0
- package/dist/integrations/pi/engine/session-selection.js +45 -9
- package/dist/integrations/pi/engine/settings-bridge.d.ts +5 -0
- package/dist/integrations/pi/engine/settings-bridge.js +15 -0
- package/dist/integrations/pi/engine/settings-port.js +11 -15
- package/dist/integrations/pi/engine/view-state.d.ts +42 -0
- package/dist/integrations/pi/engine/view-state.js +126 -0
- package/dist/integrations/pi/engine/workflow-contexts.js +10 -1
- package/dist/integrations/pi/engine/workflow-runner.js +74 -5
- package/dist/integrations/pi/engine/workflow-support.d.ts +12 -0
- package/dist/integrations/pi/engine/workflow-support.js +36 -0
- package/dist/integrations/pi/engine/workflows.d.ts +3 -1
- package/dist/integrations/pi/engine/workflows.js +1 -0
- package/dist/integrations/pi/startup-public.js +257 -310
- package/dist/integrations/pi/startup-public.manifest.json +564 -440
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +6 -0
- package/dist/integrations/pi/tui-runtime/adapter.js +32 -1
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +5 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +12 -1
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +31 -2
- package/dist/native/darwin-arm64/manifest.json +10 -7
- package/dist/native/darwin-arm64/process-guardian.node +0 -0
- package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +10500 -0
- package/dist/native/darwin-arm64/terminal-host.manifest.json +46 -0
- package/dist/native/darwin-arm64/terminal-host.node +0 -0
- package/dist/native/darwin-x64/manifest.json +23 -0
- package/dist/native/darwin-x64/process-guardian.node +0 -0
- package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10737 -0
- package/dist/native/darwin-x64/terminal-host.manifest.json +46 -0
- package/dist/native/darwin-x64/terminal-host.node +0 -0
- package/dist/native/linux-x64/manifest.json +10 -7
- package/dist/native/linux-x64/process-guardian.node +0 -0
- package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +11226 -0
- package/dist/native/linux-x64/terminal-host.manifest.json +46 -0
- package/dist/native/linux-x64/terminal-host.node +0 -0
- package/dist/native/win32-x64/manifest.json +10 -7
- package/dist/native/win32-x64/process-guardian.node +0 -0
- package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10757 -0
- package/dist/native/win32-x64/terminal-host.manifest.json +46 -0
- package/dist/native/win32-x64/terminal-host.node +0 -0
- package/dist/product-identity.d.ts +3 -3
- package/dist/product-identity.js +4 -4
- package/dist/product-identity.json +16 -2
- package/dist/runtime-payload-inventory.json +6330 -6677
- package/dist/ui/apps/host.d.ts +2 -0
- package/dist/ui/apps/host.js +7 -1
- package/dist/ui/components/dialog-panel.d.ts +17 -8
- package/dist/ui/components/dialog-panel.js +117 -41
- package/dist/ui/components/index.d.ts +5 -5
- package/dist/ui/components/index.js +4 -4
- package/dist/ui/components/line-input.d.ts +4 -1
- package/dist/ui/components/line-input.js +3 -1
- package/dist/ui/components/prompt-input.d.ts +11 -8
- package/dist/ui/components/prompt-input.js +15 -13
- package/dist/ui/components/scrollbar.d.ts +1 -1
- package/dist/ui/components/scrollbar.js +1 -1
- package/dist/ui/components/selection-copy.d.ts +3 -3
- package/dist/ui/components/selection-copy.js +16 -1
- package/dist/ui/components/spans.js +2 -2
- package/dist/ui/components/submitted-prompt.d.ts +9 -6
- package/dist/ui/components/submitted-prompt.js +20 -12
- package/dist/ui/components/surface.js +4 -2
- package/dist/ui/components/text-selection.d.ts +1 -2
- package/dist/ui/components/text-selection.js +5 -2
- package/dist/ui/components/text.d.ts +3 -6
- package/dist/ui/components/text.js +6 -8
- package/dist/ui/components/transcript-viewport.d.ts +9 -2
- package/dist/ui/components/transcript-viewport.js +179 -58
- package/dist/ui/settings/declarations.d.ts +90 -16
- package/dist/ui/settings/declarations.js +67 -14
- package/dist/ui/settings/early-accent.d.ts +81 -0
- package/dist/ui/settings/early-accent.js +50 -0
- package/dist/ui/settings/index.d.ts +4 -2
- package/dist/ui/settings/index.js +2 -1
- package/dist/ui/settings/manager.d.ts +16 -3
- package/dist/ui/settings/manager.js +122 -33
- package/dist/ui/settings/migrations.d.ts +6 -0
- package/dist/ui/settings/migrations.js +73 -0
- package/dist/ui/settings/profile-document.d.ts +26 -0
- package/dist/ui/settings/profile-document.js +164 -0
- package/dist/ui/settings/progress-palette.generated.d.ts +139 -0
- package/dist/ui/settings/progress-palette.generated.js +139 -0
- package/dist/ui/settings/sections.d.ts +4 -0
- package/dist/ui/settings/sections.js +9 -3
- package/docs/architecture/boundaries.md +24 -9
- package/docs/architecture/evidence/resident-tabs/linux-x64.md +37 -0
- package/docs/architecture/evidence/resident-tabs/macos-arm64.md +36 -0
- package/docs/architecture/evidence/resident-tabs/macos-x64.md +35 -0
- package/docs/architecture/evidence/resident-tabs/windows-x64.md +36 -0
- package/docs/architecture/internal-naming.md +3 -1
- package/docs/architecture/process-guardian-provenance.md +18 -10
- package/docs/architecture/project-structure.md +8 -0
- package/docs/architecture/resident-tabs-requirements.md +18 -0
- package/docs/architecture/resident-tabs.md +649 -0
- package/docs/architecture/response-copy-delivery.md +1 -1
- package/docs/architecture/terminal-host-proof-gate.md +2 -0
- package/docs/architecture/terminal-host-provenance.md +16 -4
- package/docs/architecture/tool-image-presentation.md +2 -1
- package/docs/architecture/toolchain.md +11 -9
- package/docs/ci-release-runbook.md +14 -7
- package/docs/features/launch-profiles.md +11 -8
- package/docs/features/prompt-history.md +41 -20
- package/docs/manual-resident-tabs-acceptance.md +51 -0
- package/docs/openspec-archive-automation.md +49 -22
- package/docs/validation.md +49 -9
- package/package.json +19 -6
- package/dist/foundation/process-containment/darwin-process-inspector.d.ts +0 -5
- package/dist/foundation/process-containment/darwin-process-inspector.js +0 -7
- package/dist/foundation/process-containment/native-guardian-containment.js +0 -152
- package/dist/foundation/process-containment/windows-process-inspector.d.ts +0 -19
- package/dist/foundation/process-containment/windows-process-inspector.js +0 -56
- package/dist/native/darwin-arm64/process-guardian +0 -0
- package/dist/native/linux-x64/process-guardian +0 -0
- package/dist/native/win32-x64/process-guardian.exe +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EMERGENCY_TERMINAL_RESET } from "../../foundation/terminal-cleanup/terminal-reset.js";
|
|
2
|
+
import { preTrustPalette, preTrustTerminalAppearance, preTrustTerminalColorMode, readPreTrustAccent } from "../../ui/settings/early-accent.js";
|
|
2
3
|
const ENTER_ALTERNATE_SCREEN = "\u001b[?1049h";
|
|
3
4
|
const HIDE_CURSOR = "\u001b[?25l";
|
|
4
5
|
const CLEAR_HOME = "\u001b[2J\u001b[H";
|
|
@@ -34,8 +35,8 @@ export function createConsoleProjectTrustPrompt(options = {}) {
|
|
|
34
35
|
if (choices.length === 0)
|
|
35
36
|
throw new Error("project trust choices are unavailable");
|
|
36
37
|
const comparison = options.presentation === "comparison";
|
|
37
|
-
const renderBareDialog = comparison
|
|
38
|
-
|
|
38
|
+
const renderBareDialog = comparison ? undefined : (await import("./project-trust-dialog.js")).renderProjectTrustDialog;
|
|
39
|
+
const palette = comparison ? null : trustPaletteOptions(options.environment ?? process.env);
|
|
39
40
|
const wasRaw = input.isRaw === true;
|
|
40
41
|
let selected = 0;
|
|
41
42
|
let restored = false;
|
|
@@ -66,7 +67,7 @@ export function createConsoleProjectTrustPrompt(options = {}) {
|
|
|
66
67
|
const render = () => {
|
|
67
68
|
const width = Math.max(renderBareDialog ? 1 : 20, output.columns ?? 80);
|
|
68
69
|
const rows = Math.max(1, output.rows ?? 24);
|
|
69
|
-
const lines = (renderBareDialog?.(cwd, choices.map(choice => choice.label), selected, width, rows) ?? [
|
|
70
|
+
const lines = (renderBareDialog?.(cwd, choices.map(choice => choice.label), selected, width, rows, palette.accent, palette.border) ?? [
|
|
70
71
|
`${BOLD}${ACCENT}Trust project folder?${RESET_FG}${RESET_BOLD}`,
|
|
71
72
|
cwd,
|
|
72
73
|
"",
|
|
@@ -179,6 +180,9 @@ export function createConsoleProjectTrustPrompt(options = {}) {
|
|
|
179
180
|
}
|
|
180
181
|
};
|
|
181
182
|
}
|
|
183
|
+
function trustPaletteOptions(environment) {
|
|
184
|
+
return preTrustPalette(readPreTrustAccent(environment), preTrustTerminalAppearance(environment), preTrustTerminalColorMode(environment));
|
|
185
|
+
}
|
|
182
186
|
function optionRow(label, selected) {
|
|
183
187
|
return selected
|
|
184
188
|
? `${ACCENT}→ ${label}${RESET_FG}`
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type PaneMouseEvent, type UiTheme } from "../../ui/components/index.js";
|
|
2
|
+
export interface ReferenceDocumentSelectionOptions {
|
|
3
|
+
readonly copyOnSelect: () => boolean;
|
|
4
|
+
readonly copyText: (text: string) => boolean | void;
|
|
5
|
+
}
|
|
6
|
+
interface ReferenceSelectionFrame {
|
|
7
|
+
readonly bodyRowStart: number;
|
|
8
|
+
readonly contentWidth: number;
|
|
9
|
+
readonly documentRows: readonly string[];
|
|
10
|
+
readonly visibleDocumentRows: readonly (number | undefined)[];
|
|
11
|
+
}
|
|
12
|
+
/** Selection state for an opted-in read-only reference document. */
|
|
13
|
+
export declare class ReferenceDocumentSelection {
|
|
14
|
+
#private;
|
|
15
|
+
constructor(options: ReferenceDocumentSelectionOptions);
|
|
16
|
+
get selecting(): boolean;
|
|
17
|
+
get hasSelection(): boolean;
|
|
18
|
+
updateFrame(frame: ReferenceSelectionFrame): void;
|
|
19
|
+
paintVisibleRow(visibleRow: number, line: string, theme: UiTheme): string;
|
|
20
|
+
handleInput(data: string): {
|
|
21
|
+
readonly consumed: boolean;
|
|
22
|
+
readonly cleared: boolean;
|
|
23
|
+
};
|
|
24
|
+
handleMouse(event: PaneMouseEvent, requestRender?: () => void): {
|
|
25
|
+
readonly consumed: boolean;
|
|
26
|
+
readonly changed: boolean;
|
|
27
|
+
};
|
|
28
|
+
clear(): void;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { COPY_ACKNOWLEDGEMENT_DURATION_MS, copyAcknowledgementText, displayWidth, extendTextSelection, orderedTextSelection, overlaySpan, paintTextSelection, padToWidth, pressTextSelection, releaseTextSelection, stripAnsi, textSelectionLineExtendColumn, textSelectionPointAt, textSelectionText, truncateToWidth, usefulTextLineContent, } from "../../ui/components/index.js";
|
|
2
|
+
const INTERRUPT = "\u0003";
|
|
3
|
+
class CopyAcknowledgement {
|
|
4
|
+
#message;
|
|
5
|
+
#timer;
|
|
6
|
+
paint(line, finalRow, width, theme) {
|
|
7
|
+
if (!finalRow || this.#message === undefined || width === 0)
|
|
8
|
+
return line;
|
|
9
|
+
const message = truncateToWidth(theme.fg("accent", this.#message), width);
|
|
10
|
+
return overlaySpan(line, width - displayWidth(message), width, message, { inheritStartStyle: true });
|
|
11
|
+
}
|
|
12
|
+
show(characters, requestRender) {
|
|
13
|
+
this.#message = copyAcknowledgementText(characters);
|
|
14
|
+
this.#clearTimer();
|
|
15
|
+
this.#timer = setTimeout(() => {
|
|
16
|
+
this.#timer = undefined;
|
|
17
|
+
this.#message = undefined;
|
|
18
|
+
requestRender();
|
|
19
|
+
}, COPY_ACKNOWLEDGEMENT_DURATION_MS);
|
|
20
|
+
this.#timer.unref?.();
|
|
21
|
+
requestRender();
|
|
22
|
+
}
|
|
23
|
+
clear() {
|
|
24
|
+
this.#clearTimer();
|
|
25
|
+
this.#message = undefined;
|
|
26
|
+
}
|
|
27
|
+
#clearTimer() {
|
|
28
|
+
if (this.#timer !== undefined)
|
|
29
|
+
clearTimeout(this.#timer);
|
|
30
|
+
this.#timer = undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Selection state for an opted-in read-only reference document. */
|
|
34
|
+
export class ReferenceDocumentSelection {
|
|
35
|
+
#copyOnSelect;
|
|
36
|
+
#copyText;
|
|
37
|
+
#selection;
|
|
38
|
+
#click;
|
|
39
|
+
#frame;
|
|
40
|
+
#acknowledgement = new CopyAcknowledgement();
|
|
41
|
+
constructor(options) {
|
|
42
|
+
this.#copyOnSelect = options.copyOnSelect;
|
|
43
|
+
this.#copyText = options.copyText;
|
|
44
|
+
}
|
|
45
|
+
get selecting() {
|
|
46
|
+
return this.#selection?.selecting === true;
|
|
47
|
+
}
|
|
48
|
+
get hasSelection() {
|
|
49
|
+
return orderedTextSelection(this.#selection) !== undefined;
|
|
50
|
+
}
|
|
51
|
+
updateFrame(frame) {
|
|
52
|
+
const previous = this.#frame;
|
|
53
|
+
if (this.#selection !== undefined && previous !== undefined && !selectionStillMaps(this.#selection, previous.documentRows, frame.documentRows)) {
|
|
54
|
+
this.#selection = undefined;
|
|
55
|
+
this.#click = undefined;
|
|
56
|
+
}
|
|
57
|
+
this.#frame = frame;
|
|
58
|
+
}
|
|
59
|
+
paintVisibleRow(visibleRow, line, theme) {
|
|
60
|
+
const frame = this.#frame;
|
|
61
|
+
const documentRow = frame?.visibleDocumentRows[visibleRow];
|
|
62
|
+
const ordered = orderedTextSelection(this.#selection);
|
|
63
|
+
const width = frame?.contentWidth ?? 0;
|
|
64
|
+
let painted = padToWidth(line, width);
|
|
65
|
+
if (documentRow !== undefined && ordered !== undefined
|
|
66
|
+
&& documentRow >= ordered.start.line && documentRow <= ordered.end.line) {
|
|
67
|
+
const from = documentRow === ordered.start.line ? ordered.start.column : 0;
|
|
68
|
+
const to = documentRow === ordered.end.line ? ordered.end.column : width;
|
|
69
|
+
painted = paintTextSelection(painted, Math.max(0, from), Math.min(width, to));
|
|
70
|
+
}
|
|
71
|
+
return this.#acknowledgement.paint(painted, visibleRow === (frame?.visibleDocumentRows.length ?? 0) - 1, width, theme);
|
|
72
|
+
}
|
|
73
|
+
handleInput(data) {
|
|
74
|
+
if (data === INTERRUPT && this.hasSelection) {
|
|
75
|
+
this.#submitSelection();
|
|
76
|
+
this.#selection = undefined;
|
|
77
|
+
this.#click = undefined;
|
|
78
|
+
return { consumed: true, cleared: true };
|
|
79
|
+
}
|
|
80
|
+
if (this.#selection === undefined)
|
|
81
|
+
return { consumed: false, cleared: false };
|
|
82
|
+
this.#selection = undefined;
|
|
83
|
+
this.#click = undefined;
|
|
84
|
+
return { consumed: false, cleared: true };
|
|
85
|
+
}
|
|
86
|
+
handleMouse(event, requestRender) {
|
|
87
|
+
const frame = this.#frame;
|
|
88
|
+
if (frame === undefined)
|
|
89
|
+
return { consumed: false, changed: false };
|
|
90
|
+
if (event.kind === "motion" && this.selecting) {
|
|
91
|
+
const row = documentRowAt(frame, event.row, true);
|
|
92
|
+
if (row === undefined)
|
|
93
|
+
return { consumed: true, changed: false };
|
|
94
|
+
this.#extend(row, event.column);
|
|
95
|
+
return { consumed: true, changed: true };
|
|
96
|
+
}
|
|
97
|
+
if (event.kind === "release" && this.selecting) {
|
|
98
|
+
this.#selection = releaseTextSelection(this.#selection);
|
|
99
|
+
const copiedCharacters = this.hasSelection && this.#copyOnSelect() ? this.#submitSelection() : undefined;
|
|
100
|
+
if (copiedCharacters !== undefined && requestRender !== undefined) {
|
|
101
|
+
this.#acknowledgement.show(copiedCharacters, requestRender);
|
|
102
|
+
}
|
|
103
|
+
return { consumed: true, changed: true };
|
|
104
|
+
}
|
|
105
|
+
if (event.kind !== "press" || event.button !== 0)
|
|
106
|
+
return { consumed: false, changed: false };
|
|
107
|
+
const row = documentRowAt(frame, event.row, false);
|
|
108
|
+
if (row === undefined || event.column < 1 || event.column > frame.contentWidth) {
|
|
109
|
+
const changed = this.#selection !== undefined;
|
|
110
|
+
this.#selection = undefined;
|
|
111
|
+
this.#click = undefined;
|
|
112
|
+
return { consumed: false, changed };
|
|
113
|
+
}
|
|
114
|
+
const source = frame.documentRows[row] ?? "";
|
|
115
|
+
const pressed = pressTextSelection({
|
|
116
|
+
line: row,
|
|
117
|
+
column: event.column,
|
|
118
|
+
contentWidth: frame.contentWidth,
|
|
119
|
+
lineText: source,
|
|
120
|
+
lineContent: usefulTextLineContent(source),
|
|
121
|
+
...(this.#click === undefined ? {} : { previousClick: this.#click }),
|
|
122
|
+
});
|
|
123
|
+
this.#selection = pressed.selection;
|
|
124
|
+
this.#click = pressed.click;
|
|
125
|
+
return { consumed: true, changed: true };
|
|
126
|
+
}
|
|
127
|
+
clear() {
|
|
128
|
+
this.#selection = undefined;
|
|
129
|
+
this.#click = undefined;
|
|
130
|
+
this.#frame = undefined;
|
|
131
|
+
this.#acknowledgement.clear();
|
|
132
|
+
}
|
|
133
|
+
#extend(row, column) {
|
|
134
|
+
const selection = this.#selection;
|
|
135
|
+
const frame = this.#frame;
|
|
136
|
+
if (selection?.selecting !== true || frame === undefined)
|
|
137
|
+
return;
|
|
138
|
+
const targetColumn = selection.fullRow
|
|
139
|
+
? textSelectionLineExtendColumn(selection, row, frame.contentWidth)
|
|
140
|
+
: Math.max(1, Math.min(column, frame.contentWidth));
|
|
141
|
+
this.#selection = extendTextSelection(selection, selection.fullRow
|
|
142
|
+
? { line: row, column: targetColumn }
|
|
143
|
+
: textSelectionPointAt(row, targetColumn, frame.documentRows[row] ?? ""));
|
|
144
|
+
}
|
|
145
|
+
#submitSelection() {
|
|
146
|
+
const frame = this.#frame;
|
|
147
|
+
const ordered = orderedTextSelection(this.#selection);
|
|
148
|
+
if (frame === undefined || ordered === undefined)
|
|
149
|
+
return undefined;
|
|
150
|
+
const text = textSelectionText(ordered, frame.documentRows, line => usefulTextLineContent(frame.documentRows[line] ?? "")).trim();
|
|
151
|
+
if (text.length === 0 || this.#copyText(text) === false)
|
|
152
|
+
return undefined;
|
|
153
|
+
return text.length;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function documentRowAt(frame, screenRow, clampToDocument) {
|
|
157
|
+
const visible = frame.visibleDocumentRows;
|
|
158
|
+
let index = screenRow - frame.bodyRowStart;
|
|
159
|
+
if (!clampToDocument)
|
|
160
|
+
return visible[index];
|
|
161
|
+
index = Math.max(0, Math.min(index, visible.length - 1));
|
|
162
|
+
if (visible[index] !== undefined)
|
|
163
|
+
return visible[index];
|
|
164
|
+
const defined = visible.flatMap(row => row === undefined ? [] : [row]);
|
|
165
|
+
if (defined.length === 0)
|
|
166
|
+
return undefined;
|
|
167
|
+
return screenRow < frame.bodyRowStart ? defined[0] : defined.at(-1);
|
|
168
|
+
}
|
|
169
|
+
function selectionStillMaps(selection, previous, next) {
|
|
170
|
+
const first = Math.min(selection.anchor.line, selection.head.line);
|
|
171
|
+
const last = Math.max(selection.anchor.line, selection.head.line);
|
|
172
|
+
if (last >= previous.length || last >= next.length)
|
|
173
|
+
return false;
|
|
174
|
+
for (let line = first; line <= last; line += 1) {
|
|
175
|
+
if (stripAnsi(previous[line] ?? "") !== stripAnsi(next[line] ?? ""))
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { OwnedUiViewportSettings } from "../../contracts/owned-ui/index.js";
|
|
2
|
+
import { type ReferenceDocumentSelectionOptions } from "./reference-document-selection.js";
|
|
2
3
|
import type { AppHostServices, UiApp } from "../../ui/apps/index.js";
|
|
3
4
|
import { ShortcutRegistry, type PaneInputResult, type PaneMouseEvent, type PaneRect } from "../../ui/components/index.js";
|
|
4
5
|
type Action = "up" | "down" | "page-up" | "page-down" | "first" | "last" | "close";
|
|
@@ -24,6 +25,10 @@ export interface ReferenceScreenOptions {
|
|
|
24
25
|
readonly document: ReferenceDocumentProvider;
|
|
25
26
|
/** The reader's scroll settings, read on every frame so a live change is honored. */
|
|
26
27
|
readonly scrollSettings: () => OwnedUiViewportSettings;
|
|
28
|
+
/** The screen is a resident tab, such as the Changelog tab: it offers no screen-level close. */
|
|
29
|
+
readonly pinned?: boolean;
|
|
30
|
+
/** Enables owned text selection for document routes that explicitly opt in. */
|
|
31
|
+
readonly selection?: ReferenceDocumentSelectionOptions;
|
|
27
32
|
}
|
|
28
33
|
/**
|
|
29
34
|
* Presents one read-only document full screen between two accent rules: the bold
|
|
@@ -40,6 +45,6 @@ export declare class ReferenceScreenApp implements UiApp {
|
|
|
40
45
|
onClose(_host: AppHostServices): void;
|
|
41
46
|
render(rect: PaneRect, host: AppHostServices): readonly string[];
|
|
42
47
|
onInput(data: string, host: AppHostServices): PaneInputResult;
|
|
43
|
-
onMouse(event: PaneMouseEvent,
|
|
48
|
+
onMouse(event: PaneMouseEvent, host: AppHostServices): PaneInputResult;
|
|
44
49
|
}
|
|
45
50
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ReferenceDocumentSelection } from "./reference-document-selection.js";
|
|
1
2
|
import { DIALOG_CLOSE_SHORTCUT_HINT } from "../../contracts/presentation/index.js";
|
|
2
3
|
import { GLOBAL_SCOPE, PLAIN_THEME, RAIL_COLUMNS, ShortcutRegistry, ScrollbarRails, assertNoShortcutConflicts, displayWidth, layoutList, padToWidth, renderGroupHeader, renderShortcutHintsWithClose, scrollForTrackPage, scrollbarGeometry, scrollbarPresentation, scrollbarWheelRows, truncateToWidth, withScrollbarRail, } from "../../ui/components/index.js";
|
|
3
4
|
const SCOPE = "reference-screen";
|
|
@@ -48,6 +49,8 @@ export class ReferenceScreenApp {
|
|
|
48
49
|
#title;
|
|
49
50
|
#document;
|
|
50
51
|
#scrollSettings;
|
|
52
|
+
#pinned;
|
|
53
|
+
#selection;
|
|
51
54
|
#scroll = 0;
|
|
52
55
|
#interruptArmed = false;
|
|
53
56
|
#failure = null;
|
|
@@ -57,7 +60,6 @@ export class ReferenceScreenApp {
|
|
|
57
60
|
#rails = new ScrollbarRails();
|
|
58
61
|
// Rationale: the rail as drawn in the last frame, or null when nothing can be pointed at.
|
|
59
62
|
#railFrame = null;
|
|
60
|
-
#bodyHeight = 0;
|
|
61
63
|
// Invariant: a scroll lights the rail until this time; the timer repaints once it has passed.
|
|
62
64
|
#activeUntil = 0;
|
|
63
65
|
#activityTimer;
|
|
@@ -67,6 +69,8 @@ export class ReferenceScreenApp {
|
|
|
67
69
|
this.#title = options.title;
|
|
68
70
|
this.#document = options.document;
|
|
69
71
|
this.#scrollSettings = options.scrollSettings;
|
|
72
|
+
this.#pinned = options.pinned === true;
|
|
73
|
+
this.#selection = options.selection === undefined ? undefined : new ReferenceDocumentSelection(options.selection);
|
|
70
74
|
}
|
|
71
75
|
onActivate(host) {
|
|
72
76
|
const ready = this.#document.ready;
|
|
@@ -83,6 +87,7 @@ export class ReferenceScreenApp {
|
|
|
83
87
|
onClose(_host) {
|
|
84
88
|
this.#clearActivityTimer();
|
|
85
89
|
this.#rails.clear();
|
|
90
|
+
this.#selection?.clear();
|
|
86
91
|
}
|
|
87
92
|
render(rect, host) {
|
|
88
93
|
const theme = host.theme ?? PLAIN_THEME;
|
|
@@ -91,9 +96,9 @@ export class ReferenceScreenApp {
|
|
|
91
96
|
const reservesRail = settings.scrollbarAppearance !== "hidden";
|
|
92
97
|
const contentWidth = reservesRail ? Math.max(0, rect.width - RAIL_COLUMNS) : rect.width;
|
|
93
98
|
const bodyHeight = Math.max(0, rect.height - HEADER_ROWS - FOOTER_ROWS);
|
|
94
|
-
this.#bodyHeight = bodyHeight;
|
|
95
99
|
const content = this.#content(contentWidth, theme);
|
|
96
100
|
const body = [];
|
|
101
|
+
const visibleDocumentRows = [];
|
|
97
102
|
let contentLength;
|
|
98
103
|
let viewportLength = bodyHeight;
|
|
99
104
|
if (content.kind === "sections") {
|
|
@@ -113,10 +118,22 @@ export class ReferenceScreenApp {
|
|
|
113
118
|
for (let index = this.#scroll; index < this.#scroll + bodyHeight; index++) {
|
|
114
119
|
const row = content.rows[index] ?? "";
|
|
115
120
|
body.push(displayWidth(row) > contentWidth ? truncateToWidth(row, contentWidth) : row);
|
|
121
|
+
visibleDocumentRows.push(index < content.rows.length ? index : undefined);
|
|
116
122
|
}
|
|
117
123
|
}
|
|
118
124
|
while (body.length < bodyHeight)
|
|
119
125
|
body.push("");
|
|
126
|
+
while (visibleDocumentRows.length < bodyHeight)
|
|
127
|
+
visibleDocumentRows.push(undefined);
|
|
128
|
+
this.#selection?.updateFrame({
|
|
129
|
+
bodyRowStart: HEADER_ROWS + 1,
|
|
130
|
+
contentWidth,
|
|
131
|
+
documentRows: content.kind === "flat" ? content.rows : [],
|
|
132
|
+
visibleDocumentRows,
|
|
133
|
+
});
|
|
134
|
+
const paintedBody = this.#selection === undefined
|
|
135
|
+
? body
|
|
136
|
+
: body.map((row, index) => this.#selection.paintVisibleRow(index, row, theme));
|
|
120
137
|
const now = Date.now();
|
|
121
138
|
// Rationale: every way of scrolling ends in this frame, so a moved document is noticed here
|
|
122
139
|
// once rather than at each wheel, drag, and key branch.
|
|
@@ -136,10 +153,10 @@ export class ReferenceScreenApp {
|
|
|
136
153
|
this.#railFrame = reservesRail && geometry !== null
|
|
137
154
|
? { rail: { key: this.id, column: rect.width, rowStart: HEADER_ROWS, trackHeight: geometry.trackHeight }, geometry, page: viewportLength }
|
|
138
155
|
: null;
|
|
139
|
-
const withRail = withScrollbarRail(
|
|
156
|
+
const withRail = withScrollbarRail(paintedBody.slice(0, bodyHeight), geometry, contentWidth, theme, { presentation });
|
|
140
157
|
const hint = this.#interruptArmed
|
|
141
158
|
? theme.fg("dim", " press ctrl+c again to exit a1")
|
|
142
|
-
: renderShortcutHintsWithClose(
|
|
159
|
+
: renderShortcutHintsWithClose(this.#hintEntries(), theme, rect.width, 1);
|
|
143
160
|
// Compatibility: the v2 reference screen frames its document between two border-coloured rules.
|
|
144
161
|
const rule = theme.fg("border", "─".repeat(rect.width));
|
|
145
162
|
// Invariant: dialog chrome shares the title's one-cell inset; document content keeps its own layout.
|
|
@@ -148,12 +165,21 @@ export class ReferenceScreenApp {
|
|
|
148
165
|
return frame.slice(0, rect.height).concat(Array(Math.max(0, rect.height - frame.length)).fill(""));
|
|
149
166
|
}
|
|
150
167
|
onInput(data, host) {
|
|
168
|
+
const explicitCopy = data === "\u0003" ? this.#selection?.handleInput(data) : undefined;
|
|
169
|
+
if (explicitCopy?.consumed === true)
|
|
170
|
+
return { consumed: true };
|
|
151
171
|
const action = REFERENCE_SCREEN_SHORTCUTS.resolve(KEYS[data] ?? data, SCOPE);
|
|
152
|
-
if (action === null)
|
|
172
|
+
if (action === null) {
|
|
173
|
+
const cleared = explicitCopy?.cleared ?? (this.#selection?.handleInput(data).cleared === true);
|
|
174
|
+
if (cleared)
|
|
175
|
+
host.requestRender();
|
|
153
176
|
return { consumed: false };
|
|
177
|
+
}
|
|
154
178
|
switch (action) {
|
|
155
179
|
case "close":
|
|
156
|
-
|
|
180
|
+
this.#selection?.handleInput(data);
|
|
181
|
+
if (!this.#pinned)
|
|
182
|
+
host.close();
|
|
157
183
|
return { consumed: true };
|
|
158
184
|
case "up":
|
|
159
185
|
this.#scrollBy(-1);
|
|
@@ -162,10 +188,10 @@ export class ReferenceScreenApp {
|
|
|
162
188
|
this.#scrollBy(1);
|
|
163
189
|
return { consumed: true };
|
|
164
190
|
case "page-up":
|
|
165
|
-
this.#scrollBy(-Math.max(1,
|
|
191
|
+
this.#scrollBy(-Math.max(1, host.getSize().height - HEADER_ROWS - FOOTER_ROWS));
|
|
166
192
|
return { consumed: true };
|
|
167
193
|
case "page-down":
|
|
168
|
-
this.#scrollBy(Math.max(1,
|
|
194
|
+
this.#scrollBy(Math.max(1, host.getSize().height - HEADER_ROWS - FOOTER_ROWS));
|
|
169
195
|
return { consumed: true };
|
|
170
196
|
case "first":
|
|
171
197
|
this.#scroll = 0;
|
|
@@ -175,17 +201,25 @@ export class ReferenceScreenApp {
|
|
|
175
201
|
return { consumed: true };
|
|
176
202
|
}
|
|
177
203
|
}
|
|
178
|
-
onMouse(event,
|
|
204
|
+
onMouse(event, host) {
|
|
179
205
|
if (event.kind === "wheel-up" || event.kind === "wheel-down") {
|
|
180
206
|
// Invariant: the whole screen owns wheel scrolling; it must not depend on the pointer's row.
|
|
181
207
|
const distance = scrollbarWheelRows(this.#scrollSettings().scrollbarSpeed);
|
|
182
208
|
this.#scrollBy(event.kind === "wheel-down" ? distance : -distance);
|
|
183
209
|
return { consumed: true };
|
|
184
210
|
}
|
|
211
|
+
if (this.#selection?.selecting === true) {
|
|
212
|
+
const selection = this.#selection.handleMouse(event, () => host.requestRender());
|
|
213
|
+
if (selection.consumed)
|
|
214
|
+
return { consumed: true, render: selection.changed };
|
|
215
|
+
}
|
|
185
216
|
const rail = this.#railPointer(event);
|
|
186
217
|
if (rail.owned)
|
|
187
218
|
return { consumed: true };
|
|
188
|
-
|
|
219
|
+
const selection = this.#selection?.handleMouse(event, () => host.requestRender());
|
|
220
|
+
if (selection?.consumed === true)
|
|
221
|
+
return { consumed: true, render: selection.changed || rail.changed };
|
|
222
|
+
return { consumed: event.kind !== "motion", render: selection?.changed === true || rail.changed };
|
|
189
223
|
}
|
|
190
224
|
// Rationale: the rail takes its share of a pointer report first: hover, a thumb drag, or a
|
|
191
225
|
// track page. Owned means the document must not see the report; changed means the rail looks different.
|
|
@@ -216,6 +250,13 @@ export class ReferenceScreenApp {
|
|
|
216
250
|
}
|
|
217
251
|
return { owned: true, changed: true };
|
|
218
252
|
}
|
|
253
|
+
// Invariant: a pinned screen is its tab and `Esc` does not close it, so it shows no close hint.
|
|
254
|
+
#hintEntries() {
|
|
255
|
+
const entries = REFERENCE_SCREEN_SHORTCUTS.hintEntries(SCOPE);
|
|
256
|
+
if (!this.#pinned)
|
|
257
|
+
return entries;
|
|
258
|
+
return entries.filter(entry => entry.key !== DIALOG_CLOSE_SHORTCUT_HINT.key || entry.action !== DIALOG_CLOSE_SHORTCUT_HINT.action);
|
|
259
|
+
}
|
|
219
260
|
// Invariant: the title is the first document row, as in v2, so it scrolls with the document.
|
|
220
261
|
#content(width, theme) {
|
|
221
262
|
// Compatibility: one leading space, so the title lines up with the padded Markdown rows as in v2.
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { AppHostServices, UiApp } from "../../ui/apps/index.js";
|
|
2
2
|
import { ShortcutRegistry, type PaneInputResult, type PaneMouseEvent, type PaneRect } from "../../ui/components/index.js";
|
|
3
3
|
import type { OwnedSettingsManager } from "../../ui/settings/index.js";
|
|
4
|
+
import type { SettingsSearchInputFactory } from "./settings-search-input.js";
|
|
4
5
|
export { SETTINGS_APP_ID, SETTINGS_ROUTE } from "./settings-route.js";
|
|
5
|
-
type Action = "move-up" | "move-down" | "block-up" | "block-down" | "first" | "last" | "page-up" | "page-down" | "previous-value" | "next-value" | "activate" | "
|
|
6
|
+
type Action = "move-up" | "move-down" | "block-up" | "block-down" | "first" | "last" | "page-up" | "page-down" | "previous-value" | "next-value" | "activate" | "edit-filter" | "close" | "undo" | "part-previous" | "part-next" | "part-change";
|
|
6
7
|
export declare const SETTINGS_SHORTCUTS: ShortcutRegistry<Action>;
|
|
7
8
|
/**
|
|
8
9
|
* The settings screen. Rows, sticky headers, scrolling, and the keymap come from
|
|
@@ -12,7 +13,17 @@ export declare const SETTINGS_SHORTCUTS: ShortcutRegistry<Action>;
|
|
|
12
13
|
export declare class SettingsApp implements UiApp {
|
|
13
14
|
#private;
|
|
14
15
|
readonly id = "settings";
|
|
15
|
-
|
|
16
|
+
/**
|
|
17
|
+
* `pinned` presents the screen as a resident Settings tab, which offers no screen-level close;
|
|
18
|
+
* `configurePlusMenu` opens the tab bar's Plus Menu dialog in place of this screen's own.
|
|
19
|
+
*/
|
|
20
|
+
constructor(session: OwnedSettingsManager, options: {
|
|
21
|
+
readonly pinned?: boolean;
|
|
22
|
+
readonly searchInputFactory: SettingsSearchInputFactory;
|
|
23
|
+
readonly copyText?: (text: string) => void;
|
|
24
|
+
readonly configurePlusMenu?: (() => boolean) | null;
|
|
25
|
+
readonly dialogPanel?: (text: string) => string;
|
|
26
|
+
});
|
|
16
27
|
onActivate(host: AppHostServices): void;
|
|
17
28
|
onClose(_host: AppHostServices): void;
|
|
18
29
|
render(rect: PaneRect, host: AppHostServices): readonly string[];
|