@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.
Files changed (461) hide show
  1. package/README.md +107 -67
  2. package/bin/cli.js +28 -10
  3. package/bin/guardian.js +4 -1
  4. package/bin/module-identity.js +69 -35
  5. package/bin/pi-tui.d.ts +6 -0
  6. package/bin/pi-tui.js +28 -0
  7. package/bin/release-cleanup.js +8 -0
  8. package/bin/supervisor.js +1 -1
  9. package/bin/sync-pi-tui-proxy.js +97 -0
  10. package/bin/ui.js +25 -6
  11. package/bin/warmup.js +18 -0
  12. package/dist/cli/capabilities.d.ts +6 -0
  13. package/dist/{src/cli → cli}/capabilities.js +1 -1
  14. package/dist/{src/cli → cli}/dispatch.d.ts +6 -0
  15. package/dist/cli/dispatch.js +202 -0
  16. package/dist/{src/cli → cli}/packages.d.ts +10 -2
  17. package/dist/{src/cli → cli}/packages.js +24 -20
  18. package/dist/{src/cli → cli}/version-stats.d.ts +6 -0
  19. package/dist/cli/version-stats.js +112 -0
  20. package/dist/composition/agent-engine-bridge.d.ts +3 -0
  21. package/dist/composition/agent-engine-bridge.js +108 -0
  22. package/dist/composition/index.d.ts +3 -0
  23. package/dist/composition/index.js +3 -0
  24. package/dist/composition/owned-ui.d.ts +28 -0
  25. package/dist/composition/owned-ui.js +64 -0
  26. package/dist/composition/process.d.ts +16 -0
  27. package/dist/composition/process.js +45 -0
  28. package/dist/composition/settings-route-host.d.ts +8 -0
  29. package/dist/composition/settings-route-host.js +75 -0
  30. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +2 -2
  31. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +22 -4
  32. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +17 -0
  33. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +36 -0
  34. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +25 -0
  35. package/dist/{src/features → features}/launch/development-launch.js +11 -3
  36. package/dist/{src/features → features}/launch/index.d.ts +0 -1
  37. package/dist/{src/features → features}/launch/index.js +0 -1
  38. package/dist/{src/features → features}/launch/intent.d.ts +3 -2
  39. package/dist/features/launch/intent.js +3 -0
  40. package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -2
  41. package/dist/{src/features → features}/launch/prepare-launch.js +2 -9
  42. package/dist/{src/features → features}/launch/profile-paths.d.ts +1 -2
  43. package/dist/{src/features → features}/launch/profile-paths.js +2 -8
  44. package/dist/{src/features → features}/launch/runtime-selection.d.ts +2 -5
  45. package/dist/{src/features → features}/owned-ui/customization.d.ts +3 -1
  46. package/dist/{src/features → features}/owned-ui/customization.js +3 -1
  47. package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +2 -1
  48. package/dist/{src/features → features}/owned-ui/diagnostics.js +1 -0
  49. package/dist/{src/features → features}/owned-ui/index.d.ts +1 -0
  50. package/dist/{src/features → features}/owned-ui/index.js +1 -0
  51. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  52. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  53. package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
  54. package/dist/{src/features → features}/owned-ui/run.js +2 -0
  55. package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
  56. package/dist/{src/features → features}/owned-ui/settings-app.js +103 -54
  57. package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
  58. package/dist/{src/features → features}/workspace/reducer.d.ts +2 -1
  59. package/dist/{src/features → features}/workspace/reducer.js +2 -1
  60. package/dist/{src/features → features}/workspace/router.d.ts +2 -1
  61. package/dist/{src/features → features}/workspace/router.js +1 -0
  62. package/dist/{src/features → features}/workspace/store.d.ts +2 -1
  63. package/dist/{src/features → features}/workspace/store.js +1 -0
  64. package/dist/{src/foundation → foundation}/launch-guardian/main.js +10 -2
  65. package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +1 -1
  66. package/dist/{src/foundation → foundation}/lifecycle/model.js +1 -1
  67. package/dist/foundation/lifecycle/paths.d.ts +28 -0
  68. package/dist/{src/foundation → foundation}/lifecycle/paths.js +21 -0
  69. package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +2 -0
  70. package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +2 -0
  71. package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
  72. package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
  73. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +1 -0
  74. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +1 -0
  75. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +1 -0
  76. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +1 -0
  77. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +1 -0
  78. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +1 -0
  79. package/dist/{src/foundation → foundation}/protocol/client.d.ts +1 -0
  80. package/dist/{src/foundation → foundation}/protocol/client.js +1 -0
  81. package/dist/{src/foundation → foundation}/protocol/messages.d.ts +1 -0
  82. package/dist/{src/foundation → foundation}/protocol/messages.js +1 -0
  83. package/dist/{src/foundation → foundation}/release/bootstrap.d.ts +14 -4
  84. package/dist/{src/foundation → foundation}/release/bootstrap.js +66 -13
  85. package/dist/foundation/release/cohort-state.d.ts +156 -0
  86. package/dist/foundation/release/cohort-state.js +471 -0
  87. package/dist/foundation/release/dependency-layer.d.ts +78 -0
  88. package/dist/foundation/release/dependency-layer.js +487 -0
  89. package/dist/foundation/release/endpoints.d.ts +20 -0
  90. package/dist/foundation/release/endpoints.js +50 -0
  91. package/dist/{src/foundation → foundation}/release/index.d.ts +3 -0
  92. package/dist/{src/foundation → foundation}/release/index.js +3 -0
  93. package/dist/foundation/release/release-gc.d.ts +71 -0
  94. package/dist/foundation/release/release-gc.js +734 -0
  95. package/dist/{src/foundation → foundation}/release/release-store.d.ts +3 -1
  96. package/dist/{src/foundation → foundation}/release/release-store.js +60 -10
  97. package/dist/{src/foundation → foundation}/release/release.d.ts +4 -1
  98. package/dist/{src/foundation → foundation}/release/release.js +10 -3
  99. package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +1 -0
  100. package/dist/{src/foundation → foundation}/release/update-transaction.js +1 -0
  101. package/dist/{src/foundation → foundation}/release/update.d.ts +19 -3
  102. package/dist/{src/foundation → foundation}/release/update.js +114 -54
  103. package/dist/foundation/release/warmup.d.ts +3 -0
  104. package/dist/foundation/release/warmup.js +35 -0
  105. package/dist/foundation/startup/index.d.ts +1 -0
  106. package/dist/foundation/startup/index.js +1 -0
  107. package/dist/foundation/startup/startup-runtime.d.ts +36 -0
  108. package/dist/foundation/startup/startup-runtime.js +140 -0
  109. package/dist/{src/foundation → foundation}/storage/control-store.d.ts +2 -1
  110. package/dist/{src/foundation → foundation}/storage/control-store.js +39 -4
  111. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +2 -1
  112. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +2 -1
  113. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +2 -1
  114. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +2 -1
  115. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
  116. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
  117. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +2 -1
  118. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +2 -1
  119. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +2 -1
  120. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +2 -1
  121. package/dist/foundation/supervision/index.d.ts +3 -0
  122. package/dist/foundation/supervision/index.js +3 -0
  123. package/dist/{src/foundation → foundation}/supervision/main.js +11 -5
  124. package/dist/foundation/supervision/paths.d.ts +1 -0
  125. package/dist/foundation/supervision/paths.js +1 -0
  126. package/dist/{src/foundation → foundation}/supervision/server.d.ts +19 -1
  127. package/dist/{src/foundation → foundation}/supervision/server.js +51 -2
  128. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
  129. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
  130. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
  131. package/dist/integrations/pi/components/owned-editor-ux.d.ts +55 -0
  132. package/dist/integrations/pi/components/owned-editor-ux.js +778 -0
  133. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +1 -0
  134. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +1 -0
  135. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.js +54 -6
  136. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
  137. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +3 -3
  138. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +32 -17
  139. package/dist/integrations/pi/components/shell-presenters-info.d.ts +36 -0
  140. package/dist/integrations/pi/components/shell-presenters-info.js +78 -0
  141. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +25 -0
  142. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +92 -131
  143. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +1 -1
  144. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.d.ts +52 -8
  145. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +4 -2
  146. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +13 -0
  147. package/dist/integrations/pi/components/submitted-prompt-adapter.js +27 -0
  148. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +10 -2
  149. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +36 -3
  150. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +1 -1
  151. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +22 -4
  152. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +289 -68
  153. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +2 -0
  154. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +4 -2
  155. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  156. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  157. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +3 -0
  158. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +3 -0
  159. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +2 -1
  160. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +1 -0
  161. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
  162. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +2 -2
  163. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  164. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  165. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +2 -1
  166. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +1 -0
  167. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +16 -1
  168. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +39 -4
  169. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +4 -2
  170. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +19 -4
  171. package/dist/integrations/pi/engine/settings-effects.d.ts +66 -0
  172. package/dist/integrations/pi/engine/settings-effects.js +249 -0
  173. package/dist/integrations/pi/engine/settings-integration.d.ts +43 -0
  174. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +102 -108
  175. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +3 -2
  176. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +1 -0
  177. package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
  178. package/dist/integrations/pi/session-ui/clipboard-image.js +29 -0
  179. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.d.ts +1 -0
  180. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.js +1 -0
  181. package/dist/integrations/pi/session-ui/prompt-chips.d.ts +23 -0
  182. package/dist/integrations/pi/session-ui/prompt-chips.js +246 -0
  183. package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
  184. package/dist/integrations/pi/session-ui/session-shell-root.d.ts +137 -0
  185. package/dist/integrations/pi/session-ui/session-shell-root.js +1106 -0
  186. package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
  187. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/session-shell.js +415 -775
  188. package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +44 -0
  189. package/dist/integrations/pi/session-ui/session-viewport-controller.js +434 -0
  190. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.d.ts +29 -0
  191. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.js +79 -0
  192. package/dist/integrations/pi/session-ui/system-clipboard.d.ts +20 -0
  193. package/dist/integrations/pi/session-ui/system-clipboard.js +130 -0
  194. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +8 -1
  195. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +216 -9
  196. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +29 -6
  197. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +63 -0
  198. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +240 -0
  199. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.d.ts +2 -0
  200. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.js +2 -0
  201. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  202. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  203. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
  204. package/dist/native/darwin-arm64/manifest.json +1 -1
  205. package/dist/native/linux-x64/manifest.json +3 -3
  206. package/dist/native/linux-x64/process-guardian +0 -0
  207. package/dist/native/win32-x64/manifest.json +3 -3
  208. package/dist/native/win32-x64/process-guardian.exe +0 -0
  209. package/dist/{src/product-identity.d.ts → product-identity.d.ts} +3 -3
  210. package/dist/{src/product-identity.js → product-identity.js} +7 -5
  211. package/dist/{src/product-identity.json → product-identity.json} +11 -6
  212. package/dist/runtime-payload-inventory.json +122328 -0
  213. package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +23 -1
  214. package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
  215. package/dist/{src/foundation/ui-apps → ui/apps}/host.js +14 -10
  216. package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +1 -0
  217. package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +1 -0
  218. package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +5 -3
  219. package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +1 -0
  220. package/dist/{src/foundation/ui-components → ui/components}/frame.js +1 -0
  221. package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +4 -0
  222. package/dist/{src/foundation/ui-components → ui/components}/index.js +4 -0
  223. package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +1 -6
  224. package/dist/{src/foundation/ui-components → ui/components}/line-input.js +4 -9
  225. package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -6
  226. package/dist/{src/foundation/ui-components → ui/components}/list-view.js +14 -7
  227. package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +10 -0
  228. package/dist/{src/foundation/ui-components → ui/components}/mouse.js +23 -0
  229. package/dist/ui/components/progress-status.d.ts +2 -0
  230. package/dist/ui/components/progress-status.js +4 -0
  231. package/dist/ui/components/prompt-row.d.ts +14 -0
  232. package/dist/ui/components/prompt-row.js +20 -0
  233. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +26 -0
  234. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +35 -0
  235. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +1 -0
  236. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +1 -0
  237. package/dist/ui/components/spans.d.ts +25 -0
  238. package/dist/ui/components/spans.js +257 -0
  239. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  240. package/dist/ui/components/submitted-prompt.js +50 -0
  241. package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -5
  242. package/dist/{src/foundation/ui-components → ui/components}/surface.js +1 -5
  243. package/dist/ui/components/text-selection.d.ts +62 -0
  244. package/dist/ui/components/text-selection.js +235 -0
  245. package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
  246. package/dist/{src/foundation/ui-components → ui/components}/text.js +66 -4
  247. package/dist/ui/components/transcript-viewport.d.ts +146 -0
  248. package/dist/ui/components/transcript-viewport.js +629 -0
  249. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
  250. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.js +33 -5
  251. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +1 -1
  252. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +21 -2
  253. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +6 -19
  254. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +32 -23
  255. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
  256. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.js +65 -55
  257. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +1 -0
  258. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +2 -1
  259. package/docs/architecture/boundaries.md +9 -9
  260. package/docs/architecture/code-documentation.md +77 -0
  261. package/docs/architecture/project-structure.md +67 -30
  262. package/docs/architecture/resource-and-data-policy.md +1 -1
  263. package/docs/architecture/toolchain.md +10 -10
  264. package/docs/architecture/ui-reference-provenance.md +34 -5
  265. package/docs/ci-release-runbook.md +186 -79
  266. package/docs/features/launch-profiles.md +10 -19
  267. package/docs/manual-launch-instance-acceptance.md +12 -35
  268. package/docs/manual-owned-ui-checkpoint.md +78 -0
  269. package/docs/manual-pi-boundary-candidate.md +4 -5
  270. package/docs/manual-terminal-colour-check.md +4 -3
  271. package/docs/repository-governance-live-acceptance.md +77 -0
  272. package/package.json +37 -27
  273. package/dist/src/cli/capabilities.d.ts +0 -15
  274. package/dist/src/cli/dispatch.js +0 -177
  275. package/dist/src/cli/version-stats.js +0 -72
  276. package/dist/src/composition/index.d.ts +0 -48
  277. package/dist/src/composition/index.js +0 -258
  278. package/dist/src/features/launch/intent.js +0 -4
  279. package/dist/src/features/launch/profiles.d.ts +0 -12
  280. package/dist/src/features/launch/profiles.js +0 -26
  281. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  282. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  283. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  284. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  285. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -112
  286. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  287. package/dist/src/foundation/release/cohort-state.js +0 -202
  288. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  289. package/dist/src/foundation/release/release-gc.js +0 -16
  290. package/dist/src/foundation/supervision/index.d.ts +0 -3
  291. package/dist/src/foundation/supervision/index.js +0 -3
  292. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  293. package/dist/src/foundation/supervision/paths.js +0 -1
  294. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  295. package/dist/src/foundation/ui-components/spans.js +0 -59
  296. package/docs/manual-transparent-checkpoint.md +0 -53
  297. /package/dist/{src/cli → cli}/index.d.ts +0 -0
  298. /package/dist/{src/cli → cli}/index.js +0 -0
  299. /package/dist/{src/cli → cli}/version.d.ts +0 -0
  300. /package/dist/{src/cli → cli}/version.js +0 -0
  301. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  302. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  303. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
  304. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
  305. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
  306. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  307. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  308. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +0 -0
  309. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  310. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  311. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
  312. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  313. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  314. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  315. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  316. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
  317. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  318. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.d.ts +0 -0
  319. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.js +0 -0
  320. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  321. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +0 -0
  322. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +0 -0
  323. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  324. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
  325. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
  326. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
  327. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
  328. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
  329. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
  330. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  331. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  332. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  333. /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
  334. /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
  335. /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
  336. /package/dist/{src/features → features}/workspace/index.js +0 -0
  337. /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
  338. /package/dist/{src/features → features}/workspace/presentation.js +0 -0
  339. /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
  340. /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
  341. /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
  342. /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
  343. /package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +0 -0
  344. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  345. /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
  346. /package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +0 -0
  347. /package/dist/{src/foundation → foundation}/lifecycle/index.js +0 -0
  348. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  349. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  350. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
  351. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
  352. /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
  353. /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
  354. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
  355. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
  356. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  357. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  358. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  359. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  360. /package/dist/{src/foundation → foundation}/process-containment/index.d.ts +0 -0
  361. /package/dist/{src/foundation → foundation}/process-containment/index.js +0 -0
  362. /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
  363. /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
  364. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  365. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  366. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  367. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  368. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  369. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  370. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  371. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  372. /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
  373. /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
  374. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
  375. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
  376. /package/dist/{src/foundation → foundation}/supervision/main.d.ts +0 -0
  377. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
  378. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +0 -0
  379. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +0 -0
  380. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
  381. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
  382. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  383. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
  384. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +0 -0
  385. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  386. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  387. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
  388. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  389. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
  390. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
  391. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
  392. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
  393. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
  394. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.js +0 -0
  395. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
  396. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
  397. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
  398. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
  399. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
  400. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
  401. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  402. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
  403. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.d.ts +0 -0
  404. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.js +0 -0
  405. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +0 -0
  406. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +0 -0
  407. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +0 -0
  408. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  409. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
  410. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
  411. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
  412. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
  413. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
  414. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
  415. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
  416. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
  417. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
  418. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
  419. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
  420. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  421. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
  422. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
  423. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  424. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
  425. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
  426. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
  427. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
  428. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
  429. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  430. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  431. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +0 -0
  432. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
  433. /package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/route-host.js +0 -0
  434. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
  435. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
  436. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.js +0 -0
  437. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
  438. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  439. /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
  440. /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
  441. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  442. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  443. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  444. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  445. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  446. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  447. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  448. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  449. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  450. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  451. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  452. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  453. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  454. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  455. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  456. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  457. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  458. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
  459. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
  460. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  461. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
@@ -1,5 +1,6 @@
1
1
  import type { NativeProcessIdentity, ProcessContainmentIdentity } from "../lifecycle/index.js";
2
2
  import type { ContainedProcessHandle, ContainedSpawnOptions, ProcessContainment } from "./contracts.js";
3
+ /** Delegates one root runtime to the native guardian and exposes its verified containment identity. */
3
4
  export declare class NativeGuardianContainment implements ProcessContainment {
4
5
  #private;
5
6
  readonly instanceId: string;
@@ -2,6 +2,7 @@ import { spawn } from "node:child_process";
2
2
  import { mkdir, readFile, rm } from "node:fs/promises";
3
3
  import { dirname, resolve } from "node:path";
4
4
  import { PRODUCT_IDENTITY } from "../../product-identity.js";
5
+ /** Delegates one root runtime to the native guardian and exposes its verified containment identity. */
5
6
  export class NativeGuardianContainment {
6
7
  instanceId;
7
8
  helperPath;
@@ -8,6 +8,7 @@ export interface InspectorCommandResult {
8
8
  export interface InspectorCommandRunner {
9
9
  run(executable: string, arguments_: readonly string[]): Promise<InspectorCommandResult>;
10
10
  }
11
+ /** Verifies Windows process identity through the bounded process-guardian inspection command. */
11
12
  export declare class WindowsNativeProcessInspector implements NativeProcessInspector {
12
13
  readonly helperPath: string;
13
14
  private readonly runner;
@@ -1,4 +1,5 @@
1
1
  import { execFile } from "node:child_process";
2
+ /** Verifies Windows process identity through the bounded process-guardian inspection command. */
2
3
  export class WindowsNativeProcessInspector {
3
4
  helperPath;
4
5
  runner;
@@ -5,6 +5,7 @@ interface ClientEvents {
5
5
  stopIntent: [LaunchInstanceStopIntent];
6
6
  disconnect: [];
7
7
  }
8
+ /** Maintains one negotiated supervisor connection and rejects all pending commands on disconnect. */
8
9
  export declare class SupervisorClient extends EventEmitter<ClientEvents> {
9
10
  #private;
10
11
  readonly clientId: `${string}-${string}-${string}-${string}-${string}`;
@@ -2,6 +2,7 @@ import { EventEmitter } from "node:events";
2
2
  import { connect } from "node:net";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { CONTROL_ENVELOPE, CONTROL_ENVELOPE_REVISION, encodeFrame, LineFrameDecoder, localControlHello, negotiateControlFeatures } from "./messages.js";
5
+ /** Maintains one negotiated supervisor connection and rejects all pending commands on disconnect. */
5
6
  export class SupervisorClient extends EventEmitter {
6
7
  clientId = randomUUID();
7
8
  releaseId;
@@ -76,6 +76,7 @@ export interface ControlNegotiation {
76
76
  export declare function localControlHello(releaseId?: string): ControlHello;
77
77
  export declare function negotiateControlFeatures(client: ControlHello, server?: ControlHello): ControlNegotiation;
78
78
  export declare function encodeFrame(message: ClientMessage | ServerMessage | Readonly<Record<string, unknown>>): string;
79
+ /** Incrementally decodes size-bounded newline-delimited control frames from arbitrary chunks. */
79
80
  export declare class LineFrameDecoder {
80
81
  #private;
81
82
  push(chunk: Buffer | string): unknown[];
@@ -58,6 +58,7 @@ export function negotiateControlFeatures(client, server = localControlHello()) {
58
58
  export function encodeFrame(message) {
59
59
  return `${JSON.stringify(message)}\n`;
60
60
  }
61
+ /** Incrementally decodes size-bounded newline-delimited control frames from arbitrary chunks. */
61
62
  export class LineFrameDecoder {
62
63
  #buffer = "";
63
64
  push(chunk) {
@@ -1,18 +1,28 @@
1
1
  import { type OwnershipProbe } from "./cohort-selection.js";
2
2
  import { type SupervisorEndpointMetadata } from "./cohort-state.js";
3
- import { type LaunchProfileId } from "../lifecycle/index.js";
3
+ import { resolveProductPaths, type LaunchProfileId } from "../lifecycle/index.js";
4
4
  import { cleanupProvenIdleOwner } from "./process-cleanup.js";
5
5
  import { type MaterializedRelease, type VerifyMaterializedReleaseOptions } from "./release-store.js";
6
6
  export interface BootstrapOptions {
7
7
  readonly packageRoot: string;
8
8
  readonly launchIntent?: {
9
9
  readonly kind: "interactive";
10
- readonly profile: {
11
- readonly id: LaunchProfileId;
12
- };
10
+ readonly profileId: LaunchProfileId;
13
11
  };
14
12
  readonly environment?: NodeJS.ProcessEnv;
15
13
  readonly output?: Pick<NodeJS.WriteStream, "write">;
14
+ /**
15
+ * Whether a materialized release copy is fit to launch. The active release
16
+ * is normally reused while its version matches the installation, but a copy
17
+ * can be broken in ways a version cannot see — materialized from a tree a
18
+ * blocked postinstall never finished repairing. The probe is injected from
19
+ * the bin entry because deciding it requires inspecting dependency
20
+ * resolution, which stays out of production code. Absent means every
21
+ * release is fit.
22
+ */
23
+ readonly releaseIsLaunchable?: (releaseRoot: string) => boolean;
24
+ /** Test seam for bounded maintenance scheduled after stale endpoint sweeping. */
25
+ readonly scheduleMaintenance?: (dataDir: string, paths: ReturnType<typeof resolveProductPaths>) => Promise<void>;
16
26
  }
17
27
  export declare function runBootstrap(options: BootstrapOptions): Promise<number>;
18
28
  export declare function certifyMaterializedRelease(release: MaterializedRelease, dataDir: string, verification?: VerifyMaterializedReleaseOptions): Promise<string>;
@@ -5,14 +5,18 @@ import { platform } from "node:os";
5
5
  import { resolve } from "node:path";
6
6
  import { selectCohortLaunch } from "./cohort-selection.js";
7
7
  import { CohortStateStore } from "./cohort-state.js";
8
- import { assertLaunchProfileId, resolveProductPaths } from "../lifecycle/index.js";
8
+ import { assertLaunchProfileId, resolveCohortEndpoint, resolveProductPaths } from "../lifecycle/index.js";
9
9
  import { encodeFrame, LineFrameDecoder } from "../protocol/index.js";
10
10
  import { cleanupProvenIdleOwner, processIsAlive } from "./process-cleanup.js";
11
+ import { sweepDeadEndpoints } from "./endpoints.js";
11
12
  import { consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease } from "./release-store.js";
13
+ import { scheduleReleaseCleanup } from "./release-gc.js";
12
14
  import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
15
+ import { markStartupPhase } from "../startup/index.js";
13
16
  export async function runBootstrap(options) {
14
17
  const environment = { ...(options.environment ?? process.env) };
15
- const launchProfileId = options.launchIntent?.profile.id ?? "a1";
18
+ await markStartupPhase(environment, "bootstrap-start");
19
+ const launchProfileId = options.launchIntent?.profileId ?? "a1";
16
20
  assertLaunchProfileId(launchProfileId);
17
21
  environment[PRODUCT_IDENTITY.environment.launchProfile] = launchProfileId;
18
22
  const output = options.output ?? process.stderr;
@@ -20,12 +24,37 @@ export async function runBootstrap(options) {
20
24
  await mkdir(paths.runtimeDir, { recursive: true, mode: 0o700 });
21
25
  const stateStore = new CohortStateStore(paths.dataDir);
22
26
  let state = await stateStore.read();
23
- let endpoint = await readEndpointMetadata(paths.endpointMetadataPath);
27
+ // Invariant: records left by cohorts whose processes are gone say nothing about ownership, and there
28
+ // can now be several of them. Clearing them first keeps the decision below about what is
29
+ // actually running.
30
+ await sweepDeadEndpoints(paths).catch(() => []);
31
+ // Performance: reconciliation is serialized by cohort state, but launch never awaits a physical
32
+ // backlog. The scheduler commits a plan and starts a detached bounded worker.
33
+ const scheduleMaintenance = options.scheduleMaintenance ?? scheduleReleaseCleanup;
34
+ void scheduleMaintenance(paths.dataDir, paths).catch(() => { });
35
+ // Protocol: each cohort keeps its own endpoint, so a launch looks for the endpoint of the release it
36
+ // is about to run rather than for the one endpoint the runtime directory used to have.
37
+ const activeReleaseId = state.references.active;
38
+ let endpointPaths = activeReleaseId === null
39
+ ? { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath }
40
+ : resolveCohortEndpoint(paths, activeReleaseId, environment);
41
+ let endpoint = await readEndpointMetadata(endpointPaths.endpointMetadataPath);
42
+ if (endpoint === null) {
43
+ // Compatibility: a release that predates cohort-scoped endpoints published one endpoint for the whole
44
+ // runtime directory. Recognizing it is what lets a session started by that release keep
45
+ // working through the first launch that knows about cohorts.
46
+ const legacy = await readEndpointMetadata(paths.endpointMetadataPath);
47
+ if (legacy !== null) {
48
+ endpoint = legacy;
49
+ endpointPaths = { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath };
50
+ }
51
+ }
24
52
  let probe = endpoint ? await probeOwnership(endpoint) : "dead";
25
53
  const installedVersion = await readInstalledVersion(options.packageRoot);
26
54
  const activeId = state.references.active;
27
55
  const active = activeId === null ? undefined : state.releases[activeId];
28
- if (active?.approval === "approved" && active.packageVersion === installedVersion) {
56
+ const activeIsLaunchable = active === undefined || (options.releaseIsLaunchable?.(active.releaseRoot) ?? true);
57
+ if (activeIsLaunchable && active?.approval === "approved" && active.packageVersion === installedVersion) {
29
58
  const endpointMatches = endpoint?.releaseId === active.releaseId
30
59
  && endpoint.releaseRoot === active.releaseRoot
31
60
  && endpoint.contentDigest === active.contentDigest;
@@ -35,10 +64,11 @@ export async function runBootstrap(options) {
35
64
  }
36
65
  if (endpoint === null || probe === "dead") {
37
66
  if (endpoint)
38
- await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint);
67
+ await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint);
39
68
  const retained = await readMaterializedRelease(active.releaseRoot);
69
+ const retainedPaths = resolveCohortEndpoint(paths, retained.releaseId, environment);
40
70
  await startSupervisor(retained, environment);
41
- await waitForVerifiedEndpoint(paths.endpointMetadataPath, retained, 8_000);
71
+ await waitForVerifiedEndpoint(retainedPaths.endpointMetadataPath, retained, 8_000);
42
72
  return await launchUi(retained, environment);
43
73
  }
44
74
  }
@@ -51,7 +81,28 @@ export async function runBootstrap(options) {
51
81
  await stateStore.activate(candidate.releaseId);
52
82
  state = await stateStore.read();
53
83
  }
54
- endpoint = await readEndpointMetadata(paths.endpointMetadataPath);
84
+ else if (!activeIsLaunchable && candidate.releaseId !== activeId
85
+ && state.releases[candidate.releaseId]?.approval !== "approved") {
86
+ // Invariant: the active reference points at a copy that cannot launch, so reusing it
87
+ // is off the table — but an unapproved candidate would lose the selection
88
+ // below to that same broken active (`start-active`). Approving the healed
89
+ // candidate here lets ordinary cohort selection activate it, while a live
90
+ // busy cohort still wins the endpoint checks and keeps its sessions.
91
+ const diagnosticsPath = await certifyMaterializedRelease(candidate, paths.dataDir);
92
+ await stateStore.approve(candidate.releaseId, diagnosticsPath);
93
+ state = await stateStore.read();
94
+ }
95
+ // Protocol: the candidate's own endpoint decides whether this launch attaches or starts a supervisor.
96
+ // A cohort other than this one is not in the way: it listens somewhere else.
97
+ endpointPaths = resolveCohortEndpoint(paths, candidate.releaseId, environment);
98
+ endpoint = await readEndpointMetadata(endpointPaths.endpointMetadataPath);
99
+ if (endpoint === null) {
100
+ const legacy = await readEndpointMetadata(paths.endpointMetadataPath);
101
+ if (legacy !== null) {
102
+ endpoint = legacy;
103
+ endpointPaths = { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath };
104
+ }
105
+ }
55
106
  probe = endpoint ? await probeOwnership(endpoint) : "dead";
56
107
  let decision = selectCohortLaunch(candidate, state, endpoint, probe);
57
108
  if (decision.action === "blocked") {
@@ -64,11 +115,11 @@ export async function runBootstrap(options) {
64
115
  await writeFile(resolve(paths.dataDir, `cleanup-${Date.now()}.json`), JSON.stringify(diagnostics, null, 2));
65
116
  if (!diagnostics.terminated)
66
117
  throw new Error(`could not safely clean stale ${PRODUCT_TEXT.displayName} supervisor ${endpoint.pid}`);
67
- await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint);
118
+ await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint);
68
119
  decision = selectCohortLaunch(candidate, await stateStore.read(), null, "dead");
69
120
  }
70
121
  else if (endpoint && probe === "dead") {
71
- await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint);
122
+ await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint);
72
123
  }
73
124
  if (decision.action === "launch-retained-ui") {
74
125
  const retained = await verifyMaterializedRelease(decision.releaseRoot, undefined, resolve(paths.dataDir, "releases"));
@@ -94,7 +145,7 @@ export async function runBootstrap(options) {
94
145
  output.write(`${PRODUCT_TEXT.diagnostic("could not complete bounded idle cohort shutdown; the candidate remains pending.")}\n`);
95
146
  return 1;
96
147
  }
97
- await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint);
148
+ await removeEndpointArtifacts(endpointPaths.endpointMetadataPath, endpointPaths.endpoint);
98
149
  await stateStore.activate(candidate.releaseId);
99
150
  decision = { action: "activate-candidate", releaseId: candidate.releaseId, releaseRoot: candidate.releaseRoot, reason: "idle cohort released ownership" };
100
151
  }
@@ -113,7 +164,7 @@ export async function runBootstrap(options) {
113
164
  selected = await readMaterializedRelease(decision.releaseRoot);
114
165
  }
115
166
  await startSupervisor(selected, environment);
116
- await waitForVerifiedEndpoint(paths.endpointMetadataPath, selected, 8_000);
167
+ await waitForVerifiedEndpoint(resolveCohortEndpoint(paths, selected.releaseId, environment).endpointMetadataPath, selected, 8_000);
117
168
  return await launchUi(selected, environment);
118
169
  }
119
170
  async function readInstalledVersion(packageRoot) {
@@ -152,6 +203,7 @@ export async function startSupervisor(release, environment) {
152
203
  child.unref();
153
204
  }
154
205
  async function launchUi(release, environment) {
206
+ await markStartupPhase(environment, "bootstrap-selected");
155
207
  const entry = await resolveReleaseEntryPoint(release, "bin/guardian.js");
156
208
  return await new Promise((resolvePromise, rejectPromise) => {
157
209
  const child = spawn(process.execPath, [entry], {
@@ -167,6 +219,7 @@ export function releaseEnvironment(environment, release) {
167
219
  return {
168
220
  ...environment,
169
221
  [PRODUCT_IDENTITY.environment.releaseId]: release.releaseId,
222
+ [PRODUCT_IDENTITY.environment.releaseLayers]: (release.dependencyLayers ?? []).map(layer => layer.layerId).join(","),
170
223
  [PRODUCT_IDENTITY.environment.releaseRoot]: release.releaseRoot,
171
224
  [PRODUCT_IDENTITY.environment.releaseDigest]: release.contentDigest,
172
225
  };
@@ -274,7 +327,7 @@ async function activatePendingAfterBlockerExit(candidate, stateStore, paths, env
274
327
  await removeEndpointArtifacts(paths.endpointMetadataPath, paths.endpoint);
275
328
  await stateStore.activate(candidate.releaseId);
276
329
  await startSupervisor(candidate, environment);
277
- await waitForVerifiedEndpoint(paths.endpointMetadataPath, candidate, 8_000);
330
+ await waitForVerifiedEndpoint(resolveCohortEndpoint(paths, candidate.releaseId, environment).endpointMetadataPath, candidate, 8_000);
278
331
  }
279
332
  export async function releaseVerifiedIdleOwner(metadata, dataDir, operations = {}) {
280
333
  try {
@@ -282,7 +335,7 @@ export async function releaseVerifiedIdleOwner(metadata, dataDir, operations = {
282
335
  return true;
283
336
  }
284
337
  catch {
285
- // The authenticated idle-release handshake authorizes bounded cleanup of
338
+ // Security: the authenticated idle-release handshake authorizes bounded cleanup of
286
339
  // this exact boot when a native handle outlives graceful shutdown.
287
340
  const diagnostics = await (operations.cleanup ?? cleanupProvenIdleOwner)(metadata);
288
341
  await writeFile(resolve(dataDir, `cleanup-${Date.now()}.json`), JSON.stringify(diagnostics, null, 2));
@@ -0,0 +1,156 @@
1
+ import type { MaterializedRelease } from "./release-store.js";
2
+ export declare const RELEASE_COHORT_SCHEMA: string;
3
+ export type ReleaseApproval = "candidate" | "approved" | "rejected";
4
+ export interface ReleaseRecord {
5
+ readonly releaseId: string;
6
+ readonly releaseRoot: string;
7
+ readonly packageVersion: string;
8
+ readonly contentDigest: string;
9
+ readonly approval: ReleaseApproval;
10
+ readonly materializedAt: string;
11
+ readonly certifiedAt: string | null;
12
+ readonly diagnosticsPath: string | null;
13
+ }
14
+ export interface ReleaseReferences {
15
+ readonly active: string | null;
16
+ readonly pending: string | null;
17
+ readonly approved: string | null;
18
+ readonly rollback: string | null;
19
+ readonly retention: readonly string[];
20
+ }
21
+ export type ExternalReleaseHoldAuthority = "agent" | "migration";
22
+ /** A current hold supplied by an authority that must participate in every reconciliation. */
23
+ export interface ExternalReleaseHold {
24
+ readonly authority: ExternalReleaseHoldAuthority;
25
+ readonly releaseId: string;
26
+ }
27
+ export interface ActiveReleaseTransactionReference {
28
+ readonly status: "active" | "completed" | "rolled-back" | "failed";
29
+ readonly priorActiveReleaseId: string | null;
30
+ }
31
+ export type ReleaseCleanupStage = "detached" | "trash";
32
+ export interface ReleaseCleanupDisposition {
33
+ readonly release: ReleaseRecord;
34
+ readonly stage: ReleaseCleanupStage;
35
+ readonly trashPath: string | null;
36
+ readonly attempts: number;
37
+ readonly lastAttemptAt: string | null;
38
+ readonly lastError: string | null;
39
+ }
40
+ export interface ReleaseCleanupDiagnostic {
41
+ readonly releaseId: string;
42
+ readonly stage: string;
43
+ readonly attemptedAt: string;
44
+ readonly error: string;
45
+ }
46
+ export type ReleaseCleanupWorkerStatus = "scheduled" | "running" | "completed" | "blocked" | "continued" | "failed" | "skipped";
47
+ export interface ReleaseCleanupWorkerRun {
48
+ readonly runId: string;
49
+ readonly status: ReleaseCleanupWorkerStatus;
50
+ readonly scheduledAt: string;
51
+ readonly startedAt: string | null;
52
+ readonly completedAt: string | null;
53
+ readonly pid: number | null;
54
+ readonly batches: number;
55
+ readonly attempted: number;
56
+ readonly completed: number;
57
+ readonly remaining: number;
58
+ readonly error: string | null;
59
+ }
60
+ export interface ReleaseCleanupWorkerSummary {
61
+ readonly batches: number;
62
+ readonly attempted: number;
63
+ readonly completed: number;
64
+ readonly remaining: number;
65
+ }
66
+ export interface ReleaseCleanupState {
67
+ readonly pending: Readonly<Record<string, ReleaseCleanupDisposition>>;
68
+ readonly diagnostics: readonly ReleaseCleanupDiagnostic[];
69
+ readonly workerRuns: readonly ReleaseCleanupWorkerRun[];
70
+ }
71
+ export interface CohortState {
72
+ readonly schema: typeof RELEASE_COHORT_SCHEMA;
73
+ readonly revision: number;
74
+ readonly releases: Readonly<Record<string, ReleaseRecord>>;
75
+ readonly references: ReleaseReferences;
76
+ readonly cleanup: ReleaseCleanupState;
77
+ readonly activation: {
78
+ readonly state: "idle" | "pending" | "draining" | "blocked" | "failed";
79
+ readonly reason: string | null;
80
+ readonly blockerGenerationIds: readonly string[];
81
+ readonly updatedAt: string;
82
+ };
83
+ }
84
+ export interface EndpointOwnership {
85
+ readonly state: "idle" | "busy" | "draining" | "released" | "blocked";
86
+ readonly liveInstanceIds: readonly string[];
87
+ readonly nonResumableInstanceIds: readonly string[];
88
+ readonly uncertainInstanceIds: readonly string[];
89
+ }
90
+ export interface SupervisorEndpointMetadata {
91
+ readonly schema: string;
92
+ readonly supervisorId: string;
93
+ readonly endpoint: string;
94
+ readonly pid: number;
95
+ readonly pidStartIdentity: string;
96
+ readonly bootNonce: string;
97
+ readonly startedAt: string;
98
+ readonly releaseId: string;
99
+ readonly releaseRoot: string;
100
+ readonly contentDigest: string;
101
+ readonly ownership: EndpointOwnership;
102
+ readonly envelope: string;
103
+ readonly envelopeRevision: number;
104
+ readonly requiredFeatures: readonly string[];
105
+ readonly optionalFeatures: readonly string[];
106
+ readonly contractDigest: string;
107
+ }
108
+ export interface ProtectedReleaseInputs {
109
+ readonly liveReleaseIds?: readonly string[];
110
+ readonly externalHolds?: readonly ExternalReleaseHold[];
111
+ readonly transaction?: ActiveReleaseTransactionReference | null;
112
+ }
113
+ export interface ProtectedReleasePlan {
114
+ readonly protectedReleaseIds: readonly string[];
115
+ readonly retainedReleaseIds: readonly string[];
116
+ readonly collectibleReleaseIds: readonly string[];
117
+ }
118
+ export interface OrphanReleaseDisposition {
119
+ readonly release: ReleaseRecord;
120
+ readonly stage: ReleaseCleanupStage;
121
+ readonly trashPath?: string | null;
122
+ }
123
+ export interface ReleaseRetentionReconciliation {
124
+ readonly state: CohortState;
125
+ readonly plan: ProtectedReleasePlan;
126
+ readonly detachedReleaseIds: readonly string[];
127
+ }
128
+ /**
129
+ * Derive protection exclusively from current selectors and ownership authorities.
130
+ * The historical retention snapshot is deliberately not an input to this plan.
131
+ */
132
+ export declare function planProtectedReleases(state: CohortState, inputs?: ProtectedReleaseInputs): ProtectedReleasePlan;
133
+ /** Serializes validated cohort-state revisions under a lock and commits each update atomically. */
134
+ export declare class CohortStateStore {
135
+ readonly path: string;
136
+ constructor(dataDir: string);
137
+ read(): Promise<CohortState>;
138
+ update(operation: (current: CohortState) => CohortState | Promise<CohortState>): Promise<CohortState>;
139
+ recordCandidate(release: MaterializedRelease): Promise<CohortState>;
140
+ approve(releaseId: string, diagnosticsPath: string): Promise<CohortState>;
141
+ activate(releaseId: string): Promise<CohortState>;
142
+ blockPending(reason: string, blockerGenerationIds: readonly string[]): Promise<CohortState>;
143
+ rollback(ownershipReleased: boolean): Promise<CohortState>;
144
+ setRetention(releaseIds: readonly string[]): Promise<CohortState>;
145
+ /** Atomically replace legacy retention history and detach every currently collectible record. */
146
+ reconcileRetention(resolveInputs: (current: CohortState) => ProtectedReleaseInputs | Promise<ProtectedReleaseInputs>, orphans?: readonly OrphanReleaseDisposition[]): Promise<ReleaseRetentionReconciliation>;
147
+ markCleanupTrash(releaseId: string, trashPath: string): Promise<CohortState>;
148
+ recordCleanupFailure(releaseId: string, stage: string, error: unknown): Promise<CohortState>;
149
+ completeCleanup(releaseId: string): Promise<CohortState>;
150
+ recordCleanupWorkerScheduled(runId: string): Promise<CohortState>;
151
+ recordCleanupWorkerStarted(runId: string, pid: number): Promise<CohortState>;
152
+ recordCleanupWorkerProgress(runId: string, summary: ReleaseCleanupWorkerSummary): Promise<CohortState>;
153
+ recordCleanupWorkerFinished(runId: string, status: Exclude<ReleaseCleanupWorkerStatus, "scheduled" | "running">, summary: ReleaseCleanupWorkerSummary, error?: unknown): Promise<CohortState>;
154
+ removeUnreferencedRelease(releaseId: string, externalReferences: readonly string[]): Promise<CohortState>;
155
+ }
156
+ export declare function emptyState(): CohortState;