@timurproko/a1 0.2.7-dev.1249 → 0.2.7-dev.1255
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -36
- package/bin/cli.js +2 -17
- package/bin/ui.js +10 -51
- package/dist/app/session-shell/clipboard-diagnostics.d.ts +2 -2
- package/dist/app/session-shell/clipboard-image.d.ts +0 -1
- package/dist/app/session-shell/clipboard-image.js +1 -1
- package/dist/app/session-shell/dialog-coordinator.d.ts +6 -5
- package/dist/app/session-shell/dialog-coordinator.js +3 -4
- package/dist/app/session-shell/dock-chrome.d.ts +11 -6
- package/dist/app/session-shell/dock-chrome.js +5 -8
- package/dist/app/session-shell/editor-hyperlink-budget.d.ts +0 -2
- package/dist/app/session-shell/editor-hyperlink-budget.js +1 -1
- package/dist/app/session-shell/exit-notice.d.ts +3 -3
- package/dist/app/session-shell/exit-notice.js +10 -10
- package/dist/app/session-shell/extension-surface.d.ts +8 -7
- package/dist/app/session-shell/helper-pool.d.ts +3 -4
- package/dist/app/session-shell/helper-pool.js +1 -1
- package/dist/app/session-shell/image-preparation-client.d.ts +4 -3
- package/dist/app/session-shell/image-preparation.d.ts +0 -2
- package/dist/app/session-shell/image-preparation.js +2 -2
- package/dist/app/session-shell/image-source.d.ts +2 -3
- package/dist/app/session-shell/image-source.js +2 -2
- package/dist/app/session-shell/input-surface-switch.d.ts +9 -7
- package/dist/app/session-shell/input-surface-switch.js +1 -2
- package/dist/app/session-shell/login-interaction.d.ts +5 -4
- package/dist/app/session-shell/login-interaction.js +2 -3
- package/dist/app/session-shell/paste-executor.d.ts +4 -8
- package/dist/app/session-shell/paste-executor.js +2 -2
- package/dist/app/session-shell/paste-protocol.d.ts +2 -2
- package/dist/app/session-shell/path-chip-presentation.d.ts +0 -5
- package/dist/app/session-shell/path-chip-presentation.js +3 -3
- package/dist/app/session-shell/prompt-chips.d.ts +8 -7
- package/dist/app/session-shell/prompt-history-controller.d.ts +3 -3
- package/dist/app/session-shell/prompt-submission.d.ts +7 -6
- package/dist/app/session-shell/prompt-submission.js +7 -28
- package/dist/app/session-shell/quit-outro-effects.d.ts +3 -3
- package/dist/app/session-shell/quit-outro-effects.js +1 -4
- package/dist/app/session-shell/quit-outro.d.ts +9 -12
- package/dist/app/session-shell/quit-outro.js +11 -11
- package/dist/app/session-shell/response-copy-protocol.d.ts +3 -2
- package/dist/app/session-shell/response-copy-transport.d.ts +2 -14
- package/dist/app/session-shell/response-copy-transport.js +2 -3
- package/dist/app/session-shell/session-lifecycle.d.ts +3 -3
- package/dist/app/session-shell/session-lifecycle.js +2 -4
- package/dist/app/session-shell/session-shell-root.d.ts +74 -120
- package/dist/app/session-shell/session-shell-root.js +82 -115
- package/dist/app/session-shell/session-shell.d.ts +13 -16
- package/dist/app/session-shell/session-shell.js +149 -314
- package/dist/app/session-shell/session-viewport-controller.d.ts +7 -6
- package/dist/app/session-shell/session-viewport-controller.js +5 -8
- package/dist/app/session-shell/settings-bindings.d.ts +24 -2
- package/dist/app/session-shell/settings-bindings.js +24 -0
- package/dist/app/session-shell/share-operation.d.ts +3 -3
- package/dist/app/session-shell/share-operation.js +4 -6
- package/dist/app/session-shell/shell-clipboard.d.ts +59 -0
- package/dist/app/session-shell/shell-clipboard.js +119 -0
- package/dist/app/session-shell/shell-editor-factory.d.ts +8 -4
- package/dist/app/session-shell/shell-editor-factory.js +13 -15
- package/dist/app/session-shell/shell-host.d.ts +16 -17
- package/dist/app/session-shell/shell-host.js +20 -37
- package/dist/app/session-shell/shell-layout.d.ts +2 -2
- package/dist/app/session-shell/shell-prompt-suggestions.d.ts +26 -0
- package/dist/app/session-shell/shell-prompt-suggestions.js +48 -0
- package/dist/app/session-shell/suggestion-surface.d.ts +1 -6
- package/dist/app/session-shell/suggestion-surface.js +1 -1
- package/dist/app/session-shell/system-clipboard.d.ts +2 -14
- package/dist/app/session-shell/system-clipboard.js +2 -7
- package/dist/app/session-shell/transcript-document.d.ts +12 -10
- package/dist/app/session-shell/transcript-document.js +15 -41
- package/dist/app/session-shell/viewport-layout.d.ts +2 -2
- package/dist/app/session-shell/workflow-output.d.ts +5 -3
- package/dist/app/session-shell/workflow-output.js +13 -15
- package/dist/app/session-shell/workflow-router.d.ts +1 -3
- package/dist/app/session-shell/workflow-router.js +1 -4
- package/dist/cli/dispatch.d.ts +1 -11
- package/dist/cli/dispatch.js +5 -92
- package/dist/cli/package-messages.d.ts +0 -1
- package/dist/cli/package-messages.js +1 -1
- package/dist/cli/session-context.d.ts +1 -1
- package/dist/cli/session-context.js +5 -7
- package/dist/cli/uninstall.d.ts +4 -7
- package/dist/cli/uninstall.js +6 -35
- package/dist/cli/version-stats.js +4 -7
- package/dist/composition/owned-settings.d.ts +2 -2
- package/dist/composition/owned-settings.js +0 -4
- package/dist/composition/owned-ui.d.ts +3 -25
- package/dist/composition/owned-ui.js +37 -113
- package/dist/composition/reference-selection-options.d.ts +1 -1
- package/dist/composition/reference-selection-options.js +1 -1
- package/dist/composition/release-update-observation.d.ts +4 -4
- package/dist/composition/release-update-observation.js +17 -47
- package/dist/composition/session-backend.d.ts +0 -1
- package/dist/composition/session-runtime-registry.d.ts +5 -4
- package/dist/composition/settings-route-host.d.ts +0 -7
- package/dist/composition/settings-route-host.js +7 -20
- package/dist/composition/settings-search-input.d.ts +2 -1
- package/dist/composition/startup-route.d.ts +2 -3
- package/dist/composition/startup-route.js +2 -3
- package/dist/contracts/owned-ui/extension-ui.d.ts +2 -1
- package/dist/contracts/owned-ui/index.d.ts +2 -1
- package/dist/contracts/owned-ui/model.d.ts +0 -3
- package/dist/contracts/owned-ui/session-presenters.d.ts +3 -0
- package/dist/contracts/owned-ui/session-workflows.d.ts +1 -4
- package/dist/contracts/owned-ui/shell-components.d.ts +543 -0
- package/dist/contracts/presentation/component.d.ts +17 -0
- package/dist/contracts/presentation/component.js +8 -0
- package/dist/contracts/presentation/index.d.ts +6 -15
- package/dist/contracts/presentation/index.js +2 -0
- package/dist/contracts/presentation/terminal.d.ts +290 -0
- package/dist/contracts/presentation/theme.d.ts +46 -0
- package/dist/features/launch/development-launch.js +1 -2
- package/dist/features/launch/index.d.ts +1 -1
- package/dist/features/launch/intent.d.ts +1 -3
- package/dist/features/launch/intent.js +2 -4
- package/dist/features/launch/runtime-selection.d.ts +2 -2
- package/dist/features/launch/runtime-selection.js +2 -2
- package/dist/features/launch/session-context.d.ts +2 -2
- package/dist/features/owned-ui/project-trust-prompt.d.ts +2 -2
- package/dist/features/owned-ui/project-trust-prompt.js +1 -1
- package/dist/features/owned-ui/reference-screen-app.d.ts +0 -2
- package/dist/features/owned-ui/reference-screen-app.js +2 -9
- package/dist/features/owned-ui/release-note-state.d.ts +2 -1
- package/dist/features/owned-ui/settings-app.d.ts +0 -6
- package/dist/features/owned-ui/settings-app.js +42 -254
- package/dist/features/owned-ui/settings-edits.d.ts +31 -0
- package/dist/features/owned-ui/settings-edits.js +139 -0
- package/dist/features/owned-ui/settings-scroll-rail.d.ts +29 -0
- package/dist/features/owned-ui/settings-scroll-rail.js +79 -0
- package/dist/features/owned-ui/settings-search-input.d.ts +2 -1
- package/dist/features/prompt-history/service.d.ts +3 -2
- package/dist/foundation/launch-context/index.d.ts +0 -12
- package/dist/foundation/launch-context/index.js +0 -26
- package/dist/foundation/lifecycle/claim-gate.d.ts +9 -0
- package/dist/foundation/lifecycle/claim-gate.js +37 -0
- package/dist/foundation/lifecycle/index.d.ts +5 -9
- package/dist/foundation/lifecycle/index.js +3 -4
- package/dist/foundation/lifecycle/model.d.ts +2 -59
- package/dist/foundation/lifecycle/model.js +0 -35
- package/dist/foundation/lifecycle/paths.d.ts +0 -24
- package/dist/foundation/lifecycle/paths.js +0 -40
- package/dist/foundation/lifecycle/process-liveness.d.ts +8 -0
- package/dist/foundation/lifecycle/process-liveness.js +18 -0
- package/dist/foundation/lifecycle/session-claim-lock.d.ts +1 -1
- package/dist/foundation/lifecycle/session-claim-lock.js +2 -2
- package/dist/foundation/lifecycle/session-repository-context.d.ts +6 -6
- package/dist/foundation/lifecycle/session-repository-context.js +2 -3
- package/dist/foundation/release/automatic-update.d.ts +6 -17
- package/dist/foundation/release/automatic-update.js +23 -44
- package/dist/foundation/release/bootstrap.d.ts +2 -25
- package/dist/foundation/release/bootstrap.js +37 -348
- package/dist/foundation/release/dependency-certification.d.ts +1 -2
- package/dist/foundation/release/dependency-certification.js +1 -1
- package/dist/foundation/release/early-accent.d.ts +2 -2
- package/dist/foundation/release/early-accent.js +1 -1
- package/dist/foundation/release/index.d.ts +10 -17
- package/dist/foundation/release/index.js +7 -11
- package/dist/foundation/release/latest-release.d.ts +3 -19
- package/dist/foundation/release/latest-release.js +11 -12
- package/dist/foundation/release/ordinary-launch-selection.d.ts +1 -1
- package/dist/foundation/release/ordinary-launch-selection.js +1 -1
- package/dist/foundation/release/process-liveness.d.ts +2 -0
- package/dist/foundation/release/process-liveness.js +12 -0
- package/dist/foundation/release/release-gc.d.ts +13 -10
- package/dist/foundation/release/release-gc.js +37 -101
- package/dist/foundation/release/{cohort-state.d.ts → release-state.d.ts} +44 -69
- package/dist/foundation/release/{cohort-state.js → release-state.js} +38 -70
- package/dist/foundation/release/release-store.d.ts +2 -2
- package/dist/foundation/release/release-store.js +2 -2
- package/dist/foundation/release/restart-certification.js +1 -1
- package/dist/foundation/release/update-activation.d.ts +2 -9
- package/dist/foundation/release/update-activation.js +30 -45
- package/dist/foundation/release/update-execution-lease.d.ts +2 -3
- package/dist/foundation/release/update-execution-lease.js +2 -2
- package/dist/foundation/release/update-launch.d.ts +2 -4
- package/dist/foundation/release/update-launch.js +0 -7
- package/dist/foundation/release/update-recovery.js +1 -1
- package/dist/foundation/release/update-transaction.d.ts +1 -1
- package/dist/foundation/release/update-transaction.js +5 -2
- package/dist/foundation/release/update.d.ts +2 -12
- package/dist/foundation/release/update.js +37 -214
- package/dist/foundation/session-writer-lock/index.d.ts +14 -6
- package/dist/foundation/session-writer-lock/index.js +48 -103
- package/dist/foundation/startup/startup-budget.d.ts +5 -5
- package/dist/foundation/startup/startup-budget.js +2 -2
- package/dist/foundation/startup/startup-runtime.d.ts +1 -1
- package/dist/foundation/terminal-cleanup/exit-notice.d.ts +6 -0
- package/dist/foundation/terminal-cleanup/exit-notice.js +36 -0
- package/dist/foundation/terminal-cleanup/index.d.ts +2 -1
- package/dist/foundation/terminal-cleanup/index.js +2 -1
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +0 -5
- package/dist/foundation/terminal-cleanup/terminal-reset.js +0 -5
- package/dist/integrations/pi/components/editor-interaction.d.ts +4 -12
- package/dist/integrations/pi/components/index.d.ts +15 -9
- package/dist/integrations/pi/components/index.js +9 -5
- package/dist/integrations/pi/components/lazy-selectors.d.ts +2 -10
- package/dist/integrations/pi/components/lazy-selectors.js +1 -1
- package/dist/integrations/pi/components/modal-frame.d.ts +5 -22
- package/dist/integrations/pi/components/modal-frame.js +3 -23
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +4 -3
- package/dist/integrations/pi/components/prompt-input-port.d.ts +2 -19
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +3 -2
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -4
- package/dist/integrations/pi/components/shell-footer-status.d.ts +3 -3
- package/dist/integrations/pi/components/shell-footer-status.js +5 -4
- package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +6 -8
- package/dist/integrations/pi/components/shell-presenters-info.js +6 -19
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +1 -1
- package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
- package/dist/integrations/pi/components/shell-session-info-reference.d.ts +2 -1
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +33 -229
- package/dist/integrations/pi/components/shell-shared-facade.js +8 -1
- package/dist/integrations/pi/components/skills-command.d.ts +1 -9
- package/dist/integrations/pi/components/skills-command.js +5 -5
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +2 -5
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +2 -16
- package/dist/integrations/pi/components/theme.d.ts +9 -2
- package/dist/integrations/pi/components/theme.js +17 -2
- package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +2 -1
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.js +6 -8
- package/dist/integrations/pi/engine/adapter.d.ts +3 -6
- package/dist/integrations/pi/engine/adapter.js +4 -28
- package/dist/integrations/pi/engine/changelog.d.ts +2 -2
- package/dist/integrations/pi/engine/changelog.js +3 -3
- package/dist/integrations/pi/engine/compaction-progress.d.ts +2 -3
- package/dist/integrations/pi/engine/compaction-progress.js +1 -1
- package/dist/integrations/pi/engine/conformance.d.ts +2 -1
- package/dist/integrations/pi/engine/default-model-setting.d.ts +0 -2
- package/dist/integrations/pi/engine/default-model-setting.js +1 -2
- package/dist/integrations/pi/engine/diagnostics-state.d.ts +0 -1
- package/dist/integrations/pi/engine/diagnostics-state.js +0 -14
- package/dist/integrations/pi/engine/event-delivery.d.ts +2 -1
- package/dist/integrations/pi/engine/extension-ui-binding.d.ts +2 -1
- package/dist/integrations/pi/engine/host.js +2 -2
- package/dist/integrations/pi/engine/message-values.d.ts +0 -1
- package/dist/integrations/pi/engine/message-values.js +1 -1
- package/dist/integrations/pi/engine/pending-delivery.d.ts +0 -4
- package/dist/integrations/pi/engine/pending-delivery.js +3 -3
- package/dist/integrations/pi/engine/ports.d.ts +7 -1
- package/dist/integrations/pi/engine/ports.js +4 -0
- package/dist/integrations/pi/engine/project-trust-preflight.d.ts +2 -1
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +3 -3
- package/dist/integrations/pi/engine/prompt-suggestions.js +0 -40
- package/dist/integrations/pi/engine/provider-authentication.d.ts +1 -1
- package/dist/integrations/pi/engine/public-main-entry.d.ts +1 -5
- package/dist/integrations/pi/engine/public-main-entry.js +1 -1
- package/dist/integrations/pi/engine/repository-pr-rest.d.ts +1 -9
- package/dist/integrations/pi/engine/repository-pr-rest.js +2 -2
- package/dist/integrations/pi/engine/repository-pr.d.ts +1 -3
- package/dist/integrations/pi/engine/repository-pr.js +1 -1
- package/dist/integrations/pi/engine/resource-catalog.d.ts +2 -1
- package/dist/integrations/pi/engine/session-integration.d.ts +1 -1
- package/dist/integrations/pi/engine/session-runtime.d.ts +4 -3
- package/dist/integrations/pi/engine/session-runtime.js +0 -2
- package/dist/integrations/pi/engine/settings-bridge.d.ts +0 -2
- package/dist/integrations/pi/engine/settings-bridge.js +1 -1
- package/dist/integrations/pi/engine/settings-port.d.ts +3 -2
- package/dist/integrations/pi/engine/transcript-projection.d.ts +2 -1
- package/dist/integrations/pi/engine/workflow-contexts.d.ts +1 -1
- package/dist/integrations/pi/engine/workflow-runner.d.ts +1 -1
- package/dist/integrations/pi/engine/workflow-runner.js +1 -1
- package/dist/integrations/pi/engine/workflow-support.d.ts +0 -6
- package/dist/integrations/pi/engine/workflow-support.js +4 -18
- package/dist/integrations/pi/engine/workflows.d.ts +5 -5
- package/dist/integrations/pi/session-presenters/components.d.ts +3 -0
- package/dist/integrations/pi/session-presenters/components.js +75 -0
- package/dist/integrations/pi/session-presenters/index.d.ts +1 -0
- package/dist/integrations/pi/session-presenters/index.js +1 -0
- package/dist/integrations/pi/session-presenters/presentation.d.ts +3 -0
- package/dist/integrations/pi/session-presenters/presentation.js +10 -0
- package/dist/integrations/pi/session-presenters/presenters.d.ts +2 -1
- package/dist/integrations/pi/session-presenters/presenters.js +3 -1
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -2
- package/dist/integrations/pi/tui-runtime/adapter.js +23 -32
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +22 -166
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +5 -40
- package/dist/integrations/pi/tui-runtime/index.d.ts +1 -0
- package/dist/integrations/pi/tui-runtime/index.js +1 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +4 -6
- package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +2 -8
- package/dist/integrations/pi/tui-runtime/overlay-geometry.js +3 -9
- package/dist/integrations/pi/tui-runtime/runtime-factory.d.ts +3 -0
- package/dist/integrations/pi/tui-runtime/runtime-factory.js +11 -0
- package/dist/product-identity.d.ts +4 -6
- package/dist/product-identity.js +6 -11
- package/dist/product-identity.json +1 -40
- package/dist/runtime-payload-inventory.json +0 -3
- package/dist/ui/components/index.d.ts +4 -4
- package/dist/ui/components/index.js +2 -2
- package/dist/ui/components/selection-copy.d.ts +0 -1
- package/dist/ui/components/selection-copy.js +0 -12
- package/dist/ui/components/submitted-prompt.d.ts +3 -13
- package/dist/ui/components/submitted-prompt.js +8 -41
- package/dist/ui/components/theme.d.ts +4 -19
- package/dist/ui/components/theme.js +6 -0
- package/dist/ui/components/transcript-viewport.d.ts +1 -3
- package/dist/ui/components/transcript-viewport.js +1 -4
- package/dist/ui/settings/declarations.d.ts +2 -97
- package/dist/ui/settings/declarations.js +2 -78
- package/dist/ui/settings/early-accent.js +1 -1
- package/dist/ui/settings/index.d.ts +3 -5
- package/dist/ui/settings/index.js +2 -3
- package/dist/ui/settings/manager.d.ts +0 -4
- package/dist/ui/settings/manager.js +6 -62
- package/dist/ui/settings/resolution.d.ts +6 -18
- package/dist/ui/settings/resolution.js +4 -103
- package/dist/ui/settings/sections.d.ts +0 -4
- package/dist/ui/settings/sections.js +1 -1
- package/docs/architecture/boundaries.md +23 -40
- package/docs/architecture/code-documentation.md +2 -2
- package/docs/architecture/internal-naming.md +11 -17
- package/docs/architecture/project-structure.md +13 -16
- package/docs/architecture/resource-and-data-policy.md +16 -31
- package/docs/architecture/toolchain.md +14 -19
- package/docs/architecture/ui-reference-provenance.md +2 -2
- package/docs/ci-release-runbook.md +5 -5
- package/docs/features/launch-profiles.md +11 -17
- package/docs/features/prompt-history.md +10 -11
- package/docs/local-worktree-cleanup.md +28 -1
- package/docs/manual-owned-ui-checkpoint.md +0 -1
- package/docs/validation.md +5 -11
- package/docs/worktree-link-recovery.md +6 -6
- package/package.json +7 -20
- package/bin/guardian.js +0 -42
- package/bin/supervisor.js +0 -7
- package/bin/tab-launch-context.d.ts +0 -27
- package/bin/tab-launch-context.js +0 -94
- package/dist/app/session-shell/resident-tab-coordinator.d.ts +0 -38
- package/dist/app/session-shell/resident-tab-coordinator.js +0 -77
- package/dist/cli/tabs-request.d.ts +0 -7
- package/dist/cli/tabs.d.ts +0 -14
- package/dist/cli/tabs.js +0 -151
- package/dist/composition/resident-tab-bridge.d.ts +0 -41
- package/dist/composition/resident-tab-bridge.js +0 -209
- package/dist/composition/utility-tab.d.ts +0 -28
- package/dist/composition/utility-tab.js +0 -244
- package/dist/features/owned-ui/plus-menu-dialog.d.ts +0 -28
- package/dist/features/owned-ui/plus-menu-dialog.js +0 -89
- package/dist/features/resident-tab/auto-name.d.ts +0 -11
- package/dist/features/resident-tab/auto-name.js +0 -44
- package/dist/features/resident-tab/index.d.ts +0 -5
- package/dist/features/resident-tab/index.js +0 -7
- package/dist/features/resident-tab/shortcut-bindings-file.d.ts +0 -8
- package/dist/features/resident-tab/shortcut-bindings-file.js +0 -40
- package/dist/features/resident-tab/shortcut-declarations.d.ts +0 -13
- package/dist/features/resident-tab/shortcut-declarations.js +0 -26
- package/dist/features/resident-tab/shortcut-projection.d.ts +0 -29
- package/dist/features/resident-tab/shortcut-projection.js +0 -64
- package/dist/features/resident-tab/status-deriver.d.ts +0 -10
- package/dist/features/resident-tab/status-deriver.js +0 -12
- package/dist/foundation/launch-guardian/exit-watcher.d.ts +0 -14
- package/dist/foundation/launch-guardian/exit-watcher.js +0 -103
- package/dist/foundation/launch-guardian/index.d.ts +0 -2
- package/dist/foundation/launch-guardian/index.js +0 -1
- package/dist/foundation/launch-guardian/main.d.ts +0 -39
- package/dist/foundation/launch-guardian/main.js +0 -232
- package/dist/foundation/lifecycle/commands.d.ts +0 -40
- package/dist/foundation/lifecycle/launch-instance.d.ts +0 -46
- package/dist/foundation/lifecycle/launch-instance.js +0 -134
- package/dist/foundation/lifecycle/native-claim-gate.d.ts +0 -5
- package/dist/foundation/lifecycle/native-claim-gate.js +0 -41
- package/dist/foundation/lifecycle/supervisor-startup.d.ts +0 -30
- package/dist/foundation/lifecycle/supervisor-startup.js +0 -106
- package/dist/foundation/process-containment/addon-containment.d.ts +0 -20
- package/dist/foundation/process-containment/addon-containment.js +0 -139
- package/dist/foundation/process-containment/addon-process-inspector.d.ts +0 -11
- package/dist/foundation/process-containment/addon-process-inspector.js +0 -36
- package/dist/foundation/process-containment/addon.d.ts +0 -47
- package/dist/foundation/process-containment/addon.js +0 -57
- package/dist/foundation/process-containment/artifact.d.ts +0 -1
- package/dist/foundation/process-containment/artifact.js +0 -35
- package/dist/foundation/process-containment/contracts.d.ts +0 -33
- package/dist/foundation/process-containment/contracts.js +0 -35
- package/dist/foundation/process-containment/index.d.ts +0 -9
- package/dist/foundation/process-containment/index.js +0 -7
- package/dist/foundation/process-containment/linux-process-inspector.d.ts +0 -7
- package/dist/foundation/process-containment/linux-process-inspector.js +0 -27
- package/dist/foundation/process-containment/native-process-inspector.d.ts +0 -4
- package/dist/foundation/process-containment/native-process-inspector.js +0 -21
- package/dist/foundation/protocol/client.d.ts +0 -18
- package/dist/foundation/protocol/client.js +0 -130
- package/dist/foundation/protocol/index.d.ts +0 -3
- package/dist/foundation/protocol/index.js +0 -2
- package/dist/foundation/protocol/messages.d.ts +0 -90
- package/dist/foundation/protocol/messages.js +0 -100
- package/dist/foundation/release/cohort-selection.d.ts +0 -33
- package/dist/foundation/release/cohort-selection.js +0 -67
- package/dist/foundation/release/endpoint-lock.d.ts +0 -2
- package/dist/foundation/release/endpoint-lock.js +0 -37
- package/dist/foundation/release/endpoint-recovery.d.ts +0 -10
- package/dist/foundation/release/endpoint-recovery.js +0 -45
- package/dist/foundation/release/endpoints.d.ts +0 -32
- package/dist/foundation/release/endpoints.js +0 -152
- package/dist/foundation/release/prepared-update-activation.d.ts +0 -3
- package/dist/foundation/release/prepared-update-activation.js +0 -27
- package/dist/foundation/release/process-cleanup.d.ts +0 -14
- package/dist/foundation/release/process-cleanup.js +0 -76
- package/dist/foundation/release/supervisor-identity.d.ts +0 -15
- package/dist/foundation/release/supervisor-identity.js +0 -63
- package/dist/foundation/resident-tabs/boot-identity.d.ts +0 -6
- package/dist/foundation/resident-tabs/boot-identity.js +0 -16
- package/dist/foundation/resident-tabs/bounded-host-command.d.ts +0 -20
- package/dist/foundation/resident-tabs/bounded-host-command.js +0 -62
- package/dist/foundation/resident-tabs/bridge-client.d.ts +0 -73
- package/dist/foundation/resident-tabs/bridge-client.js +0 -327
- package/dist/foundation/resident-tabs/continuity.d.ts +0 -12
- package/dist/foundation/resident-tabs/continuity.js +0 -63
- package/dist/foundation/resident-tabs/doctor.d.ts +0 -28
- package/dist/foundation/resident-tabs/doctor.js +0 -166
- package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +0 -27
- package/dist/foundation/resident-tabs/draft-checkpoint.js +0 -145
- package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +0 -36
- package/dist/foundation/resident-tabs/ensure-terminal-host.js +0 -151
- package/dist/foundation/resident-tabs/fault-injection.d.ts +0 -8
- package/dist/foundation/resident-tabs/fault-injection.js +0 -26
- package/dist/foundation/resident-tabs/fixture-control.d.ts +0 -7
- package/dist/foundation/resident-tabs/fixture-control.js +0 -35
- package/dist/foundation/resident-tabs/host-entry.js +0 -17
- package/dist/foundation/resident-tabs/index.d.ts +0 -15
- package/dist/foundation/resident-tabs/index.js +0 -10
- package/dist/foundation/resident-tabs/maintenance.d.ts +0 -39
- package/dist/foundation/resident-tabs/maintenance.js +0 -75
- package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +0 -34
- package/dist/foundation/resident-tabs/progress-observation-schema.js +0 -1
- package/dist/foundation/resident-tabs/progress-observation.d.ts +0 -4
- package/dist/foundation/resident-tabs/progress-observation.js +0 -150
- package/dist/foundation/resident-tabs/prompt-journal.d.ts +0 -63
- package/dist/foundation/resident-tabs/prompt-journal.js +0 -213
- package/dist/foundation/resident-tabs/protocol.d.ts +0 -12
- package/dist/foundation/resident-tabs/protocol.js +0 -195
- package/dist/foundation/resident-tabs/recovery.d.ts +0 -26
- package/dist/foundation/resident-tabs/recovery.js +0 -205
- package/dist/foundation/resident-tabs/release-holds.d.ts +0 -28
- package/dist/foundation/resident-tabs/release-holds.js +0 -78
- package/dist/foundation/resident-tabs/routes.d.ts +0 -5
- package/dist/foundation/resident-tabs/routes.js +0 -5
- package/dist/foundation/resident-tabs/routing.d.ts +0 -11
- package/dist/foundation/resident-tabs/routing.js +0 -10
- package/dist/foundation/resident-tabs/runtime-control.d.ts +0 -38
- package/dist/foundation/resident-tabs/runtime-control.js +0 -74
- package/dist/foundation/resident-tabs/session-sync.d.ts +0 -14
- package/dist/foundation/resident-tabs/session-sync.js +0 -37
- package/dist/foundation/resident-tabs/settings.d.ts +0 -16
- package/dist/foundation/resident-tabs/settings.js +0 -60
- package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +0 -14
- package/dist/foundation/resident-tabs/terminal-host-artifact.js +0 -78
- package/dist/foundation/resident-tabs/zip-archive.d.ts +0 -9
- package/dist/foundation/resident-tabs/zip-archive.js +0 -56
- package/dist/foundation/storage/control-store.d.ts +0 -20
- package/dist/foundation/storage/control-store.js +0 -331
- package/dist/foundation/storage/index.d.ts +0 -1
- package/dist/foundation/storage/index.js +0 -1
- package/dist/foundation/supervision/index.d.ts +0 -3
- package/dist/foundation/supervision/index.js +0 -3
- package/dist/foundation/supervision/main.d.ts +0 -1
- package/dist/foundation/supervision/main.js +0 -86
- package/dist/foundation/supervision/paths.d.ts +0 -1
- package/dist/foundation/supervision/paths.js +0 -1
- package/dist/foundation/supervision/server.d.ts +0 -46
- package/dist/foundation/supervision/server.js +0 -611
- package/dist/integrations/pi/components/components.d.ts +0 -4
- package/dist/integrations/pi/components/components.js +0 -48
- package/dist/integrations/pi/components/conformance.d.ts +0 -18
- package/dist/integrations/pi/components/conformance.js +0 -70
- package/dist/integrations/pi/components/shell-components.d.ts +0 -7
- package/dist/integrations/pi/components/shell-components.js +0 -7
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +0 -33
- package/dist/integrations/pi/components/upstream/theme/theme-controller.js +0 -114
- package/dist/integrations/pi/engine/offline-settings-port.d.ts +0 -23
- package/dist/integrations/pi/engine/offline-settings-port.js +0 -54
- package/dist/native/darwin-arm64/manifest.json +0 -23
- package/dist/native/darwin-arm64/process-guardian.node +0 -0
- package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10500
- package/dist/native/darwin-arm64/terminal-host.manifest.json +0 -46
- package/dist/native/darwin-arm64/terminal-host.node +0 -0
- package/dist/native/darwin-x64/manifest.json +0 -23
- package/dist/native/darwin-x64/process-guardian.node +0 -0
- package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10737
- package/dist/native/darwin-x64/terminal-host.manifest.json +0 -46
- package/dist/native/darwin-x64/terminal-host.node +0 -0
- package/dist/native/linux-x64/manifest.json +0 -23
- package/dist/native/linux-x64/process-guardian.node +0 -0
- package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -11226
- package/dist/native/linux-x64/terminal-host.manifest.json +0 -46
- package/dist/native/linux-x64/terminal-host.node +0 -0
- package/dist/native/win32-x64/manifest.json +0 -23
- package/dist/native/win32-x64/process-guardian.node +0 -0
- package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10757
- package/dist/native/win32-x64/terminal-host.manifest.json +0 -46
- package/dist/native/win32-x64/terminal-host.node +0 -0
- package/dist/ui/settings/migrations.d.ts +0 -19
- package/dist/ui/settings/migrations.js +0 -209
- package/dist/ui/settings/progress-palette.generated.d.ts +0 -139
- package/dist/ui/settings/progress-palette.generated.js +0 -139
- package/docs/architecture/evidence/resident-tabs/linux-x64.md +0 -37
- package/docs/architecture/evidence/resident-tabs/macos-arm64.md +0 -36
- package/docs/architecture/evidence/resident-tabs/macos-x64.md +0 -35
- package/docs/architecture/evidence/resident-tabs/windows-x64.md +0 -36
- package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +0 -70
- package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +0 -32
- package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +0 -115
- package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +0 -48
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +0 -125
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +0 -56
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +0 -174
- package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +0 -18
- package/docs/architecture/native-fixture-isolation.md +0 -23
- package/docs/architecture/process-guardian-provenance.md +0 -36
- package/docs/architecture/resident-tabs-requirements.md +0 -18
- package/docs/architecture/resident-tabs.md +0 -668
- package/docs/architecture/terminal-host-proof-gate.md +0 -34
- package/docs/architecture/terminal-host-provenance.md +0 -81
- package/docs/architecture/terminal-host-spike-evidence.md +0 -39
- package/docs/launch-recovery.md +0 -23
- package/docs/manual-launch-instance-acceptance.md +0 -43
- package/docs/manual-resident-tabs-acceptance.md +0 -51
- /package/dist/{cli/tabs-request.js → contracts/owned-ui/shell-components.js} +0 -0
- /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.d.ts +0 -0
- /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.js +0 -0
- /package/dist/{foundation/lifecycle/commands.js → contracts/presentation/terminal.js} +0 -0
- /package/dist/{foundation/resident-tabs/host-entry.d.ts → contracts/presentation/theme.js} +0 -0
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import { MOUSE_TRACKING_OFF, MOUSE_TRACKING_ON, parseMouseInput } from "../../ui/components/mouse.js";
|
|
2
2
|
import { readVisibleHyperlinks } from "../../ui/components/visible-hyperlinks.js";
|
|
3
|
-
import { piCanvasBackgroundAnsi } from "../../integrations/pi/components/theme.js";
|
|
4
|
-
import { residentFixtureControl } from "../../foundation/resident-tabs/fixture-control.js";
|
|
5
|
-
import { residentProgressObserver } from "../../foundation/resident-tabs/progress-observation.js";
|
|
6
|
-
import { DamageAwareTerminalAdapter, } from "../../integrations/pi/tui-runtime/damage-aware-terminal.js";
|
|
7
|
-
import { PiTuiRuntimeAdapter, legacyKeyInput } from "../../integrations/pi/tui-runtime/adapter.js";
|
|
8
|
-
import { classifyPiTuiInput } from "../../integrations/pi/tui-runtime/input-presentation-coordinator.js";
|
|
9
3
|
import { pinnedLayoutRoot, } from "./session-shell-root.js";
|
|
10
4
|
/** The size and render request a Pi component reads from the terminal it is shown on, read on every call. */
|
|
11
5
|
export function componentRuntime(terminal) {
|
|
@@ -22,6 +16,7 @@ export function sessionTerminalHostOptions(options) {
|
|
|
22
16
|
const customViewport = sessionLayout === "custom-viewport";
|
|
23
17
|
const settings = backend.settings.snapshot();
|
|
24
18
|
return {
|
|
19
|
+
presentation: options.presenters,
|
|
25
20
|
layout: customViewport ? "custom-viewport" : "pinned",
|
|
26
21
|
// Invariant: bare A1 owns a bounded viewport and therefore always runs on the alternate
|
|
27
22
|
// fullscreen surface. The pinned comparison profiles still honor Pi's mode.
|
|
@@ -42,12 +37,13 @@ export function sessionTerminalHostOptions(options) {
|
|
|
42
37
|
export class OwnedUiTerminalHost {
|
|
43
38
|
runtime;
|
|
44
39
|
#customViewport;
|
|
40
|
+
#runtimeFactory;
|
|
45
41
|
#damageTerminal;
|
|
46
42
|
#quitOutro;
|
|
47
43
|
#presenters = new Set();
|
|
48
44
|
#overlays = new Map();
|
|
49
|
-
|
|
50
|
-
#
|
|
45
|
+
// Invariant: one release removes both the viewport pre-input listener and the background subscription.
|
|
46
|
+
#release;
|
|
51
47
|
#active = null;
|
|
52
48
|
#focused = false;
|
|
53
49
|
#pointerReporting = false;
|
|
@@ -55,10 +51,9 @@ export class OwnedUiTerminalHost {
|
|
|
55
51
|
#ending;
|
|
56
52
|
constructor(options) {
|
|
57
53
|
this.#customViewport = options.layout === "custom-viewport";
|
|
54
|
+
this.#runtimeFactory = options.presentation.terminalRuntime;
|
|
58
55
|
this.#quitOutro = options.quitOutro;
|
|
59
56
|
const input = options.input;
|
|
60
|
-
const fixtureControl = residentFixtureControl();
|
|
61
|
-
const progressObserver = residentProgressObserver();
|
|
62
57
|
let damageTerminal;
|
|
63
58
|
const surface = {
|
|
64
59
|
render: width => this.#active?.render(width) ?? [],
|
|
@@ -79,35 +74,25 @@ export class OwnedUiTerminalHost {
|
|
|
79
74
|
consumeUnhandledMouse: true,
|
|
80
75
|
onOverlayGeometry: surfaces => this.#active?.setOverlaySurfaces(surfaces),
|
|
81
76
|
decorateTerminal: (terminal) => {
|
|
82
|
-
damageTerminal =
|
|
77
|
+
damageTerminal = this.#runtimeFactory.createDamageTerminal(terminal, {
|
|
83
78
|
regionalScroll: process.env.TERM !== "dumb",
|
|
84
79
|
inspectHyperlinks: readVisibleHyperlinks,
|
|
85
80
|
onResize: () => this.#active?.noteImmediatePresentation(),
|
|
86
81
|
onHyperlinkCleanupRequired: () => this.runtime?.requestRender(true),
|
|
87
|
-
...(fixtureControl === null ? {} : {
|
|
88
|
-
allowWrite: () => !fixtureControl.stopped("child-render-write"),
|
|
89
|
-
writeChunks: data => fixtureControl.fragmentChildWrite(data),
|
|
90
|
-
}),
|
|
91
|
-
...(progressObserver === null ? {} : {
|
|
92
|
-
onWrite: ({ bytes, fragments, transaction, frameId, cause }) => progressObserver.childRenderWrite(bytes, fragments, transaction, frameId, cause),
|
|
93
|
-
}),
|
|
94
82
|
});
|
|
95
83
|
return damageTerminal;
|
|
96
84
|
},
|
|
97
85
|
...(input?.coordination === false ? {} : {
|
|
98
86
|
inputCoordination: {
|
|
99
|
-
classify: (data, focusedOverlay) =>
|
|
87
|
+
classify: (data, focusedOverlay) => this.#runtimeFactory.classifyInput(data, focusedOverlay ?? this.#active?.inputCoordinationSurface() ?? "opaque"),
|
|
100
88
|
onReceipt: () => this.#active?.noteImmediatePresentation(),
|
|
101
89
|
...(input?.scheduler === undefined ? {} : { scheduler: input.scheduler }),
|
|
102
90
|
},
|
|
103
91
|
}),
|
|
104
|
-
} : { layoutRoot: pinnedLayoutRoot(this.#delegatingLayoutParts()) }),
|
|
105
|
-
...(input?.onEvent === undefined
|
|
92
|
+
} : { layoutRoot: pinnedLayoutRoot(this.#delegatingLayoutParts(), options.presentation.theme) }),
|
|
93
|
+
...(input?.onEvent === undefined ? {} : {
|
|
106
94
|
inputDiagnostics: {
|
|
107
|
-
onEvent:
|
|
108
|
-
input?.onEvent?.(event);
|
|
109
|
-
progressObserver?.inputPhase?.(event.phase, event.revision);
|
|
110
|
-
},
|
|
95
|
+
onEvent: input.onEvent,
|
|
111
96
|
...(input?.now === undefined ? {} : { now: input.now }),
|
|
112
97
|
},
|
|
113
98
|
}),
|
|
@@ -115,18 +100,19 @@ export class OwnedUiTerminalHost {
|
|
|
115
100
|
hardwareCursor: options.hardwareCursor,
|
|
116
101
|
...(options.wheelScrollLines === undefined ? {} : { wheelScrollLines: options.wheelScrollLines }),
|
|
117
102
|
};
|
|
118
|
-
this.runtime =
|
|
103
|
+
this.runtime = this.#runtimeFactory.createRuntime(runtimeOptions);
|
|
119
104
|
this.#damageTerminal = damageTerminal ?? null;
|
|
120
105
|
const background = this.#customViewport ? options.backgroundSettings : undefined;
|
|
121
106
|
if (background !== undefined)
|
|
122
|
-
this.#damageTerminal?.setCanvasBackground(
|
|
123
|
-
|
|
124
|
-
if (this.#damageTerminal?.setCanvasBackground(
|
|
107
|
+
this.#damageTerminal?.setCanvasBackground(options.presentation.canvasBackground(background.snapshot()));
|
|
108
|
+
const unsubscribeBackground = background === undefined || this.#damageTerminal === null ? () => { } : background.onChange(style => {
|
|
109
|
+
if (this.#damageTerminal?.setCanvasBackground(options.presentation.canvasBackground(style)))
|
|
125
110
|
this.runtime.requestRender(true);
|
|
126
111
|
});
|
|
127
|
-
|
|
112
|
+
const removeViewportPreInput = this.#customViewport
|
|
128
113
|
? this.runtime.addPreInputListener(data => this.#active?.handleViewportInput(data))
|
|
129
114
|
: () => { };
|
|
115
|
+
this.#release = () => { removeViewportPreInput(); unsubscribeBackground(); };
|
|
130
116
|
}
|
|
131
117
|
get damagePresentationDecision() {
|
|
132
118
|
return this.#damageTerminal?.lastDecision ?? null;
|
|
@@ -168,8 +154,6 @@ export class OwnedUiTerminalHost {
|
|
|
168
154
|
active() {
|
|
169
155
|
return this.#active;
|
|
170
156
|
}
|
|
171
|
-
// Invariant: resident tab visibility never gates rendering here; a hidden tab keeps painting into its
|
|
172
|
-
// resident terminal, and the native holder alone withholds inactive surfaces from attach clients.
|
|
173
157
|
requestRender(from, force = false) {
|
|
174
158
|
if (from === this.#active)
|
|
175
159
|
this.runtime.requestRender(force);
|
|
@@ -215,8 +199,7 @@ export class OwnedUiTerminalHost {
|
|
|
215
199
|
// Invariant: the outro frame is what the terminal shows now, before any cleanup writes.
|
|
216
200
|
const outroFrame = this.#captureQuitOutroFrame();
|
|
217
201
|
attempt(() => this.#setPointerReporting(false, true));
|
|
218
|
-
attempt(() => this.#
|
|
219
|
-
attempt(() => this.#unsubscribeBackground());
|
|
202
|
+
attempt(() => this.#release());
|
|
220
203
|
const terminal = { mode: this.runtime.mode, columns: this.runtime.viewport().columns };
|
|
221
204
|
const active = this.#active;
|
|
222
205
|
const releases = [];
|
|
@@ -360,7 +343,7 @@ export class OwnedUiTerminalHost {
|
|
|
360
343
|
};
|
|
361
344
|
removeInterruptWatch = runtime.addInputListener(data => {
|
|
362
345
|
// Compatibility: a kitty-keyboard child reports Ctrl+C as a CSI-u sequence rather than the byte.
|
|
363
|
-
if (!attached() || !data.includes(INTERRUPT) && legacyKeyInput(data) !== INTERRUPT)
|
|
346
|
+
if (!attached() || !data.includes(INTERRUPT) && this.#runtimeFactory.legacyKeyInput(data) !== INTERRUPT)
|
|
364
347
|
return undefined;
|
|
365
348
|
// Protocol: route hosts decide whether one interrupt closes their app. Raw-input forwarding
|
|
366
349
|
// is required because Pi handles Ctrl+C before the fullscreen overlay receives normal input.
|
|
@@ -419,7 +402,7 @@ export class OwnedUiTerminalHost {
|
|
|
419
402
|
for (const event of events)
|
|
420
403
|
surface.handleMouse(event);
|
|
421
404
|
// Invariant: owned screens see legacy key bytes whether the terminal reports legacy or kitty keys.
|
|
422
|
-
const key = rest.length > 0 ? legacyKeyInput(rest) : "";
|
|
405
|
+
const key = rest.length > 0 ? this.#runtimeFactory.legacyKeyInput(rest) : "";
|
|
423
406
|
if (key.length > 0)
|
|
424
407
|
surface.handleInput(key);
|
|
425
408
|
if (surface.isClosed()) {
|
|
@@ -487,7 +470,7 @@ export class OwnedUiTerminalHost {
|
|
|
487
470
|
write: data => this.runtime.writeControl(data),
|
|
488
471
|
...(capture.settings.canvasBackgroundAnsi === null
|
|
489
472
|
? {}
|
|
490
|
-
: {
|
|
473
|
+
: { canvas: { ansi: capture.settings.canvasBackgroundAnsi, rebase: this.#runtimeFactory.rebaseDefaultBackground } }),
|
|
491
474
|
...(outro.now === undefined ? {} : { now: outro.now }),
|
|
492
475
|
...(outro.sleep === undefined ? {} : { sleep: outro.sleep }),
|
|
493
476
|
...(outro.seed === undefined ? {} : { seed: outro.seed }),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { OwnedUiShellEditorPort } from "../../contracts/owned-ui/index.js";
|
|
1
2
|
import type { OwnedUiSessionViewModel } from "../../contracts/owned-ui/index.js";
|
|
2
3
|
import type { TranscriptViewportFrame, TranscriptViewportFrameInput, TranscriptViewportTheme } from "../../ui/components/transcript-viewport.js";
|
|
3
|
-
import type { PiShellEditorPort } from "../../integrations/pi/components/shell-shared-facade.js";
|
|
4
4
|
import type { DockChrome } from "./dock-chrome.js";
|
|
5
5
|
import type { InputSurfaceSwitch } from "./input-surface-switch.js";
|
|
6
6
|
import type { PromptChipStore } from "./prompt-chips.js";
|
|
@@ -20,7 +20,7 @@ export interface DockLayout {
|
|
|
20
20
|
export interface ShellLayoutPorts {
|
|
21
21
|
readonly viewport: SessionViewportController;
|
|
22
22
|
readonly input: InputSurfaceSwitch;
|
|
23
|
-
readonly editor: Pick<
|
|
23
|
+
readonly editor: Pick<OwnedUiShellEditorPort, "getText">;
|
|
24
24
|
readonly promptChips: Pick<PromptChipStore, "atomicRanges">;
|
|
25
25
|
readonly dockChrome: Pick<DockChrome, "renderPromptOverlay" | "renderReleaseBanner" | "locateReleaseClose">;
|
|
26
26
|
readonly theme: TranscriptViewportTheme;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { OwnedUiEvent, OwnedUiSessionViewModel, SuggestionDecision } from "../../contracts/owned-ui/index.js";
|
|
2
|
+
import { type ContextualPromptSuggestionSurface } from "./prompt-suggestion-controller.js";
|
|
3
|
+
import type { SessionConcern } from "./session-concern.js";
|
|
4
|
+
import type { OwnedUiShellSuggestionOptions } from "./session-shell-root.js";
|
|
5
|
+
type ResponseEvent = Extract<OwnedUiEvent, {
|
|
6
|
+
readonly type: "assistant-message-completed" | "agent-run-settled";
|
|
7
|
+
}>;
|
|
8
|
+
/**
|
|
9
|
+
* One shell's contextual prompt suggestions: the controller, its live enablement, and the model key that
|
|
10
|
+
* invalidates a pending suggestion. Without suggestion options every call is a no-op.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ShellPromptSuggestions implements SessionConcern {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(options: OwnedUiShellSuggestionOptions | undefined, surface: ContextualPromptSuggestionSurface, view: OwnedUiSessionViewModel);
|
|
15
|
+
invalidate(): void;
|
|
16
|
+
abortPending(): void;
|
|
17
|
+
accept(): void;
|
|
18
|
+
restoreAvailable(): void;
|
|
19
|
+
/** Hands a completed or settled response to the controller. */
|
|
20
|
+
route(event: ResponseEvent, prepareBlockReason: () => SuggestionDecision): void;
|
|
21
|
+
/** Invalidates a pending suggestion when the session was replaced or the active model changed. */
|
|
22
|
+
noteView(view: OwnedUiSessionViewModel, sessionReplaced: boolean): void;
|
|
23
|
+
onSessionReplaced(): void;
|
|
24
|
+
dispose(): void;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ContextualPromptSuggestionController } from "./prompt-suggestion-controller.js";
|
|
2
|
+
import { routeResponseToSuggestions, suggestionModelKey } from "./suggestion-surface.js";
|
|
3
|
+
/**
|
|
4
|
+
* One shell's contextual prompt suggestions: the controller, its live enablement, and the model key that
|
|
5
|
+
* invalidates a pending suggestion. Without suggestion options every call is a no-op.
|
|
6
|
+
*/
|
|
7
|
+
export class ShellPromptSuggestions {
|
|
8
|
+
#controller;
|
|
9
|
+
#unsubscribe;
|
|
10
|
+
#modelKey;
|
|
11
|
+
constructor(options, surface, view) {
|
|
12
|
+
this.#modelKey = suggestionModelKey(view);
|
|
13
|
+
this.#controller = options === undefined ? null : new ContextualPromptSuggestionController({
|
|
14
|
+
generator: options.generator,
|
|
15
|
+
enabled: options.enabled(),
|
|
16
|
+
...(options.diagnostics === undefined ? {} : { diagnostics: options.diagnostics }),
|
|
17
|
+
surface,
|
|
18
|
+
});
|
|
19
|
+
try {
|
|
20
|
+
this.#unsubscribe = options === undefined ? () => { } : options.onChange(enabled => this.#controller?.setEnabled(enabled));
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
this.#controller?.dispose();
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
invalidate() { this.#controller?.invalidate(); }
|
|
28
|
+
abortPending() { this.#controller?.abortPending(); }
|
|
29
|
+
accept() { this.#controller?.accept(); }
|
|
30
|
+
restoreAvailable() { this.#controller?.restoreAvailable(); }
|
|
31
|
+
/** Hands a completed or settled response to the controller. */
|
|
32
|
+
route(event, prepareBlockReason) {
|
|
33
|
+
routeResponseToSuggestions(this.#controller, event, prepareBlockReason);
|
|
34
|
+
}
|
|
35
|
+
/** Invalidates a pending suggestion when the session was replaced or the active model changed. */
|
|
36
|
+
noteView(view, sessionReplaced) {
|
|
37
|
+
const key = suggestionModelKey(view);
|
|
38
|
+
if (!sessionReplaced && key === this.#modelKey)
|
|
39
|
+
return;
|
|
40
|
+
this.#controller?.invalidate();
|
|
41
|
+
this.#modelKey = key;
|
|
42
|
+
}
|
|
43
|
+
onSessionReplaced() { this.invalidate(); }
|
|
44
|
+
dispose() {
|
|
45
|
+
this.#controller?.dispose();
|
|
46
|
+
this.#unsubscribe();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -6,14 +6,9 @@ type ResponseEvent = Extract<OwnedUiEvent, {
|
|
|
6
6
|
}>;
|
|
7
7
|
/** The provider/model key a suggestion identity and the session view are compared by; empty without a model. */
|
|
8
8
|
export declare function suggestionModelKey(view: Pick<OwnedUiSessionViewModel, "activeModel">): string;
|
|
9
|
-
/**
|
|
10
|
-
* Why a completed response cannot seed a suggestion, checked in order; `prepareBlockReason` is asked
|
|
11
|
-
* only when the response itself qualifies.
|
|
12
|
-
*/
|
|
13
|
-
export declare function responseSuggestionDecision(event: ResponseEvent, prepareBlockReason: () => SuggestionDecision): SuggestionDecision;
|
|
14
9
|
/** Hands one completed or settled response to the controller: skipped without a model, otherwise considered or settled. */
|
|
15
10
|
export declare function routeResponseToSuggestions(controller: Pick<ContextualPromptSuggestionController, "skip" | "consider" | "settle"> | null, event: ResponseEvent, prepareBlockReason: () => SuggestionDecision): void;
|
|
16
|
-
|
|
11
|
+
interface SuggestionPresentationState {
|
|
17
12
|
readonly disposed: boolean;
|
|
18
13
|
readonly view: Pick<OwnedUiSessionViewModel, "sessionId" | "activeModel">;
|
|
19
14
|
readonly sessionGeneration: number;
|
|
@@ -6,7 +6,7 @@ export function suggestionModelKey(view) {
|
|
|
6
6
|
* Why a completed response cannot seed a suggestion, checked in order; `prepareBlockReason` is asked
|
|
7
7
|
* only when the response itself qualifies.
|
|
8
8
|
*/
|
|
9
|
-
|
|
9
|
+
function responseSuggestionDecision(event, prepareBlockReason) {
|
|
10
10
|
if (!event.successful)
|
|
11
11
|
return "failed-response";
|
|
12
12
|
if (event.toolContinuation || event.stopReason === "toolUse")
|
|
@@ -1,20 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export interface SystemClipboardImageReader {
|
|
3
|
-
hasImage(): boolean;
|
|
4
|
-
getImageBinary?(): Promise<readonly number[]>;
|
|
5
|
-
getImageBase64?(): Promise<string>;
|
|
6
|
-
}
|
|
7
|
-
/** Load the native adapter during shell startup so the first paste is warm. */
|
|
8
|
-
export declare function preloadSystemClipboard(): void;
|
|
1
|
+
import type { OwnedUiShellClipboardContent } from "../../contracts/owned-ui/index.js";
|
|
9
2
|
/**
|
|
10
3
|
* Reads plain text through platform clipboard commands without importing Pi's
|
|
11
4
|
* private clipboard module. Failures are deliberately non-fatal: a denied or
|
|
12
5
|
* unavailable clipboard simply makes the paste action a no-op.
|
|
13
6
|
*/
|
|
14
|
-
export declare function readSystemClipboardContent(signal?: AbortSignal, strict?: boolean): Promise<
|
|
15
|
-
export declare function readSystemClipboardImage(reader: SystemClipboardImageReader): Promise<{
|
|
16
|
-
readonly data: string;
|
|
17
|
-
readonly mimeType: string;
|
|
18
|
-
} | null>;
|
|
19
|
-
export declare function readSystemClipboardText(signal?: AbortSignal, strict?: boolean): Promise<string | null>;
|
|
7
|
+
export declare function readSystemClipboardContent(signal?: AbortSignal, strict?: boolean): Promise<OwnedUiShellClipboardContent | null>;
|
|
20
8
|
export declare function writeSystemClipboardText(text: string): Promise<void>;
|
|
@@ -5,11 +5,6 @@ import { assertSourceBytes } from "./image-source.js";
|
|
|
5
5
|
const MAX_CLIPBOARD_BYTES = 16 * 1024 * 1024;
|
|
6
6
|
let nativeClipboardPromise;
|
|
7
7
|
let pendingClipboardWrite = Promise.resolve();
|
|
8
|
-
/** Load the native adapter during shell startup so the first paste is warm. */
|
|
9
|
-
export function preloadSystemClipboard() {
|
|
10
|
-
if (process.platform === "win32" || process.platform === "darwin")
|
|
11
|
-
void nativeClipboard();
|
|
12
|
-
}
|
|
13
8
|
/**
|
|
14
9
|
* Reads plain text through platform clipboard commands without importing Pi's
|
|
15
10
|
* private clipboard module. Failures are deliberately non-fatal: a denied or
|
|
@@ -38,7 +33,7 @@ export async function readSystemClipboardContent(signal, strict = false) {
|
|
|
38
33
|
const text = await readSystemClipboardText(signal, strict);
|
|
39
34
|
return text === null ? null : { kind: "text", text };
|
|
40
35
|
}
|
|
41
|
-
|
|
36
|
+
async function readSystemClipboardImage(reader) {
|
|
42
37
|
if (!reader.hasImage())
|
|
43
38
|
return null;
|
|
44
39
|
if (reader.getImageBinary !== undefined) {
|
|
@@ -74,7 +69,7 @@ export async function readSystemClipboardImage(reader) {
|
|
|
74
69
|
}
|
|
75
70
|
return null;
|
|
76
71
|
}
|
|
77
|
-
|
|
72
|
+
async function readSystemClipboardText(signal, strict = false) {
|
|
78
73
|
// Concurrency: Ctrl+C/Ctrl+X and Ctrl+V can arrive in adjacent input turns. Serialize the
|
|
79
74
|
// read behind our native write so paste never observes the previous value.
|
|
80
75
|
await pendingClipboardWrite;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { OwnedUiShellComponents, OwnedUiShellTranscriptComponentPort } from "../../contracts/owned-ui/index.js";
|
|
2
|
+
import type { OwnedUiSessionViewModel } from "../../contracts/owned-ui/index.js";
|
|
3
|
+
import type { ThemeSource } from "../../contracts/presentation/index.js";
|
|
2
4
|
import type { TranscriptPromptAnchor } from "../../ui/components/transcript-viewport.js";
|
|
3
|
-
import type { PiShellTranscriptComponentPort } from "../../integrations/pi/components/shell-shared-facade.js";
|
|
4
5
|
type TranscriptBlock = OwnedUiSessionViewModel["transcript"][number];
|
|
5
6
|
export interface TranscriptDocumentLayout {
|
|
6
7
|
readonly rows: readonly string[];
|
|
@@ -13,7 +14,7 @@ export interface TranscriptDocumentLayout {
|
|
|
13
14
|
*/
|
|
14
15
|
export type TranscriptInvalidation = "editor-padding" | "diagnostics" | "workflow-status" | "extension-header" | "viewport-config" | "extension-renderers" | "block-presentation" | "tools-expanded" | "repaint";
|
|
15
16
|
/** What the document reads from the shell around it on every uncached layout. */
|
|
16
|
-
|
|
17
|
+
interface TranscriptDocumentChrome {
|
|
17
18
|
diagnostics(): OwnedUiSessionViewModel["diagnostics"];
|
|
18
19
|
/** The extension header's rows when one is set, else the built-in header's rows for this layout. */
|
|
19
20
|
headerRows(width: number): readonly string[];
|
|
@@ -22,13 +23,14 @@ export interface TranscriptDocumentChrome {
|
|
|
22
23
|
/** An extension header may animate, so a document under one is never cached. */
|
|
23
24
|
hasExtensionHeader(): boolean;
|
|
24
25
|
thinkingVisible(): boolean;
|
|
25
|
-
timeFormat(): OwnedUiViewportSettings["timeFormat"];
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
interface TranscriptDocumentOptions {
|
|
28
|
+
readonly theme: ThemeSource;
|
|
29
|
+
readonly components: Pick<OwnedUiShellComponents, "info" | "transcript">;
|
|
28
30
|
readonly customViewport: boolean;
|
|
29
31
|
readonly cwd: string;
|
|
30
32
|
/** Creates the component for a newly seen block; its change callback should call `blockChanged`. */
|
|
31
|
-
mount(block: TranscriptBlock):
|
|
33
|
+
mount(block: TranscriptBlock): OwnedUiShellTranscriptComponentPort;
|
|
32
34
|
readonly chrome: TranscriptDocumentChrome;
|
|
33
35
|
}
|
|
34
36
|
/**
|
|
@@ -41,8 +43,8 @@ export declare class TranscriptDocument {
|
|
|
41
43
|
/** Block component renders since construction, for rendering evidence. */
|
|
42
44
|
get renderCount(): number;
|
|
43
45
|
get lastId(): string | undefined;
|
|
44
|
-
component(id: string):
|
|
45
|
-
components(): IterableIterator<
|
|
46
|
+
component(id: string): OwnedUiShellTranscriptComponentPort | undefined;
|
|
47
|
+
components(): IterableIterator<OwnedUiShellTranscriptComponentPort>;
|
|
46
48
|
anchorOf(id: string): number | undefined;
|
|
47
49
|
/**
|
|
48
50
|
* Applies one block: its component is created or updated in place and the order grows
|
|
@@ -53,7 +55,7 @@ export declare class TranscriptDocument {
|
|
|
53
55
|
/** Replaces the whole transcript with the view's blocks, keeping anchored workflow output in place. */
|
|
54
56
|
sync(blocks: OwnedUiSessionViewModel["transcript"]): void;
|
|
55
57
|
/** Appends workflow output anchored after the transcript's first `anchor` blocks. */
|
|
56
|
-
appendAnchored(id: string, component:
|
|
58
|
+
appendAnchored(id: string, component: OwnedUiShellTranscriptComponentPort, anchor: number): void;
|
|
57
59
|
/** Disposes every anchored workflow output and drops it from the order. */
|
|
58
60
|
removeAnchored(): void;
|
|
59
61
|
/** One block's component drew something new: drop its rows and every layout that contains them. */
|
|
@@ -74,5 +76,5 @@ export declare function parseReleaseUpdateDiagnostic(message: string): {
|
|
|
74
76
|
changelogUrl: string | null;
|
|
75
77
|
} | null;
|
|
76
78
|
/** Web URLs use link blue; file targets retain A1's cyan interactive accent. */
|
|
77
|
-
export declare function
|
|
79
|
+
export declare function transcriptLinkColor(theme: ThemeSource): (text: string, target: string) => string;
|
|
78
80
|
export {};
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { acceptsTranscriptUpdate } from "../../contracts/owned-ui/index.js";
|
|
2
|
-
import {
|
|
3
|
-
import { nativeHyperlinkStyle, overlaySpan } from "../../ui/components/spans.js";
|
|
4
|
-
import { displayWidth } from "../../ui/components/text.js";
|
|
5
|
-
import { createPiShellChangelog, createPiShellCollapsedChangelog, renderPiShellPackageUpdateNotice, renderPiShellReleaseUpdateNotice, } from "../../integrations/pi/components/shell-presenters-info.js";
|
|
6
|
-
import { isPiPromptStyleCompaction, paintPiSubmittedPromptTimestamp, renderPiShellStartupDiagnostic, renderPiShellTranscriptBlock, } from "../../integrations/pi/components/shell-presenters-transcript.js";
|
|
7
|
-
import { piTheme } from "../../integrations/pi/components/upstream/theme/theme.js";
|
|
2
|
+
import { nativeHyperlinkStyle } from "../../ui/components/spans.js";
|
|
8
3
|
const LAYOUT_ONLY = new Set(["editor-padding", "diagnostics", "workflow-status", "extension-header"]);
|
|
9
4
|
const WORKFLOW_STATUS_PREFIX = "workflow-status-";
|
|
10
5
|
/**
|
|
@@ -21,8 +16,10 @@ export class TranscriptDocument {
|
|
|
21
16
|
// Performance: document layouts are shared by wheel, rail, jump, and selection frames.
|
|
22
17
|
#layouts = new Map();
|
|
23
18
|
#renders = 0;
|
|
19
|
+
#linkColor;
|
|
24
20
|
constructor(options) {
|
|
25
21
|
this.#options = options;
|
|
22
|
+
this.#linkColor = transcriptLinkColor(options.theme);
|
|
26
23
|
}
|
|
27
24
|
/** Block component renders since construction, for rendering evidence. */
|
|
28
25
|
get renderCount() {
|
|
@@ -173,7 +170,7 @@ export class TranscriptDocument {
|
|
|
173
170
|
// bare A1 presents them in its prompt-adjacent notice dock instead.
|
|
174
171
|
.filter(diagnostic => diagnostic.code === "engine-startup"
|
|
175
172
|
|| !customViewport && diagnostic.code === "project-trust")
|
|
176
|
-
.flatMap(diagnostic =>
|
|
173
|
+
.flatMap(diagnostic => this.#options.components.transcript.renderStartupDiagnostic(diagnostic, width));
|
|
177
174
|
const resourceRows = [...chrome.resourceRows(width)];
|
|
178
175
|
if (resourceRows.at(-1) === "")
|
|
179
176
|
resourceRows.pop();
|
|
@@ -193,7 +190,7 @@ export class TranscriptDocument {
|
|
|
193
190
|
if (!thinkingVisible && block?.kind === "thinking")
|
|
194
191
|
continue;
|
|
195
192
|
const promptLike = block !== undefined
|
|
196
|
-
&& (block.kind === "user" || customViewport &&
|
|
193
|
+
&& (block.kind === "user" || customViewport && this.#options.components.transcript.isPromptStyleCompaction(block));
|
|
197
194
|
// Invariant: the custom viewport has already removed its rail gutter from this width.
|
|
198
195
|
// Prompt-like and ordinary blocks therefore share one right content edge.
|
|
199
196
|
const blockWidth = width;
|
|
@@ -213,13 +210,11 @@ export class TranscriptDocument {
|
|
|
213
210
|
}
|
|
214
211
|
rows.push(...blockRows);
|
|
215
212
|
if (promptLike && blockRows[0] !== undefined) {
|
|
216
|
-
const source = pinnedPromptSource(block, blockRows[0], blockWidth, chrome.timeFormat());
|
|
217
213
|
promptAnchors.push({
|
|
218
214
|
id: block.id,
|
|
219
215
|
firstRow,
|
|
220
216
|
lastRow: Math.max(firstRow, rows.length - 1),
|
|
221
|
-
sourceRow:
|
|
222
|
-
copySuffixWidth: source.copySuffixWidth,
|
|
217
|
+
sourceRow: blockRows[0],
|
|
223
218
|
prominentSourceRow: blockRows[0],
|
|
224
219
|
});
|
|
225
220
|
}
|
|
@@ -244,11 +239,11 @@ export class TranscriptDocument {
|
|
|
244
239
|
.filter(diagnostic => !customViewport && diagnostic.code === "release-update")
|
|
245
240
|
.flatMap(diagnostic => {
|
|
246
241
|
const release = parseReleaseUpdateDiagnostic(diagnostic.message);
|
|
247
|
-
return release === null ? [] :
|
|
242
|
+
return release === null ? [] : this.#options.components.info.releaseUpdateNotice(release, width);
|
|
248
243
|
}));
|
|
249
244
|
rows.push(...diagnostics
|
|
250
245
|
.filter(diagnostic => diagnostic.code === "package-updates")
|
|
251
|
-
.flatMap(diagnostic =>
|
|
246
|
+
.flatMap(diagnostic => this.#options.components.info.packageUpdateNotice(diagnostic.message.split("\n").filter(line => line.startsWith("- ")).map(line => line.slice(2)), width)));
|
|
252
247
|
rows.push(...diagnostics
|
|
253
248
|
.filter(diagnostic => diagnostic.code === "changelog-collapsed" || diagnostic.code === "changelog-expanded")
|
|
254
249
|
// Rationale: bare A1 translates either startup diagnostic into transient dock chrome;
|
|
@@ -256,8 +251,8 @@ export class TranscriptDocument {
|
|
|
256
251
|
.flatMap(diagnostic => customViewport
|
|
257
252
|
? []
|
|
258
253
|
: diagnostic.code === "changelog-collapsed"
|
|
259
|
-
?
|
|
260
|
-
:
|
|
254
|
+
? this.#options.components.info.collapsedChangelog().render(width)
|
|
255
|
+
: this.#options.components.info.changelog(diagnostic.message).render(width)));
|
|
261
256
|
rows.push(...diagnostics
|
|
262
257
|
.filter(diagnostic => diagnostic.code !== "engine-startup" && diagnostic.code !== "project-trust"
|
|
263
258
|
&& diagnostic.code !== "release-update" && diagnostic.code !== "release-update-installed"
|
|
@@ -265,7 +260,7 @@ export class TranscriptDocument {
|
|
|
265
260
|
&& diagnostic.code !== "package-updates" && diagnostic.code !== "changelog-collapsed"
|
|
266
261
|
&& diagnostic.code !== "changelog-expanded")
|
|
267
262
|
.slice(-3)
|
|
268
|
-
.flatMap(diagnostic =>
|
|
263
|
+
.flatMap(diagnostic => this.#options.components.transcript.renderBlock({
|
|
269
264
|
id: `diagnostic-${diagnostic.sequence}`,
|
|
270
265
|
kind: diagnostic.severity === "error" ? "error" : "system",
|
|
271
266
|
status: "finalized",
|
|
@@ -284,7 +279,7 @@ export class TranscriptDocument {
|
|
|
284
279
|
const block = this.#blocks.get(id);
|
|
285
280
|
if (block === undefined || (!thinkingVisible && block.kind === "thinking"))
|
|
286
281
|
continue;
|
|
287
|
-
if (rows.length > 0 && (block.kind === "user" || this.#options.customViewport &&
|
|
282
|
+
if (rows.length > 0 && (block.kind === "user" || this.#options.customViewport && this.#options.components.transcript.isPromptStyleCompaction(block)))
|
|
288
283
|
rows.push("");
|
|
289
284
|
rows.push(...this.#blockRows(id, block, width).map(sanitizeExitTranscriptRow));
|
|
290
285
|
}
|
|
@@ -302,7 +297,7 @@ export class TranscriptDocument {
|
|
|
302
297
|
const rows = component.render(width);
|
|
303
298
|
if (!this.#options.customViewport || block?.kind === "user")
|
|
304
299
|
return rows;
|
|
305
|
-
return rows.map(row => nativeHyperlinkStyle(row,
|
|
300
|
+
return rows.map(row => nativeHyperlinkStyle(row, this.#linkColor));
|
|
306
301
|
};
|
|
307
302
|
if (block === undefined || block.status !== "finalized")
|
|
308
303
|
return render();
|
|
@@ -340,27 +335,6 @@ function sanitizeExitTranscriptRow(row) {
|
|
|
340
335
|
return row.replace(KITTY_IMAGE_CONTROL, "").replace(ITERM_IMAGE_CONTROL, "");
|
|
341
336
|
}
|
|
342
337
|
/** Web URLs use link blue; file targets retain A1's cyan interactive accent. */
|
|
343
|
-
export function
|
|
344
|
-
return
|
|
345
|
-
}
|
|
346
|
-
/** Preserve the stable metadata-grey foreground for every pinned timestamp state. */
|
|
347
|
-
function pinnedPromptSource(block, sourceRow, width, timeFormat) {
|
|
348
|
-
const unchanged = { row: sourceRow, copySuffixWidth: 0 };
|
|
349
|
-
if (typeof block.payload !== "object" || block.payload === null)
|
|
350
|
-
return unchanged;
|
|
351
|
-
const value = block.payload.timestamp;
|
|
352
|
-
if (typeof value !== "number" || !Number.isFinite(value))
|
|
353
|
-
return unchanged;
|
|
354
|
-
const format = timeFormat ?? "8:00 PM";
|
|
355
|
-
const timestamp = formatSubmittedPromptTime(value, format);
|
|
356
|
-
if (timestamp === null || submittedPromptLayout(width, value, format).timestamp === null)
|
|
357
|
-
return unchanged;
|
|
358
|
-
const rowWidth = displayWidth(sourceRow);
|
|
359
|
-
const timestampWidth = displayWidth(timestamp);
|
|
360
|
-
if (rowWidth < timestampWidth)
|
|
361
|
-
return unchanged;
|
|
362
|
-
return {
|
|
363
|
-
row: overlaySpan(sourceRow, rowWidth - timestampWidth, rowWidth, paintPiSubmittedPromptTimestamp(timestamp)),
|
|
364
|
-
copySuffixWidth: timestampWidth,
|
|
365
|
-
};
|
|
338
|
+
export function transcriptLinkColor(theme) {
|
|
339
|
+
return (text, target) => theme.current().fg(/^file:/iu.test(target) ? "accent" : "mdLink", text);
|
|
366
340
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { OwnedUiShellComponentPort } from "../../contracts/owned-ui/index.js";
|
|
1
2
|
import type { TranscriptPromptAnchor, TranscriptViewportFrameInput } from "../../ui/components/transcript-viewport.js";
|
|
2
|
-
import type { PiShellComponentPort } from "../../integrations/pi/components/shell-shared-facade.js";
|
|
3
3
|
import type { ShellLayout, ShellLayoutPorts } from "./shell-layout.js";
|
|
4
4
|
interface VisibleViewportSnapshot {
|
|
5
5
|
readonly width: number;
|
|
@@ -8,7 +8,7 @@ interface VisibleViewportSnapshot {
|
|
|
8
8
|
readonly transientSignature: string;
|
|
9
9
|
readonly promptAnchors: readonly TranscriptPromptAnchor[];
|
|
10
10
|
readonly dockLength: number;
|
|
11
|
-
readonly inputSurface:
|
|
11
|
+
readonly inputSurface: OwnedUiShellComponentPort;
|
|
12
12
|
readonly viewportRevision: number;
|
|
13
13
|
readonly selectionRevision: number;
|
|
14
14
|
readonly pointerPosition: TranscriptViewportFrameInput["pointerPosition"];
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
import type { OwnedUiShellComponents, OwnedUiShellHotkeysPresentation } from "../../contracts/owned-ui/index.js";
|
|
1
2
|
import type { ImageAttachmentError, OwnedUiWorkflowMessage, OwnedUiWorkflowResult } from "../../contracts/owned-ui/index.js";
|
|
2
|
-
import { type PiShellHotkeysPresentation } from "../../integrations/pi/components/shell-presenters-info.js";
|
|
3
3
|
import type { DockChrome } from "./dock-chrome.js";
|
|
4
4
|
import type { TranscriptDocument } from "./transcript-document.js";
|
|
5
|
-
|
|
5
|
+
interface WorkflowOutputPorts {
|
|
6
6
|
readonly customViewport: boolean;
|
|
7
|
+
readonly components: Pick<OwnedUiShellComponents, "info" | "text">;
|
|
7
8
|
readonly document: Pick<TranscriptDocument, "lastId" | "anchorOf" | "invalidate" | "appendAnchored" | "removeAnchored">;
|
|
8
9
|
readonly dock: Pick<DockChrome, "setNotice" | "dismissNotice">;
|
|
9
10
|
/** How many semantic transcript blocks precede new output; workflow output anchors after them. */
|
|
10
11
|
transcriptLength(): number;
|
|
11
12
|
outputPad(): 0 | 1;
|
|
12
|
-
hotkeysPresentation():
|
|
13
|
+
hotkeysPresentation(): OwnedUiShellHotkeysPresentation;
|
|
13
14
|
readonly componentRuntime: {
|
|
14
15
|
getColumns(): number;
|
|
15
16
|
getRows(): number;
|
|
@@ -31,3 +32,4 @@ export declare class WorkflowOutput {
|
|
|
31
32
|
/** Drops every anchored output and the status-replacement chain. */
|
|
32
33
|
reset(): void;
|
|
33
34
|
}
|
|
35
|
+
export {};
|