@timurproko/a1 0.1.8-dev.3b54f21 → 0.1.8-dev.407
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 +159 -65
- package/bin/cli.js +28 -10
- package/bin/guardian.js +12 -6
- package/bin/module-identity.js +69 -35
- package/bin/pi-tui.d.ts +6 -0
- package/bin/pi-tui.js +28 -0
- package/bin/release-cleanup.js +8 -0
- package/bin/supervisor.js +2 -2
- package/bin/sync-pi-tui-proxy.js +97 -0
- package/bin/ui.js +62 -21
- package/bin/update-recovery.js +274 -0
- package/bin/warmup.js +27 -0
- package/dist/cli/capabilities.d.ts +6 -0
- package/dist/{src/cli → cli}/capabilities.js +1 -1
- package/dist/{src/cli → cli}/dispatch.d.ts +15 -1
- package/dist/cli/dispatch.js +261 -0
- package/dist/cli/package-messages.d.ts +26 -0
- package/dist/cli/package-messages.js +71 -0
- package/dist/{src/cli → cli}/packages.d.ts +11 -2
- package/dist/{src/cli → cli}/packages.js +24 -27
- package/dist/{src/cli → cli}/version-stats.d.ts +6 -0
- package/dist/cli/version-stats.js +112 -0
- package/dist/composition/agent-engine-bridge.d.ts +3 -0
- package/dist/composition/agent-engine-bridge.js +108 -0
- package/dist/composition/index.d.ts +3 -0
- package/dist/composition/index.js +3 -0
- package/dist/composition/owned-ui.d.ts +35 -0
- package/dist/composition/owned-ui.js +118 -0
- package/dist/composition/process.d.ts +16 -0
- package/dist/composition/process.js +45 -0
- package/dist/composition/settings-route-host.d.ts +8 -0
- package/dist/composition/settings-route-host.js +75 -0
- package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +2 -2
- package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +22 -4
- package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +17 -0
- package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +6 -0
- package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
- package/dist/contracts/owned-ui/image-attachments.js +67 -0
- package/dist/contracts/owned-ui/index.d.ts +8 -0
- package/dist/contracts/owned-ui/index.js +8 -0
- package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +123 -0
- package/dist/contracts/owned-ui/prompt-history.d.ts +55 -0
- package/dist/contracts/owned-ui/prompt-history.js +23 -0
- package/dist/contracts/owned-ui/prompt-suggestions.d.ts +3 -0
- package/dist/contracts/owned-ui/prompt-suggestions.js +44 -0
- package/dist/contracts/owned-ui/suggestion-diagnostics.d.ts +22 -0
- package/dist/contracts/owned-ui/suggestion-diagnostics.js +9 -0
- package/dist/contracts/owned-ui/transcript-lifecycle.d.ts +5 -0
- package/dist/contracts/owned-ui/transcript-lifecycle.js +33 -0
- package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +5 -1
- package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +129 -4
- package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +8 -0
- package/dist/{src/features → features}/launch/development-launch.js +11 -3
- package/dist/{src/features → features}/launch/index.d.ts +0 -1
- package/dist/{src/features → features}/launch/index.js +0 -1
- package/dist/features/launch/intent.d.ts +10 -0
- package/dist/features/launch/intent.js +8 -0
- package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -2
- package/dist/{src/features → features}/launch/prepare-launch.js +2 -9
- package/dist/{src/features → features}/launch/profile-paths.d.ts +3 -2
- package/dist/{src/features → features}/launch/profile-paths.js +13 -8
- package/dist/{src/features → features}/launch/runtime-selection.d.ts +2 -5
- package/dist/{src/features → features}/owned-ui/customization.d.ts +3 -1
- package/dist/{src/features → features}/owned-ui/customization.js +3 -1
- package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +2 -1
- package/dist/{src/features → features}/owned-ui/diagnostics.js +1 -0
- package/dist/{src/features → features}/owned-ui/index.d.ts +2 -0
- package/dist/{src/features → features}/owned-ui/index.js +2 -0
- package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
- package/dist/features/owned-ui/project-trust-prompt.js +149 -0
- package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
- package/dist/features/owned-ui/run.js +32 -0
- package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
- package/dist/features/owned-ui/session-fork-prompt.js +34 -0
- package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
- package/dist/{src/features → features}/owned-ui/settings-app.js +105 -56
- package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
- package/dist/features/prompt-history/image-sidecar.js +130 -0
- package/dist/features/prompt-history/index.d.ts +4 -0
- package/dist/features/prompt-history/index.js +3 -0
- package/dist/features/prompt-history/paths.d.ts +5 -0
- package/dist/features/prompt-history/paths.js +17 -0
- package/dist/features/prompt-history/service.d.ts +54 -0
- package/dist/features/prompt-history/service.js +425 -0
- package/dist/features/prompt-history/store.d.ts +16 -0
- package/dist/features/prompt-history/store.js +223 -0
- package/dist/features/prompt-history/worker.d.ts +9 -0
- package/dist/features/prompt-history/worker.js +45 -0
- package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
- package/dist/features/prompt-suggestions/diagnostics.js +82 -0
- package/dist/features/prompt-suggestions/index.d.ts +1 -0
- package/dist/features/prompt-suggestions/index.js +1 -0
- package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
- package/dist/{src/features → features}/workspace/reducer.d.ts +2 -1
- package/dist/{src/features → features}/workspace/reducer.js +2 -1
- package/dist/{src/features → features}/workspace/router.d.ts +2 -1
- package/dist/{src/features → features}/workspace/router.js +1 -0
- package/dist/{src/features → features}/workspace/store.d.ts +2 -1
- package/dist/{src/features → features}/workspace/store.js +1 -0
- package/dist/foundation/launch-context/index.d.ts +59 -0
- package/dist/foundation/launch-context/index.js +136 -0
- package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +2 -0
- package/dist/{src/foundation → foundation}/launch-guardian/main.js +23 -8
- package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +2 -0
- package/dist/{src/foundation → foundation}/lifecycle/index.js +2 -0
- package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +1 -1
- package/dist/{src/foundation → foundation}/lifecycle/model.js +1 -1
- package/dist/foundation/lifecycle/paths.d.ts +30 -0
- package/dist/{src/foundation → foundation}/lifecycle/paths.js +29 -1
- package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
- package/dist/foundation/lifecycle/session-selection.js +39 -0
- package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
- package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
- package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +2 -0
- package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +2 -0
- package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
- package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
- package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
- package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
- package/dist/{src/foundation → foundation}/process-containment/index.d.ts +1 -0
- package/dist/{src/foundation → foundation}/process-containment/index.js +1 -0
- package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +1 -0
- package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +1 -0
- package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +1 -0
- package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +1 -0
- package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +3 -1
- package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +5 -2
- package/dist/{src/foundation → foundation}/protocol/client.d.ts +1 -0
- package/dist/{src/foundation → foundation}/protocol/client.js +1 -0
- package/dist/{src/foundation → foundation}/protocol/messages.d.ts +1 -0
- package/dist/{src/foundation → foundation}/protocol/messages.js +1 -0
- package/dist/foundation/release/bootstrap.d.ts +55 -0
- package/dist/{src/foundation → foundation}/release/bootstrap.js +219 -46
- package/dist/foundation/release/cohort-state.d.ts +157 -0
- package/dist/foundation/release/cohort-state.js +472 -0
- package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
- package/dist/foundation/release/dependency-certification-retention.js +88 -0
- package/dist/foundation/release/dependency-certification.d.ts +24 -0
- package/dist/foundation/release/dependency-certification.js +266 -0
- package/dist/foundation/release/dependency-layer.d.ts +81 -0
- package/dist/foundation/release/dependency-layer.js +466 -0
- package/dist/foundation/release/endpoints.d.ts +20 -0
- package/dist/foundation/release/endpoints.js +50 -0
- package/dist/foundation/release/immutable-platform.d.ts +6 -0
- package/dist/foundation/release/immutable-platform.js +13 -0
- package/dist/{src/foundation → foundation}/release/index.d.ts +6 -0
- package/dist/{src/foundation → foundation}/release/index.js +6 -0
- package/dist/foundation/release/release-gc.d.ts +71 -0
- package/dist/foundation/release/release-gc.js +764 -0
- package/dist/{src/foundation → foundation}/release/release-store.d.ts +9 -3
- package/dist/{src/foundation → foundation}/release/release-store.js +74 -14
- package/dist/{src/foundation → foundation}/release/release.d.ts +6 -1
- package/dist/{src/foundation → foundation}/release/release.js +15 -4
- package/dist/foundation/release/restart-certification.d.ts +68 -0
- package/dist/foundation/release/restart-certification.js +227 -0
- package/dist/foundation/release/update-launch.d.ts +6 -0
- package/dist/foundation/release/update-launch.js +17 -0
- package/dist/foundation/release/update-recovery.d.ts +76 -0
- package/dist/foundation/release/update-recovery.js +356 -0
- package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +11 -0
- package/dist/{src/foundation → foundation}/release/update-transaction.js +13 -1
- package/dist/{src/foundation → foundation}/release/update.d.ts +40 -4
- package/dist/{src/foundation → foundation}/release/update.js +196 -78
- package/dist/foundation/release/warmup.d.ts +3 -0
- package/dist/foundation/release/warmup.js +47 -0
- package/dist/foundation/startup/index.d.ts +1 -0
- package/dist/foundation/startup/index.js +1 -0
- package/dist/foundation/startup/startup-runtime.d.ts +36 -0
- package/dist/foundation/startup/startup-runtime.js +142 -0
- package/dist/{src/foundation → foundation}/storage/control-store.d.ts +2 -1
- package/dist/{src/foundation → foundation}/storage/control-store.js +39 -4
- package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +2 -1
- package/dist/foundation/supervision/index.d.ts +3 -0
- package/dist/foundation/supervision/index.js +3 -0
- package/dist/foundation/supervision/main.d.ts +1 -0
- package/dist/foundation/supervision/main.js +84 -0
- package/dist/foundation/supervision/paths.d.ts +1 -0
- package/dist/foundation/supervision/paths.js +1 -0
- package/dist/foundation/supervision/server.d.ts +51 -0
- package/dist/{src/foundation → foundation}/supervision/server.js +142 -20
- package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
- package/dist/foundation/terminal-cleanup/fatal-exit.js +85 -0
- package/dist/foundation/terminal-cleanup/index.d.ts +2 -0
- package/dist/foundation/terminal-cleanup/index.js +2 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
- package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
- package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
- package/dist/integrations/pi/components/history-editor-loader.js +5 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +2 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +2 -1
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
- package/dist/integrations/pi/components/owned-editor-ux.js +1093 -0
- package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
- package/dist/integrations/pi/components/path-word-ranges.js +37 -0
- package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +1 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +1 -0
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +297 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +4 -4
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +58 -23
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +43 -0
- package/dist/integrations/pi/components/shell-presenters-info.js +114 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +174 -170
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +8 -4
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +10 -6
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +213 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +5 -2
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +15 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +43 -0
- package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
- package/dist/integrations/pi/components/tool-image-presentation.js +86 -0
- package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
- package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
- package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
- package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +11 -2
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +41 -3
- package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +42 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +40 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +166 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +1 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +3 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +3 -2
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +12 -7
- package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +61 -0
- package/dist/integrations/pi/components/upstream/components/tool-execution.js +344 -0
- package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +280 -0
- package/dist/integrations/pi/components/upstream/history/editor-core.js +2062 -0
- package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +32 -0
- package/dist/integrations/pi/components/upstream/history/kill-ring.js +48 -0
- package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
- package/dist/integrations/pi/components/upstream/history/printable-key.js +40 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +14 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +28 -0
- package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +22 -0
- package/dist/integrations/pi/components/upstream/history/undo-stack.js +36 -0
- package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
- package/dist/integrations/pi/components/upstream/history/word-navigation.js +100 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +74 -6
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +1340 -228
- package/dist/integrations/pi/engine/changelog.d.ts +2 -0
- package/dist/integrations/pi/engine/changelog.js +63 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +4 -2
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +15 -5
- package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
- package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +4 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +4 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +2 -1
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +1 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +32 -26
- package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
- package/dist/integrations/pi/engine/pending-delivery.js +158 -0
- package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
- package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +2 -1
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +1 -0
- package/dist/integrations/pi/engine/resources/changelog.json +12 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +19 -1
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +56 -5
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +4 -2
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +19 -4
- package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
- package/dist/integrations/pi/engine/session-selection.js +90 -0
- package/dist/integrations/pi/engine/settings-effects.d.ts +66 -0
- package/dist/integrations/pi/engine/settings-effects.js +249 -0
- package/dist/integrations/pi/engine/settings-integration.d.ts +43 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +102 -108
- package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
- package/dist/integrations/pi/engine/tool-rendering.js +145 -0
- package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
- package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +3 -2
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +1 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +19 -2
- package/dist/integrations/pi/session-ui/clipboard-diagnostics.d.ts +16 -0
- package/dist/integrations/pi/session-ui/clipboard-diagnostics.js +65 -0
- package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
- package/dist/integrations/pi/session-ui/clipboard-image.js +38 -0
- package/dist/integrations/pi/session-ui/editor-hyperlink-budget.d.ts +9 -0
- package/dist/integrations/pi/session-ui/editor-hyperlink-budget.js +23 -0
- package/dist/integrations/pi/session-ui/image-preparation-client.d.ts +20 -0
- package/dist/integrations/pi/session-ui/image-preparation-client.js +145 -0
- package/dist/integrations/pi/session-ui/image-preparation.d.ts +18 -0
- package/dist/integrations/pi/session-ui/image-preparation.js +126 -0
- package/dist/integrations/pi/session-ui/image-source.d.ts +13 -0
- package/dist/integrations/pi/session-ui/image-source.js +171 -0
- package/dist/integrations/pi/session-ui/image-worker.d.ts +17 -0
- package/dist/integrations/pi/session-ui/image-worker.js +23 -0
- package/dist/integrations/pi/session-ui/index.d.ts +5 -0
- package/dist/integrations/pi/session-ui/index.js +5 -0
- package/dist/integrations/pi/session-ui/paste-executor.d.ts +10 -0
- package/dist/integrations/pi/session-ui/paste-executor.js +232 -0
- package/dist/integrations/pi/session-ui/paste-helper.d.ts +1 -0
- package/dist/integrations/pi/session-ui/paste-helper.js +173 -0
- package/dist/integrations/pi/session-ui/paste-preparation-client.d.ts +16 -0
- package/dist/integrations/pi/session-ui/paste-preparation-client.js +159 -0
- package/dist/integrations/pi/session-ui/paste-protocol.d.ts +78 -0
- package/dist/integrations/pi/session-ui/paste-protocol.js +18 -0
- package/dist/integrations/pi/session-ui/paste-text-preparation.d.ts +20 -0
- package/dist/integrations/pi/session-ui/paste-text-preparation.js +134 -0
- package/dist/integrations/pi/session-ui/paste-text-worker.d.ts +1 -0
- package/dist/integrations/pi/session-ui/paste-text-worker.js +12 -0
- package/dist/integrations/pi/session-ui/path-chip-presentation.d.ts +7 -0
- package/dist/integrations/pi/session-ui/path-chip-presentation.js +24 -0
- package/dist/integrations/pi/session-ui/prompt-chips.d.ts +72 -0
- package/dist/integrations/pi/session-ui/prompt-chips.js +503 -0
- package/dist/integrations/pi/session-ui/prompt-history-controller.d.ts +36 -0
- package/dist/integrations/pi/session-ui/prompt-history-controller.js +170 -0
- package/dist/integrations/pi/session-ui/prompt-suggestion-controller.d.ts +35 -0
- package/dist/integrations/pi/session-ui/prompt-suggestion-controller.js +207 -0
- package/dist/integrations/pi/session-ui/response-copy-coordinator.d.ts +27 -0
- package/dist/integrations/pi/session-ui/response-copy-coordinator.js +189 -0
- package/dist/integrations/pi/session-ui/response-copy-helper.d.ts +1 -0
- package/dist/integrations/pi/session-ui/response-copy-helper.js +122 -0
- package/dist/integrations/pi/session-ui/response-copy-protocol.d.ts +56 -0
- package/dist/integrations/pi/session-ui/response-copy-protocol.js +5 -0
- package/dist/integrations/pi/session-ui/response-copy-transport.d.ts +31 -0
- package/dist/integrations/pi/session-ui/response-copy-transport.js +187 -0
- package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
- package/dist/integrations/pi/session-ui/route-host.js +1 -0
- package/dist/integrations/pi/session-ui/session-shell-root.d.ts +221 -0
- package/dist/integrations/pi/session-ui/session-shell-root.js +1305 -0
- package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
- package/dist/integrations/pi/session-ui/session-shell.js +1792 -0
- package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +56 -0
- package/dist/integrations/pi/session-ui/session-viewport-controller.js +569 -0
- package/dist/integrations/pi/session-ui/stream-presentation-coalescer.d.ts +29 -0
- package/dist/integrations/pi/session-ui/stream-presentation-coalescer.js +79 -0
- package/dist/integrations/pi/session-ui/system-clipboard.d.ts +20 -0
- package/dist/integrations/pi/session-ui/system-clipboard.js +156 -0
- package/dist/integrations/pi/session-ui/text-paste.d.ts +5 -0
- package/dist/integrations/pi/session-ui/text-paste.js +16 -0
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +10 -1
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +255 -11
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +32 -6
- package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +81 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +424 -0
- package/dist/integrations/pi/tui-runtime/index.d.ts +7 -0
- package/dist/integrations/pi/tui-runtime/index.js +7 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +13 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.js +59 -0
- package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
- package/dist/integrations/pi/tui-runtime/overlay-geometry.js +159 -0
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
- package/dist/native/darwin-arm64/manifest.json +4 -4
- package/dist/native/darwin-arm64/process-guardian +0 -0
- package/dist/native/linux-x64/manifest.json +3 -3
- package/dist/native/linux-x64/process-guardian +0 -0
- package/dist/native/win32-x64/manifest.json +3 -3
- package/dist/native/win32-x64/process-guardian.exe +0 -0
- package/dist/{src/product-identity.d.ts → product-identity.d.ts} +4 -4
- package/dist/{src/product-identity.js → product-identity.js} +7 -38
- package/dist/{src/product-identity.json → product-identity.json} +13 -27
- package/dist/runtime-payload-inventory.json +122333 -0
- package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +23 -1
- package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
- package/dist/{src/foundation/ui-apps → ui/apps}/host.js +14 -10
- package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +1 -0
- package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +1 -0
- package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +5 -3
- package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +1 -0
- package/dist/{src/foundation/ui-components → ui/components}/frame.js +1 -0
- package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +7 -0
- package/dist/{src/foundation/ui-components → ui/components}/index.js +7 -0
- package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +2 -8
- package/dist/{src/foundation/ui-components → ui/components}/line-input.js +7 -28
- package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -6
- package/dist/{src/foundation/ui-components → ui/components}/list-view.js +14 -7
- package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +10 -0
- package/dist/{src/foundation/ui-components → ui/components}/mouse.js +24 -0
- package/dist/ui/components/progress-status.d.ts +2 -0
- package/dist/ui/components/progress-status.js +4 -0
- package/dist/ui/components/prompt-input.d.ts +32 -0
- package/dist/ui/components/prompt-input.js +54 -0
- package/dist/ui/components/prompt-row.d.ts +14 -0
- package/dist/ui/components/prompt-row.js +20 -0
- package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +26 -0
- package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +35 -0
- package/dist/ui/components/selection-copy.d.ts +24 -0
- package/dist/ui/components/selection-copy.js +39 -0
- package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +1 -0
- package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +1 -0
- package/dist/ui/components/spans.d.ts +28 -0
- package/dist/ui/components/spans.js +266 -0
- package/dist/ui/components/submitted-prompt.d.ts +23 -0
- package/dist/ui/components/submitted-prompt.js +50 -0
- package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -5
- package/dist/{src/foundation/ui-components → ui/components}/surface.js +1 -5
- package/dist/ui/components/text-selection.d.ts +62 -0
- package/dist/ui/components/text-selection.js +210 -0
- package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
- package/dist/{src/foundation/ui-components → ui/components}/text.js +67 -5
- package/dist/ui/components/transcript-viewport.d.ts +173 -0
- package/dist/ui/components/transcript-viewport.js +753 -0
- package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
- package/dist/ui/components/visible-hyperlinks.js +97 -0
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
- package/dist/ui/settings/declarations.js +94 -0
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +1 -1
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +28 -2
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +6 -19
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +41 -22
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
- package/dist/ui/settings/session.js +164 -0
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +1 -0
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +2 -1
- package/docs/architecture/boundaries.md +14 -10
- package/docs/architecture/code-documentation.md +77 -0
- package/docs/architecture/history-editor-provenance.md +100 -0
- package/docs/architecture/internal-naming.md +91 -0
- package/docs/architecture/process-guardian-provenance.md +3 -1
- package/docs/architecture/project-structure.md +69 -30
- package/docs/architecture/prompt-suggestions.md +68 -0
- package/docs/architecture/resource-and-data-policy.md +28 -2
- package/docs/architecture/response-copy-delivery.md +83 -0
- package/docs/architecture/tool-image-presentation.md +62 -0
- package/docs/architecture/toolchain.md +24 -10
- package/docs/architecture/ui-reference-provenance.md +59 -5
- package/docs/ci-release-runbook.md +236 -79
- package/docs/features/launch-profiles.md +24 -17
- package/docs/features/modal-content-interaction.md +37 -0
- package/docs/features/prompt-history.md +149 -0
- package/docs/local-worktree-cleanup.md +128 -0
- package/docs/manual-code-streaming-cleanup.md +88 -0
- package/docs/manual-ghost-link-baseline.md +89 -0
- package/docs/manual-launch-instance-acceptance.md +12 -35
- package/docs/manual-owned-ui-checkpoint.md +78 -0
- package/docs/manual-pi-boundary-candidate.md +4 -5
- package/docs/manual-terminal-colour-check.md +4 -3
- package/docs/openspec-archive-automation.md +128 -0
- package/docs/repository-governance-live-acceptance.md +77 -0
- package/package.json +45 -28
- package/dist/src/cli/capabilities.d.ts +0 -15
- package/dist/src/cli/dispatch.js +0 -142
- package/dist/src/cli/version-stats.js +0 -72
- package/dist/src/composition/index.d.ts +0 -48
- package/dist/src/composition/index.js +0 -258
- package/dist/src/features/launch/intent.d.ts +0 -7
- package/dist/src/features/launch/intent.js +0 -4
- package/dist/src/features/launch/profiles.d.ts +0 -12
- package/dist/src/features/launch/profiles.js +0 -26
- package/dist/src/features/owned-ui/run.js +0 -15
- package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
- package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
- package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
- package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
- package/dist/src/foundation/owned-ui-settings/session.js +0 -145
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
- package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
- package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
- package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
- package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
- package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
- package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
- package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
- package/dist/src/foundation/release/bootstrap.d.ts +0 -29
- package/dist/src/foundation/release/cohort-state.d.ts +0 -70
- package/dist/src/foundation/release/cohort-state.js +0 -202
- package/dist/src/foundation/release/release-gc.d.ts +0 -5
- package/dist/src/foundation/release/release-gc.js +0 -16
- package/dist/src/foundation/supervision/index.d.ts +0 -3
- package/dist/src/foundation/supervision/index.js +0 -3
- package/dist/src/foundation/supervision/main.d.ts +0 -1
- package/dist/src/foundation/supervision/main.js +0 -41
- package/dist/src/foundation/supervision/paths.d.ts +0 -1
- package/dist/src/foundation/supervision/paths.js +0 -1
- package/dist/src/foundation/supervision/server.d.ts +0 -22
- package/dist/src/foundation/ui-components/spans.d.ts +0 -7
- package/dist/src/foundation/ui-components/spans.js +0 -59
- package/docs/manual-transparent-checkpoint.md +0 -53
- /package/dist/{src/cli → cli}/index.d.ts +0 -0
- /package/dist/{src/cli → cli}/index.js +0 -0
- /package/dist/{src/cli → cli}/version.d.ts +0 -0
- /package/dist/{src/cli → cli}/version.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
- /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
- /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
- /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
- /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
- /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
- /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
- /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
- /package/dist/{src/features → features}/workspace/index.js +0 -0
- /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
- /package/dist/{src/features → features}/workspace/presentation.js +0 -0
- /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
- /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
- /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
- /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
- /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
- /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
- /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
- /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
- /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
- /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
- /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → integrations/pi/components/editor-interaction.js} +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → integrations/pi/components/prompt-input-port.js} +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
- /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
- /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
- /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ModelSelectorComponent, type SessionInfo, type SettingsCallbacks, type SettingsConfig } from "@earendil-works/pi-coding-agent";
|
|
2
|
-
import type { OwnedUiDialog } from "
|
|
2
|
+
import type { OwnedUiDialog } from "../../../contracts/owned-ui/index.js";
|
|
3
3
|
import { type TrustDecision, type TrustOption, type TrustUpdate } from "./upstream/components/trust-selector.js";
|
|
4
4
|
import { type PiShellComponentPort, type PiShellEditorOptions, type PiShellSelectorOption, type PiShellSelectorOptions } from "./shell-shared-facade.js";
|
|
5
5
|
export declare function createPiShellSelector(options: PiShellSelectorOptions): PiShellComponentPort;
|
|
@@ -67,6 +67,7 @@ export declare function createPiShellTreeSelector(options: {
|
|
|
67
67
|
readonly onSelect: (id: string) => void;
|
|
68
68
|
readonly onCancel: () => void;
|
|
69
69
|
readonly onLabelChange: (entryId: string, label: string | undefined) => void;
|
|
70
|
+
readonly onCopy?: (text: string | undefined) => void;
|
|
70
71
|
readonly initialSelectedId?: string;
|
|
71
72
|
readonly initialFilterMode?: "default" | "no-tools" | "user-only" | "labeled-only" | "all";
|
|
72
73
|
}): PiShellComponentPort;
|
|
@@ -87,11 +88,14 @@ export interface PiShellLoginDialogPort extends PiShellComponentPort {
|
|
|
87
88
|
showWaiting(message: string): void;
|
|
88
89
|
showProgress(message: string): void;
|
|
89
90
|
}
|
|
90
|
-
export declare function createPiShellLoginDialog(runtime: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">, providerId: string, onComplete: (success: boolean, message?: string) => void, providerName?: string): PiShellLoginDialogPort;
|
|
91
|
+
export declare function createPiShellLoginDialog(runtime: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">, providerId: string, onComplete: (success: boolean, message?: string) => void, providerName?: string, title?: string): PiShellLoginDialogPort;
|
|
91
92
|
export declare function createPiShellArmin(runtime: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">): PiShellComponentPort;
|
|
92
93
|
export declare function createPiShellDaxnuts(runtime: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">): PiShellComponentPort;
|
|
93
94
|
export declare function createPiShellEarendilAnnouncement(): PiShellComponentPort;
|
|
94
|
-
export
|
|
95
|
+
export interface PiShellOperationLoaderPort extends PiShellComponentPort {
|
|
96
|
+
readonly signal: AbortSignal;
|
|
97
|
+
}
|
|
98
|
+
export declare function createPiShellOperationLoader(runtime: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">, message: string): PiShellOperationLoaderPort;
|
|
95
99
|
export declare function createPiShellReloadBox(): PiShellComponentPort;
|
|
96
100
|
export interface PiShellAuthProviderOption extends PiShellSelectorOption {
|
|
97
101
|
readonly providerId: string;
|
|
@@ -101,7 +105,7 @@ export interface PiShellAuthProviderOption extends PiShellSelectorOption {
|
|
|
101
105
|
readonly source?: string;
|
|
102
106
|
};
|
|
103
107
|
}
|
|
104
|
-
export declare function createPiShellAuthProviderSelector(mode: "login" | "logout", providers: readonly PiShellAuthProviderOption[], onSelect: (id: string) => void, onCancel: () => void): PiShellComponentPort;
|
|
108
|
+
export declare function createPiShellAuthProviderSelector(mode: "login" | "logout", providers: readonly PiShellAuthProviderOption[], onSelect: (id: string) => void, onCancel: () => void, initialSearchInput?: string): PiShellComponentPort;
|
|
105
109
|
export declare function createPiShellExtensionSelector(title: string, options: readonly string[], onSelect: (value: string) => void, onCancel: () => void): PiShellComponentPort;
|
|
106
110
|
export declare function createPiShellThinkingSelector(currentLevel: "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max", availableLevels: readonly ("off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max")[], onSelect: (level: string) => void, onCancel: () => void): PiShellComponentPort;
|
|
107
111
|
export declare function createPiShellThemeSelector(currentTheme: string, onSelect: (theme: string) => void, onCancel: () => void, onPreview: (theme: string) => void): PiShellComponentPort;
|
|
@@ -111,7 +111,10 @@ export function createPiShellSessionSelector(options) {
|
|
|
111
111
|
}
|
|
112
112
|
export function createPiShellTreeSelector(options) {
|
|
113
113
|
ensureTheme();
|
|
114
|
-
|
|
114
|
+
const selector = new TreeSelectorComponent([...options.tree], options.currentLeafId, options.terminalHeight, options.onSelect, options.onCancel, options.onLabelChange, options.initialSelectedId, options.initialFilterMode);
|
|
115
|
+
if (options.onCopy)
|
|
116
|
+
selector.onCopy = options.onCopy;
|
|
117
|
+
return componentPort(selector);
|
|
115
118
|
}
|
|
116
119
|
export function createPiShellUserMessageSelector(messages, onSelect, onCancel, initialSelectedId) {
|
|
117
120
|
ensureTheme();
|
|
@@ -119,9 +122,9 @@ export function createPiShellUserMessageSelector(messages, onSelect, onCancel, i
|
|
|
119
122
|
const list = selector.getMessageList();
|
|
120
123
|
return componentPort(selector, data => list.handleInput(data));
|
|
121
124
|
}
|
|
122
|
-
export function createPiShellLoginDialog(runtime, providerId, onComplete, providerName) {
|
|
125
|
+
export function createPiShellLoginDialog(runtime, providerId, onComplete, providerName, title) {
|
|
123
126
|
ensureTheme();
|
|
124
|
-
const dialog = new LoginDialogComponent(createTuiFacade(runtime), providerId, onComplete, providerName);
|
|
127
|
+
const dialog = new LoginDialogComponent(createTuiFacade(runtime), providerId, onComplete, providerName, title);
|
|
125
128
|
return {
|
|
126
129
|
...componentPort(dialog),
|
|
127
130
|
showAuth: (url, instructions) => dialog.showAuth(url, instructions),
|
|
@@ -148,7 +151,8 @@ export function createPiShellEarendilAnnouncement() {
|
|
|
148
151
|
}
|
|
149
152
|
export function createPiShellOperationLoader(runtime, message) {
|
|
150
153
|
ensureTheme();
|
|
151
|
-
|
|
154
|
+
const loader = new BorderedLoader(createTuiFacade(runtime), piTheme(), message, { cancellable: true });
|
|
155
|
+
return { ...componentPort(loader), signal: loader.signal };
|
|
152
156
|
}
|
|
153
157
|
export function createPiShellReloadBox() {
|
|
154
158
|
ensureTheme();
|
|
@@ -161,7 +165,7 @@ export function createPiShellReloadBox() {
|
|
|
161
165
|
container.addChild(new DynamicBorder(borderColor));
|
|
162
166
|
return componentPort(container);
|
|
163
167
|
}
|
|
164
|
-
export function createPiShellAuthProviderSelector(mode, providers, onSelect, onCancel) {
|
|
168
|
+
export function createPiShellAuthProviderSelector(mode, providers, onSelect, onCancel, initialSearchInput) {
|
|
165
169
|
ensureTheme();
|
|
166
170
|
const selector = new OAuthSelectorComponent(mode, providers.map(provider => ({
|
|
167
171
|
id: provider.providerId,
|
|
@@ -172,7 +176,7 @@ export function createPiShellAuthProviderSelector(mode, providers, onSelect, onC
|
|
|
172
176
|
const selected = providers.find(provider => provider.providerId === providerId && provider.authType === authType);
|
|
173
177
|
if (selected)
|
|
174
178
|
onSelect(selected.id);
|
|
175
|
-
}, onCancel);
|
|
179
|
+
}, onCancel, initialSearchInput);
|
|
176
180
|
return componentPort(selector);
|
|
177
181
|
}
|
|
178
182
|
export function createPiShellExtensionSelector(title, options, onSelect, onCancel) {
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { visibleWidth, type AutocompleteProvider, type Component, type KeybindingsConfig, type TUI } from "#pi-tui";
|
|
2
|
+
import type { OwnedUiImageAttachment, OwnedUiSessionViewModel, OwnedUiThinkingLevel, OwnedUiTranscriptBlock, SuggestionDecision } from "../../../contracts/owned-ui/index.js";
|
|
3
|
+
import type { HistoryEditorConstructor } from "./history-editor-loader.js";
|
|
4
|
+
import type { PiShellPromptInputPresentation } from "./prompt-input-port.js";
|
|
5
|
+
import type { EditorRecallPort } from "./editor-interaction.js";
|
|
6
|
+
import type { PresentationComponentPort } from "../../../contracts/presentation/index.js";
|
|
7
|
+
/** Terminal-cell width authority used by Pi-rendered component rows. */
|
|
8
|
+
export declare const piShellVisibleWidth: typeof visibleWidth;
|
|
9
|
+
export declare const piShellTruncateToWidth: (text: string, width: number) => string;
|
|
10
|
+
export interface PiShellComponentPort extends PresentationComponentPort {
|
|
11
|
+
}
|
|
12
|
+
export type PiShellClipboardContent = {
|
|
13
|
+
readonly kind: "text";
|
|
14
|
+
readonly text: string;
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: "image";
|
|
17
|
+
readonly data: string;
|
|
18
|
+
readonly mimeType: string;
|
|
19
|
+
};
|
|
20
|
+
export interface PiShellEditorTextRange {
|
|
21
|
+
readonly start: number;
|
|
22
|
+
readonly end: number;
|
|
23
|
+
}
|
|
24
|
+
export interface PiShellEditorPointerEvent {
|
|
25
|
+
readonly kind: "press" | "motion" | "release";
|
|
26
|
+
readonly button: number;
|
|
27
|
+
readonly column: number;
|
|
28
|
+
/** One-based row relative to the top border of the editor body, excluding its menu. */
|
|
29
|
+
readonly row: number;
|
|
30
|
+
}
|
|
31
|
+
export interface PiShellEditorBodyGeometry {
|
|
32
|
+
/** Zero-based body offset in the most recently rendered component rows. */
|
|
33
|
+
readonly rowOffset: number;
|
|
34
|
+
/** Border-inclusive body height, excluding autocomplete. */
|
|
35
|
+
readonly rowCount: number;
|
|
36
|
+
}
|
|
37
|
+
export interface PiShellEditorPort extends PiShellComponentPort {
|
|
38
|
+
/** Present only for the owned above-prompt autocomplete presentation. */
|
|
39
|
+
bodyGeometry?(): PiShellEditorBodyGeometry;
|
|
40
|
+
readonly recall?: EditorRecallPort;
|
|
41
|
+
readonly historyReplacement?: typeof import("../../../contracts/owned-ui/index.js").PROMPT_HISTORY_EDITOR_REPLACEMENT;
|
|
42
|
+
/** Restores this editor's profile after another Pi component changed the global manager. */
|
|
43
|
+
activateKeybindings(): void;
|
|
44
|
+
keybindingConfig(): KeybindingsConfig;
|
|
45
|
+
reloadKeybindings(): void;
|
|
46
|
+
/** Uses Pi's terminal decoder rather than assuming one terminal escape spelling. */
|
|
47
|
+
matchesTerminalKey(data: string, key: "home" | "end" | "ctrl+home" | "ctrl+end" | "alt+home" | "ctrl+v"): boolean;
|
|
48
|
+
getText(): string;
|
|
49
|
+
setText(text: string): void;
|
|
50
|
+
insertText(text: string): void;
|
|
51
|
+
addToHistory(text: string): void;
|
|
52
|
+
setSubmitEnabled(enabled: boolean): void;
|
|
53
|
+
setSubmitHandler(handler: (text: string) => void): void;
|
|
54
|
+
setInterruptHandler(handler: () => void): void;
|
|
55
|
+
setAutocompleteCommands(commands: readonly PiShellAutocompleteCommand[]): void;
|
|
56
|
+
setPaddingX(padding: number): void;
|
|
57
|
+
setAutocompleteMaxVisible(maxVisible: number): void;
|
|
58
|
+
addAutocompleteProvider(factory: unknown): void;
|
|
59
|
+
setThinkingLevel(level: OwnedUiThinkingLevel): void;
|
|
60
|
+
setPromptSuggestion(text: string | null): void;
|
|
61
|
+
canPresentPromptSuggestion(): boolean;
|
|
62
|
+
promptSuggestionBlockReason?(): SuggestionDecision;
|
|
63
|
+
hasSelection(): boolean;
|
|
64
|
+
ownsPointer(): boolean;
|
|
65
|
+
handlePointer(event: PiShellEditorPointerEvent): boolean;
|
|
66
|
+
pasteClipboard(): boolean;
|
|
67
|
+
cancelPendingPastes?(): void;
|
|
68
|
+
}
|
|
69
|
+
export interface PiShellAutocompleteCommand {
|
|
70
|
+
readonly name: string;
|
|
71
|
+
readonly description?: string;
|
|
72
|
+
readonly argumentHint?: string;
|
|
73
|
+
readonly argumentOptions?: readonly PiShellSelectorOption[];
|
|
74
|
+
}
|
|
75
|
+
export interface PiShellViewComponentPort extends PiShellComponentPort {
|
|
76
|
+
update(view: OwnedUiSessionViewModel): void;
|
|
77
|
+
}
|
|
78
|
+
export type PiShellStatusPlacement = "live" | "dock" | "hidden";
|
|
79
|
+
export interface PiShellStatusPort extends PiShellViewComponentPort {
|
|
80
|
+
setWorkingOverride(message: string | undefined): void;
|
|
81
|
+
setOutputPad(padding: 0 | 1): void;
|
|
82
|
+
/** Semantic row placement; callers must not inspect rendered text. */
|
|
83
|
+
placement(): PiShellStatusPlacement;
|
|
84
|
+
renderDock(width: number): readonly string[];
|
|
85
|
+
renderLive(width: number): readonly string[];
|
|
86
|
+
}
|
|
87
|
+
export interface PiShellQueuedInputPort extends PiShellComponentPort {
|
|
88
|
+
update(submissions: readonly string[]): void;
|
|
89
|
+
}
|
|
90
|
+
export interface PiShellHeaderPort extends PiShellComponentPort {
|
|
91
|
+
readonly expanded: boolean;
|
|
92
|
+
setExpanded(expanded: boolean): void;
|
|
93
|
+
}
|
|
94
|
+
export type PiShellResourceSection = "Context" | "Skills" | "Prompts" | "Extensions" | "Themes";
|
|
95
|
+
export interface PiShellResourceEntry {
|
|
96
|
+
readonly section: PiShellResourceSection;
|
|
97
|
+
readonly label: string;
|
|
98
|
+
readonly sourcePath: string | null;
|
|
99
|
+
readonly diagnostic?: string | null;
|
|
100
|
+
}
|
|
101
|
+
export interface PiShellLoadedResourcesPort extends PiShellComponentPort {
|
|
102
|
+
setExpanded(expanded: boolean): void;
|
|
103
|
+
}
|
|
104
|
+
export interface PiShellImageAssetResolver {
|
|
105
|
+
resolve(assetId: string): OwnedUiImageAttachment | null;
|
|
106
|
+
}
|
|
107
|
+
export interface PiShellExtensionRendererResolver {
|
|
108
|
+
getMessageRenderer(customType: string): unknown;
|
|
109
|
+
getToolDefinition(toolName: string): unknown;
|
|
110
|
+
getShortcuts?(bindings: KeybindingsConfig): readonly {
|
|
111
|
+
readonly key: string;
|
|
112
|
+
readonly description: string;
|
|
113
|
+
}[];
|
|
114
|
+
}
|
|
115
|
+
export interface PiShellTranscriptComponentPort extends PiShellComponentPort {
|
|
116
|
+
readonly id: string;
|
|
117
|
+
readonly revision: number;
|
|
118
|
+
readonly presentationRevision?: number;
|
|
119
|
+
update(block: OwnedUiTranscriptBlock): void;
|
|
120
|
+
setExpanded(expanded: boolean): void;
|
|
121
|
+
setOutputPad(padding: 0 | 1): void;
|
|
122
|
+
setHideThinkingBlock(hidden: boolean): void;
|
|
123
|
+
setMermaidRenderingMode(mode: "off" | "final" | "streaming"): void;
|
|
124
|
+
setImagePresentation(showImages: boolean, imageWidthCells: number): void;
|
|
125
|
+
}
|
|
126
|
+
export interface PiShellStartupNotice {
|
|
127
|
+
readonly kind: "info" | "warning" | "error";
|
|
128
|
+
readonly message: string;
|
|
129
|
+
}
|
|
130
|
+
export interface PiShellHeaderOptions {
|
|
131
|
+
readonly getKeybindings?: () => KeybindingsConfig;
|
|
132
|
+
readonly quiet?: boolean;
|
|
133
|
+
readonly expanded?: boolean;
|
|
134
|
+
readonly notices?: readonly PiShellStartupNotice[];
|
|
135
|
+
readonly resources?: readonly PiShellResourceEntry[];
|
|
136
|
+
}
|
|
137
|
+
/** An owned paste reserves its edit immediately and acknowledges completion only after insertion. */
|
|
138
|
+
export interface PiShellPasteReservation {
|
|
139
|
+
readonly marker: string;
|
|
140
|
+
readonly result: Promise<string>;
|
|
141
|
+
complete?(): void;
|
|
142
|
+
isCurrent?(): boolean;
|
|
143
|
+
}
|
|
144
|
+
export interface PiShellEditorOptions {
|
|
145
|
+
readonly persistentHistory?: boolean;
|
|
146
|
+
readonly historyEditor?: HistoryEditorConstructor;
|
|
147
|
+
/** Bare A1 adds ergonomic aliases while comparison profiles retain Pi defaults. */
|
|
148
|
+
readonly keybindingProfile?: "pi" | "a1";
|
|
149
|
+
readonly getColumns: () => number;
|
|
150
|
+
readonly getRows: () => number;
|
|
151
|
+
readonly requestRender: () => void;
|
|
152
|
+
readonly onSubmit: (text: string) => void;
|
|
153
|
+
readonly onChange?: (text: string) => void;
|
|
154
|
+
readonly onInterrupt?: () => void;
|
|
155
|
+
readonly onClear?: () => void;
|
|
156
|
+
readonly onExit?: () => void;
|
|
157
|
+
readonly onSuspend?: () => void;
|
|
158
|
+
readonly onExternalEditor?: () => void;
|
|
159
|
+
readonly onPasteImage?: () => void;
|
|
160
|
+
readonly onExtensionShortcut?: (data: string) => boolean;
|
|
161
|
+
readonly onModelSelect?: () => void;
|
|
162
|
+
readonly onModelCycle?: ((direction: "forward" | "backward") => void) | undefined;
|
|
163
|
+
readonly onThinkingCycle?: (() => void) | undefined;
|
|
164
|
+
readonly onThinkingToggle?: (() => void) | undefined;
|
|
165
|
+
readonly onToolsExpand?: (() => void) | undefined;
|
|
166
|
+
readonly onMessageCopy?: (() => void) | undefined;
|
|
167
|
+
readonly onFollowUp?: (() => void) | undefined;
|
|
168
|
+
readonly onDequeue?: (() => void) | undefined;
|
|
169
|
+
readonly onPromptSuggestionAccepted?: (text: string) => void;
|
|
170
|
+
readonly onCopyText?: (text: string) => void;
|
|
171
|
+
readonly readClipboardContent?: (signal?: AbortSignal) => Promise<PiShellClipboardContent | null>;
|
|
172
|
+
readonly beginClipboardPaste?: () => PiShellPasteReservation;
|
|
173
|
+
readonly beginTextPaste?: (text: string) => PiShellPasteReservation;
|
|
174
|
+
readonly deferTextPaste?: (text: string) => boolean;
|
|
175
|
+
readonly onPasteRejected?: (error: unknown) => void;
|
|
176
|
+
readonly onPasteInput?: (bytes: number) => void;
|
|
177
|
+
readonly editorHiddenRanges?: (line: string) => readonly PiShellEditorTextRange[];
|
|
178
|
+
readonly transformPastedContent?: (content: PiShellClipboardContent) => string;
|
|
179
|
+
readonly editorAtomicRanges?: (line: string) => readonly PiShellEditorTextRange[];
|
|
180
|
+
readonly expandCopiedEditorText?: (text: string) => string;
|
|
181
|
+
readonly paintEditorSelection?: (line: string, from: number, to: number, atomic: boolean) => string;
|
|
182
|
+
/** Row indices restart at zero for each complete owned editor decoration pass. */
|
|
183
|
+
readonly decorateEditorRow?: (row: string, width: number, rowIndex: number) => string;
|
|
184
|
+
readonly cwd?: string;
|
|
185
|
+
readonly agentDir?: string;
|
|
186
|
+
readonly autocompleteCommands?: readonly PiShellAutocompleteCommand[];
|
|
187
|
+
readonly promptPresentation?: {
|
|
188
|
+
readonly input: PiShellPromptInputPresentation;
|
|
189
|
+
readonly styleSuggestion: (text: string) => string;
|
|
190
|
+
readonly styleSuggestionCaret: (text: string) => string;
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
export interface PiShellSelectorOption {
|
|
194
|
+
readonly id: string;
|
|
195
|
+
readonly label: string;
|
|
196
|
+
readonly description?: string;
|
|
197
|
+
}
|
|
198
|
+
export interface PiShellSelectorOptions {
|
|
199
|
+
readonly title?: string;
|
|
200
|
+
readonly options: readonly PiShellSelectorOption[];
|
|
201
|
+
readonly maxVisible?: number;
|
|
202
|
+
readonly onSelect?: (id: string) => void;
|
|
203
|
+
readonly onCancel?: () => void;
|
|
204
|
+
}
|
|
205
|
+
export declare function createTuiFacade(options: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender"> & {
|
|
206
|
+
readonly onSubmit?: (text: string) => void;
|
|
207
|
+
}): TUI;
|
|
208
|
+
export declare function componentPort(component: Component, handleInput?: (data: string) => void): PiShellComponentPort;
|
|
209
|
+
export declare function componentFromPort(port: PiShellComponentPort): Component;
|
|
210
|
+
export declare function formatSessionTokens(count: number): string;
|
|
211
|
+
export declare function isAutocompleteProvider(value: unknown): value is AutocompleteProvider;
|
|
212
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
213
|
+
export declare function ensureTheme(): void;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { setKeybindings, } from "#pi-tui";
|
|
1
|
+
import { setKeybindings, visibleWidth, truncateToWidth, } from "#pi-tui";
|
|
2
2
|
import { KeybindingsManager, } from "./upstream/adjacent/core/keybindings.js";
|
|
3
3
|
import { ensurePiTheme, } from "./theme.js";
|
|
4
|
-
|
|
4
|
+
/** Terminal-cell width authority used by Pi-rendered component rows. */
|
|
5
|
+
export const piShellVisibleWidth = visibleWidth;
|
|
6
|
+
export const piShellTruncateToWidth = (text, width) => truncateToWidth(text, width, "");
|
|
7
|
+
// Provenance: pinned from packages/coding-agent/src/core/slash-commands.ts at 914cf14.
|
|
5
8
|
export function createTuiFacade(options) {
|
|
6
9
|
const children = [];
|
|
7
10
|
const terminal = {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Component } from "#pi-tui";
|
|
2
|
+
import type { OwnedUiTranscriptBlock } from "../../../contracts/owned-ui/index.js";
|
|
3
|
+
export interface PiShellSubmittedPromptComposer {
|
|
4
|
+
readonly layout: (width: number, source?: Date | number | null) => {
|
|
5
|
+
readonly contentWidth: number;
|
|
6
|
+
};
|
|
7
|
+
readonly compose: (contentRows: readonly string[], width: number, source?: Date | number | null, style?: {
|
|
8
|
+
readonly prefix?: (text: string) => string;
|
|
9
|
+
readonly timestamp?: (text: string) => string;
|
|
10
|
+
}) => readonly string[];
|
|
11
|
+
}
|
|
12
|
+
/** Branch summaries share the block kind but do not participate in prompt navigation. */
|
|
13
|
+
export declare function isPiPromptStyleCompaction(block: OwnedUiTranscriptBlock): boolean;
|
|
14
|
+
/** Pi owns Markdown and theme adaptation; the injected composer owns neutral row geometry. */
|
|
15
|
+
export declare function createPiSubmittedPromptComponent(block: OwnedUiTranscriptBlock, composer: PiShellSubmittedPromptComposer, heading?: string): Component;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { getMarkdownTheme } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { Box, Markdown, Text } from "#pi-tui";
|
|
3
|
+
import { piTheme } from "./theme.js";
|
|
4
|
+
/** Branch summaries share the block kind but do not participate in prompt navigation. */
|
|
5
|
+
export function isPiPromptStyleCompaction(block) {
|
|
6
|
+
return block.kind === "compaction" && block.status === "finalized"
|
|
7
|
+
&& typeof block.payload === "object" && block.payload !== null
|
|
8
|
+
&& block.payload.role === "compactionSummary";
|
|
9
|
+
}
|
|
10
|
+
/** Pi owns Markdown and theme adaptation; the injected composer owns neutral row geometry. */
|
|
11
|
+
export function createPiSubmittedPromptComponent(block, composer, heading) {
|
|
12
|
+
const timestamp = numericTimestamp(block);
|
|
13
|
+
// Invariant: presentation-only chrome stays outside the summary's Markdown parser and stored text.
|
|
14
|
+
const header = heading === undefined ? undefined : new Text(heading, 0, 0);
|
|
15
|
+
const markdown = new Markdown(block.text, 0, 0, getMarkdownTheme(), { color: content => piTheme().fg("userMessageText", content) }, { preserveOrderedListMarkers: true, preserveBackslashEscapes: true });
|
|
16
|
+
const content = {
|
|
17
|
+
render(width) {
|
|
18
|
+
const layout = composer.layout(width, timestamp);
|
|
19
|
+
const bodyRows = markdown.render(layout.contentWidth);
|
|
20
|
+
const rows = header === undefined ? bodyRows : [
|
|
21
|
+
...header.render(layout.contentWidth).map(row => piTheme().fg("userMessageText", row)),
|
|
22
|
+
...(bodyRows.length === 0 ? [] : ["", ...bodyRows]),
|
|
23
|
+
];
|
|
24
|
+
return [...composer.compose(rows, width, timestamp, {
|
|
25
|
+
prefix: text => piTheme().fg("muted", text),
|
|
26
|
+
timestamp: text => piTheme().fg("dim", text),
|
|
27
|
+
})];
|
|
28
|
+
},
|
|
29
|
+
invalidate() {
|
|
30
|
+
header?.invalidate();
|
|
31
|
+
markdown.invalidate();
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const box = new Box(0, 0, line => piTheme().bg("userMessageBg", line));
|
|
35
|
+
box.addChild(content);
|
|
36
|
+
return box;
|
|
37
|
+
}
|
|
38
|
+
function numericTimestamp(block) {
|
|
39
|
+
if (typeof block.payload !== "object" || block.payload === null)
|
|
40
|
+
return null;
|
|
41
|
+
const value = block.payload.timestamp;
|
|
42
|
+
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
43
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { convertToPng } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { type Component } from "#pi-tui";
|
|
3
|
+
/**
|
|
4
|
+
* Own only current attachment presentation; tool renderers still receive original result content.
|
|
5
|
+
* Unlike pinned 0.84.2's index cache, entries follow immutable source bytes and stale completions
|
|
6
|
+
* cannot republish. At most one conversion runs per mount; queued work is only the current set.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ToolImagePresentation {
|
|
9
|
+
#private;
|
|
10
|
+
private readonly changed;
|
|
11
|
+
private readonly convert;
|
|
12
|
+
constructor(changed: () => void, convert?: typeof convertToPng);
|
|
13
|
+
update(content: readonly {
|
|
14
|
+
type: string;
|
|
15
|
+
data?: string;
|
|
16
|
+
mimeType?: string;
|
|
17
|
+
}[], show: boolean): void;
|
|
18
|
+
/** Public Image remains responsible for Kitty/iTerm protocol and dimension-aware fallback. */
|
|
19
|
+
components(width: number): Component[];
|
|
20
|
+
dispose(): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { convertToPng } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { getCapabilities, Image, Text } from "#pi-tui";
|
|
3
|
+
import { piTheme } from "./theme.js";
|
|
4
|
+
const MAX_BYTES = 20 * 1024 * 1024;
|
|
5
|
+
const MAX_IMAGES = 16;
|
|
6
|
+
const bytes = (data) => Math.floor(data.length * 3 / 4) - (data.endsWith("==") ? 2 : data.endsWith("=") ? 1 : 0);
|
|
7
|
+
/**
|
|
8
|
+
* Own only current attachment presentation; tool renderers still receive original result content.
|
|
9
|
+
* Unlike pinned 0.84.2's index cache, entries follow immutable source bytes and stale completions
|
|
10
|
+
* cannot republish. At most one conversion runs per mount; queued work is only the current set.
|
|
11
|
+
*/
|
|
12
|
+
export class ToolImagePresentation {
|
|
13
|
+
changed;
|
|
14
|
+
convert;
|
|
15
|
+
#entries = [];
|
|
16
|
+
#visible = false;
|
|
17
|
+
#disposed = false;
|
|
18
|
+
#active = false;
|
|
19
|
+
constructor(changed, convert = convertToPng) {
|
|
20
|
+
this.changed = changed;
|
|
21
|
+
this.convert = convert;
|
|
22
|
+
}
|
|
23
|
+
update(content, show) {
|
|
24
|
+
if (this.#disposed)
|
|
25
|
+
return;
|
|
26
|
+
const previous = this.#entries;
|
|
27
|
+
const next = [];
|
|
28
|
+
for (const part of content) {
|
|
29
|
+
if (part.type !== "image" || !part.data || !part.mimeType)
|
|
30
|
+
continue;
|
|
31
|
+
const source = { data: part.data, mimeType: part.mimeType };
|
|
32
|
+
const same = (entry) => entry.source.data === source.data && entry.source.mimeType === source.mimeType;
|
|
33
|
+
next.push(next.find(same) ?? previous.find(same) ?? { source, state: "waiting" });
|
|
34
|
+
if (next.length === MAX_IMAGES)
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
this.#entries = next;
|
|
38
|
+
this.#visible = show && getCapabilities().images !== null;
|
|
39
|
+
this.#pump();
|
|
40
|
+
}
|
|
41
|
+
/** Public Image remains responsible for Kitty/iTerm protocol and dimension-aware fallback. */
|
|
42
|
+
components(width) {
|
|
43
|
+
if (this.#disposed || !this.#visible)
|
|
44
|
+
return [];
|
|
45
|
+
return this.#entries.map(entry => {
|
|
46
|
+
const source = entry.source;
|
|
47
|
+
if (getCapabilities().images === "kitty" && source.mimeType !== "image/png") {
|
|
48
|
+
if (entry.converted === undefined)
|
|
49
|
+
return new Text(piTheme().fg("muted", entry.state === "unavailable" ? `[Image unavailable: ${source.mimeType}]` : `[Image converting: ${source.mimeType}]`), 1, 0);
|
|
50
|
+
}
|
|
51
|
+
const image = getCapabilities().images === "kitty" ? entry.converted ?? source : source;
|
|
52
|
+
return new Image(image.data, image.mimeType, { fallbackColor: text => piTheme().fg("toolOutput", text) }, { maxWidthCells: width });
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
dispose() {
|
|
56
|
+
this.#disposed = true;
|
|
57
|
+
this.#entries = [];
|
|
58
|
+
}
|
|
59
|
+
#pump() {
|
|
60
|
+
if (this.#disposed || this.#active || !this.#visible || getCapabilities().images !== "kitty")
|
|
61
|
+
return;
|
|
62
|
+
const entry = this.#entries.find(value => value.source.mimeType !== "image/png" && value.state === "waiting");
|
|
63
|
+
if (entry === undefined)
|
|
64
|
+
return;
|
|
65
|
+
entry.state = "converting";
|
|
66
|
+
this.#active = true;
|
|
67
|
+
// Concurrency: defer codec entry until the caller's synchronous component mutation finishes.
|
|
68
|
+
void Promise.resolve().then(() => this.#disposed || !this.#entries.includes(entry)
|
|
69
|
+
? null : this.convert(entry.source.data, entry.source.mimeType)).catch(() => null).then(converted => {
|
|
70
|
+
this.#active = false;
|
|
71
|
+
if (this.#disposed)
|
|
72
|
+
return;
|
|
73
|
+
if (this.#entries.includes(entry)) {
|
|
74
|
+
// Invariant: limits match the existing 16 references / 20 MiB per image, not a new aggregate cap.
|
|
75
|
+
if (converted !== null && converted.mimeType === "image/png" && bytes(converted.data) <= MAX_BYTES) {
|
|
76
|
+
entry.converted = converted;
|
|
77
|
+
entry.state = "ready";
|
|
78
|
+
}
|
|
79
|
+
else
|
|
80
|
+
entry.state = "unavailable";
|
|
81
|
+
this.changed();
|
|
82
|
+
}
|
|
83
|
+
this.#pump();
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ToolExecutionComponent } from "./upstream/components/tool-execution.js";
|
|
2
|
+
import type { OwnedUiTranscriptBlock } from "../../../contracts/owned-ui/index.js";
|
|
3
|
+
import { type PiShellImageAssetResolver } from "./shell-shared-facade.js";
|
|
4
|
+
/** Reconstruct public Pi inputs once at the component boundary, never from diagnostic summaries. */
|
|
5
|
+
export declare function updatePiToolResult(component: Pick<ToolExecutionComponent, "updateResult">, block: OwnedUiTranscriptBlock, assets?: PiShellImageAssetResolver): void;
|
|
6
|
+
export declare function piToolArguments(block: OwnedUiTranscriptBlock): unknown;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { isRecord } from "./shell-shared-facade.js";
|
|
2
|
+
/** Reconstruct public Pi inputs once at the component boundary, never from diagnostic summaries. */
|
|
3
|
+
export function updatePiToolResult(component, block, assets) {
|
|
4
|
+
const payload = isRecord(block.payload) ? block.payload : {};
|
|
5
|
+
if (block.kind !== "tool-result" && payload.partialResult !== true)
|
|
6
|
+
return;
|
|
7
|
+
const image = (index) => {
|
|
8
|
+
const reference = block.imageReferences?.[index];
|
|
9
|
+
const asset = reference === undefined ? null : assets?.resolve(reference.assetId);
|
|
10
|
+
return asset == null
|
|
11
|
+
? { type: "text", text: `[Image unavailable: ${reference?.mimeType ?? "unknown"}]` }
|
|
12
|
+
: { type: "image", data: asset.data, mimeType: asset.mimeType };
|
|
13
|
+
};
|
|
14
|
+
const result = block.toolRendering?.result;
|
|
15
|
+
const content = result === undefined
|
|
16
|
+
? [{ type: "text", text: block.text }, ...(block.imageReferences ?? []).map((_, index) => image(index))]
|
|
17
|
+
: result.content.map(part => part.type === "text"
|
|
18
|
+
? { type: "text", text: block.text.slice(part.start, part.end) } : image(part.imageIndex));
|
|
19
|
+
component.updateResult({ content, details: result?.details, isError: payload.isError === true }, block.status === "live");
|
|
20
|
+
}
|
|
21
|
+
export function piToolArguments(block) {
|
|
22
|
+
if (block.toolRendering !== undefined)
|
|
23
|
+
return block.toolRendering.arguments;
|
|
24
|
+
// Compatibility: existing owned blocks and component consumers may lack rendering metadata.
|
|
25
|
+
const payload = isRecord(block.payload) ? block.payload : {};
|
|
26
|
+
return isRecord(payload.arguments) && "json" in payload.arguments ? payload.arguments.json : payload.arguments ?? {};
|
|
27
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { OwnedUiImageAttachment, OwnedUiTranscriptBlock } from "../../../contracts/owned-ui/index.js";
|
|
2
|
+
import type { PiShellImageAssetResolver } from "./shell-shared-facade.js";
|
|
3
|
+
export declare function createTranscriptImageResolver(source: PiShellImageAssetResolver | undefined, initial: OwnedUiTranscriptBlock): {
|
|
4
|
+
resolve: (id: string) => OwnedUiImageAttachment | null;
|
|
5
|
+
update: (block: OwnedUiTranscriptBlock) => void;
|
|
6
|
+
dispose: () => void;
|
|
7
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Concurrency: a mounted block can outlive its engine revision while delivery is pending; retain its immutable assets through rebuilds.
|
|
2
|
+
export function createTranscriptImageResolver(source, initial) {
|
|
3
|
+
let images = new Map();
|
|
4
|
+
const update = (block) => {
|
|
5
|
+
const next = new Map();
|
|
6
|
+
for (const reference of block.imageReferences ?? []) {
|
|
7
|
+
const asset = source?.resolve(reference.assetId) ?? images.get(reference.assetId);
|
|
8
|
+
if (asset != null)
|
|
9
|
+
next.set(reference.assetId, asset);
|
|
10
|
+
}
|
|
11
|
+
images = next;
|
|
12
|
+
};
|
|
13
|
+
update(initial);
|
|
14
|
+
return {
|
|
15
|
+
resolve: (id) => images.get(id) ?? null,
|
|
16
|
+
update,
|
|
17
|
+
dispose: () => images.clear(),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Source-synchronized from Pi 0.84.2 packages/coding-agent/src/core/keybindings.ts. */
|
|
2
|
-
import { type Keybinding, type KeybindingsConfig, type KeyId, KeybindingsManager as TuiKeybindingsManager } from "#pi-tui";
|
|
2
|
+
import { type Keybinding, type KeybindingDefinitions, type KeybindingsConfig, type KeyId, KeybindingsManager as TuiKeybindingsManager } from "#pi-tui";
|
|
3
3
|
export interface AppKeybindings {
|
|
4
4
|
"app.interrupt": true;
|
|
5
5
|
"app.clear": true;
|
|
@@ -43,6 +43,12 @@ export interface AppKeybindings {
|
|
|
43
43
|
"app.tree.filter.all": true;
|
|
44
44
|
"app.tree.filter.cycleForward": true;
|
|
45
45
|
"app.tree.filter.cycleBackward": true;
|
|
46
|
+
"owned.editor.selectAll": true;
|
|
47
|
+
"owned.editor.cut": true;
|
|
48
|
+
"owned.editor.paste": true;
|
|
49
|
+
"owned.editor.redo": true;
|
|
50
|
+
"owned.editor.extendLeft": true;
|
|
51
|
+
"owned.editor.extendRight": true;
|
|
46
52
|
}
|
|
47
53
|
export type AppKeybinding = keyof AppKeybindings;
|
|
48
54
|
declare module "#pi-tui" {
|
|
@@ -413,8 +419,11 @@ export declare function migrateKeybindingsConfig(rawConfig: Record<string, unkno
|
|
|
413
419
|
};
|
|
414
420
|
export declare class KeybindingsManager extends TuiKeybindingsManager {
|
|
415
421
|
private configPath;
|
|
416
|
-
constructor(userBindings?: KeybindingsConfig, configPath?: string);
|
|
422
|
+
constructor(userBindings?: KeybindingsConfig, configPath?: string, definitions?: KeybindingDefinitions);
|
|
417
423
|
static create(agentDir?: string): KeybindingsManager;
|
|
424
|
+
static fromOwnedBindings(bindings?: KeybindingsConfig): KeybindingsManager;
|
|
425
|
+
static createForOwnedInput(agentDir?: string): KeybindingsManager;
|
|
426
|
+
private static createWithDefinitions;
|
|
418
427
|
reload(): void;
|
|
419
428
|
getEffectiveConfig(): KeybindingsConfig;
|
|
420
429
|
private static loadFromFile;
|
|
@@ -147,6 +147,35 @@ export const KEYBINDINGS = {
|
|
|
147
147
|
description: "Tree filter: cycle backward",
|
|
148
148
|
},
|
|
149
149
|
};
|
|
150
|
+
/** Pi actions with bare-A1 aliases; the comparison profile keeps KEYBINDINGS unchanged. */
|
|
151
|
+
const OWNED_INPUT_KEYBINDINGS = {
|
|
152
|
+
...KEYBINDINGS,
|
|
153
|
+
"app.thinking.cycle": { ...KEYBINDINGS["app.thinking.cycle"], defaultKeys: "ctrl+l" },
|
|
154
|
+
"app.model.select": { ...KEYBINDINGS["app.model.select"], defaultKeys: [] },
|
|
155
|
+
"tui.editor.deleteWordBackward": {
|
|
156
|
+
...KEYBINDINGS["tui.editor.deleteWordBackward"],
|
|
157
|
+
defaultKeys: [...KEYBINDINGS["tui.editor.deleteWordBackward"].defaultKeys, "ctrl+backspace"],
|
|
158
|
+
},
|
|
159
|
+
"tui.editor.deleteWordForward": {
|
|
160
|
+
...KEYBINDINGS["tui.editor.deleteWordForward"],
|
|
161
|
+
defaultKeys: [...KEYBINDINGS["tui.editor.deleteWordForward"].defaultKeys, "ctrl+delete"],
|
|
162
|
+
},
|
|
163
|
+
"tui.editor.undo": {
|
|
164
|
+
...KEYBINDINGS["tui.editor.undo"],
|
|
165
|
+
defaultKeys: [KEYBINDINGS["tui.editor.undo"].defaultKeys, "ctrl+z"],
|
|
166
|
+
},
|
|
167
|
+
// Ctrl+Z edits the prompt in bare A1 instead of suspending the process.
|
|
168
|
+
"app.suspend": { ...KEYBINDINGS["app.suspend"], defaultKeys: [] },
|
|
169
|
+
// Owned prompt-selection actions are intercepted before vanilla Pi editor
|
|
170
|
+
// actions. Keeping them in the keybinding manager makes the UX declarative,
|
|
171
|
+
// configurable, and independent of terminal escape-sequence spellings.
|
|
172
|
+
"owned.editor.selectAll": { defaultKeys: "ctrl+a", description: "Select all prompt text" },
|
|
173
|
+
"owned.editor.cut": { defaultKeys: "ctrl+x", description: "Cut selected prompt text" },
|
|
174
|
+
"owned.editor.paste": { defaultKeys: "ctrl+v", description: "Paste clipboard text" },
|
|
175
|
+
"owned.editor.redo": { defaultKeys: "ctrl+y", description: "Redo prompt edit" },
|
|
176
|
+
"owned.editor.extendLeft": { defaultKeys: "shift+left", description: "Extend prompt selection left" },
|
|
177
|
+
"owned.editor.extendRight": { defaultKeys: "shift+right", description: "Extend prompt selection right" },
|
|
178
|
+
};
|
|
150
179
|
const KEYBINDING_NAME_MIGRATIONS = {
|
|
151
180
|
cursorUp: "tui.editor.cursorUp",
|
|
152
181
|
cursorDown: "tui.editor.cursorDown",
|
|
@@ -270,14 +299,23 @@ function loadRawConfig(path) {
|
|
|
270
299
|
}
|
|
271
300
|
export class KeybindingsManager extends TuiKeybindingsManager {
|
|
272
301
|
configPath;
|
|
273
|
-
constructor(userBindings = {}, configPath) {
|
|
274
|
-
super(
|
|
302
|
+
constructor(userBindings = {}, configPath, definitions = KEYBINDINGS) {
|
|
303
|
+
super(definitions, userBindings);
|
|
275
304
|
this.configPath = configPath;
|
|
276
305
|
}
|
|
277
306
|
static create(agentDir = getAgentDir()) {
|
|
307
|
+
return KeybindingsManager.createWithDefinitions(agentDir, KEYBINDINGS);
|
|
308
|
+
}
|
|
309
|
+
static fromOwnedBindings(bindings = {}) {
|
|
310
|
+
return new KeybindingsManager(bindings, undefined, OWNED_INPUT_KEYBINDINGS);
|
|
311
|
+
}
|
|
312
|
+
static createForOwnedInput(agentDir = getAgentDir()) {
|
|
313
|
+
return KeybindingsManager.createWithDefinitions(agentDir, OWNED_INPUT_KEYBINDINGS);
|
|
314
|
+
}
|
|
315
|
+
static createWithDefinitions(agentDir, definitions) {
|
|
278
316
|
const configPath = join(agentDir, "keybindings.json");
|
|
279
317
|
const userBindings = KeybindingsManager.loadFromFile(configPath);
|
|
280
|
-
return new KeybindingsManager(userBindings, configPath);
|
|
318
|
+
return new KeybindingsManager(userBindings, configPath, definitions);
|
|
281
319
|
}
|
|
282
320
|
reload() {
|
|
283
321
|
if (!this.configPath)
|