@timurproko/a1 0.1.8-dev.50ebb19 → 0.1.8-dev.510

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 (880) hide show
  1. package/README.md +209 -63
  2. package/bin/activate.js +8 -0
  3. package/bin/cli.js +33 -11
  4. package/bin/guardian.js +16 -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 +343 -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 +507 -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 +275 -0
  64. package/dist/app/session-shell/session-shell-root.js +1376 -0
  65. package/dist/app/session-shell/session-shell.d.ts +66 -0
  66. package/dist/app/session-shell/session-shell.js +2116 -0
  67. package/dist/app/session-shell/session-viewport-controller.d.ts +61 -0
  68. package/dist/app/session-shell/session-viewport-controller.js +597 -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 +46 -0
  78. package/dist/cli/dispatch.js +261 -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 +26 -0
  82. package/dist/cli/package-messages.js +71 -0
  83. package/dist/cli/packages.d.ts +32 -0
  84. package/dist/cli/packages.js +81 -0
  85. package/dist/cli/version-stats.d.ts +22 -0
  86. package/dist/cli/version-stats.js +112 -0
  87. package/dist/composition/index.d.ts +2 -0
  88. package/dist/composition/index.js +2 -0
  89. package/dist/composition/owned-ui.d.ts +37 -0
  90. package/dist/composition/owned-ui.js +154 -0
  91. package/dist/composition/settings-route-host.d.ts +20 -0
  92. package/dist/composition/settings-route-host.js +141 -0
  93. package/dist/contracts/agent-engine/capability-ports.d.ts +95 -0
  94. package/dist/contracts/agent-engine/domain-validation.js +107 -0
  95. package/dist/contracts/agent-engine/domain.d.ts +138 -0
  96. package/dist/contracts/agent-engine/index.d.ts +11 -0
  97. package/dist/contracts/agent-engine/index.js +6 -0
  98. package/dist/contracts/agent-engine/package-ports.d.ts +60 -0
  99. package/dist/contracts/agent-engine/ports.js +1 -0
  100. package/dist/contracts/owned-ui/extension-ui.d.ts +310 -0
  101. package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
  102. package/dist/contracts/owned-ui/image-attachments.js +67 -0
  103. package/dist/contracts/owned-ui/index.d.ts +12 -0
  104. package/dist/contracts/owned-ui/index.js +8 -0
  105. package/dist/contracts/owned-ui/model.d.ts +374 -0
  106. package/dist/contracts/owned-ui/prompt-history.d.ts +55 -0
  107. package/dist/contracts/owned-ui/prompt-history.js +23 -0
  108. package/dist/contracts/owned-ui/prompt-suggestions.d.ts +3 -0
  109. package/dist/contracts/owned-ui/prompt-suggestions.js +44 -0
  110. package/dist/contracts/owned-ui/suggestion-diagnostics.d.ts +22 -0
  111. package/dist/contracts/owned-ui/suggestion-diagnostics.js +9 -0
  112. package/dist/contracts/owned-ui/transcript-lifecycle.d.ts +5 -0
  113. package/dist/contracts/owned-ui/transcript-lifecycle.js +33 -0
  114. package/dist/contracts/owned-ui/validation.d.ts +15 -0
  115. package/dist/contracts/owned-ui/validation.js +523 -0
  116. package/dist/contracts/presentation/index.d.ts +104 -0
  117. package/dist/features/launch/development-launch.js +36 -0
  118. package/dist/features/launch/index.d.ts +12 -0
  119. package/dist/features/launch/index.js +6 -0
  120. package/dist/features/launch/intent.d.ts +12 -0
  121. package/dist/features/launch/intent.js +8 -0
  122. package/dist/features/launch/prepare-launch.d.ts +11 -0
  123. package/dist/features/launch/prepare-launch.js +14 -0
  124. package/dist/features/launch/profile-paths.d.ts +16 -0
  125. package/dist/features/launch/profile-paths.js +36 -0
  126. package/dist/features/launch/runtime-selection.d.ts +16 -0
  127. package/dist/features/launch/runtime-selection.js +13 -0
  128. package/dist/features/owned-ui/index.d.ts +9 -0
  129. package/dist/features/owned-ui/index.js +6 -0
  130. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  131. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  132. package/dist/features/owned-ui/reference-routes.d.ts +6 -0
  133. package/dist/features/owned-ui/reference-routes.js +6 -0
  134. package/dist/features/owned-ui/reference-screen-app.d.ts +37 -0
  135. package/dist/features/owned-ui/reference-screen-app.js +232 -0
  136. package/dist/features/owned-ui/run.d.ts +17 -0
  137. package/dist/features/owned-ui/run.js +64 -0
  138. package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
  139. package/dist/features/owned-ui/session-fork-prompt.js +34 -0
  140. package/dist/features/owned-ui/settings-app.d.ts +21 -0
  141. package/dist/features/owned-ui/settings-app.js +802 -0
  142. package/dist/features/owned-ui/settings-route.d.ts +2 -0
  143. package/dist/features/owned-ui/settings-route.js +2 -0
  144. package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
  145. package/dist/features/prompt-history/image-sidecar.js +130 -0
  146. package/dist/features/prompt-history/index.d.ts +4 -0
  147. package/dist/features/prompt-history/index.js +3 -0
  148. package/dist/features/prompt-history/paths.d.ts +5 -0
  149. package/dist/features/prompt-history/paths.js +17 -0
  150. package/dist/features/prompt-history/service.d.ts +54 -0
  151. package/dist/features/prompt-history/service.js +425 -0
  152. package/dist/features/prompt-history/store.d.ts +16 -0
  153. package/dist/features/prompt-history/store.js +219 -0
  154. package/dist/features/prompt-history/worker.d.ts +9 -0
  155. package/dist/features/prompt-history/worker.js +45 -0
  156. package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
  157. package/dist/features/prompt-suggestions/diagnostics.js +82 -0
  158. package/dist/features/prompt-suggestions/index.d.ts +2 -0
  159. package/dist/features/prompt-suggestions/index.js +1 -0
  160. package/dist/foundation/launch-context/index.d.ts +59 -0
  161. package/dist/foundation/launch-context/index.js +136 -0
  162. package/dist/foundation/launch-guardian/index.d.ts +2 -0
  163. package/dist/foundation/launch-guardian/index.js +1 -0
  164. package/dist/foundation/launch-guardian/main.d.ts +33 -0
  165. package/dist/foundation/launch-guardian/main.js +180 -0
  166. package/dist/foundation/lifecycle/commands.js +1 -0
  167. package/dist/foundation/lifecycle/index.d.ts +11 -0
  168. package/dist/foundation/lifecycle/index.js +5 -0
  169. package/dist/foundation/lifecycle/model.d.ts +64 -0
  170. package/dist/foundation/lifecycle/model.js +40 -0
  171. package/dist/foundation/lifecycle/paths.d.ts +30 -0
  172. package/dist/foundation/lifecycle/paths.js +70 -0
  173. package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
  174. package/dist/foundation/lifecycle/session-selection.js +39 -0
  175. package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
  176. package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
  177. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
  178. package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
  179. package/dist/foundation/process-containment/index.d.ts +8 -0
  180. package/dist/foundation/process-containment/index.js +6 -0
  181. package/dist/foundation/process-containment/linux-process-inspector.d.ts +7 -0
  182. package/dist/foundation/process-containment/linux-process-inspector.js +27 -0
  183. package/dist/foundation/process-containment/native-guardian-containment.d.ts +17 -0
  184. package/dist/foundation/process-containment/native-guardian-containment.js +140 -0
  185. package/dist/foundation/process-containment/windows-process-inspector.d.ts +19 -0
  186. package/dist/foundation/process-containment/windows-process-inspector.js +56 -0
  187. package/dist/foundation/protocol/client.d.ts +18 -0
  188. package/dist/foundation/protocol/client.js +130 -0
  189. package/dist/foundation/protocol/index.d.ts +3 -0
  190. package/dist/foundation/protocol/index.js +2 -0
  191. package/dist/foundation/protocol/messages.d.ts +90 -0
  192. package/dist/foundation/protocol/messages.js +100 -0
  193. package/dist/foundation/release/bootstrap.d.ts +51 -0
  194. package/dist/foundation/release/bootstrap.js +427 -0
  195. package/dist/foundation/release/cohort-state.d.ts +157 -0
  196. package/dist/foundation/release/cohort-state.js +472 -0
  197. package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
  198. package/dist/foundation/release/dependency-certification-retention.js +88 -0
  199. package/dist/foundation/release/dependency-certification.d.ts +24 -0
  200. package/dist/foundation/release/dependency-certification.js +266 -0
  201. package/dist/foundation/release/dependency-layer.d.ts +78 -0
  202. package/dist/foundation/release/dependency-layer.js +466 -0
  203. package/dist/foundation/release/endpoints.d.ts +24 -0
  204. package/dist/foundation/release/endpoints.js +134 -0
  205. package/dist/foundation/release/immutable-platform.d.ts +6 -0
  206. package/dist/foundation/release/immutable-platform.js +13 -0
  207. package/dist/foundation/release/index.d.ts +32 -0
  208. package/dist/foundation/release/index.js +17 -0
  209. package/dist/foundation/release/release-gc.d.ts +71 -0
  210. package/dist/foundation/release/release-gc.js +764 -0
  211. package/dist/foundation/release/release-store.d.ts +49 -0
  212. package/dist/foundation/release/release-store.js +235 -0
  213. package/dist/foundation/release/release.d.ts +43 -0
  214. package/dist/foundation/release/release.js +215 -0
  215. package/dist/foundation/release/restart-certification.d.ts +68 -0
  216. package/dist/foundation/release/restart-certification.js +227 -0
  217. package/dist/foundation/release/types.d.ts +11 -0
  218. package/dist/foundation/release/types.js +1 -0
  219. package/dist/foundation/release/update-activation.d.ts +72 -0
  220. package/dist/foundation/release/update-activation.js +204 -0
  221. package/dist/foundation/release/update-launch.d.ts +6 -0
  222. package/dist/foundation/release/update-launch.js +17 -0
  223. package/dist/foundation/release/update-recovery.d.ts +76 -0
  224. package/dist/foundation/release/update-recovery.js +356 -0
  225. package/dist/foundation/release/update-transaction.d.ts +42 -0
  226. package/dist/foundation/release/update-transaction.js +101 -0
  227. package/dist/foundation/release/update.d.ts +114 -0
  228. package/dist/foundation/release/update.js +633 -0
  229. package/dist/foundation/release/warmup.d.ts +3 -0
  230. package/dist/foundation/release/warmup.js +47 -0
  231. package/dist/foundation/startup/index.d.ts +4 -0
  232. package/dist/foundation/startup/index.js +2 -0
  233. package/dist/foundation/startup/startup-budget.d.ts +46 -0
  234. package/dist/foundation/startup/startup-budget.js +42 -0
  235. package/dist/foundation/startup/startup-descriptor.js +34 -0
  236. package/dist/foundation/startup/startup-runtime.d.ts +27 -0
  237. package/dist/foundation/startup/startup-runtime.js +128 -0
  238. package/dist/foundation/storage/control-store.d.ts +18 -0
  239. package/dist/foundation/storage/control-store.js +342 -0
  240. package/dist/foundation/storage/index.d.ts +1 -0
  241. package/dist/foundation/storage/index.js +1 -0
  242. package/dist/foundation/supervision/index.d.ts +3 -0
  243. package/dist/foundation/supervision/index.js +3 -0
  244. package/dist/foundation/supervision/main.d.ts +1 -0
  245. package/dist/foundation/supervision/main.js +84 -0
  246. package/dist/foundation/supervision/paths.d.ts +1 -0
  247. package/dist/foundation/supervision/paths.js +1 -0
  248. package/dist/foundation/supervision/server.d.ts +46 -0
  249. package/dist/foundation/supervision/server.js +573 -0
  250. package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
  251. package/dist/foundation/terminal-cleanup/fatal-exit.js +87 -0
  252. package/dist/foundation/terminal-cleanup/index.d.ts +3 -0
  253. package/dist/foundation/terminal-cleanup/index.js +2 -0
  254. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
  255. package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
  256. package/dist/integrations/pi/components/components.d.ts +4 -0
  257. package/dist/integrations/pi/components/components.js +64 -0
  258. package/dist/integrations/pi/components/conformance.d.ts +18 -0
  259. package/dist/integrations/pi/components/conformance.js +70 -0
  260. package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
  261. package/dist/integrations/pi/components/editor-interaction.js +1 -0
  262. package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
  263. package/dist/integrations/pi/components/history-editor-loader.js +5 -0
  264. package/dist/integrations/pi/components/index.d.ts +23 -0
  265. package/dist/integrations/pi/components/index.js +14 -0
  266. package/dist/integrations/pi/components/models-dialog.d.ts +55 -0
  267. package/dist/integrations/pi/components/models-dialog.js +310 -0
  268. package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
  269. package/dist/integrations/pi/components/owned-editor-ux.js +1094 -0
  270. package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
  271. package/dist/integrations/pi/components/path-word-ranges.js +37 -0
  272. package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
  273. package/dist/integrations/pi/components/prompt-input-port.js +1 -0
  274. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +167 -0
  275. package/dist/integrations/pi/components/resources/builtin-themes.js +168 -0
  276. package/dist/integrations/pi/components/shell-components.d.ts +7 -0
  277. package/dist/integrations/pi/components/shell-components.js +7 -0
  278. package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +21 -0
  279. package/dist/integrations/pi/components/shell-editor-autocomplete.js +322 -0
  280. package/dist/integrations/pi/components/shell-extension-ui.d.ts +35 -0
  281. package/dist/integrations/pi/components/shell-extension-ui.js +280 -0
  282. package/dist/integrations/pi/components/shell-footer-status.d.ts +7 -0
  283. package/dist/integrations/pi/components/shell-footer-status.js +249 -0
  284. package/dist/integrations/pi/components/shell-presenters-info.d.ts +53 -0
  285. package/dist/integrations/pi/components/shell-presenters-info.js +134 -0
  286. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
  287. package/dist/integrations/pi/components/shell-presenters-transcript.js +433 -0
  288. package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +133 -0
  289. package/dist/integrations/pi/components/shell-selectors-dialogs.js +255 -0
  290. package/dist/integrations/pi/components/shell-shared-facade.d.ts +225 -0
  291. package/dist/integrations/pi/components/shell-shared-facade.js +92 -0
  292. package/dist/integrations/pi/components/skills-command.d.ts +47 -0
  293. package/dist/integrations/pi/components/skills-command.js +118 -0
  294. package/dist/integrations/pi/components/skills-dialog.d.ts +9 -0
  295. package/dist/integrations/pi/components/skills-dialog.js +112 -0
  296. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +17 -0
  297. package/dist/integrations/pi/components/submitted-prompt-adapter.js +49 -0
  298. package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
  299. package/dist/integrations/pi/components/tool-image-presentation.js +83 -0
  300. package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
  301. package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
  302. package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
  303. package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
  304. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +445 -0
  305. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +370 -0
  306. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
  307. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +13 -0
  308. package/dist/integrations/pi/components/upstream/components/daxnuts.d.ts +29 -0
  309. package/dist/integrations/pi/components/upstream/components/daxnuts.js +146 -0
  310. package/dist/integrations/pi/components/upstream/components/earendil-announcement.d.ts +4 -0
  311. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +48 -0
  312. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +20 -0
  313. package/dist/integrations/pi/components/upstream/components/extension-editor.js +84 -0
  314. package/dist/integrations/pi/components/upstream/components/mermaid.js +81 -0
  315. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +52 -0
  316. package/dist/integrations/pi/components/upstream/components/owned-editor.js +222 -0
  317. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +59 -0
  318. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +346 -0
  319. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +11 -0
  320. package/dist/integrations/pi/components/upstream/components/session-footer.js +123 -0
  321. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +161 -0
  322. package/dist/integrations/pi/components/upstream/components/session-selector.d.ts +95 -0
  323. package/dist/integrations/pi/components/upstream/components/session-selector.js +893 -0
  324. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +21 -0
  325. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +46 -0
  326. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +35 -0
  327. package/dist/integrations/pi/components/upstream/components/status-indicator.js +69 -0
  328. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +67 -0
  329. package/dist/integrations/pi/components/upstream/components/tool-execution.js +365 -0
  330. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +101 -0
  331. package/dist/integrations/pi/components/upstream/components/tree-selector.js +1275 -0
  332. package/dist/integrations/pi/components/upstream/components/trust-selector.d.ts +33 -0
  333. package/dist/integrations/pi/components/upstream/components/trust-selector.js +81 -0
  334. package/dist/integrations/pi/components/upstream/external-editor.js +43 -0
  335. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +289 -0
  336. package/dist/integrations/pi/components/upstream/history/editor-core.js +2144 -0
  337. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +35 -0
  338. package/dist/integrations/pi/components/upstream/history/kill-ring.js +51 -0
  339. package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
  340. package/dist/integrations/pi/components/upstream/history/printable-key.js +43 -0
  341. package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +14 -0
  342. package/dist/integrations/pi/components/upstream/history/text-helpers.js +31 -0
  343. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +25 -0
  344. package/dist/integrations/pi/components/upstream/history/undo-stack.js +39 -0
  345. package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
  346. package/dist/integrations/pi/components/upstream/history/word-navigation.js +103 -0
  347. package/dist/integrations/pi/components/upstream/model-search.d.ts +18 -0
  348. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +33 -0
  349. package/dist/integrations/pi/components/upstream/theme/theme-controller.js +114 -0
  350. package/dist/integrations/pi/components/upstream/theme/theme.d.ts +61 -0
  351. package/dist/integrations/pi/components/upstream/theme/theme.js +337 -0
  352. package/dist/integrations/pi/engine/adapter.d.ts +139 -0
  353. package/dist/integrations/pi/engine/adapter.js +660 -0
  354. package/dist/integrations/pi/engine/changelog.d.ts +2 -0
  355. package/dist/integrations/pi/engine/changelog.js +63 -0
  356. package/dist/integrations/pi/engine/command-dispatch.d.ts +41 -0
  357. package/dist/integrations/pi/engine/command-dispatch.js +125 -0
  358. package/dist/integrations/pi/engine/compaction-progress.d.ts +28 -0
  359. package/dist/integrations/pi/engine/compaction-progress.js +96 -0
  360. package/dist/integrations/pi/engine/conformance.d.ts +39 -0
  361. package/dist/integrations/pi/engine/conformance.js +140 -0
  362. package/dist/integrations/pi/engine/event-delivery.d.ts +100 -0
  363. package/dist/integrations/pi/engine/event-delivery.js +184 -0
  364. package/dist/integrations/pi/engine/extension-ui-binding.d.ts +35 -0
  365. package/dist/integrations/pi/engine/extension-ui-binding.js +81 -0
  366. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  367. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  368. package/dist/integrations/pi/engine/index.d.ts +18 -0
  369. package/dist/integrations/pi/engine/index.js +10 -0
  370. package/dist/integrations/pi/engine/message-values.d.ts +29 -0
  371. package/dist/integrations/pi/engine/message-values.js +168 -0
  372. package/dist/integrations/pi/engine/package-integration.d.ts +13 -0
  373. package/dist/integrations/pi/engine/package-integration.js +118 -0
  374. package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
  375. package/dist/integrations/pi/engine/pending-delivery.js +156 -0
  376. package/dist/integrations/pi/engine/pi-settings-metadata.json +385 -0
  377. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  378. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  379. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +30 -0
  380. package/dist/integrations/pi/engine/prompt-suggestions.js +102 -0
  381. package/dist/integrations/pi/engine/provider-authentication.d.ts +34 -0
  382. package/dist/integrations/pi/engine/provider-authentication.js +209 -0
  383. package/dist/integrations/pi/engine/resource-catalog.d.ts +50 -0
  384. package/dist/integrations/pi/engine/resource-catalog.js +299 -0
  385. package/dist/integrations/pi/engine/resources/changelog.json +12 -0
  386. package/dist/integrations/pi/engine/runtime-integration.d.ts +53 -0
  387. package/dist/integrations/pi/engine/runtime-integration.js +118 -0
  388. package/dist/integrations/pi/engine/session-events.d.ts +48 -0
  389. package/dist/integrations/pi/engine/session-events.js +223 -0
  390. package/dist/integrations/pi/engine/session-integration.d.ts +67 -0
  391. package/dist/integrations/pi/engine/session-integration.js +195 -0
  392. package/dist/integrations/pi/engine/session-runtime.d.ts +84 -0
  393. package/dist/integrations/pi/engine/session-runtime.js +249 -0
  394. package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
  395. package/dist/integrations/pi/engine/session-selection.js +90 -0
  396. package/dist/integrations/pi/engine/settings-bridge.d.ts +121 -0
  397. package/dist/integrations/pi/engine/settings-bridge.js +514 -0
  398. package/dist/integrations/pi/engine/settings-metadata.d.ts +31 -0
  399. package/dist/integrations/pi/engine/settings-metadata.js +67 -0
  400. package/dist/integrations/pi/engine/settings-port.d.ts +42 -0
  401. package/dist/integrations/pi/engine/settings-port.js +353 -0
  402. package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
  403. package/dist/integrations/pi/engine/tool-rendering.js +145 -0
  404. package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
  405. package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
  406. package/dist/integrations/pi/engine/transcript-projection.d.ts +39 -0
  407. package/dist/integrations/pi/engine/transcript-projection.js +405 -0
  408. package/dist/integrations/pi/engine/usage-view.d.ts +4 -0
  409. package/dist/integrations/pi/engine/usage-view.js +56 -0
  410. package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
  411. package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
  412. package/dist/integrations/pi/engine/workflow-contexts.d.ts +66 -0
  413. package/dist/integrations/pi/engine/workflow-contexts.js +360 -0
  414. package/dist/integrations/pi/engine/workflow-runner.d.ts +60 -0
  415. package/dist/integrations/pi/engine/workflow-runner.js +533 -0
  416. package/dist/integrations/pi/engine/workflow-support.d.ts +33 -0
  417. package/dist/integrations/pi/engine/workflow-support.js +352 -0
  418. package/dist/integrations/pi/engine/workflows.d.ts +275 -0
  419. package/dist/integrations/pi/engine/workflows.js +71 -0
  420. package/dist/integrations/pi/startup-public.d.ts +2 -0
  421. package/dist/integrations/pi/startup-public.js +2223 -0
  422. package/dist/integrations/pi/startup-public.manifest.json +12502 -0
  423. package/dist/integrations/pi/tui-runtime/adapter.d.ts +56 -0
  424. package/dist/integrations/pi/tui-runtime/adapter.js +783 -0
  425. package/dist/integrations/pi/tui-runtime/contracts.d.ts +156 -0
  426. package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
  427. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +88 -0
  428. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +433 -0
  429. package/dist/integrations/pi/tui-runtime/index.d.ts +9 -0
  430. package/dist/integrations/pi/tui-runtime/index.js +5 -0
  431. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  432. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  433. package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +13 -0
  434. package/dist/integrations/pi/tui-runtime/mouse-report-input.js +57 -0
  435. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
  436. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +158 -0
  437. package/dist/integrations/pi/tui-runtime/presentation-adapter.d.ts +4 -0
  438. package/dist/integrations/pi/tui-runtime/presentation-adapter.js +48 -0
  439. package/dist/native/darwin-arm64/manifest.json +4 -4
  440. package/dist/native/darwin-arm64/process-guardian +0 -0
  441. package/dist/native/linux-x64/manifest.json +3 -3
  442. package/dist/native/linux-x64/process-guardian +0 -0
  443. package/dist/native/win32-x64/manifest.json +3 -3
  444. package/dist/native/win32-x64/process-guardian.exe +0 -0
  445. package/dist/product-identity.d.ts +37 -0
  446. package/dist/product-identity.js +119 -0
  447. package/dist/product-identity.json +85 -0
  448. package/dist/runtime-payload-inventory.json +127148 -0
  449. package/dist/ui/apps/contracts.d.ts +72 -0
  450. package/dist/ui/apps/host.d.ts +42 -0
  451. package/dist/ui/apps/host.js +156 -0
  452. package/dist/ui/apps/index.d.ts +5 -0
  453. package/dist/ui/apps/index.js +3 -0
  454. package/dist/ui/apps/registry.d.ts +12 -0
  455. package/dist/ui/apps/registry.js +33 -0
  456. package/dist/ui/components/dialog-panel.js +49 -0
  457. package/dist/ui/components/frame.d.ts +22 -0
  458. package/dist/ui/components/frame.js +55 -0
  459. package/dist/ui/components/index.d.ts +47 -0
  460. package/dist/ui/components/index.js +25 -0
  461. package/dist/ui/components/line-input.d.ts +68 -0
  462. package/dist/ui/components/line-input.js +224 -0
  463. package/dist/ui/components/list-view.d.ts +60 -0
  464. package/dist/ui/components/list-view.js +82 -0
  465. package/dist/ui/components/mouse.d.ts +25 -0
  466. package/dist/ui/components/mouse.js +70 -0
  467. package/dist/ui/components/progress-status.d.ts +2 -0
  468. package/dist/ui/components/progress-status.js +4 -0
  469. package/dist/ui/components/prompt-input.d.ts +32 -0
  470. package/dist/ui/components/prompt-input.js +51 -0
  471. package/dist/ui/components/scrollbar.d.ts +88 -0
  472. package/dist/ui/components/scrollbar.js +137 -0
  473. package/dist/ui/components/selection-copy.d.ts +24 -0
  474. package/dist/ui/components/selection-copy.js +39 -0
  475. package/dist/ui/components/shortcuts.d.ts +58 -0
  476. package/dist/ui/components/shortcuts.js +82 -0
  477. package/dist/ui/components/spans.d.ts +28 -0
  478. package/dist/ui/components/spans.js +266 -0
  479. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  480. package/dist/ui/components/submitted-prompt.js +50 -0
  481. package/dist/ui/components/surface.d.ts +20 -0
  482. package/dist/ui/components/surface.js +44 -0
  483. package/dist/ui/components/text-selection.d.ts +62 -0
  484. package/dist/ui/components/text-selection.js +210 -0
  485. package/dist/ui/components/text.d.ts +38 -0
  486. package/dist/ui/components/text.js +185 -0
  487. package/dist/ui/components/transcript-viewport.d.ts +173 -0
  488. package/dist/ui/components/transcript-viewport.js +753 -0
  489. package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
  490. package/dist/ui/components/visible-hyperlinks.js +97 -0
  491. package/dist/ui/settings/declarations.d.ts +127 -0
  492. package/dist/ui/settings/declarations.js +124 -0
  493. package/dist/ui/settings/index.d.ts +10 -0
  494. package/dist/ui/settings/index.js +5 -0
  495. package/dist/ui/settings/manager.d.ts +54 -0
  496. package/dist/ui/settings/manager.js +256 -0
  497. package/dist/ui/settings/migrations.d.ts +13 -0
  498. package/dist/ui/settings/migrations.js +92 -0
  499. package/dist/ui/settings/sections.d.ts +52 -0
  500. package/dist/ui/settings/sections.js +112 -0
  501. package/docs/architecture/boundaries.md +17 -13
  502. package/docs/architecture/code-documentation.md +77 -0
  503. package/docs/architecture/history-editor-provenance.md +100 -0
  504. package/docs/architecture/internal-naming.md +93 -0
  505. package/docs/architecture/process-guardian-provenance.md +3 -1
  506. package/docs/architecture/project-structure.md +69 -30
  507. package/docs/architecture/prompt-suggestions.md +68 -0
  508. package/docs/architecture/resource-and-data-policy.md +28 -2
  509. package/docs/architecture/response-copy-delivery.md +85 -0
  510. package/docs/architecture/terminal-host-proof-gate.md +1 -1
  511. package/docs/architecture/terminal-host-spike-evidence.md +1 -1
  512. package/docs/architecture/tool-image-presentation.md +62 -0
  513. package/docs/architecture/toolchain.md +32 -10
  514. package/docs/architecture/ui-reference-provenance.md +61 -6
  515. package/docs/ci-release-runbook.md +256 -79
  516. package/docs/features/launch-profiles.md +24 -17
  517. package/docs/features/modal-content-interaction.md +38 -0
  518. package/docs/features/prompt-history.md +149 -0
  519. package/docs/local-worktree-cleanup.md +212 -0
  520. package/docs/manual-code-streaming-cleanup.md +88 -0
  521. package/docs/manual-ghost-link-baseline.md +89 -0
  522. package/docs/manual-launch-instance-acceptance.md +12 -35
  523. package/docs/manual-owned-ui-checkpoint.md +79 -0
  524. package/docs/manual-pi-boundary-candidate.md +4 -5
  525. package/docs/manual-terminal-colour-check.md +4 -3
  526. package/docs/openspec-archive-automation.md +259 -0
  527. package/docs/repository-governance-live-acceptance.md +77 -0
  528. package/docs/validation.md +100 -0
  529. package/package.json +52 -34
  530. package/dist/src/cli/capabilities.d.ts +0 -15
  531. package/dist/src/cli/capabilities.js +0 -7
  532. package/dist/src/cli/dispatch.d.ts +0 -32
  533. package/dist/src/cli/dispatch.js +0 -142
  534. package/dist/src/cli/index.d.ts +0 -5
  535. package/dist/src/cli/index.js +0 -5
  536. package/dist/src/cli/packages.d.ts +0 -23
  537. package/dist/src/cli/packages.js +0 -84
  538. package/dist/src/cli/version-stats.d.ts +0 -16
  539. package/dist/src/cli/version-stats.js +0 -72
  540. package/dist/src/cli/version.d.ts +0 -2
  541. package/dist/src/cli/version.js +0 -23
  542. package/dist/src/composition/index.d.ts +0 -48
  543. package/dist/src/composition/index.js +0 -258
  544. package/dist/src/features/launch/development-launch.js +0 -28
  545. package/dist/src/features/launch/index.d.ts +0 -7
  546. package/dist/src/features/launch/index.js +0 -7
  547. package/dist/src/features/launch/intent.d.ts +0 -7
  548. package/dist/src/features/launch/intent.js +0 -4
  549. package/dist/src/features/launch/prepare-launch.d.ts +0 -13
  550. package/dist/src/features/launch/prepare-launch.js +0 -21
  551. package/dist/src/features/launch/profile-paths.d.ts +0 -15
  552. package/dist/src/features/launch/profile-paths.js +0 -31
  553. package/dist/src/features/launch/profiles.d.ts +0 -12
  554. package/dist/src/features/launch/profiles.js +0 -26
  555. package/dist/src/features/launch/runtime-selection.d.ts +0 -19
  556. package/dist/src/features/launch/runtime-selection.js +0 -13
  557. package/dist/src/features/owned-ui/customization.d.ts +0 -38
  558. package/dist/src/features/owned-ui/customization.js +0 -108
  559. package/dist/src/features/owned-ui/diagnostics.d.ts +0 -33
  560. package/dist/src/features/owned-ui/diagnostics.js +0 -94
  561. package/dist/src/features/owned-ui/index.d.ts +0 -4
  562. package/dist/src/features/owned-ui/index.js +0 -4
  563. package/dist/src/features/owned-ui/run.d.ts +0 -11
  564. package/dist/src/features/owned-ui/run.js +0 -15
  565. package/dist/src/features/owned-ui/settings-app.d.ts +0 -22
  566. package/dist/src/features/owned-ui/settings-app.js +0 -633
  567. package/dist/src/features/workspace/capabilities.d.ts +0 -31
  568. package/dist/src/features/workspace/capabilities.js +0 -75
  569. package/dist/src/features/workspace/index.d.ts +0 -6
  570. package/dist/src/features/workspace/index.js +0 -6
  571. package/dist/src/features/workspace/presentation.d.ts +0 -30
  572. package/dist/src/features/workspace/presentation.js +0 -70
  573. package/dist/src/features/workspace/reconciliation.d.ts +0 -15
  574. package/dist/src/features/workspace/reconciliation.js +0 -82
  575. package/dist/src/features/workspace/reducer.d.ts +0 -42
  576. package/dist/src/features/workspace/reducer.js +0 -213
  577. package/dist/src/features/workspace/router.d.ts +0 -31
  578. package/dist/src/features/workspace/router.js +0 -124
  579. package/dist/src/features/workspace/store.d.ts +0 -17
  580. package/dist/src/features/workspace/store.js +0 -54
  581. package/dist/src/foundation/agent-engine-contracts/capability-ports.d.ts +0 -95
  582. package/dist/src/foundation/agent-engine-contracts/domain-validation.js +0 -89
  583. package/dist/src/foundation/agent-engine-contracts/domain.d.ts +0 -116
  584. package/dist/src/foundation/agent-engine-contracts/index.d.ts +0 -8
  585. package/dist/src/foundation/agent-engine-contracts/index.js +0 -8
  586. package/dist/src/foundation/agent-engine-contracts/package-ports.d.ts +0 -54
  587. package/dist/src/foundation/launch-guardian/index.d.ts +0 -1
  588. package/dist/src/foundation/launch-guardian/index.js +0 -1
  589. package/dist/src/foundation/launch-guardian/main.d.ts +0 -31
  590. package/dist/src/foundation/launch-guardian/main.js +0 -165
  591. package/dist/src/foundation/lifecycle/index.d.ts +0 -4
  592. package/dist/src/foundation/lifecycle/index.js +0 -4
  593. package/dist/src/foundation/lifecycle/model.d.ts +0 -64
  594. package/dist/src/foundation/lifecycle/model.js +0 -40
  595. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  596. package/dist/src/foundation/lifecycle/paths.js +0 -42
  597. package/dist/src/foundation/native-host-protocol/codec.d.ts +0 -11
  598. package/dist/src/foundation/native-host-protocol/codec.js +0 -56
  599. package/dist/src/foundation/native-host-protocol/evidence.d.ts +0 -67
  600. package/dist/src/foundation/native-host-protocol/evidence.js +0 -141
  601. package/dist/src/foundation/native-host-protocol/index.d.ts +0 -4
  602. package/dist/src/foundation/native-host-protocol/index.js +0 -4
  603. package/dist/src/foundation/native-host-protocol/messages.d.ts +0 -56
  604. package/dist/src/foundation/native-host-protocol/messages.js +0 -149
  605. package/dist/src/foundation/native-host-protocol/proof-gate.d.ts +0 -13
  606. package/dist/src/foundation/native-host-protocol/proof-gate.js +0 -33
  607. package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts +0 -302
  608. package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
  609. package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
  610. package/dist/src/foundation/owned-ui-contracts/model.d.ts +0 -241
  611. package/dist/src/foundation/owned-ui-contracts/validation.d.ts +0 -11
  612. package/dist/src/foundation/owned-ui-contracts/validation.js +0 -395
  613. package/dist/src/foundation/owned-ui-settings/declarations.d.ts +0 -13
  614. package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
  615. package/dist/src/foundation/owned-ui-settings/index.d.ts +0 -6
  616. package/dist/src/foundation/owned-ui-settings/index.js +0 -6
  617. package/dist/src/foundation/owned-ui-settings/migrations.d.ts +0 -13
  618. package/dist/src/foundation/owned-ui-settings/migrations.js +0 -28
  619. package/dist/src/foundation/owned-ui-settings/sections.d.ts +0 -70
  620. package/dist/src/foundation/owned-ui-settings/sections.js +0 -93
  621. package/dist/src/foundation/owned-ui-settings/session.d.ts +0 -44
  622. package/dist/src/foundation/owned-ui-settings/session.js +0 -145
  623. package/dist/src/foundation/owned-ui-settings/store.d.ts +0 -28
  624. package/dist/src/foundation/owned-ui-settings/store.js +0 -90
  625. package/dist/src/foundation/pi-component-adapter/components.d.ts +0 -4
  626. package/dist/src/foundation/pi-component-adapter/components.js +0 -64
  627. package/dist/src/foundation/pi-component-adapter/conformance.d.ts +0 -17
  628. package/dist/src/foundation/pi-component-adapter/conformance.js +0 -69
  629. package/dist/src/foundation/pi-component-adapter/index.d.ts +0 -13
  630. package/dist/src/foundation/pi-component-adapter/index.js +0 -13
  631. package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.d.ts +0 -165
  632. package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.js +0 -166
  633. package/dist/src/foundation/pi-component-adapter/shell-components.d.ts +0 -6
  634. package/dist/src/foundation/pi-component-adapter/shell-components.js +0 -6
  635. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.d.ts +0 -11
  636. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
  637. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts +0 -35
  638. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js +0 -279
  639. package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts +0 -7
  640. package/dist/src/foundation/pi-component-adapter/shell-footer-status.js +0 -189
  641. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  642. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js +0 -429
  643. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts +0 -113
  644. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +0 -235
  645. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
  646. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js +0 -87
  647. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts +0 -422
  648. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js +0 -296
  649. package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts +0 -10
  650. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts +0 -17
  651. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js +0 -51
  652. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts +0 -22
  653. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js +0 -142
  654. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts +0 -4
  655. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
  656. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts +0 -17
  657. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js +0 -81
  658. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts +0 -24
  659. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js +0 -105
  660. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts +0 -2
  661. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js +0 -18
  662. package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js +0 -77
  663. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
  664. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
  665. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts +0 -55
  666. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js +0 -342
  667. package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.d.ts +0 -10
  668. package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.js +0 -120
  669. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js +0 -159
  670. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts +0 -95
  671. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js +0 -889
  672. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts +0 -19
  673. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js +0 -44
  674. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts +0 -30
  675. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js +0 -59
  676. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts +0 -98
  677. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js +0 -1272
  678. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts +0 -33
  679. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js +0 -76
  680. package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js +0 -39
  681. package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts +0 -15
  682. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts +0 -25
  683. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js +0 -117
  684. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts +0 -61
  685. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js +0 -326
  686. package/dist/src/foundation/pi-engine-adapter/adapter.d.ts +0 -164
  687. package/dist/src/foundation/pi-engine-adapter/adapter.js +0 -2367
  688. package/dist/src/foundation/pi-engine-adapter/conformance.d.ts +0 -37
  689. package/dist/src/foundation/pi-engine-adapter/conformance.js +0 -130
  690. package/dist/src/foundation/pi-engine-adapter/index.d.ts +0 -10
  691. package/dist/src/foundation/pi-engine-adapter/index.js +0 -10
  692. package/dist/src/foundation/pi-engine-adapter/model-auth-integration.d.ts +0 -30
  693. package/dist/src/foundation/pi-engine-adapter/model-auth-integration.js +0 -61
  694. package/dist/src/foundation/pi-engine-adapter/package-integration.d.ts +0 -13
  695. package/dist/src/foundation/pi-engine-adapter/package-integration.js +0 -112
  696. package/dist/src/foundation/pi-engine-adapter/pi-settings-metadata.json +0 -374
  697. package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.d.ts +0 -31
  698. package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.js +0 -80
  699. package/dist/src/foundation/pi-engine-adapter/runtime-integration.d.ts +0 -35
  700. package/dist/src/foundation/pi-engine-adapter/runtime-integration.js +0 -67
  701. package/dist/src/foundation/pi-engine-adapter/session-integration.d.ts +0 -43
  702. package/dist/src/foundation/pi-engine-adapter/session-integration.js +0 -97
  703. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  704. package/dist/src/foundation/pi-engine-adapter/settings-integration.js +0 -233
  705. package/dist/src/foundation/pi-engine-adapter/workflow-controllers.d.ts +0 -20
  706. package/dist/src/foundation/pi-engine-adapter/workflow-controllers.js +0 -48
  707. package/dist/src/foundation/pi-engine-adapter/workflows.d.ts +0 -173
  708. package/dist/src/foundation/pi-engine-adapter/workflows.js +0 -60
  709. package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
  710. package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
  711. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  712. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
  713. package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
  714. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts +0 -39
  715. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js +0 -493
  716. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts +0 -18
  717. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js +0 -145
  718. package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts +0 -120
  719. package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
  720. package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
  721. package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.d.ts +0 -4
  722. package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.js +0 -48
  723. package/dist/src/foundation/presentation-contracts/index.d.ts +0 -96
  724. package/dist/src/foundation/process-containment/index.d.ts +0 -5
  725. package/dist/src/foundation/process-containment/index.js +0 -5
  726. package/dist/src/foundation/process-containment/linux-process-inspector.d.ts +0 -6
  727. package/dist/src/foundation/process-containment/linux-process-inspector.js +0 -26
  728. package/dist/src/foundation/process-containment/native-guardian-containment.d.ts +0 -16
  729. package/dist/src/foundation/process-containment/native-guardian-containment.js +0 -139
  730. package/dist/src/foundation/process-containment/windows-process-inspector.d.ts +0 -17
  731. package/dist/src/foundation/process-containment/windows-process-inspector.js +0 -53
  732. package/dist/src/foundation/protocol/client.d.ts +0 -17
  733. package/dist/src/foundation/protocol/client.js +0 -129
  734. package/dist/src/foundation/protocol/index.d.ts +0 -2
  735. package/dist/src/foundation/protocol/index.js +0 -2
  736. package/dist/src/foundation/protocol/messages.d.ts +0 -89
  737. package/dist/src/foundation/protocol/messages.js +0 -99
  738. package/dist/src/foundation/release/bootstrap.d.ts +0 -29
  739. package/dist/src/foundation/release/bootstrap.js +0 -335
  740. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  741. package/dist/src/foundation/release/cohort-state.js +0 -202
  742. package/dist/src/foundation/release/index.d.ts +0 -10
  743. package/dist/src/foundation/release/index.js +0 -10
  744. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  745. package/dist/src/foundation/release/release-gc.js +0 -16
  746. package/dist/src/foundation/release/release-store.d.ts +0 -43
  747. package/dist/src/foundation/release/release-store.js +0 -175
  748. package/dist/src/foundation/release/release.d.ts +0 -38
  749. package/dist/src/foundation/release/release.js +0 -204
  750. package/dist/src/foundation/release/update-transaction.d.ts +0 -31
  751. package/dist/src/foundation/release/update-transaction.js +0 -89
  752. package/dist/src/foundation/release/update.d.ts +0 -82
  753. package/dist/src/foundation/release/update.js +0 -527
  754. package/dist/src/foundation/storage/control-store.d.ts +0 -61
  755. package/dist/src/foundation/storage/control-store.js +0 -530
  756. package/dist/src/foundation/storage/index.d.ts +0 -1
  757. package/dist/src/foundation/storage/index.js +0 -1
  758. package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts +0 -46
  759. package/dist/src/foundation/structured-agent-runtime/backpressure.js +0 -118
  760. package/dist/src/foundation/structured-agent-runtime/commands.d.ts +0 -52
  761. package/dist/src/foundation/structured-agent-runtime/commands.js +0 -164
  762. package/dist/src/foundation/structured-agent-runtime/handshake.d.ts +0 -41
  763. package/dist/src/foundation/structured-agent-runtime/handshake.js +0 -151
  764. package/dist/src/foundation/structured-agent-runtime/index.d.ts +0 -5
  765. package/dist/src/foundation/structured-agent-runtime/index.js +0 -5
  766. package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts +0 -37
  767. package/dist/src/foundation/structured-agent-runtime/reconnection.js +0 -129
  768. package/dist/src/foundation/structured-agent-runtime/state.d.ts +0 -56
  769. package/dist/src/foundation/structured-agent-runtime/state.js +0 -118
  770. package/dist/src/foundation/supervision/index.d.ts +0 -3
  771. package/dist/src/foundation/supervision/index.js +0 -3
  772. package/dist/src/foundation/supervision/main.d.ts +0 -1
  773. package/dist/src/foundation/supervision/main.js +0 -41
  774. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  775. package/dist/src/foundation/supervision/paths.js +0 -1
  776. package/dist/src/foundation/supervision/server.d.ts +0 -22
  777. package/dist/src/foundation/supervision/server.js +0 -451
  778. package/dist/src/foundation/ui-apps/contracts.d.ts +0 -42
  779. package/dist/src/foundation/ui-apps/host.d.ts +0 -42
  780. package/dist/src/foundation/ui-apps/host.js +0 -152
  781. package/dist/src/foundation/ui-apps/index.d.ts +0 -3
  782. package/dist/src/foundation/ui-apps/index.js +0 -3
  783. package/dist/src/foundation/ui-apps/registry.d.ts +0 -11
  784. package/dist/src/foundation/ui-apps/registry.js +0 -32
  785. package/dist/src/foundation/ui-components/dialog-panel.js +0 -47
  786. package/dist/src/foundation/ui-components/frame.d.ts +0 -21
  787. package/dist/src/foundation/ui-components/frame.js +0 -54
  788. package/dist/src/foundation/ui-components/index.d.ts +0 -18
  789. package/dist/src/foundation/ui-components/index.js +0 -18
  790. package/dist/src/foundation/ui-components/line-input.d.ts +0 -74
  791. package/dist/src/foundation/ui-components/line-input.js +0 -245
  792. package/dist/src/foundation/ui-components/list-view.d.ts +0 -66
  793. package/dist/src/foundation/ui-components/list-view.js +0 -76
  794. package/dist/src/foundation/ui-components/mouse.d.ts +0 -15
  795. package/dist/src/foundation/ui-components/mouse.js +0 -46
  796. package/dist/src/foundation/ui-components/scrollbar.d.ts +0 -62
  797. package/dist/src/foundation/ui-components/scrollbar.js +0 -102
  798. package/dist/src/foundation/ui-components/shortcuts.d.ts +0 -57
  799. package/dist/src/foundation/ui-components/shortcuts.js +0 -81
  800. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  801. package/dist/src/foundation/ui-components/spans.js +0 -59
  802. package/dist/src/foundation/ui-components/surface.d.ts +0 -20
  803. package/dist/src/foundation/ui-components/surface.js +0 -38
  804. package/dist/src/foundation/ui-components/text.d.ts +0 -24
  805. package/dist/src/foundation/ui-components/text.js +0 -123
  806. package/dist/src/foundation/workspace-contracts/index.d.ts +0 -2
  807. package/dist/src/foundation/workspace-contracts/index.js +0 -2
  808. package/dist/src/foundation/workspace-contracts/model.d.ts +0 -248
  809. package/dist/src/foundation/workspace-contracts/model.js +0 -2
  810. package/dist/src/foundation/workspace-contracts/validation.d.ts +0 -13
  811. package/dist/src/foundation/workspace-contracts/validation.js +0 -335
  812. package/dist/src/product-identity.d.ts +0 -37
  813. package/dist/src/product-identity.js +0 -150
  814. package/dist/src/product-identity.json +0 -99
  815. package/docs/manual-transparent-checkpoint.md +0 -53
  816. /package/dist/{src/foundation/agent-engine-contracts/domain.js → app/session-shell/paste-helper.d.ts} +0 -0
  817. /package/dist/{src/foundation/agent-engine-contracts/ports.js → app/session-shell/paste-text-worker.d.ts} +0 -0
  818. /package/dist/{src/foundation/lifecycle/commands.js → app/session-shell/paste-types.js} +0 -0
  819. /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → app/session-shell/response-copy-helper.d.ts} +0 -0
  820. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  821. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  822. /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → contracts/agent-engine/domain.js} +0 -0
  823. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  824. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  825. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  826. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  827. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  828. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  829. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  830. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  831. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  832. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  833. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  834. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  835. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  836. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  837. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  838. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  839. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  840. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  841. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  842. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  843. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  844. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  845. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  846. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  847. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  848. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  849. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  850. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  851. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  852. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  853. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  854. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  855. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  856. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  857. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  858. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  859. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  860. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  861. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  862. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  863. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  864. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  865. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  866. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  867. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  868. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  869. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  870. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  871. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  872. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  873. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  874. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  875. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  876. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  877. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  878. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  879. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  880. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
@@ -0,0 +1,633 @@
1
+ import { spawn } from "node:child_process";
2
+ import { access, readFile, realpath } from "node:fs/promises";
3
+ import { connect } from "node:net";
4
+ import { isAbsolute, relative, resolve, sep } from "node:path";
5
+ import crossSpawn from "cross-spawn";
6
+ import { valid as validSemver } from "semver";
7
+ import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
8
+ import { certifyMaterializedRelease, ensureSupervisor, waitForProcessExit, } from "./bootstrap.js";
9
+ import { probeOwnership, readEndpointMetadata, removeEndpointArtifacts } from "./endpoints.js";
10
+ import { resolveCohortEndpoint, resolveProductPaths } from "../lifecycle/index.js";
11
+ import { encodeFrame, LineFrameDecoder } from "../protocol/index.js";
12
+ import { CohortStateStore } from "./cohort-state.js";
13
+ import { cleanupVerifiedOwner, processIsAlive } from "./process-cleanup.js";
14
+ import { materializeRelease, readMaterializedRelease } from "./release-store.js";
15
+ import { scheduleReleaseCleanup } from "./release-gc.js";
16
+ import { UPDATE_ACTIVATION_CONTRACT, activateInstalledRelease, delegateActivation, readActivationContracts, } from "./update-activation.js";
17
+ import { UpdateTransactionStore } from "./update-transaction.js";
18
+ import { removeUpdateRecoveryCapsule, runProtectedPackageReplacement } from "./update-recovery.js";
19
+ export const PRODUCT_PACKAGE = PRODUCT_TEXT.packageName;
20
+ const UPDATE_DIST_TAGS = { stable: "latest", next: "next" };
21
+ const defaultFileSystem = {
22
+ async readFile(path) { return await readFile(path, "utf8"); },
23
+ realpath,
24
+ access,
25
+ };
26
+ const defaultOutput = {
27
+ stdout(message) { process.stdout.write(message); },
28
+ stderr(message) { process.stderr.write(message); },
29
+ };
30
+ /** Bound on the child diagnostics an update keeps: enough for npm's failure reason, never a log. */
31
+ export const CHILD_DIAGNOSTIC_LIMIT = 8_000;
32
+ export function createNpmProcessRunner(platform = process.platform) {
33
+ return async (command, arguments_, request) => await new Promise((resolvePromise, rejectPromise) => {
34
+ // Invariant: no child of the updater shares the terminal. The progress bar is the only
35
+ // live output; a child's own text is kept, bounded, and shown with a failure or not at all.
36
+ const stdio = ["ignore", request.captureStdout ? "pipe" : "ignore", "pipe"];
37
+ const child = platform === "win32" ? crossSpawn(command, [...arguments_], { stdio }) : spawn(command, [...arguments_], { stdio });
38
+ const stdout = [];
39
+ let stderr = "";
40
+ child.stdout?.on("data", chunk => stdout.push(Buffer.from(chunk)));
41
+ child.stderr?.setEncoding("utf8");
42
+ child.stderr?.on("data", chunk => { stderr = `${stderr}${chunk}`.slice(-CHILD_DIAGNOSTIC_LIMIT); });
43
+ let settled = false;
44
+ child.once("error", error => { if (!settled) {
45
+ settled = true;
46
+ rejectPromise(error);
47
+ } });
48
+ child.once("close", code => { if (!settled) {
49
+ settled = true;
50
+ resolvePromise({ code, stdout: Buffer.concat(stdout).toString("utf8"), stderr });
51
+ } });
52
+ });
53
+ }
54
+ /**
55
+ * What an update does about the owner it found. A cohort running from retained immutable
56
+ * content keeps its work: the installation replaces files it does not read, and it listens on
57
+ * its own endpoint. A cohort running from the mutable installation is the one exception,
58
+ * because that installation is exactly what is about to be replaced under it.
59
+ */
60
+ export function planUpdateOwnership(ownership, runsFromRetainedRelease) {
61
+ if (ownership === "dead")
62
+ return "clean-dead-record";
63
+ return runsFromRetainedRelease ? "leave-running" : "end-session";
64
+ }
65
+ /**
66
+ * The endpoint of the active cohort, together with where it is recorded, so a caller that
67
+ * finds it can also clean it up. A release that predates cohort-scoped endpoints published
68
+ * one endpoint for the runtime directory, and that one is recognized too.
69
+ */
70
+ async function readActiveEndpoint(paths, activeReleaseId, environment) {
71
+ if (activeReleaseId !== null) {
72
+ const cohort = resolveCohortEndpoint(paths, activeReleaseId, environment);
73
+ const metadata = await readEndpointMetadata(cohort.endpointMetadataPath);
74
+ if (metadata)
75
+ return { metadata, paths: cohort };
76
+ }
77
+ const legacyPaths = { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath };
78
+ const legacy = await readEndpointMetadata(legacyPaths.endpointMetadataPath);
79
+ return legacy ? { metadata: legacy, paths: legacyPaths } : null;
80
+ }
81
+ export function createUpdateLifecycleCoordinator(environment = process.env, fileSystem = defaultFileSystem, output = defaultOutput) {
82
+ const paths = resolveProductPaths(environment);
83
+ const stateStore = new CohortStateStore(paths.dataDir);
84
+ return {
85
+ async targetIsActive(targetVersion) {
86
+ const state = await stateStore.read();
87
+ const activeId = state.references.active;
88
+ if (!activeId || state.releases[activeId]?.packageVersion !== targetVersion)
89
+ return false;
90
+ const endpoint = await readActiveEndpoint(paths, activeId, environment);
91
+ return endpoint?.metadata.releaseId === activeId && await probeOwnership(endpoint.metadata) === "live-verified";
92
+ },
93
+ async shutdownVerifiedOwners(targetVersion) {
94
+ const state = await stateStore.read();
95
+ const activeId = state.references.active;
96
+ const priorActiveVersion = activeId ? state.releases[activeId]?.packageVersion ?? null : null;
97
+ const owner = await readActiveEndpoint(paths, activeId, environment);
98
+ if (!owner)
99
+ return { priorActiveVersion };
100
+ const endpoint = owner.metadata;
101
+ const ownership = await probeOwnership(endpoint);
102
+ if (ownership !== "live-verified" && ownership !== "dead") {
103
+ throw new Error(PRODUCT_TEXT.diagnostic(`refused update shutdown because supervisor ownership is ${ownership}`));
104
+ }
105
+ const plan = planUpdateOwnership(ownership, await canonicalImmutableRoot(paths.dataDir, endpoint.releaseRoot));
106
+ if (plan === "clean-dead-record") {
107
+ await removeEndpointArtifacts(owner.paths.endpointMetadataPath, owner.paths.endpoint);
108
+ return { priorActiveVersion };
109
+ }
110
+ // Rationale: leaving sessions alone is the expected outcome, and saying so mid-update tears
111
+ // the progress bar; only ending a session (below) is worth interrupting it for.
112
+ if (plan === "leave-running")
113
+ return { priorActiveVersion };
114
+ // Rationale: say whose work is ending before it ends.
115
+ const live = endpoint.ownership.liveInstanceIds.length;
116
+ if (live > 0) {
117
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`ending ${live === 1 ? "one session" : `${live} sessions`} that run from the installation being replaced; a session started by an installed release would have been left alone.`)}\n`);
118
+ }
119
+ const identity = await requestUpdateShutdown(endpoint, targetVersion, 2_000);
120
+ if (!identity.accepted && processIsAlive(endpoint.pid)) {
121
+ // Security: explicit update consent permits bounded cleanup of an authenticated
122
+ // older owner that predates the update-shutdown message.
123
+ const cleanup = await cleanupVerifiedOwner(endpoint, { allowLiveInstances: true, reason: "legacy-mutable-install" });
124
+ if (!cleanup.terminated)
125
+ throw new Error(`verified ${PRODUCT_TEXT.displayName} owner ${endpoint.pid} rejected shutdown and could not be terminated: ${identity.reason}`);
126
+ }
127
+ else if (identity.accepted) {
128
+ await waitForProcessExit(endpoint.pid, 3_000).catch(async () => {
129
+ const cleanup = await cleanupVerifiedOwner(endpoint, { allowLiveInstances: true, reason: "legacy-mutable-install" });
130
+ if (!cleanup.terminated)
131
+ throw new Error(`verified ${PRODUCT_TEXT.displayName} owner ${endpoint.pid} did not terminate`);
132
+ });
133
+ }
134
+ await removeEndpointArtifacts(owner.paths.endpointMetadataPath, owner.paths.endpoint);
135
+ return { priorActiveVersion };
136
+ },
137
+ async verifyPackageUnlocked(packageRoot) {
138
+ if (fileSystem.access)
139
+ await fileSystem.access(packageRoot);
140
+ const probe = `${packageRoot}.${PRODUCT_IDENTITY.filesystem.slug}-unlock-probe`;
141
+ const { rename } = await import("node:fs/promises");
142
+ try {
143
+ await rename(packageRoot, probe);
144
+ await rename(probe, packageRoot);
145
+ }
146
+ catch (error) {
147
+ // Invariant: best-effort rollback runs if the first rename succeeded and the second did not.
148
+ await rename(probe, packageRoot).catch(() => { });
149
+ throw new Error(PRODUCT_TEXT.diagnostic(`package remains locked after verified shutdown: ${errorMessage(error)}`));
150
+ }
151
+ },
152
+ async activateInstalled(packageRoot, targetVersion, phase, onMaterializing, onWarmup) {
153
+ const request = { packageRoot, dataDir: paths.dataDir, targetVersion, environment };
154
+ const callbacks = {
155
+ phase,
156
+ ...(onMaterializing ? { onMaterializing } : {}),
157
+ ...(onWarmup ? { onWarmup } : {}),
158
+ };
159
+ // Compatibility: the tree npm just installed is newer than this updater, so its layout is
160
+ // its own to know. A tree that serves the contract activates itself with its own code;
161
+ // a tree from before the contract is activated here, with the layout it had then.
162
+ const contracts = await readActivationContracts(packageRoot, fileSystem.readFile);
163
+ if (contracts.includes(UPDATE_ACTIVATION_CONTRACT))
164
+ await delegateActivation(request, callbacks);
165
+ else
166
+ await activateInstalledRelease(request, callbacks);
167
+ },
168
+ };
169
+ }
170
+ const PROGRESS_BAR_WIDTH = 40;
171
+ const PROGRESS_TICK_MS = 200;
172
+ /**
173
+ * Copying the release owns 78–92 and is reported file by file, so the bar crosses
174
+ * that span with the work rather than parking at its start. What follows is short,
175
+ * which is why the remaining milestones sit close together.
176
+ */
177
+ const MATERIALIZE_PROGRESS = Object.freeze({ from: 78, to: 92 });
178
+ const ACTIVATION_PROGRESS = {
179
+ materialized: { at: 92, creepTo: 94 },
180
+ certified: { at: 94, creepTo: 96 },
181
+ "active-reference-committed": { at: 96, creepTo: 99 },
182
+ };
183
+ /** Renders the terminal-only update meter; the visual preview shares this exact frame. */
184
+ export function renderUpdateProgressBar(percent) {
185
+ const bounded = Math.min(100, Math.max(0, Math.round(percent)));
186
+ const filled = Math.round((bounded / 100) * PROGRESS_BAR_WIDTH);
187
+ // Rationale: the completed run uses A1's scrollbar-aligned teal, followed by a
188
+ // darker gray track and one gray space before the percentage. Explicit RGB
189
+ // keeps each color stable even when the terminal remaps its ANSI palette.
190
+ const completed = "\u001b[38;2;138;190;183m";
191
+ const gray = "\u001b[38;2;128;128;128m";
192
+ const track = "\u001b[38;2;102;102;102m";
193
+ return `${completed}${"━".repeat(filled)}${track}${"─".repeat(PROGRESS_BAR_WIDTH - filled)}${gray} ${bounded}%\u001b[39m`;
194
+ }
195
+ function createUpdateProgress(output, enabled) {
196
+ let visible = false;
197
+ let current = 0;
198
+ let shown = -1;
199
+ let timer = null;
200
+ const draw = () => {
201
+ const rounded = Math.round(current);
202
+ if (rounded === shown)
203
+ return;
204
+ shown = rounded;
205
+ visible = true;
206
+ output.stdout(`\r${renderUpdateProgressBar(rounded)}`);
207
+ };
208
+ const stopCreep = () => {
209
+ if (timer !== null) {
210
+ clearInterval(timer);
211
+ timer = null;
212
+ }
213
+ };
214
+ return {
215
+ set(percent, creepTo = percent) {
216
+ if (!enabled)
217
+ return;
218
+ stopCreep();
219
+ current = Math.max(current, percent);
220
+ shown = -1;
221
+ draw();
222
+ if (creepTo <= current)
223
+ return;
224
+ // Rationale: creep asymptotically toward (but never reach) the next milestone so
225
+ // long opaque phases such as npm install still show visible motion. The
226
+ // ceiling stays a whole point below the milestone: settling on `creepTo`
227
+ // itself would render as that milestone and make arriving at it invisible,
228
+ // which is what a stalled bar looks like.
229
+ timer = setInterval(() => {
230
+ current = Math.min(creepTo - 1, current + (creepTo - current) * 0.04);
231
+ draw();
232
+ }, PROGRESS_TICK_MS);
233
+ timer.unref?.();
234
+ },
235
+ // Rationale: the bar exists to say the update is still moving. Once it has finished
236
+ // there is a better line to occupy that row — the one naming what is now
237
+ // installed — so the bar gives the row back rather than leaving a full
238
+ // meter above a message that already implies it.
239
+ finish() {
240
+ stopCreep();
241
+ if (!visible)
242
+ return;
243
+ output.stdout(`\r${" ".repeat(PROGRESS_BAR_WIDTH + 6)}\r`);
244
+ visible = false;
245
+ shown = -1;
246
+ },
247
+ clear() {
248
+ stopCreep();
249
+ if (!visible)
250
+ return;
251
+ output.stdout(`\r${" ".repeat(PROGRESS_BAR_WIDTH + 6)}\r`);
252
+ visible = false;
253
+ shown = -1;
254
+ },
255
+ };
256
+ }
257
+ /** The newest version the channel points at, which is what an unqualified update takes. */
258
+ async function resolveChannelHead(runner, distTag, output) {
259
+ const publicChannel = distTag === "next" ? "development" : "release";
260
+ const lookup = await runNpm(runner, ["view", `${PRODUCT_PACKAGE}@${distTag}`, "version"], true, output, `query the npm ${publicChannel} channel`);
261
+ if (lookup.result === null)
262
+ return { version: null, exitCode: lookup.exitCode };
263
+ const version = validSemver(lookup.result.stdout.trim());
264
+ if (version === null) {
265
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`received a malformed ${publicChannel} channel version from npm: ${JSON.stringify(lookup.result.stdout.trim())}.`)}\n`);
266
+ return { version: null, exitCode: 1 };
267
+ }
268
+ return { version, exitCode: 0 };
269
+ }
270
+ /**
271
+ * Resolve a preview the caller named.
272
+ *
273
+ * A preview is published as `<version>-dev.<pull-request-number>`, so its decimal
274
+ * development number is enough to identify it. A full version is accepted too.
275
+ * The published list remains authoritative: nothing is constructed from the
276
+ * installed package's base version.
277
+ */
278
+ async function resolveRequestedPreview(runner, requested, output) {
279
+ const lookup = await runNpm(runner, ["view", PRODUCT_PACKAGE, "versions", "--json"], true, output, "list the published versions");
280
+ if (lookup.result === null)
281
+ return { version: null, exitCode: lookup.exitCode };
282
+ let published;
283
+ try {
284
+ published = JSON.parse(lookup.result.stdout.trim() || "[]");
285
+ }
286
+ catch {
287
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`received a malformed version list from npm: ${JSON.stringify(lookup.result.stdout.trim())}.`)}\n`);
288
+ return { version: null, exitCode: 1 };
289
+ }
290
+ const versions = (Array.isArray(published) ? published : [published]).filter((value) => typeof value === "string");
291
+ const exact = versions.find(version => version === requested);
292
+ if (exact !== undefined) {
293
+ // Rationale: naming a release here would install it through the preview path, which is a
294
+ // different command with a different meaning.
295
+ if (!exact.includes("-dev.")) {
296
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`${exact} is a release, not a preview; run ${PRODUCT_TEXT.commandName} update to move to the current release.`)}\n`);
297
+ return { version: null, exitCode: 1 };
298
+ }
299
+ return { version: exact, exitCode: 0 };
300
+ }
301
+ const matches = versions.filter(version => version.endsWith(`-dev.${requested}`));
302
+ if (matches.length === 1)
303
+ return { version: matches[0], exitCode: 0 };
304
+ if (matches.length > 1) {
305
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`found more than one preview for ${requested}: ${matches.join(", ")}. Name the version instead.`)}\n`);
306
+ return { version: null, exitCode: 1 };
307
+ }
308
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`published no preview for ${requested}.`)}\n`);
309
+ return { version: null, exitCode: 1 };
310
+ }
311
+ export async function runSelfUpdate(options) {
312
+ const fileSystem = options.fileSystem ?? defaultFileSystem;
313
+ const output = options.output ?? defaultOutput;
314
+ const runner = options.runner ?? createNpmProcessRunner();
315
+ const channel = options.channel ?? "stable";
316
+ const distTag = UPDATE_DIST_TAGS[channel];
317
+ const now = options.now ?? (() => performance.now());
318
+ const measure = async (phase, operation) => {
319
+ const startedAt = now();
320
+ try {
321
+ return await operation();
322
+ }
323
+ finally {
324
+ options.onPhaseTiming?.({ phase, durationMs: Math.max(0, now() - startedAt) });
325
+ }
326
+ };
327
+ let runningVersion;
328
+ try {
329
+ const packageJson = JSON.parse(await measure("package-version", async () => await fileSystem.readFile(resolve(options.packageRoot, "package.json"))));
330
+ const parsedVersion = typeof packageJson.version === "string" ? validSemver(packageJson.version) : null;
331
+ if (parsedVersion === null)
332
+ throw new Error("package.json does not contain a valid semantic version");
333
+ runningVersion = parsedVersion;
334
+ }
335
+ catch (error) {
336
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`could not read its running package version: ${errorMessage(error)}`)}\n`);
337
+ return 1;
338
+ }
339
+ const requested = options.target?.trim();
340
+ const resolved = await measure("target-resolution", async () => requested === undefined || requested.length === 0
341
+ ? await resolveChannelHead(runner, distTag, output)
342
+ : await resolveRequestedPreview(runner, requested, output));
343
+ if (resolved.version === null)
344
+ return resolved.exitCode;
345
+ const targetVersion = resolved.version;
346
+ // Rationale: no full stop after a version: it already ends in a dot-separated identifier,
347
+ // and a trailing one reads as part of the version rather than as punctuation.
348
+ output.stdout(`${PRODUCT_TEXT.commandName} update: ${runningVersion} → ${targetVersion}\n`);
349
+ const progress = createUpdateProgress(output, options.progress ?? (options.output === undefined && process.stdout.isTTY === true));
350
+ const rootLookup = await measure("global-root", async () => await runNpm(runner, ["root", "--global"], true, output, "resolve npm's global package root"));
351
+ if (rootLookup.result === null)
352
+ return rootLookup.exitCode;
353
+ if (rootLookup.result.stdout.trim().length === 0) {
354
+ output.stderr(`${PRODUCT_TEXT.diagnostic("could not verify its installation because npm returned an empty global package root.")}\n`);
355
+ return 1;
356
+ }
357
+ let packageRoot;
358
+ let globalRoot;
359
+ try {
360
+ [packageRoot, globalRoot] = await Promise.all([fileSystem.realpath(options.packageRoot), fileSystem.realpath(rootLookup.result.stdout.trim())]);
361
+ }
362
+ catch (error) {
363
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`could not canonicalize the running and global npm paths: ${errorMessage(error)}`)}\n`);
364
+ return 1;
365
+ }
366
+ if (!isContainedBy(globalRoot, packageRoot)) {
367
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`refused to update automatically because ${packageRoot} is not managed beneath npm's global package root ${globalRoot}.`)}\n`);
368
+ return 1;
369
+ }
370
+ const environment = options.environment ?? process.env;
371
+ const paths = resolveProductPaths(environment);
372
+ const lifecycle = options.lifecycle ?? createUpdateLifecycleCoordinator(environment, fileSystem, output);
373
+ const transactionStore = options.transactionStore ?? new UpdateTransactionStore(paths.dataDir);
374
+ const maintenance = options.maintenance ?? (options.lifecycle
375
+ ? async () => { }
376
+ : async () => await scheduleReleaseCleanup(paths.dataDir, paths));
377
+ let transaction = await transactionStore.read();
378
+ try {
379
+ if ((!transaction || transaction.status === "completed") && await lifecycle.targetIsActive(targetVersion)) {
380
+ await maintenance();
381
+ await transactionStore.clearCompleted();
382
+ output.stdout(`${PRODUCT_TEXT.commandName} is up to date — no update needed.\n`);
383
+ return 0;
384
+ }
385
+ // Rationale: the bar first appears here so a no-change run never flashes it.
386
+ progress.set(3, 15);
387
+ const cohortStore = new CohortStateStore(paths.dataDir);
388
+ let cohortState = await cohortStore.read();
389
+ let priorActiveReleaseId = cohortState.references.active;
390
+ if (options.runner === undefined && (priorActiveReleaseId === null || cohortState.releases[priorActiveReleaseId]?.approval !== "approved")) {
391
+ // Invariant: protected replacement needs an immutable launch authority that npm cannot rename.
392
+ const recoveryRelease = await materializeRelease(packageRoot, paths.dataDir);
393
+ await cohortStore.recordCandidate(recoveryRelease);
394
+ const diagnostics = await certifyMaterializedRelease(recoveryRelease, paths.dataDir);
395
+ await cohortStore.approve(recoveryRelease.releaseId, diagnostics);
396
+ await cohortStore.activate(recoveryRelease.releaseId);
397
+ cohortState = await cohortStore.read();
398
+ priorActiveReleaseId = recoveryRelease.releaseId;
399
+ }
400
+ transaction = await transactionStore.begin({
401
+ channel,
402
+ targetVersion,
403
+ packageRoot,
404
+ priorActiveReleaseId,
405
+ });
406
+ if (phaseBefore(transaction.phase, "ownership-released")) {
407
+ await measure("ownership-release", async () => {
408
+ await lifecycle.shutdownVerifiedOwners(targetVersion);
409
+ await lifecycle.verifyPackageUnlocked(packageRoot);
410
+ });
411
+ transaction = await transactionStore.advance("ownership-released");
412
+ }
413
+ progress.set(15, 70);
414
+ if (phaseBefore(transaction.phase, "package-installed")) {
415
+ if (options.packageReplacement || options.runner === undefined) {
416
+ const priorReleaseId = transaction.priorActiveReleaseId ?? priorActiveReleaseId;
417
+ const recordedPrior = priorReleaseId === null ? undefined : cohortState.releases[priorReleaseId];
418
+ if ((!recordedPrior || recordedPrior.approval !== "approved") && !options.packageReplacement) {
419
+ throw new Error(PRODUCT_TEXT.diagnostic("cannot protect package replacement because no approved prior release is available"));
420
+ }
421
+ const priorRelease = recordedPrior ?? {
422
+ releaseId: priorReleaseId ?? "injected-prior-release",
423
+ releaseRoot: packageRoot,
424
+ contentDigest: "0".repeat(64),
425
+ };
426
+ const replacementTransaction = transaction;
427
+ const replacement = await measure("npm-install", async () => await (options.packageReplacement ?? runProtectedPackageReplacement)({
428
+ dataDir: paths.dataDir,
429
+ globalRoot,
430
+ packageRoot,
431
+ transaction: replacementTransaction,
432
+ priorRelease,
433
+ output,
434
+ environment,
435
+ onRecoveryState: async (recovery) => {
436
+ if (transactionStore.setRecovery)
437
+ transaction = await transactionStore.setRecovery(recovery) ?? transaction;
438
+ },
439
+ }));
440
+ // Rationale: npm's own text explains a failed replacement and says nothing about a
441
+ // successful one, so it reaches the terminal only when the installation did not happen.
442
+ if (replacement.outcome !== "installed")
443
+ reportChildDiagnostics(output, replacement);
444
+ if (replacement.outcome === "installed")
445
+ transaction = await transactionStore.advance("package-installed");
446
+ if (replacement.cancelled) {
447
+ progress.clear();
448
+ output.stderr(`${PRODUCT_TEXT.diagnostic("update cancelled safely; the launcher is available and the transaction can be resumed.")}\n`);
449
+ return 130;
450
+ }
451
+ if (replacement.outcome !== "installed") {
452
+ throw new UpdateFailure(unsuccessfulCode(replacement.npmExitCode), `npm exited with status ${formatExitCode(replacement.npmExitCode)}`);
453
+ }
454
+ }
455
+ else {
456
+ const installation = await measure("npm-install", async () => await runNpm(runner, ["install", "--global", "--loglevel=error", "--no-fund", "--no-audit", `${PRODUCT_PACKAGE}@${targetVersion}`], true, output, "start the global npm installation", false));
457
+ if (installation.result === null)
458
+ throw new UpdateFailure(installation.exitCode, "npm process failed");
459
+ if (installation.result.code !== 0) {
460
+ reportChildDiagnostics(output, installation.result);
461
+ throw new UpdateFailure(unsuccessfulCode(installation.result.code), `npm exited with status ${formatExitCode(installation.result.code)}`);
462
+ }
463
+ transaction = await transactionStore.advance("package-installed");
464
+ }
465
+ }
466
+ progress.set(70, 75);
467
+ // Concurrency: ownership can be reacquired after an interrupted installation (for
468
+ // example, if bare A1 is launched before the update is resumed). Recheck
469
+ // immediately before activation so recovery cannot start a second cohort.
470
+ await measure("ownership-release", async () => { await lifecycle.shutdownVerifiedOwners(targetVersion); });
471
+ progress.set(75, MATERIALIZE_PROGRESS.from);
472
+ let activationPhaseStartedAt = now();
473
+ await lifecycle.activateInstalled(packageRoot, targetVersion, async (phase) => {
474
+ options.onPhaseTiming?.({ phase, durationMs: Math.max(0, now() - activationPhaseStartedAt) });
475
+ transaction = await transactionStore.advance(phase);
476
+ progress.set(ACTIVATION_PROGRESS[phase].at, ACTIVATION_PROGRESS[phase].creepTo);
477
+ activationPhaseStartedAt = now();
478
+ }, ({ completed, total }) => {
479
+ const span = MATERIALIZE_PROGRESS.to - MATERIALIZE_PROGRESS.from;
480
+ const done = total > 0 ? Math.min(1, completed / total) : 0;
481
+ progress.set(MATERIALIZE_PROGRESS.from + span * done);
482
+ }, state => {
483
+ if (state === "started") {
484
+ activationPhaseStartedAt = now();
485
+ progress.set(98, 99);
486
+ }
487
+ else {
488
+ options.onPhaseTiming?.({ phase: "warmup", durationMs: Math.max(0, now() - activationPhaseStartedAt) });
489
+ activationPhaseStartedAt = now();
490
+ progress.set(99);
491
+ }
492
+ });
493
+ options.onPhaseTiming?.({ phase: "supervisor-verified", durationMs: Math.max(0, now() - activationPhaseStartedAt) });
494
+ const transactionStartedAt = now();
495
+ await transactionStore.advance("supervisor-verified");
496
+ if (transaction.recovery?.capsulePath)
497
+ await removeUpdateRecoveryCapsule(paths.dataDir, transaction.transactionId);
498
+ // Invariant: successful output follows the durable cleanup disposition. Slow recursive
499
+ // removal belongs to the detached worker started by this maintenance coordinator.
500
+ await maintenance();
501
+ // Concurrency: this is the launch cutover. No failure-prone update work follows success.
502
+ await transactionStore.finish("completed");
503
+ await transactionStore.clearCompleted().catch(() => undefined);
504
+ options.onPhaseTiming?.({ phase: "transaction-complete", durationMs: Math.max(0, now() - transactionStartedAt) });
505
+ progress.finish();
506
+ output.stdout(`${PRODUCT_TEXT.commandName} updated successfully to ${targetVersion}\n`);
507
+ return 0;
508
+ }
509
+ catch (error) {
510
+ progress.clear();
511
+ const message = errorMessage(error);
512
+ const rollback = options.lifecycle
513
+ ? "previous test lifecycle retained"
514
+ : await rollbackPriorCohort(paths.dataDir, environment, transaction?.priorActiveReleaseId ?? null).catch(rollbackError => `rollback failed: ${errorMessage(rollbackError)}`);
515
+ if (transaction)
516
+ await transactionStore.finish(rollback === "rolled back" ? "rolled-back" : "failed", `${message}; ${rollback}`);
517
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`update failed: ${message}. ${rollback}. Diagnostics: ${transactionStore.path}`)}\n`);
518
+ return error instanceof UpdateFailure ? error.exitCode : 1;
519
+ }
520
+ }
521
+ export function assertUpdatePerformanceBudget(evidence, maximumPostNpmDurationMs = 30_000) {
522
+ const failures = [];
523
+ if (evidence.fileCount < 1)
524
+ failures.push("fixture contains no payload files");
525
+ if (evidence.sourceReads !== evidence.fileCount)
526
+ failures.push(`source payload read count is ${evidence.sourceReads} for ${evidence.fileCount} files`);
527
+ const totalWrites = evidence.candidateWrites + (evidence.layerWrites ?? 0);
528
+ if (totalWrites !== evidence.fileCount)
529
+ failures.push(`runtime payload write count is ${totalWrites} for ${evidence.fileCount} files`);
530
+ if (evidence.verificationReads > 0)
531
+ failures.push(`fresh certification reread ${evidence.verificationReads} candidate files`);
532
+ if (evidence.postNpmDurationMs > maximumPostNpmDurationMs)
533
+ failures.push(`post-npm activation took ${Math.round(evidence.postNpmDurationMs)}ms; budget is ${maximumPostNpmDurationMs}ms`);
534
+ if (failures.length > 0)
535
+ throw new Error(`update performance budget failed: ${failures.join("; ")}`);
536
+ }
537
+ async function requestUpdateShutdown(metadata, targetVersion, timeoutMs) {
538
+ if (!processIsAlive(metadata.pid))
539
+ return { accepted: false, reason: "recorded owner is dead" };
540
+ return await new Promise(resolvePromise => {
541
+ const socket = connect(metadata.endpoint);
542
+ const decoder = new LineFrameDecoder();
543
+ let settled = false;
544
+ const finish = (value) => {
545
+ if (settled)
546
+ return;
547
+ settled = true;
548
+ socket.destroy();
549
+ resolvePromise(value);
550
+ };
551
+ socket.once("error", () => finish({ accepted: false, reason: "verified endpoint did not respond" }));
552
+ socket.once("connect", () => socket.write(encodeFrame({ type: "release-update-ownership", bootNonce: metadata.bootNonce, targetVersion })));
553
+ socket.on("data", chunk => {
554
+ try {
555
+ const message = decoder.push(chunk)[0];
556
+ if (message?.type === "release-update-result")
557
+ finish({ accepted: message.accepted === true, reason: String(message.reason ?? "shutdown rejected") });
558
+ }
559
+ catch {
560
+ finish({ accepted: false, reason: "invalid shutdown response" });
561
+ }
562
+ });
563
+ setTimeout(() => finish({ accepted: false, reason: "verified endpoint shutdown timed out" }), timeoutMs).unref();
564
+ });
565
+ }
566
+ async function runNpm(runner, arguments_, captureStdout, output, action, reportNonzero = true) {
567
+ let result;
568
+ try {
569
+ result = await runner("npm", arguments_, { captureStdout });
570
+ }
571
+ catch (error) {
572
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`could not execute npm to ${action}: ${errorMessage(error)}`)}\n`);
573
+ return { result: null, exitCode: 1 };
574
+ }
575
+ if (result.code !== 0 && reportNonzero) {
576
+ const explained = reportChildDiagnostics(output, result);
577
+ output.stderr(`${PRODUCT_TEXT.diagnostic(`could not ${action}; npm exited with status ${formatExitCode(result.code)}.${explained ? " Review npm's diagnostics above." : ""}`)}\n`);
578
+ return { result: null, exitCode: unsuccessfulCode(result.code) };
579
+ }
580
+ return { result, exitCode: 0 };
581
+ }
582
+ /** Prints what a failed child said, bounded, and reports whether there was anything to print. */
583
+ function reportChildDiagnostics(output, result) {
584
+ const text = [result.stdout, result.stderr ?? ""].map(part => part.trim()).filter(part => part.length > 0).join("\n").slice(-CHILD_DIAGNOSTIC_LIMIT);
585
+ if (text.length === 0)
586
+ return false;
587
+ output.stderr(`${text}\n`);
588
+ return true;
589
+ }
590
+ async function rollbackPriorCohort(dataDir, environment, priorReleaseId) {
591
+ if (!priorReleaseId)
592
+ return "no prior cohort was available for rollback";
593
+ const stateStore = new CohortStateStore(dataDir);
594
+ const state = await stateStore.read();
595
+ const prior = state.releases[priorReleaseId];
596
+ if (!prior || prior.approval !== "approved")
597
+ return "prior cohort is not a verified rollback candidate";
598
+ if (state.references.active !== priorReleaseId) {
599
+ if (state.references.rollback === priorReleaseId)
600
+ await stateStore.rollback(true);
601
+ else
602
+ throw new Error(`prior release ${priorReleaseId} is not the recorded rollback cohort`);
603
+ }
604
+ const release = await readMaterializedRelease(prior.releaseRoot);
605
+ // Invariant: rollback reuses a surviving prior cohort rather than racing its occupied endpoint.
606
+ await ensureSupervisor(release, environment);
607
+ return "rolled back";
608
+ }
609
+ function phaseBefore(current, target) {
610
+ const phases = ["shutdown-intent", "ownership-released", "package-installed", "materialized", "certified", "active-reference-committed", "supervisor-verified"];
611
+ return phases.indexOf(current) < phases.indexOf(target);
612
+ }
613
+ class UpdateFailure extends Error {
614
+ exitCode;
615
+ constructor(exitCode, message) { super(message); this.exitCode = exitCode; }
616
+ }
617
+ async function canonicalImmutableRoot(dataDir, releaseRoot) {
618
+ try {
619
+ const [store, selected] = await Promise.all([realpath(resolve(dataDir, "releases")), realpath(releaseRoot)]);
620
+ const fromStore = relative(store, selected);
621
+ return fromStore.length > 0 && fromStore !== ".." && !fromStore.startsWith(`..${sep}`) && !isAbsolute(fromStore);
622
+ }
623
+ catch {
624
+ return false;
625
+ }
626
+ }
627
+ function isContainedBy(parent, child) {
628
+ const pathFromParent = relative(parent, child);
629
+ return pathFromParent.length > 0 && pathFromParent !== ".." && !pathFromParent.startsWith(`..${sep}`) && !isAbsolute(pathFromParent);
630
+ }
631
+ function unsuccessfulCode(code) { return code === null || code === 0 ? 1 : code; }
632
+ function formatExitCode(code) { return code === null ? "unknown" : String(code); }
633
+ function errorMessage(error) { return error instanceof Error ? error.message : String(error); }
@@ -0,0 +1,3 @@
1
+ import { type MaterializedRelease } from "./release-store.js";
2
+ /** Import the exact immutable startup graph in a terminal-free bounded child process. */
3
+ export declare function warmMaterializedRelease(release: MaterializedRelease, environment: NodeJS.ProcessEnv, timeoutMs?: number): Promise<void>;