@timurproko/a1 0.1.8-dev.3b54f21 → 0.1.8-dev.402
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/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 +124 -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
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { DynamicBorder, getMarkdownTheme } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { Container, Markdown, Spacer, Text } from "#pi-tui";
|
|
3
|
+
import { KeybindingsManager } from "./upstream/adjacent/core/keybindings.js";
|
|
4
|
+
import { PINNED_PI_LAYOUT, piTheme } from "./theme.js";
|
|
5
|
+
import { componentPort, ensureTheme, formatSessionTokens } from "./shell-shared-facade.js";
|
|
6
|
+
export function renderPiShellStatusText(message, width, outputPad = PINNED_PI_LAYOUT.outputPad) {
|
|
7
|
+
ensureTheme();
|
|
8
|
+
return new Text(piTheme().fg("dim", message), outputPad, 0).render(width);
|
|
9
|
+
}
|
|
10
|
+
export function renderPiShellCommandMessage(presentation, width, outputPad = PINNED_PI_LAYOUT.outputPad) {
|
|
11
|
+
ensureTheme();
|
|
12
|
+
const { kind, message, detail } = presentation;
|
|
13
|
+
const prefix = kind === "error" ? "Error: " : kind === "warning" ? "Warning: " : "";
|
|
14
|
+
const color = kind === "name" ? "dim" : kind === "error" || kind === "warning" ? kind : "accent";
|
|
15
|
+
const content = piTheme().fg(color, `${prefix}${message}`)
|
|
16
|
+
+ (kind === "debug" && detail ? `\n${piTheme().fg("muted", detail)}` : "");
|
|
17
|
+
// Compatibility: pinned errors honor outputPad; warnings and command notices retain
|
|
18
|
+
// one-cell padding. New-session/debug notices also own one vertical padding row.
|
|
19
|
+
const text = new Text(content, kind === "error" ? outputPad : 1, kind === "new" || kind === "debug" ? 1 : 0);
|
|
20
|
+
return [
|
|
21
|
+
...(kind === "name" && detail ? renderPiShellCommandMessage({ kind: "warning", message: detail }, width) : []),
|
|
22
|
+
...new Spacer(1).render(width),
|
|
23
|
+
...text.render(width),
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
export function createPiShellSessionInfo(presentation) {
|
|
27
|
+
ensureTheme();
|
|
28
|
+
const { stats, sessionName, cacheWaste, usageBreakdown } = presentation;
|
|
29
|
+
let info = `${piTheme().bold("Session Info")}\n\n`;
|
|
30
|
+
if (sessionName)
|
|
31
|
+
info += `${piTheme().fg("dim", "Name:")} ${sessionName}\n`;
|
|
32
|
+
info += `${piTheme().fg("dim", "File:")} ${stats.sessionFile ?? "In-memory"}\n${piTheme().fg("dim", "ID:")} ${stats.sessionId}\n\n`;
|
|
33
|
+
info += `${piTheme().bold("Messages")}\n${piTheme().fg("dim", "Total:")} ${stats.totalMessages}\n${piTheme().fg("dim", "User:")} ${stats.userMessages}\n`;
|
|
34
|
+
info += `${piTheme().fg("dim", "Assistant:")} ${stats.assistantMessages}\n${piTheme().fg("dim", "Tools:")} ${stats.toolCalls} calls, ${stats.toolResults} results\n\n`;
|
|
35
|
+
info += `${piTheme().bold("Tokens")}\n`;
|
|
36
|
+
const { input, cacheRead, cacheWrite } = stats.tokens;
|
|
37
|
+
const promptTokens = input + cacheRead + cacheWrite;
|
|
38
|
+
info += `${piTheme().fg("dim", "Input:")} ${promptTokens.toLocaleString()}\n`;
|
|
39
|
+
if (promptTokens > 0 && (cacheRead > 0 || cacheWrite > 0)) {
|
|
40
|
+
info += ` ${piTheme().fg("dim", "Cached:")} ${cacheRead.toLocaleString()} ${piTheme().fg("dim", `(${((cacheRead / promptTokens) * 100).toFixed(1)}%)`)}\n`;
|
|
41
|
+
const written = cacheWrite > 0 ? ` ${piTheme().fg("dim", `(${cacheWrite.toLocaleString()} written to cache)`)}` : "";
|
|
42
|
+
info += ` ${piTheme().fg("dim", "Uncached:")} ${(input + cacheWrite).toLocaleString()}${written}\n`;
|
|
43
|
+
}
|
|
44
|
+
info += `${piTheme().fg("dim", "Output:")} ${stats.tokens.output.toLocaleString()}\n${piTheme().fg("dim", "Total:")} ${stats.tokens.total.toLocaleString()}\n`;
|
|
45
|
+
if (stats.cost > 0 || cacheWaste.missedTokens > 0) {
|
|
46
|
+
info += `\n${piTheme().bold("Cost")}\n${piTheme().fg("dim", "Total:")} $${stats.cost.toFixed(3)}`;
|
|
47
|
+
if (usageBreakdown.length > 1)
|
|
48
|
+
for (const entry of usageBreakdown)
|
|
49
|
+
info += `\n ${piTheme().fg("dim", `${entry.key}:`)} $${entry.cost.toFixed(3)} ${piTheme().fg("dim", `(${formatSessionTokens(entry.tokens)} tokens)`)}`;
|
|
50
|
+
if (cacheWaste.missedTokens > 0) {
|
|
51
|
+
const detail = `${cacheWaste.missedTokens.toLocaleString()} tokens, ${cacheWaste.missCount === 1 ? "1 miss" : `${cacheWaste.missCount} misses`}`;
|
|
52
|
+
info += cacheWaste.missedCost >= 0.0001 ? `\n${piTheme().fg("dim", "Cache Re-billed:")} $${cacheWaste.missedCost.toFixed(3)} ${piTheme().fg("dim", `(${detail})`)}` : `\n${piTheme().fg("dim", "Cache Re-billed:")} ${detail}`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const container = new Container();
|
|
56
|
+
container.addChild(new Spacer(1));
|
|
57
|
+
container.addChild(new Text(info, 1, 0));
|
|
58
|
+
return componentPort(container);
|
|
59
|
+
}
|
|
60
|
+
export function createPiShellCollapsedChangelog() {
|
|
61
|
+
ensureTheme();
|
|
62
|
+
const container = new Container();
|
|
63
|
+
container.addChild(new Spacer(1));
|
|
64
|
+
container.addChild(new DynamicBorder());
|
|
65
|
+
container.addChild(new Text(`${piTheme().bold(piTheme().fg("accent", "What's New"))}\n${piTheme().fg("muted", "Run /changelog to view the full release notes.")}`, 1, 0));
|
|
66
|
+
container.addChild(new DynamicBorder());
|
|
67
|
+
return componentPort(container);
|
|
68
|
+
}
|
|
69
|
+
export function createPiShellChangelog(markdown) {
|
|
70
|
+
ensureTheme();
|
|
71
|
+
const container = new Container();
|
|
72
|
+
container.addChild(new Spacer(1));
|
|
73
|
+
container.addChild(new DynamicBorder());
|
|
74
|
+
container.addChild(new Text(piTheme().bold(piTheme().fg("accent", "What's New")), 1, 0));
|
|
75
|
+
container.addChild(new Spacer(1));
|
|
76
|
+
container.addChild(new Markdown(markdown.trim() || "No changelog entries found.", 1, 1, getMarkdownTheme()));
|
|
77
|
+
container.addChild(new DynamicBorder());
|
|
78
|
+
return componentPort(container);
|
|
79
|
+
}
|
|
80
|
+
function shortcutDisplay(key) {
|
|
81
|
+
// Platform: pinned Pi labels Alt as Option on macOS, including extension shortcuts.
|
|
82
|
+
return key.split("/").map(binding => binding.split("+").map(part => {
|
|
83
|
+
const label = process.platform === "darwin" && part.toLowerCase() === "alt" ? "option" : part;
|
|
84
|
+
return label.charAt(0).toUpperCase() + label.slice(1);
|
|
85
|
+
}).join("+")).join("/");
|
|
86
|
+
}
|
|
87
|
+
export function createPiShellHotkeys(bindings, getShortcuts = () => [], profile = "pi") {
|
|
88
|
+
ensureTheme();
|
|
89
|
+
const keys = profile === "a1" ? KeybindingsManager.fromOwnedBindings(bindings) : new KeybindingsManager(bindings);
|
|
90
|
+
// Compatibility: the owned viewport consumes these physical chords before editor actions.
|
|
91
|
+
const display = (action) => keys.getKeys(action)
|
|
92
|
+
.filter(key => profile !== "a1" || (key !== "ctrl+home" && key !== "ctrl+end"))
|
|
93
|
+
.map(shortcutDisplay).join("/");
|
|
94
|
+
const row = (actions, description) => `| ${actions.map(action => {
|
|
95
|
+
const label = display(action);
|
|
96
|
+
return profile === "a1" && label.length === 0
|
|
97
|
+
? action === "app.model.select" ? "Unbound (`/model`)" : "Unbound"
|
|
98
|
+
: `\`${label}\``;
|
|
99
|
+
}).join(" / ")} | ${description} |`;
|
|
100
|
+
let markdown = ["**Navigation**", "| Key | Action |", "|-----|--------|", row(["tui.editor.cursorUp", "tui.editor.cursorDown", "tui.editor.cursorLeft", "tui.editor.cursorRight"], "Move cursor / browse history"), row(["tui.editor.cursorWordLeft", "tui.editor.cursorWordRight"], "Move by word"), row(["tui.editor.cursorLineStart"], profile === "a1" ? "Start of prompt line" : "Start of line"), row(["tui.editor.cursorLineEnd"], profile === "a1" ? "End of prompt line" : "End of line"), ...(profile === "a1" ? ["| `Ctrl+Home` | Start of content |", "| `Ctrl+End` | End of content / follow output |"] : []), row(["tui.editor.jumpForward"], "Jump forward to character"), row(["tui.editor.jumpBackward"], "Jump backward to character"), row(["tui.editor.pageUp", "tui.editor.pageDown"], "Scroll by page"), "", "**Editing**", "| Key | Action |", "|-----|--------|", row(["tui.input.submit"], "Send message"), row(["tui.input.newLine"], `New line${process.platform === "win32" ? " (Ctrl+Enter on Windows Terminal)" : ""}`), row(["tui.editor.deleteWordBackward"], "Delete word backwards"), row(["tui.editor.deleteWordForward"], "Delete word forwards"), row(["tui.editor.deleteToLineStart"], "Delete to start of line"), row(["tui.editor.deleteToLineEnd"], "Delete to end of line"), row(["tui.editor.yank"], "Paste the most-recently-deleted text"), row(["tui.editor.yankPop"], "Cycle through the deleted text after pasting"), row(["tui.editor.undo"], "Undo"), "", "**Other**", "| Key | Action |", "|-----|--------|", row(["tui.input.tab"], "Path completion / accept autocomplete"), row(["app.interrupt"], "Cancel autocomplete / abort streaming"), row(["app.clear"], "Clear editor (first) / exit (second)"), row(["app.exit"], "Exit (when editor is empty)"), row(["app.suspend"], "Suspend to background"), row(["app.thinking.cycle"], "Cycle thinking level"), row(["app.model.cycleForward", "app.model.cycleBackward"], "Cycle models"), row(["app.model.select"], "Open model selector"), row(["app.tools.expand"], "Toggle tool output expansion"), row(["app.thinking.toggle"], "Toggle thinking block visibility"), row(["app.editor.external"], "Edit message in external editor"), row(["app.message.copy"], "Copy last assistant message"), row(["app.message.followUp"], "Queue follow-up message"), row(["app.message.dequeue"], "Restore queued messages"), row(["app.clipboard.pasteImage"], "Paste image or text from clipboard"), "| `/` | Slash commands |", "| `!` | Run bash command |", "| `!!` | Run bash command (excluded from context) |"].join("\n");
|
|
101
|
+
const shortcuts = getShortcuts(bindings ?? keys.getEffectiveConfig());
|
|
102
|
+
if (shortcuts.length > 0) {
|
|
103
|
+
markdown += "\n\n**Extensions**\n| Key | Action |\n|-----|--------|\n";
|
|
104
|
+
markdown += shortcuts.map(shortcut => `| \`${shortcutDisplay(shortcut.key)}\` | ${shortcut.description} |`).join("\n");
|
|
105
|
+
}
|
|
106
|
+
const container = new Container();
|
|
107
|
+
container.addChild(new Spacer(1));
|
|
108
|
+
container.addChild(new DynamicBorder());
|
|
109
|
+
container.addChild(new Text(piTheme().bold(piTheme().fg("accent", "Keyboard Shortcuts")), 1, 0));
|
|
110
|
+
container.addChild(new Spacer(1));
|
|
111
|
+
container.addChild(new Markdown(markdown, 1, 1, getMarkdownTheme()));
|
|
112
|
+
container.addChild(new DynamicBorder());
|
|
113
|
+
return componentPort(container);
|
|
114
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AssistantMessageComponent } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { type MermaidRenderingMode } from "./upstream/components/mermaid.js";
|
|
3
|
+
import type { OwnedUiTranscriptBlock } from "../../../contracts/owned-ui/index.js";
|
|
4
|
+
import { type PiShellSubmittedPromptComposer } from "./submitted-prompt-adapter.js";
|
|
5
|
+
export { isPiPromptStyleCompaction, type PiShellSubmittedPromptComposer } from "./submitted-prompt-adapter.js";
|
|
6
|
+
import { type PiShellExtensionRendererResolver, type PiShellImageAssetResolver, type PiShellTranscriptComponentPort } from "./shell-shared-facade.js";
|
|
7
|
+
export declare function createPiShellTranscriptComponent(initial: OwnedUiTranscriptBlock, cwd: string, extensions?: PiShellExtensionRendererResolver, submittedPrompt?: PiShellSubmittedPromptComposer, initialOutputPad?: 0 | 1, initialHideThinkingBlock?: boolean, initialMermaidRenderingMode?: MermaidRenderingMode, initialShowImages?: boolean, initialImageWidthCells?: number, imageAssets?: PiShellImageAssetResolver, presentation?: {
|
|
8
|
+
readonly getColumns: () => number;
|
|
9
|
+
readonly getRows: () => number;
|
|
10
|
+
readonly changed: () => void;
|
|
11
|
+
}): PiShellTranscriptComponentPort;
|
|
12
|
+
export declare function renderPiShellTranscriptBlock(block: OwnedUiTranscriptBlock, width: number, cwd: string): readonly string[];
|
|
13
|
+
/**
|
|
14
|
+
* Pinned Pi's CLI prints startup diagnostics with `reportDiagnostics` before
|
|
15
|
+
* the banner: the whole line, prefix included, in chalk's basic ANSI severity
|
|
16
|
+
* colour — not the theme's tokens — with info lines dim and unprefixed.
|
|
17
|
+
*/
|
|
18
|
+
export declare function renderPiShellStartupDiagnostic(diagnostic: {
|
|
19
|
+
readonly severity: "info" | "warning" | "error";
|
|
20
|
+
readonly message: string;
|
|
21
|
+
}, width: number): readonly string[];
|
|
22
|
+
/**
|
|
23
|
+
* Pinned Pi's `showPackageUpdateNotification` banner: warning-coloured dynamic
|
|
24
|
+
* borders around a bold warning title, the muted update instruction with the
|
|
25
|
+
* accent command, and the package list.
|
|
26
|
+
*/
|
|
27
|
+
export declare function renderPiShellPackageUpdateNotice(packages: readonly string[], width: number): readonly string[];
|
|
28
|
+
type PiAssistantMessage = NonNullable<ConstructorParameters<typeof AssistantMessageComponent>[0]>;
|
|
29
|
+
export declare function validatedAssistantMessage(block: OwnedUiTranscriptBlock): PiAssistantMessage;
|
|
@@ -1,145 +1,159 @@
|
|
|
1
|
-
import { AssistantMessageComponent, BashExecutionComponent, CompactionSummaryMessageComponent, CustomMessageComponent, DynamicBorder, getMarkdownTheme, parseSkillBlock,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { AssistantMessageComponent, BashExecutionComponent, CompactionSummaryMessageComponent, CustomMessageComponent, DynamicBorder, getMarkdownTheme, parseSkillBlock, UserMessageComponent, } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { ToolExecutionComponent } from "./upstream/components/tool-execution.js";
|
|
3
|
+
import { SkillInvocationMessageComponent } from "./upstream/components/skill-invocation-message.js";
|
|
4
|
+
import { piToolArguments as toolArguments, updatePiToolResult as updateToolResult } from "./tool-result-adapter.js";
|
|
5
|
+
import { createTranscriptImageResolver } from "./transcript-image-resolver.js";
|
|
6
|
+
import { createMermaidMarkdownTransformer } from "./upstream/components/mermaid.js";
|
|
7
|
+
import { Container, Image, Spacer, Text, } from "#pi-tui";
|
|
8
|
+
import { PRODUCT_TEXT } from "../../../product-identity.js";
|
|
9
|
+
import { createPiSubmittedPromptComponent, isPiPromptStyleCompaction, } from "./submitted-prompt-adapter.js";
|
|
10
|
+
export { isPiPromptStyleCompaction } from "./submitted-prompt-adapter.js";
|
|
5
11
|
import { PINNED_PI_LAYOUT, piTheme, } from "./theme.js";
|
|
6
|
-
import { componentPort, createTuiFacade, ensureTheme,
|
|
7
|
-
export function
|
|
8
|
-
ensureTheme();
|
|
9
|
-
return new Text(piTheme().fg("dim", message), PINNED_PI_LAYOUT.outputPad, 0).render(width);
|
|
10
|
-
}
|
|
11
|
-
export function createPiShellSessionInfo(presentation) {
|
|
12
|
-
ensureTheme();
|
|
13
|
-
const { stats, sessionName, cacheWaste, usageBreakdown } = presentation;
|
|
14
|
-
let info = `${piTheme().bold("Session Info")}\n\n`;
|
|
15
|
-
if (sessionName)
|
|
16
|
-
info += `${piTheme().fg("dim", "Name:")} ${sessionName}\n`;
|
|
17
|
-
info += `${piTheme().fg("dim", "File:")} ${stats.sessionFile ?? "In-memory"}\n`;
|
|
18
|
-
info += `${piTheme().fg("dim", "ID:")} ${stats.sessionId}\n\n`;
|
|
19
|
-
info += `${piTheme().bold("Messages")}\n`;
|
|
20
|
-
info += `${piTheme().fg("dim", "Total:")} ${stats.totalMessages}\n`;
|
|
21
|
-
info += `${piTheme().fg("dim", "User:")} ${stats.userMessages}\n`;
|
|
22
|
-
info += `${piTheme().fg("dim", "Assistant:")} ${stats.assistantMessages}\n`;
|
|
23
|
-
info += `${piTheme().fg("dim", "Tools:")} ${stats.toolCalls} calls, ${stats.toolResults} results\n\n`;
|
|
24
|
-
info += `${piTheme().bold("Tokens")}\n`;
|
|
25
|
-
const { input, cacheRead, cacheWrite } = stats.tokens;
|
|
26
|
-
const promptTokens = input + cacheRead + cacheWrite;
|
|
27
|
-
info += `${piTheme().fg("dim", "Input:")} ${promptTokens.toLocaleString()}\n`;
|
|
28
|
-
if (promptTokens > 0 && (cacheRead > 0 || cacheWrite > 0)) {
|
|
29
|
-
const hitRate = piTheme().fg("dim", `(${((cacheRead / promptTokens) * 100).toFixed(1)}%)`);
|
|
30
|
-
info += ` ${piTheme().fg("dim", "Cached:")} ${cacheRead.toLocaleString()} ${hitRate}\n`;
|
|
31
|
-
const written = cacheWrite > 0 ? ` ${piTheme().fg("dim", `(${cacheWrite.toLocaleString()} written to cache)`)}` : "";
|
|
32
|
-
info += ` ${piTheme().fg("dim", "Uncached:")} ${(input + cacheWrite).toLocaleString()}${written}\n`;
|
|
33
|
-
}
|
|
34
|
-
info += `${piTheme().fg("dim", "Output:")} ${stats.tokens.output.toLocaleString()}\n`;
|
|
35
|
-
info += `${piTheme().fg("dim", "Total:")} ${stats.tokens.total.toLocaleString()}\n`;
|
|
36
|
-
if (stats.cost > 0 || cacheWaste.missedTokens > 0) {
|
|
37
|
-
info += `\n${piTheme().bold("Cost")}\n`;
|
|
38
|
-
info += `${piTheme().fg("dim", "Total:")} $${stats.cost.toFixed(3)}`;
|
|
39
|
-
if (usageBreakdown.length > 1) {
|
|
40
|
-
for (const entry of usageBreakdown) {
|
|
41
|
-
info += `\n ${piTheme().fg("dim", `${entry.key}:`)} $${entry.cost.toFixed(3)} ${piTheme().fg("dim", `(${formatSessionTokens(entry.tokens)} tokens)`)}`;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
if (cacheWaste.missedTokens > 0) {
|
|
45
|
-
const missLabel = cacheWaste.missCount === 1 ? "1 miss" : `${cacheWaste.missCount} misses`;
|
|
46
|
-
const detail = `${cacheWaste.missedTokens.toLocaleString()} tokens, ${missLabel}`;
|
|
47
|
-
info += cacheWaste.missedCost >= 0.0001
|
|
48
|
-
? `\n${piTheme().fg("dim", "Cache Re-billed:")} $${cacheWaste.missedCost.toFixed(3)} ${piTheme().fg("dim", `(${detail})`)}`
|
|
49
|
-
: `\n${piTheme().fg("dim", "Cache Re-billed:")} ${detail}`;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const container = new Container();
|
|
53
|
-
container.addChild(new Spacer(1));
|
|
54
|
-
container.addChild(new Text(info, 1, 0));
|
|
55
|
-
return componentPort(container);
|
|
56
|
-
}
|
|
57
|
-
export function createPiShellChangelog(markdown) {
|
|
58
|
-
ensureTheme();
|
|
59
|
-
const container = new Container();
|
|
60
|
-
container.addChild(new Spacer(1));
|
|
61
|
-
container.addChild(new DynamicBorder());
|
|
62
|
-
container.addChild(new Text(piTheme().bold(piTheme().fg("accent", "What's New")), 1, 0));
|
|
63
|
-
container.addChild(new Spacer(1));
|
|
64
|
-
container.addChild(new Markdown(markdown.trim() || "No changelog entries found.", 1, 1, getMarkdownTheme()));
|
|
65
|
-
container.addChild(new DynamicBorder());
|
|
66
|
-
return componentPort(container);
|
|
67
|
-
}
|
|
68
|
-
export function createPiShellHotkeys() {
|
|
69
|
-
ensureTheme();
|
|
70
|
-
const keys = new KeybindingsManager();
|
|
71
|
-
const display = (action) => keys.getKeys(action)
|
|
72
|
-
.map(key => key.split("+").map(part => part.charAt(0).toUpperCase() + part.slice(1)).join("+"))
|
|
73
|
-
.join("/");
|
|
74
|
-
const row = (actions, description) => `| ${actions.map(action => `\`${display(action)}\``).join(" / ")} | ${description} |`;
|
|
75
|
-
const markdown = [
|
|
76
|
-
"**Navigation**", "| Key | Action |", "|-----|--------|",
|
|
77
|
-
row(["tui.editor.cursorUp", "tui.editor.cursorDown", "tui.editor.cursorLeft", "tui.editor.cursorRight"], "Move cursor / browse history"),
|
|
78
|
-
row(["tui.editor.cursorWordLeft", "tui.editor.cursorWordRight"], "Move by word"),
|
|
79
|
-
row(["tui.editor.cursorLineStart"], "Start of line"), row(["tui.editor.cursorLineEnd"], "End of line"),
|
|
80
|
-
row(["tui.editor.jumpForward"], "Jump forward to character"), row(["tui.editor.jumpBackward"], "Jump backward to character"),
|
|
81
|
-
row(["tui.editor.pageUp", "tui.editor.pageDown"], "Scroll by page"), "",
|
|
82
|
-
"**Editing**", "| Key | Action |", "|-----|--------|",
|
|
83
|
-
row(["tui.input.submit"], "Send message"),
|
|
84
|
-
row(["tui.input.newLine"], `New line${process.platform === "win32" ? " (Ctrl+Enter on Windows Terminal)" : ""}`),
|
|
85
|
-
row(["tui.editor.deleteWordBackward"], "Delete word backwards"), row(["tui.editor.deleteWordForward"], "Delete word forwards"),
|
|
86
|
-
row(["tui.editor.deleteToLineStart"], "Delete to start of line"), row(["tui.editor.deleteToLineEnd"], "Delete to end of line"),
|
|
87
|
-
row(["tui.editor.yank"], "Paste the most-recently-deleted text"), row(["tui.editor.yankPop"], "Cycle through the deleted text after pasting"),
|
|
88
|
-
row(["tui.editor.undo"], "Undo"), "", "**Other**", "| Key | Action |", "|-----|--------|",
|
|
89
|
-
row(["tui.input.tab"], "Path completion / accept autocomplete"), row(["app.interrupt"], "Cancel autocomplete / abort streaming"),
|
|
90
|
-
row(["app.clear"], "Clear editor (first) / exit (second)"), row(["app.exit"], "Exit (when editor is empty)"),
|
|
91
|
-
row(["app.suspend"], "Suspend to background"), row(["app.thinking.cycle"], "Cycle thinking level"),
|
|
92
|
-
row(["app.model.cycleForward", "app.model.cycleBackward"], "Cycle models"), row(["app.model.select"], "Open model selector"),
|
|
93
|
-
row(["app.tools.expand"], "Toggle tool output expansion"), row(["app.thinking.toggle"], "Toggle thinking block visibility"),
|
|
94
|
-
row(["app.editor.external"], "Edit message in external editor"), row(["app.message.copy"], "Copy last assistant message"),
|
|
95
|
-
row(["app.message.followUp"], "Queue follow-up message"), row(["app.message.dequeue"], "Restore queued messages"),
|
|
96
|
-
row(["app.clipboard.pasteImage"], "Paste image or text from clipboard"),
|
|
97
|
-
"| `/` | Slash commands |", "| `!` | Run bash command |", "| `!!` | Run bash command (excluded from context) |",
|
|
98
|
-
].join("\n");
|
|
99
|
-
const container = new Container();
|
|
100
|
-
container.addChild(new Spacer(1));
|
|
101
|
-
container.addChild(new DynamicBorder());
|
|
102
|
-
container.addChild(new Text(piTheme().bold(piTheme().fg("accent", "Keyboard Shortcuts")), 1, 0));
|
|
103
|
-
container.addChild(new Spacer(1));
|
|
104
|
-
container.addChild(new Markdown(markdown, 1, 1, getMarkdownTheme()));
|
|
105
|
-
container.addChild(new DynamicBorder());
|
|
106
|
-
return componentPort(container);
|
|
107
|
-
}
|
|
108
|
-
export function createPiShellTranscriptComponent(initial, cwd, extensions) {
|
|
12
|
+
import { componentPort, createTuiFacade, ensureTheme, isRecord, } from "./shell-shared-facade.js";
|
|
13
|
+
export function createPiShellTranscriptComponent(initial, cwd, extensions, submittedPrompt, initialOutputPad = PINNED_PI_LAYOUT.outputPad, initialHideThinkingBlock = false, initialMermaidRenderingMode = "off", initialShowImages = true, initialImageWidthCells = 80, imageAssets, presentation) {
|
|
109
14
|
ensureTheme();
|
|
110
15
|
let block = initial;
|
|
16
|
+
const retainedImages = createTranscriptImageResolver(imageAssets, initial);
|
|
111
17
|
let expanded = false;
|
|
112
|
-
let
|
|
18
|
+
let outputPad = initialOutputPad;
|
|
19
|
+
let hideThinkingBlock = initialHideThinkingBlock;
|
|
20
|
+
let mermaidRenderingMode = initialMermaidRenderingMode;
|
|
21
|
+
let showImages = initialShowImages;
|
|
22
|
+
let imageWidthCells = initialImageWidthCells;
|
|
23
|
+
let disposed = false;
|
|
24
|
+
let mount = 0;
|
|
25
|
+
let updating = false;
|
|
26
|
+
let dirty = false;
|
|
27
|
+
let presentationRevision = 0;
|
|
28
|
+
let mountedTool;
|
|
29
|
+
const mutate = (action) => {
|
|
30
|
+
const previous = updating;
|
|
31
|
+
updating = true;
|
|
32
|
+
try {
|
|
33
|
+
return action();
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
updating = previous;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const rebuild = () => {
|
|
40
|
+
mountedTool?.dispose();
|
|
41
|
+
const token = ++mount;
|
|
42
|
+
const requestRender = () => {
|
|
43
|
+
if (disposed || updating || token !== mount || dirty)
|
|
44
|
+
return;
|
|
45
|
+
dirty = true;
|
|
46
|
+
presentationRevision++;
|
|
47
|
+
presentation?.changed();
|
|
48
|
+
};
|
|
49
|
+
return mutate(() => {
|
|
50
|
+
const next = transcriptComponent(block, cwd, expanded, extensions, submittedPrompt, outputPad, hideThinkingBlock, mermaidRenderingMode, showImages, imageWidthCells, retainedImages, createTuiFacade({ getColumns: presentation?.getColumns ?? (() => 80),
|
|
51
|
+
getRows: presentation?.getRows ?? (() => 24), requestRender }));
|
|
52
|
+
mountedTool = next instanceof ToolExecutionComponent ? next : undefined;
|
|
53
|
+
return withTranscriptImages(next, block, retainedImages, showImages, imageWidthCells);
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
let component = rebuild();
|
|
113
57
|
return {
|
|
114
58
|
get id() { return block.id; },
|
|
115
59
|
get revision() { return block.revision; },
|
|
116
|
-
|
|
117
|
-
|
|
60
|
+
get presentationRevision() { return presentationRevision; },
|
|
61
|
+
render: width => {
|
|
62
|
+
dirty = false;
|
|
63
|
+
const rows = mutate(() => renderWithOutputPad(component, block.kind, width, outputPad));
|
|
64
|
+
const warning = block.toolRendering?.unavailable;
|
|
65
|
+
return warning === undefined ? rows : [...rows, ...new Text(piTheme().fg("warning", warning), outputPad, 0).render(width)];
|
|
66
|
+
},
|
|
67
|
+
invalidate: () => mutate(() => component.invalidate()),
|
|
68
|
+
dispose: () => { disposed = true; mount++; mountedTool?.dispose(); retainedImages.dispose(); },
|
|
118
69
|
update(next) {
|
|
119
70
|
if (next.id !== block.id)
|
|
120
71
|
throw new TypeError("Pi transcript component identity cannot change");
|
|
121
72
|
const previous = block;
|
|
122
73
|
block = next;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
74
|
+
retainedImages.update(next);
|
|
75
|
+
if (!mutate(() => updateTranscriptComponent(component, previous, next, expanded, retainedImages)))
|
|
76
|
+
component = rebuild();
|
|
126
77
|
},
|
|
127
78
|
setExpanded(next) {
|
|
128
79
|
if (expanded === next)
|
|
129
80
|
return;
|
|
130
81
|
expanded = next;
|
|
131
|
-
if (
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
82
|
+
if (submittedPrompt !== undefined && isPiPromptStyleCompaction(block))
|
|
83
|
+
return;
|
|
84
|
+
if ("setExpanded" in component && typeof component.setExpanded === "function")
|
|
85
|
+
mutate(() => {
|
|
86
|
+
if ("setExpanded" in component && typeof component.setExpanded === "function")
|
|
87
|
+
component.setExpanded(expanded);
|
|
88
|
+
});
|
|
89
|
+
else
|
|
90
|
+
component = rebuild();
|
|
91
|
+
},
|
|
92
|
+
setOutputPad(padding) {
|
|
93
|
+
if (outputPad === padding)
|
|
94
|
+
return;
|
|
95
|
+
outputPad = padding;
|
|
96
|
+
component = rebuild();
|
|
97
|
+
},
|
|
98
|
+
setHideThinkingBlock(hidden) {
|
|
99
|
+
if (hideThinkingBlock === hidden)
|
|
100
|
+
return;
|
|
101
|
+
hideThinkingBlock = hidden;
|
|
102
|
+
component = rebuild();
|
|
103
|
+
},
|
|
104
|
+
setMermaidRenderingMode(mode) {
|
|
105
|
+
if (mermaidRenderingMode === mode)
|
|
106
|
+
return;
|
|
107
|
+
mermaidRenderingMode = mode;
|
|
108
|
+
component = rebuild();
|
|
109
|
+
},
|
|
110
|
+
setImagePresentation(show, width) {
|
|
111
|
+
showImages = show;
|
|
112
|
+
imageWidthCells = width;
|
|
113
|
+
if (component instanceof ToolExecutionComponent) {
|
|
114
|
+
const tool = component;
|
|
115
|
+
mutate(() => { tool.setShowImages(show); tool.setImageWidthCells(width); });
|
|
136
116
|
}
|
|
117
|
+
else
|
|
118
|
+
component = rebuild();
|
|
137
119
|
},
|
|
138
120
|
};
|
|
139
121
|
}
|
|
122
|
+
function withTranscriptImages(component, block, assets, showImages, imageWidthCells) {
|
|
123
|
+
// Compatibility: Pi owns tool images and renderer state, including references introduced after the call header.
|
|
124
|
+
if (component instanceof ToolExecutionComponent)
|
|
125
|
+
return component;
|
|
126
|
+
const references = block.imageReferences ?? [];
|
|
127
|
+
if (references.length === 0)
|
|
128
|
+
return component;
|
|
129
|
+
const container = new Container();
|
|
130
|
+
container.addChild(component);
|
|
131
|
+
for (const reference of references) {
|
|
132
|
+
container.addChild(new Spacer(1));
|
|
133
|
+
const asset = assets?.resolve(reference.assetId) ?? null;
|
|
134
|
+
if (!showImages) {
|
|
135
|
+
container.addChild(new Text(piTheme().fg("muted", `[Image hidden: ${reference.mimeType}, ${reference.byteLength} bytes]`), 1, 0));
|
|
136
|
+
}
|
|
137
|
+
else if (asset === null) {
|
|
138
|
+
container.addChild(new Text(piTheme().fg("warning", `[Image unavailable: ${reference.mimeType}]`), 1, 0));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
container.addChild(new Image(asset.data, asset.mimeType, {
|
|
142
|
+
fallbackColor: text => piTheme().fg("muted", text),
|
|
143
|
+
}, { maxWidthCells: imageWidthCells, filename: reference.assetId }));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return container;
|
|
147
|
+
}
|
|
148
|
+
function renderWithOutputPad(component, kind, width, outputPad) {
|
|
149
|
+
const rows = component.render(width);
|
|
150
|
+
if (outputPad !== 0 || (kind !== "tool-call" && kind !== "tool-result" && kind !== "bash"))
|
|
151
|
+
return rows;
|
|
152
|
+
return rows.map(row => row.startsWith(" ") ? row.slice(1) : row);
|
|
153
|
+
}
|
|
140
154
|
export function renderPiShellTranscriptBlock(block, width, cwd) {
|
|
141
155
|
ensureTheme();
|
|
142
|
-
return transcriptComponent(block, cwd, true).render(width);
|
|
156
|
+
return transcriptComponent(block, cwd, true, undefined, undefined, PINNED_PI_LAYOUT.outputPad, false, "off", true, 80).render(width);
|
|
143
157
|
}
|
|
144
158
|
/**
|
|
145
159
|
* Pinned Pi's CLI prints startup diagnostics with `reportDiagnostics` before
|
|
@@ -168,18 +182,18 @@ export function renderPiShellPackageUpdateNotice(packages, width) {
|
|
|
168
182
|
container.addChild(new Spacer(1));
|
|
169
183
|
container.addChild(new DynamicBorder(text => theme.fg("warning", text)));
|
|
170
184
|
container.addChild(new Text(`${theme.bold(theme.fg("warning", "Package Updates Available"))}\n`
|
|
171
|
-
+ `${theme.fg("muted", "Package updates are available. Run ")}${theme.fg("accent",
|
|
185
|
+
+ `${theme.fg("muted", "Package updates are available. Run ")}${theme.fg("accent", `${PRODUCT_TEXT.commandName} pi update --extensions`)}\n`
|
|
172
186
|
+ `${theme.fg("muted", "Packages:")}\n`
|
|
173
187
|
+ packages.map(name => `- ${name}`).join("\n"), 1, 0));
|
|
174
188
|
container.addChild(new DynamicBorder(text => theme.fg("warning", text)));
|
|
175
189
|
return container.render(width);
|
|
176
190
|
}
|
|
177
|
-
function transcriptComponent(block, cwd, expanded, extensions) {
|
|
191
|
+
function transcriptComponent(block, cwd, expanded, extensions, submittedPrompt, outputPad, hideThinkingBlock, mermaidRenderingMode, showImages, imageWidthCells, imageAssets, tui) {
|
|
178
192
|
switch (block.kind) {
|
|
179
193
|
case "user": {
|
|
180
194
|
const skill = parseSkillBlock(block.text);
|
|
181
195
|
if (!skill)
|
|
182
|
-
return new UserMessageComponent(block.text);
|
|
196
|
+
return submittedPrompt ? createPiSubmittedPromptComponent(block, submittedPrompt) : new UserMessageComponent(block.text);
|
|
183
197
|
const invocation = new SkillInvocationMessageComponent(skill, getMarkdownTheme());
|
|
184
198
|
invocation.setExpanded(expanded);
|
|
185
199
|
if (!skill.userMessage)
|
|
@@ -192,14 +206,18 @@ function transcriptComponent(block, cwd, expanded, extensions) {
|
|
|
192
206
|
}
|
|
193
207
|
case "assistant":
|
|
194
208
|
case "thinking":
|
|
195
|
-
return assistantComponent(block);
|
|
209
|
+
return assistantComponent(block, outputPad, hideThinkingBlock, mermaidRenderingMode);
|
|
196
210
|
case "tool-call":
|
|
197
211
|
case "tool-result": {
|
|
198
|
-
const component = toolComponent(block, cwd, extensions);
|
|
212
|
+
const component = toolComponent(block, cwd, extensions, showImages, imageWidthCells, imageAssets, tui);
|
|
199
213
|
component.setExpanded(expanded);
|
|
200
214
|
return component;
|
|
201
215
|
}
|
|
202
216
|
case "compaction": {
|
|
217
|
+
if (submittedPrompt !== undefined && isPiPromptStyleCompaction(block)) {
|
|
218
|
+
const tokens = numericPayload(block, "tokensBefore").toLocaleString("en-US");
|
|
219
|
+
return createPiSubmittedPromptComponent(block, submittedPrompt, `Compacted from ${tokens} tokens`);
|
|
220
|
+
}
|
|
203
221
|
const component = new CompactionSummaryMessageComponent({
|
|
204
222
|
role: "compactionSummary",
|
|
205
223
|
summary: block.text,
|
|
@@ -210,18 +228,18 @@ function transcriptComponent(block, cwd, expanded, extensions) {
|
|
|
210
228
|
return component;
|
|
211
229
|
}
|
|
212
230
|
case "retry":
|
|
213
|
-
return new Text(piTheme().fg("warning", `Retry: ${block.text}`),
|
|
231
|
+
return new Text(piTheme().fg("warning", `Retry: ${block.text}`), outputPad, 0);
|
|
214
232
|
case "error":
|
|
215
|
-
return new Text(piTheme().fg("error", `Error: ${block.text}`),
|
|
233
|
+
return new Text(piTheme().fg("error", `Error: ${block.text}`), outputPad, 0);
|
|
216
234
|
case "system":
|
|
217
|
-
return new Text(piTheme().fg("dim", block.text),
|
|
235
|
+
return new Text(piTheme().fg("dim", block.text), outputPad, 0);
|
|
218
236
|
case "custom":
|
|
219
|
-
return customMessageComponent(block, expanded, extensions);
|
|
237
|
+
return customMessageComponent(block, expanded, extensions, outputPad);
|
|
220
238
|
case "bash":
|
|
221
|
-
return bashExecutionComponent(block, cwd, expanded);
|
|
239
|
+
return bashExecutionComponent(block, cwd, expanded, tui);
|
|
222
240
|
}
|
|
223
241
|
}
|
|
224
|
-
function updateTranscriptComponent(component, previous, next, expanded) {
|
|
242
|
+
function updateTranscriptComponent(component, previous, next, expanded, imageAssets) {
|
|
225
243
|
if (component instanceof AssistantMessageComponent && next.kind === previous.kind
|
|
226
244
|
&& (next.kind === "assistant" || next.kind === "thinking")) {
|
|
227
245
|
component.updateContent(validatedAssistantMessage(next), next.status === "live");
|
|
@@ -230,22 +248,10 @@ function updateTranscriptComponent(component, previous, next, expanded) {
|
|
|
230
248
|
if (component instanceof ToolExecutionComponent
|
|
231
249
|
&& (next.kind === "tool-call" || next.kind === "tool-result")
|
|
232
250
|
&& (previous.kind === "tool-call" || previous.kind === "tool-result")) {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
if (next.status === "finalized" || payload.argsComplete === true)
|
|
238
|
-
component.setArgsComplete();
|
|
239
|
-
if (payload.partialResult === true) {
|
|
240
|
-
component.updateResult({ content: [{ type: "text", text: next.text }], isError: false }, true);
|
|
241
|
-
}
|
|
242
|
-
else if (next.kind === "tool-result") {
|
|
243
|
-
component.updateResult({
|
|
244
|
-
content: [{ type: "text", text: next.text }],
|
|
245
|
-
isError: payload.isError === true,
|
|
246
|
-
}, next.status === "live");
|
|
247
|
-
}
|
|
248
|
-
component.setExpanded(expanded);
|
|
251
|
+
if (toolArguments(previous) !== toolArguments(next))
|
|
252
|
+
component.updateArgs(toolArguments(next));
|
|
253
|
+
applyToolState(component, next, previous);
|
|
254
|
+
updateToolResult(component, next, imageAssets);
|
|
249
255
|
return true;
|
|
250
256
|
}
|
|
251
257
|
if (component instanceof BashExecutionComponent && next.kind === "bash" && previous.kind === "bash") {
|
|
@@ -265,8 +271,9 @@ function updateTranscriptComponent(component, previous, next, expanded) {
|
|
|
265
271
|
}
|
|
266
272
|
return false;
|
|
267
273
|
}
|
|
268
|
-
function assistantComponent(block) {
|
|
269
|
-
const
|
|
274
|
+
function assistantComponent(block, outputPad, hideThinkingBlock, mermaidRenderingMode) {
|
|
275
|
+
const transformer = createMermaidMarkdownTransformer({ getMode: () => mermaidRenderingMode, theme: piTheme() });
|
|
276
|
+
const component = new AssistantMessageComponent(undefined, hideThinkingBlock, getMarkdownTheme(), undefined, outputPad, [transformer]);
|
|
270
277
|
component.updateContent(validatedAssistantMessage(block), block.status === "live");
|
|
271
278
|
return component;
|
|
272
279
|
}
|
|
@@ -334,28 +341,28 @@ function validatedMessageRenderer(value) {
|
|
|
334
341
|
function isPiMessageRenderer(value) {
|
|
335
342
|
return typeof value === "function";
|
|
336
343
|
}
|
|
337
|
-
function toolComponent(block, cwd, extensions) {
|
|
344
|
+
function toolComponent(block, cwd, extensions, showImages, imageWidthCells, imageAssets, tui) {
|
|
338
345
|
const payload = blockPayload(block);
|
|
339
346
|
const toolCallId = stringPayload(payload, "toolCallId") ?? block.id;
|
|
340
347
|
const toolName = stringPayload(payload, "toolName") ?? block.title ?? "tool";
|
|
341
|
-
const argumentsPayload = toolArguments(
|
|
342
|
-
const component = new ToolExecutionComponent(toolName, toolCallId, argumentsPayload,
|
|
343
|
-
|
|
348
|
+
const argumentsPayload = toolArguments(block);
|
|
349
|
+
const component = new ToolExecutionComponent(toolName, toolCallId, argumentsPayload, { showImages, imageWidthCells }, validatedToolDefinition(extensions?.getToolDefinition(toolName)), tui ?? createTuiFacade({ getColumns: () => 80, getRows: () => 24, requestRender() { } }), cwd);
|
|
350
|
+
applyToolState(component, block);
|
|
351
|
+
updateToolResult(component, block, imageAssets);
|
|
352
|
+
return component;
|
|
353
|
+
}
|
|
354
|
+
/** The public renderer's argument-complete and execution-started flags are independent. */
|
|
355
|
+
function applyToolState(component, block, previous) {
|
|
356
|
+
const started = (value) => value.toolState?.execution === "running"
|
|
357
|
+
|| value.toolState === undefined && value.status === "live";
|
|
358
|
+
const complete = (value) => value.toolState?.argsComplete
|
|
359
|
+
?? (value.status === "finalized" || blockPayload(value).argsComplete === true);
|
|
360
|
+
if (started(block) && (previous === undefined || !started(previous)))
|
|
344
361
|
component.markExecutionStarted();
|
|
345
|
-
if (block
|
|
362
|
+
if (complete(block) && (previous === undefined || !complete(previous)))
|
|
346
363
|
component.setArgsComplete();
|
|
347
|
-
if (payload.partialResult === true) {
|
|
348
|
-
component.updateResult({ content: [{ type: "text", text: block.text }], isError: false }, true);
|
|
349
|
-
}
|
|
350
|
-
else if (block.kind === "tool-result") {
|
|
351
|
-
component.updateResult({
|
|
352
|
-
content: [{ type: "text", text: block.text }],
|
|
353
|
-
isError: payload.isError === true,
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
return component;
|
|
357
364
|
}
|
|
358
|
-
function customMessageComponent(block, expanded, extensions) {
|
|
365
|
+
function customMessageComponent(block, expanded, extensions, outputPad) {
|
|
359
366
|
const payload = blockPayload(block);
|
|
360
367
|
const message = {
|
|
361
368
|
role: "custom",
|
|
@@ -366,13 +373,13 @@ function customMessageComponent(block, expanded, extensions) {
|
|
|
366
373
|
timestamp: numericPayload(block, "timestamp") || 0,
|
|
367
374
|
};
|
|
368
375
|
const renderer = validatedMessageRenderer(extensions?.getMessageRenderer(message.customType));
|
|
369
|
-
const component = new CustomMessageComponent(message, renderer, getMarkdownTheme(),
|
|
376
|
+
const component = new CustomMessageComponent(message, renderer, getMarkdownTheme(), outputPad);
|
|
370
377
|
component.setExpanded(expanded);
|
|
371
378
|
return component;
|
|
372
379
|
}
|
|
373
|
-
function bashExecutionComponent(block, cwd, expanded) {
|
|
380
|
+
function bashExecutionComponent(block, cwd, expanded, tui) {
|
|
374
381
|
const payload = blockPayload(block);
|
|
375
|
-
const component = new BashExecutionComponent(stringPayload(payload, "command") ?? block.title ?? "", createTuiFacade({ getColumns: () => 80, getRows: () => 24, requestRender() { } }), payload.excludeFromContext === true);
|
|
382
|
+
const component = new BashExecutionComponent(stringPayload(payload, "command") ?? block.title ?? "", tui ?? createTuiFacade({ getColumns: () => 80, getRows: () => 24, requestRender() { } }), payload.excludeFromContext === true);
|
|
376
383
|
if (block.text)
|
|
377
384
|
component.appendOutput(block.text);
|
|
378
385
|
if (block.status === "finalized")
|
|
@@ -396,9 +403,6 @@ function completeBashComponent(component, block) {
|
|
|
396
403
|
maxBytes: 50 * 1024,
|
|
397
404
|
} : undefined, stringPayload(payload, "fullOutputPath"));
|
|
398
405
|
}
|
|
399
|
-
function toolArguments(payload) {
|
|
400
|
-
return isRecord(payload.arguments) && "json" in payload.arguments ? payload.arguments.json : payload.arguments ?? {};
|
|
401
|
-
}
|
|
402
406
|
function transcriptText(block) {
|
|
403
407
|
if (block.kind === "retry")
|
|
404
408
|
return piTheme().fg("warning", `Retry: ${block.text}`);
|