@timurproko/a1 0.1.8-dev.3b54f21 → 0.1.8-dev.402

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 (642) hide show
  1. package/README.md +159 -65
  2. package/bin/cli.js +28 -10
  3. package/bin/guardian.js +12 -6
  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 +2 -2
  9. package/bin/sync-pi-tui-proxy.js +97 -0
  10. package/bin/ui.js +62 -21
  11. package/bin/update-recovery.js +274 -0
  12. package/bin/warmup.js +27 -0
  13. package/dist/cli/capabilities.d.ts +6 -0
  14. package/dist/{src/cli → cli}/capabilities.js +1 -1
  15. package/dist/{src/cli → cli}/dispatch.d.ts +15 -1
  16. package/dist/cli/dispatch.js +261 -0
  17. package/dist/cli/package-messages.d.ts +26 -0
  18. package/dist/cli/package-messages.js +71 -0
  19. package/dist/{src/cli → cli}/packages.d.ts +11 -2
  20. package/dist/{src/cli → cli}/packages.js +24 -27
  21. package/dist/{src/cli → cli}/version-stats.d.ts +6 -0
  22. package/dist/cli/version-stats.js +112 -0
  23. package/dist/composition/agent-engine-bridge.d.ts +3 -0
  24. package/dist/composition/agent-engine-bridge.js +108 -0
  25. package/dist/composition/index.d.ts +3 -0
  26. package/dist/composition/index.js +3 -0
  27. package/dist/composition/owned-ui.d.ts +35 -0
  28. package/dist/composition/owned-ui.js +118 -0
  29. package/dist/composition/process.d.ts +16 -0
  30. package/dist/composition/process.js +45 -0
  31. package/dist/composition/settings-route-host.d.ts +8 -0
  32. package/dist/composition/settings-route-host.js +75 -0
  33. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +2 -2
  34. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +22 -4
  35. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +17 -0
  36. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +6 -0
  37. package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
  38. package/dist/contracts/owned-ui/image-attachments.js +67 -0
  39. package/dist/contracts/owned-ui/index.d.ts +8 -0
  40. package/dist/contracts/owned-ui/index.js +8 -0
  41. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +123 -0
  42. package/dist/contracts/owned-ui/prompt-history.d.ts +55 -0
  43. package/dist/contracts/owned-ui/prompt-history.js +23 -0
  44. package/dist/contracts/owned-ui/prompt-suggestions.d.ts +3 -0
  45. package/dist/contracts/owned-ui/prompt-suggestions.js +44 -0
  46. package/dist/contracts/owned-ui/suggestion-diagnostics.d.ts +22 -0
  47. package/dist/contracts/owned-ui/suggestion-diagnostics.js +9 -0
  48. package/dist/contracts/owned-ui/transcript-lifecycle.d.ts +5 -0
  49. package/dist/contracts/owned-ui/transcript-lifecycle.js +33 -0
  50. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +5 -1
  51. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +129 -4
  52. package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +8 -0
  53. package/dist/{src/features → features}/launch/development-launch.js +11 -3
  54. package/dist/{src/features → features}/launch/index.d.ts +0 -1
  55. package/dist/{src/features → features}/launch/index.js +0 -1
  56. package/dist/features/launch/intent.d.ts +10 -0
  57. package/dist/features/launch/intent.js +8 -0
  58. package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -2
  59. package/dist/{src/features → features}/launch/prepare-launch.js +2 -9
  60. package/dist/{src/features → features}/launch/profile-paths.d.ts +3 -2
  61. package/dist/{src/features → features}/launch/profile-paths.js +13 -8
  62. package/dist/{src/features → features}/launch/runtime-selection.d.ts +2 -5
  63. package/dist/{src/features → features}/owned-ui/customization.d.ts +3 -1
  64. package/dist/{src/features → features}/owned-ui/customization.js +3 -1
  65. package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +2 -1
  66. package/dist/{src/features → features}/owned-ui/diagnostics.js +1 -0
  67. package/dist/{src/features → features}/owned-ui/index.d.ts +2 -0
  68. package/dist/{src/features → features}/owned-ui/index.js +2 -0
  69. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  70. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  71. package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
  72. package/dist/features/owned-ui/run.js +32 -0
  73. package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
  74. package/dist/features/owned-ui/session-fork-prompt.js +34 -0
  75. package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
  76. package/dist/{src/features → features}/owned-ui/settings-app.js +105 -56
  77. package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
  78. package/dist/features/prompt-history/image-sidecar.js +130 -0
  79. package/dist/features/prompt-history/index.d.ts +4 -0
  80. package/dist/features/prompt-history/index.js +3 -0
  81. package/dist/features/prompt-history/paths.d.ts +5 -0
  82. package/dist/features/prompt-history/paths.js +17 -0
  83. package/dist/features/prompt-history/service.d.ts +54 -0
  84. package/dist/features/prompt-history/service.js +425 -0
  85. package/dist/features/prompt-history/store.d.ts +16 -0
  86. package/dist/features/prompt-history/store.js +223 -0
  87. package/dist/features/prompt-history/worker.d.ts +9 -0
  88. package/dist/features/prompt-history/worker.js +45 -0
  89. package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
  90. package/dist/features/prompt-suggestions/diagnostics.js +82 -0
  91. package/dist/features/prompt-suggestions/index.d.ts +1 -0
  92. package/dist/features/prompt-suggestions/index.js +1 -0
  93. package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
  94. package/dist/{src/features → features}/workspace/reducer.d.ts +2 -1
  95. package/dist/{src/features → features}/workspace/reducer.js +2 -1
  96. package/dist/{src/features → features}/workspace/router.d.ts +2 -1
  97. package/dist/{src/features → features}/workspace/router.js +1 -0
  98. package/dist/{src/features → features}/workspace/store.d.ts +2 -1
  99. package/dist/{src/features → features}/workspace/store.js +1 -0
  100. package/dist/foundation/launch-context/index.d.ts +59 -0
  101. package/dist/foundation/launch-context/index.js +136 -0
  102. package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +2 -0
  103. package/dist/{src/foundation → foundation}/launch-guardian/main.js +23 -8
  104. package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +2 -0
  105. package/dist/{src/foundation → foundation}/lifecycle/index.js +2 -0
  106. package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +1 -1
  107. package/dist/{src/foundation → foundation}/lifecycle/model.js +1 -1
  108. package/dist/foundation/lifecycle/paths.d.ts +30 -0
  109. package/dist/{src/foundation → foundation}/lifecycle/paths.js +29 -1
  110. package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
  111. package/dist/foundation/lifecycle/session-selection.js +39 -0
  112. package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
  113. package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
  114. package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +2 -0
  115. package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +2 -0
  116. package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
  117. package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
  118. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
  119. package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
  120. package/dist/{src/foundation → foundation}/process-containment/index.d.ts +1 -0
  121. package/dist/{src/foundation → foundation}/process-containment/index.js +1 -0
  122. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +1 -0
  123. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +1 -0
  124. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +1 -0
  125. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +1 -0
  126. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +3 -1
  127. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +5 -2
  128. package/dist/{src/foundation → foundation}/protocol/client.d.ts +1 -0
  129. package/dist/{src/foundation → foundation}/protocol/client.js +1 -0
  130. package/dist/{src/foundation → foundation}/protocol/messages.d.ts +1 -0
  131. package/dist/{src/foundation → foundation}/protocol/messages.js +1 -0
  132. package/dist/foundation/release/bootstrap.d.ts +55 -0
  133. package/dist/{src/foundation → foundation}/release/bootstrap.js +219 -46
  134. package/dist/foundation/release/cohort-state.d.ts +157 -0
  135. package/dist/foundation/release/cohort-state.js +472 -0
  136. package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
  137. package/dist/foundation/release/dependency-certification-retention.js +88 -0
  138. package/dist/foundation/release/dependency-certification.d.ts +24 -0
  139. package/dist/foundation/release/dependency-certification.js +266 -0
  140. package/dist/foundation/release/dependency-layer.d.ts +81 -0
  141. package/dist/foundation/release/dependency-layer.js +466 -0
  142. package/dist/foundation/release/endpoints.d.ts +20 -0
  143. package/dist/foundation/release/endpoints.js +50 -0
  144. package/dist/foundation/release/immutable-platform.d.ts +6 -0
  145. package/dist/foundation/release/immutable-platform.js +13 -0
  146. package/dist/{src/foundation → foundation}/release/index.d.ts +6 -0
  147. package/dist/{src/foundation → foundation}/release/index.js +6 -0
  148. package/dist/foundation/release/release-gc.d.ts +71 -0
  149. package/dist/foundation/release/release-gc.js +764 -0
  150. package/dist/{src/foundation → foundation}/release/release-store.d.ts +9 -3
  151. package/dist/{src/foundation → foundation}/release/release-store.js +74 -14
  152. package/dist/{src/foundation → foundation}/release/release.d.ts +6 -1
  153. package/dist/{src/foundation → foundation}/release/release.js +15 -4
  154. package/dist/foundation/release/restart-certification.d.ts +68 -0
  155. package/dist/foundation/release/restart-certification.js +227 -0
  156. package/dist/foundation/release/update-launch.d.ts +6 -0
  157. package/dist/foundation/release/update-launch.js +17 -0
  158. package/dist/foundation/release/update-recovery.d.ts +76 -0
  159. package/dist/foundation/release/update-recovery.js +356 -0
  160. package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +11 -0
  161. package/dist/{src/foundation → foundation}/release/update-transaction.js +13 -1
  162. package/dist/{src/foundation → foundation}/release/update.d.ts +40 -4
  163. package/dist/{src/foundation → foundation}/release/update.js +196 -78
  164. package/dist/foundation/release/warmup.d.ts +3 -0
  165. package/dist/foundation/release/warmup.js +47 -0
  166. package/dist/foundation/startup/index.d.ts +1 -0
  167. package/dist/foundation/startup/index.js +1 -0
  168. package/dist/foundation/startup/startup-runtime.d.ts +36 -0
  169. package/dist/foundation/startup/startup-runtime.js +142 -0
  170. package/dist/{src/foundation → foundation}/storage/control-store.d.ts +2 -1
  171. package/dist/{src/foundation → foundation}/storage/control-store.js +39 -4
  172. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +2 -1
  173. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +2 -1
  174. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +2 -1
  175. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +2 -1
  176. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
  177. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
  178. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +2 -1
  179. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +2 -1
  180. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +2 -1
  181. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +2 -1
  182. package/dist/foundation/supervision/index.d.ts +3 -0
  183. package/dist/foundation/supervision/index.js +3 -0
  184. package/dist/foundation/supervision/main.d.ts +1 -0
  185. package/dist/foundation/supervision/main.js +84 -0
  186. package/dist/foundation/supervision/paths.d.ts +1 -0
  187. package/dist/foundation/supervision/paths.js +1 -0
  188. package/dist/foundation/supervision/server.d.ts +51 -0
  189. package/dist/{src/foundation → foundation}/supervision/server.js +142 -20
  190. package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
  191. package/dist/foundation/terminal-cleanup/fatal-exit.js +85 -0
  192. package/dist/foundation/terminal-cleanup/index.d.ts +2 -0
  193. package/dist/foundation/terminal-cleanup/index.js +2 -0
  194. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
  195. package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
  196. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
  197. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
  198. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
  199. package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
  200. package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
  201. package/dist/integrations/pi/components/history-editor-loader.js +5 -0
  202. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +2 -1
  203. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +2 -1
  204. package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
  205. package/dist/integrations/pi/components/owned-editor-ux.js +1093 -0
  206. package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
  207. package/dist/integrations/pi/components/path-word-ranges.js +37 -0
  208. package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
  209. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +1 -0
  210. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +1 -0
  211. package/dist/integrations/pi/components/shell-editor-autocomplete.js +297 -0
  212. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
  213. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +4 -4
  214. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +58 -23
  215. package/dist/integrations/pi/components/shell-presenters-info.d.ts +43 -0
  216. package/dist/integrations/pi/components/shell-presenters-info.js +114 -0
  217. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
  218. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +174 -170
  219. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +8 -4
  220. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +10 -6
  221. package/dist/integrations/pi/components/shell-shared-facade.d.ts +213 -0
  222. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +5 -2
  223. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +15 -0
  224. package/dist/integrations/pi/components/submitted-prompt-adapter.js +43 -0
  225. package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
  226. package/dist/integrations/pi/components/tool-image-presentation.js +86 -0
  227. package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
  228. package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
  229. package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
  230. package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
  231. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +11 -2
  232. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +41 -3
  233. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
  234. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +42 -0
  235. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +40 -0
  236. package/dist/integrations/pi/components/upstream/components/owned-editor.js +166 -0
  237. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +1 -1
  238. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +3 -1
  239. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +3 -2
  240. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +12 -7
  241. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +61 -0
  242. package/dist/integrations/pi/components/upstream/components/tool-execution.js +344 -0
  243. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +280 -0
  244. package/dist/integrations/pi/components/upstream/history/editor-core.js +2062 -0
  245. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +32 -0
  246. package/dist/integrations/pi/components/upstream/history/kill-ring.js +48 -0
  247. package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
  248. package/dist/integrations/pi/components/upstream/history/printable-key.js +40 -0
  249. package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +14 -0
  250. package/dist/integrations/pi/components/upstream/history/text-helpers.js +28 -0
  251. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +22 -0
  252. package/dist/integrations/pi/components/upstream/history/undo-stack.js +36 -0
  253. package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
  254. package/dist/integrations/pi/components/upstream/history/word-navigation.js +100 -0
  255. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +74 -6
  256. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +1340 -228
  257. package/dist/integrations/pi/engine/changelog.d.ts +2 -0
  258. package/dist/integrations/pi/engine/changelog.js +63 -0
  259. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +4 -2
  260. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +15 -5
  261. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  262. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  263. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +4 -0
  264. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +4 -0
  265. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +2 -1
  266. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +1 -0
  267. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
  268. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +32 -26
  269. package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
  270. package/dist/integrations/pi/engine/pending-delivery.js +158 -0
  271. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  272. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  273. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +2 -1
  274. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +1 -0
  275. package/dist/integrations/pi/engine/resources/changelog.json +12 -0
  276. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +19 -1
  277. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +56 -5
  278. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +4 -2
  279. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +19 -4
  280. package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
  281. package/dist/integrations/pi/engine/session-selection.js +90 -0
  282. package/dist/integrations/pi/engine/settings-effects.d.ts +66 -0
  283. package/dist/integrations/pi/engine/settings-effects.js +249 -0
  284. package/dist/integrations/pi/engine/settings-integration.d.ts +43 -0
  285. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +102 -108
  286. package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
  287. package/dist/integrations/pi/engine/tool-rendering.js +145 -0
  288. package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
  289. package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
  290. package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
  291. package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
  292. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +3 -2
  293. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +1 -0
  294. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +19 -2
  295. package/dist/integrations/pi/session-ui/clipboard-diagnostics.d.ts +16 -0
  296. package/dist/integrations/pi/session-ui/clipboard-diagnostics.js +65 -0
  297. package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
  298. package/dist/integrations/pi/session-ui/clipboard-image.js +38 -0
  299. package/dist/integrations/pi/session-ui/editor-hyperlink-budget.d.ts +9 -0
  300. package/dist/integrations/pi/session-ui/editor-hyperlink-budget.js +23 -0
  301. package/dist/integrations/pi/session-ui/image-preparation-client.d.ts +20 -0
  302. package/dist/integrations/pi/session-ui/image-preparation-client.js +145 -0
  303. package/dist/integrations/pi/session-ui/image-preparation.d.ts +18 -0
  304. package/dist/integrations/pi/session-ui/image-preparation.js +126 -0
  305. package/dist/integrations/pi/session-ui/image-source.d.ts +13 -0
  306. package/dist/integrations/pi/session-ui/image-source.js +171 -0
  307. package/dist/integrations/pi/session-ui/image-worker.d.ts +17 -0
  308. package/dist/integrations/pi/session-ui/image-worker.js +23 -0
  309. package/dist/integrations/pi/session-ui/index.d.ts +5 -0
  310. package/dist/integrations/pi/session-ui/index.js +5 -0
  311. package/dist/integrations/pi/session-ui/paste-executor.d.ts +10 -0
  312. package/dist/integrations/pi/session-ui/paste-executor.js +232 -0
  313. package/dist/integrations/pi/session-ui/paste-helper.d.ts +1 -0
  314. package/dist/integrations/pi/session-ui/paste-helper.js +173 -0
  315. package/dist/integrations/pi/session-ui/paste-preparation-client.d.ts +16 -0
  316. package/dist/integrations/pi/session-ui/paste-preparation-client.js +159 -0
  317. package/dist/integrations/pi/session-ui/paste-protocol.d.ts +78 -0
  318. package/dist/integrations/pi/session-ui/paste-protocol.js +18 -0
  319. package/dist/integrations/pi/session-ui/paste-text-preparation.d.ts +20 -0
  320. package/dist/integrations/pi/session-ui/paste-text-preparation.js +134 -0
  321. package/dist/integrations/pi/session-ui/paste-text-worker.d.ts +1 -0
  322. package/dist/integrations/pi/session-ui/paste-text-worker.js +12 -0
  323. package/dist/integrations/pi/session-ui/path-chip-presentation.d.ts +7 -0
  324. package/dist/integrations/pi/session-ui/path-chip-presentation.js +24 -0
  325. package/dist/integrations/pi/session-ui/prompt-chips.d.ts +72 -0
  326. package/dist/integrations/pi/session-ui/prompt-chips.js +503 -0
  327. package/dist/integrations/pi/session-ui/prompt-history-controller.d.ts +36 -0
  328. package/dist/integrations/pi/session-ui/prompt-history-controller.js +170 -0
  329. package/dist/integrations/pi/session-ui/prompt-suggestion-controller.d.ts +35 -0
  330. package/dist/integrations/pi/session-ui/prompt-suggestion-controller.js +207 -0
  331. package/dist/integrations/pi/session-ui/response-copy-coordinator.d.ts +27 -0
  332. package/dist/integrations/pi/session-ui/response-copy-coordinator.js +189 -0
  333. package/dist/integrations/pi/session-ui/response-copy-helper.d.ts +1 -0
  334. package/dist/integrations/pi/session-ui/response-copy-helper.js +122 -0
  335. package/dist/integrations/pi/session-ui/response-copy-protocol.d.ts +56 -0
  336. package/dist/integrations/pi/session-ui/response-copy-protocol.js +5 -0
  337. package/dist/integrations/pi/session-ui/response-copy-transport.d.ts +31 -0
  338. package/dist/integrations/pi/session-ui/response-copy-transport.js +187 -0
  339. package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
  340. package/dist/integrations/pi/session-ui/route-host.js +1 -0
  341. package/dist/integrations/pi/session-ui/session-shell-root.d.ts +221 -0
  342. package/dist/integrations/pi/session-ui/session-shell-root.js +1305 -0
  343. package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
  344. package/dist/integrations/pi/session-ui/session-shell.js +1792 -0
  345. package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +56 -0
  346. package/dist/integrations/pi/session-ui/session-viewport-controller.js +569 -0
  347. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.d.ts +29 -0
  348. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.js +79 -0
  349. package/dist/integrations/pi/session-ui/system-clipboard.d.ts +20 -0
  350. package/dist/integrations/pi/session-ui/system-clipboard.js +156 -0
  351. package/dist/integrations/pi/session-ui/text-paste.d.ts +5 -0
  352. package/dist/integrations/pi/session-ui/text-paste.js +16 -0
  353. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +10 -1
  354. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +255 -11
  355. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +32 -6
  356. package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
  357. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +81 -0
  358. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +424 -0
  359. package/dist/integrations/pi/tui-runtime/index.d.ts +7 -0
  360. package/dist/integrations/pi/tui-runtime/index.js +7 -0
  361. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  362. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  363. package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +13 -0
  364. package/dist/integrations/pi/tui-runtime/mouse-report-input.js +59 -0
  365. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
  366. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +159 -0
  367. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
  368. package/dist/native/darwin-arm64/manifest.json +4 -4
  369. package/dist/native/darwin-arm64/process-guardian +0 -0
  370. package/dist/native/linux-x64/manifest.json +3 -3
  371. package/dist/native/linux-x64/process-guardian +0 -0
  372. package/dist/native/win32-x64/manifest.json +3 -3
  373. package/dist/native/win32-x64/process-guardian.exe +0 -0
  374. package/dist/{src/product-identity.d.ts → product-identity.d.ts} +4 -4
  375. package/dist/{src/product-identity.js → product-identity.js} +7 -38
  376. package/dist/{src/product-identity.json → product-identity.json} +13 -27
  377. package/dist/runtime-payload-inventory.json +122333 -0
  378. package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +23 -1
  379. package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
  380. package/dist/{src/foundation/ui-apps → ui/apps}/host.js +14 -10
  381. package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +1 -0
  382. package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +1 -0
  383. package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +5 -3
  384. package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +1 -0
  385. package/dist/{src/foundation/ui-components → ui/components}/frame.js +1 -0
  386. package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +7 -0
  387. package/dist/{src/foundation/ui-components → ui/components}/index.js +7 -0
  388. package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +2 -8
  389. package/dist/{src/foundation/ui-components → ui/components}/line-input.js +7 -28
  390. package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -6
  391. package/dist/{src/foundation/ui-components → ui/components}/list-view.js +14 -7
  392. package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +10 -0
  393. package/dist/{src/foundation/ui-components → ui/components}/mouse.js +24 -0
  394. package/dist/ui/components/progress-status.d.ts +2 -0
  395. package/dist/ui/components/progress-status.js +4 -0
  396. package/dist/ui/components/prompt-input.d.ts +32 -0
  397. package/dist/ui/components/prompt-input.js +54 -0
  398. package/dist/ui/components/prompt-row.d.ts +14 -0
  399. package/dist/ui/components/prompt-row.js +20 -0
  400. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +26 -0
  401. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +35 -0
  402. package/dist/ui/components/selection-copy.d.ts +24 -0
  403. package/dist/ui/components/selection-copy.js +39 -0
  404. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +1 -0
  405. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +1 -0
  406. package/dist/ui/components/spans.d.ts +28 -0
  407. package/dist/ui/components/spans.js +266 -0
  408. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  409. package/dist/ui/components/submitted-prompt.js +50 -0
  410. package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -5
  411. package/dist/{src/foundation/ui-components → ui/components}/surface.js +1 -5
  412. package/dist/ui/components/text-selection.d.ts +62 -0
  413. package/dist/ui/components/text-selection.js +210 -0
  414. package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
  415. package/dist/{src/foundation/ui-components → ui/components}/text.js +67 -5
  416. package/dist/ui/components/transcript-viewport.d.ts +173 -0
  417. package/dist/ui/components/transcript-viewport.js +753 -0
  418. package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
  419. package/dist/ui/components/visible-hyperlinks.js +97 -0
  420. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
  421. package/dist/ui/settings/declarations.js +94 -0
  422. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +1 -1
  423. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +28 -2
  424. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +6 -19
  425. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +41 -22
  426. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
  427. package/dist/ui/settings/session.js +164 -0
  428. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +1 -0
  429. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +2 -1
  430. package/docs/architecture/boundaries.md +14 -10
  431. package/docs/architecture/code-documentation.md +77 -0
  432. package/docs/architecture/history-editor-provenance.md +100 -0
  433. package/docs/architecture/internal-naming.md +91 -0
  434. package/docs/architecture/process-guardian-provenance.md +3 -1
  435. package/docs/architecture/project-structure.md +69 -30
  436. package/docs/architecture/prompt-suggestions.md +68 -0
  437. package/docs/architecture/resource-and-data-policy.md +28 -2
  438. package/docs/architecture/response-copy-delivery.md +83 -0
  439. package/docs/architecture/tool-image-presentation.md +62 -0
  440. package/docs/architecture/toolchain.md +24 -10
  441. package/docs/architecture/ui-reference-provenance.md +59 -5
  442. package/docs/ci-release-runbook.md +236 -79
  443. package/docs/features/launch-profiles.md +24 -17
  444. package/docs/features/modal-content-interaction.md +37 -0
  445. package/docs/features/prompt-history.md +149 -0
  446. package/docs/manual-code-streaming-cleanup.md +88 -0
  447. package/docs/manual-ghost-link-baseline.md +89 -0
  448. package/docs/manual-launch-instance-acceptance.md +12 -35
  449. package/docs/manual-owned-ui-checkpoint.md +78 -0
  450. package/docs/manual-pi-boundary-candidate.md +4 -5
  451. package/docs/manual-terminal-colour-check.md +4 -3
  452. package/docs/openspec-archive-automation.md +124 -0
  453. package/docs/repository-governance-live-acceptance.md +77 -0
  454. package/package.json +45 -28
  455. package/dist/src/cli/capabilities.d.ts +0 -15
  456. package/dist/src/cli/dispatch.js +0 -142
  457. package/dist/src/cli/version-stats.js +0 -72
  458. package/dist/src/composition/index.d.ts +0 -48
  459. package/dist/src/composition/index.js +0 -258
  460. package/dist/src/features/launch/intent.d.ts +0 -7
  461. package/dist/src/features/launch/intent.js +0 -4
  462. package/dist/src/features/launch/profiles.d.ts +0 -12
  463. package/dist/src/features/launch/profiles.js +0 -26
  464. package/dist/src/features/owned-ui/run.js +0 -15
  465. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  466. package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
  467. package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
  468. package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
  469. package/dist/src/foundation/owned-ui-settings/session.js +0 -145
  470. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
  471. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  472. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
  473. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
  474. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
  475. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
  476. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  477. package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
  478. package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
  479. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  480. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
  481. package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
  482. package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
  483. package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
  484. package/dist/src/foundation/release/bootstrap.d.ts +0 -29
  485. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  486. package/dist/src/foundation/release/cohort-state.js +0 -202
  487. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  488. package/dist/src/foundation/release/release-gc.js +0 -16
  489. package/dist/src/foundation/supervision/index.d.ts +0 -3
  490. package/dist/src/foundation/supervision/index.js +0 -3
  491. package/dist/src/foundation/supervision/main.d.ts +0 -1
  492. package/dist/src/foundation/supervision/main.js +0 -41
  493. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  494. package/dist/src/foundation/supervision/paths.js +0 -1
  495. package/dist/src/foundation/supervision/server.d.ts +0 -22
  496. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  497. package/dist/src/foundation/ui-components/spans.js +0 -59
  498. package/docs/manual-transparent-checkpoint.md +0 -53
  499. /package/dist/{src/cli → cli}/index.d.ts +0 -0
  500. /package/dist/{src/cli → cli}/index.js +0 -0
  501. /package/dist/{src/cli → cli}/version.d.ts +0 -0
  502. /package/dist/{src/cli → cli}/version.js +0 -0
  503. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  504. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  505. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
  506. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
  507. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
  508. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  509. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  510. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  511. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  512. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
  513. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  514. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  515. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  516. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  517. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
  518. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  519. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  520. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  521. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
  522. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
  523. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
  524. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
  525. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
  526. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
  527. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  528. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  529. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  530. /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
  531. /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
  532. /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
  533. /package/dist/{src/features → features}/workspace/index.js +0 -0
  534. /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
  535. /package/dist/{src/features → features}/workspace/presentation.js +0 -0
  536. /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
  537. /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
  538. /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
  539. /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
  540. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  541. /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
  542. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  543. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  544. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
  545. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
  546. /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
  547. /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
  548. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
  549. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
  550. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  551. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  552. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  553. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  554. /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
  555. /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
  556. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  557. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  558. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  559. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  560. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  561. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  562. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  563. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  564. /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
  565. /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
  566. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
  567. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
  568. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
  569. /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → integrations/pi/components/editor-interaction.js} +0 -0
  570. /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → integrations/pi/components/prompt-input-port.js} +0 -0
  571. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
  572. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
  573. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  574. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
  575. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  576. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  577. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
  578. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  579. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
  580. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
  581. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
  582. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
  583. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
  584. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
  585. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
  586. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
  587. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
  588. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
  589. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
  590. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  591. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
  592. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  593. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
  594. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
  595. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
  596. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
  597. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
  598. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
  599. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
  600. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
  601. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
  602. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
  603. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
  604. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  605. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
  606. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
  607. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  608. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
  609. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
  610. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
  611. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
  612. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
  613. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  614. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  615. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
  616. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
  617. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
  618. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
  619. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  620. /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
  621. /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
  622. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  623. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  624. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  625. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  626. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  627. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  628. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  629. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  630. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  631. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  632. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  633. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  634. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  635. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  636. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  637. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  638. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  639. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
  640. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
  641. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  642. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
@@ -0,0 +1,466 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { chmod, lstat, mkdir, readFile, realpath, rename, rm, writeFile } from "node:fs/promises";
3
+ import { dirname, posix, relative, resolve, sep } from "node:path";
4
+ import { mapWithConcurrency } from "./concurrency.js";
5
+ import { assertImmutableFileMode } from "./immutable-platform.js";
6
+ import { readDependencyCertification, writeDependencyCertification as writeLayerCertification } from "./dependency-certification.js";
7
+ export { dependencyLayerCertificationPath, legacyDependencyLayerCertificationPath } from "./dependency-certification.js";
8
+ import { digestManifestFiles, releaseFileIdentity, resolveWithin } from "./release.js";
9
+ import { PRODUCT_IDENTITY } from "../../product-identity.js";
10
+ const LAYER_IO_CONCURRENCY = 32;
11
+ export const DEPENDENCY_LAYER_SCHEMA = PRODUCT_IDENTITY.evidence.dependencyLayerSchema;
12
+ export const DEPENDENCY_LAYER_MANIFEST = "dependency-layer-manifest.json";
13
+ export const RUNTIME_PAYLOAD_INVENTORY = "dist/runtime-payload-inventory.json";
14
+ /** Consume topology-independent publication classifications, retaining unknown installed content. */
15
+ export async function selectPublishedDependencyRuntimePayload(packageRoot, paths) {
16
+ const inventoryPath = resolve(packageRoot, RUNTIME_PAYLOAD_INVENTORY);
17
+ const published = await readFile(inventoryPath, "utf8").then(source => JSON.parse(source)).catch(() => null);
18
+ if (published === null)
19
+ return await selectDependencyRuntimePayload(packageRoot, paths);
20
+ if (published.schema !== PRODUCT_IDENTITY.evidence.runtimePayloadSchema || !Array.isArray(published.paths)
21
+ || !Array.isArray(published.entryPoints) || !Array.isArray(published.declaredAssets) || !Array.isArray(published.classifications)
22
+ || !published.inventory || published.inventory.schema !== PRODUCT_IDENTITY.evidence.runtimePayloadSchema
23
+ || published.classifications.some(classification => !validPublishedClassification(classification))) {
24
+ throw new Error("published runtime payload inventory is invalid");
25
+ }
26
+ const classificationByKey = new Map();
27
+ for (const classification of published.classifications) {
28
+ const key = classificationKey(classification.packageName, classification.packageVersion, classification.packagePath);
29
+ const existing = classificationByKey.get(key);
30
+ if (existing && (existing.disposition !== classification.disposition || existing.reason !== classification.reason)) {
31
+ throw new Error("published runtime payload inventory contains conflicting classifications");
32
+ }
33
+ classificationByKey.set(key, classification);
34
+ }
35
+ const descriptors = await dependencyPackageDescriptors(packageRoot, paths);
36
+ const selected = [];
37
+ const exclusions = [];
38
+ let includedBytes = 0;
39
+ let excludedBytes = 0;
40
+ let uncertaintyRetainedFiles = 0;
41
+ await mapWithConcurrency([...paths].sort(), LAYER_IO_CONCURRENCY, async (path) => {
42
+ const descriptor = descriptorForPath(path, descriptors);
43
+ const packagePath = descriptor === null ? null : path.slice(descriptor.root.length + 1);
44
+ const classification = descriptor === null || packagePath === null
45
+ ? undefined
46
+ : classificationByKey.get(classificationKey(descriptor.name, descriptor.version, packagePath));
47
+ const bytes = (await lstat(resolveWithin(packageRoot, path))).size;
48
+ const intrinsicExclusion = /\.d\.(?:ts|mts|cts)$/.test(path) ? "type-declaration"
49
+ : /\.map$/.test(path) ? "source-map"
50
+ : null;
51
+ if (classification?.disposition === "exclude" || intrinsicExclusion !== null) {
52
+ exclusions.push({ path, reason: classification?.disposition === "exclude" ? classification.reason : intrinsicExclusion });
53
+ excludedBytes += bytes;
54
+ return;
55
+ }
56
+ selected.push(path);
57
+ includedBytes += bytes;
58
+ if (classification === undefined || !isKnownRuntimePath(path))
59
+ uncertaintyRetainedFiles += 1;
60
+ });
61
+ selected.sort();
62
+ exclusions.sort((left, right) => left.path.localeCompare(right.path));
63
+ return {
64
+ paths: selected,
65
+ inventory: {
66
+ schema: PRODUCT_IDENTITY.evidence.runtimePayloadSchema,
67
+ includedFiles: selected.length,
68
+ includedBytes,
69
+ excludedFiles: exclusions.length,
70
+ excludedBytes,
71
+ uncertaintyRetainedFiles,
72
+ exclusions,
73
+ },
74
+ };
75
+ }
76
+ /** Generate publication evidence from literal module reachability and declared runtime assets. */
77
+ export async function generateDependencyRuntimePayload(packageRoot, allPaths, productPaths) {
78
+ const available = new Set(allPaths);
79
+ const selected = new Set();
80
+ const queue = productPaths.filter(isJavaScriptModule);
81
+ for (const manifestPath of allPaths.filter(path => path.startsWith("node_modules/") && path.endsWith("/package.json"))) {
82
+ try {
83
+ const manifest = JSON.parse(await readFile(resolveWithin(packageRoot, manifestPath), "utf8"));
84
+ const packagePath = manifestPath.slice(0, -"/package.json".length);
85
+ const target = exportedTarget(manifest.exports, "")
86
+ ?? (typeof manifest.module === "string" ? manifest.module : typeof manifest.main === "string" ? manifest.main : "index.js");
87
+ const entry = availableModule(relativePath(packagePath, target), available);
88
+ if (entry !== null && !selected.has(entry)) {
89
+ selected.add(entry);
90
+ if (isJavaScriptModule(entry))
91
+ queue.push(entry);
92
+ }
93
+ }
94
+ catch { }
95
+ }
96
+ const visited = new Set();
97
+ while (queue.length > 0) {
98
+ const importer = queue.shift();
99
+ if (visited.has(importer))
100
+ continue;
101
+ visited.add(importer);
102
+ const source = await readFile(resolveWithin(packageRoot, importer), "utf8");
103
+ const specifiers = [...source.matchAll(/(?:\bimport\s*(?:[^"'`]*?\sfrom\s*)?|\bexport\s+[^"'`]*?\sfrom\s*|\bimport\s*\(|\brequire\s*\()\s*["'`]([^"'`]+)["'`]/g)]
104
+ .map(match => match[1])
105
+ .filter(specifier => !specifier.startsWith("node:"));
106
+ for (const specifier of specifiers) {
107
+ const resolved = await resolvePublishedSpecifier(packageRoot, importer, specifier, available);
108
+ if (resolved === null || !resolved.startsWith("node_modules/"))
109
+ continue;
110
+ if (!selected.has(resolved)) {
111
+ selected.add(resolved);
112
+ if (isJavaScriptModule(resolved))
113
+ queue.push(resolved);
114
+ }
115
+ }
116
+ if (importer.startsWith("node_modules/") && /\b(?:import|require)\s*\(\s*(?!["'`])/.test(source)) {
117
+ const prefix = dependencyPackagePrefix(importer);
118
+ for (const path of allPaths)
119
+ if (path.startsWith(`${prefix}/`))
120
+ selected.add(path);
121
+ }
122
+ }
123
+ for (const path of allPaths) {
124
+ if (!path.startsWith("node_modules/"))
125
+ continue;
126
+ if (path.endsWith("/package.json") || /(?:^|\/)LICENSE(?:\.|$)/i.test(path)
127
+ || /\.(?:json|node|wasm|css|html|png|jpg|jpeg|gif|svg|md)$/.test(path))
128
+ selected.add(path);
129
+ }
130
+ const conservative = await selectDependencyRuntimePayload(packageRoot, allPaths.filter(path => path.startsWith("node_modules/")));
131
+ const paths = conservative.paths.filter(path => selected.has(path)).sort();
132
+ const exclusions = [];
133
+ let includedBytes = 0;
134
+ let excludedBytes = 0;
135
+ let uncertaintyRetainedFiles = 0;
136
+ const conservativeReasons = new Map(conservative.inventory.exclusions.map(item => [item.path, item.reason]));
137
+ for (const path of allPaths.filter(path => path.startsWith("node_modules/")).sort()) {
138
+ const bytes = (await lstat(resolveWithin(packageRoot, path))).size;
139
+ if (paths.includes(path)) {
140
+ includedBytes += bytes;
141
+ if (!isJavaScriptModule(path) && !/\.(?:json|node|wasm|css|html|png|jpg|jpeg|gif|svg)$/.test(path))
142
+ uncertaintyRetainedFiles += 1;
143
+ }
144
+ else {
145
+ excludedBytes += bytes;
146
+ exclusions.push({ path, reason: conservativeReasons.get(path) ?? "unreachable-development" });
147
+ }
148
+ }
149
+ const inventory = {
150
+ schema: PRODUCT_IDENTITY.evidence.runtimePayloadSchema,
151
+ includedFiles: paths.length,
152
+ includedBytes,
153
+ excludedFiles: exclusions.length,
154
+ excludedBytes,
155
+ uncertaintyRetainedFiles,
156
+ exclusions,
157
+ };
158
+ return {
159
+ paths,
160
+ inventory,
161
+ classifications: await createPublishedClassifications(packageRoot, allPaths, new Set(paths), new Map(exclusions.map(item => [item.path, item.reason]))),
162
+ };
163
+ }
164
+ /** Conservatively omit only files Node never executes; uncertain assets remain selected. */
165
+ export async function selectDependencyRuntimePayload(packageRoot, paths) {
166
+ const included = [];
167
+ const exclusions = [];
168
+ let includedBytes = 0;
169
+ let excludedBytes = 0;
170
+ let uncertaintyRetainedFiles = 0;
171
+ await mapWithConcurrency([...paths].sort(), LAYER_IO_CONCURRENCY, async (path) => {
172
+ const metadata = await lstat(resolveWithin(packageRoot, path));
173
+ const reason = /\.d\.(?:ts|mts|cts)$/.test(path) ? "type-declaration"
174
+ : /\.map$/.test(path) ? "source-map"
175
+ : null;
176
+ if (reason !== null) {
177
+ exclusions.push({ path, reason });
178
+ excludedBytes += metadata.size;
179
+ return;
180
+ }
181
+ included.push(path);
182
+ includedBytes += metadata.size;
183
+ if (!/\.(?:js|mjs|cjs|json|node|wasm|css|html|png|jpg|jpeg|gif|svg)$/.test(path) && !/(?:^|\/)LICENSE(?:\.|$)/i.test(path)) {
184
+ uncertaintyRetainedFiles += 1;
185
+ }
186
+ });
187
+ exclusions.sort((left, right) => left.path.localeCompare(right.path));
188
+ included.sort();
189
+ return {
190
+ paths: included,
191
+ inventory: {
192
+ schema: PRODUCT_IDENTITY.evidence.runtimePayloadSchema,
193
+ includedFiles: included.length,
194
+ includedBytes,
195
+ excludedFiles: exclusions.length,
196
+ excludedBytes,
197
+ uncertaintyRetainedFiles,
198
+ exclusions,
199
+ },
200
+ };
201
+ }
202
+ /** Materialize or reuse an exact immutable dependency layer after one source-content pass. */
203
+ export async function materializeDependencyLayer(packageRoot, dataDir, paths, options) {
204
+ if (paths.length === 0)
205
+ return null;
206
+ const sourceRoot = await realpath(packageRoot);
207
+ const selected = [...paths].sort();
208
+ const content = await mapWithConcurrency(selected, LAYER_IO_CONCURRENCY, async (path) => {
209
+ const source = resolveWithin(sourceRoot, path);
210
+ const metadata = await lstat(source);
211
+ if (!metadata.isFile() || metadata.isSymbolicLink())
212
+ throw new Error(`dependency-layer input is not a regular file: ${path}`);
213
+ const cached = options.cachedFiles?.get(path);
214
+ const bytes = cached ?? await readFile(source);
215
+ if (!cached)
216
+ options.onOperation?.({ operation: "source-read", path, bytes: bytes.length });
217
+ return { path, bytes, mode: (metadata.mode & 0o111) !== 0 ? 0o500 : 0o400, identity: releaseFileIdentity(path, bytes, (metadata.mode & 0o111) !== 0) };
218
+ });
219
+ const files = content.map(item => item.identity);
220
+ const contentDigest = digestManifestFiles(files);
221
+ const identity = {
222
+ schema: DEPENDENCY_LAYER_SCHEMA,
223
+ layerId: `dependencies-${contentDigest.slice(0, 32)}`,
224
+ contentDigest,
225
+ files,
226
+ inventory: options.inventory,
227
+ };
228
+ const layersRoot = resolve(dataDir, "dependency-layers");
229
+ await mkdir(layersRoot, { recursive: true, mode: 0o700 });
230
+ const layerRoot = resolveWithin(layersRoot, identity.layerId);
231
+ if (await lstat(layerRoot).catch(() => null)) {
232
+ const reused = await reuseDependencyLayer(dataDir, identity);
233
+ for (const file of reused.files)
234
+ options.onOperation?.({ operation: "layer-reuse", path: file.path, bytes: file.bytes });
235
+ return { ...reused, reused: true };
236
+ }
237
+ const candidate = resolveWithin(layersRoot, `.candidate-${randomUUID()}`);
238
+ await mkdir(candidate, { mode: 0o700 });
239
+ try {
240
+ const directories = [...new Set(content.map(item => dirname(resolveWithin(candidate, item.path))))];
241
+ await mapWithConcurrency(directories, LAYER_IO_CONCURRENCY, async (directory) => await mkdir(directory, { recursive: true, mode: 0o700 }));
242
+ await mapWithConcurrency(content, LAYER_IO_CONCURRENCY, async (item) => {
243
+ const destination = resolveWithin(candidate, item.path);
244
+ if (options.writeCandidateFile)
245
+ await options.writeCandidateFile(destination, item.bytes, item.mode);
246
+ else {
247
+ await writeFile(destination, item.bytes, { flag: "wx", mode: item.mode });
248
+ await chmod(destination, item.mode);
249
+ }
250
+ options.onOperation?.({ operation: "layer-write", path: item.path, bytes: item.bytes.length });
251
+ });
252
+ await writeFile(resolve(candidate, DEPENDENCY_LAYER_MANIFEST), JSON.stringify(identity, null, 2), { flag: "wx", mode: 0o400 });
253
+ try {
254
+ await rename(candidate, layerRoot);
255
+ }
256
+ catch (error) {
257
+ if (!await lstat(layerRoot).catch(() => null))
258
+ throw error;
259
+ await rm(candidate, { recursive: true, force: true });
260
+ const winner = await reuseDependencyLayer(dataDir, identity);
261
+ for (const file of winner.files)
262
+ options.onOperation?.({ operation: "layer-reuse", path: file.path, bytes: file.bytes });
263
+ return { ...winner, reused: true };
264
+ }
265
+ await writeLayerCertification(dataDir, identity);
266
+ return { ...identity, layerRoot: await realpath(layerRoot), reused: false };
267
+ }
268
+ catch (error) {
269
+ await rm(candidate, { recursive: true, force: true });
270
+ throw error;
271
+ }
272
+ }
273
+ /** Read trusted layer certification and canonical metadata without rereading every payload byte. */
274
+ export async function readCertifiedDependencyLayer(dataDir, layerId, expected, options = {}) {
275
+ const layersRoot = await realpath(resolve(dataDir, "dependency-layers"));
276
+ const layerRoot = await realpath(resolveWithin(layersRoot, layerId));
277
+ assertDirectChild(layersRoot, layerRoot);
278
+ const metadata = await lstat(resolve(layersRoot, layerId));
279
+ if (!metadata.isDirectory() || metadata.isSymbolicLink())
280
+ throw new Error(`dependency layer is not a managed non-link directory: ${layerId}`);
281
+ const manifest = JSON.parse(await readFile(resolve(layerRoot, DEPENDENCY_LAYER_MANIFEST), "utf8"));
282
+ validateLayerManifest(manifest);
283
+ if (expected && (expected.layerId !== manifest.layerId || expected.contentDigest !== manifest.contentDigest)) {
284
+ throw new Error(`dependency layer identity mismatch: ${layerId}`);
285
+ }
286
+ if (manifest.layerId !== layerId)
287
+ throw new Error(`dependency layer identity mismatch: ${layerId}`);
288
+ await readDependencyCertification(dataDir, manifest, options);
289
+ return { ...manifest, layerRoot };
290
+ }
291
+ /** Fully verify a layer when certification is absent or explicit tamper evidence is required. */
292
+ export async function verifyDependencyLayer(dataDir, reference, onOperation) {
293
+ const layersRoot = await realpath(resolve(dataDir, "dependency-layers"));
294
+ const layerRoot = await realpath(resolveWithin(layersRoot, reference.layerId));
295
+ assertDirectChild(layersRoot, layerRoot);
296
+ const manifest = JSON.parse(await readFile(resolve(layerRoot, DEPENDENCY_LAYER_MANIFEST), "utf8"));
297
+ validateLayerManifest(manifest);
298
+ if (manifest.layerId !== reference.layerId || manifest.contentDigest !== reference.contentDigest)
299
+ throw new Error(`dependency layer reference mismatch: ${reference.layerId}`);
300
+ await mapWithConcurrency(manifest.files, LAYER_IO_CONCURRENCY, async (file) => {
301
+ const path = resolveWithin(layerRoot, file.path);
302
+ const metadata = await lstat(path);
303
+ if (!metadata.isFile() || metadata.isSymbolicLink() || metadata.size !== file.bytes)
304
+ throw new Error(`dependency layer file mismatch: ${file.path}`);
305
+ assertImmutableFileMode(metadata, path);
306
+ const bytes = await readFile(path);
307
+ onOperation?.({ operation: "verification-read", path: file.path, bytes: bytes.length });
308
+ const actual = releaseFileIdentity(file.path, bytes, file.executable);
309
+ if (actual.sha256 !== file.sha256)
310
+ throw new Error(`dependency layer file digest mismatch: ${file.path}`);
311
+ });
312
+ if (digestManifestFiles(manifest.files) !== manifest.contentDigest)
313
+ throw new Error(`dependency layer content digest mismatch: ${manifest.layerId}`);
314
+ await writeLayerCertification(dataDir, manifest);
315
+ return { ...manifest, layerRoot };
316
+ }
317
+ export function dependencyReference(layer) {
318
+ return { layerId: layer.layerId, contentDigest: layer.contentDigest, binding: "node_modules" };
319
+ }
320
+ async function reuseDependencyLayer(dataDir, identity) {
321
+ try {
322
+ return await readCertifiedDependencyLayer(dataDir, identity.layerId, identity);
323
+ }
324
+ catch (error) {
325
+ const verified = await verifyDependencyLayer(dataDir, dependencyReference({ ...identity, layerRoot: resolve(dataDir, "dependency-layers", identity.layerId), reused: true }));
326
+ if (verified.layerId !== identity.layerId || verified.contentDigest !== identity.contentDigest)
327
+ throw error;
328
+ return verified;
329
+ }
330
+ }
331
+ function validateLayerManifest(value) {
332
+ if (value.schema !== DEPENDENCY_LAYER_SCHEMA || !/^dependencies-[a-f0-9]{32}$/.test(value.layerId)
333
+ || !/^[a-f0-9]{64}$/.test(value.contentDigest) || !Array.isArray(value.files) || value.files.length === 0
334
+ || value.files.some(file => !file.path.startsWith("node_modules/") || file.path.includes("..") || !/^[a-f0-9]{64}$/.test(file.sha256))) {
335
+ throw new Error("dependency layer manifest is invalid");
336
+ }
337
+ if (digestManifestFiles(value.files) !== value.contentDigest || value.layerId !== `dependencies-${value.contentDigest.slice(0, 32)}`) {
338
+ throw new Error(`dependency layer manifest identity is invalid: ${value.layerId}`);
339
+ }
340
+ }
341
+ async function resolvePublishedSpecifier(packageRoot, importer, specifier, available) {
342
+ if (specifier.startsWith("."))
343
+ return availableModule(relativePath(dirname(importer), specifier), available);
344
+ if (specifier.startsWith("/") || specifier.startsWith("#"))
345
+ return null;
346
+ const parts = specifier.split("/");
347
+ const packageName = parts[0].startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
348
+ const subpath = parts.slice(packageName.startsWith("@") ? 2 : 1).join("/");
349
+ const suffix = `node_modules/${packageName}/package.json`;
350
+ const manifests = [...available].filter(path => path.endsWith(suffix));
351
+ manifests.sort((left, right) => commonPrefixLength(importer, right) - commonPrefixLength(importer, left));
352
+ for (const manifestPath of manifests) {
353
+ try {
354
+ const manifest = JSON.parse(await readFile(resolveWithin(packageRoot, manifestPath), "utf8"));
355
+ const packagePath = manifestPath.slice(0, -"/package.json".length);
356
+ const target = exportedTarget(manifest.exports, subpath) ?? (subpath.length > 0 ? subpath
357
+ : typeof manifest.module === "string" ? manifest.module
358
+ : typeof manifest.main === "string" ? manifest.main
359
+ : "index.js");
360
+ const resolved = availableModule(relativePath(packagePath, target), available);
361
+ if (resolved !== null)
362
+ return resolved;
363
+ }
364
+ catch { }
365
+ }
366
+ return null;
367
+ }
368
+ function exportedTarget(exportsValue, subpath) {
369
+ const select = (value) => {
370
+ if (typeof value === "string")
371
+ return value;
372
+ if (!value || typeof value !== "object" || Array.isArray(value))
373
+ return null;
374
+ const record = value;
375
+ return select(record.import) ?? select(record.node) ?? select(record.default);
376
+ };
377
+ if (typeof exportsValue === "string")
378
+ return subpath.length === 0 ? exportsValue : null;
379
+ if (!exportsValue || typeof exportsValue !== "object" || Array.isArray(exportsValue))
380
+ return null;
381
+ const record = exportsValue;
382
+ return select(record[subpath.length === 0 ? "." : `./${subpath}`]) ?? (subpath.length === 0 ? select(exportsValue) : null);
383
+ }
384
+ function relativePath(root, target) {
385
+ return posix.normalize(posix.join(root.split(sep).join("/"), target));
386
+ }
387
+ function availableModule(path, available) {
388
+ const normalized = path.replace(/^\.\//, "");
389
+ for (const candidate of [normalized, `${normalized}.js`, `${normalized}.mjs`, `${normalized}.cjs`, `${normalized}.json`, `${normalized}/index.js`]) {
390
+ if (available.has(candidate))
391
+ return candidate;
392
+ }
393
+ return null;
394
+ }
395
+ function commonPrefixLength(left, right) {
396
+ const leftParts = left.split("/");
397
+ const rightParts = right.split("/");
398
+ let index = 0;
399
+ while (leftParts[index] === rightParts[index])
400
+ index += 1;
401
+ return index;
402
+ }
403
+ function dependencyPackagePrefix(path) {
404
+ const parts = path.split("/");
405
+ const nodeModules = parts.lastIndexOf("node_modules");
406
+ const packageParts = parts[nodeModules + 1]?.startsWith("@") ? 2 : 1;
407
+ return parts.slice(0, nodeModules + 1 + packageParts).join("/");
408
+ }
409
+ async function dependencyPackageDescriptors(packageRoot, paths) {
410
+ const descriptors = [];
411
+ for (const path of paths.filter(path => path.endsWith("/package.json")).sort()) {
412
+ try {
413
+ const manifest = JSON.parse(await readFile(resolveWithin(packageRoot, path), "utf8"));
414
+ if (typeof manifest.name !== "string" || manifest.name.length === 0 || typeof manifest.version !== "string" || manifest.version.length === 0)
415
+ continue;
416
+ descriptors.push({ root: path.slice(0, -"/package.json".length), name: manifest.name, version: manifest.version });
417
+ }
418
+ catch { }
419
+ }
420
+ return descriptors.sort((left, right) => right.root.length - left.root.length || left.root.localeCompare(right.root));
421
+ }
422
+ function descriptorForPath(path, descriptors) {
423
+ return descriptors.find(descriptor => path.startsWith(`${descriptor.root}/`)) ?? null;
424
+ }
425
+ async function createPublishedClassifications(packageRoot, paths, included, exclusionReasons) {
426
+ const descriptors = await dependencyPackageDescriptors(packageRoot, paths);
427
+ const classifications = new Map();
428
+ for (const path of paths.filter(path => path.startsWith("node_modules/")).sort()) {
429
+ const descriptor = descriptorForPath(path, descriptors);
430
+ if (descriptor === null)
431
+ continue;
432
+ const packagePath = path.slice(descriptor.root.length + 1);
433
+ const classification = included.has(path)
434
+ ? { packageName: descriptor.name, packageVersion: descriptor.version, packagePath, disposition: "include" }
435
+ : { packageName: descriptor.name, packageVersion: descriptor.version, packagePath, disposition: "exclude", reason: exclusionReasons.get(path) ?? "unreachable-development" };
436
+ const key = classificationKey(classification.packageName, classification.packageVersion, classification.packagePath);
437
+ const existing = classifications.get(key);
438
+ if (existing?.disposition === "include")
439
+ continue;
440
+ if (classification.disposition === "include" || existing === undefined)
441
+ classifications.set(key, classification);
442
+ }
443
+ return [...classifications.values()].sort((left, right) => classificationKey(left.packageName, left.packageVersion, left.packagePath)
444
+ .localeCompare(classificationKey(right.packageName, right.packageVersion, right.packagePath)));
445
+ }
446
+ function validPublishedClassification(value) {
447
+ const validReason = value.reason === "type-declaration" || value.reason === "source-map" || value.reason === "unreachable-development";
448
+ return typeof value.packageName === "string" && value.packageName.length > 0
449
+ && typeof value.packageVersion === "string" && value.packageVersion.length > 0
450
+ && typeof value.packagePath === "string" && value.packagePath.length > 0
451
+ && !value.packagePath.startsWith("/") && !value.packagePath.includes("\\")
452
+ && !value.packagePath.split("/").includes("..")
453
+ && (value.disposition === "include" ? value.reason === undefined : value.disposition === "exclude" && validReason);
454
+ }
455
+ function classificationKey(packageName, packageVersion, packagePath) {
456
+ return `${packageName}\0${packageVersion}\0${packagePath}`;
457
+ }
458
+ function isKnownRuntimePath(path) {
459
+ return /\.(?:js|mjs|cjs|json|node|wasm|css|html|png|jpg|jpeg|gif|svg)$/.test(path) || /(?:^|\/)LICENSE(?:\.|$)/i.test(path);
460
+ }
461
+ function isJavaScriptModule(path) { return /\.(?:js|mjs|cjs)$/.test(path); }
462
+ function assertDirectChild(parent, child) {
463
+ const path = relative(parent, child);
464
+ if (path.length === 0 || path === ".." || path.startsWith(`..${sep}`) || path.includes(sep))
465
+ throw new Error(`dependency layer escapes managed storage: ${child}`);
466
+ }
@@ -0,0 +1,20 @@
1
+ import type { SupervisorEndpointMetadata } from "./cohort-state.js";
2
+ import type { CohortEndpointPaths, ProductPaths } from "../lifecycle/index.js";
3
+ export interface RecordedEndpoint {
4
+ readonly metadata: SupervisorEndpointMetadata;
5
+ readonly paths: CohortEndpointPaths;
6
+ }
7
+ /**
8
+ * Every endpoint recorded under this runtime directory: one per cohort, plus the single
9
+ * endpoint published by releases that predate cohort-scoped identity. More than one can be
10
+ * live at a time, and each is validated on its own identity rather than by being the only one.
11
+ */
12
+ export declare function listRecordedEndpoints(paths: ProductPaths): Promise<readonly RecordedEndpoint[]>;
13
+ /**
14
+ * Removes the records of cohorts whose processes are gone. A record left by a cohort that
15
+ * exited without cleaning up is not evidence of ownership, and a later launch should not have
16
+ * to reason about it. Returns the release ids whose records were removed.
17
+ */
18
+ export declare function sweepDeadEndpoints(paths: ProductPaths): Promise<readonly string[]>;
19
+ /** The releases that an identity-verified live cohort runs from and that must be retained. */
20
+ export declare function liveReleaseIds(paths: ProductPaths): Promise<readonly string[]>;
@@ -0,0 +1,50 @@
1
+ import { readdir } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { probeOwnership, readEndpointMetadata, removeEndpointArtifacts } from "./bootstrap.js";
4
+ import { processIsAlive } from "./process-cleanup.js";
5
+ /**
6
+ * Every endpoint recorded under this runtime directory: one per cohort, plus the single
7
+ * endpoint published by releases that predate cohort-scoped identity. More than one can be
8
+ * live at a time, and each is validated on its own identity rather than by being the only one.
9
+ */
10
+ export async function listRecordedEndpoints(paths) {
11
+ const recorded = [];
12
+ const legacy = await readEndpointMetadata(paths.endpointMetadataPath);
13
+ if (legacy) {
14
+ recorded.push({ metadata: legacy, paths: { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath } });
15
+ }
16
+ const names = await readdir(paths.endpointsDir).catch(() => []);
17
+ for (const name of names) {
18
+ if (!name.endsWith(".json"))
19
+ continue;
20
+ const endpointMetadataPath = resolve(paths.endpointsDir, name);
21
+ const metadata = await readEndpointMetadata(endpointMetadataPath);
22
+ if (metadata)
23
+ recorded.push({ metadata, paths: { endpoint: metadata.endpoint, endpointMetadataPath } });
24
+ }
25
+ return recorded;
26
+ }
27
+ /**
28
+ * Removes the records of cohorts whose processes are gone. A record left by a cohort that
29
+ * exited without cleaning up is not evidence of ownership, and a later launch should not have
30
+ * to reason about it. Returns the release ids whose records were removed.
31
+ */
32
+ export async function sweepDeadEndpoints(paths) {
33
+ const swept = [];
34
+ for (const recorded of await listRecordedEndpoints(paths)) {
35
+ if (processIsAlive(recorded.metadata.pid))
36
+ continue;
37
+ await removeEndpointArtifacts(recorded.paths.endpointMetadataPath, recorded.paths.endpoint);
38
+ swept.push(recorded.metadata.releaseId);
39
+ }
40
+ return swept;
41
+ }
42
+ /** The releases that an identity-verified live cohort runs from and that must be retained. */
43
+ export async function liveReleaseIds(paths) {
44
+ const recorded = await listRecordedEndpoints(paths);
45
+ const ownership = await Promise.all(recorded.map(async (endpoint) => ({
46
+ releaseId: endpoint.metadata.releaseId,
47
+ probe: await probeOwnership(endpoint.metadata),
48
+ })));
49
+ return [...new Set(ownership.filter(item => item.probe === "live-verified").map(item => item.releaseId))].sort();
50
+ }
@@ -0,0 +1,6 @@
1
+ import type { Stats } from "node:fs";
2
+ export type ImmutablePlatformPolicy = "windows-readonly-content-v1" | "posix-readonly-content-v1";
3
+ /** Name the platform protection established while complete payload verification owns every file. */
4
+ export declare function immutablePlatformPolicy(platform?: NodeJS.Platform): ImmutablePlatformPolicy | null;
5
+ /** Refuse certification when a payload file is writable after immutable materialization. */
6
+ export declare function assertImmutableFileMode(metadata: Pick<Stats, "mode">, path: string): void;
@@ -0,0 +1,13 @@
1
+ /** Name the platform protection established while complete payload verification owns every file. */
2
+ export function immutablePlatformPolicy(platform = process.platform) {
3
+ if (platform === "win32")
4
+ return "windows-readonly-content-v1";
5
+ if (platform === "linux" || platform === "darwin")
6
+ return "posix-readonly-content-v1";
7
+ return null;
8
+ }
9
+ /** Refuse certification when a payload file is writable after immutable materialization. */
10
+ export function assertImmutableFileMode(metadata, path) {
11
+ if ((metadata.mode & 0o222) !== 0)
12
+ throw new Error(`immutable payload file is writable: ${path}`);
13
+ }
@@ -1,10 +1,16 @@
1
1
  export * from "./bootstrap.js";
2
2
  export * from "./cohort-selection.js";
3
3
  export * from "./cohort-state.js";
4
+ export * from "./dependency-layer.js";
5
+ export * from "./endpoints.js";
4
6
  export * from "./process-cleanup.js";
5
7
  export * from "./release.js";
6
8
  export * from "./release-gc.js";
7
9
  export * from "./release-store.js";
10
+ export * from "./restart-certification.js";
8
11
  export * from "./stable-release.js";
9
12
  export * from "./update.js";
13
+ export * from "./update-launch.js";
14
+ export * from "./update-recovery.js";
10
15
  export * from "./update-transaction.js";
16
+ export * from "./warmup.js";
@@ -1,10 +1,16 @@
1
1
  export * from "./bootstrap.js";
2
2
  export * from "./cohort-selection.js";
3
3
  export * from "./cohort-state.js";
4
+ export * from "./dependency-layer.js";
5
+ export * from "./endpoints.js";
4
6
  export * from "./process-cleanup.js";
5
7
  export * from "./release.js";
6
8
  export * from "./release-gc.js";
7
9
  export * from "./release-store.js";
10
+ export * from "./restart-certification.js";
8
11
  export * from "./stable-release.js";
9
12
  export * from "./update.js";
13
+ export * from "./update-launch.js";
14
+ export * from "./update-recovery.js";
10
15
  export * from "./update-transaction.js";
16
+ export * from "./warmup.js";
@@ -0,0 +1,71 @@
1
+ import { rename, rm } from "node:fs/promises";
2
+ import { CohortStateStore, type ExternalReleaseHold, type OrphanReleaseDisposition } from "./cohort-state.js";
3
+ import type { ProductPaths } from "../lifecycle/index.js";
4
+ import { UpdateTransactionStore } from "./update-transaction.js";
5
+ export interface ReleaseCleanupLimits {
6
+ readonly maxItems: number;
7
+ readonly maxDurationMs: number;
8
+ readonly concurrency: number;
9
+ }
10
+ export interface ReleaseCleanupOperations {
11
+ readonly rename?: typeof rename;
12
+ readonly remove?: typeof rm;
13
+ }
14
+ export interface ReleaseCleanupOptions {
15
+ readonly externalHolds?: readonly ExternalReleaseHold[];
16
+ readonly transactionStore?: Pick<UpdateTransactionStore, "read">;
17
+ readonly limits?: Partial<ReleaseCleanupLimits>;
18
+ readonly candidateAgeMs?: number;
19
+ readonly now?: () => number;
20
+ /** Fault-injection seam for bounded filesystem recovery tests. */
21
+ readonly operations?: ReleaseCleanupOperations;
22
+ /** Process-start seam for scheduler and continuation tests. */
23
+ readonly workerSpawner?: (entry: string, environment: NodeJS.ProcessEnv) => Promise<void>;
24
+ }
25
+ export interface ReleaseCleanupWorkerOptions {
26
+ readonly cleanup?: ReleaseCleanupOptions;
27
+ readonly maxDurationMs?: number;
28
+ readonly maxNoProgressBatches?: number;
29
+ readonly retryDelayMs?: number;
30
+ readonly now?: () => number;
31
+ readonly sleep?: (durationMs: number) => Promise<void>;
32
+ readonly continueWorker?: (dataDir: string, paths: ProductPaths, options: ReleaseCleanupOptions) => Promise<void>;
33
+ }
34
+ export interface ReleaseCleanupResult {
35
+ readonly planned: number;
36
+ readonly attempted: number;
37
+ readonly completed: number;
38
+ readonly remaining: number;
39
+ readonly durationMs: number;
40
+ }
41
+ interface DiscoveredCleanupInputs {
42
+ readonly orphans: readonly OrphanReleaseDisposition[];
43
+ readonly candidates: readonly string[];
44
+ readonly unmanagedTrash: readonly string[];
45
+ readonly certifications: readonly string[];
46
+ readonly diagnostics: readonly {
47
+ releaseId: string;
48
+ stage: string;
49
+ error: string;
50
+ }[];
51
+ }
52
+ /**
53
+ * Reconcile current ownership under the cohort-state lock and durably detach obsolete releases.
54
+ * This operation intentionally reads only manifests and directory metadata, never payload bytes.
55
+ */
56
+ export declare function prepareReleaseCleanup(dataDir: string, paths?: ProductPaths, options?: ReleaseCleanupOptions): Promise<{
57
+ readonly store: CohortStateStore;
58
+ readonly discovered: DiscoveredCleanupInputs;
59
+ }>;
60
+ /** Run a bounded, restart-safe physical cleanup pass over detached releases and abandoned artifacts. */
61
+ export declare function runBoundedReleaseCleanup(dataDir: string, paths?: ProductPaths, options?: ReleaseCleanupOptions): Promise<ReleaseCleanupResult>;
62
+ /**
63
+ * Commit cleanup intent synchronously, then let a dependency-light detached worker perform
64
+ * potentially slow recursive deletion. A later launch/update resumes work if spawning fails.
65
+ */
66
+ export declare function scheduleReleaseCleanup(dataDir: string, paths: ProductPaths, options?: ReleaseCleanupOptions): Promise<void>;
67
+ /** Entry used by the private cleanup executable shipped in every immutable release. */
68
+ export declare function runReleaseCleanupWorker(environment?: NodeJS.ProcessEnv, workerOptions?: ReleaseCleanupWorkerOptions): Promise<ReleaseCleanupResult>;
69
+ /** Compatibility helper: detach one requested release and execute a one-item pass. */
70
+ export declare function collectRelease(store: CohortStateStore, dataDir: string, releaseId: string, externalReferences: readonly string[], paths?: ProductPaths): Promise<void>;
71
+ export {};