@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,55 @@
1
+ import { Flags } from "@oclif/core";
2
+ import Table from "cli-table3";
3
+ import { BaseCommand } from "../../base-command.js";
4
+ import { getInternal } from "../../probes/internal.client.js";
5
+ import { INTERNAL_PATHS } from "../../probes/internal-paths.js";
6
+ import { buildEnvelope, renderJson } from "../../render/json.js";
7
+ import { NOT_REPORTED, c } from "../../render/theme.js";
8
+ export default class LiveChannels extends BaseCommand {
9
+ static description = "List the live channels the core knows about";
10
+ static examples = ["<%= config.bin %> live channels", "<%= config.bin %> live channels --json"];
11
+ static flags = {
12
+ provider: Flags.string({ description: "Only channels from this provider." }),
13
+ };
14
+ async run() {
15
+ const { flags } = await this.parse(LiveChannels);
16
+ const profile = this.loadProfile(flags.profile, false, flags.product);
17
+ const result = await getInternal(profile, INTERNAL_PATHS.LIVE_CHANNELS);
18
+ if (!result.ok)
19
+ this.coreUnreachable("live channels", profile, result.reason, flags.json);
20
+ const channels = flags.provider
21
+ ? result.data.filter((channel) => channel.providerName === flags.provider)
22
+ : result.data;
23
+ if (flags.json) {
24
+ this.log(renderJson(buildEnvelope({ command: "live channels", profile, data: { channels } })));
25
+ return;
26
+ }
27
+ if (channels.length === 0) {
28
+ this.log("");
29
+ this.log(c.dim(flags.provider ? `no channels from "${flags.provider}".` : "no channels configured."));
30
+ this.log("");
31
+ return;
32
+ }
33
+ const table = new Table({
34
+ head: ["#", "Channel", "Category", "Provider"].map((header) => c.dim(header)),
35
+ style: { head: [], border: [], "padding-left": 1, "padding-right": 1 },
36
+ });
37
+ for (const channel of channels.slice(0, 60)) {
38
+ table.push([
39
+ String(channel.id),
40
+ channel.name ?? NOT_REPORTED,
41
+ channel.category ?? c.dim(NOT_REPORTED),
42
+ channel.providerName ?? c.dim(NOT_REPORTED),
43
+ ]);
44
+ }
45
+ this.log("");
46
+ this.log(table.toString());
47
+ // القصّ يُعلَن ولا يُخفى: قائمة مبتورة صامتة تُقرأ على أنها كل ما يوجد.
48
+ if (channels.length > 60)
49
+ this.log(c.dim(`showing 60 of ${channels.length} — use --json for all`));
50
+ else
51
+ this.log(c.dim(`${channels.length} channel(s)`));
52
+ this.log("");
53
+ }
54
+ }
55
+ //# sourceMappingURL=channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../../src/commands/live/channels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { BaseCommand } from "../../base-command.js";
2
+ export default class LiveTest extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ source: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<void>;
12
+ /** من ملفّ التشغيل: ‎runtime\ffprobe.exe‎ على الجهاز، وحزمة المُثبِّت في المستودع. */
13
+ private ffprobePath;
14
+ }
15
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/commands/live/test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAwBpD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAC/C,MAAM,CAAC,WAAW,SAA+E;IAEjG,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;MAEV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAqG1B,sFAAsF;IACtF,OAAO,CAAC,WAAW;CAOpB"}
@@ -0,0 +1,116 @@
1
+ import { Args, Flags } from "@oclif/core";
2
+ import { execa } from "execa";
3
+ import ora from "ora";
4
+ import { BaseCommand } from "../../base-command.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
+ //
10
+ // يستعمل ‎ffprobe‎ المُجمَّع مباشرةً، وهذا استثناء مقصود من قاعدة «النواة تقرّر»: هذا ليس سؤالًا
11
+ // عن بيانات النظام بل عن **رابط لم يُضَف بعد** ولا تعرفه النواة أصلًا. سؤالها عنه سيتطلّب أن
12
+ // تحفظه أوّلًا، وهو عكس الغرض — أن يُختبَر المصدر قبل الالتزام به.
13
+ //
14
+ // ومسار ‎ffprobe‎ يأتي من ملفّ التشغيل نفسه، فيصحّ في المستودع وفي الجهاز المركّب بلا فرق.
15
+ // EN: Probes a live source **before** it is added.
16
+ //
17
+ // It uses the bundled ffprobe directly, and that is a deliberate exception to the "core decides"
18
+ // rule: this is not a question about system data but about **a URL that has not been added yet**
19
+ // and that the core knows nothing about. Asking the core would require saving it first, which is
20
+ // the opposite of the point — testing a source before committing to it.
21
+ //
22
+ // The ffprobe path comes from the profile, so it is correct in the repository and on an
23
+ // installed appliance alike.
24
+ const DEFAULT_TIMEOUT_SECONDS = 15;
25
+ export default class LiveTest extends BaseCommand {
26
+ static description = "Probe a live source before adding it: does it answer, and with what codec";
27
+ static examples = [
28
+ "<%= config.bin %> live test http://example.com/stream.m3u8",
29
+ "<%= config.bin %> live test <url> --timeout 30",
30
+ ];
31
+ static args = {
32
+ source: Args.string({ description: "Stream URL to probe", required: true }),
33
+ };
34
+ static flags = {
35
+ timeout: Flags.integer({ description: "Seconds to wait.", default: DEFAULT_TIMEOUT_SECONDS }),
36
+ };
37
+ async run() {
38
+ const { args, flags } = await this.parse(LiveTest);
39
+ const profile = this.loadProfile(flags.profile, false, flags.product);
40
+ const ffprobe = this.ffprobePath(profile);
41
+ const spinner = ora({ isEnabled: isTty && !flags.json, discardStdin: false });
42
+ spinner.start("probing the source…");
43
+ const started = Date.now();
44
+ const result = await execa(ffprobe, [
45
+ "-v",
46
+ "error",
47
+ "-print_format",
48
+ "json",
49
+ "-show_streams",
50
+ "-show_format",
51
+ "-analyzeduration",
52
+ "3000000",
53
+ args.source,
54
+ ], { timeout: Math.max(1, flags.timeout) * 1_000, reject: false });
55
+ spinner.stop();
56
+ const elapsedMs = Date.now() - started;
57
+ const ok = result.exitCode === 0 && result.stdout.trim().length > 0;
58
+ if (!ok) {
59
+ const reason = (result.stderr || "the source did not answer").split("\n")[0] ?? "unknown";
60
+ if (flags.json) {
61
+ this.log(renderJson(buildEnvelope({
62
+ command: "live test",
63
+ profile,
64
+ data: { source: args.source, reachable: false, elapsedMs },
65
+ problems: [
66
+ {
67
+ id: "live.source",
68
+ severity: "fail",
69
+ message: reason,
70
+ remedy: "Check the URL and any credentials it needs, then try a longer --timeout.",
71
+ },
72
+ ],
73
+ })));
74
+ this.exit(EXIT.FAILURE);
75
+ }
76
+ this.log("");
77
+ this.log(c.bad(`The source did not answer — ${reason}`));
78
+ this.log(`${c.accent(glyph.arrow)} Check the URL and its credentials, then retry with a longer --timeout.`);
79
+ this.log("");
80
+ this.exit(EXIT.FAILURE);
81
+ }
82
+ const probe = JSON.parse(result.stdout);
83
+ const video = probe.streams?.find((stream) => stream.codec_type === "video");
84
+ const audio = probe.streams?.find((stream) => stream.codec_type === "audio");
85
+ if (flags.json) {
86
+ this.log(renderJson(buildEnvelope({
87
+ command: "live test",
88
+ profile,
89
+ data: {
90
+ source: args.source,
91
+ reachable: true,
92
+ elapsedMs,
93
+ container: probe.format?.format_name ?? null,
94
+ video: video ? { codec: video.codec_name, width: video.width, height: video.height } : null,
95
+ audio: audio ? { codec: audio.codec_name } : null,
96
+ },
97
+ })));
98
+ return;
99
+ }
100
+ this.log("");
101
+ this.log(`${c.ok(glyph.pass)} The source answered in ${(elapsedMs / 1000).toFixed(1)}s`);
102
+ this.log(` ${c.dim("Container".padEnd(14))} ${probe.format?.format_name ?? c.dim("—")}`);
103
+ this.log(` ${c.dim("Video".padEnd(14))} ${video ? `${video.codec_name} ${video.width}×${video.height}` : c.dim("none")}`);
104
+ this.log(` ${c.dim("Audio".padEnd(14))} ${audio ? audio.codec_name : c.dim("none")}`);
105
+ this.log("");
106
+ }
107
+ /** من ملفّ التشغيل: ‎runtime\ffprobe.exe‎ على الجهاز، وحزمة المُثبِّت في المستودع. */
108
+ ffprobePath(profile) {
109
+ const core = profile.services.find((service) => service.name === "core");
110
+ const fromProfile = core?.env.FFPROBE_PATH;
111
+ if (fromProfile)
112
+ return fromProfile;
113
+ return `${profile.root}\\node_modules\\@ffprobe-installer\\win32-x64\\ffprobe.exe`;
114
+ }
115
+ }
116
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/commands/live/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { BaseCommand } from "../base-command.js";
2
+ export default class Logs extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ service: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ follow: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ lines: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ run(): Promise<void>;
13
+ private printHistory;
14
+ private follow;
15
+ }
16
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAgBjD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW;IAC3C,MAAM,CAAC,WAAW,SAA4C;IAE9D,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI;;MAMT;IAEF,MAAM,CAAC,KAAK;;;MAWV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB1B,OAAO,CAAC,YAAY;YAYN,MAAM;CAiBrB"}
@@ -0,0 +1,77 @@
1
+ import { Args, Flags } from "@oclif/core";
2
+ import { BaseCommand } from "../base-command.js";
3
+ import { followLogs, readTail } from "../logs/tail.js";
4
+ import { c, servicePrefixColor } from "../render/theme.js";
5
+ // AR: عرض السجلات. تحلّ المصيدة السادسة: النواة تكتب على stdout و‎LOG_DIR‎ بلا مصرف ملفات موصول به،
6
+ // فما كان هناك مكان واحد تُقرأ منه سجلات الخدمات الثلاث.
7
+ // EN: Log viewing. It solves the sixth trap: the core writes to stdout and LOG_DIR has no file
8
+ // transport wired to it, so there was no single place to read all three services' logs.
9
+ const SERVICES = ["live", "core", "portal"];
10
+ function prefix(service) {
11
+ return servicePrefixColor[service](`[${service.padEnd(6)}]`);
12
+ }
13
+ export default class Logs extends BaseCommand {
14
+ static description = "Show service logs, or follow them live";
15
+ static examples = [
16
+ "<%= config.bin %> logs",
17
+ "<%= config.bin %> logs core -n 100",
18
+ "<%= config.bin %> logs --follow",
19
+ ];
20
+ static args = {
21
+ service: Args.string({
22
+ description: "A single service. Leave empty to show all.",
23
+ options: SERVICES,
24
+ required: false,
25
+ }),
26
+ };
27
+ static flags = {
28
+ follow: Flags.boolean({
29
+ char: "f",
30
+ description: "Follow new lines until you stop with Ctrl+C",
31
+ default: false,
32
+ }),
33
+ lines: Flags.integer({
34
+ char: "n",
35
+ description: "How many trailing lines to show",
36
+ default: 40,
37
+ }),
38
+ };
39
+ async run() {
40
+ const { args, flags } = await this.parse(Logs);
41
+ const profile = this.loadProfile(flags.profile, false, flags.product);
42
+ const available = profile.services.map((service) => service.name);
43
+ const targets = args.service ? [args.service] : available;
44
+ this.printHistory(profile.logDir, targets, flags.lines);
45
+ if (!flags.follow)
46
+ return;
47
+ this.log("");
48
+ this.log(c.dim("— following. Ctrl+C to exit —"));
49
+ await this.follow(profile.logDir, targets);
50
+ }
51
+ printHistory(logDir, targets, lines) {
52
+ for (const service of targets) {
53
+ const history = readTail(logDir, service, lines);
54
+ // التاريخ مقسّم بالخدمة لا مدموجًا: أسطر Vite بلا طوابع زمنية، فالدمج التاريخي سيكون ادّعاء.
55
+ this.log("");
56
+ this.log(`${prefix(service)} ${c.dim(history.length === 0 ? "no log yet" : `last ${history.length} lines`)}`);
57
+ for (const line of history)
58
+ this.log(` ${line}`);
59
+ }
60
+ }
61
+ async follow(logDir, targets) {
62
+ return new Promise((resolvePromise) => {
63
+ const follower = followLogs({
64
+ logDir,
65
+ services: targets,
66
+ onLine: (service, line) => this.log(`${prefix(service)} ${line}`),
67
+ });
68
+ const finish = () => {
69
+ follower.stop();
70
+ resolvePromise();
71
+ };
72
+ process.once("SIGINT", finish);
73
+ process.once("SIGTERM", finish);
74
+ });
75
+ }
76
+ }
77
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { BaseCommand } from "../base-command.js";
2
+ export default class MigrateCli extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ root: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ };
9
+ run(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=migrate-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-cli.d.ts","sourceRoot":"","sources":["../../src/commands/migrate-cli.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAsCjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,WAAW,SAA+D;IAEjF,MAAM,CAAC,QAAQ,WAA4E;IAE3F,MAAM,CAAC,KAAK;;;MAGV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+E3B"}
@@ -0,0 +1,116 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { Flags } from "@oclif/core";
4
+ import { confirm } from "@inquirer/prompts";
5
+ import { BaseCommand } from "../base-command.js";
6
+ import { BUNDLE_DIRS, SHIM_FILES } from "../packaging/layout.js";
7
+ import { unregisterFromMachinePath } from "../packaging/machine-path.js";
8
+ import { inspectRoot, readRegistry, recordInstall } from "../registry/local-registry.js";
9
+ import { findApplianceRoot } from "../profiles/resolve.js";
10
+ import { buildEnvelope, renderJson } from "../render/json.js";
11
+ import { c, glyph, isTty } from "../render/theme.js";
12
+ import { EXIT } from "../exit-codes.js";
13
+ // AR: يسوّي جهازًا رُكِّب قبل ٠٢٦ (FR-027).
14
+ //
15
+ // **لماذا يلزم أمرٌ لهذا أصلًا؟** الأجهزة المثبَّتة اليوم تحمل أثرين كتبهما تثبيتٌ سابق:
16
+ // مُدخَلًا في PATH الآلة يشير إلى ‎bin\‎، وشيمةً كانت طريق الفنّي إلى الواجهة الكاملة. وقد صار
17
+ // الفنّي يصل إلى الواجهة من ‎npm‎، وصارت الشيمة تصل إلى **المُشرِف** الذي لا يقبل أوامر.
18
+ //
19
+ // فيكتب الفنّي ‎fantastic status‎ على جهازٍ قديم، ويسبق مُدخَل PATH الحزمةَ العالمية، فيصل إلى
20
+ // المُشرِف — الذي يتجاهل ‎status‎ ويبدأ الإشراف. **عطلٌ يبدو تعليقًا**: لا رسالة خطأ، ولا شيء
21
+ // معطوب، والفنّي ينتظر جوابًا لن يأتي.
22
+ //
23
+ // **ولا يُلمس النظام نفسه.** لا خدمة تتوقّف، ولا ملفّ يُحذف من التثبيت، ولا مهمّة إقلاع
24
+ // تُمَسّ — تلك تبقى تنادي الشيمة بمسارٍ مطلق كما كانت. ما يُنظَّف هو **مُدخَل PATH وحده**،
25
+ // وهو الشيء الوحيد الذي صار كذبًا.
26
+ // EN: Settles an appliance installed before 026 (FR-027).
27
+ //
28
+ // **Why does this need a command at all?** Appliances installed today carry two traces written by
29
+ // an earlier install: an entry on the machine's PATH pointing at `bin\`, and a shim that used to
30
+ // be the technician's route to the full CLI. The technician now reaches the CLI from npm, and the
31
+ // shim now reaches **the supervisor**, which takes no commands.
32
+ //
33
+ // So a technician types `fantastic status` on an older machine, the PATH entry precedes the
34
+ // global package, and they land on the supervisor — which ignores `status` and starts
35
+ // supervising. **A fault that looks like a hang**: no error message, nothing broken, and a
36
+ // technician waiting for an answer that will never come.
37
+ //
38
+ // **And the system itself is not touched.** No service stops, no file is removed from the
39
+ // installation, and the boot task is left alone — it goes on calling the shim by an absolute path
40
+ // as it always did. What is cleaned is **the PATH entry alone**, the one thing that became a lie.
41
+ export default class MigrateCli extends BaseCommand {
42
+ static description = "Settle an appliance installed before the CLI moved to npm";
43
+ static examples = ["<%= config.bin %> migrate-cli", "<%= config.bin %> migrate-cli --yes"];
44
+ static flags = {
45
+ yes: Flags.boolean({ description: "Do not ask for confirmation.", default: false }),
46
+ root: Flags.string({ description: "Installation location. Detected when omitted." }),
47
+ };
48
+ async run() {
49
+ const { flags } = await this.parse(MigrateCli);
50
+ const root = flags.root ?? findApplianceRoot();
51
+ if (!root || !existsSync(root)) {
52
+ this.log("");
53
+ this.log(c.dim("No installed appliance found on this machine — nothing to settle."));
54
+ this.log("");
55
+ return;
56
+ }
57
+ const binDir = join(root, BUNDLE_DIRS.bin);
58
+ const shim = join(binDir, SHIM_FILES.command);
59
+ const registered = readRegistry().products.some((row) => row.root.toLowerCase() === root.toLowerCase());
60
+ if (flags.json) {
61
+ this.log(renderJson(buildEnvelope({ command: "migrate-cli", data: { root, binDir, shim: existsSync(shim), registered } })));
62
+ if (!flags.yes)
63
+ return;
64
+ }
65
+ else {
66
+ this.log("");
67
+ this.log(`${c.dim("appliance:")} ${c.value(root)}`);
68
+ this.log(`${c.dim("will clear:")} the machine PATH entry for ${binDir}`);
69
+ if (!registered)
70
+ this.log(`${c.dim("will record:")} this appliance in the machine's product registry`);
71
+ this.log(c.dim("nothing is stopped, and no file inside the installation is removed."));
72
+ this.log("");
73
+ }
74
+ if (!flags.yes && isTty) {
75
+ const proceed = await confirm({ message: `Settle the appliance at ${root}?`, default: true });
76
+ if (!proceed) {
77
+ this.log(c.dim("cancelled — nothing was changed."));
78
+ return;
79
+ }
80
+ }
81
+ const pathChange = await unregisterFromMachinePath(binDir, join(root, BUNDLE_DIRS.logs));
82
+ this.log(` ${pathChange.changed ? c.ok(glyph.pass) : c.dim("·")} PATH ${c.dim(pathChange.detail)}`);
83
+ // AR: **ويُسجَّل الجهاز إن لم يكن مسجَّلًا.** ثُبِّت قبل أن يوجد السجلّ، فبقيت الواجهة تجده
84
+ // بالمسح وحده. وتسجيله هنا يجعله يُرى في ‎list‎ ويُسمّى في ‎--product‎ كأيّ تثبيتٍ جديد.
85
+ // EN: **And the appliance is recorded if it was not.** It was installed before the registry
86
+ // existed, so the CLI found it by scanning alone. Recording it here makes it visible in
87
+ // `list` and nameable with `--product`, like any new installation.
88
+ let recorded = false;
89
+ if (!registered) {
90
+ const product = inspectRoot(root);
91
+ if (product) {
92
+ try {
93
+ recordInstall(product);
94
+ recorded = true;
95
+ }
96
+ catch {
97
+ recorded = false;
98
+ }
99
+ }
100
+ }
101
+ if (!registered) {
102
+ this.log(` ${recorded ? c.ok(glyph.pass) : c.dim("·")} Registry ${c.dim(recorded ? "recorded" : "not written — it will still be found by scanning")}`);
103
+ }
104
+ this.log("");
105
+ this.log(c.ok(` ${glyph.pass} settled. "fantastic" now reaches the global package from any folder.`));
106
+ this.log(c.dim(" verify it: fantastic doctor"));
107
+ this.log("");
108
+ if (!pathChange.changed && !recorded && registered) {
109
+ // لا شيء تغيّر لأن لا شيء كان يحتاج تغييرًا: يُقال صراحةً بدل «تمّ» التي توحي بعملٍ لم يقع.
110
+ this.log(c.dim(" (nothing needed changing — this appliance was already settled.)"));
111
+ this.log("");
112
+ this.exit(EXIT.OK);
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=migrate-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-cli.js","sourceRoot":"","sources":["../../src/commands/migrate-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from "../../base-command.js";
2
+ export default class OwnerReset extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../../src/commands/owner/reset.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAiBpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,WAAW,SAA+D;IAEjF,MAAM,CAAC,QAAQ,WAAqC;IAE9C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8D3B"}
@@ -0,0 +1,74 @@
1
+ import boxen from "boxen";
2
+ import ora from "ora";
3
+ import { BaseCommand } from "../../base-command.js";
4
+ import { runCoreScript, extractOwnerCredentials } 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
+ // استعادة بالبريد — فلا شيء آخر يفتحه.
10
+ //
11
+ // **لا تُطبَع كلمة المرور في ‎--json‎.** المخرَج الآلي يُوجَّه إلى ملف أو سجلّ في العادة، وكتابة
12
+ // بيانات دخول هناك تُخرجها من الشاشة إلى القرص. الطرفية تكفي لهذا الغرض.
13
+ // EN: Resets the owner account from any directory. This is the way back in for someone who forgot
14
+ // the password on a machine with no internet and no email recovery — nothing else opens it.
15
+ //
16
+ // **The password is not printed in --json.** Machine output is usually redirected to a file or a
17
+ // log, and writing credentials there moves them from the screen onto disk. The terminal suffices.
18
+ export default class OwnerReset extends BaseCommand {
19
+ static description = "Reset the owner account password and show the credentials";
20
+ static examples = ["<%= config.bin %> owner reset"];
21
+ async run() {
22
+ const { flags } = await this.parse(OwnerReset);
23
+ const profile = this.loadProfile(flags.profile, true, flags.product);
24
+ const spinner = ora({ isEnabled: isTty && !flags.json, discardStdin: false });
25
+ spinner.start("resetting the owner account…");
26
+ const result = await runCoreScript(profile, "reset-owner");
27
+ spinner.stop();
28
+ const credentials = extractOwnerCredentials(result.output);
29
+ if (flags.json) {
30
+ this.log(renderJson(buildEnvelope({
31
+ command: "owner reset",
32
+ profile,
33
+ // القيمة نفسها لا تُنشَر هنا عمدًا؛ نقول إنها أُعيدت وأين تُقرأ.
34
+ data: { reset: result.ok, credentialsShownOnTerminalOnly: true },
35
+ problems: result.ok
36
+ ? []
37
+ : [
38
+ {
39
+ id: "owner.reset",
40
+ severity: "fail",
41
+ message: "the owner reset failed",
42
+ remedy: "Run: fantastic doctor — the database may be missing or locked.",
43
+ },
44
+ ],
45
+ })));
46
+ if (!result.ok)
47
+ this.exit(EXIT.FAILURE);
48
+ return;
49
+ }
50
+ if (!result.ok) {
51
+ this.log(c.bad("The owner reset failed."));
52
+ this.log(result.output.split("\n").slice(-15).join("\n"));
53
+ this.log(`${c.accent(glyph.arrow)} Run: fantastic doctor`);
54
+ this.exit(EXIT.FAILURE);
55
+ }
56
+ if (!credentials) {
57
+ // نجح ولم نتعرّف على الشكل: نطبع المخرَج الخام بدل أن ندّعي قيمةً لم نقرأها.
58
+ this.log(result.output.trim());
59
+ return;
60
+ }
61
+ const body = [
62
+ c.label("OWNER ACCOUNT RESET"),
63
+ "",
64
+ ` user ${c.value(credentials.username)}`,
65
+ ` password ${c.accent(credentials.password)}`,
66
+ "",
67
+ c.dim(" This is the documented default. Change it from the admin panel."),
68
+ ].join("\n");
69
+ this.log("");
70
+ this.log(boxen(body, { padding: 1, borderStyle: "double", borderColor: "yellow" }));
71
+ this.log("");
72
+ }
73
+ }
74
+ //# sourceMappingURL=reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.js","sourceRoot":"","sources":["../../../src/commands/owner/reset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { BaseCommand } from "../base-command.js";
2
+ export default class Restart extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ service: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {};
9
+ run(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=restart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAWjD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW;IAC9C,MAAM,CAAC,WAAW,SAAwC;IAE1D,MAAM,CAAC,QAAQ,WAAmE;IAElF,MAAM,CAAC,IAAI;;MAMT;IAEF,MAAM,CAAC,KAAK,KAAM;IAEZ,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiC3B"}
@@ -0,0 +1,53 @@
1
+ import { Args } from "@oclif/core";
2
+ import ora from "ora";
3
+ import { BaseCommand } from "../base-command.js";
4
+ import { restartServices } from "../supervisor/orchestrator.js";
5
+ import { renderConflicts, renderStartOutcome, renderStopOutcome } from "../render/boot.render.js";
6
+ import { isTty } from "../render/theme.js";
7
+ // AR: إعادة تشغيل الكل أو خدمة واحدة. إعادة خدمة واحدة تفيد كثيرًا: تعديل في خدمة البث لا يستدعي
8
+ // إسقاط النواة والواجهة معه.
9
+ // EN: Restart everything or one service. Restarting one matters in practice: a change in the live
10
+ // service should not take the core and the portal down with it.
11
+ export default class Restart extends BaseCommand {
12
+ static description = "Restart every service, or just one";
13
+ static examples = ["<%= config.bin %> restart", "<%= config.bin %> restart live"];
14
+ static args = {
15
+ service: Args.string({
16
+ description: "Service name. Leave empty to restart all.",
17
+ options: ["live", "core", "portal"],
18
+ required: false,
19
+ }),
20
+ };
21
+ static flags = {};
22
+ async run() {
23
+ const { args, flags } = await this.parse(Restart);
24
+ const profile = this.loadProfile(flags.profile, true, flags.product);
25
+ const only = args.service ? [args.service] : undefined;
26
+ const spinner = ora({ isEnabled: isTty, discardStdin: false });
27
+ const { stopped, started } = await restartServices(profile, {
28
+ only,
29
+ onStep: (definition, phase) => {
30
+ if (phase === "starting")
31
+ spinner.start(`starting ${definition.label}…`);
32
+ if (phase === "waiting")
33
+ spinner.text = `waiting for ${definition.label} to be ready…`;
34
+ if (phase === "done")
35
+ spinner.stop();
36
+ },
37
+ });
38
+ spinner.stop();
39
+ this.log("");
40
+ this.log(renderStopOutcome(stopped));
41
+ this.log("");
42
+ if (started.conflicts.length > 0) {
43
+ this.log(renderConflicts(started.conflicts));
44
+ this.log("");
45
+ this.exit(3);
46
+ }
47
+ this.log(renderStartOutcome(started));
48
+ this.log("");
49
+ if (!started.ok)
50
+ this.exit(1);
51
+ }
52
+ }
53
+ //# sourceMappingURL=restart.js.map