@timurproko/a1 0.1.8-dev.235df0e → 0.1.8-dev.260
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 +107 -67
- package/bin/cli.js +28 -10
- package/bin/guardian.js +8 -3
- 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 +47 -20
- 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 +31 -0
- package/dist/composition/owned-ui.js +66 -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/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +36 -0
- package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +25 -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 +1 -2
- package/dist/{src/features → features}/launch/profile-paths.js +2 -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/{src/features → features}/owned-ui/run.js +2 -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 +103 -54
- 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/{src/foundation → foundation}/launch-guardian/main.d.ts +2 -0
- package/dist/{src/foundation → foundation}/launch-guardian/main.js +18 -5
- 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/{src/foundation → foundation}/release/bootstrap.d.ts +25 -6
- package/dist/{src/foundation → foundation}/release/bootstrap.js +124 -34
- package/dist/foundation/release/cohort-state.d.ts +156 -0
- package/dist/foundation/release/cohort-state.js +471 -0
- package/dist/foundation/release/dependency-layer.d.ts +82 -0
- package/dist/foundation/release/dependency-layer.js +497 -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 +4 -0
- package/dist/{src/foundation → foundation}/release/index.js +4 -0
- package/dist/foundation/release/release-gc.d.ts +71 -0
- package/dist/foundation/release/release-gc.js +734 -0
- package/dist/{src/foundation → foundation}/release/release-store.d.ts +7 -3
- package/dist/{src/foundation → foundation}/release/release-store.js +65 -13
- package/dist/{src/foundation → foundation}/release/release.d.ts +4 -1
- package/dist/{src/foundation → foundation}/release/release.js +10 -3
- package/dist/foundation/release/restart-certification.d.ts +67 -0
- package/dist/foundation/release/restart-certification.js +211 -0
- package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +1 -0
- package/dist/{src/foundation → foundation}/release/update-transaction.js +1 -0
- package/dist/{src/foundation → foundation}/release/update.d.ts +19 -3
- package/dist/{src/foundation → foundation}/release/update.js +116 -56
- package/dist/foundation/release/warmup.d.ts +3 -0
- package/dist/foundation/release/warmup.js +35 -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 +140 -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 +80 -0
- package/dist/foundation/supervision/paths.d.ts +1 -0
- package/dist/foundation/supervision/paths.js +1 -0
- package/dist/{src/foundation → foundation}/supervision/server.d.ts +19 -1
- package/dist/{src/foundation → foundation}/supervision/server.js +65 -3
- 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/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +1 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +1 -1
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +55 -0
- package/dist/integrations/pi/components/owned-editor-ux.js +778 -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/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.js +54 -6
- 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 +3 -3
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +49 -18
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +36 -0
- package/dist/integrations/pi/components/shell-presenters-info.js +78 -0
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +25 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +92 -131
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +5 -2
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +2 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.d.ts +57 -8
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +4 -2
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +13 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +27 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +10 -2
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +36 -3
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +1 -1
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +28 -4
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +714 -127
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +2 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +4 -2
- 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/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/{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 +47 -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/{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 +18 -1
- package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
- package/dist/integrations/pi/session-ui/clipboard-image.js +29 -0
- package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.d.ts +1 -0
- package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.js +1 -0
- package/dist/integrations/pi/session-ui/prompt-chips.d.ts +23 -0
- package/dist/integrations/pi/session-ui/prompt-chips.js +246 -0
- package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
- package/dist/integrations/pi/session-ui/session-shell-root.d.ts +141 -0
- package/dist/integrations/pi/session-ui/session-shell-root.js +1158 -0
- package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
- package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/session-shell.js +479 -719
- package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +45 -0
- package/dist/integrations/pi/session-ui/session-viewport-controller.js +463 -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 +130 -0
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +8 -1
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +216 -9
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +29 -6
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +74 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +380 -0
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.d.ts +2 -0
- package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.js +2 -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/{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} +3 -3
- package/dist/{src/product-identity.js → product-identity.js} +7 -5
- package/dist/{src/product-identity.json → product-identity.json} +11 -6
- package/dist/runtime-payload-inventory.json +122328 -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 +5 -0
- package/dist/{src/foundation/ui-components → ui/components}/index.js +5 -0
- package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +1 -6
- package/dist/{src/foundation/ui-components → ui/components}/line-input.js +4 -9
- 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 +23 -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-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/{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 +25 -0
- package/dist/ui/components/spans.js +257 -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 +208 -0
- package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
- package/dist/{src/foundation/ui-components → ui/components}/text.js +66 -4
- package/dist/ui/components/transcript-viewport.d.ts +152 -0
- package/dist/ui/components/transcript-viewport.js +631 -0
- package/dist/ui/components/visible-hyperlinks.d.ts +19 -0
- package/dist/ui/components/visible-hyperlinks.js +64 -0
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.js +33 -5
- 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 +21 -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 +32 -23
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
- package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.js +65 -55
- 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 +9 -9
- package/docs/architecture/code-documentation.md +77 -0
- package/docs/architecture/process-guardian-provenance.md +3 -1
- package/docs/architecture/project-structure.md +67 -30
- package/docs/architecture/resource-and-data-policy.md +1 -1
- package/docs/architecture/toolchain.md +10 -10
- package/docs/architecture/ui-reference-provenance.md +36 -5
- package/docs/ci-release-runbook.md +186 -79
- package/docs/features/launch-profiles.md +24 -17
- 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/repository-governance-live-acceptance.md +77 -0
- package/package.json +37 -27
- package/dist/src/cli/capabilities.d.ts +0 -15
- package/dist/src/cli/dispatch.js +0 -177
- 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/foundation/lifecycle/paths.d.ts +0 -10
- package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
- package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
- 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/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/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}/index.d.ts +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
- /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +0 -0
- /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +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-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/earendil-announcement.js +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/owned-editor.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.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-owned-ui-integration → integrations/pi/session-ui}/route-host.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}/contracts.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
|
@@ -12,12 +12,28 @@ export interface OwnedUiModelInfo {
|
|
|
12
12
|
readonly displayName: string;
|
|
13
13
|
}
|
|
14
14
|
export type OwnedUiThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
15
|
+
export interface OwnedUiViewportSettings {
|
|
16
|
+
readonly scrollbarAppearance: "auto" | "always" | "hidden";
|
|
17
|
+
readonly scrollbarStyle: "thin" | "thick";
|
|
18
|
+
/** normal is baseline; fast is 2x normal; high is normal plus fast. */
|
|
19
|
+
readonly scrollbarSpeed: "normal" | "fast" | "high";
|
|
20
|
+
}
|
|
21
|
+
/** Narrow live settings boundary consumed by the bare-A1 shell composition. */
|
|
22
|
+
export interface OwnedUiViewportSettingsPort {
|
|
23
|
+
snapshot(): OwnedUiViewportSettings;
|
|
24
|
+
onChange(listener: (settings: OwnedUiViewportSettings) => void): () => void;
|
|
25
|
+
}
|
|
15
26
|
export interface OwnedUiTerminalSurface {
|
|
16
27
|
readonly columns: number;
|
|
17
28
|
readonly rows: number;
|
|
18
29
|
readonly focusedRegion: "transcript" | "editor" | "dialog" | "overlay" | "status";
|
|
19
30
|
readonly hardwareCursor: boolean;
|
|
20
31
|
}
|
|
32
|
+
export interface OwnedUiImageAttachment {
|
|
33
|
+
readonly type: "image";
|
|
34
|
+
readonly data: string;
|
|
35
|
+
readonly mimeType: string;
|
|
36
|
+
}
|
|
21
37
|
export interface OwnedUiEditorState {
|
|
22
38
|
readonly text: string;
|
|
23
39
|
readonly queuedSubmissions: readonly string[];
|
|
@@ -75,6 +91,12 @@ export interface OwnedUiOverlay {
|
|
|
75
91
|
readonly modal: boolean;
|
|
76
92
|
readonly payload: unknown;
|
|
77
93
|
}
|
|
94
|
+
export interface OwnedUiTranscriptImageReference {
|
|
95
|
+
readonly assetId: OwnedUiEntityId;
|
|
96
|
+
readonly mimeType: string;
|
|
97
|
+
readonly byteLength: number;
|
|
98
|
+
readonly source: "user" | "tool-result";
|
|
99
|
+
}
|
|
78
100
|
export interface OwnedUiTranscriptBlock {
|
|
79
101
|
readonly id: OwnedUiEntityId;
|
|
80
102
|
readonly kind: OwnedUiTranscriptBlockKind;
|
|
@@ -83,6 +105,8 @@ export interface OwnedUiTranscriptBlock {
|
|
|
83
105
|
readonly title: string | null;
|
|
84
106
|
readonly text: string;
|
|
85
107
|
readonly payload: unknown;
|
|
108
|
+
/** Bounded opaque references; image bytes remain in the session-scoped engine asset store. */
|
|
109
|
+
readonly imageReferences?: readonly OwnedUiTranscriptImageReference[];
|
|
86
110
|
}
|
|
87
111
|
export type OwnedUiSlotId = "theme" | "transcript-block" | "tool-card" | "editor" | "status" | "command" | "selector" | "dialog" | "overlay" | "layout";
|
|
88
112
|
export interface OwnedUiCustomization {
|
|
@@ -122,11 +146,13 @@ export type OwnedUiCommand = {
|
|
|
122
146
|
readonly correlationId: OwnedUiCorrelationId;
|
|
123
147
|
readonly sessionId: OwnedUiSessionId;
|
|
124
148
|
readonly text: string;
|
|
149
|
+
readonly images?: readonly OwnedUiImageAttachment[];
|
|
125
150
|
} | {
|
|
126
151
|
readonly type: "steer" | "follow-up";
|
|
127
152
|
readonly correlationId: OwnedUiCorrelationId;
|
|
128
153
|
readonly sessionId: OwnedUiSessionId;
|
|
129
154
|
readonly text: string;
|
|
155
|
+
readonly images?: readonly OwnedUiImageAttachment[];
|
|
130
156
|
} | {
|
|
131
157
|
readonly type: "abort" | "retry" | "compact" | "shutdown";
|
|
132
158
|
readonly correlationId: OwnedUiCorrelationId;
|
|
@@ -189,6 +215,16 @@ export type OwnedUiEvent = {
|
|
|
189
215
|
readonly sessionId: OwnedUiSessionId;
|
|
190
216
|
readonly sequence: number;
|
|
191
217
|
readonly block: OwnedUiTranscriptBlock;
|
|
218
|
+
} | {
|
|
219
|
+
/** One completed assistant reply; never a tool row or transcript rebuild. */
|
|
220
|
+
readonly type: "assistant-message-completed";
|
|
221
|
+
readonly sessionId: OwnedUiSessionId;
|
|
222
|
+
readonly sequence: number;
|
|
223
|
+
} | {
|
|
224
|
+
/** A fresh agent run has started, used by follow-mode surfaces. */
|
|
225
|
+
readonly type: "agent-run-started";
|
|
226
|
+
readonly sessionId: OwnedUiSessionId;
|
|
227
|
+
readonly sequence: number;
|
|
192
228
|
} | {
|
|
193
229
|
readonly type: "editor-state";
|
|
194
230
|
readonly sessionId: OwnedUiSessionId;
|
|
@@ -5,6 +5,8 @@ const MAX_MESSAGE_LENGTH = 4_096;
|
|
|
5
5
|
const MAX_TEXT_BYTES = 256 * 1024;
|
|
6
6
|
const MAX_PAYLOAD_BYTES = 64 * 1024;
|
|
7
7
|
const MAX_SESSION_VIEW_BYTES = 1024 * 1024;
|
|
8
|
+
const MAX_IMAGE_DATA_BYTES = 8 * 1024 * 1024;
|
|
9
|
+
const MAX_PROMPT_IMAGES = 8;
|
|
8
10
|
const MAX_BLOCKS = 10_000;
|
|
9
11
|
const MAX_CUSTOMIZATIONS = 1_000;
|
|
10
12
|
const MAX_DIAGNOSTICS = 1_000;
|
|
@@ -12,6 +14,7 @@ const MAX_QUEUE = 32;
|
|
|
12
14
|
const MAX_BADGES = 32;
|
|
13
15
|
const MAX_STATUS_DIAGNOSTICS = 32;
|
|
14
16
|
const MAX_ACTIVE_COMMANDS = 64;
|
|
17
|
+
const IMAGE_REFERENCE_SOURCES = new Set(["user", "tool-result"]);
|
|
15
18
|
const BLOCK_KINDS = new Set([
|
|
16
19
|
"user",
|
|
17
20
|
"assistant",
|
|
@@ -53,6 +56,15 @@ export function assertOwnedUiCommand(command) {
|
|
|
53
56
|
case "steer":
|
|
54
57
|
case "follow-up":
|
|
55
58
|
assertBoundedText(command.text, "owned-UI prompt text", MAX_TEXT_BYTES);
|
|
59
|
+
if (command.images !== undefined) {
|
|
60
|
+
assertCollection(command.images, "owned-UI prompt images", MAX_PROMPT_IMAGES);
|
|
61
|
+
for (const image of command.images) {
|
|
62
|
+
if (image.type !== "image")
|
|
63
|
+
throw new TypeError("owned-UI prompt image type is invalid");
|
|
64
|
+
assertBoundedText(image.data, "owned-UI prompt image data", MAX_IMAGE_DATA_BYTES);
|
|
65
|
+
assertBoundedText(image.mimeType, "owned-UI prompt image MIME type", MAX_LABEL_LENGTH);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
56
68
|
return;
|
|
57
69
|
case "abort":
|
|
58
70
|
case "retry":
|
|
@@ -103,6 +115,9 @@ export function assertOwnedUiEvent(event) {
|
|
|
103
115
|
case "transcript-block":
|
|
104
116
|
assertOwnedUiTranscriptBlock(event.block);
|
|
105
117
|
return;
|
|
118
|
+
case "assistant-message-completed":
|
|
119
|
+
case "agent-run-started":
|
|
120
|
+
return;
|
|
106
121
|
case "editor-state":
|
|
107
122
|
assertOwnedUiEditorState(event.editor);
|
|
108
123
|
return;
|
|
@@ -211,6 +226,16 @@ export function assertOwnedUiTranscriptBlock(block) {
|
|
|
211
226
|
assertOptionalText(block.title, "owned-UI transcript block title", MAX_LABEL_LENGTH);
|
|
212
227
|
assertPossiblyEmptyText(block.text, "owned-UI transcript block text", MAX_TEXT_BYTES);
|
|
213
228
|
assertJsonValue(block.payload, "owned-UI transcript block payload", MAX_PAYLOAD_BYTES);
|
|
229
|
+
if (block.imageReferences !== undefined) {
|
|
230
|
+
assertCollection(block.imageReferences, "owned-UI transcript image references", 16);
|
|
231
|
+
for (const reference of block.imageReferences) {
|
|
232
|
+
assertId(reference.assetId, "owned-UI transcript image asset id");
|
|
233
|
+
if (!/^image\/[a-z0-9.+-]+$/i.test(reference.mimeType))
|
|
234
|
+
throw new TypeError("owned-UI transcript image MIME type is invalid");
|
|
235
|
+
assertIntegerInRange(reference.byteLength, 1, 20 * 1024 * 1024, "owned-UI transcript image byte length");
|
|
236
|
+
assertEnum(reference.source, IMAGE_REFERENCE_SOURCES, "owned-UI transcript image source");
|
|
237
|
+
}
|
|
238
|
+
}
|
|
214
239
|
}
|
|
215
240
|
export function assertOwnedUiEditorState(editor) {
|
|
216
241
|
assertPossiblyEmptyText(editor.text, "owned-UI editor text", MAX_TEXT_BYTES);
|
|
@@ -8,8 +8,16 @@ export function resolveDevelopmentLaunchEnvironment(canonicalPackageRoot, releas
|
|
|
8
8
|
const instanceId = selectedInstanceId
|
|
9
9
|
? createHash("sha256").update(selectedInstanceId).digest("hex").slice(0, 16)
|
|
10
10
|
: randomUUID().replaceAll("-", "").slice(0, 16);
|
|
11
|
-
const
|
|
12
|
-
|
|
11
|
+
const checkoutRoot = resolve(temporaryDirectory, PRODUCT_IDENTITY.state.developmentDirectory, checkoutId);
|
|
12
|
+
const selectedDevelopmentRoot = source[PRODUCT_IDENTITY.environment.developmentRoot];
|
|
13
|
+
const developmentRoot = resolve(selectedDevelopmentRoot
|
|
14
|
+
?? join(checkoutRoot, releaseId, "instances", instanceId));
|
|
15
|
+
// Rationale: runtime/data remain instance-isolated, but product settings are user
|
|
16
|
+
// preferences and must survive a fresh local launch (and a rebuilt candidate).
|
|
17
|
+
// An explicit development root retains its historical self-contained policy.
|
|
18
|
+
const persistentConfigDir = selectedDevelopmentRoot
|
|
19
|
+
? join(developmentRoot, "config")
|
|
20
|
+
: join(checkoutRoot, "config");
|
|
13
21
|
const dataDir = resolve(source[PRODUCT_IDENTITY.environment.dataDir] ?? join(developmentRoot, "data"));
|
|
14
22
|
return {
|
|
15
23
|
checkoutId,
|
|
@@ -19,7 +27,7 @@ export function resolveDevelopmentLaunchEnvironment(canonicalPackageRoot, releas
|
|
|
19
27
|
environment: {
|
|
20
28
|
...source,
|
|
21
29
|
[PRODUCT_IDENTITY.environment.developmentInstanceId]: instanceId,
|
|
22
|
-
[PRODUCT_IDENTITY.environment.configDir]: resolve(source[PRODUCT_IDENTITY.environment.configDir] ??
|
|
30
|
+
[PRODUCT_IDENTITY.environment.configDir]: resolve(source[PRODUCT_IDENTITY.environment.configDir] ?? persistentConfigDir),
|
|
23
31
|
[PRODUCT_IDENTITY.environment.dataDir]: dataDir,
|
|
24
32
|
[PRODUCT_IDENTITY.environment.runtimeDir]: resolve(source[PRODUCT_IDENTITY.environment.runtimeDir] ?? join(developmentRoot, "runtime")),
|
|
25
33
|
[PRODUCT_IDENTITY.environment.databasePath]: resolve(source[PRODUCT_IDENTITY.environment.databasePath] ?? join(dataDir, PRODUCT_IDENTITY.endpoint.databaseFilename)),
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type SessionSelection, type LaunchProfileId } from "../../foundation/lifecycle/index.js";
|
|
2
|
+
export { parseSessionSelection } from "../../foundation/lifecycle/index.js";
|
|
3
|
+
export type { LaunchProfileId, SessionSelection } from "../../foundation/lifecycle/index.js";
|
|
4
|
+
export interface InteractiveLaunchIntent {
|
|
5
|
+
readonly kind: "interactive";
|
|
6
|
+
readonly profileId: LaunchProfileId;
|
|
7
|
+
readonly sessionSelection?: SessionSelection;
|
|
8
|
+
}
|
|
9
|
+
export type LaunchIntent = InteractiveLaunchIntent;
|
|
10
|
+
export declare function interactiveLaunchIntent(profileId: LaunchProfileId, sessionSelection?: SessionSelection): InteractiveLaunchIntent;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { sessionSelectionArguments } from "../../foundation/lifecycle/index.js";
|
|
2
|
+
export { parseSessionSelection } from "../../foundation/lifecycle/index.js";
|
|
3
|
+
export function interactiveLaunchIntent(profileId, sessionSelection) {
|
|
4
|
+
if (sessionSelection !== undefined && profileId !== "a1")
|
|
5
|
+
throw new Error("session selection requires the normal A1 profile");
|
|
6
|
+
sessionSelectionArguments(sessionSelection);
|
|
7
|
+
return Object.freeze({ kind: "interactive", profileId, ...(sessionSelection === undefined ? {} : { sessionSelection }) });
|
|
8
|
+
}
|
|
@@ -2,9 +2,7 @@ import { type LaunchProfilePathOptions } from "./profile-paths.js";
|
|
|
2
2
|
import { initializeProductProfile } from "./initialize-profile.js";
|
|
3
3
|
import type { InteractiveLaunchIntent } from "./intent.js";
|
|
4
4
|
export interface PreparedInteractiveLaunch {
|
|
5
|
-
readonly intent: InteractiveLaunchIntent;
|
|
6
5
|
readonly environment: NodeJS.ProcessEnv;
|
|
7
|
-
readonly piArguments: readonly string[];
|
|
8
6
|
readonly configurationRoot: string | null;
|
|
9
7
|
}
|
|
10
8
|
export interface PrepareInteractiveLaunchOptions extends LaunchProfilePathOptions {
|
|
@@ -2,7 +2,7 @@ import { configurationRootForProfile, resolveLaunchProfilePaths } from "./profil
|
|
|
2
2
|
import { initializeProductProfile } from "./initialize-profile.js";
|
|
3
3
|
export async function prepareInteractiveLaunch(intent, environment = process.env, options = {}) {
|
|
4
4
|
const paths = resolveLaunchProfilePaths({ ...options, environment });
|
|
5
|
-
const configurationRoot = configurationRootForProfile(intent.
|
|
5
|
+
const configurationRoot = configurationRootForProfile(intent.profileId, paths);
|
|
6
6
|
if (configurationRoot !== null)
|
|
7
7
|
await (options.initializeProfile ?? initializeProductProfile)(configurationRoot);
|
|
8
8
|
const childEnvironment = { ...environment };
|
|
@@ -10,12 +10,5 @@ export async function prepareInteractiveLaunch(intent, environment = process.env
|
|
|
10
10
|
delete childEnvironment.PI_CODING_AGENT_DIR;
|
|
11
11
|
else
|
|
12
12
|
childEnvironment.PI_CODING_AGENT_DIR = configurationRoot;
|
|
13
|
-
|
|
14
|
-
childEnvironment.A1_LAUNCH_ARGUMENTS_JSON = JSON.stringify(piArguments);
|
|
15
|
-
return Object.freeze({
|
|
16
|
-
intent,
|
|
17
|
-
environment: childEnvironment,
|
|
18
|
-
piArguments: Object.freeze(piArguments),
|
|
19
|
-
configurationRoot,
|
|
20
|
-
});
|
|
13
|
+
return Object.freeze({ environment: childEnvironment, configurationRoot });
|
|
21
14
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type { LaunchProfileId } from "./
|
|
1
|
+
import type { LaunchProfileId } from "./intent.js";
|
|
2
2
|
export interface LaunchProfilePaths {
|
|
3
3
|
readonly home: string;
|
|
4
4
|
readonly managedStateRoot: string;
|
|
5
5
|
readonly agentProfile: string;
|
|
6
|
-
readonly sandbox: string;
|
|
7
6
|
}
|
|
8
7
|
export interface LaunchProfilePathOptions {
|
|
9
8
|
readonly environment?: NodeJS.ProcessEnv;
|
|
@@ -7,20 +7,14 @@ export function resolveLaunchProfilePaths(options = {}) {
|
|
|
7
7
|
const selectedHome = options.home ?? environment[PRODUCT_IDENTITY.environment.profileHome] ?? options.readHome?.() ?? homedir();
|
|
8
8
|
const home = validateAbsolutePath(selectedHome, "effective user home", path);
|
|
9
9
|
const agentProfile = path.resolve(home, PRODUCT_IDENTITY.state.piAgentProfile);
|
|
10
|
-
const managedStateRoot = path.dirname(agentProfile);
|
|
11
10
|
return Object.freeze({
|
|
12
11
|
home,
|
|
13
|
-
managedStateRoot,
|
|
12
|
+
managedStateRoot: path.dirname(agentProfile),
|
|
14
13
|
agentProfile,
|
|
15
|
-
sandbox: path.resolve(home, PRODUCT_IDENTITY.state.piSandboxProfile),
|
|
16
14
|
});
|
|
17
15
|
}
|
|
18
16
|
export function configurationRootForProfile(profileId, paths) {
|
|
19
|
-
|
|
20
|
-
return paths.agentProfile;
|
|
21
|
-
if (profileId === "sandbox")
|
|
22
|
-
return paths.sandbox;
|
|
23
|
-
return null;
|
|
17
|
+
return profileId === "a1" ? paths.agentProfile : null;
|
|
24
18
|
}
|
|
25
19
|
function validateAbsolutePath(value, name, path) {
|
|
26
20
|
if (value.length === 0 || value.includes("\0"))
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { type LaunchProfileId } from "../../foundation/lifecycle/index.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* bare `a1` is the product, while `a1 pi` and `a1 sandbox` present pinned Pi's
|
|
6
|
-
* interface and nothing of A1's own, against Pi's own profile and against an
|
|
7
|
-
* isolated one.
|
|
3
|
+
* Both interactive commands use the owned composition. Bare A1 enables product
|
|
4
|
+
* surfaces; the Pi comparison command withholds them and reads Pi's own profile.
|
|
8
5
|
*/
|
|
9
6
|
export type OwnedUiProfileId = LaunchProfileId;
|
|
10
7
|
export interface InteractiveRuntimeSelection {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type OwnedUiCommand, type OwnedUiCustomization, type OwnedUiSlotId, type OwnedUiTranscriptBlock } from "../../
|
|
1
|
+
import { type OwnedUiCommand, type OwnedUiCustomization, type OwnedUiSlotId, type OwnedUiTranscriptBlock } from "../../contracts/owned-ui/index.js";
|
|
2
2
|
export interface OwnedUiSlotImplementation {
|
|
3
3
|
readonly payload: unknown;
|
|
4
4
|
render?(input: unknown, width: number): readonly string[];
|
|
@@ -12,6 +12,7 @@ export interface OwnedCommandHandlerContext {
|
|
|
12
12
|
readonly correlationId: string;
|
|
13
13
|
}
|
|
14
14
|
export type OwnedCommandHandler = (context: OwnedCommandHandlerContext) => OwnedUiCommand | Promise<OwnedUiCommand>;
|
|
15
|
+
/** Registers owned UI commands and assigns a monotonic correlation identifier to each dispatch. */
|
|
15
16
|
export declare class OwnedCommandSurface {
|
|
16
17
|
#private;
|
|
17
18
|
register(name: string, handler: OwnedCommandHandler): () => void;
|
|
@@ -22,6 +23,7 @@ export interface ResolvedOwnedUiSlot {
|
|
|
22
23
|
readonly customization: OwnedUiCustomization;
|
|
23
24
|
readonly implementation: OwnedUiSlotImplementation;
|
|
24
25
|
}
|
|
26
|
+
/** Resolves one customization per slot by precedence and version while preserving registration identity. */
|
|
25
27
|
export declare class OwnedUiCustomizationRegistry {
|
|
26
28
|
#private;
|
|
27
29
|
register(customization: OwnedUiCustomization, implementation: OwnedUiSlotImplementation): () => void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { assertOwnedUiCustomization, } from "../../
|
|
1
|
+
import { assertOwnedUiCustomization, } from "../../contracts/owned-ui/index.js";
|
|
2
|
+
/** Registers owned UI commands and assigns a monotonic correlation identifier to each dispatch. */
|
|
2
3
|
export class OwnedCommandSurface {
|
|
3
4
|
#handlers = new Map();
|
|
4
5
|
#sequence = 0;
|
|
@@ -17,6 +18,7 @@ export class OwnedCommandSurface {
|
|
|
17
18
|
return handler({ sessionId, correlationId: `ui-command-${this.#sequence}` });
|
|
18
19
|
}
|
|
19
20
|
}
|
|
21
|
+
/** Resolves one customization per slot by precedence and version while preserving registration identity. */
|
|
20
22
|
export class OwnedUiCustomizationRegistry {
|
|
21
23
|
#registrations = new Map();
|
|
22
24
|
register(customization, implementation) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { OwnedUiDiagnostics } from "../../
|
|
1
|
+
import type { OwnedUiDiagnostics } from "../../contracts/owned-ui/index.js";
|
|
2
2
|
export interface OwnedUiFrameObservation {
|
|
3
3
|
readonly requestedFrames: number;
|
|
4
4
|
readonly presentedFrames: number;
|
|
@@ -17,6 +17,7 @@ export interface OwnedUiDiagnosticsSnapshot {
|
|
|
17
17
|
readonly resources: OwnedUiResourceObservation | null;
|
|
18
18
|
readonly terminalRestorationFailed: boolean;
|
|
19
19
|
}
|
|
20
|
+
/** Retains bounded, redacted UI diagnostics together with frame and resource observations. */
|
|
20
21
|
export declare class OwnedUiDiagnosticsRecorder {
|
|
21
22
|
#private;
|
|
22
23
|
readonly maximumEntries: number;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Readable, Writable } from "node:stream";
|
|
2
|
+
export interface OwnedProjectTrustPromptRequest {
|
|
3
|
+
readonly cwd: string;
|
|
4
|
+
readonly defaultDecision: "ask" | "always" | "never";
|
|
5
|
+
}
|
|
6
|
+
export type OwnedProjectTrustPrompt = (request: OwnedProjectTrustPromptRequest) => Promise<boolean | null>;
|
|
7
|
+
interface RawTtyInput extends Readable {
|
|
8
|
+
readonly isTTY?: boolean;
|
|
9
|
+
readonly isRaw?: boolean;
|
|
10
|
+
setRawMode?(enabled: boolean): this;
|
|
11
|
+
}
|
|
12
|
+
export interface ConsoleProjectTrustPromptOptions {
|
|
13
|
+
readonly input?: RawTtyInput;
|
|
14
|
+
readonly output?: Writable & {
|
|
15
|
+
readonly isTTY?: boolean;
|
|
16
|
+
readonly columns?: number;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Pre-resource startup selector. It uses only fixed product wording and terminal
|
|
21
|
+
* controls: no project setting, theme, extension, prompt, package, or skill is
|
|
22
|
+
* consulted before the trust result exists.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createConsoleProjectTrustPrompt(options?: ConsoleProjectTrustPromptOptions): OwnedProjectTrustPrompt;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
const ENTER_ALTERNATE_SCREEN = "\u001b[?1049h";
|
|
2
|
+
const LEAVE_ALTERNATE_SCREEN = "\u001b[?1049l";
|
|
3
|
+
const HIDE_CURSOR = "\u001b[?25l";
|
|
4
|
+
const SHOW_CURSOR = "\u001b[?25h";
|
|
5
|
+
const CLEAR_HOME = "\u001b[2J\u001b[H";
|
|
6
|
+
const ACCENT = "\u001b[38;2;138;190;183m";
|
|
7
|
+
const MUTED = "\u001b[38;2;128;128;128m";
|
|
8
|
+
const DIM = "\u001b[38;2;102;102;102m";
|
|
9
|
+
const RESET_FG = "\u001b[39m";
|
|
10
|
+
const BOLD = "\u001b[1m";
|
|
11
|
+
const RESET_BOLD = "\u001b[22m";
|
|
12
|
+
/**
|
|
13
|
+
* Pre-resource startup selector. It uses only fixed product wording and terminal
|
|
14
|
+
* controls: no project setting, theme, extension, prompt, package, or skill is
|
|
15
|
+
* consulted before the trust result exists.
|
|
16
|
+
*/
|
|
17
|
+
export function createConsoleProjectTrustPrompt(options = {}) {
|
|
18
|
+
const input = options.input ?? process.stdin;
|
|
19
|
+
const output = options.output ?? process.stdout;
|
|
20
|
+
return async ({ cwd }) => {
|
|
21
|
+
if (input.isTTY !== true || output.isTTY !== true) {
|
|
22
|
+
throw new Error("an interactive terminal is unavailable");
|
|
23
|
+
}
|
|
24
|
+
const wasRaw = input.isRaw === true;
|
|
25
|
+
let selected = 0;
|
|
26
|
+
let restored = false;
|
|
27
|
+
const restore = () => {
|
|
28
|
+
if (restored)
|
|
29
|
+
return;
|
|
30
|
+
restored = true;
|
|
31
|
+
input.setRawMode?.(wasRaw);
|
|
32
|
+
output.write(`${CLEAR_HOME}${SHOW_CURSOR}${LEAVE_ALTERNATE_SCREEN}`);
|
|
33
|
+
};
|
|
34
|
+
const render = () => {
|
|
35
|
+
const width = Math.max(20, output.columns ?? 80);
|
|
36
|
+
const lines = [
|
|
37
|
+
`${BOLD}${ACCENT}Trust project folder?${RESET_FG}${RESET_BOLD}`,
|
|
38
|
+
cwd,
|
|
39
|
+
"",
|
|
40
|
+
"This allows A1 to load project settings and resources, install missing project packages, and execute project extensions.",
|
|
41
|
+
"",
|
|
42
|
+
optionRow("Trust", selected === 0),
|
|
43
|
+
optionRow("Do not trust", selected === 1),
|
|
44
|
+
"",
|
|
45
|
+
`${DIM} ↑/↓ to navigate · Enter to select · Esc to cancel${RESET_FG}`,
|
|
46
|
+
];
|
|
47
|
+
output.write(`${CLEAR_HOME}${lines.map(line => clipAnsiSafe(line, width)).join("\n")}`);
|
|
48
|
+
};
|
|
49
|
+
try {
|
|
50
|
+
output.write(`${ENTER_ALTERNATE_SCREEN}${HIDE_CURSOR}`);
|
|
51
|
+
input.setRawMode?.(true);
|
|
52
|
+
render();
|
|
53
|
+
return await new Promise((resolve, reject) => {
|
|
54
|
+
let settled = false;
|
|
55
|
+
const finish = (value) => {
|
|
56
|
+
if (settled)
|
|
57
|
+
return;
|
|
58
|
+
settled = true;
|
|
59
|
+
cleanup();
|
|
60
|
+
restore();
|
|
61
|
+
resolve(value);
|
|
62
|
+
};
|
|
63
|
+
const fail = (error) => {
|
|
64
|
+
if (settled)
|
|
65
|
+
return;
|
|
66
|
+
settled = true;
|
|
67
|
+
cleanup();
|
|
68
|
+
restore();
|
|
69
|
+
reject(error);
|
|
70
|
+
};
|
|
71
|
+
const onData = (chunk) => {
|
|
72
|
+
const data = chunk.toString();
|
|
73
|
+
for (let index = 0; index < data.length;) {
|
|
74
|
+
if (data.startsWith("\u001b[A", index)) {
|
|
75
|
+
selected = 0;
|
|
76
|
+
index += 3;
|
|
77
|
+
render();
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (data.startsWith("\u001b[B", index) || data[index] === "\t") {
|
|
81
|
+
selected = selected === 0 ? 1 : 0;
|
|
82
|
+
index += data[index] === "\t" ? 1 : 3;
|
|
83
|
+
render();
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const key = data[index] ?? "";
|
|
87
|
+
index += 1;
|
|
88
|
+
if (key === "\r" || key === "\n") {
|
|
89
|
+
finish(selected === 0);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (key === "\u001b" || key === "\u0003") {
|
|
93
|
+
finish(null);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Compatibility: retain y/n aliases for terminals or automation that cannot send
|
|
97
|
+
// navigation keys; the visible interaction remains selector-first.
|
|
98
|
+
if (key === "y" || key === "Y") {
|
|
99
|
+
finish(true);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (key === "n" || key === "N") {
|
|
103
|
+
finish(false);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const onEnd = () => finish(null);
|
|
109
|
+
const onError = (error) => fail(error);
|
|
110
|
+
const cleanup = () => {
|
|
111
|
+
input.off("data", onData);
|
|
112
|
+
input.off("end", onEnd);
|
|
113
|
+
input.off("error", onError);
|
|
114
|
+
};
|
|
115
|
+
input.on("data", onData);
|
|
116
|
+
input.once("end", onEnd);
|
|
117
|
+
input.once("error", onError);
|
|
118
|
+
input.resume();
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
restore();
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function optionRow(label, selected) {
|
|
127
|
+
return selected
|
|
128
|
+
? `${ACCENT}→ ${label}${RESET_FG}`
|
|
129
|
+
: ` ${label}`;
|
|
130
|
+
}
|
|
131
|
+
/** Avoid replaying or manufacturing control payloads while keeping fixed SGR. */
|
|
132
|
+
function clipAnsiSafe(line, width) {
|
|
133
|
+
let visible = 0;
|
|
134
|
+
let output = "";
|
|
135
|
+
for (let index = 0; index < line.length && visible < width;) {
|
|
136
|
+
if (line[index] === "\u001b") {
|
|
137
|
+
const match = line.slice(index).match(/^\u001b\[[0-9;:]*m/);
|
|
138
|
+
if (match !== null) {
|
|
139
|
+
output += match[0];
|
|
140
|
+
index += match[0].length;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
output += line[index];
|
|
145
|
+
index += 1;
|
|
146
|
+
visible += 1;
|
|
147
|
+
}
|
|
148
|
+
return `${output}${RESET_FG}${RESET_BOLD}`;
|
|
149
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { OwnedUiApplicationPort } from "../../
|
|
2
|
-
import type { OwnedUiSettingsSession } from "../../
|
|
1
|
+
import type { OwnedUiApplicationPort } from "../../contracts/presentation/index.js";
|
|
2
|
+
import type { OwnedUiSettingsSession } from "../../ui/settings/index.js";
|
|
3
3
|
export interface OwnedUiRunOptions {
|
|
4
4
|
readonly application: OwnedUiApplicationPort;
|
|
5
5
|
/**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { markStartupPhase } from "../../foundation/startup/index.js";
|
|
1
2
|
export async function runOwnedUi(options) {
|
|
2
3
|
const { application, settings } = options;
|
|
3
4
|
try {
|
|
@@ -5,6 +6,7 @@ export async function runOwnedUi(options) {
|
|
|
5
6
|
await settings.load();
|
|
6
7
|
application.start();
|
|
7
8
|
await application.flush();
|
|
9
|
+
await markStartupPhase(process.env, "first-input-ready-render");
|
|
8
10
|
if (!application.disposed)
|
|
9
11
|
await application.waitUntilStopped();
|
|
10
12
|
return 0;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Readable, Writable } from "node:stream";
|
|
2
|
+
/** Pre-resource, line-mode confirmation matching Pi's cross-project CLI fork decision. */
|
|
3
|
+
export declare function createConsoleSessionForkPrompt(options?: {
|
|
4
|
+
readonly input?: Readable;
|
|
5
|
+
readonly output?: Writable;
|
|
6
|
+
}): (request: {
|
|
7
|
+
readonly sourceCwd: string;
|
|
8
|
+
}) => Promise<boolean>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { createInterface } from "node:readline";
|
|
2
|
+
/** Pre-resource, line-mode confirmation matching Pi's cross-project CLI fork decision. */
|
|
3
|
+
export function createConsoleSessionForkPrompt(options = {}) {
|
|
4
|
+
const input = options.input ?? process.stdin;
|
|
5
|
+
const output = options.output ?? process.stdout;
|
|
6
|
+
return async ({ sourceCwd }) => {
|
|
7
|
+
output.write(`Session found in different project: ${sourceCwd}\n`);
|
|
8
|
+
const wasFlowing = input.readableFlowing;
|
|
9
|
+
const readline = createInterface({ input, output });
|
|
10
|
+
try {
|
|
11
|
+
return await new Promise((resolve, reject) => {
|
|
12
|
+
const finish = (accepted) => { cleanup(); resolve(accepted); };
|
|
13
|
+
const cancel = () => finish(false);
|
|
14
|
+
const fail = (error) => { cleanup(); reject(error); };
|
|
15
|
+
const cleanup = () => {
|
|
16
|
+
readline.off("close", cancel);
|
|
17
|
+
readline.off("SIGINT", cancel);
|
|
18
|
+
input.off("error", fail);
|
|
19
|
+
};
|
|
20
|
+
readline.once("close", cancel);
|
|
21
|
+
readline.once("SIGINT", cancel);
|
|
22
|
+
input.once("error", fail);
|
|
23
|
+
readline.question("Fork this session into current directory? [y/N] ", answer => {
|
|
24
|
+
finish(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
readline.close();
|
|
30
|
+
if (wasFlowing !== true)
|
|
31
|
+
input.pause();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { AppHostServices, UiApp } from "../../
|
|
2
|
-
import { ShortcutRegistry, type PaneInputResult, type PaneMouseEvent, type PaneRect } from "../../
|
|
3
|
-
import type { OwnedUiSettingsSession } from "../../
|
|
1
|
+
import type { AppHostServices, UiApp } from "../../ui/apps/index.js";
|
|
2
|
+
import { ShortcutRegistry, type PaneInputResult, type PaneMouseEvent, type PaneRect } from "../../ui/components/index.js";
|
|
3
|
+
import type { OwnedUiSettingsSession } from "../../ui/settings/index.js";
|
|
4
4
|
export declare const SETTINGS_APP_ID = "settings";
|
|
5
5
|
export declare const SETTINGS_ROUTE = "settings";
|
|
6
6
|
type Action = "move-up" | "move-down" | "block-up" | "block-down" | "first" | "last" | "page-up" | "page-down" | "previous-value" | "next-value" | "activate" | "open-filter" | "close" | "part-previous" | "part-next" | "part-change";
|