@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,62 @@
1
+ // AR: تقسيم سطر الصَدَفة إلى وسائط. **لا نمرّر السطر إلى صَدَفة النظام** — لا ‎cmd.exe‎ ولا غيرها:
2
+ // الأوامر تُنفَّذ داخل العملية، فتمريره إلى مُفسِّر خارجي كان سيفتح بابًا لإعادة التوجيه والأنابيب
3
+ // وتوسيع المتغيّرات في نصٍّ نكتبه نحن — وهو سطحُ حقنٍ كامل مقابل راحةٍ لم يطلبها أحد.
4
+ //
5
+ // ما يُدعَم هو ما يحتاجه أمر فعليًّا: مسافات فاصلة، واقتباس يجمع ما بينه (مسار فيه فراغ). وما
6
+ // عدا ذلك محارف عادية.
7
+ //
8
+ // **والشرطة المائلة العكسية ليست محرف هروب — هي فاصل مسار.** كتبتُها أوّلًا على عادة صَدَفات
9
+ // POSIX، فكشف الاختبار أن ‎"D:\My Media\films"‎ يخرج ‎D:My Mediafilms‎: أشيعُ مُدخَل على المنصّة
10
+ // التي يعمل عليها هذا الـ CLI يُدمَّر صامتًا. و‎cmd.exe‎ نفسه لا يعتبرها هروبًا. فمن أراد علامة
11
+ // اقتباس داخل وسيط أحاطه بالنوع الآخر — قاعدةٌ لا تكلّف أحدًا شيئًا، بينما القاعدة الأخرى تكلّف
12
+ // كل مسار ويندوز.
13
+ // EN: Splitting a shell line into arguments. **The line is never handed to a system shell** — not
14
+ // cmd.exe, not any other: commands run in-process, so passing it to an external interpreter would
15
+ // open redirection, pipes and variable expansion inside text we author — a full injection surface
16
+ // in exchange for convenience nobody asked for.
17
+ //
18
+ // What is supported is what a command actually needs: spaces as separators and quotes to hold
19
+ // something together (a path with a blank in it). Everything else is an ordinary character.
20
+ //
21
+ // **And a backslash is not an escape — it is a path separator.** It was written as an escape
22
+ // first, out of POSIX-shell habit, and the test showed `"D:\My Media\films"` coming out as
23
+ // `D:My Mediafilms`: the most common input on the platform this CLI runs on, destroyed in
24
+ // silence. cmd.exe does not treat it as an escape either. Anyone needing a quote character inside
25
+ // an argument wraps it in the other quote style — a rule that costs nobody anything, where the
26
+ // other rule costs every Windows path.
27
+ /**
28
+ * يقسّم سطرًا إلى وسائط. سطر فارغ أو مسافات وحدها يعطي مصفوفة فارغة.
29
+ * الاقتباس غير المغلَق يُقرأ حتى نهاية السطر بدل أن يُرمى: من نسي علامة إغلاق يريد ما كتبه، لا خطأً.
30
+ */
31
+ export function splitCommandLine(line) {
32
+ const argv = [];
33
+ let current = "";
34
+ let quote = null;
35
+ let started = false;
36
+ for (let index = 0; index < line.length; index += 1) {
37
+ const char = line[index];
38
+ if (quote && char === quote) {
39
+ quote = null;
40
+ continue;
41
+ }
42
+ if (!quote && (char === '"' || char === "'")) {
43
+ quote = char;
44
+ // اقتباس فارغ ‎""‎ وسيطٌ فارغ مقصود لا لا-شيء.
45
+ started = true;
46
+ continue;
47
+ }
48
+ if (!quote && /\s/.test(char)) {
49
+ if (started)
50
+ argv.push(current);
51
+ current = "";
52
+ started = false;
53
+ continue;
54
+ }
55
+ current += char;
56
+ started = true;
57
+ }
58
+ if (started)
59
+ argv.push(current);
60
+ return argv;
61
+ }
62
+ //# sourceMappingURL=parse-line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-line.js","sourceRoot":"","sources":["../../src/shell/parse-line.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,uGAAuG;AACvG,0FAA0F;AAC1F,EAAE;AACF,kGAAkG;AAClG,2BAA2B;AAC3B,EAAE;AACF,iGAAiG;AACjG,qGAAqG;AACrG,oGAAoG;AACpG,oGAAoG;AACpG,sBAAsB;AACtB,kGAAkG;AAClG,sGAAsG;AACtG,sGAAsG;AACtG,oDAAoD;AACpD,EAAE;AACF,kGAAkG;AAClG,gGAAgG;AAChG,EAAE;AACF,iGAAiG;AACjG,+FAA+F;AAC/F,8FAA8F;AAC9F,sGAAsG;AACtG,mGAAmG;AACnG,2CAA2C;AAE3C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,KAAK,GAAqB,IAAI,CAAC;IACnC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,CAAC;QAE1B,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YAC5B,KAAK,GAAG,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC7C,KAAK,GAAG,IAAI,CAAC;YACb,+CAA+C;YAC/C,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,KAAK,CAAC;YAChB,SAAS;QACX,CAAC;QAED,OAAO,IAAI,IAAI,CAAC;QAChB,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,IAAI,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type CommandHint = {
2
+ id: string;
3
+ /** سطر واحد يصف الأمر. الاسم وحده لا يكفي للاختيار بين ‎stop‎ و‎uninstall‎. */
4
+ summary: string;
5
+ };
6
+ /**
7
+ * ترتيب ثلاثيّ مقصود:
8
+ * ١. ما يبدأ بما كُتب — من كتب ‎st‎ يقصد ‎status‎ أو ‎stop‎ لا ‎library list‎.
9
+ * ٢. ما يبدأ **جزؤه الثاني** بما كُتب — ‎scan‎ يجد ‎library scan‎، فالمواضيع لا تُخفي أوامرها.
10
+ * ٣. ما يحتويه في أي موضع.
11
+ * وداخل كل رتبة أبجديًّا، فلا يتحرّك ترتيب القائمة تحت اليد بين ضغطتين.
12
+ */
13
+ export declare function matchCommands(hints: CommandHint[], term: string, limit: number): CommandHint[];
14
+ //# sourceMappingURL=suggestions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestions.d.ts","sourceRoot":"","sources":["../../src/shell/suggestions.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAuB9F"}
@@ -0,0 +1,35 @@
1
+ // AR: مطابقة أسماء الأوامر لما يكتبه المستخدم. **منطق خالص بلا رسم ولا oclif**، فيُختبَر كما هو —
2
+ // والترتيب هنا هو ما يقرّر أيّ أمر تراه العين أوّلًا، وهو أهمّ من كونه «يعمل».
3
+ // EN: Matching command names against what the user is typing. **Pure logic, no drawing and no
4
+ // oclif**, so it is testable as-is — and the ranking here decides which command the eye lands on
5
+ // first, which matters more than merely working.
6
+ /**
7
+ * ترتيب ثلاثيّ مقصود:
8
+ * ١. ما يبدأ بما كُتب — من كتب ‎st‎ يقصد ‎status‎ أو ‎stop‎ لا ‎library list‎.
9
+ * ٢. ما يبدأ **جزؤه الثاني** بما كُتب — ‎scan‎ يجد ‎library scan‎، فالمواضيع لا تُخفي أوامرها.
10
+ * ٣. ما يحتويه في أي موضع.
11
+ * وداخل كل رتبة أبجديًّا، فلا يتحرّك ترتيب القائمة تحت اليد بين ضغطتين.
12
+ */
13
+ export function matchCommands(hints, term, limit) {
14
+ const needle = term.trim().toLowerCase();
15
+ if (!needle)
16
+ return [];
17
+ const ranked = [];
18
+ for (const hint of hints) {
19
+ const id = hint.id.toLowerCase();
20
+ const rank = id.startsWith(needle)
21
+ ? 0
22
+ : id.split(/[ :]/).some((part) => part.startsWith(needle))
23
+ ? 1
24
+ : id.includes(needle)
25
+ ? 2
26
+ : -1;
27
+ if (rank >= 0)
28
+ ranked.push({ hint, rank });
29
+ }
30
+ return ranked
31
+ .sort((a, b) => a.rank - b.rank || a.hint.id.localeCompare(b.hint.id))
32
+ .slice(0, limit)
33
+ .map((entry) => entry.hint);
34
+ }
35
+ //# sourceMappingURL=suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestions.js","sourceRoot":"","sources":["../../src/shell/suggestions.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,mFAAmF;AACnF,8FAA8F;AAC9F,qGAAqG;AACrG,qDAAqD;AAQrD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAoB,EAAE,IAAY,EAAE,KAAa;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,MAAM,MAAM,GAA+C,EAAE,CAAC;IAE9D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACxD,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACnB,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,CAAC,CAAC,CAAC;QAEX,IAAI,IAAI,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,MAAM;SACV,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACrE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const SUPERVISOR_DEPENDENCIES: readonly ["chalk", "execa", "strip-ansi"];
2
+ //# sourceMappingURL=dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/supervisor/dependencies.ts"],"names":[],"mappings":"AAqCA,eAAO,MAAM,uBAAuB,2CAA4C,CAAC"}
@@ -0,0 +1,38 @@
1
+ // AR: ما يحتاجه المُشرِف فعلًا من ‎node_modules‎ — **قائمةٌ يحرسها اختبار، لا تخمين**.
2
+ //
3
+ // الحزمة تشحن المُشرِف بشجرة اعتمادياته. وأوّل تنفيذٍ نسخ ‎dependencies‎ كاملةً من بيان
4
+ // الواجهة، فبلغت الشجرة ‎143‎ حزمة و‎20.5‎ ميغابايت — أي أن الحزمة لم تنقص شيئًا يُذكر عمّا
5
+ // كانت عليه قبل الفصل (‎34‎ م.ب مقيسة). **والميزة كانت ستُسلَّم بلا فائدتها المعلنة.**
6
+ //
7
+ // والسبب أن الواجهة تحتاج oclif و Ink و React و ‎archiver‎ و‎boxen‎ وأخواتها؛ أمّا المُشرِف —
8
+ // حلقةٌ تشغّل عمليات وتسأل منافذ وتكتب سطورًا — فلا يمسّ شيئًا من ذلك.
9
+ //
10
+ // **ولماذا قائمةٌ مكتوبة بدل تحليلٍ ساكن وقت التحزيم؟** لأن التحليل يجب أن يقع حيث يُقرأ
11
+ // الكود لا حيث يُنسَخ: هنا، بجانب ما يستورد. و‎test/supervisor-dependencies.spec.ts‎ يمشي شجرة
12
+ // الاستيراد من ‎supervisor/entry.ts‎ ويطابقها بهذه القائمة، فحزمةٌ تُضاف إلى المُشرِف وتُنسى
13
+ // هنا **تُفشل الاختبار** — لا تصل عميلًا فتنهار عنده بعد انقطاع كهرباء.
14
+ //
15
+ // وطبقةٌ ثانية من الحماية عند البناء: الإقلاع التجريبي يشغّل ‎supervisor.js --check‎ بزمن تشغيل
16
+ // الحزمة، فيُحمَّل الرسم البيانيّ كاملًا. اعتماديةٌ ناقصة تُسقط البناء على شاشة المطوّر.
17
+ // EN: What the supervisor actually needs from `node_modules` — **a list guarded by a test, not a
18
+ // guess**.
19
+ //
20
+ // The bundle ships the supervisor with its dependency tree. The first implementation copied the
21
+ // CLI manifest's `dependencies` wholesale, and the tree came to 143 packages and 20.5 MB — that
22
+ // is, the bundle shed almost nothing against what it carried before the separation (a measured
23
+ // 34 MB). **The feature would have shipped without its stated benefit.**
24
+ //
25
+ // The reason is that the CLI needs oclif, Ink, React, archiver, boxen and their kin; the
26
+ // supervisor — a loop that spawns processes, probes ports and writes lines — touches none of it.
27
+ //
28
+ // **Why a written list rather than static analysis at packaging time?** Because the analysis
29
+ // belongs where the code is read, not where it is copied: here, beside what imports it. And
30
+ // `test/supervisor-dependencies.spec.ts` walks the import graph from `supervisor/entry.ts` and
31
+ // matches it against this list, so a package added to the supervisor and forgotten here **fails
32
+ // the test** — rather than reaching a customer and collapsing after a power cut.
33
+ //
34
+ // A second layer guards it at build time: the smoke boot runs `supervisor.js --check` on the
35
+ // bundle's own runtime, loading the entire graph. A missing dependency fails the build on the
36
+ // developer's screen.
37
+ export const SUPERVISOR_DEPENDENCIES = ["chalk", "execa", "strip-ansi"];
38
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/supervisor/dependencies.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,EAAE;AACF,4FAA4F;AAC5F,gGAAgG;AAChG,2FAA2F;AAC3F,EAAE;AACF,kGAAkG;AAClG,2EAA2E;AAC3E,EAAE;AACF,6FAA6F;AAC7F,mGAAmG;AACnG,iGAAiG;AACjG,4EAA4E;AAC5E,EAAE;AACF,oGAAoG;AACpG,6FAA6F;AAC7F,iGAAiG;AACjG,eAAe;AACf,EAAE;AACF,oGAAoG;AACpG,oGAAoG;AACpG,mGAAmG;AACnG,6EAA6E;AAC7E,EAAE;AACF,6FAA6F;AAC7F,qGAAqG;AACrG,EAAE;AACF,iGAAiG;AACjG,gGAAgG;AAChG,mGAAmG;AACnG,oGAAoG;AACpG,qFAAqF;AACrF,EAAE;AACF,iGAAiG;AACjG,kGAAkG;AAClG,0BAA0B;AAE1B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAU,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { Profile } from "../profiles/types.js";
2
+ export interface SuperviseOptions {
3
+ /** تشغيل الخدمات عند الدخول. ‎false‎ تعني الإشراف على ما يعمل أصلًا. */
4
+ boot: boolean;
5
+ /** أين تُكتب السطور. الأمر يمرّر ‎this.log‎، والمُشرِف المشحون يمرّر ‎console.log‎. */
6
+ log: (line: string) => void;
7
+ }
8
+ /**
9
+ * AR: الحلقة التي لا تعود. **جولة واحدة تفعل ثلاثة أشياء بترتيب مقصود:**
10
+ * ١ — تستهلك طلب إعادة تشغيل إن وُجد. أوّلًا لأنه فعلٌ صريح طلبه إنسان، ولا يجوز أن يسبقه شيء.
11
+ * ٢ — تسأل المؤقّت. الجدول تلقائيّ ويؤجَّل بأدب.
12
+ * ٣ — تراقب وتُحيي. آخرًا لأن الخطوتين قبله قد أعادتا التشغيل أصلًا، ومسبارٌ يجري أثناء إعادة
13
+ * تشغيل مقصودة يرى خدمة ميّتة فيُحصي محاولة إحياء كاذبة ضدّ حارس الدورة.
14
+ * EN: The loop that does not return. **One round does three things in a deliberate order:**
15
+ * 1 — consume a restart request if there is one. First, because it is an explicit act a human
16
+ * asked for, and nothing may come before it.
17
+ * 2 — ask the timer. The schedule is automatic and defers politely.
18
+ * 3 — monitor and revive. Last, because the two steps above may have just restarted something,
19
+ * and a probe running during an intentional restart sees a dead service and counts a false
20
+ * revival attempt against the loop guard.
21
+ */
22
+ export declare function supervise(profile: Profile, options: SuperviseOptions): Promise<never>;
23
+ /**
24
+ * AR: مدخل المُشرِف المشحون. **يستنتج جذر التثبيت من موقع الملفّ نفسه**، لا من ‎cwd‎ ولا من متغيّر
25
+ * بيئة: مهمّة جدولة ويندوز تبدأ بمجلد عملٍ لا نتحكّم به (‎C:\Windows\system32‎ غالبًا)،
26
+ * وبيئةٍ لا تحمل ما يحمله حساب من ثبّت. المسار الصاعد من ‎<root>\supervisor\bin\‎ يصدق دائمًا،
27
+ * ويتحرّك مع التثبيت إن نُقل بـ‎--root‎ — وهي نفس الحيلة التي تعتمدها الشيمة.
28
+ * EN: The shipped supervisor's entry point. **It infers the install root from the file's own
29
+ * location**, not from `cwd` and not from an environment variable: a Windows scheduled task
30
+ * starts with a working directory we do not control (usually `C:\Windows\system32`) and an
31
+ * environment that carries none of what the installer's account carried. Climbing from
32
+ * `<root>\supervisor\bin\` is always true, and travels with the installation when `--root`
33
+ * moves it — the same trick the shim relies on.
34
+ */
35
+ export declare function main(bundleRoot: string): Promise<never>;
36
+ //# sourceMappingURL=entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/supervisor/entry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAgDpD,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,IAAI,EAAE,OAAO,CAAC;IACd,uFAAuF;IACvF,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAoCD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,CAyE3F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAG7D"}
@@ -0,0 +1,171 @@
1
+ import { buildAppliance } from "../profiles/resolve.js";
2
+ import { isBootTaskInstalled } from "../packaging/boot-task.js";
3
+ import { fetchInternalHealth } from "../probes/internal.client.js";
4
+ import { startServices } from "./orchestrator.js";
5
+ import { ServiceMonitor } from "./monitor.js";
6
+ import { consumeRestartRequest } from "./restart-consumer.js";
7
+ import { ScheduleTimer } from "./schedule-timer.js";
8
+ import { REMOTE_STATE_FILES, removeStateFile, writeStateJson } from "./state-files.js";
9
+ import { renderStartOutcome } from "../render/boot.render.js";
10
+ import { c, glyph } from "../render/theme.js";
11
+ import { EXIT } from "../exit-codes.js";
12
+ // AR: حلقة الإشراف — **جسمُ ‎watch‎ مستخرَجًا من الأمر** (٠٢٦).
13
+ //
14
+ // كان المنطق كلّه داخل ‎commands/watch.ts‎، وهذا كان صحيحًا حين كانت الواجهة تُشحن في الحزمة:
15
+ // مهمّة الإقلاع تنادي ‎fantastic watch‎ فتصل إلى oclif فتصل إلى الحلقة.
16
+ //
17
+ // وقد خرجت الواجهة إلى سِجلّ الحزم (٠٢٦)، وبقي في الحزمة المُشرِف وحده. فصار للحلقة مُناديان:
18
+ // الأمر ‎watch‎ من الواجهة العالمية، و‎bin/supervisor.js‎ المشحون الذي تناديه المهمّة. **ومسارَا
19
+ // إشرافٍ يتباعدان حتمًا** — وهي القاعدة المكتوبة في ‎watch.ts‎ نفسه عن مسارَي الإقلاع، ولنفس
20
+ // السبب: ينجح أحدهما حيث يفشل الآخر ولا يعرف أحد لماذا. فالجسم هنا، والمُناديان غلافان.
21
+ //
22
+ // **ولا يستورد هذا الملفّ oclif.** المُشرِف المشحون يعمل على ‎runtime\‎ داخل الحزمة، وشجرة
23
+ // اعتمادياته هي ما يُنسَخ إليها — فكلّ ما يُستورَد هنا يصير ميغابايتات على قرص كل عميل.
24
+ // EN: The supervision loop — **`watch`'s body, lifted out of the command** (026).
25
+ //
26
+ // All of this logic used to live inside `commands/watch.ts`, and that was right while the CLI
27
+ // shipped inside the bundle: the boot task called `fantastic watch`, which reached oclif, which
28
+ // reached the loop.
29
+ //
30
+ // The CLI has since moved to a package registry (026), and only the supervisor stayed in the
31
+ // bundle. So the loop now has two callers: the `watch` command from the global CLI, and the
32
+ // shipped `bin/supervisor.js` that the boot task calls. **Two supervision paths would inevitably
33
+ // drift** — the rule `watch.ts` itself states about boot paths, for the same reason: one
34
+ // succeeds where the other fails and nobody knows why. So the body lives here and both callers
35
+ // are wrappers.
36
+ //
37
+ // **And this file imports no oclif.** The shipped supervisor runs on the bundle's `runtime\`,
38
+ // and its dependency tree is what gets copied in — so everything imported here becomes megabytes
39
+ // on every customer's disk.
40
+ /** إيقاع الجولة. ثانيتان: أسرع من ذلك يقصف النواة بمسابر، وأبطأ يجعل «≤٣٠ ثانية» وعدًا ضيّقًا. */
41
+ const ROUND_MS = 2_000;
42
+ /** كل كم جولة نجدّد النبض ونسأل عن مهمة الإقلاع. ‎schtasks‎ استدعاء عملية، لا يُنادى كل ثانيتين. */
43
+ const HEARTBEAT_EVERY_ROUNDS = 15;
44
+ function stamp() {
45
+ return new Date().toISOString().slice(11, 19);
46
+ }
47
+ /**
48
+ * AR: من يشاهد الآن؟ **نسأل النواة ولا نخمّن**: هي وحدها تعرف الجلسات (حدّ «الـ CLI يعرض والنواة
49
+ * تقرّر»). ونواةٌ لا تُجيب **لا تؤجّل شيئًا**: أشيع سبب لصمتها هو التعليق، وهو بالضبط ما جاء
50
+ * هذا الجدول ليعالجه — تأجيلٌ عندها يعني نظامًا معلّقًا يحمي نفسه من الإصلاح.
51
+ * EN: Who is watching right now? **We ask the core rather than guess**: it alone knows the sessions
52
+ * (the "the CLI displays, the core decides" boundary). And a core that does not answer **defers
53
+ * nothing**: the commonest reason for its silence is a hang, which is exactly what this schedule
54
+ * exists to cure — deferring then would be a hung system protecting itself from repair.
55
+ */
56
+ async function deferralReason(profile) {
57
+ const health = await fetchInternalHealth(profile, 2_000);
58
+ if (!health.ok)
59
+ return null;
60
+ const watching = health.data.streams?.active ?? 0;
61
+ if (watching === 0)
62
+ return null;
63
+ return watching === 1 ? "ضيف واحد يشاهد الآن" : `${watching} ضيوف يشاهدون الآن`;
64
+ }
65
+ function beat(profile, startedAt, bootTaskInstalled) {
66
+ const status = {
67
+ pid: process.pid,
68
+ startedAt,
69
+ updatedAt: new Date().toISOString(),
70
+ bootTaskInstalled,
71
+ };
72
+ writeStateJson(profile, REMOTE_STATE_FILES.supervisor, status);
73
+ }
74
+ /**
75
+ * AR: الحلقة التي لا تعود. **جولة واحدة تفعل ثلاثة أشياء بترتيب مقصود:**
76
+ * ١ — تستهلك طلب إعادة تشغيل إن وُجد. أوّلًا لأنه فعلٌ صريح طلبه إنسان، ولا يجوز أن يسبقه شيء.
77
+ * ٢ — تسأل المؤقّت. الجدول تلقائيّ ويؤجَّل بأدب.
78
+ * ٣ — تراقب وتُحيي. آخرًا لأن الخطوتين قبله قد أعادتا التشغيل أصلًا، ومسبارٌ يجري أثناء إعادة
79
+ * تشغيل مقصودة يرى خدمة ميّتة فيُحصي محاولة إحياء كاذبة ضدّ حارس الدورة.
80
+ * EN: The loop that does not return. **One round does three things in a deliberate order:**
81
+ * 1 — consume a restart request if there is one. First, because it is an explicit act a human
82
+ * asked for, and nothing may come before it.
83
+ * 2 — ask the timer. The schedule is automatic and defers politely.
84
+ * 3 — monitor and revive. Last, because the two steps above may have just restarted something,
85
+ * and a probe running during an intentional restart sees a dead service and counts a false
86
+ * revival attempt against the loop guard.
87
+ */
88
+ export async function supervise(profile, options) {
89
+ const { log } = options;
90
+ if (options.boot) {
91
+ const outcome = await startServices(profile);
92
+ log(renderStartOutcome(outcome));
93
+ // AR: **لا نخرج عند فشل الإقلاع.** المشرف الذي ينصرف لأن منفذًا كان محجوزًا لحظة الإقلاع هو
94
+ // مشرفٌ لا يعود أبدًا: مهمة ويندوز تعمل مرّة واحدة عند بدء التشغيل. البقاء يعني أن
95
+ // الخدمة تُحيا بعد ثوانٍ حين يتحرّر المنفذ — وهو ما يقع فعلًا عند إقلاع بارد.
96
+ // EN: **We do not exit when the boot fails.** A supervisor that walks away because a port was
97
+ // held at boot is a supervisor that never returns: the Windows task runs once, at startup.
98
+ // Staying means the service is revived seconds later when the port frees up — which is
99
+ // exactly what happens on a cold boot.
100
+ if (!outcome.ok)
101
+ log(c.warn("the services did not all start — supervising anyway, they will be revived"));
102
+ }
103
+ const report = (event) => {
104
+ const paint = event.kind === "revived" || event.kind === "recovered" ? c.ok : c.warn;
105
+ log(`${c.dim(stamp())} ${paint(event.detail)}`);
106
+ };
107
+ const monitor = new ServiceMonitor(profile, { onEvent: report });
108
+ const timer = new ScheduleTimer(profile, {
109
+ deferIf: () => deferralReason(profile),
110
+ onEvent: (message) => log(`${c.dim(stamp())} ${message}`),
111
+ });
112
+ let stopping = false;
113
+ const stop = () => {
114
+ if (stopping)
115
+ return;
116
+ stopping = true;
117
+ // الملفّ يُحذَف عند الخروج المنظّم: نبضٌ متروك خلف مشرف ميّت يقول للنواة «الآلة تعود بعد
118
+ // الإطفاء» وهي لا تعود. القِدَم يحمينا حين لا يكون الخروج منظّمًا، وهذا يحمينا حين يكون.
119
+ removeStateFile(profile, REMOTE_STATE_FILES.supervisor);
120
+ log(c.dim("supervisor stopped."));
121
+ process.exit(EXIT.OK);
122
+ };
123
+ process.on("SIGINT", stop);
124
+ process.on("SIGTERM", stop);
125
+ log(`${c.ok(glyph.pass)} supervising — ${profile.services.map((service) => service.label).join(", ")}`);
126
+ const startedAt = new Date().toISOString();
127
+ let round = 0;
128
+ let bootTaskInstalled = await isBootTaskInstalled();
129
+ for (;;) {
130
+ if (round % HEARTBEAT_EVERY_ROUNDS === 0) {
131
+ if (round > 0)
132
+ bootTaskInstalled = await isBootTaskInstalled();
133
+ beat(profile, startedAt, bootTaskInstalled);
134
+ }
135
+ round += 1;
136
+ // AR: كل جولة داخل ‎try‎: المشرف الذي يموت على استثناء عابر — قرص امتلأ لحظة كتابة نبض،
137
+ // شبكة رفضت مسبارًا — يترك الجهاز بلا حارس إلى إقلاعه التالي. الاستمرار هو وظيفته.
138
+ // EN: Every round inside a `try`: a supervisor that dies on a passing exception — a disk full at
139
+ // the moment a heartbeat is written, a socket refusing a probe — leaves the appliance
140
+ // unguarded until its next boot. Continuing is its whole job.
141
+ try {
142
+ await consumeRestartRequest(profile, {
143
+ deferIf: () => deferralReason(profile),
144
+ onEvent: (message) => log(`${c.dim(stamp())} ${message}`),
145
+ });
146
+ await timer.round();
147
+ await monitor.round();
148
+ }
149
+ catch (error) {
150
+ log(c.warn(`${stamp()} round failed: ${error instanceof Error ? error.message : String(error)}`));
151
+ }
152
+ await new Promise((resolve) => setTimeout(resolve, ROUND_MS));
153
+ }
154
+ }
155
+ /**
156
+ * AR: مدخل المُشرِف المشحون. **يستنتج جذر التثبيت من موقع الملفّ نفسه**، لا من ‎cwd‎ ولا من متغيّر
157
+ * بيئة: مهمّة جدولة ويندوز تبدأ بمجلد عملٍ لا نتحكّم به (‎C:\Windows\system32‎ غالبًا)،
158
+ * وبيئةٍ لا تحمل ما يحمله حساب من ثبّت. المسار الصاعد من ‎<root>\supervisor\bin\‎ يصدق دائمًا،
159
+ * ويتحرّك مع التثبيت إن نُقل بـ‎--root‎ — وهي نفس الحيلة التي تعتمدها الشيمة.
160
+ * EN: The shipped supervisor's entry point. **It infers the install root from the file's own
161
+ * location**, not from `cwd` and not from an environment variable: a Windows scheduled task
162
+ * starts with a working directory we do not control (usually `C:\Windows\system32`) and an
163
+ * environment that carries none of what the installer's account carried. Climbing from
164
+ * `<root>\supervisor\bin\` is always true, and travels with the installation when `--root`
165
+ * moves it — the same trick the shim relies on.
166
+ */
167
+ export async function main(bundleRoot) {
168
+ const profile = buildAppliance(bundleRoot);
169
+ return supervise(profile, { boot: true, log: (line) => console.log(line) });
170
+ }
171
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/supervisor/entry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAqB,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,gEAAgE;AAChE,EAAE;AACF,kGAAkG;AAClG,4EAA4E;AAC5E,EAAE;AACF,kGAAkG;AAClG,qGAAqG;AACrG,iGAAiG;AACjG,4FAA4F;AAC5F,EAAE;AACF,+FAA+F;AAC/F,4FAA4F;AAC5F,kFAAkF;AAClF,EAAE;AACF,kGAAkG;AAClG,oGAAoG;AACpG,wBAAwB;AACxB,EAAE;AACF,iGAAiG;AACjG,gGAAgG;AAChG,qGAAqG;AACrG,6FAA6F;AAC7F,mGAAmG;AACnG,oBAAoB;AACpB,EAAE;AACF,kGAAkG;AAClG,qGAAqG;AACrG,gCAAgC;AAEhC,kGAAkG;AAClG,MAAM,QAAQ,GAAG,KAAK,CAAC;AAEvB,oGAAoG;AACpG,MAAM,sBAAsB,GAAG,EAAE,CAAC;AASlC,SAAS,KAAK;IACZ,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,cAAc,CAAC,OAAgB;IAC5C,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;IAClD,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,QAAQ,oBAAoB,CAAC;AAClF,CAAC;AAED,SAAS,IAAI,CAAC,OAAgB,EAAE,SAAiB,EAAE,iBAA0B;IAC3E,MAAM,MAAM,GAAyB;QACnC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS;QACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,iBAAiB;KAClB,CAAC;IAEF,cAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAgB,EAAE,OAAyB;IACzE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAExB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QAEjC,4FAA4F;QAC5F,uFAAuF;QACvF,kFAAkF;QAClF,8FAA8F;QAC9F,+FAA+F;QAC/F,2FAA2F;QAC3F,2CAA2C;QAC3C,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC,CAAC;IAC5G,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAQ,EAAE;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrF,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE;QACvC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC;QACtC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;KAC1D,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,yFAAyF;QACzF,yFAAyF;QACzF,eAAe,CAAC,OAAO,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACxD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE5B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAExG,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,iBAAiB,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAEpD,SAAS,CAAC;QACR,IAAI,KAAK,GAAG,sBAAsB,KAAK,CAAC,EAAE,CAAC;YACzC,IAAI,KAAK,GAAG,CAAC;gBAAE,iBAAiB,GAAG,MAAM,mBAAmB,EAAE,CAAC;YAC/D,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC9C,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;QAEX,wFAAwF;QACxF,uFAAuF;QACvF,iGAAiG;QACjG,0FAA0F;QAC1F,kEAAkE;QAClE,IAAI,CAAC;YACH,MAAM,qBAAqB,CAAC,OAAO,EAAE;gBACnC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC;gBACtC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;aAC1D,CAAC,CAAC;YACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,CAAC;QAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,UAAkB;IAC3C,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Profile, ServiceDefinition } from "../profiles/types.js";
2
+ import { type ProbeResult } from "../probes/service.probe.js";
3
+ import { type PidRecord } from "./pidfile.js";
4
+ export type StateSource = "record" | "probe" | "none";
5
+ export interface ServiceState {
6
+ definition: ServiceDefinition;
7
+ running: boolean;
8
+ /** من أين عرفنا: سجلّنا، أم سبر خدمة أطلقها غيرنا، أم لا شيء. */
9
+ source: StateSource;
10
+ record?: PidRecord;
11
+ probe: ProbeResult;
12
+ /** مدة التشغيل بالثواني إن أمكن معرفتها. */
13
+ uptimeSeconds?: number;
14
+ }
15
+ export declare function inspectService(profile: Profile, definition: ServiceDefinition): Promise<ServiceState>;
16
+ export declare function inspectServices(profile: Profile): Promise<ServiceState[]>;
17
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/supervisor/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAQrE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAqBD,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,iBAAiB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAiBvB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAE/E"}
@@ -0,0 +1,39 @@
1
+ import { probeService } from "../probes/service.probe.js";
2
+ import { readVerifiedPidRecord } from "./pidfile.js";
3
+ function uptimeFromRecord(record) {
4
+ const stamp = record?.startedAt || record?.writtenAt;
5
+ if (!stamp)
6
+ return undefined;
7
+ const started = Date.parse(stamp);
8
+ if (Number.isNaN(started))
9
+ return undefined;
10
+ return Math.max(0, Math.floor((Date.now() - started) / 1000));
11
+ }
12
+ /** مدة تشغيل النواة كما تبلّغ عنها هي. أدقّ من حساب الـ CLI لأنها تبدأ من لحظة الاستماع. */
13
+ function uptimeFromPayload(probe) {
14
+ const payload = probe.payload;
15
+ if (typeof payload !== "object" || payload === null)
16
+ return undefined;
17
+ const value = payload.uptimeSeconds;
18
+ return typeof value === "number" ? value : undefined;
19
+ }
20
+ export async function inspectService(profile, definition) {
21
+ const [record, probe] = await Promise.all([
22
+ readVerifiedPidRecord(profile, definition.name),
23
+ probeService(definition),
24
+ ]);
25
+ const running = probe.reachable || Boolean(record);
26
+ const source = record ? "record" : probe.reachable ? "probe" : "none";
27
+ return {
28
+ definition,
29
+ running,
30
+ source,
31
+ record,
32
+ probe,
33
+ uptimeSeconds: uptimeFromPayload(probe) ?? uptimeFromRecord(record),
34
+ };
35
+ }
36
+ export async function inspectServices(profile) {
37
+ return Promise.all(profile.services.map((definition) => inspectService(profile, definition)));
38
+ }
39
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/supervisor/inspect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAoB,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAkB,MAAM,cAAc,CAAC;AAqBrE,SAAS,gBAAgB,CAAC,MAA6B;IACrD,MAAM,KAAK,GAAG,MAAM,EAAE,SAAS,IAAI,MAAM,EAAE,SAAS,CAAC;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAE5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,4FAA4F;AAC5F,SAAS,iBAAiB,CAAC,KAAkB;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAEtE,MAAM,KAAK,GAAI,OAAuC,CAAC,aAAa,CAAC;IACrE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAgB,EAChB,UAA6B;IAE7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxC,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC;QAC/C,YAAY,CAAC,UAAU,CAAC;KACzB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,MAAM,GAAgB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAEnF,OAAO;QACL,UAAU;QACV,OAAO;QACP,MAAM;QACN,MAAM;QACN,KAAK;QACL,aAAa,EAAE,iBAAiB,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAgB;IACpD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC"}
@@ -0,0 +1,27 @@
1
+ export interface Invocation {
2
+ file: string;
3
+ argv: string[];
4
+ }
5
+ /**
6
+ * حمولة الإطلاق تُمرَّر إلى المشرف ببيئة العملية لا بسطر الأمر: مسارات ويندوز مليئة بالمسافات
7
+ * وعلامات التنصيص، وسطر الأمر محدود بـ 8191 محرفًا، بينما متغيّر البيئة يقبل 32767 بلا اقتباس
8
+ * ولا هروب.
9
+ *
10
+ * العقد هنا لا في ‎runner.ts‎: ذاك الملف **مدخل تنفيذي** يعمل بمجرّد استيراده، فاستيراده من
11
+ * ‎spawn.ts‎ لأجل نوع واحد كان سيُشغّل مشرفًا داخل الـ CLI نفسه.
12
+ */
13
+ export declare const LAUNCH_PAYLOAD_ENV = "FANTASTIC_SERVICE_LAUNCH";
14
+ export interface LaunchPayload {
15
+ label: string;
16
+ command: string;
17
+ args: string[];
18
+ cwd: string;
19
+ env: Record<string, string>;
20
+ }
21
+ /**
22
+ * لماذا لا نطلق ‎npm.cmd‎ مباشرة؟ ‎spawn‎ الخام يرفض ملفات ‎.cmd‎ منذ إصلاح CVE-2024-27980 فيرمي
23
+ * ‎EINVAL‎. وإطلاق ‎node‎ مباشرةً على ‎npm-cli.js‎ يحلّها ويُبقي سكربتات ‎package.json‎ مصدر الحقيقة،
24
+ * فلا يخترع الـ CLI طريقة تشغيل ثانية تنحرف عنها.
25
+ */
26
+ export declare function resolveInvocation(command: string, args: string[]): Invocation;
27
+ //# sourceMappingURL=invocation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invocation.d.ts","sourceRoot":"","sources":["../../src/supervisor/invocation.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAiB7E"}
@@ -0,0 +1,33 @@
1
+ import { existsSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ /**
4
+ * حمولة الإطلاق تُمرَّر إلى المشرف ببيئة العملية لا بسطر الأمر: مسارات ويندوز مليئة بالمسافات
5
+ * وعلامات التنصيص، وسطر الأمر محدود بـ 8191 محرفًا، بينما متغيّر البيئة يقبل 32767 بلا اقتباس
6
+ * ولا هروب.
7
+ *
8
+ * العقد هنا لا في ‎runner.ts‎: ذاك الملف **مدخل تنفيذي** يعمل بمجرّد استيراده، فاستيراده من
9
+ * ‎spawn.ts‎ لأجل نوع واحد كان سيُشغّل مشرفًا داخل الـ CLI نفسه.
10
+ */
11
+ export const LAUNCH_PAYLOAD_ENV = "FANTASTIC_SERVICE_LAUNCH";
12
+ /**
13
+ * لماذا لا نطلق ‎npm.cmd‎ مباشرة؟ ‎spawn‎ الخام يرفض ملفات ‎.cmd‎ منذ إصلاح CVE-2024-27980 فيرمي
14
+ * ‎EINVAL‎. وإطلاق ‎node‎ مباشرةً على ‎npm-cli.js‎ يحلّها ويُبقي سكربتات ‎package.json‎ مصدر الحقيقة،
15
+ * فلا يخترع الـ CLI طريقة تشغيل ثانية تنحرف عنها.
16
+ */
17
+ export function resolveInvocation(command, args) {
18
+ const isNpm = /(^|[\\/])npm(\.cmd|\.exe)?$/i.test(command);
19
+ if (isNpm) {
20
+ const npmCli = join(dirname(process.execPath), "node_modules", "npm", "bin", "npm-cli.js");
21
+ if (existsSync(npmCli))
22
+ return { file: process.execPath, argv: [npmCli, ...args] };
23
+ }
24
+ // احتياط: تثبيت Node لا نجد فيه ‎npm-cli.js‎.
25
+ if (process.platform === "win32" && /\.(cmd|bat)$/i.test(command)) {
26
+ const line = [command, ...args]
27
+ .map((part) => (/[\s&|<>^"]/.test(part) ? `"${part}"` : part))
28
+ .join(" ");
29
+ return { file: "cmd.exe", argv: ["/d", "/s", "/c", line] };
30
+ }
31
+ return { file: command, argv: args };
32
+ }
33
+ //# sourceMappingURL=invocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invocation.js","sourceRoot":"","sources":["../../src/supervisor/invocation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAe1C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAU7D;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,IAAc;IAC/D,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE3D,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAC3F,IAAI,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACrF,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;aAC5B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAC7D,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IAC7D,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type { Profile, ServiceName } from "../profiles/types.js";
2
+ /** كم فشلًا متتاليًا قبل أن نعدّ الخدمة ميّتة. */
3
+ export declare const FAILURES_BEFORE_REVIVAL = 2;
4
+ /** نافذة الحارس وحدّها: أكثر من ثلاث إحياءات في عشر دقائق يعني عطلًا لا حادثة. */
5
+ export declare const REVIVAL_LIMIT = 3;
6
+ export declare const REVIVAL_WINDOW_MS: number;
7
+ export interface RevivalDecision {
8
+ /** نُحيي الآن؟ */
9
+ revive: boolean;
10
+ /** توقّفنا نهائيًا عن إحياء هذه الخدمة؟ يقع مرّة واحدة عند تجاوز الحدّ. */
11
+ looping: boolean;
12
+ /** عدد الإحياءات داخل النافذة، بما فيها هذه. */
13
+ attempts: number;
14
+ }
15
+ /**
16
+ * AR: حارس الدورة، **خالص بلا أثر جانبي وبلا ساعة خاصة به**. الزمن يُمرَّر إليه، فيُختبَر عبور
17
+ * عشر دقائق في سطر بدل انتظارها فعلًا — واختبارٌ لا يُكتَب لأنه بطيء هو اختبارٌ لا يوجد.
18
+ * EN: The loop guard, **pure, side-effect-free, and holding no clock of its own**. Time is passed
19
+ * in, so crossing a ten-minute window is tested in a line instead of waited out — and a test
20
+ * not written because it is slow is a test that does not exist.
21
+ */
22
+ export declare class RevivalGuard {
23
+ private readonly limit;
24
+ private readonly windowMs;
25
+ private readonly revivals;
26
+ private readonly stopped;
27
+ constructor(limit?: number, windowMs?: number);
28
+ /** هل توقّفنا عن إحياء هذه الخدمة؟ */
29
+ isStopped(service: string): boolean;
30
+ /**
31
+ * يسجّل محاولة إحياء ويقرّر مصيرها. **يُستدعى مرّة لكل محاولة** — استدعاؤه للاستعلام وحده
32
+ * يفسد العدّ.
33
+ */
34
+ record(service: string, now: number): RevivalDecision;
35
+ /** يمسح تاريخ خدمة عادت واستقرّت — أو أعاد المالك تشغيلها بيده. */
36
+ clear(service: string): void;
37
+ }
38
+ export interface MonitorEvent {
39
+ service: ServiceName;
40
+ kind: "revived" | "revival-failed" | "loop-stopped" | "recovered";
41
+ detail: string;
42
+ }
43
+ export interface MonitorOptions {
44
+ onEvent?: (event: MonitorEvent) => void;
45
+ guard?: RevivalGuard;
46
+ }
47
+ /**
48
+ * AR: جولة مراقبة واحدة على كل الخدمات. جولةٌ لا حلقة: من ينادينا يملك الإيقاع، فيُختبَر السلوك
49
+ * بجولات متتابعة بلا مؤقّتات ولا انتظار.
50
+ * EN: One monitoring round over every service. A round rather than a loop: the caller owns the
51
+ * cadence, so the behaviour is tested by calling rounds in sequence with no timers and no waits.
52
+ */
53
+ export declare class ServiceMonitor {
54
+ private readonly profile;
55
+ private readonly options;
56
+ private readonly failures;
57
+ private readonly guard;
58
+ constructor(profile: Profile, options?: MonitorOptions);
59
+ round(now?: number): Promise<void>;
60
+ private check;
61
+ private emit;
62
+ }
63
+ //# sourceMappingURL=monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/supervisor/monitor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAqB,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA+BpF,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,kFAAkF;AAClF,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,iBAAiB,QAAc,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IAKrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAG1B,KAAK,SAAgB,EACrB,QAAQ,SAAoB;IAG/C,sCAAsC;IACtC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInC;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe;IAgBrD,mEAAmE;IACnE,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAI7B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,SAAS,GAAG,gBAAgB,GAAG,cAAc,GAAG,WAAW,CAAC;IAClE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAGlB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,cAAmB;IAKzC,KAAK,CAAC,GAAG,GAAE,MAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;YAMtC,KAAK;IAuDnB,OAAO,CAAC,IAAI;CAGb"}