@timurproko/a1 0.1.8-dev.3b54f21 → 0.1.8-dev.407
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +159 -65
- package/bin/cli.js +28 -10
- package/bin/guardian.js +12 -6
- package/bin/module-identity.js +69 -35
- package/bin/pi-tui.d.ts +6 -0
- package/bin/pi-tui.js +28 -0
- package/bin/release-cleanup.js +8 -0
- package/bin/supervisor.js +2 -2
- package/bin/sync-pi-tui-proxy.js +97 -0
- package/bin/ui.js +62 -21
- package/bin/update-recovery.js +274 -0
- package/bin/warmup.js +27 -0
- package/dist/cli/capabilities.d.ts +6 -0
- package/dist/{src/cli → cli}/capabilities.js +1 -1
- package/dist/{src/cli → cli}/dispatch.d.ts +15 -1
- package/dist/cli/dispatch.js +261 -0
- package/dist/cli/package-messages.d.ts +26 -0
- package/dist/cli/package-messages.js +71 -0
- package/dist/{src/cli → cli}/packages.d.ts +11 -2
- package/dist/{src/cli → cli}/packages.js +24 -27
- package/dist/{src/cli → cli}/version-stats.d.ts +6 -0
- package/dist/cli/version-stats.js +112 -0
- package/dist/composition/agent-engine-bridge.d.ts +3 -0
- package/dist/composition/agent-engine-bridge.js +108 -0
- package/dist/composition/index.d.ts +3 -0
- package/dist/composition/index.js +3 -0
- package/dist/composition/owned-ui.d.ts +35 -0
- package/dist/composition/owned-ui.js +118 -0
- package/dist/composition/process.d.ts +16 -0
- package/dist/composition/process.js +45 -0
- package/dist/composition/settings-route-host.d.ts +8 -0
- package/dist/composition/settings-route-host.js +75 -0
- package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +2 -2
- package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +22 -4
- package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +17 -0
- package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +6 -0
- package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
- package/dist/contracts/owned-ui/image-attachments.js +67 -0
- package/dist/contracts/owned-ui/index.d.ts +8 -0
- package/dist/contracts/owned-ui/index.js +8 -0
- package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +123 -0
- package/dist/contracts/owned-ui/prompt-history.d.ts +55 -0
- package/dist/contracts/owned-ui/prompt-history.js +23 -0
- package/dist/contracts/owned-ui/prompt-suggestions.d.ts +3 -0
- package/dist/contracts/owned-ui/prompt-suggestions.js +44 -0
- package/dist/contracts/owned-ui/suggestion-diagnostics.d.ts +22 -0
- package/dist/contracts/owned-ui/suggestion-diagnostics.js +9 -0
- package/dist/contracts/owned-ui/transcript-lifecycle.d.ts +5 -0
- package/dist/contracts/owned-ui/transcript-lifecycle.js +33 -0
- package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +5 -1
- package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +129 -4
- package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +8 -0
- package/dist/{src/features → features}/launch/development-launch.js +11 -3
- package/dist/{src/features → features}/launch/index.d.ts +0 -1
- package/dist/{src/features → features}/launch/index.js +0 -1
- package/dist/features/launch/intent.d.ts +10 -0
- package/dist/features/launch/intent.js +8 -0
- package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -2
- package/dist/{src/features → features}/launch/prepare-launch.js +2 -9
- package/dist/{src/features → features}/launch/profile-paths.d.ts +3 -2
- package/dist/{src/features → features}/launch/profile-paths.js +13 -8
- package/dist/{src/features → features}/launch/runtime-selection.d.ts +2 -5
- package/dist/{src/features → features}/owned-ui/customization.d.ts +3 -1
- package/dist/{src/features → features}/owned-ui/customization.js +3 -1
- package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +2 -1
- package/dist/{src/features → features}/owned-ui/diagnostics.js +1 -0
- package/dist/{src/features → features}/owned-ui/index.d.ts +2 -0
- package/dist/{src/features → features}/owned-ui/index.js +2 -0
- package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
- package/dist/features/owned-ui/project-trust-prompt.js +149 -0
- package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
- package/dist/features/owned-ui/run.js +32 -0
- package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
- package/dist/features/owned-ui/session-fork-prompt.js +34 -0
- package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
- package/dist/{src/features → features}/owned-ui/settings-app.js +105 -56
- package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
- package/dist/features/prompt-history/image-sidecar.js +130 -0
- package/dist/features/prompt-history/index.d.ts +4 -0
- package/dist/features/prompt-history/index.js +3 -0
- package/dist/features/prompt-history/paths.d.ts +5 -0
- package/dist/features/prompt-history/paths.js +17 -0
- package/dist/features/prompt-history/service.d.ts +54 -0
- package/dist/features/prompt-history/service.js +425 -0
- package/dist/features/prompt-history/store.d.ts +16 -0
- package/dist/features/prompt-history/store.js +223 -0
- package/dist/features/prompt-history/worker.d.ts +9 -0
- package/dist/features/prompt-history/worker.js +45 -0
- package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
- package/dist/features/prompt-suggestions/diagnostics.js +82 -0
- package/dist/features/prompt-suggestions/index.d.ts +1 -0
- package/dist/features/prompt-suggestions/index.js +1 -0
- package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
- package/dist/{src/features → features}/workspace/reducer.d.ts +2 -1
- package/dist/{src/features → features}/workspace/reducer.js +2 -1
- package/dist/{src/features → features}/workspace/router.d.ts +2 -1
- package/dist/{src/features → features}/workspace/router.js +1 -0
- package/dist/{src/features → features}/workspace/store.d.ts +2 -1
- package/dist/{src/features → features}/workspace/store.js +1 -0
- package/dist/foundation/launch-context/index.d.ts +59 -0
- package/dist/foundation/launch-context/index.js +136 -0
- package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +2 -0
- package/dist/{src/foundation → foundation}/launch-guardian/main.js +23 -8
- package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +2 -0
- package/dist/{src/foundation → foundation}/lifecycle/index.js +2 -0
- package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +1 -1
- package/dist/{src/foundation → foundation}/lifecycle/model.js +1 -1
- package/dist/foundation/lifecycle/paths.d.ts +30 -0
- package/dist/{src/foundation → foundation}/lifecycle/paths.js +29 -1
- package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
- package/dist/foundation/lifecycle/session-selection.js +39 -0
- package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
- package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
- package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +2 -0
- package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +2 -0
- package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
- package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
- package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
- package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
- package/dist/{src/foundation → foundation}/process-containment/index.d.ts +1 -0
- package/dist/{src/foundation → foundation}/process-containment/index.js +1 -0
- package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +1 -0
- package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +1 -0
- package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +1 -0
- package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +1 -0
- package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +3 -1
- package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +5 -2
- package/dist/{src/foundation → foundation}/protocol/client.d.ts +1 -0
- package/dist/{src/foundation → foundation}/protocol/client.js +1 -0
- package/dist/{src/foundation → foundation}/protocol/messages.d.ts +1 -0
- package/dist/{src/foundation → foundation}/protocol/messages.js +1 -0
- package/dist/foundation/release/bootstrap.d.ts +55 -0
- package/dist/{src/foundation → foundation}/release/bootstrap.js +219 -46
- package/dist/foundation/release/cohort-state.d.ts +157 -0
- package/dist/foundation/release/cohort-state.js +472 -0
- package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
- package/dist/foundation/release/dependency-certification-retention.js +88 -0
- package/dist/foundation/release/dependency-certification.d.ts +24 -0
- package/dist/foundation/release/dependency-certification.js +266 -0
- package/dist/foundation/release/dependency-layer.d.ts +81 -0
- package/dist/foundation/release/dependency-layer.js +466 -0
- package/dist/foundation/release/endpoints.d.ts +20 -0
- package/dist/foundation/release/endpoints.js +50 -0
- package/dist/foundation/release/immutable-platform.d.ts +6 -0
- package/dist/foundation/release/immutable-platform.js +13 -0
- package/dist/{src/foundation → foundation}/release/index.d.ts +6 -0
- package/dist/{src/foundation → foundation}/release/index.js +6 -0
- package/dist/foundation/release/release-gc.d.ts +71 -0
- package/dist/foundation/release/release-gc.js +764 -0
- package/dist/{src/foundation → foundation}/release/release-store.d.ts +9 -3
- package/dist/{src/foundation → foundation}/release/release-store.js +74 -14
- package/dist/{src/foundation → foundation}/release/release.d.ts +6 -1
- package/dist/{src/foundation → foundation}/release/release.js +15 -4
- package/dist/foundation/release/restart-certification.d.ts +68 -0
- package/dist/foundation/release/restart-certification.js +227 -0
- package/dist/foundation/release/update-launch.d.ts +6 -0
- package/dist/foundation/release/update-launch.js +17 -0
- package/dist/foundation/release/update-recovery.d.ts +76 -0
- package/dist/foundation/release/update-recovery.js +356 -0
- package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +11 -0
- package/dist/{src/foundation → foundation}/release/update-transaction.js +13 -1
- package/dist/{src/foundation → foundation}/release/update.d.ts +40 -4
- package/dist/{src/foundation → foundation}/release/update.js +196 -78
- package/dist/foundation/release/warmup.d.ts +3 -0
- package/dist/foundation/release/warmup.js +47 -0
- package/dist/foundation/startup/index.d.ts +1 -0
- package/dist/foundation/startup/index.js +1 -0
- package/dist/foundation/startup/startup-runtime.d.ts +36 -0
- package/dist/foundation/startup/startup-runtime.js +142 -0
- package/dist/{src/foundation → foundation}/storage/control-store.d.ts +2 -1
- package/dist/{src/foundation → foundation}/storage/control-store.js +39 -4
- package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +2 -1
- package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +2 -1
- package/dist/foundation/supervision/index.d.ts +3 -0
- package/dist/foundation/supervision/index.js +3 -0
- package/dist/foundation/supervision/main.d.ts +1 -0
- package/dist/foundation/supervision/main.js +84 -0
- package/dist/foundation/supervision/paths.d.ts +1 -0
- package/dist/foundation/supervision/paths.js +1 -0
- package/dist/foundation/supervision/server.d.ts +51 -0
- package/dist/{src/foundation → foundation}/supervision/server.js +142 -20
- package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
- package/dist/foundation/terminal-cleanup/fatal-exit.js +85 -0
- package/dist/foundation/terminal-cleanup/index.d.ts +2 -0
- package/dist/foundation/terminal-cleanup/index.js +2 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
- package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
- package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
- package/dist/integrations/pi/components/history-editor-loader.js +5 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +2 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +2 -1
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
- package/dist/integrations/pi/components/owned-editor-ux.js +1093 -0
- package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
- package/dist/integrations/pi/components/path-word-ranges.js +37 -0
- package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +1 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +1 -0
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +297 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +4 -4
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +58 -23
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +43 -0
- package/dist/integrations/pi/components/shell-presenters-info.js +114 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +174 -170
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +8 -4
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +10 -6
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +213 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +5 -2
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +15 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +43 -0
- package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
- package/dist/integrations/pi/components/tool-image-presentation.js +86 -0
- package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
- package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
- package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
- package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +11 -2
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +41 -3
- package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +42 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +40 -0
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +166 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +1 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +3 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +3 -2
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +12 -7
- package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +61 -0
- package/dist/integrations/pi/components/upstream/components/tool-execution.js +344 -0
- package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +280 -0
- package/dist/integrations/pi/components/upstream/history/editor-core.js +2062 -0
- package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +32 -0
- package/dist/integrations/pi/components/upstream/history/kill-ring.js +48 -0
- package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
- package/dist/integrations/pi/components/upstream/history/printable-key.js +40 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +14 -0
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +28 -0
- package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +22 -0
- package/dist/integrations/pi/components/upstream/history/undo-stack.js +36 -0
- package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
- package/dist/integrations/pi/components/upstream/history/word-navigation.js +100 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +74 -6
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +1340 -228
- package/dist/integrations/pi/engine/changelog.d.ts +2 -0
- package/dist/integrations/pi/engine/changelog.js +63 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +4 -2
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +15 -5
- package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
- package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +4 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +4 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +2 -1
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +1 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +32 -26
- package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
- package/dist/integrations/pi/engine/pending-delivery.js +158 -0
- package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
- package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +2 -1
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +1 -0
- package/dist/integrations/pi/engine/resources/changelog.json +12 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +19 -1
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +56 -5
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +4 -2
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +19 -4
- package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
- package/dist/integrations/pi/engine/session-selection.js +90 -0
- package/dist/integrations/pi/engine/settings-effects.d.ts +66 -0
- package/dist/integrations/pi/engine/settings-effects.js +249 -0
- package/dist/integrations/pi/engine/settings-integration.d.ts +43 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +102 -108
- package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
- package/dist/integrations/pi/engine/tool-rendering.js +145 -0
- package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
- package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
- package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +3 -2
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +1 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +19 -2
- package/dist/integrations/pi/session-ui/clipboard-diagnostics.d.ts +16 -0
- package/dist/integrations/pi/session-ui/clipboard-diagnostics.js +65 -0
- package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
- package/dist/integrations/pi/session-ui/clipboard-image.js +38 -0
- package/dist/integrations/pi/session-ui/editor-hyperlink-budget.d.ts +9 -0
- package/dist/integrations/pi/session-ui/editor-hyperlink-budget.js +23 -0
- package/dist/integrations/pi/session-ui/image-preparation-client.d.ts +20 -0
- package/dist/integrations/pi/session-ui/image-preparation-client.js +145 -0
- package/dist/integrations/pi/session-ui/image-preparation.d.ts +18 -0
- package/dist/integrations/pi/session-ui/image-preparation.js +126 -0
- package/dist/integrations/pi/session-ui/image-source.d.ts +13 -0
- package/dist/integrations/pi/session-ui/image-source.js +171 -0
- package/dist/integrations/pi/session-ui/image-worker.d.ts +17 -0
- package/dist/integrations/pi/session-ui/image-worker.js +23 -0
- package/dist/integrations/pi/session-ui/index.d.ts +5 -0
- package/dist/integrations/pi/session-ui/index.js +5 -0
- package/dist/integrations/pi/session-ui/paste-executor.d.ts +10 -0
- package/dist/integrations/pi/session-ui/paste-executor.js +232 -0
- package/dist/integrations/pi/session-ui/paste-helper.d.ts +1 -0
- package/dist/integrations/pi/session-ui/paste-helper.js +173 -0
- package/dist/integrations/pi/session-ui/paste-preparation-client.d.ts +16 -0
- package/dist/integrations/pi/session-ui/paste-preparation-client.js +159 -0
- package/dist/integrations/pi/session-ui/paste-protocol.d.ts +78 -0
- package/dist/integrations/pi/session-ui/paste-protocol.js +18 -0
- package/dist/integrations/pi/session-ui/paste-text-preparation.d.ts +20 -0
- package/dist/integrations/pi/session-ui/paste-text-preparation.js +134 -0
- package/dist/integrations/pi/session-ui/paste-text-worker.d.ts +1 -0
- package/dist/integrations/pi/session-ui/paste-text-worker.js +12 -0
- package/dist/integrations/pi/session-ui/path-chip-presentation.d.ts +7 -0
- package/dist/integrations/pi/session-ui/path-chip-presentation.js +24 -0
- package/dist/integrations/pi/session-ui/prompt-chips.d.ts +72 -0
- package/dist/integrations/pi/session-ui/prompt-chips.js +503 -0
- package/dist/integrations/pi/session-ui/prompt-history-controller.d.ts +36 -0
- package/dist/integrations/pi/session-ui/prompt-history-controller.js +170 -0
- package/dist/integrations/pi/session-ui/prompt-suggestion-controller.d.ts +35 -0
- package/dist/integrations/pi/session-ui/prompt-suggestion-controller.js +207 -0
- package/dist/integrations/pi/session-ui/response-copy-coordinator.d.ts +27 -0
- package/dist/integrations/pi/session-ui/response-copy-coordinator.js +189 -0
- package/dist/integrations/pi/session-ui/response-copy-helper.d.ts +1 -0
- package/dist/integrations/pi/session-ui/response-copy-helper.js +122 -0
- package/dist/integrations/pi/session-ui/response-copy-protocol.d.ts +56 -0
- package/dist/integrations/pi/session-ui/response-copy-protocol.js +5 -0
- package/dist/integrations/pi/session-ui/response-copy-transport.d.ts +31 -0
- package/dist/integrations/pi/session-ui/response-copy-transport.js +187 -0
- package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
- package/dist/integrations/pi/session-ui/route-host.js +1 -0
- package/dist/integrations/pi/session-ui/session-shell-root.d.ts +221 -0
- package/dist/integrations/pi/session-ui/session-shell-root.js +1305 -0
- package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
- package/dist/integrations/pi/session-ui/session-shell.js +1792 -0
- package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +56 -0
- package/dist/integrations/pi/session-ui/session-viewport-controller.js +569 -0
- package/dist/integrations/pi/session-ui/stream-presentation-coalescer.d.ts +29 -0
- package/dist/integrations/pi/session-ui/stream-presentation-coalescer.js +79 -0
- package/dist/integrations/pi/session-ui/system-clipboard.d.ts +20 -0
- package/dist/integrations/pi/session-ui/system-clipboard.js +156 -0
- package/dist/integrations/pi/session-ui/text-paste.d.ts +5 -0
- package/dist/integrations/pi/session-ui/text-paste.js +16 -0
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +10 -1
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +255 -11
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +32 -6
- package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +81 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +424 -0
- package/dist/integrations/pi/tui-runtime/index.d.ts +7 -0
- package/dist/integrations/pi/tui-runtime/index.js +7 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +13 -0
- package/dist/integrations/pi/tui-runtime/mouse-report-input.js +59 -0
- package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
- package/dist/integrations/pi/tui-runtime/overlay-geometry.js +159 -0
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
- package/dist/native/darwin-arm64/manifest.json +4 -4
- package/dist/native/darwin-arm64/process-guardian +0 -0
- package/dist/native/linux-x64/manifest.json +3 -3
- package/dist/native/linux-x64/process-guardian +0 -0
- package/dist/native/win32-x64/manifest.json +3 -3
- package/dist/native/win32-x64/process-guardian.exe +0 -0
- package/dist/{src/product-identity.d.ts → product-identity.d.ts} +4 -4
- package/dist/{src/product-identity.js → product-identity.js} +7 -38
- package/dist/{src/product-identity.json → product-identity.json} +13 -27
- package/dist/runtime-payload-inventory.json +122333 -0
- package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +23 -1
- package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
- package/dist/{src/foundation/ui-apps → ui/apps}/host.js +14 -10
- package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +1 -0
- package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +1 -0
- package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +5 -3
- package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +1 -0
- package/dist/{src/foundation/ui-components → ui/components}/frame.js +1 -0
- package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +7 -0
- package/dist/{src/foundation/ui-components → ui/components}/index.js +7 -0
- package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +2 -8
- package/dist/{src/foundation/ui-components → ui/components}/line-input.js +7 -28
- package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -6
- package/dist/{src/foundation/ui-components → ui/components}/list-view.js +14 -7
- package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +10 -0
- package/dist/{src/foundation/ui-components → ui/components}/mouse.js +24 -0
- package/dist/ui/components/progress-status.d.ts +2 -0
- package/dist/ui/components/progress-status.js +4 -0
- package/dist/ui/components/prompt-input.d.ts +32 -0
- package/dist/ui/components/prompt-input.js +54 -0
- package/dist/ui/components/prompt-row.d.ts +14 -0
- package/dist/ui/components/prompt-row.js +20 -0
- package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +26 -0
- package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +35 -0
- package/dist/ui/components/selection-copy.d.ts +24 -0
- package/dist/ui/components/selection-copy.js +39 -0
- package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +1 -0
- package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +1 -0
- package/dist/ui/components/spans.d.ts +28 -0
- package/dist/ui/components/spans.js +266 -0
- package/dist/ui/components/submitted-prompt.d.ts +23 -0
- package/dist/ui/components/submitted-prompt.js +50 -0
- package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -5
- package/dist/{src/foundation/ui-components → ui/components}/surface.js +1 -5
- package/dist/ui/components/text-selection.d.ts +62 -0
- package/dist/ui/components/text-selection.js +210 -0
- package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
- package/dist/{src/foundation/ui-components → ui/components}/text.js +67 -5
- package/dist/ui/components/transcript-viewport.d.ts +173 -0
- package/dist/ui/components/transcript-viewport.js +753 -0
- package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
- package/dist/ui/components/visible-hyperlinks.js +97 -0
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
- package/dist/ui/settings/declarations.js +94 -0
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +1 -1
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +28 -2
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +6 -19
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +41 -22
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
- package/dist/ui/settings/session.js +164 -0
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +1 -0
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +2 -1
- package/docs/architecture/boundaries.md +14 -10
- package/docs/architecture/code-documentation.md +77 -0
- package/docs/architecture/history-editor-provenance.md +100 -0
- package/docs/architecture/internal-naming.md +91 -0
- package/docs/architecture/process-guardian-provenance.md +3 -1
- package/docs/architecture/project-structure.md +69 -30
- package/docs/architecture/prompt-suggestions.md +68 -0
- package/docs/architecture/resource-and-data-policy.md +28 -2
- package/docs/architecture/response-copy-delivery.md +83 -0
- package/docs/architecture/tool-image-presentation.md +62 -0
- package/docs/architecture/toolchain.md +24 -10
- package/docs/architecture/ui-reference-provenance.md +59 -5
- package/docs/ci-release-runbook.md +236 -79
- package/docs/features/launch-profiles.md +24 -17
- package/docs/features/modal-content-interaction.md +37 -0
- package/docs/features/prompt-history.md +149 -0
- package/docs/local-worktree-cleanup.md +128 -0
- package/docs/manual-code-streaming-cleanup.md +88 -0
- package/docs/manual-ghost-link-baseline.md +89 -0
- package/docs/manual-launch-instance-acceptance.md +12 -35
- package/docs/manual-owned-ui-checkpoint.md +78 -0
- package/docs/manual-pi-boundary-candidate.md +4 -5
- package/docs/manual-terminal-colour-check.md +4 -3
- package/docs/openspec-archive-automation.md +128 -0
- package/docs/repository-governance-live-acceptance.md +77 -0
- package/package.json +45 -28
- package/dist/src/cli/capabilities.d.ts +0 -15
- package/dist/src/cli/dispatch.js +0 -142
- package/dist/src/cli/version-stats.js +0 -72
- package/dist/src/composition/index.d.ts +0 -48
- package/dist/src/composition/index.js +0 -258
- package/dist/src/features/launch/intent.d.ts +0 -7
- package/dist/src/features/launch/intent.js +0 -4
- package/dist/src/features/launch/profiles.d.ts +0 -12
- package/dist/src/features/launch/profiles.js +0 -26
- package/dist/src/features/owned-ui/run.js +0 -15
- package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
- package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
- package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
- package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
- package/dist/src/foundation/owned-ui-settings/session.js +0 -145
- package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
- package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
- package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
- package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
- package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
- package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
- package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
- package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
- package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
- package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
- package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
- package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
- package/dist/src/foundation/release/bootstrap.d.ts +0 -29
- package/dist/src/foundation/release/cohort-state.d.ts +0 -70
- package/dist/src/foundation/release/cohort-state.js +0 -202
- package/dist/src/foundation/release/release-gc.d.ts +0 -5
- package/dist/src/foundation/release/release-gc.js +0 -16
- package/dist/src/foundation/supervision/index.d.ts +0 -3
- package/dist/src/foundation/supervision/index.js +0 -3
- package/dist/src/foundation/supervision/main.d.ts +0 -1
- package/dist/src/foundation/supervision/main.js +0 -41
- package/dist/src/foundation/supervision/paths.d.ts +0 -1
- package/dist/src/foundation/supervision/paths.js +0 -1
- package/dist/src/foundation/supervision/server.d.ts +0 -22
- package/dist/src/foundation/ui-components/spans.d.ts +0 -7
- package/dist/src/foundation/ui-components/spans.js +0 -59
- package/docs/manual-transparent-checkpoint.md +0 -53
- /package/dist/{src/cli → cli}/index.d.ts +0 -0
- /package/dist/{src/cli → cli}/index.js +0 -0
- /package/dist/{src/cli → cli}/version.d.ts +0 -0
- /package/dist/{src/cli → cli}/version.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
- /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
- /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
- /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
- /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
- /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
- /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
- /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
- /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
- /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
- /package/dist/{src/features → features}/workspace/index.js +0 -0
- /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
- /package/dist/{src/features → features}/workspace/presentation.js +0 -0
- /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
- /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
- /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
- /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
- /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
- /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
- /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
- /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
- /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
- /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
- /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → integrations/pi/components/editor-interaction.js} +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → integrations/pi/components/prompt-input-port.js} +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
- /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
- /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
- /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
- /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
- /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
- /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
- /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface VisibleHyperlinkRange {
|
|
2
|
+
readonly from: number;
|
|
3
|
+
readonly to: number;
|
|
4
|
+
readonly target: string;
|
|
5
|
+
readonly kind: "explicit" | "candidate";
|
|
6
|
+
}
|
|
7
|
+
export interface VisibleHyperlinkRow {
|
|
8
|
+
readonly ranges: readonly VisibleHyperlinkRange[];
|
|
9
|
+
/**
|
|
10
|
+
* Whether the row declares a terminal hyperlink of its own. Only a declared link gives the
|
|
11
|
+
* terminal per-cell link identity that moving the row can misattribute, so movement safety
|
|
12
|
+
* asks this rather than counting ranges: a candidate range is host-hover text such as
|
|
13
|
+
* `obj.method` or `./src/index.ts`, which ordinary code produces on nearly every row.
|
|
14
|
+
*/
|
|
15
|
+
readonly hasExplicitLink: boolean;
|
|
16
|
+
/** False for unclosed links, malformed escapes, images, or row-moving controls. */
|
|
17
|
+
readonly replaySafe: boolean;
|
|
18
|
+
readonly width: number;
|
|
19
|
+
/** Paint identity includes labels, not just targets; it never changes source bytes. */
|
|
20
|
+
readonly signature: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Reads final visible row geometry without decorating text. Candidate ranges
|
|
24
|
+
* only invalidate host-hover paint; they never invent an explicit link target.
|
|
25
|
+
*/
|
|
26
|
+
export declare function readVisibleHyperlinks(line: string, widthOf?: (text: string) => number): VisibleHyperlinkRow;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { displayWidth } from "./text.js";
|
|
2
|
+
/** Linear tokenization: a valid large OSC target must not exhaust the regular-expression engine's stack. */
|
|
3
|
+
function* rowTokens(line) {
|
|
4
|
+
const oscBoundary = /[\u0007\u001b]/g;
|
|
5
|
+
for (let offset = 0; offset < line.length;) {
|
|
6
|
+
if (line.charCodeAt(offset) !== 27) {
|
|
7
|
+
const next = line.indexOf("\u001b", offset);
|
|
8
|
+
const end = next < 0 ? line.length : next;
|
|
9
|
+
yield line.slice(offset, end);
|
|
10
|
+
offset = end;
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
let end = offset + 1;
|
|
14
|
+
if (line[offset + 1] === "[") {
|
|
15
|
+
let cursor = offset + 2;
|
|
16
|
+
while (line.charCodeAt(cursor) >= 0x30 && line.charCodeAt(cursor) <= 0x3f)
|
|
17
|
+
cursor++;
|
|
18
|
+
while (line.charCodeAt(cursor) >= 0x20 && line.charCodeAt(cursor) <= 0x2f)
|
|
19
|
+
cursor++;
|
|
20
|
+
if (line.charCodeAt(cursor) >= 0x40 && line.charCodeAt(cursor) <= 0x7e)
|
|
21
|
+
end = cursor + 1;
|
|
22
|
+
}
|
|
23
|
+
else if (line[offset + 1] === "]") {
|
|
24
|
+
// Performance: search for one boundary, not a quantified alternation over the entire URI.
|
|
25
|
+
oscBoundary.lastIndex = offset + 2;
|
|
26
|
+
const boundary = oscBoundary.exec(line);
|
|
27
|
+
if (boundary?.[0] === "\u0007")
|
|
28
|
+
end = boundary.index + 1;
|
|
29
|
+
else if (boundary !== null && line[boundary.index + 1] === "\\")
|
|
30
|
+
end = boundary.index + 2;
|
|
31
|
+
}
|
|
32
|
+
yield line.slice(offset, end);
|
|
33
|
+
offset = end;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const SGR = /^\u001b\[[\d;:]*m$/u;
|
|
37
|
+
const SEMANTIC_ZONE = /^\u001b\]133;[ABC](?:\u0007|\u001b\\)$/u;
|
|
38
|
+
// Platform: this is a conservative cleanup detector, NOT a link-activation
|
|
39
|
+
// parser. Hosts recognize URLs, domains and file-like labels without OSC 8.
|
|
40
|
+
const CANDIDATE = /(?:[a-z][a-z\d+.-]*:\/\/[^\s<>"']+|www\.[^\s<>"']+|(?:[a-z]:[\\/]|\.{1,2}[\\/])[^\s<>"']+|[\p{L}\p{N}_-]+(?:\.\p{L}[\p{L}\p{N}_-]+)+(?:[\\/][^\s<>"']+)?)/giu;
|
|
41
|
+
/**
|
|
42
|
+
* Reads final visible row geometry without decorating text. Candidate ranges
|
|
43
|
+
* only invalidate host-hover paint; they never invent an explicit link target.
|
|
44
|
+
*/
|
|
45
|
+
export function readVisibleHyperlinks(line, widthOf = displayWidth) {
|
|
46
|
+
const ranges = [];
|
|
47
|
+
let plain = "";
|
|
48
|
+
let column = 0;
|
|
49
|
+
let active;
|
|
50
|
+
let replaySafe = true;
|
|
51
|
+
const finish = () => {
|
|
52
|
+
if (active !== undefined && column > active.from) {
|
|
53
|
+
ranges.push({ from: active.from, to: column, target: active.target, kind: "explicit" });
|
|
54
|
+
}
|
|
55
|
+
active = undefined;
|
|
56
|
+
};
|
|
57
|
+
for (const token of rowTokens(line)) {
|
|
58
|
+
if (token.startsWith("\u001b")) {
|
|
59
|
+
const separator = token.startsWith("\u001b]8;") ? token.indexOf(";", 4) : -1;
|
|
60
|
+
if (separator !== -1) {
|
|
61
|
+
finish();
|
|
62
|
+
const target = token.slice(separator + 1, token.endsWith("\u0007") ? -1 : -2);
|
|
63
|
+
if (target)
|
|
64
|
+
active = { from: column, target };
|
|
65
|
+
}
|
|
66
|
+
else if (!SGR.test(token) && !SEMANTIC_ZONE.test(token))
|
|
67
|
+
replaySafe = false;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
if (/[\u0000-\u001f\u007f]/u.test(token))
|
|
71
|
+
replaySafe = false;
|
|
72
|
+
plain += token;
|
|
73
|
+
column += widthOf(token);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (active !== undefined) {
|
|
77
|
+
replaySafe = false;
|
|
78
|
+
finish();
|
|
79
|
+
}
|
|
80
|
+
for (const match of plain.matchAll(CANDIDATE)) {
|
|
81
|
+
const from = widthOf(plain.slice(0, match.index));
|
|
82
|
+
const to = from + widthOf(match[0]);
|
|
83
|
+
if (!ranges.some(range => from < range.to && to > range.from)) {
|
|
84
|
+
ranges.push({ from, to, target: match[0], kind: "candidate" });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
ranges.sort((left, right) => left.from - right.from);
|
|
88
|
+
return {
|
|
89
|
+
ranges,
|
|
90
|
+
hasExplicitLink: ranges.some(range => range.kind === "explicit"),
|
|
91
|
+
replaySafe,
|
|
92
|
+
width: column,
|
|
93
|
+
// Rationale: a path with spaces or a wrapped host match may extend beyond
|
|
94
|
+
// the conservative candidate. Changes anywhere in that row invalidate it.
|
|
95
|
+
signature: ranges.length === 0 ? "" : JSON.stringify([ranges, plain]),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
export declare const OWNED_UI_SETTINGS_VERSION =
|
|
1
|
+
export declare const OWNED_UI_SETTINGS_VERSION = 4;
|
|
2
2
|
export type OwnedUiSettingValue = string | number | boolean;
|
|
3
3
|
export type OwnedUiSettingApplication = "live" | "restart";
|
|
4
4
|
export interface OwnedUiSettingDeclaration {
|
|
5
5
|
readonly id: string;
|
|
6
|
+
/** Optional presentation label; the id remains the persistence key. */
|
|
7
|
+
readonly label?: string;
|
|
8
|
+
/** Optional settings-screen group for related owned controls. */
|
|
9
|
+
readonly section?: {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly title: string;
|
|
12
|
+
};
|
|
6
13
|
readonly description: string;
|
|
7
14
|
readonly application: OwnedUiSettingApplication;
|
|
8
15
|
readonly defaultValue: OwnedUiSettingValue;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
export const OWNED_UI_SETTINGS_VERSION = 4;
|
|
2
|
+
const MAX_ID_LENGTH = 64;
|
|
3
|
+
const ID_PATTERN = /^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*)*$/;
|
|
4
|
+
const SCROLL_SECTION = Object.freeze({ id: "scroll", title: "Scroll" });
|
|
5
|
+
export const OWNED_UI_SETTING_DECLARATIONS = Object.freeze([
|
|
6
|
+
Object.freeze({
|
|
7
|
+
id: "scrollbarAppearance",
|
|
8
|
+
label: "Scrollbar mode",
|
|
9
|
+
section: SCROLL_SECTION,
|
|
10
|
+
description: "When the session transcript scrollbar is visible.",
|
|
11
|
+
application: "live",
|
|
12
|
+
defaultValue: "auto",
|
|
13
|
+
allowedValues: Object.freeze(["auto", "always", "hidden"]),
|
|
14
|
+
}),
|
|
15
|
+
Object.freeze({
|
|
16
|
+
id: "scrollbarStyle",
|
|
17
|
+
label: "Scrollbar style",
|
|
18
|
+
section: SCROLL_SECTION,
|
|
19
|
+
description: "Visual weight of the session transcript scrollbar.",
|
|
20
|
+
application: "live",
|
|
21
|
+
defaultValue: "thin",
|
|
22
|
+
allowedValues: Object.freeze(["thin", "thick"]),
|
|
23
|
+
}),
|
|
24
|
+
Object.freeze({
|
|
25
|
+
id: "scrollbarSpeed",
|
|
26
|
+
label: "Speed",
|
|
27
|
+
section: SCROLL_SECTION,
|
|
28
|
+
description: "Distance moved by each session transcript wheel event.",
|
|
29
|
+
application: "live",
|
|
30
|
+
defaultValue: "normal",
|
|
31
|
+
allowedValues: Object.freeze(["normal", "fast", "high"]),
|
|
32
|
+
}),
|
|
33
|
+
Object.freeze({
|
|
34
|
+
id: "promptHistoryEnabled",
|
|
35
|
+
label: "Persistent history",
|
|
36
|
+
section: Object.freeze({ id: "history", title: "History" }),
|
|
37
|
+
description: "Retain reusable prompts across sessions. Applies on next start; disabling does not erase saved history or stop existing instances.",
|
|
38
|
+
application: "restart",
|
|
39
|
+
defaultValue: true,
|
|
40
|
+
allowedValues: Object.freeze([true, false]),
|
|
41
|
+
}),
|
|
42
|
+
Object.freeze({
|
|
43
|
+
id: "promptHistoryMaxItems",
|
|
44
|
+
label: "History limit",
|
|
45
|
+
section: Object.freeze({ id: "history", title: "History" }),
|
|
46
|
+
description: "Maximum recent unique prompts after next start. Byte limits also apply; increasing the limit cannot restore pruned entries.",
|
|
47
|
+
application: "restart",
|
|
48
|
+
defaultValue: 100,
|
|
49
|
+
allowedValues: Object.freeze([10, 20, 30, 40, 50, 60, 70, 80, 90, 100]),
|
|
50
|
+
}),
|
|
51
|
+
Object.freeze({
|
|
52
|
+
id: "promptSuggestions",
|
|
53
|
+
label: "Prompt suggestions",
|
|
54
|
+
section: Object.freeze({ id: "agent", title: "Agent" }),
|
|
55
|
+
description: "Predict likely next prompts with one additional background request using the selected model.",
|
|
56
|
+
application: "live",
|
|
57
|
+
defaultValue: true,
|
|
58
|
+
allowedValues: Object.freeze([true, false]),
|
|
59
|
+
}),
|
|
60
|
+
]);
|
|
61
|
+
export function assertOwnedUiSettingDeclarations(declarations) {
|
|
62
|
+
const seen = new Set();
|
|
63
|
+
for (const declaration of declarations) {
|
|
64
|
+
if (!ID_PATTERN.test(declaration.id) || declaration.id.length > MAX_ID_LENGTH) {
|
|
65
|
+
throw new Error(`owned UI setting id is not a bounded camelCase identifier: ${declaration.id}`);
|
|
66
|
+
}
|
|
67
|
+
if (seen.has(declaration.id))
|
|
68
|
+
throw new Error(`duplicate owned UI setting id: ${declaration.id}`);
|
|
69
|
+
seen.add(declaration.id);
|
|
70
|
+
if (declaration.label !== undefined && declaration.label.trim().length === 0) {
|
|
71
|
+
throw new Error(`owned UI setting has an empty label: ${declaration.id}`);
|
|
72
|
+
}
|
|
73
|
+
if (declaration.section !== undefined
|
|
74
|
+
&& (declaration.section.id.trim().length === 0 || declaration.section.title.trim().length === 0)) {
|
|
75
|
+
throw new Error(`owned UI setting has an invalid section: ${declaration.id}`);
|
|
76
|
+
}
|
|
77
|
+
if (declaration.description.trim().length === 0) {
|
|
78
|
+
throw new Error(`owned UI setting has no description: ${declaration.id}`);
|
|
79
|
+
}
|
|
80
|
+
if (declaration.allowedValues.length === 0) {
|
|
81
|
+
throw new Error(`owned UI setting declares no allowed values: ${declaration.id}`);
|
|
82
|
+
}
|
|
83
|
+
const types = new Set(declaration.allowedValues.map(value => typeof value));
|
|
84
|
+
if (types.size !== 1) {
|
|
85
|
+
throw new Error(`owned UI setting mixes allowed value types: ${declaration.id}`);
|
|
86
|
+
}
|
|
87
|
+
if (!declaration.allowedValues.includes(declaration.defaultValue)) {
|
|
88
|
+
throw new Error(`owned UI setting default is not an allowed value: ${declaration.id}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export function findOwnedUiSettingDeclaration(declarations, id) {
|
|
93
|
+
return declarations.find(declaration => declaration.id === id) ?? null;
|
|
94
|
+
}
|
|
@@ -6,7 +6,7 @@ export interface OwnedUiSettingsMigration {
|
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Ordered, contiguous migrations ending at OWNED_UI_SETTINGS_VERSION. Version 1
|
|
9
|
-
* is the first stored shape
|
|
9
|
+
* is the first stored shape.
|
|
10
10
|
*/
|
|
11
11
|
export declare const OWNED_UI_SETTINGS_MIGRATIONS: readonly OwnedUiSettingsMigration[];
|
|
12
12
|
export declare function assertOwnedUiSettingsMigrations(migrations: readonly OwnedUiSettingsMigration[], currentVersion?: number): void;
|
|
@@ -1,9 +1,35 @@
|
|
|
1
1
|
import { OWNED_UI_SETTINGS_VERSION } from "./declarations.js";
|
|
2
2
|
/**
|
|
3
3
|
* Ordered, contiguous migrations ending at OWNED_UI_SETTINGS_VERSION. Version 1
|
|
4
|
-
* is the first stored shape
|
|
4
|
+
* is the first stored shape.
|
|
5
5
|
*/
|
|
6
|
-
export const OWNED_UI_SETTINGS_MIGRATIONS = Object.freeze([
|
|
6
|
+
export const OWNED_UI_SETTINGS_MIGRATIONS = Object.freeze([
|
|
7
|
+
Object.freeze({
|
|
8
|
+
to: 2,
|
|
9
|
+
description: "Rename scrollbar speed high to fast.",
|
|
10
|
+
migrate(values) {
|
|
11
|
+
return values.scrollbarSpeed === "high"
|
|
12
|
+
? { ...values, scrollbarSpeed: "fast" }
|
|
13
|
+
: { ...values };
|
|
14
|
+
},
|
|
15
|
+
}),
|
|
16
|
+
Object.freeze({
|
|
17
|
+
to: 3,
|
|
18
|
+
description: "Match Pi's auto scrollbar appearance name and ordering.",
|
|
19
|
+
migrate(values) {
|
|
20
|
+
return values.scrollbarAppearance === "hover"
|
|
21
|
+
? { ...values, scrollbarAppearance: "auto" }
|
|
22
|
+
: { ...values };
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
Object.freeze({
|
|
26
|
+
to: 4,
|
|
27
|
+
description: "Introduce contextual prompt suggestions with an enabled default.",
|
|
28
|
+
migrate(values) {
|
|
29
|
+
return { ...values };
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
]);
|
|
7
33
|
export function assertOwnedUiSettingsMigrations(migrations, currentVersion = OWNED_UI_SETTINGS_VERSION) {
|
|
8
34
|
const firstProduced = currentVersion - migrations.length + 1;
|
|
9
35
|
if (migrations.length > 0 && firstProduced < 2) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AgentSettingApplicationBoundary, AgentSettingDescriptor } from "../../contracts/agent-engine/index.js";
|
|
1
2
|
import type { OwnedUiSettingValue } from "./declarations.js";
|
|
2
3
|
import type { OwnedUiSettingsResolution } from "./resolution.js";
|
|
3
4
|
export type OwnedUiSettingsBackend = "a1" | "agent";
|
|
@@ -9,8 +10,10 @@ export interface OwnedUiSettingsEntry {
|
|
|
9
10
|
readonly description: string | null;
|
|
10
11
|
/** Present when the value is a scalar the surface can offer as a choice. */
|
|
11
12
|
readonly value: OwnedUiSettingValue | null;
|
|
12
|
-
/** Raw value as reported by its backend, for entries the surface can only display. */
|
|
13
|
+
/** Raw stored value as reported by its backend, for entries the surface can only display. */
|
|
13
14
|
readonly rawValue: unknown;
|
|
15
|
+
readonly storedValue: unknown;
|
|
16
|
+
readonly effectiveValue: unknown;
|
|
14
17
|
readonly editable: boolean;
|
|
15
18
|
readonly choices: readonly OwnedUiSettingValue[] | null;
|
|
16
19
|
/** True when the value is a structured object edited through its own surface. */
|
|
@@ -26,7 +29,7 @@ export interface OwnedUiSettingsEntry {
|
|
|
26
29
|
readonly fallback: boolean;
|
|
27
30
|
}[];
|
|
28
31
|
readonly origin: "default" | "stored" | "engine";
|
|
29
|
-
readonly application:
|
|
32
|
+
readonly application: AgentSettingApplicationBoundary;
|
|
30
33
|
}
|
|
31
34
|
export interface OwnedUiSettingsSection {
|
|
32
35
|
readonly id: string;
|
|
@@ -38,23 +41,7 @@ export interface OwnedUiSettingsSection {
|
|
|
38
41
|
readonly readOnlyReason: string | null;
|
|
39
42
|
}
|
|
40
43
|
export interface AgentSettingsSnapshot {
|
|
41
|
-
readonly descriptors: readonly
|
|
42
|
-
readonly key: string;
|
|
43
|
-
readonly valueType: "boolean" | "number" | "string" | "enum" | "json";
|
|
44
|
-
readonly writable: boolean;
|
|
45
|
-
readonly choices?: readonly unknown[];
|
|
46
|
-
readonly label?: string;
|
|
47
|
-
readonly description?: string;
|
|
48
|
-
readonly minimum?: number;
|
|
49
|
-
readonly maximum?: number;
|
|
50
|
-
readonly flags?: readonly {
|
|
51
|
-
readonly key: string;
|
|
52
|
-
readonly label: string;
|
|
53
|
-
readonly description: string;
|
|
54
|
-
readonly fallback: boolean;
|
|
55
|
-
}[];
|
|
56
|
-
}[];
|
|
57
|
-
readonly values: Readonly<Record<string, unknown>>;
|
|
44
|
+
readonly descriptors: readonly AgentSettingDescriptor[];
|
|
58
45
|
/** Whether the engine advertises settings write capability at all. */
|
|
59
46
|
readonly writeAdvertised: boolean;
|
|
60
47
|
/** Set when the engine could not report its settings. */
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
export const AGENT_SECTION_ID = "agent";
|
|
2
2
|
const BOOLEAN_CHOICES = Object.freeze([true, false]);
|
|
3
3
|
export function buildOwnedUiSettingsSections(input) {
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
title: "A1"
|
|
7
|
-
|
|
4
|
+
const grouped = new Map();
|
|
5
|
+
for (const setting of input.resolution.settings) {
|
|
6
|
+
const section = setting.declaration.section ?? { id: "a1", title: "A1" };
|
|
7
|
+
const group = grouped.get(section.id) ?? { title: section.title, entries: [] };
|
|
8
|
+
group.entries.push({
|
|
8
9
|
id: setting.declaration.id,
|
|
9
|
-
label: null,
|
|
10
|
+
label: setting.declaration.label ?? null,
|
|
10
11
|
backend: "a1",
|
|
11
12
|
description: setting.declaration.description,
|
|
12
13
|
value: setting.value,
|
|
13
14
|
rawValue: setting.value,
|
|
15
|
+
storedValue: setting.value,
|
|
16
|
+
effectiveValue: setting.value,
|
|
14
17
|
editable: true,
|
|
15
18
|
structured: false,
|
|
16
19
|
minimum: null,
|
|
@@ -18,12 +21,28 @@ export function buildOwnedUiSettingsSections(input) {
|
|
|
18
21
|
flags: [],
|
|
19
22
|
choices: setting.declaration.allowedValues,
|
|
20
23
|
origin: setting.source,
|
|
21
|
-
application: setting.declaration.application,
|
|
22
|
-
})
|
|
24
|
+
application: setting.declaration.application === "restart" ? "next-start" : "live",
|
|
25
|
+
});
|
|
26
|
+
grouped.set(section.id, group);
|
|
27
|
+
}
|
|
28
|
+
const ownedAgentEntries = grouped.get(AGENT_SECTION_ID)?.entries ?? [];
|
|
29
|
+
grouped.delete(AGENT_SECTION_ID);
|
|
30
|
+
const ownedSections = [...grouped].map(([id, group]) => ({
|
|
31
|
+
id,
|
|
32
|
+
title: group.title,
|
|
33
|
+
entries: Object.freeze(group.entries),
|
|
34
|
+
unavailableReason: null,
|
|
35
|
+
readOnlyReason: null,
|
|
36
|
+
}));
|
|
37
|
+
const agent = agentSection(input.agent);
|
|
38
|
+
// Invariant: presentation grouping does not transfer ownership or engine availability to owned entries.
|
|
39
|
+
const combinedAgent = ownedAgentEntries.length === 0 ? agent : {
|
|
40
|
+
...agent,
|
|
41
|
+
entries: Object.freeze([...agent.entries, ...ownedAgentEntries]),
|
|
23
42
|
unavailableReason: null,
|
|
24
43
|
readOnlyReason: null,
|
|
25
44
|
};
|
|
26
|
-
return Object.freeze([
|
|
45
|
+
return Object.freeze([...ownedSections, combinedAgent]);
|
|
27
46
|
}
|
|
28
47
|
export function findOwnedUiSettingsEntry(sections, id, backend) {
|
|
29
48
|
for (const section of sections) {
|
|
@@ -41,10 +60,13 @@ function agentSection(snapshot) {
|
|
|
41
60
|
return frozenSection(`Agent settings are unavailable: ${snapshot.failure}`, null, []);
|
|
42
61
|
}
|
|
43
62
|
if (snapshot.descriptors.length === 0) {
|
|
44
|
-
return
|
|
63
|
+
return { id: AGENT_SECTION_ID, title: "Agent", entries: Object.freeze([]), unavailableReason: null, readOnlyReason: null };
|
|
45
64
|
}
|
|
46
|
-
const
|
|
47
|
-
|
|
65
|
+
const presented = snapshot.writeAdvertised
|
|
66
|
+
? snapshot.descriptors.filter(descriptor => descriptor.writable && descriptor.available)
|
|
67
|
+
: [];
|
|
68
|
+
const entries = presented.map(descriptor => {
|
|
69
|
+
const raw = descriptor.storedValue;
|
|
48
70
|
return {
|
|
49
71
|
id: descriptor.key,
|
|
50
72
|
label: descriptor.label ?? null,
|
|
@@ -52,31 +74,28 @@ function agentSection(snapshot) {
|
|
|
52
74
|
description: descriptor.description ?? null,
|
|
53
75
|
value: scalar(raw),
|
|
54
76
|
rawValue: raw,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
77
|
+
storedValue: descriptor.storedValue,
|
|
78
|
+
effectiveValue: descriptor.effectiveValue,
|
|
79
|
+
// Invariant: unavailable and non-writable descriptors are filtered before projection.
|
|
80
|
+
// Every presented structured value remains editable through its own surface.
|
|
81
|
+
editable: true,
|
|
58
82
|
structured: descriptor.valueType === "json",
|
|
59
83
|
minimum: descriptor.minimum ?? null,
|
|
60
84
|
maximum: descriptor.maximum ?? null,
|
|
61
85
|
flags: descriptor.flags ?? [],
|
|
62
|
-
//
|
|
86
|
+
// Protocol: a boolean is a two-value choice even when the engine names no choices,
|
|
63
87
|
// so it opens the same menu as any other enumerated setting.
|
|
64
88
|
choices: descriptor.valueType === "boolean" ? BOOLEAN_CHOICES : choicesOf(descriptor.choices),
|
|
65
89
|
origin: "engine",
|
|
66
|
-
application:
|
|
90
|
+
application: descriptor.application,
|
|
67
91
|
};
|
|
68
92
|
});
|
|
69
|
-
const readOnlyReason = snapshot.writeAdvertised
|
|
70
|
-
? (entries.some(entry => entry.editable)
|
|
71
|
-
? null
|
|
72
|
-
: "The agent engine reports no writable settings")
|
|
73
|
-
: "The agent engine does not support changing settings from this surface";
|
|
74
93
|
return {
|
|
75
94
|
id: AGENT_SECTION_ID,
|
|
76
95
|
title: "Agent",
|
|
77
96
|
entries: Object.freeze(entries),
|
|
78
97
|
unavailableReason: null,
|
|
79
|
-
readOnlyReason,
|
|
98
|
+
readOnlyReason: null,
|
|
80
99
|
};
|
|
81
100
|
}
|
|
82
101
|
function frozenSection(unavailableReason, readOnlyReason, entries) {
|
|
@@ -1,44 +1,36 @@
|
|
|
1
|
-
import type { AgentSettingsPort } from "
|
|
1
|
+
import type { AgentJsonValue, AgentSettingApplicationBoundary, AgentSettingsPort } from "../../contracts/agent-engine/index.js";
|
|
2
2
|
import type { OwnedUiSettingValue } from "./declarations.js";
|
|
3
3
|
import type { OwnedUiSettingsResolution } from "./resolution.js";
|
|
4
4
|
import { type OwnedUiSettingsBackend, type OwnedUiSettingsSection } from "./sections.js";
|
|
5
5
|
import type { OwnedUiSettingsStore } from "./store.js";
|
|
6
6
|
export interface OwnedUiSettingsChangeOutcome {
|
|
7
|
+
readonly status: "applied" | "deferred" | "unavailable" | "failed";
|
|
7
8
|
readonly applied: boolean;
|
|
8
|
-
/**
|
|
9
|
+
/** Compatibility projection for existing A1 restart-bound declarations. */
|
|
9
10
|
readonly pendingRestart: boolean;
|
|
10
|
-
|
|
11
|
+
readonly application: AgentSettingApplicationBoundary | null;
|
|
12
|
+
readonly storedValue: AgentJsonValue | null;
|
|
13
|
+
readonly effectiveValue: AgentJsonValue | null;
|
|
14
|
+
readonly limitationReason: string | null;
|
|
11
15
|
readonly failure: string | null;
|
|
12
16
|
}
|
|
13
17
|
export interface OwnedUiSettingsSessionOptions {
|
|
14
18
|
readonly store: OwnedUiSettingsStore;
|
|
15
|
-
/** Null when no engine is attached; the Agent section then reports itself unavailable. */
|
|
16
19
|
readonly agent?: AgentSettingsPort | null;
|
|
17
|
-
/**
|
|
18
|
-
* Resolves the port at load time instead of construction time, for an engine
|
|
19
|
-
* whose runtime is not up yet. Takes precedence over `agent`.
|
|
20
|
-
*/
|
|
21
20
|
readonly agentProvider?: () => AgentSettingsPort | null;
|
|
21
|
+
readonly hiddenAgentSettingIds?: readonly string[];
|
|
22
22
|
}
|
|
23
23
|
export type OwnedUiSettingsListener = (session: OwnedUiSettingsSession) => void;
|
|
24
|
-
/**
|
|
25
|
-
* Holds the resolved settings for one owned UI session and routes every accepted
|
|
26
|
-
* change to the backend that owns it: A1 settings to the A1 document, agent
|
|
27
|
-
* settings to the engine settings port. Neither backend ever sees the other's value.
|
|
28
|
-
*/
|
|
24
|
+
/** Routes every accepted setting change only to its owning backend. */
|
|
29
25
|
export declare class OwnedUiSettingsSession {
|
|
30
26
|
#private;
|
|
31
27
|
constructor(options: OwnedUiSettingsSessionOptions);
|
|
32
28
|
get resolution(): OwnedUiSettingsResolution;
|
|
33
|
-
/** Reads the engine's settings so the Agent section can be built. Never throws. */
|
|
34
29
|
load(): Promise<void>;
|
|
35
30
|
sections(): readonly OwnedUiSettingsSection[];
|
|
36
|
-
/** Resolved value of an A1 setting, or null when it is not declared. */
|
|
37
31
|
value(id: string): OwnedUiSettingValue | null;
|
|
38
|
-
/** Value stored this session but not yet in effect, for a restart-required setting. */
|
|
39
32
|
pendingValue(id: string): OwnedUiSettingValue | null;
|
|
40
33
|
onChange(listener: OwnedUiSettingsListener): () => void;
|
|
41
|
-
/** Writes a structured value, which only an engine-backed setting can hold. */
|
|
42
34
|
changeStructured(backend: OwnedUiSettingsBackend, id: string, value: Readonly<Record<string, unknown>>): Promise<OwnedUiSettingsChangeOutcome>;
|
|
43
35
|
change(backend: OwnedUiSettingsBackend, id: string, value: OwnedUiSettingValue): Promise<OwnedUiSettingsChangeOutcome>;
|
|
44
36
|
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { assertAgentSettingDescriptor } from "../../contracts/agent-engine/index.js";
|
|
2
|
+
import { buildOwnedUiSettingsSections, findOwnedUiSettingsEntry, } from "./sections.js";
|
|
3
|
+
/** Routes every accepted setting change only to its owning backend. */
|
|
4
|
+
export class OwnedUiSettingsSession {
|
|
5
|
+
#store;
|
|
6
|
+
#agent;
|
|
7
|
+
#agentProvider;
|
|
8
|
+
#listeners = new Set();
|
|
9
|
+
#hiddenAgentSettingIds;
|
|
10
|
+
#resolution;
|
|
11
|
+
#agentSnapshot = null;
|
|
12
|
+
#pending = new Map();
|
|
13
|
+
#restartEffective = new Map();
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this.#store = options.store;
|
|
16
|
+
this.#agent = options.agent ?? null;
|
|
17
|
+
this.#agentProvider = options.agentProvider ?? null;
|
|
18
|
+
this.#hiddenAgentSettingIds = new Set(options.hiddenAgentSettingIds ?? []);
|
|
19
|
+
this.#resolution = options.store.read();
|
|
20
|
+
for (const setting of this.#resolution.settings) {
|
|
21
|
+
if (setting.declaration.application === "restart")
|
|
22
|
+
this.#restartEffective.set(setting.declaration.id, setting.value);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
get resolution() {
|
|
26
|
+
return this.#resolution;
|
|
27
|
+
}
|
|
28
|
+
async load() {
|
|
29
|
+
this.#resolution = this.#store.read();
|
|
30
|
+
const agent = this.#currentAgent();
|
|
31
|
+
this.#agentSnapshot = agent === null ? null : await snapshotOf(agent, this.#hiddenAgentSettingIds);
|
|
32
|
+
this.#notify();
|
|
33
|
+
}
|
|
34
|
+
sections() {
|
|
35
|
+
return buildOwnedUiSettingsSections({ resolution: this.#resolution, agent: this.#agentSnapshot }).map(section => ({
|
|
36
|
+
...section,
|
|
37
|
+
entries: section.entries.map(entry => entry.backend === "a1" && this.#restartEffective.has(entry.id)
|
|
38
|
+
? { ...entry, effectiveValue: this.#restartEffective.get(entry.id) }
|
|
39
|
+
: entry),
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
value(id) {
|
|
43
|
+
return this.#restartEffective.get(id) ?? this.#resolution.settings.find(setting => setting.declaration.id === id)?.value ?? null;
|
|
44
|
+
}
|
|
45
|
+
pendingValue(id) {
|
|
46
|
+
return this.#pending.get(id) ?? null;
|
|
47
|
+
}
|
|
48
|
+
onChange(listener) {
|
|
49
|
+
this.#listeners.add(listener);
|
|
50
|
+
return () => this.#listeners.delete(listener);
|
|
51
|
+
}
|
|
52
|
+
async changeStructured(backend, id, value) {
|
|
53
|
+
if (backend !== "agent")
|
|
54
|
+
return failed("only an agent setting holds a structured value");
|
|
55
|
+
return await this.#changeAgentValue(id, value);
|
|
56
|
+
}
|
|
57
|
+
async change(backend, id, value) {
|
|
58
|
+
const entry = findOwnedUiSettingsEntry(this.sections(), id, backend);
|
|
59
|
+
if (entry === null)
|
|
60
|
+
return failed(`unknown ${backend} setting: ${id}`);
|
|
61
|
+
if (!entry.editable)
|
|
62
|
+
return failed(`${id} is not editable from this surface`);
|
|
63
|
+
return backend === "a1" ? this.#changeOwned(id, value) : await this.#changeAgentValue(id, value);
|
|
64
|
+
}
|
|
65
|
+
#changeOwned(id, value) {
|
|
66
|
+
const outcome = this.#store.write(this.#resolution, id, value);
|
|
67
|
+
if (!outcome.stored)
|
|
68
|
+
return failed(outcome.failure ?? `${id} could not be stored`);
|
|
69
|
+
const previous = this.#resolution;
|
|
70
|
+
this.#resolution = this.#store.read();
|
|
71
|
+
const previousSetting = previous.settings.find(setting => setting.declaration.id === id);
|
|
72
|
+
if (previousSetting?.declaration.application === "restart") {
|
|
73
|
+
this.#pending.set(id, value);
|
|
74
|
+
this.#notify();
|
|
75
|
+
return changed("deferred", "next-start", value, this.#restartEffective.get(id));
|
|
76
|
+
}
|
|
77
|
+
this.#pending.delete(id);
|
|
78
|
+
this.#notify();
|
|
79
|
+
return changed("applied", "live", value, value);
|
|
80
|
+
}
|
|
81
|
+
async #changeAgentValue(id, value) {
|
|
82
|
+
const agent = this.#currentAgent();
|
|
83
|
+
if (agent === null)
|
|
84
|
+
return failed("no agent engine is attached");
|
|
85
|
+
if (!agent.capabilities.write || !agent.writeSetting) {
|
|
86
|
+
return failed("the agent engine does not support changing settings from this surface");
|
|
87
|
+
}
|
|
88
|
+
let result;
|
|
89
|
+
try {
|
|
90
|
+
// Invariant: the coordinator behind the port owns effect installation, persistence,
|
|
91
|
+
// flush, and rollback. A second surface-level flush would split authority.
|
|
92
|
+
result = await agent.writeSetting(id, value);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
return failed(`${id} could not be written to the agent engine: ${describe(error)}`);
|
|
96
|
+
}
|
|
97
|
+
this.#agentSnapshot = await snapshotOf(agent, this.#hiddenAgentSettingIds);
|
|
98
|
+
this.#notify();
|
|
99
|
+
return fromAgentOutcome(result);
|
|
100
|
+
}
|
|
101
|
+
#currentAgent() {
|
|
102
|
+
return this.#agentProvider === null ? this.#agent : this.#agentProvider();
|
|
103
|
+
}
|
|
104
|
+
#notify() {
|
|
105
|
+
for (const listener of this.#listeners)
|
|
106
|
+
listener(this);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function snapshotOf(agent, hidden) {
|
|
110
|
+
try {
|
|
111
|
+
const listed = await agent.listSettings();
|
|
112
|
+
for (const descriptor of listed)
|
|
113
|
+
assertAgentSettingDescriptor(descriptor);
|
|
114
|
+
const writeAdvertised = agent.capabilities.write && typeof agent.writeSetting === "function";
|
|
115
|
+
const descriptors = listed.filter(descriptor => !hidden.has(descriptor.key) && writeAdvertised && descriptor.writable && descriptor.available);
|
|
116
|
+
return {
|
|
117
|
+
descriptors,
|
|
118
|
+
writeAdvertised,
|
|
119
|
+
failure: null,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
return { descriptors: [], writeAdvertised: false, failure: describe(error) };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function failed(failure) {
|
|
127
|
+
return {
|
|
128
|
+
status: "failed",
|
|
129
|
+
applied: false,
|
|
130
|
+
pendingRestart: false,
|
|
131
|
+
application: null,
|
|
132
|
+
storedValue: null,
|
|
133
|
+
effectiveValue: null,
|
|
134
|
+
limitationReason: null,
|
|
135
|
+
failure,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function changed(status, application, storedValue, effectiveValue) {
|
|
139
|
+
return {
|
|
140
|
+
status,
|
|
141
|
+
applied: status === "applied",
|
|
142
|
+
pendingRestart: status === "deferred" && application === "next-start",
|
|
143
|
+
application,
|
|
144
|
+
storedValue,
|
|
145
|
+
effectiveValue,
|
|
146
|
+
limitationReason: null,
|
|
147
|
+
failure: null,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function fromAgentOutcome(result) {
|
|
151
|
+
return {
|
|
152
|
+
status: result.status,
|
|
153
|
+
applied: result.status === "applied",
|
|
154
|
+
pendingRestart: result.status === "deferred" && result.application === "next-start",
|
|
155
|
+
application: result.application,
|
|
156
|
+
storedValue: result.storedValue,
|
|
157
|
+
effectiveValue: result.effectiveValue,
|
|
158
|
+
limitationReason: result.limitationReason,
|
|
159
|
+
failure: result.failure,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function describe(error) {
|
|
163
|
+
return error instanceof Error ? error.message : String(error);
|
|
164
|
+
}
|