@rulemetric/cli 0.7.3 → 0.7.4

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 (547) hide show
  1. package/dist/base-command.js +1 -14
  2. package/dist/chunk-2TC6WCUT.js +34 -0
  3. package/dist/chunk-2UC3ULIG.js +1 -0
  4. package/dist/chunk-3AV3GTMP.js +1 -0
  5. package/dist/chunk-4Z5ECCJE.js +1 -0
  6. package/dist/chunk-5RBLIVBF.js +1 -0
  7. package/dist/chunk-67QCYUJU.js +1 -0
  8. package/dist/chunk-6QKI756T.js +2 -0
  9. package/dist/chunk-6V4WM73L.js +1 -0
  10. package/dist/chunk-6XEC6474.js +1 -0
  11. package/dist/chunk-72XLQE3X.js +2 -0
  12. package/dist/chunk-7DFNBRLY.js +61 -0
  13. package/dist/chunk-7XQ4VPLC.js +2 -0
  14. package/dist/chunk-AHRHCERJ.js +1 -0
  15. package/dist/chunk-ARNZQBMX.js +1 -0
  16. package/dist/chunk-CADKBP3D.js +58 -0
  17. package/dist/chunk-CDI5CCHU.js +1 -0
  18. package/dist/chunk-CNQ5DTNC.js +1 -0
  19. package/dist/chunk-CRAKDQ4H.js +1 -0
  20. package/dist/chunk-DNF4HDI6.js +14 -0
  21. package/dist/chunk-DSO2U4Y6.js +56 -0
  22. package/dist/chunk-DT4GKEP5.js +5 -0
  23. package/dist/chunk-DVN7GFJG.js +1 -0
  24. package/dist/chunk-E4SFUPYR.js +15 -0
  25. package/dist/chunk-EUHNCVJQ.js +33 -0
  26. package/dist/chunk-F2VP4B4J.js +1 -0
  27. package/dist/chunk-FEHM5OKW.js +1 -0
  28. package/dist/chunk-FHVBTDBM.js +69 -0
  29. package/dist/chunk-GBMF3TP6.js +1 -0
  30. package/dist/chunk-GY5IJ4RS.js +1 -0
  31. package/dist/chunk-HOHD5HY2.js +5 -0
  32. package/dist/chunk-HP2BUPGS.js +24 -0
  33. package/dist/{chunk-OQBBVTDG.js → chunk-I2DZGJRR.js} +6 -71
  34. package/dist/chunk-I4YJ7NTX.js +1 -0
  35. package/dist/chunk-IY5NXR3N.js +1 -0
  36. package/dist/chunk-IZTIYR5Q.js +2 -0
  37. package/dist/chunk-KKDHD4XA.js +2 -0
  38. package/dist/chunk-LQRYQE6Q.js +4 -0
  39. package/dist/chunk-M6AJDVCL.js +5 -0
  40. package/dist/chunk-MGHFDHHM.js +1 -0
  41. package/dist/chunk-ML36XQW7.js +1 -0
  42. package/dist/chunk-MODXEGCU.js +1 -0
  43. package/dist/chunk-MVM6OGAF.js +4 -0
  44. package/dist/chunk-N7ODX6PO.js +1 -0
  45. package/dist/chunk-NBTC5FNV.js +1 -0
  46. package/dist/chunk-NJ5UED3H.js +1 -0
  47. package/dist/chunk-NVKX36YN.js +3 -0
  48. package/dist/chunk-NVOTOQBA.js +1 -0
  49. package/dist/chunk-O7ZMHCMG.js +31 -0
  50. package/dist/chunk-OMXUK4M6.js +1 -0
  51. package/dist/chunk-PZS2KOU7.js +1 -0
  52. package/dist/chunk-RSKQRVPJ.js +1 -0
  53. package/dist/chunk-RTEATXTP.js +1 -0
  54. package/dist/chunk-RTWRHIKY.js +7 -0
  55. package/dist/chunk-RVO4HV3M.js +1 -0
  56. package/dist/chunk-SBILN45P.js +1 -0
  57. package/dist/chunk-SZ62CP55.js +1 -0
  58. package/dist/chunk-T3W5N3BP.js +2 -0
  59. package/dist/chunk-TDD7IOV2.js +1 -0
  60. package/dist/chunk-TIQ7DQ3M.js +1 -0
  61. package/dist/chunk-TU2AR6XO.js +1 -0
  62. package/dist/chunk-UF6US7VU.js +1 -0
  63. package/dist/chunk-V5QFOF4F.js +9 -0
  64. package/dist/chunk-V5U3E4BZ.js +1 -0
  65. package/dist/chunk-VAFAH6QL.js +1 -0
  66. package/dist/chunk-VMWY7KHH.js +1 -0
  67. package/dist/chunk-VUGRXM7R.js +1 -0
  68. package/dist/{chunk-XZXS2W24.js → chunk-VWEXKDWG.js} +10 -56
  69. package/dist/chunk-W2MV25SB.js +1 -0
  70. package/dist/chunk-WJ3H73G6.js +1 -0
  71. package/dist/chunk-WJUQBMTF.js +9 -0
  72. package/dist/chunk-WLVQJH4E.js +1 -0
  73. package/dist/chunk-WPJ2BND4.js +1 -0
  74. package/dist/chunk-WSCK4WNK.js +1 -0
  75. package/dist/chunk-Y65CSJFF.js +3 -0
  76. package/dist/chunk-ZL4MZMUK.js +34 -0
  77. package/dist/chunk-ZLLER3HP.js +1 -0
  78. package/dist/chunk-ZXF5NE54.js +1 -0
  79. package/dist/commands/antigravity/backfill.js +2 -136
  80. package/dist/commands/auth/create-key.js +1 -52
  81. package/dist/commands/auth/login.js +1 -85
  82. package/dist/commands/auth/logout.js +1 -29
  83. package/dist/commands/auth/revoke-key.js +1 -33
  84. package/dist/commands/auth/signup.js +1 -89
  85. package/dist/commands/auth/status.js +1 -42
  86. package/dist/commands/catalog/index.js +2 -52
  87. package/dist/commands/catalog/recommend.js +3 -43
  88. package/dist/commands/convert.js +1 -75
  89. package/dist/commands/converters.js +1 -54
  90. package/dist/commands/crons/list.js +1 -41
  91. package/dist/commands/crons/run.js +2 -76
  92. package/dist/commands/dashboard.js +1 -46
  93. package/dist/commands/diagnostics.js +1 -117
  94. package/dist/commands/eval-targets/create.js +1 -53
  95. package/dist/commands/eval-targets/list.js +1 -54
  96. package/dist/commands/evals/agent.js +3 -310
  97. package/dist/commands/evals/benchmark.js +6 -73
  98. package/dist/commands/evals/compare.js +13 -96
  99. package/dist/commands/evals/create.js +1 -67
  100. package/dist/commands/evals/optimize-description.js +25 -239
  101. package/dist/commands/evals/optimize.js +5 -211
  102. package/dist/commands/evals/run.js +3 -183
  103. package/dist/commands/gateway/ensure.js +1 -104
  104. package/dist/commands/hooks/emit-instructions.js +1 -25
  105. package/dist/commands/hooks/install.js +1 -442
  106. package/dist/commands/hooks/run.js +3 -81
  107. package/dist/commands/hooks/uninstall.js +2 -156
  108. package/dist/commands/import.js +1 -66
  109. package/dist/commands/instructions/create.js +1 -74
  110. package/dist/commands/instructions/delete.js +1 -55
  111. package/dist/commands/instructions/fork.js +1 -34
  112. package/dist/commands/instructions/get.js +1 -68
  113. package/dist/commands/instructions/list.js +1 -65
  114. package/dist/commands/instructions/promote.js +1 -42
  115. package/dist/commands/instructions/pull.js +1 -39
  116. package/dist/commands/instructions/upstream.js +1 -38
  117. package/dist/commands/instructions/versions.js +1 -53
  118. package/dist/commands/launcher.js +1 -40
  119. package/dist/commands/org/current.js +1 -77
  120. package/dist/commands/org/list.js +1 -52
  121. package/dist/commands/org/switch.js +1 -71
  122. package/dist/commands/packs/add-instruction.js +1 -37
  123. package/dist/commands/packs/apply.js +1 -39
  124. package/dist/commands/packs/create.js +1 -50
  125. package/dist/commands/packs/fork.js +1 -34
  126. package/dist/commands/packs/get.js +3 -56
  127. package/dist/commands/packs/list.js +1 -66
  128. package/dist/commands/packs/remove-instruction.js +1 -35
  129. package/dist/commands/proxy/env.js +3 -131
  130. package/dist/commands/proxy/logs.js +3 -85
  131. package/dist/commands/proxy/restart.js +1 -35
  132. package/dist/commands/proxy/setup.js +15 -454
  133. package/dist/commands/proxy/start.js +10 -333
  134. package/dist/commands/proxy/status.js +1 -78
  135. package/dist/commands/proxy/stop.js +1 -94
  136. package/dist/commands/research/backfill.js +1 -59
  137. package/dist/commands/research/tail-transcript.js +1 -70
  138. package/dist/commands/service/install.js +57 -796
  139. package/dist/commands/service/status.js +1 -180
  140. package/dist/commands/service/uninstall.js +1 -119
  141. package/dist/commands/sessions/analyze.js +3 -48
  142. package/dist/commands/sessions/end.js +2 -85
  143. package/dist/commands/sessions/import.js +1 -46
  144. package/dist/commands/sessions/list.js +1 -48
  145. package/dist/commands/sessions/start.js +3 -90
  146. package/dist/commands/setup.js +3 -150
  147. package/dist/commands/skills/export-approved.js +1 -46
  148. package/dist/commands/skills/install.js +4 -107
  149. package/dist/commands/skills/list.js +4 -65
  150. package/dist/commands/skills/publish.js +2 -98
  151. package/dist/commands/skills/search.js +3 -72
  152. package/dist/commands/skills/update.js +3 -55
  153. package/dist/commands/suggestions/accept.js +8 -84
  154. package/dist/commands/suggestions/dismiss.js +1 -45
  155. package/dist/commands/suggestions/list.js +1 -61
  156. package/dist/commands/suggestions/refresh.js +1 -27
  157. package/dist/cursor-T7AMCMKS.js +13 -0
  158. package/dist/dashboard/Dashboard.js +1 -243
  159. package/dist/dashboard/data.js +1 -15
  160. package/dist/dashboard/launcher/ActiveJobsList.js +1 -10
  161. package/dist/dashboard/launcher/LauncherOverlay.js +1 -16
  162. package/dist/dashboard/launcher/NewLaunchForm.js +1 -10
  163. package/dist/dashboard/launcher/api.js +1 -16
  164. package/dist/dashboard/launcher/tool-labels.js +1 -10
  165. package/dist/dashboard/launcher/types.js +0 -1
  166. package/dist/dashboard/launcher/useLaunchJobs.js +1 -11
  167. package/dist/dashboard/panels/friction.js +1 -10
  168. package/dist/dashboard/panels/insights.js +1 -10
  169. package/dist/dashboard/panels/instructions.js +1 -10
  170. package/dist/dashboard/panels/outcomes.js +1 -10
  171. package/dist/dashboard/panels/overview.js +1 -10
  172. package/dist/dashboard/panels/shared.js +1 -19
  173. package/dist/dashboard/types.js +1 -24
  174. package/dist/dist-FAVALJ5C.js +1 -0
  175. package/dist/index.js +1 -8
  176. package/dist/lib/active-org-refresh.js +1 -15
  177. package/dist/lib/active-org.js +1 -16
  178. package/dist/lib/agent-loop.js +1 -47
  179. package/dist/lib/antigravity-transcript.js +1 -22
  180. package/dist/lib/api-client.js +1 -23
  181. package/dist/lib/auth.js +1 -30
  182. package/dist/lib/capture-hosts.js +1 -8
  183. package/dist/lib/detect-languages.js +1 -8
  184. package/dist/lib/detect-tmux.js +1 -9
  185. package/dist/lib/diagnostics.js +1 -12
  186. package/dist/lib/editor-proxy-pins.js +1 -14
  187. package/dist/lib/ensure-api-key.js +1 -11
  188. package/dist/lib/eval-analyzer.js +1 -9
  189. package/dist/lib/eval-benchmark.js +1 -12
  190. package/dist/lib/eval-conversation-handler.js +1 -13
  191. package/dist/lib/eval-executor.js +1 -8
  192. package/dist/lib/eval-grader.js +1 -9
  193. package/dist/lib/eval-meta-judge.js +1 -9
  194. package/dist/lib/eval-trigger-tester.js +1 -11
  195. package/dist/lib/eval-worktree.js +1 -8
  196. package/dist/lib/gateway-entry.js +1 -61
  197. package/dist/lib/gateway-identity.js +1 -16
  198. package/dist/lib/gateway-lifecycle.js +1 -32
  199. package/dist/lib/gateway.js +1 -14
  200. package/dist/lib/handlers/cron-refresh-pricing.js +1 -0
  201. package/dist/lib/handlers/cron-refresh-skills.js +1 -8
  202. package/dist/lib/handlers/cron-suggest-instructions.js +1 -16
  203. package/dist/lib/handlers/process-announcement.js +1 -11
  204. package/dist/lib/handlers/process-changelog.js +1 -11
  205. package/dist/lib/handlers/process-conversation.js +1 -14
  206. package/dist/lib/handlers/process-eval.js +1 -15
  207. package/dist/lib/handlers/process-insights.js +1 -15
  208. package/dist/lib/handlers/process-launch.js +1 -16
  209. package/dist/lib/handlers/process-run-cleanup.js +1 -13
  210. package/dist/lib/handlers/process-send-message.js +1 -10
  211. package/dist/lib/handlers/process-session-goal.js +1 -12
  212. package/dist/lib/hooks-config.js +1 -81
  213. package/dist/lib/insights-prompts.js +1 -12
  214. package/dist/lib/instruction-snapshot.js +1 -8
  215. package/dist/lib/job-helpers.js +0 -1
  216. package/dist/lib/llm-client.js +1 -20
  217. package/dist/lib/manual-tasks-meta.js +1 -8
  218. package/dist/lib/manual-tasks.js +1 -80
  219. package/dist/lib/output.js +1 -12
  220. package/dist/lib/permanent-job-error.js +1 -10
  221. package/dist/lib/pid-identity.js +1 -14
  222. package/dist/lib/proxy-respawn.js +1 -12
  223. package/dist/lib/research-client.js +1 -12
  224. package/dist/lib/setup-steps.js +1 -33
  225. package/dist/lib/skills-loader.js +1 -8
  226. package/dist/lib/statusline-shim.js +1 -20
  227. package/dist/lib/telemetry.js +1 -16
  228. package/dist/lib/terminal-target-heartbeat.js +1 -15
  229. package/dist/lib/tmux.js +1 -16
  230. package/dist/lib/transcript-rate-limit-watcher.js +1 -22
  231. package/dist/lib/types.js +1 -8
  232. package/dist/lib/version-check.js +1 -12
  233. package/dist/lib/which.js +1 -8
  234. package/dist/lib/worktree.js +1 -17
  235. package/dist/opencode-QRJ3BH23.js +1 -0
  236. package/oclif.manifest.json +135 -135
  237. package/package.json +9 -8
  238. package/dist/base-command.js.map +0 -7
  239. package/dist/chunk-2HK7RGZB.js +0 -82
  240. package/dist/chunk-2HK7RGZB.js.map +0 -7
  241. package/dist/chunk-2ORJWTNZ.js +0 -307
  242. package/dist/chunk-2ORJWTNZ.js.map +0 -7
  243. package/dist/chunk-37LN5O7M.js +0 -59
  244. package/dist/chunk-37LN5O7M.js.map +0 -7
  245. package/dist/chunk-3S7223UR.js +0 -81
  246. package/dist/chunk-3S7223UR.js.map +0 -7
  247. package/dist/chunk-3TIMQ3O6.js +0 -96
  248. package/dist/chunk-3TIMQ3O6.js.map +0 -7
  249. package/dist/chunk-42GFSAJP.js +0 -32
  250. package/dist/chunk-42GFSAJP.js.map +0 -7
  251. package/dist/chunk-4BHDHHKL.js +0 -48
  252. package/dist/chunk-4BHDHHKL.js.map +0 -7
  253. package/dist/chunk-4D537GXE.js +0 -99
  254. package/dist/chunk-4D537GXE.js.map +0 -7
  255. package/dist/chunk-4LYCDS2N.js +0 -139
  256. package/dist/chunk-4LYCDS2N.js.map +0 -7
  257. package/dist/chunk-4SCZK7AL.js +0 -129
  258. package/dist/chunk-4SCZK7AL.js.map +0 -7
  259. package/dist/chunk-4XAWK6S2.js +0 -161
  260. package/dist/chunk-4XAWK6S2.js.map +0 -7
  261. package/dist/chunk-52WIYRZH.js +0 -73
  262. package/dist/chunk-52WIYRZH.js.map +0 -7
  263. package/dist/chunk-5BAOGNUH.js +0 -79
  264. package/dist/chunk-5BAOGNUH.js.map +0 -7
  265. package/dist/chunk-5EDMGK3W.js +0 -39
  266. package/dist/chunk-5EDMGK3W.js.map +0 -7
  267. package/dist/chunk-6NBS5XFS.js +0 -99
  268. package/dist/chunk-6NBS5XFS.js.map +0 -7
  269. package/dist/chunk-7LVVKQMZ.js +0 -98
  270. package/dist/chunk-7LVVKQMZ.js.map +0 -7
  271. package/dist/chunk-7NNFYWKK.js +0 -243
  272. package/dist/chunk-7NNFYWKK.js.map +0 -7
  273. package/dist/chunk-7NYKWN7U.js +0 -12
  274. package/dist/chunk-7NYKWN7U.js.map +0 -7
  275. package/dist/chunk-BO76WKJR.js +0 -42
  276. package/dist/chunk-BO76WKJR.js.map +0 -7
  277. package/dist/chunk-BRD5RUGM.js +0 -53
  278. package/dist/chunk-BRD5RUGM.js.map +0 -7
  279. package/dist/chunk-BT6Z6545.js +0 -43
  280. package/dist/chunk-BT6Z6545.js.map +0 -7
  281. package/dist/chunk-BZDKEQKU.js +0 -39
  282. package/dist/chunk-BZDKEQKU.js.map +0 -7
  283. package/dist/chunk-DGHWRQXL.js +0 -17
  284. package/dist/chunk-DGHWRQXL.js.map +0 -7
  285. package/dist/chunk-DIQUV5FR.js +0 -257
  286. package/dist/chunk-DIQUV5FR.js.map +0 -7
  287. package/dist/chunk-DMX5YOTM.js +0 -167
  288. package/dist/chunk-DMX5YOTM.js.map +0 -7
  289. package/dist/chunk-DNKSVWMD.js +0 -108
  290. package/dist/chunk-DNKSVWMD.js.map +0 -7
  291. package/dist/chunk-DQ3KELXD.js +0 -74
  292. package/dist/chunk-DQ3KELXD.js.map +0 -7
  293. package/dist/chunk-DUJSRBLP.js +0 -122
  294. package/dist/chunk-DUJSRBLP.js.map +0 -7
  295. package/dist/chunk-E3BIT53W.js +0 -154
  296. package/dist/chunk-E3BIT53W.js.map +0 -7
  297. package/dist/chunk-EARWG4EV.js +0 -22
  298. package/dist/chunk-EARWG4EV.js.map +0 -7
  299. package/dist/chunk-EI5BHWXA.js +0 -1662
  300. package/dist/chunk-EI5BHWXA.js.map +0 -7
  301. package/dist/chunk-EJ3YAFDP.js +0 -37
  302. package/dist/chunk-EJ3YAFDP.js.map +0 -7
  303. package/dist/chunk-EKJ2CABV.js +0 -76
  304. package/dist/chunk-EKJ2CABV.js.map +0 -7
  305. package/dist/chunk-EKP32DLN.js +0 -16
  306. package/dist/chunk-EKP32DLN.js.map +0 -7
  307. package/dist/chunk-EYPAAGN5.js +0 -51
  308. package/dist/chunk-EYPAAGN5.js.map +0 -7
  309. package/dist/chunk-F5N6CLJJ.js +0 -1995
  310. package/dist/chunk-F5N6CLJJ.js.map +0 -7
  311. package/dist/chunk-GIUBARWS.js +0 -99
  312. package/dist/chunk-GIUBARWS.js.map +0 -7
  313. package/dist/chunk-GQNJO2P2.js +0 -102
  314. package/dist/chunk-GQNJO2P2.js.map +0 -7
  315. package/dist/chunk-IJGF2ETG.js +0 -68
  316. package/dist/chunk-IJGF2ETG.js.map +0 -7
  317. package/dist/chunk-ILYDELUE.js +0 -46
  318. package/dist/chunk-ILYDELUE.js.map +0 -7
  319. package/dist/chunk-J6QFW4LD.js +0 -55
  320. package/dist/chunk-J6QFW4LD.js.map +0 -7
  321. package/dist/chunk-J7N3DLH6.js +0 -117
  322. package/dist/chunk-J7N3DLH6.js.map +0 -7
  323. package/dist/chunk-JFDWKLQC.js +0 -23
  324. package/dist/chunk-JFDWKLQC.js.map +0 -7
  325. package/dist/chunk-JULOLTZS.js +0 -61
  326. package/dist/chunk-JULOLTZS.js.map +0 -7
  327. package/dist/chunk-KJKBDQ4D.js +0 -220
  328. package/dist/chunk-KJKBDQ4D.js.map +0 -7
  329. package/dist/chunk-KRBQLMOP.js +0 -41
  330. package/dist/chunk-KRBQLMOP.js.map +0 -7
  331. package/dist/chunk-LXKPNATC.js +0 -624
  332. package/dist/chunk-LXKPNATC.js.map +0 -7
  333. package/dist/chunk-NSBPE2FW.js +0 -17
  334. package/dist/chunk-NSBPE2FW.js.map +0 -7
  335. package/dist/chunk-OCKHW72U.js +0 -55
  336. package/dist/chunk-OCKHW72U.js.map +0 -7
  337. package/dist/chunk-OKWCKCPE.js +0 -414
  338. package/dist/chunk-OKWCKCPE.js.map +0 -7
  339. package/dist/chunk-OO7JDFS4.js +0 -157
  340. package/dist/chunk-OO7JDFS4.js.map +0 -7
  341. package/dist/chunk-OQBBVTDG.js.map +0 -7
  342. package/dist/chunk-OQSQC7VB.js +0 -77
  343. package/dist/chunk-OQSQC7VB.js.map +0 -7
  344. package/dist/chunk-PED7L5GX.js +0 -92
  345. package/dist/chunk-PED7L5GX.js.map +0 -7
  346. package/dist/chunk-QJQS6TUN.js +0 -44
  347. package/dist/chunk-QJQS6TUN.js.map +0 -7
  348. package/dist/chunk-QN34TGD3.js +0 -83
  349. package/dist/chunk-QN34TGD3.js.map +0 -7
  350. package/dist/chunk-QSN77T7C.js +0 -250
  351. package/dist/chunk-QSN77T7C.js.map +0 -7
  352. package/dist/chunk-R56PH7YE.js +0 -78
  353. package/dist/chunk-R56PH7YE.js.map +0 -7
  354. package/dist/chunk-RAXRZYOB.js +0 -299
  355. package/dist/chunk-RAXRZYOB.js.map +0 -7
  356. package/dist/chunk-RH7NHVSK.js +0 -16
  357. package/dist/chunk-RH7NHVSK.js.map +0 -7
  358. package/dist/chunk-RMTT4KDY.js +0 -191
  359. package/dist/chunk-RMTT4KDY.js.map +0 -7
  360. package/dist/chunk-RQ2TMLKG.js +0 -142
  361. package/dist/chunk-RQ2TMLKG.js.map +0 -7
  362. package/dist/chunk-SO3T35U7.js +0 -80
  363. package/dist/chunk-SO3T35U7.js.map +0 -7
  364. package/dist/chunk-UKMLICWS.js +0 -51
  365. package/dist/chunk-UKMLICWS.js.map +0 -7
  366. package/dist/chunk-VA5FFOS7.js +0 -243
  367. package/dist/chunk-VA5FFOS7.js.map +0 -7
  368. package/dist/chunk-W2YERO7E.js +0 -170
  369. package/dist/chunk-W2YERO7E.js.map +0 -7
  370. package/dist/chunk-W53GKIZQ.js +0 -50
  371. package/dist/chunk-W53GKIZQ.js.map +0 -7
  372. package/dist/chunk-WA4MWYRW.js +0 -254
  373. package/dist/chunk-WA4MWYRW.js.map +0 -7
  374. package/dist/chunk-XC6M4CSW.js +0 -44
  375. package/dist/chunk-XC6M4CSW.js.map +0 -7
  376. package/dist/chunk-XK42ZBDE.js +0 -23
  377. package/dist/chunk-XK42ZBDE.js.map +0 -7
  378. package/dist/chunk-XUV6DDBF.js +0 -124
  379. package/dist/chunk-XUV6DDBF.js.map +0 -7
  380. package/dist/chunk-XZXS2W24.js.map +0 -7
  381. package/dist/chunk-Y3WD5CSW.js +0 -49
  382. package/dist/chunk-Y3WD5CSW.js.map +0 -7
  383. package/dist/chunk-Y4BJXXYV.js +0 -148
  384. package/dist/chunk-Y4BJXXYV.js.map +0 -7
  385. package/dist/chunk-YNIH3KMU.js +0 -121
  386. package/dist/chunk-YNIH3KMU.js.map +0 -7
  387. package/dist/chunk-ZUJBM6HE.js +0 -125
  388. package/dist/chunk-ZUJBM6HE.js.map +0 -7
  389. package/dist/commands/antigravity/backfill.js.map +0 -7
  390. package/dist/commands/auth/create-key.js.map +0 -7
  391. package/dist/commands/auth/login.js.map +0 -7
  392. package/dist/commands/auth/logout.js.map +0 -7
  393. package/dist/commands/auth/revoke-key.js.map +0 -7
  394. package/dist/commands/auth/signup.js.map +0 -7
  395. package/dist/commands/auth/status.js.map +0 -7
  396. package/dist/commands/catalog/index.js.map +0 -7
  397. package/dist/commands/catalog/recommend.js.map +0 -7
  398. package/dist/commands/convert.js.map +0 -7
  399. package/dist/commands/converters.js.map +0 -7
  400. package/dist/commands/crons/list.js.map +0 -7
  401. package/dist/commands/crons/run.js.map +0 -7
  402. package/dist/commands/dashboard.js.map +0 -7
  403. package/dist/commands/diagnostics.js.map +0 -7
  404. package/dist/commands/eval-targets/create.js.map +0 -7
  405. package/dist/commands/eval-targets/list.js.map +0 -7
  406. package/dist/commands/evals/agent.js.map +0 -7
  407. package/dist/commands/evals/benchmark.js.map +0 -7
  408. package/dist/commands/evals/compare.js.map +0 -7
  409. package/dist/commands/evals/create.js.map +0 -7
  410. package/dist/commands/evals/optimize-description.js.map +0 -7
  411. package/dist/commands/evals/optimize.js.map +0 -7
  412. package/dist/commands/evals/run.js.map +0 -7
  413. package/dist/commands/gateway/ensure.js.map +0 -7
  414. package/dist/commands/hooks/emit-instructions.js.map +0 -7
  415. package/dist/commands/hooks/install.js.map +0 -7
  416. package/dist/commands/hooks/run.js.map +0 -7
  417. package/dist/commands/hooks/uninstall.js.map +0 -7
  418. package/dist/commands/import.js.map +0 -7
  419. package/dist/commands/instructions/create.js.map +0 -7
  420. package/dist/commands/instructions/delete.js.map +0 -7
  421. package/dist/commands/instructions/fork.js.map +0 -7
  422. package/dist/commands/instructions/get.js.map +0 -7
  423. package/dist/commands/instructions/list.js.map +0 -7
  424. package/dist/commands/instructions/promote.js.map +0 -7
  425. package/dist/commands/instructions/pull.js.map +0 -7
  426. package/dist/commands/instructions/upstream.js.map +0 -7
  427. package/dist/commands/instructions/versions.js.map +0 -7
  428. package/dist/commands/launcher.js.map +0 -7
  429. package/dist/commands/org/current.js.map +0 -7
  430. package/dist/commands/org/list.js.map +0 -7
  431. package/dist/commands/org/switch.js.map +0 -7
  432. package/dist/commands/packs/add-instruction.js.map +0 -7
  433. package/dist/commands/packs/apply.js.map +0 -7
  434. package/dist/commands/packs/create.js.map +0 -7
  435. package/dist/commands/packs/fork.js.map +0 -7
  436. package/dist/commands/packs/get.js.map +0 -7
  437. package/dist/commands/packs/list.js.map +0 -7
  438. package/dist/commands/packs/remove-instruction.js.map +0 -7
  439. package/dist/commands/proxy/env.js.map +0 -7
  440. package/dist/commands/proxy/logs.js.map +0 -7
  441. package/dist/commands/proxy/restart.js.map +0 -7
  442. package/dist/commands/proxy/setup.js.map +0 -7
  443. package/dist/commands/proxy/start.js.map +0 -7
  444. package/dist/commands/proxy/status.js.map +0 -7
  445. package/dist/commands/proxy/stop.js.map +0 -7
  446. package/dist/commands/research/backfill.js.map +0 -7
  447. package/dist/commands/research/tail-transcript.js.map +0 -7
  448. package/dist/commands/service/install.js.map +0 -7
  449. package/dist/commands/service/status.js.map +0 -7
  450. package/dist/commands/service/uninstall.js.map +0 -7
  451. package/dist/commands/sessions/analyze.js.map +0 -7
  452. package/dist/commands/sessions/end.js.map +0 -7
  453. package/dist/commands/sessions/import.js.map +0 -7
  454. package/dist/commands/sessions/list.js.map +0 -7
  455. package/dist/commands/sessions/start.js.map +0 -7
  456. package/dist/commands/setup.js.map +0 -7
  457. package/dist/commands/skills/export-approved.js.map +0 -7
  458. package/dist/commands/skills/install.js.map +0 -7
  459. package/dist/commands/skills/list.js.map +0 -7
  460. package/dist/commands/skills/publish.js.map +0 -7
  461. package/dist/commands/skills/search.js.map +0 -7
  462. package/dist/commands/skills/update.js.map +0 -7
  463. package/dist/commands/suggestions/accept.js.map +0 -7
  464. package/dist/commands/suggestions/dismiss.js.map +0 -7
  465. package/dist/commands/suggestions/list.js.map +0 -7
  466. package/dist/commands/suggestions/refresh.js.map +0 -7
  467. package/dist/cursor-BGQJ4CWI.js +0 -134
  468. package/dist/cursor-BGQJ4CWI.js.map +0 -7
  469. package/dist/dashboard/Dashboard.js.map +0 -7
  470. package/dist/dashboard/data.js.map +0 -7
  471. package/dist/dashboard/launcher/ActiveJobsList.js.map +0 -7
  472. package/dist/dashboard/launcher/LauncherOverlay.js.map +0 -7
  473. package/dist/dashboard/launcher/NewLaunchForm.js.map +0 -7
  474. package/dist/dashboard/launcher/api.js.map +0 -7
  475. package/dist/dashboard/launcher/tool-labels.js.map +0 -7
  476. package/dist/dashboard/launcher/types.js.map +0 -7
  477. package/dist/dashboard/launcher/useLaunchJobs.js.map +0 -7
  478. package/dist/dashboard/panels/friction.js.map +0 -7
  479. package/dist/dashboard/panels/insights.js.map +0 -7
  480. package/dist/dashboard/panels/instructions.js.map +0 -7
  481. package/dist/dashboard/panels/outcomes.js.map +0 -7
  482. package/dist/dashboard/panels/overview.js.map +0 -7
  483. package/dist/dashboard/panels/shared.js.map +0 -7
  484. package/dist/dashboard/types.js.map +0 -7
  485. package/dist/dist-UNYP5PJR.js +0 -56
  486. package/dist/dist-UNYP5PJR.js.map +0 -7
  487. package/dist/index.js.map +0 -7
  488. package/dist/lib/active-org-refresh.js.map +0 -7
  489. package/dist/lib/active-org.js.map +0 -7
  490. package/dist/lib/agent-loop.js.map +0 -7
  491. package/dist/lib/antigravity-transcript.js.map +0 -7
  492. package/dist/lib/api-client.js.map +0 -7
  493. package/dist/lib/auth.js.map +0 -7
  494. package/dist/lib/capture-hosts.js.map +0 -7
  495. package/dist/lib/detect-languages.js.map +0 -7
  496. package/dist/lib/detect-tmux.js.map +0 -7
  497. package/dist/lib/diagnostics.js.map +0 -7
  498. package/dist/lib/editor-proxy-pins.js.map +0 -7
  499. package/dist/lib/ensure-api-key.js.map +0 -7
  500. package/dist/lib/eval-analyzer.js.map +0 -7
  501. package/dist/lib/eval-benchmark.js.map +0 -7
  502. package/dist/lib/eval-conversation-handler.js.map +0 -7
  503. package/dist/lib/eval-executor.js.map +0 -7
  504. package/dist/lib/eval-grader.js.map +0 -7
  505. package/dist/lib/eval-meta-judge.js.map +0 -7
  506. package/dist/lib/eval-trigger-tester.js.map +0 -7
  507. package/dist/lib/eval-worktree.js.map +0 -7
  508. package/dist/lib/gateway-entry.js.map +0 -7
  509. package/dist/lib/gateway-identity.js.map +0 -7
  510. package/dist/lib/gateway-lifecycle.js.map +0 -7
  511. package/dist/lib/gateway.js.map +0 -7
  512. package/dist/lib/handlers/cron-refresh-skills.js.map +0 -7
  513. package/dist/lib/handlers/cron-suggest-instructions.js.map +0 -7
  514. package/dist/lib/handlers/process-announcement.js.map +0 -7
  515. package/dist/lib/handlers/process-changelog.js.map +0 -7
  516. package/dist/lib/handlers/process-conversation.js.map +0 -7
  517. package/dist/lib/handlers/process-eval.js.map +0 -7
  518. package/dist/lib/handlers/process-insights.js.map +0 -7
  519. package/dist/lib/handlers/process-launch.js.map +0 -7
  520. package/dist/lib/handlers/process-run-cleanup.js.map +0 -7
  521. package/dist/lib/handlers/process-send-message.js.map +0 -7
  522. package/dist/lib/handlers/process-session-goal.js.map +0 -7
  523. package/dist/lib/hooks-config.js.map +0 -7
  524. package/dist/lib/insights-prompts.js.map +0 -7
  525. package/dist/lib/instruction-snapshot.js.map +0 -7
  526. package/dist/lib/job-helpers.js.map +0 -7
  527. package/dist/lib/llm-client.js.map +0 -7
  528. package/dist/lib/manual-tasks-meta.js.map +0 -7
  529. package/dist/lib/manual-tasks.js.map +0 -7
  530. package/dist/lib/output.js.map +0 -7
  531. package/dist/lib/permanent-job-error.js.map +0 -7
  532. package/dist/lib/pid-identity.js.map +0 -7
  533. package/dist/lib/proxy-respawn.js.map +0 -7
  534. package/dist/lib/research-client.js.map +0 -7
  535. package/dist/lib/setup-steps.js.map +0 -7
  536. package/dist/lib/skills-loader.js.map +0 -7
  537. package/dist/lib/statusline-shim.js.map +0 -7
  538. package/dist/lib/telemetry.js.map +0 -7
  539. package/dist/lib/terminal-target-heartbeat.js.map +0 -7
  540. package/dist/lib/tmux.js.map +0 -7
  541. package/dist/lib/transcript-rate-limit-watcher.js.map +0 -7
  542. package/dist/lib/types.js.map +0 -7
  543. package/dist/lib/version-check.js.map +0 -7
  544. package/dist/lib/which.js.map +0 -7
  545. package/dist/lib/worktree.js.map +0 -7
  546. package/dist/opencode-IQ7X5YMJ.js +0 -190
  547. package/dist/opencode-IQ7X5YMJ.js.map +0 -7
@@ -1,74 +0,0 @@
1
- import {
2
- DIM
3
- } from "./chunk-QJQS6TUN.js";
4
-
5
- // src/dashboard/panels/shared.tsx
6
- import { Box, Text } from "ink";
7
- import { jsx, jsxs } from "react/jsx-runtime";
8
- function Panel({ title, color, children, width }) {
9
- return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: color, paddingX: 1, width, overflowX: "hidden", children: [
10
- /* @__PURE__ */ jsx(Text, { bold: true, color, children: title }),
11
- children
12
- ] });
13
- }
14
- function gradientColor(pct) {
15
- const r = pct <= 0.5 ? Math.round(91 + pct * 2 * (255 - 91)) : 255;
16
- const g = pct <= 0.5 ? Math.round(158 + pct * 2 * (200 - 158)) : Math.round(200 - (pct - 0.5) * 2 * (200 - 91));
17
- const b = pct <= 0.5 ? Math.round(245 - pct * 2 * (245 - 91)) : 91;
18
- return `#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`;
19
- }
20
- function HBar({ value, max, width }) {
21
- if (max === 0) return /* @__PURE__ */ jsx(Text, { color: DIM, children: "\u2591".repeat(width) });
22
- const filled = Math.round(value / max * width);
23
- const fillChars = [];
24
- for (let i = 0; i < Math.min(filled, width); i++) {
25
- fillChars.push(/* @__PURE__ */ jsx(Text, { color: gradientColor(i / width), children: "\u2588" }, i));
26
- }
27
- return /* @__PURE__ */ jsxs(Text, { children: [
28
- fillChars,
29
- /* @__PURE__ */ jsx(Text, { color: "#333333", children: "\u2591".repeat(Math.max(width - filled, 0)) })
30
- ] });
31
- }
32
- function fit(s, n) {
33
- return s.length > n ? s.slice(0, n) : s.padEnd(n);
34
- }
35
- function formatTokens(n) {
36
- if (n >= 1e9) return `${(n / 1e9).toFixed(1)}B`;
37
- if (n >= 1e6) return `${(n / 1e6).toFixed(1)}M`;
38
- if (n >= 1e3) return `${(n / 1e3).toFixed(0)}K`;
39
- return String(n);
40
- }
41
- function formatCost(usd) {
42
- if (usd >= 1e3) return `$${(usd / 1e3).toFixed(1)}K`;
43
- if (usd >= 1) return `$${usd.toFixed(2)}`;
44
- if (usd >= 0.01) return `$${usd.toFixed(2)}`;
45
- return `$${usd.toFixed(3)}`;
46
- }
47
- var FRIENDLY_LABELS = {
48
- fully_achieved: "Fully Achieved",
49
- mostly_achieved: "Mostly Achieved",
50
- partially_achieved: "Partially Achieved",
51
- not_achieved: "Not Achieved",
52
- unclear_from_transcript: "Unclear",
53
- misunderstood_request: "Misunderstood Request",
54
- wrong_approach: "Wrong Approach",
55
- buggy_code: "Buggy Code",
56
- user_rejected_action: "User Rejected",
57
- excessive_changes: "Excessive Changes",
58
- wrong_file_or_location: "Wrong File/Location",
59
- slow_or_verbose: "Slow/Verbose",
60
- tool_failed: "Tool Failed"
61
- };
62
- function friendlyLabel(key) {
63
- return FRIENDLY_LABELS[key] || key.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
64
- }
65
-
66
- export {
67
- Panel,
68
- HBar,
69
- fit,
70
- formatTokens,
71
- formatCost,
72
- friendlyLabel
73
- };
74
- //# sourceMappingURL=chunk-DQ3KELXD.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/dashboard/panels/shared.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport { Box, Text } from 'ink';\nimport { DIM } from '../types.js';\n\nexport function Panel({ title, color, children, width }: {\n title: string; color: string; children: React.ReactNode; width: number;\n}) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={color} paddingX={1} width={width} overflowX=\"hidden\">\n <Text bold color={color}>{title}</Text>\n {children}\n </Box>\n );\n}\n\nfunction gradientColor(pct: number): string {\n const r = pct <= 0.5 ? Math.round(91 + pct * 2 * (255 - 91)) : 255;\n const g = pct <= 0.5 ? Math.round(158 + pct * 2 * (200 - 158)) : Math.round(200 - (pct - 0.5) * 2 * (200 - 91));\n const b = pct <= 0.5 ? Math.round(245 - pct * 2 * (245 - 91)) : 91;\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\nexport function HBar({ value, max, width }: { value: number; max: number; width: number }) {\n if (max === 0) return <Text color={DIM}>{'\u2591'.repeat(width)}</Text>;\n const filled = Math.round((value / max) * width);\n const fillChars: React.ReactNode[] = [];\n for (let i = 0; i < Math.min(filled, width); i++) {\n fillChars.push(<Text key={i} color={gradientColor(i / width)}>{'\u2588'}</Text>);\n }\n return (\n <Text>\n {fillChars}\n <Text color=\"#333333\">{'\u2591'.repeat(Math.max(width - filled, 0))}</Text>\n </Text>\n );\n}\n\nexport function fit(s: string, n: number): string {\n return s.length > n ? s.slice(0, n) : s.padEnd(n);\n}\n\nexport function formatTokens(n: number): string {\n if (n >= 1_000_000_000) return `${(n / 1_000_000_000).toFixed(1)}B`;\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(0)}K`;\n return String(n);\n}\n\nexport function formatCost(usd: number): string {\n if (usd >= 1000) return `$${(usd / 1000).toFixed(1)}K`;\n if (usd >= 1) return `$${usd.toFixed(2)}`;\n if (usd >= 0.01) return `$${usd.toFixed(2)}`;\n return `$${usd.toFixed(3)}`;\n}\n\nconst FRIENDLY_LABELS: Record<string, string> = {\n fully_achieved: 'Fully Achieved',\n mostly_achieved: 'Mostly Achieved',\n partially_achieved: 'Partially Achieved',\n not_achieved: 'Not Achieved',\n unclear_from_transcript: 'Unclear',\n misunderstood_request: 'Misunderstood Request',\n wrong_approach: 'Wrong Approach',\n buggy_code: 'Buggy Code',\n user_rejected_action: 'User Rejected',\n excessive_changes: 'Excessive Changes',\n wrong_file_or_location: 'Wrong File/Location',\n slow_or_verbose: 'Slow/Verbose',\n tool_failed: 'Tool Failed',\n};\n\nexport function friendlyLabel(key: string): string {\n return FRIENDLY_LABELS[key] || key.replace(/_/g, ' ').replace(/\\b\\w/g, c => c.toUpperCase());\n}\n"],
5
- "mappings": ";;;;;AACA,SAAS,KAAK,YAAY;AAOtB,SACE,KADF;AAJG,SAAS,MAAM,EAAE,OAAO,OAAO,UAAU,MAAM,GAEnD;AACD,SACE,qBAAC,OAAI,eAAc,UAAS,aAAY,SAAQ,aAAa,OAAO,UAAU,GAAG,OAAc,WAAU,UACvG;AAAA,wBAAC,QAAK,MAAI,MAAC,OAAe,iBAAM;AAAA,IAC/B;AAAA,KACH;AAEJ;AAEA,SAAS,cAAc,KAAqB;AAC1C,QAAM,IAAI,OAAO,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,GAAG,IAAI;AAC/D,QAAM,IAAI,OAAO,MAAM,KAAK,MAAM,MAAM,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,OAAO,MAAM,OAAO,KAAK,MAAM,GAAG;AAC9G,QAAM,IAAI,OAAO,MAAM,KAAK,MAAM,MAAM,MAAM,KAAK,MAAM,GAAG,IAAI;AAChE,SAAO,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AAChH;AAEO,SAAS,KAAK,EAAE,OAAO,KAAK,MAAM,GAAkD;AACzF,MAAI,QAAQ,EAAG,QAAO,oBAAC,QAAK,OAAO,KAAM,mBAAI,OAAO,KAAK,GAAE;AAC3D,QAAM,SAAS,KAAK,MAAO,QAAQ,MAAO,KAAK;AAC/C,QAAM,YAA+B,CAAC;AACtC,WAAS,IAAI,GAAG,IAAI,KAAK,IAAI,QAAQ,KAAK,GAAG,KAAK;AAChD,cAAU,KAAK,oBAAC,QAAa,OAAO,cAAc,IAAI,KAAK,GAAI,sBAArC,CAAyC,CAAO;AAAA,EAC5E;AACA,SACE,qBAAC,QACE;AAAA;AAAA,IACD,oBAAC,QAAK,OAAM,WAAW,mBAAI,OAAO,KAAK,IAAI,QAAQ,QAAQ,CAAC,CAAC,GAAE;AAAA,KACjE;AAEJ;AAEO,SAAS,IAAI,GAAW,GAAmB;AAChD,SAAO,EAAE,SAAS,IAAI,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AAClD;AAEO,SAAS,aAAa,GAAmB;AAC9C,MAAI,KAAK,IAAe,QAAO,IAAI,IAAI,KAAe,QAAQ,CAAC,CAAC;AAChE,MAAI,KAAK,IAAW,QAAO,IAAI,IAAI,KAAW,QAAQ,CAAC,CAAC;AACxD,MAAI,KAAK,IAAO,QAAO,IAAI,IAAI,KAAO,QAAQ,CAAC,CAAC;AAChD,SAAO,OAAO,CAAC;AACjB;AAEO,SAAS,WAAW,KAAqB;AAC9C,MAAI,OAAO,IAAM,QAAO,KAAK,MAAM,KAAM,QAAQ,CAAC,CAAC;AACnD,MAAI,OAAO,EAAG,QAAO,IAAI,IAAI,QAAQ,CAAC,CAAC;AACvC,MAAI,OAAO,KAAM,QAAO,IAAI,IAAI,QAAQ,CAAC,CAAC;AAC1C,SAAO,IAAI,IAAI,QAAQ,CAAC,CAAC;AAC3B;AAEA,IAAM,kBAA0C;AAAA,EAC9C,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,yBAAyB;AAAA,EACzB,uBAAuB;AAAA,EACvB,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,iBAAiB;AAAA,EACjB,aAAa;AACf;AAEO,SAAS,cAAc,KAAqB;AACjD,SAAO,gBAAgB,GAAG,KAAK,IAAI,QAAQ,MAAM,GAAG,EAAE,QAAQ,SAAS,OAAK,EAAE,YAAY,CAAC;AAC7F;",
6
- "names": []
7
- }
@@ -1,122 +0,0 @@
1
- import {
2
- announceableEntries,
3
- parseChangelog
4
- } from "./chunk-E3BIT53W.js";
5
- import {
6
- renderChangelogAnnouncement
7
- } from "./chunk-QSN77T7C.js";
8
- import {
9
- announcements,
10
- getDb
11
- } from "./chunk-EI5BHWXA.js";
12
-
13
- // src/lib/handlers/process-changelog.ts
14
- import * as fs from "node:fs/promises";
15
- import * as path from "node:path";
16
- import { eq } from "drizzle-orm";
17
- async function findRepoRoot(start) {
18
- let dir = start;
19
- for (let i = 0; i < 50; i++) {
20
- try {
21
- await fs.stat(path.join(dir, "pnpm-workspace.yaml"));
22
- return dir;
23
- } catch {
24
- }
25
- const parent = path.dirname(dir);
26
- if (parent === dir) return null;
27
- dir = parent;
28
- }
29
- return null;
30
- }
31
- async function readChangelog(explicitPath) {
32
- if (explicitPath) {
33
- try {
34
- return await fs.readFile(explicitPath, "utf-8");
35
- } catch {
36
- return null;
37
- }
38
- }
39
- const root = await findRepoRoot(process.cwd()) ?? process.cwd();
40
- const p = path.join(root, "CHANGELOG.md");
41
- try {
42
- return await fs.readFile(p, "utf-8");
43
- } catch {
44
- return null;
45
- }
46
- }
47
- var PRODUCT_URL = "https://rulemetric.com";
48
- function renderRow(entry) {
49
- const date = entry.date ?? (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
50
- const rendered = renderChangelogAnnouncement({
51
- version: entry.version,
52
- date,
53
- sections: entry.sections,
54
- unsubscribeUrl: "{{unsubscribe_url}}",
55
- productUrl: PRODUCT_URL
56
- });
57
- return {
58
- version: entry.version,
59
- releaseDate: date,
60
- subject: rendered.subject,
61
- htmlBody: rendered.html,
62
- textBody: rendered.text,
63
- sections: entry.sections
64
- };
65
- }
66
- async function processChangelog(deps = {}) {
67
- const db = deps.db ?? getDb();
68
- const logger = deps.logger ?? {
69
- info: (m) => console.log(m),
70
- warn: (m) => console.warn(m)
71
- };
72
- const md = await readChangelog(deps.changelogPath);
73
- if (md === null) {
74
- logger.info("[cron_check_changelog] CHANGELOG.md not found; nothing to do");
75
- return { createdCount: 0, skippedCount: 0 };
76
- }
77
- const parsed = parseChangelog(md);
78
- const entries = announceableEntries(parsed);
79
- if (entries.length === 0) {
80
- logger.info("[cron_check_changelog] No announceable entries; nothing to do");
81
- return { createdCount: 0, skippedCount: 0 };
82
- }
83
- let createdCount = 0;
84
- let skippedCount = 0;
85
- for (const entry of entries) {
86
- const existing = await db.select({ id: announcements.id }).from(announcements).where(eq(announcements.version, entry.version)).limit(1);
87
- if (existing.length > 0) {
88
- skippedCount++;
89
- continue;
90
- }
91
- const row = renderRow(entry);
92
- try {
93
- await db.insert(announcements).values({
94
- version: row.version,
95
- releaseDate: row.releaseDate,
96
- subject: row.subject,
97
- htmlBody: row.htmlBody,
98
- textBody: row.textBody,
99
- sections: row.sections,
100
- status: "draft"
101
- });
102
- createdCount++;
103
- logger.info(`[cron_check_changelog] Created draft announcement for ${row.version}`);
104
- } catch (err) {
105
- const msg = err instanceof Error ? err.message : String(err);
106
- if (/duplicate key|unique/i.test(msg)) {
107
- skippedCount++;
108
- continue;
109
- }
110
- throw err;
111
- }
112
- }
113
- logger.info(
114
- `[cron_check_changelog] Done: created ${createdCount}, skipped ${skippedCount}`
115
- );
116
- return { createdCount, skippedCount };
117
- }
118
-
119
- export {
120
- processChangelog
121
- };
122
- //# sourceMappingURL=chunk-DUJSRBLP.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/lib/handlers/process-changelog.ts"],
4
- "sourcesContent": ["// Manual handler for `cron_check_changelog`. Reads CHANGELOG.md from the\n// repo root, parses it, and INSERTs one draft `announcements` row per new\n// release version. Idempotent \u2014 running twice in a row creates no\n// duplicates because we check existing rows by `version` (which is also\n// uniquely indexed in the DB).\n//\n// The handler does NOT email anyone and is not scheduled automatically.\n// It only creates `status='draft'` rows. The actual send is a separate\n// manual admin action that enqueues `process_announcement` jobs from the\n// admin UI.\n//\n// Why pure({db, logger}) instead of a worker Task signature: keeps the\n// unit tests trivial (no Graphile helpers to mock) and matches the\n// \"pure handler\" pattern called out in the design brief. The Task\n// adapter in cron-registry.ts wraps this with `wrapCronWithEnvelope`.\n\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { eq } from 'drizzle-orm';\nimport { announcements, getDb } from '@rulemetric/db';\nimport {\n parseChangelog,\n announceableEntries,\n type ChangelogEntry,\n} from '@rulemetric/core';\nimport { renderChangelogAnnouncement } from '@rulemetric/email';\n\nexport interface ProcessChangelogDeps {\n db?: any;\n logger?: { info: (msg: string) => void; warn: (msg: string) => void };\n /** Override the resolved CHANGELOG path for tests. */\n changelogPath?: string;\n}\n\nexport interface ProcessChangelogResult {\n createdCount: number;\n skippedCount: number;\n}\n\n/**\n * Walk up from `start` looking for a directory that contains\n * `pnpm-workspace.yaml`. Returns null if nothing matches before hitting\n * the filesystem root.\n */\nasync function findRepoRoot(start: string): Promise<string | null> {\n let dir = start;\n // Bound the walk to avoid infinite loops on broken cwds.\n for (let i = 0; i < 50; i++) {\n try {\n await fs.stat(path.join(dir, 'pnpm-workspace.yaml'));\n return dir;\n } catch {\n // not here, keep walking\n }\n const parent = path.dirname(dir);\n if (parent === dir) return null;\n dir = parent;\n }\n return null;\n}\n\n/**\n * Read CHANGELOG.md. Returns null when the file doesn't exist \u2014 the cron\n * must be a no-op on a fresh checkout (or in test environments where the\n * file may live outside cwd).\n */\nasync function readChangelog(explicitPath: string | undefined): Promise<string | null> {\n if (explicitPath) {\n try {\n return await fs.readFile(explicitPath, 'utf-8');\n } catch {\n return null;\n }\n }\n const root = (await findRepoRoot(process.cwd())) ?? process.cwd();\n const p = path.join(root, 'CHANGELOG.md');\n try {\n return await fs.readFile(p, 'utf-8');\n } catch {\n return null;\n }\n}\n\nconst PRODUCT_URL = 'https://rulemetric.com';\n\n/**\n * Render a draft announcement row from a parsed entry. The\n * `unsubscribeUrl` is left as a literal `{{unsubscribe_url}}` placeholder\n * \u2014 the per-recipient send handler (`process_announcement`) does the\n * actual substitution, so every recipient gets a unique tokenised URL.\n * Same idea for `recipientName`, which is undefined here.\n */\nfunction renderRow(entry: ChangelogEntry): {\n version: string;\n releaseDate: string;\n subject: string;\n htmlBody: string;\n textBody: string;\n sections: ChangelogEntry['sections'];\n} {\n // Entries returned by `announceableEntries` are guaranteed non-Unreleased\n // and have at least one non-empty section, but `date` may still be null\n // when the CHANGELOG heading omitted ` - YYYY-MM-DD`. Fall back to today\n // so we can still insert a draft (admin can correct before sending).\n const date = entry.date ?? new Date().toISOString().slice(0, 10);\n const rendered = renderChangelogAnnouncement({\n version: entry.version,\n date,\n sections: entry.sections,\n unsubscribeUrl: '{{unsubscribe_url}}',\n productUrl: PRODUCT_URL,\n });\n return {\n version: entry.version,\n releaseDate: date,\n subject: rendered.subject,\n htmlBody: rendered.html,\n textBody: rendered.text,\n sections: entry.sections,\n };\n}\n\n/**\n * The cron's actual work. Pure-ish: all side effects routed through the\n * injected `db` and `logger`, both of which default to real\n * implementations so a worker/manual-task wrapper can call this with no\n * arguments.\n */\nexport async function processChangelog(\n deps: ProcessChangelogDeps = {},\n): Promise<ProcessChangelogResult> {\n const db = deps.db ?? getDb();\n const logger = deps.logger ?? {\n info: (m: string) => console.log(m),\n warn: (m: string) => console.warn(m),\n };\n\n const md = await readChangelog(deps.changelogPath);\n if (md === null) {\n logger.info('[cron_check_changelog] CHANGELOG.md not found; nothing to do');\n return { createdCount: 0, skippedCount: 0 };\n }\n\n const parsed = parseChangelog(md);\n const entries = announceableEntries(parsed);\n if (entries.length === 0) {\n logger.info('[cron_check_changelog] No announceable entries; nothing to do');\n return { createdCount: 0, skippedCount: 0 };\n }\n\n let createdCount = 0;\n let skippedCount = 0;\n\n for (const entry of entries) {\n // Dedup by version. The DB also has a UNIQUE constraint on `version`\n // (see announcements schema), so even if two workers raced here the\n // second INSERT would fail loudly \u2014 but we'd rather skip silently.\n const existing = await db\n .select({ id: announcements.id })\n .from(announcements)\n .where(eq(announcements.version, entry.version))\n .limit(1);\n\n if (existing.length > 0) {\n skippedCount++;\n continue;\n }\n\n const row = renderRow(entry);\n try {\n await db.insert(announcements).values({\n version: row.version,\n releaseDate: row.releaseDate,\n subject: row.subject,\n htmlBody: row.htmlBody,\n textBody: row.textBody,\n sections: row.sections,\n status: 'draft',\n });\n createdCount++;\n logger.info(`[cron_check_changelog] Created draft announcement for ${row.version}`);\n } catch (err) {\n // Defensive: a UNIQUE-constraint race still counts as a skip, not a\n // failure. Anything else is unexpected \u2014 re-throw so the worker\n // retries.\n const msg = err instanceof Error ? err.message : String(err);\n if (/duplicate key|unique/i.test(msg)) {\n skippedCount++;\n continue;\n }\n throw err;\n }\n }\n\n logger.info(\n `[cron_check_changelog] Done: created ${createdCount}, skipped ${skippedCount}`,\n );\n return { createdCount, skippedCount };\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,154 +0,0 @@
1
- // ../../packages/core/dist/llm/recommend.js
2
- function buildRecommendationPrompt(project, candidates) {
3
- const candidateList = candidates.map((c) => `- ID: ${c.id}
4
- Name: ${c.name}
5
- Description: ${c.description}
6
- Tags: ${c.tags.join(", ")}
7
- Preview: ${c.contentPreview}`).join("\n\n");
8
- return `You are an expert at matching AI coding instructions to software projects.
9
-
10
- ## Project
11
- - Name: ${project.name}
12
- - Description: ${project.description ?? "No description"}
13
- - Languages: ${project.languages.join(", ") || "Unknown"}
14
- - Topics: ${project.topics.join(", ") || "None"}
15
- - Dependencies: ${project.dependencies.join(", ") || "None"}
16
-
17
- ## Available Instructions
18
-
19
- ${candidateList}
20
-
21
- ## Task
22
-
23
- Analyze the project and recommend which instructions would be most useful. Consider:
24
- 1. Language and framework alignment
25
- 2. Project purpose and what standards/practices would help
26
- 3. Security, testing, and quality needs based on the project type
27
-
28
- Return your response as JSON in this exact format:
29
- {
30
- "recommendations": [
31
- { "instructionId": "<id>", "score": <0.0-1.0>, "reason": "<one sentence explanation>" }
32
- ]
33
- }
34
-
35
- Only include instructions with a relevance score >= 0.5. Order by score descending. Return valid JSON only, no markdown fences.`;
36
- }
37
-
38
- // ../../packages/core/dist/changelog/parse.js
39
- var KNOWN_SECTIONS = [
40
- "Added",
41
- "Changed",
42
- "Fixed",
43
- "Removed",
44
- "Deprecated",
45
- "Security"
46
- ];
47
- var VERSION_HEADING = /^##\s+\[([^\]]+)\](?:\s*[-–]\s*(\d{4}-\d{2}-\d{2}))?\s*$/;
48
- var SECTION_HEADING = /^###\s+(.+?)\s*$/;
49
- var LIST_ITEM = /^[-*]\s+(.*\S)\s*$/;
50
- var CONTINUATION = /^ {2,}(\S.*)$/;
51
- function parseChangelog(markdown) {
52
- const lines = markdown.split(/\r?\n/);
53
- const entries = [];
54
- let current = null;
55
- let currentSection = null;
56
- let lastItems = null;
57
- for (const raw of lines) {
58
- const versionMatch = raw.match(VERSION_HEADING);
59
- if (versionMatch) {
60
- if (current)
61
- entries.push(current);
62
- const version = versionMatch[1].trim();
63
- current = {
64
- version,
65
- date: versionMatch[2] ?? null,
66
- unreleased: version.toLowerCase() === "unreleased",
67
- sections: {}
68
- };
69
- currentSection = null;
70
- lastItems = null;
71
- continue;
72
- }
73
- if (!current)
74
- continue;
75
- const sectionMatch = raw.match(SECTION_HEADING);
76
- if (sectionMatch) {
77
- const name = sectionMatch[1].trim();
78
- if (KNOWN_SECTIONS.includes(name)) {
79
- currentSection = name;
80
- if (!current.sections[currentSection]) {
81
- current.sections[currentSection] = [];
82
- }
83
- lastItems = current.sections[currentSection];
84
- } else {
85
- currentSection = null;
86
- lastItems = null;
87
- }
88
- continue;
89
- }
90
- if (!currentSection || !lastItems)
91
- continue;
92
- const itemMatch = raw.match(LIST_ITEM);
93
- if (itemMatch) {
94
- lastItems.push(itemMatch[1]);
95
- continue;
96
- }
97
- const contMatch = raw.match(CONTINUATION);
98
- if (contMatch && lastItems.length > 0) {
99
- lastItems[lastItems.length - 1] += " " + contMatch[1].trim();
100
- continue;
101
- }
102
- }
103
- if (current)
104
- entries.push(current);
105
- return { entries };
106
- }
107
- function announceableEntries(parsed) {
108
- return parsed.entries.filter((e) => {
109
- if (e.unreleased)
110
- return false;
111
- return Object.values(e.sections).some((items) => items && items.length > 0);
112
- });
113
- }
114
-
115
- // ../../packages/core/dist/types/instruction.js
116
- import { z } from "zod";
117
- var INSTRUCTION_SCOPES = ["org", "team", "project", "personal"];
118
- var instructionFrontmatterSchema = z.object({
119
- name: z.string().min(1),
120
- description: z.string().min(1),
121
- type: z.literal("instruction").default("instruction"),
122
- scope: z.enum(INSTRUCTION_SCOPES),
123
- version: z.string().min(1),
124
- tags: z.array(z.string()).optional(),
125
- compatibility: z.array(z.string()).optional(),
126
- slots: z.record(z.string(), z.string()).optional(),
127
- metadata: z.record(z.string(), z.unknown()).optional()
128
- });
129
-
130
- // ../../packages/core/dist/types/prompt.js
131
- import { z as z2 } from "zod";
132
- var promptFrontmatterSchema = z2.object({
133
- name: z2.string().min(1),
134
- description: z2.string().min(1),
135
- type: z2.literal("prompt"),
136
- version: z2.string().min(1),
137
- tags: z2.array(z2.string()).optional(),
138
- variables: z2.array(z2.string()).optional(),
139
- metadata: z2.record(z2.string(), z2.unknown()).optional()
140
- });
141
-
142
- // ../../packages/core/dist/parser/frontmatter-parser.js
143
- import matter from "gray-matter";
144
- import { z as z3 } from "zod";
145
- var typeDetectorSchema = z3.object({
146
- type: z3.enum(["instruction", "prompt"])
147
- });
148
-
149
- export {
150
- buildRecommendationPrompt,
151
- parseChangelog,
152
- announceableEntries
153
- };
154
- //# sourceMappingURL=chunk-E3BIT53W.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../packages/core/src/llm/recommend.ts", "../../../packages/core/src/changelog/parse.ts", "../../../packages/core/src/types/instruction.ts", "../../../packages/core/src/types/prompt.ts", "../../../packages/core/src/parser/frontmatter-parser.ts"],
4
- "sourcesContent": ["import type { ProjectContext, InstructionCandidate, Recommendation } from './types.js';\n\nexport function buildRecommendationPrompt(project: ProjectContext, candidates: InstructionCandidate[]): string {\n const candidateList = candidates\n .map((c) => `- ID: ${c.id}\\n Name: ${c.name}\\n Description: ${c.description}\\n Tags: ${c.tags.join(', ')}\\n Preview: ${c.contentPreview}`)\n .join('\\n\\n');\n\n return `You are an expert at matching AI coding instructions to software projects.\n\n## Project\n- Name: ${project.name}\n- Description: ${project.description ?? 'No description'}\n- Languages: ${project.languages.join(', ') || 'Unknown'}\n- Topics: ${project.topics.join(', ') || 'None'}\n- Dependencies: ${project.dependencies.join(', ') || 'None'}\n\n## Available Instructions\n\n${candidateList}\n\n## Task\n\nAnalyze the project and recommend which instructions would be most useful. Consider:\n1. Language and framework alignment\n2. Project purpose and what standards/practices would help\n3. Security, testing, and quality needs based on the project type\n\nReturn your response as JSON in this exact format:\n{\n \"recommendations\": [\n { \"instructionId\": \"<id>\", \"score\": <0.0-1.0>, \"reason\": \"<one sentence explanation>\" }\n ]\n}\n\nOnly include instructions with a relevance score >= 0.5. Order by score descending. Return valid JSON only, no markdown fences.`;\n}\n\nexport function parseRecommendationResponse(response: string): Recommendation[] {\n try {\n // Try to extract JSON from the response (handle markdown fences if present)\n const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) return [];\n\n const parsed = JSON.parse(jsonMatch[0]);\n if (!parsed.recommendations || !Array.isArray(parsed.recommendations)) return [];\n\n return parsed.recommendations.filter(\n (r: Record<string, unknown>) =>\n typeof r.instructionId === 'string' &&\n typeof r.score === 'number' &&\n typeof r.reason === 'string',\n ) as Recommendation[];\n } catch {\n return [];\n }\n}\n", "// Keep-a-Changelog parser. Pure function, no I/O.\n//\n// Grammar (the strict subset we accept):\n//\n// # Changelog\n// (any prose / front-matter before the first `## [` heading is ignored)\n//\n// ## [Unreleased]\n// ### Added\n// - item one\n// - item two\n//\n// ## [2026.06.05] - 2026-06-05\n// ### Added\n// - \u2026\n// ### Fixed\n// - \u2026\n//\n// Rules:\n// - Version headings MUST match `## [<version>]` with optional ` - <date>`.\n// - `[Unreleased]` is parsed but flagged so callers can skip it.\n// - Section headings MUST be `### <Name>` where Name is one of the\n// KNOWN_SECTIONS set. Unknown sections are dropped silently so a stray\n// `### Notes` doesn't end up in a customer email.\n// - List items are `- `-prefixed lines. Multi-line items (continuation\n// lines indented by 2+ spaces) are joined with a single space.\n// - Anything outside a recognized list is discarded.\n\nexport const KNOWN_SECTIONS = [\n 'Added',\n 'Changed',\n 'Fixed',\n 'Removed',\n 'Deprecated',\n 'Security',\n] as const;\n\nexport type SectionName = (typeof KNOWN_SECTIONS)[number];\n\nexport interface ChangelogEntry {\n /** Verbatim version string from the heading, e.g. \"2026.06.05\" or \"Unreleased\". */\n version: string;\n /** ISO date (YYYY-MM-DD) parsed from the heading. Null for Unreleased or when omitted. */\n date: string | null;\n /** True iff version === \"Unreleased\" (case-insensitive). */\n unreleased: boolean;\n /** Section name \u2192 list of items, preserving heading order. */\n sections: Partial<Record<SectionName, string[]>>;\n}\n\nexport interface ParsedChangelog {\n entries: ChangelogEntry[];\n}\n\nconst VERSION_HEADING = /^##\\s+\\[([^\\]]+)\\](?:\\s*[-\u2013]\\s*(\\d{4}-\\d{2}-\\d{2}))?\\s*$/;\nconst SECTION_HEADING = /^###\\s+(.+?)\\s*$/;\nconst LIST_ITEM = /^[-*]\\s+(.*\\S)\\s*$/;\nconst CONTINUATION = /^ {2,}(\\S.*)$/;\n\nexport function parseChangelog(markdown: string): ParsedChangelog {\n const lines = markdown.split(/\\r?\\n/);\n const entries: ChangelogEntry[] = [];\n let current: ChangelogEntry | null = null;\n let currentSection: SectionName | null = null;\n let lastItems: string[] | null = null;\n\n for (const raw of lines) {\n const versionMatch = raw.match(VERSION_HEADING);\n if (versionMatch) {\n if (current) entries.push(current);\n const version = versionMatch[1].trim();\n current = {\n version,\n date: versionMatch[2] ?? null,\n unreleased: version.toLowerCase() === 'unreleased',\n sections: {},\n };\n currentSection = null;\n lastItems = null;\n continue;\n }\n\n if (!current) continue;\n\n const sectionMatch = raw.match(SECTION_HEADING);\n if (sectionMatch) {\n const name = sectionMatch[1].trim();\n if ((KNOWN_SECTIONS as readonly string[]).includes(name)) {\n currentSection = name as SectionName;\n if (!current.sections[currentSection]) {\n current.sections[currentSection] = [];\n }\n lastItems = current.sections[currentSection]!;\n } else {\n currentSection = null;\n lastItems = null;\n }\n continue;\n }\n\n if (!currentSection || !lastItems) continue;\n\n const itemMatch = raw.match(LIST_ITEM);\n if (itemMatch) {\n lastItems.push(itemMatch[1]);\n continue;\n }\n\n const contMatch = raw.match(CONTINUATION);\n if (contMatch && lastItems.length > 0) {\n lastItems[lastItems.length - 1] += ' ' + contMatch[1].trim();\n continue;\n }\n\n // Blank line or unrelated content \u2014 terminates continuation for the\n // previous item but doesn't close the section.\n }\n\n if (current) entries.push(current);\n return { entries };\n}\n\n/**\n * Filter to entries worth announcing: skip `[Unreleased]` and any entry\n * whose sections are all empty. Caller does dedup against the DB.\n */\nexport function announceableEntries(parsed: ParsedChangelog): ChangelogEntry[] {\n return parsed.entries.filter((e) => {\n if (e.unreleased) return false;\n return Object.values(e.sections).some((items) => items && items.length > 0);\n });\n}\n", "import { z } from 'zod';\n\nexport const INSTRUCTION_SCOPES = ['org', 'team', 'project', 'personal'] as const;\nexport type InstructionScope = (typeof INSTRUCTION_SCOPES)[number];\n\nexport const instructionFrontmatterSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n type: z.literal('instruction').default('instruction'),\n scope: z.enum(INSTRUCTION_SCOPES),\n version: z.string().min(1),\n tags: z.array(z.string()).optional(),\n compatibility: z.array(z.string()).optional(),\n slots: z.record(z.string(), z.string()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type InstructionFrontmatter = z.infer<typeof instructionFrontmatterSchema>;\n\nexport interface Instruction {\n id: string;\n name: string;\n description: string;\n type: 'instruction';\n scope: InstructionScope;\n scopeRef: string | null;\n version: string;\n content: string;\n frontmatter: InstructionFrontmatter;\n slots: Record<string, string> | null;\n tags: string[];\n compatibility: string[];\n createdBy: string;\n createdAt: Date;\n updatedAt: Date;\n archived: boolean;\n}\n\nexport interface CreateInstructionInput {\n name: string;\n description: string;\n scope: InstructionScope;\n scopeRef?: string;\n version: string;\n content: string;\n tags?: string[];\n compatibility?: string[];\n}\n", "import { z } from 'zod';\n\nexport const promptFrontmatterSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n type: z.literal('prompt'),\n version: z.string().min(1),\n tags: z.array(z.string()).optional(),\n variables: z.array(z.string()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type PromptFrontmatter = z.infer<typeof promptFrontmatterSchema>;\n\nexport interface Prompt {\n id: string;\n name: string;\n description: string;\n type: 'prompt';\n version: string;\n content: string;\n frontmatter: PromptFrontmatter;\n variables: string[];\n tags: string[];\n createdBy: string;\n createdAt: Date;\n updatedAt: Date;\n}\n", "import matter from 'gray-matter';\nimport { z } from 'zod';\nimport { instructionFrontmatterSchema, type InstructionFrontmatter } from '../types/instruction.js';\nimport { promptFrontmatterSchema, type PromptFrontmatter } from '../types/prompt.js';\n\nexport interface ParsedInstruction {\n frontmatter: InstructionFrontmatter;\n content: string;\n slots: Record<string, string> | null;\n}\n\nexport interface ParsedPrompt {\n frontmatter: PromptFrontmatter;\n content: string;\n}\n\nexport type ParseResult =\n | { type: 'instruction'; data: ParsedInstruction }\n | { type: 'prompt'; data: ParsedPrompt };\n\nconst typeDetectorSchema = z.object({\n type: z.enum(['instruction', 'prompt']),\n});\n\nexport function parseInstruction(raw: string): ParsedInstruction {\n const { data, content } = matter(raw);\n const frontmatter = instructionFrontmatterSchema.parse(data);\n const slots = frontmatter.slots ?? null;\n\n return {\n frontmatter,\n content: content.trim(),\n slots,\n };\n}\n\nexport function parsePrompt(raw: string): ParsedPrompt {\n const { data, content } = matter(raw);\n const frontmatter = promptFrontmatterSchema.parse(data);\n\n return {\n frontmatter,\n content: content.trim(),\n };\n}\n\nexport function parse(raw: string): ParseResult {\n const { data } = matter(raw);\n const { type } = typeDetectorSchema.parse(data);\n\n if (type === 'instruction') {\n return { type: 'instruction', data: parseInstruction(raw) };\n }\n\n return { type: 'prompt', data: parsePrompt(raw) };\n}\n"],
5
- "mappings": "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",
6
- "names": ["z", "z", "z"]
7
- }
@@ -1,22 +0,0 @@
1
- // src/lib/capture-hosts.ts
2
- import { readFileSync } from "node:fs";
3
- import { join } from "node:path";
4
- function buildAllowHostsArgs(addonDir, env = process.env) {
5
- if (env.RULEMETRIC_PROXY_ALL_HOSTS === "1") return [];
6
- let patterns;
7
- try {
8
- patterns = JSON.parse(readFileSync(join(addonDir, "allow_hosts.json"), "utf-8")).allow;
9
- } catch {
10
- return [];
11
- }
12
- if (!Array.isArray(patterns) || patterns.length === 0) return [];
13
- const valid = patterns.filter((p) => typeof p === "string" && p.length > 0);
14
- if (valid.length === 0) return [];
15
- const extra = (env.RULEMETRIC_PROXY_EXTRA_HOSTS ?? "").split(",").map((s) => s.trim()).filter(Boolean);
16
- return [...valid, ...extra].flatMap((p) => ["--allow-hosts", p]);
17
- }
18
-
19
- export {
20
- buildAllowHostsArgs
21
- };
22
- //# sourceMappingURL=chunk-EARWG4EV.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/lib/capture-hosts.ts"],
4
- "sourcesContent": ["import { readFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\n/**\n * Build the `--allow-hosts` args that scope mitmproxy interception to the\n * hosts the addon can actually capture (LLM provider APIs). Everything else\n * is TUNNELED untouched \u2014 no TLS interception, no CA involvement \u2014 so\n * bundled-CA tools (pip/certifi, gcloud, node without NODE_EXTRA_CA_CERTS)\n * keep working while the machine-wide HTTPS_PROXY is pinned.\n *\n * The canonical pattern list lives in the addon package\n * (`addon/allow_hosts.json`) so the pytest sync-guard there can enforce it\n * covers every `detect_provider()` host \u2014 the CLI only transports it.\n *\n * Escape hatches:\n * RULEMETRIC_PROXY_ALL_HOSTS=1 \u2192 intercept everything (required for the\n * generic OpenAI-compatible catch-all on arbitrary self-hosted domains)\n * RULEMETRIC_PROXY_EXTRA_HOSTS=a,b \u2192 extra host:port regexes appended\n *\n * Failure mode: a missing/corrupt manifest returns [] (intercept everything,\n * the pre-scoping behavior). Tunneling-by-default on a broken read would\n * silently kill ALL capture \u2014 strictly worse than the old blast radius.\n */\nexport function buildAllowHostsArgs(\n addonDir: string,\n env: NodeJS.ProcessEnv = process.env,\n): string[] {\n if (env.RULEMETRIC_PROXY_ALL_HOSTS === '1') return [];\n\n let patterns: unknown;\n try {\n patterns = (\n JSON.parse(readFileSync(join(addonDir, 'allow_hosts.json'), 'utf-8')) as {\n allow?: unknown;\n }\n ).allow;\n } catch {\n return [];\n }\n if (!Array.isArray(patterns) || patterns.length === 0) return [];\n const valid = patterns.filter((p): p is string => typeof p === 'string' && p.length > 0);\n if (valid.length === 0) return [];\n\n const extra = (env.RULEMETRIC_PROXY_EXTRA_HOSTS ?? '')\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n\n return [...valid, ...extra].flatMap((p) => ['--allow-hosts', p]);\n}\n"],
5
- "mappings": ";AAAA,SAAS,oBAAoB;AAC7B,SAAS,YAAY;AAsBd,SAAS,oBACd,UACA,MAAyB,QAAQ,KACvB;AACV,MAAI,IAAI,+BAA+B,IAAK,QAAO,CAAC;AAEpD,MAAI;AACJ,MAAI;AACF,eACE,KAAK,MAAM,aAAa,KAAK,UAAU,kBAAkB,GAAG,OAAO,CAAC,EAGpE;AAAA,EACJ,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACA,MAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,EAAG,QAAO,CAAC;AAC/D,QAAM,QAAQ,SAAS,OAAO,CAAC,MAAmB,OAAO,MAAM,YAAY,EAAE,SAAS,CAAC;AACvF,MAAI,MAAM,WAAW,EAAG,QAAO,CAAC;AAEhC,QAAM,SAAS,IAAI,gCAAgC,IAChD,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AAEjB,SAAO,CAAC,GAAG,OAAO,GAAG,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACjE;",
6
- "names": []
7
- }