@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
|
@@ -1,13 +1,34 @@
|
|
|
1
|
-
export const OWNED_UI_SETTINGS_VERSION =
|
|
1
|
+
export const OWNED_UI_SETTINGS_VERSION = 3;
|
|
2
2
|
const MAX_ID_LENGTH = 64;
|
|
3
3
|
const ID_PATTERN = /^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*)*$/;
|
|
4
|
+
const SCROLL_SECTION = Object.freeze({ id: "scroll", title: "Scroll" });
|
|
4
5
|
export const OWNED_UI_SETTING_DECLARATIONS = Object.freeze([
|
|
5
6
|
Object.freeze({
|
|
6
|
-
id: "
|
|
7
|
-
|
|
7
|
+
id: "scrollbarAppearance",
|
|
8
|
+
label: "Scrollbar mode",
|
|
9
|
+
section: SCROLL_SECTION,
|
|
10
|
+
description: "When the session transcript scrollbar is visible.",
|
|
8
11
|
application: "live",
|
|
9
|
-
defaultValue: "
|
|
10
|
-
allowedValues: Object.freeze(["
|
|
12
|
+
defaultValue: "auto",
|
|
13
|
+
allowedValues: Object.freeze(["auto", "always", "hidden"]),
|
|
14
|
+
}),
|
|
15
|
+
Object.freeze({
|
|
16
|
+
id: "scrollbarStyle",
|
|
17
|
+
label: "Scrollbar style",
|
|
18
|
+
section: SCROLL_SECTION,
|
|
19
|
+
description: "Visual weight of the session transcript scrollbar.",
|
|
20
|
+
application: "live",
|
|
21
|
+
defaultValue: "thin",
|
|
22
|
+
allowedValues: Object.freeze(["thin", "thick"]),
|
|
23
|
+
}),
|
|
24
|
+
Object.freeze({
|
|
25
|
+
id: "scrollbarSpeed",
|
|
26
|
+
label: "Speed",
|
|
27
|
+
section: SCROLL_SECTION,
|
|
28
|
+
description: "Distance moved by each session transcript wheel event.",
|
|
29
|
+
application: "live",
|
|
30
|
+
defaultValue: "normal",
|
|
31
|
+
allowedValues: Object.freeze(["normal", "fast", "high"]),
|
|
11
32
|
}),
|
|
12
33
|
]);
|
|
13
34
|
export function assertOwnedUiSettingDeclarations(declarations) {
|
|
@@ -19,6 +40,13 @@ export function assertOwnedUiSettingDeclarations(declarations) {
|
|
|
19
40
|
if (seen.has(declaration.id))
|
|
20
41
|
throw new Error(`duplicate owned UI setting id: ${declaration.id}`);
|
|
21
42
|
seen.add(declaration.id);
|
|
43
|
+
if (declaration.label !== undefined && declaration.label.trim().length === 0) {
|
|
44
|
+
throw new Error(`owned UI setting has an empty label: ${declaration.id}`);
|
|
45
|
+
}
|
|
46
|
+
if (declaration.section !== undefined
|
|
47
|
+
&& (declaration.section.id.trim().length === 0 || declaration.section.title.trim().length === 0)) {
|
|
48
|
+
throw new Error(`owned UI setting has an invalid section: ${declaration.id}`);
|
|
49
|
+
}
|
|
22
50
|
if (declaration.description.trim().length === 0) {
|
|
23
51
|
throw new Error(`owned UI setting has no description: ${declaration.id}`);
|
|
24
52
|
}
|
|
@@ -6,7 +6,7 @@ export interface OwnedUiSettingsMigration {
|
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Ordered, contiguous migrations ending at OWNED_UI_SETTINGS_VERSION. Version 1
|
|
9
|
-
* is the first stored shape
|
|
9
|
+
* is the first stored shape.
|
|
10
10
|
*/
|
|
11
11
|
export declare const OWNED_UI_SETTINGS_MIGRATIONS: readonly OwnedUiSettingsMigration[];
|
|
12
12
|
export declare function assertOwnedUiSettingsMigrations(migrations: readonly OwnedUiSettingsMigration[], currentVersion?: number): void;
|
|
@@ -1,9 +1,28 @@
|
|
|
1
1
|
import { OWNED_UI_SETTINGS_VERSION } from "./declarations.js";
|
|
2
2
|
/**
|
|
3
3
|
* Ordered, contiguous migrations ending at OWNED_UI_SETTINGS_VERSION. Version 1
|
|
4
|
-
* is the first stored shape
|
|
4
|
+
* is the first stored shape.
|
|
5
5
|
*/
|
|
6
|
-
export const OWNED_UI_SETTINGS_MIGRATIONS = Object.freeze([
|
|
6
|
+
export const OWNED_UI_SETTINGS_MIGRATIONS = Object.freeze([
|
|
7
|
+
Object.freeze({
|
|
8
|
+
to: 2,
|
|
9
|
+
description: "Rename scrollbar speed high to fast.",
|
|
10
|
+
migrate(values) {
|
|
11
|
+
return values.scrollbarSpeed === "high"
|
|
12
|
+
? { ...values, scrollbarSpeed: "fast" }
|
|
13
|
+
: { ...values };
|
|
14
|
+
},
|
|
15
|
+
}),
|
|
16
|
+
Object.freeze({
|
|
17
|
+
to: 3,
|
|
18
|
+
description: "Match Pi's auto scrollbar appearance name and ordering.",
|
|
19
|
+
migrate(values) {
|
|
20
|
+
return values.scrollbarAppearance === "hover"
|
|
21
|
+
? { ...values, scrollbarAppearance: "auto" }
|
|
22
|
+
: { ...values };
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
]);
|
|
7
26
|
export function assertOwnedUiSettingsMigrations(migrations, currentVersion = OWNED_UI_SETTINGS_VERSION) {
|
|
8
27
|
const firstProduced = currentVersion - migrations.length + 1;
|
|
9
28
|
if (migrations.length > 0 && firstProduced < 2) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AgentSettingApplicationBoundary, AgentSettingDescriptor } from "../../contracts/agent-engine/index.js";
|
|
1
2
|
import type { OwnedUiSettingValue } from "./declarations.js";
|
|
2
3
|
import type { OwnedUiSettingsResolution } from "./resolution.js";
|
|
3
4
|
export type OwnedUiSettingsBackend = "a1" | "agent";
|
|
@@ -9,8 +10,10 @@ export interface OwnedUiSettingsEntry {
|
|
|
9
10
|
readonly description: string | null;
|
|
10
11
|
/** Present when the value is a scalar the surface can offer as a choice. */
|
|
11
12
|
readonly value: OwnedUiSettingValue | null;
|
|
12
|
-
/** Raw value as reported by its backend, for entries the surface can only display. */
|
|
13
|
+
/** Raw stored value as reported by its backend, for entries the surface can only display. */
|
|
13
14
|
readonly rawValue: unknown;
|
|
15
|
+
readonly storedValue: unknown;
|
|
16
|
+
readonly effectiveValue: unknown;
|
|
14
17
|
readonly editable: boolean;
|
|
15
18
|
readonly choices: readonly OwnedUiSettingValue[] | null;
|
|
16
19
|
/** True when the value is a structured object edited through its own surface. */
|
|
@@ -26,7 +29,7 @@ export interface OwnedUiSettingsEntry {
|
|
|
26
29
|
readonly fallback: boolean;
|
|
27
30
|
}[];
|
|
28
31
|
readonly origin: "default" | "stored" | "engine";
|
|
29
|
-
readonly application:
|
|
32
|
+
readonly application: AgentSettingApplicationBoundary;
|
|
30
33
|
}
|
|
31
34
|
export interface OwnedUiSettingsSection {
|
|
32
35
|
readonly id: string;
|
|
@@ -38,23 +41,7 @@ export interface OwnedUiSettingsSection {
|
|
|
38
41
|
readonly readOnlyReason: string | null;
|
|
39
42
|
}
|
|
40
43
|
export interface AgentSettingsSnapshot {
|
|
41
|
-
readonly descriptors: readonly
|
|
42
|
-
readonly key: string;
|
|
43
|
-
readonly valueType: "boolean" | "number" | "string" | "enum" | "json";
|
|
44
|
-
readonly writable: boolean;
|
|
45
|
-
readonly choices?: readonly unknown[];
|
|
46
|
-
readonly label?: string;
|
|
47
|
-
readonly description?: string;
|
|
48
|
-
readonly minimum?: number;
|
|
49
|
-
readonly maximum?: number;
|
|
50
|
-
readonly flags?: readonly {
|
|
51
|
-
readonly key: string;
|
|
52
|
-
readonly label: string;
|
|
53
|
-
readonly description: string;
|
|
54
|
-
readonly fallback: boolean;
|
|
55
|
-
}[];
|
|
56
|
-
}[];
|
|
57
|
-
readonly values: Readonly<Record<string, unknown>>;
|
|
44
|
+
readonly descriptors: readonly AgentSettingDescriptor[];
|
|
58
45
|
/** Whether the engine advertises settings write capability at all. */
|
|
59
46
|
readonly writeAdvertised: boolean;
|
|
60
47
|
/** Set when the engine could not report its settings. */
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
export const AGENT_SECTION_ID = "agent";
|
|
2
2
|
const BOOLEAN_CHOICES = Object.freeze([true, false]);
|
|
3
3
|
export function buildOwnedUiSettingsSections(input) {
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
title: "A1"
|
|
7
|
-
|
|
4
|
+
const grouped = new Map();
|
|
5
|
+
for (const setting of input.resolution.settings) {
|
|
6
|
+
const section = setting.declaration.section ?? { id: "a1", title: "A1" };
|
|
7
|
+
const group = grouped.get(section.id) ?? { title: section.title, entries: [] };
|
|
8
|
+
group.entries.push({
|
|
8
9
|
id: setting.declaration.id,
|
|
9
|
-
label: null,
|
|
10
|
+
label: setting.declaration.label ?? null,
|
|
10
11
|
backend: "a1",
|
|
11
12
|
description: setting.declaration.description,
|
|
12
13
|
value: setting.value,
|
|
13
14
|
rawValue: setting.value,
|
|
15
|
+
storedValue: setting.value,
|
|
16
|
+
effectiveValue: setting.value,
|
|
14
17
|
editable: true,
|
|
15
18
|
structured: false,
|
|
16
19
|
minimum: null,
|
|
@@ -18,12 +21,18 @@ export function buildOwnedUiSettingsSections(input) {
|
|
|
18
21
|
flags: [],
|
|
19
22
|
choices: setting.declaration.allowedValues,
|
|
20
23
|
origin: setting.source,
|
|
21
|
-
application: setting.declaration.application,
|
|
22
|
-
})
|
|
24
|
+
application: setting.declaration.application === "restart" ? "next-start" : "live",
|
|
25
|
+
});
|
|
26
|
+
grouped.set(section.id, group);
|
|
27
|
+
}
|
|
28
|
+
const ownedSections = [...grouped].map(([id, group]) => ({
|
|
29
|
+
id,
|
|
30
|
+
title: group.title,
|
|
31
|
+
entries: Object.freeze(group.entries),
|
|
23
32
|
unavailableReason: null,
|
|
24
33
|
readOnlyReason: null,
|
|
25
|
-
};
|
|
26
|
-
return Object.freeze([
|
|
34
|
+
}));
|
|
35
|
+
return Object.freeze([...ownedSections, agentSection(input.agent)]);
|
|
27
36
|
}
|
|
28
37
|
export function findOwnedUiSettingsEntry(sections, id, backend) {
|
|
29
38
|
for (const section of sections) {
|
|
@@ -41,10 +50,13 @@ function agentSection(snapshot) {
|
|
|
41
50
|
return frozenSection(`Agent settings are unavailable: ${snapshot.failure}`, null, []);
|
|
42
51
|
}
|
|
43
52
|
if (snapshot.descriptors.length === 0) {
|
|
44
|
-
return
|
|
53
|
+
return { id: AGENT_SECTION_ID, title: "Agent", entries: Object.freeze([]), unavailableReason: null, readOnlyReason: null };
|
|
45
54
|
}
|
|
46
|
-
const
|
|
47
|
-
|
|
55
|
+
const presented = snapshot.writeAdvertised
|
|
56
|
+
? snapshot.descriptors.filter(descriptor => descriptor.writable && descriptor.available)
|
|
57
|
+
: [];
|
|
58
|
+
const entries = presented.map(descriptor => {
|
|
59
|
+
const raw = descriptor.storedValue;
|
|
48
60
|
return {
|
|
49
61
|
id: descriptor.key,
|
|
50
62
|
label: descriptor.label ?? null,
|
|
@@ -52,31 +64,28 @@ function agentSection(snapshot) {
|
|
|
52
64
|
description: descriptor.description ?? null,
|
|
53
65
|
value: scalar(raw),
|
|
54
66
|
rawValue: raw,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
storedValue: descriptor.storedValue,
|
|
68
|
+
effectiveValue: descriptor.effectiveValue,
|
|
69
|
+
// Invariant: unavailable and non-writable descriptors are filtered before projection.
|
|
70
|
+
// Every presented structured value remains editable through its own surface.
|
|
71
|
+
editable: true,
|
|
58
72
|
structured: descriptor.valueType === "json",
|
|
59
73
|
minimum: descriptor.minimum ?? null,
|
|
60
74
|
maximum: descriptor.maximum ?? null,
|
|
61
75
|
flags: descriptor.flags ?? [],
|
|
62
|
-
//
|
|
76
|
+
// Protocol: a boolean is a two-value choice even when the engine names no choices,
|
|
63
77
|
// so it opens the same menu as any other enumerated setting.
|
|
64
78
|
choices: descriptor.valueType === "boolean" ? BOOLEAN_CHOICES : choicesOf(descriptor.choices),
|
|
65
79
|
origin: "engine",
|
|
66
|
-
application:
|
|
80
|
+
application: descriptor.application,
|
|
67
81
|
};
|
|
68
82
|
});
|
|
69
|
-
const readOnlyReason = snapshot.writeAdvertised
|
|
70
|
-
? (entries.some(entry => entry.editable)
|
|
71
|
-
? null
|
|
72
|
-
: "The agent engine reports no writable settings")
|
|
73
|
-
: "The agent engine does not support changing settings from this surface";
|
|
74
83
|
return {
|
|
75
84
|
id: AGENT_SECTION_ID,
|
|
76
85
|
title: "Agent",
|
|
77
86
|
entries: Object.freeze(entries),
|
|
78
87
|
unavailableReason: null,
|
|
79
|
-
readOnlyReason,
|
|
88
|
+
readOnlyReason: null,
|
|
80
89
|
};
|
|
81
90
|
}
|
|
82
91
|
function frozenSection(unavailableReason, readOnlyReason, entries) {
|
|
@@ -1,44 +1,36 @@
|
|
|
1
|
-
import type { AgentSettingsPort } from "
|
|
1
|
+
import type { AgentJsonValue, AgentSettingApplicationBoundary, AgentSettingsPort } from "../../contracts/agent-engine/index.js";
|
|
2
2
|
import type { OwnedUiSettingValue } from "./declarations.js";
|
|
3
3
|
import type { OwnedUiSettingsResolution } from "./resolution.js";
|
|
4
4
|
import { type OwnedUiSettingsBackend, type OwnedUiSettingsSection } from "./sections.js";
|
|
5
5
|
import type { OwnedUiSettingsStore } from "./store.js";
|
|
6
6
|
export interface OwnedUiSettingsChangeOutcome {
|
|
7
|
+
readonly status: "applied" | "deferred" | "unavailable" | "failed";
|
|
7
8
|
readonly applied: boolean;
|
|
8
|
-
/**
|
|
9
|
+
/** Compatibility projection for existing A1 restart-bound declarations. */
|
|
9
10
|
readonly pendingRestart: boolean;
|
|
10
|
-
|
|
11
|
+
readonly application: AgentSettingApplicationBoundary | null;
|
|
12
|
+
readonly storedValue: AgentJsonValue | null;
|
|
13
|
+
readonly effectiveValue: AgentJsonValue | null;
|
|
14
|
+
readonly limitationReason: string | null;
|
|
11
15
|
readonly failure: string | null;
|
|
12
16
|
}
|
|
13
17
|
export interface OwnedUiSettingsSessionOptions {
|
|
14
18
|
readonly store: OwnedUiSettingsStore;
|
|
15
|
-
/** Null when no engine is attached; the Agent section then reports itself unavailable. */
|
|
16
19
|
readonly agent?: AgentSettingsPort | null;
|
|
17
|
-
/**
|
|
18
|
-
* Resolves the port at load time instead of construction time, for an engine
|
|
19
|
-
* whose runtime is not up yet. Takes precedence over `agent`.
|
|
20
|
-
*/
|
|
21
20
|
readonly agentProvider?: () => AgentSettingsPort | null;
|
|
21
|
+
readonly hiddenAgentSettingIds?: readonly string[];
|
|
22
22
|
}
|
|
23
23
|
export type OwnedUiSettingsListener = (session: OwnedUiSettingsSession) => void;
|
|
24
|
-
/**
|
|
25
|
-
* Holds the resolved settings for one owned UI session and routes every accepted
|
|
26
|
-
* change to the backend that owns it: A1 settings to the A1 document, agent
|
|
27
|
-
* settings to the engine settings port. Neither backend ever sees the other's value.
|
|
28
|
-
*/
|
|
24
|
+
/** Routes every accepted setting change only to its owning backend. */
|
|
29
25
|
export declare class OwnedUiSettingsSession {
|
|
30
26
|
#private;
|
|
31
27
|
constructor(options: OwnedUiSettingsSessionOptions);
|
|
32
28
|
get resolution(): OwnedUiSettingsResolution;
|
|
33
|
-
/** Reads the engine's settings so the Agent section can be built. Never throws. */
|
|
34
29
|
load(): Promise<void>;
|
|
35
30
|
sections(): readonly OwnedUiSettingsSection[];
|
|
36
|
-
/** Resolved value of an A1 setting, or null when it is not declared. */
|
|
37
31
|
value(id: string): OwnedUiSettingValue | null;
|
|
38
|
-
/** Value stored this session but not yet in effect, for a restart-required setting. */
|
|
39
32
|
pendingValue(id: string): OwnedUiSettingValue | null;
|
|
40
33
|
onChange(listener: OwnedUiSettingsListener): () => void;
|
|
41
|
-
/** Writes a structured value, which only an engine-backed setting can hold. */
|
|
42
34
|
changeStructured(backend: OwnedUiSettingsBackend, id: string, value: Readonly<Record<string, unknown>>): Promise<OwnedUiSettingsChangeOutcome>;
|
|
43
35
|
change(backend: OwnedUiSettingsBackend, id: string, value: OwnedUiSettingValue): Promise<OwnedUiSettingsChangeOutcome>;
|
|
44
36
|
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
+
import { assertAgentSettingDescriptor } from "../../contracts/agent-engine/index.js";
|
|
1
2
|
import { buildOwnedUiSettingsSections, findOwnedUiSettingsEntry, } from "./sections.js";
|
|
2
|
-
/**
|
|
3
|
-
* Holds the resolved settings for one owned UI session and routes every accepted
|
|
4
|
-
* change to the backend that owns it: A1 settings to the A1 document, agent
|
|
5
|
-
* settings to the engine settings port. Neither backend ever sees the other's value.
|
|
6
|
-
*/
|
|
3
|
+
/** Routes every accepted setting change only to its owning backend. */
|
|
7
4
|
export class OwnedUiSettingsSession {
|
|
8
5
|
#store;
|
|
9
6
|
#agent;
|
|
10
7
|
#agentProvider;
|
|
11
8
|
#listeners = new Set();
|
|
9
|
+
#hiddenAgentSettingIds;
|
|
12
10
|
#resolution;
|
|
13
11
|
#agentSnapshot = null;
|
|
14
12
|
#pending = new Map();
|
|
@@ -16,26 +14,24 @@ export class OwnedUiSettingsSession {
|
|
|
16
14
|
this.#store = options.store;
|
|
17
15
|
this.#agent = options.agent ?? null;
|
|
18
16
|
this.#agentProvider = options.agentProvider ?? null;
|
|
17
|
+
this.#hiddenAgentSettingIds = new Set(options.hiddenAgentSettingIds ?? []);
|
|
19
18
|
this.#resolution = options.store.read();
|
|
20
19
|
}
|
|
21
20
|
get resolution() {
|
|
22
21
|
return this.#resolution;
|
|
23
22
|
}
|
|
24
|
-
/** Reads the engine's settings so the Agent section can be built. Never throws. */
|
|
25
23
|
async load() {
|
|
26
24
|
this.#resolution = this.#store.read();
|
|
27
|
-
const agent = this.#
|
|
28
|
-
this.#agentSnapshot = agent === null ? null : await snapshotOf(agent);
|
|
25
|
+
const agent = this.#currentAgent();
|
|
26
|
+
this.#agentSnapshot = agent === null ? null : await snapshotOf(agent, this.#hiddenAgentSettingIds);
|
|
29
27
|
this.#notify();
|
|
30
28
|
}
|
|
31
29
|
sections() {
|
|
32
30
|
return buildOwnedUiSettingsSections({ resolution: this.#resolution, agent: this.#agentSnapshot });
|
|
33
31
|
}
|
|
34
|
-
/** Resolved value of an A1 setting, or null when it is not declared. */
|
|
35
32
|
value(id) {
|
|
36
33
|
return this.#resolution.settings.find(setting => setting.declaration.id === id)?.value ?? null;
|
|
37
34
|
}
|
|
38
|
-
/** Value stored this session but not yet in effect, for a restart-required setting. */
|
|
39
35
|
pendingValue(id) {
|
|
40
36
|
return this.#pending.get(id) ?? null;
|
|
41
37
|
}
|
|
@@ -43,27 +39,10 @@ export class OwnedUiSettingsSession {
|
|
|
43
39
|
this.#listeners.add(listener);
|
|
44
40
|
return () => this.#listeners.delete(listener);
|
|
45
41
|
}
|
|
46
|
-
/** Writes a structured value, which only an engine-backed setting can hold. */
|
|
47
42
|
async changeStructured(backend, id, value) {
|
|
48
43
|
if (backend !== "agent")
|
|
49
44
|
return failed("only an agent setting holds a structured value");
|
|
50
|
-
|
|
51
|
-
if (agent === null)
|
|
52
|
-
return failed("no agent engine is attached");
|
|
53
|
-
if (!agent.capabilities.write || !agent.writeSetting) {
|
|
54
|
-
return failed("the agent engine does not support changing settings from this surface");
|
|
55
|
-
}
|
|
56
|
-
try {
|
|
57
|
-
await agent.writeSetting(id, value);
|
|
58
|
-
if (agent.capabilities.flush && agent.flush)
|
|
59
|
-
await agent.flush();
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
return failed(`${id} could not be written to the agent engine: ${describe(error)}`);
|
|
63
|
-
}
|
|
64
|
-
this.#agentSnapshot = await snapshotOf(agent);
|
|
65
|
-
this.#notify();
|
|
66
|
-
return { applied: true, pendingRestart: false, failure: null };
|
|
45
|
+
return await this.#changeAgentValue(id, value);
|
|
67
46
|
}
|
|
68
47
|
async change(backend, id, value) {
|
|
69
48
|
const entry = findOwnedUiSettingsEntry(this.sections(), id, backend);
|
|
@@ -71,7 +50,7 @@ export class OwnedUiSettingsSession {
|
|
|
71
50
|
return failed(`unknown ${backend} setting: ${id}`);
|
|
72
51
|
if (!entry.editable)
|
|
73
52
|
return failed(`${id} is not editable from this surface`);
|
|
74
|
-
return backend === "a1" ? this.#changeOwned(id, value) : await this.#
|
|
53
|
+
return backend === "a1" ? this.#changeOwned(id, value) : await this.#changeAgentValue(id, value);
|
|
75
54
|
}
|
|
76
55
|
#changeOwned(id, value) {
|
|
77
56
|
const outcome = this.#store.write(this.#resolution, id, value);
|
|
@@ -79,66 +58,97 @@ export class OwnedUiSettingsSession {
|
|
|
79
58
|
return failed(outcome.failure ?? `${id} could not be stored`);
|
|
80
59
|
const previous = this.#resolution;
|
|
81
60
|
this.#resolution = this.#store.read();
|
|
82
|
-
const
|
|
83
|
-
if (declaration
|
|
61
|
+
const previousSetting = previous.settings.find(setting => setting.declaration.id === id);
|
|
62
|
+
if (previousSetting?.declaration.application === "restart") {
|
|
84
63
|
this.#pending.set(id, value);
|
|
85
64
|
this.#resolution = previous;
|
|
86
65
|
this.#notify();
|
|
87
|
-
return
|
|
66
|
+
return changed("deferred", "next-start", value, previousSetting.value);
|
|
88
67
|
}
|
|
89
68
|
this.#pending.delete(id);
|
|
90
69
|
this.#notify();
|
|
91
|
-
return
|
|
70
|
+
return changed("applied", "live", value, value);
|
|
92
71
|
}
|
|
93
|
-
async #
|
|
94
|
-
const agent = this.#
|
|
72
|
+
async #changeAgentValue(id, value) {
|
|
73
|
+
const agent = this.#currentAgent();
|
|
95
74
|
if (agent === null)
|
|
96
75
|
return failed("no agent engine is attached");
|
|
97
76
|
if (!agent.capabilities.write || !agent.writeSetting) {
|
|
98
77
|
return failed("the agent engine does not support changing settings from this surface");
|
|
99
78
|
}
|
|
79
|
+
let result;
|
|
100
80
|
try {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
81
|
+
// Invariant: the coordinator behind the port owns effect installation, persistence,
|
|
82
|
+
// flush, and rollback. A second surface-level flush would split authority.
|
|
83
|
+
result = await agent.writeSetting(id, value);
|
|
104
84
|
}
|
|
105
85
|
catch (error) {
|
|
106
86
|
return failed(`${id} could not be written to the agent engine: ${describe(error)}`);
|
|
107
87
|
}
|
|
108
|
-
this.#agentSnapshot = await snapshotOf(agent);
|
|
88
|
+
this.#agentSnapshot = await snapshotOf(agent, this.#hiddenAgentSettingIds);
|
|
109
89
|
this.#notify();
|
|
110
|
-
return
|
|
90
|
+
return fromAgentOutcome(result);
|
|
91
|
+
}
|
|
92
|
+
#currentAgent() {
|
|
93
|
+
return this.#agentProvider === null ? this.#agent : this.#agentProvider();
|
|
111
94
|
}
|
|
112
95
|
#notify() {
|
|
113
96
|
for (const listener of this.#listeners)
|
|
114
97
|
listener(this);
|
|
115
98
|
}
|
|
116
99
|
}
|
|
117
|
-
async function snapshotOf(agent) {
|
|
100
|
+
async function snapshotOf(agent, hidden) {
|
|
118
101
|
try {
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
catch {
|
|
126
|
-
values[descriptor.key] = null;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
102
|
+
const listed = await agent.listSettings();
|
|
103
|
+
for (const descriptor of listed)
|
|
104
|
+
assertAgentSettingDescriptor(descriptor);
|
|
105
|
+
const writeAdvertised = agent.capabilities.write && typeof agent.writeSetting === "function";
|
|
106
|
+
const descriptors = listed.filter(descriptor => !hidden.has(descriptor.key) && writeAdvertised && descriptor.writable && descriptor.available);
|
|
129
107
|
return {
|
|
130
108
|
descriptors,
|
|
131
|
-
|
|
132
|
-
writeAdvertised: agent.capabilities.write && typeof agent.writeSetting === "function",
|
|
109
|
+
writeAdvertised,
|
|
133
110
|
failure: null,
|
|
134
111
|
};
|
|
135
112
|
}
|
|
136
113
|
catch (error) {
|
|
137
|
-
return { descriptors: [],
|
|
114
|
+
return { descriptors: [], writeAdvertised: false, failure: describe(error) };
|
|
138
115
|
}
|
|
139
116
|
}
|
|
140
117
|
function failed(failure) {
|
|
141
|
-
return {
|
|
118
|
+
return {
|
|
119
|
+
status: "failed",
|
|
120
|
+
applied: false,
|
|
121
|
+
pendingRestart: false,
|
|
122
|
+
application: null,
|
|
123
|
+
storedValue: null,
|
|
124
|
+
effectiveValue: null,
|
|
125
|
+
limitationReason: null,
|
|
126
|
+
failure,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function changed(status, application, storedValue, effectiveValue) {
|
|
130
|
+
return {
|
|
131
|
+
status,
|
|
132
|
+
applied: status === "applied",
|
|
133
|
+
pendingRestart: status === "deferred" && application === "next-start",
|
|
134
|
+
application,
|
|
135
|
+
storedValue,
|
|
136
|
+
effectiveValue,
|
|
137
|
+
limitationReason: null,
|
|
138
|
+
failure: null,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function fromAgentOutcome(result) {
|
|
142
|
+
return {
|
|
143
|
+
status: result.status,
|
|
144
|
+
applied: result.status === "applied",
|
|
145
|
+
pendingRestart: result.status === "deferred" && result.application === "next-start",
|
|
146
|
+
application: result.application,
|
|
147
|
+
storedValue: result.storedValue,
|
|
148
|
+
effectiveValue: result.effectiveValue,
|
|
149
|
+
limitationReason: result.limitationReason,
|
|
150
|
+
failure: result.failure,
|
|
151
|
+
};
|
|
142
152
|
}
|
|
143
153
|
function describe(error) {
|
|
144
154
|
return error instanceof Error ? error.message : String(error);
|
|
@@ -13,6 +13,7 @@ export interface OwnedUiSettingsWriteOutcome {
|
|
|
13
13
|
/** Present when the write failed; the caller must not report the change as saved. */
|
|
14
14
|
readonly failure: string | null;
|
|
15
15
|
}
|
|
16
|
+
/** Resolves and atomically persists one profile's owned settings without discarding unknown keys. */
|
|
16
17
|
export declare class OwnedUiSettingsStore {
|
|
17
18
|
#private;
|
|
18
19
|
constructor(options: OwnedUiSettingsStoreOptions);
|
|
@@ -5,6 +5,7 @@ import { OWNED_UI_SETTINGS_MIGRATIONS } from "./migrations.js";
|
|
|
5
5
|
import { documentFrom, parseOwnedUiSettingsDocument, resolveOwnedUiSettings, } from "./resolution.js";
|
|
6
6
|
const PROFILE_ID_PATTERN = /^[a-z][a-z0-9-]{0,63}$/;
|
|
7
7
|
const MAX_DOCUMENT_BYTES = 256 * 1024;
|
|
8
|
+
/** Resolves and atomically persists one profile's owned settings without discarding unknown keys. */
|
|
8
9
|
export class OwnedUiSettingsStore {
|
|
9
10
|
#file;
|
|
10
11
|
#declarations;
|
|
@@ -76,7 +77,7 @@ export class OwnedUiSettingsStore {
|
|
|
76
77
|
rmSync(temporary, { force: true });
|
|
77
78
|
}
|
|
78
79
|
catch {
|
|
79
|
-
//
|
|
80
|
+
// Security: a leftover temporary file is inert: read() only ever opens the target path.
|
|
80
81
|
}
|
|
81
82
|
return { stored: false, failure: `${this.#file} could not be written: ${describe(error)}` };
|
|
82
83
|
}
|
|
@@ -9,15 +9,15 @@ mutable a1 entry
|
|
|
9
9
|
-> verified immutable release
|
|
10
10
|
-> Node launch guardian and authenticated launch-instance registration
|
|
11
11
|
-> native process guardian and per-instance containment
|
|
12
|
-
->
|
|
13
|
-
-> owned
|
|
12
|
+
-> profile-aware owned-UI runtime selection
|
|
13
|
+
-> owned Pi-backed composition, with A1 surfaces enabled only for bare a1
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Launch-instance ownership is plural. The supervisor tracks any number of independently authenticated `a1
|
|
16
|
+
Launch-instance ownership is plural. The supervisor tracks any number of independently authenticated `a1` and `a1 pi` instances and never uses one product-wide foreground mutex. Closing one instance closes only its verified process tree. Persisted rows alone do not prove liveness, and uncertainty never authorizes terminating an unrelated process.
|
|
17
17
|
|
|
18
|
-
Neither guardian reads ordinary terminal input, parses or relays runtime output, renders cells, infers frames, synthesizes terminal responses, or emits display control. Bare `a1`
|
|
18
|
+
Neither guardian reads ordinary terminal input, parses or relays runtime output, renders cells, infers frames, synthesizes terminal responses, or emits display control. Both profiles use the same owned rendering and input pipeline. Bare `a1` exposes A1-owned surfaces; `a1 pi` withholds those surfaces and uses Pi's ordinary profile root. The private guardian boundary carries only bounded identity, readiness, stop, and outcome data.
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
The owned Pi-backed surface is not an arbitrary-CLI terminal multiplexer. A feature that requires resident arbitrary CLI sessions, internal tabs, terminal-state reconnection, or A1-authoritative scrollback must introduce and certify the separate composed-terminal authority rather than reactivating the retired transparent attachment path.
|
|
21
21
|
|
|
22
22
|
## Current module responsibilities
|
|
23
23
|
|
|
@@ -30,20 +30,20 @@ Transparent mode has no A1-authoritative terminal surface, internal pane, virtua
|
|
|
30
30
|
- `protocol`: additive control handshake, bounded line framing, authenticated launch-instance commands, typed stop intent, snapshots, and command results.
|
|
31
31
|
- `storage`: SQLite migrations, prior-boot reconciliation, and plural launch-instance persistence. Legacy foreground rows are historical migration input and never authorize current ownership.
|
|
32
32
|
- `supervisor`: endpoint identity, plural cohort ownership, per-instance reconciliation, and aggregate release shutdown coordination. It owns no terminal surface.
|
|
33
|
-
- `
|
|
33
|
+
- `pi-engine-adapter`, `pi-component-adapter`, `pi-tui-runtime-adapter`, and `pi-session-ui-integration`: isolate pinned Pi engine and presentation knowledge behind neutral contracts; product features do not import them directly. The session UI render root assembles semantic document and dock rows, while its focused viewport controller owns follow state, pointer routing, selection, and interaction timers. Owned-app route lifecycle belongs to the neutral `ui-apps` owner and is only hosted by the Pi session UI.
|
|
34
34
|
- release/update/bootstrap: package-derived immutable release identity, process-guardian integrity, cohort selection, durable update transactions, rollback, and dependency-light command entry.
|
|
35
35
|
|
|
36
36
|
## Dependency direction
|
|
37
37
|
|
|
38
38
|
Terminal boundaries are application-agnostic. They may not select behavior from executable names, arguments, CLI-specific environment variables, or visible text. Production code may not import private Pi distribution APIs or use a Pi-specific terminal workaround.
|
|
39
39
|
|
|
40
|
-
The
|
|
40
|
+
The JavaScript product path has no PTY or terminal-emulator dependency. Reintroducing `node-pty`, xterm state, custom input encoders, mode/query trackers, cadence-derived frame inference, or renderer/projection code requires an approved capability change and cannot become a second terminal authority. The Rust process guardian is a lifecycle-only native boundary and is independent from the held composed terminal host.
|
|
41
41
|
|
|
42
|
-
`scripts/check-architecture.mjs` enforces the structural parts of these boundaries. Cross-cutting rationale belongs here; implementation history belongs in Git and archived OpenSpec changes.
|
|
42
|
+
`scripts/governance/check-architecture.mjs` enforces the structural parts of these boundaries. Cross-cutting rationale belongs here; implementation history belongs in Git and archived OpenSpec changes.
|
|
43
43
|
|
|
44
44
|
## Planned multi-agent boundaries
|
|
45
45
|
|
|
46
|
-
The workspace feature may depend on workspace contracts and the structured/terminal-host foundations. Those foundations may depend only on dependency-free workspace contracts, never on product features, launch profiles, or each other unless an approved capability adds the dependency.
|
|
46
|
+
The workspace feature may depend on workspace contracts and the structured/terminal-host foundations. Those foundations may depend only on dependency-free workspace contracts, never on product features, launch profiles, or each other unless an approved capability adds the dependency. Launch profiles do not import, initialize, launch, or connect to composed terminal-host infrastructure.
|
|
47
47
|
|
|
48
48
|
Default future agents and composed hosts are children of the originating bare-`a1` launch instance and terminate when it closes. A process that survives command closure requires a separately approved explicit resident capability; durable identity or state recovery never implies an implicitly surviving process.
|
|
49
49
|
|