@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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lib/handlers/cron-suggest-instructions.ts"],
4
+ "sourcesContent": ["import type { JobHelpers } from '../job-helpers.js';\nimport { readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport { apiGet, apiPost } from '../api-client.js';\nimport { runLlmPrompt, detectLlmBackend } from '../llm-client.js';\nimport { buildRecommendationPrompt } from '@rulemetric/core';\nimport { normalizeProjectPath } from '@rulemetric/core/paths';\nimport type { ProjectContext, InstructionCandidate, Recommendation } from '@rulemetric/core';\nimport { detectLanguages } from '../detect-languages.js';\n\nconst MAX_SUGGESTIONS_PER_PROJECT = 5;\nconst MAX_PROJECTS_PER_RUN = Number(process.env.RULEMETRIC_MAX_SUGGESTION_PROJECTS ?? 10);\nconst STALE_THRESHOLD_HOURS = 48;\nconst MIN_SCORE = 0.5;\nconst CONTENT_PREVIEW_CHARS = 400;\n\ninterface CatalogRow {\n id: string;\n name: string;\n description: string | null;\n tags: string[] | null;\n content: string | null;\n scope: string;\n}\n\ninterface ProjectPathsResponse {\n projectPaths: string[];\n}\n\ninterface ProjectRow {\n id: string;\n primaryCheckoutPath: string | null;\n}\n\ninterface ProjectsResponse {\n projects: ProjectRow[];\n}\n\ninterface SkillsRegistryFile {\n generatedAt: string;\n skills: unknown[];\n}\n\ninterface BatchUpsertResponse {\n inserted: number;\n}\n\nasync function checkSkillsRegistryStale(): Promise<boolean> {\n const registryPath = path.join(os.homedir(), '.config', 'rulemetric', 'skills-registry.json');\n try {\n const raw = readFileSync(registryPath, 'utf-8');\n const registry = JSON.parse(raw) as SkillsRegistryFile;\n const ageMs = Date.now() - new Date(registry.generatedAt).getTime();\n return ageMs > STALE_THRESHOLD_HOURS * 60 * 60 * 1000;\n } catch {\n return true;\n }\n}\n\nexport const cronSuggestInstructions = async (_payload: unknown, helpers: JobHelpers): Promise<void> => {\n // Scoring uses the user's locally-installed LLM tooling \u2014 Claude Code CLI\n // when available, otherwise the Anthropic SDK with ANTHROPIC_API_KEY.\n // No third-party LLM_PROVIDER / LLM_API_KEY required. If neither backend\n // is reachable, skip cleanly.\n const backend = detectLlmBackend();\n if (backend === 'none') {\n helpers.logger.warn('No LLM backend available (claude CLI missing and ANTHROPIC_API_KEY unset); skipping suggestion compute');\n return;\n }\n helpers.logger.info(`Scoring backend: ${backend}`);\n\n // 1. Fetch recent project paths\n let projectPaths: string[];\n try {\n const res = await apiGet<ProjectPathsResponse>('/api/sessions/project-paths?limit=' + MAX_PROJECTS_PER_RUN);\n projectPaths = res.projectPaths;\n } catch (err) {\n helpers.logger.warn(`Failed to fetch project paths: ${err instanceof Error ? err.message : String(err)}`);\n return;\n }\n\n if (projectPaths.length === 0) {\n helpers.logger.info('No recent project paths; nothing to score');\n return;\n }\n\n // Best-effort path -> canonical project_id map so the batch-upsert can stamp\n // project_id (migration 00104). Keyed by normalized checkout path. Purely\n // additive: when a path isn't found here we send no projectId and the API\n // resolves it from project_path itself (and NULLs it when unresolved).\n const projectIdByPath = new Map<string, string>();\n try {\n const projRes = await apiGet<ProjectsResponse>('/api/projects?limit=200');\n for (const p of projRes.projects ?? []) {\n if (p.primaryCheckoutPath) {\n projectIdByPath.set(normalizeProjectPath(p.primaryCheckoutPath), p.id);\n }\n }\n } catch (err) {\n helpers.logger.warn(`Failed to fetch projects for id resolution: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // 2. Fetch candidate instructions: public+org+team from /catalog, plus\n // the user's own (personal+created) from /instructions. Dedup by id.\n const candidates = new Map<string, InstructionCandidate>();\n try {\n const catalogRows = await apiGet<CatalogRow[]>('/api/catalog?limit=200');\n for (const row of catalogRows) {\n candidates.set(row.id, {\n id: row.id,\n name: row.name,\n description: row.description ?? '',\n tags: row.tags ?? [],\n contentPreview: (row.content ?? '').slice(0, CONTENT_PREVIEW_CHARS),\n });\n }\n } catch (err) {\n helpers.logger.warn(`Failed to fetch catalog: ${err instanceof Error ? err.message : String(err)}`);\n }\n try {\n const personalRes = await apiGet<{ instructions: CatalogRow[] }>('/api/instructions?limit=100');\n for (const row of personalRes.instructions ?? []) {\n if (!candidates.has(row.id)) {\n candidates.set(row.id, {\n id: row.id,\n name: row.name,\n description: row.description ?? '',\n tags: row.tags ?? [],\n contentPreview: (row.content ?? '').slice(0, CONTENT_PREVIEW_CHARS),\n });\n }\n }\n } catch (err) {\n helpers.logger.warn(`Failed to fetch personal instructions: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n const candidateList = [...candidates.values()];\n if (candidateList.length === 0) {\n helpers.logger.info('No candidate instructions; nothing to score');\n return;\n }\n helpers.logger.info(`Scoring ${candidateList.length} candidates across ${projectPaths.length} project(s)`);\n\n // 3. Score per project\n let scored = 0;\n for (const rawPath of projectPaths) {\n try {\n const projectPath = normalizeProjectPath(rawPath);\n const languages = detectLanguages(projectPath);\n if (languages.length === 0) {\n helpers.logger.info(`Skipping ${projectPath}: insufficient language signals`);\n continue;\n }\n\n const context: ProjectContext = {\n name: path.basename(projectPath),\n description: null,\n languages,\n topics: [],\n dependencies: [],\n };\n\n const prompt = buildRecommendationPrompt(context, candidateList);\n // runLlmPrompt expects (systemPrompt, data, maxTokens). The recommendation\n // prompt is fully self-contained; pass an empty data block.\n const parsed = await runLlmPrompt(prompt, '', 4096);\n if (!parsed) {\n helpers.logger.warn(`LLM returned null for ${projectPath} (backend ${backend})`);\n continue;\n }\n const raw = (parsed.recommendations ?? []) as Array<Record<string, unknown>>;\n const recommendations: Recommendation[] = raw\n .filter((r) => typeof r.instructionId === 'string' && typeof r.score === 'number' && typeof r.reason === 'string')\n .map((r) => ({\n instructionId: r.instructionId as string,\n score: r.score as number,\n reason: r.reason as string,\n }));\n\n const top = recommendations\n .filter((r) => r.score >= MIN_SCORE)\n .sort((a, b) => b.score - a.score)\n .slice(0, MAX_SUGGESTIONS_PER_PROJECT);\n\n if (top.length === 0) {\n helpers.logger.info(`No suggestions over threshold for ${projectPath}`);\n continue;\n }\n\n // Resolve canonical project_id from the normalized path when known.\n // Best-effort: omitted when unresolved, in which case the API resolves\n // from project_path (and leaves project_id NULL if still unknown).\n const projectId = projectIdByPath.get(projectPath);\n\n await apiPost<BatchUpsertResponse>('/api/instruction-suggestions/batch-upsert', {\n projectPath,\n ...(projectId ? { projectId } : {}),\n suggestions: top.map((r) => ({\n instructionId: r.instructionId,\n score: r.score,\n reason: r.reason,\n })),\n });\n scored++;\n } catch (err) {\n helpers.logger.warn(`Failed to score ${rawPath}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n // 4. Mark stale if registry is old\n if (await checkSkillsRegistryStale()) {\n try {\n await apiPost('/api/instruction-suggestions/mark-stale', {});\n helpers.logger.warn('Skills registry is stale (>48h); marked all suggestions stale');\n } catch {\n // Non-fatal\n }\n }\n\n helpers.logger.info(`Done: scored ${scored}/${projectPaths.length} projects`);\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AACA,SAAS,oBAAoB;AAC7B,OAAO,UAAU;AACjB,OAAO,QAAQ;AAQf,IAAM,8BAA8B;AACpC,IAAM,uBAAuB,OAAO,QAAQ,IAAI,sCAAsC,EAAE;AACxF,IAAM,wBAAwB;AAC9B,IAAM,YAAY;AAClB,IAAM,wBAAwB;AAiC9B,eAAe,2BAA6C;AAC1D,QAAM,eAAe,KAAK,KAAK,GAAG,QAAQ,GAAG,WAAW,cAAc,sBAAsB;AAC5F,MAAI;AACF,UAAM,MAAM,aAAa,cAAc,OAAO;AAC9C,UAAM,WAAW,KAAK,MAAM,GAAG;AAC/B,UAAM,QAAQ,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,WAAW,EAAE,QAAQ;AAClE,WAAO,QAAQ,wBAAwB,KAAK,KAAK;AAAA,EACnD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,IAAM,0BAA0B,OAAO,UAAmB,YAAuC;AAKtG,QAAM,UAAU,iBAAiB;AACjC,MAAI,YAAY,QAAQ;AACtB,YAAQ,OAAO,KAAK,wGAAwG;AAC5H;AAAA,EACF;AACA,UAAQ,OAAO,KAAK,oBAAoB,OAAO,EAAE;AAGjD,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,MAAM,OAA6B,uCAAuC,oBAAoB;AAC1G,mBAAe,IAAI;AAAA,EACrB,SAAS,KAAK;AACZ,YAAQ,OAAO,KAAK,kCAAkC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AACxG;AAAA,EACF;AAEA,MAAI,aAAa,WAAW,GAAG;AAC7B,YAAQ,OAAO,KAAK,2CAA2C;AAC/D;AAAA,EACF;AAMA,QAAM,kBAAkB,oBAAI,IAAoB;AAChD,MAAI;AACF,UAAM,UAAU,MAAM,OAAyB,yBAAyB;AACxE,eAAW,KAAK,QAAQ,YAAY,CAAC,GAAG;AACtC,UAAI,EAAE,qBAAqB;AACzB,wBAAgB,IAAI,qBAAqB,EAAE,mBAAmB,GAAG,EAAE,EAAE;AAAA,MACvE;AAAA,IACF;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,OAAO,KAAK,+CAA+C,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,EACvH;AAIA,QAAM,aAAa,oBAAI,IAAkC;AACzD,MAAI;AACF,UAAM,cAAc,MAAM,OAAqB,wBAAwB;AACvE,eAAW,OAAO,aAAa;AAC7B,iBAAW,IAAI,IAAI,IAAI;AAAA,QACrB,IAAI,IAAI;AAAA,QACR,MAAM,IAAI;AAAA,QACV,aAAa,IAAI,eAAe;AAAA,QAChC,MAAM,IAAI,QAAQ,CAAC;AAAA,QACnB,iBAAiB,IAAI,WAAW,IAAI,MAAM,GAAG,qBAAqB;AAAA,MACpE,CAAC;AAAA,IACH;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,OAAO,KAAK,4BAA4B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,EACpG;AACA,MAAI;AACF,UAAM,cAAc,MAAM,OAAuC,6BAA6B;AAC9F,eAAW,OAAO,YAAY,gBAAgB,CAAC,GAAG;AAChD,UAAI,CAAC,WAAW,IAAI,IAAI,EAAE,GAAG;AAC3B,mBAAW,IAAI,IAAI,IAAI;AAAA,UACrB,IAAI,IAAI;AAAA,UACR,MAAM,IAAI;AAAA,UACV,aAAa,IAAI,eAAe;AAAA,UAChC,MAAM,IAAI,QAAQ,CAAC;AAAA,UACnB,iBAAiB,IAAI,WAAW,IAAI,MAAM,GAAG,qBAAqB;AAAA,QACpE,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,OAAO,KAAK,0CAA0C,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,EAClH;AAEA,QAAM,gBAAgB,CAAC,GAAG,WAAW,OAAO,CAAC;AAC7C,MAAI,cAAc,WAAW,GAAG;AAC9B,YAAQ,OAAO,KAAK,6CAA6C;AACjE;AAAA,EACF;AACA,UAAQ,OAAO,KAAK,WAAW,cAAc,MAAM,sBAAsB,aAAa,MAAM,aAAa;AAGzG,MAAI,SAAS;AACb,aAAW,WAAW,cAAc;AAClC,QAAI;AACF,YAAM,cAAc,qBAAqB,OAAO;AAChD,YAAM,YAAY,gBAAgB,WAAW;AAC7C,UAAI,UAAU,WAAW,GAAG;AAC1B,gBAAQ,OAAO,KAAK,YAAY,WAAW,iCAAiC;AAC5E;AAAA,MACF;AAEA,YAAM,UAA0B;AAAA,QAC9B,MAAM,KAAK,SAAS,WAAW;AAAA,QAC/B,aAAa;AAAA,QACb;AAAA,QACA,QAAQ,CAAC;AAAA,QACT,cAAc,CAAC;AAAA,MACjB;AAEA,YAAM,SAAS,0BAA0B,SAAS,aAAa;AAG/D,YAAM,SAAS,MAAM,aAAa,QAAQ,IAAI,IAAI;AAClD,UAAI,CAAC,QAAQ;AACX,gBAAQ,OAAO,KAAK,yBAAyB,WAAW,aAAa,OAAO,GAAG;AAC/E;AAAA,MACF;AACA,YAAM,MAAO,OAAO,mBAAmB,CAAC;AACxC,YAAM,kBAAoC,IACvC,OAAO,CAAC,MAAM,OAAO,EAAE,kBAAkB,YAAY,OAAO,EAAE,UAAU,YAAY,OAAO,EAAE,WAAW,QAAQ,EAChH,IAAI,CAAC,OAAO;AAAA,QACX,eAAe,EAAE;AAAA,QACjB,OAAO,EAAE;AAAA,QACT,QAAQ,EAAE;AAAA,MACZ,EAAE;AAEJ,YAAM,MAAM,gBACT,OAAO,CAAC,MAAM,EAAE,SAAS,SAAS,EAClC,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAChC,MAAM,GAAG,2BAA2B;AAEvC,UAAI,IAAI,WAAW,GAAG;AACpB,gBAAQ,OAAO,KAAK,qCAAqC,WAAW,EAAE;AACtE;AAAA,MACF;AAKA,YAAM,YAAY,gBAAgB,IAAI,WAAW;AAEjD,YAAM,QAA6B,6CAA6C;AAAA,QAC9E;AAAA,QACA,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,QACjC,aAAa,IAAI,IAAI,CAAC,OAAO;AAAA,UAC3B,eAAe,EAAE;AAAA,UACjB,OAAO,EAAE;AAAA,UACT,QAAQ,EAAE;AAAA,QACZ,EAAE;AAAA,MACJ,CAAC;AACD;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,OAAO,KAAK,mBAAmB,OAAO,KAAK,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,IACvG;AAAA,EACF;AAGA,MAAI,MAAM,yBAAyB,GAAG;AACpC,QAAI;AACF,YAAM,QAAQ,2CAA2C,CAAC,CAAC;AAC3D,cAAQ,OAAO,KAAK,+DAA+D;AAAA,IACrF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,UAAQ,OAAO,KAAK,gBAAgB,MAAM,IAAI,aAAa,MAAM,WAAW;AAC9E;",
6
+ "names": []
7
+ }
@@ -0,0 +1,121 @@
1
+ import {
2
+ executeEval
3
+ } from "./chunk-QN34TGD3.js";
4
+
5
+ // src/lib/eval-grader.ts
6
+ var GRADER_SYSTEM_PROMPT = `You are a rigorous eval grader. Your job is to evaluate whether an AI assistant's output meets a set of expectations.
7
+
8
+ You will receive:
9
+ 1. The original prompt that was given to the AI
10
+ 2. The AI's output/response
11
+ 3. A list of expectations (assertions) to evaluate
12
+
13
+ For each expectation:
14
+ - Search the output for evidence that the expectation is met
15
+ - Determine PASS or FAIL (no partial credit)
16
+ - Cite specific evidence (quote or description)
17
+
18
+ PASS criteria:
19
+ - Clear evidence the assertion is true
20
+ - Evidence reflects genuine completion, not surface compliance
21
+
22
+ FAIL criteria:
23
+ - No evidence found
24
+ - Evidence contradicts the expectation
25
+ - Cannot verify from available information
26
+
27
+ Beyond the predefined expectations, extract implicit claims from the output:
28
+ - Factual claims ("uses TypeScript", "has 3 parameters")
29
+ - Process claims ("used async/await pattern")
30
+ - Quality claims ("handles edge cases")
31
+
32
+ Verify each claim against the actual output.
33
+
34
+ Finally, critique the eval itself \u2014 identify assertions that are too weak (pass for wrong outputs) or important outcomes that no assertion covers.
35
+
36
+ You MUST respond with ONLY a valid JSON object matching this exact structure (no markdown, no explanation, just JSON):
37
+
38
+ {
39
+ "expectations": [
40
+ { "text": "assertion text", "passed": true, "evidence": "specific quote or description" }
41
+ ],
42
+ "summary": { "passed": 2, "failed": 1, "total": 3, "pass_rate": 0.67 },
43
+ "claims": [
44
+ { "claim": "statement", "type": "factual", "verified": true, "evidence": "..." }
45
+ ],
46
+ "eval_feedback": {
47
+ "suggestions": [{ "assertion": "suggested new assertion", "reason": "why it matters" }],
48
+ "overall": "brief summary assessment"
49
+ }
50
+ }`;
51
+ async function gradeEvalOutput(options) {
52
+ const { prompt, output, expectations, model, timeout = 12e4 } = options;
53
+ const graderPrompt = `## Original Prompt
54
+
55
+ ${prompt}
56
+
57
+ ## AI Output
58
+
59
+ ${output}
60
+
61
+ ## Expectations to Evaluate
62
+
63
+ ${expectations.map((e, i) => `${i + 1}. ${e}`).join("\n")}
64
+
65
+ Grade the output against each expectation. Respond with ONLY valid JSON.`;
66
+ const result = await executeEval({
67
+ prompt: graderPrompt,
68
+ targetContent: GRADER_SYSTEM_PROMPT,
69
+ timeout,
70
+ model
71
+ });
72
+ if (result.error) {
73
+ return {
74
+ expectations: expectations.map((e) => ({
75
+ text: e,
76
+ passed: false,
77
+ evidence: `Grader error: ${result.error}`
78
+ })),
79
+ summary: { passed: 0, failed: expectations.length, total: expectations.length, pass_rate: 0 },
80
+ claims: [],
81
+ eval_feedback: { suggestions: [], overall: `Grading failed: ${result.error}` }
82
+ };
83
+ }
84
+ try {
85
+ let jsonStr = result.output.trim();
86
+ const jsonMatch = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
87
+ if (jsonMatch) {
88
+ jsonStr = jsonMatch[1].trim();
89
+ }
90
+ const objMatch = jsonStr.match(/\{[\s\S]*\}/);
91
+ if (objMatch) {
92
+ jsonStr = objMatch[0];
93
+ }
94
+ const parsed = JSON.parse(jsonStr);
95
+ const passed = parsed.expectations.filter((e) => e.passed).length;
96
+ const total = parsed.expectations.length;
97
+ parsed.summary = {
98
+ passed,
99
+ failed: total - passed,
100
+ total,
101
+ pass_rate: total > 0 ? passed / total : 0
102
+ };
103
+ return parsed;
104
+ } catch {
105
+ return {
106
+ expectations: expectations.map((e) => ({
107
+ text: e,
108
+ passed: false,
109
+ evidence: "Grader output was not valid JSON"
110
+ })),
111
+ summary: { passed: 0, failed: expectations.length, total: expectations.length, pass_rate: 0 },
112
+ claims: [],
113
+ eval_feedback: { suggestions: [], overall: `Grader returned unparseable output: ${result.output.slice(0, 200)}` }
114
+ };
115
+ }
116
+ }
117
+
118
+ export {
119
+ gradeEvalOutput
120
+ };
121
+ //# sourceMappingURL=chunk-YNIH3KMU.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lib/eval-grader.ts"],
4
+ "sourcesContent": ["import { executeEval } from './eval-executor.js';\n\nexport interface GradingExpectation {\n text: string;\n passed: boolean;\n evidence: string;\n}\n\nexport interface GradingResult {\n expectations: GradingExpectation[];\n summary: {\n passed: number;\n failed: number;\n total: number;\n pass_rate: number;\n };\n claims: Array<{\n claim: string;\n type: 'factual' | 'process' | 'quality';\n verified: boolean;\n evidence: string;\n }>;\n eval_feedback: {\n suggestions: Array<{ assertion?: string; reason: string }>;\n overall: string;\n };\n}\n\nconst GRADER_SYSTEM_PROMPT = `You are a rigorous eval grader. Your job is to evaluate whether an AI assistant's output meets a set of expectations.\n\nYou will receive:\n1. The original prompt that was given to the AI\n2. The AI's output/response\n3. A list of expectations (assertions) to evaluate\n\nFor each expectation:\n- Search the output for evidence that the expectation is met\n- Determine PASS or FAIL (no partial credit)\n- Cite specific evidence (quote or description)\n\nPASS criteria:\n- Clear evidence the assertion is true\n- Evidence reflects genuine completion, not surface compliance\n\nFAIL criteria:\n- No evidence found\n- Evidence contradicts the expectation\n- Cannot verify from available information\n\nBeyond the predefined expectations, extract implicit claims from the output:\n- Factual claims (\"uses TypeScript\", \"has 3 parameters\")\n- Process claims (\"used async/await pattern\")\n- Quality claims (\"handles edge cases\")\n\nVerify each claim against the actual output.\n\nFinally, critique the eval itself \u2014 identify assertions that are too weak (pass for wrong outputs) or important outcomes that no assertion covers.\n\nYou MUST respond with ONLY a valid JSON object matching this exact structure (no markdown, no explanation, just JSON):\n\n{\n \"expectations\": [\n { \"text\": \"assertion text\", \"passed\": true, \"evidence\": \"specific quote or description\" }\n ],\n \"summary\": { \"passed\": 2, \"failed\": 1, \"total\": 3, \"pass_rate\": 0.67 },\n \"claims\": [\n { \"claim\": \"statement\", \"type\": \"factual\", \"verified\": true, \"evidence\": \"...\" }\n ],\n \"eval_feedback\": {\n \"suggestions\": [{ \"assertion\": \"suggested new assertion\", \"reason\": \"why it matters\" }],\n \"overall\": \"brief summary assessment\"\n }\n}`;\n\n/**\n * Grades an eval output against expectations using an LLM grader.\n */\nexport async function gradeEvalOutput(options: {\n prompt: string;\n output: string;\n expectations: string[];\n model?: string;\n timeout?: number;\n}): Promise<GradingResult> {\n const { prompt, output, expectations, model, timeout = 120_000 } = options;\n\n const graderPrompt = `## Original Prompt\n\n${prompt}\n\n## AI Output\n\n${output}\n\n## Expectations to Evaluate\n\n${expectations.map((e, i) => `${i + 1}. ${e}`).join('\\n')}\n\nGrade the output against each expectation. Respond with ONLY valid JSON.`;\n\n const result = await executeEval({\n prompt: graderPrompt,\n targetContent: GRADER_SYSTEM_PROMPT,\n timeout,\n model,\n });\n\n if (result.error) {\n // Return a failed grading if the grader itself errors\n return {\n expectations: expectations.map((e) => ({\n text: e,\n passed: false,\n evidence: `Grader error: ${result.error}`,\n })),\n summary: { passed: 0, failed: expectations.length, total: expectations.length, pass_rate: 0 },\n claims: [],\n eval_feedback: { suggestions: [], overall: `Grading failed: ${result.error}` },\n };\n }\n\n // Parse the grader's JSON response\n try {\n // Extract JSON from the output (handle potential markdown wrapping)\n let jsonStr = result.output.trim();\n const jsonMatch = jsonStr.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n if (jsonMatch) {\n jsonStr = jsonMatch[1].trim();\n }\n // Also try to find JSON object directly\n const objMatch = jsonStr.match(/\\{[\\s\\S]*\\}/);\n if (objMatch) {\n jsonStr = objMatch[0];\n }\n\n const parsed = JSON.parse(jsonStr) as GradingResult;\n\n // Validate and ensure summary is correct\n const passed = parsed.expectations.filter((e) => e.passed).length;\n const total = parsed.expectations.length;\n parsed.summary = {\n passed,\n failed: total - passed,\n total,\n pass_rate: total > 0 ? passed / total : 0,\n };\n\n return parsed;\n } catch {\n // If we can't parse, return a best-effort result\n return {\n expectations: expectations.map((e) => ({\n text: e,\n passed: false,\n evidence: 'Grader output was not valid JSON',\n })),\n summary: { passed: 0, failed: expectations.length, total: expectations.length, pass_rate: 0 },\n claims: [],\n eval_feedback: { suggestions: [], overall: `Grader returned unparseable output: ${result.output.slice(0, 200)}` },\n };\n }\n}\n"],
5
+ "mappings": ";;;;;AA4BA,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiD7B,eAAsB,gBAAgB,SAMX;AACzB,QAAM,EAAE,QAAQ,QAAQ,cAAc,OAAO,UAAU,KAAQ,IAAI;AAEnE,QAAM,eAAe;AAAA;AAAA,EAErB,MAAM;AAAA;AAAA;AAAA;AAAA,EAIN,MAAM;AAAA;AAAA;AAAA;AAAA,EAIN,aAAa,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAIvD,QAAM,SAAS,MAAM,YAAY;AAAA,IAC/B,QAAQ;AAAA,IACR,eAAe;AAAA,IACf;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,OAAO,OAAO;AAEhB,WAAO;AAAA,MACL,cAAc,aAAa,IAAI,CAAC,OAAO;AAAA,QACrC,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,UAAU,iBAAiB,OAAO,KAAK;AAAA,MACzC,EAAE;AAAA,MACF,SAAS,EAAE,QAAQ,GAAG,QAAQ,aAAa,QAAQ,OAAO,aAAa,QAAQ,WAAW,EAAE;AAAA,MAC5F,QAAQ,CAAC;AAAA,MACT,eAAe,EAAE,aAAa,CAAC,GAAG,SAAS,mBAAmB,OAAO,KAAK,GAAG;AAAA,IAC/E;AAAA,EACF;AAGA,MAAI;AAEF,QAAI,UAAU,OAAO,OAAO,KAAK;AACjC,UAAM,YAAY,QAAQ,MAAM,8BAA8B;AAC9D,QAAI,WAAW;AACb,gBAAU,UAAU,CAAC,EAAE,KAAK;AAAA,IAC9B;AAEA,UAAM,WAAW,QAAQ,MAAM,aAAa;AAC5C,QAAI,UAAU;AACZ,gBAAU,SAAS,CAAC;AAAA,IACtB;AAEA,UAAM,SAAS,KAAK,MAAM,OAAO;AAGjC,UAAM,SAAS,OAAO,aAAa,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE;AAC3D,UAAM,QAAQ,OAAO,aAAa;AAClC,WAAO,UAAU;AAAA,MACf;AAAA,MACA,QAAQ,QAAQ;AAAA,MAChB;AAAA,MACA,WAAW,QAAQ,IAAI,SAAS,QAAQ;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT,QAAQ;AAEN,WAAO;AAAA,MACL,cAAc,aAAa,IAAI,CAAC,OAAO;AAAA,QACrC,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ,EAAE;AAAA,MACF,SAAS,EAAE,QAAQ,GAAG,QAAQ,aAAa,QAAQ,OAAO,aAAa,QAAQ,WAAW,EAAE;AAAA,MAC5F,QAAQ,CAAC;AAAA,MACT,eAAe,EAAE,aAAa,CAAC,GAAG,SAAS,uCAAuC,OAAO,OAAO,MAAM,GAAG,GAAG,CAAC,GAAG;AAAA,IAClH;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,135 @@
1
+ import {
2
+ emitRecordsAsEvents,
3
+ findMaxStepIndex,
4
+ readNewRecords,
5
+ stateApi
6
+ } from "../../chunk-EHZJ6OXD.js";
7
+ import {
8
+ BaseCommand
9
+ } from "../../chunk-S56LOTGQ.js";
10
+ import "../../chunk-OGVORIFM.js";
11
+ import "../../chunk-2AM54TUK.js";
12
+ import "../../chunk-EJOI2ZGU.js";
13
+ import "../../chunk-KZRFUXGF.js";
14
+ import "../../chunk-EKJ2CABV.js";
15
+ import "../../chunk-NSBPE2FW.js";
16
+
17
+ // src/commands/antigravity/backfill.ts
18
+ import { Args, Flags } from "@oclif/core";
19
+ import { existsSync } from "node:fs";
20
+ import { homedir } from "node:os";
21
+ import { join } from "node:path";
22
+ var TRANSCRIPT_BRAIN_DIR = join(homedir(), ".gemini", "antigravity-ide", "brain");
23
+ var AntigravityBackfill = class _AntigravityBackfill extends BaseCommand {
24
+ static description = "Backfill historical events from an Antigravity conversation transcript into a RuleMetric session. Useful for seeding a conversation that existed before hooks were installed \u2014 the live hook intentionally only captures forward.";
25
+ static examples = [
26
+ "<%= config.bin %> antigravity backfill 26fd215d-f43b-4ea5-b177-dc2c0e696f97 --session 158db9aa-68ee-43fc-961b-f3a180578694",
27
+ "<%= config.bin %> antigravity backfill 26fd215d-f43b-4ea5-b177-dc2c0e696f97 --dry-run"
28
+ ];
29
+ static args = {
30
+ conversationId: Args.string({
31
+ description: "Antigravity conversationId (UUID) \u2014 the directory name under ~/.gemini/antigravity-ide/brain/",
32
+ required: true
33
+ })
34
+ };
35
+ static flags = {
36
+ session: Flags.string({
37
+ char: "s",
38
+ description: "RuleMetric session UUID to POST events into. If omitted, resolved from the hook tmp file ($TMPDIR/rulemetric/<conversationId>) \u2014 fails if neither is present."
39
+ }),
40
+ transcript: Flags.string({
41
+ description: "Path to the transcript.jsonl file. Defaults to ~/.gemini/antigravity-ide/brain/<conversationId>/.system_generated/logs/transcript.jsonl"
42
+ }),
43
+ "after-step": Flags.integer({
44
+ description: "Only emit records with step_index > this value. Default: read from existing state file, else -1 (everything)."
45
+ }),
46
+ limit: Flags.integer({
47
+ description: "Cap on the number of records to process this run."
48
+ }),
49
+ "dry-run": Flags.boolean({
50
+ default: false,
51
+ description: "Classify records without POSTing. Reports counts only."
52
+ }),
53
+ "save-state": Flags.boolean({
54
+ default: true,
55
+ allowNo: true,
56
+ description: "After backfill, persist the highest step_index so the live hook resumes from there."
57
+ })
58
+ };
59
+ async run() {
60
+ const { args, flags } = await this.parse(_AntigravityBackfill);
61
+ const conversationId = args.conversationId;
62
+ stateApi.loadEnvFile();
63
+ if (!process.env.RULEMETRIC_API_URL) {
64
+ this.error("RULEMETRIC_API_URL is not set. Configure it via env or ~/.config/rulemetric/env.");
65
+ }
66
+ const transcriptPath = flags.transcript ?? join(TRANSCRIPT_BRAIN_DIR, conversationId, ".system_generated", "logs", "transcript.jsonl");
67
+ if (!existsSync(transcriptPath)) {
68
+ this.error(`Transcript not found: ${transcriptPath}`);
69
+ }
70
+ const rwSessionId = flags.session ?? stateApi.resolveRwSessionId(conversationId);
71
+ if (!rwSessionId) {
72
+ this.error(
73
+ `No RuleMetric session resolved. Pass --session <uuid>, or run the Antigravity hook at least once so $TMPDIR/rulemetric/${conversationId} is populated.`
74
+ );
75
+ }
76
+ let after = flags["after-step"];
77
+ if (after === void 0) {
78
+ const existing = stateApi.load(conversationId);
79
+ after = existing?.lastStepIdx ?? -1;
80
+ }
81
+ let records = readNewRecords(transcriptPath, after);
82
+ if (flags.limit !== void 0 && records.length > flags.limit) {
83
+ records = records.slice(0, flags.limit);
84
+ }
85
+ const max = findMaxStepIndex(transcriptPath);
86
+ this.log(
87
+ `Conversation ${conversationId}: transcript max step = ${max}, after-step = ${after}, records to process = ${records.length}`
88
+ );
89
+ if (records.length === 0) {
90
+ this.log("Nothing to backfill.");
91
+ return;
92
+ }
93
+ if (flags["dry-run"]) {
94
+ let wouldEmit = 0;
95
+ let wouldSkip = 0;
96
+ const byEventType = {};
97
+ for (const record of records) {
98
+ const classified = (await import("../../lib/antigravity-transcript.js")).classifyRecord(record, 0);
99
+ if (classified) {
100
+ wouldEmit++;
101
+ byEventType[classified.eventType] = (byEventType[classified.eventType] ?? 0) + 1;
102
+ } else {
103
+ wouldSkip++;
104
+ }
105
+ }
106
+ this.log(
107
+ `Dry run: would emit ${wouldEmit}, skip ${wouldSkip}. By eventType: ${JSON.stringify(byEventType)}`
108
+ );
109
+ return;
110
+ }
111
+ const start = Date.now();
112
+ const result = await emitRecordsAsEvents(records, rwSessionId, conversationId, after, {
113
+ onProgress: ({ attempted, total }) => {
114
+ if (attempted % 100 === 0 || attempted === total) {
115
+ process.stderr.write(` \u2026${attempted}/${total}
116
+ `);
117
+ }
118
+ }
119
+ });
120
+ const elapsedSec = ((Date.now() - start) / 1e3).toFixed(1);
121
+ this.log(
122
+ `Backfill complete in ${elapsedSec}s. attempted=${result.attempted} emitted=${result.emitted} skipped=${result.skipped} failed=${result.failed} highestStepIdx=${result.highestStepIdx}`
123
+ );
124
+ if (flags["save-state"]) {
125
+ stateApi.save(conversationId, { lastStepIdx: result.highestStepIdx });
126
+ this.log(`State saved \u2192 live hook will resume from step_index > ${result.highestStepIdx}.`);
127
+ } else {
128
+ this.log("State NOT saved (--no-save-state). Live hook will re-emit any new records from after-step.");
129
+ }
130
+ }
131
+ };
132
+ export {
133
+ AntigravityBackfill as default
134
+ };
135
+ //# sourceMappingURL=backfill.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/commands/antigravity/backfill.ts"],
4
+ "sourcesContent": ["import { Args, Flags } from '@oclif/core';\nimport { existsSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { BaseCommand } from '../../base-command.js';\nimport {\n emitRecordsAsEvents,\n findMaxStepIndex,\n readNewRecords,\n stateApi,\n} from '../../lib/antigravity-transcript.js';\n\nconst TRANSCRIPT_BRAIN_DIR = join(homedir(), '.gemini', 'antigravity-ide', 'brain');\n\nexport default class AntigravityBackfill extends BaseCommand {\n static override description =\n 'Backfill historical events from an Antigravity conversation transcript into a RuleMetric session. Useful for seeding a conversation that existed before hooks were installed \u2014 the live hook intentionally only captures forward.';\n\n static override examples = [\n '<%= config.bin %> antigravity backfill 26fd215d-f43b-4ea5-b177-dc2c0e696f97 --session 158db9aa-68ee-43fc-961b-f3a180578694',\n '<%= config.bin %> antigravity backfill 26fd215d-f43b-4ea5-b177-dc2c0e696f97 --dry-run',\n ];\n\n static override args = {\n conversationId: Args.string({\n description: 'Antigravity conversationId (UUID) \u2014 the directory name under ~/.gemini/antigravity-ide/brain/',\n required: true,\n }),\n };\n\n static override flags = {\n session: Flags.string({\n char: 's',\n description:\n 'RuleMetric session UUID to POST events into. If omitted, resolved from the hook tmp file ($TMPDIR/rulemetric/<conversationId>) \u2014 fails if neither is present.',\n }),\n transcript: Flags.string({\n description:\n 'Path to the transcript.jsonl file. Defaults to ~/.gemini/antigravity-ide/brain/<conversationId>/.system_generated/logs/transcript.jsonl',\n }),\n 'after-step': Flags.integer({\n description:\n 'Only emit records with step_index > this value. Default: read from existing state file, else -1 (everything).',\n }),\n limit: Flags.integer({\n description: 'Cap on the number of records to process this run.',\n }),\n 'dry-run': Flags.boolean({\n default: false,\n description: 'Classify records without POSTing. Reports counts only.',\n }),\n 'save-state': Flags.boolean({\n default: true,\n allowNo: true,\n description: 'After backfill, persist the highest step_index so the live hook resumes from there.',\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(AntigravityBackfill);\n const conversationId = args.conversationId;\n\n stateApi.loadEnvFile();\n if (!process.env.RULEMETRIC_API_URL) {\n this.error('RULEMETRIC_API_URL is not set. Configure it via env or ~/.config/rulemetric/env.');\n }\n\n const transcriptPath =\n flags.transcript ??\n join(TRANSCRIPT_BRAIN_DIR, conversationId, '.system_generated', 'logs', 'transcript.jsonl');\n if (!existsSync(transcriptPath)) {\n this.error(`Transcript not found: ${transcriptPath}`);\n }\n\n const rwSessionId = flags.session ?? stateApi.resolveRwSessionId(conversationId);\n if (!rwSessionId) {\n this.error(\n `No RuleMetric session resolved. Pass --session <uuid>, or run the Antigravity hook at least once so $TMPDIR/rulemetric/${conversationId} is populated.`,\n );\n }\n\n let after = flags['after-step'];\n if (after === undefined) {\n const existing = stateApi.load(conversationId);\n after = existing?.lastStepIdx ?? -1;\n }\n\n let records = readNewRecords(transcriptPath, after);\n if (flags.limit !== undefined && records.length > flags.limit) {\n records = records.slice(0, flags.limit);\n }\n\n const max = findMaxStepIndex(transcriptPath);\n this.log(\n `Conversation ${conversationId}: transcript max step = ${max}, after-step = ${after}, records to process = ${records.length}`,\n );\n if (records.length === 0) {\n this.log('Nothing to backfill.');\n return;\n }\n\n if (flags['dry-run']) {\n // Count classification outcomes without POSTing.\n let wouldEmit = 0;\n let wouldSkip = 0;\n const byEventType: Record<string, number> = {};\n for (const record of records) {\n // Use a stable fake sequence \u2014 classification doesn't care about its value.\n const classified = (await import('../../lib/antigravity-transcript.js')).classifyRecord(record, 0);\n if (classified) {\n wouldEmit++;\n byEventType[classified.eventType] = (byEventType[classified.eventType] ?? 0) + 1;\n } else {\n wouldSkip++;\n }\n }\n this.log(\n `Dry run: would emit ${wouldEmit}, skip ${wouldSkip}. By eventType: ${JSON.stringify(byEventType)}`,\n );\n return;\n }\n\n const start = Date.now();\n const result = await emitRecordsAsEvents(records, rwSessionId, conversationId, after, {\n onProgress: ({ attempted, total }) => {\n if (attempted % 100 === 0 || attempted === total) {\n process.stderr.write(` \u2026${attempted}/${total}\\n`);\n }\n },\n });\n const elapsedSec = ((Date.now() - start) / 1000).toFixed(1);\n\n this.log(\n `Backfill complete in ${elapsedSec}s. attempted=${result.attempted} emitted=${result.emitted} skipped=${result.skipped} failed=${result.failed} highestStepIdx=${result.highestStepIdx}`,\n );\n\n if (flags['save-state']) {\n stateApi.save(conversationId, { lastStepIdx: result.highestStepIdx });\n this.log(`State saved \u2192 live hook will resume from step_index > ${result.highestStepIdx}.`);\n } else {\n this.log('State NOT saved (--no-save-state). Live hook will re-emit any new records from after-step.');\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,34 +1,49 @@
1
- import { Flags } from '@oclif/core';
2
- import { BaseCommand } from '../../base-command.js';
3
- import { apiPost } from '../../lib/api-client.js';
4
- import { saveApiKey } from '../../lib/auth.js';
5
- export default class AuthCreateKey extends BaseCommand {
6
- static description = 'Create a long-lived API key for CLI and proxy authentication';
7
- static examples = [
8
- '<%= config.bin %> auth create-key --name "laptop"',
9
- '<%= config.bin %> auth create-key --name "work proxy" --save',
10
- ];
11
- static flags = {
12
- name: Flags.string({ char: 'n', description: 'Name for this key', required: true }),
13
- save: Flags.boolean({ char: 's', description: 'Save key to ~/.config/rulemetric/env for hooks/proxy', default: true }),
14
- };
15
- async run() {
16
- const { flags } = await this.parse(AuthCreateKey);
17
- const data = await apiPost('/api/auth/api-keys', { name: flags.name });
18
- this.log('');
19
- this.log('API key created successfully:');
20
- this.log('');
21
- this.log(` Name: ${data.name}`);
22
- this.log(` Key: ${data.key}`);
23
- this.log(` Prefix: ${data.keyPrefix}`);
24
- this.log('');
25
- this.warn('Save this key now it will not be shown again.');
26
- if (flags.save) {
27
- saveApiKey(data.key, process.env.RULEMETRIC_API_URL);
28
- this.log('');
29
- this.log('Key saved to ~/.config/rulemetric/env (RULEMETRIC_API_KEY)');
30
- this.log('Hooks and proxy will use this key automatically.');
31
- }
1
+ import {
2
+ BaseCommand
3
+ } from "../../chunk-S56LOTGQ.js";
4
+ import "../../chunk-OGVORIFM.js";
5
+ import "../../chunk-2AM54TUK.js";
6
+ import {
7
+ apiPost
8
+ } from "../../chunk-EJOI2ZGU.js";
9
+ import {
10
+ saveApiKey
11
+ } from "../../chunk-KZRFUXGF.js";
12
+ import "../../chunk-EKJ2CABV.js";
13
+ import "../../chunk-NSBPE2FW.js";
14
+
15
+ // src/commands/auth/create-key.ts
16
+ import { Flags } from "@oclif/core";
17
+ var AuthCreateKey = class _AuthCreateKey extends BaseCommand {
18
+ static description = "Create a long-lived API key for CLI and proxy authentication";
19
+ static examples = [
20
+ '<%= config.bin %> auth create-key --name "laptop"',
21
+ '<%= config.bin %> auth create-key --name "work proxy" --save'
22
+ ];
23
+ static flags = {
24
+ name: Flags.string({ char: "n", description: "Name for this key", required: true }),
25
+ save: Flags.boolean({ char: "s", description: "Save key to ~/.config/rulemetric/env for hooks/proxy", default: true })
26
+ };
27
+ async run() {
28
+ const { flags } = await this.parse(_AuthCreateKey);
29
+ const data = await apiPost("/api/auth/api-keys", { name: flags.name });
30
+ this.log("");
31
+ this.log("API key created successfully:");
32
+ this.log("");
33
+ this.log(` Name: ${data.name}`);
34
+ this.log(` Key: ${data.key}`);
35
+ this.log(` Prefix: ${data.keyPrefix}`);
36
+ this.log("");
37
+ this.warn("Save this key now \u2014 it will not be shown again.");
38
+ if (flags.save) {
39
+ saveApiKey(data.key, process.env.RULEMETRIC_API_URL);
40
+ this.log("");
41
+ this.log("Key saved to ~/.config/rulemetric/env (RULEMETRIC_API_KEY)");
42
+ this.log("Hooks and proxy will use this key automatically.");
32
43
  }
33
- }
34
- //# sourceMappingURL=create-key.js.map
44
+ }
45
+ };
46
+ export {
47
+ AuthCreateKey as default
48
+ };
49
+ //# sourceMappingURL=create-key.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"create-key.js","sourceRoot":"","sources":["../../../src/commands/auth/create-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAU/C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAU,WAAW,GAAG,8DAA8D,CAAC;IAE7F,MAAM,CAAU,QAAQ,GAAG;QACzB,mDAAmD;QACnD,8DAA8D;KAC/D,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,sDAAsD,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACvH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAElD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAoB,oBAAoB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAE1F,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAE7D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;YACvE,IAAI,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/commands/auth/create-key.ts"],
4
+ "sourcesContent": ["import { Flags } from '@oclif/core';\nimport { BaseCommand } from '../../base-command.js';\nimport { apiPost } from '../../lib/api-client.js';\nimport { saveApiKey } from '../../lib/auth.js';\n\ninterface CreateKeyResponse {\n id: string;\n name: string;\n key: string;\n keyPrefix: string;\n createdAt: string;\n}\n\nexport default class AuthCreateKey extends BaseCommand {\n static override description = 'Create a long-lived API key for CLI and proxy authentication';\n\n static override examples = [\n '<%= config.bin %> auth create-key --name \"laptop\"',\n '<%= config.bin %> auth create-key --name \"work proxy\" --save',\n ];\n\n static override flags = {\n name: Flags.string({ char: 'n', description: 'Name for this key', required: true }),\n save: Flags.boolean({ char: 's', description: 'Save key to ~/.config/rulemetric/env for hooks/proxy', default: true }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(AuthCreateKey);\n\n const data = await apiPost<CreateKeyResponse>('/api/auth/api-keys', { name: flags.name });\n\n this.log('');\n this.log('API key created successfully:');\n this.log('');\n this.log(` Name: ${data.name}`);\n this.log(` Key: ${data.key}`);\n this.log(` Prefix: ${data.keyPrefix}`);\n this.log('');\n this.warn('Save this key now \u2014 it will not be shown again.');\n\n if (flags.save) {\n saveApiKey(data.key, process.env.RULEMETRIC_API_URL);\n this.log('');\n this.log('Key saved to ~/.config/rulemetric/env (RULEMETRIC_API_KEY)');\n this.log('Hooks and proxy will use this key automatically.');\n }\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AAatB,IAAqB,gBAArB,MAAqB,uBAAsB,YAAY;AAAA,EACrD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAgB,QAAQ;AAAA,IACtB,MAAM,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,qBAAqB,UAAU,KAAK,CAAC;AAAA,IAClF,MAAM,MAAM,QAAQ,EAAE,MAAM,KAAK,aAAa,wDAAwD,SAAS,KAAK,CAAC;AAAA,EACvH;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,cAAa;AAEhD,UAAM,OAAO,MAAM,QAA2B,sBAAsB,EAAE,MAAM,MAAM,KAAK,CAAC;AAExF,SAAK,IAAI,EAAE;AACX,SAAK,IAAI,+BAA+B;AACxC,SAAK,IAAI,EAAE;AACX,SAAK,IAAI,aAAa,KAAK,IAAI,EAAE;AACjC,SAAK,IAAI,aAAa,KAAK,GAAG,EAAE;AAChC,SAAK,IAAI,aAAa,KAAK,SAAS,EAAE;AACtC,SAAK,IAAI,EAAE;AACX,SAAK,KAAK,sDAAiD;AAE3D,QAAI,MAAM,MAAM;AACd,iBAAW,KAAK,KAAK,QAAQ,IAAI,kBAAkB;AACnD,WAAK,IAAI,EAAE;AACX,WAAK,IAAI,4DAA4D;AACrE,WAAK,IAAI,kDAAkD;AAAA,IAC7D;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -1,47 +1,59 @@
1
- import { Flags } from '@oclif/core';
2
- import { BaseCommand } from '../../base-command.js';
3
- import { saveToken, saveEnvFile } from '../../lib/auth.js';
4
- import { apiPost } from '../../lib/api-client.js';
5
- import { bootstrapActiveOrg } from '../../lib/active-org-refresh.js';
6
- export default class AuthLogin extends BaseCommand {
7
- static description = 'Log in to RuleMetric';
8
- static examples = [
9
- '<%= config.bin %> auth login',
10
- '<%= config.bin %> auth login -e user@example.com',
11
- ];
12
- static flags = {
13
- email: Flags.string({ char: 'e', description: 'Email address' }),
14
- password: Flags.string({ char: 'p', description: 'Password (for non-interactive use)' }),
15
- };
16
- async run() {
17
- const { flags } = await this.parse(AuthLogin);
18
- let email = flags.email;
19
- let password = flags.password;
20
- if (!email || !password) {
21
- const { input, password: passwordPrompt } = await import('@inquirer/prompts');
22
- if (!email) {
23
- email = await input({ message: 'Email:' });
24
- }
25
- if (!password) {
26
- password = await passwordPrompt({ message: 'Password:' });
27
- }
28
- }
29
- const data = await apiPost('/auth/login', { email, password });
30
- const expiresAt = data.expiresAt ?? new Date(Date.now() + 3600 * 1000).toISOString();
31
- saveToken({
32
- accessToken: data.accessToken,
33
- refreshToken: data.refreshToken,
34
- expiresAt,
35
- email: data.email,
36
- });
37
- saveEnvFile(data.accessToken, process.env.RULEMETRIC_API_URL);
38
- // Bootstrap the active-org cache now that auth is available. BaseCommand
39
- // fired the guarded refresh BEFORE login completed (no creds → 401 →
40
- // swallowed); without this explicit retry, the cache stays empty until
41
- // the user runs another CLI command, and any Claude Code session that
42
- // fires in the meantime lands with org_id = NULL.
43
- await bootstrapActiveOrg();
44
- this.log(`Logged in as ${data.email}`);
1
+ import {
2
+ BaseCommand
3
+ } from "../../chunk-S56LOTGQ.js";
4
+ import "../../chunk-OGVORIFM.js";
5
+ import {
6
+ bootstrapActiveOrg
7
+ } from "../../chunk-2AM54TUK.js";
8
+ import {
9
+ apiPost
10
+ } from "../../chunk-EJOI2ZGU.js";
11
+ import {
12
+ saveEnvFile,
13
+ saveToken
14
+ } from "../../chunk-KZRFUXGF.js";
15
+ import "../../chunk-EKJ2CABV.js";
16
+ import "../../chunk-NSBPE2FW.js";
17
+
18
+ // src/commands/auth/login.ts
19
+ import { Flags } from "@oclif/core";
20
+ var AuthLogin = class _AuthLogin extends BaseCommand {
21
+ static description = "Log in to RuleMetric";
22
+ static examples = [
23
+ "<%= config.bin %> auth login",
24
+ "<%= config.bin %> auth login -e user@example.com"
25
+ ];
26
+ static flags = {
27
+ email: Flags.string({ char: "e", description: "Email address" }),
28
+ password: Flags.string({ char: "p", description: "Password (for non-interactive use)" })
29
+ };
30
+ async run() {
31
+ const { flags } = await this.parse(_AuthLogin);
32
+ let email = flags.email;
33
+ let password = flags.password;
34
+ if (!email || !password) {
35
+ const { input, password: passwordPrompt } = await import("@inquirer/prompts");
36
+ if (!email) {
37
+ email = await input({ message: "Email:" });
38
+ }
39
+ if (!password) {
40
+ password = await passwordPrompt({ message: "Password:" });
41
+ }
45
42
  }
46
- }
47
- //# sourceMappingURL=login.js.map
43
+ const data = await apiPost("/auth/login", { email, password });
44
+ const expiresAt = data.expiresAt ?? new Date(Date.now() + 3600 * 1e3).toISOString();
45
+ saveToken({
46
+ accessToken: data.accessToken,
47
+ refreshToken: data.refreshToken,
48
+ expiresAt,
49
+ email: data.email
50
+ });
51
+ saveEnvFile(data.accessToken, process.env.RULEMETRIC_API_URL);
52
+ await bootstrapActiveOrg();
53
+ this.log(`Logged in as ${data.email}`);
54
+ }
55
+ };
56
+ export {
57
+ AuthLogin as default
58
+ };
59
+ //# sourceMappingURL=login.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AASrE,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAU,WAAW,GAAG,sBAAsB,CAAC;IAErD,MAAM,CAAU,QAAQ,GAAG;QACzB,8BAA8B;QAC9B,kDAAkD;KACnD,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;QAChE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC;KACzF,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACxB,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAE9B,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAE9E,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7C,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAgB,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE9E,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAErF,SAAS,CAAC;YACR,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS;YACT,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAE9D,yEAAyE;QACzE,qEAAqE;QACrE,uEAAuE;QACvE,sEAAsE;QACtE,kDAAkD;QAClD,MAAM,kBAAkB,EAAE,CAAC;QAE3B,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACzC,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/commands/auth/login.ts"],
4
+ "sourcesContent": ["import { Flags } from '@oclif/core';\nimport { BaseCommand } from '../../base-command.js';\nimport { saveToken, saveEnvFile } from '../../lib/auth.js';\nimport { apiPost } from '../../lib/api-client.js';\nimport { bootstrapActiveOrg } from '../../lib/active-org-refresh.js';\n\ninterface LoginResponse {\n accessToken: string;\n refreshToken: string;\n expiresAt: string | null;\n email: string;\n}\n\nexport default class AuthLogin extends BaseCommand {\n static override description = 'Log in to RuleMetric';\n\n static override examples = [\n '<%= config.bin %> auth login',\n '<%= config.bin %> auth login -e user@example.com',\n ];\n\n static override flags = {\n email: Flags.string({ char: 'e', description: 'Email address' }),\n password: Flags.string({ char: 'p', description: 'Password (for non-interactive use)' }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(AuthLogin);\n\n let email = flags.email;\n let password = flags.password;\n\n if (!email || !password) {\n const { input, password: passwordPrompt } = await import('@inquirer/prompts');\n\n if (!email) {\n email = await input({ message: 'Email:' });\n }\n\n if (!password) {\n password = await passwordPrompt({ message: 'Password:' });\n }\n }\n\n const data = await apiPost<LoginResponse>('/auth/login', { email, password });\n\n const expiresAt = data.expiresAt ?? new Date(Date.now() + 3600 * 1000).toISOString();\n\n saveToken({\n accessToken: data.accessToken,\n refreshToken: data.refreshToken,\n expiresAt,\n email: data.email,\n });\n\n saveEnvFile(data.accessToken, process.env.RULEMETRIC_API_URL);\n\n // Bootstrap the active-org cache now that auth is available. BaseCommand\n // fired the guarded refresh BEFORE login completed (no creds \u2192 401 \u2192\n // swallowed); without this explicit retry, the cache stays empty until\n // the user runs another CLI command, and any Claude Code session that\n // fires in the meantime lands with org_id = NULL.\n await bootstrapActiveOrg();\n\n this.log(`Logged in as ${data.email}`);\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AAatB,IAAqB,YAArB,MAAqB,mBAAkB,YAAY;AAAA,EACjD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAgB,QAAQ;AAAA,IACtB,OAAO,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,gBAAgB,CAAC;AAAA,IAC/D,UAAU,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,qCAAqC,CAAC;AAAA,EACzF;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,UAAS;AAE5C,QAAI,QAAQ,MAAM;AAClB,QAAI,WAAW,MAAM;AAErB,QAAI,CAAC,SAAS,CAAC,UAAU;AACvB,YAAM,EAAE,OAAO,UAAU,eAAe,IAAI,MAAM,OAAO,mBAAmB;AAE5E,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAM,MAAM,EAAE,SAAS,SAAS,CAAC;AAAA,MAC3C;AAEA,UAAI,CAAC,UAAU;AACb,mBAAW,MAAM,eAAe,EAAE,SAAS,YAAY,CAAC;AAAA,MAC1D;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,QAAuB,eAAe,EAAE,OAAO,SAAS,CAAC;AAE5E,UAAM,YAAY,KAAK,aAAa,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,GAAI,EAAE,YAAY;AAEnF,cAAU;AAAA,MACR,aAAa,KAAK;AAAA,MAClB,cAAc,KAAK;AAAA,MACnB;AAAA,MACA,OAAO,KAAK;AAAA,IACd,CAAC;AAED,gBAAY,KAAK,aAAa,QAAQ,IAAI,kBAAkB;AAO5D,UAAM,mBAAmB;AAEzB,SAAK,IAAI,gBAAgB,KAAK,KAAK,EAAE;AAAA,EACvC;AACF;",
6
+ "names": []
7
+ }
@@ -1,13 +1,28 @@
1
- import { BaseCommand } from '../../base-command.js';
2
- import { clearToken, clearEnvFile } from '../../lib/auth.js';
3
- export default class AuthLogout extends BaseCommand {
4
- static description = 'Log out of RuleMetric';
5
- static examples = ['<%= config.bin %> auth logout'];
6
- async run() {
7
- await this.parse(AuthLogout);
8
- clearToken();
9
- clearEnvFile();
10
- this.log('Logged out successfully.');
11
- }
12
- }
13
- //# sourceMappingURL=logout.js.map
1
+ import {
2
+ BaseCommand
3
+ } from "../../chunk-S56LOTGQ.js";
4
+ import "../../chunk-OGVORIFM.js";
5
+ import "../../chunk-2AM54TUK.js";
6
+ import "../../chunk-EJOI2ZGU.js";
7
+ import {
8
+ clearEnvFile,
9
+ clearToken
10
+ } from "../../chunk-KZRFUXGF.js";
11
+ import "../../chunk-EKJ2CABV.js";
12
+ import "../../chunk-NSBPE2FW.js";
13
+
14
+ // src/commands/auth/logout.ts
15
+ var AuthLogout = class _AuthLogout extends BaseCommand {
16
+ static description = "Log out of RuleMetric";
17
+ static examples = ["<%= config.bin %> auth logout"];
18
+ async run() {
19
+ await this.parse(_AuthLogout);
20
+ clearToken();
21
+ clearEnvFile();
22
+ this.log("Logged out successfully.");
23
+ }
24
+ };
25
+ export {
26
+ AuthLogout as default
27
+ };
28
+ //# sourceMappingURL=logout.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAU,WAAW,GAAG,uBAAuB,CAAC;IAEtD,MAAM,CAAU,QAAQ,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7D,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7B,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACvC,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/commands/auth/logout.ts"],
4
+ "sourcesContent": ["import { BaseCommand } from '../../base-command.js';\nimport { clearToken, clearEnvFile } from '../../lib/auth.js';\n\nexport default class AuthLogout extends BaseCommand {\n static override description = 'Log out of RuleMetric';\n\n static override examples = ['<%= config.bin %> auth logout'];\n\n async run(): Promise<void> {\n await this.parse(AuthLogout);\n clearToken();\n clearEnvFile();\n this.log('Logged out successfully.');\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;AAGA,IAAqB,aAArB,MAAqB,oBAAmB,YAAY;AAAA,EAClD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW,CAAC,+BAA+B;AAAA,EAE3D,MAAM,MAAqB;AACzB,UAAM,KAAK,MAAM,WAAU;AAC3B,eAAW;AACX,iBAAa;AACb,SAAK,IAAI,0BAA0B;AAAA,EACrC;AACF;",
6
+ "names": []
7
+ }