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

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 (869) hide show
  1. package/README.md +168 -65
  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 +35 -0
  51. package/dist/app/session-shell/prompt-suggestion-controller.js +207 -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 +265 -0
  64. package/dist/app/session-shell/session-shell-root.js +1366 -0
  65. package/dist/app/session-shell/session-shell.d.ts +59 -0
  66. package/dist/app/session-shell/session-shell.js +1917 -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 +136 -0
  91. package/dist/composition/settings-route-host.d.ts +7 -0
  92. package/dist/composition/settings-route-host.js +110 -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 +378 -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 +6 -0
  129. package/dist/features/owned-ui/index.js +4 -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/run.d.ts +17 -0
  133. package/dist/features/owned-ui/run.js +64 -0
  134. package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
  135. package/dist/features/owned-ui/session-fork-prompt.js +34 -0
  136. package/dist/features/owned-ui/settings-app.d.ts +21 -0
  137. package/dist/features/owned-ui/settings-app.js +807 -0
  138. package/dist/features/owned-ui/settings-route.d.ts +2 -0
  139. package/dist/features/owned-ui/settings-route.js +2 -0
  140. package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
  141. package/dist/features/prompt-history/image-sidecar.js +130 -0
  142. package/dist/features/prompt-history/index.d.ts +4 -0
  143. package/dist/features/prompt-history/index.js +3 -0
  144. package/dist/features/prompt-history/paths.d.ts +5 -0
  145. package/dist/features/prompt-history/paths.js +17 -0
  146. package/dist/features/prompt-history/service.d.ts +54 -0
  147. package/dist/features/prompt-history/service.js +425 -0
  148. package/dist/features/prompt-history/store.d.ts +16 -0
  149. package/dist/features/prompt-history/store.js +219 -0
  150. package/dist/features/prompt-history/worker.d.ts +9 -0
  151. package/dist/features/prompt-history/worker.js +45 -0
  152. package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
  153. package/dist/features/prompt-suggestions/diagnostics.js +82 -0
  154. package/dist/features/prompt-suggestions/index.d.ts +2 -0
  155. package/dist/features/prompt-suggestions/index.js +1 -0
  156. package/dist/foundation/launch-context/index.d.ts +59 -0
  157. package/dist/foundation/launch-context/index.js +136 -0
  158. package/dist/foundation/launch-guardian/index.d.ts +2 -0
  159. package/dist/foundation/launch-guardian/index.js +1 -0
  160. package/dist/foundation/launch-guardian/main.d.ts +33 -0
  161. package/dist/foundation/launch-guardian/main.js +180 -0
  162. package/dist/foundation/lifecycle/commands.js +1 -0
  163. package/dist/foundation/lifecycle/index.d.ts +11 -0
  164. package/dist/foundation/lifecycle/index.js +5 -0
  165. package/dist/foundation/lifecycle/model.d.ts +64 -0
  166. package/dist/foundation/lifecycle/model.js +40 -0
  167. package/dist/foundation/lifecycle/paths.d.ts +30 -0
  168. package/dist/foundation/lifecycle/paths.js +70 -0
  169. package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
  170. package/dist/foundation/lifecycle/session-selection.js +39 -0
  171. package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
  172. package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
  173. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
  174. package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
  175. package/dist/foundation/process-containment/index.d.ts +8 -0
  176. package/dist/foundation/process-containment/index.js +6 -0
  177. package/dist/foundation/process-containment/linux-process-inspector.d.ts +7 -0
  178. package/dist/foundation/process-containment/linux-process-inspector.js +27 -0
  179. package/dist/foundation/process-containment/native-guardian-containment.d.ts +17 -0
  180. package/dist/foundation/process-containment/native-guardian-containment.js +140 -0
  181. package/dist/foundation/process-containment/windows-process-inspector.d.ts +19 -0
  182. package/dist/foundation/process-containment/windows-process-inspector.js +56 -0
  183. package/dist/foundation/protocol/client.d.ts +18 -0
  184. package/dist/foundation/protocol/client.js +130 -0
  185. package/dist/foundation/protocol/index.d.ts +3 -0
  186. package/dist/foundation/protocol/index.js +2 -0
  187. package/dist/foundation/protocol/messages.d.ts +90 -0
  188. package/dist/foundation/protocol/messages.js +100 -0
  189. package/dist/foundation/release/bootstrap.d.ts +51 -0
  190. package/dist/foundation/release/bootstrap.js +427 -0
  191. package/dist/foundation/release/cohort-state.d.ts +157 -0
  192. package/dist/foundation/release/cohort-state.js +472 -0
  193. package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
  194. package/dist/foundation/release/dependency-certification-retention.js +88 -0
  195. package/dist/foundation/release/dependency-certification.d.ts +24 -0
  196. package/dist/foundation/release/dependency-certification.js +266 -0
  197. package/dist/foundation/release/dependency-layer.d.ts +78 -0
  198. package/dist/foundation/release/dependency-layer.js +466 -0
  199. package/dist/foundation/release/endpoints.d.ts +24 -0
  200. package/dist/foundation/release/endpoints.js +134 -0
  201. package/dist/foundation/release/immutable-platform.d.ts +6 -0
  202. package/dist/foundation/release/immutable-platform.js +13 -0
  203. package/dist/foundation/release/index.d.ts +32 -0
  204. package/dist/foundation/release/index.js +17 -0
  205. package/dist/foundation/release/release-gc.d.ts +71 -0
  206. package/dist/foundation/release/release-gc.js +764 -0
  207. package/dist/foundation/release/release-store.d.ts +49 -0
  208. package/dist/foundation/release/release-store.js +235 -0
  209. package/dist/foundation/release/release.d.ts +43 -0
  210. package/dist/foundation/release/release.js +215 -0
  211. package/dist/foundation/release/restart-certification.d.ts +68 -0
  212. package/dist/foundation/release/restart-certification.js +227 -0
  213. package/dist/foundation/release/types.d.ts +11 -0
  214. package/dist/foundation/release/types.js +1 -0
  215. package/dist/foundation/release/update-activation.d.ts +72 -0
  216. package/dist/foundation/release/update-activation.js +204 -0
  217. package/dist/foundation/release/update-launch.d.ts +6 -0
  218. package/dist/foundation/release/update-launch.js +17 -0
  219. package/dist/foundation/release/update-recovery.d.ts +76 -0
  220. package/dist/foundation/release/update-recovery.js +356 -0
  221. package/dist/foundation/release/update-transaction.d.ts +42 -0
  222. package/dist/foundation/release/update-transaction.js +101 -0
  223. package/dist/foundation/release/update.d.ts +114 -0
  224. package/dist/foundation/release/update.js +633 -0
  225. package/dist/foundation/release/warmup.d.ts +3 -0
  226. package/dist/foundation/release/warmup.js +47 -0
  227. package/dist/foundation/startup/index.d.ts +4 -0
  228. package/dist/foundation/startup/index.js +2 -0
  229. package/dist/foundation/startup/startup-budget.d.ts +46 -0
  230. package/dist/foundation/startup/startup-budget.js +42 -0
  231. package/dist/foundation/startup/startup-descriptor.js +34 -0
  232. package/dist/foundation/startup/startup-runtime.d.ts +27 -0
  233. package/dist/foundation/startup/startup-runtime.js +128 -0
  234. package/dist/foundation/storage/control-store.d.ts +18 -0
  235. package/dist/foundation/storage/control-store.js +342 -0
  236. package/dist/foundation/storage/index.d.ts +1 -0
  237. package/dist/foundation/storage/index.js +1 -0
  238. package/dist/foundation/supervision/index.d.ts +3 -0
  239. package/dist/foundation/supervision/index.js +3 -0
  240. package/dist/foundation/supervision/main.d.ts +1 -0
  241. package/dist/foundation/supervision/main.js +84 -0
  242. package/dist/foundation/supervision/paths.d.ts +1 -0
  243. package/dist/foundation/supervision/paths.js +1 -0
  244. package/dist/foundation/supervision/server.d.ts +46 -0
  245. package/dist/foundation/supervision/server.js +573 -0
  246. package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
  247. package/dist/foundation/terminal-cleanup/fatal-exit.js +87 -0
  248. package/dist/foundation/terminal-cleanup/index.d.ts +3 -0
  249. package/dist/foundation/terminal-cleanup/index.js +2 -0
  250. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
  251. package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
  252. package/dist/integrations/pi/components/components.d.ts +4 -0
  253. package/dist/integrations/pi/components/components.js +64 -0
  254. package/dist/integrations/pi/components/conformance.d.ts +18 -0
  255. package/dist/integrations/pi/components/conformance.js +70 -0
  256. package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
  257. package/dist/integrations/pi/components/editor-interaction.js +1 -0
  258. package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
  259. package/dist/integrations/pi/components/history-editor-loader.js +5 -0
  260. package/dist/integrations/pi/components/index.d.ts +21 -0
  261. package/dist/integrations/pi/components/index.js +13 -0
  262. package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
  263. package/dist/integrations/pi/components/owned-editor-ux.js +1094 -0
  264. package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
  265. package/dist/integrations/pi/components/path-word-ranges.js +37 -0
  266. package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
  267. package/dist/integrations/pi/components/prompt-input-port.js +1 -0
  268. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +167 -0
  269. package/dist/integrations/pi/components/resources/builtin-themes.js +168 -0
  270. package/dist/integrations/pi/components/shell-components.d.ts +7 -0
  271. package/dist/integrations/pi/components/shell-components.js +7 -0
  272. package/dist/integrations/pi/components/shell-editor-autocomplete.js +298 -0
  273. package/dist/integrations/pi/components/shell-extension-ui.d.ts +35 -0
  274. package/dist/integrations/pi/components/shell-extension-ui.js +280 -0
  275. package/dist/integrations/pi/components/shell-footer-status.d.ts +7 -0
  276. package/dist/integrations/pi/components/shell-footer-status.js +248 -0
  277. package/dist/integrations/pi/components/shell-presenters-info.d.ts +43 -0
  278. package/dist/integrations/pi/components/shell-presenters-info.js +114 -0
  279. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
  280. package/dist/integrations/pi/components/shell-presenters-transcript.js +433 -0
  281. package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +123 -0
  282. package/dist/integrations/pi/components/shell-selectors-dialogs.js +242 -0
  283. package/dist/integrations/pi/components/shell-shared-facade.d.ts +217 -0
  284. package/dist/integrations/pi/components/shell-shared-facade.js +92 -0
  285. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +17 -0
  286. package/dist/integrations/pi/components/submitted-prompt-adapter.js +49 -0
  287. package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
  288. package/dist/integrations/pi/components/tool-image-presentation.js +83 -0
  289. package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
  290. package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
  291. package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
  292. package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
  293. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +445 -0
  294. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +370 -0
  295. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
  296. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +13 -0
  297. package/dist/integrations/pi/components/upstream/components/daxnuts.d.ts +29 -0
  298. package/dist/integrations/pi/components/upstream/components/daxnuts.js +146 -0
  299. package/dist/integrations/pi/components/upstream/components/earendil-announcement.d.ts +4 -0
  300. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +48 -0
  301. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +20 -0
  302. package/dist/integrations/pi/components/upstream/components/extension-editor.js +84 -0
  303. package/dist/integrations/pi/components/upstream/components/mermaid.js +81 -0
  304. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +46 -0
  305. package/dist/integrations/pi/components/upstream/components/owned-editor.js +187 -0
  306. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +59 -0
  307. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +346 -0
  308. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +11 -0
  309. package/dist/integrations/pi/components/upstream/components/session-footer.js +123 -0
  310. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +161 -0
  311. package/dist/integrations/pi/components/upstream/components/session-selector.d.ts +95 -0
  312. package/dist/integrations/pi/components/upstream/components/session-selector.js +893 -0
  313. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +21 -0
  314. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +46 -0
  315. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +35 -0
  316. package/dist/integrations/pi/components/upstream/components/status-indicator.js +69 -0
  317. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +67 -0
  318. package/dist/integrations/pi/components/upstream/components/tool-execution.js +365 -0
  319. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +101 -0
  320. package/dist/integrations/pi/components/upstream/components/tree-selector.js +1275 -0
  321. package/dist/integrations/pi/components/upstream/components/trust-selector.d.ts +33 -0
  322. package/dist/integrations/pi/components/upstream/components/trust-selector.js +81 -0
  323. package/dist/integrations/pi/components/upstream/external-editor.js +43 -0
  324. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +289 -0
  325. package/dist/integrations/pi/components/upstream/history/editor-core.js +2144 -0
  326. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +35 -0
  327. package/dist/integrations/pi/components/upstream/history/kill-ring.js +51 -0
  328. package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
  329. package/dist/integrations/pi/components/upstream/history/printable-key.js +43 -0
  330. package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +14 -0
  331. package/dist/integrations/pi/components/upstream/history/text-helpers.js +31 -0
  332. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +25 -0
  333. package/dist/integrations/pi/components/upstream/history/undo-stack.js +39 -0
  334. package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
  335. package/dist/integrations/pi/components/upstream/history/word-navigation.js +103 -0
  336. package/dist/integrations/pi/components/upstream/model-search.d.ts +18 -0
  337. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +33 -0
  338. package/dist/integrations/pi/components/upstream/theme/theme-controller.js +114 -0
  339. package/dist/integrations/pi/components/upstream/theme/theme.d.ts +61 -0
  340. package/dist/integrations/pi/components/upstream/theme/theme.js +337 -0
  341. package/dist/integrations/pi/engine/adapter.d.ts +135 -0
  342. package/dist/integrations/pi/engine/adapter.js +648 -0
  343. package/dist/integrations/pi/engine/changelog.d.ts +2 -0
  344. package/dist/integrations/pi/engine/changelog.js +63 -0
  345. package/dist/integrations/pi/engine/command-dispatch.d.ts +41 -0
  346. package/dist/integrations/pi/engine/command-dispatch.js +125 -0
  347. package/dist/integrations/pi/engine/compaction-progress.d.ts +28 -0
  348. package/dist/integrations/pi/engine/compaction-progress.js +96 -0
  349. package/dist/integrations/pi/engine/conformance.d.ts +39 -0
  350. package/dist/integrations/pi/engine/conformance.js +140 -0
  351. package/dist/integrations/pi/engine/event-delivery.d.ts +100 -0
  352. package/dist/integrations/pi/engine/event-delivery.js +184 -0
  353. package/dist/integrations/pi/engine/extension-ui-binding.d.ts +35 -0
  354. package/dist/integrations/pi/engine/extension-ui-binding.js +81 -0
  355. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  356. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  357. package/dist/integrations/pi/engine/index.d.ts +18 -0
  358. package/dist/integrations/pi/engine/index.js +10 -0
  359. package/dist/integrations/pi/engine/message-values.d.ts +29 -0
  360. package/dist/integrations/pi/engine/message-values.js +168 -0
  361. package/dist/integrations/pi/engine/package-integration.d.ts +13 -0
  362. package/dist/integrations/pi/engine/package-integration.js +118 -0
  363. package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
  364. package/dist/integrations/pi/engine/pending-delivery.js +156 -0
  365. package/dist/integrations/pi/engine/pi-settings-metadata.json +385 -0
  366. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  367. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  368. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +30 -0
  369. package/dist/integrations/pi/engine/prompt-suggestions.js +102 -0
  370. package/dist/integrations/pi/engine/provider-authentication.d.ts +34 -0
  371. package/dist/integrations/pi/engine/provider-authentication.js +209 -0
  372. package/dist/integrations/pi/engine/resource-catalog.d.ts +49 -0
  373. package/dist/integrations/pi/engine/resource-catalog.js +289 -0
  374. package/dist/integrations/pi/engine/resources/changelog.json +12 -0
  375. package/dist/integrations/pi/engine/runtime-integration.d.ts +53 -0
  376. package/dist/integrations/pi/engine/runtime-integration.js +118 -0
  377. package/dist/integrations/pi/engine/session-events.d.ts +48 -0
  378. package/dist/integrations/pi/engine/session-events.js +223 -0
  379. package/dist/integrations/pi/engine/session-integration.d.ts +67 -0
  380. package/dist/integrations/pi/engine/session-integration.js +195 -0
  381. package/dist/integrations/pi/engine/session-runtime.d.ts +84 -0
  382. package/dist/integrations/pi/engine/session-runtime.js +249 -0
  383. package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
  384. package/dist/integrations/pi/engine/session-selection.js +90 -0
  385. package/dist/integrations/pi/engine/settings-bridge.d.ts +121 -0
  386. package/dist/integrations/pi/engine/settings-bridge.js +514 -0
  387. package/dist/integrations/pi/engine/settings-metadata.d.ts +31 -0
  388. package/dist/integrations/pi/engine/settings-metadata.js +67 -0
  389. package/dist/integrations/pi/engine/settings-port.d.ts +42 -0
  390. package/dist/integrations/pi/engine/settings-port.js +353 -0
  391. package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
  392. package/dist/integrations/pi/engine/tool-rendering.js +145 -0
  393. package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
  394. package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
  395. package/dist/integrations/pi/engine/transcript-projection.d.ts +39 -0
  396. package/dist/integrations/pi/engine/transcript-projection.js +405 -0
  397. package/dist/integrations/pi/engine/usage-view.d.ts +4 -0
  398. package/dist/integrations/pi/engine/usage-view.js +56 -0
  399. package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
  400. package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
  401. package/dist/integrations/pi/engine/workflow-contexts.d.ts +59 -0
  402. package/dist/integrations/pi/engine/workflow-contexts.js +316 -0
  403. package/dist/integrations/pi/engine/workflow-runner.d.ts +60 -0
  404. package/dist/integrations/pi/engine/workflow-runner.js +509 -0
  405. package/dist/integrations/pi/engine/workflow-support.d.ts +33 -0
  406. package/dist/integrations/pi/engine/workflow-support.js +352 -0
  407. package/dist/integrations/pi/engine/workflows.d.ts +251 -0
  408. package/dist/integrations/pi/engine/workflows.js +63 -0
  409. package/dist/integrations/pi/startup-public.d.ts +2 -0
  410. package/dist/integrations/pi/startup-public.js +2223 -0
  411. package/dist/integrations/pi/startup-public.manifest.json +12502 -0
  412. package/dist/integrations/pi/tui-runtime/adapter.d.ts +56 -0
  413. package/dist/integrations/pi/tui-runtime/adapter.js +783 -0
  414. package/dist/integrations/pi/tui-runtime/contracts.d.ts +156 -0
  415. package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
  416. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +88 -0
  417. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +433 -0
  418. package/dist/integrations/pi/tui-runtime/index.d.ts +9 -0
  419. package/dist/integrations/pi/tui-runtime/index.js +5 -0
  420. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  421. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  422. package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +13 -0
  423. package/dist/integrations/pi/tui-runtime/mouse-report-input.js +57 -0
  424. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
  425. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +158 -0
  426. package/dist/integrations/pi/tui-runtime/presentation-adapter.d.ts +4 -0
  427. package/dist/integrations/pi/tui-runtime/presentation-adapter.js +48 -0
  428. package/dist/native/darwin-arm64/manifest.json +4 -4
  429. package/dist/native/darwin-arm64/process-guardian +0 -0
  430. package/dist/native/linux-x64/manifest.json +3 -3
  431. package/dist/native/linux-x64/process-guardian +0 -0
  432. package/dist/native/win32-x64/manifest.json +3 -3
  433. package/dist/native/win32-x64/process-guardian.exe +0 -0
  434. package/dist/product-identity.d.ts +37 -0
  435. package/dist/product-identity.js +119 -0
  436. package/dist/product-identity.json +85 -0
  437. package/dist/runtime-payload-inventory.json +127148 -0
  438. package/dist/ui/apps/contracts.d.ts +64 -0
  439. package/dist/ui/apps/host.d.ts +42 -0
  440. package/dist/ui/apps/host.js +156 -0
  441. package/dist/ui/apps/index.d.ts +5 -0
  442. package/dist/ui/apps/index.js +3 -0
  443. package/dist/ui/apps/registry.d.ts +12 -0
  444. package/dist/ui/apps/registry.js +33 -0
  445. package/dist/ui/components/dialog-panel.js +49 -0
  446. package/dist/ui/components/frame.d.ts +22 -0
  447. package/dist/ui/components/frame.js +55 -0
  448. package/dist/ui/components/index.d.ts +47 -0
  449. package/dist/ui/components/index.js +25 -0
  450. package/dist/ui/components/line-input.d.ts +68 -0
  451. package/dist/ui/components/line-input.js +224 -0
  452. package/dist/ui/components/list-view.d.ts +60 -0
  453. package/dist/ui/components/list-view.js +82 -0
  454. package/dist/ui/components/mouse.d.ts +25 -0
  455. package/dist/ui/components/mouse.js +70 -0
  456. package/dist/ui/components/progress-status.d.ts +2 -0
  457. package/dist/ui/components/progress-status.js +4 -0
  458. package/dist/ui/components/prompt-input.d.ts +32 -0
  459. package/dist/ui/components/prompt-input.js +51 -0
  460. package/dist/ui/components/scrollbar.d.ts +88 -0
  461. package/dist/ui/components/scrollbar.js +137 -0
  462. package/dist/ui/components/selection-copy.d.ts +24 -0
  463. package/dist/ui/components/selection-copy.js +39 -0
  464. package/dist/ui/components/shortcuts.d.ts +58 -0
  465. package/dist/ui/components/shortcuts.js +82 -0
  466. package/dist/ui/components/spans.d.ts +28 -0
  467. package/dist/ui/components/spans.js +266 -0
  468. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  469. package/dist/ui/components/submitted-prompt.js +50 -0
  470. package/dist/ui/components/surface.d.ts +20 -0
  471. package/dist/ui/components/surface.js +44 -0
  472. package/dist/ui/components/text-selection.d.ts +62 -0
  473. package/dist/ui/components/text-selection.js +210 -0
  474. package/dist/ui/components/text.d.ts +38 -0
  475. package/dist/ui/components/text.js +185 -0
  476. package/dist/ui/components/transcript-viewport.d.ts +173 -0
  477. package/dist/ui/components/transcript-viewport.js +753 -0
  478. package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
  479. package/dist/ui/components/visible-hyperlinks.js +97 -0
  480. package/dist/ui/settings/declarations.d.ts +141 -0
  481. package/dist/ui/settings/declarations.js +135 -0
  482. package/dist/ui/settings/index.d.ts +10 -0
  483. package/dist/ui/settings/index.js +5 -0
  484. package/dist/ui/settings/manager.d.ts +54 -0
  485. package/dist/ui/settings/manager.js +256 -0
  486. package/dist/ui/settings/migrations.d.ts +13 -0
  487. package/dist/ui/settings/migrations.js +74 -0
  488. package/dist/ui/settings/sections.d.ts +52 -0
  489. package/dist/ui/settings/sections.js +112 -0
  490. package/docs/architecture/boundaries.md +17 -13
  491. package/docs/architecture/code-documentation.md +77 -0
  492. package/docs/architecture/history-editor-provenance.md +100 -0
  493. package/docs/architecture/internal-naming.md +93 -0
  494. package/docs/architecture/process-guardian-provenance.md +3 -1
  495. package/docs/architecture/project-structure.md +69 -30
  496. package/docs/architecture/prompt-suggestions.md +68 -0
  497. package/docs/architecture/resource-and-data-policy.md +28 -2
  498. package/docs/architecture/response-copy-delivery.md +85 -0
  499. package/docs/architecture/terminal-host-proof-gate.md +1 -1
  500. package/docs/architecture/terminal-host-spike-evidence.md +1 -1
  501. package/docs/architecture/tool-image-presentation.md +62 -0
  502. package/docs/architecture/toolchain.md +32 -10
  503. package/docs/architecture/ui-reference-provenance.md +60 -6
  504. package/docs/ci-release-runbook.md +256 -79
  505. package/docs/features/launch-profiles.md +24 -17
  506. package/docs/features/modal-content-interaction.md +37 -0
  507. package/docs/features/prompt-history.md +149 -0
  508. package/docs/local-worktree-cleanup.md +212 -0
  509. package/docs/manual-code-streaming-cleanup.md +88 -0
  510. package/docs/manual-ghost-link-baseline.md +89 -0
  511. package/docs/manual-launch-instance-acceptance.md +12 -35
  512. package/docs/manual-owned-ui-checkpoint.md +79 -0
  513. package/docs/manual-pi-boundary-candidate.md +4 -5
  514. package/docs/manual-terminal-colour-check.md +4 -3
  515. package/docs/openspec-archive-automation.md +259 -0
  516. package/docs/repository-governance-live-acceptance.md +77 -0
  517. package/docs/validation.md +100 -0
  518. package/package.json +52 -34
  519. package/dist/src/cli/capabilities.d.ts +0 -15
  520. package/dist/src/cli/capabilities.js +0 -7
  521. package/dist/src/cli/dispatch.d.ts +0 -32
  522. package/dist/src/cli/dispatch.js +0 -142
  523. package/dist/src/cli/index.d.ts +0 -5
  524. package/dist/src/cli/index.js +0 -5
  525. package/dist/src/cli/packages.d.ts +0 -23
  526. package/dist/src/cli/packages.js +0 -84
  527. package/dist/src/cli/version-stats.d.ts +0 -16
  528. package/dist/src/cli/version-stats.js +0 -72
  529. package/dist/src/cli/version.d.ts +0 -2
  530. package/dist/src/cli/version.js +0 -23
  531. package/dist/src/composition/index.d.ts +0 -48
  532. package/dist/src/composition/index.js +0 -258
  533. package/dist/src/features/launch/development-launch.js +0 -28
  534. package/dist/src/features/launch/index.d.ts +0 -7
  535. package/dist/src/features/launch/index.js +0 -7
  536. package/dist/src/features/launch/intent.d.ts +0 -7
  537. package/dist/src/features/launch/intent.js +0 -4
  538. package/dist/src/features/launch/prepare-launch.d.ts +0 -13
  539. package/dist/src/features/launch/prepare-launch.js +0 -21
  540. package/dist/src/features/launch/profile-paths.d.ts +0 -15
  541. package/dist/src/features/launch/profile-paths.js +0 -31
  542. package/dist/src/features/launch/profiles.d.ts +0 -12
  543. package/dist/src/features/launch/profiles.js +0 -26
  544. package/dist/src/features/launch/runtime-selection.d.ts +0 -19
  545. package/dist/src/features/launch/runtime-selection.js +0 -13
  546. package/dist/src/features/owned-ui/customization.d.ts +0 -38
  547. package/dist/src/features/owned-ui/customization.js +0 -108
  548. package/dist/src/features/owned-ui/diagnostics.d.ts +0 -33
  549. package/dist/src/features/owned-ui/diagnostics.js +0 -94
  550. package/dist/src/features/owned-ui/index.d.ts +0 -4
  551. package/dist/src/features/owned-ui/index.js +0 -4
  552. package/dist/src/features/owned-ui/run.d.ts +0 -11
  553. package/dist/src/features/owned-ui/run.js +0 -15
  554. package/dist/src/features/owned-ui/settings-app.d.ts +0 -22
  555. package/dist/src/features/owned-ui/settings-app.js +0 -633
  556. package/dist/src/features/workspace/capabilities.d.ts +0 -31
  557. package/dist/src/features/workspace/capabilities.js +0 -75
  558. package/dist/src/features/workspace/index.d.ts +0 -6
  559. package/dist/src/features/workspace/index.js +0 -6
  560. package/dist/src/features/workspace/presentation.d.ts +0 -30
  561. package/dist/src/features/workspace/presentation.js +0 -70
  562. package/dist/src/features/workspace/reconciliation.d.ts +0 -15
  563. package/dist/src/features/workspace/reconciliation.js +0 -82
  564. package/dist/src/features/workspace/reducer.d.ts +0 -42
  565. package/dist/src/features/workspace/reducer.js +0 -213
  566. package/dist/src/features/workspace/router.d.ts +0 -31
  567. package/dist/src/features/workspace/router.js +0 -124
  568. package/dist/src/features/workspace/store.d.ts +0 -17
  569. package/dist/src/features/workspace/store.js +0 -54
  570. package/dist/src/foundation/agent-engine-contracts/capability-ports.d.ts +0 -95
  571. package/dist/src/foundation/agent-engine-contracts/domain-validation.js +0 -89
  572. package/dist/src/foundation/agent-engine-contracts/domain.d.ts +0 -116
  573. package/dist/src/foundation/agent-engine-contracts/index.d.ts +0 -8
  574. package/dist/src/foundation/agent-engine-contracts/index.js +0 -8
  575. package/dist/src/foundation/agent-engine-contracts/package-ports.d.ts +0 -54
  576. package/dist/src/foundation/launch-guardian/index.d.ts +0 -1
  577. package/dist/src/foundation/launch-guardian/index.js +0 -1
  578. package/dist/src/foundation/launch-guardian/main.d.ts +0 -31
  579. package/dist/src/foundation/launch-guardian/main.js +0 -165
  580. package/dist/src/foundation/lifecycle/index.d.ts +0 -4
  581. package/dist/src/foundation/lifecycle/index.js +0 -4
  582. package/dist/src/foundation/lifecycle/model.d.ts +0 -64
  583. package/dist/src/foundation/lifecycle/model.js +0 -40
  584. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  585. package/dist/src/foundation/lifecycle/paths.js +0 -42
  586. package/dist/src/foundation/native-host-protocol/codec.d.ts +0 -11
  587. package/dist/src/foundation/native-host-protocol/codec.js +0 -56
  588. package/dist/src/foundation/native-host-protocol/evidence.d.ts +0 -67
  589. package/dist/src/foundation/native-host-protocol/evidence.js +0 -141
  590. package/dist/src/foundation/native-host-protocol/index.d.ts +0 -4
  591. package/dist/src/foundation/native-host-protocol/index.js +0 -4
  592. package/dist/src/foundation/native-host-protocol/messages.d.ts +0 -56
  593. package/dist/src/foundation/native-host-protocol/messages.js +0 -149
  594. package/dist/src/foundation/native-host-protocol/proof-gate.d.ts +0 -13
  595. package/dist/src/foundation/native-host-protocol/proof-gate.js +0 -33
  596. package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts +0 -302
  597. package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
  598. package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
  599. package/dist/src/foundation/owned-ui-contracts/model.d.ts +0 -241
  600. package/dist/src/foundation/owned-ui-contracts/validation.d.ts +0 -11
  601. package/dist/src/foundation/owned-ui-contracts/validation.js +0 -395
  602. package/dist/src/foundation/owned-ui-settings/declarations.d.ts +0 -13
  603. package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
  604. package/dist/src/foundation/owned-ui-settings/index.d.ts +0 -6
  605. package/dist/src/foundation/owned-ui-settings/index.js +0 -6
  606. package/dist/src/foundation/owned-ui-settings/migrations.d.ts +0 -13
  607. package/dist/src/foundation/owned-ui-settings/migrations.js +0 -28
  608. package/dist/src/foundation/owned-ui-settings/sections.d.ts +0 -70
  609. package/dist/src/foundation/owned-ui-settings/sections.js +0 -93
  610. package/dist/src/foundation/owned-ui-settings/session.d.ts +0 -44
  611. package/dist/src/foundation/owned-ui-settings/session.js +0 -145
  612. package/dist/src/foundation/owned-ui-settings/store.d.ts +0 -28
  613. package/dist/src/foundation/owned-ui-settings/store.js +0 -90
  614. package/dist/src/foundation/pi-component-adapter/components.d.ts +0 -4
  615. package/dist/src/foundation/pi-component-adapter/components.js +0 -64
  616. package/dist/src/foundation/pi-component-adapter/conformance.d.ts +0 -17
  617. package/dist/src/foundation/pi-component-adapter/conformance.js +0 -69
  618. package/dist/src/foundation/pi-component-adapter/index.d.ts +0 -13
  619. package/dist/src/foundation/pi-component-adapter/index.js +0 -13
  620. package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.d.ts +0 -165
  621. package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.js +0 -166
  622. package/dist/src/foundation/pi-component-adapter/shell-components.d.ts +0 -6
  623. package/dist/src/foundation/pi-component-adapter/shell-components.js +0 -6
  624. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
  625. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts +0 -35
  626. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js +0 -279
  627. package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts +0 -7
  628. package/dist/src/foundation/pi-component-adapter/shell-footer-status.js +0 -189
  629. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  630. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js +0 -429
  631. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts +0 -113
  632. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +0 -235
  633. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
  634. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js +0 -87
  635. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts +0 -422
  636. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js +0 -296
  637. package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts +0 -10
  638. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts +0 -17
  639. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js +0 -51
  640. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts +0 -22
  641. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js +0 -142
  642. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts +0 -4
  643. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
  644. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts +0 -17
  645. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js +0 -81
  646. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts +0 -24
  647. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js +0 -105
  648. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts +0 -2
  649. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js +0 -18
  650. package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js +0 -77
  651. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
  652. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
  653. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts +0 -55
  654. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js +0 -342
  655. package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.d.ts +0 -10
  656. package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.js +0 -120
  657. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js +0 -159
  658. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts +0 -95
  659. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js +0 -889
  660. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts +0 -19
  661. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js +0 -44
  662. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts +0 -30
  663. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js +0 -59
  664. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts +0 -98
  665. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js +0 -1272
  666. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts +0 -33
  667. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js +0 -76
  668. package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js +0 -39
  669. package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts +0 -15
  670. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts +0 -25
  671. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js +0 -117
  672. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts +0 -61
  673. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js +0 -326
  674. package/dist/src/foundation/pi-engine-adapter/adapter.d.ts +0 -164
  675. package/dist/src/foundation/pi-engine-adapter/adapter.js +0 -2367
  676. package/dist/src/foundation/pi-engine-adapter/conformance.d.ts +0 -37
  677. package/dist/src/foundation/pi-engine-adapter/conformance.js +0 -130
  678. package/dist/src/foundation/pi-engine-adapter/index.d.ts +0 -10
  679. package/dist/src/foundation/pi-engine-adapter/index.js +0 -10
  680. package/dist/src/foundation/pi-engine-adapter/model-auth-integration.d.ts +0 -30
  681. package/dist/src/foundation/pi-engine-adapter/model-auth-integration.js +0 -61
  682. package/dist/src/foundation/pi-engine-adapter/package-integration.d.ts +0 -13
  683. package/dist/src/foundation/pi-engine-adapter/package-integration.js +0 -112
  684. package/dist/src/foundation/pi-engine-adapter/pi-settings-metadata.json +0 -374
  685. package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.d.ts +0 -31
  686. package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.js +0 -80
  687. package/dist/src/foundation/pi-engine-adapter/runtime-integration.d.ts +0 -35
  688. package/dist/src/foundation/pi-engine-adapter/runtime-integration.js +0 -67
  689. package/dist/src/foundation/pi-engine-adapter/session-integration.d.ts +0 -43
  690. package/dist/src/foundation/pi-engine-adapter/session-integration.js +0 -97
  691. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  692. package/dist/src/foundation/pi-engine-adapter/settings-integration.js +0 -233
  693. package/dist/src/foundation/pi-engine-adapter/workflow-controllers.d.ts +0 -20
  694. package/dist/src/foundation/pi-engine-adapter/workflow-controllers.js +0 -48
  695. package/dist/src/foundation/pi-engine-adapter/workflows.d.ts +0 -173
  696. package/dist/src/foundation/pi-engine-adapter/workflows.js +0 -60
  697. package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
  698. package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
  699. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  700. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
  701. package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
  702. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts +0 -39
  703. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js +0 -493
  704. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts +0 -18
  705. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js +0 -145
  706. package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts +0 -120
  707. package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
  708. package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
  709. package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.d.ts +0 -4
  710. package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.js +0 -48
  711. package/dist/src/foundation/presentation-contracts/index.d.ts +0 -96
  712. package/dist/src/foundation/process-containment/index.d.ts +0 -5
  713. package/dist/src/foundation/process-containment/index.js +0 -5
  714. package/dist/src/foundation/process-containment/linux-process-inspector.d.ts +0 -6
  715. package/dist/src/foundation/process-containment/linux-process-inspector.js +0 -26
  716. package/dist/src/foundation/process-containment/native-guardian-containment.d.ts +0 -16
  717. package/dist/src/foundation/process-containment/native-guardian-containment.js +0 -139
  718. package/dist/src/foundation/process-containment/windows-process-inspector.d.ts +0 -17
  719. package/dist/src/foundation/process-containment/windows-process-inspector.js +0 -53
  720. package/dist/src/foundation/protocol/client.d.ts +0 -17
  721. package/dist/src/foundation/protocol/client.js +0 -129
  722. package/dist/src/foundation/protocol/index.d.ts +0 -2
  723. package/dist/src/foundation/protocol/index.js +0 -2
  724. package/dist/src/foundation/protocol/messages.d.ts +0 -89
  725. package/dist/src/foundation/protocol/messages.js +0 -99
  726. package/dist/src/foundation/release/bootstrap.d.ts +0 -29
  727. package/dist/src/foundation/release/bootstrap.js +0 -335
  728. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  729. package/dist/src/foundation/release/cohort-state.js +0 -202
  730. package/dist/src/foundation/release/index.d.ts +0 -10
  731. package/dist/src/foundation/release/index.js +0 -10
  732. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  733. package/dist/src/foundation/release/release-gc.js +0 -16
  734. package/dist/src/foundation/release/release-store.d.ts +0 -43
  735. package/dist/src/foundation/release/release-store.js +0 -175
  736. package/dist/src/foundation/release/release.d.ts +0 -38
  737. package/dist/src/foundation/release/release.js +0 -204
  738. package/dist/src/foundation/release/update-transaction.d.ts +0 -31
  739. package/dist/src/foundation/release/update-transaction.js +0 -89
  740. package/dist/src/foundation/release/update.d.ts +0 -82
  741. package/dist/src/foundation/release/update.js +0 -527
  742. package/dist/src/foundation/storage/control-store.d.ts +0 -61
  743. package/dist/src/foundation/storage/control-store.js +0 -530
  744. package/dist/src/foundation/storage/index.d.ts +0 -1
  745. package/dist/src/foundation/storage/index.js +0 -1
  746. package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts +0 -46
  747. package/dist/src/foundation/structured-agent-runtime/backpressure.js +0 -118
  748. package/dist/src/foundation/structured-agent-runtime/commands.d.ts +0 -52
  749. package/dist/src/foundation/structured-agent-runtime/commands.js +0 -164
  750. package/dist/src/foundation/structured-agent-runtime/handshake.d.ts +0 -41
  751. package/dist/src/foundation/structured-agent-runtime/handshake.js +0 -151
  752. package/dist/src/foundation/structured-agent-runtime/index.d.ts +0 -5
  753. package/dist/src/foundation/structured-agent-runtime/index.js +0 -5
  754. package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts +0 -37
  755. package/dist/src/foundation/structured-agent-runtime/reconnection.js +0 -129
  756. package/dist/src/foundation/structured-agent-runtime/state.d.ts +0 -56
  757. package/dist/src/foundation/structured-agent-runtime/state.js +0 -118
  758. package/dist/src/foundation/supervision/index.d.ts +0 -3
  759. package/dist/src/foundation/supervision/index.js +0 -3
  760. package/dist/src/foundation/supervision/main.d.ts +0 -1
  761. package/dist/src/foundation/supervision/main.js +0 -41
  762. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  763. package/dist/src/foundation/supervision/paths.js +0 -1
  764. package/dist/src/foundation/supervision/server.d.ts +0 -22
  765. package/dist/src/foundation/supervision/server.js +0 -451
  766. package/dist/src/foundation/ui-apps/contracts.d.ts +0 -42
  767. package/dist/src/foundation/ui-apps/host.d.ts +0 -42
  768. package/dist/src/foundation/ui-apps/host.js +0 -152
  769. package/dist/src/foundation/ui-apps/index.d.ts +0 -3
  770. package/dist/src/foundation/ui-apps/index.js +0 -3
  771. package/dist/src/foundation/ui-apps/registry.d.ts +0 -11
  772. package/dist/src/foundation/ui-apps/registry.js +0 -32
  773. package/dist/src/foundation/ui-components/dialog-panel.js +0 -47
  774. package/dist/src/foundation/ui-components/frame.d.ts +0 -21
  775. package/dist/src/foundation/ui-components/frame.js +0 -54
  776. package/dist/src/foundation/ui-components/index.d.ts +0 -18
  777. package/dist/src/foundation/ui-components/index.js +0 -18
  778. package/dist/src/foundation/ui-components/line-input.d.ts +0 -74
  779. package/dist/src/foundation/ui-components/line-input.js +0 -245
  780. package/dist/src/foundation/ui-components/list-view.d.ts +0 -66
  781. package/dist/src/foundation/ui-components/list-view.js +0 -76
  782. package/dist/src/foundation/ui-components/mouse.d.ts +0 -15
  783. package/dist/src/foundation/ui-components/mouse.js +0 -46
  784. package/dist/src/foundation/ui-components/scrollbar.d.ts +0 -62
  785. package/dist/src/foundation/ui-components/scrollbar.js +0 -102
  786. package/dist/src/foundation/ui-components/shortcuts.d.ts +0 -57
  787. package/dist/src/foundation/ui-components/shortcuts.js +0 -81
  788. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  789. package/dist/src/foundation/ui-components/spans.js +0 -59
  790. package/dist/src/foundation/ui-components/surface.d.ts +0 -20
  791. package/dist/src/foundation/ui-components/surface.js +0 -38
  792. package/dist/src/foundation/ui-components/text.d.ts +0 -24
  793. package/dist/src/foundation/ui-components/text.js +0 -123
  794. package/dist/src/foundation/workspace-contracts/index.d.ts +0 -2
  795. package/dist/src/foundation/workspace-contracts/index.js +0 -2
  796. package/dist/src/foundation/workspace-contracts/model.d.ts +0 -248
  797. package/dist/src/foundation/workspace-contracts/model.js +0 -2
  798. package/dist/src/foundation/workspace-contracts/validation.d.ts +0 -13
  799. package/dist/src/foundation/workspace-contracts/validation.js +0 -335
  800. package/dist/src/product-identity.d.ts +0 -37
  801. package/dist/src/product-identity.js +0 -150
  802. package/dist/src/product-identity.json +0 -99
  803. package/docs/manual-transparent-checkpoint.md +0 -53
  804. /package/dist/{src/foundation/agent-engine-contracts/domain.js → app/session-shell/paste-helper.d.ts} +0 -0
  805. /package/dist/{src/foundation/agent-engine-contracts/ports.js → app/session-shell/paste-text-worker.d.ts} +0 -0
  806. /package/dist/{src/foundation/lifecycle/commands.js → app/session-shell/paste-types.js} +0 -0
  807. /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → app/session-shell/response-copy-helper.d.ts} +0 -0
  808. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  809. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  810. /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → contracts/agent-engine/domain.js} +0 -0
  811. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  812. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  813. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  814. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  815. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  816. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  817. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  818. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  819. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  820. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  821. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  822. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  823. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  824. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  825. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  826. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  827. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  828. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  829. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  830. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  831. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  832. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  833. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  834. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  835. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  836. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  837. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  838. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  839. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  840. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  841. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  842. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  843. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  844. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  845. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  846. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  847. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  848. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  849. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  850. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  851. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  852. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  853. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  854. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  855. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  856. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  857. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  858. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  859. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  860. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  861. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  862. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  863. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  864. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  865. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  866. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  867. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  868. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  869. /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>;