@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
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { AGENT_ENGINE_CONTRACT_VERSION, assertAgentCommand, } from "../contracts/agent-engine/index.js";
|
|
2
|
+
const CAPABILITIES = {
|
|
3
|
+
contractVersion: AGENT_ENGINE_CONTRACT_VERSION,
|
|
4
|
+
commands: ["prompt", "steer", "follow-up", "abort", "retry", "compact", "bash", "replace-session"],
|
|
5
|
+
events: ["lifecycle", "content", "command-outcome", "snapshot-invalidated", "diagnostic"],
|
|
6
|
+
snapshots: { supported: true, maxBytes: 1024 * 1024 },
|
|
7
|
+
};
|
|
8
|
+
export function createPiAgentEngineBridge(adapter, cwd) {
|
|
9
|
+
return new PiAgentEngineBridge(adapter, cwd);
|
|
10
|
+
}
|
|
11
|
+
class PiAgentEngineBridge {
|
|
12
|
+
adapter;
|
|
13
|
+
cwd;
|
|
14
|
+
capabilities = CAPABILITIES;
|
|
15
|
+
#session;
|
|
16
|
+
constructor(adapter, cwd) {
|
|
17
|
+
this.adapter = adapter;
|
|
18
|
+
this.cwd = cwd;
|
|
19
|
+
}
|
|
20
|
+
async createSession(input) {
|
|
21
|
+
if (this.#session)
|
|
22
|
+
return this.#session;
|
|
23
|
+
if (input.cwd !== this.cwd)
|
|
24
|
+
throw new TypeError("composed Pi engine cannot change working directory");
|
|
25
|
+
await this.adapter.start();
|
|
26
|
+
this.#session = new PiAgentSessionBridge(this.adapter, input.sessionId);
|
|
27
|
+
return this.#session;
|
|
28
|
+
}
|
|
29
|
+
async dispose() { await this.adapter.dispose(); }
|
|
30
|
+
}
|
|
31
|
+
class PiAgentSessionBridge {
|
|
32
|
+
adapter;
|
|
33
|
+
sessionId;
|
|
34
|
+
capabilities = CAPABILITIES;
|
|
35
|
+
lifecycle = "starting";
|
|
36
|
+
#listeners = new Set();
|
|
37
|
+
#unsubscribe;
|
|
38
|
+
constructor(adapter, sessionId) {
|
|
39
|
+
this.adapter = adapter;
|
|
40
|
+
this.sessionId = sessionId;
|
|
41
|
+
this.#unsubscribe = adapter.onEvent(event => {
|
|
42
|
+
const converted = convertEvent(event);
|
|
43
|
+
if (!converted)
|
|
44
|
+
return;
|
|
45
|
+
if (converted.type === "lifecycle")
|
|
46
|
+
this.lifecycle = converted.lifecycle;
|
|
47
|
+
for (const listener of this.#listeners)
|
|
48
|
+
listener(converted);
|
|
49
|
+
});
|
|
50
|
+
this.lifecycle = toLifecycle(adapter.snapshot().view.lifecycle);
|
|
51
|
+
}
|
|
52
|
+
async execute(command) {
|
|
53
|
+
assertAgentCommand(command, this.capabilities);
|
|
54
|
+
if (command.sessionId !== this.sessionId)
|
|
55
|
+
return "rejected";
|
|
56
|
+
if (command.type === "bash") {
|
|
57
|
+
const result = await this.adapter.executeBashWorkflow(command.command, false);
|
|
58
|
+
return !result.cancelled && result.exitCode === 0 ? "completed" : result.cancelled ? "cancelled" : "failed";
|
|
59
|
+
}
|
|
60
|
+
const result = await this.adapter.execute(toOwnedCommand(command));
|
|
61
|
+
return result.outcome === "timed-out" ? "failed" : result.outcome;
|
|
62
|
+
}
|
|
63
|
+
subscribe(listener) { this.#listeners.add(listener); return () => this.#listeners.delete(listener); }
|
|
64
|
+
async snapshot() {
|
|
65
|
+
const snapshot = this.adapter.snapshot();
|
|
66
|
+
return {
|
|
67
|
+
contractVersion: AGENT_ENGINE_CONTRACT_VERSION,
|
|
68
|
+
snapshotId: snapshot.snapshotId,
|
|
69
|
+
sessionId: this.sessionId,
|
|
70
|
+
revision: snapshot.view.revision,
|
|
71
|
+
sequence: snapshot.sequence,
|
|
72
|
+
lifecycle: toLifecycle(snapshot.view.lifecycle),
|
|
73
|
+
content: snapshot.view.transcript.map(toMessage),
|
|
74
|
+
activeCommandIds: snapshot.view.activeCommandIds,
|
|
75
|
+
capabilities: this.capabilities,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async dispose() { this.#unsubscribe(); this.#listeners.clear(); await this.adapter.dispose(); this.lifecycle = "stopped"; }
|
|
79
|
+
}
|
|
80
|
+
function toOwnedCommand(command) {
|
|
81
|
+
const base = { correlationId: command.commandId, sessionId: command.sessionId };
|
|
82
|
+
if (command.type === "replace-session")
|
|
83
|
+
return command.source.kind === "new" ? { ...base, type: "new-session" } : { ...base, type: "resume-session", sessionPath: command.source.sessionPath };
|
|
84
|
+
if (command.type === "prompt" || command.type === "steer" || command.type === "follow-up")
|
|
85
|
+
return { ...base, type: command.type, text: command.text };
|
|
86
|
+
return { ...base, type: command.type };
|
|
87
|
+
}
|
|
88
|
+
function convertEvent(event) {
|
|
89
|
+
const base = { contractVersion: AGENT_ENGINE_CONTRACT_VERSION, sessionId: event.sessionId, sequence: event.sequence };
|
|
90
|
+
if (event.type === "session-lifecycle")
|
|
91
|
+
return { ...base, type: "lifecycle", lifecycle: toLifecycle(event.lifecycle), reason: event.reason };
|
|
92
|
+
if (event.type === "transcript-block")
|
|
93
|
+
return { ...base, type: "content", content: toMessage(event.block) };
|
|
94
|
+
if (event.type === "command-outcome")
|
|
95
|
+
return { ...base, type: "command-outcome", commandId: event.correlationId, outcome: event.outcome === "timed-out" ? "failed" : event.outcome, diagnostic: event.diagnostic };
|
|
96
|
+
if (event.type === "diagnostic")
|
|
97
|
+
return { ...base, type: "diagnostic", code: event.diagnostic.code, message: event.diagnostic.message, recoverable: event.diagnostic.recoverable };
|
|
98
|
+
if (event.type === "session-view")
|
|
99
|
+
return { ...base, type: "snapshot-invalidated", expectedRevision: event.view.revision };
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
function toLifecycle(lifecycle) {
|
|
103
|
+
return lifecycle === "suspended" ? "ready" : lifecycle;
|
|
104
|
+
}
|
|
105
|
+
function toMessage(block) {
|
|
106
|
+
const role = block.kind === "user" ? "user" : block.kind === "system" ? "system" : block.kind === "tool-call" || block.kind === "tool-result" ? "tool" : "assistant";
|
|
107
|
+
return { id: block.id, role, status: block.status === "live" ? "streaming" : "final", content: [{ kind: "text", text: block.text }] };
|
|
108
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { composeOwnedUi, composeOwnedUiApplication, type OwnedUiComposition, type OwnedUiCompositionOptions, } from "./owned-ui.js";
|
|
2
|
+
export { composeProcess, type ProcessComposition, type ProcessCompositionOptions, } from "./process.js";
|
|
3
|
+
export { createOwnedRouteHost } from "./settings-route-host.js";
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type SessionSelection } from "../foundation/lifecycle/index.js";
|
|
2
|
+
import { type PiEngineAdapter, type PiProjectTrustPreflightPrompt, type PiSessionForkPrompt } from "../integrations/pi/engine/index.js";
|
|
3
|
+
import { OwnedUiSettingsSession } from "../ui/settings/index.js";
|
|
4
|
+
import type { OwnedUiApplicationPort, PresentationTerminalPort } from "../contracts/presentation/index.js";
|
|
5
|
+
export interface OwnedUiCompositionOptions {
|
|
6
|
+
readonly cwd?: string;
|
|
7
|
+
readonly terminal?: PresentationTerminalPort;
|
|
8
|
+
readonly createPiAdapter?: () => Promise<PiEngineAdapter>;
|
|
9
|
+
/** Explicit file selection retained for SDK callers. Public CLI uses sessionSelection. */
|
|
10
|
+
readonly sessionPath?: string;
|
|
11
|
+
readonly sessionSelection?: SessionSelection;
|
|
12
|
+
readonly sessionForkPrompt?: PiSessionForkPrompt;
|
|
13
|
+
/**
|
|
14
|
+
* A1 profile whose settings this session reads and writes. Omitted keeps the
|
|
15
|
+
* session settings-free, which is what the pinned comparison paths use.
|
|
16
|
+
*/
|
|
17
|
+
readonly profileId?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Whether A1's product-specific surfaces are reachable. Comparison profiles
|
|
20
|
+
* use the same composition with those surfaces withheld.
|
|
21
|
+
*/
|
|
22
|
+
readonly ownedSurfaces?: "on" | "off";
|
|
23
|
+
readonly projectTrustPrompt?: PiProjectTrustPreflightPrompt;
|
|
24
|
+
/** Explicit local diagnostic destination; ignored by comparison/settings-free compositions. */
|
|
25
|
+
readonly suggestionDiagnosticsPath?: string;
|
|
26
|
+
/** Optional local metadata-only clipboard diagnostics; never enabled in comparison profiles. */
|
|
27
|
+
readonly clipboardDiagnosticsPath?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface OwnedUiComposition {
|
|
30
|
+
readonly application: OwnedUiApplicationPort;
|
|
31
|
+
/** Present when a profile was supplied, so the caller can resolve settings before start. */
|
|
32
|
+
readonly settings: OwnedUiSettingsSession | null;
|
|
33
|
+
}
|
|
34
|
+
export declare function composeOwnedUiApplication(options?: OwnedUiCompositionOptions): Promise<OwnedUiApplicationPort>;
|
|
35
|
+
export declare function composeOwnedUi(options?: OwnedUiCompositionOptions): Promise<OwnedUiComposition>;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { SuggestionDiagnosticCapture } from "../features/prompt-suggestions/index.js";
|
|
2
|
+
import { PRODUCT_IDENTITY } from "../product-identity.js";
|
|
3
|
+
import { PromptHistoryService, PromptImageSidecar, resolvePromptHistoryPath } from "../features/prompt-history/index.js";
|
|
4
|
+
import { resolvePromptHistoryDataDir } from "../features/launch/index.js";
|
|
5
|
+
import { resolveProductPaths } from "../foundation/lifecycle/index.js";
|
|
6
|
+
import { applyConfiguredPiTheme, getAvailablePiThemes, loadHistoryEditor } from "../integrations/pi/components/index.js";
|
|
7
|
+
import { createPiEngineAdapter, } from "../integrations/pi/engine/index.js";
|
|
8
|
+
import { ClipboardDiagnosticCapture, OwnedUiSessionShell } from "../integrations/pi/session-ui/index.js";
|
|
9
|
+
import { OwnedUiSettingsSession, OwnedUiSettingsStore } from "../ui/settings/index.js";
|
|
10
|
+
import { createPiTerminalBridge } from "../integrations/pi/tui-runtime/index.js";
|
|
11
|
+
import { createOwnedRouteHost } from "./settings-route-host.js";
|
|
12
|
+
export async function composeOwnedUiApplication(options = {}) {
|
|
13
|
+
return (await composeOwnedUi(options)).application;
|
|
14
|
+
}
|
|
15
|
+
export async function composeOwnedUi(options = {}) {
|
|
16
|
+
const cwd = options.cwd ?? process.cwd();
|
|
17
|
+
const adapter = options.createPiAdapter
|
|
18
|
+
? await options.createPiAdapter()
|
|
19
|
+
: await createPiEngineAdapter({
|
|
20
|
+
cwd,
|
|
21
|
+
availableThemes: () => getAvailablePiThemes().map(theme => theme.name),
|
|
22
|
+
settingsProductMode: options.ownedSurfaces === "off" ? "comparison" : "bare",
|
|
23
|
+
...(options.sessionPath === undefined ? {} : { sessionPath: options.sessionPath }),
|
|
24
|
+
...(options.sessionSelection === undefined ? {} : { sessionSelection: options.sessionSelection }),
|
|
25
|
+
...(options.sessionForkPrompt === undefined ? {} : { sessionForkPrompt: options.sessionForkPrompt }),
|
|
26
|
+
...(options.projectTrustPrompt === undefined ? {} : { projectTrustPrompt: options.projectTrustPrompt }),
|
|
27
|
+
});
|
|
28
|
+
const ownedSurfaces = options.ownedSurfaces !== "off";
|
|
29
|
+
const settings = options.profileId === undefined
|
|
30
|
+
? null
|
|
31
|
+
: new OwnedUiSettingsSession({
|
|
32
|
+
store: new OwnedUiSettingsStore({ configDir: resolveProductPaths().configDir, profileId: options.profileId }),
|
|
33
|
+
agentProvider: () => adapter.settingsPort(),
|
|
34
|
+
});
|
|
35
|
+
// Compatibility: bare A1 intentionally ships one visual target while its UI is being completed:
|
|
36
|
+
// dark, regardless of terminal detection or a previously stored Pi theme. The
|
|
37
|
+
// comparison profile keeps Pi's configured theme behavior and settings surface.
|
|
38
|
+
applyConfiguredPiTheme(ownedSurfaces ? "dark" : adapter.configuredTheme());
|
|
39
|
+
const routeHost = settings === null || !ownedSurfaces ? null : createOwnedRouteHost(settings);
|
|
40
|
+
const viewportSettings = settings === null || !ownedSurfaces ? null : {
|
|
41
|
+
snapshot: () => viewportSettingsSnapshot(settings),
|
|
42
|
+
onChange: listener => settings.onChange(() => listener(viewportSettingsSnapshot(settings))),
|
|
43
|
+
};
|
|
44
|
+
const diagnosticDestination = options.suggestionDiagnosticsPath ?? process.env[PRODUCT_IDENTITY.environment.suggestionDiagnostics];
|
|
45
|
+
const suggestionDiagnostics = settings !== null && ownedSurfaces && diagnosticDestination?.trim()
|
|
46
|
+
? new SuggestionDiagnosticCapture({ enabled: true, destination: diagnosticDestination }) : null;
|
|
47
|
+
const promptSuggestions = settings === null || !ownedSurfaces ? null : {
|
|
48
|
+
...(suggestionDiagnostics === null ? {} : { diagnostics: suggestionDiagnostics }),
|
|
49
|
+
generator: adapter,
|
|
50
|
+
enabled: () => settings.value("promptSuggestions") !== false,
|
|
51
|
+
onChange: (listener) => settings.onChange(() => listener(settings.value("promptSuggestions") !== false)),
|
|
52
|
+
};
|
|
53
|
+
const historyLimit = settings?.value("promptHistoryMaxItems");
|
|
54
|
+
const historyProfileLocation = settings === null || !ownedSurfaces || settings.value("promptHistoryEnabled") === false
|
|
55
|
+
? null
|
|
56
|
+
: resolvePromptHistoryPath(resolvePromptHistoryDataDir(), adapter.agentDir);
|
|
57
|
+
const promptHistory = historyProfileLocation === null ? null : {
|
|
58
|
+
limit: typeof historyLimit === "number" ? historyLimit : 100,
|
|
59
|
+
store: new PromptHistoryService({
|
|
60
|
+
dataDir: resolvePromptHistoryDataDir(),
|
|
61
|
+
profileRoot: adapter.agentDir,
|
|
62
|
+
limit: typeof historyLimit === "number" ? historyLimit : 100,
|
|
63
|
+
}),
|
|
64
|
+
imageSidecar: new PromptImageSidecar(historyProfileLocation.imagesDir),
|
|
65
|
+
};
|
|
66
|
+
const clipboardDestination = options.clipboardDiagnosticsPath ?? process.env[PRODUCT_IDENTITY.environment.clipboardDiagnostics];
|
|
67
|
+
const clipboardDiagnostics = settings !== null && ownedSurfaces && clipboardDestination?.trim()
|
|
68
|
+
? new ClipboardDiagnosticCapture(clipboardDestination) : null;
|
|
69
|
+
let shell;
|
|
70
|
+
try {
|
|
71
|
+
shell = new OwnedUiSessionShell({
|
|
72
|
+
backend: adapter,
|
|
73
|
+
cwd: adapter.cwd,
|
|
74
|
+
...(options.terminal === undefined ? {} : { terminal: createPiTerminalBridge(options.terminal) }),
|
|
75
|
+
...(routeHost === null ? {} : { routeHost }),
|
|
76
|
+
...(ownedSurfaces ? { sessionLayout: "custom-viewport" } : {}),
|
|
77
|
+
...(clipboardDiagnostics === null ? {} : {
|
|
78
|
+
responseCopy: { onEvent: event => clipboardDiagnostics.copy(event) },
|
|
79
|
+
pasteDiagnostics: event => clipboardDiagnostics.paste(event),
|
|
80
|
+
inputPresentation: { onEvent: event => clipboardDiagnostics.runtime(event) },
|
|
81
|
+
}),
|
|
82
|
+
...(viewportSettings === null ? {} : { viewportSettings }),
|
|
83
|
+
...(promptSuggestions === null ? {} : { promptSuggestions }),
|
|
84
|
+
...(promptHistory === null ? {} : { promptHistory: { ...promptHistory, editor: await loadHistoryEditor() } }),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
clipboardDiagnostics?.dispose();
|
|
89
|
+
suggestionDiagnostics?.dispose();
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
const application = {
|
|
93
|
+
get disposed() { return adapter.disposed; },
|
|
94
|
+
start: () => shell.start(),
|
|
95
|
+
flush: () => adapter.flushEvents(),
|
|
96
|
+
waitUntilStopped: () => shell.waitUntilStopped(),
|
|
97
|
+
dispose: async () => {
|
|
98
|
+
try {
|
|
99
|
+
await shell.dispose();
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
suggestionDiagnostics?.dispose();
|
|
103
|
+
clipboardDiagnostics?.dispose();
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
return { application, settings };
|
|
108
|
+
}
|
|
109
|
+
function viewportSettingsSnapshot(settings) {
|
|
110
|
+
const appearance = settings.value("scrollbarAppearance");
|
|
111
|
+
const style = settings.value("scrollbarStyle");
|
|
112
|
+
const speed = settings.value("scrollbarSpeed");
|
|
113
|
+
return {
|
|
114
|
+
scrollbarAppearance: appearance === "always" || appearance === "hidden" ? appearance : "auto",
|
|
115
|
+
scrollbarStyle: style === "thick" ? "thick" : "thin",
|
|
116
|
+
scrollbarSpeed: speed === "high" ? "high" : speed === "fast" ? "fast" : "normal",
|
|
117
|
+
};
|
|
118
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type AgentEnginePort } from "../contracts/agent-engine/index.js";
|
|
2
|
+
import { type PiEngineAdapter } from "../integrations/pi/engine/index.js";
|
|
3
|
+
import { type PresentationComponentPort, type PresentationRuntimePort, type PresentationTerminalPort } from "../contracts/presentation/index.js";
|
|
4
|
+
export interface ProcessCompositionOptions {
|
|
5
|
+
readonly cwd?: string;
|
|
6
|
+
readonly sessionId?: string;
|
|
7
|
+
readonly engine?: AgentEnginePort;
|
|
8
|
+
readonly presentationFactory?: (root: PresentationComponentPort, terminal: PresentationTerminalPort) => PresentationRuntimePort;
|
|
9
|
+
readonly createPiAdapter?: () => Promise<PiEngineAdapter>;
|
|
10
|
+
}
|
|
11
|
+
export interface ProcessComposition {
|
|
12
|
+
readonly engine: AgentEnginePort;
|
|
13
|
+
createPresentation(root: PresentationComponentPort, terminal: PresentationTerminalPort): PresentationRuntimePort;
|
|
14
|
+
dispose(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare function composeProcess(options?: ProcessCompositionOptions): Promise<ProcessComposition>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { assertAgentCapabilityContract, } from "../contracts/agent-engine/index.js";
|
|
2
|
+
import { createPiEngineAdapter } from "../integrations/pi/engine/index.js";
|
|
3
|
+
import { createPiPresentationRuntime } from "../integrations/pi/tui-runtime/index.js";
|
|
4
|
+
import { assertPresentationComponent, assertPresentationRuntime, } from "../contracts/presentation/index.js";
|
|
5
|
+
import { createPiAgentEngineBridge } from "./agent-engine-bridge.js";
|
|
6
|
+
export async function composeProcess(options = {}) {
|
|
7
|
+
let engine = options.engine;
|
|
8
|
+
if (!engine) {
|
|
9
|
+
const adapter = options.createPiAdapter
|
|
10
|
+
? await options.createPiAdapter()
|
|
11
|
+
: await createPiEngineAdapter({
|
|
12
|
+
...(options.cwd === undefined ? {} : { cwd: options.cwd }),
|
|
13
|
+
...(options.sessionId === undefined ? {} : { sessionId: options.sessionId }),
|
|
14
|
+
});
|
|
15
|
+
engine = createPiAgentEngineBridge(adapter, options.cwd ?? process.cwd());
|
|
16
|
+
}
|
|
17
|
+
assertAgentCapabilityContract(engine.capabilities);
|
|
18
|
+
if (typeof engine.createSession !== "function" || typeof engine.dispose !== "function")
|
|
19
|
+
throw new TypeError("composed engine does not satisfy the neutral engine port");
|
|
20
|
+
const presentations = new Set();
|
|
21
|
+
let disposed = false;
|
|
22
|
+
return {
|
|
23
|
+
engine,
|
|
24
|
+
createPresentation(root, terminal) {
|
|
25
|
+
if (disposed)
|
|
26
|
+
throw new Error("process composition is disposed");
|
|
27
|
+
assertPresentationComponent(root);
|
|
28
|
+
const runtime = options.presentationFactory?.(root, terminal) ?? createPiPresentationRuntime(root, terminal);
|
|
29
|
+
assertPresentationRuntime(runtime);
|
|
30
|
+
presentations.add(runtime);
|
|
31
|
+
return runtime;
|
|
32
|
+
},
|
|
33
|
+
async dispose() {
|
|
34
|
+
if (disposed)
|
|
35
|
+
return;
|
|
36
|
+
disposed = true;
|
|
37
|
+
const failures = [];
|
|
38
|
+
for (const runtime of [...presentations].reverse())
|
|
39
|
+
await runtime.stop().catch(error => failures.push(error));
|
|
40
|
+
await engine.dispose().catch(error => failures.push(error));
|
|
41
|
+
if (failures.length)
|
|
42
|
+
throw new AggregateError(failures, "process composition disposal failed");
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { OwnedUiSettingsSession } from "../ui/settings/index.js";
|
|
2
|
+
import { type UiRouteHost } from "../ui/apps/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Registers the A1-owned screens and adapts the app host to the shell's route
|
|
5
|
+
* seam. The shell mounts whatever surface it is handed and forwards keys; it
|
|
6
|
+
* never learns what an app is.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createOwnedRouteHost(settings: OwnedUiSettingsSession): UiRouteHost;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { SETTINGS_APP_ID, SETTINGS_ROUTE, SettingsApp } from "../features/owned-ui/index.js";
|
|
2
|
+
import { piTheme } from "../integrations/pi/components/index.js";
|
|
3
|
+
import { UiAppHost, UiAppRegistry, } from "../ui/apps/index.js";
|
|
4
|
+
import { faint } from "../ui/components/index.js";
|
|
5
|
+
/**
|
|
6
|
+
* Registers the A1-owned screens and adapts the app host to the shell's route
|
|
7
|
+
* seam. The shell mounts whatever surface it is handed and forwards keys; it
|
|
8
|
+
* never learns what an app is.
|
|
9
|
+
*/
|
|
10
|
+
export function createOwnedRouteHost(settings) {
|
|
11
|
+
const registry = new UiAppRegistry();
|
|
12
|
+
registry.register({ id: SETTINGS_APP_ID, route: SETTINGS_ROUTE, create: () => new SettingsApp(settings) });
|
|
13
|
+
return {
|
|
14
|
+
claims: route => registry.forRoute(route) !== null,
|
|
15
|
+
open: route => {
|
|
16
|
+
const registration = registry.forRoute(route);
|
|
17
|
+
if (registration === null)
|
|
18
|
+
return null;
|
|
19
|
+
let size = { width: 80, height: 24 };
|
|
20
|
+
let frame = [];
|
|
21
|
+
let closed = false;
|
|
22
|
+
let onRender = () => undefined;
|
|
23
|
+
let onExit = () => undefined;
|
|
24
|
+
const host = new UiAppHost({
|
|
25
|
+
registry,
|
|
26
|
+
closeOnInterrupt: true,
|
|
27
|
+
theme: pinnedTheme(),
|
|
28
|
+
surface: {
|
|
29
|
+
size: () => size,
|
|
30
|
+
requestRender: () => onRender(),
|
|
31
|
+
exit: () => onExit(),
|
|
32
|
+
present: lines => {
|
|
33
|
+
if (lines === null)
|
|
34
|
+
closed = true;
|
|
35
|
+
else
|
|
36
|
+
frame = lines;
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
host.open(registration.id);
|
|
41
|
+
const surface = {
|
|
42
|
+
id: registration.id,
|
|
43
|
+
render: (width, height) => {
|
|
44
|
+
size = { width, height };
|
|
45
|
+
host.render();
|
|
46
|
+
return frame.length === height ? frame : [...frame.slice(0, height), ...Array(Math.max(0, height - frame.length)).fill("")];
|
|
47
|
+
},
|
|
48
|
+
handleInput: data => host.handleInput(data).consumed,
|
|
49
|
+
handleMouse: event => host.handleMouse(event).consumed,
|
|
50
|
+
isClosed: () => closed || !host.isPresenting,
|
|
51
|
+
close: () => host.close(),
|
|
52
|
+
onRenderRequested: listener => { onRender = listener; },
|
|
53
|
+
onExitRequested: listener => { onExit = listener; },
|
|
54
|
+
};
|
|
55
|
+
return surface;
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** Maps A1 UI tokens onto the pinned Pi theme so owned screens match the shell. */
|
|
60
|
+
function pinnedTheme() {
|
|
61
|
+
return {
|
|
62
|
+
fg: (token, text) => piTheme().fg(token, text),
|
|
63
|
+
bold: (text) => piTheme().bold(text),
|
|
64
|
+
// Rationale: unpainted, so a list reads against the terminal the reader actually has
|
|
65
|
+
// rather than against the background the configured theme was built for.
|
|
66
|
+
plain: (text) => text,
|
|
67
|
+
// Rationale: quiet, and quieter again: the terminal's own faint attribute over the
|
|
68
|
+
// dimmest colour the theme has.
|
|
69
|
+
disabled: (text) => faint(piTheme().fg("dim", text)),
|
|
70
|
+
// Rationale: physical review requires the shared value menu to read as a floating
|
|
71
|
+
// product surface instead of blending into the settings rows behind it.
|
|
72
|
+
highlight: (text) => `\u001b[48;2;82;82;82m\u001b[97m${text}\u001b[39m\u001b[49m`,
|
|
73
|
+
panel: (text) => `\u001b[48;2;55;55;55m${text}\u001b[49m`,
|
|
74
|
+
};
|
|
75
|
+
}
|
package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentJsonValue, AgentModelDescriptor, AgentResourceDescriptor, AgentSettingDescriptor } from "./domain.js";
|
|
1
|
+
import type { AgentJsonValue, AgentModelDescriptor, AgentSettingChangeOutcome, AgentResourceDescriptor, AgentSettingDescriptor } from "./domain.js";
|
|
2
2
|
export interface AgentModelPort {
|
|
3
3
|
readonly capabilities: {
|
|
4
4
|
readonly selection: boolean;
|
|
@@ -26,7 +26,7 @@ export interface AgentSettingsPort {
|
|
|
26
26
|
};
|
|
27
27
|
listSettings(): Promise<readonly AgentSettingDescriptor[]>;
|
|
28
28
|
readSetting(key: string): Promise<AgentJsonValue | undefined>;
|
|
29
|
-
writeSetting?(key: string, value: AgentJsonValue): Promise<
|
|
29
|
+
writeSetting?(key: string, value: AgentJsonValue): Promise<AgentSettingChangeOutcome>;
|
|
30
30
|
flush?(): Promise<void>;
|
|
31
31
|
}
|
|
32
32
|
export interface AgentResourcesPort {
|
package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js
RENAMED
|
@@ -52,10 +52,28 @@ export function assertAgentUsage(value) { for (const amount of [value.inputToken
|
|
|
52
52
|
nonNegative(amount, "usage token count"); if (value.cost !== null && (!(typeof value.cost === "number") || !Number.isFinite(value.cost) || value.cost < 0))
|
|
53
53
|
throw new TypeError("usage cost is invalid"); }
|
|
54
54
|
export function assertAgentModelDescriptor(value) { id(value.providerId, "model provider id"); id(value.modelId, "model id"); text(value.displayName, "model display name"); nonNegative(value.contextWindow, "model context window"); unique(value.thinkingLevels, undefined, "model thinking levels"); }
|
|
55
|
-
export function assertAgentSettingDescriptor(value) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
export function assertAgentSettingDescriptor(value) {
|
|
56
|
+
id(value.key, "setting key");
|
|
57
|
+
if (!["boolean", "number", "string", "enum", "json"].includes(value.valueType)
|
|
58
|
+
|| typeof value.writable !== "boolean"
|
|
59
|
+
|| !["live", "next-session", "next-start", "current-exit"].includes(value.application)
|
|
60
|
+
|| !["agent", "shell", "terminal", "startup", "shutdown", "installation"].includes(value.owner)
|
|
61
|
+
|| typeof value.available !== "boolean"
|
|
62
|
+
|| !(value.limitationReason === null || typeof value.limitationReason === "string")) {
|
|
63
|
+
throw new TypeError("setting descriptor is invalid");
|
|
64
|
+
}
|
|
65
|
+
json(value.storedValue, "stored setting value");
|
|
66
|
+
json(value.effectiveValue, "effective setting value");
|
|
67
|
+
if ((value.available && value.limitationReason !== null)
|
|
68
|
+
|| (!value.available && (value.limitationReason === null || value.limitationReason.length === 0))) {
|
|
69
|
+
throw new TypeError("setting descriptor availability is contradictory");
|
|
70
|
+
}
|
|
71
|
+
if (value.writable && !value.available)
|
|
72
|
+
throw new TypeError("unavailable setting cannot be writable");
|
|
73
|
+
if (value.choices)
|
|
74
|
+
for (const choice of value.choices)
|
|
75
|
+
json(choice, "setting choice");
|
|
76
|
+
}
|
|
59
77
|
export function assertAgentResourceDescriptor(value) { id(value.id, "resource id"); if (!["command", "prompt", "skill", "extension", "other"].includes(value.kind))
|
|
60
78
|
throw new TypeError("resource kind is invalid"); text(value.label, "resource label"); json(value.metadata, "resource metadata"); }
|
|
61
79
|
export function assertAgentThemeDescriptor(value) { id(value.id, "theme id"); text(value.label, "theme label"); if (!value.tokens || typeof value.tokens !== "object" || Object.values(value.tokens).some(token => typeof token !== "string"))
|
|
@@ -48,10 +48,27 @@ export interface AgentModelDescriptor {
|
|
|
48
48
|
readonly contextWindow: number;
|
|
49
49
|
readonly thinkingLevels: readonly string[];
|
|
50
50
|
}
|
|
51
|
+
export type AgentSettingApplicationBoundary = "live" | "next-session" | "next-start" | "current-exit";
|
|
52
|
+
export type AgentSettingOwner = "agent" | "shell" | "terminal" | "startup" | "shutdown" | "installation";
|
|
53
|
+
export interface AgentSettingChangeOutcome {
|
|
54
|
+
readonly status: "applied" | "deferred" | "unavailable" | "failed";
|
|
55
|
+
readonly application: AgentSettingApplicationBoundary;
|
|
56
|
+
readonly storedValue: AgentJsonValue;
|
|
57
|
+
readonly effectiveValue: AgentJsonValue;
|
|
58
|
+
readonly failure: string | null;
|
|
59
|
+
readonly limitationReason: string | null;
|
|
60
|
+
}
|
|
51
61
|
export interface AgentSettingDescriptor {
|
|
52
62
|
readonly key: string;
|
|
53
63
|
readonly valueType: "boolean" | "number" | "string" | "enum" | "json";
|
|
64
|
+
/** A setting is writable only when its declared owner/effect is available. */
|
|
54
65
|
readonly writable: boolean;
|
|
66
|
+
readonly application: AgentSettingApplicationBoundary;
|
|
67
|
+
readonly owner: AgentSettingOwner;
|
|
68
|
+
readonly available: boolean;
|
|
69
|
+
readonly limitationReason: string | null;
|
|
70
|
+
readonly storedValue: AgentJsonValue;
|
|
71
|
+
readonly effectiveValue: AgentJsonValue;
|
|
55
72
|
readonly choices?: readonly AgentJsonValue[];
|
|
56
73
|
/** Label the engine shows for this setting, when it has one. */
|
|
57
74
|
readonly label?: string;
|
package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts
RENAMED
|
@@ -45,10 +45,16 @@ export interface AgentPackagesPort {
|
|
|
45
45
|
update(source?: string): Promise<AgentPackageOutcome>;
|
|
46
46
|
refreshModels(): Promise<AgentPackageOutcome>;
|
|
47
47
|
}
|
|
48
|
+
/** Recoverable operation diagnostics retain the engine's visible detail and order. */
|
|
49
|
+
export interface AgentPackageDiagnostic {
|
|
50
|
+
readonly message: string;
|
|
51
|
+
readonly detail?: string;
|
|
52
|
+
}
|
|
48
53
|
export interface AgentPackagesPortInput {
|
|
49
54
|
readonly profileRoot: string;
|
|
50
55
|
readonly cwd: string;
|
|
51
56
|
readonly onProgress?: (progress: AgentPackageProgress) => void;
|
|
57
|
+
readonly onDiagnostic?: (diagnostic: AgentPackageDiagnostic) => void;
|
|
52
58
|
}
|
|
53
59
|
export declare function assertAgentPackagesPort(port: AgentPackagesPort): void;
|
|
54
60
|
export declare function agentPackageOutcome(operation: AgentPackageOperation, status: AgentPackageStatus, detail?: string | null, source?: string | null, packages?: readonly AgentPackageDescriptor[]): AgentPackageOutcome;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { OwnedUiImageAttachment } from "./model.js";
|
|
2
|
+
export declare const MAX_PROMPT_IMAGES = 8;
|
|
3
|
+
/** Owned clipboard text is bounded before transfer, normalization, or editor insertion. */
|
|
4
|
+
export declare const MAX_CLIPBOARD_TEXT_BYTES: number;
|
|
5
|
+
/** Limit applies to canonical ASCII base64, not decoded image bytes. */
|
|
6
|
+
export declare const MAX_IMAGE_DATA_BYTES: number;
|
|
7
|
+
declare const MESSAGES: {
|
|
8
|
+
readonly "paste-timeout": "Clipboard paste timed out. The editor is still available.";
|
|
9
|
+
readonly "paste-unavailable": "Could not paste; the clipboard is unavailable.";
|
|
10
|
+
readonly "paste-size": "Pasted text exceeds the 16 MiB limit.";
|
|
11
|
+
readonly "paste-busy": "Clipboard preparation is full (8 pending pastes).";
|
|
12
|
+
readonly "paste-write-failed": "Paste skipped because the preceding copy failed.";
|
|
13
|
+
readonly "image-size": "Image exceeds the 8 MiB encoded base64 limit. Reduce the image size and paste it again.";
|
|
14
|
+
readonly "image-count": "A prompt supports at most 8 images. Remove an attachment before adding another.";
|
|
15
|
+
readonly "image-data": "Image data is invalid. Paste a valid image again.";
|
|
16
|
+
readonly "image-mime": "Image MIME type is invalid. Paste a supported image again.";
|
|
17
|
+
readonly "image-source-size": "Source image exceeds 20 MiB. Reduce the source size and paste it again.";
|
|
18
|
+
readonly "image-pixels": "Source image exceeds 40 million pixels or a 32768-pixel dimension. Reduce its dimensions and paste again.";
|
|
19
|
+
readonly "image-conversion": "This image cannot be safely resized. Paste a PNG or JPEG screenshot instead.";
|
|
20
|
+
readonly "image-codec": "Image preparation is unavailable. Check the installation and paste again.";
|
|
21
|
+
readonly "image-output": "Image cannot fit the output limits without excessive quality loss. Crop it and paste again.";
|
|
22
|
+
readonly "image-timeout": "Image preparation timed out. Remove the failed image and paste again.";
|
|
23
|
+
readonly "image-busy": "Image preparation is full (8 pending images). Wait or remove an image before pasting again.";
|
|
24
|
+
readonly "image-canceled": "Image preparation was canceled. Paste the image again.";
|
|
25
|
+
readonly "image-pending": "Image is still preparing. Wait before submitting.";
|
|
26
|
+
};
|
|
27
|
+
/** Trusted, payload-free diagnostics for user-correctable attachment failures. */
|
|
28
|
+
export declare class ImageAttachmentError extends TypeError {
|
|
29
|
+
readonly code: keyof typeof MESSAGES;
|
|
30
|
+
constructor(code: keyof typeof MESSAGES);
|
|
31
|
+
}
|
|
32
|
+
/** Checks encoded length before decoding or copying a clipboard payload. */
|
|
33
|
+
export declare function assertImageEncodedSize(data: string): void;
|
|
34
|
+
/** Final command admission also covers restored and deferred non-clipboard inputs. */
|
|
35
|
+
export declare function assertPromptImages(images: readonly OwnedUiImageAttachment[]): void;
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export const MAX_PROMPT_IMAGES = 8;
|
|
2
|
+
/** Owned clipboard text is bounded before transfer, normalization, or editor insertion. */
|
|
3
|
+
export const MAX_CLIPBOARD_TEXT_BYTES = 16 * 1024 * 1024;
|
|
4
|
+
/** Limit applies to canonical ASCII base64, not decoded image bytes. */
|
|
5
|
+
export const MAX_IMAGE_DATA_BYTES = 8 * 1024 * 1024;
|
|
6
|
+
const MESSAGES = {
|
|
7
|
+
"paste-timeout": "Clipboard paste timed out. The editor is still available.",
|
|
8
|
+
"paste-unavailable": "Could not paste; the clipboard is unavailable.",
|
|
9
|
+
"paste-size": "Pasted text exceeds the 16 MiB limit.",
|
|
10
|
+
"paste-busy": "Clipboard preparation is full (8 pending pastes).",
|
|
11
|
+
"paste-write-failed": "Paste skipped because the preceding copy failed.",
|
|
12
|
+
"image-size": "Image exceeds the 8 MiB encoded base64 limit. Reduce the image size and paste it again.",
|
|
13
|
+
"image-count": "A prompt supports at most 8 images. Remove an attachment before adding another.",
|
|
14
|
+
"image-data": "Image data is invalid. Paste a valid image again.",
|
|
15
|
+
"image-mime": "Image MIME type is invalid. Paste a supported image again.",
|
|
16
|
+
"image-source-size": "Source image exceeds 20 MiB. Reduce the source size and paste it again.",
|
|
17
|
+
"image-pixels": "Source image exceeds 40 million pixels or a 32768-pixel dimension. Reduce its dimensions and paste again.",
|
|
18
|
+
"image-conversion": "This image cannot be safely resized. Paste a PNG or JPEG screenshot instead.",
|
|
19
|
+
"image-codec": "Image preparation is unavailable. Check the installation and paste again.",
|
|
20
|
+
"image-output": "Image cannot fit the output limits without excessive quality loss. Crop it and paste again.",
|
|
21
|
+
"image-timeout": "Image preparation timed out. Remove the failed image and paste again.",
|
|
22
|
+
"image-busy": "Image preparation is full (8 pending images). Wait or remove an image before pasting again.",
|
|
23
|
+
"image-canceled": "Image preparation was canceled. Paste the image again.",
|
|
24
|
+
"image-pending": "Image is still preparing. Wait before submitting.",
|
|
25
|
+
};
|
|
26
|
+
/** Trusted, payload-free diagnostics for user-correctable attachment failures. */
|
|
27
|
+
export class ImageAttachmentError extends TypeError {
|
|
28
|
+
code;
|
|
29
|
+
constructor(code) {
|
|
30
|
+
super(MESSAGES[code]);
|
|
31
|
+
this.code = code;
|
|
32
|
+
this.name = "ImageAttachmentError";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Checks encoded length before decoding or copying a clipboard payload. */
|
|
36
|
+
export function assertImageEncodedSize(data) {
|
|
37
|
+
if (typeof data !== "string" || data.length === 0)
|
|
38
|
+
throw new ImageAttachmentError("image-data");
|
|
39
|
+
if (Math.ceil(data.length / 4) * 4 > MAX_IMAGE_DATA_BYTES)
|
|
40
|
+
throw new ImageAttachmentError("image-size");
|
|
41
|
+
}
|
|
42
|
+
const VALIDATED_IMAGES = new WeakSet();
|
|
43
|
+
const BASE64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
44
|
+
/** Final command admission also covers restored and deferred non-clipboard inputs. */
|
|
45
|
+
export function assertPromptImages(images) {
|
|
46
|
+
if (!Array.isArray(images) || images.length > MAX_PROMPT_IMAGES)
|
|
47
|
+
throw new ImageAttachmentError("image-count");
|
|
48
|
+
for (const image of images) {
|
|
49
|
+
if (!image || image.type !== "image")
|
|
50
|
+
throw new ImageAttachmentError("image-data");
|
|
51
|
+
if (VALIDATED_IMAGES.has(image))
|
|
52
|
+
continue;
|
|
53
|
+
assertImageEncodedSize(image.data);
|
|
54
|
+
if (!/^[A-Za-z0-9+/]+={0,2}$/.test(image.data) || image.data.length % 4 !== 0
|
|
55
|
+
|| (image.data.endsWith("==") && (BASE64_ALPHABET.indexOf(image.data.at(-3) ?? "") & 15) !== 0)
|
|
56
|
+
|| (image.data.endsWith("=") && !image.data.endsWith("==") && (BASE64_ALPHABET.indexOf(image.data.at(-2) ?? "") & 3) !== 0)) {
|
|
57
|
+
throw new ImageAttachmentError("image-data");
|
|
58
|
+
}
|
|
59
|
+
if (typeof image.mimeType !== "string" || image.mimeType.length > 256 || !/^image\/[a-z0-9.+-]+$/i.test(image.mimeType)) {
|
|
60
|
+
throw new ImageAttachmentError("image-mime");
|
|
61
|
+
}
|
|
62
|
+
// Security: cache only immutable own data properties, never frozen objects with changing getters.
|
|
63
|
+
if (Object.isFrozen(image) && ["type", "data", "mimeType"].every(key => Object.getOwnPropertyDescriptor(image, key)?.value === image[key])) {
|
|
64
|
+
VALIDATED_IMAGES.add(image);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./extension-ui.js";
|
|
2
|
+
export * from "./model.js";
|
|
3
|
+
export * from "./transcript-lifecycle.js";
|
|
4
|
+
export * from "./image-attachments.js";
|
|
5
|
+
export * from "./prompt-suggestions.js";
|
|
6
|
+
export * from "./suggestion-diagnostics.js";
|
|
7
|
+
export * from "./prompt-history.js";
|
|
8
|
+
export * from "./validation.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./extension-ui.js";
|
|
2
|
+
export * from "./model.js";
|
|
3
|
+
export * from "./transcript-lifecycle.js";
|
|
4
|
+
export * from "./image-attachments.js";
|
|
5
|
+
export * from "./prompt-suggestions.js";
|
|
6
|
+
export * from "./suggestion-diagnostics.js";
|
|
7
|
+
export * from "./prompt-history.js";
|
|
8
|
+
export * from "./validation.js";
|