@rulemetric/cli 0.2.1 → 0.2.2

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 (780) hide show
  1. package/dist/base-command.js +13 -52
  2. package/dist/base-command.js.map +7 -1
  3. package/dist/chunk-2AM54TUK.js +59 -0
  4. package/dist/chunk-2AM54TUK.js.map +7 -0
  5. package/dist/chunk-3TIMQ3O6.js +96 -0
  6. package/dist/chunk-3TIMQ3O6.js.map +7 -0
  7. package/dist/chunk-4BHDHHKL.js +48 -0
  8. package/dist/chunk-4BHDHHKL.js.map +7 -0
  9. package/dist/chunk-4D537GXE.js +99 -0
  10. package/dist/chunk-4D537GXE.js.map +7 -0
  11. package/dist/chunk-4SCZK7AL.js +129 -0
  12. package/dist/chunk-4SCZK7AL.js.map +7 -0
  13. package/dist/chunk-4WFE4PFP.js +61 -0
  14. package/dist/chunk-4WFE4PFP.js.map +7 -0
  15. package/dist/chunk-52WIYRZH.js +73 -0
  16. package/dist/chunk-52WIYRZH.js.map +7 -0
  17. package/dist/chunk-7FAA3YNB.js +1549 -0
  18. package/dist/chunk-7FAA3YNB.js.map +7 -0
  19. package/dist/chunk-7NYKWN7U.js +12 -0
  20. package/dist/chunk-7NYKWN7U.js.map +7 -0
  21. package/dist/chunk-AULP2OWH.js +99 -0
  22. package/dist/chunk-AULP2OWH.js.map +7 -0
  23. package/dist/chunk-B5KNTGMJ.js +1788 -0
  24. package/dist/chunk-B5KNTGMJ.js.map +7 -0
  25. package/dist/chunk-BD7CY42U.js +23 -0
  26. package/dist/chunk-BD7CY42U.js.map +7 -0
  27. package/dist/chunk-BO76WKJR.js +42 -0
  28. package/dist/chunk-BO76WKJR.js.map +7 -0
  29. package/dist/chunk-BRD5RUGM.js +53 -0
  30. package/dist/chunk-BRD5RUGM.js.map +7 -0
  31. package/dist/chunk-BT6Z6545.js +43 -0
  32. package/dist/chunk-BT6Z6545.js.map +7 -0
  33. package/dist/chunk-BZDKEQKU.js +39 -0
  34. package/dist/chunk-BZDKEQKU.js.map +7 -0
  35. package/dist/chunk-CROYS75W.js +161 -0
  36. package/dist/chunk-CROYS75W.js.map +7 -0
  37. package/dist/chunk-DGHWRQXL.js +17 -0
  38. package/dist/chunk-DGHWRQXL.js.map +7 -0
  39. package/dist/chunk-DQ3KELXD.js +74 -0
  40. package/dist/chunk-DQ3KELXD.js.map +7 -0
  41. package/dist/chunk-DTFXCHHI.js +108 -0
  42. package/dist/chunk-DTFXCHHI.js.map +7 -0
  43. package/dist/chunk-DU73QUS3.js +75 -0
  44. package/dist/chunk-DU73QUS3.js.map +7 -0
  45. package/dist/chunk-EHZJ6OXD.js +307 -0
  46. package/dist/chunk-EHZJ6OXD.js.map +7 -0
  47. package/dist/chunk-EJOI2ZGU.js +109 -0
  48. package/dist/chunk-EJOI2ZGU.js.map +7 -0
  49. package/dist/chunk-EKJ2CABV.js +76 -0
  50. package/dist/chunk-EKJ2CABV.js.map +7 -0
  51. package/dist/chunk-EKP32DLN.js +16 -0
  52. package/dist/chunk-EKP32DLN.js.map +7 -0
  53. package/dist/chunk-EOOP6WTC.js +148 -0
  54. package/dist/chunk-EOOP6WTC.js.map +7 -0
  55. package/dist/chunk-ERPMDAO3.js +20 -0
  56. package/dist/chunk-ERPMDAO3.js.map +7 -0
  57. package/dist/chunk-FTJRMUID.js +96 -0
  58. package/dist/chunk-FTJRMUID.js.map +7 -0
  59. package/dist/chunk-FZKLLNDS.js +228 -0
  60. package/dist/chunk-FZKLLNDS.js.map +7 -0
  61. package/dist/chunk-GQCISMAH.js +157 -0
  62. package/dist/chunk-GQCISMAH.js.map +7 -0
  63. package/dist/chunk-IGXX624H.js +55 -0
  64. package/dist/chunk-IGXX624H.js.map +7 -0
  65. package/dist/chunk-IJGF2ETG.js +68 -0
  66. package/dist/chunk-IJGF2ETG.js.map +7 -0
  67. package/dist/chunk-IWYCRLEK.js +220 -0
  68. package/dist/chunk-IWYCRLEK.js.map +7 -0
  69. package/dist/chunk-J7N3DLH6.js +117 -0
  70. package/dist/chunk-J7N3DLH6.js.map +7 -0
  71. package/dist/chunk-JX5UI6RW.js +99 -0
  72. package/dist/chunk-JX5UI6RW.js.map +7 -0
  73. package/dist/chunk-K3BFZ7KG.js +154 -0
  74. package/dist/chunk-K3BFZ7KG.js.map +7 -0
  75. package/dist/chunk-KHJUQFIK.js +51 -0
  76. package/dist/chunk-KHJUQFIK.js.map +7 -0
  77. package/dist/chunk-KRBQLMOP.js +41 -0
  78. package/dist/chunk-KRBQLMOP.js.map +7 -0
  79. package/dist/chunk-KZRFUXGF.js +145 -0
  80. package/dist/chunk-KZRFUXGF.js.map +7 -0
  81. package/dist/chunk-L674RNKQ.js +492 -0
  82. package/dist/chunk-L674RNKQ.js.map +7 -0
  83. package/dist/chunk-N52AHNBH.js +47 -0
  84. package/dist/chunk-N52AHNBH.js.map +7 -0
  85. package/dist/chunk-NIDLJO6F.js +228 -0
  86. package/dist/chunk-NIDLJO6F.js.map +7 -0
  87. package/dist/chunk-NSBPE2FW.js +17 -0
  88. package/dist/chunk-NSBPE2FW.js.map +7 -0
  89. package/dist/chunk-OGVORIFM.js +70 -0
  90. package/dist/chunk-OGVORIFM.js.map +7 -0
  91. package/dist/chunk-OQSQC7VB.js +77 -0
  92. package/dist/chunk-OQSQC7VB.js.map +7 -0
  93. package/dist/chunk-PHLMIZKM.js +153 -0
  94. package/dist/chunk-PHLMIZKM.js.map +7 -0
  95. package/dist/chunk-PQU7GZ7A.js +92 -0
  96. package/dist/chunk-PQU7GZ7A.js.map +7 -0
  97. package/dist/chunk-PXVQLD7S.js +196 -0
  98. package/dist/chunk-PXVQLD7S.js.map +7 -0
  99. package/dist/chunk-QD6X4L4L.js +79 -0
  100. package/dist/chunk-QD6X4L4L.js.map +7 -0
  101. package/dist/chunk-QJQS6TUN.js +44 -0
  102. package/dist/chunk-QJQS6TUN.js.map +7 -0
  103. package/dist/chunk-QJXAULRC.js +191 -0
  104. package/dist/chunk-QJXAULRC.js.map +7 -0
  105. package/dist/chunk-QN34TGD3.js +83 -0
  106. package/dist/chunk-QN34TGD3.js.map +7 -0
  107. package/dist/chunk-R5MFHGHR.js +122 -0
  108. package/dist/chunk-R5MFHGHR.js.map +7 -0
  109. package/dist/chunk-RH7NHVSK.js +16 -0
  110. package/dist/chunk-RH7NHVSK.js.map +7 -0
  111. package/dist/chunk-RJ7BHDLM.js +121 -0
  112. package/dist/chunk-RJ7BHDLM.js.map +7 -0
  113. package/dist/chunk-RQ2TMLKG.js +142 -0
  114. package/dist/chunk-RQ2TMLKG.js.map +7 -0
  115. package/dist/chunk-S56LOTGQ.js +63 -0
  116. package/dist/chunk-S56LOTGQ.js.map +7 -0
  117. package/dist/chunk-UF73WX2J.js +49 -0
  118. package/dist/chunk-UF73WX2J.js.map +7 -0
  119. package/dist/chunk-W53GKIZQ.js +50 -0
  120. package/dist/chunk-W53GKIZQ.js.map +7 -0
  121. package/dist/chunk-WA4MWYRW.js +254 -0
  122. package/dist/chunk-WA4MWYRW.js.map +7 -0
  123. package/dist/chunk-WFULKPEQ.js +269 -0
  124. package/dist/chunk-WFULKPEQ.js.map +7 -0
  125. package/dist/chunk-XC6M4CSW.js +44 -0
  126. package/dist/chunk-XC6M4CSW.js.map +7 -0
  127. package/dist/chunk-XPUEGHXN.js +243 -0
  128. package/dist/chunk-XPUEGHXN.js.map +7 -0
  129. package/dist/chunk-XZXS2W24.js +148 -0
  130. package/dist/chunk-XZXS2W24.js.map +7 -0
  131. package/dist/chunk-YBNW7ARH.js +167 -0
  132. package/dist/chunk-YBNW7ARH.js.map +7 -0
  133. package/dist/chunk-YNIH3KMU.js +121 -0
  134. package/dist/chunk-YNIH3KMU.js.map +7 -0
  135. package/dist/commands/antigravity/backfill.js +135 -0
  136. package/dist/commands/antigravity/backfill.js.map +7 -0
  137. package/dist/commands/auth/create-key.js +48 -33
  138. package/dist/commands/auth/create-key.js.map +7 -1
  139. package/dist/commands/auth/login.js +58 -46
  140. package/dist/commands/auth/login.js.map +7 -1
  141. package/dist/commands/auth/logout.js +28 -13
  142. package/dist/commands/auth/logout.js.map +7 -1
  143. package/dist/commands/auth/revoke-key.js +32 -18
  144. package/dist/commands/auth/revoke-key.js.map +7 -1
  145. package/dist/commands/auth/status.js +40 -22
  146. package/dist/commands/auth/status.js.map +7 -1
  147. package/dist/commands/catalog/index.js +50 -34
  148. package/dist/commands/catalog/index.js.map +7 -1
  149. package/dist/commands/catalog/recommend.js +41 -26
  150. package/dist/commands/catalog/recommend.js.map +7 -1
  151. package/dist/commands/convert.js +72 -54
  152. package/dist/commands/convert.js.map +7 -1
  153. package/dist/commands/converters.js +52 -38
  154. package/dist/commands/converters.js.map +7 -1
  155. package/dist/commands/crons/list.js +50 -24
  156. package/dist/commands/crons/list.js.map +7 -1
  157. package/dist/commands/crons/run.js +72 -47
  158. package/dist/commands/crons/run.js.map +7 -1
  159. package/dist/commands/dashboard.js +45 -24
  160. package/dist/commands/dashboard.js.map +7 -1
  161. package/dist/commands/eval-targets/create.js +51 -39
  162. package/dist/commands/eval-targets/create.js.map +7 -1
  163. package/dist/commands/eval-targets/list.js +52 -35
  164. package/dist/commands/eval-targets/list.js.map +7 -1
  165. package/dist/commands/evals/agent.js +292 -0
  166. package/dist/commands/evals/agent.js.map +7 -0
  167. package/dist/commands/evals/benchmark.js +70 -51
  168. package/dist/commands/evals/benchmark.js.map +7 -1
  169. package/dist/commands/evals/compare.js +90 -78
  170. package/dist/commands/evals/compare.js.map +7 -1
  171. package/dist/commands/evals/create.js +64 -50
  172. package/dist/commands/evals/create.js.map +7 -1
  173. package/dist/commands/evals/optimize-description.js +225 -222
  174. package/dist/commands/evals/optimize-description.js.map +7 -1
  175. package/dist/commands/evals/optimize.js +206 -196
  176. package/dist/commands/evals/optimize.js.map +7 -1
  177. package/dist/commands/evals/run.js +178 -164
  178. package/dist/commands/evals/run.js.map +7 -1
  179. package/dist/commands/gateway/ensure.js +33 -19
  180. package/dist/commands/gateway/ensure.js.map +7 -1
  181. package/dist/commands/hooks/install.js +335 -275
  182. package/dist/commands/hooks/install.js.map +7 -1
  183. package/dist/commands/hooks/run.js +72 -53
  184. package/dist/commands/hooks/run.js.map +7 -1
  185. package/dist/commands/hooks/uninstall.js +117 -94
  186. package/dist/commands/hooks/uninstall.js.map +7 -1
  187. package/dist/commands/import.js +63 -53
  188. package/dist/commands/import.js.map +7 -1
  189. package/dist/commands/instructions/create.js +71 -58
  190. package/dist/commands/instructions/create.js.map +7 -1
  191. package/dist/commands/instructions/delete.js +53 -36
  192. package/dist/commands/instructions/delete.js.map +7 -1
  193. package/dist/commands/instructions/fork.js +33 -19
  194. package/dist/commands/instructions/fork.js.map +7 -1
  195. package/dist/commands/instructions/get.js +66 -49
  196. package/dist/commands/instructions/get.js.map +7 -1
  197. package/dist/commands/instructions/list.js +63 -46
  198. package/dist/commands/instructions/list.js.map +7 -1
  199. package/dist/commands/instructions/promote.js +41 -27
  200. package/dist/commands/instructions/promote.js.map +7 -1
  201. package/dist/commands/instructions/pull.js +37 -21
  202. package/dist/commands/instructions/pull.js.map +7 -1
  203. package/dist/commands/instructions/upstream.js +36 -21
  204. package/dist/commands/instructions/upstream.js.map +7 -1
  205. package/dist/commands/instructions/versions.js +51 -33
  206. package/dist/commands/instructions/versions.js.map +7 -1
  207. package/dist/commands/launcher.js +39 -0
  208. package/dist/commands/launcher.js.map +7 -0
  209. package/dist/commands/org/current.js +74 -68
  210. package/dist/commands/org/current.js.map +7 -1
  211. package/dist/commands/org/list.js +50 -36
  212. package/dist/commands/org/list.js.map +7 -1
  213. package/dist/commands/org/switch.js +69 -51
  214. package/dist/commands/org/switch.js.map +7 -1
  215. package/dist/commands/packs/add-instruction.js +36 -22
  216. package/dist/commands/packs/add-instruction.js.map +7 -1
  217. package/dist/commands/packs/apply.js +38 -24
  218. package/dist/commands/packs/apply.js.map +7 -1
  219. package/dist/commands/packs/create.js +47 -33
  220. package/dist/commands/packs/create.js.map +7 -1
  221. package/dist/commands/packs/fork.js +33 -19
  222. package/dist/commands/packs/fork.js.map +7 -1
  223. package/dist/commands/packs/get.js +54 -35
  224. package/dist/commands/packs/get.js.map +7 -1
  225. package/dist/commands/packs/list.js +64 -47
  226. package/dist/commands/packs/list.js.map +7 -1
  227. package/dist/commands/packs/remove-instruction.js +34 -20
  228. package/dist/commands/packs/remove-instruction.js.map +7 -1
  229. package/dist/commands/proxy/env.js +126 -116
  230. package/dist/commands/proxy/env.js.map +7 -1
  231. package/dist/commands/proxy/logs.js +83 -74
  232. package/dist/commands/proxy/logs.js.map +7 -1
  233. package/dist/commands/proxy/restart.js +34 -36
  234. package/dist/commands/proxy/restart.js.map +7 -1
  235. package/dist/commands/proxy/setup.js +432 -375
  236. package/dist/commands/proxy/setup.js.map +7 -1
  237. package/dist/commands/proxy/start.js +289 -289
  238. package/dist/commands/proxy/start.js.map +7 -1
  239. package/dist/commands/proxy/status.js +74 -64
  240. package/dist/commands/proxy/status.js.map +7 -1
  241. package/dist/commands/proxy/stop.js +81 -75
  242. package/dist/commands/proxy/stop.js.map +7 -1
  243. package/dist/commands/research/backfill.js +58 -0
  244. package/dist/commands/research/backfill.js.map +7 -0
  245. package/dist/commands/research/tail-transcript.js +69 -0
  246. package/dist/commands/research/tail-transcript.js.map +7 -0
  247. package/dist/commands/service/install.js +639 -405
  248. package/dist/commands/service/install.js.map +7 -1
  249. package/dist/commands/service/status.js +178 -111
  250. package/dist/commands/service/status.js.map +7 -1
  251. package/dist/commands/service/uninstall.js +85 -110
  252. package/dist/commands/service/uninstall.js.map +7 -1
  253. package/dist/commands/sessions/analyze.js +46 -25
  254. package/dist/commands/sessions/analyze.js.map +7 -1
  255. package/dist/commands/sessions/end.js +81 -79
  256. package/dist/commands/sessions/end.js.map +7 -1
  257. package/dist/commands/sessions/import.js +44 -27
  258. package/dist/commands/sessions/import.js.map +7 -1
  259. package/dist/commands/sessions/list.js +46 -33
  260. package/dist/commands/sessions/list.js.map +7 -1
  261. package/dist/commands/sessions/start.js +88 -87
  262. package/dist/commands/sessions/start.js.map +7 -1
  263. package/dist/commands/signals/report.js +42 -34
  264. package/dist/commands/signals/report.js.map +7 -1
  265. package/dist/commands/skills/export-approved.js +44 -30
  266. package/dist/commands/skills/export-approved.js.map +7 -1
  267. package/dist/commands/skills/install.js +99 -84
  268. package/dist/commands/skills/install.js.map +7 -1
  269. package/dist/commands/skills/list.js +59 -42
  270. package/dist/commands/skills/list.js.map +7 -1
  271. package/dist/commands/skills/publish.js +95 -78
  272. package/dist/commands/skills/publish.js.map +7 -1
  273. package/dist/commands/skills/search.js +68 -53
  274. package/dist/commands/skills/search.js.map +7 -1
  275. package/dist/commands/skills/update.js +52 -39
  276. package/dist/commands/skills/update.js.map +7 -1
  277. package/dist/commands/suggestions/accept.js +82 -59
  278. package/dist/commands/suggestions/accept.js.map +7 -1
  279. package/dist/commands/suggestions/dismiss.js +44 -26
  280. package/dist/commands/suggestions/dismiss.js.map +7 -1
  281. package/dist/commands/suggestions/list.js +59 -39
  282. package/dist/commands/suggestions/list.js.map +7 -1
  283. package/dist/commands/suggestions/refresh.js +26 -11
  284. package/dist/commands/suggestions/refresh.js.map +7 -1
  285. package/dist/cursor-BGQJ4CWI.js +134 -0
  286. package/dist/cursor-BGQJ4CWI.js.map +7 -0
  287. package/dist/dashboard/Dashboard.js +229 -126
  288. package/dist/dashboard/Dashboard.js.map +7 -1
  289. package/dist/dashboard/data.js +13 -137
  290. package/dist/dashboard/data.js.map +7 -1
  291. package/dist/dashboard/launcher/ActiveJobsList.js +10 -0
  292. package/dist/dashboard/launcher/ActiveJobsList.js.map +7 -0
  293. package/dist/dashboard/launcher/LauncherOverlay.js +14 -0
  294. package/dist/dashboard/launcher/LauncherOverlay.js.map +7 -0
  295. package/dist/dashboard/launcher/NewLaunchForm.js +10 -0
  296. package/dist/dashboard/launcher/NewLaunchForm.js.map +7 -0
  297. package/dist/dashboard/launcher/api.js +14 -0
  298. package/dist/dashboard/launcher/api.js.map +7 -0
  299. package/dist/dashboard/launcher/tool-labels.js +10 -0
  300. package/dist/dashboard/launcher/tool-labels.js.map +7 -0
  301. package/dist/dashboard/launcher/types.js +1 -0
  302. package/dist/dashboard/launcher/types.js.map +7 -0
  303. package/dist/dashboard/launcher/useLaunchJobs.js +9 -0
  304. package/dist/dashboard/launcher/useLaunchJobs.js.map +7 -0
  305. package/dist/dashboard/panels/friction.js +10 -22
  306. package/dist/dashboard/panels/friction.js.map +7 -1
  307. package/dist/dashboard/panels/insights.js +10 -109
  308. package/dist/dashboard/panels/insights.js.map +7 -1
  309. package/dist/dashboard/panels/instructions.js +10 -17
  310. package/dist/dashboard/panels/instructions.js.map +7 -1
  311. package/dist/dashboard/panels/outcomes.js +9 -28
  312. package/dist/dashboard/panels/outcomes.js.map +7 -1
  313. package/dist/dashboard/panels/overview.js +10 -20
  314. package/dist/dashboard/panels/overview.js.map +7 -1
  315. package/dist/dashboard/panels/shared.js +18 -61
  316. package/dist/dashboard/panels/shared.js.map +7 -1
  317. package/dist/dashboard/types.js +23 -26
  318. package/dist/dashboard/types.js.map +7 -1
  319. package/dist/dist-CSUYFYKI.js +52 -0
  320. package/dist/dist-CSUYFYKI.js.map +7 -0
  321. package/dist/index.js +8 -2
  322. package/dist/index.js.map +7 -1
  323. package/dist/lib/active-org-refresh.js +15 -108
  324. package/dist/lib/active-org-refresh.js.map +7 -1
  325. package/dist/lib/active-org.js +15 -95
  326. package/dist/lib/active-org.js.map +7 -1
  327. package/dist/lib/agent-loop.js +44 -0
  328. package/dist/lib/agent-loop.js.map +7 -0
  329. package/dist/lib/antigravity-transcript.js +22 -0
  330. package/dist/lib/antigravity-transcript.js.map +7 -0
  331. package/dist/lib/api-client.js +21 -92
  332. package/dist/lib/api-client.js.map +7 -1
  333. package/dist/lib/auth.js +26 -137
  334. package/dist/lib/auth.js.map +7 -1
  335. package/dist/lib/detect-languages.js +8 -113
  336. package/dist/lib/detect-languages.js.map +7 -1
  337. package/dist/lib/detect-tmux.js +9 -0
  338. package/dist/lib/detect-tmux.js.map +7 -0
  339. package/dist/lib/eval-analyzer.js +9 -89
  340. package/dist/lib/eval-analyzer.js.map +7 -1
  341. package/dist/lib/eval-benchmark.js +12 -92
  342. package/dist/lib/eval-benchmark.js.map +7 -1
  343. package/dist/lib/eval-conversation-handler.js +13 -200
  344. package/dist/lib/eval-conversation-handler.js.map +7 -1
  345. package/dist/lib/eval-executor.js +8 -83
  346. package/dist/lib/eval-executor.js.map +7 -1
  347. package/dist/lib/eval-grader.js +9 -123
  348. package/dist/lib/eval-grader.js.map +7 -1
  349. package/dist/lib/eval-meta-judge.js +9 -116
  350. package/dist/lib/eval-meta-judge.js.map +7 -1
  351. package/dist/lib/eval-trigger-tester.js +11 -96
  352. package/dist/lib/eval-trigger-tester.js.map +7 -1
  353. package/dist/lib/eval-worktree.js +8 -87
  354. package/dist/lib/eval-worktree.js.map +7 -1
  355. package/dist/lib/gateway-entry.js +20 -18
  356. package/dist/lib/gateway-entry.js.map +7 -1
  357. package/dist/lib/gateway-lifecycle.js +22 -97
  358. package/dist/lib/gateway-lifecycle.js.map +7 -1
  359. package/dist/lib/gateway.js +12 -216
  360. package/dist/lib/gateway.js.map +7 -1
  361. package/dist/lib/handlers/cron-close-stale-sessions.js +18 -7
  362. package/dist/lib/handlers/cron-close-stale-sessions.js.map +7 -1
  363. package/dist/lib/handlers/cron-data-integrity-audit.js +21 -15
  364. package/dist/lib/handlers/cron-data-integrity-audit.js.map +7 -1
  365. package/dist/lib/handlers/cron-refresh-skills.js +7 -90
  366. package/dist/lib/handlers/cron-refresh-skills.js.map +7 -1
  367. package/dist/lib/handlers/cron-suggest-instructions.js +14 -158
  368. package/dist/lib/handlers/cron-suggest-instructions.js.map +7 -1
  369. package/dist/lib/handlers/process-announcement.js +11 -0
  370. package/dist/lib/handlers/process-announcement.js.map +7 -0
  371. package/dist/lib/handlers/process-changelog.js +11 -0
  372. package/dist/lib/handlers/process-changelog.js.map +7 -0
  373. package/dist/lib/handlers/process-conversation.js +14 -35
  374. package/dist/lib/handlers/process-conversation.js.map +7 -1
  375. package/dist/lib/handlers/process-eval.js +15 -207
  376. package/dist/lib/handlers/process-eval.js.map +7 -1
  377. package/dist/lib/handlers/process-insights.js +14 -300
  378. package/dist/lib/handlers/process-insights.js.map +7 -1
  379. package/dist/lib/handlers/process-launch.js +16 -41
  380. package/dist/lib/handlers/process-launch.js.map +7 -1
  381. package/dist/lib/handlers/process-run-cleanup.js +13 -0
  382. package/dist/lib/handlers/process-run-cleanup.js.map +7 -0
  383. package/dist/lib/handlers/process-send-message.js +10 -0
  384. package/dist/lib/handlers/process-send-message.js.map +7 -0
  385. package/dist/lib/handlers/process-session-goal.js +11 -74
  386. package/dist/lib/handlers/process-session-goal.js.map +7 -1
  387. package/dist/lib/hooks-config.js +52 -544
  388. package/dist/lib/hooks-config.js.map +7 -1
  389. package/dist/lib/insights-prompts.js +12 -145
  390. package/dist/lib/insights-prompts.js.map +7 -1
  391. package/dist/lib/job-helpers.js +1 -0
  392. package/dist/lib/job-helpers.js.map +7 -0
  393. package/dist/lib/llm-client.js +16 -274
  394. package/dist/lib/llm-client.js.map +7 -1
  395. package/dist/lib/manual-tasks.js +22 -0
  396. package/dist/lib/manual-tasks.js.map +7 -0
  397. package/dist/lib/output.js +12 -36
  398. package/dist/lib/output.js.map +7 -1
  399. package/dist/lib/permanent-job-error.js +10 -23
  400. package/dist/lib/permanent-job-error.js.map +7 -1
  401. package/dist/lib/provider-aggregator.js +57 -55
  402. package/dist/lib/provider-aggregator.js.map +7 -1
  403. package/dist/lib/research-client.js +12 -0
  404. package/dist/lib/research-client.js.map +7 -0
  405. package/dist/lib/skills-loader.js +8 -51
  406. package/dist/lib/skills-loader.js.map +7 -1
  407. package/dist/lib/statusline-shim.js +16 -0
  408. package/dist/lib/statusline-shim.js.map +7 -0
  409. package/dist/lib/terminal-target-heartbeat.js +15 -0
  410. package/dist/lib/terminal-target-heartbeat.js.map +7 -0
  411. package/dist/lib/tmux.js +16 -0
  412. package/dist/lib/tmux.js.map +7 -0
  413. package/dist/lib/transcript-rate-limit-watcher.js +22 -0
  414. package/dist/lib/transcript-rate-limit-watcher.js.map +7 -0
  415. package/dist/lib/types.js +8 -7
  416. package/dist/lib/types.js.map +7 -1
  417. package/dist/lib/version-check.js +10 -106
  418. package/dist/lib/version-check.js.map +7 -1
  419. package/dist/lib/which.js +8 -0
  420. package/dist/lib/which.js.map +7 -0
  421. package/dist/lib/worktree.js +17 -0
  422. package/dist/lib/worktree.js.map +7 -0
  423. package/dist/opencode-IQ7X5YMJ.js +190 -0
  424. package/dist/opencode-IQ7X5YMJ.js.map +7 -0
  425. package/oclif.manifest.json +299 -66
  426. package/package.json +27 -11
  427. package/dist/base-command.d.ts +0 -12
  428. package/dist/base-command.d.ts.map +0 -1
  429. package/dist/commands/auth/create-key.d.ts +0 -11
  430. package/dist/commands/auth/create-key.d.ts.map +0 -1
  431. package/dist/commands/auth/login.d.ts +0 -11
  432. package/dist/commands/auth/login.d.ts.map +0 -1
  433. package/dist/commands/auth/logout.d.ts +0 -7
  434. package/dist/commands/auth/logout.d.ts.map +0 -1
  435. package/dist/commands/auth/revoke-key.d.ts +0 -10
  436. package/dist/commands/auth/revoke-key.d.ts.map +0 -1
  437. package/dist/commands/auth/status.d.ts +0 -7
  438. package/dist/commands/auth/status.d.ts.map +0 -1
  439. package/dist/commands/catalog/index.d.ts +0 -11
  440. package/dist/commands/catalog/index.d.ts.map +0 -1
  441. package/dist/commands/catalog/recommend.d.ts +0 -9
  442. package/dist/commands/catalog/recommend.d.ts.map +0 -1
  443. package/dist/commands/convert.d.ts +0 -15
  444. package/dist/commands/convert.d.ts.map +0 -1
  445. package/dist/commands/converters.d.ts +0 -12
  446. package/dist/commands/converters.d.ts.map +0 -1
  447. package/dist/commands/crons/list.d.ts +0 -7
  448. package/dist/commands/crons/list.d.ts.map +0 -1
  449. package/dist/commands/crons/run.d.ts +0 -13
  450. package/dist/commands/crons/run.d.ts.map +0 -1
  451. package/dist/commands/dashboard.d.ts +0 -10
  452. package/dist/commands/dashboard.d.ts.map +0 -1
  453. package/dist/commands/eval-targets/create.d.ts +0 -14
  454. package/dist/commands/eval-targets/create.d.ts.map +0 -1
  455. package/dist/commands/eval-targets/list.d.ts +0 -10
  456. package/dist/commands/eval-targets/list.d.ts.map +0 -1
  457. package/dist/commands/evals/benchmark.d.ts +0 -13
  458. package/dist/commands/evals/benchmark.d.ts.map +0 -1
  459. package/dist/commands/evals/compare.d.ts +0 -15
  460. package/dist/commands/evals/compare.d.ts.map +0 -1
  461. package/dist/commands/evals/create.d.ts +0 -17
  462. package/dist/commands/evals/create.d.ts.map +0 -1
  463. package/dist/commands/evals/listen.d.ts +0 -37
  464. package/dist/commands/evals/listen.d.ts.map +0 -1
  465. package/dist/commands/evals/listen.js +0 -188
  466. package/dist/commands/evals/listen.js.map +0 -1
  467. package/dist/commands/evals/listen.test.d.ts +0 -2
  468. package/dist/commands/evals/listen.test.d.ts.map +0 -1
  469. package/dist/commands/evals/listen.test.js +0 -48
  470. package/dist/commands/evals/listen.test.js.map +0 -1
  471. package/dist/commands/evals/optimize-description.d.ts +0 -22
  472. package/dist/commands/evals/optimize-description.d.ts.map +0 -1
  473. package/dist/commands/evals/optimize.d.ts +0 -22
  474. package/dist/commands/evals/optimize.d.ts.map +0 -1
  475. package/dist/commands/evals/run.d.ts +0 -21
  476. package/dist/commands/evals/run.d.ts.map +0 -1
  477. package/dist/commands/gateway/ensure.d.ts +0 -7
  478. package/dist/commands/gateway/ensure.d.ts.map +0 -1
  479. package/dist/commands/hooks/install.d.ts +0 -16
  480. package/dist/commands/hooks/install.d.ts.map +0 -1
  481. package/dist/commands/hooks/run.d.ts +0 -11
  482. package/dist/commands/hooks/run.d.ts.map +0 -1
  483. package/dist/commands/hooks/uninstall.d.ts +0 -7
  484. package/dist/commands/hooks/uninstall.d.ts.map +0 -1
  485. package/dist/commands/import.d.ts +0 -17
  486. package/dist/commands/import.d.ts.map +0 -1
  487. package/dist/commands/instructions/create.d.ts +0 -17
  488. package/dist/commands/instructions/create.d.ts.map +0 -1
  489. package/dist/commands/instructions/delete.d.ts +0 -13
  490. package/dist/commands/instructions/delete.d.ts.map +0 -1
  491. package/dist/commands/instructions/fork.d.ts +0 -10
  492. package/dist/commands/instructions/fork.d.ts.map +0 -1
  493. package/dist/commands/instructions/get.d.ts +0 -15
  494. package/dist/commands/instructions/get.d.ts.map +0 -1
  495. package/dist/commands/instructions/list.d.ts +0 -12
  496. package/dist/commands/instructions/list.d.ts.map +0 -1
  497. package/dist/commands/instructions/promote.d.ts +0 -14
  498. package/dist/commands/instructions/promote.d.ts.map +0 -1
  499. package/dist/commands/instructions/pull.d.ts +0 -9
  500. package/dist/commands/instructions/pull.d.ts.map +0 -1
  501. package/dist/commands/instructions/upstream.d.ts +0 -9
  502. package/dist/commands/instructions/upstream.d.ts.map +0 -1
  503. package/dist/commands/instructions/versions.d.ts +0 -12
  504. package/dist/commands/instructions/versions.d.ts.map +0 -1
  505. package/dist/commands/org/current.d.ts +0 -7
  506. package/dist/commands/org/current.d.ts.map +0 -1
  507. package/dist/commands/org/list.d.ts +0 -7
  508. package/dist/commands/org/list.d.ts.map +0 -1
  509. package/dist/commands/org/switch.d.ts +0 -13
  510. package/dist/commands/org/switch.d.ts.map +0 -1
  511. package/dist/commands/packs/add-instruction.d.ts +0 -11
  512. package/dist/commands/packs/add-instruction.d.ts.map +0 -1
  513. package/dist/commands/packs/apply.d.ts +0 -13
  514. package/dist/commands/packs/apply.d.ts.map +0 -1
  515. package/dist/commands/packs/create.d.ts +0 -13
  516. package/dist/commands/packs/create.d.ts.map +0 -1
  517. package/dist/commands/packs/fork.d.ts +0 -10
  518. package/dist/commands/packs/fork.d.ts.map +0 -1
  519. package/dist/commands/packs/get.d.ts +0 -10
  520. package/dist/commands/packs/get.d.ts.map +0 -1
  521. package/dist/commands/packs/list.d.ts +0 -22
  522. package/dist/commands/packs/list.d.ts.map +0 -1
  523. package/dist/commands/packs/remove-instruction.d.ts +0 -11
  524. package/dist/commands/packs/remove-instruction.d.ts.map +0 -1
  525. package/dist/commands/proxy/env.d.ts +0 -14
  526. package/dist/commands/proxy/env.d.ts.map +0 -1
  527. package/dist/commands/proxy/logs.d.ts +0 -11
  528. package/dist/commands/proxy/logs.d.ts.map +0 -1
  529. package/dist/commands/proxy/restart.d.ts +0 -11
  530. package/dist/commands/proxy/restart.d.ts.map +0 -1
  531. package/dist/commands/proxy/setup.d.ts +0 -23
  532. package/dist/commands/proxy/setup.d.ts.map +0 -1
  533. package/dist/commands/proxy/start.d.ts +0 -17
  534. package/dist/commands/proxy/start.d.ts.map +0 -1
  535. package/dist/commands/proxy/status.d.ts +0 -7
  536. package/dist/commands/proxy/status.d.ts.map +0 -1
  537. package/dist/commands/proxy/stop.d.ts +0 -8
  538. package/dist/commands/proxy/stop.d.ts.map +0 -1
  539. package/dist/commands/service/install.d.ts +0 -33
  540. package/dist/commands/service/install.d.ts.map +0 -1
  541. package/dist/commands/service/install.test.d.ts +0 -2
  542. package/dist/commands/service/install.test.d.ts.map +0 -1
  543. package/dist/commands/service/install.test.js +0 -345
  544. package/dist/commands/service/install.test.js.map +0 -1
  545. package/dist/commands/service/status.d.ts +0 -6
  546. package/dist/commands/service/status.d.ts.map +0 -1
  547. package/dist/commands/service/uninstall.d.ts +0 -6
  548. package/dist/commands/service/uninstall.d.ts.map +0 -1
  549. package/dist/commands/sessions/analyze.d.ts +0 -10
  550. package/dist/commands/sessions/analyze.d.ts.map +0 -1
  551. package/dist/commands/sessions/end.d.ts +0 -9
  552. package/dist/commands/sessions/end.d.ts.map +0 -1
  553. package/dist/commands/sessions/import.d.ts +0 -13
  554. package/dist/commands/sessions/import.d.ts.map +0 -1
  555. package/dist/commands/sessions/list.d.ts +0 -11
  556. package/dist/commands/sessions/list.d.ts.map +0 -1
  557. package/dist/commands/sessions/start.d.ts +0 -11
  558. package/dist/commands/sessions/start.d.ts.map +0 -1
  559. package/dist/commands/signals/report.d.ts +0 -10
  560. package/dist/commands/signals/report.d.ts.map +0 -1
  561. package/dist/commands/signals/report.test.d.ts +0 -2
  562. package/dist/commands/signals/report.test.d.ts.map +0 -1
  563. package/dist/commands/signals/report.test.js +0 -65
  564. package/dist/commands/signals/report.test.js.map +0 -1
  565. package/dist/commands/skills/export-approved.d.ts +0 -10
  566. package/dist/commands/skills/export-approved.d.ts.map +0 -1
  567. package/dist/commands/skills/install.d.ts +0 -15
  568. package/dist/commands/skills/install.d.ts.map +0 -1
  569. package/dist/commands/skills/list.d.ts +0 -11
  570. package/dist/commands/skills/list.d.ts.map +0 -1
  571. package/dist/commands/skills/publish.d.ts +0 -17
  572. package/dist/commands/skills/publish.d.ts.map +0 -1
  573. package/dist/commands/skills/search.d.ts +0 -17
  574. package/dist/commands/skills/search.d.ts.map +0 -1
  575. package/dist/commands/skills/update.d.ts +0 -10
  576. package/dist/commands/skills/update.d.ts.map +0 -1
  577. package/dist/commands/suggestions/accept.d.ts +0 -16
  578. package/dist/commands/suggestions/accept.d.ts.map +0 -1
  579. package/dist/commands/suggestions/accept.test.d.ts +0 -2
  580. package/dist/commands/suggestions/accept.test.d.ts.map +0 -1
  581. package/dist/commands/suggestions/accept.test.js +0 -52
  582. package/dist/commands/suggestions/accept.test.js.map +0 -1
  583. package/dist/commands/suggestions/dismiss.d.ts +0 -10
  584. package/dist/commands/suggestions/dismiss.d.ts.map +0 -1
  585. package/dist/commands/suggestions/list.d.ts +0 -10
  586. package/dist/commands/suggestions/list.d.ts.map +0 -1
  587. package/dist/commands/suggestions/refresh.d.ts +0 -7
  588. package/dist/commands/suggestions/refresh.d.ts.map +0 -1
  589. package/dist/dashboard/Dashboard.d.ts +0 -3
  590. package/dist/dashboard/Dashboard.d.ts.map +0 -1
  591. package/dist/dashboard/data.d.ts +0 -11
  592. package/dist/dashboard/data.d.ts.map +0 -1
  593. package/dist/dashboard/panels/friction.d.ts +0 -7
  594. package/dist/dashboard/panels/friction.d.ts.map +0 -1
  595. package/dist/dashboard/panels/insights.d.ts +0 -8
  596. package/dist/dashboard/panels/insights.d.ts.map +0 -1
  597. package/dist/dashboard/panels/instructions.d.ts +0 -9
  598. package/dist/dashboard/panels/instructions.d.ts.map +0 -1
  599. package/dist/dashboard/panels/outcomes.d.ts +0 -7
  600. package/dist/dashboard/panels/outcomes.d.ts.map +0 -1
  601. package/dist/dashboard/panels/overview.d.ts +0 -8
  602. package/dist/dashboard/panels/overview.d.ts.map +0 -1
  603. package/dist/dashboard/panels/shared.d.ts +0 -17
  604. package/dist/dashboard/panels/shared.d.ts.map +0 -1
  605. package/dist/dashboard/types.d.ts +0 -80
  606. package/dist/dashboard/types.d.ts.map +0 -1
  607. package/dist/index.d.ts +0 -2
  608. package/dist/index.d.ts.map +0 -1
  609. package/dist/lib/active-org-refresh.d.ts +0 -22
  610. package/dist/lib/active-org-refresh.d.ts.map +0 -1
  611. package/dist/lib/active-org-refresh.test.d.ts +0 -2
  612. package/dist/lib/active-org-refresh.test.d.ts.map +0 -1
  613. package/dist/lib/active-org-refresh.test.js +0 -190
  614. package/dist/lib/active-org-refresh.test.js.map +0 -1
  615. package/dist/lib/active-org.d.ts +0 -43
  616. package/dist/lib/active-org.d.ts.map +0 -1
  617. package/dist/lib/active-org.test.d.ts +0 -2
  618. package/dist/lib/active-org.test.d.ts.map +0 -1
  619. package/dist/lib/active-org.test.js +0 -147
  620. package/dist/lib/active-org.test.js.map +0 -1
  621. package/dist/lib/api-client.d.ts +0 -17
  622. package/dist/lib/api-client.d.ts.map +0 -1
  623. package/dist/lib/api-client.test.d.ts +0 -2
  624. package/dist/lib/api-client.test.d.ts.map +0 -1
  625. package/dist/lib/api-client.test.js +0 -161
  626. package/dist/lib/api-client.test.js.map +0 -1
  627. package/dist/lib/auth.d.ts +0 -27
  628. package/dist/lib/auth.d.ts.map +0 -1
  629. package/dist/lib/auth.test.d.ts +0 -2
  630. package/dist/lib/auth.test.d.ts.map +0 -1
  631. package/dist/lib/auth.test.js +0 -110
  632. package/dist/lib/auth.test.js.map +0 -1
  633. package/dist/lib/cron-registry.d.ts +0 -47
  634. package/dist/lib/cron-registry.d.ts.map +0 -1
  635. package/dist/lib/cron-registry.js +0 -102
  636. package/dist/lib/cron-registry.js.map +0 -1
  637. package/dist/lib/cron-registry.test.d.ts +0 -2
  638. package/dist/lib/cron-registry.test.d.ts.map +0 -1
  639. package/dist/lib/cron-registry.test.js +0 -136
  640. package/dist/lib/cron-registry.test.js.map +0 -1
  641. package/dist/lib/cron-runner.d.ts +0 -16
  642. package/dist/lib/cron-runner.d.ts.map +0 -1
  643. package/dist/lib/cron-runner.js +0 -68
  644. package/dist/lib/cron-runner.js.map +0 -1
  645. package/dist/lib/detect-languages.d.ts +0 -7
  646. package/dist/lib/detect-languages.d.ts.map +0 -1
  647. package/dist/lib/detect-languages.test.d.ts +0 -2
  648. package/dist/lib/detect-languages.test.d.ts.map +0 -1
  649. package/dist/lib/detect-languages.test.js +0 -29
  650. package/dist/lib/detect-languages.test.js.map +0 -1
  651. package/dist/lib/eval-analyzer.d.ts +0 -23
  652. package/dist/lib/eval-analyzer.d.ts.map +0 -1
  653. package/dist/lib/eval-benchmark.d.ts +0 -17
  654. package/dist/lib/eval-benchmark.d.ts.map +0 -1
  655. package/dist/lib/eval-conversation-handler.d.ts +0 -9
  656. package/dist/lib/eval-conversation-handler.d.ts.map +0 -1
  657. package/dist/lib/eval-executor.d.ts +0 -21
  658. package/dist/lib/eval-executor.d.ts.map +0 -1
  659. package/dist/lib/eval-executor.test.d.ts +0 -2
  660. package/dist/lib/eval-executor.test.d.ts.map +0 -1
  661. package/dist/lib/eval-executor.test.js +0 -8
  662. package/dist/lib/eval-executor.test.js.map +0 -1
  663. package/dist/lib/eval-grader.d.ts +0 -38
  664. package/dist/lib/eval-grader.d.ts.map +0 -1
  665. package/dist/lib/eval-grader.test.d.ts +0 -2
  666. package/dist/lib/eval-grader.test.d.ts.map +0 -1
  667. package/dist/lib/eval-grader.test.js +0 -8
  668. package/dist/lib/eval-grader.test.js.map +0 -1
  669. package/dist/lib/eval-meta-judge.d.ts +0 -28
  670. package/dist/lib/eval-meta-judge.d.ts.map +0 -1
  671. package/dist/lib/eval-trigger-tester.d.ts +0 -19
  672. package/dist/lib/eval-trigger-tester.d.ts.map +0 -1
  673. package/dist/lib/eval-worktree.d.ts +0 -11
  674. package/dist/lib/eval-worktree.d.ts.map +0 -1
  675. package/dist/lib/eval-worktree.test.d.ts +0 -2
  676. package/dist/lib/eval-worktree.test.d.ts.map +0 -1
  677. package/dist/lib/eval-worktree.test.js +0 -68
  678. package/dist/lib/eval-worktree.test.js.map +0 -1
  679. package/dist/lib/gateway-entry.d.ts +0 -3
  680. package/dist/lib/gateway-entry.d.ts.map +0 -1
  681. package/dist/lib/gateway-lifecycle.d.ts +0 -9
  682. package/dist/lib/gateway-lifecycle.d.ts.map +0 -1
  683. package/dist/lib/gateway.d.ts +0 -11
  684. package/dist/lib/gateway.d.ts.map +0 -1
  685. package/dist/lib/graphile-worker-runner.d.ts +0 -124
  686. package/dist/lib/graphile-worker-runner.d.ts.map +0 -1
  687. package/dist/lib/graphile-worker-runner.js +0 -530
  688. package/dist/lib/graphile-worker-runner.js.map +0 -1
  689. package/dist/lib/graphile-worker-runner.test.d.ts +0 -2
  690. package/dist/lib/graphile-worker-runner.test.d.ts.map +0 -1
  691. package/dist/lib/graphile-worker-runner.test.js +0 -153
  692. package/dist/lib/graphile-worker-runner.test.js.map +0 -1
  693. package/dist/lib/handlers/cron-close-stale-sessions.d.ts +0 -3
  694. package/dist/lib/handlers/cron-close-stale-sessions.d.ts.map +0 -1
  695. package/dist/lib/handlers/cron-data-integrity-audit.d.ts +0 -3
  696. package/dist/lib/handlers/cron-data-integrity-audit.d.ts.map +0 -1
  697. package/dist/lib/handlers/cron-refresh-skills.d.ts +0 -3
  698. package/dist/lib/handlers/cron-refresh-skills.d.ts.map +0 -1
  699. package/dist/lib/handlers/cron-refresh-skills.test.d.ts +0 -2
  700. package/dist/lib/handlers/cron-refresh-skills.test.d.ts.map +0 -1
  701. package/dist/lib/handlers/cron-refresh-skills.test.js +0 -114
  702. package/dist/lib/handlers/cron-refresh-skills.test.js.map +0 -1
  703. package/dist/lib/handlers/cron-regenerate-insights.d.ts +0 -3
  704. package/dist/lib/handlers/cron-regenerate-insights.d.ts.map +0 -1
  705. package/dist/lib/handlers/cron-regenerate-insights.js +0 -6
  706. package/dist/lib/handlers/cron-regenerate-insights.js.map +0 -1
  707. package/dist/lib/handlers/cron-suggest-instructions.d.ts +0 -3
  708. package/dist/lib/handlers/cron-suggest-instructions.d.ts.map +0 -1
  709. package/dist/lib/handlers/cron-suggest-instructions.test.d.ts +0 -2
  710. package/dist/lib/handlers/cron-suggest-instructions.test.d.ts.map +0 -1
  711. package/dist/lib/handlers/cron-suggest-instructions.test.js +0 -80
  712. package/dist/lib/handlers/cron-suggest-instructions.test.js.map +0 -1
  713. package/dist/lib/handlers/process-conversation.d.ts +0 -35
  714. package/dist/lib/handlers/process-conversation.d.ts.map +0 -1
  715. package/dist/lib/handlers/process-eval.d.ts +0 -32
  716. package/dist/lib/handlers/process-eval.d.ts.map +0 -1
  717. package/dist/lib/handlers/process-insights.d.ts +0 -39
  718. package/dist/lib/handlers/process-insights.d.ts.map +0 -1
  719. package/dist/lib/handlers/process-launch.d.ts +0 -29
  720. package/dist/lib/handlers/process-launch.d.ts.map +0 -1
  721. package/dist/lib/handlers/process-session-goal.d.ts +0 -29
  722. package/dist/lib/handlers/process-session-goal.d.ts.map +0 -1
  723. package/dist/lib/handlers/process-session-goal.test.d.ts +0 -2
  724. package/dist/lib/handlers/process-session-goal.test.d.ts.map +0 -1
  725. package/dist/lib/handlers/process-session-goal.test.js +0 -134
  726. package/dist/lib/handlers/process-session-goal.test.js.map +0 -1
  727. package/dist/lib/hooks-config.d.ts +0 -119
  728. package/dist/lib/hooks-config.d.ts.map +0 -1
  729. package/dist/lib/hooks-config.test.d.ts +0 -2
  730. package/dist/lib/hooks-config.test.d.ts.map +0 -1
  731. package/dist/lib/hooks-config.test.js +0 -231
  732. package/dist/lib/hooks-config.test.js.map +0 -1
  733. package/dist/lib/insights-prompts.d.ts +0 -13
  734. package/dist/lib/insights-prompts.d.ts.map +0 -1
  735. package/dist/lib/llm-client.d.ts +0 -26
  736. package/dist/lib/llm-client.d.ts.map +0 -1
  737. package/dist/lib/llm-client.test.d.ts +0 -2
  738. package/dist/lib/llm-client.test.d.ts.map +0 -1
  739. package/dist/lib/llm-client.test.js +0 -62
  740. package/dist/lib/llm-client.test.js.map +0 -1
  741. package/dist/lib/mirror-writer-db.d.ts +0 -12
  742. package/dist/lib/mirror-writer-db.d.ts.map +0 -1
  743. package/dist/lib/mirror-writer-db.js +0 -51
  744. package/dist/lib/mirror-writer-db.js.map +0 -1
  745. package/dist/lib/mirror-writer.d.ts +0 -35
  746. package/dist/lib/mirror-writer.d.ts.map +0 -1
  747. package/dist/lib/mirror-writer.js +0 -27
  748. package/dist/lib/mirror-writer.js.map +0 -1
  749. package/dist/lib/mirror-writer.test.d.ts +0 -2
  750. package/dist/lib/mirror-writer.test.d.ts.map +0 -1
  751. package/dist/lib/mirror-writer.test.js +0 -47
  752. package/dist/lib/mirror-writer.test.js.map +0 -1
  753. package/dist/lib/output.d.ts +0 -4
  754. package/dist/lib/output.d.ts.map +0 -1
  755. package/dist/lib/output.test.d.ts +0 -2
  756. package/dist/lib/output.test.d.ts.map +0 -1
  757. package/dist/lib/output.test.js +0 -71
  758. package/dist/lib/output.test.js.map +0 -1
  759. package/dist/lib/permanent-job-error.d.ts +0 -17
  760. package/dist/lib/permanent-job-error.d.ts.map +0 -1
  761. package/dist/lib/permanent-job-error.test.d.ts +0 -2
  762. package/dist/lib/permanent-job-error.test.d.ts.map +0 -1
  763. package/dist/lib/permanent-job-error.test.js +0 -29
  764. package/dist/lib/permanent-job-error.test.js.map +0 -1
  765. package/dist/lib/provider-aggregator.d.ts +0 -24
  766. package/dist/lib/provider-aggregator.d.ts.map +0 -1
  767. package/dist/lib/provider-aggregator.test.d.ts +0 -2
  768. package/dist/lib/provider-aggregator.test.d.ts.map +0 -1
  769. package/dist/lib/provider-aggregator.test.js +0 -103
  770. package/dist/lib/provider-aggregator.test.js.map +0 -1
  771. package/dist/lib/skills-loader.d.ts +0 -6
  772. package/dist/lib/skills-loader.d.ts.map +0 -1
  773. package/dist/lib/types.d.ts +0 -48
  774. package/dist/lib/types.d.ts.map +0 -1
  775. package/dist/lib/version-check.d.ts +0 -11
  776. package/dist/lib/version-check.d.ts.map +0 -1
  777. package/dist/test-helpers.d.ts +0 -58
  778. package/dist/test-helpers.d.ts.map +0 -1
  779. package/dist/test-helpers.js +0 -58
  780. package/dist/test-helpers.js.map +0 -1
@@ -1 +1,7 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/service/install.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/commands/service/install.ts"],
4
+ "sourcesContent": ["import { Flags } from '@oclif/core';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { execSync, execFileSync, spawnSync } from 'node:child_process';\nimport { homedir } from 'node:os';\nimport { dirname, join } from 'node:path';\nimport { BaseCommand } from '../../base-command.js';\nimport { bootstrapActiveOrg } from '../../lib/active-org-refresh.js';\nimport { detectTmux } from '../../lib/detect-tmux.js';\n\n// Only these env vars are written to the plist \u2014 never leak unrelated secrets\nconst ALLOWED_ENV_VARS = new Set([\n 'SUPABASE_URL',\n 'SUPABASE_ANON_KEY',\n 'SUPABASE_SERVICE_ROLE_KEY',\n // Enables local HS256 JWT verification in the API's authMiddleware \u2014\n // without it every authed request pays a /auth/v1/user network round-trip\n // (measured p50 ~244ms) to Supabase.\n 'SUPABASE_JWT_SECRET',\n 'DATABASE_URL',\n 'RULEMETRIC_API_URL',\n 'RULEMETRIC_API_KEY',\n 'RULEMETRIC_ACCESS_TOKEN',\n // Recipient for the weekly cron_data_integrity_audit notification.\n // Without one of these, the audit cron runs but nobody is notified \u2014\n // see cron-data-integrity-audit.ts (defaults: NOTIFY_USER_ID then USER_ID).\n 'RULEMETRIC_AUDIT_NOTIFY_USER_ID',\n 'RULEMETRIC_USER_ID',\n // cron_refresh_skills needs an authenticated GitHub API budget (5000\n // req/hr) \u2014 without it the handler skips and the skills registry goes\n // stale, which makes cron_suggest_instructions mark every suggestion\n // stale on each nightly run.\n 'GITHUB_TOKEN',\n // Pool-tuning overrides so the plist generators (buildPlist / buildWorkerPlist)\n // actually honor a user-set value instead of always falling back to the pinned\n // default \u2014 without these in the allow-list the `envVars.PG_* ?? '<default>'`\n // escape hatch was silently dead. Pool-exhaustion RCA 2026-06-21.\n 'PG_POOL_MAX',\n 'PG_IDLE_TIMEOUT',\n 'PG_STATEMENT_TIMEOUT_MS',\n]);\n\nconst PLIST_LABEL = 'com.rulemetric.api';\nconst PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${PLIST_LABEL}.plist`);\nconst WORKER_PLIST_LABEL = 'com.rulemetric.worker';\nconst WORKER_PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${WORKER_PLIST_LABEL}.plist`);\nconst GATEWAY_PLIST_LABEL = 'com.rulemetric.gateway';\nconst GATEWAY_PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${GATEWAY_PLIST_LABEL}.plist`);\nconst PROXY_PLIST_LABEL = 'com.rulemetric.proxy';\nconst PROXY_PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${PROXY_PLIST_LABEL}.plist`);\n// Daily kickstart agent \u2014 see Phase 4c cleanup block below. Kept as a constant\n// so we can tear it down on every install if a stale copy is lying around.\nconst WORKER_RESTART_PLIST_LABEL = 'com.rulemetric.worker.restart';\nconst WORKER_RESTART_PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${WORKER_RESTART_PLIST_LABEL}.plist`);\nconst CONFIG_DIR = join(homedir(), '.config', 'rulemetric');\nconst LOG_DIR = join(CONFIG_DIR, 'logs');\nconst GATEWAY_PORT = 8787;\nconst PROXY_PORT = 8788;\n\nexport default class ServiceInstall extends BaseCommand {\n static override description = 'Install RuleMetric API, worker, gateway, and capture proxy as persistent macOS launchd services';\n\n static override examples = [\n '<%= config.bin %> service install',\n '<%= config.bin %> service install --port 3000',\n '<%= config.bin %> service install --skip-build',\n '<%= config.bin %> service install --no-proxy',\n ];\n\n static override flags = {\n port: Flags.integer({\n char: 'p',\n default: 3000,\n description: 'API server port',\n }),\n force: Flags.boolean({\n char: 'f',\n default: false,\n description: 'Overwrite existing service configuration and reclaim conflicting ports',\n }),\n 'skip-build': Flags.boolean({\n default: false,\n description: 'Skip the pre-install workspace build (API/web/cli dist must already exist)',\n }),\n 'no-proxy': Flags.boolean({\n default: false,\n description: 'Skip gateway + mitmproxy plists (just install API + worker)',\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(ServiceInstall);\n const port = flags.port;\n const skipBuild = flags['skip-build'];\n const noProxy = flags['no-proxy'];\n\n // macOS only\n if (process.platform !== 'darwin') {\n this.error('Service install is currently macOS-only (launchd). For Linux, use systemd manually.');\n }\n\n // Existing-service guard. Presence of the API plist implies a prior\n // install \u2014 we only proceed automatically when --force is set so a\n // user doesn't accidentally overwrite a working config.\n if (existsSync(PLIST_PATH) && !flags.force) {\n this.log(`Service already installed at ${PLIST_PATH}`);\n this.log('Use --force to overwrite, or run: rulemetric service status');\n return;\n }\n\n // API port conflict. Without --force we bail; with --force we'll reclaim\n // the port later in killStaleProcess so launchd can actually bind it.\n try {\n const res = await fetch(`http://localhost:${port}/health`);\n if (res.ok && !flags.force) {\n this.warn(`Port ${port} is already in use (API may be running via start.sh or in another terminal).`);\n this.warn('Stop it first with scripts/stop.sh, or use --force to take over the port.');\n return;\n }\n } catch {\n // Port free \u2014 good\n }\n\n // Find project root\n const projectRoot = this.findProjectRoot();\n if (!projectRoot) {\n this.error(\n 'Could not find RuleMetric project root. Run this command from within the momento-mori repo, or set RULEMETRIC_PROJECT_ROOT.',\n );\n }\n\n // Verify .env.local\n const envLocal = join(projectRoot, '.env.local');\n if (!existsSync(envLocal)) {\n this.error(`.env.local not found at ${envLocal}. The API needs Supabase credentials to start.`);\n }\n\n // Load env vars (filtered by ALLOWED_ENV_VARS)\n const envVars = this.guardAlwaysOnDatabaseUrl(this.loadEnvVars(projectRoot));\n\n // Resolve binaries\n const nodePath = this.findBinary('node');\n const pnpmPath = this.findBinary('pnpm');\n if (!nodePath || !pnpmPath) {\n this.error('Could not find node or pnpm. Ensure they are in your PATH.');\n }\n\n // Resolve mitmdump (required unless --no-proxy). We resolve via `which`\n // so the plist gets an absolute path \u2014 launchd's PATH at GUI session\n // start can be narrow, and pyenv shims often don't appear in it.\n let mitmdumpPath: string | null = null;\n if (!noProxy) {\n mitmdumpPath = this.findBinary('mitmdump');\n if (!mitmdumpPath) {\n this.error(\n 'mitmdump not found in PATH. Install with: pipx install mitmproxy (or brew install mitmproxy), then re-run.\\n' +\n 'Or skip the capture proxy with --no-proxy.',\n );\n }\n }\n\n // \u2500\u2500 Pre-install build \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Mirrors the Dockerfile prod stage: API + web + CLI all need their\n // dist/ directories to exist before launchd starts the processes. We\n // run the whole set via turbo so the cache eats the cost on re-installs.\n if (!skipBuild) {\n this.log('[..] Building workspace artifacts (api, web, cli) via turbo...');\n const buildFilters = [\n '--filter', '@rulemetric/api...',\n '--filter', '@rulemetric/web...',\n '--filter', '@rulemetric/cli',\n ];\n const build = spawnSync(pnpmPath!, ['exec', 'turbo', 'run', 'build', ...buildFilters], {\n cwd: projectRoot,\n stdio: 'inherit',\n });\n if (build.status !== 0) {\n this.error(\n `Workspace build failed (exit ${build.status}). Fix the build first, or use --skip-build if dist/ already exists.`,\n );\n }\n this.log('[OK] Build complete');\n } else {\n this.log('[..] Skipping pre-install build (--skip-build)');\n }\n\n // Verify the build artifacts launchd is about to invoke. A missing\n // entry would crash-loop the plist; surfacing it here is friendlier.\n const apiEntry = join(projectRoot, 'apps', 'api', 'dist', 'index.js');\n if (!existsSync(apiEntry)) {\n this.error(`API entry not found at ${apiEntry}. Re-run without --skip-build, or: pnpm --filter @rulemetric/api... build`);\n }\n const webIndex = join(projectRoot, 'apps', 'web', 'dist', 'index.html');\n if (!existsSync(webIndex)) {\n this.warn(`Web bundle not found at ${webIndex}. Dashboard at :${port} will 404 until you build apps/web.`);\n }\n if (!noProxy) {\n const gatewayEntry = join(projectRoot, 'apps', 'cli', 'dist', 'lib', 'gateway-entry.js');\n if (!existsSync(gatewayEntry)) {\n this.error(`Gateway entry not found at ${gatewayEntry}. Re-run without --skip-build, or: pnpm --filter @rulemetric/cli build`);\n }\n }\n\n // \u2500\u2500 Clean up conflicting PID-file-managed or orphan processes \u2500\n // hooks install + proxy start use PID files; we replace those with\n // launchd-managed lifecycles so both ports need to be free before\n // bootstrap. With --force we also clear whatever is squatting on\n // the API port.\n if (flags.force) {\n this.killStaleProcess(port, null, 'API on :' + port);\n }\n if (!noProxy) {\n this.killStaleProcess(GATEWAY_PORT, join(CONFIG_DIR, 'gateway.pid'), 'gateway');\n this.killStaleProcess(PROXY_PORT, join(CONFIG_DIR, 'proxy.pid'), 'mitmproxy');\n }\n\n // Create dirs\n mkdirSync(join(homedir(), 'Library', 'LaunchAgents'), { recursive: true });\n mkdirSync(LOG_DIR, { recursive: true });\n\n const uid = execSync('id -u', { encoding: 'utf-8' }).trim();\n\n // \u2500\u2500 Install API service \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const apiPlist = this.buildPlist({ port, projectRoot, nodePath: nodePath!, pnpmPath: pnpmPath!, envVars });\n this.bootoutAndWrite(uid, PLIST_PATH, apiPlist, 'API');\n this.bootstrapPlist(uid, PLIST_PATH, 'API');\n\n // Wait for API to come up\n this.log(`[..] Waiting for API on :${port}...`);\n const apiStarted = await this.waitForApi(port, 15);\n if (apiStarted) {\n this.log(`[OK] RuleMetric API running on :${port}`);\n if (existsSync(webIndex)) {\n this.log(`[OK] Dashboard available at http://localhost:${port}`);\n }\n } else {\n this.warn('API did not respond within 15s. Check logs:');\n this.log(` tail -f ${LOG_DIR}/api-stdout.log`);\n this.log(` tail -f ${LOG_DIR}/api-stderr.log`);\n }\n\n // \u2500\u2500 Install worker service \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n this.log('');\n this.log('Installing worker service...');\n // Reap detached, unsupervised evals-agent orphans before bootstrapping the\n // worker \u2014 they hold no listening port, so killStaleProcess can't find them\n // (a fleet of 4 ran 3+ days and helped saturate the pool). RCA 2026-06-21.\n this.killStaleAgents();\n const workerPlist = this.buildWorkerPlist({ projectRoot, nodePath: nodePath!, pnpmPath: pnpmPath!, envVars });\n this.bootoutAndWrite(uid, WORKER_PLIST_PATH, workerPlist, 'Worker');\n this.bootstrapPlist(uid, WORKER_PLIST_PATH, 'Worker');\n\n // \u2500\u2500 Install gateway + capture-proxy services \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (!noProxy) {\n this.log('');\n this.log('Installing gateway + capture proxy services...');\n\n const gatewayPlist = this.buildGatewayPlist({ projectRoot, nodePath: nodePath! });\n this.bootoutAndWrite(uid, GATEWAY_PLIST_PATH, gatewayPlist, 'Gateway');\n this.bootstrapPlist(uid, GATEWAY_PLIST_PATH, 'Gateway');\n\n const proxyPlist = this.buildProxyPlist({\n projectRoot,\n mitmdumpPath: mitmdumpPath!,\n envVars,\n });\n this.bootoutAndWrite(uid, PROXY_PLIST_PATH, proxyPlist, 'Proxy');\n this.bootstrapPlist(uid, PROXY_PLIST_PATH, 'Proxy');\n }\n\n // Phase 4c cleanup: the daily worker-restart agent (04:00 kickstart)\n // existed to dodge the graphile-LISTEN-wedge class observed at ~25h\n // worker uptime. The agent path has no LISTEN socket, so the wedge\n // class is structurally gone \u2014 the daily kickstart is dead weight.\n // Bootout any leftover plist from prior installs so reinstall is a\n // truly clean state.\n if (existsSync(WORKER_RESTART_PLIST_PATH)) {\n try {\n execFileSync('launchctl', ['bootout', `gui/${uid}`, WORKER_RESTART_PLIST_PATH], { encoding: 'utf-8' });\n } catch {\n // Expected if not loaded\n }\n try {\n execFileSync('rm', ['-f', WORKER_RESTART_PLIST_PATH]);\n this.log('[OK] Removed stale daily worker-restart agent (no longer needed on agent path)');\n } catch {\n // Best-effort\n }\n }\n\n this.log('');\n if (noProxy) {\n this.log('Installed: API + worker. Gateway/proxy skipped (--no-proxy).');\n } else {\n this.log('Installed: API + worker + gateway + capture proxy.');\n }\n this.log('All services start at login, restart on crash, and pick up rebuilds via WatchPaths.');\n this.log('');\n this.log('NOTE: Env vars are baked in at install time. If you change');\n this.log('.env.local or credentials, re-run: rulemetric service install --force');\n this.log('');\n this.log('Manage with:');\n this.log(' rulemetric service status \u2014 check if running');\n this.log(' rulemetric service uninstall \u2014 remove all services');\n\n // Ensure the active-org cache reflects the user's current active_org_id\n // before the worker spawns its first capture. Belt-and-suspenders with\n // BaseCommand's guarded refresh.\n await bootstrapActiveOrg();\n\n // Soft tmux capability check \u2014 see hooks/install.ts for the same line.\n const tmux = await detectTmux();\n this.log('');\n if (tmux.available) {\n this.log(`[OK] tmux found${tmux.version ? ` (v${tmux.version})` : ''} \u2014 live send enabled`);\n } else {\n this.log('[!!] tmux not found \u2014 live send will fall back to opening Terminal. Install with: brew install tmux');\n }\n }\n\n private findProjectRoot(): string | null {\n // Check env var override\n if (process.env.RULEMETRIC_PROJECT_ROOT) {\n return process.env.RULEMETRIC_PROJECT_ROOT;\n }\n // Walk up from cwd looking for the monorepo marker\n let dir = process.cwd();\n for (let i = 0; i < 10; i++) {\n if (existsSync(join(dir, 'apps', 'api', 'package.json'))) {\n return dir;\n }\n const parent = join(dir, '..');\n if (parent === dir) break;\n dir = parent;\n }\n return null;\n }\n\n private findBinary(name: string): string | null {\n try {\n return execFileSync('which', [name], { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim() || null;\n } catch {\n return null;\n }\n }\n\n private loadEnvVars(projectRoot: string): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Load from .env.local (Supabase credentials)\n const envLocal = join(projectRoot, '.env.local');\n if (existsSync(envLocal)) {\n for (const line of readFileSync(envLocal, 'utf-8').split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n const eqIdx = trimmed.indexOf('=');\n if (eqIdx > 0) {\n vars[trimmed.slice(0, eqIdx)] = trimmed.slice(eqIdx + 1);\n }\n }\n }\n\n // Load from ~/.config/rulemetric/env (API key)\n const globalEnv = join(CONFIG_DIR, 'env');\n if (existsSync(globalEnv)) {\n for (const line of readFileSync(globalEnv, 'utf-8').split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n const eqIdx = trimmed.indexOf('=');\n if (eqIdx > 0) {\n vars[trimmed.slice(0, eqIdx)] = trimmed.slice(eqIdx + 1);\n }\n }\n }\n\n // Only keep allowed env vars \u2014 never leak unrelated secrets\n return Object.fromEntries(\n Object.entries(vars).filter(([k]) => ALLOWED_ENV_VARS.has(k)),\n );\n }\n\n // Guard: the always-on API + worker MUST use the TRANSACTION-mode pooler\n // (port 6543). A SESSION-mode URL (:5432, 15-slot cap) baked into these\n // services was the trigger of the recurring pool saturation \u2014 a pool-cascade\n // debugging override leaked into the plists through this very installer. Auto-\n // correct the obvious session\u2192transaction port and warn loudly; warn (but do\n // not block) on a direct, non-pooler URL. Pool-exhaustion RCA 2026-06-21.\n private guardAlwaysOnDatabaseUrl(envVars: Record<string, string>): Record<string, string> {\n const url = envVars.DATABASE_URL;\n if (!url) return envVars;\n if (url.includes('pooler.supabase.com:5432')) {\n this.warn(\n 'DATABASE_URL points at the SESSION-mode pooler (:5432, 15-slot cap). The ' +\n 'always-on API/worker must use TRANSACTION mode (:6543) \u2014 auto-correcting ' +\n 'for the installed services. Fix .env.local to silence this warning.',\n );\n return { ...envVars, DATABASE_URL: url.replace('pooler.supabase.com:5432', 'pooler.supabase.com:6543') };\n }\n if (/@db\\.[a-z0-9]+\\.supabase\\.co[:/]/.test(url)) {\n this.warn(\n 'DATABASE_URL is a DIRECT database connection (db.<ref>.supabase.co), not the ' +\n 'pooler. Always-on services should use the transaction pooler ' +\n '(aws-*.pooler.supabase.com:6543) to avoid exhausting Postgres connections.',\n );\n }\n return envVars;\n }\n\n // Reap orphaned, unsupervised `evals agent` worker processes before\n // (re)bootstrapping the launchd worker. The worker holds no listening port,\n // so killStaleProcess (port/pidfile based) cannot find detached agents \u2014 a\n // fleet of 4 ran 3+ days and helped saturate the pool (RCA 2026-06-21). pgrep\n // the command line and SIGTERM every match except ourselves; the agent's own\n // single-instance lock then keeps a fresh fleet from forming.\n private killStaleAgents(): void {\n try {\n const out = execFileSync('pgrep', ['-f', 'bin/run.js evals agent'], {\n encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'],\n });\n const pids = out.trim().split('\\n').filter(Boolean)\n .map((s) => parseInt(s, 10))\n .filter((p) => !isNaN(p) && p !== process.pid);\n for (const pid of pids) {\n try {\n process.kill(pid, 'SIGTERM');\n this.log(`[OK] Reaped orphan evals agent (PID ${pid})`);\n } catch {\n // already gone\n }\n }\n if (pids.length) spawnSync('sleep', ['1'], { stdio: 'ignore' });\n } catch {\n // pgrep exits non-zero when nothing matches \u2014 fine\n }\n }\n\n // Best-effort cleanup of a process that would conflict with an\n // about-to-bootstrap launchd plist. Tries two routes:\n // (a) the PID file written by the legacy spawn path\n // (gateway-lifecycle / proxy start), if pidFile is non-null\n // (b) anything actively listening on the expected port\n // Either way: SIGTERM + small grace + SIGKILL fallback. Stale PID file\n // gets unlinked.\n private killStaleProcess(port: number, pidFile: string | null, name: string): void {\n let killedAny = false;\n\n if (pidFile && existsSync(pidFile)) {\n try {\n const pidStr = readFileSync(pidFile, 'utf-8').trim();\n const pid = parseInt(pidStr, 10);\n if (!isNaN(pid)) {\n try {\n process.kill(pid, 'SIGTERM');\n killedAny = true;\n this.log(`[OK] Stopped existing ${name} (PID ${pid} from ${pidFile})`);\n } catch {\n // Already dead \u2014 fine\n }\n }\n } catch {\n // Unreadable PID file\n }\n try { execFileSync('rm', ['-f', pidFile]); } catch { /* best-effort */ }\n }\n\n // Port listener (catches orphans not in the PID file, and the foreground\n // dev API when --force is set on the API port)\n try {\n const result = execFileSync('lsof', ['-ti', `:${port}`, '-sTCP:LISTEN'], {\n encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'],\n });\n const pids = result.trim().split('\\n').filter(Boolean);\n for (const pidStr of pids) {\n const pid = parseInt(pidStr, 10);\n if (!isNaN(pid)) {\n try {\n process.kill(pid, 'SIGTERM');\n killedAny = true;\n this.log(`[OK] Stopped orphan on :${port} (PID ${pid})`);\n } catch { /* already gone */ }\n }\n }\n } catch {\n // lsof exits non-zero when nothing matches \u2014 that's fine\n }\n\n if (killedAny) {\n // Brief grace so the port releases before launchd binds it\n spawnSync('sleep', ['1'], { stdio: 'ignore' });\n }\n }\n\n private bootoutAndWrite(uid: string, plistPath: string, content: string, name: string): void {\n // First install of a service has no prior load \u2192 launchctl bootout exits\n // non-zero. The messaging is inconsistent across macOS versions (\"Could\n // not find specified service\" on some, \"Boot-out failed: 5: Input/output\n // error\" on others). We treat all of these as \"nothing to unload\" and\n // only warn on errors that don't look like that family.\n const benignBootoutPatterns = [\n 'Could not find specified service',\n 'No such process',\n '3: No such process',\n '5: Input/output error',\n ];\n try {\n execFileSync('launchctl', ['bootout', `gui/${uid}`, plistPath], {\n encoding: 'utf-8',\n // Capture stderr instead of letting it print to the user's terminal.\n // The plist was either already-loaded (we unload it cleanly) or not\n // loaded (we want to swallow the error) \u2014 the user shouldn't see\n // launchctl's raw output either way.\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n this.log(`[OK] Unloaded existing ${name} service`);\n } catch (err) {\n const msg = (err as Error).message || '';\n const stderr = ((err as { stderr?: Buffer | string }).stderr ?? '').toString();\n const combined = `${msg}\\n${stderr}`;\n if (!benignBootoutPatterns.some((p) => combined.includes(p))) {\n this.warn(`Could not unload existing ${name} service: ${msg.trim()}`);\n }\n }\n writeFileSync(plistPath, content, { mode: 0o600 });\n this.log(`[OK] ${name} plist written to ${plistPath}`);\n }\n\n private bootstrapPlist(uid: string, plistPath: string, name: string): void {\n try {\n execFileSync('launchctl', ['bootstrap', `gui/${uid}`, plistPath]);\n this.log(`[OK] ${name} service loaded into launchd`);\n } catch (bootstrapErr) {\n try {\n execFileSync('launchctl', ['load', plistPath]);\n this.log(`[OK] ${name} service loaded into launchd (legacy)`);\n } catch (loadErr) {\n this.warn(\n `Could not load ${name} service.\\n` +\n ` bootstrap: ${(bootstrapErr as Error).message.trim()}\\n` +\n ` load: ${(loadErr as Error).message.trim()}`,\n );\n }\n }\n }\n\n private buildPlist(opts: {\n port: number;\n projectRoot: string;\n nodePath: string;\n pnpmPath: string;\n envVars: Record<string, string>;\n }): string {\n const { port, projectRoot, nodePath, pnpmPath, envVars } = opts;\n\n // Derive PATH from resolved binary locations (works with nvm, volta, fnm, homebrew)\n const pathDirs = [...new Set([dirname(nodePath), dirname(pnpmPath), '/usr/local/bin', '/usr/bin', '/bin'])];\n\n // Build environment dict entries. NODE_ENV=production mirrors fly.toml\n // so the bundled web build is served exactly as it is on rulemetric.com,\n // and middleware paths that branch on NODE_ENV match prod behavior\n // locally (rate-limits, error verbosity, etc.).\n const envEntries = Object.entries({\n ...envVars,\n PORT: String(port),\n NODE_ENV: 'production',\n PATH: pathDirs.join(':'),\n // Pool resilience for the always-on API (NOT the worker, which runs\n // legitimately long analytics queries). A wedged Supavisor socket with\n // the default max=3 pool and no query timeout hangs every authenticated\n // request \u2014 the 2026-06-09 login-hang. statement_timeout lets Postgres\n // cancel a stuck query so the connection returns to the pool (verified\n // honored through the transaction pooler); the larger pool adds headroom.\n // Both env-overridable. See packages/db/src/client.ts.\n PG_POOL_MAX: envVars.PG_POOL_MAX ?? '10',\n PG_STATEMENT_TIMEOUT_MS: envVars.PG_STATEMENT_TIMEOUT_MS ?? '10000',\n // Keep the pool warm so the API stops reconnecting (and re-resolving the\n // rotating pooler ELB) on nearly every request \u2014 the churn that exposed\n // it to intermittent CONNECT_TIMEOUT/ENOTFOUND. Worker/tests keep the\n // conservative 5s default. See packages/db/src/client.ts (2026-06-09).\n PG_IDLE_TIMEOUT: envVars.PG_IDLE_TIMEOUT ?? '30',\n // Silence per-span stdout dumps on the local API \u2014 it has no OTLP\n // endpoint and a fixed (now rotated) log file; the ConsoleSpanExporter\n // grew api-stdout to 370MB / ~400k spans. Fly leaves this unset so its\n // console spans stay grep-able in the managed log stream.\n OTEL_SPAN_EXPORT: envVars.OTEL_SPAN_EXPORT ?? 'none',\n })\n .map(([k, v]) => ` <key>${escapeXml(k)}</key>\\n <string>${escapeXml(v)}</string>`)\n .join('\\n');\n\n // Run the compiled API directly \u2014 same shape as the prod Dockerfile\n // CMD. Avoids tsx startup cost on every launchd restart, and serves\n // apps/web/dist from the same process so :3000 is \"API + dashboard\",\n // matching rulemetric.com. WatchPaths on apps/api/dist auto-bounces\n // the service on rebuild, so the dev cycle is: edit src \u2192 pnpm build\n // \u2192 launchd kicks the new code automatically (no manual kickstart).\n const apiEntry = join(projectRoot, 'apps', 'api', 'dist', 'index.js');\n const apiDist = join(projectRoot, 'apps', 'api', 'dist');\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>${PLIST_LABEL}</string>\n\n <key>ProgramArguments</key>\n <array>\n <string>${escapeXml(nodePath)}</string>\n <string>${escapeXml(apiEntry)}</string>\n </array>\n\n <key>WorkingDirectory</key>\n <string>${escapeXml(projectRoot)}</string>\n\n <key>EnvironmentVariables</key>\n <dict>\n${envEntries}\n </dict>\n\n <key>RunAtLoad</key>\n <true/>\n\n <key>KeepAlive</key>\n <dict>\n <key>SuccessfulExit</key>\n <false/>\n </dict>\n\n <key>ThrottleInterval</key>\n <integer>10</integer>\n\n <key>WatchPaths</key>\n <array>\n <string>${escapeXml(apiDist)}</string>\n </array>\n\n <key>StandardOutPath</key>\n <string>${escapeXml(join(LOG_DIR, 'api-stdout.log'))}</string>\n\n <key>StandardErrorPath</key>\n <string>${escapeXml(join(LOG_DIR, 'api-stderr.log'))}</string>\n\n <key>ProcessType</key>\n <string>Background</string>\n</dict>\n</plist>\n`;\n }\n\n private buildWorkerPlist(opts: {\n projectRoot: string;\n nodePath: string;\n pnpmPath: string;\n envVars: Record<string, string>;\n }): string {\n const { projectRoot, nodePath, pnpmPath, envVars } = opts;\n\n const pathDirs = [...new Set([dirname(nodePath), dirname(pnpmPath), '/usr/local/bin', '/usr/bin', '/bin'])];\n\n const envEntries = Object.entries({\n ...envVars,\n NODE_ENV: 'development',\n PATH: pathDirs.join(':'),\n // Bound the worker's pooler footprint. The worker is mostly idle (HTTP\n // long-poll); an UNPINNED pool plus the previously-missing single-instance\n // guard let an orphaned fleet of agents each hold a pool and saturate\n // Supavisor's 200-client cap. A small pool + short idle timeout releases\n // sessions promptly. Pool-exhaustion RCA 2026-06-21.\n PG_POOL_MAX: envVars.PG_POOL_MAX ?? '3',\n PG_IDLE_TIMEOUT: envVars.PG_IDLE_TIMEOUT ?? '10',\n })\n .map(([k, v]) => ` <key>${escapeXml(k)}</key>\\n <string>${escapeXml(v)}</string>`)\n .join('\\n');\n\n // Run the CLI bin directly via node. Earlier this used\n // `pnpm --filter @rulemetric/cli exec rulemetric` but pnpm-exec couldn't\n // resolve the workspace bin symlink reliably under launchd, crash-looping\n // with `Command \"rulemetric\" not found`. Direct node invocation is both\n // simpler (one process less) and avoids the bin-symlink lookup entirely.\n const cliBin = join(projectRoot, 'apps', 'cli', 'bin', 'run.js');\n // Watch the CLI's dist directory: when `pnpm build` overwrites it, launchd\n // bounces the worker so a freshly-built version of the eval-worker code\n // (e.g. with a new job-kind capability) takes effect without a manual\n // kickstart. WatchPaths fires on any change beneath the directory.\n const cliDist = join(projectRoot, 'apps', 'cli', 'dist');\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>${WORKER_PLIST_LABEL}</string>\n\n <key>ProgramArguments</key>\n <array>\n <string>${escapeXml(nodePath)}</string>\n <string>${escapeXml(cliBin)}</string>\n <string>evals</string>\n <string>agent</string>\n </array>\n\n <key>WorkingDirectory</key>\n <string>${escapeXml(projectRoot)}</string>\n\n <key>EnvironmentVariables</key>\n <dict>\n${envEntries}\n </dict>\n\n <key>RunAtLoad</key>\n <true/>\n\n <key>KeepAlive</key>\n <dict>\n <key>SuccessfulExit</key>\n <false/>\n </dict>\n\n <key>ThrottleInterval</key>\n <integer>15</integer>\n\n <key>WatchPaths</key>\n <array>\n <string>${escapeXml(cliDist)}</string>\n </array>\n\n <key>StandardOutPath</key>\n <string>${escapeXml(join(LOG_DIR, 'worker-stdout.log'))}</string>\n\n <key>StandardErrorPath</key>\n <string>${escapeXml(join(LOG_DIR, 'worker-stderr.log'))}</string>\n\n <key>ProcessType</key>\n <string>Background</string>\n</dict>\n</plist>\n`;\n }\n\n // CONNECT-proxy router that fronts mitmproxy on :8787. Always-on so\n // .claude/settings.json's HTTPS_PROXY pointer never resolves to a dead\n // socket (which would break Claude Code entirely \u2014 see CLAUDE.md).\n // NOT watched on rebuild: bouncing the gateway mid-request would drop\n // in-flight streaming responses. Gateway code changes rarely; on\n // upgrade, the user can `launchctl kickstart gui/<uid>/com.rulemetric.gateway`.\n private buildGatewayPlist(opts: {\n projectRoot: string;\n nodePath: string;\n }): string {\n const { projectRoot, nodePath } = opts;\n const gatewayEntry = join(projectRoot, 'apps', 'cli', 'dist', 'lib', 'gateway-entry.js');\n const cliBin = join(projectRoot, 'apps', 'cli', 'bin', 'run.js');\n\n const pathDirs = [...new Set([dirname(nodePath), '/usr/local/bin', '/usr/bin', '/bin'])];\n\n // Gateway only needs PATH + the CLI metadata used for drift detection\n // (gateway.ts:43 \u2014 when the addon's on-disk version file diverges from\n // the gateway's runtime version, it re-invokes the CLI to restart\n // mitmproxy). It does NOT need Supabase/auth env vars.\n const env = {\n RULEMETRIC_CLI_VERSION: this.config.version,\n RULEMETRIC_CLI_ENTRY: cliBin,\n PATH: pathDirs.join(':'),\n };\n\n const envEntries = Object.entries(env)\n .map(([k, v]) => ` <key>${escapeXml(k)}</key>\\n <string>${escapeXml(v)}</string>`)\n .join('\\n');\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>${GATEWAY_PLIST_LABEL}</string>\n\n <key>ProgramArguments</key>\n <array>\n <string>${escapeXml(nodePath)}</string>\n <string>${escapeXml(gatewayEntry)}</string>\n </array>\n\n <key>WorkingDirectory</key>\n <string>${escapeXml(projectRoot)}</string>\n\n <key>EnvironmentVariables</key>\n <dict>\n${envEntries}\n </dict>\n\n <key>RunAtLoad</key>\n <true/>\n\n <key>KeepAlive</key>\n <dict>\n <key>SuccessfulExit</key>\n <false/>\n </dict>\n\n <key>ThrottleInterval</key>\n <integer>10</integer>\n\n <key>StandardOutPath</key>\n <string>${escapeXml(join(LOG_DIR, 'gateway-stdout.log'))}</string>\n\n <key>StandardErrorPath</key>\n <string>${escapeXml(join(LOG_DIR, 'gateway-stderr.log'))}</string>\n\n <key>ProcessType</key>\n <string>Background</string>\n</dict>\n</plist>\n`;\n }\n\n // mitmproxy with the RuleMetric capture addon. Same invocation as\n // `rulemetric proxy start` (see commands/proxy/start.ts:308) so the\n // launchd path and the CLI path are interchangeable. We don't WatchPath\n // the Python addon \u2014 mitmdump has its own addon reload that handles\n // edits without a full process restart.\n private buildProxyPlist(opts: {\n projectRoot: string;\n mitmdumpPath: string;\n envVars: Record<string, string>;\n }): string {\n const { projectRoot, mitmdumpPath, envVars } = opts;\n const addonPath = join(projectRoot, 'packages', 'proxy', 'addon', 'rulemetric_addon.py');\n\n const pathDirs = [...new Set([dirname(mitmdumpPath), '/usr/local/bin', '/usr/bin', '/bin'])];\n\n // Proxy needs:\n // - auth env vars (so its reporter can POST events to the API)\n // - RULEMETRIC_PROJECT_PATH (writes session-meta + addon-version files)\n // - RULEMETRIC_CLI_VERSION (gateway uses this to detect drift)\n const env = {\n ...envVars,\n RULEMETRIC_PROJECT_PATH: projectRoot,\n RULEMETRIC_CLI_VERSION: this.config.version,\n PATH: pathDirs.join(':'),\n };\n\n const envEntries = Object.entries(env)\n .map(([k, v]) => ` <key>${escapeXml(k)}</key>\\n <string>${escapeXml(v)}</string>`)\n .join('\\n');\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>${PROXY_PLIST_LABEL}</string>\n\n <key>ProgramArguments</key>\n <array>\n <string>${escapeXml(mitmdumpPath)}</string>\n <string>--listen-port</string>\n <string>${PROXY_PORT}</string>\n <string>-s</string>\n <string>${escapeXml(addonPath)}</string>\n <string>--set</string>\n <string>console_eventlog_verbosity=info</string>\n </array>\n\n <key>WorkingDirectory</key>\n <string>${escapeXml(projectRoot)}</string>\n\n <key>EnvironmentVariables</key>\n <dict>\n${envEntries}\n </dict>\n\n <key>RunAtLoad</key>\n <true/>\n\n <key>KeepAlive</key>\n <dict>\n <key>SuccessfulExit</key>\n <false/>\n </dict>\n\n <key>ThrottleInterval</key>\n <integer>15</integer>\n\n <key>StandardOutPath</key>\n <string>${escapeXml(join(LOG_DIR, 'proxy-stdout.log'))}</string>\n\n <key>StandardErrorPath</key>\n <string>${escapeXml(join(LOG_DIR, 'proxy-stderr.log'))}</string>\n\n <key>ProcessType</key>\n <string>Background</string>\n</dict>\n</plist>\n`;\n }\n\n private async waitForApi(port: number, timeoutSecs: number): Promise<boolean> {\n let lastError: string | null = null;\n for (let i = 0; i < timeoutSecs; i++) {\n try {\n const res = await fetch(`http://localhost:${port}/health`);\n if (res.ok) return true;\n lastError = `health check returned ${res.status}`;\n } catch (err) {\n lastError = (err as Error).message;\n }\n await new Promise(r => setTimeout(r, 1000));\n }\n if (lastError) {\n this.warn(`Last health check error: ${lastError}`);\n }\n return false;\n }\n}\n\nfunction escapeXml(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,112 +1,179 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import { execSync } from 'node:child_process';
3
- import { homedir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { BaseCommand } from '../../base-command.js';
6
- const PLIST_LABEL = 'com.rulemetric.api';
7
- const PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${PLIST_LABEL}.plist`);
8
- const WORKER_PLIST_LABEL = 'com.rulemetric.worker';
9
- const WORKER_PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${WORKER_PLIST_LABEL}.plist`);
10
- const LOG_DIR = join(homedir(), '.config', 'rulemetric', 'logs');
11
- export default class ServiceStatus extends BaseCommand {
12
- static description = 'Check the status of the RuleMetric API service';
13
- async run() {
14
- if (process.platform !== 'darwin') {
15
- this.error('Service status is currently macOS-only.');
16
- }
17
- // Check if plist exists
18
- if (!existsSync(PLIST_PATH)) {
19
- this.log('Service: not installed');
20
- this.log('Run: rulemetric service install');
21
- return;
22
- }
23
- // Check launchd status
24
- let launchdStatus = 'unknown';
25
- let pid = null;
26
- try {
27
- const output = execSync(`launchctl list ${PLIST_LABEL} 2>/dev/null`, { encoding: 'utf-8' });
28
- const pidMatch = output.match(/"PID"\s*=\s*(\d+)/);
29
- const statusMatch = output.match(/"LastExitStatus"\s*=\s*(\d+)/);
30
- if (pidMatch) {
31
- pid = pidMatch[1];
32
- launchdStatus = 'running';
33
- }
34
- else if (statusMatch) {
35
- launchdStatus = statusMatch[1] === '0' ? 'stopped (clean exit)' : `stopped (exit code ${statusMatch[1]})`;
36
- }
37
- else {
38
- launchdStatus = 'loaded';
39
- }
40
- }
41
- catch {
42
- launchdStatus = 'not loaded';
43
- }
44
- // Check API health
45
- let apiHealth = 'unreachable';
46
- let port = 3000;
47
- try {
48
- const plistContent = readFileSync(PLIST_PATH, 'utf-8');
49
- const portMatch = plistContent.match(/<key>PORT<\/key>\s*<string>(\d+)<\/string>/);
50
- if (portMatch)
51
- port = Number.parseInt(portMatch[1]);
52
- }
53
- catch {
54
- // default port
55
- }
56
- try {
57
- const res = await fetch(`http://localhost:${port}/health`);
58
- if (res.ok)
59
- apiHealth = 'healthy';
60
- }
61
- catch {
62
- // unreachable
63
- }
64
- // Check worker status
65
- let workerStatus = 'not installed';
66
- let workerPid = null;
67
- if (existsSync(WORKER_PLIST_PATH)) {
68
- try {
69
- const output = execSync(`launchctl list ${WORKER_PLIST_LABEL} 2>/dev/null`, { encoding: 'utf-8' });
70
- const pidMatch = output.match(/"PID"\s*=\s*(\d+)/);
71
- const statusMatch = output.match(/"LastExitStatus"\s*=\s*(\d+)/);
72
- if (pidMatch) {
73
- workerPid = pidMatch[1];
74
- workerStatus = 'running';
75
- }
76
- else if (statusMatch) {
77
- workerStatus = statusMatch[1] === '0' ? 'stopped (clean exit)' : `stopped (exit code ${statusMatch[1]})`;
78
- }
79
- else {
80
- workerStatus = 'loaded';
81
- }
82
- }
83
- catch {
84
- workerStatus = 'not loaded';
85
- }
86
- }
87
- this.log(`API: ${launchdStatus}${pid ? ` (PID ${pid})` : ''} — ${apiHealth} (port ${port})`);
88
- this.log(`Worker: ${workerStatus}${workerPid ? ` (PID ${workerPid})` : ''}`);
89
- this.log(`Plist: ${PLIST_PATH}`);
90
- this.log(` ${WORKER_PLIST_PATH}`);
91
- this.log(`Logs: ${LOG_DIR}/{api,worker}-{stdout,stderr}.log`);
92
- if (launchdStatus === 'running' && apiHealth === 'healthy' && workerStatus === 'running') {
93
- this.log('');
94
- this.log('All good — sessions tracked, jobs processed automatically.');
95
- }
96
- else {
97
- this.log('');
98
- if (launchdStatus !== 'running') {
99
- this.log('API is not running. Try:');
100
- this.log(' launchctl kickstart gui/$(id -u)/com.rulemetric.api');
101
- }
102
- if (workerStatus !== 'running' && workerStatus !== 'not installed') {
103
- this.log('Worker is not running. Try:');
104
- this.log(' launchctl kickstart gui/$(id -u)/com.rulemetric.worker');
105
- }
106
- if (workerStatus === 'not installed') {
107
- this.log('Worker not installed. Run: rulemetric service install');
108
- }
109
- }
1
+ import {
2
+ detectTmux
3
+ } from "../../chunk-BO76WKJR.js";
4
+ import "../../chunk-KRBQLMOP.js";
5
+ import {
6
+ BaseCommand
7
+ } from "../../chunk-S56LOTGQ.js";
8
+ import "../../chunk-OGVORIFM.js";
9
+ import "../../chunk-2AM54TUK.js";
10
+ import "../../chunk-EJOI2ZGU.js";
11
+ import "../../chunk-KZRFUXGF.js";
12
+ import "../../chunk-EKJ2CABV.js";
13
+ import "../../chunk-NSBPE2FW.js";
14
+
15
+ // src/commands/service/status.ts
16
+ import { existsSync, readFileSync } from "node:fs";
17
+ import { execFileSync, execSync } from "node:child_process";
18
+ import { homedir } from "node:os";
19
+ import { join } from "node:path";
20
+ var PLIST_LABEL = "com.rulemetric.api";
21
+ var PLIST_PATH = join(homedir(), "Library", "LaunchAgents", `${PLIST_LABEL}.plist`);
22
+ var WORKER_PLIST_LABEL = "com.rulemetric.worker";
23
+ var WORKER_PLIST_PATH = join(homedir(), "Library", "LaunchAgents", `${WORKER_PLIST_LABEL}.plist`);
24
+ var GATEWAY_PLIST_LABEL = "com.rulemetric.gateway";
25
+ var GATEWAY_PLIST_PATH = join(homedir(), "Library", "LaunchAgents", `${GATEWAY_PLIST_LABEL}.plist`);
26
+ var PROXY_PLIST_LABEL = "com.rulemetric.proxy";
27
+ var PROXY_PLIST_PATH = join(homedir(), "Library", "LaunchAgents", `${PROXY_PLIST_LABEL}.plist`);
28
+ var LOG_DIR = join(homedir(), ".config", "rulemetric", "logs");
29
+ var GATEWAY_PORT = 8787;
30
+ var PROXY_PORT = 8788;
31
+ var ServiceStatus = class extends BaseCommand {
32
+ static description = "Check the status of all RuleMetric launchd services";
33
+ async run() {
34
+ if (process.platform !== "darwin") {
35
+ this.error("Service status is currently macOS-only.");
110
36
  }
111
- }
112
- //# sourceMappingURL=status.js.map
37
+ if (!existsSync(PLIST_PATH)) {
38
+ this.log("Service: not installed");
39
+ this.log("Run: rulemetric service install");
40
+ return;
41
+ }
42
+ const apiState = this.readServiceState(PLIST_LABEL, PLIST_PATH);
43
+ const apiPort = this.readApiPort(PLIST_PATH);
44
+ const apiHealth = await this.probeApiHealth(apiPort);
45
+ const dashboardServed = await this.probeDashboard(apiPort);
46
+ const workerState = this.readServiceState(WORKER_PLIST_LABEL, WORKER_PLIST_PATH);
47
+ const workerMode = this.readWorkerMode();
48
+ const gatewayState = this.readServiceState(GATEWAY_PLIST_LABEL, GATEWAY_PLIST_PATH);
49
+ const gatewayListening = this.isPortListening(GATEWAY_PORT);
50
+ const proxyState = this.readServiceState(PROXY_PLIST_LABEL, PROXY_PLIST_PATH);
51
+ const proxyListening = this.isPortListening(PROXY_PORT);
52
+ const apiDetail = `${apiHealth} (port ${apiPort})${dashboardServed ? " \u2014 dashboard served" : ""}`;
53
+ this.log(`API: ${this.fmtState(apiState)} \u2014 ${apiDetail}`);
54
+ const modeSuffix = workerMode === "listen" ? " [mode: listen \u2014 DEPRECATED, run `rulemetric service install --force` to upgrade]" : "";
55
+ this.log(`Worker: ${this.fmtState(workerState)}${modeSuffix}`);
56
+ this.log(`Gateway: ${this.fmtState(gatewayState)} \u2014 ${gatewayListening ? `listening :${GATEWAY_PORT}` : `NOT listening :${GATEWAY_PORT}`}`);
57
+ this.log(`Proxy: ${this.fmtState(proxyState)} \u2014 ${proxyListening ? `listening :${PROXY_PORT}` : `NOT listening :${PROXY_PORT}`}`);
58
+ const tmux = await detectTmux();
59
+ this.log(`Tmux: ${tmux.available ? tmux.version ? `v${tmux.version}` : "available" : "not found"}`);
60
+ this.log("");
61
+ this.log(`Plists: ${PLIST_PATH}`);
62
+ this.log(` ${WORKER_PLIST_PATH}`);
63
+ if (gatewayState.installed) this.log(` ${GATEWAY_PLIST_PATH}`);
64
+ if (proxyState.installed) this.log(` ${PROXY_PLIST_PATH}`);
65
+ this.log(`Logs: ${LOG_DIR}/{api,worker,gateway,proxy}-{stdout,stderr}.log`);
66
+ const allHealthy = apiState.launchdStatus === "running" && apiHealth === "healthy" && workerState.launchdStatus === "running" && (!gatewayState.installed || gatewayState.launchdStatus === "running" && gatewayListening) && (!proxyState.installed || proxyState.launchdStatus === "running" && proxyListening);
67
+ this.log("");
68
+ if (allHealthy) {
69
+ this.log("All good \u2014 sessions tracked, jobs processed, capture pipeline live.");
70
+ } else {
71
+ if (apiState.launchdStatus !== "running") {
72
+ this.log("API is not running. Try:");
73
+ this.log(` launchctl kickstart gui/$(id -u)/${PLIST_LABEL}`);
74
+ }
75
+ if (workerState.installed && workerState.launchdStatus !== "running") {
76
+ this.log("Worker is not running. Try:");
77
+ this.log(` launchctl kickstart gui/$(id -u)/${WORKER_PLIST_LABEL}`);
78
+ }
79
+ if (gatewayState.installed && (gatewayState.launchdStatus !== "running" || !gatewayListening)) {
80
+ this.log("Gateway is not running. Try:");
81
+ this.log(` launchctl kickstart gui/$(id -u)/${GATEWAY_PLIST_LABEL}`);
82
+ }
83
+ if (proxyState.installed && (proxyState.launchdStatus !== "running" || !proxyListening)) {
84
+ this.log("Proxy is not running. Try:");
85
+ this.log(` launchctl kickstart gui/$(id -u)/${PROXY_PLIST_LABEL}`);
86
+ }
87
+ if (!gatewayState.installed || !proxyState.installed) {
88
+ this.log("Gateway/proxy not installed. Run: rulemetric service install --force");
89
+ }
90
+ }
91
+ }
92
+ readServiceState(label, plistPath) {
93
+ const installed = existsSync(plistPath);
94
+ if (!installed) {
95
+ return { installed: false, launchdStatus: "not installed", pid: null };
96
+ }
97
+ try {
98
+ const output = execSync(`launchctl list ${label} 2>/dev/null`, { encoding: "utf-8" });
99
+ const pidMatch = output.match(/"PID"\s*=\s*(\d+)/);
100
+ const statusMatch = output.match(/"LastExitStatus"\s*=\s*(\d+)/);
101
+ if (pidMatch) {
102
+ return { installed: true, launchdStatus: "running", pid: pidMatch[1] };
103
+ }
104
+ if (statusMatch) {
105
+ const code = statusMatch[1];
106
+ return {
107
+ installed: true,
108
+ launchdStatus: code === "0" ? "stopped (clean exit)" : `stopped (exit ${code})`,
109
+ pid: null
110
+ };
111
+ }
112
+ return { installed: true, launchdStatus: "loaded", pid: null };
113
+ } catch {
114
+ return { installed: true, launchdStatus: "not loaded", pid: null };
115
+ }
116
+ }
117
+ fmtState(state) {
118
+ if (!state.installed) return "not installed";
119
+ return `${state.launchdStatus}${state.pid ? ` (PID ${state.pid})` : ""}`;
120
+ }
121
+ readApiPort(plistPath) {
122
+ try {
123
+ const plistContent = readFileSync(plistPath, "utf-8");
124
+ const portMatch = plistContent.match(/<key>PORT<\/key>\s*<string>(\d+)<\/string>/);
125
+ if (portMatch) return Number.parseInt(portMatch[1]);
126
+ } catch {
127
+ }
128
+ return 3e3;
129
+ }
130
+ // Returns 'agent' | 'listen' | null. Used to flag the stale Phase 4c
131
+ // mode where the plist still says `evals listen` and would crash-loop.
132
+ readWorkerMode() {
133
+ if (!existsSync(WORKER_PLIST_PATH)) return null;
134
+ try {
135
+ const plistContent = readFileSync(WORKER_PLIST_PATH, "utf-8");
136
+ const match = plistContent.match(/<string>evals<\/string>\s*<string>(listen|agent)<\/string>/);
137
+ if (match) return match[1];
138
+ } catch {
139
+ }
140
+ return null;
141
+ }
142
+ async probeApiHealth(port) {
143
+ try {
144
+ const res = await fetch(`http://localhost:${port}/health`);
145
+ if (res.ok) return "healthy";
146
+ return `unhealthy (${res.status})`;
147
+ } catch {
148
+ return "unreachable";
149
+ }
150
+ }
151
+ // Probe `/` on the API. Returns true if it serves HTML (= web bundle
152
+ // is mounted). Differentiates "API runs but dashboard 404s because
153
+ // apps/web/dist is missing" from "API serves dashboard properly".
154
+ async probeDashboard(port) {
155
+ try {
156
+ const res = await fetch(`http://localhost:${port}/`);
157
+ if (!res.ok) return false;
158
+ const contentType = res.headers.get("content-type") ?? "";
159
+ return contentType.includes("text/html");
160
+ } catch {
161
+ return false;
162
+ }
163
+ }
164
+ isPortListening(port) {
165
+ try {
166
+ const out = execFileSync("lsof", ["-ti", `:${port}`, "-sTCP:LISTEN"], {
167
+ encoding: "utf-8",
168
+ stdio: ["ignore", "pipe", "ignore"]
169
+ });
170
+ return out.trim().length > 0;
171
+ } catch {
172
+ return false;
173
+ }
174
+ }
175
+ };
176
+ export {
177
+ ServiceStatus as default
178
+ };
179
+ //# sourceMappingURL=status.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/service/status.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/commands/service/status.ts"],
4
+ "sourcesContent": ["import { existsSync, readFileSync } from 'node:fs';\nimport { execFileSync, execSync } from 'node:child_process';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { BaseCommand } from '../../base-command.js';\nimport { detectTmux } from '../../lib/detect-tmux.js';\n\nconst PLIST_LABEL = 'com.rulemetric.api';\nconst PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${PLIST_LABEL}.plist`);\nconst WORKER_PLIST_LABEL = 'com.rulemetric.worker';\nconst WORKER_PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${WORKER_PLIST_LABEL}.plist`);\nconst GATEWAY_PLIST_LABEL = 'com.rulemetric.gateway';\nconst GATEWAY_PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${GATEWAY_PLIST_LABEL}.plist`);\nconst PROXY_PLIST_LABEL = 'com.rulemetric.proxy';\nconst PROXY_PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${PROXY_PLIST_LABEL}.plist`);\nconst LOG_DIR = join(homedir(), '.config', 'rulemetric', 'logs');\nconst GATEWAY_PORT = 8787;\nconst PROXY_PORT = 8788;\n\ninterface ServiceState {\n installed: boolean;\n launchdStatus: string;\n pid: string | null;\n}\n\nexport default class ServiceStatus extends BaseCommand {\n static override description = 'Check the status of all RuleMetric launchd services';\n\n async run(): Promise<void> {\n if (process.platform !== 'darwin') {\n this.error('Service status is currently macOS-only.');\n }\n\n // Nothing installed at all \u2014 short-circuit with install hint.\n if (!existsSync(PLIST_PATH)) {\n this.log('Service: not installed');\n this.log('Run: rulemetric service install');\n return;\n }\n\n // \u2500\u2500 API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const apiState = this.readServiceState(PLIST_LABEL, PLIST_PATH);\n const apiPort = this.readApiPort(PLIST_PATH);\n const apiHealth = await this.probeApiHealth(apiPort);\n const dashboardServed = await this.probeDashboard(apiPort);\n\n // \u2500\u2500 Worker \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const workerState = this.readServiceState(WORKER_PLIST_LABEL, WORKER_PLIST_PATH);\n const workerMode = this.readWorkerMode();\n\n // \u2500\u2500 Gateway \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const gatewayState = this.readServiceState(GATEWAY_PLIST_LABEL, GATEWAY_PLIST_PATH);\n const gatewayListening = this.isPortListening(GATEWAY_PORT);\n\n // \u2500\u2500 Proxy \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const proxyState = this.readServiceState(PROXY_PLIST_LABEL, PROXY_PLIST_PATH);\n const proxyListening = this.isPortListening(PROXY_PORT);\n\n // \u2500\u2500 Render \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const apiDetail = `${apiHealth} (port ${apiPort})${dashboardServed ? ' \u2014 dashboard served' : ''}`;\n this.log(`API: ${this.fmtState(apiState)} \u2014 ${apiDetail}`);\n // Post-Phase 4c there's only one mode (agent). Loudly flag any stale\n // plist still pointing at the (now-deleted) `evals listen` command \u2014\n // it would crash-loop. Operator needs to re-run `service install`.\n const modeSuffix = workerMode === 'listen'\n ? ' [mode: listen \u2014 DEPRECATED, run `rulemetric service install --force` to upgrade]'\n : '';\n this.log(`Worker: ${this.fmtState(workerState)}${modeSuffix}`);\n this.log(`Gateway: ${this.fmtState(gatewayState)} \u2014 ${gatewayListening ? `listening :${GATEWAY_PORT}` : `NOT listening :${GATEWAY_PORT}`}`);\n this.log(`Proxy: ${this.fmtState(proxyState)} \u2014 ${proxyListening ? `listening :${PROXY_PORT}` : `NOT listening :${PROXY_PORT}`}`);\n\n const tmux = await detectTmux();\n this.log(`Tmux: ${tmux.available ? (tmux.version ? `v${tmux.version}` : 'available') : 'not found'}`);\n this.log('');\n this.log(`Plists: ${PLIST_PATH}`);\n this.log(` ${WORKER_PLIST_PATH}`);\n if (gatewayState.installed) this.log(` ${GATEWAY_PLIST_PATH}`);\n if (proxyState.installed) this.log(` ${PROXY_PLIST_PATH}`);\n this.log(`Logs: ${LOG_DIR}/{api,worker,gateway,proxy}-{stdout,stderr}.log`);\n\n const allHealthy =\n apiState.launchdStatus === 'running' &&\n apiHealth === 'healthy' &&\n workerState.launchdStatus === 'running' &&\n (!gatewayState.installed || (gatewayState.launchdStatus === 'running' && gatewayListening)) &&\n (!proxyState.installed || (proxyState.launchdStatus === 'running' && proxyListening));\n\n this.log('');\n if (allHealthy) {\n this.log('All good \u2014 sessions tracked, jobs processed, capture pipeline live.');\n } else {\n if (apiState.launchdStatus !== 'running') {\n this.log('API is not running. Try:');\n this.log(` launchctl kickstart gui/$(id -u)/${PLIST_LABEL}`);\n }\n if (workerState.installed && workerState.launchdStatus !== 'running') {\n this.log('Worker is not running. Try:');\n this.log(` launchctl kickstart gui/$(id -u)/${WORKER_PLIST_LABEL}`);\n }\n if (gatewayState.installed && (gatewayState.launchdStatus !== 'running' || !gatewayListening)) {\n this.log('Gateway is not running. Try:');\n this.log(` launchctl kickstart gui/$(id -u)/${GATEWAY_PLIST_LABEL}`);\n }\n if (proxyState.installed && (proxyState.launchdStatus !== 'running' || !proxyListening)) {\n this.log('Proxy is not running. Try:');\n this.log(` launchctl kickstart gui/$(id -u)/${PROXY_PLIST_LABEL}`);\n }\n if (!gatewayState.installed || !proxyState.installed) {\n this.log('Gateway/proxy not installed. Run: rulemetric service install --force');\n }\n }\n }\n\n private readServiceState(label: string, plistPath: string): ServiceState {\n const installed = existsSync(plistPath);\n if (!installed) {\n return { installed: false, launchdStatus: 'not installed', pid: null };\n }\n try {\n const output = execSync(`launchctl list ${label} 2>/dev/null`, { encoding: 'utf-8' });\n const pidMatch = output.match(/\"PID\"\\s*=\\s*(\\d+)/);\n const statusMatch = output.match(/\"LastExitStatus\"\\s*=\\s*(\\d+)/);\n if (pidMatch) {\n return { installed: true, launchdStatus: 'running', pid: pidMatch[1] };\n }\n if (statusMatch) {\n const code = statusMatch[1];\n return {\n installed: true,\n launchdStatus: code === '0' ? 'stopped (clean exit)' : `stopped (exit ${code})`,\n pid: null,\n };\n }\n return { installed: true, launchdStatus: 'loaded', pid: null };\n } catch {\n return { installed: true, launchdStatus: 'not loaded', pid: null };\n }\n }\n\n private fmtState(state: ServiceState): string {\n if (!state.installed) return 'not installed';\n return `${state.launchdStatus}${state.pid ? ` (PID ${state.pid})` : ''}`;\n }\n\n private readApiPort(plistPath: string): number {\n try {\n const plistContent = readFileSync(plistPath, 'utf-8');\n const portMatch = plistContent.match(/<key>PORT<\\/key>\\s*<string>(\\d+)<\\/string>/);\n if (portMatch) return Number.parseInt(portMatch[1]);\n } catch {\n // fall through to default\n }\n return 3000;\n }\n\n // Returns 'agent' | 'listen' | null. Used to flag the stale Phase 4c\n // mode where the plist still says `evals listen` and would crash-loop.\n private readWorkerMode(): 'agent' | 'listen' | null {\n if (!existsSync(WORKER_PLIST_PATH)) return null;\n try {\n const plistContent = readFileSync(WORKER_PLIST_PATH, 'utf-8');\n const match = plistContent.match(/<string>evals<\\/string>\\s*<string>(listen|agent)<\\/string>/);\n if (match) return match[1] as 'agent' | 'listen';\n } catch {\n // Best-effort\n }\n return null;\n }\n\n private async probeApiHealth(port: number): Promise<string> {\n try {\n const res = await fetch(`http://localhost:${port}/health`);\n if (res.ok) return 'healthy';\n return `unhealthy (${res.status})`;\n } catch {\n return 'unreachable';\n }\n }\n\n // Probe `/` on the API. Returns true if it serves HTML (= web bundle\n // is mounted). Differentiates \"API runs but dashboard 404s because\n // apps/web/dist is missing\" from \"API serves dashboard properly\".\n private async probeDashboard(port: number): Promise<boolean> {\n try {\n const res = await fetch(`http://localhost:${port}/`);\n if (!res.ok) return false;\n const contentType = res.headers.get('content-type') ?? '';\n return contentType.includes('text/html');\n } catch {\n return false;\n }\n }\n\n private isPortListening(port: number): boolean {\n try {\n const out = execFileSync('lsof', ['-ti', `:${port}`, '-sTCP:LISTEN'], {\n encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'],\n });\n return out.trim().length > 0;\n } catch {\n return false;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }