@wasmsoft/fantastic 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/README.md +65 -0
  2. package/bin/run.js +27 -0
  3. package/bin/supervisor.js +65 -0
  4. package/dist/acquire/central-url.d.ts +9 -0
  5. package/dist/acquire/central-url.d.ts.map +1 -0
  6. package/dist/acquire/central-url.js +74 -0
  7. package/dist/acquire/central-url.js.map +1 -0
  8. package/dist/acquire/code.d.ts +21 -0
  9. package/dist/acquire/code.d.ts.map +1 -0
  10. package/dist/acquire/code.js +66 -0
  11. package/dist/acquire/code.js.map +1 -0
  12. package/dist/acquire/compatibility.d.ts +18 -0
  13. package/dist/acquire/compatibility.d.ts.map +1 -0
  14. package/dist/acquire/compatibility.js +36 -0
  15. package/dist/acquire/compatibility.js.map +1 -0
  16. package/dist/acquire/fetch.d.ts +26 -0
  17. package/dist/acquire/fetch.d.ts.map +1 -0
  18. package/dist/acquire/fetch.js +72 -0
  19. package/dist/acquire/fetch.js.map +1 -0
  20. package/dist/acquire/latest.d.ts +24 -0
  21. package/dist/acquire/latest.d.ts.map +1 -0
  22. package/dist/acquire/latest.js +95 -0
  23. package/dist/acquire/latest.js.map +1 -0
  24. package/dist/backup/archive.d.ts +26 -0
  25. package/dist/backup/archive.d.ts.map +1 -0
  26. package/dist/backup/archive.js +123 -0
  27. package/dist/backup/archive.js.map +1 -0
  28. package/dist/backup/restore.d.ts +46 -0
  29. package/dist/backup/restore.d.ts.map +1 -0
  30. package/dist/backup/restore.js +164 -0
  31. package/dist/backup/restore.js.map +1 -0
  32. package/dist/base-command.d.ts +54 -0
  33. package/dist/base-command.d.ts.map +1 -0
  34. package/dist/base-command.js +120 -0
  35. package/dist/base-command.js.map +1 -0
  36. package/dist/bundle-format/index.d.ts +6 -0
  37. package/dist/bundle-format/index.d.ts.map +1 -0
  38. package/dist/bundle-format/index.js +36 -0
  39. package/dist/bundle-format/index.js.map +1 -0
  40. package/dist/commands/activate.d.ts +15 -0
  41. package/dist/commands/activate.d.ts.map +1 -0
  42. package/dist/commands/activate.js +139 -0
  43. package/dist/commands/activate.js.map +1 -0
  44. package/dist/commands/backup.d.ts +11 -0
  45. package/dist/commands/backup.d.ts.map +1 -0
  46. package/dist/commands/backup.js +75 -0
  47. package/dist/commands/backup.js.map +1 -0
  48. package/dist/commands/config/get.d.ts +10 -0
  49. package/dist/commands/config/get.d.ts.map +1 -0
  50. package/dist/commands/config/get.js +33 -0
  51. package/dist/commands/config/get.js.map +1 -0
  52. package/dist/commands/config/list.d.ts +7 -0
  53. package/dist/commands/config/list.d.ts.map +1 -0
  54. package/dist/commands/config/list.js +43 -0
  55. package/dist/commands/config/list.js.map +1 -0
  56. package/dist/commands/config/set.d.ts +11 -0
  57. package/dist/commands/config/set.d.ts.map +1 -0
  58. package/dist/commands/config/set.js +56 -0
  59. package/dist/commands/config/set.js.map +1 -0
  60. package/dist/commands/db/migrate.d.ts +10 -0
  61. package/dist/commands/db/migrate.d.ts.map +1 -0
  62. package/dist/commands/db/migrate.js +67 -0
  63. package/dist/commands/db/migrate.js.map +1 -0
  64. package/dist/commands/dev.d.ts +19 -0
  65. package/dist/commands/dev.d.ts.map +1 -0
  66. package/dist/commands/dev.js +149 -0
  67. package/dist/commands/dev.js.map +1 -0
  68. package/dist/commands/doctor.d.ts +11 -0
  69. package/dist/commands/doctor.d.ts.map +1 -0
  70. package/dist/commands/doctor.js +75 -0
  71. package/dist/commands/doctor.js.map +1 -0
  72. package/dist/commands/health.d.ts +12 -0
  73. package/dist/commands/health.d.ts.map +1 -0
  74. package/dist/commands/health.js +109 -0
  75. package/dist/commands/health.js.map +1 -0
  76. package/dist/commands/install.d.ts +60 -0
  77. package/dist/commands/install.d.ts.map +1 -0
  78. package/dist/commands/install.js +486 -0
  79. package/dist/commands/install.js.map +1 -0
  80. package/dist/commands/iptv/snapshot.d.ts +10 -0
  81. package/dist/commands/iptv/snapshot.d.ts.map +1 -0
  82. package/dist/commands/iptv/snapshot.js +55 -0
  83. package/dist/commands/iptv/snapshot.js.map +1 -0
  84. package/dist/commands/library/drives.d.ts +7 -0
  85. package/dist/commands/library/drives.d.ts.map +1 -0
  86. package/dist/commands/library/drives.js +71 -0
  87. package/dist/commands/library/drives.js.map +1 -0
  88. package/dist/commands/library/relink.d.ts +10 -0
  89. package/dist/commands/library/relink.d.ts.map +1 -0
  90. package/dist/commands/library/relink.js +72 -0
  91. package/dist/commands/library/relink.js.map +1 -0
  92. package/dist/commands/library/scan.d.ts +16 -0
  93. package/dist/commands/library/scan.d.ts.map +1 -0
  94. package/dist/commands/library/scan.js +87 -0
  95. package/dist/commands/library/scan.js.map +1 -0
  96. package/dist/commands/library/sections.d.ts +7 -0
  97. package/dist/commands/library/sections.d.ts.map +1 -0
  98. package/dist/commands/library/sections.js +33 -0
  99. package/dist/commands/library/sections.js.map +1 -0
  100. package/dist/commands/library/status.d.ts +7 -0
  101. package/dist/commands/library/status.d.ts.map +1 -0
  102. package/dist/commands/library/status.js +37 -0
  103. package/dist/commands/library/status.js.map +1 -0
  104. package/dist/commands/list.d.ts +7 -0
  105. package/dist/commands/list.d.ts.map +1 -0
  106. package/dist/commands/list.js +73 -0
  107. package/dist/commands/list.js.map +1 -0
  108. package/dist/commands/live/channels.d.ts +10 -0
  109. package/dist/commands/live/channels.d.ts.map +1 -0
  110. package/dist/commands/live/channels.js +55 -0
  111. package/dist/commands/live/channels.js.map +1 -0
  112. package/dist/commands/live/test.d.ts +15 -0
  113. package/dist/commands/live/test.d.ts.map +1 -0
  114. package/dist/commands/live/test.js +116 -0
  115. package/dist/commands/live/test.js.map +1 -0
  116. package/dist/commands/logs.d.ts +16 -0
  117. package/dist/commands/logs.d.ts.map +1 -0
  118. package/dist/commands/logs.js +77 -0
  119. package/dist/commands/logs.js.map +1 -0
  120. package/dist/commands/migrate-cli.d.ts +11 -0
  121. package/dist/commands/migrate-cli.d.ts.map +1 -0
  122. package/dist/commands/migrate-cli.js +116 -0
  123. package/dist/commands/migrate-cli.js.map +1 -0
  124. package/dist/commands/owner/reset.d.ts +7 -0
  125. package/dist/commands/owner/reset.d.ts.map +1 -0
  126. package/dist/commands/owner/reset.js +74 -0
  127. package/dist/commands/owner/reset.js.map +1 -0
  128. package/dist/commands/restart.d.ts +11 -0
  129. package/dist/commands/restart.d.ts.map +1 -0
  130. package/dist/commands/restart.js +53 -0
  131. package/dist/commands/restart.js.map +1 -0
  132. package/dist/commands/restore.d.ts +17 -0
  133. package/dist/commands/restore.d.ts.map +1 -0
  134. package/dist/commands/restore.js +148 -0
  135. package/dist/commands/restore.js.map +1 -0
  136. package/dist/commands/self-update.d.ts +10 -0
  137. package/dist/commands/self-update.d.ts.map +1 -0
  138. package/dist/commands/self-update.js +98 -0
  139. package/dist/commands/self-update.js.map +1 -0
  140. package/dist/commands/setup.d.ts +19 -0
  141. package/dist/commands/setup.d.ts.map +1 -0
  142. package/dist/commands/setup.js +111 -0
  143. package/dist/commands/setup.js.map +1 -0
  144. package/dist/commands/shell.d.ts +118 -0
  145. package/dist/commands/shell.d.ts.map +1 -0
  146. package/dist/commands/shell.js +415 -0
  147. package/dist/commands/shell.js.map +1 -0
  148. package/dist/commands/start.d.ts +12 -0
  149. package/dist/commands/start.d.ts.map +1 -0
  150. package/dist/commands/start.js +108 -0
  151. package/dist/commands/start.js.map +1 -0
  152. package/dist/commands/status.d.ts +8 -0
  153. package/dist/commands/status.d.ts.map +1 -0
  154. package/dist/commands/status.js +115 -0
  155. package/dist/commands/status.js.map +1 -0
  156. package/dist/commands/stop.d.ts +11 -0
  157. package/dist/commands/stop.d.ts.map +1 -0
  158. package/dist/commands/stop.js +45 -0
  159. package/dist/commands/stop.js.map +1 -0
  160. package/dist/commands/stream/cancel.d.ts +13 -0
  161. package/dist/commands/stream/cancel.d.ts.map +1 -0
  162. package/dist/commands/stream/cancel.js +31 -0
  163. package/dist/commands/stream/cancel.js.map +1 -0
  164. package/dist/commands/stream/encoders.d.ts +7 -0
  165. package/dist/commands/stream/encoders.d.ts.map +1 -0
  166. package/dist/commands/stream/encoders.js +42 -0
  167. package/dist/commands/stream/encoders.js.map +1 -0
  168. package/dist/commands/stream/queue.d.ts +7 -0
  169. package/dist/commands/stream/queue.d.ts.map +1 -0
  170. package/dist/commands/stream/queue.js +52 -0
  171. package/dist/commands/stream/queue.js.map +1 -0
  172. package/dist/commands/stream/sessions.d.ts +7 -0
  173. package/dist/commands/stream/sessions.d.ts.map +1 -0
  174. package/dist/commands/stream/sessions.js +44 -0
  175. package/dist/commands/stream/sessions.js.map +1 -0
  176. package/dist/commands/uninstall.d.ts +23 -0
  177. package/dist/commands/uninstall.d.ts.map +1 -0
  178. package/dist/commands/uninstall.js +290 -0
  179. package/dist/commands/uninstall.js.map +1 -0
  180. package/dist/commands/update.d.ts +21 -0
  181. package/dist/commands/update.d.ts.map +1 -0
  182. package/dist/commands/update.js +290 -0
  183. package/dist/commands/update.js.map +1 -0
  184. package/dist/commands/watch.d.ts +10 -0
  185. package/dist/commands/watch.d.ts.map +1 -0
  186. package/dist/commands/watch.js +38 -0
  187. package/dist/commands/watch.js.map +1 -0
  188. package/dist/config/local-config.d.ts +22 -0
  189. package/dist/config/local-config.d.ts.map +1 -0
  190. package/dist/config/local-config.js +79 -0
  191. package/dist/config/local-config.js.map +1 -0
  192. package/dist/core-scripts/run.d.ts +22 -0
  193. package/dist/core-scripts/run.d.ts.map +1 -0
  194. package/dist/core-scripts/run.js +65 -0
  195. package/dist/core-scripts/run.js.map +1 -0
  196. package/dist/doctor/check.types.d.ts +51 -0
  197. package/dist/doctor/check.types.d.ts.map +1 -0
  198. package/dist/doctor/check.types.js +14 -0
  199. package/dist/doctor/check.types.js.map +1 -0
  200. package/dist/doctor/checks/core.check.d.ts +11 -0
  201. package/dist/doctor/checks/core.check.d.ts.map +1 -0
  202. package/dist/doctor/checks/core.check.js +104 -0
  203. package/dist/doctor/checks/core.check.js.map +1 -0
  204. package/dist/doctor/checks/data.check.d.ts +11 -0
  205. package/dist/doctor/checks/data.check.d.ts.map +1 -0
  206. package/dist/doctor/checks/data.check.js +70 -0
  207. package/dist/doctor/checks/data.check.js.map +1 -0
  208. package/dist/doctor/checks/environment.check.d.ts +6 -0
  209. package/dist/doctor/checks/environment.check.d.ts.map +1 -0
  210. package/dist/doctor/checks/environment.check.js +70 -0
  211. package/dist/doctor/checks/environment.check.js.map +1 -0
  212. package/dist/doctor/checks/integrity.check.d.ts +4 -0
  213. package/dist/doctor/checks/integrity.check.d.ts.map +1 -0
  214. package/dist/doctor/checks/integrity.check.js +89 -0
  215. package/dist/doctor/checks/integrity.check.js.map +1 -0
  216. package/dist/doctor/checks/isolation.check.d.ts +49 -0
  217. package/dist/doctor/checks/isolation.check.d.ts.map +1 -0
  218. package/dist/doctor/checks/isolation.check.js +220 -0
  219. package/dist/doctor/checks/isolation.check.js.map +1 -0
  220. package/dist/doctor/checks/licence.check.d.ts +8 -0
  221. package/dist/doctor/checks/licence.check.d.ts.map +1 -0
  222. package/dist/doctor/checks/licence.check.js +172 -0
  223. package/dist/doctor/checks/licence.check.js.map +1 -0
  224. package/dist/doctor/checks/ports.check.d.ts +4 -0
  225. package/dist/doctor/checks/ports.check.d.ts.map +1 -0
  226. package/dist/doctor/checks/ports.check.js +52 -0
  227. package/dist/doctor/checks/ports.check.js.map +1 -0
  228. package/dist/doctor/checks/supervisor.check.d.ts +19 -0
  229. package/dist/doctor/checks/supervisor.check.d.ts.map +1 -0
  230. package/dist/doctor/checks/supervisor.check.js +152 -0
  231. package/dist/doctor/checks/supervisor.check.js.map +1 -0
  232. package/dist/doctor/checks/tooling.check.d.ts +3 -0
  233. package/dist/doctor/checks/tooling.check.d.ts.map +1 -0
  234. package/dist/doctor/checks/tooling.check.js +43 -0
  235. package/dist/doctor/checks/tooling.check.js.map +1 -0
  236. package/dist/doctor/registry.d.ts +15 -0
  237. package/dist/doctor/registry.d.ts.map +1 -0
  238. package/dist/doctor/registry.js +53 -0
  239. package/dist/doctor/registry.js.map +1 -0
  240. package/dist/exit-codes.d.ts +18 -0
  241. package/dist/exit-codes.d.ts.map +1 -0
  242. package/dist/exit-codes.js +23 -0
  243. package/dist/exit-codes.js.map +1 -0
  244. package/dist/index.d.ts +2 -0
  245. package/dist/index.d.ts.map +1 -0
  246. package/dist/index.js +16 -0
  247. package/dist/index.js.map +1 -0
  248. package/dist/logs/sink.d.ts +11 -0
  249. package/dist/logs/sink.d.ts.map +1 -0
  250. package/dist/logs/sink.js +73 -0
  251. package/dist/logs/sink.js.map +1 -0
  252. package/dist/logs/tail.d.ts +17 -0
  253. package/dist/logs/tail.d.ts.map +1 -0
  254. package/dist/logs/tail.js +98 -0
  255. package/dist/logs/tail.js.map +1 -0
  256. package/dist/packaging/boot-task.d.ts +56 -0
  257. package/dist/packaging/boot-task.d.ts.map +1 -0
  258. package/dist/packaging/boot-task.js +151 -0
  259. package/dist/packaging/boot-task.js.map +1 -0
  260. package/dist/packaging/install.d.ts +154 -0
  261. package/dist/packaging/install.d.ts.map +1 -0
  262. package/dist/packaging/install.js +381 -0
  263. package/dist/packaging/install.js.map +1 -0
  264. package/dist/packaging/layout.d.ts +153 -0
  265. package/dist/packaging/layout.d.ts.map +1 -0
  266. package/dist/packaging/layout.js +168 -0
  267. package/dist/packaging/layout.js.map +1 -0
  268. package/dist/packaging/machine-path.d.ts +52 -0
  269. package/dist/packaging/machine-path.d.ts.map +1 -0
  270. package/dist/packaging/machine-path.js +237 -0
  271. package/dist/packaging/machine-path.js.map +1 -0
  272. package/dist/packaging/manifest.d.ts +37 -0
  273. package/dist/packaging/manifest.d.ts.map +1 -0
  274. package/dist/packaging/manifest.js +115 -0
  275. package/dist/packaging/manifest.js.map +1 -0
  276. package/dist/packaging/shims.d.ts +31 -0
  277. package/dist/packaging/shims.d.ts.map +1 -0
  278. package/dist/packaging/shims.js +165 -0
  279. package/dist/packaging/shims.js.map +1 -0
  280. package/dist/probes/internal-paths.d.ts +35 -0
  281. package/dist/probes/internal-paths.d.ts.map +1 -0
  282. package/dist/probes/internal-paths.js +58 -0
  283. package/dist/probes/internal-paths.js.map +1 -0
  284. package/dist/probes/internal.client.d.ts +54 -0
  285. package/dist/probes/internal.client.d.ts.map +1 -0
  286. package/dist/probes/internal.client.js +123 -0
  287. package/dist/probes/internal.client.js.map +1 -0
  288. package/dist/probes/port.probe.d.ts +21 -0
  289. package/dist/probes/port.probe.d.ts.map +1 -0
  290. package/dist/probes/port.probe.js +42 -0
  291. package/dist/probes/port.probe.js.map +1 -0
  292. package/dist/probes/service.probe.d.ts +29 -0
  293. package/dist/probes/service.probe.d.ts.map +1 -0
  294. package/dist/probes/service.probe.js +65 -0
  295. package/dist/probes/service.probe.js.map +1 -0
  296. package/dist/profiles/appliance.profile.d.ts +20 -0
  297. package/dist/profiles/appliance.profile.d.ts.map +1 -0
  298. package/dist/profiles/appliance.profile.js +137 -0
  299. package/dist/profiles/appliance.profile.js.map +1 -0
  300. package/dist/profiles/dev.profile.d.ts +22 -0
  301. package/dist/profiles/dev.profile.d.ts.map +1 -0
  302. package/dist/profiles/dev.profile.js +104 -0
  303. package/dist/profiles/dev.profile.js.map +1 -0
  304. package/dist/profiles/resolve.d.ts +37 -0
  305. package/dist/profiles/resolve.d.ts.map +1 -0
  306. package/dist/profiles/resolve.js +198 -0
  307. package/dist/profiles/resolve.js.map +1 -0
  308. package/dist/profiles/types.d.ts +57 -0
  309. package/dist/profiles/types.d.ts.map +1 -0
  310. package/dist/profiles/types.js +15 -0
  311. package/dist/profiles/types.js.map +1 -0
  312. package/dist/registry/local-registry.d.ts +79 -0
  313. package/dist/registry/local-registry.d.ts.map +1 -0
  314. package/dist/registry/local-registry.js +252 -0
  315. package/dist/registry/local-registry.js.map +1 -0
  316. package/dist/render/banner.d.ts +13 -0
  317. package/dist/render/banner.d.ts.map +1 -0
  318. package/dist/render/banner.js +83 -0
  319. package/dist/render/banner.js.map +1 -0
  320. package/dist/render/boot.render.d.ts +123 -0
  321. package/dist/render/boot.render.d.ts.map +1 -0
  322. package/dist/render/boot.render.js +288 -0
  323. package/dist/render/boot.render.js.map +1 -0
  324. package/dist/render/brand.d.ts +16 -0
  325. package/dist/render/brand.d.ts.map +1 -0
  326. package/dist/render/brand.js +22 -0
  327. package/dist/render/brand.js.map +1 -0
  328. package/dist/render/doctor.render.d.ts +12 -0
  329. package/dist/render/doctor.render.d.ts.map +1 -0
  330. package/dist/render/doctor.render.js +95 -0
  331. package/dist/render/doctor.render.js.map +1 -0
  332. package/dist/render/json.d.ts +29 -0
  333. package/dist/render/json.d.ts.map +1 -0
  334. package/dist/render/json.js +19 -0
  335. package/dist/render/json.js.map +1 -0
  336. package/dist/render/licence.render.d.ts +10 -0
  337. package/dist/render/licence.render.d.ts.map +1 -0
  338. package/dist/render/licence.render.js +167 -0
  339. package/dist/render/licence.render.js.map +1 -0
  340. package/dist/render/status.render.d.ts +6 -0
  341. package/dist/render/status.render.d.ts.map +1 -0
  342. package/dist/render/status.render.js +52 -0
  343. package/dist/render/status.render.js.map +1 -0
  344. package/dist/render/theme.d.ts +66 -0
  345. package/dist/render/theme.d.ts.map +1 -0
  346. package/dist/render/theme.js +89 -0
  347. package/dist/render/theme.js.map +1 -0
  348. package/dist/runtime-guard.d.ts +19 -0
  349. package/dist/runtime-guard.d.ts.map +1 -0
  350. package/dist/runtime-guard.js +57 -0
  351. package/dist/runtime-guard.js.map +1 -0
  352. package/dist/shell/input-mode.d.ts +25 -0
  353. package/dist/shell/input-mode.d.ts.map +1 -0
  354. package/dist/shell/input-mode.js +17 -0
  355. package/dist/shell/input-mode.js.map +1 -0
  356. package/dist/shell/parse-line.d.ts +6 -0
  357. package/dist/shell/parse-line.d.ts.map +1 -0
  358. package/dist/shell/parse-line.js +62 -0
  359. package/dist/shell/parse-line.js.map +1 -0
  360. package/dist/shell/suggestions.d.ts +14 -0
  361. package/dist/shell/suggestions.d.ts.map +1 -0
  362. package/dist/shell/suggestions.js +35 -0
  363. package/dist/shell/suggestions.js.map +1 -0
  364. package/dist/supervisor/dependencies.d.ts +2 -0
  365. package/dist/supervisor/dependencies.d.ts.map +1 -0
  366. package/dist/supervisor/dependencies.js +38 -0
  367. package/dist/supervisor/dependencies.js.map +1 -0
  368. package/dist/supervisor/entry.d.ts +36 -0
  369. package/dist/supervisor/entry.d.ts.map +1 -0
  370. package/dist/supervisor/entry.js +171 -0
  371. package/dist/supervisor/entry.js.map +1 -0
  372. package/dist/supervisor/inspect.d.ts +17 -0
  373. package/dist/supervisor/inspect.d.ts.map +1 -0
  374. package/dist/supervisor/inspect.js +39 -0
  375. package/dist/supervisor/inspect.js.map +1 -0
  376. package/dist/supervisor/invocation.d.ts +27 -0
  377. package/dist/supervisor/invocation.d.ts.map +1 -0
  378. package/dist/supervisor/invocation.js +33 -0
  379. package/dist/supervisor/invocation.js.map +1 -0
  380. package/dist/supervisor/monitor.d.ts +63 -0
  381. package/dist/supervisor/monitor.d.ts.map +1 -0
  382. package/dist/supervisor/monitor.js +141 -0
  383. package/dist/supervisor/monitor.js.map +1 -0
  384. package/dist/supervisor/orchestrator.d.ts +52 -0
  385. package/dist/supervisor/orchestrator.d.ts.map +1 -0
  386. package/dist/supervisor/orchestrator.js +154 -0
  387. package/dist/supervisor/orchestrator.js.map +1 -0
  388. package/dist/supervisor/pidfile.d.ts +21 -0
  389. package/dist/supervisor/pidfile.d.ts.map +1 -0
  390. package/dist/supervisor/pidfile.js +39 -0
  391. package/dist/supervisor/pidfile.js.map +1 -0
  392. package/dist/supervisor/process-identity.d.ts +19 -0
  393. package/dist/supervisor/process-identity.d.ts.map +1 -0
  394. package/dist/supervisor/process-identity.js +51 -0
  395. package/dist/supervisor/process-identity.js.map +1 -0
  396. package/dist/supervisor/readiness.d.ts +17 -0
  397. package/dist/supervisor/readiness.d.ts.map +1 -0
  398. package/dist/supervisor/readiness.js +52 -0
  399. package/dist/supervisor/readiness.js.map +1 -0
  400. package/dist/supervisor/restart-consumer.d.ts +37 -0
  401. package/dist/supervisor/restart-consumer.d.ts.map +1 -0
  402. package/dist/supervisor/restart-consumer.js +119 -0
  403. package/dist/supervisor/restart-consumer.js.map +1 -0
  404. package/dist/supervisor/runner.d.ts +2 -0
  405. package/dist/supervisor/runner.d.ts.map +1 -0
  406. package/dist/supervisor/runner.js +118 -0
  407. package/dist/supervisor/runner.js.map +1 -0
  408. package/dist/supervisor/schedule-timer.d.ts +38 -0
  409. package/dist/supervisor/schedule-timer.d.ts.map +1 -0
  410. package/dist/supervisor/schedule-timer.js +148 -0
  411. package/dist/supervisor/schedule-timer.js.map +1 -0
  412. package/dist/supervisor/spawn.d.ts +18 -0
  413. package/dist/supervisor/spawn.d.ts.map +1 -0
  414. package/dist/supervisor/spawn.js +119 -0
  415. package/dist/supervisor/spawn.js.map +1 -0
  416. package/dist/supervisor/state-files.d.ts +33 -0
  417. package/dist/supervisor/state-files.d.ts.map +1 -0
  418. package/dist/supervisor/state-files.js +110 -0
  419. package/dist/supervisor/state-files.js.map +1 -0
  420. package/dist/supervisor/tree-kill.d.ts +14 -0
  421. package/dist/supervisor/tree-kill.d.ts.map +1 -0
  422. package/dist/supervisor/tree-kill.js +82 -0
  423. package/dist/supervisor/tree-kill.js.map +1 -0
  424. package/dist/ui/health-panel.d.ts +8 -0
  425. package/dist/ui/health-panel.d.ts.map +1 -0
  426. package/dist/ui/health-panel.js +91 -0
  427. package/dist/ui/health-panel.js.map +1 -0
  428. package/dist/updating/apply.d.ts +50 -0
  429. package/dist/updating/apply.d.ts.map +1 -0
  430. package/dist/updating/apply.js +172 -0
  431. package/dist/updating/apply.js.map +1 -0
  432. package/dist/updating/download.d.ts +44 -0
  433. package/dist/updating/download.d.ts.map +1 -0
  434. package/dist/updating/download.js +144 -0
  435. package/dist/updating/download.js.map +1 -0
  436. package/dist/updating/rollback.d.ts +33 -0
  437. package/dist/updating/rollback.d.ts.map +1 -0
  438. package/dist/updating/rollback.js +54 -0
  439. package/dist/updating/rollback.js.map +1 -0
  440. package/dist/updating/self.d.ts +16 -0
  441. package/dist/updating/self.d.ts.map +1 -0
  442. package/dist/updating/self.js +50 -0
  443. package/dist/updating/self.js.map +1 -0
  444. package/dist/updating/verify.d.ts +25 -0
  445. package/dist/updating/verify.d.ts.map +1 -0
  446. package/dist/updating/verify.js +51 -0
  447. package/dist/updating/verify.js.map +1 -0
  448. package/dist/updating/versions.d.ts +31 -0
  449. package/dist/updating/versions.d.ts.map +1 -0
  450. package/dist/updating/versions.js +78 -0
  451. package/dist/updating/versions.js.map +1 -0
  452. package/dist/version.d.ts +4 -0
  453. package/dist/version.d.ts.map +1 -0
  454. package/dist/version.js +29 -0
  455. package/dist/version.js.map +1 -0
  456. package/package.json +106 -0
@@ -0,0 +1,119 @@
1
+ import { createWriteStream } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { spawn } from "node:child_process";
4
+ import { StringDecoder } from "node:string_decoder";
5
+ import { execa } from "execa";
6
+ import stripAnsi from "strip-ansi";
7
+ import { closeLogFd, logFilePath, openLogFd, rotateIfNeeded } from "../logs/sink.js";
8
+ import { LAUNCH_PAYLOAD_ENV, resolveInvocation } from "./invocation.js";
9
+ import { readProcessIdentity } from "./process-identity.js";
10
+ import { writePidRecord } from "./pidfile.js";
11
+ // AR: إطلاق الخدمات. نمطان يتشاركان نفس التعريف: منفصل (‎start‎) يحيا بعد خروج الـ CLI، ومرتبط
12
+ // (‎dev‎) يمرّر الأسطر إلى الشاشة وإلى الملف معًا.
13
+ //
14
+ // النمط المنفصل **لا يُطلق الخدمة مباشرةً**، بل يُطلق مشرفًا صغيرًا (‎runner.ts‎) يُطلقها. السبب
15
+ // مقيس ومشروح كاملًا هناك، وخلاصته: الإطلاق المباشر بـ ‎detached‎ يفتح على ويندوز نافذة كونسول
16
+ // مرئية لكل خدمة، وإغلاق أيّ منها يقتل خدمتها. **لا تُعِد هذا السطر إلى إطلاق مباشر.**
17
+ // EN: Service launching. Two modes over one definition: detached (`start`) outlives the CLI, attached
18
+ // (`dev`) forwards lines to both the screen and the file.
19
+ //
20
+ // The detached mode **does not launch the service directly** — it launches a small supervisor
21
+ // (runner.ts) that does. The reason is measured and spelled out in full there; in short, spawning
22
+ // the service directly with `detached` opens a visible console window per service on Windows, and
23
+ // closing any of them kills that service. **Do not fold this back into a direct spawn.**
24
+ function buildEnv(definition, extra = {}) {
25
+ return { ...process.env, ...definition.env, ...extra };
26
+ }
27
+ /** مسار المشرف بجوارنا في ‎dist‎. يُحلّ نسبةً إلى هذا الملف فيصحّ في المستودع وفي التثبيت العالمي معًا. */
28
+ function runnerEntry() {
29
+ return fileURLToPath(new URL("runner.js", import.meta.url));
30
+ }
31
+ /** يُطلق خدمة في الخلفية ويسجّل هويتها. العملية تحيا بعد خروج الـ CLI. */
32
+ export async function launchDetached(profile, definition) {
33
+ const fd = openLogFd(profile.logDir, definition.name);
34
+ try {
35
+ const payload = {
36
+ label: definition.label,
37
+ command: definition.command,
38
+ args: definition.args,
39
+ cwd: definition.cwd,
40
+ env: definition.env,
41
+ };
42
+ // ‎spawn‎ الخام لا execa هنا: نحتاج ‎unref‎ لنترك العملية تحيا بعد خروجنا، وexeca لا تكشفه.
43
+ // واصف السجلّ يُمرَّر إلى المشرف مباشرةً، فهو مخرَجه القياسي ومنه يكتب أسطر الخدمة — ويستمر
44
+ // التسجيل بعد خروج الـ CLI لأن لا أحد بيننا يعترضه.
45
+ const child = spawn(process.execPath, [runnerEntry()], {
46
+ cwd: definition.cwd,
47
+ env: { ...process.env, [LAUNCH_PAYLOAD_ENV]: JSON.stringify(payload) },
48
+ stdio: ["ignore", fd, fd],
49
+ detached: true,
50
+ windowsHide: true,
51
+ });
52
+ child.unref();
53
+ const pid = child.pid;
54
+ if (!pid)
55
+ throw new Error(`could not launch ${definition.label}`);
56
+ // نقرأ الهوية من النظام لا من ساعتنا: وقت البدء الحقيقي هو ما يحمي من إعادة استعمال الـ PID.
57
+ const identity = await readProcessIdentity(pid);
58
+ const record = {
59
+ service: definition.name,
60
+ pid,
61
+ port: definition.port,
62
+ profile: profile.kind,
63
+ startedAt: identity?.startedAt ?? "",
64
+ commandLine: identity?.commandLine ?? `${definition.command} ${definition.args.join(" ")}`,
65
+ writtenAt: new Date().toISOString(),
66
+ };
67
+ writePidRecord(profile, record);
68
+ return record;
69
+ }
70
+ finally {
71
+ // نسختنا من الواصف لم تعد لازمة؛ العملية تحمل نسختها.
72
+ closeLogFd(fd);
73
+ }
74
+ }
75
+ /** يُطلق خدمة مرتبطة بالطرفية: الأسطر تذهب إلى الشاشة وإلى ملف السجلّ معًا. */
76
+ export function launchAttached(profile, definition, options) {
77
+ rotateIfNeeded(profile.logDir, definition.name);
78
+ const logStream = createWriteStream(logFilePath(profile.logDir, definition.name), {
79
+ flags: "a",
80
+ });
81
+ const { file, argv } = resolveInvocation(definition.command, definition.args);
82
+ const child = execa(file, argv, {
83
+ cwd: definition.cwd,
84
+ env: buildEnv(definition),
85
+ stdio: ["ignore", "pipe", "pipe"],
86
+ windowsHide: true,
87
+ reject: false,
88
+ buffer: false,
89
+ });
90
+ // نفس سبب المفكّك في ‎runner.ts‎: الأنبوب يقطع عند حدّ البايت، والسجلات عربية.
91
+ const decoder = new StringDecoder("utf8");
92
+ let pending = "";
93
+ const consume = (chunk) => {
94
+ pending += decoder.write(chunk);
95
+ const lines = pending.split(/\r?\n/);
96
+ pending = lines.pop() ?? "";
97
+ for (const line of lines) {
98
+ if (line.trim().length === 0)
99
+ continue;
100
+ // الملف يُجرَّد من ANSI ليبقى قابلًا للبحث؛ الشاشة تحتفظ بما أرسلته الخدمة.
101
+ logStream.write(`${stripAnsi(line)}\n`);
102
+ options.onLine(definition, line);
103
+ }
104
+ };
105
+ child.stdout?.on("data", consume);
106
+ child.stderr?.on("data", consume);
107
+ return {
108
+ definition,
109
+ child,
110
+ pid: child.pid ?? 0,
111
+ close: () => {
112
+ pending += decoder.end();
113
+ if (pending.trim().length > 0)
114
+ logStream.write(`${stripAnsi(pending)}\n`);
115
+ logStream.end();
116
+ },
117
+ };
118
+ }
119
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/supervisor/spawn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { RemoteStateFiles } from "../contracts/core.js";
2
+ import type { Profile } from "../profiles/types.js";
3
+ /**
4
+ * AR: أسماء ملفّات القناة بين المشرف والنواة — نسخة الـ CLI (٠٢٠).
5
+ *
6
+ * **نسختان لا واحدة، والسبب مقيس:** ‎@fantastic/shared-types‎ حزمة أنواع فقط تُشحن مصدرًا خامًّا
7
+ * بلا خطوة بناء، فاستيراد **قيمة** منها يفشل عند الإقلاع. والانحراف بين النسختين يمنعه اختبار
8
+ * ‎remote-contract.spec.ts‎ الذي يقرأهما ويقارن قيمهما — فاسمٌ يتغيّر هنا وحده يُفشل البناء بدل
9
+ * أن يُنتج طلبًا لا يقرؤه أحد.
10
+ * EN: The names of the supervisor↔core channel files — the CLI's copy (020).
11
+ *
12
+ * **Two copies rather than one, and the reason was measured:** `@fantastic/shared-types` is a
13
+ * types-only package shipped as raw source with no build step, so importing a **value** from it
14
+ * fails at boot. Drift between the copies is prevented by `remote-contract.spec.ts`, which reads
15
+ * both and compares their values — so a name changed here alone fails the build instead of
16
+ * producing a request nobody reads.
17
+ */
18
+ export declare const REMOTE_STATE_FILES: RemoteStateFiles;
19
+ export declare function stateFilePath(profile: Profile, name: string): string;
20
+ /** يقرأ ملفّ JSON من مجلد الحالة، أو ‎null‎ حين لا يوجد أو تعذّرت قراءته. */
21
+ export declare function readStateJson<T>(profile: Profile, name: string): T | null;
22
+ /** يكتب ملفّ JSON ذرّيًّا. */
23
+ export declare function writeStateJson(profile: Profile, name: string, value: unknown): void;
24
+ export declare function removeStateFile(profile: Profile, name: string): void;
25
+ /**
26
+ * AR: يطالب بملفّ لمرّة واحدة ثم يقرؤه ويحذفه. يعيد ‎null‎ إن لم يكن هناك شيء يُستهلَك.
27
+ * المطالبة بإعادة التسمية أولًا هي ما يجعل «مرّة واحدة» صحيحة حتى لو عمل مشرفان بالخطأ.
28
+ * EN: Claims a one-shot file, reads it, and deletes it. Returns `null` when there is nothing to
29
+ * consume. Claiming by renaming first is what makes "once" true even if two supervisors are
30
+ * running by mistake.
31
+ */
32
+ export declare function takeStateJson<T>(profile: Profile, name: string): T | null;
33
+ //# sourceMappingURL=state-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-files.d.ts","sourceRoot":"","sources":["../../src/supervisor/state-files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAMhC,CAAC;AAiCF,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CASzE;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAOnF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAoBzE"}
@@ -0,0 +1,110 @@
1
+ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ /**
4
+ * AR: أسماء ملفّات القناة بين المشرف والنواة — نسخة الـ CLI (٠٢٠).
5
+ *
6
+ * **نسختان لا واحدة، والسبب مقيس:** ‎@fantastic/shared-types‎ حزمة أنواع فقط تُشحن مصدرًا خامًّا
7
+ * بلا خطوة بناء، فاستيراد **قيمة** منها يفشل عند الإقلاع. والانحراف بين النسختين يمنعه اختبار
8
+ * ‎remote-contract.spec.ts‎ الذي يقرأهما ويقارن قيمهما — فاسمٌ يتغيّر هنا وحده يُفشل البناء بدل
9
+ * أن يُنتج طلبًا لا يقرؤه أحد.
10
+ * EN: The names of the supervisor↔core channel files — the CLI's copy (020).
11
+ *
12
+ * **Two copies rather than one, and the reason was measured:** `@fantastic/shared-types` is a
13
+ * types-only package shipped as raw source with no build step, so importing a **value** from it
14
+ * fails at boot. Drift between the copies is prevented by `remote-contract.spec.ts`, which reads
15
+ * both and compares their values — so a name changed here alone fails the build instead of
16
+ * producing a request nobody reads.
17
+ */
18
+ export const REMOTE_STATE_FILES = {
19
+ restartRequest: "restart.request",
20
+ restartSchedule: "restart.schedule.json",
21
+ restartOutcome: "restart.outcome.json",
22
+ restartLoop: "restart-loop.json",
23
+ supervisor: "supervisor.json",
24
+ };
25
+ // AR: ملفّات مجلد الحالة التي يتشاركها المشرف والنواة (٠٢٠).
26
+ //
27
+ // القناة ملفّات لا مقبس، وذلك قرار لا تفصيل: المقبس يموت مع العملية التي وُضع ليتجاوز موتها.
28
+ // الملف في مجلد الحالة ينجو من موت الطرفين، ويلتقطه أيّ مشرف حيّ بعد ذلك.
29
+ //
30
+ // **ثلاث قواعد، كلّها مقيسة على عطبٍ صامت:**
31
+ // ١ — **كل كتابة ذرّية** (مؤقّت ثم ‎rename‎). الطرف الآخر يستقصي كل ثانية، وملفٌّ نصف مكتوب
32
+ // يُقرأ JSON تالفًا فيُهمَل — أي طلبٌ يختفي بلا رسالة ولا أثر.
33
+ // ٢ — **القراءة متسامحة.** ملفّ تالف أو ناقص يعني «لا نعرف» لا انهيارًا: المشرف يجب أن يبقى
34
+ // حيًّا خصوصًا حين يسوء شيء.
35
+ // ٣ — **الاستهلاك يبدأ بمطالبة.** الطلب يُعاد تسميته إلى اسم خاصّ بنا **قبل** أن يُقرأ. بدون
36
+ // ذلك يقع سباق: نقرأ، تكتب النواة طلبًا ثانيًا، ثم نحذف — فيضيع طلبٌ لم يُنفَّذ قط.
37
+ // و‎rename‎ على ويندوز فوق ملفّ موجود ينجح ذرّيًّا، فلا نافذة بين الفحص والفعل.
38
+ //
39
+ // EN: The state-dir files the supervisor and the core share (020).
40
+ //
41
+ // The channel is files rather than a socket, and that is a decision rather than a detail: a
42
+ // socket dies with the very process it was put there to outlive. A file in the state dir
43
+ // survives the death of both sides and is picked up by whichever supervisor is alive next.
44
+ //
45
+ // **Three rules, each measured against a silent failure:**
46
+ // 1 — **Every write is atomic** (temp then `rename`). The other side polls every second, and a
47
+ // half-written file parses as broken JSON and is discarded — a request that vanishes with
48
+ // no message and no trace.
49
+ // 2 — **Reads are forgiving.** A corrupt or missing file means "we do not know", not a crash:
50
+ // the supervisor must stay alive precisely when something is going wrong.
51
+ // 3 — **Consuming begins by claiming.** The request is renamed to a name of our own **before**
52
+ // it is read. Without that there is a race: we read, the core writes a second request, we
53
+ // delete — and a request that was never executed is lost. `rename` over an existing file
54
+ // succeeds atomically on Windows, so there is no window between checking and acting.
55
+ export function stateFilePath(profile, name) {
56
+ return join(profile.stateDir, name);
57
+ }
58
+ /** يقرأ ملفّ JSON من مجلد الحالة، أو ‎null‎ حين لا يوجد أو تعذّرت قراءته. */
59
+ export function readStateJson(profile, name) {
60
+ const path = stateFilePath(profile, name);
61
+ if (!existsSync(path))
62
+ return null;
63
+ try {
64
+ return JSON.parse(readFileSync(path, "utf8"));
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ /** يكتب ملفّ JSON ذرّيًّا. */
71
+ export function writeStateJson(profile, name, value) {
72
+ const path = stateFilePath(profile, name);
73
+ mkdirSync(profile.stateDir, { recursive: true });
74
+ const temporary = `${path}.part`;
75
+ writeFileSync(temporary, `${JSON.stringify(value, null, 2)}\n`, "utf8");
76
+ renameSync(temporary, path);
77
+ }
78
+ export function removeStateFile(profile, name) {
79
+ rmSync(stateFilePath(profile, name), { force: true });
80
+ }
81
+ /**
82
+ * AR: يطالب بملفّ لمرّة واحدة ثم يقرؤه ويحذفه. يعيد ‎null‎ إن لم يكن هناك شيء يُستهلَك.
83
+ * المطالبة بإعادة التسمية أولًا هي ما يجعل «مرّة واحدة» صحيحة حتى لو عمل مشرفان بالخطأ.
84
+ * EN: Claims a one-shot file, reads it, and deletes it. Returns `null` when there is nothing to
85
+ * consume. Claiming by renaming first is what makes "once" true even if two supervisors are
86
+ * running by mistake.
87
+ */
88
+ export function takeStateJson(profile, name) {
89
+ const path = stateFilePath(profile, name);
90
+ if (!existsSync(path))
91
+ return null;
92
+ const claimed = `${path}.claimed-${process.pid}`;
93
+ try {
94
+ renameSync(path, claimed);
95
+ }
96
+ catch {
97
+ // سبقنا إليه أحد، أو اختفى بين الفحص وإعادة التسمية. لا شيء لنا هنا.
98
+ return null;
99
+ }
100
+ try {
101
+ return JSON.parse(readFileSync(claimed, "utf8"));
102
+ }
103
+ catch {
104
+ return null;
105
+ }
106
+ finally {
107
+ rmSync(claimed, { force: true });
108
+ }
109
+ }
110
+ //# sourceMappingURL=state-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-files.js","sourceRoot":"","sources":["../../src/supervisor/state-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface TerminateResult {
2
+ /** هل انتهت العملية فعلًا؟ */
3
+ terminated: boolean;
4
+ /** هل اضطررنا للإجبار؟ يُعرض للمستخدم لأنه يعني أن الإغلاق لم يكن مرتّبًا. */
5
+ forced: boolean;
6
+ }
7
+ /** ينهي عملية وكل ذرّيتها. آمن للاستدعاء على PID غير موجود. */
8
+ export declare function terminateTree(pid: number, graceMs?: number): Promise<TerminateResult>;
9
+ /**
10
+ * تحرَّر المنفذ فعلًا؟ هذا هو الدليل الحقيقي على نجاح الإيقاف، لا خروج العملية التي أطلقناها:
11
+ * الإطلاق عبر ‎npm.cmd‎ يضيف طبقة غلاف، فقد يخرج الأب بينما يبقى الحفيد ممسكًا بالمنفذ.
12
+ */
13
+ export declare function waitForPortRelease(port: number, timeoutMs?: number): Promise<boolean>;
14
+ //# sourceMappingURL=tree-kill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-kill.d.ts","sourceRoot":"","sources":["../../src/supervisor/tree-kill.ts"],"names":[],"mappings":"AA2CA,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,8EAA8E;IAC9E,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,+DAA+D;AAC/D,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,SAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CA8B7F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAS1F"}
@@ -0,0 +1,82 @@
1
+ import { execa } from "execa";
2
+ import { isPortFree } from "../probes/port.probe.js";
3
+ import { readProcessIdentity } from "./process-identity.js";
4
+ // AR: إنهاء شجرة العمليات. ‎process.kill(pid)‎ على ويندوز يقتل الأب وحده، و‎nest start --watch‎
5
+ // و‎vite‎ كلاهما يولّد أبناء — فإغلاق النافذة يترك ‎node.exe‎ حيًّا وهو ما نراه اليوم.
6
+ // نحاول الإنهاء المرتّب أولًا لأنه ما يستدعي ‎enableShutdownHooks‎ في NestJS، ثم نُجبر بعد مهلة.
7
+ // EN: Process-tree termination. process.kill(pid) on Windows kills only the parent, and both
8
+ // `nest start --watch` and `vite` spawn children — which is why closing a window leaves node.exe
9
+ // alive today. We try an orderly termination first, because that is what triggers NestJS's
10
+ // enableShutdownHooks, and force only after a grace period.
11
+ /**
12
+ * مهلة الإنهاء المرتّب قبل الإجبار. قصيرة عن قصد: على ويندوز، عملية منفصلة بلا طرفية لا تستقبل
13
+ * إشارة ‎taskkill‎ غير المُجبِرة أصلًا، فالانتظار الطويل ضياع خالص — قِيس أن الخدمات الثلاث كلها
14
+ * تحتاج الإجبار. على أنظمة POSIX يستجيب NestJS لـ SIGTERM في أقل من ثانية، فـ 2.5 ثانية تكفيه.
15
+ * لذلك «(بالإجبار)» في مخرَج ‎stop‎ على ويندوز هو الوضع الطبيعي لا علامة خلل.
16
+ */
17
+ const GRACE_MS = 2_500;
18
+ const POLL_MS = 250;
19
+ async function isAlive(pid) {
20
+ return Boolean(await readProcessIdentity(pid));
21
+ }
22
+ async function taskkill(pid, force) {
23
+ const args = ["/PID", String(pid), "/T"];
24
+ if (force)
25
+ args.push("/F");
26
+ await execa("taskkill.exe", args, { reject: false, timeout: 10_000 });
27
+ }
28
+ async function waitForExit(pid, timeoutMs) {
29
+ const deadline = Date.now() + timeoutMs;
30
+ while (Date.now() < deadline) {
31
+ if (!(await isAlive(pid)))
32
+ return true;
33
+ await new Promise((resolvePromise) => setTimeout(resolvePromise, POLL_MS));
34
+ }
35
+ return !(await isAlive(pid));
36
+ }
37
+ /** ينهي عملية وكل ذرّيتها. آمن للاستدعاء على PID غير موجود. */
38
+ export async function terminateTree(pid, graceMs = GRACE_MS) {
39
+ if (!(await isAlive(pid)))
40
+ return { terminated: true, forced: false };
41
+ if (process.platform === "win32") {
42
+ await taskkill(pid, false);
43
+ if (await waitForExit(pid, graceMs))
44
+ return { terminated: true, forced: false };
45
+ await taskkill(pid, true);
46
+ return { terminated: await waitForExit(pid, graceMs), forced: true };
47
+ }
48
+ try {
49
+ process.kill(-pid, "SIGTERM");
50
+ }
51
+ catch {
52
+ try {
53
+ process.kill(pid, "SIGTERM");
54
+ }
55
+ catch {
56
+ // العملية اختفت بين الفحص والإشارة. لا شيء نفعله.
57
+ }
58
+ }
59
+ if (await waitForExit(pid, graceMs))
60
+ return { terminated: true, forced: false };
61
+ try {
62
+ process.kill(-pid, "SIGKILL");
63
+ }
64
+ catch {
65
+ // كما أعلاه.
66
+ }
67
+ return { terminated: await waitForExit(pid, graceMs), forced: true };
68
+ }
69
+ /**
70
+ * تحرَّر المنفذ فعلًا؟ هذا هو الدليل الحقيقي على نجاح الإيقاف، لا خروج العملية التي أطلقناها:
71
+ * الإطلاق عبر ‎npm.cmd‎ يضيف طبقة غلاف، فقد يخرج الأب بينما يبقى الحفيد ممسكًا بالمنفذ.
72
+ */
73
+ export async function waitForPortRelease(port, timeoutMs = 8_000) {
74
+ const deadline = Date.now() + timeoutMs;
75
+ while (Date.now() < deadline) {
76
+ if (await isPortFree(port))
77
+ return true;
78
+ await new Promise((resolvePromise) => setTimeout(resolvePromise, POLL_MS));
79
+ }
80
+ return isPortFree(port);
81
+ }
82
+ //# sourceMappingURL=tree-kill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-kill.js","sourceRoot":"","sources":["../../src/supervisor/tree-kill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { Profile } from "../profiles/types.js";
3
+ export interface PanelProps {
4
+ profile: Profile;
5
+ intervalMs: number;
6
+ }
7
+ export declare function HealthPanel({ profile, intervalMs }: PanelProps): React.JSX.Element;
8
+ //# sourceMappingURL=health-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-panel.d.ts","sourceRoot":"","sources":["../../src/ui/health-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AA8DpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA8HlF"}
@@ -0,0 +1,91 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { Box, Text, useApp, useInput } from "ink";
4
+ import { fetchInternalHealth } from "../probes/internal.client.js";
5
+ import { inspectServices } from "../supervisor/inspect.js";
6
+ // AR: لوحة الصحة الحيّة.
7
+ //
8
+ // **قاعدتها الحاكمة: الحقل الذي لا تُبلِغ عنه النواة يُرسَم شرطةً، لا صفرًا** (017/FR-012).
9
+ // الصفر ادّعاء والشرطة إقرار، والفرق بينهما هو الفرق بين لوحة تُصدَّق ولوحة تُخمِّن.
10
+ //
11
+ // **ولا تنهار حين تسقط خدمة.** ‎doctor‎ يُستدعى وقت العطل، وهذه اللوحة تُفتَح وقته أيضًا؛ لوحةٌ
12
+ // تموت مع أوّل خدمة تسقط عديمة الفائدة في اللحظة التي تُحتاج فيها. كل جلب ملفوف، والفشل يصير
13
+ // حالةَ عرضٍ لا استثناءً.
14
+ // EN: The live health panel.
15
+ //
16
+ // **Its governing rule: a field the core does not report renders as a dash, never a zero**
17
+ // (017/FR-012). A zero is a claim, a dash is an admission, and the difference between them is
18
+ // the difference between a panel that can be believed and one that guesses.
19
+ //
20
+ // **And it does not die when a service does.** `doctor` is called when something is broken, and
21
+ // this panel is opened then too; a panel that dies with the first failing service is useless at
22
+ // the exact moment it is needed. Every fetch is wrapped and failure becomes a display state.
23
+ const DASH = "—";
24
+ function dash(value, suffix = "") {
25
+ if (value === undefined || value === null)
26
+ return DASH;
27
+ return `${value}${suffix}`;
28
+ }
29
+ function duration(seconds) {
30
+ if (seconds === undefined)
31
+ return DASH;
32
+ const days = Math.floor(seconds / 86_400);
33
+ const hours = Math.floor((seconds % 86_400) / 3_600);
34
+ const minutes = Math.floor((seconds % 3_600) / 60);
35
+ const pad = (value) => String(value).padStart(2, "0");
36
+ return `${days > 0 ? `${days}d ` : ""}${pad(hours)}:${pad(minutes)}`;
37
+ }
38
+ function bytes(value) {
39
+ if (value === undefined)
40
+ return DASH;
41
+ const units = ["B", "KB", "MB", "GB", "TB"];
42
+ let size = value;
43
+ let unit = 0;
44
+ while (size >= 1024 && unit < units.length - 1) {
45
+ size /= 1024;
46
+ unit += 1;
47
+ }
48
+ return `${size.toFixed(unit === 0 ? 0 : 1)} ${units[unit]}`;
49
+ }
50
+ function Row({ label, children }) {
51
+ return (_jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { dimColor: true, children: label }) }), _jsx(Text, { children: children })] }));
52
+ }
53
+ export function HealthPanel({ profile, intervalMs }) {
54
+ const { exit } = useApp();
55
+ const [state, setState] = useState({ services: [], refreshedAt: new Date() });
56
+ useInput((input, key) => {
57
+ if (input === "q" || key.escape || (key.ctrl && input === "c"))
58
+ exit();
59
+ });
60
+ useEffect(() => {
61
+ let live = true;
62
+ const tick = async () => {
63
+ // العمليات من الـ CLI نفسه، والبيانات من النواة: كلٌّ يجيب عمّا يملكه.
64
+ const services = await inspectServices(profile).catch(() => []);
65
+ const health = await fetchInternalHealth(profile).catch(() => undefined);
66
+ if (!live)
67
+ return;
68
+ setState({
69
+ services,
70
+ snapshot: health?.ok ? health.data : undefined,
71
+ unreachable: health && !health.ok ? health.reason : undefined,
72
+ refreshedAt: new Date(),
73
+ });
74
+ };
75
+ void tick();
76
+ const timer = setInterval(() => void tick(), intervalMs);
77
+ return () => {
78
+ live = false;
79
+ clearInterval(timer);
80
+ };
81
+ }, [profile, intervalMs]);
82
+ const { snapshot, services, unreachable } = state;
83
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, children: [_jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { bold: true, color: "yellow", children: "FANTASTIC" }), _jsxs(Text, { dimColor: true, children: [profile.kind, " \u00B7 v", snapshot?.version ?? DASH] })] }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: services.length === 0 ? (_jsx(Text, { dimColor: true, children: "no services in this profile" })) : (services.map((service) => (_jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { dimColor: true, children: service.definition.label }) }), _jsx(Text, { color: service.running ? "green" : "red", children: service.running ? "● running" : "○ stopped" }), _jsxs(Text, { dimColor: true, children: [" ", ":", service.definition.port, " ", " ", duration(service.uptimeSeconds)] })] }, service.definition.name)))) }), unreachable ? (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "red", children: ["core unreachable \u2014 ", unreachable] }) })) : (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Row, { label: "Transcode", children: snapshot?.transcode
84
+ ? `${snapshot.transcode.running} / ${snapshot.transcode.capacity} slots queued ${snapshot.transcode.queued}`
85
+ : DASH }), _jsx(Row, { label: "Active streams", children: snapshot?.streams
86
+ ? `${snapshot.streams.active} direct ${snapshot.streams.direct} · hls ${snapshot.streams.transcoded}`
87
+ : DASH }), _jsx(Row, { label: "Library", children: snapshot?.library
88
+ ? `${snapshot.library.titles} titles · ${snapshot.library.sections} sections`
89
+ : DASH }), _jsx(Row, { label: "Downloads", children: dash(snapshot?.activeDownloads) })] })), _jsx(Box, { marginTop: 1, flexDirection: "column", children: (snapshot?.drives ?? []).length === 0 ? (_jsx(Row, { label: "Drives", children: DASH })) : ((snapshot?.drives ?? []).map((drive, index) => (_jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { dimColor: true, children: drive.mountPath ?? DASH }) }), _jsx(Text, { color: drive.present ? "green" : "red", children: drive.present ? "● online " : "○ missing" }), _jsxs(Text, { dimColor: true, children: [" ", bytes(drive.freeBytes), " free \u00B7 ", drive.sectionCount, " section(s)"] })] }, `${drive.label}-${index}`)))) }), _jsx(Box, { marginTop: 1, children: _jsx(Row, { label: "Licence", children: _jsxs(Text, { dimColor: true, children: [DASH, " (not implemented yet)"] }) }) }), _jsxs(Box, { marginTop: 1, justifyContent: "space-between", children: [_jsx(Text, { dimColor: true, children: "q quit" }), _jsxs(Text, { dimColor: true, children: ["refreshed ", state.refreshedAt.toLocaleTimeString()] })] })] }));
90
+ }
91
+ //# sourceMappingURL=health-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-panel.js","sourceRoot":"","sources":["../../src/ui/health-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * AR: أين يُركَّب كل مكوّن. **‎assets‎ غائب عمدًا**: تخطيط الحزمة في ‎layout.ts‎ لا يعرّف له
3
+ * مجلدًا، وتخمينُ مسارٍ يعني فكّ آلاف الملفّات في مكانٍ لا يقرؤه شيء — تحديثٌ يُعلَن
4
+ * ناجحًا ولا يغيّر شيئًا. يُرفَض برسالة صريحة حتى يُعرَّف موضعه.
5
+ * EN: Where each component installs. **`assets` is deliberately absent**: the bundle layout in
6
+ * `layout.ts` defines no directory for it, and guessing a path means unpacking thousands of
7
+ * files somewhere nothing reads — an update reported as successful that changes nothing. It is
8
+ * refused with a clear message until its location is defined.
9
+ */
10
+ export declare const COMPONENT_TARGET: Record<string, string>;
11
+ export type SwapHandle = {
12
+ component: string;
13
+ /** المجلد الحيّ: ‎<root>/core‎. */
14
+ target: string;
15
+ /** الشجرة السابقة بعد إزاحتها: ‎<root>/core.prev-0.20.0‎. */
16
+ previous: string;
17
+ };
18
+ export declare function targetFor(root: string, component: string): string | undefined;
19
+ /**
20
+ * AR: يزيح الشجرة القائمة جانبًا ويعيد مقبضًا يتيح التراجع.
21
+ *
22
+ * **إعادة التسمية على ويندوز تفشل أحيانًا بلا سبب دائم**: مضادّ فيروسات أو مفهرس يمسك
23
+ * ملفًّا لأجزاء من الثانية بعد إيقاف الخدمة. محاولةٌ واحدة كانت ستُفشل تحديثًا سليمًا،
24
+ * فتُعاد المحاولة قليلًا قبل الاستسلام.
25
+ * EN: Moves the existing tree aside and returns a handle that makes rollback possible.
26
+ *
27
+ * **Renaming on Windows fails intermittently for no lasting reason**: an antivirus or the
28
+ * indexer holds a file for fractions of a second after the service stops. A single attempt
29
+ * would fail a perfectly good update, so it retries briefly before giving up.
30
+ */
31
+ export declare function swapAside(root: string, component: string, currentVersion: string): Promise<SwapHandle>;
32
+ /**
33
+ * AR: يفكّ الحزمة في موضع المكوّن.
34
+ *
35
+ * **يرفض أي مدخل يخرج من الوجهة.** أسماء المدخلات داخل الزِب يكتبها من صنعها، و
36
+ * ‎..\..\runtime\node.exe‎ اسمُ مدخلٍ صالح تمامًا — فبدون هذا الحارس تستطيع حزمةٌ موقَّعة
37
+ * أن تكتب خارج مجلدها. التوقيع يثبت أن الحزمة منّا، ولا يثبت أن من بناها لم يخطئ.
38
+ * EN: Unpacks the bundle into the component's place.
39
+ *
40
+ * **Refuses any entry that escapes the destination.** Entry names inside a zip are written by
41
+ * whoever made it, and `..\..\runtime\node.exe` is a perfectly valid one — so without this
42
+ * guard a signed bundle could write outside its directory. The signature proves the bundle is
43
+ * ours; it does not prove whoever built it made no mistake.
44
+ */
45
+ export declare function extractInto(archive: string, destination: string): Promise<number>;
46
+ /** يتراجع: يحذف الجديد ويعيد القديم إلى مكانه. */
47
+ export declare function undoSwap(handle: SwapHandle): Promise<void>;
48
+ /** يثبّت النجاح: تُزال الشجرة السابقة. تُنادى **بعد** فحص الصحة لا قبله. */
49
+ export declare function discardPrevious(handle: SwapHandle): void;
50
+ //# sourceMappingURL=apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/updating/apply.ts"],"names":[],"mappings":"AAgCA;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAInD,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,CAAC,CAYrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmDvF;AAED,kDAAkD;AAClD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAExD"}