@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,43 @@
|
|
|
1
|
+
import type { SettingsManager } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { AgentJsonValue, AgentSettingChangeOutcome, AgentSettingDescriptor, AgentSettingOwner, AgentSettingsPort } from "../../../contracts/agent-engine/index.js";
|
|
3
|
+
import { type PiSettingOwnerHandlers } from "./settings-effects.js";
|
|
4
|
+
/** Values only the running engine knows. */
|
|
5
|
+
export interface PiSettingsProviders {
|
|
6
|
+
readonly themes?: () => readonly string[];
|
|
7
|
+
readonly thinkingLevels?: () => readonly string[];
|
|
8
|
+
readonly productMode?: "bare" | "comparison";
|
|
9
|
+
}
|
|
10
|
+
export declare const AUTOMATIC_THEME = "automatic";
|
|
11
|
+
interface AutomaticTheme {
|
|
12
|
+
readonly light: string;
|
|
13
|
+
readonly dark: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function parseAutomaticTheme(stored: string): AutomaticTheme | null;
|
|
16
|
+
export declare const EXPOSED_SETTING_KEYS: readonly string[];
|
|
17
|
+
export declare function settingsInventoryDrift(presented: readonly string[], mapped: readonly string[]): {
|
|
18
|
+
readonly unmapped: readonly string[];
|
|
19
|
+
readonly stale: readonly string[];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Pi settings boundary backed by the transactional settings coordinator. The
|
|
23
|
+
* generated metadata owns presentation while the reviewed effect registry owns
|
|
24
|
+
* timing, availability, and active behavior.
|
|
25
|
+
*/
|
|
26
|
+
export declare class PiSettingsIntegration implements AgentSettingsPort {
|
|
27
|
+
#private;
|
|
28
|
+
private readonly settings;
|
|
29
|
+
readonly capabilities: {
|
|
30
|
+
write: boolean;
|
|
31
|
+
flush: boolean;
|
|
32
|
+
};
|
|
33
|
+
constructor(settings: SettingsManager, providers?: PiSettingsProviders);
|
|
34
|
+
bindOwner(owner: AgentSettingOwner, handlers: PiSettingOwnerHandlers): () => void;
|
|
35
|
+
unbindOwner(owner: AgentSettingOwner): void;
|
|
36
|
+
listSettings(): Promise<readonly AgentSettingDescriptor[]>;
|
|
37
|
+
readSetting(key: string): Promise<AgentJsonValue | undefined>;
|
|
38
|
+
writeSetting(key: string, value: AgentJsonValue): Promise<AgentSettingChangeOutcome>;
|
|
39
|
+
/** Shared route used by the pinned selector and owned settings surface. */
|
|
40
|
+
writeSettingNow(key: string, value: AgentJsonValue): Promise<AgentSettingChangeOutcome>;
|
|
41
|
+
flush(): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js
RENAMED
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
import piSettingsMetadata from "./pi-settings-metadata.json" with { type: "json" };
|
|
2
|
-
|
|
3
|
-
* The engine stores a theme as one string with two forms: a theme's name, or a
|
|
4
|
-
* `light/dark` pair meaning "follow the terminal". That grammar is the engine's,
|
|
5
|
-
* so it is parsed and composed here and reaches the surfaces above as ordinary
|
|
6
|
-
* settings — a theme entry that offers `automatic`, and, while automatic, one
|
|
7
|
-
* entry per terminal appearance.
|
|
8
|
-
*/
|
|
2
|
+
import { PI_SETTING_EFFECTS, PiSettingsCoordinator, settingsEffectInventoryDrift, } from "./settings-effects.js";
|
|
9
3
|
export const AUTOMATIC_THEME = "automatic";
|
|
10
|
-
/** The themes an automatic setting names for each terminal appearance. */
|
|
11
4
|
const LIGHT_APPEARANCE_THEME = "light";
|
|
12
5
|
const DARK_APPEARANCE_THEME = "dark";
|
|
13
6
|
const THEME_KEY = "theme";
|
|
14
7
|
const THINKING_KEY = "thinkingLevel";
|
|
15
|
-
/** A stored theme is automatic when it names one theme per terminal appearance. */
|
|
16
8
|
export function parseAutomaticTheme(stored) {
|
|
17
9
|
const at = stored.indexOf("/");
|
|
18
10
|
if (at < 0 || stored.indexOf("/", at + 1) >= 0)
|
|
@@ -21,24 +13,8 @@ export function parseAutomaticTheme(stored) {
|
|
|
21
13
|
const dark = stored.slice(at + 1).trim();
|
|
22
14
|
return light.length > 0 && dark.length > 0 ? { light, dark } : null;
|
|
23
15
|
}
|
|
24
|
-
/**
|
|
25
|
-
* How the engine presents these settings — wording, order, and the flags a
|
|
26
|
-
* dialog-backed setting offers — generated from its own source by
|
|
27
|
-
* `npm run update:pi-settings-metadata` and verified by a governance test, so a
|
|
28
|
-
* Pi upgrade cannot silently reword or reorder what A1 shows.
|
|
29
|
-
*/
|
|
30
16
|
const PRESENTATION = piSettingsMetadata;
|
|
31
|
-
/**
|
|
32
|
-
* The settings A1 exposes: the ones the engine presents. Kept as the engine's
|
|
33
|
-
* own inventory rather than a list beside it, so a setting it adds or renames
|
|
34
|
-
* shows up as a named test failure instead of quietly going missing.
|
|
35
|
-
*/
|
|
36
17
|
export const EXPOSED_SETTING_KEYS = PRESENTATION.presented;
|
|
37
|
-
/**
|
|
38
|
-
* What has drifted between the settings the engine presents and the settings A1
|
|
39
|
-
* maps to its API: the ones A1 has not caught up with, and the ones it kept
|
|
40
|
-
* after the engine dropped them. Either is a build failure with a name in it.
|
|
41
|
-
*/
|
|
42
18
|
export function settingsInventoryDrift(presented, mapped) {
|
|
43
19
|
const has = new Set(mapped);
|
|
44
20
|
const engine = new Set(presented);
|
|
@@ -47,62 +23,87 @@ export function settingsInventoryDrift(presented, mapped) {
|
|
|
47
23
|
stale: mapped.filter(key => !engine.has(key)),
|
|
48
24
|
};
|
|
49
25
|
}
|
|
50
|
-
/** What the engine offers for a setting, as the strings it words them with. */
|
|
51
26
|
function offered(key) {
|
|
52
27
|
return PRESENTATION.settings[key]?.values ?? [];
|
|
53
28
|
}
|
|
54
|
-
/**
|
|
55
|
-
* The same, read as the numbers a numeric setting stores. Only for a setting
|
|
56
|
-
* whose list is its whole domain: where the engine offers a few numbers but
|
|
57
|
-
* accepts any within a range, the range governs and the list is only shortcuts.
|
|
58
|
-
*/
|
|
59
29
|
function offeredNumbers(key) {
|
|
60
30
|
return offered(key).map(value => Number.parseInt(value, 10)).filter(value => Number.isSafeInteger(value));
|
|
61
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Pi settings boundary backed by the transactional settings coordinator. The
|
|
34
|
+
* generated metadata owns presentation while the reviewed effect registry owns
|
|
35
|
+
* timing, availability, and active behavior.
|
|
36
|
+
*/
|
|
62
37
|
export class PiSettingsIntegration {
|
|
63
38
|
settings;
|
|
64
39
|
capabilities = { write: true, flush: true };
|
|
65
40
|
#operations;
|
|
66
41
|
#providers;
|
|
42
|
+
#coordinator;
|
|
67
43
|
constructor(settings, providers = {}) {
|
|
68
44
|
this.settings = settings;
|
|
69
45
|
this.#providers = providers;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
46
|
+
const mapped = operations(settings, providers);
|
|
47
|
+
this.#operations = new Map(mapped.map(operation => [operation.key, operation]));
|
|
48
|
+
const presentationDrift = settingsInventoryDrift(EXPOSED_SETTING_KEYS, mapped.map(operation => operation.key));
|
|
49
|
+
const effectDrift = settingsEffectInventoryDrift(EXPOSED_SETTING_KEYS);
|
|
50
|
+
if (presentationDrift.unmapped.length > 0 || presentationDrift.stale.length > 0
|
|
51
|
+
|| effectDrift.unmapped.length > 0 || effectDrift.stale.length > 0 || effectDrift.duplicated.length > 0) {
|
|
52
|
+
throw new Error([
|
|
53
|
+
`unmapped operations: ${presentationDrift.unmapped.join(", ")}`,
|
|
54
|
+
`stale operations: ${presentationDrift.stale.join(", ")}`,
|
|
55
|
+
`unmapped effects: ${effectDrift.unmapped.join(", ")}`,
|
|
56
|
+
`stale effects: ${effectDrift.stale.join(", ")}`,
|
|
57
|
+
`duplicated effects: ${effectDrift.duplicated.join(", ")}`,
|
|
58
|
+
].join("; "));
|
|
73
59
|
}
|
|
60
|
+
this.#coordinator = new PiSettingsCoordinator(mapped, {
|
|
61
|
+
productMode: providers.productMode ?? "bare",
|
|
62
|
+
flush: () => settings.flush(),
|
|
63
|
+
drainErrors: () => settings.drainErrors(),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
bindOwner(owner, handlers) {
|
|
67
|
+
return this.#coordinator.bindOwner(owner, handlers);
|
|
68
|
+
}
|
|
69
|
+
unbindOwner(owner) {
|
|
70
|
+
this.#coordinator.unbindOwner(owner);
|
|
74
71
|
}
|
|
75
72
|
async listSettings() {
|
|
76
73
|
const rank = (key) => {
|
|
77
74
|
const at = PRESENTATION.order.indexOf(key);
|
|
78
75
|
return at < 0 ? PRESENTATION.order.length : at;
|
|
79
76
|
};
|
|
80
|
-
|
|
77
|
+
return [...this.#operations.values()]
|
|
78
|
+
.filter(operation => this.#coordinator.available(operation.key))
|
|
81
79
|
.map(operation => {
|
|
82
|
-
const key = operation.
|
|
80
|
+
const key = operation.key;
|
|
83
81
|
const wording = PRESENTATION.settings[key];
|
|
84
82
|
const flags = PRESENTATION.dialogs[key];
|
|
85
83
|
const bounds = PRESENTATION.bounds[key];
|
|
86
|
-
|
|
84
|
+
const descriptor = {
|
|
87
85
|
...operation.descriptor,
|
|
86
|
+
application: PI_SETTING_EFFECTS[key].application,
|
|
87
|
+
owner: PI_SETTING_EFFECTS[key].owner,
|
|
88
|
+
available: true,
|
|
89
|
+
limitationReason: null,
|
|
90
|
+
writable: true,
|
|
91
|
+
storedValue: this.#coordinator.storedValue(key),
|
|
92
|
+
effectiveValue: this.#coordinator.effectiveValue(key),
|
|
88
93
|
...(bounds === undefined ? {} : bounds),
|
|
89
94
|
...(wording === undefined ? {} : { label: wording.label, description: wording.description }),
|
|
90
95
|
...(flags === undefined ? {} : { flags }),
|
|
91
96
|
};
|
|
97
|
+
return this.#resolved(descriptor);
|
|
92
98
|
})
|
|
93
|
-
.map(descriptor => this.#resolved(descriptor))
|
|
94
99
|
.sort((left, right) => rank(left.key) - rank(right.key));
|
|
95
|
-
// Following the terminal is one choice on the theme itself, not two further
|
|
96
|
-
// settings: the pair behind it is the engine's grammar, not a reader's task.
|
|
97
|
-
return listed;
|
|
98
100
|
}
|
|
99
|
-
/** Overlays the values a setting can only offer once something is running. */
|
|
100
101
|
#resolved(descriptor) {
|
|
101
102
|
if (descriptor.key === THEME_KEY) {
|
|
102
103
|
const themes = this.#themes();
|
|
103
104
|
if (themes.length === 0)
|
|
104
105
|
return descriptor;
|
|
105
|
-
return { ...descriptor, valueType: "enum",
|
|
106
|
+
return { ...descriptor, valueType: "enum", resolvedWhenRead: true, choices: [AUTOMATIC_THEME, ...themes] };
|
|
106
107
|
}
|
|
107
108
|
if (descriptor.key === THINKING_KEY) {
|
|
108
109
|
const levels = this.#providers.thinkingLevels?.() ?? [];
|
|
@@ -115,53 +116,24 @@ export class PiSettingsIntegration {
|
|
|
115
116
|
#themes() {
|
|
116
117
|
return this.#providers.themes?.() ?? [];
|
|
117
118
|
}
|
|
118
|
-
#storedTheme() {
|
|
119
|
-
const stored = this.#operations.get(THEME_KEY)?.read();
|
|
120
|
-
return typeof stored === "string" ? stored : "";
|
|
121
|
-
}
|
|
122
119
|
async readSetting(key) {
|
|
123
|
-
|
|
124
|
-
const pair = parseAutomaticTheme(this.#storedTheme());
|
|
125
|
-
return pair === null ? this.#operations.get(key)?.read() : AUTOMATIC_THEME;
|
|
126
|
-
}
|
|
127
|
-
return this.#operations.get(key)?.read();
|
|
120
|
+
return isPiSettingKey(key) && this.#operations.has(key) ? this.#coordinator.storedValue(key) : undefined;
|
|
128
121
|
}
|
|
129
|
-
async writeSetting(key, value) {
|
|
130
|
-
|
|
131
|
-
if (typeof value === "string" && key === THEME_KEY) {
|
|
132
|
-
this.#writeTheme(value);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
const operation = this.#operations.get(key);
|
|
136
|
-
if (!operation)
|
|
122
|
+
async writeSetting(key, value) {
|
|
123
|
+
if (!isPiSettingKey(key) || !this.#operations.has(key))
|
|
137
124
|
throw new Error(`setting is unavailable: ${key}`);
|
|
138
|
-
|
|
125
|
+
return await this.#coordinator.apply(key, value);
|
|
139
126
|
}
|
|
140
|
-
/**
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
#writeTheme(value) {
|
|
147
|
-
const theme = this.#operations.get(THEME_KEY);
|
|
148
|
-
if (!theme)
|
|
149
|
-
throw new Error(`setting is unavailable: ${THEME_KEY}`);
|
|
150
|
-
if (value !== AUTOMATIC_THEME) {
|
|
151
|
-
theme.write(value);
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (parseAutomaticTheme(this.#storedTheme()) !== null)
|
|
155
|
-
return;
|
|
156
|
-
const installed = this.#themes();
|
|
157
|
-
const current = this.#storedTheme();
|
|
158
|
-
const light = installed.includes(LIGHT_APPEARANCE_THEME) ? LIGHT_APPEARANCE_THEME : current;
|
|
159
|
-
const dark = installed.includes(DARK_APPEARANCE_THEME) ? DARK_APPEARANCE_THEME : current;
|
|
160
|
-
theme.write(`${light}/${dark}`);
|
|
127
|
+
/** Shared route used by the pinned selector and owned settings surface. */
|
|
128
|
+
async writeSettingNow(key, value) {
|
|
129
|
+
return await this.writeSetting(key, value);
|
|
130
|
+
}
|
|
131
|
+
async flush() {
|
|
132
|
+
await this.#coordinator.flush();
|
|
161
133
|
}
|
|
162
|
-
async flush() { await this.settings.flush(); }
|
|
163
134
|
}
|
|
164
|
-
function operations(settings) {
|
|
135
|
+
function operations(settings, providers) {
|
|
136
|
+
const themes = () => providers.themes?.() ?? [];
|
|
165
137
|
return [
|
|
166
138
|
bool("autoCompact", () => settings.getCompactionEnabled(), value => settings.setCompactionEnabled(value)),
|
|
167
139
|
bool("showImages", () => settings.getShowImages(), value => settings.setShowImages(value)),
|
|
@@ -173,12 +145,8 @@ function operations(settings) {
|
|
|
173
145
|
choice("followUpMode", offered("followUpMode"), () => settings.getFollowUpMode(), value => settings.setFollowUpMode(value)),
|
|
174
146
|
choice("transport", offered("transport"), () => settings.getTransport(), value => settings.setTransport(value)),
|
|
175
147
|
numberSetting("httpIdleTimeoutMs", () => settings.getHttpIdleTimeoutMs(), value => settings.setHttpIdleTimeoutMs(value), 0),
|
|
176
|
-
// The engine reads these from the running session rather than declaring them,
|
|
177
|
-
// so they arrive through the runtime provider rather than from its source.
|
|
178
148
|
choice("thinkingLevel", ["off", "minimal", "low", "medium", "high", "xhigh"], () => settings.getDefaultThinkingLevel() ?? "medium", value => settings.setDefaultThinkingLevel(value)),
|
|
179
|
-
|
|
180
|
-
// pair behind getTheme, and the pair is the thing A1 presents parts of.
|
|
181
|
-
stringSetting("theme", () => settings.getThemeSetting() ?? "default", value => settings.setTheme(value)),
|
|
149
|
+
themeSetting(settings, themes),
|
|
182
150
|
bool("hideThinkingBlock", () => settings.getHideThinkingBlock(), value => settings.setHideThinkingBlock(value)),
|
|
183
151
|
choice("mermaidRenderingMode", offered("mermaidRenderingMode"), () => settings.getMermaidRenderingMode(), value => settings.setMermaidRenderingMode(value)),
|
|
184
152
|
bool("showCacheMissNotices", () => settings.getShowCacheMissNotices(), value => settings.setShowCacheMissNotices(value)),
|
|
@@ -201,33 +169,59 @@ function operations(settings) {
|
|
|
201
169
|
];
|
|
202
170
|
}
|
|
203
171
|
function bool(key, read, write) {
|
|
204
|
-
return
|
|
205
|
-
|
|
172
|
+
return operation(key, "boolean", read, value => { if (typeof value !== "boolean")
|
|
173
|
+
invalid(key); }, value => write(value));
|
|
206
174
|
}
|
|
207
175
|
function numberSetting(key, read, write, minimum) {
|
|
208
176
|
const declared = PRESENTATION.bounds[key];
|
|
209
177
|
const low = declared?.minimum ?? minimum;
|
|
210
178
|
const high = declared?.maximum;
|
|
179
|
+
return operation(key, "number", read, value => {
|
|
180
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < low || (high !== undefined && value > high))
|
|
181
|
+
invalid(key);
|
|
182
|
+
}, value => write(value));
|
|
183
|
+
}
|
|
184
|
+
function jsonObject(key, read, write) {
|
|
185
|
+
const boundedRead = () => Object.fromEntries(Object.entries(read()).filter((entry) => typeof entry[1] === "boolean"));
|
|
186
|
+
return operation(key, "json", boundedRead, value => {
|
|
187
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
188
|
+
invalid(key);
|
|
189
|
+
}, write);
|
|
190
|
+
}
|
|
191
|
+
function choice(key, choices, read, write) {
|
|
211
192
|
return {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < low || (high !== undefined && value > high))
|
|
216
|
-
invalid(key);
|
|
217
|
-
write(value);
|
|
218
|
-
},
|
|
193
|
+
...operation(key, "enum", read, value => { if (!choices.includes(value))
|
|
194
|
+
invalid(key); }, write),
|
|
195
|
+
descriptor: { key, valueType: "enum", choices },
|
|
219
196
|
};
|
|
220
197
|
}
|
|
221
|
-
function
|
|
222
|
-
|
|
223
|
-
|
|
198
|
+
function themeSetting(settings, themes) {
|
|
199
|
+
const raw = () => settings.getThemeSetting() ?? "default";
|
|
200
|
+
const read = () => parseAutomaticTheme(raw()) === null ? raw() : AUTOMATIC_THEME;
|
|
201
|
+
return operation(THEME_KEY, "string", read, value => {
|
|
202
|
+
if (typeof value !== "string" || value.length === 0)
|
|
203
|
+
invalid(THEME_KEY);
|
|
204
|
+
}, value => {
|
|
205
|
+
const selected = value;
|
|
206
|
+
if (selected !== AUTOMATIC_THEME) {
|
|
207
|
+
settings.setTheme(selected);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (parseAutomaticTheme(raw()) !== null)
|
|
211
|
+
return;
|
|
212
|
+
const installed = themes();
|
|
213
|
+
const current = raw();
|
|
214
|
+
const light = installed.includes(LIGHT_APPEARANCE_THEME) ? LIGHT_APPEARANCE_THEME : current;
|
|
215
|
+
const dark = installed.includes(DARK_APPEARANCE_THEME) ? DARK_APPEARANCE_THEME : current;
|
|
216
|
+
settings.setTheme(`${light}/${dark}`);
|
|
217
|
+
});
|
|
224
218
|
}
|
|
225
|
-
function
|
|
226
|
-
return { descriptor: { key, valueType
|
|
227
|
-
invalid(key); write(value); } };
|
|
219
|
+
function operation(key, valueType, read, validate, write) {
|
|
220
|
+
return { key, descriptor: { key, valueType }, read, validate, write };
|
|
228
221
|
}
|
|
229
|
-
function
|
|
230
|
-
return
|
|
231
|
-
|
|
222
|
+
function isPiSettingKey(key) {
|
|
223
|
+
return Object.hasOwn(PI_SETTING_EFFECTS, key);
|
|
224
|
+
}
|
|
225
|
+
function invalid(key) {
|
|
226
|
+
throw new TypeError(`setting value is invalid: ${key}`);
|
|
232
227
|
}
|
|
233
|
-
function invalid(key) { throw new TypeError(`setting value is invalid: ${key}`); }
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { OwnedUiToolRendering, OwnedUiTranscriptImageReference } from "../../../contracts/owned-ui/index.js";
|
|
2
|
+
/** Text lives once on the block; content parts refer to UTF-16 slices or opaque image references. */
|
|
3
|
+
export declare function toolRenderingInput(options: {
|
|
4
|
+
readonly args: unknown;
|
|
5
|
+
readonly previousArgs?: OwnedUiToolRendering | undefined;
|
|
6
|
+
readonly result?: unknown;
|
|
7
|
+
readonly payload: Record<string, unknown>;
|
|
8
|
+
readonly image: (value: unknown) => OwnedUiTranscriptImageReference | undefined;
|
|
9
|
+
}): {
|
|
10
|
+
text: string;
|
|
11
|
+
toolRendering: OwnedUiToolRendering;
|
|
12
|
+
imageReferences: readonly OwnedUiTranscriptImageReference[];
|
|
13
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
const MAX_METADATA_BYTES = 64 * 1024;
|
|
2
|
+
const MAX_TEXT_BYTES = 256 * 1024;
|
|
3
|
+
/** Copy JSON metadata without diagnostic depth/array truncation or traversing result text/images. */
|
|
4
|
+
function renderingJson(value) {
|
|
5
|
+
let remaining = MAX_METADATA_BYTES;
|
|
6
|
+
const encoded = JSON.stringify(value, function (key, item) {
|
|
7
|
+
if (key && !Array.isArray(this))
|
|
8
|
+
remaining -= jsonStringBytes(key) + 1;
|
|
9
|
+
if (typeof item === "string")
|
|
10
|
+
remaining -= jsonStringBytes(item);
|
|
11
|
+
else if (item === null || typeof item === "boolean" || typeof item === "number" && Number.isFinite(item)) {
|
|
12
|
+
remaining -= String(item).length;
|
|
13
|
+
}
|
|
14
|
+
else if (typeof item === "object")
|
|
15
|
+
remaining -= 2;
|
|
16
|
+
else if (item === undefined)
|
|
17
|
+
return item;
|
|
18
|
+
else
|
|
19
|
+
throw new TypeError("unsupported JSON metadata");
|
|
20
|
+
if (--remaining < 0)
|
|
21
|
+
throw new RangeError("metadata exceeds the supported payload limit");
|
|
22
|
+
return item;
|
|
23
|
+
});
|
|
24
|
+
if (encoded === undefined)
|
|
25
|
+
throw new TypeError("unsupported JSON metadata");
|
|
26
|
+
if (Buffer.byteLength(encoded) > MAX_METADATA_BYTES)
|
|
27
|
+
throw new RangeError("metadata exceeds the supported payload limit");
|
|
28
|
+
return JSON.parse(encoded);
|
|
29
|
+
}
|
|
30
|
+
function jsonStringBytes(value) {
|
|
31
|
+
// Performance: reject very large strings before allocating their escaped representation.
|
|
32
|
+
if (value.length > MAX_METADATA_BYTES)
|
|
33
|
+
throw new RangeError("metadata exceeds the supported payload limit");
|
|
34
|
+
return Buffer.byteLength(JSON.stringify(value));
|
|
35
|
+
}
|
|
36
|
+
/** Text lives once on the block; content parts refer to UTF-16 slices or opaque image references. */
|
|
37
|
+
export function toolRenderingInput(options) {
|
|
38
|
+
const warnings = new Set();
|
|
39
|
+
let args = {};
|
|
40
|
+
try {
|
|
41
|
+
args = options.args === undefined && options.previousArgs !== undefined
|
|
42
|
+
? options.previousArgs.arguments : renderingJson(options.args ?? {});
|
|
43
|
+
if (options.args === undefined && options.previousArgs?.unavailable?.includes("Tool arguments unavailable")) {
|
|
44
|
+
warnings.add("Tool arguments unavailable: unsupported or oversized rendering data.");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
warnings.add("Tool arguments unavailable: unsupported or oversized rendering data.");
|
|
49
|
+
}
|
|
50
|
+
const imageReferences = [];
|
|
51
|
+
const content = [];
|
|
52
|
+
let contentBytes = 2;
|
|
53
|
+
let excessBoundaries = false;
|
|
54
|
+
const addPart = (part) => {
|
|
55
|
+
if (excessBoundaries)
|
|
56
|
+
return;
|
|
57
|
+
// Performance: these ASCII-only offsets/indexes are budgeted before retaining or encoding an oversized boundary array.
|
|
58
|
+
contentBytes += JSON.stringify(part).length + (content.length > 0 ? 1 : 0);
|
|
59
|
+
if (contentBytes > MAX_METADATA_BYTES)
|
|
60
|
+
excessBoundaries = true;
|
|
61
|
+
else
|
|
62
|
+
content.push(part);
|
|
63
|
+
};
|
|
64
|
+
const texts = [];
|
|
65
|
+
let length = 0;
|
|
66
|
+
let textBytes = 0;
|
|
67
|
+
const source = isRecord(options.result) ? options.result : undefined;
|
|
68
|
+
const rawContent = source === undefined ? options.result : source.content;
|
|
69
|
+
const parts = typeof rawContent === "string" ? [{ type: "text", text: rawContent }] : rawContent;
|
|
70
|
+
if (Array.isArray(parts)) {
|
|
71
|
+
for (const part of parts) {
|
|
72
|
+
if (isRecord(part) && part.type === "text" && typeof part.text === "string") {
|
|
73
|
+
const separatorBytes = texts.length > 0 ? 1 : 0;
|
|
74
|
+
// Performance: length rejects huge strings before the bounded UTF-8 count; never serialize accumulated text.
|
|
75
|
+
const partBytes = part.text.length + textBytes + separatorBytes > MAX_TEXT_BYTES
|
|
76
|
+
? MAX_TEXT_BYTES + 1 : Buffer.byteLength(part.text);
|
|
77
|
+
if (partBytes + textBytes + separatorBytes > MAX_TEXT_BYTES) {
|
|
78
|
+
warnings.add("Tool text unavailable: result exceeds the supported 256 KiB text limit.");
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
textBytes += partBytes + separatorBytes;
|
|
82
|
+
if (texts.length > 0)
|
|
83
|
+
length++;
|
|
84
|
+
const start = length;
|
|
85
|
+
texts.push(part.text);
|
|
86
|
+
length += part.text.length;
|
|
87
|
+
addPart({ type: "text", start, end: length });
|
|
88
|
+
}
|
|
89
|
+
else if (isRecord(part) && part.type === "image") {
|
|
90
|
+
const reference = imageReferences.length < 16 ? options.image(part) : undefined;
|
|
91
|
+
if (reference === undefined)
|
|
92
|
+
warnings.add("Image unavailable: unsupported data or attachment limit exceeded.");
|
|
93
|
+
else {
|
|
94
|
+
addPart({ type: "image", imageIndex: imageReferences.length });
|
|
95
|
+
imageReferences.push(reference);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else
|
|
99
|
+
warnings.add("Tool content unavailable: unsupported content part.");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else if (options.result !== undefined)
|
|
103
|
+
warnings.add("Tool content unavailable: malformed result.");
|
|
104
|
+
let details;
|
|
105
|
+
if (source?.details !== undefined) {
|
|
106
|
+
try {
|
|
107
|
+
details = renderingJson(source.details);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
warnings.add("Tool details unavailable: unsupported or oversized rendering data.");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const text = texts.join("\n");
|
|
114
|
+
let toolRendering = {
|
|
115
|
+
arguments: args,
|
|
116
|
+
...(options.result === undefined ? {} : { result: { content, ...(details === undefined ? {} : { details }) } }),
|
|
117
|
+
};
|
|
118
|
+
const warning = () => [...warnings].join(" ");
|
|
119
|
+
const fits = () => !excessBoundaries && Buffer.byteLength(JSON.stringify({ payload: options.payload, toolRendering: {
|
|
120
|
+
...toolRendering, ...(warnings.size === 0 ? {} : { unavailable: warning() }),
|
|
121
|
+
} })) <= MAX_METADATA_BYTES;
|
|
122
|
+
if (!fits()) {
|
|
123
|
+
warnings.add("Tool details unavailable: rendering metadata exceeds the supported payload limit.");
|
|
124
|
+
if (toolRendering.result)
|
|
125
|
+
toolRendering = { ...toolRendering, result: { content } };
|
|
126
|
+
}
|
|
127
|
+
if (!fits()) {
|
|
128
|
+
warnings.add("Tool arguments unavailable: rendering metadata exceeds the supported payload limit.");
|
|
129
|
+
toolRendering = { ...toolRendering, arguments: {} };
|
|
130
|
+
}
|
|
131
|
+
if (!fits()) {
|
|
132
|
+
// Rationale: too many content boundaries exceed the metadata budget; retain text/images with an explicit fallback.
|
|
133
|
+
warnings.add("Tool content boundaries unavailable: rendering metadata exceeds the supported payload limit.");
|
|
134
|
+
toolRendering = { ...toolRendering, result: { content: [
|
|
135
|
+
{ type: "text", start: 0, end: text.length },
|
|
136
|
+
...imageReferences.map((_, imageIndex) => ({ type: "image", imageIndex })),
|
|
137
|
+
] } };
|
|
138
|
+
}
|
|
139
|
+
if (warnings.size > 0)
|
|
140
|
+
toolRendering = { ...toolRendering, unavailable: warning() };
|
|
141
|
+
return { text, toolRendering, imageReferences };
|
|
142
|
+
}
|
|
143
|
+
function isRecord(value) {
|
|
144
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
145
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { OwnedUiEvent, OwnedUiImageAttachment, OwnedUiTranscriptBlock, OwnedUiTranscriptImageReference } from "../../../contracts/owned-ui/index.js";
|
|
2
|
+
export declare class TranscriptImageAssets {
|
|
3
|
+
#private;
|
|
4
|
+
resolve(id: string): OwnedUiImageAttachment | null;
|
|
5
|
+
clear(): void;
|
|
6
|
+
reference(value: unknown, source: OwnedUiTranscriptImageReference["source"]): OwnedUiTranscriptImageReference | undefined;
|
|
7
|
+
retain(block: OwnedUiTranscriptBlock): void;
|
|
8
|
+
release(block: OwnedUiTranscriptBlock): void;
|
|
9
|
+
retainEvent(event: OwnedUiEvent): () => void;
|
|
10
|
+
discardUnowned(): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
const MAX_IMAGE_BYTES = 20 * 1024 * 1024;
|
|
3
|
+
// Security: current blocks and admitted delivery snapshots own assets independently; superseded state owns none.
|
|
4
|
+
export class TranscriptImageAssets {
|
|
5
|
+
#assets = new Map();
|
|
6
|
+
#byData = new Map();
|
|
7
|
+
#unowned = new Set();
|
|
8
|
+
resolve(id) { return this.#assets.get(id)?.asset ?? null; }
|
|
9
|
+
clear() { this.#assets.clear(); this.#byData.clear(); this.#unowned.clear(); }
|
|
10
|
+
reference(value, source) {
|
|
11
|
+
if (typeof value !== "object" || value === null || !("type" in value) || value.type !== "image"
|
|
12
|
+
|| !("data" in value) || typeof value.data !== "string" || value.data.length === 0
|
|
13
|
+
|| !("mimeType" in value) || typeof value.mimeType !== "string" || !/^image\/[a-z0-9.+-]+$/i.test(value.mimeType))
|
|
14
|
+
return;
|
|
15
|
+
// Performance: reject oversized encoded data before allocating a decoded buffer or hashing it.
|
|
16
|
+
if (value.data.length > Math.ceil(MAX_IMAGE_BYTES / 3) * 4)
|
|
17
|
+
return;
|
|
18
|
+
// Performance: repeated accumulated results reuse the same retained bytes without decoding and hashing per chunk.
|
|
19
|
+
const cachedId = this.#byData.get(value.mimeType)?.get(value.data);
|
|
20
|
+
if (cachedId !== undefined)
|
|
21
|
+
return { assetId: cachedId, mimeType: value.mimeType, byteLength: this.#assets.get(cachedId).byteLength, source };
|
|
22
|
+
const byteLength = Buffer.from(value.data, "base64").byteLength;
|
|
23
|
+
if (byteLength < 1 || byteLength > MAX_IMAGE_BYTES)
|
|
24
|
+
return;
|
|
25
|
+
const assetId = `image-${createHash("sha256").update(value.mimeType).update("\0").update(value.data).digest("hex").slice(0, 24)}`;
|
|
26
|
+
if (!this.#assets.has(assetId)) {
|
|
27
|
+
this.#assets.set(assetId, { asset: { type: "image", data: value.data, mimeType: value.mimeType }, byteLength, owners: 0 });
|
|
28
|
+
let byData = this.#byData.get(value.mimeType);
|
|
29
|
+
if (byData === undefined)
|
|
30
|
+
this.#byData.set(value.mimeType, byData = new Map());
|
|
31
|
+
byData.set(value.data, assetId);
|
|
32
|
+
this.#unowned.add(assetId);
|
|
33
|
+
}
|
|
34
|
+
return { assetId, mimeType: value.mimeType, byteLength, source };
|
|
35
|
+
}
|
|
36
|
+
retain(block) {
|
|
37
|
+
for (const reference of block.imageReferences ?? []) {
|
|
38
|
+
const entry = this.#assets.get(reference.assetId);
|
|
39
|
+
if (entry === undefined)
|
|
40
|
+
continue;
|
|
41
|
+
entry.owners++;
|
|
42
|
+
this.#unowned.delete(reference.assetId);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
release(block) {
|
|
46
|
+
for (const reference of block.imageReferences ?? []) {
|
|
47
|
+
const entry = this.#assets.get(reference.assetId);
|
|
48
|
+
if (entry !== undefined && --entry.owners === 0)
|
|
49
|
+
this.#delete(reference.assetId);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
retainEvent(event) {
|
|
53
|
+
const blocks = event.type === "transcript-block" ? [event.block] : event.type === "session-view" ? event.view.transcript : [];
|
|
54
|
+
// Concurrency: capture entries, not ids; an obsolete generation's release cannot decrement a replacement asset.
|
|
55
|
+
const entries = blocks.flatMap(block => (block.imageReferences ?? []).map(ref => [ref.assetId, this.#assets.get(ref.assetId)]));
|
|
56
|
+
for (const [id, entry] of entries) {
|
|
57
|
+
if (entry === undefined)
|
|
58
|
+
continue;
|
|
59
|
+
entry.owners++;
|
|
60
|
+
this.#unowned.delete(id);
|
|
61
|
+
}
|
|
62
|
+
return () => {
|
|
63
|
+
for (const [id, entry] of entries) {
|
|
64
|
+
if (entry !== undefined && this.#assets.get(id) === entry && --entry.owners === 0)
|
|
65
|
+
this.#delete(id);
|
|
66
|
+
}
|
|
67
|
+
entries.length = 0;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
discardUnowned() {
|
|
71
|
+
for (const id of this.#unowned)
|
|
72
|
+
this.#delete(id);
|
|
73
|
+
this.#unowned.clear();
|
|
74
|
+
}
|
|
75
|
+
#delete(id) {
|
|
76
|
+
const entry = this.#assets.get(id);
|
|
77
|
+
if (entry === undefined)
|
|
78
|
+
return;
|
|
79
|
+
const byData = this.#byData.get(entry.asset.mimeType);
|
|
80
|
+
byData?.delete(entry.asset.data);
|
|
81
|
+
if (byData?.size === 0)
|
|
82
|
+
this.#byData.delete(entry.asset.mimeType);
|
|
83
|
+
this.#assets.delete(id);
|
|
84
|
+
this.#unowned.delete(id);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type InlineExtension } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
interface FileMetadata {
|
|
3
|
+
isFile(): boolean;
|
|
4
|
+
isSymbolicLink(): boolean;
|
|
5
|
+
}
|
|
6
|
+
interface CleanupFileSystem {
|
|
7
|
+
lstat(path: string): Promise<FileMetadata>;
|
|
8
|
+
unlink(path: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
interface CleanupPaths {
|
|
11
|
+
dirname(path: string): string;
|
|
12
|
+
join(...paths: string[]): string;
|
|
13
|
+
resolve(...paths: string[]): string;
|
|
14
|
+
}
|
|
15
|
+
export interface WindowsNulCleanupOptions {
|
|
16
|
+
readonly platform?: NodeJS.Platform;
|
|
17
|
+
readonly fileSystem?: CleanupFileSystem;
|
|
18
|
+
readonly paths?: CleanupPaths;
|
|
19
|
+
}
|
|
20
|
+
export declare function createWindowsNulCleanupExtension(options?: WindowsNulCleanupOptions): InlineExtension | null;
|
|
21
|
+
export {};
|