@timurproko/a1 0.1.8-dev.21b95d6 → 0.1.8-dev.226
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 +4 -1
- 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 +1 -1
- package/bin/sync-pi-tui-proxy.js +97 -0
- package/bin/ui.js +25 -6
- package/bin/warmup.js +18 -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 +6 -0
- package/dist/cli/dispatch.js +202 -0
- package/dist/{src/cli → cli}/packages.d.ts +10 -2
- package/dist/{src/cli → cli}/packages.js +24 -20
- 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 +28 -0
- package/dist/composition/owned-ui.js +64 -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/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/{src/features → features}/launch/intent.d.ts +3 -2
- package/dist/features/launch/intent.js +3 -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 +1 -0
- package/dist/{src/features → features}/owned-ui/index.js +1 -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/{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.js +10 -2
- 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 +28 -0
- package/dist/{src/foundation → foundation}/lifecycle/paths.js +21 -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/{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 +1 -0
- package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +1 -0
- 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 +14 -4
- package/dist/{src/foundation → foundation}/release/bootstrap.js +66 -13
- 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 +78 -0
- package/dist/foundation/release/dependency-layer.js +487 -0
- package/dist/foundation/release/endpoints.d.ts +20 -0
- package/dist/foundation/release/endpoints.js +50 -0
- package/dist/{src/foundation → foundation}/release/index.d.ts +3 -0
- package/dist/{src/foundation → foundation}/release/index.js +3 -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 +3 -1
- package/dist/{src/foundation → foundation}/release/release-store.js +60 -10
- package/dist/{src/foundation → foundation}/release/release.d.ts +4 -1
- package/dist/{src/foundation → foundation}/release/release.js +10 -3
- 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 +114 -54
- 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/{src/foundation → foundation}/supervision/main.js +11 -5
- 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 +51 -2
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
- package/dist/integrations/pi/components/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 +32 -17
- 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 +1 -1
- package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.d.ts +52 -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 +22 -4
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +289 -68
- 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 +3 -0
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +3 -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 +2 -2
- 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 +16 -1
- package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +39 -4
- 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/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/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 +137 -0
- package/dist/integrations/pi/session-ui/session-shell-root.js +1106 -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 +415 -775
- package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +44 -0
- package/dist/integrations/pi/session-ui/session-viewport-controller.js +434 -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 +63 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +240 -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 +1 -1
- 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 +4 -0
- package/dist/{src/foundation/ui-components → ui/components}/index.js +4 -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 +235 -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 +146 -0
- package/dist/ui/components/transcript-viewport.js +629 -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/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 +34 -5
- package/docs/ci-release-runbook.md +186 -79
- package/docs/features/launch-profiles.md +10 -19
- 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.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 -112
- 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/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.d.ts +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}/launch-guardian/main.d.ts +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/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/lifecycle/index.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}/process-containment/index.d.ts +0 -0
- /package/dist/{src/foundation → foundation}/process-containment/index.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 → foundation}/supervision/main.d.ts +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}/index.d.ts +0 -0
- /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.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}/shell-selectors-dialogs.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.d.ts +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
package/README.md
CHANGED
|
@@ -6,111 +6,151 @@
|
|
|
6
6
|
npm install --global @timurproko/a1@latest
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Any channel can also be installed or updated directly with npm, without the
|
|
10
|
+
`a1 update` commands:
|
|
10
11
|
|
|
11
12
|
```sh
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
# dev channel (next tag)
|
|
14
|
+
npm install -g @timurproko/a1@next
|
|
15
|
+
|
|
16
|
+
# stable release
|
|
17
|
+
npm install -g @timurproko/a1@latest
|
|
18
|
+
|
|
19
|
+
# exact version
|
|
20
|
+
npm install -g @timurproko/a1@0.1.8-dev.107
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Use
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
a1 # launch A1 (profile: ~/.a1/agent)
|
|
27
|
+
a1 --help # show all commands (short form: a1 -h)
|
|
28
|
+
a1 --version # show the version (short form: a1 -v)
|
|
29
|
+
a1 update # install the newest stable release
|
|
30
|
+
a1 update --develop # install the current development preview
|
|
31
|
+
a1 update --develop 107 # install numbered preview 107
|
|
32
|
+
a1 update --develop 0.1.8-dev.107 # install that exact preview
|
|
33
|
+
a1 update --models # refresh A1's model catalogs
|
|
17
34
|
```
|
|
18
35
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
36
|
+
Stable builds print only their installed version. Development builds also show the
|
|
37
|
+
current development and stable channel versions.
|
|
38
|
+
|
|
39
|
+
Development previews add the Pi comparison profile; release builds do not carry it.
|
|
22
40
|
|
|
23
41
|
```sh
|
|
24
|
-
a1 pi
|
|
25
|
-
a1 sandbox # unchanged isolated vanilla Pi profile: ~/.a1/sandbox
|
|
42
|
+
a1 pi # vanilla Pi oracle: ~/.pi/agent
|
|
26
43
|
```
|
|
27
44
|
|
|
45
|
+
Unsupported commands exit quietly without launching anything. The removed
|
|
46
|
+
`update:<preview>` forms are not aliases; use `update --develop`.
|
|
47
|
+
|
|
28
48
|
## Extensions
|
|
29
49
|
|
|
30
|
-
Pi extension packages install into A1's own profile, so bare `a1`
|
|
31
|
-
|
|
50
|
+
Pi extension packages install into A1's own profile (`~/.a1/agent`), so bare `a1`
|
|
51
|
+
loads them and `a1 pi` does not. Sources are Pi's: `npm:`, git, or a
|
|
52
|
+
local path.
|
|
32
53
|
|
|
33
54
|
```sh
|
|
34
|
-
a1 pi install npm:pi-mcp-adapter # install a package
|
|
35
|
-
a1 pi remove npm:pi-mcp-adapter # remove it
|
|
36
|
-
a1 pi list # list
|
|
55
|
+
a1 pi install npm:pi-mcp-adapter # install a package
|
|
56
|
+
a1 pi remove npm:pi-mcp-adapter # remove it (alias: a1 pi uninstall)
|
|
57
|
+
a1 pi list # list installed packages
|
|
37
58
|
a1 pi update --extensions # update every installed package
|
|
38
|
-
a1 pi update npm:pi-mcp-adapter # update one
|
|
59
|
+
a1 pi update npm:pi-mcp-adapter # update one
|
|
60
|
+
a1 pi update --models # refresh A1's model catalogs
|
|
39
61
|
```
|
|
40
62
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
63
|
+
A1 pins the Pi runtime carried by each release, so Pi self-update forms are refused.
|
|
64
|
+
Update A1 itself with `a1 update` or `a1 update --develop`.
|
|
65
|
+
|
|
66
|
+
A running session picks up a newly installed package after a restart.
|
|
67
|
+
Configuration is isolated the same way: bare `a1` reads `~/.a1/agent` (or the
|
|
68
|
+
project), never `~/.pi/agent`. Configure MCP with `/mcp setup` inside bare `a1`.
|
|
47
69
|
|
|
48
70
|
## Develop
|
|
49
71
|
|
|
50
72
|
```sh
|
|
51
73
|
npm ci # install exact locked dependencies
|
|
52
74
|
npm run build # compile TypeScript and the process guardian into dist
|
|
53
|
-
npm start # build and launch
|
|
54
|
-
npm run start:pi # build and launch
|
|
55
|
-
npm run
|
|
56
|
-
npm run test:fast # typecheck + fast suite, no build needed
|
|
57
|
-
npm test # same as test:fast
|
|
75
|
+
npm start # build and launch a development `a1`
|
|
76
|
+
npm run start:pi # build and launch a development `a1 pi`
|
|
77
|
+
npm run test:fast # typecheck + fast suite (alias: npm test)
|
|
58
78
|
npm run test:full # complete non-physical suite
|
|
59
79
|
```
|
|
60
80
|
|
|
81
|
+
Create every task worktree at `{working-dir}/.worktrees/<task-id>`, where
|
|
82
|
+
`{working-dir}` is the session's initial working directory. For working directory
|
|
83
|
+
`D:/Git/a1`, use `D:/Git/a1/.worktrees/<task-id>`—never a sibling such as
|
|
84
|
+
`D:/Git/a1-<task-id>`. The primary worktree remains on `develop` for integration only.
|
|
85
|
+
|
|
86
|
+
## Pull request integration
|
|
87
|
+
|
|
88
|
+
Pull requests whose complete diff is only under `openspec/**`, under `docs/**`,
|
|
89
|
+
exactly the root `README.md`, or a combination of those paths are automatically
|
|
90
|
+
squash-merged after `Development validation required` succeeds. The automation
|
|
91
|
+
reads the complete GitHub changed-file list, including both sides of renames, and
|
|
92
|
+
runs only for trusted branches in this repository.
|
|
93
|
+
|
|
94
|
+
Any other path makes the pull request code/operational. That includes source, tests,
|
|
95
|
+
scripts, workflows, configuration, generated baselines, arbitrary root Markdown,
|
|
96
|
+
and a mixed documentation-plus-code change. Those pull requests remain open after
|
|
97
|
+
CI for local maintainer validation and explicit manual merge; automation disables
|
|
98
|
+
auto-merge if it was armed. Documentation remains exempt from product builds and
|
|
99
|
+
tests, but docs-sensitive generated governance and strict OpenSpec consistency are
|
|
100
|
+
checked before integration.
|
|
101
|
+
|
|
102
|
+
After any same-repository pull request into `develop` merges, trusted automation
|
|
103
|
+
reconciles its remote topic branch. Human merges use the close-event workflow;
|
|
104
|
+
documentation merges authored by `GITHUB_TOKEN` use a synchronous fallback because
|
|
105
|
+
GitHub suppresses recursive workflow events. Both delete only an unprotected live
|
|
106
|
+
ref that still equals the pull request's exact merged head SHA. Fork, advanced,
|
|
107
|
+
reserved, protected, malformed, and unmerged refs are preserved and reported.
|
|
108
|
+
|
|
109
|
+
Specification approval and implementation remain separate pull requests. An
|
|
110
|
+
implementation starts from updated `origin/develop` only after its specification
|
|
111
|
+
has merged and implementation was explicitly requested.
|
|
112
|
+
|
|
61
113
|
## Release
|
|
62
114
|
|
|
63
|
-
Two channels, both published by CI from the exact bytes it validated
|
|
64
|
-
|
|
115
|
+
Two channels, both published by CI from the exact bytes it validated — never from
|
|
116
|
+
a workstation.
|
|
65
117
|
|
|
66
|
-
###
|
|
118
|
+
### Development previews
|
|
67
119
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
120
|
+
A preview is `<major.minor.patch>-dev.<pull-request number>`, e.g. `0.1.8-dev.107`.
|
|
121
|
+
The nightly run (`03:17 UTC`) verifies current `origin/develop` and publishes only
|
|
122
|
+
when that source's preview is absent. `npm run develop` requests the same GitHub
|
|
123
|
+
Actions run and waits for it. The published version list is authoritative: an
|
|
124
|
+
unpublished number is refused.
|
|
125
|
+
|
|
126
|
+
Publish:
|
|
73
127
|
|
|
74
128
|
```sh
|
|
75
|
-
|
|
76
|
-
a1 update:7eabe9e # install the preview built from that commit
|
|
129
|
+
npm run develop # request the preview publish run and wait for it
|
|
77
130
|
```
|
|
78
131
|
|
|
79
|
-
|
|
80
|
-
pull request, or a commit list, and install exactly that build — you never need to
|
|
81
|
-
know which version it went out under. A commit that was never published is refused
|
|
82
|
-
rather than guessed at. A full preview version works in the same place, so a string
|
|
83
|
-
pasted back from `a1 version` is understood too.
|
|
84
|
-
|
|
85
|
-
### Stable — npm `latest`
|
|
86
|
-
|
|
87
|
-
One command, from a clean `develop` that matches its remote:
|
|
132
|
+
Install:
|
|
88
133
|
|
|
89
134
|
```sh
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
npm run release -- major # 0.1.1 -> 1.0.0
|
|
93
|
-
npm run release -- 0.4.0 # an exact version
|
|
135
|
+
a1 update --develop 107 # install preview 107
|
|
136
|
+
a1 update --develop 0.1.8-dev.107 # install that exact full preview version
|
|
94
137
|
```
|
|
95
138
|
|
|
96
|
-
|
|
97
|
-
**Landing it is what publishes** — the workflow builds, validates the packed release
|
|
98
|
-
on Windows, Linux, and macOS, publishes to npm `latest` with provenance, and only
|
|
99
|
-
then writes the `v<version>` tag and records the GitHub Release. The command waits
|
|
100
|
-
for that to succeed, then opens the next `-dev` line so previews resume
|
|
101
|
-
immediately.
|
|
139
|
+
### Stable
|
|
102
140
|
|
|
103
141
|
```sh
|
|
104
|
-
|
|
142
|
+
npm run release -- patch # 0.1.1 -> 0.1.2
|
|
143
|
+
npm run release -- minor # 0.1.1 -> 0.2.0
|
|
144
|
+
npm run release -- major # 0.1.1 -> 1.0.0
|
|
145
|
+
npm run release -- 0.4.0 # an exact version
|
|
105
146
|
```
|
|
106
147
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
serves.
|
|
113
|
-
|
|
148
|
+
The command lands the version on `develop` through a self-merging pull request,
|
|
149
|
+
dispatches publication for that exact commit, and waits for success. CI validates
|
|
150
|
+
the packed release on Windows, Linux, and macOS, publishes to npm `latest` with
|
|
151
|
+
provenance, then writes the `v<version>` tag and the GitHub Release. `master`
|
|
152
|
+
fast-forwards to the released commit, so it always points at what npm `latest`
|
|
153
|
+
serves. A failed release leaves nothing behind: no tag, no GitHub Release, no
|
|
154
|
+
moved branch.
|
|
114
155
|
|
|
115
|
-
`docs/ci-release-runbook.md` has the full picture
|
|
116
|
-
publish fails partway.
|
|
156
|
+
`docs/ci-release-runbook.md` has the full picture.
|
package/bin/cli.js
CHANGED
|
@@ -1,38 +1,56 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
+
const commandStartedAtMs = performance.timeOrigin + performance.now();
|
|
3
4
|
const packageRoot = new URL("..", import.meta.url);
|
|
5
|
+
const startup = await import("../dist/foundation/startup/index.js");
|
|
6
|
+
const startupProfile = process.argv[2] === "pi" ? "pi" : "a1";
|
|
7
|
+
startup.initializeStartupTrace(process.env, startupProfile, commandStartedAtMs);
|
|
8
|
+
startup.enableEnvironmentCompileCache(process.env);
|
|
9
|
+
await startup.markStartupPhase(process.env, "command-invoked");
|
|
4
10
|
const { fileURLToPath } = await import("node:url");
|
|
5
11
|
const { readFile } = await import("node:fs/promises");
|
|
6
|
-
const { cliCapabilities, dispatchCli } = await import("../dist/
|
|
12
|
+
const { cliCapabilities, dispatchCli } = await import("../dist/cli/index.js");
|
|
7
13
|
|
|
8
|
-
//
|
|
14
|
+
// Compatibility: which commands this build exposes follows from the build's own version, so a
|
|
9
15
|
// released a1 cannot be argued into offering the development profiles.
|
|
10
16
|
const capabilities = cliCapabilities(JSON.parse(await readFile(new URL("package.json", packageRoot), "utf8")).version);
|
|
11
17
|
|
|
12
18
|
process.exitCode = await dispatchCli(process.argv.slice(2), {
|
|
13
19
|
launch: async intent => {
|
|
14
|
-
const [{ prepareInteractiveLaunch }, { runBootstrap }] = await Promise.all([
|
|
15
|
-
import("../dist/
|
|
16
|
-
import("../dist/
|
|
20
|
+
const [{ prepareInteractiveLaunch }, { runBootstrap }, { healModuleIdentityAtLaunch, releaseCopyIsLaunchable }] = await Promise.all([
|
|
21
|
+
import("../dist/features/launch/index.js"),
|
|
22
|
+
import("../dist/foundation/release/index.js"),
|
|
23
|
+
import("./module-identity.js"),
|
|
17
24
|
]);
|
|
25
|
+
// Compatibility: self-heal the installed tree before the release store copies it: npm 12
|
|
26
|
+
// blocks install scripts by default, so the postinstall that normally
|
|
27
|
+
// repairs module identity may never have run (see bin/module-identity.js).
|
|
28
|
+
const packageRootPath = fileURLToPath(packageRoot);
|
|
29
|
+
await healModuleIdentityAtLaunch(packageRootPath, message => process.stderr.write(message));
|
|
18
30
|
const prepared = await prepareInteractiveLaunch(intent);
|
|
19
|
-
return await runBootstrap({
|
|
31
|
+
return await runBootstrap({
|
|
32
|
+
packageRoot: packageRootPath,
|
|
33
|
+
launchIntent: intent,
|
|
34
|
+
environment: prepared.environment,
|
|
35
|
+
releaseIsLaunchable: releaseCopyIsLaunchable,
|
|
36
|
+
});
|
|
20
37
|
},
|
|
21
38
|
version: async () => {
|
|
22
|
-
const { runVersionStats } = await import("../dist/
|
|
39
|
+
const { runVersionStats } = await import("../dist/cli/index.js");
|
|
23
40
|
return await runVersionStats({ packageRoot: fileURLToPath(packageRoot) });
|
|
24
41
|
},
|
|
25
42
|
update: async (channel, target) => {
|
|
26
|
-
const { runSelfUpdate } = await import("../dist/
|
|
43
|
+
const { runSelfUpdate } = await import("../dist/foundation/release/index.js");
|
|
27
44
|
return await runSelfUpdate({ packageRoot: fileURLToPath(packageRoot), channel, ...(target === undefined ? {} : { target }) });
|
|
28
45
|
},
|
|
29
46
|
packages: async request => {
|
|
30
47
|
const [{ runPackageCommand }, { createPiPackagesPort }] = await Promise.all([
|
|
31
|
-
import("../dist/
|
|
32
|
-
import("../dist/
|
|
48
|
+
import("../dist/cli/index.js"),
|
|
49
|
+
import("../dist/integrations/pi/engine/index.js"),
|
|
33
50
|
]);
|
|
34
51
|
return await runPackageCommand(request, { createPort: createPiPackagesPort });
|
|
35
52
|
},
|
|
36
53
|
}, {
|
|
54
|
+
stdout: message => process.stdout.write(message),
|
|
37
55
|
stderr: message => process.stderr.write(message),
|
|
38
56
|
}, capabilities);
|
package/bin/guardian.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
+
const startup = await import("../dist/foundation/startup/index.js");
|
|
4
|
+
startup.enableEnvironmentCompileCache(process.env);
|
|
5
|
+
await startup.markStartupPhase(process.env, "guardian-start");
|
|
3
6
|
const { fileURLToPath } = await import("node:url");
|
|
4
7
|
const { resolve } = await import("node:path");
|
|
5
|
-
const { runLaunchGuardian } = await import("../dist/
|
|
8
|
+
const { runLaunchGuardian } = await import("../dist/foundation/launch-guardian/index.js");
|
|
6
9
|
|
|
7
10
|
const releaseRoot = process.env.A1_RELEASE_ROOT ?? fileURLToPath(new URL("..", import.meta.url));
|
|
8
11
|
const profileId = process.env.A1_LAUNCH_PROFILE ?? "a1";
|
package/bin/module-identity.js
CHANGED
|
@@ -14,18 +14,20 @@
|
|
|
14
14
|
* chrome silently disappears and routed input dead-ends, with no error.
|
|
15
15
|
*
|
|
16
16
|
* A1 therefore does not import the specifier at all. Its package declares the
|
|
17
|
-
* subpath import `#pi-tui`, resolving to
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
17
|
+
* subpath import `#pi-tui`, resolving to bin/pi-tui.js — a proxy that
|
|
18
|
+
* re-exports pinned Pi's nested copy. The hop through the proxy is load-bearing:
|
|
19
|
+
* Node rejects package-imports targets containing a `node_modules` path segment
|
|
20
|
+
* (Invalid Package Target) and silently falls through to any fallback, which is
|
|
21
|
+
* exactly how an earlier alias that named the nested path directly reintroduced
|
|
22
|
+
* the split while appearing to declare the opposite. A plain import specifier
|
|
23
|
+
* inside a module carries no such restriction.
|
|
22
24
|
*
|
|
23
|
-
* What remains here is the check that it worked. The alias
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* discover it as missing extension UI.
|
|
25
|
+
* What remains here is the check that it worked. The alias is resolved by
|
|
26
|
+
* asking Node itself — never by reimplementing resolution, which is how the
|
|
27
|
+
* earlier check reported "unified" for a target Node had rejected — and the
|
|
28
|
+
* proxy hop is followed to the module it re-exports. When that disagrees with
|
|
29
|
+
* what pinned Pi resolves, launch says so, loudly and once, instead of leaving
|
|
30
|
+
* a user to discover it as missing extension UI.
|
|
29
31
|
*
|
|
30
32
|
* This lives in bin/ (shipped, plain JS) because it inspects dependency
|
|
31
33
|
* resolution, which the Pi API boundary policy rightly forbids ordinary
|
|
@@ -39,32 +41,41 @@ import { pathToFileURL } from "node:url";
|
|
|
39
41
|
/**
|
|
40
42
|
* What A1's own modules resolve `#pi-tui` to, as a real path.
|
|
41
43
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* is given unless an experimental flag is set, so it would always answer for
|
|
47
|
-
* the running process rather than for the installation being inspected.
|
|
44
|
+
* Node answers for the alias itself (require.resolve honors package imports for
|
|
45
|
+
* the package the parent belongs to). When the answer is A1's proxy file, the
|
|
46
|
+
* module it re-exports is what A1 actually renders with, so the proxy's one
|
|
47
|
+
* static `export * from` specifier is followed to its target.
|
|
48
48
|
*/
|
|
49
49
|
function resolveOwnPiTui(packageRoot) {
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if (target.startsWith("./") || target.startsWith("../")) {
|
|
57
|
-
const candidate = join(packageRoot, target);
|
|
58
|
-
if (existsSync(candidate)) return canonical(candidate);
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
|
-
return canonical(createRequire(pathToFileURL(join(packageRoot, "package.json")).href).resolve(target));
|
|
63
|
-
} catch {
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
50
|
+
const requireFromRoot = createRequire(pathToFileURL(join(packageRoot, "package.json")).href);
|
|
51
|
+
let resolved;
|
|
52
|
+
try {
|
|
53
|
+
resolved = requireFromRoot.resolve("#pi-tui");
|
|
54
|
+
} catch (error) {
|
|
55
|
+
throw new Error(`#pi-tui does not resolve: ${message(error)}`);
|
|
66
56
|
}
|
|
67
|
-
|
|
57
|
+
return canonical(followProxyReExport(resolved));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Follow A1's proxy hop: one relative `export * from "..."` per file, at most
|
|
62
|
+
* one hop. A resolution that is not the proxy (or any file without such a
|
|
63
|
+
* re-export) is returned as-is.
|
|
64
|
+
*/
|
|
65
|
+
function followProxyReExport(resolvedPath) {
|
|
66
|
+
let source;
|
|
67
|
+
try {
|
|
68
|
+
source = readFileSync(resolvedPath, "utf8");
|
|
69
|
+
} catch {
|
|
70
|
+
return resolvedPath;
|
|
71
|
+
}
|
|
72
|
+
const reExport = source.match(/^export \* from "(\.\.?\/[^"]+)";?$/m);
|
|
73
|
+
if (!reExport) return resolvedPath;
|
|
74
|
+
const target = join(dirname(resolvedPath), reExport[1]);
|
|
75
|
+
if (!existsSync(target)) {
|
|
76
|
+
throw new Error(`#pi-tui proxy ${resolvedPath} re-exports a missing file: ${target}`);
|
|
77
|
+
}
|
|
78
|
+
return target;
|
|
68
79
|
}
|
|
69
80
|
|
|
70
81
|
/**
|
|
@@ -76,7 +87,7 @@ function resolveOwnPiTui(packageRoot) {
|
|
|
76
87
|
* no CommonJS condition, so an ordinary require cannot name it. From there a
|
|
77
88
|
* require resolves pi-tui, which publishes no `exports` map at all.
|
|
78
89
|
*/
|
|
79
|
-
function resolvePinnedPiTui(packageRoot) {
|
|
90
|
+
export function resolvePinnedPiTui(packageRoot) {
|
|
80
91
|
let directory = packageRoot;
|
|
81
92
|
while (true) {
|
|
82
93
|
const candidate = join(directory, "node_modules", "@earendil-works", "pi-coding-agent");
|
|
@@ -121,6 +132,29 @@ function message(error) {
|
|
|
121
132
|
return error instanceof Error ? error.message : String(error);
|
|
122
133
|
}
|
|
123
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Launch-entry self-heal: when A1 and pinned Pi disagree on the terminal
|
|
137
|
+
* module, rewrite the proxy to the copy Pi resolves before anything copies
|
|
138
|
+
* this tree. npm 12 blocks install scripts unless allowScripts covers the
|
|
139
|
+
* package, so the postinstall that normally rewrites the proxy may never
|
|
140
|
+
* have run and the installed tree may still carry the published placeholder
|
|
141
|
+
* path. Named neutrally so the launch entries that call it stay free of
|
|
142
|
+
* terminal implementation identifiers, as the bootstrap boundary requires.
|
|
143
|
+
*/
|
|
144
|
+
export async function healModuleIdentityAtLaunch(packageRoot, warn) {
|
|
145
|
+
if (inspectPiTuiModuleIdentity(packageRoot).kind === "unified") return;
|
|
146
|
+
const { syncPiTuiProxy } = await import("./sync-pi-tui-proxy.js");
|
|
147
|
+
const outcome = syncPiTuiProxy(packageRoot);
|
|
148
|
+
if (outcome.kind === "unresolved") {
|
|
149
|
+
warn(`a1: could not point the terminal module proxy at pinned Pi's copy (${outcome.message}); extension UI may not render.\n`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Whether a materialized release copy resolves one terminal module for both A1 and Pi. */
|
|
154
|
+
export function releaseCopyIsLaunchable(releaseRoot) {
|
|
155
|
+
return inspectPiTuiModuleIdentity(releaseRoot).kind === "unified";
|
|
156
|
+
}
|
|
157
|
+
|
|
124
158
|
/** Launch-entry wrapper: warn on stderr when the two sides disagree. */
|
|
125
159
|
export function assertSinglePiTuiModuleAtLaunch(packageRoot, warn) {
|
|
126
160
|
const outcome = inspectPiTuiModuleIdentity(packageRoot);
|
package/bin/pi-tui.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the `#pi-tui` proxy (see ./pi-tui.js): the alias resolves to that
|
|
3
|
+
* file, so TypeScript reads this declaration and follows it to pinned Pi's
|
|
4
|
+
* nested pi-tui copy — the same module the proxy re-exports at runtime.
|
|
5
|
+
*/
|
|
6
|
+
export * from "../node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-tui/dist/index.d.ts";
|
package/bin/pi-tui.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one pi-tui module A1 uses: pinned Pi's own copy.
|
|
3
|
+
*
|
|
4
|
+
* A1's `#pi-tui` alias resolves here, and this file re-exports the copy nested
|
|
5
|
+
* inside pinned Pi — the same one Pi's extension loader hands to extensions, so
|
|
6
|
+
* prototype patches and `instanceof` checks land on the classes A1 renders with.
|
|
7
|
+
*
|
|
8
|
+
* The alias cannot name that copy directly: Node rejects any package-imports
|
|
9
|
+
* target containing a `node_modules` path segment (Invalid Package Target) and
|
|
10
|
+
* silently falls through to the next entry, which resolves the hoisted root
|
|
11
|
+
* copy and reintroduces the two-identity split this file exists to prevent. A
|
|
12
|
+
* plain import specifier in a module carries no such restriction, so the hop
|
|
13
|
+
* through this file is what makes the nested copy nameable from the manifest.
|
|
14
|
+
*
|
|
15
|
+
* npm does not materialize one layout: `npm ci` keeps pinned Pi's shrinkwrapped
|
|
16
|
+
* nested copy, while a global install hoists pi-tui to the root and produces no
|
|
17
|
+
* nested copy. bin/sync-pi-tui-proxy.js therefore rewrites this file's one
|
|
18
|
+
* re-export on postinstall to whatever pinned Pi resolves in the tree npm
|
|
19
|
+
* actually built; the path below is the dev-checkout (`npm ci`) shape. When the
|
|
20
|
+
* target is missing anyway, this import fails loudly at launch instead of
|
|
21
|
+
* silently rendering without extension chrome, and bin/module-identity.js
|
|
22
|
+
* reports the same condition before the composition loads.
|
|
23
|
+
*
|
|
24
|
+
* This lives in bin/ (shipped, plain JS) because it names a path inside
|
|
25
|
+
* node_modules, which the Pi API boundary policy rightly forbids ordinary
|
|
26
|
+
* production code from doing.
|
|
27
|
+
*/
|
|
28
|
+
export * from "../node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-tui/dist/index.js";
|
package/bin/supervisor.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { runSupervisor } from "../dist/
|
|
2
|
+
import { runSupervisor } from "../dist/foundation/supervision/index.js";
|
|
3
3
|
|
|
4
4
|
runSupervisor().catch(error => {
|
|
5
5
|
console.error(error instanceof Error ? error.stack ?? error.message : String(error));
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Point the `#pi-tui` proxy at the copy pinned Pi actually resolves.
|
|
3
|
+
*
|
|
4
|
+
* The proxy (bin/pi-tui.js) re-exports one static path, but npm does not
|
|
5
|
+
* materialize one layout: `npm ci` against A1's lockfile keeps pinned Pi's
|
|
6
|
+
* shrinkwrapped nested pi-tui copy, while a global `npm install -g` of the
|
|
7
|
+
* published tarball hoists pi-tui to A1's node_modules root and materializes
|
|
8
|
+
* no nested copy at all. A static path can only name one of those layouts —
|
|
9
|
+
* whichever the other layout lacks, the proxy's import fails at launch and
|
|
10
|
+
* extension UI never renders.
|
|
11
|
+
*
|
|
12
|
+
* This script runs on postinstall, asks Node what pinned Pi resolves
|
|
13
|
+
* `@earendil-works/pi-tui` to — the copy Pi's extension loader hands to
|
|
14
|
+
* extensions — and rewrites the proxy's single re-export (and its declaration
|
|
15
|
+
* twin) to that file. Whatever tree npm built, the proxy names the module Pi
|
|
16
|
+
* uses, so A1's renderer and Pi's extensions share one class identity.
|
|
17
|
+
*
|
|
18
|
+
* It never fails an install: a tree in which pinned Pi or its pi-tui cannot
|
|
19
|
+
* be resolved is reported on stderr and left untouched, and launch's
|
|
20
|
+
* module-identity check names the same condition to the user.
|
|
21
|
+
*
|
|
22
|
+
* This lives in bin/ (shipped, plain JS) because it inspects and names
|
|
23
|
+
* dependency resolution, which the Pi API boundary policy rightly forbids
|
|
24
|
+
* ordinary production code from touching.
|
|
25
|
+
*/
|
|
26
|
+
import { readFileSync, realpathSync, writeFileSync } from "node:fs";
|
|
27
|
+
import { dirname, join, relative } from "node:path";
|
|
28
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
29
|
+
import { resolvePinnedPiTui } from "./module-identity.js";
|
|
30
|
+
|
|
31
|
+
const RE_EXPORT_LINE = /^export \* from "[^"]+";$/m;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Rewrite the proxy pair under packageRoot/bin to re-export the pi-tui module
|
|
35
|
+
* pinned Pi resolves. Returns a discriminated outcome; never throws.
|
|
36
|
+
*/
|
|
37
|
+
export function syncPiTuiProxy(packageRoot) {
|
|
38
|
+
// Platform: resolvePinnedPiTui answers with a canonical real path, so the directory the
|
|
39
|
+
// relative specifier is computed from must be canonical too (Windows short
|
|
40
|
+
// names, symlinked installs).
|
|
41
|
+
const canonicalRoot = canonical(packageRoot);
|
|
42
|
+
let target;
|
|
43
|
+
try {
|
|
44
|
+
target = resolvePinnedPiTui(canonicalRoot);
|
|
45
|
+
} catch (error) {
|
|
46
|
+
return { kind: "unresolved", message: error instanceof Error ? error.message : String(error) };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const binDirectory = join(canonicalRoot, "bin");
|
|
50
|
+
const runtimeSpecifier = relativeSpecifier(binDirectory, target);
|
|
51
|
+
const declarationSpecifier = runtimeSpecifier.replace(/\.js$/, ".d.ts").replace(/\.d\.d\.ts$/, ".d.ts");
|
|
52
|
+
const changed = [];
|
|
53
|
+
for (const [file, specifier] of [
|
|
54
|
+
["pi-tui.js", runtimeSpecifier],
|
|
55
|
+
["pi-tui.d.ts", declarationSpecifier],
|
|
56
|
+
]) {
|
|
57
|
+
if (rewriteReExport(join(binDirectory, file), specifier)) changed.push(file);
|
|
58
|
+
}
|
|
59
|
+
return { kind: "synced", target, changed };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function canonical(path) {
|
|
63
|
+
try {
|
|
64
|
+
return realpathSync.native(path);
|
|
65
|
+
} catch {
|
|
66
|
+
return path;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function relativeSpecifier(fromDirectory, toFile) {
|
|
71
|
+
const specifier = relative(fromDirectory, toFile).split("\\").join("/");
|
|
72
|
+
return specifier.startsWith(".") ? specifier : `./${specifier}`;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Replace the file's single re-export line; returns whether the file changed. */
|
|
76
|
+
function rewriteReExport(file, specifier) {
|
|
77
|
+
let source;
|
|
78
|
+
try {
|
|
79
|
+
source = readFileSync(file, "utf8");
|
|
80
|
+
} catch {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
const line = `export * from "${specifier}";`;
|
|
84
|
+
if (source.includes(line) || !RE_EXPORT_LINE.test(source)) return false;
|
|
85
|
+
writeFileSync(file, source.replace(RE_EXPORT_LINE, line));
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const invokedDirectly = process.argv[1] !== undefined
|
|
90
|
+
&& import.meta.url === pathToFileURL(process.argv[1]).href;
|
|
91
|
+
if (invokedDirectly) {
|
|
92
|
+
const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
93
|
+
const outcome = syncPiTuiProxy(packageRoot);
|
|
94
|
+
if (outcome.kind === "unresolved") {
|
|
95
|
+
process.stderr.write(`a1: could not point #pi-tui at pinned Pi's copy (${outcome.message}); extension UI may not render.\n`);
|
|
96
|
+
}
|
|
97
|
+
}
|