@rulemetric/cli 0.7.3 → 0.7.5

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 (550) hide show
  1. package/README.md +10 -8
  2. package/dist/base-command.js +1 -14
  3. package/dist/chunk-2JRDG4LJ.js +31 -0
  4. package/dist/chunk-2TC6WCUT.js +34 -0
  5. package/dist/chunk-2WLVDSAP.js +2 -0
  6. package/dist/chunk-32EEBARV.js +1 -0
  7. package/dist/chunk-3AV3GTMP.js +1 -0
  8. package/dist/chunk-43YBXX7R.js +1 -0
  9. package/dist/chunk-4Z5ECCJE.js +1 -0
  10. package/dist/chunk-5RBLIVBF.js +1 -0
  11. package/dist/chunk-67QCYUJU.js +1 -0
  12. package/dist/chunk-6QKI756T.js +2 -0
  13. package/dist/chunk-6V4WM73L.js +1 -0
  14. package/dist/chunk-6XEC6474.js +1 -0
  15. package/dist/chunk-7DFNBRLY.js +61 -0
  16. package/dist/chunk-ARNZQBMX.js +1 -0
  17. package/dist/chunk-AYUJY37O.js +5 -0
  18. package/dist/chunk-CADKBP3D.js +58 -0
  19. package/dist/chunk-CDI5CCHU.js +1 -0
  20. package/dist/chunk-CNQ5DTNC.js +1 -0
  21. package/dist/chunk-DCLWFGEA.js +1 -0
  22. package/dist/chunk-DNF4HDI6.js +14 -0
  23. package/dist/chunk-DPFNJZUO.js +1 -0
  24. package/dist/chunk-DSO2U4Y6.js +56 -0
  25. package/dist/chunk-DVN7GFJG.js +1 -0
  26. package/dist/chunk-G63KMH6U.js +1 -0
  27. package/dist/chunk-G6XGDHGC.js +2 -0
  28. package/dist/chunk-GBMF3TP6.js +1 -0
  29. package/dist/chunk-GY5IJ4RS.js +1 -0
  30. package/dist/chunk-H2ORWIEY.js +1 -0
  31. package/dist/chunk-H4SV7FN4.js +1 -0
  32. package/dist/chunk-HS7X43XE.js +24 -0
  33. package/dist/{chunk-OQBBVTDG.js → chunk-I2DZGJRR.js} +6 -71
  34. package/dist/chunk-IZTIYR5Q.js +2 -0
  35. package/dist/chunk-JAPCCEKF.js +3 -0
  36. package/dist/chunk-JQTGQXUX.js +1 -0
  37. package/dist/chunk-KAF3CYRW.js +9 -0
  38. package/dist/chunk-KKDHD4XA.js +2 -0
  39. package/dist/chunk-KV325CXF.js +33 -0
  40. package/dist/chunk-MGHFDHHM.js +1 -0
  41. package/dist/chunk-MODXEGCU.js +1 -0
  42. package/dist/chunk-MVM6OGAF.js +4 -0
  43. package/dist/chunk-N7ODX6PO.js +1 -0
  44. package/dist/chunk-N7TGRFVZ.js +70 -0
  45. package/dist/chunk-NBTC5FNV.js +1 -0
  46. package/dist/chunk-NEACEHQD.js +1 -0
  47. package/dist/chunk-NJ5UED3H.js +1 -0
  48. package/dist/chunk-NVKX36YN.js +3 -0
  49. package/dist/chunk-O2SDD2WW.js +1 -0
  50. package/dist/chunk-O6C2UGBY.js +7 -0
  51. package/dist/chunk-OMXUK4M6.js +1 -0
  52. package/dist/chunk-PPKPCXJD.js +4 -0
  53. package/dist/{chunk-XZXS2W24.js → chunk-QFVGUZDO.js} +11 -57
  54. package/dist/chunk-RDET7CKR.js +1 -0
  55. package/dist/chunk-RQ424GI6.js +5 -0
  56. package/dist/chunk-RSKQRVPJ.js +1 -0
  57. package/dist/chunk-RTWRHIKY.js +7 -0
  58. package/dist/chunk-SZ62CP55.js +1 -0
  59. package/dist/chunk-TDD7IOV2.js +1 -0
  60. package/dist/chunk-TIOKY2IA.js +1 -0
  61. package/dist/chunk-TQMG647B.js +15 -0
  62. package/dist/chunk-TU2AR6XO.js +1 -0
  63. package/dist/chunk-U6ABMRT3.js +9 -0
  64. package/dist/chunk-U6XEU573.js +1 -0
  65. package/dist/chunk-UF6US7VU.js +1 -0
  66. package/dist/chunk-V44SRRYR.js +1 -0
  67. package/dist/chunk-V5U3E4BZ.js +1 -0
  68. package/dist/chunk-VAXRCSSH.js +2 -0
  69. package/dist/chunk-VLOX6KOM.js +1 -0
  70. package/dist/chunk-VUGRXM7R.js +1 -0
  71. package/dist/chunk-W2MOTOQE.js +1 -0
  72. package/dist/chunk-W2MV25SB.js +1 -0
  73. package/dist/chunk-WLVQJH4E.js +1 -0
  74. package/dist/chunk-WSCK4WNK.js +1 -0
  75. package/dist/chunk-XICLXXRH.js +1 -0
  76. package/dist/chunk-XXDZJ6YI.js +1 -0
  77. package/dist/chunk-ZL4MZMUK.js +34 -0
  78. package/dist/chunk-ZLLER3HP.js +1 -0
  79. package/dist/chunk-ZR3MUNLS.js +1 -0
  80. package/dist/chunk-ZXF5NE54.js +1 -0
  81. package/dist/commands/antigravity/backfill.js +2 -136
  82. package/dist/commands/auth/create-key.js +1 -52
  83. package/dist/commands/auth/login.js +1 -85
  84. package/dist/commands/auth/logout.js +1 -29
  85. package/dist/commands/auth/revoke-key.js +4 -33
  86. package/dist/commands/auth/signup.js +1 -89
  87. package/dist/commands/auth/status.js +1 -42
  88. package/dist/commands/catalog/index.js +2 -52
  89. package/dist/commands/catalog/recommend.js +3 -43
  90. package/dist/commands/convert.js +1 -75
  91. package/dist/commands/converters.js +1 -54
  92. package/dist/commands/crons/list.js +1 -41
  93. package/dist/commands/crons/run.js +2 -76
  94. package/dist/commands/dashboard.js +1 -46
  95. package/dist/commands/diagnostics.js +1 -117
  96. package/dist/commands/eval-targets/create.js +1 -53
  97. package/dist/commands/eval-targets/list.js +1 -54
  98. package/dist/commands/evals/agent.js +3 -310
  99. package/dist/commands/evals/benchmark.js +6 -73
  100. package/dist/commands/evals/compare.js +13 -96
  101. package/dist/commands/evals/create.js +1 -67
  102. package/dist/commands/evals/optimize-description.js +25 -239
  103. package/dist/commands/evals/optimize.js +5 -211
  104. package/dist/commands/evals/run.js +3 -183
  105. package/dist/commands/gateway/ensure.js +1 -104
  106. package/dist/commands/hooks/emit-instructions.js +1 -25
  107. package/dist/commands/hooks/install.js +1 -442
  108. package/dist/commands/hooks/run.js +3 -81
  109. package/dist/commands/hooks/uninstall.js +2 -156
  110. package/dist/commands/import.js +1 -66
  111. package/dist/commands/instructions/create.js +1 -74
  112. package/dist/commands/instructions/delete.js +1 -55
  113. package/dist/commands/instructions/fork.js +1 -34
  114. package/dist/commands/instructions/get.js +1 -68
  115. package/dist/commands/instructions/list.js +1 -65
  116. package/dist/commands/instructions/promote.js +1 -42
  117. package/dist/commands/instructions/pull.js +1 -39
  118. package/dist/commands/instructions/upstream.js +1 -38
  119. package/dist/commands/instructions/versions.js +1 -53
  120. package/dist/commands/launcher.js +1 -40
  121. package/dist/commands/org/current.js +1 -77
  122. package/dist/commands/org/list.js +1 -52
  123. package/dist/commands/org/switch.js +1 -71
  124. package/dist/commands/packs/add-instruction.js +1 -37
  125. package/dist/commands/packs/apply.js +1 -39
  126. package/dist/commands/packs/create.js +1 -50
  127. package/dist/commands/packs/fork.js +1 -34
  128. package/dist/commands/packs/get.js +3 -56
  129. package/dist/commands/packs/list.js +1 -66
  130. package/dist/commands/packs/remove-instruction.js +1 -35
  131. package/dist/commands/proxy/env.js +3 -131
  132. package/dist/commands/proxy/logs.js +3 -85
  133. package/dist/commands/proxy/restart.js +1 -35
  134. package/dist/commands/proxy/setup.js +17 -454
  135. package/dist/commands/proxy/start.js +10 -333
  136. package/dist/commands/proxy/status.js +1 -78
  137. package/dist/commands/proxy/stop.js +1 -94
  138. package/dist/commands/research/backfill.js +1 -59
  139. package/dist/commands/research/tail-transcript.js +1 -70
  140. package/dist/commands/service/install.js +57 -796
  141. package/dist/commands/service/status.js +1 -180
  142. package/dist/commands/service/uninstall.js +1 -119
  143. package/dist/commands/sessions/analyze.js +1 -48
  144. package/dist/commands/sessions/end.js +2 -85
  145. package/dist/commands/sessions/import.js +1 -46
  146. package/dist/commands/sessions/list.js +1 -48
  147. package/dist/commands/sessions/start.js +3 -90
  148. package/dist/commands/setup.js +3 -150
  149. package/dist/commands/skills/export-approved.js +1 -46
  150. package/dist/commands/skills/install.js +4 -107
  151. package/dist/commands/skills/list.js +4 -65
  152. package/dist/commands/skills/publish.js +2 -98
  153. package/dist/commands/skills/search.js +3 -72
  154. package/dist/commands/skills/update.js +3 -55
  155. package/dist/commands/suggestions/accept.js +8 -84
  156. package/dist/commands/suggestions/dismiss.js +1 -45
  157. package/dist/commands/suggestions/list.js +2 -61
  158. package/dist/commands/suggestions/refresh.js +1 -27
  159. package/dist/cursor-T7AMCMKS.js +13 -0
  160. package/dist/dashboard/Dashboard.js +1 -243
  161. package/dist/dashboard/data.js +1 -15
  162. package/dist/dashboard/launcher/ActiveJobsList.js +1 -10
  163. package/dist/dashboard/launcher/LauncherOverlay.js +1 -16
  164. package/dist/dashboard/launcher/NewLaunchForm.js +1 -10
  165. package/dist/dashboard/launcher/api.js +1 -16
  166. package/dist/dashboard/launcher/tool-labels.js +1 -10
  167. package/dist/dashboard/launcher/types.js +0 -1
  168. package/dist/dashboard/launcher/useLaunchJobs.js +1 -11
  169. package/dist/dashboard/panels/friction.js +1 -10
  170. package/dist/dashboard/panels/insights.js +1 -10
  171. package/dist/dashboard/panels/instructions.js +1 -10
  172. package/dist/dashboard/panels/outcomes.js +1 -10
  173. package/dist/dashboard/panels/overview.js +1 -10
  174. package/dist/dashboard/panels/shared.js +1 -19
  175. package/dist/dashboard/types.js +1 -24
  176. package/dist/dist-FAVALJ5C.js +1 -0
  177. package/dist/index.js +1 -8
  178. package/dist/lib/active-org-refresh.js +1 -15
  179. package/dist/lib/active-org.js +1 -16
  180. package/dist/lib/agent-loop.js +1 -47
  181. package/dist/lib/antigravity-transcript.js +1 -22
  182. package/dist/lib/api-client.js +1 -23
  183. package/dist/lib/auth.js +1 -30
  184. package/dist/lib/capture-hosts.js +1 -8
  185. package/dist/lib/detect-languages.js +1 -8
  186. package/dist/lib/detect-tmux.js +1 -9
  187. package/dist/lib/diagnostics.js +1 -12
  188. package/dist/lib/editor-proxy-pins.js +1 -14
  189. package/dist/lib/ensure-api-key.js +1 -11
  190. package/dist/lib/ensure-fresh-token.js +1 -0
  191. package/dist/lib/eval-analyzer.js +1 -9
  192. package/dist/lib/eval-benchmark.js +1 -12
  193. package/dist/lib/eval-conversation-handler.js +1 -13
  194. package/dist/lib/eval-executor.js +1 -8
  195. package/dist/lib/eval-grader.js +1 -9
  196. package/dist/lib/eval-meta-judge.js +1 -9
  197. package/dist/lib/eval-trigger-tester.js +1 -11
  198. package/dist/lib/eval-worktree.js +1 -8
  199. package/dist/lib/gateway-entry.js +1 -61
  200. package/dist/lib/gateway-identity.js +1 -16
  201. package/dist/lib/gateway-lifecycle.js +1 -32
  202. package/dist/lib/gateway.js +1 -14
  203. package/dist/lib/handlers/cron-refresh-pricing.js +1 -0
  204. package/dist/lib/handlers/cron-refresh-skills.js +1 -8
  205. package/dist/lib/handlers/cron-suggest-instructions.js +1 -16
  206. package/dist/lib/handlers/process-announcement.js +1 -11
  207. package/dist/lib/handlers/process-changelog.js +1 -11
  208. package/dist/lib/handlers/process-conversation.js +1 -14
  209. package/dist/lib/handlers/process-eval.js +1 -15
  210. package/dist/lib/handlers/process-insights.js +1 -15
  211. package/dist/lib/handlers/process-launch.js +1 -16
  212. package/dist/lib/handlers/process-run-cleanup.js +1 -13
  213. package/dist/lib/handlers/process-send-message.js +1 -10
  214. package/dist/lib/handlers/process-session-goal.js +1 -12
  215. package/dist/lib/hooks-config.js +1 -81
  216. package/dist/lib/insights-prompts.js +1 -12
  217. package/dist/lib/instruction-snapshot.js +1 -8
  218. package/dist/lib/job-helpers.js +0 -1
  219. package/dist/lib/llm-client.js +1 -20
  220. package/dist/lib/manual-tasks-meta.js +1 -8
  221. package/dist/lib/manual-tasks.js +1 -80
  222. package/dist/lib/output.js +1 -12
  223. package/dist/lib/permanent-job-error.js +1 -10
  224. package/dist/lib/pid-identity.js +1 -14
  225. package/dist/lib/proxy-respawn.js +1 -12
  226. package/dist/lib/research-client.js +1 -12
  227. package/dist/lib/setup-steps.js +1 -33
  228. package/dist/lib/skills-loader.js +1 -8
  229. package/dist/lib/statusline-shim.js +1 -20
  230. package/dist/lib/telemetry.js +1 -16
  231. package/dist/lib/terminal-target-heartbeat.js +1 -15
  232. package/dist/lib/tmux.js +1 -16
  233. package/dist/lib/transcript-rate-limit-watcher.js +1 -22
  234. package/dist/lib/types.js +1 -8
  235. package/dist/lib/version-check.js +1 -12
  236. package/dist/lib/which.js +1 -8
  237. package/dist/lib/worktree.js +1 -17
  238. package/dist/opencode-QRJ3BH23.js +1 -0
  239. package/oclif.manifest.json +12 -34
  240. package/package.json +9 -8
  241. package/dist/base-command.js.map +0 -7
  242. package/dist/chunk-2HK7RGZB.js +0 -82
  243. package/dist/chunk-2HK7RGZB.js.map +0 -7
  244. package/dist/chunk-2ORJWTNZ.js +0 -307
  245. package/dist/chunk-2ORJWTNZ.js.map +0 -7
  246. package/dist/chunk-37LN5O7M.js +0 -59
  247. package/dist/chunk-37LN5O7M.js.map +0 -7
  248. package/dist/chunk-3S7223UR.js +0 -81
  249. package/dist/chunk-3S7223UR.js.map +0 -7
  250. package/dist/chunk-3TIMQ3O6.js +0 -96
  251. package/dist/chunk-3TIMQ3O6.js.map +0 -7
  252. package/dist/chunk-42GFSAJP.js +0 -32
  253. package/dist/chunk-42GFSAJP.js.map +0 -7
  254. package/dist/chunk-4BHDHHKL.js +0 -48
  255. package/dist/chunk-4BHDHHKL.js.map +0 -7
  256. package/dist/chunk-4D537GXE.js +0 -99
  257. package/dist/chunk-4D537GXE.js.map +0 -7
  258. package/dist/chunk-4LYCDS2N.js +0 -139
  259. package/dist/chunk-4LYCDS2N.js.map +0 -7
  260. package/dist/chunk-4SCZK7AL.js +0 -129
  261. package/dist/chunk-4SCZK7AL.js.map +0 -7
  262. package/dist/chunk-4XAWK6S2.js +0 -161
  263. package/dist/chunk-4XAWK6S2.js.map +0 -7
  264. package/dist/chunk-52WIYRZH.js +0 -73
  265. package/dist/chunk-52WIYRZH.js.map +0 -7
  266. package/dist/chunk-5BAOGNUH.js +0 -79
  267. package/dist/chunk-5BAOGNUH.js.map +0 -7
  268. package/dist/chunk-5EDMGK3W.js +0 -39
  269. package/dist/chunk-5EDMGK3W.js.map +0 -7
  270. package/dist/chunk-6NBS5XFS.js +0 -99
  271. package/dist/chunk-6NBS5XFS.js.map +0 -7
  272. package/dist/chunk-7LVVKQMZ.js +0 -98
  273. package/dist/chunk-7LVVKQMZ.js.map +0 -7
  274. package/dist/chunk-7NNFYWKK.js +0 -243
  275. package/dist/chunk-7NNFYWKK.js.map +0 -7
  276. package/dist/chunk-7NYKWN7U.js +0 -12
  277. package/dist/chunk-7NYKWN7U.js.map +0 -7
  278. package/dist/chunk-BO76WKJR.js +0 -42
  279. package/dist/chunk-BO76WKJR.js.map +0 -7
  280. package/dist/chunk-BRD5RUGM.js +0 -53
  281. package/dist/chunk-BRD5RUGM.js.map +0 -7
  282. package/dist/chunk-BT6Z6545.js +0 -43
  283. package/dist/chunk-BT6Z6545.js.map +0 -7
  284. package/dist/chunk-BZDKEQKU.js +0 -39
  285. package/dist/chunk-BZDKEQKU.js.map +0 -7
  286. package/dist/chunk-DGHWRQXL.js +0 -17
  287. package/dist/chunk-DGHWRQXL.js.map +0 -7
  288. package/dist/chunk-DIQUV5FR.js +0 -257
  289. package/dist/chunk-DIQUV5FR.js.map +0 -7
  290. package/dist/chunk-DMX5YOTM.js +0 -167
  291. package/dist/chunk-DMX5YOTM.js.map +0 -7
  292. package/dist/chunk-DNKSVWMD.js +0 -108
  293. package/dist/chunk-DNKSVWMD.js.map +0 -7
  294. package/dist/chunk-DQ3KELXD.js +0 -74
  295. package/dist/chunk-DQ3KELXD.js.map +0 -7
  296. package/dist/chunk-DUJSRBLP.js +0 -122
  297. package/dist/chunk-DUJSRBLP.js.map +0 -7
  298. package/dist/chunk-E3BIT53W.js +0 -154
  299. package/dist/chunk-E3BIT53W.js.map +0 -7
  300. package/dist/chunk-EARWG4EV.js +0 -22
  301. package/dist/chunk-EARWG4EV.js.map +0 -7
  302. package/dist/chunk-EI5BHWXA.js +0 -1662
  303. package/dist/chunk-EI5BHWXA.js.map +0 -7
  304. package/dist/chunk-EJ3YAFDP.js +0 -37
  305. package/dist/chunk-EJ3YAFDP.js.map +0 -7
  306. package/dist/chunk-EKJ2CABV.js +0 -76
  307. package/dist/chunk-EKJ2CABV.js.map +0 -7
  308. package/dist/chunk-EKP32DLN.js +0 -16
  309. package/dist/chunk-EKP32DLN.js.map +0 -7
  310. package/dist/chunk-EYPAAGN5.js +0 -51
  311. package/dist/chunk-EYPAAGN5.js.map +0 -7
  312. package/dist/chunk-F5N6CLJJ.js +0 -1995
  313. package/dist/chunk-F5N6CLJJ.js.map +0 -7
  314. package/dist/chunk-GIUBARWS.js +0 -99
  315. package/dist/chunk-GIUBARWS.js.map +0 -7
  316. package/dist/chunk-GQNJO2P2.js +0 -102
  317. package/dist/chunk-GQNJO2P2.js.map +0 -7
  318. package/dist/chunk-IJGF2ETG.js +0 -68
  319. package/dist/chunk-IJGF2ETG.js.map +0 -7
  320. package/dist/chunk-ILYDELUE.js +0 -46
  321. package/dist/chunk-ILYDELUE.js.map +0 -7
  322. package/dist/chunk-J6QFW4LD.js +0 -55
  323. package/dist/chunk-J6QFW4LD.js.map +0 -7
  324. package/dist/chunk-J7N3DLH6.js +0 -117
  325. package/dist/chunk-J7N3DLH6.js.map +0 -7
  326. package/dist/chunk-JFDWKLQC.js +0 -23
  327. package/dist/chunk-JFDWKLQC.js.map +0 -7
  328. package/dist/chunk-JULOLTZS.js +0 -61
  329. package/dist/chunk-JULOLTZS.js.map +0 -7
  330. package/dist/chunk-KJKBDQ4D.js +0 -220
  331. package/dist/chunk-KJKBDQ4D.js.map +0 -7
  332. package/dist/chunk-KRBQLMOP.js +0 -41
  333. package/dist/chunk-KRBQLMOP.js.map +0 -7
  334. package/dist/chunk-LXKPNATC.js +0 -624
  335. package/dist/chunk-LXKPNATC.js.map +0 -7
  336. package/dist/chunk-NSBPE2FW.js +0 -17
  337. package/dist/chunk-NSBPE2FW.js.map +0 -7
  338. package/dist/chunk-OCKHW72U.js +0 -55
  339. package/dist/chunk-OCKHW72U.js.map +0 -7
  340. package/dist/chunk-OKWCKCPE.js +0 -414
  341. package/dist/chunk-OKWCKCPE.js.map +0 -7
  342. package/dist/chunk-OO7JDFS4.js +0 -157
  343. package/dist/chunk-OO7JDFS4.js.map +0 -7
  344. package/dist/chunk-OQBBVTDG.js.map +0 -7
  345. package/dist/chunk-OQSQC7VB.js +0 -77
  346. package/dist/chunk-OQSQC7VB.js.map +0 -7
  347. package/dist/chunk-PED7L5GX.js +0 -92
  348. package/dist/chunk-PED7L5GX.js.map +0 -7
  349. package/dist/chunk-QJQS6TUN.js +0 -44
  350. package/dist/chunk-QJQS6TUN.js.map +0 -7
  351. package/dist/chunk-QN34TGD3.js +0 -83
  352. package/dist/chunk-QN34TGD3.js.map +0 -7
  353. package/dist/chunk-QSN77T7C.js +0 -250
  354. package/dist/chunk-QSN77T7C.js.map +0 -7
  355. package/dist/chunk-R56PH7YE.js +0 -78
  356. package/dist/chunk-R56PH7YE.js.map +0 -7
  357. package/dist/chunk-RAXRZYOB.js +0 -299
  358. package/dist/chunk-RAXRZYOB.js.map +0 -7
  359. package/dist/chunk-RH7NHVSK.js +0 -16
  360. package/dist/chunk-RH7NHVSK.js.map +0 -7
  361. package/dist/chunk-RMTT4KDY.js +0 -191
  362. package/dist/chunk-RMTT4KDY.js.map +0 -7
  363. package/dist/chunk-RQ2TMLKG.js +0 -142
  364. package/dist/chunk-RQ2TMLKG.js.map +0 -7
  365. package/dist/chunk-SO3T35U7.js +0 -80
  366. package/dist/chunk-SO3T35U7.js.map +0 -7
  367. package/dist/chunk-UKMLICWS.js +0 -51
  368. package/dist/chunk-UKMLICWS.js.map +0 -7
  369. package/dist/chunk-VA5FFOS7.js +0 -243
  370. package/dist/chunk-VA5FFOS7.js.map +0 -7
  371. package/dist/chunk-W2YERO7E.js +0 -170
  372. package/dist/chunk-W2YERO7E.js.map +0 -7
  373. package/dist/chunk-W53GKIZQ.js +0 -50
  374. package/dist/chunk-W53GKIZQ.js.map +0 -7
  375. package/dist/chunk-WA4MWYRW.js +0 -254
  376. package/dist/chunk-WA4MWYRW.js.map +0 -7
  377. package/dist/chunk-XC6M4CSW.js +0 -44
  378. package/dist/chunk-XC6M4CSW.js.map +0 -7
  379. package/dist/chunk-XK42ZBDE.js +0 -23
  380. package/dist/chunk-XK42ZBDE.js.map +0 -7
  381. package/dist/chunk-XUV6DDBF.js +0 -124
  382. package/dist/chunk-XUV6DDBF.js.map +0 -7
  383. package/dist/chunk-XZXS2W24.js.map +0 -7
  384. package/dist/chunk-Y3WD5CSW.js +0 -49
  385. package/dist/chunk-Y3WD5CSW.js.map +0 -7
  386. package/dist/chunk-Y4BJXXYV.js +0 -148
  387. package/dist/chunk-Y4BJXXYV.js.map +0 -7
  388. package/dist/chunk-YNIH3KMU.js +0 -121
  389. package/dist/chunk-YNIH3KMU.js.map +0 -7
  390. package/dist/chunk-ZUJBM6HE.js +0 -125
  391. package/dist/chunk-ZUJBM6HE.js.map +0 -7
  392. package/dist/commands/antigravity/backfill.js.map +0 -7
  393. package/dist/commands/auth/create-key.js.map +0 -7
  394. package/dist/commands/auth/login.js.map +0 -7
  395. package/dist/commands/auth/logout.js.map +0 -7
  396. package/dist/commands/auth/revoke-key.js.map +0 -7
  397. package/dist/commands/auth/signup.js.map +0 -7
  398. package/dist/commands/auth/status.js.map +0 -7
  399. package/dist/commands/catalog/index.js.map +0 -7
  400. package/dist/commands/catalog/recommend.js.map +0 -7
  401. package/dist/commands/convert.js.map +0 -7
  402. package/dist/commands/converters.js.map +0 -7
  403. package/dist/commands/crons/list.js.map +0 -7
  404. package/dist/commands/crons/run.js.map +0 -7
  405. package/dist/commands/dashboard.js.map +0 -7
  406. package/dist/commands/diagnostics.js.map +0 -7
  407. package/dist/commands/eval-targets/create.js.map +0 -7
  408. package/dist/commands/eval-targets/list.js.map +0 -7
  409. package/dist/commands/evals/agent.js.map +0 -7
  410. package/dist/commands/evals/benchmark.js.map +0 -7
  411. package/dist/commands/evals/compare.js.map +0 -7
  412. package/dist/commands/evals/create.js.map +0 -7
  413. package/dist/commands/evals/optimize-description.js.map +0 -7
  414. package/dist/commands/evals/optimize.js.map +0 -7
  415. package/dist/commands/evals/run.js.map +0 -7
  416. package/dist/commands/gateway/ensure.js.map +0 -7
  417. package/dist/commands/hooks/emit-instructions.js.map +0 -7
  418. package/dist/commands/hooks/install.js.map +0 -7
  419. package/dist/commands/hooks/run.js.map +0 -7
  420. package/dist/commands/hooks/uninstall.js.map +0 -7
  421. package/dist/commands/import.js.map +0 -7
  422. package/dist/commands/instructions/create.js.map +0 -7
  423. package/dist/commands/instructions/delete.js.map +0 -7
  424. package/dist/commands/instructions/fork.js.map +0 -7
  425. package/dist/commands/instructions/get.js.map +0 -7
  426. package/dist/commands/instructions/list.js.map +0 -7
  427. package/dist/commands/instructions/promote.js.map +0 -7
  428. package/dist/commands/instructions/pull.js.map +0 -7
  429. package/dist/commands/instructions/upstream.js.map +0 -7
  430. package/dist/commands/instructions/versions.js.map +0 -7
  431. package/dist/commands/launcher.js.map +0 -7
  432. package/dist/commands/org/current.js.map +0 -7
  433. package/dist/commands/org/list.js.map +0 -7
  434. package/dist/commands/org/switch.js.map +0 -7
  435. package/dist/commands/packs/add-instruction.js.map +0 -7
  436. package/dist/commands/packs/apply.js.map +0 -7
  437. package/dist/commands/packs/create.js.map +0 -7
  438. package/dist/commands/packs/fork.js.map +0 -7
  439. package/dist/commands/packs/get.js.map +0 -7
  440. package/dist/commands/packs/list.js.map +0 -7
  441. package/dist/commands/packs/remove-instruction.js.map +0 -7
  442. package/dist/commands/proxy/env.js.map +0 -7
  443. package/dist/commands/proxy/logs.js.map +0 -7
  444. package/dist/commands/proxy/restart.js.map +0 -7
  445. package/dist/commands/proxy/setup.js.map +0 -7
  446. package/dist/commands/proxy/start.js.map +0 -7
  447. package/dist/commands/proxy/status.js.map +0 -7
  448. package/dist/commands/proxy/stop.js.map +0 -7
  449. package/dist/commands/research/backfill.js.map +0 -7
  450. package/dist/commands/research/tail-transcript.js.map +0 -7
  451. package/dist/commands/service/install.js.map +0 -7
  452. package/dist/commands/service/status.js.map +0 -7
  453. package/dist/commands/service/uninstall.js.map +0 -7
  454. package/dist/commands/sessions/analyze.js.map +0 -7
  455. package/dist/commands/sessions/end.js.map +0 -7
  456. package/dist/commands/sessions/import.js.map +0 -7
  457. package/dist/commands/sessions/list.js.map +0 -7
  458. package/dist/commands/sessions/start.js.map +0 -7
  459. package/dist/commands/setup.js.map +0 -7
  460. package/dist/commands/skills/export-approved.js.map +0 -7
  461. package/dist/commands/skills/install.js.map +0 -7
  462. package/dist/commands/skills/list.js.map +0 -7
  463. package/dist/commands/skills/publish.js.map +0 -7
  464. package/dist/commands/skills/search.js.map +0 -7
  465. package/dist/commands/skills/update.js.map +0 -7
  466. package/dist/commands/suggestions/accept.js.map +0 -7
  467. package/dist/commands/suggestions/dismiss.js.map +0 -7
  468. package/dist/commands/suggestions/list.js.map +0 -7
  469. package/dist/commands/suggestions/refresh.js.map +0 -7
  470. package/dist/cursor-BGQJ4CWI.js +0 -134
  471. package/dist/cursor-BGQJ4CWI.js.map +0 -7
  472. package/dist/dashboard/Dashboard.js.map +0 -7
  473. package/dist/dashboard/data.js.map +0 -7
  474. package/dist/dashboard/launcher/ActiveJobsList.js.map +0 -7
  475. package/dist/dashboard/launcher/LauncherOverlay.js.map +0 -7
  476. package/dist/dashboard/launcher/NewLaunchForm.js.map +0 -7
  477. package/dist/dashboard/launcher/api.js.map +0 -7
  478. package/dist/dashboard/launcher/tool-labels.js.map +0 -7
  479. package/dist/dashboard/launcher/types.js.map +0 -7
  480. package/dist/dashboard/launcher/useLaunchJobs.js.map +0 -7
  481. package/dist/dashboard/panels/friction.js.map +0 -7
  482. package/dist/dashboard/panels/insights.js.map +0 -7
  483. package/dist/dashboard/panels/instructions.js.map +0 -7
  484. package/dist/dashboard/panels/outcomes.js.map +0 -7
  485. package/dist/dashboard/panels/overview.js.map +0 -7
  486. package/dist/dashboard/panels/shared.js.map +0 -7
  487. package/dist/dashboard/types.js.map +0 -7
  488. package/dist/dist-UNYP5PJR.js +0 -56
  489. package/dist/dist-UNYP5PJR.js.map +0 -7
  490. package/dist/index.js.map +0 -7
  491. package/dist/lib/active-org-refresh.js.map +0 -7
  492. package/dist/lib/active-org.js.map +0 -7
  493. package/dist/lib/agent-loop.js.map +0 -7
  494. package/dist/lib/antigravity-transcript.js.map +0 -7
  495. package/dist/lib/api-client.js.map +0 -7
  496. package/dist/lib/auth.js.map +0 -7
  497. package/dist/lib/capture-hosts.js.map +0 -7
  498. package/dist/lib/detect-languages.js.map +0 -7
  499. package/dist/lib/detect-tmux.js.map +0 -7
  500. package/dist/lib/diagnostics.js.map +0 -7
  501. package/dist/lib/editor-proxy-pins.js.map +0 -7
  502. package/dist/lib/ensure-api-key.js.map +0 -7
  503. package/dist/lib/eval-analyzer.js.map +0 -7
  504. package/dist/lib/eval-benchmark.js.map +0 -7
  505. package/dist/lib/eval-conversation-handler.js.map +0 -7
  506. package/dist/lib/eval-executor.js.map +0 -7
  507. package/dist/lib/eval-grader.js.map +0 -7
  508. package/dist/lib/eval-meta-judge.js.map +0 -7
  509. package/dist/lib/eval-trigger-tester.js.map +0 -7
  510. package/dist/lib/eval-worktree.js.map +0 -7
  511. package/dist/lib/gateway-entry.js.map +0 -7
  512. package/dist/lib/gateway-identity.js.map +0 -7
  513. package/dist/lib/gateway-lifecycle.js.map +0 -7
  514. package/dist/lib/gateway.js.map +0 -7
  515. package/dist/lib/handlers/cron-refresh-skills.js.map +0 -7
  516. package/dist/lib/handlers/cron-suggest-instructions.js.map +0 -7
  517. package/dist/lib/handlers/process-announcement.js.map +0 -7
  518. package/dist/lib/handlers/process-changelog.js.map +0 -7
  519. package/dist/lib/handlers/process-conversation.js.map +0 -7
  520. package/dist/lib/handlers/process-eval.js.map +0 -7
  521. package/dist/lib/handlers/process-insights.js.map +0 -7
  522. package/dist/lib/handlers/process-launch.js.map +0 -7
  523. package/dist/lib/handlers/process-run-cleanup.js.map +0 -7
  524. package/dist/lib/handlers/process-send-message.js.map +0 -7
  525. package/dist/lib/handlers/process-session-goal.js.map +0 -7
  526. package/dist/lib/hooks-config.js.map +0 -7
  527. package/dist/lib/insights-prompts.js.map +0 -7
  528. package/dist/lib/instruction-snapshot.js.map +0 -7
  529. package/dist/lib/job-helpers.js.map +0 -7
  530. package/dist/lib/llm-client.js.map +0 -7
  531. package/dist/lib/manual-tasks-meta.js.map +0 -7
  532. package/dist/lib/manual-tasks.js.map +0 -7
  533. package/dist/lib/output.js.map +0 -7
  534. package/dist/lib/permanent-job-error.js.map +0 -7
  535. package/dist/lib/pid-identity.js.map +0 -7
  536. package/dist/lib/proxy-respawn.js.map +0 -7
  537. package/dist/lib/research-client.js.map +0 -7
  538. package/dist/lib/setup-steps.js.map +0 -7
  539. package/dist/lib/skills-loader.js.map +0 -7
  540. package/dist/lib/statusline-shim.js.map +0 -7
  541. package/dist/lib/telemetry.js.map +0 -7
  542. package/dist/lib/terminal-target-heartbeat.js.map +0 -7
  543. package/dist/lib/tmux.js.map +0 -7
  544. package/dist/lib/transcript-rate-limit-watcher.js.map +0 -7
  545. package/dist/lib/types.js.map +0 -7
  546. package/dist/lib/version-check.js.map +0 -7
  547. package/dist/lib/which.js.map +0 -7
  548. package/dist/lib/worktree.js.map +0 -7
  549. package/dist/opencode-IQ7X5YMJ.js +0 -190
  550. package/dist/opencode-IQ7X5YMJ.js.map +0 -7
@@ -1,180 +1 @@
1
- import {
2
- detectTmux
3
- } from "../../chunk-BO76WKJR.js";
4
- import "../../chunk-KRBQLMOP.js";
5
- import {
6
- BaseCommand
7
- } from "../../chunk-2HK7RGZB.js";
8
- import "../../chunk-R56PH7YE.js";
9
- import "../../chunk-GQNJO2P2.js";
10
- import "../../chunk-37LN5O7M.js";
11
- import "../../chunk-EKJ2CABV.js";
12
- import "../../chunk-ZUJBM6HE.js";
13
- import "../../chunk-W2YERO7E.js";
14
- import "../../chunk-NSBPE2FW.js";
15
-
16
- // src/commands/service/status.ts
17
- import { existsSync, readFileSync } from "node:fs";
18
- import { execFileSync, execSync } from "node:child_process";
19
- import { homedir } from "node:os";
20
- import { join } from "node:path";
21
- var PLIST_LABEL = "com.rulemetric.api";
22
- var PLIST_PATH = join(homedir(), "Library", "LaunchAgents", `${PLIST_LABEL}.plist`);
23
- var WORKER_PLIST_LABEL = "com.rulemetric.worker";
24
- var WORKER_PLIST_PATH = join(homedir(), "Library", "LaunchAgents", `${WORKER_PLIST_LABEL}.plist`);
25
- var GATEWAY_PLIST_LABEL = "com.rulemetric.gateway";
26
- var GATEWAY_PLIST_PATH = join(homedir(), "Library", "LaunchAgents", `${GATEWAY_PLIST_LABEL}.plist`);
27
- var PROXY_PLIST_LABEL = "com.rulemetric.proxy";
28
- var PROXY_PLIST_PATH = join(homedir(), "Library", "LaunchAgents", `${PROXY_PLIST_LABEL}.plist`);
29
- var LOG_DIR = join(homedir(), ".config", "rulemetric", "logs");
30
- var GATEWAY_PORT = 8787;
31
- var PROXY_PORT = 8788;
32
- var ServiceStatus = class extends BaseCommand {
33
- static description = "Check the status of all RuleMetric launchd services";
34
- async run() {
35
- if (process.platform !== "darwin") {
36
- this.error("Service status is currently macOS-only.");
37
- }
38
- if (!existsSync(PLIST_PATH)) {
39
- this.log("Service: not installed");
40
- this.log("Run: rulemetric service install");
41
- return;
42
- }
43
- const apiState = this.readServiceState(PLIST_LABEL, PLIST_PATH);
44
- const apiPort = this.readApiPort(PLIST_PATH);
45
- const apiHealth = await this.probeApiHealth(apiPort);
46
- const dashboardServed = await this.probeDashboard(apiPort);
47
- const workerState = this.readServiceState(WORKER_PLIST_LABEL, WORKER_PLIST_PATH);
48
- const workerMode = this.readWorkerMode();
49
- const gatewayState = this.readServiceState(GATEWAY_PLIST_LABEL, GATEWAY_PLIST_PATH);
50
- const gatewayListening = this.isPortListening(GATEWAY_PORT);
51
- const proxyState = this.readServiceState(PROXY_PLIST_LABEL, PROXY_PLIST_PATH);
52
- const proxyListening = this.isPortListening(PROXY_PORT);
53
- const apiDetail = `${apiHealth} (port ${apiPort})${dashboardServed ? " \u2014 dashboard served" : ""}`;
54
- this.log(`API: ${this.fmtState(apiState)} \u2014 ${apiDetail}`);
55
- const modeSuffix = workerMode === "listen" ? " [mode: listen \u2014 DEPRECATED, run `rulemetric service install --force` to upgrade]" : "";
56
- this.log(`Worker: ${this.fmtState(workerState)}${modeSuffix}`);
57
- this.log(`Gateway: ${this.fmtState(gatewayState)} \u2014 ${gatewayListening ? `listening :${GATEWAY_PORT}` : `NOT listening :${GATEWAY_PORT}`}`);
58
- this.log(`Proxy: ${this.fmtState(proxyState)} \u2014 ${proxyListening ? `listening :${PROXY_PORT}` : `NOT listening :${PROXY_PORT}`}`);
59
- const tmux = await detectTmux();
60
- this.log(`Tmux: ${tmux.available ? tmux.version ? `v${tmux.version}` : "available" : "not found"}`);
61
- this.log("");
62
- this.log(`Plists: ${PLIST_PATH}`);
63
- this.log(` ${WORKER_PLIST_PATH}`);
64
- if (gatewayState.installed) this.log(` ${GATEWAY_PLIST_PATH}`);
65
- if (proxyState.installed) this.log(` ${PROXY_PLIST_PATH}`);
66
- this.log(`Logs: ${LOG_DIR}/{api,worker,gateway,proxy}-{stdout,stderr}.log`);
67
- const allHealthy = apiState.launchdStatus === "running" && apiHealth === "healthy" && workerState.launchdStatus === "running" && (!gatewayState.installed || gatewayState.launchdStatus === "running" && gatewayListening) && (!proxyState.installed || proxyState.launchdStatus === "running" && proxyListening);
68
- this.log("");
69
- if (allHealthy) {
70
- this.log("All good \u2014 sessions tracked, jobs processed, capture pipeline live.");
71
- } else {
72
- if (apiState.launchdStatus !== "running") {
73
- this.log("API is not running. Try:");
74
- this.log(` launchctl kickstart gui/$(id -u)/${PLIST_LABEL}`);
75
- }
76
- if (workerState.installed && workerState.launchdStatus !== "running") {
77
- this.log("Worker is not running. Try:");
78
- this.log(` launchctl kickstart gui/$(id -u)/${WORKER_PLIST_LABEL}`);
79
- }
80
- if (gatewayState.installed && (gatewayState.launchdStatus !== "running" || !gatewayListening)) {
81
- this.log("Gateway is not running. Try:");
82
- this.log(` launchctl kickstart gui/$(id -u)/${GATEWAY_PLIST_LABEL}`);
83
- }
84
- if (proxyState.installed && (proxyState.launchdStatus !== "running" || !proxyListening)) {
85
- this.log("Proxy is not running. Try:");
86
- this.log(` launchctl kickstart gui/$(id -u)/${PROXY_PLIST_LABEL}`);
87
- }
88
- if (!gatewayState.installed || !proxyState.installed) {
89
- this.log("Gateway/proxy not installed. Run: rulemetric service install --force");
90
- }
91
- }
92
- }
93
- readServiceState(label, plistPath) {
94
- const installed = existsSync(plistPath);
95
- if (!installed) {
96
- return { installed: false, launchdStatus: "not installed", pid: null };
97
- }
98
- try {
99
- const output = execSync(`launchctl list ${label} 2>/dev/null`, { encoding: "utf-8" });
100
- const pidMatch = output.match(/"PID"\s*=\s*(\d+)/);
101
- const statusMatch = output.match(/"LastExitStatus"\s*=\s*(\d+)/);
102
- if (pidMatch) {
103
- return { installed: true, launchdStatus: "running", pid: pidMatch[1] };
104
- }
105
- if (statusMatch) {
106
- const code = statusMatch[1];
107
- return {
108
- installed: true,
109
- launchdStatus: code === "0" ? "stopped (clean exit)" : `stopped (exit ${code})`,
110
- pid: null
111
- };
112
- }
113
- return { installed: true, launchdStatus: "loaded", pid: null };
114
- } catch {
115
- return { installed: true, launchdStatus: "not loaded", pid: null };
116
- }
117
- }
118
- fmtState(state) {
119
- if (!state.installed) return "not installed";
120
- return `${state.launchdStatus}${state.pid ? ` (PID ${state.pid})` : ""}`;
121
- }
122
- readApiPort(plistPath) {
123
- try {
124
- const plistContent = readFileSync(plistPath, "utf-8");
125
- const portMatch = plistContent.match(/<key>PORT<\/key>\s*<string>(\d+)<\/string>/);
126
- if (portMatch) return Number.parseInt(portMatch[1]);
127
- } catch {
128
- }
129
- return 3e3;
130
- }
131
- // Returns 'agent' | 'listen' | null. Used to flag the stale Phase 4c
132
- // mode where the plist still says `evals listen` and would crash-loop.
133
- readWorkerMode() {
134
- if (!existsSync(WORKER_PLIST_PATH)) return null;
135
- try {
136
- const plistContent = readFileSync(WORKER_PLIST_PATH, "utf-8");
137
- const match = plistContent.match(/<string>evals<\/string>\s*<string>(listen|agent)<\/string>/);
138
- if (match) return match[1];
139
- } catch {
140
- }
141
- return null;
142
- }
143
- async probeApiHealth(port) {
144
- try {
145
- const res = await fetch(`http://localhost:${port}/health`);
146
- if (res.ok) return "healthy";
147
- return `unhealthy (${res.status})`;
148
- } catch {
149
- return "unreachable";
150
- }
151
- }
152
- // Probe `/` on the API. Returns true if it serves HTML (= web bundle
153
- // is mounted). Differentiates "API runs but dashboard 404s because
154
- // apps/web/dist is missing" from "API serves dashboard properly".
155
- async probeDashboard(port) {
156
- try {
157
- const res = await fetch(`http://localhost:${port}/`);
158
- if (!res.ok) return false;
159
- const contentType = res.headers.get("content-type") ?? "";
160
- return contentType.includes("text/html");
161
- } catch {
162
- return false;
163
- }
164
- }
165
- isPortListening(port) {
166
- try {
167
- const out = execFileSync("lsof", ["-ti", `:${port}`, "-sTCP:LISTEN"], {
168
- encoding: "utf-8",
169
- stdio: ["ignore", "pipe", "ignore"]
170
- });
171
- return out.trim().length > 0;
172
- } catch {
173
- return false;
174
- }
175
- }
176
- };
177
- export {
178
- ServiceStatus as default
179
- };
180
- //# sourceMappingURL=status.js.map
1
+ import{a as b}from"../../chunk-6XEC6474.js";import"../../chunk-N7ODX6PO.js";import{a as w}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as T}from"../../chunk-ZLLER3HP.js";import{existsSync as c,readFileSync as A}from"node:fs";import{execFileSync as x,execSync as M}from"node:child_process";import{homedir as l}from"node:os";import{join as a}from"node:path";var k="com.rulemetric.api",g=a(l(),"Library","LaunchAgents",`${k}.plist`),u="com.rulemetric.worker",o=a(l(),"Library","LaunchAgents",`${u}.plist`),v="com.rulemetric.gateway",E=a(l(),"Library","LaunchAgents",`${v}.plist`),L="com.rulemetric.proxy",R=a(l(),"Library","LaunchAgents",`${L}.plist`),_=a(l(),".config","rulemetric","logs"),y=8787,$=8788,p="rulemetric-worker.service",W=a(l(),".config","systemd","user",p),P=class extends w{static{T(this,"ServiceStatus")}static description="Check the status of installed RuleMetric services (launchd on macOS; systemd --user worker on Linux)";async run(){if(process.platform!=="darwin"){if(process.platform==="linux"){this.reportLinuxWorkerStatus();return}this.error(`Service status supports macOS (launchd) and Linux (systemd --user, worker-only installs) only; detected '${process.platform}'.`)}if(!c(g)){if(c(o)){this.reportWorkerOnlyStatus();return}this.log("Service: not installed"),this.log("Run: rulemetric service install (repo checkout) or rulemetric service install --worker-only");return}let t=this.readServiceState(k,g),e=this.readApiPort(g),r=await this.probeApiHealth(e),d=await this.probeDashboard(e),s=this.readServiceState(u,o),h=this.readWorkerMode(),i=this.readServiceState(v,E),S=this.isPortListening(y),n=this.readServiceState(L,R),m=this.isPortListening($),O=`${r} (port ${e})${d?" \u2014 dashboard served":""}`;this.log(`API: ${this.fmtState(t)} \u2014 ${O}`);let I=h==="listen"?" [mode: listen \u2014 DEPRECATED, run `rulemetric service install --force` to upgrade]":"";this.log(`Worker: ${this.fmtState(s)}${I}`),this.log(`Gateway: ${this.fmtState(i)} \u2014 ${S?`listening :${y}`:`NOT listening :${y}`}`),this.log(`Proxy: ${this.fmtState(n)} \u2014 ${m?`listening :${$}`:`NOT listening :${$}`}`);let f=await b();this.log(`Tmux: ${f.available?f.version?`v${f.version}`:"available":"not found"}`),this.log(""),this.log(`Plists: ${g}`),this.log(` ${o}`),i.installed&&this.log(` ${E}`),n.installed&&this.log(` ${R}`),this.log(`Logs: ${_}/{api,worker,gateway,proxy}-{stdout,stderr}.log`);let D=t.launchdStatus==="running"&&r==="healthy"&&s.launchdStatus==="running"&&(!i.installed||i.launchdStatus==="running"&&S)&&(!n.installed||n.launchdStatus==="running"&&m);this.log(""),D?this.log("All good \u2014 sessions tracked, jobs processed, capture pipeline live."):(t.launchdStatus!=="running"&&(this.log("API is not running. Try:"),this.log(` launchctl kickstart gui/$(id -u)/${k}`)),s.installed&&s.launchdStatus!=="running"&&(this.log("Worker is not running. Try:"),this.log(` launchctl kickstart gui/$(id -u)/${u}`)),i.installed&&(i.launchdStatus!=="running"||!S)&&(this.log("Gateway is not running. Try:"),this.log(` launchctl kickstart gui/$(id -u)/${v}`)),n.installed&&(n.launchdStatus!=="running"||!m)&&(this.log("Proxy is not running. Try:"),this.log(` launchctl kickstart gui/$(id -u)/${L}`)),(!i.installed||!n.installed)&&this.log("Gateway/proxy not installed. Run: rulemetric service install --force"))}reportWorkerOnlyStatus(){let t=this.readServiceState(u,o),r=this.readWorkerMode()==="listen"?" [mode: listen \u2014 DEPRECATED, run `rulemetric service install --worker-only --force` to upgrade]":"";this.log(`Worker: ${this.fmtState(t)}${r} (worker-only install)`),this.log(""),this.log(`Plist: ${o}`),this.log(`Logs: ${_}/worker-{stdout,stderr}.log`),this.log(""),t.launchdStatus==="running"?this.log("All good \u2014 jobs processed by the background worker."):(this.log("Worker is not running. Try:"),this.log(` launchctl kickstart gui/$(id -u)/${u}`))}reportLinuxWorkerStatus(){if(!c(W)){this.log("Service: not installed"),this.log("Run: rulemetric service install --worker-only");return}let t;try{t=x("systemctl",["--user","is-active",p],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch(e){t=(e.stdout??"").toString().trim()||"not loaded"}this.log(`Worker: ${t} (systemd --user, worker-only install)`),this.log(""),this.log(`Unit: ${W}`),this.log(`Logs: journalctl --user -u ${p} -f`),this.log(""),t==="active"?this.log("All good \u2014 jobs processed by the background worker."):(this.log("Worker is not running. Try:"),this.log(` systemctl --user restart ${p}`))}readServiceState(t,e){if(!c(e))return{installed:!1,launchdStatus:"not installed",pid:null};try{let d=M(`launchctl list ${t} 2>/dev/null`,{encoding:"utf-8"}),s=d.match(/"PID"\s*=\s*(\d+)/),h=d.match(/"LastExitStatus"\s*=\s*(\d+)/);if(s)return{installed:!0,launchdStatus:"running",pid:s[1]};if(h){let i=h[1];return{installed:!0,launchdStatus:i==="0"?"stopped (clean exit)":`stopped (exit ${i})`,pid:null}}return{installed:!0,launchdStatus:"loaded",pid:null}}catch{return{installed:!0,launchdStatus:"not loaded",pid:null}}}fmtState(t){return t.installed?`${t.launchdStatus}${t.pid?` (PID ${t.pid})`:""}`:"not installed"}readApiPort(t){try{let r=A(t,"utf-8").match(/<key>PORT<\/key>\s*<string>(\d+)<\/string>/);if(r)return Number.parseInt(r[1])}catch{}return 3e3}readWorkerMode(){if(!c(o))return null;try{let e=A(o,"utf-8").match(/<string>evals<\/string>\s*<string>(listen|agent)<\/string>/);if(e)return e[1]}catch{}return null}async probeApiHealth(t){try{let e=await fetch(`http://localhost:${t}/health`);return e.ok?"healthy":`unhealthy (${e.status})`}catch{return"unreachable"}}async probeDashboard(t){try{let e=await fetch(`http://localhost:${t}/`);return e.ok?(e.headers.get("content-type")??"").includes("text/html"):!1}catch{return!1}}isPortListening(t){try{return x("lsof",["-ti",`:${t}`,"-sTCP:LISTEN"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim().length>0}catch{return!1}}};export{P as default};
@@ -1,119 +1 @@
1
- import {
2
- BaseCommand
3
- } from "../../chunk-2HK7RGZB.js";
4
- import "../../chunk-R56PH7YE.js";
5
- import "../../chunk-GQNJO2P2.js";
6
- import "../../chunk-37LN5O7M.js";
7
- import "../../chunk-EKJ2CABV.js";
8
- import "../../chunk-ZUJBM6HE.js";
9
- import "../../chunk-W2YERO7E.js";
10
- import "../../chunk-NSBPE2FW.js";
11
-
12
- // src/commands/service/uninstall.ts
13
- import { existsSync, unlinkSync } from "node:fs";
14
- import { execSync, execFileSync } from "node:child_process";
15
- import { homedir } from "node:os";
16
- import { join } from "node:path";
17
- var SERVICES = [
18
- { label: "com.rulemetric.api", description: "API" },
19
- { label: "com.rulemetric.worker", description: "Worker" },
20
- { label: "com.rulemetric.gateway", description: "Gateway" },
21
- { label: "com.rulemetric.proxy", description: "Proxy" },
22
- // Legacy daily worker-restart agent — install removes any stale copy,
23
- // but uninstall still cleans it up so a user running uninstall on an
24
- // older box gets a fully clean state.
25
- { label: "com.rulemetric.worker.restart", description: "Worker restart agent" }
26
- ];
27
- function plistPathFor(label) {
28
- return join(homedir(), "Library", "LaunchAgents", `${label}.plist`);
29
- }
30
- var WORKER_SYSTEMD_UNIT = "rulemetric-worker.service";
31
- var WORKER_SYSTEMD_PATH = join(homedir(), ".config", "systemd", "user", WORKER_SYSTEMD_UNIT);
32
- var ServiceUninstall = class extends BaseCommand {
33
- static description = "Remove RuleMetric services (macOS launchd: API/worker/gateway/proxy; Linux: the --worker-only systemd unit)";
34
- async run() {
35
- if (process.platform === "linux") {
36
- this.uninstallLinuxWorker();
37
- return;
38
- }
39
- if (process.platform !== "darwin") {
40
- this.error("Service uninstall supports macOS (launchd) and Linux (systemd) only.");
41
- }
42
- const installed = SERVICES.filter((s) => existsSync(plistPathFor(s.label)));
43
- if (installed.length === 0) {
44
- this.log("No RuleMetric services are installed.");
45
- return;
46
- }
47
- const uid = execSync("id -u", { encoding: "utf-8" }).trim();
48
- for (const svc of installed) {
49
- const path = plistPathFor(svc.label);
50
- this.stopService(uid, path, svc.label, svc.description);
51
- this.removePlist(path, svc.description);
52
- }
53
- this.log("");
54
- this.log("All RuleMetric services removed. They will no longer start automatically.");
55
- this.log("Use scripts/start.sh (dev) or `rulemetric service install` (always-on) to bring them back.");
56
- }
57
- stopService(uid, plistPath, label, description) {
58
- try {
59
- execFileSync("launchctl", ["bootout", `gui/${uid}`, plistPath], { encoding: "utf-8" });
60
- this.log(`[OK] ${description} stopped`);
61
- return;
62
- } catch {
63
- }
64
- try {
65
- execFileSync("launchctl", ["unload", plistPath], { encoding: "utf-8" });
66
- this.log(`[OK] ${description} stopped (legacy)`);
67
- return;
68
- } catch {
69
- try {
70
- const output = execSync(`launchctl list ${label} 2>&1`, { encoding: "utf-8" });
71
- if (output.includes("PID")) {
72
- this.warn(`${description} appears to still be running. Try manually:`);
73
- this.warn(` launchctl bootout gui/${uid} "${plistPath}"`);
74
- } else {
75
- this.log(`[OK] ${description} was not running`);
76
- }
77
- } catch {
78
- this.log(`[OK] ${description} was not running`);
79
- }
80
- }
81
- }
82
- removePlist(plistPath, description) {
83
- try {
84
- unlinkSync(plistPath);
85
- this.log(`[OK] Removed ${plistPath}`);
86
- } catch (err) {
87
- this.warn(`Could not remove ${description} plist: ${err.message}. Try: rm "${plistPath}"`);
88
- }
89
- }
90
- uninstallLinuxWorker() {
91
- if (!existsSync(WORKER_SYSTEMD_PATH)) {
92
- this.log("No RuleMetric worker is installed (no systemd unit found).");
93
- return;
94
- }
95
- try {
96
- execFileSync("systemctl", ["--user", "disable", "--now", WORKER_SYSTEMD_UNIT], { encoding: "utf-8" });
97
- this.log("[OK] Worker stopped + disabled (systemctl --user)");
98
- } catch (err) {
99
- this.warn(`Could not disable the worker unit: ${err.message}`);
100
- this.warn(` systemctl --user disable --now ${WORKER_SYSTEMD_UNIT}`);
101
- }
102
- try {
103
- unlinkSync(WORKER_SYSTEMD_PATH);
104
- this.log(`[OK] Removed ${WORKER_SYSTEMD_PATH}`);
105
- } catch (err) {
106
- this.warn(`Could not remove ${WORKER_SYSTEMD_PATH}: ${err.message}. Try: rm "${WORKER_SYSTEMD_PATH}"`);
107
- }
108
- try {
109
- execFileSync("systemctl", ["--user", "daemon-reload"], { encoding: "utf-8" });
110
- } catch {
111
- }
112
- this.log("");
113
- this.log("RuleMetric worker removed. It will no longer start automatically.");
114
- }
115
- };
116
- export {
117
- ServiceUninstall as default
118
- };
119
- //# sourceMappingURL=uninstall.js.map
1
+ import{a as u}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as n}from"../../chunk-ZLLER3HP.js";import{existsSync as m,unlinkSync as d}from"node:fs";import{execSync as g,execFileSync as s}from"node:child_process";import{homedir as y}from"node:os";import{join as p}from"node:path";var v=[{label:"com.rulemetric.api",description:"API"},{label:"com.rulemetric.worker",description:"Worker"},{label:"com.rulemetric.gateway",description:"Gateway"},{label:"com.rulemetric.proxy",description:"Proxy"},{label:"com.rulemetric.worker.restart",description:"Worker restart agent"}];function h(a){return p(y(),"Library","LaunchAgents",`${a}.plist`)}n(h,"plistPathFor");var l="rulemetric-worker.service",i=p(y(),".config","systemd","user",l),c=class extends u{static{n(this,"ServiceUninstall")}static description="Remove RuleMetric services (macOS launchd: API/worker/gateway/proxy; Linux: the --worker-only systemd unit)";async run(){if(process.platform==="linux"){this.uninstallLinuxWorker();return}process.platform!=="darwin"&&this.error("Service uninstall supports macOS (launchd) and Linux (systemd) only.");let r=v.filter(t=>m(h(t.label)));if(r.length===0){this.log("No RuleMetric services are installed.");return}let o=g("id -u",{encoding:"utf-8"}).trim();for(let t of r){let e=h(t.label);this.stopService(o,e,t.label,t.description),this.removePlist(e,t.description)}this.log(""),this.log("All RuleMetric services removed. They will no longer start automatically."),this.log("Use scripts/start.sh (dev) or `rulemetric service install` (always-on) to bring them back.")}stopService(r,o,t,e){try{s("launchctl",["bootout",`gui/${r}`,o],{encoding:"utf-8"}),this.log(`[OK] ${e} stopped`);return}catch{}try{s("launchctl",["unload",o],{encoding:"utf-8"}),this.log(`[OK] ${e} stopped (legacy)`);return}catch{try{g(`launchctl list ${t} 2>&1`,{encoding:"utf-8"}).includes("PID")?(this.warn(`${e} appears to still be running. Try manually:`),this.warn(` launchctl bootout gui/${r} "${o}"`)):this.log(`[OK] ${e} was not running`)}catch{this.log(`[OK] ${e} was not running`)}}}removePlist(r,o){try{d(r),this.log(`[OK] Removed ${r}`)}catch(t){this.warn(`Could not remove ${o} plist: ${t.message}. Try: rm "${r}"`)}}uninstallLinuxWorker(){if(!m(i)){this.log("No RuleMetric worker is installed (no systemd unit found).");return}try{s("systemctl",["--user","disable","--now",l],{encoding:"utf-8"}),this.log("[OK] Worker stopped + disabled (systemctl --user)")}catch(r){this.warn(`Could not disable the worker unit: ${r.message}`),this.warn(` systemctl --user disable --now ${l}`)}try{d(i),this.log(`[OK] Removed ${i}`)}catch(r){this.warn(`Could not remove ${i}: ${r.message}. Try: rm "${i}"`)}try{s("systemctl",["--user","daemon-reload"],{encoding:"utf-8"})}catch{}this.log(""),this.log("RuleMetric worker removed. It will no longer start automatically.")}};export{c as default};
@@ -1,48 +1 @@
1
- import {
2
- validateUuid
3
- } from "../../chunk-7NYKWN7U.js";
4
- import {
5
- BaseCommand
6
- } from "../../chunk-2HK7RGZB.js";
7
- import "../../chunk-R56PH7YE.js";
8
- import "../../chunk-GQNJO2P2.js";
9
- import "../../chunk-37LN5O7M.js";
10
- import "../../chunk-EKJ2CABV.js";
11
- import {
12
- apiPost
13
- } from "../../chunk-ZUJBM6HE.js";
14
- import "../../chunk-W2YERO7E.js";
15
- import "../../chunk-NSBPE2FW.js";
16
-
17
- // src/commands/sessions/analyze.ts
18
- import { Args } from "@oclif/core";
19
- var SessionsAnalyze = class _SessionsAnalyze extends BaseCommand {
20
- static description = "Trigger AI analysis on a session";
21
- static examples = [
22
- "<%= config.bin %> sessions analyze <session-id>"
23
- ];
24
- static args = {
25
- id: Args.string({ description: "Session ID", required: true })
26
- };
27
- async run() {
28
- const { args } = await this.parse(_SessionsAnalyze);
29
- this.requireAuth();
30
- validateUuid(args.id, "session ID");
31
- this.log("Analyzing session...");
32
- const result = await apiPost(
33
- `/api/sessions/${args.id}/analyze`,
34
- {}
35
- );
36
- this.log(`
37
- Adherence Score: ${result.adherenceScore}/100`);
38
- this.log(`Summary: ${result.summary}`);
39
- if (result.suggestions.length > 0) {
40
- this.log(`
41
- ${result.suggestions.length} suggestion(s) for instruction improvement.`);
42
- }
43
- }
44
- };
45
- export {
46
- SessionsAnalyze as default
47
- };
48
- //# sourceMappingURL=analyze.js.map
1
+ import{a}from"../../chunk-WLVQJH4E.js";import{a as o}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import{f as r}from"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as t}from"../../chunk-ZLLER3HP.js";import{Args as l}from"@oclif/core";var s=class n extends o{static{t(this,"SessionsAnalyze")}static description="Trigger AI analysis on a session";static examples=["<%= config.bin %> sessions analyze <session-id>"];static args={id:l.string({description:"Session ID",required:!0})};async run(){let{args:i}=await this.parse(n);this.requireAuth(),a(i.id,"session ID");let e=await r(`/api/sessions/${i.id}/analyze`,{});this.log(`Analysis queued (job ${e.jobId}, status: ${e.status}).`),this.log("A running worker picks it up automatically \u2014 start one with `rulemetric evals agent`"),this.log("(or install it persistently: `rulemetric service install --worker-only`)."),this.log("Results appear on the session once processed \u2014 see the session detail page in the dashboard.")}};export{s as default};
@@ -1,85 +1,2 @@
1
- import {
2
- BaseCommand
3
- } from "../../chunk-2HK7RGZB.js";
4
- import "../../chunk-R56PH7YE.js";
5
- import "../../chunk-GQNJO2P2.js";
6
- import "../../chunk-37LN5O7M.js";
7
- import "../../chunk-EKJ2CABV.js";
8
- import {
9
- apiPatch
10
- } from "../../chunk-ZUJBM6HE.js";
11
- import "../../chunk-W2YERO7E.js";
12
- import "../../chunk-NSBPE2FW.js";
13
-
14
- // src/commands/sessions/end.ts
15
- import { readdirSync, readFileSync, unlinkSync, statSync } from "node:fs";
16
- import { tmpdir } from "node:os";
17
- import { join } from "node:path";
18
- var SKIP_SUFFIXES = [".log", ".seq", ".ctxhash", ".pid", ".lock"];
19
- var SessionsEnd = class _SessionsEnd extends BaseCommand {
20
- static description = "End the active capture session";
21
- static examples = [
22
- "<%= config.bin %> sessions end"
23
- ];
24
- async run() {
25
- await this.parse(_SessionsEnd);
26
- this.requireAuth();
27
- const sessionDir = join(tmpdir(), "rulemetric");
28
- const active = this.findActiveSession(sessionDir);
29
- if (!active) {
30
- this.error("No active session found. Start one with: rulemetric sessions start --tool <name>");
31
- }
32
- try {
33
- await apiPatch(`/api/sessions/${active.rwSessionId}`, {
34
- endedAt: (/* @__PURE__ */ new Date()).toISOString()
35
- });
36
- } catch (err) {
37
- this.warn(`Could not end session via API: ${err.message}`);
38
- }
39
- this.cleanupSessionFiles(sessionDir, active.externalId);
40
- this.log(`Session ended: ${active.rwSessionId}`);
41
- }
42
- findActiveSession(sessionDir) {
43
- let files;
44
- try {
45
- files = readdirSync(sessionDir);
46
- } catch {
47
- return null;
48
- }
49
- const sessions = [];
50
- for (const name of files) {
51
- if (SKIP_SUFFIXES.some((s) => name.endsWith(s))) continue;
52
- const path = join(sessionDir, name);
53
- try {
54
- const stat = statSync(path);
55
- if (!stat.isFile()) continue;
56
- const content = readFileSync(path, "utf-8").trim();
57
- if (!content) continue;
58
- sessions.push({
59
- externalId: name,
60
- rwSessionId: content.split("\n")[0].trim(),
61
- path,
62
- mtime: stat.mtimeMs
63
- });
64
- } catch {
65
- continue;
66
- }
67
- }
68
- if (sessions.length === 0) return null;
69
- sessions.sort((a, b) => b.mtime - a.mtime);
70
- return sessions[0];
71
- }
72
- cleanupSessionFiles(sessionDir, externalId) {
73
- const base = join(sessionDir, externalId);
74
- for (const suffix of ["", ".seq", ".ctxhash", ".log"]) {
75
- try {
76
- unlinkSync(base + suffix);
77
- } catch {
78
- }
79
- }
80
- }
81
- };
82
- export {
83
- SessionsEnd as default
84
- };
85
- //# sourceMappingURL=end.js.map
1
+ import{a as d}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import{f as m}from"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as l}from"../../chunk-ZLLER3HP.js";import{readdirSync as f,readFileSync as h,unlinkSync as p,statSync as S}from"node:fs";import{tmpdir as g}from"node:os";import{join as r}from"node:path";var v=[".log",".seq",".ctxhash",".pid",".lock"],c=class u extends d{static{l(this,"SessionsEnd")}static description="End the active capture session";static examples=["<%= config.bin %> sessions end"];async run(){await this.parse(u),this.requireAuth();let i=r(g(),"rulemetric"),s=this.findActiveSession(i);s||this.error("No active session found. Start one with: rulemetric sessions start --tool <name>");try{await m(`/api/sessions/${s.rwSessionId}/close`,{})}catch(e){this.error(`Could not end session ${s.rwSessionId} via API: ${e.message}. Local session files were left in place \u2014 fix the connection/auth issue and retry.`)}this.cleanupSessionFiles(i,s.externalId),this.log(`Session ended: ${s.rwSessionId}`)}findActiveSession(i){let s;try{s=f(i)}catch{return null}let e=[];for(let t of s){if(v.some(o=>t.endsWith(o)))continue;let n=r(i,t);try{let o=S(n);if(!o.isFile())continue;let a=h(n,"utf-8").trim();if(!a)continue;e.push({externalId:t,rwSessionId:a.split(`
2
+ `)[0].trim(),path:n,mtime:o.mtimeMs})}catch{continue}}return e.length===0?null:(e.sort((t,n)=>n.mtime-t.mtime),e[0])}cleanupSessionFiles(i,s){let e=r(i,s);for(let t of["",".seq",".ctxhash",".log"])try{p(e+t)}catch{}}};export{c as default};
@@ -1,46 +1 @@
1
- import {
2
- BaseCommand
3
- } from "../../chunk-2HK7RGZB.js";
4
- import "../../chunk-R56PH7YE.js";
5
- import "../../chunk-GQNJO2P2.js";
6
- import "../../chunk-37LN5O7M.js";
7
- import "../../chunk-EKJ2CABV.js";
8
- import {
9
- apiPost
10
- } from "../../chunk-ZUJBM6HE.js";
11
- import "../../chunk-W2YERO7E.js";
12
- import "../../chunk-NSBPE2FW.js";
13
-
14
- // src/commands/sessions/import.ts
15
- import * as fs from "node:fs";
16
- import { Args, Flags } from "@oclif/core";
17
- var SessionsImport = class _SessionsImport extends BaseCommand {
18
- static description = "Import a session file (JSONL, JSON)";
19
- static examples = [
20
- "<%= config.bin %> sessions import ~/.claude/projects/my-project/session-abc.jsonl",
21
- "<%= config.bin %> sessions import ./copilot-export.json --tool vscode_copilot"
22
- ];
23
- static args = {
24
- path: Args.string({ description: "Path to session file", required: true })
25
- };
26
- static flags = {
27
- tool: Flags.string({ description: "Override tool detection (claude_code, cursor, vscode_copilot)" })
28
- };
29
- async run() {
30
- const { args, flags } = await this.parse(_SessionsImport);
31
- this.requireAuth();
32
- if (!fs.existsSync(args.path)) {
33
- this.error(`File not found: ${args.path}`);
34
- }
35
- const content = fs.readFileSync(args.path, "utf-8");
36
- const result = await apiPost(
37
- "/api/sessions/import",
38
- { content, tool: flags.tool }
39
- );
40
- this.log(`Imported session ${result.id} (${result.tool}, ${result.eventCount} events)`);
41
- }
42
- };
43
- export {
44
- SessionsImport as default
45
- };
46
- //# sourceMappingURL=import.js.map
1
+ import{a as n}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import{f as r}from"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as i}from"../../chunk-ZLLER3HP.js";import*as o from"node:fs";import{Args as l,Flags as d}from"@oclif/core";var e=class a extends n{static{i(this,"SessionsImport")}static description="Import a session file (JSONL, JSON)";static examples=["<%= config.bin %> sessions import ~/.claude/projects/my-project/session-abc.jsonl","<%= config.bin %> sessions import ./copilot-export.json --tool vscode_copilot"];static args={path:l.string({description:"Path to session file",required:!0})};static flags={tool:d.string({description:"Override tool detection (claude_code, cursor, vscode_copilot)"})};async run(){let{args:t,flags:c}=await this.parse(a);this.requireAuth(),o.existsSync(t.path)||this.error(`File not found: ${t.path}`);let p=o.readFileSync(t.path,"utf-8"),s=await r("/api/sessions/import",{content:p,tool:c.tool});this.log(`Imported session ${s.id} (${s.tool}, ${s.eventCount} events)`)}};export{e as default};
@@ -1,48 +1 @@
1
- import {
2
- BaseCommand
3
- } from "../../chunk-2HK7RGZB.js";
4
- import "../../chunk-R56PH7YE.js";
5
- import "../../chunk-GQNJO2P2.js";
6
- import "../../chunk-37LN5O7M.js";
7
- import "../../chunk-EKJ2CABV.js";
8
- import {
9
- apiGet
10
- } from "../../chunk-ZUJBM6HE.js";
11
- import "../../chunk-W2YERO7E.js";
12
- import "../../chunk-NSBPE2FW.js";
13
-
14
- // src/commands/sessions/list.ts
15
- import { Flags } from "@oclif/core";
16
- var SessionsList = class _SessionsList extends BaseCommand {
17
- static description = "List captured sessions";
18
- static examples = [
19
- "<%= config.bin %> sessions list",
20
- "<%= config.bin %> sessions list --tool claude_code"
21
- ];
22
- static flags = {
23
- tool: Flags.string({ description: "Filter by tool (claude_code, cursor, vscode_copilot)" }),
24
- limit: Flags.integer({ description: "Max results", default: 20 })
25
- };
26
- async run() {
27
- const { flags } = await this.parse(_SessionsList);
28
- this.requireAuth();
29
- const params = new URLSearchParams();
30
- if (flags.tool) params.set("tool", flags.tool);
31
- params.set("limit", String(flags.limit));
32
- const sessions = await apiGet(`/api/sessions?${params}`);
33
- if (sessions.length === 0) {
34
- this.log("No sessions found.");
35
- return;
36
- }
37
- for (const s of sessions) {
38
- const project = s.projectPath?.split("/").pop() ?? "\u2014";
39
- const adherence = s.analysis?.adherenceScore != null ? `${s.analysis.adherenceScore}%` : "\u2014";
40
- const date = new Date(s.startedAt).toLocaleDateString();
41
- this.log(`${s.id.slice(0, 8)} ${s.tool.padEnd(15)} ${project.padEnd(20)} ${String(s.eventCount).padStart(5)} events ${adherence.padStart(4)} adherence ${date}`);
42
- }
43
- }
44
- };
45
- export {
46
- SessionsList as default
47
- };
48
- //# sourceMappingURL=list.js.map
1
+ import{a}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import{e as n}from"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as r}from"../../chunk-ZLLER3HP.js";import{Flags as c}from"@oclif/core";var o=class l extends a{static{r(this,"SessionsList")}static description="List captured sessions";static examples=["<%= config.bin %> sessions list","<%= config.bin %> sessions list --tool claude_code"];static flags={tool:c.string({description:"Filter by tool (claude_code, cursor, vscode_copilot)"}),limit:c.integer({description:"Max results",default:20})};async run(){let{flags:e}=await this.parse(l);this.requireAuth();let s=new URLSearchParams;e.tool&&s.set("tool",e.tool),s.set("limit",String(e.limit));let i=await n(`/api/sessions?${s}`);if(i.length===0){this.log("No sessions found.");return}for(let t of i){let d=t.projectPath?.split("/").pop()??"\u2014",p=t.analysis?.adherenceScore!=null?`${t.analysis.adherenceScore}%`:"\u2014",m=new Date(t.startedAt).toLocaleDateString();this.log(`${t.id.slice(0,8)} ${t.tool.padEnd(15)} ${d.padEnd(20)} ${String(t.eventCount).padStart(5)} events ${p.padStart(4)} adherence ${m}`)}}};export{o as default};
@@ -1,90 +1,3 @@
1
- import {
2
- BaseCommand
3
- } from "../../chunk-2HK7RGZB.js";
4
- import "../../chunk-R56PH7YE.js";
5
- import "../../chunk-GQNJO2P2.js";
6
- import "../../chunk-37LN5O7M.js";
7
- import {
8
- readActiveOrg
9
- } from "../../chunk-EKJ2CABV.js";
10
- import {
11
- apiPost
12
- } from "../../chunk-ZUJBM6HE.js";
13
- import "../../chunk-W2YERO7E.js";
14
- import "../../chunk-NSBPE2FW.js";
15
-
16
- // src/commands/sessions/start.ts
17
- import { Flags } from "@oclif/core";
18
- import { randomUUID } from "node:crypto";
19
- import { mkdirSync, writeFileSync } from "node:fs";
20
- import { tmpdir } from "node:os";
21
- import { join } from "node:path";
22
- import { execSync } from "node:child_process";
23
- var SessionsStart = class _SessionsStart extends BaseCommand {
24
- static description = "Start a capture session for any LLM provider (Cortex, Groq, etc.)";
25
- static examples = [
26
- "<%= config.bin %> sessions start --tool cortex",
27
- "<%= config.bin %> sessions start --tool groq --project-dir /path/to/project",
28
- 'eval "$(rulemetric proxy env --python)" && rulemetric sessions start --tool cortex'
29
- ];
30
- static flags = {
31
- tool: Flags.string({
32
- char: "t",
33
- required: true,
34
- description: "LLM provider or tool name (e.g., cortex, groq, deepseek, custom_app)"
35
- }),
36
- "project-dir": Flags.string({
37
- char: "d",
38
- description: "Project directory (defaults to cwd)"
39
- })
40
- };
41
- async run() {
42
- const { flags } = await this.parse(_SessionsStart);
43
- this.requireAuth();
44
- const projectPath = flags["project-dir"] ?? process.cwd();
45
- const externalSessionId = randomUUID();
46
- let gitBranch = "";
47
- try {
48
- gitBranch = execSync("git branch --show-current 2>/dev/null", {
49
- cwd: projectPath,
50
- encoding: "utf-8"
51
- }).trim();
52
- } catch {
53
- }
54
- let gitRemote = "";
55
- try {
56
- gitRemote = execSync("git remote get-url origin 2>/dev/null", {
57
- cwd: projectPath,
58
- encoding: "utf-8"
59
- }).trim();
60
- } catch {
61
- }
62
- const metadata = {};
63
- if (gitRemote) metadata.gitRemote = gitRemote;
64
- const activeOrg = readActiveOrg();
65
- const session = await apiPost("/api/sessions", {
66
- tool: flags.tool,
67
- externalSessionId,
68
- projectPath,
69
- gitBranch,
70
- metadata,
71
- orgId: activeOrg?.orgId ?? null
72
- });
73
- const sessionDir = join(tmpdir(), "rulemetric");
74
- mkdirSync(sessionDir, { recursive: true });
75
- const sessionFile = join(sessionDir, externalSessionId);
76
- writeFileSync(sessionFile, session.id + "\n");
77
- writeFileSync(sessionFile + ".seq", "0\n");
78
- this.log(`Session started: ${session.id}`);
79
- this.log(` Tool: ${flags.tool}`);
80
- this.log(` Project: ${projectPath}`);
81
- if (gitBranch) this.log(` Branch: ${gitBranch}`);
82
- this.log("");
83
- this.log("The proxy will now capture LLM traffic for this session.");
84
- this.log("When done, run: rulemetric sessions end");
85
- }
86
- };
87
- export {
88
- SessionsStart as default
89
- };
90
- //# sourceMappingURL=start.js.map
1
+ import{a as g}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import{a as m}from"../../chunk-3AV3GTMP.js";import{f as p}from"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as d}from"../../chunk-ZLLER3HP.js";import{Flags as h}from"@oclif/core";import{randomUUID as w}from"node:crypto";import{mkdirSync as j,writeFileSync as u}from"node:fs";import{tmpdir as S}from"node:os";import{join as f}from"node:path";import{execSync as v}from"node:child_process";var i=class x extends g{static{d(this,"SessionsStart")}static description="Start a capture session for any LLM provider (Cortex, Groq, etc.)";static examples=["<%= config.bin %> sessions start --tool cortex","<%= config.bin %> sessions start --tool groq --project-dir /path/to/project",'eval "$(rulemetric proxy env --python)" && rulemetric sessions start --tool cortex'];static flags={tool:h.string({char:"t",required:!0,description:"LLM provider or tool name (e.g., cortex, groq, deepseek, custom_app)"}),"project-dir":h.string({char:"d",description:"Project directory (defaults to cwd)"})};async run(){let{flags:r}=await this.parse(x);this.requireAuth();let t=r["project-dir"]??process.cwd(),s=w(),o="";try{o=v("git branch --show-current 2>/dev/null",{cwd:t,encoding:"utf-8"}).trim()}catch{}let e="";try{e=v("git remote get-url origin 2>/dev/null",{cwd:t,encoding:"utf-8"}).trim()}catch{}let n={};e&&(n.gitRemote=e);let y=m(),c=await p("/api/sessions",{tool:r.tool,externalSessionId:s,projectPath:t,gitBranch:o,metadata:n,orgId:y?.orgId??null}),a=f(S(),"rulemetric");j(a,{recursive:!0});let l=f(a,s);u(l,c.id+`
2
+ `),u(l+".seq",`0
3
+ `),this.log(`Session started: ${c.id}`),this.log(` Tool: ${r.tool}`),this.log(` Project: ${t}`),o&&this.log(` Branch: ${o}`),this.log(""),this.log("The proxy will now capture LLM traffic for this session."),this.log("When done, run: rulemetric sessions end")}};export{i as default};