@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,56 @@
1
+ import { Args } from "@oclif/core";
2
+ import { BaseCommand } from "../../base-command.js";
3
+ import { CONFIG_KEYS, ConfigError, configPath, setConfigValue } from "../../config/local-config.js";
4
+ import { buildEnvelope, renderJson } from "../../render/json.js";
5
+ import { c, glyph } from "../../render/theme.js";
6
+ import { EXIT } from "../../exit-codes.js";
7
+ // AR: يكتب إعدادًا واحدًا، **بعد رفض التعارض** (017/FR-009). منفذان متطابقان لا يظهران عند الكتابة
8
+ // بل عند الإقلاع التالي، فالرفض هنا يوفّر تشخيصًا لاحقًا.
9
+ // EN: Writes one setting, **after rejecting a collision** (017/FR-009). Two equal ports do not
10
+ // surface at write time but at the next boot, so refusing here saves a diagnosis later.
11
+ export default class ConfigSet extends BaseCommand {
12
+ static description = "Change one CLI setting, refusing a port that collides with another";
13
+ static examples = ["<%= config.bin %> config set corePort 3026", "<%= config.bin %> config set defaultProfile dev"];
14
+ static args = {
15
+ key: Args.string({ description: "Setting name", required: true, options: [...CONFIG_KEYS] }),
16
+ value: Args.string({ description: "New value", required: true }),
17
+ };
18
+ async run() {
19
+ const { args, flags } = await this.parse(ConfigSet);
20
+ const profile = this.loadProfile(flags.profile, true, flags.product);
21
+ const key = args.key;
22
+ try {
23
+ const next = setConfigValue(profile, key, args.value);
24
+ if (flags.json) {
25
+ this.log(renderJson(buildEnvelope({ command: "config set", profile, data: { key, value: next[key], file: configPath(profile) } })));
26
+ return;
27
+ }
28
+ this.log(`${c.ok(glyph.pass)} ${key} = ${c.value(String(next[key]))}`);
29
+ this.log(c.dim(`written to ${configPath(profile)} · restart to apply: fantastic restart`));
30
+ }
31
+ catch (error) {
32
+ if (!(error instanceof ConfigError))
33
+ throw error;
34
+ if (flags.json) {
35
+ this.log(renderJson(buildEnvelope({
36
+ command: "config set",
37
+ profile,
38
+ data: { key, written: false },
39
+ problems: [
40
+ {
41
+ id: "config.set",
42
+ severity: "fail",
43
+ message: error.message,
44
+ remedy: "Pick a free value, or change the conflicting setting first: fantastic config list",
45
+ },
46
+ ],
47
+ })));
48
+ this.exit(EXIT.FAILURE);
49
+ }
50
+ this.log(c.bad(error.message));
51
+ this.log(`${c.accent(glyph.arrow)} See what is taken: fantastic config list`);
52
+ this.exit(EXIT.FAILURE);
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/commands/config/set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { BaseCommand } from "../../base-command.js";
2
+ export default class DbMigrate extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ "dry-run": import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/commands/db/migrate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,WAAW,SAAuC;IAEzD,MAAM,CAAC,QAAQ,WAA8E;IAE7F,MAAM,CAAC,KAAK;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqD3B"}
@@ -0,0 +1,67 @@
1
+ import { Flags } from "@oclif/core";
2
+ import ora from "ora";
3
+ import { BaseCommand } from "../../base-command.js";
4
+ import { runCoreScript } from "../../core-scripts/run.js";
5
+ import { buildEnvelope, renderJson } from "../../render/json.js";
6
+ import { c, glyph, isTty } from "../../render/theme.js";
7
+ import { EXIT } from "../../exit-codes.js";
8
+ // AR: تشغيل الهجرات المعلَّقة من أي مجلد. الإقلاع العادي يشغّلها تلقائيًا؛ هذا للاستخدام الصريح —
9
+ // قبل الإقلاع في ‎setup‎، وبعد تحديثٍ يضيف جداول.
10
+ // EN: Applies pending migrations from any directory. Normal boot runs them automatically; this is for
11
+ // explicit use — before boot in `setup`, and after an update that adds tables.
12
+ export default class DbMigrate extends BaseCommand {
13
+ static description = "Apply pending database migrations";
14
+ static examples = ["<%= config.bin %> db migrate", "<%= config.bin %> db migrate --dry-run"];
15
+ static flags = {
16
+ "dry-run": Flags.boolean({
17
+ description: "Report where migrations would be applied without applying them.",
18
+ default: false,
19
+ }),
20
+ };
21
+ async run() {
22
+ const { flags } = await this.parse(DbMigrate);
23
+ const profile = this.loadProfile(flags.profile, true, flags.product);
24
+ if (flags["dry-run"]) {
25
+ // لا نشغّل شيئًا: نقول أين ستُطبَّق. الوجهة هي ما يخطئ فيه الناس عادةً، لا المحتوى.
26
+ const target = `${profile.dataDir}\\fantastic.db`;
27
+ if (flags.json) {
28
+ this.log(renderJson(buildEnvelope({ command: "db migrate", profile, data: { dryRun: true, target } })));
29
+ return;
30
+ }
31
+ this.log(`${c.dim("would apply migrations to:")} ${c.value(target)}`);
32
+ return;
33
+ }
34
+ const spinner = ora({ isEnabled: isTty && !flags.json, discardStdin: false });
35
+ spinner.start("applying migrations…");
36
+ const result = await runCoreScript(profile, "db:migrate");
37
+ spinner.stop();
38
+ if (flags.json) {
39
+ this.log(renderJson(buildEnvelope({
40
+ command: "db migrate",
41
+ profile,
42
+ data: { applied: result.ok, output: result.output.trim() },
43
+ problems: result.ok
44
+ ? []
45
+ : [
46
+ {
47
+ id: "db.migrate",
48
+ severity: "fail",
49
+ message: "migrations failed",
50
+ remedy: "Run: fantastic doctor — check the database file exists and can be opened.",
51
+ },
52
+ ],
53
+ })));
54
+ if (!result.ok)
55
+ this.exit(EXIT.FAILURE);
56
+ return;
57
+ }
58
+ if (!result.ok) {
59
+ this.log(c.bad("Migrations failed."));
60
+ this.log(result.output.split("\n").slice(-15).join("\n"));
61
+ this.log(`${c.accent(glyph.arrow)} Run: fantastic doctor`);
62
+ this.exit(EXIT.FAILURE);
63
+ }
64
+ this.log(`${c.ok(glyph.pass)} Migrations applied ${c.dim(profile.dataDir)}`);
65
+ }
66
+ }
67
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/commands/db/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from "../base-command.js";
2
+ export default class Dev extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ only: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ };
8
+ private running;
9
+ private stopping;
10
+ run(): Promise<void>;
11
+ /** فحص المنافذ قبل أي إطلاق: رفض يسمّي صاحب المنفذ بدل EADDRINUSE خام. */
12
+ private preflight;
13
+ private startOne;
14
+ /** ينتظر Ctrl+C أو موت خدمة. أيّهما وقع أوّلًا أنهى الجلسة بترتيب معكوس. */
15
+ private waitForInterrupt;
16
+ private reportDeath;
17
+ private shutdown;
18
+ }
19
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAoBjD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW;IAC1C,MAAM,CAAC,WAAW,SAAqE;IAEvF,MAAM,CAAC,QAAQ,WAAuE;IAEtF,MAAM,CAAC,KAAK;;MAOV;IAEF,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAS;IAEnB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC1B,0EAA0E;YAC5D,SAAS;YAWT,QAAQ;IAmDtB,4EAA4E;YAC9D,gBAAgB;IAkB9B,OAAO,CAAC,WAAW;YAQL,QAAQ;CAoBvB"}
@@ -0,0 +1,149 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { BaseCommand } from "../base-command.js";
3
+ import { findPortConflicts } from "../probes/port.probe.js";
4
+ import { probeService } from "../probes/service.probe.js";
5
+ import { launchAttached } from "../supervisor/spawn.js";
6
+ import { waitForReady } from "../supervisor/readiness.js";
7
+ import { terminateTree } from "../supervisor/tree-kill.js";
8
+ import { readProcessIdentity } from "../supervisor/process-identity.js";
9
+ import { removePidRecord, writePidRecord } from "../supervisor/pidfile.js";
10
+ import { renderConflicts, renderUrls } from "../render/boot.render.js";
11
+ import { c, glyph, servicePrefixColor } from "../render/theme.js";
12
+ // AR: وضع التطوير المرتبط بالطرفية. هو ما يستبدل النوافذ الثلاث فعليًا: إقلاع مرتّب، سجلات مدموجة
13
+ // ببادئة ملوّنة، وCtrl+C واحدة توقف الجميع بترتيب معكوس بلا عمليات يتيمة.
14
+ // لا إعادة تشغيل تلقائية هنا عن قصد: حلقة إعادة تشغيل أثناء التطوير تُخفي خطأ صياغة بدل إظهاره.
15
+ // EN: The attached development mode. This is what actually replaces the three windows: an ordered
16
+ // boot, merged logs with a coloured prefix, and one Ctrl+C that stops everything in reverse with
17
+ // no orphans left. There is deliberately no auto-restart: a restart loop during development hides
18
+ // a syntax error instead of surfacing it.
19
+ export default class Dev extends BaseCommand {
20
+ static description = "Run in the foreground with merged logs; Ctrl+C stops everything";
21
+ static examples = ["<%= config.bin %> dev", "<%= config.bin %> dev --only core,live"];
22
+ static flags = {
23
+ only: Flags.string({
24
+ description: "Limit to specific services, comma separated",
25
+ multiple: true,
26
+ delimiter: ",",
27
+ options: ["live", "core", "portal"],
28
+ }),
29
+ };
30
+ running = [];
31
+ stopping = false;
32
+ async run() {
33
+ const { flags } = await this.parse(Dev);
34
+ const profile = this.loadProfile(flags.profile, true, flags.product);
35
+ const only = flags.only;
36
+ const targets = only
37
+ ? profile.services.filter((service) => only.includes(service.name))
38
+ : profile.services;
39
+ this.log("");
40
+ this.log(`${c.dim("profile:")} ${c.value(profile.kind)} ${c.dim("data:")} ${c.value(profile.dataDir)}`);
41
+ if (!(await this.preflight(targets)))
42
+ return;
43
+ for (const definition of targets) {
44
+ const ready = await this.startOne(profile, definition);
45
+ if (!ready) {
46
+ await this.shutdown(profile);
47
+ this.exit(1);
48
+ return;
49
+ }
50
+ }
51
+ this.log("");
52
+ this.log(renderUrls(profile));
53
+ this.log("");
54
+ this.log(c.dim("— Ctrl+C to stop everything —"));
55
+ this.log("");
56
+ await this.waitForInterrupt(profile);
57
+ }
58
+ /** فحص المنافذ قبل أي إطلاق: رفض يسمّي صاحب المنفذ بدل EADDRINUSE خام. */
59
+ async preflight(targets) {
60
+ const conflicts = await findPortConflicts(targets.map((service) => service.port));
61
+ if (conflicts.length === 0)
62
+ return true;
63
+ this.log("");
64
+ this.log(renderConflicts(conflicts));
65
+ this.log("");
66
+ this.exit(3);
67
+ return false;
68
+ }
69
+ async startOne(profile, definition) {
70
+ this.log(`${c.dim(glyph.step)} starting ${definition.label}…`);
71
+ const attached = launchAttached(profile, definition, {
72
+ onLine: (service, line) => {
73
+ this.log(`${servicePrefixColor[service.name](`[${service.name.padEnd(6)}]`)} ${line}`);
74
+ },
75
+ });
76
+ this.running.push(attached);
77
+ // العملية المرتبطة تحيا مع الـ CLI؛ نكتب سجلّها ليجدها ‎status‎ من طرفية أخرى.
78
+ if (attached.pid) {
79
+ const identity = await readProcessIdentity(attached.pid);
80
+ writePidRecord(profile, {
81
+ service: definition.name,
82
+ pid: attached.pid,
83
+ port: definition.port,
84
+ profile: profile.kind,
85
+ startedAt: identity?.startedAt ?? "",
86
+ commandLine: identity?.commandLine ?? "",
87
+ writtenAt: new Date().toISOString(),
88
+ });
89
+ }
90
+ let exited = false;
91
+ void attached.child.then(() => {
92
+ exited = true;
93
+ }, () => {
94
+ exited = true;
95
+ });
96
+ const outcome = await waitForReady(definition, {
97
+ logDir: profile.logDir,
98
+ stillRunning: async () => !exited,
99
+ });
100
+ if (!outcome.ready) {
101
+ this.log("");
102
+ this.log(` ${c.bad(glyph.bad)} ${definition.label}: ${c.bad(outcome.reason ?? "failed to start")}`);
103
+ for (const line of outcome.tail ?? [])
104
+ this.log(c.dim(` │ ${line}`));
105
+ return false;
106
+ }
107
+ this.log(` ${c.ok(glyph.ok)} ${definition.label} ${c.dim(`${definition.host}:${definition.port}`)}`);
108
+ return true;
109
+ }
110
+ /** ينتظر Ctrl+C أو موت خدمة. أيّهما وقع أوّلًا أنهى الجلسة بترتيب معكوس. */
111
+ async waitForInterrupt(profile) {
112
+ await new Promise((resolvePromise) => {
113
+ const finish = () => {
114
+ void this.shutdown(profile).then(resolvePromise);
115
+ };
116
+ process.once("SIGINT", finish);
117
+ process.once("SIGTERM", finish);
118
+ for (const service of this.running) {
119
+ void service.child.then(() => this.reportDeath(service, finish), () => this.reportDeath(service, finish));
120
+ }
121
+ });
122
+ }
123
+ reportDeath(service, finish) {
124
+ if (this.stopping)
125
+ return;
126
+ this.log("");
127
+ this.log(c.bad(`${glyph.bad} ${service.definition.label} exited on its own. Shutting down.`));
128
+ finish();
129
+ }
130
+ async shutdown(profile) {
131
+ if (this.stopping)
132
+ return;
133
+ this.stopping = true;
134
+ this.log("");
135
+ this.log(c.dim("stopping services…"));
136
+ // بترتيب معكوس: نُسقط الواجهة أولًا فلا يصل طلب إلى خدمة تُغلَق تحته.
137
+ for (const service of [...this.running].reverse()) {
138
+ if (service.pid)
139
+ await terminateTree(service.pid);
140
+ service.close();
141
+ removePidRecord(profile, service.definition.name);
142
+ const probe = await probeService(service.definition, 1_000);
143
+ const mark = probe.reachable ? c.warn(glyph.warn) : c.ok(glyph.ok);
144
+ this.log(` ${mark} ${service.definition.label}`);
145
+ }
146
+ this.log("");
147
+ }
148
+ }
149
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { BaseCommand } from "../base-command.js";
2
+ export default class Doctor extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static help: string;
6
+ static flags: {
7
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ };
9
+ run(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAkB,MAAM,oBAAoB,CAAC;AAajE,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,SAAqE;IAEvF,MAAM,CAAC,QAAQ,WAAyG;IAGxH,MAAM,CAAC,IAAI,SAAkB;IAE7B,MAAM,CAAC,KAAK;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyD3B"}
@@ -0,0 +1,75 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { BaseCommand, EXIT_CODE_HELP } from "../base-command.js";
3
+ import { runDoctor } from "../doctor/registry.js";
4
+ import { doctorJsonData, doctorProblems, renderDoctorReport } from "../render/doctor.render.js";
5
+ import { buildEnvelope, renderJson } from "../render/json.js";
6
+ import { renderBrand } from "../render/brand.js";
7
+ import { c } from "../render/theme.js";
8
+ import { latestPublished } from "../updating/self.js";
9
+ import { EXIT } from "../exit-codes.js";
10
+ // AR: التشخيص. أمر رقيق: يشغّل السجلّ ويسلّم النتيجة إلى العارضة، ولا يحسب شيئًا بنفسه.
11
+ // EN: Diagnosis. A thin command: it runs the registry and hands the result to the renderer,
12
+ // computing nothing itself.
13
+ export default class Doctor extends BaseCommand {
14
+ static description = "Check the machine and report every problem with a suggested fix";
15
+ static examples = ["<%= config.bin %> doctor", "<%= config.bin %> doctor --json", "<%= config.bin %> doctor --verbose"];
16
+ // العقد يُعرض حيث يُقرأ: ‎doctor‎ هو الأمر الذي تُستدعى رموزه في سكربتات البوّابة أكثر من غيره.
17
+ static help = EXIT_CODE_HELP;
18
+ static flags = {
19
+ verbose: Flags.boolean({
20
+ description: "Show the evidence behind every check, not only the failing ones.",
21
+ default: false,
22
+ }),
23
+ };
24
+ async run() {
25
+ const { flags } = await this.parse(Doctor);
26
+ const profile = this.loadProfile(flags.profile, false, flags.product);
27
+ const report = await runDoctor({ profile });
28
+ if (flags.json) {
29
+ this.log(renderJson(buildEnvelope({
30
+ command: "doctor",
31
+ profile,
32
+ data: doctorJsonData(report),
33
+ problems: doctorProblems(report),
34
+ })));
35
+ if (report.blocking > 0)
36
+ this.exit(EXIT.DIAGNOSTIC_BLOCKED);
37
+ return;
38
+ }
39
+ const brand = renderBrand({ profile: profile.kind, root: profile.root });
40
+ if (brand)
41
+ this.log(brand);
42
+ this.log(renderDoctorReport(report, flags.verbose));
43
+ this.log("");
44
+ // AR: **إعلانٌ عابر عن نسخةٍ أحدث من الواجهة** (٠٢٦/FR-«يُعلَن بلا إلحاح»).
45
+ //
46
+ // موضعه ‎doctor‎ وحده لا كلّ أمر: هذا هو الأمر الذي يُنادى حين يبحث الفنّي عن خلل، وهو
47
+ // الموضع الذي يُقرأ فيه سطرٌ إضافيّ. وإعلانٌ في كل أمرٍ يصير ضجيجًا يُتخطّى بالعين.
48
+ //
49
+ // **ولا يُعطّل شيئًا ولا يغيّر رمز الخروج.** السؤال بمهلة ثانيتين، وفشله صامتٌ تمامًا:
50
+ // جهازٌ في استراحةٍ بلا إنترنت يجب أن يشخّص نفسه كاملًا، وتحديثٌ لم يُسأل عنه ليس عطلًا.
51
+ //
52
+ // ويُطبَع **بعد** التقرير لا قبله: ما جاء الفنّي لأجله يسبق ما لم يطلبه.
53
+ // EN: **A passing notice that a newer CLI exists** (026).
54
+ //
55
+ // It belongs to `doctor` alone rather than to every command: this is the command run when a
56
+ // technician is looking for something wrong, and it is where an extra line gets read. A
57
+ // notice on every command becomes noise the eye skips.
58
+ //
59
+ // **It blocks nothing and changes no exit code.** The question carries a two-second timeout
60
+ // and fails in complete silence: an appliance in a rest-house with no internet must diagnose
61
+ // itself fully, and an update nobody asked about is not a fault.
62
+ //
63
+ // And it prints **after** the report, never before: what the technician came for precedes
64
+ // what they did not ask for.
65
+ const published = await latestPublished();
66
+ if (published?.newer) {
67
+ this.log("");
68
+ this.log(c.dim(`a newer CLI is published: ${published.version} — fantastic self-update`));
69
+ }
70
+ // رمز مميّز عن الفشل العام: التشخيص **نجح** ووجد مشكلة، وهما حالتان مختلفتان لسكربت البوّابة.
71
+ if (report.blocking > 0)
72
+ this.exit(EXIT.DIAGNOSTIC_BLOCKED);
73
+ }
74
+ }
75
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from "../base-command.js";
2
+ export default class Health extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ interval: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
7
+ once: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ };
9
+ run(): Promise<void>;
10
+ private printSnapshot;
11
+ }
12
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAiBjD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,SAA6E;IAE/F,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;MAGV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAgE1B,OAAO,CAAC,aAAa;CAwCtB"}
@@ -0,0 +1,109 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { BaseCommand } from "../base-command.js";
3
+ import { fetchInternalHealth, fetchLicenseStatus } from "../probes/internal.client.js";
4
+ import { renderLicenceCard } from "../render/licence.render.js";
5
+ import { inspectServices } from "../supervisor/inspect.js";
6
+ import { buildEnvelope, renderJson } from "../render/json.js";
7
+ import { c, glyph, isTty } from "../render/theme.js";
8
+ import { EXIT } from "../exit-codes.js";
9
+ // AR: لوحة الصحة. ‎Ink‎ يُستورَد **كسولًا** داخل المسار الذي يحتاجه وحده: هو أثقل اعتمادية في
10
+ // الـ CLI (يجرّ React)، وتحميله عند كل ‎status‎ أو ‎logs‎ ثمنٌ بلا مقابل.
11
+ // خارج الطرفية أو مع ‎--once‎ أو ‎--json‎ لا لوحة أصلًا: لقطة واحدة تُطبع وتنتهي.
12
+ // EN: The health panel. Ink is imported **lazily**, inside the one path that needs it: it is the
13
+ // heaviest dependency in the CLI (it pulls React), and loading it on every `status` or `logs` is
14
+ // a cost with no return.
15
+ // Outside a terminal, or with --once or --json, there is no panel at all: one snapshot prints
16
+ // and the command ends.
17
+ export default class Health extends BaseCommand {
18
+ static description = "Show a live panel of services, transcoding, streams, library and drives";
19
+ static examples = [
20
+ "<%= config.bin %> health",
21
+ "<%= config.bin %> health --once",
22
+ "<%= config.bin %> health --json",
23
+ ];
24
+ static flags = {
25
+ interval: Flags.integer({ description: "Seconds between refreshes.", default: 2 }),
26
+ once: Flags.boolean({ description: "Print one snapshot instead of a live panel.", default: false }),
27
+ };
28
+ async run() {
29
+ const { flags } = await this.parse(Health);
30
+ const profile = this.loadProfile(flags.profile, false, flags.product);
31
+ // مسار اللقطة الواحدة: يخدم ‎--json‎ و‎--once‎ وأي مخرَج غير طرفيّ.
32
+ if (flags.json || flags.once || !isTty) {
33
+ const [services, health, licence] = await Promise.all([
34
+ inspectServices(profile),
35
+ fetchInternalHealth(profile),
36
+ fetchLicenseStatus(profile),
37
+ ]);
38
+ const device = licence.ok ? licence.data : null;
39
+ if (flags.json) {
40
+ this.log(renderJson(buildEnvelope({
41
+ command: "health",
42
+ profile,
43
+ data: {
44
+ services: services.map((state) => ({
45
+ name: state.definition.name,
46
+ running: state.running,
47
+ port: state.definition.port,
48
+ uptimeSeconds: state.uptimeSeconds ?? null,
49
+ })),
50
+ snapshot: health.ok ? health.data : null,
51
+ licence: device,
52
+ },
53
+ problems: health.ok
54
+ ? []
55
+ : [
56
+ {
57
+ id: "core.unreachable",
58
+ severity: "fail",
59
+ message: `the core is not reachable: ${health.reason}`,
60
+ remedy: "Start it: fantastic start",
61
+ },
62
+ ],
63
+ })));
64
+ if (!health.ok)
65
+ this.exit(EXIT.UNREACHABLE);
66
+ return;
67
+ }
68
+ this.printSnapshot(services, health, device);
69
+ if (!health.ok)
70
+ this.exit(EXIT.UNREACHABLE);
71
+ return;
72
+ }
73
+ const [{ render }, React, { HealthPanel }] = await Promise.all([
74
+ import("ink"),
75
+ import("react"),
76
+ import("../ui/health-panel.js"),
77
+ ]);
78
+ const instance = render(React.createElement(HealthPanel, { profile, intervalMs: Math.max(1, flags.interval) * 1_000 }));
79
+ await instance.waitUntilExit();
80
+ }
81
+ printSnapshot(services, health, device) {
82
+ this.log("");
83
+ for (const state of services) {
84
+ const mark = state.running ? c.ok("●") : c.bad("○");
85
+ this.log(` ${mark} ${state.definition.label.padEnd(16)} ${c.dim(`:${state.definition.port}`)}`);
86
+ }
87
+ if (!health.ok) {
88
+ this.log("");
89
+ this.log(c.bad(`core unreachable — ${health.reason}`));
90
+ this.log(`${c.accent(glyph.arrow)} Start it: fantastic start`);
91
+ return;
92
+ }
93
+ const snapshot = health.data;
94
+ const dash = c.dim("—");
95
+ this.log("");
96
+ this.log(` ${c.dim("Transcode".padEnd(16))} ${snapshot.transcode ? `${snapshot.transcode.running} / ${snapshot.transcode.capacity}` : dash}`);
97
+ this.log(` ${c.dim("Active streams".padEnd(16))} ${snapshot.streams ? snapshot.streams.active : dash}`);
98
+ this.log(` ${c.dim("Library".padEnd(16))} ${snapshot.library ? `${snapshot.library.titles} titles` : dash}`);
99
+ for (const drive of snapshot.drives ?? []) {
100
+ const mark = drive.present ? c.ok("●") : c.bad("○");
101
+ this.log(` ${mark} ${(drive.mountPath ?? "?").padEnd(15)} ${c.dim(drive.label || "(no label)")}`);
102
+ }
103
+ // كتلة الرخصة كاملة (P4.4): الحالة والانتهاء والسقف وبصمة الجهاز.
104
+ this.log("");
105
+ this.log(renderLicenceCard(device));
106
+ this.log("");
107
+ }
108
+ }
109
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"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"}