@rulemetric/cli 0.1.1

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 (416) hide show
  1. package/bin/dev.js +3 -0
  2. package/bin/run.js +3 -0
  3. package/dist/base-command.d.ts +12 -0
  4. package/dist/base-command.d.ts.map +1 -0
  5. package/dist/base-command.js +37 -0
  6. package/dist/base-command.js.map +1 -0
  7. package/dist/commands/auth/create-key.d.ts +11 -0
  8. package/dist/commands/auth/create-key.d.ts.map +1 -0
  9. package/dist/commands/auth/create-key.js +34 -0
  10. package/dist/commands/auth/create-key.js.map +1 -0
  11. package/dist/commands/auth/login.d.ts +11 -0
  12. package/dist/commands/auth/login.d.ts.map +1 -0
  13. package/dist/commands/auth/login.js +40 -0
  14. package/dist/commands/auth/login.js.map +1 -0
  15. package/dist/commands/auth/logout.d.ts +7 -0
  16. package/dist/commands/auth/logout.d.ts.map +1 -0
  17. package/dist/commands/auth/logout.js +13 -0
  18. package/dist/commands/auth/logout.js.map +1 -0
  19. package/dist/commands/auth/revoke-key.d.ts +10 -0
  20. package/dist/commands/auth/revoke-key.d.ts.map +1 -0
  21. package/dist/commands/auth/revoke-key.js +18 -0
  22. package/dist/commands/auth/revoke-key.js.map +1 -0
  23. package/dist/commands/auth/status.d.ts +7 -0
  24. package/dist/commands/auth/status.d.ts.map +1 -0
  25. package/dist/commands/auth/status.js +23 -0
  26. package/dist/commands/auth/status.js.map +1 -0
  27. package/dist/commands/catalog/index.d.ts +11 -0
  28. package/dist/commands/catalog/index.d.ts.map +1 -0
  29. package/dist/commands/catalog/index.js +35 -0
  30. package/dist/commands/catalog/index.js.map +1 -0
  31. package/dist/commands/catalog/recommend.d.ts +9 -0
  32. package/dist/commands/catalog/recommend.d.ts.map +1 -0
  33. package/dist/commands/catalog/recommend.js +27 -0
  34. package/dist/commands/catalog/recommend.js.map +1 -0
  35. package/dist/commands/convert.d.ts +15 -0
  36. package/dist/commands/convert.d.ts.map +1 -0
  37. package/dist/commands/convert.js +55 -0
  38. package/dist/commands/convert.js.map +1 -0
  39. package/dist/commands/converters.d.ts +12 -0
  40. package/dist/commands/converters.d.ts.map +1 -0
  41. package/dist/commands/converters.js +39 -0
  42. package/dist/commands/converters.js.map +1 -0
  43. package/dist/commands/dashboard.d.ts +10 -0
  44. package/dist/commands/dashboard.d.ts.map +1 -0
  45. package/dist/commands/dashboard.js +24 -0
  46. package/dist/commands/dashboard.js.map +1 -0
  47. package/dist/commands/eval-targets/create.d.ts +14 -0
  48. package/dist/commands/eval-targets/create.d.ts.map +1 -0
  49. package/dist/commands/eval-targets/create.js +40 -0
  50. package/dist/commands/eval-targets/create.js.map +1 -0
  51. package/dist/commands/eval-targets/list.d.ts +10 -0
  52. package/dist/commands/eval-targets/list.d.ts.map +1 -0
  53. package/dist/commands/eval-targets/list.js +36 -0
  54. package/dist/commands/eval-targets/list.js.map +1 -0
  55. package/dist/commands/evals/benchmark.d.ts +13 -0
  56. package/dist/commands/evals/benchmark.d.ts.map +1 -0
  57. package/dist/commands/evals/benchmark.js +53 -0
  58. package/dist/commands/evals/benchmark.js.map +1 -0
  59. package/dist/commands/evals/compare.d.ts +15 -0
  60. package/dist/commands/evals/compare.d.ts.map +1 -0
  61. package/dist/commands/evals/compare.js +101 -0
  62. package/dist/commands/evals/compare.js.map +1 -0
  63. package/dist/commands/evals/create.d.ts +17 -0
  64. package/dist/commands/evals/create.d.ts.map +1 -0
  65. package/dist/commands/evals/create.js +52 -0
  66. package/dist/commands/evals/create.js.map +1 -0
  67. package/dist/commands/evals/listen.d.ts +11 -0
  68. package/dist/commands/evals/listen.d.ts.map +1 -0
  69. package/dist/commands/evals/listen.js +54 -0
  70. package/dist/commands/evals/listen.js.map +1 -0
  71. package/dist/commands/evals/optimize-description.d.ts +22 -0
  72. package/dist/commands/evals/optimize-description.d.ts.map +1 -0
  73. package/dist/commands/evals/optimize-description.js +269 -0
  74. package/dist/commands/evals/optimize-description.js.map +1 -0
  75. package/dist/commands/evals/optimize.d.ts +22 -0
  76. package/dist/commands/evals/optimize.d.ts.map +1 -0
  77. package/dist/commands/evals/optimize.js +200 -0
  78. package/dist/commands/evals/optimize.js.map +1 -0
  79. package/dist/commands/evals/run.d.ts +21 -0
  80. package/dist/commands/evals/run.d.ts.map +1 -0
  81. package/dist/commands/evals/run.js +168 -0
  82. package/dist/commands/evals/run.js.map +1 -0
  83. package/dist/commands/gateway/ensure.d.ts +7 -0
  84. package/dist/commands/gateway/ensure.d.ts.map +1 -0
  85. package/dist/commands/gateway/ensure.js +20 -0
  86. package/dist/commands/gateway/ensure.js.map +1 -0
  87. package/dist/commands/hooks/install.d.ts +16 -0
  88. package/dist/commands/hooks/install.d.ts.map +1 -0
  89. package/dist/commands/hooks/install.js +248 -0
  90. package/dist/commands/hooks/install.js.map +1 -0
  91. package/dist/commands/hooks/run.d.ts +11 -0
  92. package/dist/commands/hooks/run.d.ts.map +1 -0
  93. package/dist/commands/hooks/run.js +56 -0
  94. package/dist/commands/hooks/run.js.map +1 -0
  95. package/dist/commands/hooks/uninstall.d.ts +7 -0
  96. package/dist/commands/hooks/uninstall.d.ts.map +1 -0
  97. package/dist/commands/hooks/uninstall.js +88 -0
  98. package/dist/commands/hooks/uninstall.js.map +1 -0
  99. package/dist/commands/import.d.ts +17 -0
  100. package/dist/commands/import.d.ts.map +1 -0
  101. package/dist/commands/import.js +55 -0
  102. package/dist/commands/import.js.map +1 -0
  103. package/dist/commands/insights/sync.d.ts +17 -0
  104. package/dist/commands/insights/sync.d.ts.map +1 -0
  105. package/dist/commands/insights/sync.js +477 -0
  106. package/dist/commands/insights/sync.js.map +1 -0
  107. package/dist/commands/instructions/create.d.ts +17 -0
  108. package/dist/commands/instructions/create.d.ts.map +1 -0
  109. package/dist/commands/instructions/create.js +60 -0
  110. package/dist/commands/instructions/create.js.map +1 -0
  111. package/dist/commands/instructions/delete.d.ts +13 -0
  112. package/dist/commands/instructions/delete.d.ts.map +1 -0
  113. package/dist/commands/instructions/delete.js +37 -0
  114. package/dist/commands/instructions/delete.js.map +1 -0
  115. package/dist/commands/instructions/fork.d.ts +10 -0
  116. package/dist/commands/instructions/fork.d.ts.map +1 -0
  117. package/dist/commands/instructions/fork.js +19 -0
  118. package/dist/commands/instructions/fork.js.map +1 -0
  119. package/dist/commands/instructions/get.d.ts +15 -0
  120. package/dist/commands/instructions/get.d.ts.map +1 -0
  121. package/dist/commands/instructions/get.js +50 -0
  122. package/dist/commands/instructions/get.js.map +1 -0
  123. package/dist/commands/instructions/list.d.ts +12 -0
  124. package/dist/commands/instructions/list.d.ts.map +1 -0
  125. package/dist/commands/instructions/list.js +47 -0
  126. package/dist/commands/instructions/list.js.map +1 -0
  127. package/dist/commands/instructions/promote.d.ts +14 -0
  128. package/dist/commands/instructions/promote.d.ts.map +1 -0
  129. package/dist/commands/instructions/promote.js +27 -0
  130. package/dist/commands/instructions/promote.js.map +1 -0
  131. package/dist/commands/instructions/pull.d.ts +9 -0
  132. package/dist/commands/instructions/pull.d.ts.map +1 -0
  133. package/dist/commands/instructions/pull.js +22 -0
  134. package/dist/commands/instructions/pull.js.map +1 -0
  135. package/dist/commands/instructions/upstream.d.ts +9 -0
  136. package/dist/commands/instructions/upstream.d.ts.map +1 -0
  137. package/dist/commands/instructions/upstream.js +22 -0
  138. package/dist/commands/instructions/upstream.js.map +1 -0
  139. package/dist/commands/instructions/versions.d.ts +12 -0
  140. package/dist/commands/instructions/versions.d.ts.map +1 -0
  141. package/dist/commands/instructions/versions.js +34 -0
  142. package/dist/commands/instructions/versions.js.map +1 -0
  143. package/dist/commands/packs/add-instruction.d.ts +11 -0
  144. package/dist/commands/packs/add-instruction.d.ts.map +1 -0
  145. package/dist/commands/packs/add-instruction.js +22 -0
  146. package/dist/commands/packs/add-instruction.js.map +1 -0
  147. package/dist/commands/packs/apply.d.ts +13 -0
  148. package/dist/commands/packs/apply.d.ts.map +1 -0
  149. package/dist/commands/packs/apply.js +24 -0
  150. package/dist/commands/packs/apply.js.map +1 -0
  151. package/dist/commands/packs/create.d.ts +13 -0
  152. package/dist/commands/packs/create.d.ts.map +1 -0
  153. package/dist/commands/packs/create.js +35 -0
  154. package/dist/commands/packs/create.js.map +1 -0
  155. package/dist/commands/packs/fork.d.ts +10 -0
  156. package/dist/commands/packs/fork.d.ts.map +1 -0
  157. package/dist/commands/packs/fork.js +19 -0
  158. package/dist/commands/packs/fork.js.map +1 -0
  159. package/dist/commands/packs/get.d.ts +10 -0
  160. package/dist/commands/packs/get.d.ts.map +1 -0
  161. package/dist/commands/packs/get.js +36 -0
  162. package/dist/commands/packs/get.js.map +1 -0
  163. package/dist/commands/packs/list.d.ts +22 -0
  164. package/dist/commands/packs/list.d.ts.map +1 -0
  165. package/dist/commands/packs/list.js +48 -0
  166. package/dist/commands/packs/list.js.map +1 -0
  167. package/dist/commands/packs/remove-instruction.d.ts +11 -0
  168. package/dist/commands/packs/remove-instruction.d.ts.map +1 -0
  169. package/dist/commands/packs/remove-instruction.js +20 -0
  170. package/dist/commands/packs/remove-instruction.js.map +1 -0
  171. package/dist/commands/proxy/env.d.ts +14 -0
  172. package/dist/commands/proxy/env.d.ts.map +1 -0
  173. package/dist/commands/proxy/env.js +118 -0
  174. package/dist/commands/proxy/env.js.map +1 -0
  175. package/dist/commands/proxy/logs.d.ts +11 -0
  176. package/dist/commands/proxy/logs.d.ts.map +1 -0
  177. package/dist/commands/proxy/logs.js +75 -0
  178. package/dist/commands/proxy/logs.js.map +1 -0
  179. package/dist/commands/proxy/setup.d.ts +23 -0
  180. package/dist/commands/proxy/setup.d.ts.map +1 -0
  181. package/dist/commands/proxy/setup.js +391 -0
  182. package/dist/commands/proxy/setup.js.map +1 -0
  183. package/dist/commands/proxy/start.d.ts +17 -0
  184. package/dist/commands/proxy/start.d.ts.map +1 -0
  185. package/dist/commands/proxy/start.js +306 -0
  186. package/dist/commands/proxy/start.js.map +1 -0
  187. package/dist/commands/proxy/status.d.ts +7 -0
  188. package/dist/commands/proxy/status.d.ts.map +1 -0
  189. package/dist/commands/proxy/status.js +65 -0
  190. package/dist/commands/proxy/status.js.map +1 -0
  191. package/dist/commands/proxy/stop.d.ts +8 -0
  192. package/dist/commands/proxy/stop.d.ts.map +1 -0
  193. package/dist/commands/proxy/stop.js +77 -0
  194. package/dist/commands/proxy/stop.js.map +1 -0
  195. package/dist/commands/service/install.d.ts +17 -0
  196. package/dist/commands/service/install.d.ts.map +1 -0
  197. package/dist/commands/service/install.js +383 -0
  198. package/dist/commands/service/install.js.map +1 -0
  199. package/dist/commands/service/install.test.d.ts +2 -0
  200. package/dist/commands/service/install.test.d.ts.map +1 -0
  201. package/dist/commands/service/install.test.js +345 -0
  202. package/dist/commands/service/install.test.js.map +1 -0
  203. package/dist/commands/service/status.d.ts +6 -0
  204. package/dist/commands/service/status.d.ts.map +1 -0
  205. package/dist/commands/service/status.js +112 -0
  206. package/dist/commands/service/status.js.map +1 -0
  207. package/dist/commands/service/uninstall.d.ts +6 -0
  208. package/dist/commands/service/uninstall.d.ts.map +1 -0
  209. package/dist/commands/service/uninstall.js +84 -0
  210. package/dist/commands/service/uninstall.js.map +1 -0
  211. package/dist/commands/sessions/analyze.d.ts +10 -0
  212. package/dist/commands/sessions/analyze.d.ts.map +1 -0
  213. package/dist/commands/sessions/analyze.js +26 -0
  214. package/dist/commands/sessions/analyze.js.map +1 -0
  215. package/dist/commands/sessions/end.d.ts +9 -0
  216. package/dist/commands/sessions/end.d.ts.map +1 -0
  217. package/dist/commands/sessions/end.js +82 -0
  218. package/dist/commands/sessions/end.js.map +1 -0
  219. package/dist/commands/sessions/import.d.ts +13 -0
  220. package/dist/commands/sessions/import.d.ts.map +1 -0
  221. package/dist/commands/sessions/import.js +28 -0
  222. package/dist/commands/sessions/import.js.map +1 -0
  223. package/dist/commands/sessions/list.d.ts +11 -0
  224. package/dist/commands/sessions/list.d.ts.map +1 -0
  225. package/dist/commands/sessions/list.js +34 -0
  226. package/dist/commands/sessions/list.js.map +1 -0
  227. package/dist/commands/sessions/start.d.ts +11 -0
  228. package/dist/commands/sessions/start.d.ts.map +1 -0
  229. package/dist/commands/sessions/start.js +83 -0
  230. package/dist/commands/sessions/start.js.map +1 -0
  231. package/dist/commands/skills/install.d.ts +15 -0
  232. package/dist/commands/skills/install.d.ts.map +1 -0
  233. package/dist/commands/skills/install.js +91 -0
  234. package/dist/commands/skills/install.js.map +1 -0
  235. package/dist/commands/skills/list.d.ts +11 -0
  236. package/dist/commands/skills/list.d.ts.map +1 -0
  237. package/dist/commands/skills/list.js +47 -0
  238. package/dist/commands/skills/list.js.map +1 -0
  239. package/dist/commands/skills/search.d.ts +17 -0
  240. package/dist/commands/skills/search.d.ts.map +1 -0
  241. package/dist/commands/skills/search.js +56 -0
  242. package/dist/commands/skills/search.js.map +1 -0
  243. package/dist/commands/skills/update.d.ts +7 -0
  244. package/dist/commands/skills/update.d.ts.map +1 -0
  245. package/dist/commands/skills/update.js +30 -0
  246. package/dist/commands/skills/update.js.map +1 -0
  247. package/dist/dashboard/Dashboard.d.ts +3 -0
  248. package/dist/dashboard/Dashboard.d.ts.map +1 -0
  249. package/dist/dashboard/Dashboard.js +132 -0
  250. package/dist/dashboard/Dashboard.js.map +1 -0
  251. package/dist/dashboard/data.d.ts +11 -0
  252. package/dist/dashboard/data.d.ts.map +1 -0
  253. package/dist/dashboard/data.js +137 -0
  254. package/dist/dashboard/data.js.map +1 -0
  255. package/dist/dashboard/panels/friction.d.ts +7 -0
  256. package/dist/dashboard/panels/friction.d.ts.map +1 -0
  257. package/dist/dashboard/panels/friction.js +22 -0
  258. package/dist/dashboard/panels/friction.js.map +1 -0
  259. package/dist/dashboard/panels/insights.d.ts +8 -0
  260. package/dist/dashboard/panels/insights.d.ts.map +1 -0
  261. package/dist/dashboard/panels/insights.js +109 -0
  262. package/dist/dashboard/panels/insights.js.map +1 -0
  263. package/dist/dashboard/panels/instructions.d.ts +9 -0
  264. package/dist/dashboard/panels/instructions.d.ts.map +1 -0
  265. package/dist/dashboard/panels/instructions.js +17 -0
  266. package/dist/dashboard/panels/instructions.js.map +1 -0
  267. package/dist/dashboard/panels/outcomes.d.ts +7 -0
  268. package/dist/dashboard/panels/outcomes.d.ts.map +1 -0
  269. package/dist/dashboard/panels/outcomes.js +29 -0
  270. package/dist/dashboard/panels/outcomes.js.map +1 -0
  271. package/dist/dashboard/panels/overview.d.ts +8 -0
  272. package/dist/dashboard/panels/overview.d.ts.map +1 -0
  273. package/dist/dashboard/panels/overview.js +20 -0
  274. package/dist/dashboard/panels/overview.js.map +1 -0
  275. package/dist/dashboard/panels/shared.d.ts +17 -0
  276. package/dist/dashboard/panels/shared.d.ts.map +1 -0
  277. package/dist/dashboard/panels/shared.js +62 -0
  278. package/dist/dashboard/panels/shared.js.map +1 -0
  279. package/dist/dashboard/types.d.ts +80 -0
  280. package/dist/dashboard/types.d.ts.map +1 -0
  281. package/dist/dashboard/types.js +27 -0
  282. package/dist/dashboard/types.js.map +1 -0
  283. package/dist/index.d.ts +2 -0
  284. package/dist/index.d.ts.map +1 -0
  285. package/dist/index.js +2 -0
  286. package/dist/index.js.map +1 -0
  287. package/dist/lib/api-client.d.ts +17 -0
  288. package/dist/lib/api-client.d.ts.map +1 -0
  289. package/dist/lib/api-client.js +92 -0
  290. package/dist/lib/api-client.js.map +1 -0
  291. package/dist/lib/api-client.test.d.ts +2 -0
  292. package/dist/lib/api-client.test.d.ts.map +1 -0
  293. package/dist/lib/api-client.test.js +161 -0
  294. package/dist/lib/api-client.test.js.map +1 -0
  295. package/dist/lib/auth.d.ts +27 -0
  296. package/dist/lib/auth.d.ts.map +1 -0
  297. package/dist/lib/auth.js +137 -0
  298. package/dist/lib/auth.js.map +1 -0
  299. package/dist/lib/auth.test.d.ts +2 -0
  300. package/dist/lib/auth.test.d.ts.map +1 -0
  301. package/dist/lib/auth.test.js +110 -0
  302. package/dist/lib/auth.test.js.map +1 -0
  303. package/dist/lib/eval-analyzer.d.ts +23 -0
  304. package/dist/lib/eval-analyzer.d.ts.map +1 -0
  305. package/dist/lib/eval-analyzer.js +89 -0
  306. package/dist/lib/eval-analyzer.js.map +1 -0
  307. package/dist/lib/eval-benchmark.d.ts +17 -0
  308. package/dist/lib/eval-benchmark.d.ts.map +1 -0
  309. package/dist/lib/eval-benchmark.js +92 -0
  310. package/dist/lib/eval-benchmark.js.map +1 -0
  311. package/dist/lib/eval-conversation-handler.d.ts +9 -0
  312. package/dist/lib/eval-conversation-handler.d.ts.map +1 -0
  313. package/dist/lib/eval-conversation-handler.js +200 -0
  314. package/dist/lib/eval-conversation-handler.js.map +1 -0
  315. package/dist/lib/eval-executor.d.ts +21 -0
  316. package/dist/lib/eval-executor.d.ts.map +1 -0
  317. package/dist/lib/eval-executor.js +80 -0
  318. package/dist/lib/eval-executor.js.map +1 -0
  319. package/dist/lib/eval-executor.test.d.ts +2 -0
  320. package/dist/lib/eval-executor.test.d.ts.map +1 -0
  321. package/dist/lib/eval-executor.test.js +8 -0
  322. package/dist/lib/eval-executor.test.js.map +1 -0
  323. package/dist/lib/eval-grader.d.ts +38 -0
  324. package/dist/lib/eval-grader.d.ts.map +1 -0
  325. package/dist/lib/eval-grader.js +123 -0
  326. package/dist/lib/eval-grader.js.map +1 -0
  327. package/dist/lib/eval-grader.test.d.ts +2 -0
  328. package/dist/lib/eval-grader.test.d.ts.map +1 -0
  329. package/dist/lib/eval-grader.test.js +8 -0
  330. package/dist/lib/eval-grader.test.js.map +1 -0
  331. package/dist/lib/eval-meta-judge.d.ts +28 -0
  332. package/dist/lib/eval-meta-judge.d.ts.map +1 -0
  333. package/dist/lib/eval-meta-judge.js +116 -0
  334. package/dist/lib/eval-meta-judge.js.map +1 -0
  335. package/dist/lib/eval-trigger-tester.d.ts +19 -0
  336. package/dist/lib/eval-trigger-tester.d.ts.map +1 -0
  337. package/dist/lib/eval-trigger-tester.js +96 -0
  338. package/dist/lib/eval-trigger-tester.js.map +1 -0
  339. package/dist/lib/eval-worker.d.ts +12 -0
  340. package/dist/lib/eval-worker.d.ts.map +1 -0
  341. package/dist/lib/eval-worker.js +395 -0
  342. package/dist/lib/eval-worker.js.map +1 -0
  343. package/dist/lib/eval-worktree.d.ts +11 -0
  344. package/dist/lib/eval-worktree.d.ts.map +1 -0
  345. package/dist/lib/eval-worktree.js +87 -0
  346. package/dist/lib/eval-worktree.js.map +1 -0
  347. package/dist/lib/eval-worktree.test.d.ts +2 -0
  348. package/dist/lib/eval-worktree.test.d.ts.map +1 -0
  349. package/dist/lib/eval-worktree.test.js +68 -0
  350. package/dist/lib/eval-worktree.test.js.map +1 -0
  351. package/dist/lib/gateway-entry.d.ts +3 -0
  352. package/dist/lib/gateway-entry.d.ts.map +1 -0
  353. package/dist/lib/gateway-entry.js +19 -0
  354. package/dist/lib/gateway-entry.js.map +1 -0
  355. package/dist/lib/gateway-lifecycle.d.ts +9 -0
  356. package/dist/lib/gateway-lifecycle.d.ts.map +1 -0
  357. package/dist/lib/gateway-lifecycle.js +86 -0
  358. package/dist/lib/gateway-lifecycle.js.map +1 -0
  359. package/dist/lib/gateway.d.ts +12 -0
  360. package/dist/lib/gateway.d.ts.map +1 -0
  361. package/dist/lib/gateway.js +150 -0
  362. package/dist/lib/gateway.js.map +1 -0
  363. package/dist/lib/hooks-config.d.ts +95 -0
  364. package/dist/lib/hooks-config.d.ts.map +1 -0
  365. package/dist/lib/hooks-config.js +416 -0
  366. package/dist/lib/hooks-config.js.map +1 -0
  367. package/dist/lib/hooks-config.test.d.ts +2 -0
  368. package/dist/lib/hooks-config.test.d.ts.map +1 -0
  369. package/dist/lib/hooks-config.test.js +231 -0
  370. package/dist/lib/hooks-config.test.js.map +1 -0
  371. package/dist/lib/insights-prompts.d.ts +13 -0
  372. package/dist/lib/insights-prompts.d.ts.map +1 -0
  373. package/dist/lib/insights-prompts.js +145 -0
  374. package/dist/lib/insights-prompts.js.map +1 -0
  375. package/dist/lib/insights-worker.d.ts +10 -0
  376. package/dist/lib/insights-worker.d.ts.map +1 -0
  377. package/dist/lib/insights-worker.js +329 -0
  378. package/dist/lib/insights-worker.js.map +1 -0
  379. package/dist/lib/llm-client.d.ts +26 -0
  380. package/dist/lib/llm-client.d.ts.map +1 -0
  381. package/dist/lib/llm-client.js +142 -0
  382. package/dist/lib/llm-client.js.map +1 -0
  383. package/dist/lib/llm-client.test.d.ts +2 -0
  384. package/dist/lib/llm-client.test.d.ts.map +1 -0
  385. package/dist/lib/llm-client.test.js +62 -0
  386. package/dist/lib/llm-client.test.js.map +1 -0
  387. package/dist/lib/output.d.ts +4 -0
  388. package/dist/lib/output.d.ts.map +1 -0
  389. package/dist/lib/output.js +36 -0
  390. package/dist/lib/output.js.map +1 -0
  391. package/dist/lib/output.test.d.ts +2 -0
  392. package/dist/lib/output.test.d.ts.map +1 -0
  393. package/dist/lib/output.test.js +71 -0
  394. package/dist/lib/output.test.js.map +1 -0
  395. package/dist/lib/provider-aggregator.d.ts +24 -0
  396. package/dist/lib/provider-aggregator.d.ts.map +1 -0
  397. package/dist/lib/provider-aggregator.js +57 -0
  398. package/dist/lib/provider-aggregator.js.map +1 -0
  399. package/dist/lib/provider-aggregator.test.d.ts +2 -0
  400. package/dist/lib/provider-aggregator.test.d.ts.map +1 -0
  401. package/dist/lib/provider-aggregator.test.js +103 -0
  402. package/dist/lib/provider-aggregator.test.js.map +1 -0
  403. package/dist/lib/skills-loader.d.ts +6 -0
  404. package/dist/lib/skills-loader.d.ts.map +1 -0
  405. package/dist/lib/skills-loader.js +51 -0
  406. package/dist/lib/skills-loader.js.map +1 -0
  407. package/dist/lib/types.d.ts +48 -0
  408. package/dist/lib/types.d.ts.map +1 -0
  409. package/dist/lib/types.js +7 -0
  410. package/dist/lib/types.js.map +1 -0
  411. package/dist/test-helpers.d.ts +58 -0
  412. package/dist/test-helpers.d.ts.map +1 -0
  413. package/dist/test-helpers.js +58 -0
  414. package/dist/test-helpers.js.map +1 -0
  415. package/oclif.manifest.json +3197 -0
  416. package/package.json +76 -0
@@ -0,0 +1,200 @@
1
+ import { apiGet, apiPost } from './api-client.js';
2
+ import { executeEval } from './eval-executor.js';
3
+ import { gradeEvalOutput } from './eval-grader.js';
4
+ import { analyzeEvalResults } from './eval-analyzer.js';
5
+ export async function processConversationJob(jobConfig, evalTargetId, logger) {
6
+ const { conversationId, messageId, messageContent } = jobConfig;
7
+ // Fetch context
8
+ const target = await apiGet(`/api/eval-targets/${evalTargetId}`);
9
+ const evalCases = await apiGet(`/api/eval-targets/${evalTargetId}/evals`);
10
+ const messages = await apiGet(`/api/eval-conversations/${conversationId}/messages`);
11
+ // Idempotency: check if this message was already processed (has assistant responses after it)
12
+ const msgIdx = messages.findIndex((m) => m.id === messageId);
13
+ if (msgIdx >= 0) {
14
+ const hasResponse = messages.slice(msgIdx + 1).some((m) => m.role === 'assistant' && (m.type === 'results' || m.type === 'proposal' || m.type === 'generated' || m.type === 'text'));
15
+ if (hasResponse) {
16
+ logger(`Message ${messageId} already processed — skipping (idempotency guard)`);
17
+ return;
18
+ }
19
+ }
20
+ // Helper to post assistant messages
21
+ const postMessage = async (content, type, data) => {
22
+ await apiPost(`/api/eval-conversations/${conversationId}/messages/assistant`, {
23
+ content,
24
+ type,
25
+ data,
26
+ });
27
+ };
28
+ // Decide what action to take
29
+ const decision = await decideAction(target, evalCases, messages, messageContent, logger);
30
+ logger(`Action: ${decision.action}`);
31
+ switch (decision.action) {
32
+ case 'run_evals':
33
+ await handleRunEvals(target, evalCases, conversationId, postMessage, logger);
34
+ break;
35
+ case 'generate_cases':
36
+ await handleGenerateCases(target, evalTargetId, conversationId, postMessage, logger);
37
+ break;
38
+ case 'analyze_results':
39
+ case 'propose_changes':
40
+ await handleAnalyzeAndPropose(target, evalCases, messages, messageContent, conversationId, postMessage, logger);
41
+ break;
42
+ case 'respond':
43
+ await postMessage(decision.response, 'text');
44
+ break;
45
+ }
46
+ }
47
+ async function decideAction(target, evalCases, messages, latestMessage, logger) {
48
+ // Build conversation summary for context
49
+ const recentMessages = messages.slice(-10).map((m) => `${m.role}: ${m.content.slice(0, 200)}`).join('\n');
50
+ const prompt = `You are an eval assistant. Decide what action to take based on the user's message.
51
+
52
+ ## Current State
53
+ - Eval target: "${target.name}" v${target.version} (${target.type})
54
+ - Eval cases: ${evalCases.length} defined${evalCases.length > 0 ? ` (${evalCases.map((e) => e.name).join(', ')})` : ''}
55
+ - Content length: ${target.content.length} chars
56
+
57
+ ## Recent Conversation
58
+ ${recentMessages}
59
+
60
+ ## User's Latest Message
61
+ ${latestMessage}
62
+
63
+ ## Available Actions
64
+ - run_evals: Run all eval cases against current version (with + without target). Choose this when the user wants to test, evaluate, or see how the instruction performs.
65
+ - generate_cases: Auto-generate eval test cases from the instruction content. Choose this when there are no eval cases (${evalCases.length} currently) or user asks to create/generate tests.
66
+ - analyze_results: Analyze recent eval failures and propose improvements based on user feedback. Choose this when user gives qualitative feedback like "this is wrong", "missing X", etc.
67
+ - propose_changes: Propose specific content edits based on conversation. Choose this when user asks for improvements or changes.
68
+ - respond: Just answer a question without running any evals. Choose this for informational questions.
69
+
70
+ Respond with ONLY valid JSON:
71
+ {"action": "run_evals", "response": "What you want to say to the user", "params": {}}`;
72
+ const result = await executeEval({ prompt, timeout: 30_000 });
73
+ try {
74
+ let jsonStr = result.output.trim();
75
+ const jsonMatch = jsonStr.match(/\{[\s\S]*\}/);
76
+ if (jsonMatch)
77
+ jsonStr = jsonMatch[0];
78
+ return JSON.parse(jsonStr);
79
+ }
80
+ catch {
81
+ logger('Failed to parse action decision, defaulting to respond');
82
+ // Fallback: simple heuristics
83
+ const lower = latestMessage.toLowerCase();
84
+ if (lower.includes('run') || lower.includes('test') || lower.includes('eval')) {
85
+ return { action: 'run_evals', response: 'Running evals now...' };
86
+ }
87
+ if (lower.includes('generate') || lower.includes('create') || (evalCases.length === 0 && lower.includes('start'))) {
88
+ return { action: 'generate_cases', response: 'Generating test cases...' };
89
+ }
90
+ return { action: 'respond', response: 'I can help you run evals, generate test cases, or analyze results. What would you like to do?' };
91
+ }
92
+ }
93
+ async function handleRunEvals(target, evalCases, _conversationId, postMessage, logger) {
94
+ if (evalCases.length === 0) {
95
+ await postMessage('No eval cases exist yet. Would you like me to generate some from the instruction content?', 'text');
96
+ return;
97
+ }
98
+ await postMessage(`Running ${evalCases.length} evals against "${target.name}" v${target.version}...`, 'status');
99
+ const results = [];
100
+ // Run with_target
101
+ for (const eval_ of evalCases) {
102
+ logger(`Running: ${eval_.name} (with_target)`);
103
+ const execResult = await executeEval({
104
+ prompt: eval_.prompt,
105
+ targetContent: target.content,
106
+ timeout: 120_000,
107
+ });
108
+ let passed = false;
109
+ let evidence = '';
110
+ if (!execResult.error && eval_.expectations.length > 0) {
111
+ const grading = await gradeEvalOutput({
112
+ prompt: eval_.prompt,
113
+ output: execResult.output,
114
+ expectations: eval_.expectations,
115
+ timeout: 120_000,
116
+ });
117
+ const summary = grading?.summary;
118
+ passed = summary?.pass_rate >= 1.0;
119
+ evidence = grading?.expectations
120
+ ?.map((e) => `${e.passed ? 'PASS' : 'FAIL'}: ${e.text} — ${e.evidence}`)
121
+ .join('\n') ?? '';
122
+ }
123
+ results.push({
124
+ evalName: eval_.name,
125
+ passed,
126
+ output: execResult.error ?? execResult.output.slice(0, 2000),
127
+ expectations: eval_.expectations,
128
+ evidence,
129
+ configuration: 'with_target',
130
+ });
131
+ }
132
+ const passedCount = results.filter((r) => r.passed).length;
133
+ const total = results.length;
134
+ await postMessage(`${passedCount} of ${total} evals passed (${Math.round((passedCount / total) * 100)}%)`, 'results', {
135
+ summary: { passed: passedCount, failed: total - passedCount, total, passRate: passedCount / total },
136
+ results: results.map((r) => ({
137
+ evalName: r.evalName,
138
+ passed: r.passed,
139
+ output: r.output,
140
+ expectations: r.expectations,
141
+ evidence: r.evidence,
142
+ })),
143
+ });
144
+ }
145
+ async function handleGenerateCases(target, _evalTargetId, _conversationId, postMessage, logger) {
146
+ await postMessage('Generating eval cases from instruction content...', 'status');
147
+ logger('Calling eval-from-context endpoint');
148
+ // Use eval-from-context endpoint
149
+ const result = await apiPost('/api/eval-from-context', {
150
+ contentHash: '',
151
+ name: target.name,
152
+ type: target.type,
153
+ content: target.content,
154
+ config: { skipBaseline: false, skipGrading: false },
155
+ });
156
+ const cases = result.evals ?? [];
157
+ await postMessage(`Generated ${cases.length} eval cases. Review them below:`, 'generated', {
158
+ cases: cases.map((c) => ({
159
+ id: c.id,
160
+ name: c.name,
161
+ prompt: c.prompt,
162
+ expectations: c.expectations,
163
+ })),
164
+ });
165
+ }
166
+ async function handleAnalyzeAndPropose(target, evalCases, messages, userFeedback, _conversationId, postMessage, logger) {
167
+ await postMessage('Analyzing results and preparing improvements...', 'status');
168
+ // Find the most recent results message for context
169
+ const lastResults = [...messages]
170
+ .reverse()
171
+ .find((m) => m.type === 'results');
172
+ const evalResults = lastResults?.data?.results?.map((r) => ({
173
+ evalName: r.evalName,
174
+ prompt: '',
175
+ expectations: r.expectations ?? [],
176
+ grading: {
177
+ summary: { pass_rate: r.passed ? 1 : 0 },
178
+ expectations: r.expectations?.map((e) => ({
179
+ text: e,
180
+ passed: r.passed,
181
+ evidence: r.evidence ?? '',
182
+ })),
183
+ },
184
+ })) ?? [];
185
+ logger(`Analyzing ${evalResults.length} eval results with user feedback`);
186
+ // Include user feedback in the analysis
187
+ const analysis = await analyzeEvalResults({
188
+ content: target.content,
189
+ evalResults,
190
+ model: undefined,
191
+ timeout: 120_000,
192
+ userFeedback,
193
+ });
194
+ await postMessage(analysis.overallAssessment, 'proposal', {
195
+ suggestions: analysis.suggestions,
196
+ proposedContent: analysis.proposedContent,
197
+ fromVersion: target.version,
198
+ });
199
+ }
200
+ //# sourceMappingURL=eval-conversation-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-conversation-handler.js","sourceRoot":"","sources":["../../src/lib/eval-conversation-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface EvalExecutorOptions {
2
+ prompt: string;
3
+ targetContent?: string;
4
+ systemPrompt?: string;
5
+ workDir?: string;
6
+ timeout?: number;
7
+ model?: string;
8
+ }
9
+ export interface EvalExecutorResult {
10
+ output: string;
11
+ exitCode: number | null;
12
+ durationMs: number;
13
+ totalTokens: number;
14
+ error?: string;
15
+ }
16
+ /**
17
+ * Executes a prompt via `claude -p` and captures the output.
18
+ * Optionally injects target content as a system prompt.
19
+ */
20
+ export declare function executeEval(options: EvalExecutorOptions): Promise<EvalExecutorResult>;
21
+ //# sourceMappingURL=eval-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-executor.d.ts","sourceRoot":"","sources":["../../src/lib/eval-executor.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2F3F"}
@@ -0,0 +1,80 @@
1
+ import { spawn } from 'node:child_process';
2
+ /**
3
+ * Executes a prompt via `claude -p` and captures the output.
4
+ * Optionally injects target content as a system prompt.
5
+ */
6
+ export async function executeEval(options) {
7
+ const { prompt, targetContent, systemPrompt, workDir = process.cwd(), timeout = 120_000, model, } = options;
8
+ const args = ['-p', prompt, '--output-format', 'json'];
9
+ const sysPrompt = targetContent ?? systemPrompt;
10
+ if (sysPrompt) {
11
+ args.push('--system-prompt', sysPrompt);
12
+ }
13
+ if (model) {
14
+ args.push('--model', model);
15
+ }
16
+ const startTime = Date.now();
17
+ return new Promise((resolve) => {
18
+ // Remove CLAUDECODE flag so spawned claude doesn't think it's a nested session,
19
+ // but keep CLAUDE_CODE_SSE_PORT etc. so it can still authenticate
20
+ const env = { ...process.env };
21
+ delete env.CLAUDECODE;
22
+ const proc = spawn('claude', args, {
23
+ cwd: workDir,
24
+ env,
25
+ stdio: ['ignore', 'pipe', 'pipe'],
26
+ });
27
+ let stdout = '';
28
+ let stderr = '';
29
+ proc.stdout.on('data', (data) => {
30
+ stdout += data.toString();
31
+ });
32
+ proc.stderr.on('data', (data) => {
33
+ stderr += data.toString();
34
+ });
35
+ const timer = setTimeout(() => {
36
+ proc.kill('SIGTERM');
37
+ resolve({
38
+ output: stdout,
39
+ exitCode: null,
40
+ durationMs: Date.now() - startTime,
41
+ totalTokens: 0,
42
+ error: `Timed out after ${timeout}ms`,
43
+ });
44
+ }, timeout);
45
+ proc.on('close', (code) => {
46
+ clearTimeout(timer);
47
+ const durationMs = Date.now() - startTime;
48
+ // Try to parse JSON output for token usage
49
+ let totalTokens = 0;
50
+ let output = stdout;
51
+ try {
52
+ const parsed = JSON.parse(stdout);
53
+ output = parsed.result ?? parsed.content ?? stdout;
54
+ totalTokens = parsed.usage?.total_tokens
55
+ ?? ((parsed.usage?.input_tokens ?? 0) + (parsed.usage?.output_tokens ?? 0));
56
+ }
57
+ catch {
58
+ // stdout wasn't JSON, use raw text
59
+ }
60
+ resolve({
61
+ output,
62
+ exitCode: code,
63
+ durationMs,
64
+ totalTokens,
65
+ error: code !== 0 ? stderr || `Exit code ${code}` : undefined,
66
+ });
67
+ });
68
+ proc.on('error', (err) => {
69
+ clearTimeout(timer);
70
+ resolve({
71
+ output: '',
72
+ exitCode: null,
73
+ durationMs: Date.now() - startTime,
74
+ totalTokens: 0,
75
+ error: `Failed to spawn claude: ${err.message}`,
76
+ });
77
+ });
78
+ });
79
+ }
80
+ //# sourceMappingURL=eval-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-executor.js","sourceRoot":"","sources":["../../src/lib/eval-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=eval-executor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-executor.test.d.ts","sourceRoot":"","sources":["../../src/lib/eval-executor.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ describe('eval-executor', () => {
3
+ it('module exports executeEval function', async () => {
4
+ const mod = await import('./eval-executor.js');
5
+ expect(typeof mod.executeEval).toBe('function');
6
+ });
7
+ });
8
+ //# sourceMappingURL=eval-executor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-executor.test.js","sourceRoot":"","sources":["../../src/lib/eval-executor.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ export interface GradingExpectation {
2
+ text: string;
3
+ passed: boolean;
4
+ evidence: string;
5
+ }
6
+ export interface GradingResult {
7
+ expectations: GradingExpectation[];
8
+ summary: {
9
+ passed: number;
10
+ failed: number;
11
+ total: number;
12
+ pass_rate: number;
13
+ };
14
+ claims: Array<{
15
+ claim: string;
16
+ type: 'factual' | 'process' | 'quality';
17
+ verified: boolean;
18
+ evidence: string;
19
+ }>;
20
+ eval_feedback: {
21
+ suggestions: Array<{
22
+ assertion?: string;
23
+ reason: string;
24
+ }>;
25
+ overall: string;
26
+ };
27
+ }
28
+ /**
29
+ * Grades an eval output against expectations using an LLM grader.
30
+ */
31
+ export declare function gradeEvalOutput(options: {
32
+ prompt: string;
33
+ output: string;
34
+ expectations: string[];
35
+ model?: string;
36
+ timeout?: number;
37
+ }): Promise<GradingResult>;
38
+ //# sourceMappingURL=eval-grader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-grader.d.ts","sourceRoot":"","sources":["../../src/lib/eval-grader.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE,KAAK,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;QACxC,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,aAAa,EAAE;QACb,WAAW,EAAE,KAAK,CAAC;YAAE,SAAS,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAgDD;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,aAAa,CAAC,CA8EzB"}
@@ -0,0 +1,123 @@
1
+ import { executeEval } from './eval-executor.js';
2
+ const 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.
3
+
4
+ You will receive:
5
+ 1. The original prompt that was given to the AI
6
+ 2. The AI's output/response
7
+ 3. A list of expectations (assertions) to evaluate
8
+
9
+ For each expectation:
10
+ - Search the output for evidence that the expectation is met
11
+ - Determine PASS or FAIL (no partial credit)
12
+ - Cite specific evidence (quote or description)
13
+
14
+ PASS criteria:
15
+ - Clear evidence the assertion is true
16
+ - Evidence reflects genuine completion, not surface compliance
17
+
18
+ FAIL criteria:
19
+ - No evidence found
20
+ - Evidence contradicts the expectation
21
+ - Cannot verify from available information
22
+
23
+ Beyond the predefined expectations, extract implicit claims from the output:
24
+ - Factual claims ("uses TypeScript", "has 3 parameters")
25
+ - Process claims ("used async/await pattern")
26
+ - Quality claims ("handles edge cases")
27
+
28
+ Verify each claim against the actual output.
29
+
30
+ Finally, critique the eval itself — identify assertions that are too weak (pass for wrong outputs) or important outcomes that no assertion covers.
31
+
32
+ You MUST respond with ONLY a valid JSON object matching this exact structure (no markdown, no explanation, just JSON):
33
+
34
+ {
35
+ "expectations": [
36
+ { "text": "assertion text", "passed": true, "evidence": "specific quote or description" }
37
+ ],
38
+ "summary": { "passed": 2, "failed": 1, "total": 3, "pass_rate": 0.67 },
39
+ "claims": [
40
+ { "claim": "statement", "type": "factual", "verified": true, "evidence": "..." }
41
+ ],
42
+ "eval_feedback": {
43
+ "suggestions": [{ "assertion": "suggested new assertion", "reason": "why it matters" }],
44
+ "overall": "brief summary assessment"
45
+ }
46
+ }`;
47
+ /**
48
+ * Grades an eval output against expectations using an LLM grader.
49
+ */
50
+ export async function gradeEvalOutput(options) {
51
+ const { prompt, output, expectations, model, timeout = 120_000 } = options;
52
+ const graderPrompt = `## Original Prompt
53
+
54
+ ${prompt}
55
+
56
+ ## AI Output
57
+
58
+ ${output}
59
+
60
+ ## Expectations to Evaluate
61
+
62
+ ${expectations.map((e, i) => `${i + 1}. ${e}`).join('\n')}
63
+
64
+ Grade the output against each expectation. Respond with ONLY valid JSON.`;
65
+ const result = await executeEval({
66
+ prompt: graderPrompt,
67
+ targetContent: GRADER_SYSTEM_PROMPT,
68
+ timeout,
69
+ model,
70
+ });
71
+ if (result.error) {
72
+ // Return a failed grading if the grader itself errors
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
+ // Parse the grader's JSON response
85
+ try {
86
+ // Extract JSON from the output (handle potential markdown wrapping)
87
+ let jsonStr = result.output.trim();
88
+ const jsonMatch = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
89
+ if (jsonMatch) {
90
+ jsonStr = jsonMatch[1].trim();
91
+ }
92
+ // Also try to find JSON object directly
93
+ const objMatch = jsonStr.match(/\{[\s\S]*\}/);
94
+ if (objMatch) {
95
+ jsonStr = objMatch[0];
96
+ }
97
+ const parsed = JSON.parse(jsonStr);
98
+ // Validate and ensure summary is correct
99
+ const passed = parsed.expectations.filter((e) => e.passed).length;
100
+ const total = parsed.expectations.length;
101
+ parsed.summary = {
102
+ passed,
103
+ failed: total - passed,
104
+ total,
105
+ pass_rate: total > 0 ? passed / total : 0,
106
+ };
107
+ return parsed;
108
+ }
109
+ catch {
110
+ // If we can't parse, return a best-effort result
111
+ return {
112
+ expectations: expectations.map((e) => ({
113
+ text: e,
114
+ passed: false,
115
+ evidence: 'Grader output was not valid JSON',
116
+ })),
117
+ summary: { passed: 0, failed: expectations.length, total: expectations.length, pass_rate: 0 },
118
+ claims: [],
119
+ eval_feedback: { suggestions: [], overall: `Grader returned unparseable output: ${result.output.slice(0, 200)}` },
120
+ };
121
+ }
122
+ }
123
+ //# sourceMappingURL=eval-grader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-grader.js","sourceRoot":"","sources":["../../src/lib/eval-grader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=eval-grader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-grader.test.d.ts","sourceRoot":"","sources":["../../src/lib/eval-grader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ describe('eval-grader', () => {
3
+ it('module exports gradeEvalOutput function', async () => {
4
+ const mod = await import('./eval-grader.js');
5
+ expect(typeof mod.gradeEvalOutput).toBe('function');
6
+ });
7
+ });
8
+ //# sourceMappingURL=eval-grader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-grader.test.js","sourceRoot":"","sources":["../../src/lib/eval-grader.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { GradingResult } from './eval-grader.js';
2
+ export interface MetaJudgement {
3
+ quality_score: number;
4
+ issues: MetaIssue[];
5
+ recommendations: string[];
6
+ summary: string;
7
+ }
8
+ export interface MetaIssue {
9
+ type: 'weak_expectation' | 'inconsistent_grading' | 'trivial_test' | 'untestable_expectation' | 'all_pass_suspicious';
10
+ severity: 'low' | 'medium' | 'high';
11
+ description: string;
12
+ affected_eval?: string;
13
+ }
14
+ interface MetaJudgeInput {
15
+ targetName: string;
16
+ evalResults: Array<{
17
+ evalName: string;
18
+ prompt: string;
19
+ expectations: string[];
20
+ grading: GradingResult | null;
21
+ output?: string;
22
+ }>;
23
+ model?: string;
24
+ timeout?: number;
25
+ }
26
+ export declare function judgeEvalQuality(input: MetaJudgeInput): Promise<MetaJudgement>;
27
+ export {};
28
+ //# sourceMappingURL=eval-meta-judge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-meta-judge.d.ts","sourceRoot":"","sources":["../../src/lib/eval-meta-judge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,kBAAkB,GAAG,sBAAsB,GAAG,cAAc,GAAG,wBAAwB,GAAG,qBAAqB,CAAC;IACtH,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAmCD,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAuEpF"}