@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,167 @@
1
+ import { c, glyph, NOT_REPORTED } from "./theme.js";
2
+ // AR: عارضة الرخصة. **مكان واحد يقرّر كيف تُقرَأ حالة الرخصة في الطرفية** — يستعمله ‎activate‎
3
+ // و‎status‎ و‎health‎ و‎doctor‎. أربع نسخ من هذا المنطق تعني أربع إجابات لسؤال واحد، ويقرأ
4
+ // الفنّي «active» في أمرٍ و«grace» في آخر عن اللحظة نفسها.
5
+ // ولا منطق هنا: تحويل حالةٍ إلى نصّ ولون، لا قرار عمّا إذا كانت الرخصة صالحة.
6
+ // EN: The licence renderer. **One place decides how licence state reads in the terminal** — used by
7
+ // `activate`, `status`, `health` and `doctor`. Four copies of this logic would mean four answers
8
+ // to one question, with the technician reading "active" in one command and "grace" in another
9
+ // about the same instant.
10
+ // No logic lives here: state to text and colour, never a decision about whether a licence is valid.
11
+ /** سطر الحالة بلونه: كلمة واحدة يقرؤها الفنّي من بعيد. */
12
+ export function licenceBadge(device) {
13
+ if (!device)
14
+ return c.dim(NOT_REPORTED);
15
+ switch (device.status) {
16
+ case "active":
17
+ return c.ok("active");
18
+ case "grace":
19
+ return c.warn(`grace (${device.graceDaysLeft ?? "?"}d left)`);
20
+ case "expired":
21
+ // AR: كلمتان مختلفتان لأن العلاجين متعاكسان: التجديد من الشركة مقابل اتصال إنترنت.
22
+ // EN: Two different words because the remedies are opposites: a renewal from the company
23
+ // versus an internet connection.
24
+ return device.expiredReason === "grace" ? c.bad("grace exhausted") : c.bad("expired");
25
+ case "invalid":
26
+ return c.bad(`invalid (${device.reason ?? "?"})`);
27
+ // AR: كودُ المركز لا كلمةُ «invalid». الفنّي الذي يقرأ ‎refused (DEVICE_NOT_AUTHORIZED)‎
28
+ // يعرف أن الملفّ سليم وأن القرار في اللوحة، فلا يضيّع ساعةً في إعادة تفعيلٍ لن تنجح.
29
+ // EN: The centre's code rather than the word "invalid". A technician reading
30
+ // `refused (DEVICE_NOT_AUTHORIZED)` knows the file is sound and the decision is in the
31
+ // dashboard, and does not lose an hour on a re-activation that cannot succeed.
32
+ case "refused":
33
+ return c.bad(`refused (${device.reason ?? "?"})`);
34
+ case "none":
35
+ return c.dim("not activated");
36
+ }
37
+ }
38
+ /** كتلة كاملة لـ‎activate‎ و‎health‎: الخطّة والانتهاء والأجهزة وبصمة الجهاز. */
39
+ export function renderLicenceCard(device, options = {}) {
40
+ if (!device)
41
+ return ` ${c.dim("Licence")} ${c.dim(NOT_REPORTED)}`;
42
+ const lines = [];
43
+ if (options.heading) {
44
+ const network = device.networkName ? ` ${c.dim("—")} ${device.networkName}` : "";
45
+ lines.push(`${c.ok(glyph.pass)} ${c.ok("Activated")}${network}`);
46
+ }
47
+ else {
48
+ lines.push(` ${c.label("Licence")} ${licenceBadge(device)}`);
49
+ }
50
+ const row = (label, value) => ` ${c.dim(label.padEnd(9))} ${value}`;
51
+ // AR: **اسم الشبكة صفٌّ في البطاقة لا سطرَ عنوانٍ وحده.** كان يظهر في ترويسة ‎activate‎ فقط،
52
+ // فيقرأ من ينادي ‎status‎ حالةً ومدّةً بلا اسم العقد الذي تخصّه — وهو أوّل ما يتأكّد منه
53
+ // المالك حين يملك أكثر من استراحة.
54
+ // EN: **The network name is a row in the card, not a heading alone.** It only ever appeared in
55
+ // `activate`'s heading, so whoever ran `status` read a state and a term without the name of
56
+ // the contract they belong to — the first thing an owner with more than one rest-house checks.
57
+ if (!options.heading && device.networkName)
58
+ lines.push(row("Name", c.value(device.networkName)));
59
+ // الكود يصل من النواة مُخفًى أصلًا (‎maskLicenseCode‎)، فلا إخفاء هنا ولا كشف.
60
+ if (device.code)
61
+ lines.push(row("Code", c.value(device.code)));
62
+ if (device.expiresAt)
63
+ lines.push(row("Expires", isoDateTime(device.expiresAt)));
64
+ // AR: **السقف وحده بلا العدد المستعمل.** الجهاز يعرف سقفه من الرخصة الموقَّعة، ولا يعرف كم
65
+ // جهازًا آخر فعّله العميل — تلك معلومة المركز. طباعة «1 / 2» من هنا كانت تخترع الرقم
66
+ // الأول وتبدو أدقّ ممّا هي، والفنّي يبني عليها قرارًا خاطئًا. الرقم الصحيح في لوحة الشركة.
67
+ // EN: **The ceiling alone, without the used count.** The appliance knows its ceiling from the
68
+ // signed licence and has no idea how many other machines the customer activated — that is
69
+ // the centre's knowledge. Printing "1 / 2" here would invent the first number and look more
70
+ // precise than it is, and the technician would act on it. The real figure is in the company
71
+ // dashboard.
72
+ if (device.maxDevices !== undefined)
73
+ lines.push(row("Devices", `up to ${device.maxDevices}`));
74
+ lines.push(row("Device", c.value(shortId(device.deviceId))));
75
+ // AR: **الباقة ومحتواها — أوّل ما يُسأل عنه حين «هذه الشاشة مقفلة عندي».**
76
+ //
77
+ // تُطبع بعد بيانات الرخصة لأنها تفصيلها لا ترويستها؛ ومن ينادي ‎status‎ لأن شيئًا لا يعمل
78
+ // يجد الجواب في الشاشة نفسها بدل فتح متصفّح أو الاتصال بالشركة.
79
+ // EN: **The package and what it contains — the first thing asked when "this screen is locked for
80
+ // me".** Printed after the licence data because it is its detail rather than its heading; and
81
+ // whoever runs `status` because something does not work finds the answer on the same screen
82
+ // instead of opening a browser or calling the company.
83
+ lines.push(...packageLines(device, row));
84
+ return lines.join("\n");
85
+ }
86
+ /**
87
+ * AR: أسطر الباقة: مفتاحها، ثم المشمول وغير المشمول.
88
+ *
89
+ * **المفتاح لا الاسم العربيّ.** أسماء الباقات يصنعها موظّفو الشركة وقت التشغيل، ولا تحملها
90
+ * حمولةٌ موقَّعة — فالجهاز لا يعرفها أصلًا (‎research R14b‎). والمفتاح هو نفسه ما يظهر في رفض
91
+ * الحارس وفي سجلّات الدعم، فيتكلّم الطرفان عن الشيء نفسه في المكالمة.
92
+ *
93
+ * **والعلامة تحمل المعنى لا اللون.** ‎glyph.pass‎ و‎glyph.fail‎ لهما بديلان نصّيان في طرفية
94
+ * بلا يونيكود، واللون يزيد الوضوح ولا يصنعه — فطرفيةٌ بلا ألوان تقرأ الجدول كاملًا.
95
+ *
96
+ * **ولا كتالوج هنا.** ‎featureStates‎ تصل محسوبةً من النواة؛ نسخةٌ ثانية من الحساب في
97
+ * الطرفية كانت ستفترق عن الشاشة عند أوّل ميزة تُعطَّل، فيقرأ المالك إجابتين عن اللحظة نفسها.
98
+ *
99
+ * EN: The package lines: its key, then what is included and what is not.
100
+ *
101
+ * **The key, not an Arabic name.** Package names are created by company staff at runtime and no
102
+ * signed payload carries them, so the appliance does not know them (research R14b). The key is
103
+ * also what appears in the guard's refusal and in support's logs, so both sides of a phone call
104
+ * name the same thing.
105
+ *
106
+ * **And the marker carries the meaning, not the colour.** `glyph.pass` and `glyph.fail` have
107
+ * text fallbacks on a terminal without unicode, and colour reinforces the distinction rather
108
+ * than creating it — so a colourless terminal still reads the whole table.
109
+ *
110
+ * **No catalogue lives here.** `featureStates` arrives computed by the core; a second copy of
111
+ * the derivation in the terminal would diverge from the screen at the first capability anybody
112
+ * deactivates, leaving the owner with two answers about the same instant.
113
+ */
114
+ function packageLines(device, row) {
115
+ const lines = [];
116
+ if (device.plan)
117
+ lines.push(row("Package", c.value(device.plan)));
118
+ const states = device.featureStates ?? [];
119
+ if (states.length === 0)
120
+ return lines;
121
+ const included = states.filter((state) => state.included).map((state) => state.key);
122
+ const excluded = states.filter((state) => !state.included).map((state) => state.key);
123
+ if (included.length > 0) {
124
+ lines.push(row("Included", included.map((key) => `${c.ok(glyph.pass)} ${key}`).join(" ")));
125
+ }
126
+ if (excluded.length > 0) {
127
+ lines.push(row("Excluded", excluded.map((key) => `${c.bad(glyph.fail)} ${key}`).join(" ")));
128
+ }
129
+ return lines;
130
+ }
131
+ /**
132
+ * AR: بصمةٌ من ٦٤ محرفًا لا تُقرأ على الهاتف. الاثنا عشر الأولى تكفي للتمييز وللبحث في شاشة
133
+ * الأجهزة، وهي نفس ما تعرضه اللوحة — فلا يقرأ العميل رقمًا لا يجده الدعم.
134
+ * EN: A 64-character digest is unreadable over the phone. The first twelve are enough to identify
135
+ * and to search the devices screen, and they are exactly what the dashboard shows — so the
136
+ * customer never reads out a number support cannot find.
137
+ */
138
+ function shortId(deviceId) {
139
+ if (!deviceId)
140
+ return NOT_REPORTED;
141
+ return deviceId.length > 12 ? deviceId.slice(0, 12) : deviceId;
142
+ }
143
+ /**
144
+ * AR: التاريخ **والساعة** بالتوقيت المحلّي للجهاز.
145
+ *
146
+ * كان التاريخ وحده، بحجّة أن الصلاحية «قرار أيام لا دقائق». وهي حجّة تنكسر في اليوم الأخير
147
+ * بالذات: مالكٌ يقرأ ‎2026-08-09‎ صباحَ التاسع لا يعرف أهو يملك اليوم كلّه أم ساعتين، وهو
148
+ * اليوم الوحيد الذي يهمّ فيه الفرق. والساعة محلّية لا UTC لأن من يقرؤها يقارنها بساعة الحائط
149
+ * أمامه، لا بخطّ غرينتش.
150
+ * EN: The date **and the time**, in the machine's local zone.
151
+ *
152
+ * It used to be the date alone, on the grounds that validity is "a matter of days, not minutes".
153
+ * That reasoning breaks on precisely the last day: an owner reading `2026-08-09` on the morning
154
+ * of the ninth cannot tell whether he has the whole day or two hours — the one day the
155
+ * difference matters. And the time is local rather than UTC because whoever reads it compares it
156
+ * to the clock on the wall in front of him, not to Greenwich.
157
+ */
158
+ function isoDateTime(iso) {
159
+ const date = new Date(iso);
160
+ if (Number.isNaN(date.getTime()))
161
+ return iso;
162
+ const pad = (value) => String(value).padStart(2, "0");
163
+ const day = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
164
+ const time = `${pad(date.getHours())}:${pad(date.getMinutes())}`;
165
+ return `${day} ${time}`;
166
+ }
167
+ //# sourceMappingURL=licence.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"licence.render.js","sourceRoot":"","sources":["../../src/render/licence.render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Profile } from "../profiles/types.js";
2
+ import type { ServiceState } from "../supervisor/inspect.js";
3
+ export declare function renderStatusTable(states: ServiceState[]): string;
4
+ /** سطر السياق أسفل الجدول: أي ملفّ تشغيل، وأين القاعدة، وكم حجمها. لا تخمين صامت. */
5
+ export declare function renderProfileFooter(profile: Profile): string;
6
+ //# sourceMappingURL=status.render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.render.d.ts","sourceRoot":"","sources":["../../src/render/status.render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAmB7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAuBhE;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAQ5D"}
@@ -0,0 +1,52 @@
1
+ import { existsSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import Table from "cli-table3";
4
+ import { NOT_REPORTED, c, formatBytes, formatDuration, glyph } from "./theme.js";
5
+ // AR: عارضة جدول الحالة. تأخذ حالة مجموعة ولا تحسبها، فيبقى الحساب في ‎supervisor/inspect‎ وحده.
6
+ // EN: The status-table renderer. It takes collected state and never computes it, so the computation
7
+ // stays in supervisor/inspect alone.
8
+ function stateCell(state) {
9
+ if (!state.running)
10
+ return c.bad(`${glyph.bad} stopped`);
11
+ // خدمة أطلقناها لكنها لا تردّ على المسبار: حيّة كعملية، غير جاهزة كخدمة. الفرق يستحق لونًا خاصًا.
12
+ if (!state.probe.reachable)
13
+ return c.warn(`${glyph.warn} not responding`);
14
+ return c.ok(`${glyph.ok} running`);
15
+ }
16
+ function sourceNote(state) {
17
+ if (state.source === "probe")
18
+ return c.dim("(started outside the CLI)");
19
+ return "";
20
+ }
21
+ export function renderStatusTable(states) {
22
+ const table = new Table({
23
+ head: ["Service", "State", "Port", "PID", "Uptime"].map((header) => c.dim(header)),
24
+ style: { head: [], border: [], "padding-left": 1, "padding-right": 1 },
25
+ chars: {
26
+ top: "─", "top-mid": "┬", "top-left": "┌", "top-right": "┐",
27
+ bottom: "─", "bottom-mid": "┴", "bottom-left": "└", "bottom-right": "┘",
28
+ left: "│", "left-mid": "├", mid: "─", "mid-mid": "┼", right: "│", "right-mid": "┤",
29
+ middle: "│",
30
+ },
31
+ });
32
+ for (const state of states) {
33
+ table.push([
34
+ `${state.definition.label} ${sourceNote(state)}`.trim(),
35
+ stateCell(state),
36
+ String(state.definition.port),
37
+ state.record ? String(state.record.pid) : NOT_REPORTED,
38
+ formatDuration(state.uptimeSeconds),
39
+ ]);
40
+ }
41
+ return table.toString();
42
+ }
43
+ /** سطر السياق أسفل الجدول: أي ملفّ تشغيل، وأين القاعدة، وكم حجمها. لا تخمين صامت. */
44
+ export function renderProfileFooter(profile) {
45
+ const dbPath = join(profile.dataDir, "fantastic.db");
46
+ const size = existsSync(dbPath) ? formatBytes(statSync(dbPath).size) : "missing";
47
+ return [
48
+ c.dim("profile: ") + c.value(profile.kind),
49
+ c.dim("database: ") + c.value(dbPath) + c.dim(` (${size})`),
50
+ ].join(c.dim(" · "));
51
+ }
52
+ //# sourceMappingURL=status.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.render.js","sourceRoot":"","sources":["../../src/render/status.render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /** الألوان تُعطَّل تلقائيًا خارج الطرفية (CI أو مخرَج مُمرَّر بأنبوب). */
2
+ export declare const isTty: boolean;
3
+ export declare const c: {
4
+ ok: import("chalk").ChalkInstance;
5
+ bad: import("chalk").ChalkInstance;
6
+ warn: import("chalk").ChalkInstance;
7
+ dim: import("chalk").ChalkInstance;
8
+ accent: import("chalk").ChalkInstance;
9
+ label: import("chalk").ChalkInstance;
10
+ value: import("chalk").ChalkInstance;
11
+ };
12
+ /**
13
+ * AR: **هل تستطيع هذه الطرفية رسم ما هو خارج ASCII؟**
14
+ *
15
+ * السؤال ليس ترفًا: على «موجّه الأوامر» التقليدي في ويندوز — وهو ما يفتحه الفنّي عند العميل —
16
+ * كل محرف خارج ASCII يظهر ‎?‎. فيصير سطر الترحيب ‎52‎ علامة استفهام، وتصير كل علامة ‎✔‎ سؤالًا،
17
+ * ويقرأ الفنّي شاشة تبدو معطوبة بينما كل شيء يعمل. قِيس على جهاز عميل حقيقي أثناء ٠١٨.
18
+ *
19
+ * ولا نستطيع أن نسأل الطرفية، فنستدلّ: كل ما ليس ويندوز يرسم يونيكود، ونوافذ الطرفية الحديثة
20
+ * (Windows Terminal، VS Code، ConEmu) تُعرّف عن نفسها بمتغيّرات بيئة. وما عداها يُفترَض قديمًا —
21
+ * **والافتراض عند الشكّ هو الأبسط لا الأجمل**، لأن ثمن الخطأ متباعد: رمز ASCII في طرفية حديثة
22
+ * أقلّ جمالًا بقليل، وعلامة استفهام عند عميل تبدو عطبًا.
23
+ * EN: **Can this terminal draw anything beyond ASCII?**
24
+ *
25
+ * Not a cosmetic question: in Windows' classic Command Prompt — the one a technician opens at a
26
+ * customer site — every non-ASCII character renders as `?`. The banner rule becomes 52 question
27
+ * marks, every `✔` becomes a query, and the technician reads a screen that looks broken while
28
+ * everything works. Measured on a real customer machine during 018.
29
+ *
30
+ * We cannot ask the terminal, so we infer: everything that is not Windows draws Unicode, and
31
+ * modern Windows terminals (Windows Terminal, VS Code, ConEmu) announce themselves through
32
+ * environment variables. Anything else is assumed legacy — **and when in doubt the assumption is
33
+ * the plainer one, not the prettier one**, because the costs are lopsided: an ASCII mark in a
34
+ * modern terminal is slightly less handsome, a question mark at a customer looks like a fault.
35
+ */
36
+ export declare const unicodeSafe: boolean;
37
+ /**
38
+ * AR: رموز المخرَج، **مكانًا واحدًا لا متناثرة**. كانت تُكتب حرفيًّا في إحدى وسبعين ملفًّا، فلم يكن
39
+ * ثمّة موضع واحد يقرّر — ولا سبيل إلى بديل ASCII إلا بتعديل الجميع. البدائل أحادية المحرف كلّها
40
+ * فتبقى الأعمدة محاذاة كما هي.
41
+ * EN: Output glyphs, **in one place rather than scattered**. They were written literally across
42
+ * seventy-one files, so no single place decided — and no ASCII alternative was possible without
43
+ * touching all of them. Every fallback is one character wide, so columns stay aligned.
44
+ */
45
+ export declare const glyph: {
46
+ ok: string;
47
+ bad: string;
48
+ warn: string;
49
+ step: string;
50
+ none: string;
51
+ pass: string;
52
+ fail: string;
53
+ arrow: string;
54
+ rule: string;
55
+ };
56
+ /** الشرطة تعني «غير متاح» صراحةً. الصفر ادّعاء، والشرطة اعتراف. */
57
+ export declare const NOT_REPORTED: string;
58
+ export declare function formatDuration(seconds: number | undefined): string;
59
+ export declare function formatBytes(bytes: number | undefined): string;
60
+ /** ألوان بادئات السجلات، ثابتة لكل خدمة حتى تُميَّز بالعين وحدها. */
61
+ export declare const servicePrefixColor: {
62
+ readonly live: import("chalk").ChalkInstance;
63
+ readonly core: import("chalk").ChalkInstance;
64
+ readonly portal: import("chalk").ChalkInstance;
65
+ };
66
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/render/theme.ts"],"names":[],"mappings":"AASA,0EAA0E;AAC1E,eAAO,MAAM,KAAK,SAAgC,CAAC;AAEnD,eAAO,MAAM,CAAC;;;;;;;;CAQb,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,WAAW,SAKa,CAAC;AAEtC;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;CAEqF,CAAC;AAExG,mEAAmE;AACnE,eAAO,MAAM,YAAY,QAAa,CAAC;AAEvC,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQlE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAc7D;AAED,qEAAqE;AACrE,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC"}
@@ -0,0 +1,89 @@
1
+ import chalk from "chalk";
2
+ // AR: طبقة التنسيق. **لا منطق هنا** — ألوان ورموز وتحويل أرقام إلى نصّ مقروء فقط.
3
+ // ملاحظة اتجاهية: الطرفية ثنائية الاتجاه غير موثوقة، فنُبقي القيم اللاتينية (مسارات، منافذ،
4
+ // روابط) في أعمدة مستقلة ولا ندسّها داخل جملة عربية.
5
+ // EN: The presentation layer. **No logic here** — colours, glyphs and number-to-text only.
6
+ // A directional note: terminal bidi is unreliable, so Latin values (paths, ports, URLs) stay in
7
+ // their own columns and are never embedded mid-Arabic-sentence.
8
+ /** الألوان تُعطَّل تلقائيًا خارج الطرفية (CI أو مخرَج مُمرَّر بأنبوب). */
9
+ export const isTty = Boolean(process.stdout.isTTY);
10
+ export const c = {
11
+ ok: chalk.green,
12
+ bad: chalk.red,
13
+ warn: chalk.yellow,
14
+ dim: chalk.dim,
15
+ accent: chalk.hex("#FF5A1F"),
16
+ label: chalk.bold,
17
+ value: chalk.cyan,
18
+ };
19
+ /**
20
+ * AR: **هل تستطيع هذه الطرفية رسم ما هو خارج ASCII؟**
21
+ *
22
+ * السؤال ليس ترفًا: على «موجّه الأوامر» التقليدي في ويندوز — وهو ما يفتحه الفنّي عند العميل —
23
+ * كل محرف خارج ASCII يظهر ‎?‎. فيصير سطر الترحيب ‎52‎ علامة استفهام، وتصير كل علامة ‎✔‎ سؤالًا،
24
+ * ويقرأ الفنّي شاشة تبدو معطوبة بينما كل شيء يعمل. قِيس على جهاز عميل حقيقي أثناء ٠١٨.
25
+ *
26
+ * ولا نستطيع أن نسأل الطرفية، فنستدلّ: كل ما ليس ويندوز يرسم يونيكود، ونوافذ الطرفية الحديثة
27
+ * (Windows Terminal، VS Code، ConEmu) تُعرّف عن نفسها بمتغيّرات بيئة. وما عداها يُفترَض قديمًا —
28
+ * **والافتراض عند الشكّ هو الأبسط لا الأجمل**، لأن ثمن الخطأ متباعد: رمز ASCII في طرفية حديثة
29
+ * أقلّ جمالًا بقليل، وعلامة استفهام عند عميل تبدو عطبًا.
30
+ * EN: **Can this terminal draw anything beyond ASCII?**
31
+ *
32
+ * Not a cosmetic question: in Windows' classic Command Prompt — the one a technician opens at a
33
+ * customer site — every non-ASCII character renders as `?`. The banner rule becomes 52 question
34
+ * marks, every `✔` becomes a query, and the technician reads a screen that looks broken while
35
+ * everything works. Measured on a real customer machine during 018.
36
+ *
37
+ * We cannot ask the terminal, so we infer: everything that is not Windows draws Unicode, and
38
+ * modern Windows terminals (Windows Terminal, VS Code, ConEmu) announce themselves through
39
+ * environment variables. Anything else is assumed legacy — **and when in doubt the assumption is
40
+ * the plainer one, not the prettier one**, because the costs are lopsided: an ASCII mark in a
41
+ * modern terminal is slightly less handsome, a question mark at a customer looks like a fault.
42
+ */
43
+ export const unicodeSafe = process.platform !== "win32" ||
44
+ Boolean(process.env.WT_SESSION) ||
45
+ Boolean(process.env.ConEmuANSI) ||
46
+ process.env.TERM_PROGRAM === "vscode" ||
47
+ Boolean(process.env.FANTASTIC_UTF8);
48
+ /**
49
+ * AR: رموز المخرَج، **مكانًا واحدًا لا متناثرة**. كانت تُكتب حرفيًّا في إحدى وسبعين ملفًّا، فلم يكن
50
+ * ثمّة موضع واحد يقرّر — ولا سبيل إلى بديل ASCII إلا بتعديل الجميع. البدائل أحادية المحرف كلّها
51
+ * فتبقى الأعمدة محاذاة كما هي.
52
+ * EN: Output glyphs, **in one place rather than scattered**. They were written literally across
53
+ * seventy-one files, so no single place decided — and no ASCII alternative was possible without
54
+ * touching all of them. Every fallback is one character wide, so columns stay aligned.
55
+ */
56
+ export const glyph = unicodeSafe
57
+ ? { ok: "●", bad: "●", warn: "●", step: "▸", none: "—", pass: "✔", fail: "✖", arrow: "→", rule: "━" }
58
+ : { ok: "*", bad: "*", warn: "*", step: ">", none: "-", pass: "+", fail: "x", arrow: ">", rule: "=" };
59
+ /** الشرطة تعني «غير متاح» صراحةً. الصفر ادّعاء، والشرطة اعتراف. */
60
+ export const NOT_REPORTED = glyph.none;
61
+ export function formatDuration(seconds) {
62
+ if (seconds === undefined)
63
+ return NOT_REPORTED;
64
+ const hours = Math.floor(seconds / 3600);
65
+ const minutes = Math.floor((seconds % 3600) / 60);
66
+ const secs = Math.floor(seconds % 60);
67
+ return [hours, minutes, secs].map((part) => String(part).padStart(2, "0")).join(":");
68
+ }
69
+ export function formatBytes(bytes) {
70
+ if (bytes === undefined)
71
+ return NOT_REPORTED;
72
+ if (bytes < 1024)
73
+ return `${bytes} B`;
74
+ const units = ["KB", "MB", "GB", "TB"];
75
+ let value = bytes / 1024;
76
+ let unit = 0;
77
+ while (value >= 1024 && unit < units.length - 1) {
78
+ value /= 1024;
79
+ unit += 1;
80
+ }
81
+ return `${value.toFixed(1)} ${units[unit]}`;
82
+ }
83
+ /** ألوان بادئات السجلات، ثابتة لكل خدمة حتى تُميَّز بالعين وحدها. */
84
+ export const servicePrefixColor = {
85
+ live: chalk.magenta,
86
+ core: chalk.cyan,
87
+ portal: chalk.yellow,
88
+ };
89
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/render/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** الحدّ الأدنى المُعلَن في ‎package.json‎. رقمٌ واحد لا رقمان: تعديلُ أحدهما وحده يُنتج وعدين. */
2
+ export declare const MINIMUM_NODE_MAJOR = 20;
3
+ export type RuntimeVerdict = {
4
+ ok: true;
5
+ } | {
6
+ ok: false;
7
+ message: string;
8
+ remedy: string;
9
+ };
10
+ /**
11
+ * AR: يقارن الإصدار الجاري بالحدّ الأدنى. يُمرَّر الإصدار وسيطًا ليكون الفحص قابلًا للاختبار بلا
12
+ * إشغال عملية Node ثانية — والاختبار هنا هو الدليل الوحيد، إذ لا أحد يشغّل Node ‏18 عمدًا
13
+ * ليرى الرسالة.
14
+ * EN: Compares the running version against the minimum. The version is passed in so the check can be
15
+ * tested without spawning a second Node process — and the test is the only proof available here,
16
+ * since nobody runs Node 18 on purpose just to see the message.
17
+ */
18
+ export declare function checkRuntime(version?: string): RuntimeVerdict;
19
+ //# sourceMappingURL=runtime-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-guard.d.ts","sourceRoot":"","sources":["../src/runtime-guard.ts"],"names":[],"mappings":"AA8BA,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3F;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,MAAwB,GAAG,cAAc,CAiB9E"}
@@ -0,0 +1,57 @@
1
+ // AR: **الشرط الوحيد الذي تفرضه هذه الأداة على جهاز العميل** (٠٢٦/FR-002).
2
+ //
3
+ // قبل الفصل كانت الواجهة تُشحن داخل الحزمة وتعمل على ‎runtime\node.exe‎ المشحون معها، فلا
4
+ // يعنيها ما على الجهاز. وبعد الفصل صارت تُثبَّت من سِجلّ الحزم وتعمل على بيئة تشغيل العميل —
5
+ // وهذا هو الاستثناء الوحيد المنصوص عليه في فقرة النطاق بالمبدأ الأول، والخدمات كلّها ما زالت
6
+ // على البيئة المشحونة.
7
+ //
8
+ // **والرفض المبكر ليس تشدّدًا بل رحمة.** بيئةٌ أقدم لا تنهار عند أوّل سطر، بل عند أوّل ميزةٍ
9
+ // لغويّة غير مدعومة — أي في منتصف تثبيتٍ يكتب على القرص، بأثرِ استدعاءٍ إنجليزيٍّ خامّ لا يقول
10
+ // للفنّي شيئًا عن السبب ولا عن العلاج. فحصٌ في أوّل سطرٍ يقول الاثنين معًا.
11
+ //
12
+ // ولا يُنادى الفحص من ‎bin/run.js‎: ذلك الملفّ يُنفَّذ قبل أن يُحمَّل ‎dist/‎، وبيئةٌ قديمةٌ جدًّا
13
+ // قد تفشل في تحليله هو نفسه. موضعه هنا، في أساس كل أمر، وهو أبكر موضعٍ **مضمونٍ** أن يُبلغه
14
+ // التنفيذ.
15
+ // EN: **The one requirement this tool places on a customer's machine** (026/FR-002).
16
+ //
17
+ // Before the separation the CLI shipped inside the bundle and ran on the `runtime\node.exe`
18
+ // shipped with it, so what the machine carried was none of its business. After the separation it
19
+ // is installed from a package registry and runs on the customer's runtime — the single stated
20
+ // exception in principle I's scope paragraph, with every service still on the bundled runtime.
21
+ //
22
+ // **And refusing early is mercy, not strictness.** An older runtime does not fail on the first
23
+ // line; it fails at the first unsupported language feature — that is, in the middle of an
24
+ // install already writing to disk, with a raw English stack trace that tells the technician
25
+ // nothing about the cause and nothing about the remedy. A check on the first line says both.
26
+ //
27
+ // The check is not called from `bin/run.js`: that file runs before `dist/` is loaded, and a very
28
+ // old runtime may fail to parse it at all. Its home is here, in the base of every command — the
29
+ // earliest place execution is **guaranteed** to reach.
30
+ /** الحدّ الأدنى المُعلَن في ‎package.json‎. رقمٌ واحد لا رقمان: تعديلُ أحدهما وحده يُنتج وعدين. */
31
+ export const MINIMUM_NODE_MAJOR = 20;
32
+ /**
33
+ * AR: يقارن الإصدار الجاري بالحدّ الأدنى. يُمرَّر الإصدار وسيطًا ليكون الفحص قابلًا للاختبار بلا
34
+ * إشغال عملية Node ثانية — والاختبار هنا هو الدليل الوحيد، إذ لا أحد يشغّل Node ‏18 عمدًا
35
+ * ليرى الرسالة.
36
+ * EN: Compares the running version against the minimum. The version is passed in so the check can be
37
+ * tested without spawning a second Node process — and the test is the only proof available here,
38
+ * since nobody runs Node 18 on purpose just to see the message.
39
+ */
40
+ export function checkRuntime(version = process.version) {
41
+ const major = Number.parseInt(version.replace(/^v/, "").split(".")[0] ?? "", 10);
42
+ // AR: إصدارٌ لا يُقرأ **يمرّ**. بيئةٌ بترقيمٍ لا نتوقّعه (بناءٌ خاصّ، أو بديلٌ متوافق) قد تعمل
43
+ // تمامًا، ومنعُها لأننا لم نفهم سلسلة نصّية منعٌ بلا دليل — والعطل الحقيقيّ سيظهر بنفسه.
44
+ // EN: An unreadable version **passes**. A runtime with numbering we do not expect (a custom build,
45
+ // or a compatible alternative) may work perfectly, and refusing it because we failed to parse
46
+ // a string is refusal without evidence — a real fault will announce itself.
47
+ if (!Number.isFinite(major))
48
+ return { ok: true };
49
+ if (major >= MINIMUM_NODE_MAJOR)
50
+ return { ok: true };
51
+ return {
52
+ ok: false,
53
+ message: `هذه الواجهة تحتاج Node ‏${MINIMUM_NODE_MAJOR} أو أحدث، والمثبَّت هنا ${version}.`,
54
+ remedy: `ثبّت الإصدار المدعوم ثم افتح طرفية جديدة: winget install OpenJS.NodeJS.LTS`,
55
+ };
56
+ }
57
+ //# sourceMappingURL=runtime-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-guard.js","sourceRoot":"","sources":["../src/runtime-guard.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,8FAA8F;AAC9F,iGAAiG;AACjG,iGAAiG;AACjG,2BAA2B;AAC3B,EAAE;AACF,iGAAiG;AACjG,mGAAmG;AACnG,gFAAgF;AAChF,EAAE;AACF,uGAAuG;AACvG,gGAAgG;AAChG,eAAe;AACf,qFAAqF;AACrF,EAAE;AACF,gGAAgG;AAChG,qGAAqG;AACrG,kGAAkG;AAClG,mGAAmG;AACnG,EAAE;AACF,mGAAmG;AACnG,8FAA8F;AAC9F,gGAAgG;AAChG,iGAAiG;AACjG,EAAE;AACF,qGAAqG;AACrG,oGAAoG;AACpG,2DAA2D;AAE3D,mGAAmG;AACnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAIrC;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB,OAAO,CAAC,OAAO;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjF,+FAA+F;IAC/F,6FAA6F;IAC7F,mGAAmG;IACnG,kGAAkG;IAClG,gFAAgF;IAChF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAEjD,IAAI,KAAK,IAAI,kBAAkB;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAErD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,2BAA2B,kBAAkB,2BAA2B,OAAO,GAAG;QAC3F,MAAM,EAAE,6EAA6E;KACtF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ export type KeypressListener = (char: unknown, key: {
2
+ name?: string;
3
+ sequence?: string;
4
+ }) => void;
5
+ /**
6
+ * ما نحتاجه من مجرى المُدخَل، مُصغَّرًا ليُمرَّر بديلٌ في الاختبار.
7
+ * الدوالّ بصيغة الطريقة لا بصيغة الخاصية عن قصد: الأولى تقبل تواقيع ‎ReadStream‎ الحقيقية، والثانية
8
+ * ترفضها تحت ‎strictFunctionTypes‎ على فروق في نوع الوسائط لا أثر لها هنا.
9
+ */
10
+ export type ShellInput = {
11
+ isTTY?: boolean;
12
+ isRaw?: boolean;
13
+ setRawMode?(mode: boolean): unknown;
14
+ listeners(event: string): unknown[];
15
+ on(event: string, listener: KeypressListener): unknown;
16
+ resume(): unknown;
17
+ };
18
+ /**
19
+ * يعيد الوضع الخام ويُعيد ربط مُستمِع المفاتيح إن فُقد.
20
+ *
21
+ * **يُشترَط ألّا يُضاعِف المُستمِع**: يُستدعى بعد كل أمر، وإضافةٌ بلا فحص تعني عشرة مُستمِعين بعد عشرة
22
+ * أوامر — فتُرسَم اللوحة عشر مرّات فوق بعضها ويُحذّر Node من تسرّب مُستمِعين.
23
+ */
24
+ export declare function restoreShellInput(input: ShellInput, listener: KeypressListener): void;
25
+ //# sourceMappingURL=input-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-mode.d.ts","sourceRoot":"","sources":["../../src/shell/input-mode.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAAC;AAElG;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IACpC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC;IACvD,MAAM,IAAI,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAUrF"}
@@ -0,0 +1,17 @@
1
+ import { emitKeypressEvents } from "node:readline";
2
+ /**
3
+ * يعيد الوضع الخام ويُعيد ربط مُستمِع المفاتيح إن فُقد.
4
+ *
5
+ * **يُشترَط ألّا يُضاعِف المُستمِع**: يُستدعى بعد كل أمر، وإضافةٌ بلا فحص تعني عشرة مُستمِعين بعد عشرة
6
+ * أوامر — فتُرسَم اللوحة عشر مرّات فوق بعضها ويُحذّر Node من تسرّب مُستمِعين.
7
+ */
8
+ export function restoreShellInput(input, listener) {
9
+ emitKeypressEvents(input);
10
+ if (!input.listeners("keypress").includes(listener)) {
11
+ input.on("keypress", listener);
12
+ }
13
+ if (input.isTTY && !input.isRaw)
14
+ input.setRawMode?.(true);
15
+ input.resume();
16
+ }
17
+ //# sourceMappingURL=input-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-mode.js","sourceRoot":"","sources":["../../src/shell/input-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAyCnD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAiB,EAAE,QAA0B;IAC7E,kBAAkB,CAAC,KAAc,CAAC,CAAC;IAEnC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;IAE1D,KAAK,CAAC,MAAM,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * يقسّم سطرًا إلى وسائط. سطر فارغ أو مسافات وحدها يعطي مصفوفة فارغة.
3
+ * الاقتباس غير المغلَق يُقرأ حتى نهاية السطر بدل أن يُرمى: من نسي علامة إغلاق يريد ما كتبه، لا خطأً.
4
+ */
5
+ export declare function splitCommandLine(line: string): string[];
6
+ //# sourceMappingURL=parse-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-line.d.ts","sourceRoot":"","sources":["../../src/shell/parse-line.ts"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAkCvD"}