@omnitron-dev/omnitron 0.3.1 → 0.3.2

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 (1687) hide show
  1. package/README.md +575 -0
  2. package/data/operations/managed-kernel.mjs +302 -0
  3. package/data/operations/stage-kernel.mjs +125 -0
  4. package/dist/BUILD.json +4 -3
  5. package/dist/cli/exit-after-output.d.ts +3 -0
  6. package/dist/cli/exit-after-output.d.ts.map +1 -0
  7. package/dist/cli/exit-after-output.js +11 -0
  8. package/dist/cli/exit-after-output.js.map +1 -0
  9. package/dist/cli/installed.d.ts +3 -0
  10. package/dist/cli/installed.d.ts.map +1 -0
  11. package/dist/cli/installed.js +17 -0
  12. package/dist/cli/installed.js.map +1 -0
  13. package/dist/cli/omnitron.js +432 -100
  14. package/dist/cli/omnitron.js.map +1 -1
  15. package/dist/cli/output-command.d.ts +13 -0
  16. package/dist/cli/output-command.d.ts.map +1 -0
  17. package/dist/cli/output-command.js +48 -0
  18. package/dist/cli/output-command.js.map +1 -0
  19. package/dist/cluster/cluster.rpc-service.d.ts +9 -77
  20. package/dist/cluster/cluster.rpc-service.d.ts.map +1 -1
  21. package/dist/cluster/cluster.rpc-service.js +20 -107
  22. package/dist/cluster/cluster.rpc-service.js.map +1 -1
  23. package/dist/cluster/enrollment.d.ts +9 -0
  24. package/dist/cluster/enrollment.d.ts.map +1 -0
  25. package/dist/cluster/enrollment.js +49 -0
  26. package/dist/cluster/enrollment.js.map +1 -0
  27. package/dist/cluster/index.d.ts +1 -1
  28. package/dist/cluster/index.d.ts.map +1 -1
  29. package/dist/cluster/leader-election.d.ts +39 -211
  30. package/dist/cluster/leader-election.d.ts.map +1 -1
  31. package/dist/cluster/leader-election.js +235 -512
  32. package/dist/cluster/leader-election.js.map +1 -1
  33. package/dist/cluster/mesh-link.d.ts +18 -51
  34. package/dist/cluster/mesh-link.d.ts.map +1 -1
  35. package/dist/cluster/mesh-link.js +65 -77
  36. package/dist/cluster/mesh-link.js.map +1 -1
  37. package/dist/cluster/mesh.d.ts +3 -1
  38. package/dist/cluster/mesh.d.ts.map +1 -1
  39. package/dist/cluster/mesh.js +76 -60
  40. package/dist/cluster/mesh.js.map +1 -1
  41. package/dist/cluster/slave-connector.d.ts +40 -4
  42. package/dist/cluster/slave-connector.d.ts.map +1 -1
  43. package/dist/cluster/slave-connector.js +348 -195
  44. package/dist/cluster/slave-connector.js.map +1 -1
  45. package/dist/cluster/standalone-infrastructure.d.ts +3 -0
  46. package/dist/cluster/standalone-infrastructure.d.ts.map +1 -0
  47. package/dist/cluster/standalone-infrastructure.js +25 -0
  48. package/dist/cluster/standalone-infrastructure.js.map +1 -0
  49. package/dist/cluster/stop-authority.d.ts +45 -0
  50. package/dist/cluster/stop-authority.d.ts.map +1 -0
  51. package/dist/cluster/stop-authority.js +112 -0
  52. package/dist/cluster/stop-authority.js.map +1 -0
  53. package/dist/commands/access.d.ts +9 -0
  54. package/dist/commands/access.d.ts.map +1 -0
  55. package/dist/commands/access.js +45 -0
  56. package/dist/commands/access.js.map +1 -0
  57. package/dist/commands/audit.d.ts +2 -0
  58. package/dist/commands/audit.d.ts.map +1 -1
  59. package/dist/commands/audit.js +9 -4
  60. package/dist/commands/audit.js.map +1 -1
  61. package/dist/commands/backend.d.ts +17 -0
  62. package/dist/commands/backend.d.ts.map +1 -0
  63. package/dist/commands/backend.js +264 -0
  64. package/dist/commands/backend.js.map +1 -0
  65. package/dist/commands/backup.d.ts +5 -0
  66. package/dist/commands/backup.d.ts.map +1 -1
  67. package/dist/commands/backup.js +17 -2
  68. package/dist/commands/backup.js.map +1 -1
  69. package/dist/commands/cluster.d.ts.map +1 -1
  70. package/dist/commands/cluster.js +33 -42
  71. package/dist/commands/cluster.js.map +1 -1
  72. package/dist/commands/daemon-cmd.d.ts.map +1 -1
  73. package/dist/commands/daemon-cmd.js +14 -3
  74. package/dist/commands/daemon-cmd.js.map +1 -1
  75. package/dist/commands/doctor.d.ts +11 -29
  76. package/dist/commands/doctor.d.ts.map +1 -1
  77. package/dist/commands/doctor.js +47 -45
  78. package/dist/commands/doctor.js.map +1 -1
  79. package/dist/commands/files.d.ts +19 -0
  80. package/dist/commands/files.d.ts.map +1 -0
  81. package/dist/commands/files.js +226 -0
  82. package/dist/commands/files.js.map +1 -0
  83. package/dist/commands/fleet-rollout.d.ts +25 -0
  84. package/dist/commands/fleet-rollout.d.ts.map +1 -0
  85. package/dist/commands/fleet-rollout.js +155 -0
  86. package/dist/commands/fleet-rollout.js.map +1 -0
  87. package/dist/commands/fleet.d.ts.map +1 -1
  88. package/dist/commands/fleet.js +1 -0
  89. package/dist/commands/fleet.js.map +1 -1
  90. package/dist/commands/health-check.d.ts.map +1 -1
  91. package/dist/commands/health-check.js +13 -6
  92. package/dist/commands/health-check.js.map +1 -1
  93. package/dist/commands/infra.d.ts +5 -2
  94. package/dist/commands/infra.d.ts.map +1 -1
  95. package/dist/commands/infra.js +145 -53
  96. package/dist/commands/infra.js.map +1 -1
  97. package/dist/commands/logs.d.ts +6 -23
  98. package/dist/commands/logs.d.ts.map +1 -1
  99. package/dist/commands/logs.js +114 -38
  100. package/dist/commands/logs.js.map +1 -1
  101. package/dist/commands/metrics.d.ts.map +1 -1
  102. package/dist/commands/metrics.js +7 -1
  103. package/dist/commands/metrics.js.map +1 -1
  104. package/dist/commands/migrate.d.ts +8 -0
  105. package/dist/commands/migrate.d.ts.map +1 -0
  106. package/dist/commands/migrate.js +64 -0
  107. package/dist/commands/migrate.js.map +1 -0
  108. package/dist/commands/node-reconcile.d.ts +8 -0
  109. package/dist/commands/node-reconcile.d.ts.map +1 -0
  110. package/dist/commands/node-reconcile.js +49 -0
  111. package/dist/commands/node-reconcile.js.map +1 -0
  112. package/dist/commands/node.d.ts +0 -8
  113. package/dist/commands/node.d.ts.map +1 -1
  114. package/dist/commands/node.js +32 -35
  115. package/dist/commands/node.js.map +1 -1
  116. package/dist/commands/output.d.ts +3 -9
  117. package/dist/commands/output.d.ts.map +1 -1
  118. package/dist/commands/output.js +34 -25
  119. package/dist/commands/output.js.map +1 -1
  120. package/dist/commands/pipeline.d.ts +11 -2
  121. package/dist/commands/pipeline.d.ts.map +1 -1
  122. package/dist/commands/pipeline.js +75 -15
  123. package/dist/commands/pipeline.js.map +1 -1
  124. package/dist/commands/project.d.ts +8 -0
  125. package/dist/commands/project.d.ts.map +1 -1
  126. package/dist/commands/project.js +67 -1
  127. package/dist/commands/project.js.map +1 -1
  128. package/dist/commands/release-store.js +1 -1
  129. package/dist/commands/release-store.js.map +1 -1
  130. package/dist/commands/release.d.ts +5 -12
  131. package/dist/commands/release.d.ts.map +1 -1
  132. package/dist/commands/release.js +141 -33
  133. package/dist/commands/release.js.map +1 -1
  134. package/dist/commands/scale.d.ts +1 -4
  135. package/dist/commands/scale.d.ts.map +1 -1
  136. package/dist/commands/scale.js +39 -19
  137. package/dist/commands/scale.js.map +1 -1
  138. package/dist/commands/secret-input.d.ts +3 -0
  139. package/dist/commands/secret-input.d.ts.map +1 -0
  140. package/dist/commands/secret-input.js +36 -0
  141. package/dist/commands/secret-input.js.map +1 -0
  142. package/dist/commands/secret.d.ts +4 -2
  143. package/dist/commands/secret.d.ts.map +1 -1
  144. package/dist/commands/secret.js +12 -2
  145. package/dist/commands/secret.js.map +1 -1
  146. package/dist/commands/service-resident.d.ts +25 -0
  147. package/dist/commands/service-resident.d.ts.map +1 -0
  148. package/dist/commands/service-resident.js +236 -0
  149. package/dist/commands/service-resident.js.map +1 -0
  150. package/dist/commands/service-units.d.ts +13 -1
  151. package/dist/commands/service-units.d.ts.map +1 -1
  152. package/dist/commands/service-units.js +38 -16
  153. package/dist/commands/service-units.js.map +1 -1
  154. package/dist/commands/service.d.ts +2 -24
  155. package/dist/commands/service.d.ts.map +1 -1
  156. package/dist/commands/service.js +89 -7
  157. package/dist/commands/service.js.map +1 -1
  158. package/dist/commands/stack.d.ts +11 -6
  159. package/dist/commands/stack.d.ts.map +1 -1
  160. package/dist/commands/stack.js +212 -38
  161. package/dist/commands/stack.js.map +1 -1
  162. package/dist/commands/start.d.ts +0 -21
  163. package/dist/commands/start.d.ts.map +1 -1
  164. package/dist/commands/start.js +33 -43
  165. package/dist/commands/start.js.map +1 -1
  166. package/dist/commands/status.d.ts +1 -5
  167. package/dist/commands/status.d.ts.map +1 -1
  168. package/dist/commands/status.js +5 -1
  169. package/dist/commands/status.js.map +1 -1
  170. package/dist/commands/stop.d.ts +0 -22
  171. package/dist/commands/stop.d.ts.map +1 -1
  172. package/dist/commands/stop.js +26 -86
  173. package/dist/commands/stop.js.map +1 -1
  174. package/dist/commands/system.d.ts +4 -0
  175. package/dist/commands/system.d.ts.map +1 -0
  176. package/dist/commands/system.js +41 -0
  177. package/dist/commands/system.js.map +1 -0
  178. package/dist/commands/terminal.d.ts +7 -0
  179. package/dist/commands/terminal.d.ts.map +1 -0
  180. package/dist/commands/terminal.js +184 -0
  181. package/dist/commands/terminal.js.map +1 -0
  182. package/dist/commands/topology.d.ts +3 -0
  183. package/dist/commands/topology.d.ts.map +1 -0
  184. package/dist/commands/topology.js +107 -0
  185. package/dist/commands/topology.js.map +1 -0
  186. package/dist/commands/up.d.ts +4 -54
  187. package/dist/commands/up.d.ts.map +1 -1
  188. package/dist/commands/up.js +41 -98
  189. package/dist/commands/up.js.map +1 -1
  190. package/dist/commands/webapp.d.ts +0 -9
  191. package/dist/commands/webapp.d.ts.map +1 -1
  192. package/dist/commands/webapp.js +116 -69
  193. package/dist/commands/webapp.js.map +1 -1
  194. package/dist/config/app-path.d.ts +4 -0
  195. package/dist/config/app-path.d.ts.map +1 -0
  196. package/dist/config/app-path.js +6 -0
  197. package/dist/config/app-path.js.map +1 -0
  198. package/dist/config/defaults.d.ts.map +1 -1
  199. package/dist/config/defaults.js +9 -3
  200. package/dist/config/defaults.js.map +1 -1
  201. package/dist/config/define-ecosystem.d.ts.map +1 -1
  202. package/dist/config/define-ecosystem.js +12 -0
  203. package/dist/config/define-ecosystem.js.map +1 -1
  204. package/dist/config/index.d.ts +3 -1
  205. package/dist/config/index.d.ts.map +1 -1
  206. package/dist/config/index.js +1 -1
  207. package/dist/config/index.js.map +1 -1
  208. package/dist/config/loader-child.d.ts +2 -0
  209. package/dist/config/loader-child.d.ts.map +1 -0
  210. package/dist/config/loader-child.js +56 -0
  211. package/dist/config/loader-child.js.map +1 -0
  212. package/dist/config/loader.d.ts +7 -2
  213. package/dist/config/loader.d.ts.map +1 -1
  214. package/dist/config/loader.js +14 -27
  215. package/dist/config/loader.js.map +1 -1
  216. package/dist/config/saved.d.ts +67 -0
  217. package/dist/config/saved.d.ts.map +1 -0
  218. package/dist/config/saved.js +81 -0
  219. package/dist/config/saved.js.map +1 -0
  220. package/dist/config/types.d.ts +96 -52
  221. package/dist/config/types.d.ts.map +1 -1
  222. package/dist/daemon/backend-candidate.d.ts +32 -0
  223. package/dist/daemon/backend-candidate.d.ts.map +1 -0
  224. package/dist/daemon/backend-candidate.js +129 -0
  225. package/dist/daemon/backend-candidate.js.map +1 -0
  226. package/dist/daemon/backend-child.d.ts +5 -0
  227. package/dist/daemon/backend-child.d.ts.map +1 -0
  228. package/dist/daemon/backend-child.js +13 -0
  229. package/dist/daemon/backend-child.js.map +1 -0
  230. package/dist/daemon/backend-control.d.ts +43 -0
  231. package/dist/daemon/backend-control.d.ts.map +1 -0
  232. package/dist/daemon/backend-control.js +155 -0
  233. package/dist/daemon/backend-control.js.map +1 -0
  234. package/dist/daemon/backend-crash-recovery.d.ts +4 -0
  235. package/dist/daemon/backend-crash-recovery.d.ts.map +1 -0
  236. package/dist/daemon/backend-crash-recovery.js +136 -0
  237. package/dist/daemon/backend-crash-recovery.js.map +1 -0
  238. package/dist/daemon/backend-handoff-types.d.ts +27 -0
  239. package/dist/daemon/backend-handoff-types.d.ts.map +1 -0
  240. package/dist/daemon/backend-handoff-types.js +33 -0
  241. package/dist/daemon/backend-handoff-types.js.map +1 -0
  242. package/dist/daemon/backend-recovery-journal.d.ts +30 -0
  243. package/dist/daemon/backend-recovery-journal.d.ts.map +1 -0
  244. package/dist/daemon/backend-recovery-journal.js +67 -0
  245. package/dist/daemon/backend-recovery-journal.js.map +1 -0
  246. package/dist/daemon/backend-recovery-monitor.d.ts +35 -0
  247. package/dist/daemon/backend-recovery-monitor.d.ts.map +1 -0
  248. package/dist/daemon/backend-recovery-monitor.js +113 -0
  249. package/dist/daemon/backend-recovery-monitor.js.map +1 -0
  250. package/dist/daemon/backend-supervisor-entry.d.ts +2 -0
  251. package/dist/daemon/backend-supervisor-entry.d.ts.map +1 -0
  252. package/dist/daemon/backend-supervisor-entry.js +3 -0
  253. package/dist/daemon/backend-supervisor-entry.js.map +1 -0
  254. package/dist/daemon/backend-supervisor-main.d.ts +2 -0
  255. package/dist/daemon/backend-supervisor-main.d.ts.map +1 -0
  256. package/dist/daemon/backend-supervisor-main.js +45 -0
  257. package/dist/daemon/backend-supervisor-main.js.map +1 -0
  258. package/dist/daemon/backend-supervisor.d.ts +61 -0
  259. package/dist/daemon/backend-supervisor.d.ts.map +1 -0
  260. package/dist/daemon/backend-supervisor.js +339 -0
  261. package/dist/daemon/backend-supervisor.js.map +1 -0
  262. package/dist/daemon/backend-upgrade.d.ts +41 -0
  263. package/dist/daemon/backend-upgrade.d.ts.map +1 -0
  264. package/dist/daemon/backend-upgrade.js +444 -0
  265. package/dist/daemon/backend-upgrade.js.map +1 -0
  266. package/dist/daemon/backend.rpc-service.d.ts +11 -0
  267. package/dist/daemon/backend.rpc-service.d.ts.map +1 -0
  268. package/dist/daemon/backend.rpc-service.js +44 -0
  269. package/dist/daemon/backend.rpc-service.js.map +1 -0
  270. package/dist/daemon/daemon-client.d.ts +12 -79
  271. package/dist/daemon/daemon-client.d.ts.map +1 -1
  272. package/dist/daemon/daemon-client.js +28 -270
  273. package/dist/daemon/daemon-client.js.map +1 -1
  274. package/dist/daemon/daemon-entry.d.ts +0 -7
  275. package/dist/daemon/daemon-entry.d.ts.map +1 -1
  276. package/dist/daemon/daemon-entry.js +2 -115
  277. package/dist/daemon/daemon-entry.js.map +1 -1
  278. package/dist/daemon/daemon-main.d.ts +9 -0
  279. package/dist/daemon/daemon-main.d.ts.map +1 -0
  280. package/dist/daemon/daemon-main.js +105 -0
  281. package/dist/daemon/daemon-main.js.map +1 -0
  282. package/dist/daemon/daemon-scheduler.d.ts +8 -5
  283. package/dist/daemon/daemon-scheduler.d.ts.map +1 -1
  284. package/dist/daemon/daemon-scheduler.js +45 -73
  285. package/dist/daemon/daemon-scheduler.js.map +1 -1
  286. package/dist/daemon/daemon-state-store.service.d.ts +5 -39
  287. package/dist/daemon/daemon-state-store.service.d.ts.map +1 -1
  288. package/dist/daemon/daemon-state-store.service.js +30 -17
  289. package/dist/daemon/daemon-state-store.service.js.map +1 -1
  290. package/dist/daemon/daemon.d.ts +45 -60
  291. package/dist/daemon/daemon.d.ts.map +1 -1
  292. package/dist/daemon/daemon.js +720 -396
  293. package/dist/daemon/daemon.js.map +1 -1
  294. package/dist/daemon/daemon.module.d.ts +13 -11
  295. package/dist/daemon/daemon.module.d.ts.map +1 -1
  296. package/dist/daemon/daemon.module.js +136 -101
  297. package/dist/daemon/daemon.module.js.map +1 -1
  298. package/dist/daemon/daemon.rpc-service.d.ts +9 -17
  299. package/dist/daemon/daemon.rpc-service.d.ts.map +1 -1
  300. package/dist/daemon/daemon.rpc-service.js +83 -22
  301. package/dist/daemon/daemon.rpc-service.js.map +1 -1
  302. package/dist/daemon/darwin-owner-evidence.d.ts +57 -0
  303. package/dist/daemon/darwin-owner-evidence.d.ts.map +1 -0
  304. package/dist/daemon/darwin-owner-evidence.js +131 -0
  305. package/dist/daemon/darwin-owner-evidence.js.map +1 -0
  306. package/dist/daemon/database-startup.d.ts +7 -0
  307. package/dist/daemon/database-startup.d.ts.map +1 -0
  308. package/dist/daemon/database-startup.js +40 -0
  309. package/dist/daemon/database-startup.js.map +1 -0
  310. package/dist/daemon/entry-guard.d.ts +2 -0
  311. package/dist/daemon/entry-guard.d.ts.map +1 -0
  312. package/dist/daemon/entry-guard.js +34 -0
  313. package/dist/daemon/entry-guard.js.map +1 -0
  314. package/dist/daemon/execution-capabilities.d.ts +7 -0
  315. package/dist/daemon/execution-capabilities.d.ts.map +1 -0
  316. package/dist/daemon/execution-capabilities.js +23 -0
  317. package/dist/daemon/execution-capabilities.js.map +1 -0
  318. package/dist/daemon/execution-client.d.ts +88 -0
  319. package/dist/daemon/execution-client.d.ts.map +1 -0
  320. package/dist/daemon/execution-client.js +433 -0
  321. package/dist/daemon/execution-client.js.map +1 -0
  322. package/dist/daemon/execution-config.d.ts +7 -0
  323. package/dist/daemon/execution-config.d.ts.map +1 -0
  324. package/dist/daemon/execution-config.js +61 -0
  325. package/dist/daemon/execution-config.js.map +1 -0
  326. package/dist/daemon/execution-entry.d.ts +2 -0
  327. package/dist/daemon/execution-entry.d.ts.map +1 -0
  328. package/dist/daemon/execution-entry.js +3 -0
  329. package/dist/daemon/execution-entry.js.map +1 -0
  330. package/dist/daemon/execution-host.d.ts +133 -0
  331. package/dist/daemon/execution-host.d.ts.map +1 -0
  332. package/dist/daemon/execution-host.js +308 -0
  333. package/dist/daemon/execution-host.js.map +1 -0
  334. package/dist/daemon/execution-journal.d.ts +17 -0
  335. package/dist/daemon/execution-journal.d.ts.map +1 -0
  336. package/dist/daemon/execution-journal.js +75 -0
  337. package/dist/daemon/execution-journal.js.map +1 -0
  338. package/dist/daemon/execution-launcher.d.ts +12 -0
  339. package/dist/daemon/execution-launcher.d.ts.map +1 -0
  340. package/dist/daemon/execution-launcher.js +110 -0
  341. package/dist/daemon/execution-launcher.js.map +1 -0
  342. package/dist/daemon/execution-main.d.ts +2 -0
  343. package/dist/daemon/execution-main.d.ts.map +1 -0
  344. package/dist/daemon/execution-main.js +48 -0
  345. package/dist/daemon/execution-main.js.map +1 -0
  346. package/dist/daemon/execution-owner.d.ts +16 -0
  347. package/dist/daemon/execution-owner.d.ts.map +1 -0
  348. package/dist/daemon/execution-owner.js +97 -0
  349. package/dist/daemon/execution-owner.js.map +1 -0
  350. package/dist/daemon/execution-platform.d.ts +3 -0
  351. package/dist/daemon/execution-platform.d.ts.map +1 -0
  352. package/dist/daemon/execution-platform.js +23 -0
  353. package/dist/daemon/execution-platform.js.map +1 -0
  354. package/dist/daemon/execution-shutdown.d.ts +13 -0
  355. package/dist/daemon/execution-shutdown.d.ts.map +1 -0
  356. package/dist/daemon/execution-shutdown.js +30 -0
  357. package/dist/daemon/execution-shutdown.js.map +1 -0
  358. package/dist/daemon/managed-entry.d.ts +2 -0
  359. package/dist/daemon/managed-entry.d.ts.map +1 -0
  360. package/dist/daemon/managed-entry.js +3 -0
  361. package/dist/daemon/managed-entry.js.map +1 -0
  362. package/dist/daemon/managed-main.d.ts +2 -0
  363. package/dist/daemon/managed-main.d.ts.map +1 -0
  364. package/dist/daemon/managed-main.js +29 -0
  365. package/dist/daemon/managed-main.js.map +1 -0
  366. package/dist/daemon/managed-owner-build.d.ts +17 -0
  367. package/dist/daemon/managed-owner-build.d.ts.map +1 -0
  368. package/dist/daemon/managed-owner-build.js +108 -0
  369. package/dist/daemon/managed-owner-build.js.map +1 -0
  370. package/dist/daemon/managed-owner-entry.d.ts +2 -0
  371. package/dist/daemon/managed-owner-entry.d.ts.map +1 -0
  372. package/dist/daemon/managed-owner-entry.js +3 -0
  373. package/dist/daemon/managed-owner-entry.js.map +1 -0
  374. package/dist/daemon/managed-owner-main.d.ts +2 -0
  375. package/dist/daemon/managed-owner-main.d.ts.map +1 -0
  376. package/dist/daemon/managed-owner-main.js +53 -0
  377. package/dist/daemon/managed-owner-main.js.map +1 -0
  378. package/dist/daemon/managed-runtime.d.ts +39 -0
  379. package/dist/daemon/managed-runtime.d.ts.map +1 -0
  380. package/dist/daemon/managed-runtime.js +137 -0
  381. package/dist/daemon/managed-runtime.js.map +1 -0
  382. package/dist/daemon/network-publication.d.ts +5 -0
  383. package/dist/daemon/network-publication.d.ts.map +1 -0
  384. package/dist/daemon/network-publication.js +25 -0
  385. package/dist/daemon/network-publication.js.map +1 -0
  386. package/dist/daemon/owner-reconciliation.d.ts +58 -0
  387. package/dist/daemon/owner-reconciliation.d.ts.map +1 -0
  388. package/dist/daemon/owner-reconciliation.js +265 -0
  389. package/dist/daemon/owner-reconciliation.js.map +1 -0
  390. package/dist/daemon/pid-manager.d.ts +2 -0
  391. package/dist/daemon/pid-manager.d.ts.map +1 -1
  392. package/dist/daemon/pid-manager.js +5 -0
  393. package/dist/daemon/pid-manager.js.map +1 -1
  394. package/dist/daemon/private-control-client.d.ts +8 -0
  395. package/dist/daemon/private-control-client.d.ts.map +1 -0
  396. package/dist/daemon/private-control-client.js +41 -0
  397. package/dist/daemon/private-control-client.js.map +1 -0
  398. package/dist/daemon/recovery-state.d.ts +20 -0
  399. package/dist/daemon/recovery-state.d.ts.map +1 -0
  400. package/dist/daemon/recovery-state.js +53 -0
  401. package/dist/daemon/recovery-state.js.map +1 -0
  402. package/dist/daemon/rpc-connection.d.ts +29 -0
  403. package/dist/daemon/rpc-connection.d.ts.map +1 -0
  404. package/dist/daemon/rpc-connection.js +137 -0
  405. package/dist/daemon/rpc-connection.js.map +1 -0
  406. package/dist/daemon/runtime-installation.d.ts +58 -0
  407. package/dist/daemon/runtime-installation.d.ts.map +1 -0
  408. package/dist/daemon/runtime-installation.js +346 -0
  409. package/dist/daemon/runtime-installation.js.map +1 -0
  410. package/dist/daemon/runtime-launcher.d.ts +6 -0
  411. package/dist/daemon/runtime-launcher.d.ts.map +1 -0
  412. package/dist/daemon/runtime-launcher.js +45 -0
  413. package/dist/daemon/runtime-launcher.js.map +1 -0
  414. package/dist/daemon/schema-transition.d.ts +43 -0
  415. package/dist/daemon/schema-transition.d.ts.map +1 -0
  416. package/dist/daemon/schema-transition.js +239 -0
  417. package/dist/daemon/schema-transition.js.map +1 -0
  418. package/dist/daemon/spawn-daemon.d.ts +2 -0
  419. package/dist/daemon/spawn-daemon.d.ts.map +1 -1
  420. package/dist/daemon/spawn-daemon.js +4 -0
  421. package/dist/daemon/spawn-daemon.js.map +1 -1
  422. package/dist/daemon/startup-config.d.ts +77 -0
  423. package/dist/daemon/startup-config.d.ts.map +1 -0
  424. package/dist/daemon/startup-config.js +31 -0
  425. package/dist/daemon/startup-config.js.map +1 -0
  426. package/dist/daemon/startup-failure-journal.d.ts +3 -0
  427. package/dist/daemon/startup-failure-journal.d.ts.map +1 -0
  428. package/dist/daemon/startup-failure-journal.js +29 -0
  429. package/dist/daemon/startup-failure-journal.js.map +1 -0
  430. package/dist/daemon/state-store.d.ts +16 -24
  431. package/dist/daemon/state-store.d.ts.map +1 -1
  432. package/dist/daemon/state-store.js +51 -9
  433. package/dist/daemon/state-store.js.map +1 -1
  434. package/dist/daemon/supervisor-transition.d.ts +101 -0
  435. package/dist/daemon/supervisor-transition.d.ts.map +1 -0
  436. package/dist/daemon/supervisor-transition.js +503 -0
  437. package/dist/daemon/supervisor-transition.js.map +1 -0
  438. package/dist/daemon/system-guardian-cgroup.d.ts +16 -0
  439. package/dist/daemon/system-guardian-cgroup.d.ts.map +1 -0
  440. package/dist/daemon/system-guardian-cgroup.js +202 -0
  441. package/dist/daemon/system-guardian-cgroup.js.map +1 -0
  442. package/dist/daemon/system-guardian-unit.d.ts +9 -0
  443. package/dist/daemon/system-guardian-unit.d.ts.map +1 -0
  444. package/dist/daemon/system-guardian-unit.js +41 -0
  445. package/dist/daemon/system-guardian-unit.js.map +1 -0
  446. package/dist/database/connection.d.ts.map +1 -1
  447. package/dist/database/connection.js +2 -6
  448. package/dist/database/connection.js.map +1 -1
  449. package/dist/database/log-durability.d.ts +5 -0
  450. package/dist/database/log-durability.d.ts.map +1 -0
  451. package/dist/database/log-durability.js +28 -0
  452. package/dist/database/log-durability.js.map +1 -0
  453. package/dist/database/migrate.js +2 -15
  454. package/dist/database/migrate.js.map +1 -1
  455. package/dist/database/migration-registry-compatibility.d.ts +13 -0
  456. package/dist/database/migration-registry-compatibility.d.ts.map +1 -0
  457. package/dist/database/migration-registry-compatibility.js +108 -0
  458. package/dist/database/migration-registry-compatibility.js.map +1 -0
  459. package/dist/database/migration-runner.d.ts +8 -42
  460. package/dist/database/migration-runner.d.ts.map +1 -1
  461. package/dist/database/migration-runner.js +114 -123
  462. package/dist/database/migration-runner.js.map +1 -1
  463. package/dist/database/migrations/014_replication_receipts.d.ts +5 -0
  464. package/dist/database/migrations/014_replication_receipts.d.ts.map +1 -0
  465. package/dist/database/migrations/014_replication_receipts.js +6 -0
  466. package/dist/database/migrations/014_replication_receipts.js.map +1 -0
  467. package/dist/database/migrations/015_persistent_metrics.d.ts +5 -0
  468. package/dist/database/migrations/015_persistent_metrics.d.ts.map +1 -0
  469. package/dist/database/migrations/015_persistent_metrics.js +7 -0
  470. package/dist/database/migrations/015_persistent_metrics.js.map +1 -0
  471. package/dist/database/migrations/016_cluster_lease.d.ts +4 -0
  472. package/dist/database/migrations/016_cluster_lease.d.ts.map +1 -0
  473. package/dist/database/migrations/016_cluster_lease.js +6 -0
  474. package/dist/database/migrations/016_cluster_lease.js.map +1 -0
  475. package/dist/database/migrations/index.d.ts +1 -1
  476. package/dist/database/migrations/index.d.ts.map +1 -1
  477. package/dist/database/migrations/index.js +22 -13
  478. package/dist/database/migrations/index.js.map +1 -1
  479. package/dist/database/schema-compatibility.d.ts +34 -0
  480. package/dist/database/schema-compatibility.d.ts.map +1 -0
  481. package/dist/database/schema-compatibility.js +109 -0
  482. package/dist/database/schema-compatibility.js.map +1 -0
  483. package/dist/database/schema-expansion-policy.d.ts +10 -0
  484. package/dist/database/schema-expansion-policy.d.ts.map +1 -0
  485. package/dist/database/schema-expansion-policy.js +21 -0
  486. package/dist/database/schema-expansion-policy.js.map +1 -0
  487. package/dist/database/schema-transition-plan.d.ts +53 -0
  488. package/dist/database/schema-transition-plan.d.ts.map +1 -0
  489. package/dist/database/schema-transition-plan.js +102 -0
  490. package/dist/database/schema-transition-plan.js.map +1 -0
  491. package/dist/database/schema-worker.d.ts +2 -0
  492. package/dist/database/schema-worker.d.ts.map +1 -0
  493. package/dist/database/schema-worker.js +55 -0
  494. package/dist/database/schema-worker.js.map +1 -0
  495. package/dist/database/schema.d.ts +6 -1
  496. package/dist/database/schema.d.ts.map +1 -1
  497. package/dist/database/slave-migrations/001_replication_evidence.d.ts +4 -0
  498. package/dist/database/slave-migrations/001_replication_evidence.d.ts.map +1 -0
  499. package/dist/database/slave-migrations/001_replication_evidence.js +89 -0
  500. package/dist/database/slave-migrations/001_replication_evidence.js.map +1 -0
  501. package/dist/database/slave-migrations/index.d.ts +6 -0
  502. package/dist/database/slave-migrations/index.d.ts.map +1 -0
  503. package/dist/database/slave-migrations/index.js +10 -0
  504. package/dist/database/slave-migrations/index.js.map +1 -0
  505. package/dist/diagnostics/index.d.ts +16 -0
  506. package/dist/diagnostics/index.d.ts.map +1 -0
  507. package/dist/diagnostics/index.js +22 -0
  508. package/dist/diagnostics/index.js.map +1 -0
  509. package/dist/execution/command-failure.d.ts +7 -0
  510. package/dist/execution/command-failure.d.ts.map +1 -0
  511. package/dist/execution/command-failure.js +29 -0
  512. package/dist/execution/command-failure.js.map +1 -0
  513. package/dist/execution/execution.service.d.ts +6 -1
  514. package/dist/execution/execution.service.d.ts.map +1 -1
  515. package/dist/execution/execution.service.js +32 -30
  516. package/dist/execution/execution.service.js.map +1 -1
  517. package/dist/files/archive-codec.d.ts +57 -0
  518. package/dist/files/archive-codec.d.ts.map +1 -0
  519. package/dist/files/archive-codec.js +454 -0
  520. package/dist/files/archive-codec.js.map +1 -0
  521. package/dist/files/archive-node.d.ts +27 -0
  522. package/dist/files/archive-node.d.ts.map +1 -0
  523. package/dist/files/archive-node.js +379 -0
  524. package/dist/files/archive-node.js.map +1 -0
  525. package/dist/files/archive-publication.d.ts +26 -0
  526. package/dist/files/archive-publication.d.ts.map +1 -0
  527. package/dist/files/archive-publication.js +224 -0
  528. package/dist/files/archive-publication.js.map +1 -0
  529. package/dist/files/file-config.d.ts +7 -0
  530. package/dist/files/file-config.d.ts.map +1 -0
  531. package/dist/files/file-config.js +11 -0
  532. package/dist/files/file-config.js.map +1 -0
  533. package/dist/files/file-node.d.ts +65 -0
  534. package/dist/files/file-node.d.ts.map +1 -0
  535. package/dist/files/file-node.js +863 -0
  536. package/dist/files/file-node.js.map +1 -0
  537. package/dist/files/file-node.rpc-service.d.ts +12 -0
  538. package/dist/files/file-node.rpc-service.d.ts.map +1 -0
  539. package/dist/files/file-node.rpc-service.js +42 -0
  540. package/dist/files/file-node.rpc-service.js.map +1 -0
  541. package/dist/files/files.rpc-service.d.ts +107 -0
  542. package/dist/files/files.rpc-service.d.ts.map +1 -0
  543. package/dist/files/files.rpc-service.js +769 -0
  544. package/dist/files/files.rpc-service.js.map +1 -0
  545. package/dist/files/structural-policy.d.ts +3 -0
  546. package/dist/files/structural-policy.d.ts.map +1 -0
  547. package/dist/files/structural-policy.js +27 -0
  548. package/dist/files/structural-policy.js.map +1 -0
  549. package/dist/health/contracts.d.ts +30 -0
  550. package/dist/health/contracts.d.ts.map +1 -0
  551. package/dist/health/contracts.js +58 -0
  552. package/dist/health/contracts.js.map +1 -0
  553. package/dist/health/heartbeat.d.ts +11 -0
  554. package/dist/health/heartbeat.d.ts.map +1 -0
  555. package/dist/health/heartbeat.js +32 -0
  556. package/dist/health/heartbeat.js.map +1 -0
  557. package/dist/health/index.d.ts +4 -0
  558. package/dist/health/index.d.ts.map +1 -0
  559. package/dist/health/index.js +2 -0
  560. package/dist/health/index.js.map +1 -0
  561. package/dist/health/readiness.d.ts +15 -0
  562. package/dist/health/readiness.d.ts.map +1 -0
  563. package/dist/health/readiness.js +170 -0
  564. package/dist/health/readiness.js.map +1 -0
  565. package/dist/index.d.ts +1 -0
  566. package/dist/index.d.ts.map +1 -1
  567. package/dist/infrastructure/apt-packages.d.ts +34 -0
  568. package/dist/infrastructure/apt-packages.d.ts.map +1 -0
  569. package/dist/infrastructure/apt-packages.js +232 -0
  570. package/dist/infrastructure/apt-packages.js.map +1 -0
  571. package/dist/infrastructure/bare-metal-plan.d.ts +10 -1
  572. package/dist/infrastructure/bare-metal-plan.d.ts.map +1 -1
  573. package/dist/infrastructure/bare-metal-plan.js +21 -0
  574. package/dist/infrastructure/bare-metal-plan.js.map +1 -1
  575. package/dist/infrastructure/bare-metal-runner.d.ts.map +1 -1
  576. package/dist/infrastructure/bare-metal-runner.js +13 -2
  577. package/dist/infrastructure/bare-metal-runner.js.map +1 -1
  578. package/dist/infrastructure/config-normalizer.d.ts +4 -3
  579. package/dist/infrastructure/config-normalizer.d.ts.map +1 -1
  580. package/dist/infrastructure/config-normalizer.js +11 -3
  581. package/dist/infrastructure/config-normalizer.js.map +1 -1
  582. package/dist/infrastructure/container-runtime.d.ts +37 -3
  583. package/dist/infrastructure/container-runtime.d.ts.map +1 -1
  584. package/dist/infrastructure/container-runtime.js +235 -64
  585. package/dist/infrastructure/container-runtime.js.map +1 -1
  586. package/dist/infrastructure/health-recovery.d.ts +19 -0
  587. package/dist/infrastructure/health-recovery.d.ts.map +1 -0
  588. package/dist/infrastructure/health-recovery.js +39 -0
  589. package/dist/infrastructure/health-recovery.js.map +1 -0
  590. package/dist/infrastructure/host-ingress-config.d.ts.map +1 -1
  591. package/dist/infrastructure/host-ingress-config.js +11 -8
  592. package/dist/infrastructure/host-ingress-config.js.map +1 -1
  593. package/dist/infrastructure/host-ingress-lock.d.ts +2 -3
  594. package/dist/infrastructure/host-ingress-lock.d.ts.map +1 -1
  595. package/dist/infrastructure/host-ingress-lock.js +1 -35
  596. package/dist/infrastructure/host-ingress-lock.js.map +1 -1
  597. package/dist/infrastructure/host-ingress-takeover.js +3 -3
  598. package/dist/infrastructure/host-ingress-takeover.js.map +1 -1
  599. package/dist/infrastructure/host-ingress-types.d.ts +4 -2
  600. package/dist/infrastructure/host-ingress-types.d.ts.map +1 -1
  601. package/dist/infrastructure/host-ingress.service.d.ts.map +1 -1
  602. package/dist/infrastructure/host-ingress.service.js +6 -6
  603. package/dist/infrastructure/host-ingress.service.js.map +1 -1
  604. package/dist/infrastructure/host-inspection.d.ts +1 -0
  605. package/dist/infrastructure/host-inspection.d.ts.map +1 -1
  606. package/dist/infrastructure/host-inspection.js +3 -2
  607. package/dist/infrastructure/host-inspection.js.map +1 -1
  608. package/dist/infrastructure/infrastructure.service.d.ts +80 -29
  609. package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
  610. package/dist/infrastructure/infrastructure.service.js +561 -216
  611. package/dist/infrastructure/infrastructure.service.js.map +1 -1
  612. package/dist/infrastructure/merge-config.d.ts +10 -0
  613. package/dist/infrastructure/merge-config.d.ts.map +1 -0
  614. package/dist/infrastructure/merge-config.js +27 -0
  615. package/dist/infrastructure/merge-config.js.map +1 -0
  616. package/dist/infrastructure/orphan-containers.d.ts +1 -0
  617. package/dist/infrastructure/orphan-containers.d.ts.map +1 -1
  618. package/dist/infrastructure/orphan-containers.js +1 -1
  619. package/dist/infrastructure/orphan-containers.js.map +1 -1
  620. package/dist/infrastructure/owned-container.d.ts +4 -0
  621. package/dist/infrastructure/owned-container.d.ts.map +1 -0
  622. package/dist/infrastructure/owned-container.js +13 -0
  623. package/dist/infrastructure/owned-container.js.map +1 -0
  624. package/dist/infrastructure/phantom-endpoint-janitor.d.ts +4 -1
  625. package/dist/infrastructure/phantom-endpoint-janitor.d.ts.map +1 -1
  626. package/dist/infrastructure/phantom-endpoint-janitor.js +11 -2
  627. package/dist/infrastructure/phantom-endpoint-janitor.js.map +1 -1
  628. package/dist/infrastructure/presets/minio.d.ts.map +1 -1
  629. package/dist/infrastructure/presets/minio.js +15 -25
  630. package/dist/infrastructure/presets/minio.js.map +1 -1
  631. package/dist/infrastructure/presets/postgres.d.ts.map +1 -1
  632. package/dist/infrastructure/presets/postgres.js +35 -31
  633. package/dist/infrastructure/presets/postgres.js.map +1 -1
  634. package/dist/infrastructure/presets/tor.d.ts +1 -2
  635. package/dist/infrastructure/presets/tor.d.ts.map +1 -1
  636. package/dist/infrastructure/presets/tor.js +7 -13
  637. package/dist/infrastructure/presets/tor.js.map +1 -1
  638. package/dist/infrastructure/provisioning-outcome.d.ts +7 -0
  639. package/dist/infrastructure/provisioning-outcome.d.ts.map +1 -1
  640. package/dist/infrastructure/provisioning-outcome.js +41 -8
  641. package/dist/infrastructure/provisioning-outcome.js.map +1 -1
  642. package/dist/infrastructure/service-resolver.d.ts +1 -1
  643. package/dist/infrastructure/service-resolver.d.ts.map +1 -1
  644. package/dist/infrastructure/service-resolver.js +22 -10
  645. package/dist/infrastructure/service-resolver.js.map +1 -1
  646. package/dist/infrastructure/stack-infra-manager.d.ts +25 -4
  647. package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
  648. package/dist/infrastructure/stack-infra-manager.js +181 -21
  649. package/dist/infrastructure/stack-infra-manager.js.map +1 -1
  650. package/dist/infrastructure/types.d.ts +60 -3
  651. package/dist/infrastructure/types.d.ts.map +1 -1
  652. package/dist/mcp/mcp-bridge.js +1 -1
  653. package/dist/mcp/mcp-bridge.js.map +1 -1
  654. package/dist/mcp/monitoring-reading.d.ts +18 -0
  655. package/dist/mcp/monitoring-reading.d.ts.map +1 -0
  656. package/dist/mcp/monitoring-reading.js +84 -0
  657. package/dist/mcp/monitoring-reading.js.map +1 -0
  658. package/dist/mcp/tool-groups/apps.tools.d.ts.map +1 -1
  659. package/dist/mcp/tool-groups/apps.tools.js +6 -4
  660. package/dist/mcp/tool-groups/apps.tools.js.map +1 -1
  661. package/dist/mcp/tool-groups/management.tools.d.ts +2 -0
  662. package/dist/mcp/tool-groups/management.tools.d.ts.map +1 -1
  663. package/dist/mcp/tool-groups/management.tools.js +17 -38
  664. package/dist/mcp/tool-groups/management.tools.js.map +1 -1
  665. package/dist/mcp/tool-groups/monitoring.tools.d.ts.map +1 -1
  666. package/dist/mcp/tool-groups/monitoring.tools.js +45 -2
  667. package/dist/mcp/tool-groups/monitoring.tools.js.map +1 -1
  668. package/dist/mcp/unavailable-tools.js +2 -2
  669. package/dist/mcp/unavailable-tools.js.map +1 -1
  670. package/dist/migration/configuration.d.ts +8 -0
  671. package/dist/migration/configuration.d.ts.map +1 -0
  672. package/dist/migration/configuration.js +16 -0
  673. package/dist/migration/configuration.js.map +1 -0
  674. package/dist/migration/index.d.ts +25 -0
  675. package/dist/migration/index.d.ts.map +1 -0
  676. package/dist/migration/index.js +27 -0
  677. package/dist/migration/index.js.map +1 -0
  678. package/dist/migration/operation.d.ts +31 -0
  679. package/dist/migration/operation.d.ts.map +1 -0
  680. package/dist/migration/operation.js +67 -0
  681. package/dist/migration/operation.js.map +1 -0
  682. package/dist/migration/workspace.d.ts +28 -0
  683. package/dist/migration/workspace.d.ts.map +1 -0
  684. package/dist/migration/workspace.js +91 -0
  685. package/dist/migration/workspace.js.map +1 -0
  686. package/dist/monitoring/app-health.indicator.d.ts +1 -1
  687. package/dist/monitoring/app-health.indicator.d.ts.map +1 -1
  688. package/dist/monitoring/docker-health.indicator.d.ts +4 -2
  689. package/dist/monitoring/docker-health.indicator.d.ts.map +1 -1
  690. package/dist/monitoring/docker-health.indicator.js +66 -5
  691. package/dist/monitoring/docker-health.indicator.js.map +1 -1
  692. package/dist/monitoring/event-loop-watch.d.ts.map +1 -1
  693. package/dist/monitoring/event-loop-watch.js.map +1 -1
  694. package/dist/monitoring/infrastructure-health.d.ts +15 -0
  695. package/dist/monitoring/infrastructure-health.d.ts.map +1 -0
  696. package/dist/monitoring/infrastructure-health.js +2 -0
  697. package/dist/monitoring/infrastructure-health.js.map +1 -0
  698. package/dist/monitoring/log-entry.d.ts +7 -0
  699. package/dist/monitoring/log-entry.d.ts.map +1 -0
  700. package/dist/monitoring/log-entry.js +16 -0
  701. package/dist/monitoring/log-entry.js.map +1 -0
  702. package/dist/monitoring/log-journal.d.ts +40 -0
  703. package/dist/monitoring/log-journal.d.ts.map +1 -0
  704. package/dist/monitoring/log-journal.js +158 -0
  705. package/dist/monitoring/log-journal.js.map +1 -0
  706. package/dist/monitoring/log-line.d.ts +19 -14
  707. package/dist/monitoring/log-line.d.ts.map +1 -1
  708. package/dist/monitoring/log-line.js +70 -59
  709. package/dist/monitoring/log-line.js.map +1 -1
  710. package/dist/monitoring/log-manager.d.ts +34 -37
  711. package/dist/monitoring/log-manager.d.ts.map +1 -1
  712. package/dist/monitoring/log-manager.js +164 -63
  713. package/dist/monitoring/log-manager.js.map +1 -1
  714. package/dist/monitoring/log-sink-health.indicator.d.ts +10 -0
  715. package/dist/monitoring/log-sink-health.indicator.d.ts.map +1 -0
  716. package/dist/monitoring/log-sink-health.indicator.js +21 -0
  717. package/dist/monitoring/log-sink-health.indicator.js.map +1 -0
  718. package/dist/monitoring/metrics-storage.indicator.d.ts +9 -0
  719. package/dist/monitoring/metrics-storage.indicator.d.ts.map +1 -0
  720. package/dist/monitoring/metrics-storage.indicator.js +18 -0
  721. package/dist/monitoring/metrics-storage.indicator.js.map +1 -0
  722. package/dist/monitoring/process-lifetime.d.ts +11 -0
  723. package/dist/monitoring/process-lifetime.d.ts.map +1 -0
  724. package/dist/monitoring/process-lifetime.js +45 -0
  725. package/dist/monitoring/process-lifetime.js.map +1 -0
  726. package/dist/monitoring/runtime-diagnostics.d.ts +47 -0
  727. package/dist/monitoring/runtime-diagnostics.d.ts.map +1 -0
  728. package/dist/monitoring/runtime-diagnostics.js +88 -0
  729. package/dist/monitoring/runtime-diagnostics.js.map +1 -0
  730. package/dist/observability/metrics-bridge.d.ts +5 -1
  731. package/dist/observability/metrics-bridge.d.ts.map +1 -1
  732. package/dist/observability/metrics-bridge.js +11 -0
  733. package/dist/observability/metrics-bridge.js.map +1 -1
  734. package/dist/operations.d.ts +1 -0
  735. package/dist/operations.d.ts.map +1 -1
  736. package/dist/operations.js.map +1 -1
  737. package/dist/orchestrator/app-handle.d.ts +24 -6
  738. package/dist/orchestrator/app-handle.d.ts.map +1 -1
  739. package/dist/orchestrator/app-handle.js +39 -8
  740. package/dist/orchestrator/app-handle.js.map +1 -1
  741. package/dist/orchestrator/application-runtime-child.d.ts +2 -0
  742. package/dist/orchestrator/application-runtime-child.d.ts.map +1 -0
  743. package/dist/orchestrator/application-runtime-child.js +15 -0
  744. package/dist/orchestrator/application-runtime-child.js.map +1 -0
  745. package/dist/orchestrator/application-runtime-resolution.d.ts +4 -0
  746. package/dist/orchestrator/application-runtime-resolution.d.ts.map +1 -0
  747. package/dist/orchestrator/application-runtime-resolution.js +62 -0
  748. package/dist/orchestrator/application-runtime-resolution.js.map +1 -0
  749. package/dist/orchestrator/application-runtime.d.ts +3 -0
  750. package/dist/orchestrator/application-runtime.d.ts.map +1 -0
  751. package/dist/orchestrator/application-runtime.js +20 -0
  752. package/dist/orchestrator/application-runtime.js.map +1 -0
  753. package/dist/orchestrator/application-topology.d.ts +20 -0
  754. package/dist/orchestrator/application-topology.d.ts.map +1 -0
  755. package/dist/orchestrator/application-topology.js +90 -0
  756. package/dist/orchestrator/application-topology.js.map +1 -0
  757. package/dist/orchestrator/bootstrap-loader-child.d.ts +1 -1
  758. package/dist/orchestrator/bootstrap-loader-child.js +7 -16
  759. package/dist/orchestrator/bootstrap-loader-child.js.map +1 -1
  760. package/dist/orchestrator/bootstrap-loader.d.ts +8 -18
  761. package/dist/orchestrator/bootstrap-loader.d.ts.map +1 -1
  762. package/dist/orchestrator/bootstrap-loader.js +21 -204
  763. package/dist/orchestrator/bootstrap-loader.js.map +1 -1
  764. package/dist/orchestrator/bootstrap-process.d.ts +5 -5
  765. package/dist/orchestrator/bootstrap-process.d.ts.map +1 -1
  766. package/dist/orchestrator/bootstrap-process.js +37 -38
  767. package/dist/orchestrator/bootstrap-process.js.map +1 -1
  768. package/dist/orchestrator/build-service.d.ts +3 -3
  769. package/dist/orchestrator/build-service.d.ts.map +1 -1
  770. package/dist/orchestrator/build-service.js +29 -80
  771. package/dist/orchestrator/build-service.js.map +1 -1
  772. package/dist/orchestrator/call-exposed-service.d.ts +8 -0
  773. package/dist/orchestrator/call-exposed-service.d.ts.map +1 -1
  774. package/dist/orchestrator/classic-launcher.d.ts +3 -2
  775. package/dist/orchestrator/classic-launcher.d.ts.map +1 -1
  776. package/dist/orchestrator/classic-launcher.js +26 -22
  777. package/dist/orchestrator/classic-launcher.js.map +1 -1
  778. package/dist/orchestrator/dependency-resolver.d.ts.map +1 -1
  779. package/dist/orchestrator/dependency-resolver.js +7 -38
  780. package/dist/orchestrator/dependency-resolver.js.map +1 -1
  781. package/dist/orchestrator/execution-contract.d.ts +67 -0
  782. package/dist/orchestrator/execution-contract.d.ts.map +1 -0
  783. package/dist/orchestrator/execution-contract.js +2 -0
  784. package/dist/orchestrator/execution-contract.js.map +1 -0
  785. package/dist/orchestrator/file-watcher.d.ts +1 -1
  786. package/dist/orchestrator/file-watcher.d.ts.map +1 -1
  787. package/dist/orchestrator/file-watcher.js +10 -3
  788. package/dist/orchestrator/file-watcher.js.map +1 -1
  789. package/dist/orchestrator/installed-execution.d.ts +7 -0
  790. package/dist/orchestrator/installed-execution.d.ts.map +1 -0
  791. package/dist/orchestrator/installed-execution.js +25 -0
  792. package/dist/orchestrator/installed-execution.js.map +1 -0
  793. package/dist/orchestrator/module-worker-process.d.ts.map +1 -1
  794. package/dist/orchestrator/module-worker-process.js +2 -1
  795. package/dist/orchestrator/module-worker-process.js.map +1 -1
  796. package/dist/orchestrator/orchestrator.service.d.ts +87 -76
  797. package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
  798. package/dist/orchestrator/orchestrator.service.js +941 -469
  799. package/dist/orchestrator/orchestrator.service.js.map +1 -1
  800. package/dist/orchestrator/process-janitor.d.ts +3 -0
  801. package/dist/orchestrator/process-janitor.d.ts.map +1 -1
  802. package/dist/orchestrator/process-janitor.js +5 -1
  803. package/dist/orchestrator/process-janitor.js.map +1 -1
  804. package/dist/orchestrator/runtime-package-resolution.d.ts +8 -0
  805. package/dist/orchestrator/runtime-package-resolution.d.ts.map +1 -0
  806. package/dist/orchestrator/runtime-package-resolution.js +56 -0
  807. package/dist/orchestrator/runtime-package-resolution.js.map +1 -0
  808. package/dist/orchestrator/service-router.d.ts +4 -108
  809. package/dist/orchestrator/service-router.d.ts.map +1 -1
  810. package/dist/orchestrator/service-router.js +51 -237
  811. package/dist/orchestrator/service-router.js.map +1 -1
  812. package/dist/orchestrator/ts-compiler.d.ts.map +1 -1
  813. package/dist/orchestrator/ts-compiler.js +9 -17
  814. package/dist/orchestrator/ts-compiler.js.map +1 -1
  815. package/dist/project/artifact-builder.d.ts +17 -7
  816. package/dist/project/artifact-builder.d.ts.map +1 -1
  817. package/dist/project/artifact-builder.js +89 -56
  818. package/dist/project/artifact-builder.js.map +1 -1
  819. package/dist/project/bootstrap-metadata.d.ts +42 -0
  820. package/dist/project/bootstrap-metadata.d.ts.map +1 -0
  821. package/dist/project/bootstrap-metadata.js +76 -0
  822. package/dist/project/bootstrap-metadata.js.map +1 -0
  823. package/dist/project/config-resolver.js +3 -3
  824. package/dist/project/config-resolver.js.map +1 -1
  825. package/dist/project/configuration-catalog.d.ts +8 -0
  826. package/dist/project/configuration-catalog.d.ts.map +1 -0
  827. package/dist/project/configuration-catalog.js +29 -0
  828. package/dist/project/configuration-catalog.js.map +1 -0
  829. package/dist/project/declared-config.d.ts +2 -0
  830. package/dist/project/declared-config.d.ts.map +1 -1
  831. package/dist/project/declared-config.js +8 -5
  832. package/dist/project/declared-config.js.map +1 -1
  833. package/dist/project/dependency-topology.d.ts +10 -0
  834. package/dist/project/dependency-topology.d.ts.map +1 -0
  835. package/dist/project/dependency-topology.js +55 -0
  836. package/dist/project/dependency-topology.js.map +1 -0
  837. package/dist/project/infrastructure-ownership.d.ts +5 -0
  838. package/dist/project/infrastructure-ownership.d.ts.map +1 -0
  839. package/dist/project/infrastructure-ownership.js +26 -0
  840. package/dist/project/infrastructure-ownership.js.map +1 -0
  841. package/dist/project/installed-stack-resume.d.ts +62 -0
  842. package/dist/project/installed-stack-resume.d.ts.map +1 -0
  843. package/dist/project/installed-stack-resume.js +261 -0
  844. package/dist/project/installed-stack-resume.js.map +1 -0
  845. package/dist/project/launch-failure.d.ts +3 -0
  846. package/dist/project/launch-failure.d.ts.map +1 -0
  847. package/dist/project/launch-failure.js +32 -0
  848. package/dist/project/launch-failure.js.map +1 -0
  849. package/dist/project/local-release-selection.d.ts +18 -0
  850. package/dist/project/local-release-selection.d.ts.map +1 -0
  851. package/dist/project/local-release-selection.js +36 -0
  852. package/dist/project/local-release-selection.js.map +1 -0
  853. package/dist/project/node-app-config.d.ts +8 -1
  854. package/dist/project/node-app-config.d.ts.map +1 -1
  855. package/dist/project/node-app-config.js +20 -28
  856. package/dist/project/node-app-config.js.map +1 -1
  857. package/dist/project/node-stack-stop.d.ts +83 -0
  858. package/dist/project/node-stack-stop.d.ts.map +1 -0
  859. package/dist/project/node-stack-stop.js +219 -0
  860. package/dist/project/node-stack-stop.js.map +1 -0
  861. package/dist/project/public-stack.d.ts +4 -0
  862. package/dist/project/public-stack.d.ts.map +1 -0
  863. package/dist/project/public-stack.js +29 -0
  864. package/dist/project/public-stack.js.map +1 -0
  865. package/dist/project/registry.d.ts +18 -27
  866. package/dist/project/registry.d.ts.map +1 -1
  867. package/dist/project/registry.js +244 -55
  868. package/dist/project/registry.js.map +1 -1
  869. package/dist/project/requirements-scanner.d.ts +4 -8
  870. package/dist/project/requirements-scanner.d.ts.map +1 -1
  871. package/dist/project/requirements-scanner.js +39 -146
  872. package/dist/project/requirements-scanner.js.map +1 -1
  873. package/dist/project/stack-diagnosis.d.ts +18 -0
  874. package/dist/project/stack-diagnosis.d.ts.map +1 -0
  875. package/dist/project/stack-diagnosis.js +94 -0
  876. package/dist/project/stack-diagnosis.js.map +1 -0
  877. package/dist/project/stack-health.d.ts +12 -0
  878. package/dist/project/stack-health.d.ts.map +1 -0
  879. package/dist/project/stack-health.js +27 -0
  880. package/dist/project/stack-health.js.map +1 -0
  881. package/dist/project/stack-observation.d.ts +8 -0
  882. package/dist/project/stack-observation.d.ts.map +1 -0
  883. package/dist/project/stack-observation.js +126 -0
  884. package/dist/project/stack-observation.js.map +1 -0
  885. package/dist/project/stack-placement.d.ts +11 -0
  886. package/dist/project/stack-placement.d.ts.map +1 -0
  887. package/dist/project/stack-placement.js +57 -0
  888. package/dist/project/stack-placement.js.map +1 -0
  889. package/dist/project/stack-stop-review.d.ts +14 -0
  890. package/dist/project/stack-stop-review.d.ts.map +1 -0
  891. package/dist/project/stack-stop-review.js +22 -0
  892. package/dist/project/stack-stop-review.js.map +1 -0
  893. package/dist/project/stack-targets.d.ts +24 -0
  894. package/dist/project/stack-targets.d.ts.map +1 -0
  895. package/dist/project/stack-targets.js +67 -0
  896. package/dist/project/stack-targets.js.map +1 -0
  897. package/dist/project/topology-control.d.ts +41 -0
  898. package/dist/project/topology-control.d.ts.map +1 -0
  899. package/dist/project/topology-control.js +133 -0
  900. package/dist/project/topology-control.js.map +1 -0
  901. package/dist/project/topology-plan.d.ts +11 -0
  902. package/dist/project/topology-plan.d.ts.map +1 -0
  903. package/dist/project/topology-plan.js +154 -0
  904. package/dist/project/topology-plan.js.map +1 -0
  905. package/dist/project/topology-services.d.ts +7 -0
  906. package/dist/project/topology-services.d.ts.map +1 -0
  907. package/dist/project/topology-services.js +36 -0
  908. package/dist/project/topology-services.js.map +1 -0
  909. package/dist/project/topology-state.d.ts +27 -0
  910. package/dist/project/topology-state.d.ts.map +1 -0
  911. package/dist/project/topology-state.js +71 -0
  912. package/dist/project/topology-state.js.map +1 -0
  913. package/dist/project/workspace-kind.d.ts +3 -0
  914. package/dist/project/workspace-kind.d.ts.map +1 -0
  915. package/dist/project/workspace-kind.js +13 -0
  916. package/dist/project/workspace-kind.js.map +1 -0
  917. package/dist/readiness.d.ts +4 -0
  918. package/dist/readiness.d.ts.map +1 -0
  919. package/dist/readiness.js +3 -0
  920. package/dist/readiness.js.map +1 -0
  921. package/dist/release/application-closure.d.ts +4 -0
  922. package/dist/release/application-closure.d.ts.map +1 -0
  923. package/dist/release/application-closure.js +61 -0
  924. package/dist/release/application-closure.js.map +1 -0
  925. package/dist/release/archive.d.ts +3 -0
  926. package/dist/release/archive.d.ts.map +1 -0
  927. package/dist/release/archive.js +3 -0
  928. package/dist/release/archive.js.map +1 -0
  929. package/dist/release/artifact-inspection.d.ts +50 -0
  930. package/dist/release/artifact-inspection.d.ts.map +1 -0
  931. package/dist/release/artifact-inspection.js +169 -0
  932. package/dist/release/artifact-inspection.js.map +1 -0
  933. package/dist/release/artifact-volumes.d.ts +10 -0
  934. package/dist/release/artifact-volumes.d.ts.map +1 -0
  935. package/dist/release/artifact-volumes.js +112 -0
  936. package/dist/release/artifact-volumes.js.map +1 -0
  937. package/dist/release/build-run.d.ts +12 -15
  938. package/dist/release/build-run.d.ts.map +1 -1
  939. package/dist/release/build-run.js +260 -73
  940. package/dist/release/build-run.js.map +1 -1
  941. package/dist/release/builder.d.ts +8 -2
  942. package/dist/release/builder.d.ts.map +1 -1
  943. package/dist/release/builder.js +18 -4
  944. package/dist/release/builder.js.map +1 -1
  945. package/dist/release/closure-library-path.d.ts +26 -0
  946. package/dist/release/closure-library-path.d.ts.map +1 -0
  947. package/dist/release/closure-library-path.js +160 -0
  948. package/dist/release/closure-library-path.js.map +1 -0
  949. package/dist/release/definition-inputs.d.ts +6 -3
  950. package/dist/release/definition-inputs.d.ts.map +1 -1
  951. package/dist/release/definition-inputs.js +145 -14
  952. package/dist/release/definition-inputs.js.map +1 -1
  953. package/dist/release/framework-source.d.ts +22 -0
  954. package/dist/release/framework-source.d.ts.map +1 -0
  955. package/dist/release/framework-source.js +54 -0
  956. package/dist/release/framework-source.js.map +1 -0
  957. package/dist/release/frozen-installation.d.ts +23 -0
  958. package/dist/release/frozen-installation.d.ts.map +1 -0
  959. package/dist/release/frozen-installation.js +159 -0
  960. package/dist/release/frozen-installation.js.map +1 -0
  961. package/dist/release/import-artifacts.d.ts +9 -0
  962. package/dist/release/import-artifacts.d.ts.map +1 -0
  963. package/dist/release/import-artifacts.js +60 -0
  964. package/dist/release/import-artifacts.js.map +1 -0
  965. package/dist/release/infrastructure.d.ts +6 -0
  966. package/dist/release/infrastructure.d.ts.map +1 -0
  967. package/dist/release/infrastructure.js +74 -0
  968. package/dist/release/infrastructure.js.map +1 -0
  969. package/dist/release/installed-artifacts.d.ts +12 -0
  970. package/dist/release/installed-artifacts.d.ts.map +1 -0
  971. package/dist/release/installed-artifacts.js +199 -0
  972. package/dist/release/installed-artifacts.js.map +1 -0
  973. package/dist/release/installed-graph.d.ts +28 -0
  974. package/dist/release/installed-graph.d.ts.map +1 -0
  975. package/dist/release/installed-graph.js +138 -0
  976. package/dist/release/installed-graph.js.map +1 -0
  977. package/dist/release/installed-origin.d.ts +42 -0
  978. package/dist/release/installed-origin.d.ts.map +1 -0
  979. package/dist/release/installed-origin.js +130 -0
  980. package/dist/release/installed-origin.js.map +1 -0
  981. package/dist/release/installed-release.d.ts +23 -0
  982. package/dist/release/installed-release.d.ts.map +1 -0
  983. package/dist/release/installed-release.js +141 -0
  984. package/dist/release/installed-release.js.map +1 -0
  985. package/dist/release/layout.d.ts +27 -32
  986. package/dist/release/layout.d.ts.map +1 -1
  987. package/dist/release/layout.js +162 -51
  988. package/dist/release/layout.js.map +1 -1
  989. package/dist/release/load.d.ts +3 -0
  990. package/dist/release/load.d.ts.map +1 -1
  991. package/dist/release/load.js +50 -8
  992. package/dist/release/load.js.map +1 -1
  993. package/dist/release/local-installation.d.ts +20 -0
  994. package/dist/release/local-installation.d.ts.map +1 -0
  995. package/dist/release/local-installation.js +298 -0
  996. package/dist/release/local-installation.js.map +1 -0
  997. package/dist/release/manifest.d.ts +87 -12
  998. package/dist/release/manifest.d.ts.map +1 -1
  999. package/dist/release/manifest.js +31 -7
  1000. package/dist/release/manifest.js.map +1 -1
  1001. package/dist/release/migration-programs.d.ts +12 -0
  1002. package/dist/release/migration-programs.d.ts.map +1 -0
  1003. package/dist/release/migration-programs.js +45 -0
  1004. package/dist/release/migration-programs.js.map +1 -0
  1005. package/dist/release/migrations.d.ts +12 -1
  1006. package/dist/release/migrations.d.ts.map +1 -1
  1007. package/dist/release/migrations.js +124 -9
  1008. package/dist/release/migrations.js.map +1 -1
  1009. package/dist/release/origin.d.ts +33 -0
  1010. package/dist/release/origin.d.ts.map +1 -0
  1011. package/dist/release/origin.js +253 -0
  1012. package/dist/release/origin.js.map +1 -0
  1013. package/dist/release/owner-admission.d.ts +15 -0
  1014. package/dist/release/owner-admission.d.ts.map +1 -0
  1015. package/dist/release/owner-admission.js +37 -0
  1016. package/dist/release/owner-admission.js.map +1 -0
  1017. package/dist/release/owner-executable.d.ts +3 -0
  1018. package/dist/release/owner-executable.d.ts.map +1 -0
  1019. package/dist/release/owner-executable.js +40 -0
  1020. package/dist/release/owner-executable.js.map +1 -0
  1021. package/dist/release/package-gates.d.ts +9 -0
  1022. package/dist/release/package-gates.d.ts.map +1 -0
  1023. package/dist/release/package-gates.js +42 -0
  1024. package/dist/release/package-gates.js.map +1 -0
  1025. package/dist/release/package-resolution.d.ts +4 -0
  1026. package/dist/release/package-resolution.d.ts.map +1 -0
  1027. package/dist/release/package-resolution.js +28 -0
  1028. package/dist/release/package-resolution.js.map +1 -0
  1029. package/dist/release/portable-archive.d.ts +12 -0
  1030. package/dist/release/portable-archive.d.ts.map +1 -0
  1031. package/dist/release/portable-archive.js +96 -0
  1032. package/dist/release/portable-archive.js.map +1 -0
  1033. package/dist/release/registry-download.d.ts +2 -0
  1034. package/dist/release/registry-download.d.ts.map +1 -0
  1035. package/dist/release/registry-download.js +157 -0
  1036. package/dist/release/registry-download.js.map +1 -0
  1037. package/dist/release/registry-framework.d.ts +39 -0
  1038. package/dist/release/registry-framework.d.ts.map +1 -0
  1039. package/dist/release/registry-framework.js +279 -0
  1040. package/dist/release/registry-framework.js.map +1 -0
  1041. package/dist/release/registry-transport.d.ts +27 -0
  1042. package/dist/release/registry-transport.d.ts.map +1 -0
  1043. package/dist/release/registry-transport.js +96 -0
  1044. package/dist/release/registry-transport.js.map +1 -0
  1045. package/dist/release/repository-identity.d.ts +12 -0
  1046. package/dist/release/repository-identity.d.ts.map +1 -0
  1047. package/dist/release/repository-identity.js +62 -0
  1048. package/dist/release/repository-identity.js.map +1 -0
  1049. package/dist/release/runtime-extractor.d.ts +4 -0
  1050. package/dist/release/runtime-extractor.d.ts.map +1 -0
  1051. package/dist/release/runtime-extractor.js +15 -0
  1052. package/dist/release/runtime-extractor.js.map +1 -0
  1053. package/dist/release/runtime-provenance.d.ts +40 -0
  1054. package/dist/release/runtime-provenance.d.ts.map +1 -0
  1055. package/dist/release/runtime-provenance.js +229 -0
  1056. package/dist/release/runtime-provenance.js.map +1 -0
  1057. package/dist/release/source.d.ts +12 -0
  1058. package/dist/release/source.d.ts.map +1 -0
  1059. package/dist/release/source.js +168 -0
  1060. package/dist/release/source.js.map +1 -0
  1061. package/dist/release/store.d.ts +13 -4
  1062. package/dist/release/store.d.ts.map +1 -1
  1063. package/dist/release/store.js +70 -14
  1064. package/dist/release/store.js.map +1 -1
  1065. package/dist/release/target-runtime.d.ts +19 -0
  1066. package/dist/release/target-runtime.d.ts.map +1 -0
  1067. package/dist/release/target-runtime.js +41 -0
  1068. package/dist/release/target-runtime.js.map +1 -0
  1069. package/dist/release/vendored-framework.d.ts +28 -0
  1070. package/dist/release/vendored-framework.d.ts.map +1 -0
  1071. package/dist/release/vendored-framework.js +98 -0
  1072. package/dist/release/vendored-framework.js.map +1 -0
  1073. package/dist/release/workspace-source.d.ts +3 -0
  1074. package/dist/release/workspace-source.d.ts.map +1 -0
  1075. package/dist/release/workspace-source.js +33 -0
  1076. package/dist/release/workspace-source.js.map +1 -0
  1077. package/dist/runtime/context.d.ts +29 -0
  1078. package/dist/runtime/context.d.ts.map +1 -0
  1079. package/dist/runtime/context.js +111 -0
  1080. package/dist/runtime/context.js.map +1 -0
  1081. package/dist/runtime/identity.d.ts +15 -0
  1082. package/dist/runtime/identity.d.ts.map +1 -0
  1083. package/dist/runtime/identity.js +33 -0
  1084. package/dist/runtime/identity.js.map +1 -0
  1085. package/dist/runtime/index.d.ts +3 -0
  1086. package/dist/runtime/index.d.ts.map +1 -0
  1087. package/dist/runtime/index.js +3 -0
  1088. package/dist/runtime/index.js.map +1 -0
  1089. package/dist/services/access.rpc-service.d.ts +41 -0
  1090. package/dist/services/access.rpc-service.d.ts.map +1 -0
  1091. package/dist/services/access.rpc-service.js +248 -0
  1092. package/dist/services/access.rpc-service.js.map +1 -0
  1093. package/dist/services/alert.service.d.ts +1 -1
  1094. package/dist/services/alert.service.d.ts.map +1 -1
  1095. package/dist/services/alert.service.js +1 -1
  1096. package/dist/services/anonymous-input.d.ts +0 -21
  1097. package/dist/services/anonymous-input.d.ts.map +1 -1
  1098. package/dist/services/anonymous-input.js +1 -27
  1099. package/dist/services/anonymous-input.js.map +1 -1
  1100. package/dist/services/audit.service.d.ts +10 -30
  1101. package/dist/services/audit.service.d.ts.map +1 -1
  1102. package/dist/services/audit.service.js +72 -18
  1103. package/dist/services/audit.service.js.map +1 -1
  1104. package/dist/services/auth-context.d.ts +2 -0
  1105. package/dist/services/auth-context.d.ts.map +1 -1
  1106. package/dist/services/auth-context.js +4 -1
  1107. package/dist/services/auth-context.js.map +1 -1
  1108. package/dist/services/auth.rpc-service.d.ts +3 -1
  1109. package/dist/services/auth.rpc-service.d.ts.map +1 -1
  1110. package/dist/services/auth.rpc-service.js +13 -3
  1111. package/dist/services/auth.rpc-service.js.map +1 -1
  1112. package/dist/services/auth.service.d.ts +11 -21
  1113. package/dist/services/auth.service.d.ts.map +1 -1
  1114. package/dist/services/auth.service.js +125 -139
  1115. package/dist/services/auth.service.js.map +1 -1
  1116. package/dist/services/backup-storage.d.ts +14 -0
  1117. package/dist/services/backup-storage.d.ts.map +1 -0
  1118. package/dist/services/backup-storage.js +195 -0
  1119. package/dist/services/backup-storage.js.map +1 -0
  1120. package/dist/services/backup.rpc-service.d.ts +2 -0
  1121. package/dist/services/backup.rpc-service.d.ts.map +1 -1
  1122. package/dist/services/backup.rpc-service.js +9 -0
  1123. package/dist/services/backup.rpc-service.js.map +1 -1
  1124. package/dist/services/backup.service.d.ts +33 -126
  1125. package/dist/services/backup.service.d.ts.map +1 -1
  1126. package/dist/services/backup.service.js +174 -153
  1127. package/dist/services/backup.service.js.map +1 -1
  1128. package/dist/services/bundle-builder.d.ts +12 -0
  1129. package/dist/services/bundle-builder.d.ts.map +1 -1
  1130. package/dist/services/bundle-builder.js +77 -62
  1131. package/dist/services/bundle-builder.js.map +1 -1
  1132. package/dist/services/bundle-overrides.d.ts +25 -0
  1133. package/dist/services/bundle-overrides.d.ts.map +1 -0
  1134. package/dist/services/bundle-overrides.js +96 -0
  1135. package/dist/services/bundle-overrides.js.map +1 -0
  1136. package/dist/services/daemon-authority.d.ts +16 -0
  1137. package/dist/services/daemon-authority.d.ts.map +1 -0
  1138. package/dist/services/daemon-authority.js +54 -0
  1139. package/dist/services/daemon-authority.js.map +1 -0
  1140. package/dist/services/daemon-principal.d.ts +31 -0
  1141. package/dist/services/daemon-principal.d.ts.map +1 -0
  1142. package/dist/services/daemon-principal.js +37 -0
  1143. package/dist/services/daemon-principal.js.map +1 -0
  1144. package/dist/services/deploy.service.d.ts +13 -57
  1145. package/dist/services/deploy.service.d.ts.map +1 -1
  1146. package/dist/services/deploy.service.js +15 -263
  1147. package/dist/services/deploy.service.js.map +1 -1
  1148. package/dist/services/event-broadcaster.rpc-service.d.ts +7 -1
  1149. package/dist/services/event-broadcaster.rpc-service.d.ts.map +1 -1
  1150. package/dist/services/event-broadcaster.rpc-service.js +89 -11
  1151. package/dist/services/event-broadcaster.rpc-service.js.map +1 -1
  1152. package/dist/services/fleet.rpc-service.d.ts +0 -6
  1153. package/dist/services/fleet.rpc-service.d.ts.map +1 -1
  1154. package/dist/services/fleet.rpc-service.js +0 -13
  1155. package/dist/services/fleet.rpc-service.js.map +1 -1
  1156. package/dist/services/health-check.service.d.ts +1 -1
  1157. package/dist/services/health-check.service.d.ts.map +1 -1
  1158. package/dist/services/health-check.service.js +30 -5
  1159. package/dist/services/health-check.service.js.map +1 -1
  1160. package/dist/services/host-upgrade.d.ts +55 -3
  1161. package/dist/services/host-upgrade.d.ts.map +1 -1
  1162. package/dist/services/host-upgrade.js +167 -16
  1163. package/dist/services/host-upgrade.js.map +1 -1
  1164. package/dist/services/infrastructure.rpc-service.d.ts +9 -2
  1165. package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
  1166. package/dist/services/infrastructure.rpc-service.js +117 -36
  1167. package/dist/services/infrastructure.rpc-service.js.map +1 -1
  1168. package/dist/services/kernel-catalog.d.ts +14 -0
  1169. package/dist/services/kernel-catalog.d.ts.map +1 -0
  1170. package/dist/services/kernel-catalog.js +172 -0
  1171. package/dist/services/kernel-catalog.js.map +1 -0
  1172. package/dist/services/kernel-distribution.d.ts +5 -0
  1173. package/dist/services/kernel-distribution.d.ts.map +1 -0
  1174. package/dist/services/kernel-distribution.js +49 -0
  1175. package/dist/services/kernel-distribution.js.map +1 -0
  1176. package/dist/services/kernel-rollout.service.d.ts +55 -0
  1177. package/dist/services/kernel-rollout.service.d.ts.map +1 -0
  1178. package/dist/services/kernel-rollout.service.js +394 -0
  1179. package/dist/services/kernel-rollout.service.js.map +1 -0
  1180. package/dist/services/local-bundle.d.ts.map +1 -1
  1181. package/dist/services/local-bundle.js +3 -1
  1182. package/dist/services/local-bundle.js.map +1 -1
  1183. package/dist/services/log-collector.rpc-service.d.ts +5 -11
  1184. package/dist/services/log-collector.rpc-service.d.ts.map +1 -1
  1185. package/dist/services/log-collector.rpc-service.js +6 -6
  1186. package/dist/services/log-collector.rpc-service.js.map +1 -1
  1187. package/dist/services/log-collector.service.d.ts +39 -109
  1188. package/dist/services/log-collector.service.d.ts.map +1 -1
  1189. package/dist/services/log-collector.service.js +286 -261
  1190. package/dist/services/log-collector.service.js.map +1 -1
  1191. package/dist/services/log-query.d.ts +6 -0
  1192. package/dist/services/log-query.d.ts.map +1 -0
  1193. package/dist/services/log-query.js +46 -0
  1194. package/dist/services/log-query.js.map +1 -0
  1195. package/dist/services/managed-rollout.d.ts +54 -0
  1196. package/dist/services/managed-rollout.d.ts.map +1 -0
  1197. package/dist/services/managed-rollout.js +124 -0
  1198. package/dist/services/managed-rollout.js.map +1 -0
  1199. package/dist/services/metrics.rpc-service.d.ts +23 -0
  1200. package/dist/services/metrics.rpc-service.d.ts.map +1 -0
  1201. package/dist/services/metrics.rpc-service.js +73 -0
  1202. package/dist/services/metrics.rpc-service.js.map +1 -0
  1203. package/dist/services/migration-process.d.ts +32 -0
  1204. package/dist/services/migration-process.d.ts.map +1 -0
  1205. package/dist/services/migration-process.js +71 -0
  1206. package/dist/services/migration-process.js.map +1 -0
  1207. package/dist/services/migration-target.d.ts +57 -0
  1208. package/dist/services/migration-target.d.ts.map +1 -0
  1209. package/dist/services/migration-target.js +221 -0
  1210. package/dist/services/migration-target.js.map +1 -0
  1211. package/dist/services/node-health.repository.d.ts +2 -59
  1212. package/dist/services/node-health.repository.d.ts.map +1 -1
  1213. package/dist/services/node-health.repository.js.map +1 -1
  1214. package/dist/services/node-host-key.d.ts +9 -0
  1215. package/dist/services/node-host-key.d.ts.map +1 -0
  1216. package/dist/services/node-host-key.js +17 -0
  1217. package/dist/services/node-host-key.js.map +1 -0
  1218. package/dist/services/node-manager.rpc-service.d.ts +44 -37
  1219. package/dist/services/node-manager.rpc-service.d.ts.map +1 -1
  1220. package/dist/services/node-manager.rpc-service.js +208 -37
  1221. package/dist/services/node-manager.rpc-service.js.map +1 -1
  1222. package/dist/services/node-manager.service.d.ts +3 -0
  1223. package/dist/services/node-manager.service.d.ts.map +1 -1
  1224. package/dist/services/node-manager.service.js +78 -27
  1225. package/dist/services/node-manager.service.js.map +1 -1
  1226. package/dist/services/node-registration.d.ts +17 -0
  1227. package/dist/services/node-registration.d.ts.map +1 -0
  1228. package/dist/services/node-registration.js +73 -0
  1229. package/dist/services/node-registration.js.map +1 -0
  1230. package/dist/services/node-upgrade.service.d.ts +2 -28
  1231. package/dist/services/node-upgrade.service.d.ts.map +1 -1
  1232. package/dist/services/node-upgrade.service.js +2 -3
  1233. package/dist/services/node-upgrade.service.js.map +1 -1
  1234. package/dist/services/pipeline-definition.d.ts +14 -0
  1235. package/dist/services/pipeline-definition.d.ts.map +1 -0
  1236. package/dist/services/pipeline-definition.js +77 -0
  1237. package/dist/services/pipeline-definition.js.map +1 -0
  1238. package/dist/services/pipeline.rpc-service.d.ts +10 -3
  1239. package/dist/services/pipeline.rpc-service.d.ts.map +1 -1
  1240. package/dist/services/pipeline.rpc-service.js +38 -14
  1241. package/dist/services/pipeline.rpc-service.js.map +1 -1
  1242. package/dist/services/pipeline.service.d.ts +30 -46
  1243. package/dist/services/pipeline.service.d.ts.map +1 -1
  1244. package/dist/services/pipeline.service.js +401 -344
  1245. package/dist/services/pipeline.service.js.map +1 -1
  1246. package/dist/services/project.rpc-service.d.ts +212 -14
  1247. package/dist/services/project.rpc-service.d.ts.map +1 -1
  1248. package/dist/services/project.rpc-service.js +303 -31
  1249. package/dist/services/project.rpc-service.js.map +1 -1
  1250. package/dist/services/project.service.d.ts +174 -56
  1251. package/dist/services/project.service.d.ts.map +1 -1
  1252. package/dist/services/project.service.js +1962 -653
  1253. package/dist/services/project.service.js.map +1 -1
  1254. package/dist/services/release.rpc-service.d.ts +5 -18
  1255. package/dist/services/release.rpc-service.d.ts.map +1 -1
  1256. package/dist/services/release.rpc-service.js +34 -11
  1257. package/dist/services/release.rpc-service.js.map +1 -1
  1258. package/dist/services/release.service.d.ts +2 -47
  1259. package/dist/services/release.service.d.ts.map +1 -1
  1260. package/dist/services/release.service.js +26 -2
  1261. package/dist/services/release.service.js.map +1 -1
  1262. package/dist/services/remote-deployer.service.d.ts +41 -113
  1263. package/dist/services/remote-deployer.service.d.ts.map +1 -1
  1264. package/dist/services/remote-deployer.service.js +415 -378
  1265. package/dist/services/remote-deployer.service.js.map +1 -1
  1266. package/dist/services/remote-provisioner.d.ts +1 -1
  1267. package/dist/services/remote-provisioner.js +1 -1
  1268. package/dist/services/replication-evidence.d.ts +24 -0
  1269. package/dist/services/replication-evidence.d.ts.map +1 -0
  1270. package/dist/services/replication-evidence.js +61 -0
  1271. package/dist/services/replication-evidence.js.map +1 -0
  1272. package/dist/services/replication-history.d.ts +80 -0
  1273. package/dist/services/replication-history.d.ts.map +1 -0
  1274. package/dist/services/replication-history.js +279 -0
  1275. package/dist/services/replication-history.js.map +1 -0
  1276. package/dist/services/replication-reconciliation.d.ts +74 -0
  1277. package/dist/services/replication-reconciliation.d.ts.map +1 -0
  1278. package/dist/services/replication-reconciliation.js +351 -0
  1279. package/dist/services/replication-reconciliation.js.map +1 -0
  1280. package/dist/services/slave-storage.service.d.ts +2 -19
  1281. package/dist/services/slave-storage.service.d.ts.map +1 -1
  1282. package/dist/services/slave-storage.service.js +19 -6
  1283. package/dist/services/slave-storage.service.js.map +1 -1
  1284. package/dist/services/static-carry-forward.d.ts +2 -2
  1285. package/dist/services/static-carry-forward.d.ts.map +1 -1
  1286. package/dist/services/static-carry-forward.js +10 -3
  1287. package/dist/services/static-carry-forward.js.map +1 -1
  1288. package/dist/services/sync-summary.d.ts.map +1 -1
  1289. package/dist/services/sync-summary.js +1 -18
  1290. package/dist/services/sync-summary.js.map +1 -1
  1291. package/dist/services/sync.rpc-service.d.ts +17 -20
  1292. package/dist/services/sync.rpc-service.d.ts.map +1 -1
  1293. package/dist/services/sync.rpc-service.js +23 -37
  1294. package/dist/services/sync.rpc-service.js.map +1 -1
  1295. package/dist/services/sync.service.d.ts +53 -157
  1296. package/dist/services/sync.service.d.ts.map +1 -1
  1297. package/dist/services/sync.service.js +239 -337
  1298. package/dist/services/sync.service.js.map +1 -1
  1299. package/dist/services/system-info.rpc-service.d.ts +3 -1
  1300. package/dist/services/system-info.rpc-service.d.ts.map +1 -1
  1301. package/dist/services/system-info.rpc-service.js +5 -5
  1302. package/dist/services/system-info.rpc-service.js.map +1 -1
  1303. package/dist/services/system-info.service.d.ts +3 -1
  1304. package/dist/services/system-info.service.d.ts.map +1 -1
  1305. package/dist/services/system-info.service.js +17 -9
  1306. package/dist/services/system-info.service.js.map +1 -1
  1307. package/dist/services/telemetry.rpc-service.d.ts +4 -23
  1308. package/dist/services/telemetry.rpc-service.d.ts.map +1 -1
  1309. package/dist/services/telemetry.rpc-service.js +4 -32
  1310. package/dist/services/telemetry.rpc-service.js.map +1 -1
  1311. package/dist/services/telemetry.service.d.ts +2 -30
  1312. package/dist/services/telemetry.service.d.ts.map +1 -1
  1313. package/dist/services/telemetry.service.js +25 -131
  1314. package/dist/services/telemetry.service.js.map +1 -1
  1315. package/dist/services/terminal-ssh.d.ts +16 -0
  1316. package/dist/services/terminal-ssh.d.ts.map +1 -0
  1317. package/dist/services/terminal-ssh.js +101 -0
  1318. package/dist/services/terminal-ssh.js.map +1 -0
  1319. package/dist/services/terminal.rpc-service.d.ts +84 -0
  1320. package/dist/services/terminal.rpc-service.d.ts.map +1 -0
  1321. package/dist/services/terminal.rpc-service.js +508 -0
  1322. package/dist/services/terminal.rpc-service.js.map +1 -0
  1323. package/dist/services/trace-collector.rpc-service.js +3 -3
  1324. package/dist/services/trace-collector.rpc-service.js.map +1 -1
  1325. package/dist/services/wait-for-postgres.d.ts +1 -1
  1326. package/dist/services/wait-for-postgres.d.ts.map +1 -1
  1327. package/dist/services/wait-for-postgres.js +13 -28
  1328. package/dist/services/wait-for-postgres.js.map +1 -1
  1329. package/dist/shared/build-stamp.d.ts +4 -1
  1330. package/dist/shared/build-stamp.d.ts.map +1 -1
  1331. package/dist/shared/build-stamp.js +14 -6
  1332. package/dist/shared/build-stamp.js.map +1 -1
  1333. package/dist/shared/describe-error.d.ts +1 -21
  1334. package/dist/shared/describe-error.d.ts.map +1 -1
  1335. package/dist/shared/describe-error.js +1 -38
  1336. package/dist/shared/describe-error.js.map +1 -1
  1337. package/dist/shared/dto/access.d.ts +55 -0
  1338. package/dist/shared/dto/access.d.ts.map +1 -0
  1339. package/dist/shared/dto/access.js +2 -0
  1340. package/dist/shared/dto/access.js.map +1 -0
  1341. package/dist/shared/dto/audit.d.ts +32 -0
  1342. package/dist/shared/dto/audit.d.ts.map +1 -0
  1343. package/dist/shared/dto/audit.js +3 -0
  1344. package/dist/shared/dto/audit.js.map +1 -0
  1345. package/dist/shared/dto/auth.d.ts +2 -0
  1346. package/dist/shared/dto/auth.d.ts.map +1 -1
  1347. package/dist/shared/dto/auth.js +5 -1
  1348. package/dist/shared/dto/auth.js.map +1 -1
  1349. package/dist/shared/dto/backend.d.ts +50 -0
  1350. package/dist/shared/dto/backend.d.ts.map +1 -0
  1351. package/dist/shared/dto/backend.js +3 -0
  1352. package/dist/shared/dto/backend.js.map +1 -0
  1353. package/dist/shared/dto/backups.d.ts +99 -0
  1354. package/dist/shared/dto/backups.d.ts.map +1 -1
  1355. package/dist/shared/dto/cluster.d.ts +44 -0
  1356. package/dist/shared/dto/cluster.d.ts.map +1 -0
  1357. package/dist/shared/dto/cluster.js +3 -0
  1358. package/dist/shared/dto/cluster.js.map +1 -0
  1359. package/dist/shared/dto/files.d.ts +328 -0
  1360. package/dist/shared/dto/files.d.ts.map +1 -0
  1361. package/dist/shared/dto/files.js +2 -0
  1362. package/dist/shared/dto/files.js.map +1 -0
  1363. package/dist/shared/dto/health.d.ts +59 -0
  1364. package/dist/shared/dto/health.d.ts.map +1 -1
  1365. package/dist/shared/dto/installed-release.d.ts +40 -0
  1366. package/dist/shared/dto/installed-release.d.ts.map +1 -0
  1367. package/dist/shared/dto/installed-release.js +2 -0
  1368. package/dist/shared/dto/installed-release.js.map +1 -0
  1369. package/dist/shared/dto/kernel-catalog.d.ts +11 -0
  1370. package/dist/shared/dto/kernel-catalog.d.ts.map +1 -0
  1371. package/dist/shared/dto/kernel-catalog.js +2 -0
  1372. package/dist/shared/dto/kernel-catalog.js.map +1 -0
  1373. package/dist/shared/dto/logs.d.ts +21 -0
  1374. package/dist/shared/dto/logs.d.ts.map +1 -1
  1375. package/dist/shared/dto/metrics.d.ts +4 -64
  1376. package/dist/shared/dto/metrics.d.ts.map +1 -1
  1377. package/dist/shared/dto/metrics.js +0 -15
  1378. package/dist/shared/dto/metrics.js.map +1 -1
  1379. package/dist/shared/dto/nodes.d.ts +96 -22
  1380. package/dist/shared/dto/nodes.d.ts.map +1 -1
  1381. package/dist/shared/dto/pipelines.d.ts +22 -1
  1382. package/dist/shared/dto/pipelines.d.ts.map +1 -1
  1383. package/dist/shared/dto/project.d.ts +289 -30
  1384. package/dist/shared/dto/project.d.ts.map +1 -1
  1385. package/dist/shared/dto/releases.d.ts +59 -0
  1386. package/dist/shared/dto/releases.d.ts.map +1 -0
  1387. package/dist/shared/dto/releases.js +2 -0
  1388. package/dist/shared/dto/releases.js.map +1 -0
  1389. package/dist/shared/dto/services.d.ts +174 -37
  1390. package/dist/shared/dto/services.d.ts.map +1 -1
  1391. package/dist/shared/dto/services.js +15 -6
  1392. package/dist/shared/dto/services.js.map +1 -1
  1393. package/dist/shared/dto/stack-diagnosis.d.ts +20 -0
  1394. package/dist/shared/dto/stack-diagnosis.d.ts.map +1 -0
  1395. package/dist/shared/dto/stack-diagnosis.js +8 -0
  1396. package/dist/shared/dto/stack-diagnosis.js.map +1 -0
  1397. package/dist/shared/dto/stack-execution.d.ts +65 -0
  1398. package/dist/shared/dto/stack-execution.d.ts.map +1 -0
  1399. package/dist/shared/dto/stack-execution.js +33 -0
  1400. package/dist/shared/dto/stack-execution.js.map +1 -0
  1401. package/dist/shared/dto/system-info.d.ts +11 -0
  1402. package/dist/shared/dto/system-info.d.ts.map +1 -1
  1403. package/dist/shared/dto/system-info.js +7 -1
  1404. package/dist/shared/dto/system-info.js.map +1 -1
  1405. package/dist/shared/dto/terminal.d.ts +40 -0
  1406. package/dist/shared/dto/terminal.d.ts.map +1 -0
  1407. package/dist/shared/dto/terminal.js +2 -0
  1408. package/dist/shared/dto/terminal.js.map +1 -0
  1409. package/dist/shared/dto/topology.d.ts +96 -0
  1410. package/dist/shared/dto/topology.d.ts.map +1 -0
  1411. package/dist/shared/dto/topology.js +2 -0
  1412. package/dist/shared/dto/topology.js.map +1 -0
  1413. package/dist/shared/emergency-output.d.ts +3 -0
  1414. package/dist/shared/emergency-output.d.ts.map +1 -0
  1415. package/dist/shared/emergency-output.js +22 -0
  1416. package/dist/shared/emergency-output.js.map +1 -0
  1417. package/dist/shared/env-config.d.ts +2 -0
  1418. package/dist/shared/env-config.d.ts.map +1 -1
  1419. package/dist/shared/env-config.js +1 -0
  1420. package/dist/shared/env-config.js.map +1 -1
  1421. package/dist/shared/events.d.ts +2 -0
  1422. package/dist/shared/events.d.ts.map +1 -1
  1423. package/dist/shared/events.js.map +1 -1
  1424. package/dist/shared/execution-identity.d.ts +39 -0
  1425. package/dist/shared/execution-identity.d.ts.map +1 -0
  1426. package/dist/shared/execution-identity.js +160 -0
  1427. package/dist/shared/execution-identity.js.map +1 -0
  1428. package/dist/shared/file-policy.d.ts +5 -0
  1429. package/dist/shared/file-policy.d.ts.map +1 -0
  1430. package/dist/shared/file-policy.js +18 -0
  1431. package/dist/shared/file-policy.js.map +1 -0
  1432. package/dist/shared/framework-source.d.ts +11 -0
  1433. package/dist/shared/framework-source.d.ts.map +1 -0
  1434. package/dist/shared/framework-source.js +31 -0
  1435. package/dist/shared/framework-source.js.map +1 -0
  1436. package/dist/shared/fresh-module-reader.d.ts +40 -0
  1437. package/dist/shared/fresh-module-reader.d.ts.map +1 -0
  1438. package/dist/shared/fresh-module-reader.js +257 -0
  1439. package/dist/shared/fresh-module-reader.js.map +1 -0
  1440. package/dist/shared/host-boot-identity.d.ts +12 -0
  1441. package/dist/shared/host-boot-identity.d.ts.map +1 -0
  1442. package/dist/shared/host-boot-identity.js +89 -0
  1443. package/dist/shared/host-boot-identity.js.map +1 -0
  1444. package/dist/shared/kernel-file-lock.d.ts +3 -0
  1445. package/dist/shared/kernel-file-lock.d.ts.map +1 -0
  1446. package/dist/shared/kernel-file-lock.js +53 -0
  1447. package/dist/shared/kernel-file-lock.js.map +1 -0
  1448. package/dist/shared/linux-file-lock.d.ts +4 -0
  1449. package/dist/shared/linux-file-lock.d.ts.map +1 -0
  1450. package/dist/shared/linux-file-lock.js +36 -0
  1451. package/dist/shared/linux-file-lock.js.map +1 -0
  1452. package/dist/shared/log-ingestion-reading.d.ts +9 -0
  1453. package/dist/shared/log-ingestion-reading.d.ts.map +1 -0
  1454. package/dist/shared/log-ingestion-reading.js +32 -0
  1455. package/dist/shared/log-ingestion-reading.js.map +1 -0
  1456. package/dist/shared/log-levels.d.ts +19 -0
  1457. package/dist/shared/log-levels.d.ts.map +1 -0
  1458. package/dist/shared/log-levels.js +23 -0
  1459. package/dist/shared/log-levels.js.map +1 -0
  1460. package/dist/shared/metrics-storage-reading.d.ts +8 -0
  1461. package/dist/shared/metrics-storage-reading.d.ts.map +1 -0
  1462. package/dist/shared/metrics-storage-reading.js +27 -0
  1463. package/dist/shared/metrics-storage-reading.js.map +1 -0
  1464. package/dist/shared/pnpm.d.ts.map +1 -1
  1465. package/dist/shared/pnpm.js +7 -0
  1466. package/dist/shared/pnpm.js.map +1 -1
  1467. package/dist/shared/pool-scale.d.ts +10 -0
  1468. package/dist/shared/pool-scale.d.ts.map +1 -0
  1469. package/dist/shared/pool-scale.js +25 -0
  1470. package/dist/shared/pool-scale.js.map +1 -0
  1471. package/dist/shared/private-files.d.ts +10 -22
  1472. package/dist/shared/private-files.d.ts.map +1 -1
  1473. package/dist/shared/private-files.js +95 -82
  1474. package/dist/shared/private-files.js.map +1 -1
  1475. package/dist/shared/relay-reading.d.ts +19 -0
  1476. package/dist/shared/relay-reading.d.ts.map +1 -0
  1477. package/dist/shared/relay-reading.js +22 -0
  1478. package/dist/shared/relay-reading.js.map +1 -0
  1479. package/dist/shared/release-reading.d.ts +124 -32
  1480. package/dist/shared/release-reading.d.ts.map +1 -1
  1481. package/dist/shared/release-reading.js +208 -28
  1482. package/dist/shared/release-reading.js.map +1 -1
  1483. package/dist/shared/roles.d.ts +19 -18
  1484. package/dist/shared/roles.d.ts.map +1 -1
  1485. package/dist/shared/roles.js +21 -26
  1486. package/dist/shared/roles.js.map +1 -1
  1487. package/dist/shared/runtime-artifact.d.ts +20 -0
  1488. package/dist/shared/runtime-artifact.d.ts.map +1 -0
  1489. package/dist/shared/runtime-artifact.js +83 -0
  1490. package/dist/shared/runtime-artifact.js.map +1 -0
  1491. package/dist/shared/stack-reading.d.ts +18 -0
  1492. package/dist/shared/stack-reading.d.ts.map +1 -0
  1493. package/dist/shared/stack-reading.js +15 -0
  1494. package/dist/shared/stack-reading.js.map +1 -0
  1495. package/dist/shared/sync-reading.d.ts +30 -38
  1496. package/dist/shared/sync-reading.d.ts.map +1 -1
  1497. package/dist/shared/sync-reading.js +90 -29
  1498. package/dist/shared/sync-reading.js.map +1 -1
  1499. package/dist/shared/tokens.d.ts +3 -1
  1500. package/dist/shared/tokens.d.ts.map +1 -1
  1501. package/dist/shared/tokens.js +1 -0
  1502. package/dist/shared/tokens.js.map +1 -1
  1503. package/dist/supervisor/restart-policy.d.ts.map +1 -1
  1504. package/dist/supervisor/restart-policy.js +7 -5
  1505. package/dist/supervisor/restart-policy.js.map +1 -1
  1506. package/dist/webapp/console-container.d.ts +7 -0
  1507. package/dist/webapp/console-container.d.ts.map +1 -0
  1508. package/dist/webapp/console-container.js +23 -0
  1509. package/dist/webapp/console-container.js.map +1 -0
  1510. package/dist/webapp/webapp.service.d.ts.map +1 -1
  1511. package/dist/webapp/webapp.service.js +71 -24
  1512. package/dist/webapp/webapp.service.js.map +1 -1
  1513. package/dist/workers/health-monitor.service.d.ts.map +1 -1
  1514. package/dist/workers/health-monitor.service.js +8 -1
  1515. package/dist/workers/health-monitor.service.js.map +1 -1
  1516. package/dist/workers/types.d.ts +2 -0
  1517. package/dist/workers/types.d.ts.map +1 -1
  1518. package/package.json +106 -44
  1519. package/webapp/dist/BUILD.json +4 -3
  1520. package/webapp/dist/assets/access-48hkC2-P.js +1 -0
  1521. package/webapp/dist/assets/access-jWkHxGc7.js +1 -0
  1522. package/webapp/dist/assets/admin-data-table-BKSDI8sU.js +1 -0
  1523. package/webapp/dist/assets/alert-expression-CSblScoa.js +1 -0
  1524. package/webapp/dist/assets/alert-notify-settings-C_CHZrFm.js +1 -0
  1525. package/webapp/dist/assets/alert-uBG6r9NW.js +1 -0
  1526. package/webapp/dist/assets/alerts-CuPQ9YQJ.js +1 -0
  1527. package/webapp/dist/assets/app-address-BCXfN59F.js +1 -0
  1528. package/webapp/dist/assets/apps-Drio028B.js +1 -0
  1529. package/webapp/dist/assets/audit-npSFJECe.js +1 -0
  1530. package/webapp/dist/assets/auth-CcgjP7hR.js +1 -0
  1531. package/webapp/dist/assets/card-DkH32gMY.js +1 -0
  1532. package/webapp/dist/assets/chart-BpGXlCJc.js +2 -0
  1533. package/webapp/dist/assets/charts-BY7qI6s2.js +41 -0
  1534. package/webapp/dist/assets/charts-CpBdHU_A.js +56 -0
  1535. package/webapp/dist/assets/client-DFnuv2z3.js +3 -0
  1536. package/webapp/dist/assets/code-editor-DK6Tmmxv.js +4 -0
  1537. package/webapp/dist/assets/comparison-bars-BtC0dHjF.js +1 -0
  1538. package/webapp/dist/assets/confirm-dialog-BbGsAz7_.js +1 -0
  1539. package/webapp/dist/assets/console-keyboard-D3YCA0yU.js +1 -0
  1540. package/webapp/dist/assets/constants-CyhngVXh.js +1 -0
  1541. package/webapp/dist/assets/containers-Bl8gAyZX.js +3 -0
  1542. package/webapp/dist/assets/context-FIuwpd9_.js +1 -0
  1543. package/webapp/dist/assets/controls-C5W8gHU4.js +1 -0
  1544. package/webapp/dist/assets/daemon-memory-BiEtr9jr.js +1 -0
  1545. package/webapp/dist/assets/dashboard-UHlet3H9.js +1 -0
  1546. package/webapp/dist/assets/dashboard-builder-67PZFqhE.js +1 -0
  1547. package/webapp/dist/assets/dayjs.min-DHwAvH5f.js +1 -0
  1548. package/webapp/dist/assets/deploy-release-dialog-BOXcD5Wo.js +1 -0
  1549. package/webapp/dist/assets/deployments-qV20Ak0P.js +1 -0
  1550. package/webapp/dist/assets/detail-B4TiBfxU.js +8 -0
  1551. package/webapp/dist/assets/detail-B85-Wees.js +2 -0
  1552. package/webapp/dist/assets/detail-CYS81K6Y.js +1 -0
  1553. package/webapp/dist/assets/dist-BUDn8hLh.js +11 -0
  1554. package/webapp/dist/assets/dist-Ci5pYRbx.js +1 -0
  1555. package/webapp/dist/assets/dist-DQmjHv4-.js +1 -0
  1556. package/webapp/dist/assets/dist-De9Fty7a.js +1 -0
  1557. package/webapp/dist/assets/dist-DsGmKwmk.js +23 -0
  1558. package/webapp/dist/assets/empty-content-7jOFhG4C.js +1 -0
  1559. package/webapp/dist/assets/error-boundary-CLLI8PWw.js +3 -0
  1560. package/webapp/dist/assets/event-fields-CiyqrRO8.js +1 -0
  1561. package/webapp/dist/assets/files-DigwXndm.js +2 -0
  1562. package/webapp/dist/assets/formatters-RnRy4bXm.js +1 -0
  1563. package/webapp/dist/assets/icons-OboZgWSt.js +1 -0
  1564. package/webapp/dist/assets/index-uq8Dkk4c.js +1 -0
  1565. package/webapp/dist/assets/label-B1SF0RTL.js +1 -0
  1566. package/webapp/dist/assets/log-level-filter-Bcn31D1F.js +1 -0
  1567. package/webapp/dist/assets/log-location-DuBjh6HQ.js +1 -0
  1568. package/webapp/dist/assets/logs-BqHOufk8.js +4 -0
  1569. package/webapp/dist/assets/metric-chart-M-kI-XOt.js +1 -0
  1570. package/webapp/dist/assets/metric-series-WxePniyw.js +1 -0
  1571. package/webapp/dist/assets/metrics-QIQaF7iS.js +1 -0
  1572. package/webapp/dist/assets/model-ZEXEHm0l.js +2 -0
  1573. package/webapp/dist/assets/mui-6ssfcZcz.js +1 -0
  1574. package/webapp/dist/assets/mui-AnEgAVjz.js +52 -0
  1575. package/webapp/dist/assets/mui-B1jrje6Z.js +1 -0
  1576. package/webapp/dist/assets/mui-BIz4LSVs.js +1 -0
  1577. package/webapp/dist/assets/mui-BTN91yBK.js +28 -0
  1578. package/webapp/dist/assets/mui-BXSXx9c9.js +124 -0
  1579. package/webapp/dist/assets/mui-BwsIrivo.js +37 -0
  1580. package/webapp/dist/assets/mui-C_hromOc.js +1 -0
  1581. package/webapp/dist/assets/mui-Cd711nOk.js +4 -0
  1582. package/webapp/dist/assets/mui-CdB_p2lt.js +10 -0
  1583. package/webapp/dist/assets/mui-DyT2n1lx.js +1 -0
  1584. package/webapp/dist/assets/mui-agG5dued.js +1 -0
  1585. package/webapp/dist/assets/mui-y44PQOfG.js +1 -0
  1586. package/webapp/dist/assets/nodes-BJPk02vv.js +7 -0
  1587. package/webapp/dist/assets/omnitron-logo-koMCbsCv.js +1 -0
  1588. package/webapp/dist/assets/operation-status-Bm1x1wTz.js +1 -0
  1589. package/webapp/dist/assets/page-breadcrumbs-fR7Jmpp4.js +1 -0
  1590. package/webapp/dist/assets/pipelines-T6Ch9LTw.js +3 -0
  1591. package/webapp/dist/assets/popper-m_9b0JRf.js +1 -0
  1592. package/webapp/dist/assets/preload-helper-DzCYNvzR.js +1 -0
  1593. package/webapp/dist/assets/project.store--G5pIF-J.js +1 -0
  1594. package/webapp/dist/assets/projects-YoBzcQ24.js +1 -0
  1595. package/webapp/dist/assets/react-BN8qLIAi.js +9 -0
  1596. package/webapp/dist/assets/react-CEuifcaQ.js +1 -0
  1597. package/webapp/dist/assets/react-apexcharts.esm-DoOt-pu4.js +1 -0
  1598. package/webapp/dist/assets/realtime.store-CBDO4Abj.js +1 -0
  1599. package/webapp/dist/assets/release-bits-B2a_wbft.js +1 -0
  1600. package/webapp/dist/assets/release-build-panel-BQmIdKW9.js +1 -0
  1601. package/webapp/dist/assets/release-deployment-state-DRrEI2pP.js +1 -0
  1602. package/webapp/dist/assets/release-wire-f2VuBoBF.js +1 -0
  1603. package/webapp/dist/assets/releases-Bp3CDgmo.js +2 -0
  1604. package/webapp/dist/assets/rolldown-runtime-CNOWq4Kh.js +1 -0
  1605. package/webapp/dist/assets/search-input-C0MHI8vO.js +1 -0
  1606. package/webapp/dist/assets/services-BddvcFi8.js +1 -0
  1607. package/webapp/dist/assets/settings-B3egRvbI.js +1 -0
  1608. package/webapp/dist/assets/settled-pair-B-wgSZl6.js +1 -0
  1609. package/webapp/dist/assets/shared-styles-C0vN3I7_.js +1 -0
  1610. package/webapp/dist/assets/shell-command-C3pXf1vi.js +1 -0
  1611. package/webapp/dist/assets/sign-in-9q-Nfy83.js +1 -0
  1612. package/webapp/dist/assets/skeleton-BmWDJWF9.js +1 -0
  1613. package/webapp/dist/assets/snackbar-DSPmjMyi.js +1 -0
  1614. package/webapp/dist/assets/stack-health-status-BIv2C10x.js +1 -0
  1615. package/webapp/dist/assets/stack-start-notice-BVnMOwRQ.js +1 -0
  1616. package/webapp/dist/assets/stacks-IZ1mfizi.js +1 -0
  1617. package/webapp/dist/assets/storage-CKXnhqkt.js +1 -0
  1618. package/webapp/dist/assets/store-bqUBn2A4.js +1 -0
  1619. package/webapp/dist/assets/sync-reading-CN0jPKAg.js +1 -0
  1620. package/webapp/dist/assets/system-info-BFKNM-hf.js +1 -0
  1621. package/webapp/dist/assets/table-BOWT6Y9d.js +1 -0
  1622. package/webapp/dist/assets/table-viewport-Bp4pq-c_.js +1 -0
  1623. package/webapp/dist/assets/tabs-k5NPGLnJ.js +1 -0
  1624. package/webapp/dist/assets/terminal-BrP-ENHg.css +1 -0
  1625. package/webapp/dist/assets/terminal-QWBau-Us.js +62 -0
  1626. package/webapp/dist/assets/terminal-input-b7f2VoE_.js +2 -0
  1627. package/webapp/dist/assets/topology-CPey5dP6.js +8 -0
  1628. package/webapp/dist/assets/topology-metadata-dialog-BivuU2y6.js +2 -0
  1629. package/webapp/dist/assets/topology-routes.worker-BoYrIzAH.js +1 -0
  1630. package/webapp/dist/assets/traces-By0rdfDC.js +1 -0
  1631. package/webapp/dist/assets/use-copy-to-clipboard-BWYpToS3.js +1 -0
  1632. package/webapp/dist/assets/use-polled-resource-B22hhr5L.js +1 -0
  1633. package/webapp/dist/assets/use-stack-context-UkBsF-l7.js +1 -0
  1634. package/webapp/dist/assets/webapp-BnxOVfrc.css +1 -0
  1635. package/webapp/dist/assets/webapp-D-UhjFhS.js +35 -0
  1636. package/webapp/dist/console-version.json +1 -0
  1637. package/webapp/dist/index.html +54 -7
  1638. package/dist/release/daemon-omni.d.ts +0 -41
  1639. package/dist/release/daemon-omni.d.ts.map +0 -1
  1640. package/dist/release/daemon-omni.js +0 -59
  1641. package/dist/release/daemon-omni.js.map +0 -1
  1642. package/dist/services/netron-telemetry-transport.d.ts +0 -42
  1643. package/dist/services/netron-telemetry-transport.d.ts.map +0 -1
  1644. package/dist/services/netron-telemetry-transport.js +0 -93
  1645. package/dist/services/netron-telemetry-transport.js.map +0 -1
  1646. package/webapp/dist/assets/FormControlLabel-BbSxpQwN.js +0 -1
  1647. package/webapp/dist/assets/Grid-DizFZYue.js +0 -1
  1648. package/webapp/dist/assets/Switch-Bfiqzx8l.js +0 -1
  1649. package/webapp/dist/assets/alerts-DH_RVRS3.js +0 -1
  1650. package/webapp/dist/assets/apps-B96355sz.js +0 -1
  1651. package/webapp/dist/assets/audit-CYGtbi4k.js +0 -1
  1652. package/webapp/dist/assets/client-BmqFExWT.js +0 -1
  1653. package/webapp/dist/assets/constants-veKGFkC6.js +0 -1
  1654. package/webapp/dist/assets/containers-B_TpThln.js +0 -2
  1655. package/webapp/dist/assets/daemon-memory-CCPZ4cV_.js +0 -1
  1656. package/webapp/dist/assets/dashboard-DHf2_65N.js +0 -1
  1657. package/webapp/dist/assets/dashboard-builder-CWY2pjeG.js +0 -1
  1658. package/webapp/dist/assets/deploy-release-dialog-Dp-zpSAd.js +0 -1
  1659. package/webapp/dist/assets/deployments-tJI6O3fK.js +0 -1
  1660. package/webapp/dist/assets/detail-B2zP1Hto.js +0 -8
  1661. package/webapp/dist/assets/detail-CoIrwmsy.js +0 -1
  1662. package/webapp/dist/assets/detail-DWaGaOtL.js +0 -2
  1663. package/webapp/dist/assets/formatters-BqjL73N3.js +0 -1
  1664. package/webapp/dist/assets/fs-Ccl3sAcp.js +0 -1
  1665. package/webapp/dist/assets/index-Dvo0iprx.css +0 -1
  1666. package/webapp/dist/assets/index-vMnY_4jR.js +0 -412
  1667. package/webapp/dist/assets/logs-DTRjOfX8.js +0 -12
  1668. package/webapp/dist/assets/maplibre-gl-DowHoZAx.js +0 -814
  1669. package/webapp/dist/assets/metrics-UCajtdox.js +0 -2
  1670. package/webapp/dist/assets/nodes-DuTVU0f6.js +0 -7
  1671. package/webapp/dist/assets/pipelines-C8BeDcAl.js +0 -4
  1672. package/webapp/dist/assets/projects-Dp_zFfLY.js +0 -1
  1673. package/webapp/dist/assets/react-DlmbjZJV.js +0 -1
  1674. package/webapp/dist/assets/react-apexcharts.esm-C8pn45ml.js +0 -97
  1675. package/webapp/dist/assets/release-bits-BzTKz5fM.js +0 -1
  1676. package/webapp/dist/assets/release-build-panel-DcW9YcXQ.js +0 -1
  1677. package/webapp/dist/assets/releases-B4hcr1bE.js +0 -2
  1678. package/webapp/dist/assets/rolldown-runtime-XKyaHtl9.js +0 -1
  1679. package/webapp/dist/assets/settings-DIteZTbe.js +0 -1
  1680. package/webapp/dist/assets/settled-pair-C7SjZuns.js +0 -1
  1681. package/webapp/dist/assets/sign-in-D4kMBOHp.js +0 -1
  1682. package/webapp/dist/assets/stacks-Brnf-EB7.js +0 -1
  1683. package/webapp/dist/assets/sync-reading-C3PnJ7AX.js +0 -1
  1684. package/webapp/dist/assets/system-info-CFDNVKkU.js +0 -1
  1685. package/webapp/dist/assets/topology-7WeTUsDN.js +0 -12
  1686. package/webapp/dist/assets/traces-9c3gwCN-.js +0 -1
  1687. package/webapp/dist/assets/use-stack-context-CnA5FTHu.js +0 -1
@@ -1,70 +1,32 @@
1
- /**
2
- * RemoteDeployer — SSH-based artifact deployment to remote/cluster nodes
3
- *
4
- * Deployment pipeline for a single node:
5
- * 1. Connect via SSH (xec SSHAdapter or child_process ssh)
6
- * 2. Check if omnitron daemon is installed on remote
7
- * 3. Transfer app artifact (tarball) via SFTP/SCP
8
- * 4. Extract artifact on remote node
9
- * 5. Signal remote omnitron daemon to reload/restart apps
10
- * 6. Verify health on remote
11
- *
12
- * For cluster stacks, this runs in parallel across all nodes.
13
- *
14
- * Artifact path on remote: /opt/omnitron/artifacts/<project>/<app>/<version>/
15
- * Remote daemon config: /etc/omnitron/omnitron.config.ts
16
- *
17
- * NEVER EXECUTED, as of 2026-09-14. Measured rather than assumed: no log in
18
- * `~/.omnitron/logs` carries a single line this class emits ("Starting
19
- * deployment to node", "Slave provisioned", "Deployment successful"), no
20
- * artifact directory exists, and — decisively — no project config declares
21
- * `stacks.nodes`, which `startRemoteStack` requires before it can reach here.
22
- * So both entry points are unreachable in every current configuration.
23
- *
24
- * This matters to anyone reading the code below and taking it for a working
25
- * path. It is careful code — arguments are quoted, path segments validated,
26
- * heredocs replaced with base64 — and none of that has ever met a real host.
27
- * Its first run will be its first test. Treat a green read of this file as
28
- * evidence about intent, not about behaviour.
29
- *
30
- * The first thing that first run found, 2026-09-14: **it could not log in.**
31
- * Every command here went through `ssh -o BatchMode=yes` with an optional
32
- * `-i <keyfile>`, and `BatchMode=yes` disables every interactive method —
33
- * password and key passphrase both. The console's Add Node dialog collects
34
- * exactly those, encrypts them in the daemon's vault, and the health monitor
35
- * uses them through `ExecutionService.ssh()` on every check round. So the
36
- * product had two SSH implementations: one that can present what the operator
37
- * gave it, and one — this — that cannot, on the path where it matters most.
38
- *
39
- * Measured against the test host, whose SSH answers a password in 311 ms:
40
- *
41
- * ssh -o BatchMode=yes root@<host> 'echo ok'
42
- * → root@<host>: Permission denied (publickey,password).
43
- *
44
- * That is the answer to "why can a machine added in the console not be
45
- * deployed to": not policy, not a missing feature — the deployer could not
46
- * authenticate as the operator had arranged. It goes through the same
47
- * `ExecutionService` as the checks now, and takes a `DeployTarget` carrying
48
- * the credentials rather than an `IStackNode` whose `ISSHConfig` has nowhere
49
- * to put them.
50
- */
1
+ import path from 'node:path';
2
+ import { stackExecutionKey } from '../shared/dto/stack-execution.js';
3
+ import { deploymentProgressKey } from '../shared/release-reading.js';
4
+ import { redactDiagnosticText } from '@omnitron-dev/titan/diagnostics';
5
+ import { assertFrozenLaunch, installFrozenApplicationCommand } from '../release/frozen-installation.js';
6
+ import { releaseOptionsForEnv } from '../release/target-runtime.js';
7
+ import { installedReleaseCheckCommand, validOrigin } from '../release/runtime-provenance.js';
51
8
  import { PLATFORM_PROBE, parsePlatformProbe, planProvisioning, describePlan, } from './remote-provisioner.js';
52
9
  import { installSteps, installPreflightCommand, versionDir, activateSteps, pruneSteps } from './bundle-builder.js';
53
10
  import { reachabilityRule, reachabilityCommand } from '../infrastructure/gateway-reachability.js';
54
11
  import { readNodeHealth, readNodeStatus } from '../project/node-app-health.js';
55
- import { decideRedeploy, decideNodeStackStart, decideSlaveDaemonRestart, artifactChanged, readChecksumCommand, parseRecordedChecksum, ARTIFACT_CHECKSUM_FILE, NODE_CONFIG_HASH_FILE, } from './redeploy-decision.js';
12
+ import { decideRedeploy, decideNodeStackStart, decideSlaveDaemonRestart, artifactChanged, readChecksumCommand, parseRecordedChecksum, ARTIFACT_CHECKSUM_FILE, } from './redeploy-decision.js';
56
13
  import { deliveredProbeCommand, parseDeliveredProbe, checkDelivered, } from '../release/delivered.js';
57
14
  import crypto from 'node:crypto';
58
15
  import { AsyncLocalStorage } from 'node:async_hooks';
59
- import { assertControlledDaemonPort, assertServingBundle, bundleProbeCommand, contractPreflightCommand, executeHostUpgrade, hookCommand, inventoryCommand, planHostUpgrade, receiptCommand, verifyRestoredInventory, updateContractBindingsCommand, runtimeProbeCommand, runtimeStartCommand, runtimeStopCommand, appHealthCommand, pendingReceiptsCommand, recoverHostUpgrade, stoppedDaemonCommand, } from './host-upgrade.js';
16
+ import { assertControlledDaemonPort, assertServingBundle, bundleProbeCommand, contractPreflightCommand, executeHostUpgrade, hookCommand, inventoryCommand, planHostUpgrade, receiptCommand, verifyRestoredInventory, updateContractBindingsCommand, runtimeProbeCommand, runtimeStartCommand, runtimeStopCommand, appHealthCommand, pendingReceiptsCommand, recoverHostUpgrade, stoppedDaemonCommand, bootstrapPreflightCommand, HOST_BOOTSTRAP_PREFLIGHT_TIMEOUT_MS, assertResidentApplicationRuntime, assertSameApplicationRuntime, } from './host-upgrade.js';
60
17
  import { gunzipSync } from 'node:zlib';
61
18
  import { shellEscape } from '../shared/shell-escape.js';
62
19
  import { fromDataChannel, throughDataChannel } from '../execution/data-channel.js';
20
+ import { commandFailure } from '../execution/command-failure.js';
21
+ import { activateManagedTarget, managedHostCommand, planManagedRollout, reconcileManagedTarget } from './managed-rollout.js';
63
22
  /** A node that could not be asked at all — the SSH call itself failed. */
64
23
  const UNREADABLE = -3;
65
24
  import { withNodeLeases } from './node-deploy-lease.js';
66
25
  import { hostOperationBarrierCommand } from './host-operation-barrier.js';
67
26
  import { migrationOutput } from './migration-output.js';
27
+ import { prepareRemoteMigration } from './migration-process.js';
28
+ import { migrationDatabaseEnvironment, validateMigrationDestinations, validateMigrationOwners, orderMigrationPlacements } from './migration-target.js';
29
+ import { prepareNodeConfigPublication, restoreNodeConfigCommand } from './node-registration.js';
68
30
  /**
69
31
  * A name that is safe to place in a remote filesystem path.
70
32
  *
@@ -103,6 +65,8 @@ function sshTargetOf(target) {
103
65
  const ssh = { host: target.host };
104
66
  if (target.sshPort != null)
105
67
  ssh.port = target.sshPort;
68
+ if (target.expectedHostFingerprint)
69
+ ssh.expectedHostFingerprint = target.expectedHostFingerprint;
106
70
  if (target.username)
107
71
  ssh.username = target.username;
108
72
  if (target.privateKey)
@@ -164,6 +128,12 @@ export function withNodeCredentials(target, registered) {
164
128
  merged.sshPort = registered.port;
165
129
  if (!merged.username && registered.username)
166
130
  merged.username = registered.username;
131
+ // Vault credentials and approval belong to one registered SSH account and port.
132
+ if (target.host !== registered.host || (merged.sshPort ?? 22) !== (registered.port ?? 22)
133
+ || (merged.username ?? 'root') !== (registered.username ?? 'root'))
134
+ return merged;
135
+ if (registered.expectedHostFingerprint)
136
+ merged.expectedHostFingerprint = registered.expectedHostFingerprint;
167
137
  if (!merged.privateKey && registered.privateKey)
168
138
  merged.privateKey = registered.privateKey;
169
139
  if (!merged.passphrase && registered.passphrase)
@@ -182,33 +152,13 @@ export function withNodeCredentials(target, registered) {
182
152
  const SLAVE_START_TIMEOUT_MS = 120_000;
183
153
  /** How often it is asked, while it is starting. */
184
154
  const DAEMON_POLL_MS = 3_000;
155
+ const transferScope = new AsyncLocalStorage();
156
+ export function withDeploymentProgress(scope, work) {
157
+ return transferScope.run(scope, work);
158
+ }
185
159
  // =============================================================================
186
160
  // RemoteDeployer
187
161
  // =============================================================================
188
- /**
189
- * The parts of a postgres URL, for the environment a migrator expects.
190
- *
191
- * Returns null rather than guessing at a URL it cannot read: a migration run
192
- * against half-parsed connection details is worse than one that does not run,
193
- * because it can succeed somewhere nobody meant.
194
- */
195
- function parseDatabaseUrl(url) {
196
- try {
197
- const u = new URL(url);
198
- if (!u.protocol.startsWith('postgres'))
199
- return null;
200
- return {
201
- host: u.hostname,
202
- port: u.port || '5432',
203
- database: decodeURIComponent(u.pathname.replace(/^\//, '')),
204
- user: decodeURIComponent(u.username),
205
- password: decodeURIComponent(u.password),
206
- };
207
- }
208
- catch {
209
- return null;
210
- }
211
- }
212
162
  /**
213
163
  * Is this a gzip stream of a COMPLETE tar archive?
214
164
  *
@@ -247,9 +197,7 @@ export class RemoteDeployer {
247
197
  * transferring, installing, the message naming the failing step — reached a
248
198
  * handler that re-emitted it to nobody.
249
199
  *
250
- * Keyed by node and app, so this is bounded by the fleet rather than by how
251
- * often anyone deploys, and the entry for an app is always its current
252
- * state rather than a scroll an operator has to read to the end of.
200
+ * Each project, stack, node and app retains its latest observation across retries.
253
201
  */
254
202
  lastProgress = new Map();
255
203
  constructor(logger, execution) {
@@ -275,12 +223,22 @@ export class RemoteDeployer {
275
223
  const nodeKey = `${target.host}:${target.daemonPort ?? 9700}`;
276
224
  this.logger.info({ node: nodeKey, app: artifact.app, version: artifact.version }, 'Starting deployment to node');
277
225
  try {
226
+ if (artifact.release && (!validOrigin(artifact.release) || artifact.release.app !== artifact.app ||
227
+ artifact.release.artifactSha256 !== artifact.tarballSha256 || artifact.release.artifactBytes !== artifact.size))
228
+ throw new Error('Release origin does not identify the supplied artifact');
229
+ const nodeOptions = artifact.release ? releaseOptionsForEnv(options?.launchEnv) : '';
230
+ let inspected;
278
231
  // 1. Verify SSH connectivity
279
232
  this.emitProgress(nodeKey, artifact.app, 'pending', 0, 'Connecting via SSH...');
280
233
  await this.verifySSH(target);
234
+ if (artifact.release) {
235
+ assertFrozenLaunch(artifact.launch, artifact.release);
236
+ inspected = await this.inspectInstalledBundle(target);
237
+ assertResidentApplicationRuntime(inspected.applicationRuntime);
238
+ }
281
239
  // 2. Ensure remote directory structure
282
- const remotePath = artifactDirOnNode(project, artifact.app, artifact.version);
283
- await this.sshExec(target, `mkdir -p ${shellEscape(remotePath)}`);
240
+ let directory = `${artifact.version}-${artifact.tarballSha256 ?? crypto.randomUUID()}`;
241
+ let remotePath = artifactDirOnNode(project, artifact.app, directory);
284
242
  // 2a. What the node already has.
285
243
  //
286
244
  // A master's boot-time autostart deploys every remote stack again, so
@@ -296,7 +254,10 @@ export class RemoteDeployer {
296
254
  // could pass: the escape hatch this comment named had no door.
297
255
  if (options?.force !== true) {
298
256
  const recorded = parseRecordedChecksum(await this.sshExec(target, readChecksumCommand(shellEscape(remotePath))));
299
- if (artifactChanged(recorded, artifact.checksum) === false) {
257
+ const sameInputs = artifactChanged(recorded, artifact.checksum) === false;
258
+ const binding = inspected?.applicationRuntime;
259
+ if (sameInputs && (!artifact.release || (binding &&
260
+ (await this.sshExec(target, installedReleaseCheckCommand(remotePath, artifact.release, binding, nodeOptions), 120_000)).trim() === 'verified'))) {
300
261
  const duration = Date.now() - startTime;
301
262
  this.emitProgress(nodeKey, artifact.app, 'success', 75, 'Already installed — unchanged');
302
263
  this.logger.info({ node: nodeKey, app: artifact.app, version: artifact.version, sha: recorded.slice(0, 12) }, 'The node already has this artifact — not transferring it again');
@@ -307,9 +268,20 @@ export class RemoteDeployer {
307
268
  status: 'success',
308
269
  duration,
309
270
  unchanged: true,
271
+ directory,
272
+ ...(artifact.release && binding ? { migrationNode: binding.executable } : {}),
310
273
  };
311
274
  }
312
275
  }
276
+ // Never clear a version directory: a running process can still load files from it.
277
+ // A failed attempt, or an explicit reinstall, gets another private directory.
278
+ const occupied = await this.sshExec(target, `test -e ${shellEscape(remotePath)} && echo occupied || echo absent`);
279
+ if (options?.force === true || occupied.trim() !== 'absent') {
280
+ directory += `-${crypto.randomUUID()}`;
281
+ remotePath = artifactDirOnNode(project, artifact.app, directory);
282
+ }
283
+ const parent = artifactDirOnNode(project, artifact.app, artifact.version).replace(/\/[^/]+$/, '');
284
+ await this.sshExec(target, `umask 077; mkdir -p ${shellEscape(parent)} && mkdir ${shellEscape(remotePath)}`);
313
285
  // 3. Transfer artifact
314
286
  this.emitProgress(nodeKey, artifact.app, 'transferring', 20, 'Transferring artifact...');
315
287
  const remoteFile = `${remotePath}/${artifact.app}-${artifact.version}.tar.gz`;
@@ -349,116 +321,112 @@ export class RemoteDeployer {
349
321
  else {
350
322
  this.logger.warn({ node: nodeKey, app: artifact.app }, 'Artifact carries no tarball hash — the transfer was not verified');
351
323
  }
352
- // 4. Extract on remote, into an empty directory.
353
- //
354
- // `tar -xzf` over whatever was there before leaves everything the new
355
- // archive does not name — and what was there before is a `node_modules`
356
- // of a different SHAPE. The first deployment after this builder changed
357
- // put an npm manifest beside a pnpm tree and `npm install` answered
358
- //
359
- // npm error Cannot read properties of null (reading 'edgesOut')
360
- //
361
- // which is npm walking a dependency graph through symlinks it did not
362
- // create. The same reasoning as `installSteps`, which removes the
363
- // version directory before unpacking for exactly this: an install
364
- // reconciling against a tree from another tool is not this version.
365
- //
366
- // Everything except the archive just uploaded, and only inside the
367
- // artifact's own version directory — every segment of which was checked
368
- // by `assertRemotePathSegment` above.
369
- this.emitProgress(nodeKey, artifact.app, 'extracting', 50, 'Extracting artifact...');
324
+ // This newly reserved directory is not referenced by any registered application.
325
+ this.emitProgress(nodeKey, artifact.app, 'extracting', 50, 'Extracting candidate artifact...');
370
326
  const archiveName = `${artifact.app}-${artifact.version}.tar.gz`;
371
- await this.sshExec(target, `cd ${shellEscape(remotePath)} && ` +
372
- `find . -mindepth 1 -maxdepth 1 ! -name ${shellEscape(archiveName)} -exec rm -rf {} + && ` +
373
- `tar -xzf ${shellEscape(archiveName)}`);
374
- // 5. Install the dependencies ON THE NODE.
375
- //
376
- // Three shapes of this step, and the two that were wrong are worth
377
- // keeping written down because each looked finished.
378
- //
379
- // It first ran `npm install --production --ignore-scripts 2>/dev/null
380
- // || true`. That could not work even once — the manifests use pnpm's
381
- // `workspace:` protocol, npm answers `EUNSUPPORTEDPROTOCOL` — and the
382
- // `|| true` meant nobody found out.
383
- //
384
- // It then trusted the artifact to arrive complete, from `pnpm deploy`,
385
- // and checked `test -d node_modules`. The artifact was NOT complete:
386
- // every `@omnitron-dev/*` package was a symlink into a home directory
387
- // on the master, twenty-three of them, and a directory of dangling
388
- // symlinks passes `test -d`. A symlink to `/opt/omnitron/current`
389
- // patched the one the first import happened to name; the other
390
- // twenty-two were waiting behind it.
391
- //
392
- // Now the artifact carries `vendor/*.tgz` and a manifest that installs
393
- // them, exactly like the daemon's own bundle, and the install runs
394
- // here. That is not a cost to be minimised — it is the only step that
395
- // happens on a machine that knows it is Linux, which is what decides
396
- // between `@esbuild/darwin-arm64` and `@esbuild/linux-x64`.
397
- this.emitProgress(nodeKey, artifact.app, 'installing', 60, 'Installing dependencies on the node...');
398
- try {
399
- await this.sshExec(target, `cd ${shellEscape(remotePath)} && npm install --omit=dev --no-audit --no-fund`, 900_000);
327
+ if (!artifact.release)
328
+ await this.sshExec(target, `cd ${shellEscape(remotePath)} && tar -xzf ${shellEscape(archiveName)}`);
329
+ const daemonBundle = inspected ?? await this.inspectInstalledBundle(target);
330
+ const runtime = daemonBundle.applicationRuntime;
331
+ if (artifact.release) {
332
+ assertResidentApplicationRuntime(runtime);
333
+ assertFrozenLaunch(artifact.launch, artifact.release);
334
+ assertSameApplicationRuntime(runtime, (await this.inspectInstalledBundle(target)).applicationRuntime);
335
+ this.emitProgress(nodeKey, artifact.app, 'extracting', 65, 'Verifying the unchanged application SDK and execution target');
336
+ const result = await this.sshExec(target, installFrozenApplicationCommand(remotePath, archiveName, artifact.launch, artifact.release, runtime, nodeOptions, daemonBundle.root), 240_000);
337
+ if (JSON.parse(result.trim()) !== nodeOptions)
338
+ throw new Error('Release Node options differ from the effective application definition');
400
339
  }
401
- catch (err) {
402
- const duration = Date.now() - startTime;
403
- const detail = `dependency install failed on the node: ${err.message.slice(0, 400)}`;
404
- this.emitProgress(nodeKey, artifact.app, 'failed', 60, detail);
405
- this.logger.error({ node: nodeKey, app: artifact.app, path: remotePath }, detail);
406
- return { node: nodeKey, app: artifact.app, version: artifact.version, status: 'failed', duration, error: detail };
340
+ else {
341
+ // 5. Install the dependencies ON THE NODE.
342
+ //
343
+ // Three shapes of this step, and the two that were wrong are worth
344
+ // keeping written down because each looked finished.
345
+ //
346
+ // It first ran `npm install --production --ignore-scripts 2>/dev/null
347
+ // || true`. That could not work even once — the manifests use pnpm's
348
+ // `workspace:` protocol, npm answers `EUNSUPPORTEDPROTOCOL` — and the
349
+ // `|| true` meant nobody found out.
350
+ //
351
+ // It then trusted the artifact to arrive complete, from `pnpm deploy`,
352
+ // and checked `test -d node_modules`. The artifact was NOT complete:
353
+ // every `@omnitron-dev/*` package was a symlink into a home directory
354
+ // on the master, twenty-three of them, and a directory of dangling
355
+ // symlinks passes `test -d`. A symlink to `/opt/omnitron/current`
356
+ // patched the one the first import happened to name; the other
357
+ // twenty-two were waiting behind it.
358
+ //
359
+ // Now the artifact carries `vendor/*.tgz` and a manifest that installs
360
+ // them, exactly like the daemon's own bundle, and the install runs
361
+ // here. That is not a cost to be minimised — it is the only step that
362
+ // happens on a machine that knows it is Linux, which is what decides
363
+ // between `@esbuild/darwin-arm64` and `@esbuild/linux-x64`.
364
+ this.emitProgress(nodeKey, artifact.app, 'installing', 60, 'Installing dependencies on the node...');
365
+ try {
366
+ await this.sshExec(target, `cd ${shellEscape(remotePath)} && npm install --omit=dev --engine-strict --no-audit --no-fund`, 900_000);
367
+ }
368
+ catch (err) {
369
+ const duration = Date.now() - startTime;
370
+ const detail = `dependency install failed on the node: ${err.message.slice(0, 400)}`;
371
+ this.emitProgress(nodeKey, artifact.app, 'failed', 60, detail);
372
+ this.logger.error({ node: nodeKey, app: artifact.app, path: remotePath }, detail);
373
+ return { node: nodeKey, app: artifact.app, version: artifact.version, status: 'failed', duration, error: detail };
374
+ }
375
+ // 5a. One physical copy of every package the daemon shares with the app.
376
+ //
377
+ // A supervised app does not run alone in its process: omnitron's own
378
+ // `bootstrap-process.js` is the entry point, and the app's modules are
379
+ // loaded into it. Titan keeps identities at module scope — the
380
+ // `Container` class among them — so two physical installations of
381
+ // `@omnitron-dev/titan` in one process means `@Inject(Container)`
382
+ // resolves against a class that is not the one the daemon registered,
383
+ // and the failure reads `Dependency 'Container' not found`.
384
+ //
385
+ // `bootstrap-process.ts` checks for exactly this and refuses to start,
386
+ // which is how a freshly installed artifact answered:
387
+ //
388
+ // Titan package identity mismatch detected between omnitron daemon
389
+ // and app 'geo'. Daemon resolves @omnitron-dev/titan from
390
+ // /opt/omnitron/versions/…; App resolves … from /opt/omnitron/
391
+ // artifacts/sample/geo/0.0.1/node_modules/@omnitron-dev/titan
392
+ //
393
+ // That is the correct refusal, and the answer is not to install less:
394
+ // the vendored copies are what let `npm install` resolve a coherent
395
+ // tree in the first place. They are replaced afterwards by links to
396
+ // the daemon's own, computed ON THE NODE from what the daemon actually
397
+ // has, so the set stays right as the daemon's closure changes rather
398
+ // than being a list here that drifts from it.
399
+ //
400
+ // `@omnitron-dev/omnitron` is deliberately NOT one of them, and this is
401
+ // the second time that lesson has been paid for. The daemon IS that
402
+ // package, so it is not inside its own `node_modules`, and linking to
403
+ // the install root instead gives node a directory whose package.json
404
+ // carries `name`, `version`, `type` and `dependencies` and NO `main`
405
+ // and NO `exports` — `bundleRootManifest` writes an install manifest,
406
+ // not a library manifest. Resolution then falls back to `index.js`,
407
+ // which is not there:
408
+ //
409
+ // Cannot find package
410
+ // '.../node_modules/@omnitron-dev/omnitron/index.js'
411
+ //
412
+ // — the exact error this whole line of work started from. The vendored
413
+ // copy that `pnpm pack` produces from `apps/omnitron` has the real
414
+ // manifest, so it is left alone. Its identity is not shared across the
415
+ // process boundary the way titan's is: `defineSystem` returns data that
416
+ // the daemon's bootstrap reads, not a class anything does `instanceof`
417
+ // against.
418
+ //
419
+ // `rm -rf` before each `ln -sfn`: linking onto an existing DIRECTORY
420
+ // puts the link INSIDE it, leaving a directory with no package.json
421
+ // that node reports as a missing `index.js` — a message about a file
422
+ // that was never the problem.
423
+ const daemonRoot = runtime?.root ?? daemonBundle.root;
424
+ await this.sshExec(target, `set -e; APP=${shellEscape(`${remotePath}/node_modules/@omnitron-dev`)}; ` +
425
+ `mkdir -p "$APP"; ` +
426
+ `for p in ${shellEscape(daemonRoot)}/node_modules/@omnitron-dev/*; do ` +
427
+ `[ -e "$p" ] || continue; n=$(basename "$p"); ` +
428
+ `rm -rf "$APP/$n"; ln -sfn "$p" "$APP/$n"; done`);
407
429
  }
408
- // 5a. One physical copy of every package the daemon shares with the app.
409
- //
410
- // A supervised app does not run alone in its process: omnitron's own
411
- // `bootstrap-process.js` is the entry point, and the app's modules are
412
- // loaded into it. Titan keeps identities at module scope — the
413
- // `Container` class among them — so two physical installations of
414
- // `@omnitron-dev/titan` in one process means `@Inject(Container)`
415
- // resolves against a class that is not the one the daemon registered,
416
- // and the failure reads `Dependency 'Container' not found`.
417
- //
418
- // `bootstrap-process.ts` checks for exactly this and refuses to start,
419
- // which is how a freshly installed artifact answered:
420
- //
421
- // Titan package identity mismatch detected between omnitron daemon
422
- // and app 'geo'. Daemon resolves @omnitron-dev/titan from
423
- // /opt/omnitron/versions/…; App resolves … from /opt/omnitron/
424
- // artifacts/sample/geo/0.0.1/node_modules/@omnitron-dev/titan
425
- //
426
- // That is the correct refusal, and the answer is not to install less:
427
- // the vendored copies are what let `npm install` resolve a coherent
428
- // tree in the first place. They are replaced afterwards by links to
429
- // the daemon's own, computed ON THE NODE from what the daemon actually
430
- // has, so the set stays right as the daemon's closure changes rather
431
- // than being a list here that drifts from it.
432
- //
433
- // `@omnitron-dev/omnitron` is deliberately NOT one of them, and this is
434
- // the second time that lesson has been paid for. The daemon IS that
435
- // package, so it is not inside its own `node_modules`, and linking to
436
- // the install root instead gives node a directory whose package.json
437
- // carries `name`, `version`, `type` and `dependencies` and NO `main`
438
- // and NO `exports` — `bundleRootManifest` writes an install manifest,
439
- // not a library manifest. Resolution then falls back to `index.js`,
440
- // which is not there:
441
- //
442
- // Cannot find package
443
- // '.../node_modules/@omnitron-dev/omnitron/index.js'
444
- //
445
- // — the exact error this whole line of work started from. The vendored
446
- // copy that `pnpm pack` produces from `apps/omnitron` has the real
447
- // manifest, so it is left alone. Its identity is not shared across the
448
- // process boundary the way titan's is: `defineSystem` returns data that
449
- // the daemon's bootstrap reads, not a class anything does `instanceof`
450
- // against.
451
- //
452
- // `rm -rf` before each `ln -sfn`: linking onto an existing DIRECTORY
453
- // puts the link INSIDE it, leaving a directory with no package.json
454
- // that node reports as a missing `index.js` — a message about a file
455
- // that was never the problem.
456
- const daemonRoot = (await this.inspectInstalledBundle(target)).root;
457
- await this.sshExec(target, `set -e; APP=${shellEscape(`${remotePath}/node_modules/@omnitron-dev`)}; ` +
458
- `mkdir -p "$APP"; ` +
459
- `for p in ${shellEscape(daemonRoot)}/node_modules/@omnitron-dev/*; do ` +
460
- `[ -e "$p" ] || continue; n=$(basename "$p"); ` +
461
- `rm -rf "$APP/$n"; ln -sfn "$p" "$APP/$n"; done`);
462
430
  // The install either produced a tree that resolves or it did not, and
463
431
  // `test -d node_modules` cannot tell those apart — it was true for the
464
432
  // whole time nothing worked. Asking node to RESOLVE the package the
@@ -470,16 +438,17 @@ export class RemoteDeployer {
470
438
  // map publishes what it lists and nothing else. A probe that fails on
471
439
  // a healthy tree is worse than none — it would have failed every
472
440
  // deployment from here on, for the one reason that is not a fault.
473
- this.emitProgress(nodeKey, artifact.app, 'extracting', 70, 'Checking dependencies...');
474
- const resolved = await this.sshExec(target, `cd ${shellEscape(remotePath)} && node -e ${shellEscape("const r=require('module').createRequire(process.cwd()+'/package.json');" +
475
- "r.resolve('@omnitron-dev/omnitron');r.resolve('@omnitron-dev/titan')")} >/dev/null 2>&1 && echo resolves || echo broken`).catch(() => 'broken');
476
- if (resolved.trim() !== 'resolves') {
477
- const duration = Date.now() - startTime;
478
- const detail = 'the installed tree cannot resolve @omnitron-dev/omnitron or @omnitron-dev/titan, ' +
479
- 'so the app will fail at its first import';
480
- this.emitProgress(nodeKey, artifact.app, 'failed', 70, detail);
481
- this.logger.error({ node: nodeKey, app: artifact.app, path: remotePath }, detail);
482
- return { node: nodeKey, app: artifact.app, version: artifact.version, status: 'failed', duration, error: detail };
441
+ if (!artifact.release) {
442
+ this.emitProgress(nodeKey, artifact.app, 'extracting', 70, 'Checking dependencies...');
443
+ const resolved = await this.sshExec(target, `cd ${shellEscape(remotePath)} && node -e ${shellEscape("const r=require('module').createRequire(process.cwd()+'/package.json');" +
444
+ "r.resolve('@omnitron-dev/omnitron');r.resolve('@omnitron-dev/titan')")} >/dev/null 2>&1 && echo resolves || echo broken`).catch(() => 'broken');
445
+ if (resolved.trim() !== 'resolves') {
446
+ const duration = Date.now() - startTime;
447
+ const detail = 'The installed tree cannot resolve @omnitron-dev/omnitron or @omnitron-dev/titan';
448
+ this.emitProgress(nodeKey, artifact.app, 'failed', 70, detail);
449
+ this.logger.error({ node: nodeKey, app: artifact.app, path: remotePath }, detail);
450
+ return { node: nodeKey, app: artifact.app, version: artifact.version, status: 'failed', duration, error: detail };
451
+ }
483
452
  }
484
453
  // 5b. No record yet. The next deployment reads `.artifact-sha256` as
485
454
  // «the app runs this», and at this point it does not: the files are
@@ -504,35 +473,12 @@ export class RemoteDeployer {
504
473
  version: artifact.version,
505
474
  status: 'success',
506
475
  duration,
476
+ directory,
507
477
  ...(artifact.checksum ? { checksum: artifact.checksum } : {}),
478
+ ...(artifact.release && runtime ? { migrationNode: runtime.executable } : {}),
508
479
  };
509
480
  }
510
- this.emitProgress(nodeKey, artifact.app, 'restarting', 80, 'Restarting app on remote...');
511
- const started = await this.signalRemoteDaemon(target, artifact.app);
512
- // 7. Verify health
513
- this.emitProgress(nodeKey, artifact.app, 'verifying', 90, 'Verifying health...');
514
- const health = await this.verifyHealth(target, artifact.app, project);
515
- const duration = Date.now() - startTime;
516
- // An artifact on disk is not a running application. Reporting success
517
- // for the transfer alone is what let a fleet show six deployed apps and
518
- // run none of them.
519
- if (!started.ok || !health.online) {
520
- const why = !started.ok ? started.detail : health.detail;
521
- this.emitProgress(nodeKey, artifact.app, 'failed', 90, `artifact installed, app not running: ${why}`);
522
- this.logger.error({ node: nodeKey, app: artifact.app, version: artifact.version, duration, detail: why }, 'Artifact installed, but the app is not running on the node');
523
- return {
524
- node: nodeKey,
525
- app: artifact.app,
526
- version: artifact.version,
527
- status: 'failed',
528
- duration,
529
- error: `artifact installed, app not running: ${why}`,
530
- };
531
- }
532
- await this.recordRunningArtifact(target, remotePath, artifact.app, artifact.checksum);
533
- this.emitProgress(nodeKey, artifact.app, 'success', 100, `Deployed in ${Math.round(duration / 1000)}s`);
534
- this.logger.info({ node: nodeKey, app: artifact.app, version: artifact.version, duration }, 'Deployment successful');
535
- return { node: nodeKey, app: artifact.app, version: artifact.version, status: 'success', duration };
481
+ throw new Error('Artifact installed in a new directory; activate it through deployToStack with application definitions');
536
482
  }
537
483
  catch (err) {
538
484
  const duration = Date.now() - startTime;
@@ -546,6 +492,29 @@ export class RemoteDeployer {
546
492
  * Deploy artifacts to all nodes in a stack (parallel).
547
493
  */
548
494
  async deployToStack(targets, artifacts, project, options) {
495
+ if (options?.apps?.length) {
496
+ if (!options.stack)
497
+ throw new Error('Application deployment requires an explicit source stack before transferring artifacts');
498
+ stackExecutionKey({ project, stack: options.stack });
499
+ }
500
+ const migrations = options?.migrations ?? [];
501
+ validateMigrationOwners(migrations, options?.apps ?? []);
502
+ targets = orderMigrationPlacements(migrations, targets.map(target => ({ target,
503
+ apps: (options?.apps ?? []).filter(app => !target.apps || target.apps.includes(app.name)),
504
+ }))).map(placement => placement.target);
505
+ const destinations = migrations.map(request => {
506
+ if (!artifacts.some(artifact => artifact.app === request.app))
507
+ throw Error(`No artifact for migration owner ${request.app}`);
508
+ const app = options?.apps?.find(entry => entry.name === request.app);
509
+ if (!app)
510
+ throw Error(`Missing migration owner ${request.app}`);
511
+ const env = { ...app.env, ...options?.appEnv?.[request.app] };
512
+ const database = migrationDatabaseEnvironment(request.app, env['DATABASE_URL'] ?? '', request.database, request.mode);
513
+ if (request.mode === 'config' && !artifacts.find(artifact => artifact.app === request.app)?.release)
514
+ throw Error(`Explicit migration config for ${request.app} requires a verified release artifact`);
515
+ return { app: request.app, database };
516
+ });
517
+ validateMigrationDestinations(destinations);
549
518
  const concurrency = options?.concurrency ?? 3;
550
519
  const results = [];
551
520
  // Build deployment matrix: each app to each node (or node-specific apps)
@@ -558,6 +527,13 @@ export class RemoteDeployer {
558
527
  tasks.push({ target, artifact });
559
528
  }
560
529
  }
530
+ const owners = new Map();
531
+ for (const { target, artifact } of tasks)
532
+ if (artifact.release && !owners.has(target)) {
533
+ const runtime = (await this.inspectInstalledBundle(target)).applicationRuntime;
534
+ assertResidentApplicationRuntime(runtime);
535
+ owners.set(target, runtime);
536
+ }
561
537
  // Execute with concurrency limit
562
538
  const executing = new Set();
563
539
  for (const task of tasks) {
@@ -566,6 +542,10 @@ export class RemoteDeployer {
566
542
  // started before the node knows it exists.
567
543
  const result = await this.deployToNode(task.target, task.artifact, project, {
568
544
  startAfterInstall: !options?.apps?.length,
545
+ ...(task.artifact.release ? { launchEnv: {
546
+ ...options?.apps?.find(app => app.name === task.artifact.app)?.env,
547
+ ...options?.appEnv?.[task.artifact.app],
548
+ } } : {}),
569
549
  ...(options?.force === true ? { force: true } : {}),
570
550
  });
571
551
  results.push(result);
@@ -590,11 +570,38 @@ export class RemoteDeployer {
590
570
  const nodeKey = `${target.host}:${target.daemonPort ?? 9700}`;
591
571
  const landed = results
592
572
  .filter((r) => r.node === nodeKey && r.status === 'success')
593
- .map((r) => ({ app: r.app, version: r.version }));
594
- const registration = await this.registerNodeApps(target, project, options.apps, landed, options.appEnv, options.alertSink);
595
- // Schema before the apps that read it — and an app whose schema did
596
- // not arrive does not get its new code started on the old one.
597
- const migrationFailed = await this.migrateNodeApps(target, project, landed, options.appEnv);
573
+ .map((r) => ({ app: r.app, version: r.version, ...(artifacts.find(a => a.app === r.app)?.launch ? { launch: artifacts.find(a => a.app === r.app).launch } : {}), ...(r.migrationNode ? { migrationNode: r.migrationNode } : {}), ...(r.directory ? { directory: r.directory } : {}) }));
574
+ const expected = tasks.filter(task => task.target === target).length;
575
+ if (landed.length !== expected) {
576
+ for (const result of results.filter(r => r.node === nodeKey && r.status === 'success')) {
577
+ result.status = 'failed';
578
+ result.error = 'Another artifact failed installation; existing node configuration and processes were retained';
579
+ this.emitProgress(nodeKey, result.app, 'failed', 75, result.error);
580
+ }
581
+ continue;
582
+ }
583
+ // Do not publish a new boot configuration until every candidate is installed and migrated.
584
+ const migrationFailed = await this.migrateNodeApps(target, project, landed, migrations.filter(request => landed.some(entry => entry.app === request.app)), artifacts, Object.fromEntries(options.apps.map(app => [app.name, { ...app.env, ...options.appEnv?.[app.name] }])));
585
+ if (migrationFailed.size) {
586
+ for (const result of results.filter(r => r.node === nodeKey && r.status === 'success')) {
587
+ result.status = 'failed';
588
+ result.error = `database migrations failed; existing code retained: ${migrationFailed.get(result.app) ?? 'another application failed'}`;
589
+ this.emitProgress(nodeKey, result.app, 'failed', 80, result.error);
590
+ }
591
+ continue;
592
+ }
593
+ let registration;
594
+ try {
595
+ registration = await this.registerNodeApps(target, project, options.apps, landed, options.appEnv, options.alertSink, options.stack, owners.get(target));
596
+ }
597
+ catch (error) {
598
+ for (const result of results.filter(r => r.node === nodeKey && r.status === 'success')) {
599
+ result.status = 'failed';
600
+ result.error = `Node registration failed: ${error.message}`;
601
+ this.emitProgress(nodeKey, result.app, 'failed', 85, result.error);
602
+ }
603
+ continue;
604
+ }
598
605
  // And the path from the gateway to them, which is the one crossing
599
606
  // no configuration can open by itself. See `gateway-reachability`.
600
607
  if (options.stack)
@@ -637,12 +644,24 @@ export class RemoteDeployer {
637
644
  this.logger.info({ node: result.node, app: entry.app, version: entry.version, because: decision.because }, 'Left running — this deployment changes nothing for this app');
638
645
  continue;
639
646
  }
647
+ const expectedOwner = owners.get(target);
648
+ if (expectedOwner) {
649
+ try {
650
+ assertSameApplicationRuntime(expectedOwner, (await this.inspectInstalledBundle(target)).applicationRuntime);
651
+ }
652
+ catch (error) {
653
+ result.status = 'failed';
654
+ result.error = error.message;
655
+ this.emitProgress(result.node, entry.app, 'failed', 90, result.error);
656
+ continue;
657
+ }
658
+ }
640
659
  const started = await this.signalRemoteDaemon(target, entry.app);
641
660
  const health = started.ok
642
661
  ? await this.verifyHealth(target, entry.app, project)
643
662
  : { online: false, detail: started.detail };
644
663
  if (health.online) {
645
- await this.recordRunningArtifact(target, artifactDirOnNode(project, entry.app, entry.version), entry.app, result.checksum);
664
+ await this.recordRunningArtifact(target, artifactDirOnNode(project, entry.app, entry.directory ?? entry.version), entry.app, result.checksum);
646
665
  this.emitProgress(result.node, entry.app, 'success', 100, 'Running');
647
666
  // Said, because its opposite is. «Left running» above logs when
648
667
  // this deployment leaves an application alone; restarting one
@@ -739,129 +758,80 @@ export class RemoteDeployer {
739
758
  this.logger.warn({ node: target.host, network, error: err.message.slice(0, 200) }, 'Could not check the gateway’s path to the applications');
740
759
  }
741
760
  }
742
- /**
743
- * Run each app's migrations, on the node, against the node's database.
744
- *
745
- * They had never run there. `ProjectService` migrates by executing
746
- * `apps/<name>/src/database/migrate.ts` from the PROJECT PATH against
747
- * `localhost` — both of which name the machine the master is on. A node has
748
- * no project sources and a different localhost, so a remote stack's
749
- * databases were created and left empty.
750
- *
751
- * Measured on the test node after six apps installed and five started:
752
- * every one of the six databases existed and held ZERO tables. Five apps
753
- * came up anyway, because they touch no table at boot; `payments` does, and
754
- * said so —
755
- *
756
- * Failed to call @PostConstruct 'bootstrap' on 'PlatformRevenueService':
757
- * relation "accounts" does not exist
758
- *
759
- * — which is the only reason anyone found out. A platform with no schema
760
- * that reports five of six apps healthy is a worse state than one that
761
- * refuses to start.
762
- *
763
- * The artifact already carries what is needed: `dist/database/migrate.js`
764
- * beside `dist/database/migrations/` — 160 compiled files for payments. The
765
- * same build the app itself runs from, so there is no second copy of the
766
- * schema to drift.
767
- *
768
- * Returns the apps whose migrations failed, with the reason, and the
769
- * caller does not start their new code.
770
- *
771
- * This used to say: «Failure is reported and does not stop the deployment:
772
- * an app whose migrations fail will fail its own start with a message
773
- * about the table it wanted, which is more specific than anything this
774
- * step could say.» True for one of the two ways it goes. An app that
775
- * fails to START is caught by `verifyHealth` and marked failed — that
776
- * branch was covered, and the sentence is right about it. An app that
777
- * starts fine and fails on the first REQUEST that touches the missing
778
- * table passes `verifyHealth`, the stack reports `started`, and the only
779
- * trace is one ERROR line in the master's log. The justification covered
780
- * the branch that was already safe.
781
- *
782
- * Idempotence is what makes refusing cheap: the migrator records each
783
- * migration it applied, in a transaction with the migration itself, so
784
- * running the batch again after the cause is fixed applies exactly what
785
- * is missing. That holds because `HardenedMigrationRunner` defaults
786
- * `useTransactions` to true (`titan-database/src/migration/
787
- * hardened-runner.ts:171`) and no sample `migrate.ts` overrides it — it is
788
- * conditional in the runner (`:502`), so a migrator that turned it off
789
- * would make a refused deployment leave a half-applied migration behind.
790
- */
791
- async migrateNodeApps(target, project, landed, appEnv) {
761
+ /** Explicit owners only. Preflight every program and destination before the first
762
+ * migration; recheck sealed origin immediately before execution. No discovery,
763
+ * source fallback or retry after an ambiguous database outcome. */
764
+ async migrateNodeApps(target, project, landed, requests, artifacts, appEnv) {
792
765
  const failed = new Map();
793
- for (const entry of landed) {
794
- const databaseUrl = appEnv?.[entry.app]?.['DATABASE_URL'];
795
- if (!databaseUrl)
796
- continue;
797
- const dir = `/opt/omnitron/artifacts/${assertRemotePathSegment('project name', project)}` +
798
- `/${assertRemotePathSegment('app name', entry.app)}` +
799
- `/${assertRemotePathSegment('version', entry.version)}`;
800
- const script = `${dir}/dist/database/migrate.js`;
801
- // A node that could not be asked is not an app without a migrator.
802
- // This command exits 0 either way, so `sshExec` throws only when the
803
- // question never arrived — and that was answered `'no'`: migrations
804
- // skipped, new code started on the old schema. The worst case of the
805
- // docblock above, reached through a dropped SSH connection instead of
806
- // a failed migration, and refused the same way.
807
- let present;
766
+ const planned = [];
767
+ let runtime;
768
+ for (const request of requests) {
808
769
  try {
809
- present = await this.sshExec(target, `test -f ${shellEscape(script)} && echo yes || echo no`);
770
+ const entry = landed.find(candidate => candidate.app === request.app);
771
+ if (!entry)
772
+ throw Error(`Migration owner ${request.app} did not install`);
773
+ const directory = artifactDirOnNode(project, entry.app, entry.directory ?? entry.version);
774
+ const script = `${directory}/${request.release}`;
775
+ const artifact = artifacts.find(candidate => candidate.app === entry.app);
776
+ let verify;
777
+ let nodeOptions = '', environmentApp = request.app;
778
+ if (artifact?.release) {
779
+ runtime ??= (await this.inspectInstalledBundle(target)).applicationRuntime;
780
+ if (!runtime || runtime.executable !== entry.migrationNode)
781
+ throw Error('Migration execution runtime changed');
782
+ const binding = runtime, origin = artifact.release;
783
+ nodeOptions = releaseOptionsForEnv(appEnv[request.app]);
784
+ environmentApp = origin.runtimeOrigin?.producerApp ?? request.app;
785
+ verify = async () => {
786
+ if ((await this.sshExec(target, installedReleaseCheckCommand(directory, origin, binding, nodeOptions), 120_000)).trim() !== 'verified')
787
+ throw Error(`Migration release origin changed for ${request.app}`);
788
+ };
789
+ await verify();
790
+ }
791
+ else if (request.mode === 'config')
792
+ throw Error('Explicit migration config requires a verified release artifact');
793
+ const database = migrationDatabaseEnvironment(environmentApp, appEnv[request.app]?.['DATABASE_URL'] ?? '', request.database, request.mode);
794
+ // test -f alone accepts escaping parent symlinks. Every path component must
795
+ // identify the physical program inside the selected artifact directory.
796
+ const check = `const fs=require('node:fs');if(fs.realpathSync(${JSON.stringify(directory)})!==${JSON.stringify(directory)}||fs.realpathSync(${JSON.stringify(script)})!==${JSON.stringify(script)})process.exit(1)`;
797
+ const executable = entry.migrationNode ? `env -u NODE_OPTIONS -u NODE_PATH ${shellEscape(entry.migrationNode)}` : 'node';
798
+ const present = await this.sshExec(target, `test -f ${shellEscape(script)} && ${executable} -e ${shellEscape(check)} && echo yes || echo no`);
799
+ if (present.trim() !== 'yes')
800
+ throw Error(`Declared migration program is unavailable: ${request.app}/${request.release}`);
801
+ const env = { ...appEnv[request.app], ...database.env, ...(artifact?.release ? { NODE_OPTIONS: nodeOptions, NODE_PATH: '' } : {}) };
802
+ if (request.mode === 'config') {
803
+ const preflight = prepareRemoteMigration({ cwd: directory, script, mode: 'config', validate: true,
804
+ ...(entry.migrationNode ? { node: entry.migrationNode } : {}) }, env);
805
+ await this.sshExec(target, preflight.command, 60_000, preflight.stdin);
806
+ }
807
+ planned.push({ request, directory, script, ...(entry.migrationNode ? { node: entry.migrationNode } : {}),
808
+ env, ...(verify ? { verify } : {}) });
810
809
  }
811
- catch (err) {
812
- const message = `the node could not be asked whether there are any to apply — ${err.message}`;
813
- this.logger.error({ node: target.host, app: entry.app, error: message.slice(0, 400) }, 'Could not ask the node for the app\'s migrations — its new code will not be started');
814
- failed.set(entry.app, message.slice(0, 300));
815
- continue;
810
+ catch (error) {
811
+ const message = redactDiagnosticText(error.message);
812
+ failed.set(request.app, message);
813
+ this.logger.error({ node: target.host, app: request.app, database: request.database, error: message }, 'Migration preparation failed — no database migrations were executed');
816
814
  }
817
- if (present.trim() !== 'yes')
818
- continue;
819
- this.emitProgress(`${target.host}:${target.daemonPort ?? 9700}`, entry.app, 'installing', 75, 'Applying database migrations...');
820
- // Both spellings, because the migrators read the second one.
821
- //
822
- // `apps/payments/src/database/migrate.ts` declares
823
- // `envPrefix: 'PAYMENTS__DATABASE'` and builds its connection from
824
- // `PAYMENTS__DATABASE__HOST` / `__PORT` / `__USER` / `__PASSWORD` /
825
- // `__DATABASE`. Given only `DATABASE_URL` it falls back to its own
826
- // defaults and reports `password authentication failed for user
827
- // "postgres"` — against a password that is correct and that it never
828
- // read. All six apps failed that way, which is what a convention
829
- // nobody wrote down costs when a second caller appears.
830
- //
831
- // `ProjectService` passes both, with the comment "App-specific env
832
- // vars (various naming conventions)". This is the second caller.
833
- const parsed = parseDatabaseUrl(databaseUrl);
834
- const prefix = entry.app.toUpperCase().replace(/-/g, '_');
835
- const dbEnv = parsed
836
- ? {
837
- [`${prefix}__DATABASE__HOST`]: parsed.host,
838
- [`${prefix}__DATABASE__PORT`]: parsed.port,
839
- [`${prefix}__DATABASE__DATABASE`]: parsed.database,
840
- [`${prefix}__DATABASE__USER`]: parsed.user,
841
- [`${prefix}__DATABASE__PASSWORD`]: parsed.password,
842
- }
843
- : {};
815
+ }
816
+ if (failed.size)
817
+ return failed;
818
+ for (const item of planned) {
819
+ const { request } = item;
820
+ this.emitProgress(`${target.host}:${target.daemonPort ?? 9700}`, request.app, 'installing', 75, `Applying ${request.service}/${request.database} migrations...`);
844
821
  try {
845
- // `cd` into the artifact so the script resolves its own imports, and
846
- // every value in the environment rather than the command line, where
847
- // it would be in every process listing on the host.
848
- const assignments = Object.entries({ DATABASE_URL: databaseUrl, ...dbEnv })
849
- .map(([k, v]) => `${k}=${shellEscape(v)}`)
850
- .join(' ');
851
- // What the migrations said, in order, before the verdict (see
852
- // `migration-output.ts`). The masked channel on purpose: these lines
853
- // are for reading, not parsing, and a migrator that ever printed a
854
- // credential must not put it in the master's log.
855
- const said = await this.sshExec(target, `cd ${shellEscape(dir)} && ${assignments} node ${shellEscape(script)}`, 600_000);
856
- for (const line of migrationOutput(said)) {
857
- this.logger.info({ node: target.host, app: entry.app, line }, 'Migration said');
858
- }
859
- this.logger.info({ node: target.host, app: entry.app }, 'Database migrations applied on the node');
822
+ await item.verify?.();
823
+ const migration = prepareRemoteMigration({ cwd: item.directory, script: item.script, mode: request.mode,
824
+ ...(item.node ? { node: item.node } : {}) }, item.env);
825
+ const said = await this.sshExec(target, migration.command, 600_000, migration.stdin);
826
+ for (const line of migrationOutput(said).map(redactDiagnosticText))
827
+ this.logger.info({ node: target.host, app: request.app, database: request.database, line }, 'Migration said');
828
+ this.logger.info({ node: target.host, app: request.app, database: request.database }, 'Database migrations applied on the node');
860
829
  }
861
- catch (err) {
862
- const message = err.message;
863
- this.logger.error({ node: target.host, app: entry.app, error: message.slice(0, 400) }, 'Database migrations failed on the node — its new code will not be started');
864
- failed.set(entry.app, message.slice(0, 300));
830
+ catch (error) {
831
+ const message = redactDiagnosticText(error.message);
832
+ failed.set(request.app, message);
833
+ this.logger.error({ node: target.host, app: request.app, database: request.database, error: message }, 'Database migrations failed on the node — candidate applications will not be started');
834
+ break;
865
835
  }
866
836
  }
867
837
  return failed;
@@ -876,39 +846,34 @@ export class RemoteDeployer {
876
846
  * the file back: the body holds every generated credential on the node,
877
847
  * and it should cross the wire once, in the direction it has to.
878
848
  */
879
- async registerNodeApps(target, project, apps, landed, appEnv, alertSink) {
849
+ async registerNodeApps(target, project, apps, landed, appEnv, alertSink, sourceStack, expectedOwner) {
880
850
  if (landed.length === 0) {
881
851
  this.logger.warn({ host: target.host, project }, 'No artifact reached this node — nothing to register');
882
852
  return { changed: false };
883
853
  }
854
+ if (!sourceStack)
855
+ throw new Error('Node registration requires an explicit source stack');
884
856
  const { renderNodeAppConfig } = await import('../project/node-app-config.js');
885
857
  const dir = `/opt/omnitron/projects/${assertRemotePathSegment('project name', project)}`;
886
858
  const body = renderNodeAppConfig({
887
859
  project,
888
860
  artifactRoot: '/opt/omnitron/artifacts',
861
+ sourceStack,
889
862
  apps,
890
863
  artifacts: landed,
891
864
  appEnv,
892
865
  alertSink,
893
866
  });
894
- const bodyHash = crypto.createHash('sha256').update(body).digest('hex');
867
+ const operation = crypto.randomUUID();
868
+ let published = false, publicationAttempted = false;
895
869
  try {
896
- await this.sshExec(target, `mkdir -p ${shellEscape(dir)}`);
897
- const previous = parseRecordedChecksum(await this.sshExec(target, readChecksumCommand(shellEscape(dir), NODE_CONFIG_HASH_FILE)));
898
- const changed = previous !== bodyHash;
899
- // Through a here-document: the config carries braces, quotes and
900
- // newlines, and a single-quoted argument would need every quote in it
901
- // escaped by hand — which is how a generated file acquires a syntax
902
- // error nobody can see in the source that generated it.
903
- const configPath = `${dir}/omnitron.config.mjs`;
904
- // `umask 077` around the write, not a `chmod` after it: the file exists
905
- // with its contents between the two, and what it contains is the
906
- // generated password of every service on this node. It was written 0644
907
- // for as long as it has existed — measured on the test node — which was
908
- // harmless only because it held no credentials to leak.
909
- await this.sshExec(target, `umask 077 && cat > ${shellEscape(configPath)} <<'OMNITRON_EOF'\n${body}\nOMNITRON_EOF`);
910
- await this.sshExec(target, `chmod 600 ${shellEscape(configPath)}`);
911
- await this.sshExec(target, `printf %s ${shellEscape(bodyHash)} > ${shellEscape(`${dir}/${NODE_CONFIG_HASH_FILE}`)}`);
870
+ if (expectedOwner)
871
+ assertSameApplicationRuntime(expectedOwner, (await this.inspectInstalledBundle(target)).applicationRuntime);
872
+ const publication = prepareNodeConfigPublication({ directory: dir, project, body, operation, artifacts: landed });
873
+ publicationAttempted = true;
874
+ const result = await this.sshExec(target, publication.command, 60_000, publication.stdin);
875
+ published = true;
876
+ const { changed } = JSON.parse(result.trim());
912
877
  const added = await this.sshExec(target, `omnitron project add ${shellEscape(project)} ${shellEscape(dir)} 2>&1`);
913
878
  // Registering the project is not starting it. The node reads the
914
879
  // definitions and waits: measured, `omnitron status` answered
@@ -928,6 +893,8 @@ export class RemoteDeployer {
928
893
  apps: landed.map((l) => l.app),
929
894
  online: await this.appsOnline(target, project),
930
895
  });
896
+ if (expectedOwner)
897
+ assertSameApplicationRuntime(expectedOwner, (await this.inspectInstalledBundle(target)).applicationRuntime);
931
898
  const out = start.action === 'start'
932
899
  ? await this.sshExec(target, `omnitron stack start ${shellEscape(project)} ${shellEscape(NODE_STACK)} 2>&1`, 300_000)
933
900
  : '';
@@ -940,7 +907,7 @@ export class RemoteDeployer {
940
907
  const refused = /\bno .*found\b|\bfailed\b|\berror\b|not found|cannot/i.test(`${added}\n${out}`);
941
908
  if (refused) {
942
909
  this.logger.error({ host: target.host, project, dir, detail: `${added}\n${out}`.trim().slice(0, 300) }, 'The node refused the apps it was given — its artifacts are installed and it will run none of them');
943
- return { changed };
910
+ throw new Error('Node CLI refused project registration or stack start');
944
911
  }
945
912
  this.logger.info({
946
913
  host: target.host,
@@ -958,9 +925,18 @@ export class RemoteDeployer {
958
925
  }
959
926
  catch (err) {
960
927
  this.logger.error({ host: target.host, project, dir, error: err.message }, 'Could not tell the node what to run — its artifacts are installed and its daemon does not know the apps');
961
- // Unknown, and unknown must not read as "nothing moved": an app whose
962
- // config may have changed is an app to restart.
963
- return { changed: true };
928
+ // Restore durable boot definitions if publication or registration was interrupted.
929
+ // Do not claim process rollback: some applications may already have started.
930
+ try {
931
+ if (publicationAttempted)
932
+ await this.sshExec(target, restoreNodeConfigCommand(dir, operation));
933
+ if (published)
934
+ await this.sshExec(target, `omnitron project add ${shellEscape(project)} ${shellEscape(dir)} 2>&1`);
935
+ }
936
+ catch (restoreError) {
937
+ throw new Error(`Registration and configuration recovery failed; inspect ${dir}/.registration-${operation}`, { cause: restoreError });
938
+ }
939
+ throw err;
964
940
  }
965
941
  }
966
942
  /**
@@ -1283,6 +1259,54 @@ export class RemoteDeployer {
1283
1259
  async assertNoPendingHostOperations(target, prefix = '/opt/omnitron', allowance) {
1284
1260
  await this.sshExecData(target, hostOperationBarrierCommand(prefix, allowance));
1285
1261
  }
1262
+ async readManagedHost(target, request) {
1263
+ return JSON.parse(await this.sshExecData(target, managedHostCommand(request), 480_000));
1264
+ }
1265
+ assertManagedTarget(target) {
1266
+ assertControlledDaemonPort(target.daemonPort);
1267
+ if (!target.expectedHostFingerprint)
1268
+ throw Error('Managed kernel rollout requires a pinned SSH host key');
1269
+ }
1270
+ async checkManagedTarget(target) {
1271
+ await this.assertNoPendingHostOperations(target, '/opt/omnitron');
1272
+ const pending = JSON.parse(await this.sshExecData(target, pendingReceiptsCommand('/opt/omnitron')));
1273
+ if (pending.length)
1274
+ throw Error('An unfinished host upgrade must be reconciled before kernel rollout');
1275
+ }
1276
+ async inspectManagedRollout(target, commit, options = {}) {
1277
+ this.assertManagedTarget(target);
1278
+ if (!/^[0-9a-f]{40}$/.test(commit))
1279
+ throw Error('A full lowercase Git commit is required');
1280
+ const inspect = () => planManagedRollout(request => this.readManagedHost(target, request), commit);
1281
+ if (!options.stage) {
1282
+ await this.checkManagedTarget(target);
1283
+ return inspect();
1284
+ }
1285
+ return this.underLease(target, 'stage managed kernel', async () => {
1286
+ await this.checkManagedTarget(target);
1287
+ const { stageCatalogRuntime } = await import('./kernel-distribution.js');
1288
+ const expected = await stageCatalogRuntime(this, target, commit, options.excludeOwnerId);
1289
+ const plan = await inspect();
1290
+ if (plan.candidate !== expected)
1291
+ throw Error('Installed runtime differs from the qualified catalog artifact');
1292
+ return plan;
1293
+ });
1294
+ }
1295
+ async activateManagedRollout(target, plan, beforeDispatch) {
1296
+ this.assertManagedTarget(target);
1297
+ return this.underLease(target, 'managed kernel handoff', async () => {
1298
+ await this.checkManagedTarget(target);
1299
+ await activateManagedTarget(request => this.readManagedHost(target, request), plan, beforeDispatch);
1300
+ });
1301
+ }
1302
+ async reconcileManagedRollout(target, plan, options) {
1303
+ this.assertManagedTarget(target);
1304
+ return this.underLease(target, 'reconcile managed kernel handoff', async () => {
1305
+ await this.checkManagedTarget(target);
1306
+ const selection = await reconcileManagedTarget(request => this.readManagedHost(target, request), plan);
1307
+ return options?.detailed || selection === 'candidate' ? selection : 'previous';
1308
+ });
1309
+ }
1286
1310
  /** Require a settled host and the actual serving immutable daemon build. */
1287
1311
  async inspectInstalledBundle(target, prefix = '/opt/omnitron', allowance) {
1288
1312
  assertControlledDaemonPort(target.daemonPort);
@@ -1290,11 +1314,19 @@ export class RemoteDeployer {
1290
1314
  const pending = JSON.parse(await this.sshExecData(target, pendingReceiptsCommand(prefix)));
1291
1315
  if (pending.length)
1292
1316
  throw new Error(`Unfinished host upgrade ${pending.map(r => r.id).join(', ')}; recover it before deploying an app`);
1317
+ const managed = await this.readManagedHost(target, { operation: 'inspect' });
1318
+ if (managed)
1319
+ return managed.bundle;
1293
1320
  const bundle = JSON.parse(await this.sshExecData(target, bundleProbeCommand(prefix)));
1294
1321
  const status = JSON.parse(await this.sshExecData(target, inventoryCommand(bundle, false)));
1295
1322
  assertServingBundle(bundle, status);
1296
- await this.sshExecData(target, runtimeProbeCommand(bundle, status.pid));
1297
- return bundle;
1323
+ const host = JSON.parse(await this.sshExecData(target, runtimeProbeCommand(bundle, status.pid)));
1324
+ const execution = host.applicationRuntime ?? (host.kind !== 'managed' && host.executable ? {
1325
+ root: bundle.root, executable: host.executable, commit: bundle.commit,
1326
+ } : undefined);
1327
+ if (execution && (!path.isAbsolute(execution.root) || !path.isAbsolute(execution.executable) || !/^[a-f0-9]{40}$/.test(execution.commit)))
1328
+ throw new Error('Invalid execution owner identity');
1329
+ return { ...bundle, ...(execution ? { applicationRuntime: execution } : {}) };
1298
1330
  }
1299
1331
  async activateBundle(target, version, prefix = '/opt/omnitron', keepVersions = 3, verifyPlatform, allowance) {
1300
1332
  assertControlledDaemonPort(target.daemonPort);
@@ -1315,6 +1347,8 @@ export class RemoteDeployer {
1315
1347
  return false;
1316
1348
  }
1317
1349
  const previous = await this.inspectInstalledBundle(target, prefix, allowance);
1350
+ if (previous.managed)
1351
+ throw Error('Independent owner detected. Use a sealed managed kernel rollout for this node');
1318
1352
  const candidate = JSON.parse(await this.sshExecData(target, bundleProbeCommand(prefix, version)));
1319
1353
  await this.sshExec(target, `${shellEscape(`${candidate.root}/dist/cli/omnitron.js`)} --version`, 120_000);
1320
1354
  const inventory = JSON.parse(await this.sshExecData(target, inventoryCommand(previous, true)));
@@ -1326,6 +1360,8 @@ export class RemoteDeployer {
1326
1360
  if (plan.online.includes(app.name))
1327
1361
  await this.sshExec(target, appHealthCommand(app, previous), 330_000);
1328
1362
  }
1363
+ this.emitProgress(nodeKey, '*', 'verifying', 0, 'Checking candidate bootstrap readers before stopping applications');
1364
+ await this.sshExecData(target, bootstrapPreflightCommand(plan), HOST_BOOTSTRAP_PREFLIGHT_TIMEOUT_MS + 10_000);
1329
1365
  const id = `${new Date().toISOString().replace(/[:.]/g, '-')}-${crypto.randomUUID()}`;
1330
1366
  const receiptPath = `${prefix}/upgrade-receipts/${id}.json`;
1331
1367
  const receipt = await executeHostUpgrade(plan, id, this.hostUpgradeActions(target, prefix, keepVersions, plan, verifyPlatform));
@@ -1472,10 +1508,10 @@ export class RemoteDeployer {
1472
1508
  const lease = this.deploymentLeases.getStore()?.get(`${target.host}:${target.sshPort ?? 22}`);
1473
1509
  return lease ? { command: lease.guard(command, timeout), timeout: timeout + 45_000 } : { command, timeout };
1474
1510
  }
1475
- async sshExec(target, command, timeout = 60_000) {
1511
+ async sshExec(target, command, timeout = 60_000, stdin) {
1476
1512
  await this.confirmLease(target, 'remote command');
1477
1513
  const guarded = this.guardedCommand(target, command, timeout);
1478
- const result = await this.execution.ssh(sshTargetOf(target), guarded.command, { timeout: guarded.timeout });
1514
+ const result = await this.execution.ssh(sshTargetOf(target), guarded.command, { timeout: guarded.timeout, ...(stdin !== undefined && { stdin }) });
1479
1515
  if (result.exitCode !== 0) {
1480
1516
  const detail = result.stderr || result.stdout || `exit ${result.exitCode}`;
1481
1517
  throw new Error(`ssh ${target.username ?? 'root'}@${target.host}: ${detail}`);
@@ -1486,7 +1522,8 @@ export class RemoteDeployer {
1486
1522
  async sshExecData(target, command, timeout = 60_000) {
1487
1523
  const result = await this.readFromNode(target, command, timeout);
1488
1524
  if (result.code !== 0) {
1489
- throw new Error(`ssh ${target.username ?? 'root'}@${target.host}: ${result.stderr || result.stdout || `exit ${result.code}`}`);
1525
+ const reason = redactDiagnosticText(commandFailure(result.stderr, `exit ${result.code}`));
1526
+ throw new Error(`ssh ${target.username ?? 'root'}@${target.host}: ${reason}`);
1490
1527
  }
1491
1528
  return result.stdout.trim();
1492
1529
  }
@@ -1596,7 +1633,6 @@ export class RemoteDeployer {
1596
1633
  const { createHash } = await import('node:crypto');
1597
1634
  const fsp = await import('node:fs/promises');
1598
1635
  const os = await import('node:os');
1599
- const path = await import('node:path');
1600
1636
  const stat = await fsp.stat(localDir).catch(() => null);
1601
1637
  if (!stat?.isDirectory())
1602
1638
  throw new Error(`No such directory to serve: ${localDir}`);
@@ -1811,6 +1847,7 @@ export class RemoteDeployer {
1811
1847
  catch (err) {
1812
1848
  this.logger.warn({ host: target.host, fresh, error: err.message.slice(0, 400) }, 'Could not carry the previous build forward — open tabs will reload onto the new one');
1813
1849
  }
1850
+ return undefined;
1814
1851
  }
1815
1852
  async signalRemoteDaemon(target, appName) {
1816
1853
  try {
@@ -1924,8 +1961,8 @@ export class RemoteDeployer {
1924
1961
  // Private — Progress
1925
1962
  // ===========================================================================
1926
1963
  emitProgress(node, app, status, progress, message) {
1927
- const event = { node, app, status, progress, message };
1928
- this.lastProgress.set(`${node}\u0000${app}`, { ...event, at: new Date().toISOString() });
1964
+ const event = { ...transferScope.getStore(), node, app, status, progress, message: redactDiagnosticText(message), at: new Date().toISOString() };
1965
+ this.lastProgress.set(deploymentProgressKey(event), event);
1929
1966
  for (const handler of this.progressHandlers) {
1930
1967
  try {
1931
1968
  handler(event);