@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
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Manual owned-UI checkpoint
|
|
2
|
+
|
|
3
|
+
This checkpoint is user-controlled. Tests and coding agents must not launch or focus a terminal, inject desktop input, resize windows, close applications, or clean up workstation processes.
|
|
4
|
+
|
|
5
|
+
## Prepare an exact candidate
|
|
6
|
+
|
|
7
|
+
For a checkout smoke test in Git Bash, build once and launch with `./scripts/dev` or `./scripts/dev pi`. Do not invoke `node scripts/development/dev-launch.mjs` or `node scripts/development/start-local.mjs` directly: that bypasses the color-preserving shell `exec` shape and can collapse the pinned 24-bit palette to Git Bash's 16 terminal colors. Run `node scripts/check-terminal-colour.mjs` first when color fidelity is in doubt; the first color block must differ from the terminal-palette cyan block.
|
|
8
|
+
|
|
9
|
+
From the candidate checkout, pack once and install that tarball into a disposable prefix:
|
|
10
|
+
|
|
11
|
+
```powershell
|
|
12
|
+
npm ci
|
|
13
|
+
npm run build
|
|
14
|
+
npm pack --ignore-scripts --pack-destination .artifacts/manual-owned-ui
|
|
15
|
+
npm install --prefix .artifacts/manual-owned-ui/install --ignore-scripts .artifacts/manual-owned-ui/<exact-tarball>.tgz
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Use isolated A1 control state:
|
|
19
|
+
|
|
20
|
+
```powershell
|
|
21
|
+
$manualRoot = (Resolve-Path ".artifacts/manual-owned-ui").Path
|
|
22
|
+
$env:A1_CONFIG_DIR = "$manualRoot\state\config"
|
|
23
|
+
$env:A1_DATA_DIR = "$manualRoot\state\data"
|
|
24
|
+
$env:A1_RUNTIME_DIR = "$manualRoot\state\runtime"
|
|
25
|
+
$env:A1_DATABASE_PATH = "$manualRoot\state\data\control.sqlite3"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Run each installed launch form yourself:
|
|
29
|
+
|
|
30
|
+
```powershell
|
|
31
|
+
& ".artifacts/manual-owned-ui/install/node_modules/.bin/a1.cmd"
|
|
32
|
+
& ".artifacts/manual-owned-ui/install/node_modules/.bin/a1.cmd" pi
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Both commands use the same A1-owned rendering and input pipeline. Bare `a1` enables A1-owned screens. `a1 pi` withholds those screens and reads the ordinary Pi profile. Confirm that files created through `/settings`, `/login`, sessions, and resource directories remain under the selected profile root.
|
|
36
|
+
|
|
37
|
+
Physical automation is not part of this repository baseline. Future certification tooling may run only on dedicated disposable workers or VMs with exclusive test desktops, never on this workstation.
|
|
38
|
+
|
|
39
|
+
## Compare bare A1 with `a1 pi`
|
|
40
|
+
|
|
41
|
+
Use the same terminal, working directory, dimensions, environment, and equivalent profile resources. Bare A1 and the comparison profile intentionally use separate profile roots.
|
|
42
|
+
|
|
43
|
+
- [ ] Startup resources, logo, notices, spacing, editor, and footer match.
|
|
44
|
+
- [ ] Text, Unicode, emoji, styles, cursor, and layout match.
|
|
45
|
+
- [ ] Rapid typing has no visible delay or dropped or duplicated characters.
|
|
46
|
+
- [ ] Ctrl+C, Ctrl+P, arrows, paste, focus, dialogs, mouse, and wheel behave correctly.
|
|
47
|
+
- [ ] Selection, copy, clipboard, scrollback, and resize behave correctly.
|
|
48
|
+
- [ ] Normal and error exits return a usable parent prompt.
|
|
49
|
+
- [ ] Parent typing, cursor movement, Backspace, Delete, and submission work after exit.
|
|
50
|
+
|
|
51
|
+
### Setting-controlled visual matrix
|
|
52
|
+
|
|
53
|
+
Use equivalent values in bare A1 and the Pi comparison profile. Exercise both a wide frame and a narrow frame that forces wrapping/clipping.
|
|
54
|
+
|
|
55
|
+
- [ ] `/settings`: selected cursor, label and value accent; unselected values muted; descriptions and hints dim; search uses `> ` with inverse cursor; scalar menus, numeric controls, warning-parts dialog, deferred notice, failed write, section spacing, clipping, and hidden-entry absence match their pinned semantic roles.
|
|
56
|
+
- [ ] Transcript: toggle images and image width, thinking level/visibility, Mermaid mode, output padding, cache notices, warnings, auto-compaction, queue modes, command autocomplete, provider timeout/retry/error, and changelog collapse. Existing and streaming blocks must re-render without focus, selection, scroll, or queued-work loss.
|
|
57
|
+
- [ ] Trust startup: from an undecided project, compare selected Trust/Do not trust rows, arrow navigation, Enter, Escape/Ctrl+C, clearing, cursor state, and restoration. No project extension/theme/prompt/skill may run before selection, and a fail-closed diagnostic must appear once on the restored parent rather than above a blank fullscreen frame.
|
|
58
|
+
- [ ] Terminal lifecycle: toggle hardware cursor, clear-on-shrink, and terminal progress; resize smaller/larger; open/close selectors; select and copy transcript text; verify no duplicate rows, stale OSC progress, leaked mouse mode, misplaced cursor, or broken parent input.
|
|
59
|
+
- [ ] Images: in Kitty or iTerm2 verify inline width and clipping; in Windows Terminal verify the textual fallback and absence of image protocol bytes without hiding `showImages`.
|
|
60
|
+
- [ ] Fullscreen exit `transcript`: verify the parent is restored before styled user, assistant Markdown, thinking, tool, notice, warning, error, and spacing rows are printed. No overlay, draft, animation, scrollbar, or inline-image payload may appear.
|
|
61
|
+
- [ ] Fullscreen exit `resume-hint`: verify only dim `To resume this session:` plus `a1 --session <compact-id>` is printed for the default directory. A custom directory must place quoted `--session-dir <dir>` before `--session`; the raw default `.jsonl` path must never print.
|
|
62
|
+
|
|
63
|
+
Record acceptance with:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
A1 commit/tarball:
|
|
67
|
+
Pi package: @earendil-works/pi-coding-agent 0.84.2
|
|
68
|
+
OS/version:
|
|
69
|
+
Terminal/version:
|
|
70
|
+
Terminal dimensions (wide/narrow):
|
|
71
|
+
Image protocol result:
|
|
72
|
+
Settings values exercised:
|
|
73
|
+
Outcome and any declared substitutions:
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Report failures with bare-versus-comparison behavior, platform and terminal versions, exact command, dimensions, settings values, reproducibility, and optional manually captured evidence.
|
|
77
|
+
|
|
78
|
+
For recovery, use `a1 pi`; do not use the removed `a1 ui` command. Manual acceptance can authorize an exact uncertified development preview after non-desktop gates pass. It does not certify stable presentation parity or platform support.
|
|
@@ -21,12 +21,11 @@ Use the exact generated filename if wildcard expansion is unavailable.
|
|
|
21
21
|
1. **Bare owned UI:** run `& $Candidate`. Confirm startup, typing, submission, transcript streaming, selector focus, mouse/keyboard scrolling, and ordinary shutdown.
|
|
22
22
|
2. **Extension surfaces:** in bare UI use `/reload`, then exercise configured extension notification, select, confirm, input, editor, replacement custom surface, and overlay custom surface. Confirm cancellation restores editor focus.
|
|
23
23
|
3. **Vanilla oracle:** run `& $Candidate pi`. Confirm untouched Pi uses the ordinary `~/.pi/agent` profile and does not show owned-UI or workspace surfaces.
|
|
24
|
-
4. **
|
|
25
|
-
5. **
|
|
26
|
-
6. **
|
|
27
|
-
7. **Recovery:** after any owned-UI failure, run `& $Candidate pi`; confirm the vanilla oracle remains available. Restart bare UI and confirm its normal profile remains intact.
|
|
24
|
+
4. **Resize and input:** while each mode is active, narrow and widen the terminal, enter Unicode and multiline text, use history/navigation keys, and scroll in both directions.
|
|
25
|
+
5. **Shutdown:** exit normally, then repeat and use Ctrl+C during work. Confirm the parent prompt remains usable and no child remains attached.
|
|
26
|
+
6. **Recovery:** after any owned-UI failure, run `& $Candidate pi`; confirm the vanilla oracle remains available. Restart bare UI and confirm its normal profile remains intact.
|
|
28
27
|
|
|
29
|
-
Do not remove `~/.a1/agent
|
|
28
|
+
Do not remove `~/.a1/agent` or `~/.pi/agent` during this checkpoint.
|
|
30
29
|
|
|
31
30
|
## Verdict recording
|
|
32
31
|
|
|
@@ -29,9 +29,10 @@ leave the launch without a terminal on its input; the launcher says so and stops
|
|
|
29
29
|
rather than opening a session that closes as it starts. Running `scripts/dev`
|
|
30
30
|
from the shell is the direct path.
|
|
31
31
|
|
|
32
|
-
A directly launched `node scripts/
|
|
33
|
-
|
|
34
|
-
the
|
|
32
|
+
A directly launched `node scripts/development/dev-launch.mjs` or
|
|
33
|
+
`node scripts/development/start-local.mjs` under Git Bash does not, and neither
|
|
34
|
+
does a directly launched `node …/pi/dist/cli.js`: the collapse belongs to the
|
|
35
|
+
launch, not to either application.
|
|
35
36
|
|
|
36
37
|
## Checking a terminal
|
|
37
38
|
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Repository governance live acceptance
|
|
2
|
+
|
|
3
|
+
## Implementation lifecycle
|
|
4
|
+
|
|
5
|
+
- PR #165 was manually squash-merged by `timurproko` from validated head
|
|
6
|
+
`45aab61c5e4568d3d26dc970f76e9ec86918f323` to `develop` commit
|
|
7
|
+
`e4cdc67555e9f25d03f251be19baa8fc446ac313`.
|
|
8
|
+
- Cleanup run `33185942656` used trusted `develop` policy with `contents: write` only
|
|
9
|
+
and reported `already-absent`; the implementation branch remained absent.
|
|
10
|
+
- The read-only live governance report matched every declared field after merge.
|
|
11
|
+
|
|
12
|
+
## Acceptance defect and correction
|
|
13
|
+
|
|
14
|
+
- Initial OpenSpec probe PR #166 automatically squash-merged validated head
|
|
15
|
+
`c30c0a091a6a6a727057befcdd775422988be382` to
|
|
16
|
+
`f8d60080cfd9925b33a19a5d40c707637ac00b08`, but GitHub suppressed the recursive
|
|
17
|
+
close-event workflow because integration was authored with `GITHUB_TOKEN`.
|
|
18
|
+
- Its exact unchanged branch remained, proving the first implementation incomplete.
|
|
19
|
+
The branch was manually deleted only after its expected SHA and lack of an open PR
|
|
20
|
+
were reverified.
|
|
21
|
+
- Corrective PR #167 was manually squash-merged from validated head
|
|
22
|
+
`3a09042386df2501accc1eec3b424b94ae84daa4` to
|
|
23
|
+
`e8d639985a811f01cd5daeb027db5069d1724596`. Cleanup run `33188206793`
|
|
24
|
+
succeeded with `already-absent`.
|
|
25
|
+
|
|
26
|
+
## Automatic OpenSpec acceptance
|
|
27
|
+
|
|
28
|
+
- PR #168 contained only `openspec/**` paths.
|
|
29
|
+
- Development validation run `33188285639` passed for exact head
|
|
30
|
+
`6678d9237ca7c4109beaed0d97d5fb1183fe5f97` without product tests.
|
|
31
|
+
- `github-actions` automatically squash-merged it to
|
|
32
|
+
`c2fa730a4b070f9f6717329c24158def5c766f11`.
|
|
33
|
+
- Trusted documentation reconciliation run `33188329123` reported `deleted` for the
|
|
34
|
+
same expected head SHA, and the remote branch was verified absent.
|
|
35
|
+
|
|
36
|
+
## Automatic root README acceptance
|
|
37
|
+
|
|
38
|
+
- PR #169 changed only root `README.md`.
|
|
39
|
+
- Development validation run `33188400573` passed for exact head
|
|
40
|
+
`165c5159031d80059c4d93c36c6d10113ec7ba8e` without product tests.
|
|
41
|
+
- `github-actions` automatically squash-merged it to
|
|
42
|
+
`0180088a42b7cdacaf84ec66ff5a87be1a697155`.
|
|
43
|
+
- Trusted documentation reconciliation run `33188434277` reported `deleted` for the
|
|
44
|
+
same expected head SHA, and the remote branch was verified absent.
|
|
45
|
+
|
|
46
|
+
## Mixed-path manual acceptance
|
|
47
|
+
|
|
48
|
+
PR #170 combined this evidence file outside the exact automatic allowlist with an
|
|
49
|
+
OpenSpec task update. Development validation run `33188542485` passed for exact head
|
|
50
|
+
`b95bdbf08ad6db76c5fab2bfca254026a3c4bcc1` without product tests. Auto-merge
|
|
51
|
+
remained disabled and the pull request remained open and mergeable until `timurproko`
|
|
52
|
+
manually squash-merged it to `6ab1e4d29b9edec8501bac774bc755e66240ea40`.
|
|
53
|
+
Close-event cleanup run `33188616709` reported `already-absent`, and the remote branch
|
|
54
|
+
was verified absent after the explicit merge.
|
|
55
|
+
|
|
56
|
+
## Automatic maintained-documentation acceptance
|
|
57
|
+
|
|
58
|
+
- Implementation PR #180 was manually squash-merged after required validation from
|
|
59
|
+
head `8f40bfaaa5e8410e77b1c9cc0667c62bc4c62d4b` to
|
|
60
|
+
`45a59a7b696d537a4dc8fe62000a60c20e504ab2`.
|
|
61
|
+
- PR #181 changes only this maintained `docs/**` file and is the live acceptance
|
|
62
|
+
probe for the expanded allowlist.
|
|
63
|
+
- Acceptance requires current-head documentation validation, automatic squash
|
|
64
|
+
integration without maintainer merge action, and exact-head remote branch cleanup.
|
|
65
|
+
Exact run and merge evidence is recorded with the completed OpenSpec change.
|
|
66
|
+
|
|
67
|
+
## Advanced-ref refusal and final policy state
|
|
68
|
+
|
|
69
|
+
The isolated mocked-GitHub fixture executed the production shared reconciler with
|
|
70
|
+
expected SHA `1111111111111111111111111111111111111111` and advanced live SHA
|
|
71
|
+
`2222222222222222222222222222222222222222`. It returned `refused` with reason
|
|
72
|
+
`live branch advanced after merge` and issued zero DELETE requests. The bounded
|
|
73
|
+
record is archived as `evidence/advanced-ref-refusal.json`.
|
|
74
|
+
|
|
75
|
+
The final read-only live report matched all declared repository settings, Actions
|
|
76
|
+
policy, security capabilities, environments, protected refs, complete rulesets, and
|
|
77
|
+
workflow inventory with zero differences. No policy apply was run.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@timurproko/a1",
|
|
3
|
-
"version": "0.1.8-dev.
|
|
3
|
+
"version": "0.1.8-dev.260",
|
|
4
4
|
"description": "Standalone terminal workspace for supervised native and managed agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "npm@11.13.0",
|
|
@@ -8,10 +8,7 @@
|
|
|
8
8
|
"a1": "bin/cli.js"
|
|
9
9
|
},
|
|
10
10
|
"imports": {
|
|
11
|
-
"#pi-tui":
|
|
12
|
-
"./node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-tui/dist/index.js",
|
|
13
|
-
"@earendil-works/pi-tui"
|
|
14
|
-
]
|
|
11
|
+
"#pi-tui": "./bin/pi-tui.js"
|
|
15
12
|
},
|
|
16
13
|
"files": [
|
|
17
14
|
"bin",
|
|
@@ -24,42 +21,52 @@
|
|
|
24
21
|
"node": ">=22.19.0 <25"
|
|
25
22
|
},
|
|
26
23
|
"scripts": {
|
|
24
|
+
"postinstall": "node bin/sync-pi-tui-proxy.js",
|
|
27
25
|
"clean": "node scripts/clean.mjs",
|
|
28
|
-
"build": "npm run clean && tsc -p tsconfig.build.json && node scripts/build-process-guardian.mjs",
|
|
29
|
-
"build:process-guardian": "node scripts/build-process-guardian.mjs",
|
|
26
|
+
"build": "npm run clean && tsc -p tsconfig.build.json && node scripts/development/build-process-guardian.mjs && node scripts/release/generate-runtime-payload-inventory.mjs",
|
|
27
|
+
"build:process-guardian": "node scripts/development/build-process-guardian.mjs",
|
|
30
28
|
"typecheck": "tsgo -p tsconfig.json --noEmit",
|
|
31
|
-
"check:architecture": "node scripts/check-architecture.mjs && node scripts/product-identifier-policy.mjs --check && node scripts/check-product-identity-boundaries.mjs && node scripts/check-package-identity.mjs && node scripts/check-pinned-pi-source-ledger.mjs && node scripts/check-terminal-host-provenance.mjs",
|
|
32
|
-
"check:
|
|
33
|
-
"check:
|
|
29
|
+
"check:architecture": "node scripts/governance/check-architecture.mjs && node scripts/governance/product-identifier-policy.mjs --check && node scripts/governance/check-product-identity-boundaries.mjs && node scripts/governance/check-package-identity.mjs && node scripts/governance/check-pinned-pi-source-ledger.mjs && node scripts/governance/check-terminal-host-provenance.mjs",
|
|
30
|
+
"check:code-documentation": "node scripts/governance/check-code-documentation.mjs --mode full",
|
|
31
|
+
"check:code-documentation:changed": "node scripts/release/run-changed-documentation.mjs",
|
|
32
|
+
"select:validation-impact": "node scripts/release/select-validation-impact.mjs",
|
|
33
|
+
"check:customization-ready": "node scripts/governance/check-owned-ui-customization-prerequisites.mjs",
|
|
34
|
+
"check:deprecated": "node scripts/governance/check-deprecated-dependencies.mjs",
|
|
35
|
+
"check:docs-governance": "node scripts/governance/check-docs-governance.mjs",
|
|
36
|
+
"check:repository-governance": "node scripts/governance/check-github-repository-governance.mjs --check",
|
|
34
37
|
"branches:prune": "node scripts/prune-merged-branches.mjs",
|
|
35
38
|
"check": "npm run test:fast",
|
|
36
|
-
"
|
|
39
|
+
"develop": "node scripts/development/develop.mjs",
|
|
40
|
+
"release": "node scripts/release/release.mjs",
|
|
37
41
|
"test": "npm run test:fast",
|
|
38
|
-
"test:fast": "node scripts/run-validation-tier.mjs typecheck fast",
|
|
39
|
-
"test:scope": "node scripts/run-validation-tier.mjs",
|
|
40
|
-
"test:full": "node scripts/run-validation-tier.mjs full-release",
|
|
41
|
-
"test:release": "node scripts/run-release-gates.mjs",
|
|
42
|
-
"test:terminal-host": "node scripts/run-terminal-host-probe.mjs",
|
|
43
|
-
"test:pi-engine-conformance": "vitest run test/
|
|
44
|
-
"report:pi-engine-conformance": "npm run build --silent && node scripts/run-pi-engine-conformance.mjs",
|
|
42
|
+
"test:fast": "node scripts/release/run-validation-tier.mjs typecheck documentation-changed fast",
|
|
43
|
+
"test:scope": "node scripts/release/run-validation-tier.mjs",
|
|
44
|
+
"test:full": "node scripts/release/run-validation-tier.mjs full-release",
|
|
45
|
+
"test:release": "node scripts/release/run-release-gates.mjs",
|
|
46
|
+
"test:terminal-host": "node scripts/development/run-terminal-host-probe.mjs",
|
|
47
|
+
"test:pi-engine-conformance": "vitest run test/integrations/pi/engine/conformance.test.ts test/integrations/pi/engine/runtime-integration.test.ts test/integrations/pi/engine/session-integration.test.ts",
|
|
48
|
+
"report:pi-engine-conformance": "npm run build --silent && node scripts/pi/run-pi-engine-conformance.mjs",
|
|
49
|
+
"report:rendering-stability": "tsx scripts/pi/report-rendering-stability.ts",
|
|
50
|
+
"report:input-responsiveness": "tsx scripts/pi/report-input-responsiveness.ts",
|
|
45
51
|
"sync:pi-ui": "npm run update:pi-component-parity && npm run update:pi-event-frame-parity && npm run update:pi-settings-metadata",
|
|
46
|
-
"update:pi-component-parity": "tsx scripts/update-pi-component-parity.ts",
|
|
47
|
-
"update:pi-event-frame-parity": "tsx scripts/update-pi-event-frame-parity.ts",
|
|
48
|
-
"proof:terminal-host": "node scripts/run-terminal-host.mjs",
|
|
49
|
-
"start": "npm run build && node scripts/dev-launch.mjs",
|
|
50
|
-
"start:pi": "npm run build && node scripts/dev-launch.mjs pi",
|
|
51
|
-
"
|
|
52
|
-
"prepack": "node scripts/prepack-gate.mjs",
|
|
52
|
+
"update:pi-component-parity": "tsx scripts/pi/update-pi-component-parity.ts",
|
|
53
|
+
"update:pi-event-frame-parity": "tsx scripts/pi/update-pi-event-frame-parity.ts",
|
|
54
|
+
"proof:terminal-host": "node scripts/development/run-terminal-host.mjs",
|
|
55
|
+
"start": "npm run build && node scripts/development/dev-launch.mjs",
|
|
56
|
+
"start:pi": "npm run build && node scripts/development/dev-launch.mjs pi",
|
|
57
|
+
"prepack": "node scripts/release/prepack-gate.mjs",
|
|
53
58
|
"prepublishOnly": "npm run test:release",
|
|
54
59
|
"prepare": "npm run build",
|
|
55
|
-
"update:pi-settings-metadata": "node scripts/update-pi-settings-metadata.mjs"
|
|
60
|
+
"update:pi-settings-metadata": "node scripts/pi/update-pi-settings-metadata.mjs"
|
|
56
61
|
},
|
|
57
62
|
"dependencies": {
|
|
58
63
|
"@earendil-works/pi-coding-agent": "0.84.2",
|
|
59
64
|
"@earendil-works/pi-tui": "0.84.2",
|
|
65
|
+
"chalk": "5.6.2",
|
|
60
66
|
"cross-spawn": "7.0.6",
|
|
61
67
|
"grok-mermaid": "0.2.2",
|
|
62
|
-
"semver": "7.8.5"
|
|
68
|
+
"semver": "7.8.5",
|
|
69
|
+
"undici": "8.9.0"
|
|
63
70
|
},
|
|
64
71
|
"devDependencies": {
|
|
65
72
|
"@types/cross-spawn": "6.0.6",
|
|
@@ -87,5 +94,8 @@
|
|
|
87
94
|
},
|
|
88
95
|
"publishConfig": {
|
|
89
96
|
"access": "public"
|
|
97
|
+
},
|
|
98
|
+
"optionalDependencies": {
|
|
99
|
+
"@mariozechner/clipboard": "^0.3.9"
|
|
90
100
|
}
|
|
91
101
|
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `pi` and `sandbox` exist to compare A1 against pinned Pi and to try resources
|
|
3
|
-
* against an isolated profile. Both are development instruments rather than
|
|
4
|
-
* product, so a stable release does not carry them: what a released `a1` exposes
|
|
5
|
-
* is the product plus its maintenance and package commands.
|
|
6
|
-
*
|
|
7
|
-
* Which build this is comes from its own version. A prerelease version is a
|
|
8
|
-
* `next`-channel build, which is where that work happens; a release version is
|
|
9
|
-
* not. Nothing to configure, and no way for a released build to be talked into it.
|
|
10
|
-
*/
|
|
11
|
-
export interface CliCapabilities {
|
|
12
|
-
readonly developmentProfiles: boolean;
|
|
13
|
-
}
|
|
14
|
-
export declare function cliCapabilities(version: string): CliCapabilities;
|
|
15
|
-
export declare function isPrereleaseVersion(version: string): boolean;
|
package/dist/src/cli/dispatch.js
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { interactiveLaunchIntent } from "../features/launch/index.js";
|
|
2
|
-
import { PRODUCT_TEXT } from "../product-identity.js";
|
|
3
|
-
export function cliUsage(capabilities) {
|
|
4
|
-
return PRODUCT_TEXT.usage([
|
|
5
|
-
"",
|
|
6
|
-
...(capabilities.developmentProfiles ? ["pi", "sandbox"] : []),
|
|
7
|
-
"version",
|
|
8
|
-
"update [self|--models]",
|
|
9
|
-
"update:next",
|
|
10
|
-
"update:<commit>",
|
|
11
|
-
"pi install <source>",
|
|
12
|
-
"pi remove <source>",
|
|
13
|
-
"pi list",
|
|
14
|
-
"pi update [--extensions|<source>]",
|
|
15
|
-
]);
|
|
16
|
-
}
|
|
17
|
-
const PROFILE_WORDS = new Set(["pi", "sandbox"]);
|
|
18
|
-
export async function dispatchCli(arguments_, handlers, output, capabilities) {
|
|
19
|
-
const command = parseCliCommand(arguments_, capabilities);
|
|
20
|
-
if (command.kind === "error") {
|
|
21
|
-
output.stderr(`${command.message}\n${cliUsage(capabilities)}\n`);
|
|
22
|
-
return 2;
|
|
23
|
-
}
|
|
24
|
-
if (command.kind === "launch")
|
|
25
|
-
return await handlers.launch(interactiveLaunchIntent(command.profileId));
|
|
26
|
-
if (command.kind === "version")
|
|
27
|
-
return await handlers.version();
|
|
28
|
-
if (command.kind === "packages")
|
|
29
|
-
return await handlers.packages(command.request);
|
|
30
|
-
return await handlers.update(command.channel, command.target);
|
|
31
|
-
}
|
|
32
|
-
export function parseCliCommand(arguments_, capabilities) {
|
|
33
|
-
if (arguments_.length === 0)
|
|
34
|
-
return { kind: "launch", profileId: "a1" };
|
|
35
|
-
const [command, ...rest] = arguments_;
|
|
36
|
-
if (command === "pi") {
|
|
37
|
-
if (rest.length > 0)
|
|
38
|
-
return parsePiPackageCommand(rest);
|
|
39
|
-
if (capabilities.developmentProfiles)
|
|
40
|
-
return { kind: "launch", profileId: "pi" };
|
|
41
|
-
}
|
|
42
|
-
if (capabilities.developmentProfiles && command === "sandbox") {
|
|
43
|
-
return withoutArguments(rest, { kind: "launch", profileId: command });
|
|
44
|
-
}
|
|
45
|
-
if (command === "version")
|
|
46
|
-
return withoutArguments(rest, { kind: "version" });
|
|
47
|
-
if (command !== undefined && command.startsWith("update:"))
|
|
48
|
-
return parseColonUpdate(command.slice("update:".length), rest);
|
|
49
|
-
if (command === "update")
|
|
50
|
-
return parseUpdate(rest);
|
|
51
|
-
if (command === "install" || command === "remove" || command === "uninstall" || command === "list") {
|
|
52
|
-
return packageNamespaceRejection(command, rest.join(" ") || undefined);
|
|
53
|
-
}
|
|
54
|
-
if (command === "ui")
|
|
55
|
-
return { kind: "error", message: `The ui subcommand was removed; run bare ${PRODUCT_TEXT.commandName} for the owned UI.` };
|
|
56
|
-
if (command === "agent")
|
|
57
|
-
return { kind: "error", message: `Bare ${PRODUCT_TEXT.commandName} is the ${PRODUCT_TEXT.displayName} agent experience; there is no agent subcommand.` };
|
|
58
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`received an unknown command: ${command ?? ""}`) };
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* What follows the colon says which build to move to. `next` is the newest
|
|
62
|
-
* preview; anything else names one outright, by the commit it was built from or by
|
|
63
|
-
* its full version — a preview is published as `<version>-dev.<commit>`, so the
|
|
64
|
-
* commit alone is enough to find it.
|
|
65
|
-
*/
|
|
66
|
-
function parseColonUpdate(suffix, rest) {
|
|
67
|
-
if (rest.length > 0)
|
|
68
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic("update takes what to move to after the colon, and nothing else.") };
|
|
69
|
-
if (suffix === "next")
|
|
70
|
-
return { kind: "update", channel: "next" };
|
|
71
|
-
if (suffix.length === 0)
|
|
72
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`update: needs a preview after the colon, as in ${PRODUCT_TEXT.commandName} update:next.`) };
|
|
73
|
-
if (!/^[0-9a-z][0-9a-z.+-]*$/i.test(suffix)) {
|
|
74
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`received an unusable preview: ${suffix}`) };
|
|
75
|
-
}
|
|
76
|
-
return { kind: "update", channel: "next", target: suffix };
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Top-level `update` owns A1 itself and A1's model catalogs. Extension package
|
|
80
|
-
* maintenance lives under the `pi` compatibility namespace, while updating the
|
|
81
|
-
* pinned Pi runtime remains impossible.
|
|
82
|
-
*/
|
|
83
|
-
function parseUpdate(rest) {
|
|
84
|
-
if (rest.length === 0)
|
|
85
|
-
return { kind: "update", channel: "stable" };
|
|
86
|
-
if (rest.length > 1)
|
|
87
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic("update accepts one target.") };
|
|
88
|
-
const [target] = rest;
|
|
89
|
-
if (target === "self")
|
|
90
|
-
return { kind: "update", channel: "stable" };
|
|
91
|
-
if (target === "pi") {
|
|
92
|
-
return {
|
|
93
|
-
kind: "error",
|
|
94
|
-
message: PRODUCT_TEXT.diagnostic(`pins the Pi version it was certified against; run ${PRODUCT_TEXT.commandName} update to move ${PRODUCT_TEXT.displayName} itself.`),
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
if (target === "next" || target === "stable") {
|
|
98
|
-
const form = target === "next" ? `${PRODUCT_TEXT.commandName} update:next` : `${PRODUCT_TEXT.commandName} update`;
|
|
99
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`selects a release channel with a colon; run ${form}.`) };
|
|
100
|
-
}
|
|
101
|
-
if (target === "--models")
|
|
102
|
-
return { kind: "packages", request: { verb: "refresh-models", source: null } };
|
|
103
|
-
if (target === "--extensions" || (target !== undefined && !target.startsWith("-"))) {
|
|
104
|
-
return packageNamespaceRejection("update", target === "--extensions" ? "--extensions" : target);
|
|
105
|
-
}
|
|
106
|
-
return unknownOption(target ?? "", "update");
|
|
107
|
-
}
|
|
108
|
-
function parsePiPackageCommand(arguments_) {
|
|
109
|
-
const [verb, ...rest] = arguments_;
|
|
110
|
-
if (verb === "install" || verb === "remove" || verb === "uninstall") {
|
|
111
|
-
return parseSourceCommand(verb === "install" ? "install" : "remove", rest);
|
|
112
|
-
}
|
|
113
|
-
if (verb === "list")
|
|
114
|
-
return withoutArguments(rest, { kind: "packages", request: { verb: "list", source: null } });
|
|
115
|
-
if (verb === "update")
|
|
116
|
-
return parsePiPackageUpdate(rest);
|
|
117
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`received an unknown pi package command: ${verb ?? ""}`) };
|
|
118
|
-
}
|
|
119
|
-
function parsePiPackageUpdate(rest) {
|
|
120
|
-
if (rest.length === 0) {
|
|
121
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`pi update needs --extensions or a package source.`) };
|
|
122
|
-
}
|
|
123
|
-
if (rest.length > 1)
|
|
124
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic("pi update accepts one target.") };
|
|
125
|
-
const [target] = rest;
|
|
126
|
-
if (target === "--extensions")
|
|
127
|
-
return { kind: "packages", request: { verb: "update", source: null } };
|
|
128
|
-
if (target === "--models") {
|
|
129
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`refreshes its model catalogs at the top level; run ${PRODUCT_TEXT.commandName} update --models.`) };
|
|
130
|
-
}
|
|
131
|
-
if (target === undefined || target.startsWith("-"))
|
|
132
|
-
return unknownOption(target ?? "", "pi update");
|
|
133
|
-
if (PROFILE_WORDS.has(target))
|
|
134
|
-
return profileRejection("update");
|
|
135
|
-
return { kind: "packages", request: { verb: "update", source: target } };
|
|
136
|
-
}
|
|
137
|
-
function parseSourceCommand(verb, rest) {
|
|
138
|
-
const flag = rest.find(argument => argument.startsWith("-"));
|
|
139
|
-
if (flag !== undefined)
|
|
140
|
-
return unknownOption(flag, verb);
|
|
141
|
-
if (rest.length === 0)
|
|
142
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`${verb} requires a package source.`) };
|
|
143
|
-
if (rest.length > 1)
|
|
144
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`${verb} accepts one package source.`) };
|
|
145
|
-
const [source] = rest;
|
|
146
|
-
if (source === undefined)
|
|
147
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`${verb} requires a package source.`) };
|
|
148
|
-
if (PROFILE_WORDS.has(source))
|
|
149
|
-
return profileRejection(verb);
|
|
150
|
-
return { kind: "packages", request: { verb, source } };
|
|
151
|
-
}
|
|
152
|
-
function withoutArguments(rest, command) {
|
|
153
|
-
if (rest.length === 0)
|
|
154
|
-
return command;
|
|
155
|
-
const [argument] = rest;
|
|
156
|
-
if (argument !== undefined && (PROFILE_WORDS.has(argument) || argument.startsWith("--profile")))
|
|
157
|
-
return profileRejection("list");
|
|
158
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic("commands do not accept additional arguments.") };
|
|
159
|
-
}
|
|
160
|
-
function packageNamespaceRejection(verb, target) {
|
|
161
|
-
const suffix = target === undefined ? "" : ` ${target}`;
|
|
162
|
-
return {
|
|
163
|
-
kind: "error",
|
|
164
|
-
message: PRODUCT_TEXT.diagnostic(`manages extension packages under its pi namespace; run ${PRODUCT_TEXT.commandName} pi ${verb}${suffix}.`),
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
function profileRejection(verb) {
|
|
168
|
-
return {
|
|
169
|
-
kind: "error",
|
|
170
|
-
message: PRODUCT_TEXT.diagnostic(`manages packages in its own profile, so ${verb} takes no profile; Pi manages Pi's own profile.`),
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
function unknownOption(option, verb) {
|
|
174
|
-
if (option.startsWith("--profile"))
|
|
175
|
-
return profileRejection(verb);
|
|
176
|
-
return { kind: "error", message: PRODUCT_TEXT.diagnostic(`received an unknown option for ${verb}: ${option}`) };
|
|
177
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { readFile } from "node:fs/promises";
|
|
3
|
-
import { resolve } from "node:path";
|
|
4
|
-
import crossSpawn from "cross-spawn";
|
|
5
|
-
import { valid as validSemver } from "semver";
|
|
6
|
-
import { PRODUCT_TEXT } from "../product-identity.js";
|
|
7
|
-
const defaultOutput = {
|
|
8
|
-
stdout(message) { process.stdout.write(message); },
|
|
9
|
-
stderr(message) { process.stderr.write(message); },
|
|
10
|
-
};
|
|
11
|
-
export async function runVersionStats(options) {
|
|
12
|
-
const output = options.output ?? defaultOutput;
|
|
13
|
-
const runner = options.runner ?? createVersionProcessRunner();
|
|
14
|
-
let installed;
|
|
15
|
-
try {
|
|
16
|
-
const manifest = JSON.parse(await readFile(resolve(options.packageRoot, "package.json"), "utf8"));
|
|
17
|
-
installed = parseVersion(manifest.version, "installed package");
|
|
18
|
-
}
|
|
19
|
-
catch (error) {
|
|
20
|
-
output.stderr(`${PRODUCT_TEXT.diagnostic(`could not read its installed version: ${message(error)}`)}\n`);
|
|
21
|
-
return 1;
|
|
22
|
-
}
|
|
23
|
-
const remote = await queryDistTags(runner);
|
|
24
|
-
output.stdout(`Installed: ${installed}\nRelease: ${remote.release ?? "unavailable"}\nNext: ${remote.next ?? "unavailable"}\n`);
|
|
25
|
-
if (remote.error)
|
|
26
|
-
output.stderr(`${PRODUCT_TEXT.diagnostic(`could not resolve npm dist-tags: ${remote.error}`)}\n`);
|
|
27
|
-
return 0;
|
|
28
|
-
}
|
|
29
|
-
async function queryDistTags(runner) {
|
|
30
|
-
let result;
|
|
31
|
-
try {
|
|
32
|
-
result = await runner("npm", ["view", PRODUCT_TEXT.packageName, "dist-tags", "--json"]);
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
return unavailable(message(error));
|
|
36
|
-
}
|
|
37
|
-
if (result.code !== 0)
|
|
38
|
-
return unavailable(`npm exited with status ${result.code ?? "unknown"}`);
|
|
39
|
-
try {
|
|
40
|
-
const metadata = JSON.parse(result.stdout);
|
|
41
|
-
if (typeof metadata !== "object" || metadata === null || Array.isArray(metadata))
|
|
42
|
-
throw new TypeError("npm returned a non-object dist-tags value");
|
|
43
|
-
const tags = metadata;
|
|
44
|
-
const release = parseVersion(tags.latest, "npm latest");
|
|
45
|
-
const next = tags.next === undefined ? null : parseVersion(tags.next, "npm next");
|
|
46
|
-
return { release, next, error: null };
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
return unavailable(message(error));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
function unavailable(error) {
|
|
53
|
-
return { release: null, next: null, error };
|
|
54
|
-
}
|
|
55
|
-
function createVersionProcessRunner() {
|
|
56
|
-
return async (command, arguments_) => await new Promise((resolvePromise, rejectPromise) => {
|
|
57
|
-
const child = process.platform === "win32"
|
|
58
|
-
? crossSpawn(command, [...arguments_], { stdio: ["ignore", "pipe", "ignore"] })
|
|
59
|
-
: spawn(command, [...arguments_], { stdio: ["ignore", "pipe", "ignore"] });
|
|
60
|
-
const stdout = [];
|
|
61
|
-
child.stdout?.on("data", chunk => stdout.push(Buffer.from(chunk)));
|
|
62
|
-
child.once("error", rejectPromise);
|
|
63
|
-
child.once("close", code => resolvePromise({ code, stdout: Buffer.concat(stdout).toString("utf8") }));
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
function parseVersion(value, source) {
|
|
67
|
-
const parsed = typeof value === "string" ? validSemver(value) : null;
|
|
68
|
-
if (!parsed)
|
|
69
|
-
throw new Error(`${source} did not provide a valid semantic version`);
|
|
70
|
-
return parsed;
|
|
71
|
-
}
|
|
72
|
-
function message(error) { return error instanceof Error ? error.message : String(error); }
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { type AgentEnginePort } from "../foundation/agent-engine-contracts/index.js";
|
|
2
|
-
import { type PiEngineAdapter } from "../foundation/pi-engine-adapter/index.js";
|
|
3
|
-
import { type OwnedUiApplicationPort, type PresentationComponentPort, type PresentationRuntimePort, type PresentationTerminalPort } from "../foundation/presentation-contracts/index.js";
|
|
4
|
-
import { OwnedUiSettingsSession } from "../foundation/owned-ui-settings/index.js";
|
|
5
|
-
import type { UiRouteHost } from "../foundation/pi-owned-ui-integration/index.js";
|
|
6
|
-
export interface ProcessCompositionOptions {
|
|
7
|
-
readonly cwd?: string;
|
|
8
|
-
readonly sessionId?: string;
|
|
9
|
-
readonly engine?: AgentEnginePort;
|
|
10
|
-
readonly presentationFactory?: (root: PresentationComponentPort, terminal: PresentationTerminalPort) => PresentationRuntimePort;
|
|
11
|
-
readonly createPiAdapter?: () => Promise<PiEngineAdapter>;
|
|
12
|
-
}
|
|
13
|
-
export interface OwnedUiCompositionOptions {
|
|
14
|
-
readonly cwd?: string;
|
|
15
|
-
readonly terminal?: PresentationTerminalPort;
|
|
16
|
-
readonly createPiAdapter?: () => Promise<PiEngineAdapter>;
|
|
17
|
-
/**
|
|
18
|
-
* A1 profile whose settings this session reads and writes. Omitted keeps the
|
|
19
|
-
* session settings-free, which is what the pinned comparison paths use.
|
|
20
|
-
*/
|
|
21
|
-
readonly profileId?: string;
|
|
22
|
-
/**
|
|
23
|
-
* Whether A1's own surfaces are reachable. Withheld for the rendering parity
|
|
24
|
-
* comparison, which measures this composition against pinned Pi and so must
|
|
25
|
-
* present Pi's interface and nothing of A1's own. It is the same composition
|
|
26
|
-
* either way: a parity run built beside the product would measure itself.
|
|
27
|
-
*/
|
|
28
|
-
readonly ownedSurfaces?: "on" | "off";
|
|
29
|
-
}
|
|
30
|
-
export interface OwnedUiComposition {
|
|
31
|
-
readonly application: OwnedUiApplicationPort;
|
|
32
|
-
/** Present when a profile was supplied, so the caller can resolve settings before start. */
|
|
33
|
-
readonly settings: OwnedUiSettingsSession | null;
|
|
34
|
-
}
|
|
35
|
-
export declare function composeOwnedUiApplication(options?: OwnedUiCompositionOptions): Promise<OwnedUiApplicationPort>;
|
|
36
|
-
export declare function composeOwnedUi(options?: OwnedUiCompositionOptions): Promise<OwnedUiComposition>;
|
|
37
|
-
export interface ProcessComposition {
|
|
38
|
-
readonly engine: AgentEnginePort;
|
|
39
|
-
createPresentation(root: PresentationComponentPort, terminal: PresentationTerminalPort): PresentationRuntimePort;
|
|
40
|
-
dispose(): Promise<void>;
|
|
41
|
-
}
|
|
42
|
-
export declare function composeProcess(options?: ProcessCompositionOptions): Promise<ProcessComposition>;
|
|
43
|
-
/**
|
|
44
|
-
* Registers the A1-owned screens and adapts the app host to the shell's route
|
|
45
|
-
* seam. The shell mounts whatever surface it is handed and forwards keys; it
|
|
46
|
-
* never learns what an app is.
|
|
47
|
-
*/
|
|
48
|
-
export declare function createOwnedRouteHost(settings: OwnedUiSettingsSession): UiRouteHost;
|