@omnitron-dev/omnitron 0.3.0 → 0.3.1

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 (374) hide show
  1. package/README.md +4 -0
  2. package/dist/BUILD.json +2 -2
  3. package/dist/cli/omnitron.js +26 -2
  4. package/dist/cli/omnitron.js.map +1 -1
  5. package/dist/cluster/mesh-link.js +1 -1
  6. package/dist/cluster/slave-connector.d.ts +2 -2
  7. package/dist/cluster/slave-connector.js +1 -1
  8. package/dist/commands/deploy.d.ts +4 -4
  9. package/dist/commands/deploy.js +4 -4
  10. package/dist/commands/discover.d.ts +2 -2
  11. package/dist/commands/discover.js +2 -2
  12. package/dist/commands/fleet-asking.d.ts +2 -2
  13. package/dist/commands/fleet-asking.js +2 -2
  14. package/dist/commands/fleet-recover.d.ts +2 -0
  15. package/dist/commands/fleet-recover.d.ts.map +1 -0
  16. package/dist/commands/fleet-recover.js +30 -0
  17. package/dist/commands/fleet-recover.js.map +1 -0
  18. package/dist/commands/host-ingress.d.ts +3 -0
  19. package/dist/commands/host-ingress.d.ts.map +1 -0
  20. package/dist/commands/host-ingress.js +31 -0
  21. package/dist/commands/host-ingress.js.map +1 -0
  22. package/dist/commands/infra.d.ts +2 -2
  23. package/dist/commands/infra.js +7 -7
  24. package/dist/commands/infra.js.map +1 -1
  25. package/dist/commands/logs.d.ts +1 -1
  26. package/dist/commands/logs.js +3 -3
  27. package/dist/commands/logs.js.map +1 -1
  28. package/dist/commands/node.d.ts +2 -14
  29. package/dist/commands/node.d.ts.map +1 -1
  30. package/dist/commands/node.js +33 -22
  31. package/dist/commands/node.js.map +1 -1
  32. package/dist/commands/pipeline.d.ts.map +1 -1
  33. package/dist/commands/pipeline.js +8 -1
  34. package/dist/commands/pipeline.js.map +1 -1
  35. package/dist/commands/project.d.ts +2 -2
  36. package/dist/commands/project.js +2 -2
  37. package/dist/commands/release.d.ts +1 -1
  38. package/dist/commands/release.js +4 -4
  39. package/dist/commands/release.js.map +1 -1
  40. package/dist/commands/remote.d.ts +3 -3
  41. package/dist/commands/remote.js +3 -3
  42. package/dist/commands/tor.d.ts +1 -1
  43. package/dist/commands/tor.js +2 -2
  44. package/dist/config/types.d.ts +9 -6
  45. package/dist/config/types.d.ts.map +1 -1
  46. package/dist/daemon/daemon-entry.js +1 -1
  47. package/dist/daemon/daemon-entry.js.map +1 -1
  48. package/dist/daemon/daemon.d.ts +5 -19
  49. package/dist/daemon/daemon.d.ts.map +1 -1
  50. package/dist/daemon/daemon.js +54 -51
  51. package/dist/daemon/daemon.js.map +1 -1
  52. package/dist/daemon/daemon.module.d.ts.map +1 -1
  53. package/dist/daemon/daemon.module.js +3 -5
  54. package/dist/daemon/daemon.module.js.map +1 -1
  55. package/dist/daemon/daemon.rpc-service.d.ts +2 -2
  56. package/dist/daemon/daemon.rpc-service.js +6 -6
  57. package/dist/daemon/daemon.rpc-service.js.map +1 -1
  58. package/dist/execution/data-channel.d.ts +1 -1
  59. package/dist/execution/data-channel.js +1 -1
  60. package/dist/execution/execution.service.d.ts +10 -3
  61. package/dist/execution/execution.service.d.ts.map +1 -1
  62. package/dist/execution/execution.service.js +101 -44
  63. package/dist/execution/execution.service.js.map +1 -1
  64. package/dist/infrastructure/bare-metal-plan.js +1 -1
  65. package/dist/infrastructure/bare-metal-plan.js.map +1 -1
  66. package/dist/infrastructure/config-payload.d.ts +4 -4
  67. package/dist/infrastructure/config-payload.js +4 -4
  68. package/dist/infrastructure/container-runtime.d.ts +2 -10
  69. package/dist/infrastructure/container-runtime.d.ts.map +1 -1
  70. package/dist/infrastructure/container-runtime.js +41 -20
  71. package/dist/infrastructure/container-runtime.js.map +1 -1
  72. package/dist/infrastructure/gateway-redis-db.d.ts +2 -2
  73. package/dist/infrastructure/gateway-redis-db.js +2 -2
  74. package/dist/infrastructure/host-ingress-config.d.ts +12 -0
  75. package/dist/infrastructure/host-ingress-config.d.ts.map +1 -0
  76. package/dist/infrastructure/host-ingress-config.js +197 -0
  77. package/dist/infrastructure/host-ingress-config.js.map +1 -0
  78. package/dist/infrastructure/host-ingress-lock.d.ts +4 -0
  79. package/dist/infrastructure/host-ingress-lock.d.ts.map +1 -0
  80. package/dist/infrastructure/host-ingress-lock.js +36 -0
  81. package/dist/infrastructure/host-ingress-lock.js.map +1 -0
  82. package/dist/infrastructure/host-ingress-runtime.d.ts +25 -0
  83. package/dist/infrastructure/host-ingress-runtime.d.ts.map +1 -0
  84. package/dist/infrastructure/host-ingress-runtime.js +114 -0
  85. package/dist/infrastructure/host-ingress-runtime.js.map +1 -0
  86. package/dist/infrastructure/host-ingress-takeover.d.ts +18 -0
  87. package/dist/infrastructure/host-ingress-takeover.d.ts.map +1 -0
  88. package/dist/infrastructure/host-ingress-takeover.js +142 -0
  89. package/dist/infrastructure/host-ingress-takeover.js.map +1 -0
  90. package/dist/infrastructure/host-ingress-types.d.ts +173 -0
  91. package/dist/infrastructure/host-ingress-types.d.ts.map +1 -0
  92. package/dist/infrastructure/host-ingress-types.js +2 -0
  93. package/dist/infrastructure/host-ingress-types.js.map +1 -0
  94. package/dist/infrastructure/host-ingress.service.d.ts +47 -0
  95. package/dist/infrastructure/host-ingress.service.d.ts.map +1 -0
  96. package/dist/infrastructure/host-ingress.service.js +514 -0
  97. package/dist/infrastructure/host-ingress.service.js.map +1 -0
  98. package/dist/infrastructure/infrastructure.service.d.ts +21 -5
  99. package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
  100. package/dist/infrastructure/infrastructure.service.js +91 -10
  101. package/dist/infrastructure/infrastructure.service.js.map +1 -1
  102. package/dist/infrastructure/orphan-containers.d.ts +7 -7
  103. package/dist/infrastructure/orphan-containers.js +6 -6
  104. package/dist/infrastructure/presets/minio.js +1 -1
  105. package/dist/infrastructure/presets/minio.js.map +1 -1
  106. package/dist/infrastructure/provisioning-outcome.d.ts +1 -1
  107. package/dist/infrastructure/provisioning-outcome.js +1 -1
  108. package/dist/infrastructure/service-binding.js +1 -1
  109. package/dist/infrastructure/service-resolver.d.ts +10 -4
  110. package/dist/infrastructure/service-resolver.d.ts.map +1 -1
  111. package/dist/infrastructure/service-resolver.js +88 -45
  112. package/dist/infrastructure/service-resolver.js.map +1 -1
  113. package/dist/infrastructure/shipped-config.js +4 -4
  114. package/dist/infrastructure/stack-infra-manager.d.ts +10 -1
  115. package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
  116. package/dist/infrastructure/stack-infra-manager.js +53 -43
  117. package/dist/infrastructure/stack-infra-manager.js.map +1 -1
  118. package/dist/infrastructure/types.d.ts +8 -6
  119. package/dist/infrastructure/types.d.ts.map +1 -1
  120. package/dist/monitoring/log-line.d.ts +3 -3
  121. package/dist/monitoring/log-line.js +3 -3
  122. package/dist/monitoring/log-manager.d.ts +3 -3
  123. package/dist/monitoring/log-manager.js +3 -3
  124. package/dist/operations.d.ts +16 -0
  125. package/dist/operations.d.ts.map +1 -0
  126. package/dist/operations.js +13 -0
  127. package/dist/operations.js.map +1 -0
  128. package/dist/orchestrator/app-handle.d.ts +3 -3
  129. package/dist/orchestrator/app-handle.js +3 -3
  130. package/dist/orchestrator/bootstrap-loader.d.ts +2 -2
  131. package/dist/orchestrator/bootstrap-loader.js +3 -3
  132. package/dist/orchestrator/bootstrap-loader.js.map +1 -1
  133. package/dist/orchestrator/bootstrap-process.d.ts +1 -1
  134. package/dist/orchestrator/bootstrap-process.d.ts.map +1 -1
  135. package/dist/orchestrator/bootstrap-process.js +3 -2
  136. package/dist/orchestrator/bootstrap-process.js.map +1 -1
  137. package/dist/orchestrator/build-service.d.ts +6 -12
  138. package/dist/orchestrator/build-service.d.ts.map +1 -1
  139. package/dist/orchestrator/build-service.js +120 -83
  140. package/dist/orchestrator/build-service.js.map +1 -1
  141. package/dist/orchestrator/call-exposed-service.js +1 -1
  142. package/dist/orchestrator/classic-launcher.d.ts.map +1 -1
  143. package/dist/orchestrator/classic-launcher.js +6 -1
  144. package/dist/orchestrator/classic-launcher.js.map +1 -1
  145. package/dist/orchestrator/file-watcher.d.ts +1 -0
  146. package/dist/orchestrator/file-watcher.d.ts.map +1 -1
  147. package/dist/orchestrator/file-watcher.js +14 -3
  148. package/dist/orchestrator/file-watcher.js.map +1 -1
  149. package/dist/orchestrator/http-routes.d.ts +4 -0
  150. package/dist/orchestrator/http-routes.d.ts.map +1 -0
  151. package/dist/orchestrator/http-routes.js +19 -0
  152. package/dist/orchestrator/http-routes.js.map +1 -0
  153. package/dist/orchestrator/orchestrator.service.d.ts +18 -4
  154. package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
  155. package/dist/orchestrator/orchestrator.service.js +151 -110
  156. package/dist/orchestrator/orchestrator.service.js.map +1 -1
  157. package/dist/orchestrator/service-router.d.ts +1 -1
  158. package/dist/orchestrator/service-router.js +1 -1
  159. package/dist/orchestrator/topology-query.d.ts +1 -1
  160. package/dist/orchestrator/topology-query.js +1 -1
  161. package/dist/project/artifact-builder.js +2 -2
  162. package/dist/project/artifact-builder.js.map +1 -1
  163. package/dist/project/build-decision.d.ts +1 -1
  164. package/dist/project/build-decision.js +1 -1
  165. package/dist/project/config-resolver.js +1 -1
  166. package/dist/project/config-resolver.js.map +1 -1
  167. package/dist/project/declared-config.d.ts +2 -2
  168. package/dist/project/declared-config.js +2 -2
  169. package/dist/project/deploy-phases.d.ts +1 -1
  170. package/dist/project/deploy-phases.js +1 -1
  171. package/dist/project/exec-in-group.d.ts +1 -1
  172. package/dist/project/exec-in-group.js +1 -1
  173. package/dist/project/node-app-config.d.ts +2 -2
  174. package/dist/project/node-app-config.js +2 -2
  175. package/dist/project/node-app-config.js.map +1 -1
  176. package/dist/project/node-app-health.d.ts +1 -1
  177. package/dist/project/node-app-health.js +1 -1
  178. package/dist/project/operator-account.d.ts +9 -3
  179. package/dist/project/operator-account.d.ts.map +1 -1
  180. package/dist/project/operator-account.js +9 -9
  181. package/dist/project/operator-account.js.map +1 -1
  182. package/dist/project/registry.d.ts.map +1 -1
  183. package/dist/project/registry.js +4 -22
  184. package/dist/project/registry.js.map +1 -1
  185. package/dist/project/stack-env.d.ts +1 -1
  186. package/dist/project/stack-env.js +1 -1
  187. package/dist/project/stand-containers.d.ts +9 -2
  188. package/dist/project/stand-containers.d.ts.map +1 -1
  189. package/dist/project/stand-containers.js +17 -17
  190. package/dist/project/stand-containers.js.map +1 -1
  191. package/dist/release/artifact-store.d.ts +1 -1
  192. package/dist/release/artifact-store.d.ts.map +1 -1
  193. package/dist/release/artifact-store.js +1 -1
  194. package/dist/release/artifact-store.js.map +1 -1
  195. package/dist/release/attest-on-node.d.ts +3 -2
  196. package/dist/release/attest-on-node.d.ts.map +1 -1
  197. package/dist/release/attest-on-node.js +6 -6
  198. package/dist/release/attest-on-node.js.map +1 -1
  199. package/dist/release/attest.d.ts +3 -3
  200. package/dist/release/attest.js +1 -1
  201. package/dist/release/build-run.d.ts +2 -2
  202. package/dist/release/build-run.js +4 -4
  203. package/dist/release/build-run.js.map +1 -1
  204. package/dist/release/builder.d.ts +1 -1
  205. package/dist/release/builder.d.ts.map +1 -1
  206. package/dist/release/builder.js +1 -1
  207. package/dist/release/builder.js.map +1 -1
  208. package/dist/release/daemon-omni.d.ts +1 -1
  209. package/dist/release/daemon-omni.js +1 -1
  210. package/dist/release/definition-inputs.d.ts +1 -1
  211. package/dist/release/definition-inputs.js +1 -1
  212. package/dist/release/layout.d.ts +2 -2
  213. package/dist/release/layout.js +2 -2
  214. package/dist/release/manifest.d.ts +1 -1
  215. package/dist/release/manifest.js +1 -1
  216. package/dist/release/publish.d.ts +1 -1
  217. package/dist/release/publish.js +1 -1
  218. package/dist/release/store.d.ts +1 -1
  219. package/dist/release/store.d.ts.map +1 -1
  220. package/dist/release/store.js +3 -3
  221. package/dist/release/store.js.map +1 -1
  222. package/dist/services/alert.service.d.ts +2 -2
  223. package/dist/services/alert.service.js +2 -2
  224. package/dist/services/backup-pipeline.d.ts +1 -1
  225. package/dist/services/backup-pipeline.js +1 -1
  226. package/dist/services/backup.service.d.ts +3 -3
  227. package/dist/services/backup.service.js +3 -3
  228. package/dist/services/bundle-builder.d.ts +15 -12
  229. package/dist/services/bundle-builder.d.ts.map +1 -1
  230. package/dist/services/bundle-builder.js +124 -48
  231. package/dist/services/bundle-builder.js.map +1 -1
  232. package/dist/services/discovery.service.d.ts +1 -1
  233. package/dist/services/discovery.service.js +1 -1
  234. package/dist/services/host-operation-barrier.d.ts +8 -0
  235. package/dist/services/host-operation-barrier.d.ts.map +1 -0
  236. package/dist/services/host-operation-barrier.js +44 -0
  237. package/dist/services/host-operation-barrier.js.map +1 -0
  238. package/dist/services/host-upgrade.d.ts +129 -0
  239. package/dist/services/host-upgrade.d.ts.map +1 -0
  240. package/dist/services/host-upgrade.js +352 -0
  241. package/dist/services/host-upgrade.js.map +1 -0
  242. package/dist/services/infrastructure.rpc-service.d.ts +16 -1
  243. package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
  244. package/dist/services/infrastructure.rpc-service.js +71 -10
  245. package/dist/services/infrastructure.rpc-service.js.map +1 -1
  246. package/dist/services/local-bundle.d.ts +9 -0
  247. package/dist/services/local-bundle.d.ts.map +1 -1
  248. package/dist/services/local-bundle.js +11 -2
  249. package/dist/services/local-bundle.js.map +1 -1
  250. package/dist/services/log-collector.service.d.ts +1 -1
  251. package/dist/services/log-collector.service.js +1 -1
  252. package/dist/services/maintenance-lock.d.ts +2 -2
  253. package/dist/services/maintenance-lock.d.ts.map +1 -1
  254. package/dist/services/maintenance-lock.js +1 -1
  255. package/dist/services/migration-output.d.ts +2 -2
  256. package/dist/services/migration-output.js +2 -2
  257. package/dist/services/node-deploy-lease.d.ts +19 -2
  258. package/dist/services/node-deploy-lease.d.ts.map +1 -1
  259. package/dist/services/node-deploy-lease.js +84 -10
  260. package/dist/services/node-deploy-lease.js.map +1 -1
  261. package/dist/services/node-manager.rpc-service.d.ts +6 -1
  262. package/dist/services/node-manager.rpc-service.d.ts.map +1 -1
  263. package/dist/services/node-manager.rpc-service.js +25 -1
  264. package/dist/services/node-manager.rpc-service.js.map +1 -1
  265. package/dist/services/node-manager.service.d.ts +1 -1
  266. package/dist/services/node-manager.service.js +1 -1
  267. package/dist/services/node-upgrade.d.ts +1 -1
  268. package/dist/services/pipeline.rpc-service.d.ts +4 -0
  269. package/dist/services/pipeline.rpc-service.d.ts.map +1 -1
  270. package/dist/services/pipeline.rpc-service.js +9 -0
  271. package/dist/services/pipeline.rpc-service.js.map +1 -1
  272. package/dist/services/pipeline.service.d.ts +2 -0
  273. package/dist/services/pipeline.service.d.ts.map +1 -1
  274. package/dist/services/pipeline.service.js +12 -0
  275. package/dist/services/pipeline.service.js.map +1 -1
  276. package/dist/services/project.rpc-service.d.ts +7 -0
  277. package/dist/services/project.rpc-service.d.ts.map +1 -1
  278. package/dist/services/project.rpc-service.js +11 -0
  279. package/dist/services/project.rpc-service.js.map +1 -1
  280. package/dist/services/project.service.d.ts +21 -11
  281. package/dist/services/project.service.d.ts.map +1 -1
  282. package/dist/services/project.service.js +74 -59
  283. package/dist/services/project.service.js.map +1 -1
  284. package/dist/services/redeploy-decision.d.ts +2 -2
  285. package/dist/services/redeploy-decision.js +1 -1
  286. package/dist/services/release.rpc-service.d.ts +1 -1
  287. package/dist/services/release.rpc-service.js +1 -1
  288. package/dist/services/remote-deployer.service.d.ts +27 -16
  289. package/dist/services/remote-deployer.service.d.ts.map +1 -1
  290. package/dist/services/remote-deployer.service.js +269 -101
  291. package/dist/services/remote-deployer.service.js.map +1 -1
  292. package/dist/services/remote-provisioner.d.ts +2 -0
  293. package/dist/services/remote-provisioner.d.ts.map +1 -1
  294. package/dist/services/remote-provisioner.js +1 -1
  295. package/dist/services/remote-provisioner.js.map +1 -1
  296. package/dist/services/static-carry-forward.d.ts +26 -1
  297. package/dist/services/static-carry-forward.d.ts.map +1 -1
  298. package/dist/services/static-carry-forward.js +275 -1
  299. package/dist/services/static-carry-forward.js.map +1 -1
  300. package/dist/shared/dto/nodes.d.ts +2 -2
  301. package/dist/shared/dto/services.d.ts +27 -0
  302. package/dist/shared/dto/services.d.ts.map +1 -1
  303. package/dist/shared/local-infra-host.d.ts +2 -2
  304. package/dist/shared/local-infra-host.js +2 -2
  305. package/dist/shared/release-reading.d.ts +1 -1
  306. package/dist/shared/release-reading.js +1 -1
  307. package/package.json +16 -12
  308. package/webapp/dist/BUILD.json +2 -2
  309. package/webapp/dist/assets/FormControlLabel-BbSxpQwN.js +1 -0
  310. package/webapp/dist/assets/{Grid-BZ7xhoHQ.js → Grid-DizFZYue.js} +1 -1
  311. package/webapp/dist/assets/{Switch-DGSAxQPM.js → Switch-Bfiqzx8l.js} +1 -1
  312. package/webapp/dist/assets/alerts-DH_RVRS3.js +1 -0
  313. package/webapp/dist/assets/apps-B96355sz.js +1 -0
  314. package/webapp/dist/assets/audit-CYGtbi4k.js +1 -0
  315. package/webapp/dist/assets/client-BmqFExWT.js +1 -0
  316. package/webapp/dist/assets/containers-B_TpThln.js +2 -0
  317. package/webapp/dist/assets/dashboard-DHf2_65N.js +1 -0
  318. package/webapp/dist/assets/dashboard-builder-CWY2pjeG.js +1 -0
  319. package/webapp/dist/assets/{deploy-release-dialog-D6C-XcKY.js → deploy-release-dialog-Dp-zpSAd.js} +1 -1
  320. package/webapp/dist/assets/deployments-tJI6O3fK.js +1 -0
  321. package/webapp/dist/assets/detail-B2zP1Hto.js +8 -0
  322. package/webapp/dist/assets/detail-CoIrwmsy.js +1 -0
  323. package/webapp/dist/assets/detail-DWaGaOtL.js +2 -0
  324. package/webapp/dist/assets/index-Dvo0iprx.css +1 -0
  325. package/webapp/dist/assets/index-vMnY_4jR.js +412 -0
  326. package/webapp/dist/assets/logs-DTRjOfX8.js +12 -0
  327. package/webapp/dist/assets/maplibre-gl-DowHoZAx.js +814 -0
  328. package/webapp/dist/assets/{metrics-CQgjz2Lz.js → metrics-UCajtdox.js} +2 -2
  329. package/webapp/dist/assets/nodes-DuTVU0f6.js +7 -0
  330. package/webapp/dist/assets/pipelines-C8BeDcAl.js +4 -0
  331. package/webapp/dist/assets/projects-Dp_zFfLY.js +1 -0
  332. package/webapp/dist/assets/react-DlmbjZJV.js +1 -0
  333. package/webapp/dist/assets/react-apexcharts.esm-C8pn45ml.js +97 -0
  334. package/webapp/dist/assets/{release-bits-Dj4EOhhb.js → release-bits-BzTKz5fM.js} +1 -1
  335. package/webapp/dist/assets/release-build-panel-DcW9YcXQ.js +1 -0
  336. package/webapp/dist/assets/releases-B4hcr1bE.js +2 -0
  337. package/webapp/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  338. package/webapp/dist/assets/settings-DIteZTbe.js +1 -0
  339. package/webapp/dist/assets/sign-in-D4kMBOHp.js +1 -0
  340. package/webapp/dist/assets/stacks-Brnf-EB7.js +1 -0
  341. package/webapp/dist/assets/{system-info-BtE3dgfw.js → system-info-CFDNVKkU.js} +1 -1
  342. package/webapp/dist/assets/topology-7WeTUsDN.js +12 -0
  343. package/webapp/dist/assets/traces-9c3gwCN-.js +1 -0
  344. package/webapp/dist/assets/{use-stack-context-CZUgPq88.js → use-stack-context-CnA5FTHu.js} +1 -1
  345. package/webapp/dist/index.html +6 -6
  346. package/webapp/dist/assets/FormControlLabel-BrH2diyl.js +0 -1
  347. package/webapp/dist/assets/alerts-sXqHJbsa.js +0 -1
  348. package/webapp/dist/assets/apps-B_Ah8Flh.js +0 -1
  349. package/webapp/dist/assets/audit-YXihwyui.js +0 -1
  350. package/webapp/dist/assets/client-CGbBvy9k.js +0 -1
  351. package/webapp/dist/assets/containers-Di4NOTLf.js +0 -2
  352. package/webapp/dist/assets/dashboard-Cfuf95N3.js +0 -1
  353. package/webapp/dist/assets/dashboard-builder-CowaYb-M.js +0 -1
  354. package/webapp/dist/assets/deployments-ChTq5kCw.js +0 -1
  355. package/webapp/dist/assets/detail-BsGWv7Dj.js +0 -1
  356. package/webapp/dist/assets/detail-CyVf_cw5.js +0 -2
  357. package/webapp/dist/assets/detail-D027j6aO.js +0 -8
  358. package/webapp/dist/assets/index-B8AHIPc-.css +0 -1
  359. package/webapp/dist/assets/index-DiZbrwxT.js +0 -414
  360. package/webapp/dist/assets/logs-L2b8Oqmo.js +0 -12
  361. package/webapp/dist/assets/maplibre-gl-MlmG2kbn.js +0 -801
  362. package/webapp/dist/assets/nodes-Nwia2Ty6.js +0 -7
  363. package/webapp/dist/assets/pipelines-DCu_rXOr.js +0 -4
  364. package/webapp/dist/assets/projects-Bb4aV76h.js +0 -1
  365. package/webapp/dist/assets/react-CwJFpaho.js +0 -1
  366. package/webapp/dist/assets/react-apexcharts.esm-Dy0Fez42.js +0 -1956
  367. package/webapp/dist/assets/release-build-panel-D6OCVlhT.js +0 -1
  368. package/webapp/dist/assets/releases-CnAt3yO6.js +0 -2
  369. package/webapp/dist/assets/rolldown-runtime-hePW80VL.js +0 -1
  370. package/webapp/dist/assets/settings-DU-mjiwb.js +0 -1
  371. package/webapp/dist/assets/sign-in-Bcvjrr4C.js +0 -1
  372. package/webapp/dist/assets/stacks-B-e8p50I.js +0 -1
  373. package/webapp/dist/assets/topology-Cwch-uF1.js +0 -12
  374. package/webapp/dist/assets/traces-BbShR-4P.js +0 -1
@@ -0,0 +1,19 @@
1
+ /** Adapt declared methods and pathnames to Titan's ordered, null-fallthrough handlers. */
2
+ export function compileCustomRoutes(routes) {
3
+ return routes.map((route) => {
4
+ // Titan accepts fall-through handlers, while defineSystem declares routes.
5
+ // Preserve the method and pathname boundary when adapting between them.
6
+ const pattern = new RegExp('^' +
7
+ route.pattern
8
+ .split('*')
9
+ .map((part) => part.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
10
+ .join('.*') +
11
+ '$');
12
+ return async (request) => {
13
+ if (request.method !== route.method || !pattern.test(new URL(request.url).pathname))
14
+ return null;
15
+ return route.handler(request);
16
+ };
17
+ });
18
+ }
19
+ //# sourceMappingURL=http-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-routes.js","sourceRoot":"","sources":["../../src/orchestrator/http-routes.ts"],"names":[],"mappings":"AAEA,0FAA0F;AAC1F,MAAM,UAAU,mBAAmB,CACjC,MAAkD;IAElD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,GAAG;YACD,KAAK,CAAC,OAAO;iBACV,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;iBAC1D,IAAI,CAAC,IAAI,CAAC;YACb,GAAG,CACN,CAAC;QACF,OAAO,KAAK,EAAE,OAAgB,EAAE,EAAE;YAChC,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC;YACjG,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -108,6 +108,19 @@ export declare class OrchestratorService extends EventEmitter {
108
108
  devMode: boolean;
109
109
  /** esbuild bundling pipeline — pre-bundles TS entry points for child processes */
110
110
  private buildService;
111
+ private watchDisabled;
112
+ private watchSelection;
113
+ private readonly bootstrapSources;
114
+ private allowsWatch;
115
+ /** One policy for both fs.watch and esbuild; disabling does not stop apps. */
116
+ setWatchMode(enabled: boolean, apps?: string[]): Promise<void>;
117
+ getBuildWatchedApps(): Array<{
118
+ name: string;
119
+ directory: string;
120
+ }>;
121
+ private syncBootstrapWatch;
122
+ /** Automatic triggers remain revocable while queued; manual restart is independent. */
123
+ restartAfterChange(name: string): Promise<AppHandle | undefined>;
111
124
  /** Cached build results per app name */
112
125
  private readonly buildResults;
113
126
  /**
@@ -297,7 +310,7 @@ export declare class OrchestratorService extends EventEmitter {
297
310
  * `topologyPools` — so `supervisor.stop()` never reached them, and nothing
298
311
  * in the orchestrator destroyed a pool: only the daemon's own shutdown did.
299
312
  * Every restart of an app with `instances > 1` left the previous workers
300
- * running. On daos/test (2026-09-25): priceverse's `ohlcv-aggregator` and
313
+ * running. On sample/test (2026-09-25): quotes's `ohlcv-aggregator` and
301
314
  * storage's `transform` in three generations at once.
302
315
  *
303
316
  * The pools go even when the supervisor's stop throws: a stop that failed
@@ -321,7 +334,7 @@ export declare class OrchestratorService extends EventEmitter {
321
334
  * `restartApp` starts from this. `false` when nothing by that name runs
322
335
  * here. See `AppHandle.redefine`.
323
336
  */
324
- redefineApp(name: string, entry: IEcosystemAppEntry): boolean;
337
+ redefineApp(name: string, entry: IEcosystemAppEntry): Promise<boolean>;
325
338
  /**
326
339
  * Restart an app, coalescing concurrent triggers.
327
340
  *
@@ -463,7 +476,7 @@ export declare class OrchestratorService extends EventEmitter {
463
476
  } | null>;
464
477
  /**
465
478
  * `name` is resolved like every other per-app question (`main` finds
466
- * `daos/dev/main`); it was compared verbatim, so `omnitron metrics main`
479
+ * `sample/dev/main`); it was compared verbatim, so `omnitron metrics main`
467
480
  * printed «(no data)». An unknown name answers `{}`, and the caller says so.
468
481
  */
469
482
  getMetrics(name?: string): Promise<Record<string, IProcessMetrics | null>>;
@@ -472,7 +485,7 @@ export declare class OrchestratorService extends EventEmitter {
472
485
  * children and its worker pools — and combined (`app-health.ts`).
473
486
  *
474
487
  * `name` is resolved like every other per-app question: `main` finds
475
- * `daos/dev/main`. It was compared verbatim, so `omnitron health main`
488
+ * `sample/dev/main`. It was compared verbatim, so `omnitron health main`
476
489
  * matched nothing and the answer was empty. An unknown name answers `{}`,
477
490
  * and the caller says so.
478
491
  */
@@ -513,6 +526,7 @@ export declare class OrchestratorService extends EventEmitter {
513
526
  * Otherwise, creates a single bootstrap-process as before.
514
527
  */
515
528
  private launchBootstrapMode;
529
+ private prepareBootstrapBuild;
516
530
  /**
517
531
  * Launch app with process topology — multiple children managed by Omnitron.
518
532
  *
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.service.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.service.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.service.ts"],"names":[],"mappings":"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"}
@@ -229,6 +229,56 @@ export class OrchestratorService extends EventEmitter {
229
229
  devMode = false;
230
230
  /** esbuild bundling pipeline — pre-bundles TS entry points for child processes */
231
231
  buildService = null;
232
+ watchDisabled = false;
233
+ watchSelection = null;
234
+ bootstrapSources = new Map();
235
+ allowsWatch(entry) {
236
+ return this.devMode && !this.watchDisabled && entry.watch !== false &&
237
+ (!this.watchSelection || this.watchSelection.has(entry.name));
238
+ }
239
+ /** One policy for both fs.watch and esbuild; disabling does not stop apps. */
240
+ async setWatchMode(enabled, apps) {
241
+ this.watchDisabled = !enabled;
242
+ this.watchSelection = apps ? new Set(apps.map((name) => this.resolveAppName(name) ?? name)) : null;
243
+ for (const [name, state] of this.restartCoalescer) {
244
+ if (!enabled || !this.handles.get(name) || !this.allowsWatch(this.handles.get(name).entry))
245
+ state.watchSerial = 0;
246
+ }
247
+ await Promise.all([...this.bootstrapSources.keys()].map((name) => this.syncBootstrapWatch(name)));
248
+ }
249
+ getBuildWatchedApps() {
250
+ return [...this.bootstrapSources].filter(([name]) => this.buildService?.isWatching(name))
251
+ .map(([name, source]) => ({ name, directory: path.dirname(source.path) }));
252
+ }
253
+ async syncBootstrapWatch(name) {
254
+ const source = this.bootstrapSources.get(name);
255
+ const entry = this.handles.get(name)?.entry;
256
+ if (!this.buildService || !source)
257
+ return;
258
+ if (!entry || !this.allowsWatch(entry) || !entry.bootstrap ||
259
+ path.resolve(entry.cwd ?? this.cwd, entry.bootstrap) !== source.path) {
260
+ const state = this.restartCoalescer.get(name);
261
+ if (state)
262
+ state.watchSerial = 0;
263
+ await this.buildService.unwatchApp(name);
264
+ return;
265
+ }
266
+ if (this.buildService.isWatching(name))
267
+ return;
268
+ await this.buildService.watchApp(name, source.path, source.definition, () => {
269
+ void this.restartAfterChange(name).catch((error) => {
270
+ this.logger.error({ app: name, error: error.message }, 'Restart after source change failed');
271
+ });
272
+ });
273
+ }
274
+ /** Automatic triggers remain revocable while queued; manual restart is independent. */
275
+ async restartAfterChange(name) {
276
+ const canonical = this.resolveAppName(name) ?? name;
277
+ const handle = this.handles.get(canonical);
278
+ if (!handle || !this.allowsWatch(handle.entry))
279
+ return handle;
280
+ return this.restartAppCoalesced(canonical, true, 'watch');
281
+ }
232
282
  /** Cached build results per app name */
233
283
  buildResults = new Map();
234
284
  /**
@@ -686,7 +736,8 @@ export class OrchestratorService extends EventEmitter {
686
736
  // - exact key already exists, online → return it (idempotent)
687
737
  // - exact key already exists, not online → fall through and re-launch
688
738
  // under the same key
689
- // - DIFFERENT key with the same effective short name:
739
+ // - different fully qualified keys are distinct apps and coexist
740
+ // - bare/qualified keys with the same effective short name:
690
741
  // - new is MORE specific (namespaced) and existing is bare → stop
691
742
  // the bare one and re-launch under the namespaced key. Without
692
743
  // this, a boot-race where bare-name auto-start beats the
@@ -696,13 +747,19 @@ export class OrchestratorService extends EventEmitter {
696
747
  // restart by canonical name, not register an alias.
697
748
  const effective = effectiveAppName(entry.name);
698
749
  const newIsNamespaced = entry.name.includes('/');
750
+ if (!newIsNamespaced && [...this.handles.keys()].filter(key => key.includes('/') && effectiveAppName(key) === effective).length > 1) {
751
+ throw new Error(`Ambiguous app name '${entry.name}'; use its full project/stack/app identity`);
752
+ }
699
753
  for (const [key, h] of this.handles) {
700
754
  if (key === entry.name)
701
755
  continue;
702
756
  if (effectiveAppName(key) !== effective)
703
757
  continue;
704
758
  const existingIsNamespaced = key.includes('/');
705
- // Same effective app under a different key.
759
+ // Qualified identities are separate deployments, even when their basename matches.
760
+ if (newIsNamespaced && existingIsNamespaced)
761
+ continue;
762
+ // A bare alias may still refer to the one qualified deployment.
706
763
  if (h.status === 'online') {
707
764
  if (newIsNamespaced && !existingIsNamespaced) {
708
765
  this.logger.info({ stale: key, replacing_with: entry.name, effective }, 'Stopping bare-name handle to re-register under namespaced key');
@@ -746,7 +803,7 @@ export class OrchestratorService extends EventEmitter {
746
803
  // crashing leaves its siblings — the server among them — up; and its pools
747
804
  // were never any supervisor's to stop. Stopped before the new handle
748
805
  // starts, or the new one finds its own predecessor on its port: on
749
- // daos/test (2026-09-25) paysys's crash restarts failed five times on
806
+ // sample/test (2026-09-25) payments's crash restarts failed five times on
750
807
  // `EADDRINUSE :3004`, «held by … a child this daemon still accounts for».
751
808
  if (existing) {
752
809
  await this.releaseExposedServices(existing);
@@ -827,7 +884,7 @@ export class OrchestratorService extends EventEmitter {
827
884
  * `topologyPools` — so `supervisor.stop()` never reached them, and nothing
828
885
  * in the orchestrator destroyed a pool: only the daemon's own shutdown did.
829
886
  * Every restart of an app with `instances > 1` left the previous workers
830
- * running. On daos/test (2026-09-25): priceverse's `ohlcv-aggregator` and
887
+ * running. On sample/test (2026-09-25): quotes's `ohlcv-aggregator` and
831
888
  * storage's `transform` in three generations at once.
832
889
  *
833
890
  * The pools go even when the supervisor's stop throws: a stop that failed
@@ -892,8 +949,6 @@ export class OrchestratorService extends EventEmitter {
892
949
  });
893
950
  }
894
951
  async stopAll(force = false) {
895
- if (!this.config)
896
- return 0;
897
952
  if (this.metricsTimer) {
898
953
  clearInterval(this.metricsTimer);
899
954
  this.metricsTimer = null;
@@ -906,7 +961,34 @@ export class OrchestratorService extends EventEmitter {
906
961
  let count = 0;
907
962
  // When force=true (daemon shutdown), use short timeout per app (3s SIGTERM, then SIGKILL)
908
963
  const perAppTimeout = force ? 3_000 : 10_000;
909
- for (const batch of resolveShutdownOrder(this.config.apps)) {
964
+ // Registered projects need not belong to the daemon's root ecosystem.
965
+ // Ownership is defined by handles, not by whichever config booted first.
966
+ // Drain admitted starts before taking the shutdown graph snapshot.
967
+ await Promise.allSettled([...this.startingApps.values()]);
968
+ const entries = [...this.handles.values()].map((handle) => handle.entry);
969
+ const names = new Set(entries.map((entry) => entry.name));
970
+ const graph = entries.map((entry) => {
971
+ const scope = entry.name.slice(0, entry.name.lastIndexOf('/') + 1);
972
+ return {
973
+ ...entry,
974
+ dependsOn: (entry.dependsOn ?? []).flatMap((dependency) => {
975
+ const name = !dependency.includes('/') && names.has(scope + dependency)
976
+ ? scope + dependency : dependency;
977
+ // A dependency never started here has no owned process to stop.
978
+ return names.has(name) ? [name] : [];
979
+ }),
980
+ };
981
+ });
982
+ let batches;
983
+ try {
984
+ batches = resolveShutdownOrder(graph);
985
+ }
986
+ catch (error) {
987
+ // Invalid reconfiguration must not turn shutdown into leaked children.
988
+ this.logger.error({ error: error.message }, 'Invalid shutdown graph; stopping every owned app');
989
+ batches = [entries];
990
+ }
991
+ for (const batch of batches) {
910
992
  await Promise.all(batch.map(async (entry) => {
911
993
  try {
912
994
  await this.stopApp(entry.name, force, perAppTimeout);
@@ -932,6 +1014,7 @@ export class OrchestratorService extends EventEmitter {
932
1014
  this.buildService = null;
933
1015
  }
934
1016
  this.buildResults.clear();
1017
+ this.bootstrapSources.clear();
935
1018
  return count;
936
1019
  }
937
1020
  /**
@@ -940,11 +1023,17 @@ export class OrchestratorService extends EventEmitter {
940
1023
  * `restartApp` starts from this. `false` when nothing by that name runs
941
1024
  * here. See `AppHandle.redefine`.
942
1025
  */
943
- redefineApp(name, entry) {
1026
+ async redefineApp(name, entry) {
944
1027
  const handle = this.handles.get(this.resolveAppName(name) ?? name);
945
1028
  if (!handle)
946
1029
  return false;
947
1030
  handle.redefine(entry);
1031
+ if (!this.allowsWatch(entry)) {
1032
+ const state = this.restartCoalescer.get(handle.name);
1033
+ if (state)
1034
+ state.watchSerial = 0;
1035
+ }
1036
+ await this.syncBootstrapWatch(handle.name);
948
1037
  return true;
949
1038
  }
950
1039
  /**
@@ -980,7 +1069,7 @@ export class OrchestratorService extends EventEmitter {
980
1069
  * triggers, just continuations — they must not bump or the trailing
981
1070
  * coalesced restart would re-fire forever.
982
1071
  */
983
- async restartAppCoalesced(name, fromExternal) {
1072
+ async restartAppCoalesced(name, fromExternal, cause = 'manual') {
984
1073
  const canonical = this.resolveAppName(name) ?? name;
985
1074
  const handle = this.handles.get(canonical);
986
1075
  if (!handle) {
@@ -1037,9 +1126,19 @@ export class OrchestratorService extends EventEmitter {
1037
1126
  }
1038
1127
  name = canonical;
1039
1128
  const state = this.getCoalescerState(name);
1040
- if (fromExternal)
1129
+ if (fromExternal) {
1041
1130
  state.triggerSerial += 1;
1042
- const observedSerial = state.triggerSerial;
1131
+ if (cause === 'watch')
1132
+ state.watchSerial = state.triggerSerial;
1133
+ else
1134
+ state.manualSerial = state.triggerSerial;
1135
+ }
1136
+ if (!this.allowsWatch(handle.entry) || ['errored', 'crashed', 'stopped', 'stopping'].includes(handle.status)) {
1137
+ state.watchSerial = 0;
1138
+ }
1139
+ const observedSerial = Math.max(state.manualSerial, state.watchSerial);
1140
+ if (observedSerial <= state.firedSerial)
1141
+ return handle;
1043
1142
  // Cooldown: the app reported online recently. Wait it out, then
1044
1143
  // proceed as a non-external continuation (we already counted this
1045
1144
  // trigger when we first arrived).
@@ -1068,7 +1167,7 @@ export class OrchestratorService extends EventEmitter {
1068
1167
  }
1069
1168
  // Take the slot. Capture which serial this run is consuming —
1070
1169
  // anything bumped after this is the next run's problem.
1071
- const consumedSerial = state.triggerSerial;
1170
+ const consumedSerial = observedSerial;
1072
1171
  const promise = this.restartAppNow(name);
1073
1172
  state.inFlight = promise;
1074
1173
  try {
@@ -1084,7 +1183,7 @@ export class OrchestratorService extends EventEmitter {
1084
1183
  // trigger arrived between when we claimed the slot and now.
1085
1184
  // Two coalescer arms colliding can no longer cause this branch
1086
1185
  // to fire because they don't bump triggerSerial.
1087
- if (state.triggerSerial > consumedSerial) {
1186
+ if (Math.max(state.manualSerial, state.watchSerial) > consumedSerial) {
1088
1187
  this.restartAppCoalesced(name, /* fromExternal */ false).catch((err) => {
1089
1188
  this.logger.error({ app: name, error: err.message }, 'Trailing coalesced restart failed');
1090
1189
  });
@@ -1140,7 +1239,7 @@ export class OrchestratorService extends EventEmitter {
1140
1239
  getCoalescerState(name) {
1141
1240
  let state = this.restartCoalescer.get(name);
1142
1241
  if (!state) {
1143
- state = { inFlight: null, triggerSerial: 0, firedSerial: 0, cooldownUntil: 0 };
1242
+ state = { inFlight: null, triggerSerial: 0, firedSerial: 0, manualSerial: 0, watchSerial: 0, cooldownUntil: 0 };
1144
1243
  this.restartCoalescer.set(name, state);
1145
1244
  }
1146
1245
  return state;
@@ -1179,7 +1278,7 @@ export class OrchestratorService extends EventEmitter {
1179
1278
  // is the one with that address. Falling through to the short-name match
1180
1279
  // answered a question about one deployment with another's data:
1181
1280
  //
1182
- // omnitron logs daos/deployed/main → daos/dev/main
1281
+ // omnitron logs sample/deployed/main → sample/dev/main
1183
1282
  //
1184
1283
  // — the node's app asked for, this laptop's app printed, with nothing
1185
1284
  // said. `startApp` already refuses this for the same reason ("a
@@ -1379,7 +1478,7 @@ export class OrchestratorService extends EventEmitter {
1379
1478
  }
1380
1479
  /**
1381
1480
  * `name` is resolved like every other per-app question (`main` finds
1382
- * `daos/dev/main`); it was compared verbatim, so `omnitron metrics main`
1481
+ * `sample/dev/main`); it was compared verbatim, so `omnitron metrics main`
1383
1482
  * printed «(no data)». An unknown name answers `{}`, and the caller says so.
1384
1483
  */
1385
1484
  async getMetrics(name) {
@@ -1409,7 +1508,7 @@ export class OrchestratorService extends EventEmitter {
1409
1508
  * children and its worker pools — and combined (`app-health.ts`).
1410
1509
  *
1411
1510
  * `name` is resolved like every other per-app question: `main` finds
1412
- * `daos/dev/main`. It was compared verbatim, so `omnitron health main`
1511
+ * `sample/dev/main`. It was compared verbatim, so `omnitron health main`
1413
1512
  * matched nothing and the answer was empty. An unknown name answers `{}`,
1414
1513
  * and the caller says so.
1415
1514
  */
@@ -1569,7 +1668,7 @@ export class OrchestratorService extends EventEmitter {
1569
1668
  // Refused, with the reason. This fell back to «single-process mode» at
1570
1669
  // warn — but every definition declares its topology (IAppDefinition:
1571
1670
  // `processes` is required), so the fallback started the app in a shape
1572
- // it was never written for. Measured 2026-09-23 on the master: paysys
1671
+ // it was never written for. Measured 2026-09-23 on the master: payments
1573
1672
  // and messaging, whose definitions failed to load («Parameter
1574
1673
  // decorators only work when experimental decorators are enabled»), were
1575
1674
  // started that way and died on «Dependency 'AuthModule:JWTService' not
@@ -1631,96 +1730,8 @@ export class OrchestratorService extends EventEmitter {
1631
1730
  }
1632
1731
  // Build all entry points via esbuild (dev mode bundles from source .ts)
1633
1732
  //
1634
- // On a *restart* (as opposed to a first start), buildResults already
1635
- // has a fresh entry — esbuild's watcher just produced the bundle
1636
- // that triggered us. Reusing it skips a redundant cold rebuild
1637
- // (which was costing ~500ms per restart and racing against the
1638
- // watcher's own incremental output). The watch context is also
1639
- // preserved (we never unwatched), so we don't re-arm it either.
1640
- if (definition && this.devMode) {
1641
- try {
1642
- if (!this.buildService) {
1643
- this.buildService = new BuildService(/* isDev */ true, {
1644
- onEsbuildReset: (info) => this.metricsBridge?.recordResilientHandleReset(info),
1645
- onBuildResult: ({ app, kind, durationMs, ok }) => this.metricsBridge?.recordEsbuildBuild(app, kind, durationMs, ok),
1646
- });
1647
- }
1648
- const existing = this.buildResults.get(entry.name);
1649
- const existingWatch = this.buildService.isWatching?.(entry.name);
1650
- // Bundle on-disk presence check. A restart can race against
1651
- // the user (or a script) removing `.omnitron-build/` between
1652
- // builds — without this stat the orchestrator hands the
1653
- // worker a path that no longer exists and the child dies
1654
- // with `ERR_MODULE_NOT_FOUND` before the supervisor can
1655
- // recover. Cheap stat, big DX win.
1656
- const bundlePresent = existing
1657
- ? fs.existsSync(existing.bootstrapPath)
1658
- : false;
1659
- if (existing && existingWatch && bundlePresent) {
1660
- // Restart path — keep the already-built bundle and live watch.
1661
- this.logger.debug({ app: entry.name, modules: existing.modulePaths.size }, 'Reusing existing esbuild bundle + watch (restart path)');
1662
- }
1663
- else {
1664
- if (existing && existingWatch && !bundlePresent) {
1665
- // Bundle was deleted out from under us. Clear the watch
1666
- // and the cached BuildResult so the next call rebuilds
1667
- // from cold and re-arms the watcher cleanly.
1668
- this.logger.warn({ app: entry.name, bootstrapPath: existing.bootstrapPath }, 'Cached bundle missing on disk — forcing rebuild');
1669
- try {
1670
- await this.buildService.unwatchApp?.(entry.name);
1671
- }
1672
- catch (err) {
1673
- this.logger.debug({ err, app: entry.name }, 'unwatchApp failed (non-fatal)');
1674
- }
1675
- this.buildResults.delete(entry.name);
1676
- }
1677
- // First-start path — build everything from cold and arm the watcher.
1678
- const buildResult = await this.buildService.buildApp(entry.name, bootstrapAbsPath, definition);
1679
- this.buildResults.set(entry.name, buildResult);
1680
- this.logger.info({ app: entry.name, modules: buildResult.modulePaths.size }, 'Built entry points via esbuild');
1681
- // Start esbuild watch for incremental rebuilds on source changes.
1682
- // On rebuild → fire a restart trigger; the coalescer takes it
1683
- // from there.
1684
- await this.buildService.watchApp(entry.name, bootstrapAbsPath, definition, () => {
1685
- // Gate: skip if the app is in a non-running state — repeated
1686
- // restarts of an escalated/errored process just churn forever
1687
- // without forward progress (Fix #248).
1688
- // Skip restart when the app is in a terminal non-running
1689
- // state. Includes 'crashed' (supervisor escalated after
1690
- // exceeding its restart budget) and 'errored' (start
1691
- // failed). 'stopped' means operator explicitly stopped it.
1692
- // In all three cases, restarting just churns a known-broken
1693
- // process; the operator must fix the underlying issue and
1694
- // call `omnitron start <app>` to clear the state.
1695
- const status = this.getAppStatus(entry.name);
1696
- if (status === 'errored' || status === 'crashed' || status === 'stopped') {
1697
- this.logger.warn({ app: entry.name, status }, 'esbuild rebuild detected but app is not running — skipping restart');
1698
- return;
1699
- }
1700
- this.logger.info({ app: entry.name }, 'esbuild rebuild detected — restarting');
1701
- this.metricsBridge?.recordEsbuildBuild(entry.name, 'rebuild', 0, true);
1702
- this.restartApp(entry.name).catch((err) => {
1703
- this.logger.error({ app: entry.name, error: err.message }, 'Restart after esbuild rebuild failed');
1704
- });
1705
- });
1706
- }
1707
- }
1708
- catch (err) {
1709
- // The "fall back to tsx" wording was misleading — the orchestrator
1710
- // does not inject a tsx loader into spawned children, so without
1711
- // a build the bootstrap-process will try to `import` the source
1712
- // .ts file (referenced as `./app.module.js` in the topology) and
1713
- // fail with a cryptic "Cannot find module" downstream. Surface
1714
- // the build error directly so the operator sees the actual
1715
- // problem on `omnitron start/restart`.
1716
- // esbuild's error carries an `errors[]` with file, line and column.
1717
- // `.message` is the summary; the locations are what an operator needs
1718
- // to fix the build, and they exist only on the original.
1719
- this.logger.error({ app: entry.name, error: err }, 'esbuild build failed — app cannot start without bundled output');
1720
- throw new Error(`Cannot launch '${entry.name}' in dev mode: esbuild build failed (${err.message}). ` +
1721
- `Fix the build error and retry, or run with bundled output present in apps/${entry.name}/.omnitron-build/.`, { cause: err });
1722
- }
1723
- }
1733
+ if (definition)
1734
+ await this.prepareBootstrapBuild(entry, bootstrapAbsPath, definition);
1724
1735
  const buildResult = this.buildResults.get(entry.name);
1725
1736
  // Use bundled bootstrap path for topology import when available
1726
1737
  const effectiveBootstrapPath = buildResult?.bootstrapPath ?? bootstrapAbsPath;
@@ -1731,6 +1742,36 @@ export class OrchestratorService extends EventEmitter {
1731
1742
  await this.launchSingleProcess(entry, handle, config, effectiveBootstrapPath, buildResult);
1732
1743
  }
1733
1744
  }
1745
+ async prepareBootstrapBuild(entry, bootstrapAbsPath, definition) {
1746
+ const sourceTopology = /\.(?:[cm]?ts|tsx)$/.test(bootstrapAbsPath) ||
1747
+ definition.processes.some((process) => /\.(?:[cm]?ts|tsx)$/.test(process.module));
1748
+ if (!this.devMode && !sourceTopology)
1749
+ return;
1750
+ try {
1751
+ this.buildService ??= new BuildService(this.devMode, {
1752
+ onEsbuildReset: (info) => this.metricsBridge?.recordResilientHandleReset(info),
1753
+ onBuildResult: ({ app, kind, durationMs, ok }) => this.metricsBridge?.recordEsbuildBuild(app, kind, durationMs, ok),
1754
+ });
1755
+ const existing = this.buildResults.get(entry.name);
1756
+ const current = this.handles.get(entry.name)?.entry ?? entry;
1757
+ const reusable = existing && this.allowsWatch(current) && this.buildService.isWatching(entry.name) &&
1758
+ this.buildService.canReuseBuild(existing, bootstrapAbsPath, definition);
1759
+ if (!reusable) {
1760
+ // A manual restart with watch:false deliberately compiles the current
1761
+ // sources. It must not reuse an artifact that stopped being maintained.
1762
+ await this.buildService.unwatchApp(entry.name);
1763
+ this.buildResults.delete(entry.name);
1764
+ this.buildResults.set(entry.name, await this.buildService.buildApp(entry.name, bootstrapAbsPath, definition));
1765
+ this.logger.info({ app: entry.name }, 'Built entry points via esbuild');
1766
+ }
1767
+ this.bootstrapSources.set(entry.name, { path: bootstrapAbsPath, definition });
1768
+ await this.syncBootstrapWatch(entry.name);
1769
+ }
1770
+ catch (error) {
1771
+ this.logger.error({ app: entry.name, error }, 'esbuild build failed — app cannot start without bundled output');
1772
+ throw new Error(`Cannot launch '${entry.name}': esbuild build failed (${error.message}). Fix the build error and retry.`, { cause: error });
1773
+ }
1774
+ }
1734
1775
  /**
1735
1776
  * Launch app with process topology — multiple children managed by Omnitron.
1736
1777
  *
@@ -1969,7 +2010,7 @@ export class OrchestratorService extends EventEmitter {
1969
2010
  // This was a pool-only feature, ignored in silence everywhere else: a
1970
2011
  // process declaring `expose: true` got no registration and no warning,
1971
2012
  // and every consumer naming it in `topology.access` started without a
1972
- // proxy. Measured on priceverse, whose `collector` is a single process
2013
+ // proxy. Measured on quotes, whose `collector` is a single process
1973
2014
  // holding the only objects that know whether the exchange WebSockets are
1974
2015
  // up — the server process could not ask, and answered `ready: down —
1975
2016
  // exchanges unavailable` while three were connected.
@@ -1977,7 +2018,7 @@ export class OrchestratorService extends EventEmitter {
1977
2018
  // After `supervisor.start()` because there is no child to ask before it.
1978
2019
  // A consumer among these children may therefore start before the service
1979
2020
  // is registered; consumers re-resolve their proxy on use for exactly that
1980
- // reason (see priceverse's `OhlcvSchedulerService`).
2021
+ // reason (see quotes's `OhlcvSchedulerService`).
1981
2022
  await this.exposeChildTopologyServices(entry, supervisor, serviceRouter, singleEntries);
1982
2023
  }
1983
2024
  /**