@timurproko/a1 0.1.8-dev.ece8cef → 0.2.0

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 (918) hide show
  1. package/README.md +104 -58
  2. package/bin/activate.js +8 -0
  3. package/bin/cli.js +39 -13
  4. package/bin/guardian.js +21 -6
  5. package/bin/module-identity.js +76 -69
  6. package/bin/module-resolver.js +138 -0
  7. package/bin/pinned-pi-public.d.ts +3 -0
  8. package/bin/pinned-pi-public.js +93 -0
  9. package/bin/release-cleanup.js +8 -0
  10. package/bin/supervisor.js +2 -2
  11. package/bin/sync-pi-tui-proxy.js +7 -0
  12. package/bin/ui.js +67 -22
  13. package/bin/update-recovery.js +365 -0
  14. package/bin/warmup.js +28 -0
  15. package/dist/app/session-shell/clipboard-diagnostics.d.ts +16 -0
  16. package/dist/app/session-shell/clipboard-diagnostics.js +65 -0
  17. package/dist/app/session-shell/clipboard-image.d.ts +11 -0
  18. package/dist/app/session-shell/clipboard-image.js +38 -0
  19. package/dist/app/session-shell/editor-hyperlink-budget.d.ts +9 -0
  20. package/dist/app/session-shell/editor-hyperlink-budget.js +23 -0
  21. package/dist/app/session-shell/helper-pool.d.ts +33 -0
  22. package/dist/app/session-shell/helper-pool.js +98 -0
  23. package/dist/app/session-shell/image-preparation-client.d.ts +20 -0
  24. package/dist/app/session-shell/image-preparation-client.js +145 -0
  25. package/dist/app/session-shell/image-preparation.d.ts +18 -0
  26. package/dist/app/session-shell/image-preparation.js +126 -0
  27. package/dist/app/session-shell/image-source.d.ts +13 -0
  28. package/dist/app/session-shell/image-source.js +171 -0
  29. package/dist/app/session-shell/image-worker.d.ts +17 -0
  30. package/dist/app/session-shell/image-worker.js +23 -0
  31. package/dist/app/session-shell/index.d.ts +7 -0
  32. package/dist/app/session-shell/index.js +4 -0
  33. package/dist/app/session-shell/paste-executor.d.ts +18 -0
  34. package/dist/app/session-shell/paste-executor.js +253 -0
  35. package/dist/app/session-shell/paste-helper.js +173 -0
  36. package/dist/app/session-shell/paste-preparation-client.d.ts +31 -0
  37. package/dist/app/session-shell/paste-preparation-client.js +170 -0
  38. package/dist/app/session-shell/paste-protocol.d.ts +78 -0
  39. package/dist/app/session-shell/paste-protocol.js +18 -0
  40. package/dist/app/session-shell/paste-text-preparation.d.ts +6 -0
  41. package/dist/app/session-shell/paste-text-preparation.js +134 -0
  42. package/dist/app/session-shell/paste-text-worker.js +12 -0
  43. package/dist/app/session-shell/paste-types.d.ts +17 -0
  44. package/dist/app/session-shell/path-chip-presentation.d.ts +7 -0
  45. package/dist/app/session-shell/path-chip-presentation.js +24 -0
  46. package/dist/app/session-shell/prompt-chips.d.ts +76 -0
  47. package/dist/app/session-shell/prompt-chips.js +499 -0
  48. package/dist/app/session-shell/prompt-history-controller.d.ts +36 -0
  49. package/dist/app/session-shell/prompt-history-controller.js +170 -0
  50. package/dist/app/session-shell/prompt-suggestion-controller.d.ts +37 -0
  51. package/dist/app/session-shell/prompt-suggestion-controller.js +219 -0
  52. package/dist/app/session-shell/quit-outro-effects.d.ts +29 -0
  53. package/dist/app/session-shell/quit-outro-effects.js +242 -0
  54. package/dist/app/session-shell/quit-outro.d.ts +38 -0
  55. package/dist/app/session-shell/quit-outro.js +98 -0
  56. package/dist/app/session-shell/response-copy-coordinator.d.ts +27 -0
  57. package/dist/app/session-shell/response-copy-coordinator.js +187 -0
  58. package/dist/app/session-shell/response-copy-helper.js +122 -0
  59. package/dist/app/session-shell/response-copy-protocol.d.ts +56 -0
  60. package/dist/app/session-shell/response-copy-protocol.js +5 -0
  61. package/dist/app/session-shell/response-copy-transport.d.ts +39 -0
  62. package/dist/app/session-shell/response-copy-transport.js +217 -0
  63. package/dist/app/session-shell/session-shell-root.d.ts +278 -0
  64. package/dist/app/session-shell/session-shell-root.js +1442 -0
  65. package/dist/app/session-shell/session-shell.d.ts +66 -0
  66. package/dist/app/session-shell/session-shell.js +2151 -0
  67. package/dist/app/session-shell/session-viewport-controller.d.ts +62 -0
  68. package/dist/app/session-shell/session-viewport-controller.js +623 -0
  69. package/dist/app/session-shell/stream-presentation-coalescer.d.ts +29 -0
  70. package/dist/app/session-shell/stream-presentation-coalescer.js +79 -0
  71. package/dist/app/session-shell/system-clipboard.d.ts +20 -0
  72. package/dist/app/session-shell/system-clipboard.js +159 -0
  73. package/dist/app/session-shell/text-paste.d.ts +5 -0
  74. package/dist/app/session-shell/text-paste.js +16 -0
  75. package/dist/cli/capabilities.d.ts +6 -0
  76. package/dist/cli/capabilities.js +7 -0
  77. package/dist/cli/dispatch.d.ts +53 -0
  78. package/dist/cli/dispatch.js +287 -0
  79. package/dist/cli/index.d.ts +8 -0
  80. package/dist/cli/index.js +4 -0
  81. package/dist/cli/package-messages.d.ts +27 -0
  82. package/dist/cli/package-messages.js +83 -0
  83. package/dist/cli/packages.d.ts +32 -0
  84. package/dist/cli/packages.js +81 -0
  85. package/dist/cli/session-context.d.ts +9 -0
  86. package/dist/cli/session-context.js +29 -0
  87. package/dist/cli/version-stats.d.ts +22 -0
  88. package/dist/cli/version-stats.js +112 -0
  89. package/dist/composition/index.d.ts +2 -0
  90. package/dist/composition/index.js +2 -0
  91. package/dist/composition/owned-ui.d.ts +37 -0
  92. package/dist/composition/owned-ui.js +159 -0
  93. package/dist/composition/settings-route-host.d.ts +16 -0
  94. package/dist/composition/settings-route-host.js +141 -0
  95. package/dist/contracts/agent-engine/capability-ports.d.ts +95 -0
  96. package/dist/contracts/agent-engine/domain-validation.js +107 -0
  97. package/dist/contracts/agent-engine/domain.d.ts +138 -0
  98. package/dist/contracts/agent-engine/index.d.ts +11 -0
  99. package/dist/contracts/agent-engine/index.js +6 -0
  100. package/dist/contracts/agent-engine/package-ports.d.ts +60 -0
  101. package/dist/contracts/agent-engine/ports.js +1 -0
  102. package/dist/contracts/owned-ui/extension-ui.d.ts +310 -0
  103. package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
  104. package/dist/contracts/owned-ui/image-attachments.js +67 -0
  105. package/dist/contracts/owned-ui/index.d.ts +14 -0
  106. package/dist/contracts/owned-ui/index.js +9 -0
  107. package/dist/contracts/owned-ui/model.d.ts +383 -0
  108. package/dist/contracts/owned-ui/prompt-chips.d.ts +15 -0
  109. package/dist/contracts/owned-ui/prompt-chips.js +59 -0
  110. package/dist/contracts/owned-ui/prompt-history.d.ts +55 -0
  111. package/dist/contracts/owned-ui/prompt-history.js +23 -0
  112. package/dist/contracts/owned-ui/prompt-suggestions.d.ts +3 -0
  113. package/dist/contracts/owned-ui/prompt-suggestions.js +44 -0
  114. package/dist/contracts/owned-ui/suggestion-diagnostics.d.ts +22 -0
  115. package/dist/contracts/owned-ui/suggestion-diagnostics.js +9 -0
  116. package/dist/contracts/owned-ui/transcript-lifecycle.d.ts +5 -0
  117. package/dist/contracts/owned-ui/transcript-lifecycle.js +33 -0
  118. package/dist/contracts/owned-ui/validation.d.ts +15 -0
  119. package/dist/contracts/owned-ui/validation.js +554 -0
  120. package/dist/contracts/presentation/index.d.ts +117 -0
  121. package/dist/contracts/presentation/index.js +68 -0
  122. package/dist/features/launch/development-launch.js +36 -0
  123. package/dist/features/launch/index.d.ts +14 -0
  124. package/dist/features/launch/index.js +7 -0
  125. package/dist/features/launch/intent.d.ts +12 -0
  126. package/dist/features/launch/intent.js +8 -0
  127. package/dist/features/launch/prepare-launch.d.ts +11 -0
  128. package/dist/features/launch/prepare-launch.js +14 -0
  129. package/dist/features/launch/profile-paths.d.ts +16 -0
  130. package/dist/features/launch/profile-paths.js +36 -0
  131. package/dist/features/launch/runtime-selection.d.ts +16 -0
  132. package/dist/features/launch/runtime-selection.js +13 -0
  133. package/dist/features/launch/session-context.d.ts +8 -0
  134. package/dist/features/launch/session-context.js +8 -0
  135. package/dist/features/owned-ui/index.d.ts +9 -0
  136. package/dist/features/owned-ui/index.js +6 -0
  137. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  138. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  139. package/dist/features/owned-ui/reference-routes.d.ts +6 -0
  140. package/dist/features/owned-ui/reference-routes.js +6 -0
  141. package/dist/features/owned-ui/reference-screen-app.d.ts +43 -0
  142. package/dist/features/owned-ui/reference-screen-app.js +279 -0
  143. package/dist/features/owned-ui/run.d.ts +17 -0
  144. package/dist/features/owned-ui/run.js +64 -0
  145. package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
  146. package/dist/features/owned-ui/session-fork-prompt.js +34 -0
  147. package/dist/features/owned-ui/settings-app.d.ts +21 -0
  148. package/dist/features/owned-ui/settings-app.js +851 -0
  149. package/dist/features/owned-ui/settings-route.d.ts +2 -0
  150. package/dist/features/owned-ui/settings-route.js +2 -0
  151. package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
  152. package/dist/features/prompt-history/image-sidecar.js +130 -0
  153. package/dist/features/prompt-history/index.d.ts +4 -0
  154. package/dist/features/prompt-history/index.js +3 -0
  155. package/dist/features/prompt-history/paths.d.ts +5 -0
  156. package/dist/features/prompt-history/paths.js +17 -0
  157. package/dist/features/prompt-history/service.d.ts +54 -0
  158. package/dist/features/prompt-history/service.js +425 -0
  159. package/dist/features/prompt-history/store.d.ts +16 -0
  160. package/dist/features/prompt-history/store.js +219 -0
  161. package/dist/features/prompt-history/worker.d.ts +9 -0
  162. package/dist/features/prompt-history/worker.js +45 -0
  163. package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
  164. package/dist/features/prompt-suggestions/diagnostics.js +82 -0
  165. package/dist/features/prompt-suggestions/index.d.ts +2 -0
  166. package/dist/features/prompt-suggestions/index.js +1 -0
  167. package/dist/foundation/launch-context/index.d.ts +59 -0
  168. package/dist/foundation/launch-context/index.js +136 -0
  169. package/dist/foundation/launch-guardian/index.d.ts +2 -0
  170. package/dist/foundation/launch-guardian/index.js +1 -0
  171. package/dist/foundation/launch-guardian/main.d.ts +33 -0
  172. package/dist/foundation/launch-guardian/main.js +179 -0
  173. package/dist/foundation/lifecycle/commands.js +1 -0
  174. package/dist/foundation/lifecycle/index.d.ts +13 -0
  175. package/dist/foundation/lifecycle/index.js +6 -0
  176. package/dist/foundation/lifecycle/model.d.ts +64 -0
  177. package/dist/foundation/lifecycle/model.js +40 -0
  178. package/dist/foundation/lifecycle/paths.d.ts +30 -0
  179. package/dist/foundation/lifecycle/paths.js +70 -0
  180. package/dist/foundation/lifecycle/session-repository-context.d.ts +18 -0
  181. package/dist/foundation/lifecycle/session-repository-context.js +173 -0
  182. package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
  183. package/dist/foundation/lifecycle/session-selection.js +39 -0
  184. package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
  185. package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
  186. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
  187. package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
  188. package/dist/foundation/process-containment/index.d.ts +8 -0
  189. package/dist/foundation/process-containment/index.js +6 -0
  190. package/dist/foundation/process-containment/linux-process-inspector.d.ts +7 -0
  191. package/dist/foundation/process-containment/linux-process-inspector.js +27 -0
  192. package/dist/foundation/process-containment/native-guardian-containment.d.ts +17 -0
  193. package/dist/foundation/process-containment/native-guardian-containment.js +140 -0
  194. package/dist/foundation/process-containment/windows-process-inspector.d.ts +19 -0
  195. package/dist/foundation/process-containment/windows-process-inspector.js +56 -0
  196. package/dist/foundation/protocol/client.d.ts +18 -0
  197. package/dist/foundation/protocol/client.js +130 -0
  198. package/dist/foundation/protocol/index.d.ts +3 -0
  199. package/dist/foundation/protocol/index.js +2 -0
  200. package/dist/foundation/protocol/messages.d.ts +90 -0
  201. package/dist/foundation/protocol/messages.js +100 -0
  202. package/dist/foundation/release/bootstrap.d.ts +51 -0
  203. package/dist/foundation/release/bootstrap.js +470 -0
  204. package/dist/foundation/release/cohort-state.d.ts +159 -0
  205. package/dist/foundation/release/cohort-state.js +507 -0
  206. package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
  207. package/dist/foundation/release/dependency-certification-retention.js +88 -0
  208. package/dist/foundation/release/dependency-certification.d.ts +24 -0
  209. package/dist/foundation/release/dependency-certification.js +266 -0
  210. package/dist/foundation/release/dependency-layer.d.ts +78 -0
  211. package/dist/foundation/release/dependency-layer.js +466 -0
  212. package/dist/foundation/release/endpoints.d.ts +24 -0
  213. package/dist/foundation/release/endpoints.js +134 -0
  214. package/dist/foundation/release/immutable-platform.d.ts +6 -0
  215. package/dist/foundation/release/immutable-platform.js +13 -0
  216. package/dist/foundation/release/index.d.ts +33 -0
  217. package/dist/foundation/release/index.js +18 -0
  218. package/dist/foundation/release/ordinary-launch-selection.d.ts +14 -0
  219. package/dist/foundation/release/ordinary-launch-selection.js +15 -0
  220. package/dist/foundation/release/release-gc.d.ts +71 -0
  221. package/dist/foundation/release/release-gc.js +764 -0
  222. package/dist/foundation/release/release-store.d.ts +49 -0
  223. package/dist/foundation/release/release-store.js +235 -0
  224. package/dist/foundation/release/release.d.ts +43 -0
  225. package/dist/foundation/release/release.js +215 -0
  226. package/dist/foundation/release/restart-certification.d.ts +68 -0
  227. package/dist/foundation/release/restart-certification.js +227 -0
  228. package/dist/foundation/release/types.d.ts +11 -0
  229. package/dist/foundation/release/types.js +1 -0
  230. package/dist/foundation/release/update-activation.d.ts +72 -0
  231. package/dist/foundation/release/update-activation.js +204 -0
  232. package/dist/foundation/release/update-launch.d.ts +6 -0
  233. package/dist/foundation/release/update-launch.js +17 -0
  234. package/dist/foundation/release/update-recovery.d.ts +82 -0
  235. package/dist/foundation/release/update-recovery.js +386 -0
  236. package/dist/foundation/release/update-transaction.d.ts +42 -0
  237. package/dist/foundation/release/update-transaction.js +101 -0
  238. package/dist/foundation/release/update.d.ts +142 -0
  239. package/dist/foundation/release/update.js +773 -0
  240. package/dist/foundation/release/warmup.d.ts +3 -0
  241. package/dist/foundation/release/warmup.js +47 -0
  242. package/dist/foundation/startup/index.d.ts +4 -0
  243. package/dist/foundation/startup/index.js +2 -0
  244. package/dist/foundation/startup/startup-budget.d.ts +46 -0
  245. package/dist/foundation/startup/startup-budget.js +42 -0
  246. package/dist/foundation/startup/startup-descriptor.js +34 -0
  247. package/dist/foundation/startup/startup-runtime.d.ts +27 -0
  248. package/dist/foundation/startup/startup-runtime.js +128 -0
  249. package/dist/foundation/storage/control-store.d.ts +18 -0
  250. package/dist/foundation/storage/control-store.js +342 -0
  251. package/dist/foundation/storage/index.d.ts +1 -0
  252. package/dist/foundation/storage/index.js +1 -0
  253. package/dist/foundation/supervision/index.d.ts +3 -0
  254. package/dist/foundation/supervision/index.js +3 -0
  255. package/dist/foundation/supervision/main.d.ts +1 -0
  256. package/dist/foundation/supervision/main.js +84 -0
  257. package/dist/foundation/supervision/paths.d.ts +1 -0
  258. package/dist/foundation/supervision/paths.js +1 -0
  259. package/dist/foundation/supervision/server.d.ts +46 -0
  260. package/dist/foundation/supervision/server.js +584 -0
  261. package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
  262. package/dist/foundation/terminal-cleanup/fatal-exit.js +87 -0
  263. package/dist/foundation/terminal-cleanup/index.d.ts +3 -0
  264. package/dist/foundation/terminal-cleanup/index.js +2 -0
  265. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
  266. package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
  267. package/dist/integrations/pi/components/components.d.ts +4 -0
  268. package/dist/integrations/pi/components/components.js +64 -0
  269. package/dist/integrations/pi/components/conformance.d.ts +18 -0
  270. package/dist/integrations/pi/components/conformance.js +70 -0
  271. package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
  272. package/dist/integrations/pi/components/editor-interaction.js +1 -0
  273. package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
  274. package/dist/integrations/pi/components/history-editor-loader.js +5 -0
  275. package/dist/integrations/pi/components/index.d.ts +26 -0
  276. package/dist/integrations/pi/components/index.js +16 -0
  277. package/dist/integrations/pi/components/modal-frame.d.ts +41 -0
  278. package/dist/integrations/pi/components/modal-frame.js +110 -0
  279. package/dist/integrations/pi/components/models-dialog.d.ts +55 -0
  280. package/dist/integrations/pi/components/models-dialog.js +403 -0
  281. package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
  282. package/dist/integrations/pi/components/owned-editor-ux.js +1094 -0
  283. package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
  284. package/dist/integrations/pi/components/path-word-ranges.js +37 -0
  285. package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
  286. package/dist/integrations/pi/components/prompt-input-port.js +1 -0
  287. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +167 -0
  288. package/dist/integrations/pi/components/resources/builtin-themes.js +168 -0
  289. package/dist/integrations/pi/components/shell-components.d.ts +7 -0
  290. package/dist/integrations/pi/components/shell-components.js +7 -0
  291. package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +23 -0
  292. package/dist/integrations/pi/components/shell-editor-autocomplete.js +357 -0
  293. package/dist/integrations/pi/components/shell-extension-ui.d.ts +35 -0
  294. package/dist/integrations/pi/components/shell-extension-ui.js +282 -0
  295. package/dist/integrations/pi/components/shell-footer-status.d.ts +8 -0
  296. package/dist/integrations/pi/components/shell-footer-status.js +287 -0
  297. package/dist/integrations/pi/components/shell-hotkey-sections.d.ts +7 -0
  298. package/dist/integrations/pi/components/shell-hotkey-sections.js +29 -0
  299. package/dist/integrations/pi/components/shell-presenters-info.d.ts +73 -0
  300. package/dist/integrations/pi/components/shell-presenters-info.js +188 -0
  301. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
  302. package/dist/integrations/pi/components/shell-presenters-transcript.js +435 -0
  303. package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +134 -0
  304. package/dist/integrations/pi/components/shell-selectors-dialogs.js +286 -0
  305. package/dist/integrations/pi/components/shell-shared-facade.d.ts +233 -0
  306. package/dist/integrations/pi/components/shell-shared-facade.js +92 -0
  307. package/dist/integrations/pi/components/skills-command.d.ts +49 -0
  308. package/dist/integrations/pi/components/skills-command.js +119 -0
  309. package/dist/integrations/pi/components/skills-dialog.d.ts +9 -0
  310. package/dist/integrations/pi/components/skills-dialog.js +128 -0
  311. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +17 -0
  312. package/dist/integrations/pi/components/submitted-prompt-adapter.js +52 -0
  313. package/dist/integrations/pi/components/theme.d.ts +5 -0
  314. package/dist/integrations/pi/components/theme.js +11 -0
  315. package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +8 -0
  316. package/dist/integrations/pi/components/thinking-selector-dialog.js +22 -0
  317. package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
  318. package/dist/integrations/pi/components/tool-image-presentation.js +83 -0
  319. package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
  320. package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
  321. package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
  322. package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
  323. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +445 -0
  324. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +371 -0
  325. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
  326. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +13 -0
  327. package/dist/integrations/pi/components/upstream/components/daxnuts.d.ts +29 -0
  328. package/dist/integrations/pi/components/upstream/components/daxnuts.js +146 -0
  329. package/dist/integrations/pi/components/upstream/components/earendil-announcement.d.ts +4 -0
  330. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +48 -0
  331. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +22 -0
  332. package/dist/integrations/pi/components/upstream/components/extension-editor.js +89 -0
  333. package/dist/integrations/pi/components/upstream/components/extension-input.d.ts +17 -0
  334. package/dist/integrations/pi/components/upstream/components/extension-input.js +73 -0
  335. package/dist/integrations/pi/components/upstream/components/extension-selector.d.ts +15 -0
  336. package/dist/integrations/pi/components/upstream/components/extension-selector.js +93 -0
  337. package/dist/integrations/pi/components/upstream/components/mermaid.js +81 -0
  338. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +52 -0
  339. package/dist/integrations/pi/components/upstream/components/owned-editor.js +222 -0
  340. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +60 -0
  341. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +347 -0
  342. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +12 -0
  343. package/dist/integrations/pi/components/upstream/components/session-footer.js +150 -0
  344. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +161 -0
  345. package/dist/integrations/pi/components/upstream/components/session-selector.d.ts +97 -0
  346. package/dist/integrations/pi/components/upstream/components/session-selector.js +935 -0
  347. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +21 -0
  348. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +54 -0
  349. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +35 -0
  350. package/dist/integrations/pi/components/upstream/components/status-indicator.js +69 -0
  351. package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +36 -0
  352. package/dist/integrations/pi/components/upstream/components/thinking-selector.js +153 -0
  353. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +67 -0
  354. package/dist/integrations/pi/components/upstream/components/tool-execution.js +365 -0
  355. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +102 -0
  356. package/dist/integrations/pi/components/upstream/components/tree-selector.js +1294 -0
  357. package/dist/integrations/pi/components/upstream/components/trust-selector.d.ts +33 -0
  358. package/dist/integrations/pi/components/upstream/components/trust-selector.js +87 -0
  359. package/dist/integrations/pi/components/upstream/external-editor.js +43 -0
  360. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +289 -0
  361. package/dist/integrations/pi/components/upstream/history/editor-core.js +2145 -0
  362. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +35 -0
  363. package/dist/integrations/pi/components/upstream/history/kill-ring.js +51 -0
  364. package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
  365. package/dist/integrations/pi/components/upstream/history/printable-key.js +43 -0
  366. package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +17 -0
  367. package/dist/integrations/pi/components/upstream/history/text-helpers.js +34 -0
  368. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +25 -0
  369. package/dist/integrations/pi/components/upstream/history/undo-stack.js +39 -0
  370. package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
  371. package/dist/integrations/pi/components/upstream/history/word-navigation.js +103 -0
  372. package/dist/integrations/pi/components/upstream/model-search.d.ts +18 -0
  373. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +33 -0
  374. package/dist/integrations/pi/components/upstream/theme/theme-controller.js +114 -0
  375. package/dist/integrations/pi/components/upstream/theme/theme.d.ts +61 -0
  376. package/dist/integrations/pi/components/upstream/theme/theme.js +337 -0
  377. package/dist/integrations/pi/engine/adapter.d.ts +140 -0
  378. package/dist/integrations/pi/engine/adapter.js +663 -0
  379. package/dist/integrations/pi/engine/changelog.d.ts +2 -0
  380. package/dist/integrations/pi/engine/changelog.js +63 -0
  381. package/dist/integrations/pi/engine/command-dispatch.d.ts +41 -0
  382. package/dist/integrations/pi/engine/command-dispatch.js +125 -0
  383. package/dist/integrations/pi/engine/compaction-progress.d.ts +24 -0
  384. package/dist/integrations/pi/engine/compaction-progress.js +97 -0
  385. package/dist/integrations/pi/engine/conformance.d.ts +39 -0
  386. package/dist/integrations/pi/engine/conformance.js +140 -0
  387. package/dist/integrations/pi/engine/event-delivery.d.ts +100 -0
  388. package/dist/integrations/pi/engine/event-delivery.js +184 -0
  389. package/dist/integrations/pi/engine/extension-ui-binding.d.ts +35 -0
  390. package/dist/integrations/pi/engine/extension-ui-binding.js +81 -0
  391. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  392. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  393. package/dist/integrations/pi/engine/index.d.ts +18 -0
  394. package/dist/integrations/pi/engine/index.js +10 -0
  395. package/dist/integrations/pi/engine/message-values.d.ts +29 -0
  396. package/dist/integrations/pi/engine/message-values.js +169 -0
  397. package/dist/integrations/pi/engine/package-integration.d.ts +13 -0
  398. package/dist/integrations/pi/engine/package-integration.js +118 -0
  399. package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
  400. package/dist/integrations/pi/engine/pending-delivery.js +156 -0
  401. package/dist/integrations/pi/engine/pi-settings-metadata.json +397 -0
  402. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  403. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  404. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +30 -0
  405. package/dist/integrations/pi/engine/prompt-suggestions.js +102 -0
  406. package/dist/integrations/pi/engine/provider-authentication.d.ts +34 -0
  407. package/dist/integrations/pi/engine/provider-authentication.js +209 -0
  408. package/dist/integrations/pi/engine/repository-pr.d.ts +8 -0
  409. package/dist/integrations/pi/engine/repository-pr.js +62 -0
  410. package/dist/integrations/pi/engine/resource-catalog.d.ts +50 -0
  411. package/dist/integrations/pi/engine/resource-catalog.js +299 -0
  412. package/dist/integrations/pi/engine/resources/changelog.json +12 -0
  413. package/dist/integrations/pi/engine/runtime-integration.d.ts +53 -0
  414. package/dist/integrations/pi/engine/runtime-integration.js +118 -0
  415. package/dist/integrations/pi/engine/session-events.d.ts +48 -0
  416. package/dist/integrations/pi/engine/session-events.js +223 -0
  417. package/dist/integrations/pi/engine/session-integration.d.ts +67 -0
  418. package/dist/integrations/pi/engine/session-integration.js +195 -0
  419. package/dist/integrations/pi/engine/session-runtime.d.ts +98 -0
  420. package/dist/integrations/pi/engine/session-runtime.js +412 -0
  421. package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
  422. package/dist/integrations/pi/engine/session-selection.js +90 -0
  423. package/dist/integrations/pi/engine/settings-bridge.d.ts +121 -0
  424. package/dist/integrations/pi/engine/settings-bridge.js +516 -0
  425. package/dist/integrations/pi/engine/settings-metadata.d.ts +31 -0
  426. package/dist/integrations/pi/engine/settings-metadata.js +67 -0
  427. package/dist/integrations/pi/engine/settings-port.d.ts +42 -0
  428. package/dist/integrations/pi/engine/settings-port.js +363 -0
  429. package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
  430. package/dist/integrations/pi/engine/tool-rendering.js +145 -0
  431. package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
  432. package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
  433. package/dist/integrations/pi/engine/transcript-projection.d.ts +39 -0
  434. package/dist/integrations/pi/engine/transcript-projection.js +440 -0
  435. package/dist/integrations/pi/engine/usage-view.d.ts +4 -0
  436. package/dist/integrations/pi/engine/usage-view.js +56 -0
  437. package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
  438. package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
  439. package/dist/integrations/pi/engine/workflow-contexts.d.ts +66 -0
  440. package/dist/integrations/pi/engine/workflow-contexts.js +360 -0
  441. package/dist/integrations/pi/engine/workflow-runner.d.ts +60 -0
  442. package/dist/integrations/pi/engine/workflow-runner.js +536 -0
  443. package/dist/integrations/pi/engine/workflow-support.d.ts +38 -0
  444. package/dist/integrations/pi/engine/workflow-support.js +386 -0
  445. package/dist/integrations/pi/engine/workflows.d.ts +308 -0
  446. package/dist/integrations/pi/engine/workflows.js +81 -0
  447. package/dist/integrations/pi/startup-public.d.ts +2 -0
  448. package/dist/integrations/pi/startup-public.js +2254 -0
  449. package/dist/integrations/pi/startup-public.manifest.json +12679 -0
  450. package/dist/integrations/pi/tui-runtime/adapter.d.ts +58 -0
  451. package/dist/integrations/pi/tui-runtime/adapter.js +792 -0
  452. package/dist/integrations/pi/tui-runtime/contracts.d.ts +158 -0
  453. package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
  454. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +88 -0
  455. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +439 -0
  456. package/dist/integrations/pi/tui-runtime/index.d.ts +9 -0
  457. package/dist/integrations/pi/tui-runtime/index.js +5 -0
  458. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  459. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  460. package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +19 -0
  461. package/dist/integrations/pi/tui-runtime/mouse-report-input.js +91 -0
  462. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
  463. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +158 -0
  464. package/dist/integrations/pi/tui-runtime/presentation-adapter.d.ts +4 -0
  465. package/dist/integrations/pi/tui-runtime/presentation-adapter.js +48 -0
  466. package/dist/native/darwin-arm64/manifest.json +4 -4
  467. package/dist/native/darwin-arm64/process-guardian +0 -0
  468. package/dist/native/linux-x64/manifest.json +3 -3
  469. package/dist/native/linux-x64/process-guardian +0 -0
  470. package/dist/native/win32-x64/manifest.json +3 -3
  471. package/dist/native/win32-x64/process-guardian.exe +0 -0
  472. package/dist/product-identity.d.ts +37 -0
  473. package/dist/product-identity.js +119 -0
  474. package/dist/product-identity.json +87 -0
  475. package/dist/runtime-payload-inventory.json +134179 -0
  476. package/dist/ui/apps/contracts.d.ts +72 -0
  477. package/dist/ui/apps/host.d.ts +42 -0
  478. package/dist/ui/apps/host.js +156 -0
  479. package/dist/ui/apps/index.d.ts +5 -0
  480. package/dist/ui/apps/index.js +3 -0
  481. package/dist/ui/apps/registry.d.ts +12 -0
  482. package/dist/ui/apps/registry.js +33 -0
  483. package/dist/ui/components/dialog-panel.d.ts +37 -0
  484. package/dist/ui/components/dialog-panel.js +58 -0
  485. package/dist/ui/components/frame.d.ts +22 -0
  486. package/dist/ui/components/frame.js +55 -0
  487. package/dist/ui/components/index.d.ts +50 -0
  488. package/dist/ui/components/index.js +26 -0
  489. package/dist/ui/components/line-input.d.ts +68 -0
  490. package/dist/ui/components/line-input.js +224 -0
  491. package/dist/ui/components/list-block.d.ts +70 -0
  492. package/dist/ui/components/list-block.js +189 -0
  493. package/dist/ui/components/list-view.d.ts +60 -0
  494. package/dist/ui/components/list-view.js +84 -0
  495. package/dist/ui/components/mouse.d.ts +25 -0
  496. package/dist/ui/components/mouse.js +72 -0
  497. package/dist/ui/components/progress-status.d.ts +9 -0
  498. package/dist/ui/components/progress-status.js +25 -0
  499. package/dist/ui/components/prompt-input.d.ts +32 -0
  500. package/dist/ui/components/prompt-input.js +51 -0
  501. package/dist/ui/components/scrollbar.d.ts +88 -0
  502. package/dist/ui/components/scrollbar.js +137 -0
  503. package/dist/ui/components/selection-copy.d.ts +24 -0
  504. package/dist/ui/components/selection-copy.js +39 -0
  505. package/dist/ui/components/shortcut-hints.d.ts +7 -0
  506. package/dist/ui/components/shortcut-hints.js +12 -0
  507. package/dist/ui/components/shortcuts.d.ts +60 -0
  508. package/dist/ui/components/shortcuts.js +85 -0
  509. package/dist/ui/components/spans.d.ts +28 -0
  510. package/dist/ui/components/spans.js +266 -0
  511. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  512. package/dist/ui/components/submitted-prompt.js +50 -0
  513. package/dist/ui/components/surface.d.ts +20 -0
  514. package/dist/ui/components/surface.js +44 -0
  515. package/dist/ui/components/text-selection.d.ts +62 -0
  516. package/dist/ui/components/text-selection.js +210 -0
  517. package/dist/ui/components/text.d.ts +38 -0
  518. package/dist/ui/components/text.js +185 -0
  519. package/dist/ui/components/theme.d.ts +19 -0
  520. package/dist/ui/components/theme.js +9 -0
  521. package/dist/ui/components/transcript-viewport.d.ts +187 -0
  522. package/dist/ui/components/transcript-viewport.js +886 -0
  523. package/dist/ui/components/value-menu.d.ts +43 -0
  524. package/dist/ui/components/value-menu.js +41 -0
  525. package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
  526. package/dist/ui/components/visible-hyperlinks.js +97 -0
  527. package/dist/ui/settings/declarations.d.ts +127 -0
  528. package/dist/ui/settings/declarations.js +124 -0
  529. package/dist/ui/settings/index.d.ts +10 -0
  530. package/dist/ui/settings/index.js +5 -0
  531. package/dist/ui/settings/manager.d.ts +54 -0
  532. package/dist/ui/settings/manager.js +256 -0
  533. package/dist/ui/settings/migrations.d.ts +13 -0
  534. package/dist/ui/settings/migrations.js +92 -0
  535. package/dist/ui/settings/sections.d.ts +52 -0
  536. package/dist/ui/settings/sections.js +112 -0
  537. package/docs/architecture/boundaries.md +17 -13
  538. package/docs/architecture/code-documentation.md +77 -0
  539. package/docs/architecture/history-editor-provenance.md +100 -0
  540. package/docs/architecture/internal-naming.md +94 -0
  541. package/docs/architecture/process-guardian-provenance.md +3 -1
  542. package/docs/architecture/project-structure.md +72 -30
  543. package/docs/architecture/prompt-suggestions.md +68 -0
  544. package/docs/architecture/resource-and-data-policy.md +28 -2
  545. package/docs/architecture/response-copy-delivery.md +85 -0
  546. package/docs/architecture/terminal-host-proof-gate.md +1 -1
  547. package/docs/architecture/terminal-host-spike-evidence.md +1 -1
  548. package/docs/architecture/tool-image-presentation.md +62 -0
  549. package/docs/architecture/toolchain.md +34 -10
  550. package/docs/architecture/ui-reference-provenance.md +73 -6
  551. package/docs/ci-release-runbook.md +266 -77
  552. package/docs/features/launch-profiles.md +24 -17
  553. package/docs/features/modal-content-interaction.md +38 -0
  554. package/docs/features/prompt-history.md +149 -0
  555. package/docs/local-worktree-cleanup.md +214 -0
  556. package/docs/manual-code-streaming-cleanup.md +88 -0
  557. package/docs/manual-ghost-link-baseline.md +89 -0
  558. package/docs/manual-launch-instance-acceptance.md +12 -35
  559. package/docs/manual-owned-ui-checkpoint.md +79 -0
  560. package/docs/manual-pi-boundary-candidate.md +4 -5
  561. package/docs/manual-terminal-colour-check.md +4 -3
  562. package/docs/openspec-archive-automation.md +269 -0
  563. package/docs/repository-governance-live-acceptance.md +77 -0
  564. package/docs/validation.md +105 -0
  565. package/package.json +53 -34
  566. package/dist/src/cli/capabilities.d.ts +0 -15
  567. package/dist/src/cli/capabilities.js +0 -7
  568. package/dist/src/cli/dispatch.d.ts +0 -31
  569. package/dist/src/cli/dispatch.js +0 -123
  570. package/dist/src/cli/index.d.ts +0 -5
  571. package/dist/src/cli/index.js +0 -5
  572. package/dist/src/cli/packages.d.ts +0 -23
  573. package/dist/src/cli/packages.js +0 -84
  574. package/dist/src/cli/version-stats.d.ts +0 -16
  575. package/dist/src/cli/version-stats.js +0 -72
  576. package/dist/src/cli/version.d.ts +0 -2
  577. package/dist/src/cli/version.js +0 -23
  578. package/dist/src/composition/index.d.ts +0 -48
  579. package/dist/src/composition/index.js +0 -258
  580. package/dist/src/features/launch/development-launch.js +0 -28
  581. package/dist/src/features/launch/index.d.ts +0 -7
  582. package/dist/src/features/launch/index.js +0 -7
  583. package/dist/src/features/launch/intent.d.ts +0 -7
  584. package/dist/src/features/launch/intent.js +0 -4
  585. package/dist/src/features/launch/prepare-launch.d.ts +0 -13
  586. package/dist/src/features/launch/prepare-launch.js +0 -21
  587. package/dist/src/features/launch/profile-paths.d.ts +0 -15
  588. package/dist/src/features/launch/profile-paths.js +0 -31
  589. package/dist/src/features/launch/profiles.d.ts +0 -12
  590. package/dist/src/features/launch/profiles.js +0 -26
  591. package/dist/src/features/launch/runtime-selection.d.ts +0 -19
  592. package/dist/src/features/launch/runtime-selection.js +0 -13
  593. package/dist/src/features/owned-ui/customization.d.ts +0 -38
  594. package/dist/src/features/owned-ui/customization.js +0 -108
  595. package/dist/src/features/owned-ui/diagnostics.d.ts +0 -33
  596. package/dist/src/features/owned-ui/diagnostics.js +0 -94
  597. package/dist/src/features/owned-ui/index.d.ts +0 -4
  598. package/dist/src/features/owned-ui/index.js +0 -4
  599. package/dist/src/features/owned-ui/run.d.ts +0 -11
  600. package/dist/src/features/owned-ui/run.js +0 -15
  601. package/dist/src/features/owned-ui/settings-app.d.ts +0 -22
  602. package/dist/src/features/owned-ui/settings-app.js +0 -633
  603. package/dist/src/features/workspace/capabilities.d.ts +0 -31
  604. package/dist/src/features/workspace/capabilities.js +0 -75
  605. package/dist/src/features/workspace/index.d.ts +0 -6
  606. package/dist/src/features/workspace/index.js +0 -6
  607. package/dist/src/features/workspace/presentation.d.ts +0 -30
  608. package/dist/src/features/workspace/presentation.js +0 -70
  609. package/dist/src/features/workspace/reconciliation.d.ts +0 -15
  610. package/dist/src/features/workspace/reconciliation.js +0 -82
  611. package/dist/src/features/workspace/reducer.d.ts +0 -42
  612. package/dist/src/features/workspace/reducer.js +0 -213
  613. package/dist/src/features/workspace/router.d.ts +0 -31
  614. package/dist/src/features/workspace/router.js +0 -124
  615. package/dist/src/features/workspace/store.d.ts +0 -17
  616. package/dist/src/features/workspace/store.js +0 -54
  617. package/dist/src/foundation/agent-engine-contracts/capability-ports.d.ts +0 -95
  618. package/dist/src/foundation/agent-engine-contracts/domain-validation.js +0 -89
  619. package/dist/src/foundation/agent-engine-contracts/domain.d.ts +0 -116
  620. package/dist/src/foundation/agent-engine-contracts/index.d.ts +0 -8
  621. package/dist/src/foundation/agent-engine-contracts/index.js +0 -8
  622. package/dist/src/foundation/agent-engine-contracts/package-ports.d.ts +0 -54
  623. package/dist/src/foundation/launch-guardian/index.d.ts +0 -1
  624. package/dist/src/foundation/launch-guardian/index.js +0 -1
  625. package/dist/src/foundation/launch-guardian/main.d.ts +0 -31
  626. package/dist/src/foundation/launch-guardian/main.js +0 -165
  627. package/dist/src/foundation/lifecycle/index.d.ts +0 -4
  628. package/dist/src/foundation/lifecycle/index.js +0 -4
  629. package/dist/src/foundation/lifecycle/model.d.ts +0 -64
  630. package/dist/src/foundation/lifecycle/model.js +0 -40
  631. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  632. package/dist/src/foundation/lifecycle/paths.js +0 -42
  633. package/dist/src/foundation/native-host-protocol/codec.d.ts +0 -11
  634. package/dist/src/foundation/native-host-protocol/codec.js +0 -56
  635. package/dist/src/foundation/native-host-protocol/evidence.d.ts +0 -67
  636. package/dist/src/foundation/native-host-protocol/evidence.js +0 -141
  637. package/dist/src/foundation/native-host-protocol/index.d.ts +0 -4
  638. package/dist/src/foundation/native-host-protocol/index.js +0 -4
  639. package/dist/src/foundation/native-host-protocol/messages.d.ts +0 -56
  640. package/dist/src/foundation/native-host-protocol/messages.js +0 -149
  641. package/dist/src/foundation/native-host-protocol/proof-gate.d.ts +0 -13
  642. package/dist/src/foundation/native-host-protocol/proof-gate.js +0 -33
  643. package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts +0 -302
  644. package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
  645. package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
  646. package/dist/src/foundation/owned-ui-contracts/model.d.ts +0 -241
  647. package/dist/src/foundation/owned-ui-contracts/validation.d.ts +0 -11
  648. package/dist/src/foundation/owned-ui-contracts/validation.js +0 -395
  649. package/dist/src/foundation/owned-ui-settings/declarations.d.ts +0 -13
  650. package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
  651. package/dist/src/foundation/owned-ui-settings/index.d.ts +0 -6
  652. package/dist/src/foundation/owned-ui-settings/index.js +0 -6
  653. package/dist/src/foundation/owned-ui-settings/migrations.d.ts +0 -13
  654. package/dist/src/foundation/owned-ui-settings/migrations.js +0 -28
  655. package/dist/src/foundation/owned-ui-settings/sections.d.ts +0 -70
  656. package/dist/src/foundation/owned-ui-settings/sections.js +0 -93
  657. package/dist/src/foundation/owned-ui-settings/session.d.ts +0 -44
  658. package/dist/src/foundation/owned-ui-settings/session.js +0 -145
  659. package/dist/src/foundation/owned-ui-settings/store.d.ts +0 -28
  660. package/dist/src/foundation/owned-ui-settings/store.js +0 -90
  661. package/dist/src/foundation/pi-component-adapter/components.d.ts +0 -4
  662. package/dist/src/foundation/pi-component-adapter/components.js +0 -64
  663. package/dist/src/foundation/pi-component-adapter/conformance.d.ts +0 -17
  664. package/dist/src/foundation/pi-component-adapter/conformance.js +0 -69
  665. package/dist/src/foundation/pi-component-adapter/index.d.ts +0 -13
  666. package/dist/src/foundation/pi-component-adapter/index.js +0 -13
  667. package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.d.ts +0 -165
  668. package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.js +0 -166
  669. package/dist/src/foundation/pi-component-adapter/shell-components.d.ts +0 -6
  670. package/dist/src/foundation/pi-component-adapter/shell-components.js +0 -6
  671. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.d.ts +0 -11
  672. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
  673. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts +0 -35
  674. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js +0 -279
  675. package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts +0 -7
  676. package/dist/src/foundation/pi-component-adapter/shell-footer-status.js +0 -189
  677. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  678. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js +0 -429
  679. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts +0 -113
  680. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +0 -235
  681. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
  682. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js +0 -87
  683. package/dist/src/foundation/pi-component-adapter/theme.d.ts +0 -1
  684. package/dist/src/foundation/pi-component-adapter/theme.js +0 -1
  685. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts +0 -422
  686. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js +0 -296
  687. package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts +0 -10
  688. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts +0 -17
  689. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js +0 -51
  690. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts +0 -22
  691. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js +0 -142
  692. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts +0 -4
  693. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
  694. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts +0 -17
  695. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js +0 -81
  696. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts +0 -24
  697. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js +0 -105
  698. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts +0 -2
  699. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js +0 -18
  700. package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js +0 -77
  701. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
  702. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
  703. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts +0 -55
  704. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js +0 -342
  705. package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.d.ts +0 -10
  706. package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.js +0 -120
  707. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js +0 -159
  708. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts +0 -95
  709. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js +0 -889
  710. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts +0 -19
  711. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js +0 -44
  712. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts +0 -30
  713. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js +0 -59
  714. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts +0 -98
  715. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js +0 -1272
  716. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts +0 -33
  717. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js +0 -76
  718. package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js +0 -39
  719. package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts +0 -15
  720. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts +0 -25
  721. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js +0 -117
  722. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts +0 -61
  723. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js +0 -326
  724. package/dist/src/foundation/pi-engine-adapter/adapter.d.ts +0 -164
  725. package/dist/src/foundation/pi-engine-adapter/adapter.js +0 -2367
  726. package/dist/src/foundation/pi-engine-adapter/conformance.d.ts +0 -37
  727. package/dist/src/foundation/pi-engine-adapter/conformance.js +0 -130
  728. package/dist/src/foundation/pi-engine-adapter/index.d.ts +0 -10
  729. package/dist/src/foundation/pi-engine-adapter/index.js +0 -10
  730. package/dist/src/foundation/pi-engine-adapter/model-auth-integration.d.ts +0 -30
  731. package/dist/src/foundation/pi-engine-adapter/model-auth-integration.js +0 -61
  732. package/dist/src/foundation/pi-engine-adapter/package-integration.d.ts +0 -13
  733. package/dist/src/foundation/pi-engine-adapter/package-integration.js +0 -112
  734. package/dist/src/foundation/pi-engine-adapter/pi-settings-metadata.json +0 -374
  735. package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.d.ts +0 -31
  736. package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.js +0 -80
  737. package/dist/src/foundation/pi-engine-adapter/runtime-integration.d.ts +0 -35
  738. package/dist/src/foundation/pi-engine-adapter/runtime-integration.js +0 -67
  739. package/dist/src/foundation/pi-engine-adapter/session-integration.d.ts +0 -43
  740. package/dist/src/foundation/pi-engine-adapter/session-integration.js +0 -97
  741. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  742. package/dist/src/foundation/pi-engine-adapter/settings-integration.js +0 -233
  743. package/dist/src/foundation/pi-engine-adapter/workflow-controllers.d.ts +0 -20
  744. package/dist/src/foundation/pi-engine-adapter/workflow-controllers.js +0 -48
  745. package/dist/src/foundation/pi-engine-adapter/workflows.d.ts +0 -173
  746. package/dist/src/foundation/pi-engine-adapter/workflows.js +0 -60
  747. package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
  748. package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
  749. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  750. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
  751. package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
  752. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts +0 -39
  753. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js +0 -493
  754. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts +0 -18
  755. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js +0 -145
  756. package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts +0 -120
  757. package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
  758. package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
  759. package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.d.ts +0 -4
  760. package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.js +0 -48
  761. package/dist/src/foundation/presentation-contracts/index.d.ts +0 -96
  762. package/dist/src/foundation/presentation-contracts/index.js +0 -38
  763. package/dist/src/foundation/process-containment/index.d.ts +0 -5
  764. package/dist/src/foundation/process-containment/index.js +0 -5
  765. package/dist/src/foundation/process-containment/linux-process-inspector.d.ts +0 -6
  766. package/dist/src/foundation/process-containment/linux-process-inspector.js +0 -26
  767. package/dist/src/foundation/process-containment/native-guardian-containment.d.ts +0 -16
  768. package/dist/src/foundation/process-containment/native-guardian-containment.js +0 -139
  769. package/dist/src/foundation/process-containment/windows-process-inspector.d.ts +0 -17
  770. package/dist/src/foundation/process-containment/windows-process-inspector.js +0 -53
  771. package/dist/src/foundation/protocol/client.d.ts +0 -17
  772. package/dist/src/foundation/protocol/client.js +0 -129
  773. package/dist/src/foundation/protocol/index.d.ts +0 -2
  774. package/dist/src/foundation/protocol/index.js +0 -2
  775. package/dist/src/foundation/protocol/messages.d.ts +0 -89
  776. package/dist/src/foundation/protocol/messages.js +0 -99
  777. package/dist/src/foundation/release/bootstrap.d.ts +0 -29
  778. package/dist/src/foundation/release/bootstrap.js +0 -335
  779. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  780. package/dist/src/foundation/release/cohort-state.js +0 -202
  781. package/dist/src/foundation/release/development-preview-release.d.ts +0 -49
  782. package/dist/src/foundation/release/development-preview-release.js +0 -114
  783. package/dist/src/foundation/release/index.d.ts +0 -11
  784. package/dist/src/foundation/release/index.js +0 -11
  785. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  786. package/dist/src/foundation/release/release-gc.js +0 -16
  787. package/dist/src/foundation/release/release-store.d.ts +0 -43
  788. package/dist/src/foundation/release/release-store.js +0 -175
  789. package/dist/src/foundation/release/release.d.ts +0 -38
  790. package/dist/src/foundation/release/release.js +0 -204
  791. package/dist/src/foundation/release/update-transaction.d.ts +0 -31
  792. package/dist/src/foundation/release/update-transaction.js +0 -89
  793. package/dist/src/foundation/release/update.d.ts +0 -80
  794. package/dist/src/foundation/release/update.js +0 -458
  795. package/dist/src/foundation/storage/control-store.d.ts +0 -61
  796. package/dist/src/foundation/storage/control-store.js +0 -530
  797. package/dist/src/foundation/storage/index.d.ts +0 -1
  798. package/dist/src/foundation/storage/index.js +0 -1
  799. package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts +0 -46
  800. package/dist/src/foundation/structured-agent-runtime/backpressure.js +0 -118
  801. package/dist/src/foundation/structured-agent-runtime/commands.d.ts +0 -52
  802. package/dist/src/foundation/structured-agent-runtime/commands.js +0 -164
  803. package/dist/src/foundation/structured-agent-runtime/handshake.d.ts +0 -41
  804. package/dist/src/foundation/structured-agent-runtime/handshake.js +0 -151
  805. package/dist/src/foundation/structured-agent-runtime/index.d.ts +0 -5
  806. package/dist/src/foundation/structured-agent-runtime/index.js +0 -5
  807. package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts +0 -37
  808. package/dist/src/foundation/structured-agent-runtime/reconnection.js +0 -129
  809. package/dist/src/foundation/structured-agent-runtime/state.d.ts +0 -56
  810. package/dist/src/foundation/structured-agent-runtime/state.js +0 -118
  811. package/dist/src/foundation/supervision/index.d.ts +0 -3
  812. package/dist/src/foundation/supervision/index.js +0 -3
  813. package/dist/src/foundation/supervision/main.d.ts +0 -1
  814. package/dist/src/foundation/supervision/main.js +0 -41
  815. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  816. package/dist/src/foundation/supervision/paths.js +0 -1
  817. package/dist/src/foundation/supervision/server.d.ts +0 -22
  818. package/dist/src/foundation/supervision/server.js +0 -451
  819. package/dist/src/foundation/ui-apps/contracts.d.ts +0 -42
  820. package/dist/src/foundation/ui-apps/host.d.ts +0 -42
  821. package/dist/src/foundation/ui-apps/host.js +0 -152
  822. package/dist/src/foundation/ui-apps/index.d.ts +0 -3
  823. package/dist/src/foundation/ui-apps/index.js +0 -3
  824. package/dist/src/foundation/ui-apps/registry.d.ts +0 -11
  825. package/dist/src/foundation/ui-apps/registry.js +0 -32
  826. package/dist/src/foundation/ui-components/dialog-panel.d.ts +0 -36
  827. package/dist/src/foundation/ui-components/dialog-panel.js +0 -47
  828. package/dist/src/foundation/ui-components/frame.d.ts +0 -21
  829. package/dist/src/foundation/ui-components/frame.js +0 -54
  830. package/dist/src/foundation/ui-components/index.d.ts +0 -18
  831. package/dist/src/foundation/ui-components/index.js +0 -18
  832. package/dist/src/foundation/ui-components/line-input.d.ts +0 -74
  833. package/dist/src/foundation/ui-components/line-input.js +0 -245
  834. package/dist/src/foundation/ui-components/list-block.d.ts +0 -66
  835. package/dist/src/foundation/ui-components/list-block.js +0 -176
  836. package/dist/src/foundation/ui-components/list-view.d.ts +0 -66
  837. package/dist/src/foundation/ui-components/list-view.js +0 -76
  838. package/dist/src/foundation/ui-components/mouse.d.ts +0 -15
  839. package/dist/src/foundation/ui-components/mouse.js +0 -46
  840. package/dist/src/foundation/ui-components/scrollbar.d.ts +0 -62
  841. package/dist/src/foundation/ui-components/scrollbar.js +0 -102
  842. package/dist/src/foundation/ui-components/shortcuts.d.ts +0 -57
  843. package/dist/src/foundation/ui-components/shortcuts.js +0 -81
  844. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  845. package/dist/src/foundation/ui-components/spans.js +0 -59
  846. package/dist/src/foundation/ui-components/surface.d.ts +0 -20
  847. package/dist/src/foundation/ui-components/surface.js +0 -38
  848. package/dist/src/foundation/ui-components/text.d.ts +0 -24
  849. package/dist/src/foundation/ui-components/text.js +0 -123
  850. package/dist/src/foundation/ui-components/theme.d.ts +0 -23
  851. package/dist/src/foundation/ui-components/theme.js +0 -13
  852. package/dist/src/foundation/ui-components/value-menu.d.ts +0 -41
  853. package/dist/src/foundation/ui-components/value-menu.js +0 -33
  854. package/dist/src/foundation/workspace-contracts/index.d.ts +0 -2
  855. package/dist/src/foundation/workspace-contracts/index.js +0 -2
  856. package/dist/src/foundation/workspace-contracts/model.d.ts +0 -248
  857. package/dist/src/foundation/workspace-contracts/model.js +0 -2
  858. package/dist/src/foundation/workspace-contracts/validation.d.ts +0 -13
  859. package/dist/src/foundation/workspace-contracts/validation.js +0 -335
  860. package/dist/src/product-identity.d.ts +0 -37
  861. package/dist/src/product-identity.js +0 -150
  862. package/dist/src/product-identity.json +0 -99
  863. package/docs/manual-transparent-checkpoint.md +0 -53
  864. /package/dist/{src/foundation/agent-engine-contracts/domain.js → app/session-shell/paste-helper.d.ts} +0 -0
  865. /package/dist/{src/foundation/agent-engine-contracts/ports.js → app/session-shell/paste-text-worker.d.ts} +0 -0
  866. /package/dist/{src/foundation/lifecycle/commands.js → app/session-shell/paste-types.js} +0 -0
  867. /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → app/session-shell/response-copy-helper.d.ts} +0 -0
  868. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  869. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  870. /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → contracts/agent-engine/domain.js} +0 -0
  871. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  872. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  873. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  874. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  875. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  876. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  877. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  878. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  879. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  880. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  881. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  882. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  883. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  884. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  885. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  886. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  887. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  888. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  889. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  890. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  891. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  892. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  893. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  894. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  895. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  896. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  897. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  898. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  899. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  900. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  901. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  902. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  903. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  904. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  905. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  906. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  907. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  908. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  909. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  910. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  911. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  912. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  913. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  914. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  915. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  916. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  917. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  918. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
@@ -0,0 +1,764 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { spawn } from "node:child_process";
3
+ import { lstat, mkdir, open, readFile, readdir, realpath, rename, rm, stat } from "node:fs/promises";
4
+ import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { CohortStateStore, planProtectedReleases, } from "./cohort-state.js";
7
+ import { liveReleaseIds } from "./endpoints.js";
8
+ import { resolveProductPaths } from "../lifecycle/index.js";
9
+ import { RELEASE_MANIFEST_FILENAME } from "./release-store.js";
10
+ import { DEPENDENCY_LAYER_MANIFEST, readCertifiedDependencyLayer } from "./dependency-layer.js";
11
+ import { dependencyCertificationDirectory, managedDependencyCertificationPath } from "./dependency-certification.js";
12
+ import { dependencyCertificationProtection } from "./dependency-certification-retention.js";
13
+ import { UpdateTransactionStore } from "./update-transaction.js";
14
+ import { cleanupUpdateRecoveryCapsules } from "./update-recovery.js";
15
+ import { PRODUCT_IDENTITY } from "../../product-identity.js";
16
+ import { collectCompileCaches, startupCompileCachePath } from "../startup/index.js";
17
+ const DEFAULT_CANDIDATE_AGE_MS = 60 * 60 * 1_000;
18
+ const DEFAULT_LIMITS = { maxItems: 8, maxDurationMs: 2_000, concurrency: 1 };
19
+ const DEFAULT_WORKER_DURATION_MS = 10 * 60 * 1_000;
20
+ const DEFAULT_NO_PROGRESS_BATCHES = 5;
21
+ const DEFAULT_RETRY_DELAY_MS = 500;
22
+ const WORKER_HOLDS_ENV = "RELEASE_CLEANUP_HOLDS";
23
+ const WORKER_RUN_ID_ENV = "RELEASE_CLEANUP_RUN_ID";
24
+ const WORKER_LEASE_FILENAME = "release-cleanup-worker.lock";
25
+ /**
26
+ * Reconcile current ownership under the cohort-state lock and durably detach obsolete releases.
27
+ * This operation intentionally reads only manifests and directory metadata, never payload bytes.
28
+ */
29
+ export async function prepareReleaseCleanup(dataDir, paths, options = {}) {
30
+ const store = new CohortStateStore(dataDir);
31
+ const discovered = await discoverCleanupInputs(dataDir, store, options);
32
+ const transactionStore = options.transactionStore ?? new UpdateTransactionStore(dataDir);
33
+ await store.reconcileRetention(async () => await protectionInputs(paths, transactionStore, options.externalHolds ?? []), discovered.orphans);
34
+ for (const diagnostic of discovered.diagnostics.slice(0, 16)) {
35
+ await store.recordCleanupFailure(diagnostic.releaseId, diagnostic.stage, diagnostic.error);
36
+ }
37
+ return { store, discovered };
38
+ }
39
+ /** Run a bounded, restart-safe physical cleanup pass over detached releases and abandoned artifacts. */
40
+ export async function runBoundedReleaseCleanup(dataDir, paths, options = {}) {
41
+ const now = options.now ?? Date.now;
42
+ const limits = normalizeLimits(options.limits);
43
+ const { store, discovered } = await prepareReleaseCleanup(dataDir, paths, options);
44
+ // Performance: The physical-work allowance begins after discovery, ownership probes, and the
45
+ // durable reconciliation write. A slow preparation phase must not starve every worker invocation.
46
+ const startedAt = now();
47
+ const initial = await store.read();
48
+ const pending = sortCleanupDispositions(Object.values(initial.cleanup.pending));
49
+ const transactionStore = options.transactionStore ?? new UpdateTransactionStore(dataDir);
50
+ const transaction = await transactionStore.read();
51
+ const activeTransaction = transaction?.status === "active";
52
+ const artifacts = sortArtifacts([
53
+ ...(!activeTransaction ? discovered.candidates : []),
54
+ ...discovered.unmanagedTrash,
55
+ ...discovered.certifications,
56
+ ], initial);
57
+ let attempted = 0;
58
+ let completed = 0;
59
+ let pendingOffset = 0;
60
+ let artifactOffset = 0;
61
+ const hasTime = (guaranteed = false) => guaranteed || attempted === 0 || now() - startedAt < limits.maxDurationMs;
62
+ const attemptPending = async (maximum, guaranteed = false) => {
63
+ while (pendingOffset < pending.length && attempted < limits.maxItems && maximum > 0 && hasTime(guaranteed)) {
64
+ const size = Math.min(limits.concurrency, maximum, limits.maxItems - attempted, pending.length - pendingOffset);
65
+ const batch = pending.slice(pendingOffset, pendingOffset + size);
66
+ pendingOffset += size;
67
+ maximum -= size;
68
+ attempted += batch.length;
69
+ const results = await Promise.all(batch.map(async (disposition) => await collectDisposition(store, dataDir, paths, disposition, options)));
70
+ completed += results.filter(Boolean).length;
71
+ guaranteed = false;
72
+ }
73
+ };
74
+ const attemptArtifacts = async (maximum, guaranteed = false) => {
75
+ while (artifactOffset < artifacts.length && attempted < limits.maxItems && maximum > 0 && hasTime(guaranteed)) {
76
+ const artifact = artifacts[artifactOffset++];
77
+ maximum -= 1;
78
+ const certificationId = certificationReleaseId(artifact);
79
+ if (certificationId !== null) {
80
+ const inputs = await protectionInputs(paths, transactionStore, options.externalHolds ?? []);
81
+ if (isProtectedDetachedRelease(await store.read(), inputs, certificationId))
82
+ continue;
83
+ }
84
+ attempted += 1;
85
+ try {
86
+ await removeAbandonedArtifact(dataDir, artifact, options.operations);
87
+ completed += 1;
88
+ }
89
+ catch (error) {
90
+ await store.recordCleanupFailure(artifactName(artifact), "artifact-delete", error);
91
+ }
92
+ guaranteed = false;
93
+ }
94
+ };
95
+ // Concurrency: Give each available class one opportunity before filling the batch. This keeps
96
+ // a locked release or a large release backlog from indefinitely starving candidates and evidence.
97
+ if (pending.length > 0)
98
+ await attemptPending(1, true);
99
+ if (artifacts.length > 0 && attempted < limits.maxItems)
100
+ await attemptArtifacts(1, true);
101
+ if (!activeTransaction && attempted < limits.maxItems) {
102
+ const layerResult = await collectUnreferencedDependencyLayers(store, dataDir, 1, options);
103
+ attempted += layerResult.attempted;
104
+ completed += layerResult.completed;
105
+ }
106
+ while (attempted < limits.maxItems && hasTime()) {
107
+ const before = attempted;
108
+ await attemptPending(1);
109
+ if (attempted < limits.maxItems)
110
+ await attemptArtifacts(1);
111
+ if (attempted === before)
112
+ break;
113
+ }
114
+ if (!activeTransaction && attempted < limits.maxItems && hasTime()) {
115
+ const layerResult = await collectUnreferencedDependencyLayers(store, dataDir, limits.maxItems - attempted, options);
116
+ attempted += layerResult.attempted;
117
+ completed += layerResult.completed;
118
+ }
119
+ if (!activeTransaction && hasTime()) {
120
+ await collectCompileCaches(dataDir, await protectedCompileCachePaths(dataDir, await store.read())).catch(() => { });
121
+ await cleanupUpdateRecoveryCapsules(dataDir).catch(() => { });
122
+ }
123
+ const remaining = Object.keys((await store.read()).cleanup.pending).length;
124
+ return { planned: pending.length + artifacts.length, attempted, completed, remaining, durationMs: Math.max(0, now() - startedAt) };
125
+ }
126
+ /**
127
+ * Commit cleanup intent synchronously, then let a dependency-light detached worker perform
128
+ * potentially slow recursive deletion. A later launch/update resumes work if spawning fails.
129
+ */
130
+ export async function scheduleReleaseCleanup(dataDir, paths, options = {}) {
131
+ const { store } = await prepareReleaseCleanup(dataDir, paths, options);
132
+ const runId = randomUUID();
133
+ await store.recordCleanupWorkerScheduled(runId);
134
+ const entry = fileURLToPath(new URL("../../../bin/release-cleanup.js", import.meta.url));
135
+ const environment = {
136
+ ...process.env,
137
+ [PRODUCT_IDENTITY.environment.dataDir]: dataDir,
138
+ [PRODUCT_IDENTITY.environment.runtimeDir]: paths.runtimeDir,
139
+ [WORKER_HOLDS_ENV]: JSON.stringify(options.externalHolds ?? []),
140
+ [WORKER_RUN_ID_ENV]: runId,
141
+ };
142
+ try {
143
+ await (options.workerSpawner ?? spawnCleanupWorker)(entry, environment);
144
+ }
145
+ catch (error) {
146
+ const summary = { batches: 0, attempted: 0, completed: 0, remaining: Object.keys((await store.read()).cleanup.pending).length };
147
+ await store.recordCleanupWorkerFinished(runId, "failed", summary, error);
148
+ await store.recordCleanupFailure("worker", "spawn", error);
149
+ }
150
+ }
151
+ /** Entry used by the private cleanup executable shipped in every immutable release. */
152
+ export async function runReleaseCleanupWorker(environment = process.env, workerOptions = {}) {
153
+ const paths = resolveProductPaths(environment);
154
+ const store = new CohortStateStore(paths.dataDir);
155
+ const runId = environment[WORKER_RUN_ID_ENV] ?? randomUUID();
156
+ const now = workerOptions.now ?? Date.now;
157
+ const sleep = workerOptions.sleep ?? (async (durationMs) => await new Promise(resolvePromise => setTimeout(resolvePromise, durationMs)));
158
+ const cleanupOptions = {
159
+ ...workerOptions.cleanup,
160
+ externalHolds: workerOptions.cleanup?.externalHolds ?? parseWorkerHolds(environment[WORKER_HOLDS_ENV]),
161
+ };
162
+ const summary = { batches: 0, attempted: 0, completed: 0, remaining: Object.keys((await store.read()).cleanup.pending).length };
163
+ let lease = null;
164
+ let continuation = false;
165
+ let status = "completed";
166
+ let failure = null;
167
+ const startedAt = now();
168
+ try {
169
+ lease = await acquireWorkerLease(paths.dataDir, runId);
170
+ if (lease === null) {
171
+ status = "skipped";
172
+ failure = "another release cleanup worker owns the data root";
173
+ return { planned: 0, attempted: 0, completed: 0, remaining: summary.remaining, durationMs: 0 };
174
+ }
175
+ await store.recordCleanupWorkerStarted(runId, process.pid);
176
+ let noProgressBatches = 0;
177
+ while (true) {
178
+ const result = await runBoundedReleaseCleanup(paths.dataDir, paths, cleanupOptions);
179
+ summary.batches += 1;
180
+ summary.attempted += result.attempted;
181
+ summary.completed += result.completed;
182
+ summary.remaining = result.remaining;
183
+ await store.recordCleanupWorkerProgress(runId, summary);
184
+ if (result.attempted === 0)
185
+ break;
186
+ if (result.completed === 0) {
187
+ noProgressBatches += 1;
188
+ if (noProgressBatches >= (workerOptions.maxNoProgressBatches ?? DEFAULT_NO_PROGRESS_BATCHES)) {
189
+ status = "blocked";
190
+ failure = "cleanup made no progress within its bounded retry allowance";
191
+ break;
192
+ }
193
+ await sleep((workerOptions.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS) * (2 ** (noProgressBatches - 1)));
194
+ }
195
+ else {
196
+ noProgressBatches = 0;
197
+ }
198
+ if (now() - startedAt >= (workerOptions.maxDurationMs ?? DEFAULT_WORKER_DURATION_MS)) {
199
+ status = "continued";
200
+ continuation = true;
201
+ break;
202
+ }
203
+ }
204
+ }
205
+ catch (error) {
206
+ status = "failed";
207
+ failure = error;
208
+ }
209
+ finally {
210
+ if (lease !== null)
211
+ await releaseWorkerLease(paths.dataDir, runId, lease);
212
+ await store.recordCleanupWorkerFinished(runId, status, summary, failure);
213
+ }
214
+ if (continuation) {
215
+ await (workerOptions.continueWorker ?? scheduleReleaseCleanup)(paths.dataDir, paths, cleanupOptions).catch(async (error) => {
216
+ await store.recordCleanupFailure("worker", "continuation", error);
217
+ });
218
+ }
219
+ if (status === "failed")
220
+ throw failure instanceof Error ? failure : new Error(errorMessage(failure));
221
+ return {
222
+ planned: summary.remaining + summary.completed,
223
+ attempted: summary.attempted,
224
+ completed: summary.completed,
225
+ remaining: summary.remaining,
226
+ durationMs: Math.max(0, now() - startedAt),
227
+ };
228
+ }
229
+ /** Compatibility helper: detach one requested release and execute a one-item pass. */
230
+ export async function collectRelease(store, dataDir, releaseId, externalReferences, paths) {
231
+ const holds = externalReferences.map(referenced => ({ authority: "migration", releaseId: referenced }));
232
+ const state = await store.read();
233
+ if (!state.releases[releaseId])
234
+ throw new Error(`unknown release ${releaseId}`);
235
+ await store.reconcileRetention(async () => ({ ...(await protectionInputs(paths, new UpdateTransactionStore(dataDir), holds)) }));
236
+ const disposition = (await store.read()).cleanup.pending[releaseId];
237
+ if (!disposition)
238
+ throw new Error(`release ${releaseId} is still referenced and cannot be collected`);
239
+ const removed = await collectDisposition(store, dataDir, paths, disposition, { externalHolds: holds, limits: { maxItems: 1 } });
240
+ if (!removed)
241
+ throw new Error(`release ${releaseId} could not be collected`);
242
+ }
243
+ async function collectDisposition(store, dataDir, paths, disposition, options) {
244
+ const releaseId = disposition.release.releaseId;
245
+ try {
246
+ const inputs = await protectionInputs(paths, options.transactionStore ?? new UpdateTransactionStore(dataDir), options.externalHolds ?? []);
247
+ const current = await store.read();
248
+ if (isProtectedDetachedRelease(current, inputs, releaseId))
249
+ return false;
250
+ const storeRoot = await canonicalReleaseStore(dataDir);
251
+ const trashRoot = await canonicalTrashRoot(storeRoot);
252
+ let trashPath = disposition.trashPath;
253
+ if (disposition.stage === "detached") {
254
+ const source = resolve(storeRoot, releaseId);
255
+ const sourceMetadata = await lstat(source).catch(error => missingOrThrow(error));
256
+ if (sourceMetadata === null) {
257
+ trashPath = await findReleaseTrash(trashRoot, releaseId);
258
+ if (trashPath === null) {
259
+ await removeCertificationEvidence(dataDir, disposition.release, store);
260
+ await store.completeCleanup(releaseId);
261
+ return true;
262
+ }
263
+ }
264
+ else {
265
+ await assertReleaseDirectory(source, storeRoot, disposition.release, releaseId);
266
+ trashPath = resolve(trashRoot, `${releaseId}--${randomUUID()}`);
267
+ await (options.operations?.rename ?? rename)(source, trashPath);
268
+ }
269
+ await store.markCleanupTrash(releaseId, trashPath);
270
+ }
271
+ if (trashPath === null)
272
+ throw new Error(`release ${releaseId} has no managed trash path`);
273
+ await assertReleaseDirectory(trashPath, trashRoot, disposition.release, `${releaseId}--`);
274
+ await (options.operations?.remove ?? rm)(trashPath, { recursive: true, force: false, maxRetries: 0 });
275
+ await removeCertificationEvidence(dataDir, disposition.release, store);
276
+ await store.completeCleanup(releaseId);
277
+ return true;
278
+ }
279
+ catch (error) {
280
+ await store.recordCleanupFailure(releaseId, disposition.stage, error);
281
+ return false;
282
+ }
283
+ }
284
+ function isProtectedDetachedRelease(state, inputs, releaseId) {
285
+ const selected = [state.references.active, state.references.pending, state.references.approved, state.references.rollback]
286
+ .some(reference => reference === releaseId);
287
+ return selected
288
+ || (inputs.liveReleaseIds ?? []).includes(releaseId)
289
+ || (inputs.externalHolds ?? []).some(hold => hold.releaseId === releaseId)
290
+ || (inputs.transaction?.status === "active" && inputs.transaction.priorActiveReleaseId === releaseId);
291
+ }
292
+ async function protectionInputs(paths, transactionStore, externalHolds) {
293
+ const [liveIds, transaction] = await Promise.all([
294
+ paths ? liveReleaseIds(paths) : Promise.resolve([]),
295
+ transactionStore.read(),
296
+ ]);
297
+ return { liveReleaseIds: liveIds, externalHolds, transaction: transactionReference(transaction) };
298
+ }
299
+ function transactionReference(transaction) {
300
+ return transaction === null ? null : { status: transaction.status, priorActiveReleaseId: transaction.priorActiveReleaseId };
301
+ }
302
+ async function discoverCleanupInputs(dataDir, store, options) {
303
+ const releaseRoot = resolve(dataDir, "releases");
304
+ await mkdir(releaseRoot, { recursive: true, mode: 0o700 });
305
+ const state = await store.read();
306
+ const orphans = [];
307
+ const candidates = [];
308
+ const unmanagedTrash = [];
309
+ const certifications = [];
310
+ const diagnostics = [];
311
+ const candidateAgeMs = options.candidateAgeMs ?? DEFAULT_CANDIDATE_AGE_MS;
312
+ const now = options.now ?? Date.now;
313
+ for (const entry of await readdir(releaseRoot, { withFileTypes: true })) {
314
+ const path = resolve(releaseRoot, entry.name);
315
+ if (entry.name === ".trash")
316
+ continue;
317
+ if (entry.name.startsWith(".candidate-")) {
318
+ try {
319
+ const metadata = await lstat(path);
320
+ if (metadata.isDirectory() && !metadata.isSymbolicLink() && now() - metadata.mtimeMs >= candidateAgeMs)
321
+ candidates.push(path);
322
+ }
323
+ catch (error) {
324
+ diagnostics.push({ releaseId: entry.name, stage: "candidate-discovery", error: errorMessage(error) });
325
+ }
326
+ continue;
327
+ }
328
+ if (state.releases[entry.name] || state.cleanup.pending[entry.name])
329
+ continue;
330
+ try {
331
+ const release = await readReleaseRecord(path, releaseRoot, entry.name, dataDir);
332
+ orphans.push({ release, stage: "detached" });
333
+ }
334
+ catch (error) {
335
+ diagnostics.push({ releaseId: entry.name, stage: "orphan-discovery", error: errorMessage(error) });
336
+ }
337
+ }
338
+ const trashRoot = resolve(releaseRoot, ".trash");
339
+ const trashMetadata = await lstat(trashRoot).catch(error => missingOrThrow(error));
340
+ if (trashMetadata !== null) {
341
+ if (!trashMetadata.isDirectory() || trashMetadata.isSymbolicLink()) {
342
+ diagnostics.push({ releaseId: ".trash", stage: "trash-discovery", error: "managed trash is not a direct non-link directory" });
343
+ }
344
+ else {
345
+ for (const entry of await readdir(trashRoot, { withFileTypes: true })) {
346
+ const path = resolve(trashRoot, entry.name);
347
+ const releaseId = entry.name.split("--", 1)[0];
348
+ if (entry.name.startsWith(".candidate--")) {
349
+ unmanagedTrash.push(path);
350
+ }
351
+ else if (entry.name.includes("--") && !state.cleanup.pending[releaseId]) {
352
+ try {
353
+ const release = await readReleaseRecord(path, trashRoot, `${releaseId}--`, dataDir);
354
+ orphans.push({ release, stage: "trash", trashPath: path });
355
+ }
356
+ catch (error) {
357
+ diagnostics.push({ releaseId, stage: "trash-discovery", error: errorMessage(error) });
358
+ }
359
+ }
360
+ }
361
+ }
362
+ }
363
+ for (const entry of await readdir(dataDir, { withFileTypes: true })) {
364
+ const match = /^certification-(.+)\.json$/.exec(entry.name);
365
+ if (!match || !entry.isFile())
366
+ continue;
367
+ const releaseId = match[1];
368
+ if (!state.releases[releaseId] && !state.cleanup.pending[releaseId] && !orphans.some(orphan => orphan.release.releaseId === releaseId)) {
369
+ certifications.push(resolve(dataDir, entry.name));
370
+ }
371
+ }
372
+ return { orphans, candidates, unmanagedTrash, certifications, diagnostics };
373
+ }
374
+ async function readReleaseRecord(path, parent, expectedName, dataDir) {
375
+ const metadata = await lstat(path);
376
+ if (!metadata.isDirectory() || metadata.isSymbolicLink())
377
+ throw new Error("release path is not a non-link directory");
378
+ const [canonicalParent, canonicalPath] = await Promise.all([realpath(parent), realpath(path)]);
379
+ assertDirectChild(canonicalParent, canonicalPath);
380
+ const name = canonicalPath.split(sep).at(-1) ?? "";
381
+ if (expectedName.endsWith("--") ? !name.startsWith(expectedName) : name !== expectedName)
382
+ throw new Error("release directory name does not match its disposition");
383
+ const manifest = JSON.parse(await readFile(resolve(canonicalPath, RELEASE_MANIFEST_FILENAME), "utf8"));
384
+ if (typeof manifest.releaseId !== "string" || !/^[0-9A-Za-z.+_-]+-[a-f0-9]{20}$/.test(manifest.releaseId)
385
+ || typeof manifest.packageVersion !== "string" || typeof manifest.contentDigest !== "string"
386
+ || !/^[a-f0-9]{64}$/.test(manifest.contentDigest) || !name.startsWith(manifest.releaseId)) {
387
+ throw new Error("release manifest identity is invalid for cleanup");
388
+ }
389
+ return {
390
+ releaseId: manifest.releaseId,
391
+ releaseRoot: resolve(parent, manifest.releaseId),
392
+ packageVersion: manifest.packageVersion,
393
+ contentDigest: manifest.contentDigest,
394
+ approval: "approved",
395
+ materializedAt: new Date(0).toISOString(),
396
+ certifiedAt: null,
397
+ diagnosticsPath: resolve(dataDir, `certification-${manifest.releaseId}.json`),
398
+ };
399
+ }
400
+ async function assertReleaseDirectory(path, parent, release, expectedName) {
401
+ const metadata = await lstat(path);
402
+ if (!metadata.isDirectory() || metadata.isSymbolicLink())
403
+ throw new Error(`refused cleanup of linked or non-directory release ${release.releaseId}`);
404
+ const [canonicalParent, canonicalPath] = await Promise.all([realpath(parent), realpath(path)]);
405
+ assertDirectChild(canonicalParent, canonicalPath);
406
+ const name = canonicalPath.split(sep).at(-1) ?? "";
407
+ if (expectedName.endsWith("--") ? !name.startsWith(expectedName) : name !== expectedName)
408
+ throw new Error(`release directory does not match identity ${release.releaseId}`);
409
+ if (!expectedName.endsWith("--") && canonicalPath !== await realpath(release.releaseRoot))
410
+ throw new Error(`recorded release path differs from managed identity ${release.releaseId}`);
411
+ const manifest = JSON.parse(await readFile(resolve(canonicalPath, RELEASE_MANIFEST_FILENAME), "utf8"));
412
+ if (manifest.releaseId !== release.releaseId || manifest.contentDigest !== release.contentDigest || manifest.packageVersion !== release.packageVersion) {
413
+ throw new Error(`release manifest metadata differs from detached record ${release.releaseId}`);
414
+ }
415
+ }
416
+ async function removeCertificationEvidence(dataDir, release, store) {
417
+ if (release.diagnosticsPath === null)
418
+ return;
419
+ // Security: the persisted path is historical metadata, not deletion authority. Derive the
420
+ // only permitted target from validated identity so Windows casing changes cannot strand it.
421
+ const expected = resolve(dataDir, `certification-${release.releaseId}.json`);
422
+ const metadata = await lstat(expected).catch(error => missingOrThrow(error));
423
+ if (metadata === null)
424
+ return;
425
+ if (!metadata.isFile() || metadata.isSymbolicLink()) {
426
+ await store.recordCleanupFailure(release.releaseId, "certification", "refused to delete linked or non-file certification evidence");
427
+ return;
428
+ }
429
+ const [canonicalDataDir, canonicalEvidence] = await Promise.all([realpath(dataDir), realpath(expected)]);
430
+ assertDirectChild(canonicalDataDir, canonicalEvidence);
431
+ if (artifactName(canonicalEvidence) !== `certification-${release.releaseId}.json`) {
432
+ await store.recordCleanupFailure(release.releaseId, "certification", "refused to delete certification evidence with a different managed identity");
433
+ return;
434
+ }
435
+ await rm(canonicalEvidence, { force: true });
436
+ }
437
+ async function canonicalReleaseStore(dataDir) {
438
+ const root = resolve(dataDir, "releases");
439
+ await mkdir(root, { recursive: true, mode: 0o700 });
440
+ const metadata = await lstat(root);
441
+ if (!metadata.isDirectory() || metadata.isSymbolicLink())
442
+ throw new Error("release store is not a non-link directory");
443
+ return await realpath(root);
444
+ }
445
+ async function canonicalTrashRoot(storeRoot) {
446
+ const root = resolve(storeRoot, ".trash");
447
+ await mkdir(root, { recursive: true, mode: 0o700 });
448
+ const metadata = await lstat(root);
449
+ if (!metadata.isDirectory() || metadata.isSymbolicLink())
450
+ throw new Error("managed release trash is not a non-link directory");
451
+ const canonical = await realpath(root);
452
+ assertDirectChild(storeRoot, canonical);
453
+ return canonical;
454
+ }
455
+ async function findReleaseTrash(trashRoot, releaseId) {
456
+ const names = (await readdir(trashRoot)).filter(name => name.startsWith(`${releaseId}--`)).sort();
457
+ return names.length === 0 ? null : resolve(trashRoot, names[0]);
458
+ }
459
+ async function removeAbandonedArtifact(dataDir, path, operations) {
460
+ const storeRoot = await canonicalReleaseStore(dataDir);
461
+ const metadata = await lstat(path);
462
+ if (metadata.isSymbolicLink())
463
+ throw new Error("abandoned artifact is a link");
464
+ const canonical = await realpath(path);
465
+ const parent = dirname(canonical);
466
+ const canonicalDataDir = await realpath(dataDir);
467
+ if (parent === canonicalDataDir && certificationReleaseId(canonical) !== null && metadata.isFile()) {
468
+ await (operations?.remove ?? rm)(canonical, { force: true });
469
+ return;
470
+ }
471
+ if (!metadata.isDirectory())
472
+ throw new Error("abandoned artifact is not a managed directory or certification file");
473
+ if (parent === storeRoot && canonical.split(sep).at(-1)?.startsWith(".candidate-")) {
474
+ const trashRoot = await canonicalTrashRoot(storeRoot);
475
+ const moved = resolve(trashRoot, `.candidate--${randomUUID()}`);
476
+ await (operations?.rename ?? rename)(canonical, moved);
477
+ await (operations?.remove ?? rm)(moved, { recursive: true, force: false, maxRetries: 0 });
478
+ return;
479
+ }
480
+ const trashRoot = await canonicalTrashRoot(storeRoot);
481
+ if (parent === trashRoot && canonical.split(sep).at(-1)?.startsWith(".candidate--")) {
482
+ await (operations?.remove ?? rm)(canonical, { recursive: true, force: false, maxRetries: 0 });
483
+ return;
484
+ }
485
+ throw new Error("abandoned artifact is outside managed candidate, trash, or certification paths");
486
+ }
487
+ async function collectUnreferencedDependencyLayers(store, dataDir, maxItems, options) {
488
+ const transactionStore = options.transactionStore ?? new UpdateTransactionStore(dataDir);
489
+ if ((await transactionStore.read())?.status === "active")
490
+ return { attempted: 0, completed: 0 };
491
+ const protection = await dependencyCertificationProtection(dataDir, Object.keys((await store.read()).releases));
492
+ if (protection.uncertain)
493
+ return { attempted: 0, completed: 0 };
494
+ const { referenced } = protection;
495
+ const layersRoot = resolve(dataDir, "dependency-layers");
496
+ const layersMetadata = await lstat(layersRoot).catch(error => missingOrThrow(error));
497
+ if (layersMetadata === null)
498
+ return await collectDependencyCertificationRecords(store, dataDir, protection, maxItems, options);
499
+ if (!layersMetadata.isDirectory() || layersMetadata.isSymbolicLink())
500
+ throw new Error("dependency-layer store is not a managed directory");
501
+ const trashRoot = resolve(layersRoot, ".trash");
502
+ await mkdir(trashRoot, { recursive: true, mode: 0o700 });
503
+ let attempted = 0;
504
+ let completed = 0;
505
+ const entries = await readdir(layersRoot, { withFileTypes: true });
506
+ const candidates = [];
507
+ for (const entry of entries) {
508
+ if (entry.name === ".trash")
509
+ continue;
510
+ const path = resolve(layersRoot, entry.name);
511
+ if (entry.name.startsWith(".candidate-")) {
512
+ const metadata = await lstat(path);
513
+ const currentTime = options.now?.() ?? Date.now();
514
+ if (currentTime - metadata.mtimeMs >= (options.candidateAgeMs ?? DEFAULT_CANDIDATE_AGE_MS)) {
515
+ candidates.push({ path, layerId: null, inTrash: false });
516
+ }
517
+ continue;
518
+ }
519
+ if (!referenced.has(entry.name))
520
+ candidates.push({ path, layerId: entry.name, inTrash: false });
521
+ }
522
+ for (const entry of await readdir(trashRoot, { withFileTypes: true })) {
523
+ candidates.push({ path: resolve(trashRoot, entry.name), layerId: entry.name.split("--", 1)[0] ?? null, inTrash: true });
524
+ }
525
+ const certificates = await collectDependencyCertificationRecords(store, dataDir, protection, Math.min(1, maxItems), options);
526
+ attempted += certificates.attempted;
527
+ completed += certificates.completed;
528
+ for (const candidate of candidates.slice(0, maxItems - attempted)) {
529
+ if ((await transactionStore.read())?.status === "active")
530
+ break;
531
+ if (candidate.layerId !== null && referenced.has(candidate.layerId))
532
+ continue;
533
+ attempted += 1;
534
+ try {
535
+ const metadata = await lstat(candidate.path);
536
+ if (!metadata.isDirectory() || metadata.isSymbolicLink())
537
+ throw new Error("dependency-layer cleanup candidate is not a non-link directory");
538
+ let removalPath = candidate.path;
539
+ if (!candidate.inTrash) {
540
+ const canonicalRoot = await realpath(layersRoot);
541
+ const canonical = await realpath(candidate.path);
542
+ assertDirectChild(canonicalRoot, canonical);
543
+ if (candidate.layerId !== null) {
544
+ const manifest = JSON.parse(await readFile(resolve(canonical, DEPENDENCY_LAYER_MANIFEST), "utf8"));
545
+ if (manifest.layerId !== candidate.layerId || typeof manifest.contentDigest !== "string")
546
+ throw new Error("dependency-layer manifest does not match its directory");
547
+ }
548
+ removalPath = resolve(trashRoot, `${candidate.layerId ?? ".candidate"}--${randomUUID()}`);
549
+ await (options.operations?.rename ?? rename)(canonical, removalPath);
550
+ }
551
+ else {
552
+ const canonicalTrash = await realpath(trashRoot);
553
+ assertDirectChild(canonicalTrash, await realpath(removalPath));
554
+ }
555
+ await (options.operations?.remove ?? rm)(removalPath, { recursive: true, force: false, maxRetries: 0 });
556
+ if (candidate.layerId !== null && /^dependencies-[a-f0-9]{32}$/.test(candidate.layerId)) {
557
+ for (const legacy of [false, true]) {
558
+ const certificate = await managedDependencyCertificationPath(dataDir, candidate.layerId, legacy);
559
+ if (certificate !== null)
560
+ await (options.operations?.remove ?? rm)(certificate, { force: true });
561
+ }
562
+ }
563
+ completed += 1;
564
+ }
565
+ catch (error) {
566
+ // Platform: the pass is retry based, so a sharing violation leaves managed trash.
567
+ await store.recordCleanupFailure(candidate.layerId ?? artifactName(candidate.path), "dependency-layer-delete", error);
568
+ }
569
+ }
570
+ if (attempted < maxItems) {
571
+ const remaining = await collectDependencyCertificationRecords(store, dataDir, protection, maxItems - attempted, options);
572
+ attempted += remaining.attempted;
573
+ completed += remaining.completed;
574
+ }
575
+ return { attempted, completed };
576
+ }
577
+ async function collectDependencyCertificationRecords(store, dataDir, protection, maxItems, options) {
578
+ const candidates = new Map();
579
+ for (const entry of await readdir(dataDir, { withFileTypes: true })) {
580
+ const match = /^dependency-layer-certification-(dependencies-[a-f0-9]{32})\.json$/.exec(entry.name);
581
+ if (match && entry.isFile())
582
+ candidates.set(resolve(dataDir, entry.name), { layerId: match[1], legacy: true });
583
+ }
584
+ try {
585
+ const directory = await dependencyCertificationDirectory(dataDir);
586
+ if (directory !== null) {
587
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
588
+ const match = /^(dependencies-[a-f0-9]{32})\.json$/.exec(entry.name);
589
+ if (match && entry.isFile())
590
+ candidates.set(resolve(directory, entry.name), { layerId: match[1], legacy: false });
591
+ }
592
+ }
593
+ }
594
+ catch (error) {
595
+ await store.recordCleanupFailure("dependency-certifications", "certification-discovery", error);
596
+ return { attempted: 0, completed: 0 };
597
+ }
598
+ const transactionStore = options.transactionStore ?? new UpdateTransactionStore(dataDir);
599
+ let attempted = 0;
600
+ let completed = 0;
601
+ for (const candidate of sortArtifacts([...candidates.keys()], await store.read())) {
602
+ if (attempted >= maxItems || (await transactionStore.read())?.status === "active")
603
+ break;
604
+ const { layerId, legacy } = candidates.get(candidate);
605
+ if (legacy ? protection.legacyRequired.has(layerId) : protection.referenced.has(layerId))
606
+ continue;
607
+ const layerExists = await lstat(resolve(dataDir, "dependency-layers", layerId)).catch(missingOrThrow) !== null;
608
+ if (!legacy && layerExists)
609
+ continue;
610
+ try {
611
+ if (legacy && (layerExists || protection.referenced.has(layerId))) {
612
+ // Security: a duplicate is disposable only with validated canonical evidence, never fallback.
613
+ await readCertifiedDependencyLayer(dataDir, layerId, undefined, { canonicalOnly: true });
614
+ }
615
+ attempted += 1;
616
+ const path = await managedDependencyCertificationPath(dataDir, layerId, legacy);
617
+ if (path !== null)
618
+ await (options.operations?.remove ?? rm)(path, { force: true });
619
+ completed += 1;
620
+ }
621
+ catch (error) {
622
+ await store.recordCleanupFailure(artifactName(candidate), "dependency-layer-certification", error);
623
+ }
624
+ }
625
+ return { attempted, completed };
626
+ }
627
+ async function protectedCompileCachePaths(dataDir, state) {
628
+ const paths = [];
629
+ for (const release of Object.values(state.releases)) {
630
+ try {
631
+ const manifest = JSON.parse(await readFile(resolve(release.releaseRoot, RELEASE_MANIFEST_FILENAME), "utf8"));
632
+ const layers = (manifest.dependencyLayers ?? []).map(layer => layer.layerId).filter((id) => typeof id === "string");
633
+ paths.push(startupCompileCachePath(dataDir, release.releaseId, layers));
634
+ }
635
+ catch {
636
+ paths.push(startupCompileCachePath(dataDir, release.releaseId, []));
637
+ }
638
+ }
639
+ return paths;
640
+ }
641
+ function assertDirectChild(parent, child) {
642
+ const fromParent = relative(parent, child);
643
+ if (fromParent.length === 0 || fromParent === ".." || fromParent.startsWith(`..${sep}`) || isAbsolute(fromParent) || fromParent.includes(sep)) {
644
+ throw new Error(`cleanup path is not a direct child of its managed root: ${child}`);
645
+ }
646
+ }
647
+ function normalizeLimits(input) {
648
+ const limits = { ...DEFAULT_LIMITS, ...input };
649
+ for (const [name, value] of Object.entries(limits)) {
650
+ if (!Number.isSafeInteger(value) || value < 1)
651
+ throw new Error(`invalid release cleanup ${name}: ${value}`);
652
+ }
653
+ return limits;
654
+ }
655
+ function sortCleanupDispositions(dispositions) {
656
+ return [...dispositions].sort((left, right) => left.attempts - right.attempts
657
+ || (left.lastAttemptAt ?? "").localeCompare(right.lastAttemptAt ?? "")
658
+ || left.release.releaseId.localeCompare(right.release.releaseId));
659
+ }
660
+ function sortArtifacts(artifacts, state) {
661
+ const attempts = new Map();
662
+ for (const diagnostic of state.cleanup.diagnostics) {
663
+ attempts.set(diagnostic.releaseId, (attempts.get(diagnostic.releaseId) ?? 0) + 1);
664
+ }
665
+ return [...artifacts].sort((left, right) => (attempts.get(artifactName(left)) ?? 0) - (attempts.get(artifactName(right)) ?? 0)
666
+ || artifactName(left).localeCompare(artifactName(right)));
667
+ }
668
+ async function spawnCleanupWorker(entry, environment) {
669
+ const child = spawn(process.execPath, [entry], {
670
+ detached: true,
671
+ windowsHide: true,
672
+ stdio: "ignore",
673
+ env: environment,
674
+ });
675
+ await new Promise((resolvePromise, rejectPromise) => {
676
+ child.once("spawn", resolvePromise);
677
+ child.once("error", rejectPromise);
678
+ });
679
+ child.unref();
680
+ }
681
+ async function acquireWorkerLease(dataDir, runId) {
682
+ const path = resolve(dataDir, WORKER_LEASE_FILENAME);
683
+ await mkdir(dataDir, { recursive: true, mode: 0o700 });
684
+ try {
685
+ const lease = await open(path, "wx", 0o600);
686
+ await lease.writeFile(JSON.stringify({ runId, pid: process.pid, createdAt: new Date().toISOString() }));
687
+ await lease.sync();
688
+ return lease;
689
+ }
690
+ catch (error) {
691
+ if (!(error instanceof Error && "code" in error && error.code === "EEXIST"))
692
+ throw error;
693
+ }
694
+ const owner = await readWorkerLease(path);
695
+ if (owner?.pid && processIsAlive(owner.pid))
696
+ return null;
697
+ if (owner === null) {
698
+ const metadata = await stat(path).catch(() => null);
699
+ if (metadata !== null && Date.now() - metadata.mtimeMs < 10_000)
700
+ return null;
701
+ }
702
+ const quarantine = `${path}.${randomUUID()}.abandoned`;
703
+ try {
704
+ await rename(path, quarantine);
705
+ await rm(quarantine, { force: true });
706
+ }
707
+ catch {
708
+ return null;
709
+ }
710
+ return await acquireWorkerLease(dataDir, runId);
711
+ }
712
+ async function releaseWorkerLease(dataDir, runId, lease) {
713
+ const path = resolve(dataDir, WORKER_LEASE_FILENAME);
714
+ await lease.close().catch(() => { });
715
+ const owner = await readWorkerLease(path);
716
+ if (owner?.runId === runId)
717
+ await rm(path, { force: true });
718
+ }
719
+ async function readWorkerLease(path) {
720
+ try {
721
+ const value = JSON.parse(await readFile(path, "utf8"));
722
+ return {
723
+ ...(typeof value.runId === "string" ? { runId: value.runId } : {}),
724
+ ...(typeof value.pid === "number" ? { pid: value.pid } : {}),
725
+ };
726
+ }
727
+ catch {
728
+ return null;
729
+ }
730
+ }
731
+ function processIsAlive(pid) {
732
+ try {
733
+ process.kill(pid, 0);
734
+ return true;
735
+ }
736
+ catch (error) {
737
+ return error instanceof Error && "code" in error && error.code === "EPERM";
738
+ }
739
+ }
740
+ function parseWorkerHolds(value) {
741
+ if (!value)
742
+ return [];
743
+ try {
744
+ const parsed = JSON.parse(value);
745
+ if (!Array.isArray(parsed))
746
+ return [];
747
+ return parsed.filter((hold) => Boolean(hold) && typeof hold === "object"
748
+ && (hold.authority === "agent" || hold.authority === "migration")
749
+ && typeof hold.releaseId === "string");
750
+ }
751
+ catch {
752
+ return [];
753
+ }
754
+ }
755
+ function missingOrThrow(error) {
756
+ if (error instanceof Error && "code" in error && error.code === "ENOENT")
757
+ return null;
758
+ throw error;
759
+ }
760
+ function artifactName(path) { return path.split(sep).at(-1) ?? "artifact"; }
761
+ function certificationReleaseId(path) {
762
+ return /^certification-(.+)\.json$/.exec(artifactName(path))?.[1] ?? null;
763
+ }
764
+ function errorMessage(error) { return error instanceof Error ? error.message : String(error); }