@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
package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts
RENAMED
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
import { type AgentSession, type AgentSessionRuntime, type AgentSessionServices, type ScopedModel } from "@earendil-works/pi-coding-agent";
|
|
1
|
+
import { createAgentSessionServices, SettingsManager, type AgentSession, type AgentSessionRuntime, type AgentSessionServices, type ScopedModel } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { resolvePiProjectTrustPreflight, type PiProjectTrustPreflightPrompt } from "./project-trust-preflight.js";
|
|
3
|
+
import { type PiSessionForkPrompt, type PiSessionSelection } from "./session-selection.js";
|
|
2
4
|
export interface PiRuntimeIntegrationOptions {
|
|
3
5
|
readonly cwd: string;
|
|
4
6
|
readonly agentDir: string;
|
|
5
7
|
readonly sessionDir?: string;
|
|
8
|
+
readonly sessionPath?: string;
|
|
9
|
+
readonly sessionSelection?: PiSessionSelection;
|
|
10
|
+
readonly sessionForkPrompt?: PiSessionForkPrompt;
|
|
11
|
+
readonly projectTrustPrompt?: PiProjectTrustPreflightPrompt;
|
|
12
|
+
readonly preflightDependencies?: PiRuntimePreflightDependencies;
|
|
13
|
+
}
|
|
14
|
+
export interface PiRuntimePreflightDependencies {
|
|
15
|
+
readonly resolveTrust?: typeof resolvePiProjectTrustPreflight;
|
|
16
|
+
readonly createSettingsManager?: (cwd: string, agentDir: string, projectTrusted: boolean) => SettingsManager;
|
|
17
|
+
readonly createServices?: typeof createAgentSessionServices;
|
|
6
18
|
}
|
|
7
19
|
export type PiSessionReplacement = {
|
|
8
20
|
readonly kind: "new";
|
|
@@ -26,6 +38,12 @@ interface ConfiguredModelScope {
|
|
|
26
38
|
* saved default when it is in scope, otherwise the first scoped model.
|
|
27
39
|
*/
|
|
28
40
|
export declare function resolveConfiguredModelScope(services: Pick<AgentSessionServices, "settingsManager" | "modelRuntime">): Promise<ConfiguredModelScope>;
|
|
41
|
+
export declare function createPiRuntimeServicesAfterTrust(options: Pick<PiRuntimeIntegrationOptions, "agentDir" | "projectTrustPrompt" | "preflightDependencies"> & {
|
|
42
|
+
readonly cwd: string;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
readonly services: AgentSessionServices;
|
|
45
|
+
readonly trust: Awaited<ReturnType<typeof resolvePiProjectTrustPreflight>>;
|
|
46
|
+
}>;
|
|
29
47
|
export declare function createPiRuntimeIntegration(options: PiRuntimeIntegrationOptions): Promise<AgentSessionRuntime>;
|
|
30
48
|
export declare function bindPiRuntimeSession(runtime: AgentSessionRuntime, rebind: (session: AgentSession) => Promise<void>): () => void;
|
|
31
49
|
export declare function replacePiRuntimeSession(runtime: AgentSessionRuntime, replacement: PiSessionReplacement): Promise<{
|
package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js
RENAMED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import { createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, resolveModelScopeWithDiagnostics, SessionManager, } from "@earendil-works/pi-coding-agent";
|
|
1
|
+
import { createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, resolveModelScopeWithDiagnostics, SessionManager, SettingsManager, } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { resolvePiProjectTrustPreflight, } from "./project-trust-preflight.js";
|
|
3
|
+
import { openSelectedPiSession, resolveSessionArgumentPath } from "./session-selection.js";
|
|
4
|
+
import { markStartupPhase } from "../../../foundation/startup/index.js";
|
|
5
|
+
import { createWindowsNulCleanupExtension } from "./windows-filesystem-hygiene.js";
|
|
2
6
|
/**
|
|
3
7
|
* Mirrors pinned Pi's CLI startup: resolve the `models` patterns from settings
|
|
4
8
|
* into a scoped model list, keep the resolver's warnings (e.g. "No models match
|
|
@@ -29,10 +33,49 @@ export async function resolveConfiguredModelScope(services) {
|
|
|
29
33
|
diagnostics: diagnostics.map(diagnostic => ({ type: diagnostic.type, message: diagnostic.message })),
|
|
30
34
|
};
|
|
31
35
|
}
|
|
36
|
+
export async function createPiRuntimeServicesAfterTrust(options) {
|
|
37
|
+
const resolveTrust = options.preflightDependencies?.resolveTrust ?? resolvePiProjectTrustPreflight;
|
|
38
|
+
const createSettingsManager = options.preflightDependencies?.createSettingsManager
|
|
39
|
+
?? ((targetCwd, agentDir, projectTrusted) => SettingsManager.create(targetCwd, agentDir, { projectTrusted }));
|
|
40
|
+
const createServices = options.preflightDependencies?.createServices ?? createAgentSessionServices;
|
|
41
|
+
const trust = await resolveTrust({
|
|
42
|
+
cwd: options.cwd,
|
|
43
|
+
agentDir: options.agentDir,
|
|
44
|
+
...(options.projectTrustPrompt === undefined ? {} : { prompt: options.projectTrustPrompt }),
|
|
45
|
+
});
|
|
46
|
+
const settingsManager = createSettingsManager(options.cwd, options.agentDir, trust.trusted);
|
|
47
|
+
await markStartupPhase(process.env, "settings-loaded");
|
|
48
|
+
const cleanupExtension = createWindowsNulCleanupExtension();
|
|
49
|
+
const services = await createServices({
|
|
50
|
+
cwd: options.cwd,
|
|
51
|
+
agentDir: options.agentDir,
|
|
52
|
+
settingsManager,
|
|
53
|
+
...(cleanupExtension === null ? {} : {
|
|
54
|
+
resourceLoaderOptions: { extensionFactories: [cleanupExtension] },
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
57
|
+
await markStartupPhase(process.env, "pi-services");
|
|
58
|
+
await markStartupPhase(process.env, "resource-discovery");
|
|
59
|
+
return { services, trust };
|
|
60
|
+
}
|
|
32
61
|
export async function createPiRuntimeIntegration(options) {
|
|
33
|
-
const
|
|
62
|
+
const directory = options.sessionDir ?? process.env.PI_CODING_AGENT_SESSION_DIR;
|
|
63
|
+
const sessionDir = directory === undefined ? undefined : resolveSessionArgumentPath(directory, options.cwd);
|
|
64
|
+
const selection = options.sessionSelection ?? (options.sessionPath === undefined ? undefined : { target: resolveSessionArgumentPath(options.sessionPath, options.cwd) });
|
|
65
|
+
const sessionManager = selection === undefined
|
|
66
|
+
? SessionManager.create(options.cwd, sessionDir)
|
|
67
|
+
: await openSelectedPiSession({
|
|
68
|
+
cwd: options.cwd, selection,
|
|
69
|
+
...(sessionDir === undefined ? {} : { sessionDir }),
|
|
70
|
+
...(options.sessionForkPrompt === undefined ? {} : { forkPrompt: options.sessionForkPrompt }),
|
|
71
|
+
});
|
|
34
72
|
const createRuntime = async ({ cwd, sessionManager: targetSessionManager, sessionStartEvent, }) => {
|
|
35
|
-
const services = await
|
|
73
|
+
const { services, trust } = await createPiRuntimeServicesAfterTrust({
|
|
74
|
+
cwd,
|
|
75
|
+
agentDir: options.agentDir,
|
|
76
|
+
...(options.projectTrustPrompt === undefined ? {} : { projectTrustPrompt: options.projectTrustPrompt }),
|
|
77
|
+
...(options.preflightDependencies === undefined ? {} : { preflightDependencies: options.preflightDependencies }),
|
|
78
|
+
});
|
|
36
79
|
const modelScope = await resolveConfiguredModelScope(services);
|
|
37
80
|
const hasExistingSession = targetSessionManager.buildSessionContext().messages.length > 0;
|
|
38
81
|
const created = await createAgentSessionFromServices({
|
|
@@ -43,10 +86,18 @@ export async function createPiRuntimeIntegration(options) {
|
|
|
43
86
|
...(modelScope.thinkingLevel && !hasExistingSession ? { thinkingLevel: modelScope.thinkingLevel } : {}),
|
|
44
87
|
...(modelScope.scopedModels.length > 0 ? { scopedModels: [...modelScope.scopedModels] } : {}),
|
|
45
88
|
});
|
|
46
|
-
|
|
89
|
+
await markStartupPhase(process.env, "session-created");
|
|
90
|
+
return {
|
|
91
|
+
...created,
|
|
92
|
+
services,
|
|
93
|
+
diagnostics: [
|
|
94
|
+
...(trust.diagnostic === null ? [] : [{ type: "warning", message: trust.diagnostic }]),
|
|
95
|
+
...modelScope.diagnostics,
|
|
96
|
+
],
|
|
97
|
+
};
|
|
47
98
|
};
|
|
48
99
|
return createAgentSessionRuntime(createRuntime, {
|
|
49
|
-
cwd:
|
|
100
|
+
cwd: sessionManager.getCwd(),
|
|
50
101
|
agentDir: options.agentDir,
|
|
51
102
|
sessionManager,
|
|
52
103
|
});
|
package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AgentSession, AgentSessionEvent } from "@earendil-works/pi-coding-agent";
|
|
2
|
-
import { type AgentCommandOutcome, type AgentEvent } from "
|
|
1
|
+
import type { AgentSession, AgentSessionEvent, PromptOptions } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { type AgentCommandOutcome, type AgentEvent } from "../../../contracts/agent-engine/index.js";
|
|
3
3
|
export interface PiDocumentedSessionCommands {
|
|
4
4
|
readonly isStreaming: AgentSession["isStreaming"];
|
|
5
5
|
readonly isRetrying: AgentSession["isRetrying"];
|
|
@@ -18,6 +18,7 @@ export interface PiDocumentedSessionCommands {
|
|
|
18
18
|
export type PiSessionCommand = {
|
|
19
19
|
readonly type: "prompt" | "steer" | "follow-up";
|
|
20
20
|
readonly text: string;
|
|
21
|
+
readonly images?: NonNullable<PromptOptions["images"]>;
|
|
21
22
|
} | {
|
|
22
23
|
readonly type: "abort" | "retry" | "compact";
|
|
23
24
|
} | {
|
|
@@ -30,6 +31,7 @@ export interface PiSessionCommandResult {
|
|
|
30
31
|
readonly outcome: AgentCommandOutcome;
|
|
31
32
|
readonly value?: unknown;
|
|
32
33
|
}
|
|
34
|
+
/** Routes neutral session commands to Pi while preserving Pi streaming and retry semantics. */
|
|
33
35
|
export declare class PiSessionCommandIntegration {
|
|
34
36
|
#private;
|
|
35
37
|
private readonly session;
|
package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { AGENT_ENGINE_CONTRACT_VERSION, } from "
|
|
1
|
+
import { AGENT_ENGINE_CONTRACT_VERSION, } from "../../../contracts/agent-engine/index.js";
|
|
2
|
+
/** Routes neutral session commands to Pi while preserving Pi streaming and retry semantics. */
|
|
2
3
|
export class PiSessionCommandIntegration {
|
|
3
4
|
session;
|
|
4
5
|
#lastPrompt = null;
|
|
@@ -9,15 +10,29 @@ export class PiSessionCommandIntegration {
|
|
|
9
10
|
switch (command.type) {
|
|
10
11
|
case "prompt":
|
|
11
12
|
this.#lastPrompt = command.text;
|
|
12
|
-
await this.session.prompt(command.text,
|
|
13
|
+
await this.session.prompt(command.text, command.images === undefined
|
|
14
|
+
? this.session.isStreaming ? { streamingBehavior: "followUp" } : undefined
|
|
15
|
+
: {
|
|
16
|
+
...(this.session.isStreaming ? { streamingBehavior: "followUp" } : {}),
|
|
17
|
+
images: [...command.images],
|
|
18
|
+
});
|
|
13
19
|
return { outcome: "completed" };
|
|
14
20
|
case "steer":
|
|
15
21
|
this.#lastPrompt = command.text;
|
|
16
|
-
|
|
22
|
+
// Compatibility: match interactive Pi: prompt() owns template/extension expansion and
|
|
23
|
+
// turns the accepted steering message into the visible user row while
|
|
24
|
+
// later messages remain in the pending queue.
|
|
25
|
+
await this.session.prompt(command.text, {
|
|
26
|
+
streamingBehavior: "steer",
|
|
27
|
+
...(command.images === undefined ? {} : { images: [...command.images] }),
|
|
28
|
+
});
|
|
17
29
|
return { outcome: "completed" };
|
|
18
30
|
case "follow-up":
|
|
19
31
|
this.#lastPrompt = command.text;
|
|
20
|
-
await this.session.
|
|
32
|
+
await this.session.prompt(command.text, {
|
|
33
|
+
streamingBehavior: "followUp",
|
|
34
|
+
...(command.images === undefined ? {} : { images: [...command.images] }),
|
|
35
|
+
});
|
|
21
36
|
return { outcome: "completed" };
|
|
22
37
|
case "abort":
|
|
23
38
|
if (this.session.isRetrying)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SessionManager, type SessionInfo } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
export interface PiSessionSelection {
|
|
3
|
+
readonly target: string;
|
|
4
|
+
readonly sessionDir?: string;
|
|
5
|
+
}
|
|
6
|
+
export type PiSessionForkPrompt = (request: {
|
|
7
|
+
readonly sourceCwd: string;
|
|
8
|
+
}) => Promise<boolean>;
|
|
9
|
+
/** Expected resume outcomes are concise CLI diagnostics, not engine crashes. */
|
|
10
|
+
export declare class PiSessionSelectionError extends Error {
|
|
11
|
+
readonly exitCode: number;
|
|
12
|
+
constructor(message: string, exitCode?: number);
|
|
13
|
+
}
|
|
14
|
+
interface SessionSelectionOptions {
|
|
15
|
+
readonly cwd: string;
|
|
16
|
+
readonly selection: PiSessionSelection;
|
|
17
|
+
readonly sessionDir?: string;
|
|
18
|
+
readonly forkPrompt?: PiSessionForkPrompt;
|
|
19
|
+
/** Public API seam for deterministic lookup/open race and listing-order evidence. */
|
|
20
|
+
readonly sessions?: Pick<typeof SessionManager, "list" | "open" | "forkFrom"> & {
|
|
21
|
+
readonly listAll: (sessionDir?: string) => Promise<SessionInfo[]>;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Pinned Pi 0.84.2 main.ts policy, using SDK APIs rather than importing the CLI. */
|
|
25
|
+
export declare function openSelectedPiSession(options: SessionSelectionOptions): Promise<SessionManager>;
|
|
26
|
+
/** Resolve before switching effective cwd, including quoted home-relative paths. */
|
|
27
|
+
export declare function resolveSessionArgumentPath(path: string, cwd: string): string;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { accessSync, constants, existsSync, realpathSync, statSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { SessionManager } from "@earendil-works/pi-coding-agent";
|
|
5
|
+
/** Expected resume outcomes are concise CLI diagnostics, not engine crashes. */
|
|
6
|
+
export class PiSessionSelectionError extends Error {
|
|
7
|
+
exitCode;
|
|
8
|
+
constructor(message, exitCode = 1) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.exitCode = exitCode;
|
|
11
|
+
this.name = "PiSessionSelectionError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/** Pinned Pi 0.84.2 main.ts policy, using SDK APIs rather than importing the CLI. */
|
|
15
|
+
export async function openSelectedPiSession(options) {
|
|
16
|
+
try {
|
|
17
|
+
const sessions = options.sessions ?? SessionManager;
|
|
18
|
+
const cwd = resolve(options.cwd);
|
|
19
|
+
const directory = options.selection.sessionDir ?? options.sessionDir ?? process.env.PI_CODING_AGENT_SESSION_DIR;
|
|
20
|
+
const sessionDir = directory === undefined ? undefined : resolveSessionArgumentPath(directory, cwd);
|
|
21
|
+
const target = options.selection.target;
|
|
22
|
+
let path;
|
|
23
|
+
let global;
|
|
24
|
+
if (target.includes("/") || target.includes("\\") || target.endsWith(".jsonl")) {
|
|
25
|
+
path = resolveSessionArgumentPath(target, cwd);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
const local = matchSession(await sessions.list(cwd, sessionDir), target);
|
|
29
|
+
const globalMatch = local ? undefined : matchSession(await sessions.listAll(sessionDir), target);
|
|
30
|
+
// Compatibility: macOS may expose one temporary directory as /var to one process
|
|
31
|
+
// and /private/var to another. Physical path identity must not turn that alias into
|
|
32
|
+
// a cross-project fork prompt.
|
|
33
|
+
global = globalMatch && !sameProjectDirectory(globalMatch.cwd, cwd) ? globalMatch : undefined;
|
|
34
|
+
const matched = local ?? globalMatch;
|
|
35
|
+
if (!matched)
|
|
36
|
+
throw new PiSessionSelectionError(`No session found matching '${target}'`);
|
|
37
|
+
path = matched.path;
|
|
38
|
+
}
|
|
39
|
+
assertResumeFile(path);
|
|
40
|
+
if (global) {
|
|
41
|
+
if (!options.forkPrompt || !await options.forkPrompt({ sourceCwd: global.cwd })) {
|
|
42
|
+
throw new PiSessionSelectionError("Session resume cancelled.", 0);
|
|
43
|
+
}
|
|
44
|
+
assertResumeFile(path);
|
|
45
|
+
assertCwd(cwd);
|
|
46
|
+
return sessions.forkFrom(path, cwd, sessionDir);
|
|
47
|
+
}
|
|
48
|
+
// Invariant: no await between the final guard and SDK open. A disappeared target
|
|
49
|
+
// can otherwise produce a new in-memory header instead of an existing session.
|
|
50
|
+
const manager = sessions.open(path, sessionDir);
|
|
51
|
+
assertResumeFile(path);
|
|
52
|
+
assertCwd(manager.getCwd());
|
|
53
|
+
return manager;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error instanceof PiSessionSelectionError)
|
|
57
|
+
throw error;
|
|
58
|
+
throw new PiSessionSelectionError(`Could not resume session: ${error instanceof Error ? error.message : String(error)}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function sameProjectDirectory(left, right) {
|
|
62
|
+
try {
|
|
63
|
+
const first = realpathSync.native(resolve(left));
|
|
64
|
+
const second = realpathSync.native(resolve(right));
|
|
65
|
+
return process.platform === "win32" ? first.toLowerCase() === second.toLowerCase() : first === second;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return resolve(left) === resolve(right);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function matchSession(sessions, target) {
|
|
72
|
+
return sessions.find(session => session.id === target) ?? sessions.find(session => session.id.startsWith(target));
|
|
73
|
+
}
|
|
74
|
+
/** Resolve before switching effective cwd, including quoted home-relative paths. */
|
|
75
|
+
export function resolveSessionArgumentPath(path, cwd) {
|
|
76
|
+
const expanded = path === "~" ? homedir() : /^~[/\\]/.test(path) ? resolve(homedir(), path.slice(2)) : path;
|
|
77
|
+
return resolve(cwd, expanded);
|
|
78
|
+
}
|
|
79
|
+
function assertResumeFile(path) {
|
|
80
|
+
if (!existsSync(path))
|
|
81
|
+
throw new PiSessionSelectionError(`Session file does not exist: ${path}`);
|
|
82
|
+
const metadata = statSync(path);
|
|
83
|
+
if (!metadata.isFile() || metadata.size === 0)
|
|
84
|
+
throw new PiSessionSelectionError(`Session file is empty or not a regular file: ${path}`);
|
|
85
|
+
accessSync(path, constants.R_OK);
|
|
86
|
+
}
|
|
87
|
+
function assertCwd(cwd) {
|
|
88
|
+
if (!existsSync(cwd) || !statSync(cwd).isDirectory())
|
|
89
|
+
throw new PiSessionSelectionError(`Session working directory does not exist: ${cwd}`);
|
|
90
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { AgentJsonValue, AgentSettingApplicationBoundary, AgentSettingChangeOutcome, AgentSettingOwner } from "../../../contracts/agent-engine/index.js";
|
|
2
|
+
export type PiSettingKey = "autoCompact" | "showImages" | "imageWidthCells" | "autoResizeImages" | "blockImages" | "enableSkillCommands" | "steeringMode" | "followUpMode" | "transport" | "httpIdleTimeoutMs" | "thinkingLevel" | "theme" | "hideThinkingBlock" | "mermaidRenderingMode" | "showCacheMissNotices" | "collapseChangelog" | "enableInstallTelemetry" | "quietStartup" | "defaultProjectTrust" | "doubleEscapeAction" | "treeFilterMode" | "showHardwareCursor" | "editorPaddingX" | "outputPad" | "autocompleteMaxVisible" | "clearOnShrink" | "showTerminalProgress" | "tuiMode" | "fullscreenExitOutput" | "fullscreenScrollbar" | "warnings";
|
|
3
|
+
export type PiSettingVisualClass = "none" | "transcript" | "transcript-geometry" | "editor-menu" | "queue-transcript" | "status-error" | "retry-error" | "footer-transcript" | "markdown" | "transcript-notice" | "startup-transcript" | "startup-selector" | "selector" | "terminal-cursor" | "editor-geometry" | "menu-geometry" | "terminal-frame" | "terminal-status" | "restored-parent-output" | "hidden";
|
|
4
|
+
export interface PiSettingVisualEvidence {
|
|
5
|
+
/** Reviewed visual family; `none` still names the behavior that can emit styled diagnostics. */
|
|
6
|
+
readonly class: PiSettingVisualClass;
|
|
7
|
+
/** Pinned component, lifecycle, or provider-visible failure surface used as the visual authority. */
|
|
8
|
+
readonly pinnedSurface: string;
|
|
9
|
+
/** Independent pinned/A1 test or physical checkpoint that owns acceptance. */
|
|
10
|
+
readonly evidence: string;
|
|
11
|
+
}
|
|
12
|
+
export interface PiSettingEffectDefinition {
|
|
13
|
+
readonly application: AgentSettingApplicationBoundary;
|
|
14
|
+
readonly owner: AgentSettingOwner;
|
|
15
|
+
readonly visual: PiSettingVisualEvidence;
|
|
16
|
+
/** Bare A1 deliberately replaces this Pi behavior, so its settings UI omits the entry. */
|
|
17
|
+
readonly hiddenInBare?: true;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Reviewed effect authority for every generated Pi setting. Presentation remains
|
|
21
|
+
* generated; this table states who must make each accepted value observable.
|
|
22
|
+
*/
|
|
23
|
+
export declare const PI_SETTING_EFFECTS: Readonly<Record<PiSettingKey, PiSettingEffectDefinition>>;
|
|
24
|
+
export interface PiSettingEffectHandler {
|
|
25
|
+
/** Install one value in the active owner. Handlers must be idempotent and reversible. */
|
|
26
|
+
apply(value: AgentJsonValue): void | Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export type PiSettingOwnerHandlers = Partial<Record<PiSettingKey, PiSettingEffectHandler>>;
|
|
29
|
+
export interface PiSettingStorageOperation {
|
|
30
|
+
readonly key: PiSettingKey;
|
|
31
|
+
read(): AgentJsonValue;
|
|
32
|
+
validate(value: AgentJsonValue): void;
|
|
33
|
+
write(value: AgentJsonValue): void;
|
|
34
|
+
}
|
|
35
|
+
export interface PiSettingsCoordinatorOptions {
|
|
36
|
+
readonly productMode?: "bare" | "comparison";
|
|
37
|
+
readonly flush: () => Promise<void>;
|
|
38
|
+
readonly drainErrors?: () => readonly {
|
|
39
|
+
readonly error: Error;
|
|
40
|
+
}[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* One transactional authority for Pi setting validation, active effects,
|
|
44
|
+
* persistence, durability, rollback, and owner lifecycle.
|
|
45
|
+
*/
|
|
46
|
+
export declare class PiSettingsCoordinator {
|
|
47
|
+
#private;
|
|
48
|
+
constructor(operations: readonly PiSettingStorageOperation[], options: PiSettingsCoordinatorOptions);
|
|
49
|
+
bindOwner(owner: AgentSettingOwner, handlers: PiSettingOwnerHandlers): () => void;
|
|
50
|
+
unbindOwner(owner: AgentSettingOwner, keys?: readonly PiSettingKey[]): void;
|
|
51
|
+
definition(key: PiSettingKey): PiSettingEffectDefinition;
|
|
52
|
+
storedValue(key: PiSettingKey): AgentJsonValue;
|
|
53
|
+
effectiveValue(key: PiSettingKey): AgentJsonValue;
|
|
54
|
+
limitationReason(key: PiSettingKey): string | null;
|
|
55
|
+
available(key: PiSettingKey): boolean;
|
|
56
|
+
validate(key: PiSettingKey, value: AgentJsonValue): void;
|
|
57
|
+
apply(key: PiSettingKey, value: AgentJsonValue): Promise<AgentSettingChangeOutcome>;
|
|
58
|
+
flush(): Promise<void>;
|
|
59
|
+
rollback(key: PiSettingKey, value: AgentJsonValue): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
export declare function settingsEffectInventoryDrift(presented: readonly string[], reviewed?: readonly string[]): {
|
|
62
|
+
readonly unmapped: readonly string[];
|
|
63
|
+
readonly stale: readonly string[];
|
|
64
|
+
readonly duplicated: readonly string[];
|
|
65
|
+
};
|
|
66
|
+
export declare function settingsVisualInventoryViolations(presented: readonly string[], reviewed?: Readonly<Partial<Record<PiSettingKey, PiSettingEffectDefinition>>>): readonly string[];
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reviewed effect authority for every generated Pi setting. Presentation remains
|
|
3
|
+
* generated; this table states who must make each accepted value observable.
|
|
4
|
+
*/
|
|
5
|
+
export const PI_SETTING_EFFECTS = Object.freeze({
|
|
6
|
+
autoCompact: effect("live", "agent", "transcript", "compaction status, summary, completion, and failure rows", "pinned-transcript-lifecycle-parity"),
|
|
7
|
+
showImages: effect("live", "shell", "transcript", "pinned inline image and textual fallback components", "pinned-transcript-image-parity"),
|
|
8
|
+
imageWidthCells: effect("live", "shell", "transcript-geometry", "pinned image component width and clipping", "pinned-transcript-image-parity"),
|
|
9
|
+
autoResizeImages: effect("live", "agent", "none", "provider image preparation and pinned warning row", "settings-effects-provider-parity"),
|
|
10
|
+
blockImages: effect("live", "agent", "none", "provider context conversion and pinned blocked-image notice", "settings-effects-provider-parity"),
|
|
11
|
+
enableSkillCommands: effect("live", "shell", "editor-menu", "pinned command autocomplete list", "pinned-editor-input-parity"),
|
|
12
|
+
steeringMode: effect("live", "agent", "queue-transcript", "pinned steering queue and submitted prompt rows", "pinned-status-indicator-parity"),
|
|
13
|
+
followUpMode: effect("live", "agent", "queue-transcript", "pinned follow-up queue and submitted prompt rows", "pinned-status-indicator-parity"),
|
|
14
|
+
transport: effect("live", "agent", "status-error", "pinned provider request status and failure rows", "settings-effects-provider-parity"),
|
|
15
|
+
httpIdleTimeoutMs: effect("live", "agent", "retry-error", "pinned timeout, retry, and terminal failure rows", "pinned-transcript-lifecycle-parity"),
|
|
16
|
+
thinkingLevel: effect("live", "agent", "footer-transcript", "pinned footer indicator, thinking rows, and clamp notice", "pinned-status-indicator-parity"),
|
|
17
|
+
theme: hiddenEffect("live", "shell", "pinned theme selector and complete themed shell", "pinned-theme-parity"),
|
|
18
|
+
hideThinkingBlock: effect("live", "shell", "transcript", "pinned thinking block presence and spacing", "pinned-transcript-lifecycle-parity"),
|
|
19
|
+
mermaidRenderingMode: effect("live", "shell", "markdown", "pinned Mermaid Markdown transformation", "pinned-assistant-content-parity"),
|
|
20
|
+
showCacheMissNotices: effect("live", "shell", "transcript-notice", "pinned cache-miss transcript notice", "pinned-transcript-lifecycle-parity"),
|
|
21
|
+
collapseChangelog: effect("next-start", "startup", "startup-transcript", "pinned startup and command changelog components", "pi-startup-composition-parity"),
|
|
22
|
+
enableInstallTelemetry: effect("next-start", "installation", "none", "install lifecycle and its pinned failure diagnostic", "settings-effects-installation-parity"),
|
|
23
|
+
quietStartup: hiddenEffect("next-start", "startup", "pinned startup suppression lifecycle", "pi-startup-composition-parity"),
|
|
24
|
+
defaultProjectTrust: effect("next-start", "startup", "startup-selector", "pinned pre-resource project trust selector", "project-trust-startup-parity"),
|
|
25
|
+
doubleEscapeAction: effect("live", "shell", "selector", "pinned tree or fork selector", "pinned-selector-parity"),
|
|
26
|
+
treeFilterMode: effect("live", "shell", "selector", "pinned tree selector filter, rows, and hints", "pinned-selector-parity"),
|
|
27
|
+
showHardwareCursor: effect("live", "terminal", "terminal-cursor", "pinned editor, overlay, blur, failure, and exit cursor operations", "pi-terminal-operation-parity"),
|
|
28
|
+
editorPaddingX: effect("live", "shell", "editor-geometry", "pinned editor border, padding, wrapping, and cursor column", "pinned-editor-input-parity"),
|
|
29
|
+
outputPad: effect("live", "shell", "transcript-geometry", "pinned transcript, tool, status, and error horizontal padding", "pinned-transcript-lifecycle-parity"),
|
|
30
|
+
autocompleteMaxVisible: effect("live", "shell", "menu-geometry", "pinned autocomplete clipping and editor anchoring", "pinned-editor-input-parity"),
|
|
31
|
+
clearOnShrink: effect("live", "terminal", "terminal-frame", "pinned resize clearing and resulting terminal frame", "pi-terminal-operation-parity"),
|
|
32
|
+
showTerminalProgress: effect("live", "terminal", "terminal-status", "pinned OSC progress lifecycle", "pi-terminal-operation-parity"),
|
|
33
|
+
tuiMode: hiddenEffect("next-session", "shell", "pinned regular/fullscreen selector and terminal lifecycle", "pi-terminal-operation-parity"),
|
|
34
|
+
fullscreenExitOutput: effect("current-exit", "shutdown", "restored-parent-output", "pinned styled transcript and compact dim resume hint", "pinned-fullscreen-exit-parity"),
|
|
35
|
+
fullscreenScrollbar: hiddenEffect("live", "shell", "pinned fullscreen scrollbar reservation", "pi-terminal-operation-parity"),
|
|
36
|
+
warnings: effect("live", "agent", "transcript-notice", "pinned warning rows by warning part", "pinned-transcript-lifecycle-parity"),
|
|
37
|
+
});
|
|
38
|
+
function effect(application, owner, visualClass, pinnedSurface, evidence) {
|
|
39
|
+
return { application, owner, visual: { class: visualClass, pinnedSurface, evidence } };
|
|
40
|
+
}
|
|
41
|
+
function hiddenEffect(application, owner, pinnedSurface, evidence) {
|
|
42
|
+
return { application, owner, hiddenInBare: true, visual: { class: "hidden", pinnedSurface, evidence } };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* One transactional authority for Pi setting validation, active effects,
|
|
46
|
+
* persistence, durability, rollback, and owner lifecycle.
|
|
47
|
+
*/
|
|
48
|
+
export class PiSettingsCoordinator {
|
|
49
|
+
#operations;
|
|
50
|
+
#handlers = new Map();
|
|
51
|
+
#state = new Map();
|
|
52
|
+
#productMode;
|
|
53
|
+
#flushStorage;
|
|
54
|
+
#drainErrors;
|
|
55
|
+
constructor(operations, options) {
|
|
56
|
+
this.#operations = new Map(operations.map(operation => [operation.key, operation]));
|
|
57
|
+
this.#productMode = options.productMode ?? "bare";
|
|
58
|
+
this.#flushStorage = options.flush;
|
|
59
|
+
this.#drainErrors = options.drainErrors;
|
|
60
|
+
for (const operation of operations) {
|
|
61
|
+
const stored = operation.read();
|
|
62
|
+
this.#state.set(operation.key, { stored, effective: stored, inconsistentReason: null });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
bindOwner(owner, handlers) {
|
|
66
|
+
const bound = [];
|
|
67
|
+
for (const [candidate, handler] of Object.entries(handlers)) {
|
|
68
|
+
if (handler === undefined)
|
|
69
|
+
continue;
|
|
70
|
+
const key = candidate;
|
|
71
|
+
const definition = PI_SETTING_EFFECTS[key];
|
|
72
|
+
if (definition === undefined)
|
|
73
|
+
throw new Error(`unknown Pi setting effect: ${key}`);
|
|
74
|
+
if (definition.owner !== owner)
|
|
75
|
+
throw new Error(`${key} belongs to ${definition.owner}, not ${owner}`);
|
|
76
|
+
if (this.#productMode === "bare" && definition.hiddenInBare === true) {
|
|
77
|
+
throw new Error(`${key} is hidden in bare A1`);
|
|
78
|
+
}
|
|
79
|
+
this.#handlers.set(key, handler);
|
|
80
|
+
bound.push(key);
|
|
81
|
+
}
|
|
82
|
+
return () => this.unbindOwner(owner, bound);
|
|
83
|
+
}
|
|
84
|
+
unbindOwner(owner, keys) {
|
|
85
|
+
const candidates = keys ?? [...this.#handlers.keys()];
|
|
86
|
+
for (const key of candidates)
|
|
87
|
+
if (PI_SETTING_EFFECTS[key].owner === owner)
|
|
88
|
+
this.#handlers.delete(key);
|
|
89
|
+
}
|
|
90
|
+
definition(key) {
|
|
91
|
+
return PI_SETTING_EFFECTS[key];
|
|
92
|
+
}
|
|
93
|
+
storedValue(key) {
|
|
94
|
+
const operation = this.#requireOperation(key);
|
|
95
|
+
const stored = operation.read();
|
|
96
|
+
const state = this.#requireState(key);
|
|
97
|
+
state.stored = stored;
|
|
98
|
+
return stored;
|
|
99
|
+
}
|
|
100
|
+
effectiveValue(key) {
|
|
101
|
+
return this.#requireState(key).effective;
|
|
102
|
+
}
|
|
103
|
+
limitationReason(key) {
|
|
104
|
+
const definition = PI_SETTING_EFFECTS[key];
|
|
105
|
+
if (this.#productMode === "bare" && definition.hiddenInBare === true)
|
|
106
|
+
return "setting is not available in the active product mode";
|
|
107
|
+
const inconsistent = this.#requireState(key).inconsistentReason;
|
|
108
|
+
if (inconsistent !== null)
|
|
109
|
+
return inconsistent;
|
|
110
|
+
if (!this.#handlers.has(key))
|
|
111
|
+
return `${definition.owner} effect is not bound for ${definition.application} application`;
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
available(key) {
|
|
115
|
+
return this.limitationReason(key) === null;
|
|
116
|
+
}
|
|
117
|
+
validate(key, value) {
|
|
118
|
+
this.#requireOperation(key).validate(value);
|
|
119
|
+
}
|
|
120
|
+
async apply(key, value) {
|
|
121
|
+
const operation = this.#requireOperation(key);
|
|
122
|
+
operation.validate(value);
|
|
123
|
+
const definition = PI_SETTING_EFFECTS[key];
|
|
124
|
+
const previousStored = operation.read();
|
|
125
|
+
const state = this.#requireState(key);
|
|
126
|
+
const previousEffective = state.effective;
|
|
127
|
+
const limitationReason = this.limitationReason(key);
|
|
128
|
+
if (limitationReason !== null) {
|
|
129
|
+
return outcome("unavailable", definition.application, previousStored, previousEffective, null, limitationReason);
|
|
130
|
+
}
|
|
131
|
+
const handler = this.#handlers.get(key);
|
|
132
|
+
if (definition.application !== "live") {
|
|
133
|
+
try {
|
|
134
|
+
operation.write(value);
|
|
135
|
+
await this.flush();
|
|
136
|
+
state.stored = value;
|
|
137
|
+
return outcome("deferred", definition.application, value, previousEffective, null, null);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
const failure = await this.#restorePersistence(operation, previousStored, error);
|
|
141
|
+
state.stored = operation.read();
|
|
142
|
+
return outcome("failed", definition.application, state.stored, previousEffective, failure, null);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
await handler.apply(value);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
return outcome("failed", definition.application, previousStored, previousEffective, describe(error), null);
|
|
150
|
+
}
|
|
151
|
+
state.effective = value;
|
|
152
|
+
try {
|
|
153
|
+
operation.write(value);
|
|
154
|
+
await this.flush();
|
|
155
|
+
state.stored = value;
|
|
156
|
+
state.inconsistentReason = null;
|
|
157
|
+
return outcome("applied", definition.application, value, value, null, null);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
const persistenceFailure = await this.#restorePersistence(operation, previousStored, error);
|
|
161
|
+
try {
|
|
162
|
+
await handler.apply(previousEffective);
|
|
163
|
+
state.effective = previousEffective;
|
|
164
|
+
state.stored = operation.read();
|
|
165
|
+
return outcome("failed", definition.application, state.stored, previousEffective, persistenceFailure, null);
|
|
166
|
+
}
|
|
167
|
+
catch (rollbackError) {
|
|
168
|
+
state.stored = operation.read();
|
|
169
|
+
state.inconsistentReason = `rollback failed after ${persistenceFailure}: ${describe(rollbackError)}`;
|
|
170
|
+
return outcome("failed", definition.application, state.stored, state.effective, state.inconsistentReason, state.inconsistentReason);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async flush() {
|
|
175
|
+
await this.#flushStorage();
|
|
176
|
+
const errors = this.#drainErrors?.() ?? [];
|
|
177
|
+
if (errors.length > 0)
|
|
178
|
+
throw new Error(errors.map(value => value.error.message).join("; "));
|
|
179
|
+
}
|
|
180
|
+
async rollback(key, value) {
|
|
181
|
+
const handler = this.#handlers.get(key);
|
|
182
|
+
if (handler === undefined)
|
|
183
|
+
throw new Error(`cannot roll back unbound setting: ${key}`);
|
|
184
|
+
await handler.apply(value);
|
|
185
|
+
this.#requireState(key).effective = value;
|
|
186
|
+
}
|
|
187
|
+
async #restorePersistence(operation, previous, cause) {
|
|
188
|
+
const original = describe(cause);
|
|
189
|
+
try {
|
|
190
|
+
operation.write(previous);
|
|
191
|
+
await this.flush();
|
|
192
|
+
return original;
|
|
193
|
+
}
|
|
194
|
+
catch (rollbackError) {
|
|
195
|
+
return `${original}; persistence rollback failed: ${describe(rollbackError)}`;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
#requireOperation(key) {
|
|
199
|
+
const operation = this.#operations.get(key);
|
|
200
|
+
if (operation === undefined)
|
|
201
|
+
throw new Error(`setting is unavailable: ${key}`);
|
|
202
|
+
return operation;
|
|
203
|
+
}
|
|
204
|
+
#requireState(key) {
|
|
205
|
+
const state = this.#state.get(key);
|
|
206
|
+
if (state === undefined)
|
|
207
|
+
throw new Error(`setting state is unavailable: ${key}`);
|
|
208
|
+
return state;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
export function settingsEffectInventoryDrift(presented, reviewed = Object.keys(PI_SETTING_EFFECTS)) {
|
|
212
|
+
const reviewedSet = new Set(reviewed);
|
|
213
|
+
const presentedSet = new Set(presented);
|
|
214
|
+
const counts = new Map();
|
|
215
|
+
for (const key of reviewed)
|
|
216
|
+
counts.set(key, (counts.get(key) ?? 0) + 1);
|
|
217
|
+
return {
|
|
218
|
+
unmapped: presented.filter(key => !reviewedSet.has(key)),
|
|
219
|
+
stale: reviewed.filter(key => !presentedSet.has(key)),
|
|
220
|
+
duplicated: [...counts].filter(([, count]) => count > 1).map(([key]) => key),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
export function settingsVisualInventoryViolations(presented, reviewed = PI_SETTING_EFFECTS) {
|
|
224
|
+
const violations = [];
|
|
225
|
+
for (const candidate of presented) {
|
|
226
|
+
const key = candidate;
|
|
227
|
+
const definition = reviewed[key];
|
|
228
|
+
if (definition === undefined) {
|
|
229
|
+
violations.push(`${candidate}: missing visual classification`);
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
const visual = definition.visual;
|
|
233
|
+
if (!visual || visual.pinnedSurface.trim().length === 0)
|
|
234
|
+
violations.push(`${candidate}: missing pinned visual source`);
|
|
235
|
+
if (!visual || visual.evidence.trim().length === 0)
|
|
236
|
+
violations.push(`${candidate}: missing independent visual evidence`);
|
|
237
|
+
if (definition.hiddenInBare === true && visual?.class !== "hidden")
|
|
238
|
+
violations.push(`${candidate}: hidden setting declares a visible frame`);
|
|
239
|
+
if (definition.hiddenInBare !== true && visual?.class === "hidden")
|
|
240
|
+
violations.push(`${candidate}: visible setting declares hidden evidence`);
|
|
241
|
+
}
|
|
242
|
+
return violations;
|
|
243
|
+
}
|
|
244
|
+
function outcome(status, application, storedValue, effectiveValue, failure, limitationReason) {
|
|
245
|
+
return { status, application, storedValue, effectiveValue, failure, limitationReason };
|
|
246
|
+
}
|
|
247
|
+
function describe(error) {
|
|
248
|
+
return error instanceof Error ? error.message : String(error);
|
|
249
|
+
}
|