reeval 0.11.0 → 0.13.0

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 (312) hide show
  1. package/README.md +115 -257
  2. package/assets/package.json +1 -1
  3. package/assets/pnpm-lock.yaml +41 -30
  4. package/bin/mcp-timer.cjs +224 -0
  5. package/dist/{adapter-Bwy3QxAK.js → adapter-IKKo4sZj.js} +4 -4
  6. package/dist/{adapter-Bwy3QxAK.js.map → adapter-IKKo4sZj.js.map} +1 -1
  7. package/dist/{agent-DpE80WPz.js → agent-ClE-g9VL.js} +22 -7
  8. package/dist/{agent-DpE80WPz.js.map → agent-ClE-g9VL.js.map} +1 -1
  9. package/dist/{analysis-Bxub9LMT.js → analysis-B0nOfAzA.js} +3 -3
  10. package/dist/{analysis-Bxub9LMT.js.map → analysis-B0nOfAzA.js.map} +1 -1
  11. package/dist/{assemble-D9GWr-HS.js → assemble-BO93VAk1.js} +22 -20
  12. package/dist/assemble-BO93VAk1.js.map +1 -0
  13. package/dist/assemble-VQxyoDxK.js +1 -0
  14. package/dist/{attempt-CGPV3BZY.js → attempt-jI0OWxlz.js} +2 -2
  15. package/dist/{attempt-CGPV3BZY.js.map → attempt-jI0OWxlz.js.map} +1 -1
  16. package/dist/bridge/index.mjs +2 -1
  17. package/dist/{capture-BQlGHiMC.js → capture-dn2hjSLj.js} +29 -21
  18. package/dist/{capture-BQlGHiMC.js.map → capture-dn2hjSLj.js.map} +1 -1
  19. package/dist/capture-nIJ-7kUE.js +1 -0
  20. package/dist/{cli-ClpPT8kn.js → cli-BCE1xlm4.js} +176 -120
  21. package/dist/cli-BCE1xlm4.js.map +1 -0
  22. package/dist/{cli-spec-qmEnQ25_.js → cli-spec-BXIBUlaK.js} +34 -15
  23. package/dist/cli-spec-BXIBUlaK.js.map +1 -0
  24. package/dist/cli.js +2 -2
  25. package/dist/{command-BlM0y8jN.js → command-Bh3yhN_b.js} +8 -8
  26. package/dist/{command-BlM0y8jN.js.map → command-Bh3yhN_b.js.map} +1 -1
  27. package/dist/command-C6vwmjS7.js +91 -0
  28. package/dist/command-C6vwmjS7.js.map +1 -0
  29. package/dist/{command-DbAe1Rzb.js → command-CANun0m0.js} +16 -19
  30. package/dist/command-CANun0m0.js.map +1 -0
  31. package/dist/command-CBaHukyl.js +335 -0
  32. package/dist/command-CBaHukyl.js.map +1 -0
  33. package/dist/{command-TgbzPizb.js → command-D_kEnYcX.js} +17 -16
  34. package/dist/command-D_kEnYcX.js.map +1 -0
  35. package/dist/commands-7tH3EsVu.js +666 -0
  36. package/dist/commands-7tH3EsVu.js.map +1 -0
  37. package/dist/{commands-CthqwkAn.js → commands-BKGzBMgb.js} +1 -1
  38. package/dist/{config-DrVSEVN0.js → config-D7TFvUpL.js} +40 -55
  39. package/dist/config-D7TFvUpL.js.map +1 -0
  40. package/dist/{context-C1mxXh80.js → context-Dgn48BqT.js} +13 -2
  41. package/dist/context-Dgn48BqT.js.map +1 -0
  42. package/dist/{contrasts-5zsj32gk.js → contrasts-B4nOhn0Z.js} +3 -3
  43. package/dist/{contrasts-5zsj32gk.js.map → contrasts-B4nOhn0Z.js.map} +1 -1
  44. package/dist/db-DJUuFoWQ.js +602 -0
  45. package/dist/db-DJUuFoWQ.js.map +1 -0
  46. package/dist/db-W9EFlXnn.js +2 -0
  47. package/dist/{dist-CuY4ehEk.js → dist-Dp_AJgYN.js} +3 -3
  48. package/dist/{dist-CuY4ehEk.js.map → dist-Dp_AJgYN.js.map} +1 -1
  49. package/dist/{docker-D1HZDS6q.js → docker-CQxucRPe.js} +16 -15
  50. package/dist/docker-CQxucRPe.js.map +1 -0
  51. package/dist/{docker-DNmMPOBb.js → docker-Dac6Zalz.js} +1 -1
  52. package/dist/{docker-DOvjji9I.js → docker-DuHcQidD.js} +3 -3
  53. package/dist/{docker-DOvjji9I.js.map → docker-DuHcQidD.js.map} +1 -1
  54. package/dist/{doctor-D2MbNO8L.js → doctor-De_QlOTM.js} +72 -38
  55. package/dist/doctor-De_QlOTM.js.map +1 -0
  56. package/dist/{egress-2-qzPvGi.js → egress-DEAvq8Fl.js} +453 -31
  57. package/dist/egress-DEAvq8Fl.js.map +1 -0
  58. package/dist/env-BQqj93gu.js +21 -0
  59. package/dist/env-BQqj93gu.js.map +1 -0
  60. package/dist/{environment-Cca6a4wB.js → environment-B4IuURK1.js} +247 -14
  61. package/dist/environment-B4IuURK1.js.map +1 -0
  62. package/dist/{evaluate-DMyaGQEj.d.ts → evaluate-C9-ritA5.d.ts} +2 -2
  63. package/dist/{evaluate-DKIl54Hb.js → evaluate-Djk1YPFL.js} +540 -560
  64. package/dist/evaluate-Djk1YPFL.js.map +1 -0
  65. package/dist/facts-Cfx1H70y.js +898 -0
  66. package/dist/facts-Cfx1H70y.js.map +1 -0
  67. package/dist/files-Bs6H3HiG.js +65 -0
  68. package/dist/files-Bs6H3HiG.js.map +1 -0
  69. package/dist/{files-BpUYBwGu.js → files-CN1QfenC.js} +31 -8
  70. package/dist/files-CN1QfenC.js.map +1 -0
  71. package/dist/files-CtjEXWXm.js +1 -0
  72. package/dist/{files-BXHZFWmx.js → files-D27nUk0K.js} +6 -17
  73. package/dist/files-D27nUk0K.js.map +1 -0
  74. package/dist/files-D3gJa91B.js +1 -0
  75. package/dist/generate-BnrvBAzF.js +1646 -0
  76. package/dist/generate-BnrvBAzF.js.map +1 -0
  77. package/dist/{git-Crl3b87o.js → git-rPfl7AD1.js} +3 -3
  78. package/dist/{git-Crl3b87o.js.map → git-rPfl7AD1.js.map} +1 -1
  79. package/dist/{harness-CEuntrla.js → harness-1OkumOAm.js} +3 -3
  80. package/dist/{harness-CEuntrla.js.map → harness-1OkumOAm.js.map} +1 -1
  81. package/dist/harness.d.ts +1 -1
  82. package/dist/harness.js +1 -1
  83. package/dist/{header-DHQv_ZrF.js → header-BVzbRnNv.js} +10 -3
  84. package/dist/{header-DHQv_ZrF.js.map → header-BVzbRnNv.js.map} +1 -1
  85. package/dist/{images-Bi3aGxb9.js → images-m784ueGK.js} +61 -13
  86. package/dist/images-m784ueGK.js.map +1 -0
  87. package/dist/index.d.ts +3 -3
  88. package/dist/index.js +4 -4
  89. package/dist/init-hiTkiM4L.js +543 -0
  90. package/dist/init-hiTkiM4L.js.map +1 -0
  91. package/dist/init-kMkTgTZc.js +1 -0
  92. package/dist/insights-B2Xmhz9o.js +64 -0
  93. package/dist/insights-B2Xmhz9o.js.map +1 -0
  94. package/dist/{invocations-BYDPe3fV.js → invocations-D_ePcwyL.js} +4 -4
  95. package/dist/{invocations-BYDPe3fV.js.map → invocations-D_ePcwyL.js.map} +1 -1
  96. package/dist/{judge-DW_GDOmB.js → judge-CEDIfRiU.js} +50 -15
  97. package/dist/judge-CEDIfRiU.js.map +1 -0
  98. package/dist/judge.d.ts +7 -6
  99. package/dist/judge.js +8 -7
  100. package/dist/judge.js.map +1 -1
  101. package/dist/{live-jlfszAbb.js → live-DYd2QEyR.js} +2 -2
  102. package/dist/{live-jlfszAbb.js.map → live-DYd2QEyR.js.map} +1 -1
  103. package/dist/model-B8H3gL69.js +1 -0
  104. package/dist/{model-DaVCY3rb.js → model-CTiuzkWw.js} +9 -7
  105. package/dist/model-CTiuzkWw.js.map +1 -0
  106. package/dist/model-DcIbmggK.js +1 -0
  107. package/dist/{model-D0IcOQao.js → model-DpkclE4r.js} +60 -25
  108. package/dist/model-DpkclE4r.js.map +1 -0
  109. package/dist/{model-DaX4bNLZ.js → model-UgHDMhI1.js} +144 -46
  110. package/dist/model-UgHDMhI1.js.map +1 -0
  111. package/dist/{node-B3ydHo6t.js → node-CGZYh4Fj.js} +4 -4
  112. package/dist/{node-B3ydHo6t.js.map → node-CGZYh4Fj.js.map} +1 -1
  113. package/dist/{opencode-providers-J9colP0-.js → opencode-providers-snfeWd6Z.js} +86 -47
  114. package/dist/opencode-providers-snfeWd6Z.js.map +1 -0
  115. package/dist/{options-C0d0AzeR.js → options-CyAyLjgJ.js} +22 -11
  116. package/dist/options-CyAyLjgJ.js.map +1 -0
  117. package/dist/{pairs-CnInRu-G.js → pairs-DP6XOJby.js} +2 -2
  118. package/dist/{pairs-CnInRu-G.js.map → pairs-DP6XOJby.js.map} +1 -1
  119. package/dist/{patch-B1bnfhN-.js → patch-uMq9rCl_.js} +2 -2
  120. package/dist/{patch-B1bnfhN-.js.map → patch-uMq9rCl_.js.map} +1 -1
  121. package/dist/{plan-DgQxp9yy.js → plan-CZYgXnZh.js} +21 -8
  122. package/dist/plan-CZYgXnZh.js.map +1 -0
  123. package/dist/plugins-P-uh54VF.js +654 -0
  124. package/dist/plugins-P-uh54VF.js.map +1 -0
  125. package/dist/{preflight-DlQvbySb.js → preflight-BQlPTHVu.js} +1 -1
  126. package/dist/{preflight-BRzD30L5.js → preflight-D3HvKeAx.js} +14 -10
  127. package/dist/preflight-D3HvKeAx.js.map +1 -0
  128. package/dist/prepare-DCwM2KKD.js +2 -0
  129. package/dist/{prepare-B_y-AFMv.js → prepare-Dx7dOnJB.js} +70 -23
  130. package/dist/prepare-Dx7dOnJB.js.map +1 -0
  131. package/dist/{provenance-DQ0AXn6c.js → provenance-C_-8y-x3.js} +4 -4
  132. package/dist/{provenance-DQ0AXn6c.js.map → provenance-C_-8y-x3.js.map} +1 -1
  133. package/dist/{providers-DoTq1jHW.js → providers-CF5UEaP8.js} +24 -10
  134. package/dist/providers-CF5UEaP8.js.map +1 -0
  135. package/dist/providers-CTBYvMxu.js +1 -0
  136. package/dist/{query-BO-ux7RB.js → query-DXthKmq0.js} +3 -3
  137. package/dist/{query-BO-ux7RB.js.map → query-DXthKmq0.js.map} +1 -1
  138. package/dist/query-D_1ARx5q.js +1 -0
  139. package/dist/{questions-C2dym2ce.js → questions-KENpWnfV.js} +8 -9
  140. package/dist/questions-KENpWnfV.js.map +1 -0
  141. package/dist/{record-BKmMvZ6O.js → record-kk9M1hj-.js} +8 -4
  142. package/dist/record-kk9M1hj-.js.map +1 -0
  143. package/dist/{redact-DJ9JCShu.js → redact-CRGdfV2s.js} +4 -2
  144. package/dist/redact-CRGdfV2s.js.map +1 -0
  145. package/dist/remarks-1521zwfW.js +38 -0
  146. package/dist/remarks-1521zwfW.js.map +1 -0
  147. package/dist/remarks-BhAV1H4V.js +1 -0
  148. package/dist/remarks-Ml6bcSdV.js +278 -0
  149. package/dist/remarks-Ml6bcSdV.js.map +1 -0
  150. package/dist/{remote-CPPW86Q9.js → remote-Dkeghk8k.js} +3 -3
  151. package/dist/{remote-CPPW86Q9.js.map → remote-Dkeghk8k.js.map} +1 -1
  152. package/dist/resolve-CMmhACr6.js +1 -0
  153. package/dist/resolve-DzdWcIL6.js +724 -0
  154. package/dist/resolve-DzdWcIL6.js.map +1 -0
  155. package/dist/{results-BE2f-1XS.js → results-D-naai_Q.js} +33 -8
  156. package/dist/results-D-naai_Q.js.map +1 -0
  157. package/dist/{resume-Ca1c8vix.js → resume-8-nnW8iO.js} +4 -4
  158. package/dist/{resume-Ca1c8vix.js.map → resume-8-nnW8iO.js.map} +1 -1
  159. package/dist/{root-DICDHCtp.js → root-DNuLhaA5.js} +2 -2
  160. package/dist/root-DNuLhaA5.js.map +1 -0
  161. package/dist/rules-CcV3zLDR.js +318 -0
  162. package/dist/rules-CcV3zLDR.js.map +1 -0
  163. package/dist/run-Bel7Vde4.js +88 -0
  164. package/dist/run-Bel7Vde4.js.map +1 -0
  165. package/dist/{sandbox-DLrsvu7U.js → sandbox-YLbk9mO7.js} +2 -2
  166. package/dist/{sandbox-DLrsvu7U.js.map → sandbox-YLbk9mO7.js.map} +1 -1
  167. package/dist/sandbox.d.ts +1 -1
  168. package/dist/sandbox.js +1 -1
  169. package/dist/server-C-ysqkLv.js +1 -0
  170. package/dist/{server-TUY5xA_A.js → server-De8oH3bt.js} +10 -10
  171. package/dist/{server-TUY5xA_A.js.map → server-De8oH3bt.js.map} +1 -1
  172. package/dist/{source-DJGS0a0u.js → source-C686eZpY.js} +2 -2
  173. package/dist/{source-DJGS0a0u.js.map → source-C686eZpY.js.map} +1 -1
  174. package/dist/source-DjgypUHW.js +1 -0
  175. package/dist/src-3mP821Pt.js +2 -0
  176. package/dist/src-B3KCLZVk.js +3 -0
  177. package/dist/src-BAyg6CtQ.js +2 -0
  178. package/dist/{src-CF17Ug08.js → src-BYLM3hEz.js} +22 -6
  179. package/dist/src-BYLM3hEz.js.map +1 -0
  180. package/dist/src-BezgGX4X.js +2 -0
  181. package/dist/{src-DvCg0NBs.js → src-C7W6kg81.js} +40 -10
  182. package/dist/{src-DvCg0NBs.js.map → src-C7W6kg81.js.map} +1 -1
  183. package/dist/{src-ftu5wPSt.js → src-CIpKL45U.js} +782 -169
  184. package/dist/src-CIpKL45U.js.map +1 -0
  185. package/dist/src-ChBhk06Q.js +2 -0
  186. package/dist/{src-BxfCKA3_.js → src-CoqZYspK.js} +1 -1
  187. package/dist/{src-CFp86GtV.js → src-CzQrAcF8.js} +49 -49
  188. package/dist/src-CzQrAcF8.js.map +1 -0
  189. package/dist/src-D9fSTxlc.js +1 -0
  190. package/dist/{src-FGXhkEkH.js → src-DeY52Gyf.js} +182 -23
  191. package/dist/src-DeY52Gyf.js.map +1 -0
  192. package/dist/src-DrJSnoMR.js +2 -0
  193. package/dist/{src-DvK0EIZx.js → src-Xj_BZKbq.js} +112 -13
  194. package/dist/src-Xj_BZKbq.js.map +1 -0
  195. package/dist/{src-u8_ixn_F.js → src-cbCb-MPy.js} +20 -4
  196. package/dist/src-cbCb-MPy.js.map +1 -0
  197. package/dist/src-dhSTRN50.js +2 -0
  198. package/dist/{src-C7_1SqDP.js → src-djNNYIdP.js} +2 -2
  199. package/dist/{src-C7_1SqDP.js.map → src-djNNYIdP.js.map} +1 -1
  200. package/dist/state-BGWGAwdo.js +1 -0
  201. package/dist/{state-DfpHox6b.js → state-C0i_ujQZ.js} +19 -17
  202. package/dist/{state-DfpHox6b.js.map → state-C0i_ujQZ.js.map} +1 -1
  203. package/dist/studio-app/assets/{index-CBkhNAv8.js → index-Bb_cid9k.js} +9 -9
  204. package/dist/studio-app/index.html +1 -1
  205. package/dist/{suite-Cw_7G2RM.js → suite-DmuF_ApO.js} +80 -30
  206. package/dist/suite-DmuF_ApO.js.map +1 -0
  207. package/dist/suite-mn9g4veR.js +2 -0
  208. package/dist/{summary-BUKfU-9l.js → summary-BFMHMTz2.js} +273 -47
  209. package/dist/summary-BFMHMTz2.js.map +1 -0
  210. package/dist/testing.d.ts +2 -2
  211. package/dist/testing.js +2 -2
  212. package/dist/{text-gEcKjAyp.js → text-CrVy5ioL.js} +18 -2
  213. package/dist/text-CrVy5ioL.js.map +1 -0
  214. package/dist/{transcript-BNNANU8A.js → transcript-BTxJpW4R.js} +2 -2
  215. package/dist/{transcript-BNNANU8A.js.map → transcript-BTxJpW4R.js.map} +1 -1
  216. package/dist/{types-BYdlwMwo.d.ts → types-B-9b1MDV.d.ts} +850 -34
  217. package/dist/types-C5vI3g1C.js.map +1 -1
  218. package/dist/usage-BDo2q_yu.js +1 -0
  219. package/dist/{command-Bj39y-Wm.js → validate-DWjkshl1.js} +20 -377
  220. package/dist/validate-DWjkshl1.js.map +1 -0
  221. package/dist/view/index.d.ts +31 -263
  222. package/dist/view/index.js +8 -7
  223. package/dist/views-DE2A1jEX.js +2 -0
  224. package/dist/{views-B8w2J-gD.js → views-Dk8MCQKr.js} +8 -98
  225. package/dist/views-Dk8MCQKr.js.map +1 -0
  226. package/dist/{worker-entry-DNnveLqx.js → worker-entry-CqrzGPF4.js} +2 -2
  227. package/dist/{worker-entry-DNnveLqx.js.map → worker-entry-CqrzGPF4.js.map} +1 -1
  228. package/dist/workspace-B1eGO46M.js +1 -0
  229. package/dist/{workspace-C4RA3srV.js → workspace-CLeOybkr.js} +45 -11
  230. package/dist/workspace-CLeOybkr.js.map +1 -0
  231. package/package.json +5 -1
  232. package/skills/eval-rubric/SKILL.md +130 -0
  233. package/dist/agent-D483ru7D.js +0 -334
  234. package/dist/agent-D483ru7D.js.map +0 -1
  235. package/dist/assemble-D5KGrwnJ.js +0 -1
  236. package/dist/assemble-D9GWr-HS.js.map +0 -1
  237. package/dist/capture-CYGLpWxR.js +0 -1
  238. package/dist/cli-ClpPT8kn.js.map +0 -1
  239. package/dist/cli-spec-qmEnQ25_.js.map +0 -1
  240. package/dist/command-Bj39y-Wm.js.map +0 -1
  241. package/dist/command-C-cVjlny.js +0 -1
  242. package/dist/command-DbAe1Rzb.js.map +0 -1
  243. package/dist/command-TgbzPizb.js.map +0 -1
  244. package/dist/commands-YUwlyTbr.js +0 -228
  245. package/dist/commands-YUwlyTbr.js.map +0 -1
  246. package/dist/config-DrVSEVN0.js.map +0 -1
  247. package/dist/context-C1mxXh80.js.map +0 -1
  248. package/dist/db-CKg5NtiW.js +0 -2
  249. package/dist/db-DfhipHEF.js +0 -1416
  250. package/dist/db-DfhipHEF.js.map +0 -1
  251. package/dist/docker-D1HZDS6q.js.map +0 -1
  252. package/dist/doctor-D2MbNO8L.js.map +0 -1
  253. package/dist/egress-2-qzPvGi.js.map +0 -1
  254. package/dist/environment-Cca6a4wB.js.map +0 -1
  255. package/dist/evaluate-DKIl54Hb.js.map +0 -1
  256. package/dist/files-BXHZFWmx.js.map +0 -1
  257. package/dist/files-BpUYBwGu.js.map +0 -1
  258. package/dist/files-Bw8lWEjg.js +0 -1
  259. package/dist/files-D6J0iSdx.js +0 -1
  260. package/dist/images-Bi3aGxb9.js.map +0 -1
  261. package/dist/init-Cl3f3NBT.js +0 -360
  262. package/dist/init-Cl3f3NBT.js.map +0 -1
  263. package/dist/init-fhOXED8F.js +0 -1
  264. package/dist/judge-DW_GDOmB.js.map +0 -1
  265. package/dist/model-CXhrziBe.js +0 -1
  266. package/dist/model-D0IcOQao.js.map +0 -1
  267. package/dist/model-DaVCY3rb.js.map +0 -1
  268. package/dist/model-DaX4bNLZ.js.map +0 -1
  269. package/dist/model-_bxNrk2h.js +0 -1
  270. package/dist/opencode-providers-J9colP0-.js.map +0 -1
  271. package/dist/options-C0d0AzeR.js.map +0 -1
  272. package/dist/plan-DgQxp9yy.js.map +0 -1
  273. package/dist/preflight-BRzD30L5.js.map +0 -1
  274. package/dist/prepare-B_y-AFMv.js.map +0 -1
  275. package/dist/prepare-DCKTLHN3.js +0 -2
  276. package/dist/providers-B9yTdIqF.js +0 -1
  277. package/dist/providers-DoTq1jHW.js.map +0 -1
  278. package/dist/query-CRQfsw0e.js +0 -1
  279. package/dist/questions-C2dym2ce.js.map +0 -1
  280. package/dist/record-BKmMvZ6O.js.map +0 -1
  281. package/dist/redact-DJ9JCShu.js.map +0 -1
  282. package/dist/results-BE2f-1XS.js.map +0 -1
  283. package/dist/root-DICDHCtp.js.map +0 -1
  284. package/dist/server-Dp8eOeK5.js +0 -1
  285. package/dist/source-DdbLGR1M.js +0 -1
  286. package/dist/src-CF17Ug08.js.map +0 -1
  287. package/dist/src-CFp86GtV.js.map +0 -1
  288. package/dist/src-CLoOMVWI.js +0 -3
  289. package/dist/src-CcrQbpG8.js +0 -2
  290. package/dist/src-DCFtJRp0.js +0 -2
  291. package/dist/src-DSYYPEOj.js +0 -2
  292. package/dist/src-DYO3DdnQ.js +0 -1
  293. package/dist/src-DvK0EIZx.js.map +0 -1
  294. package/dist/src-FGXhkEkH.js.map +0 -1
  295. package/dist/src-WD-zgQYZ.js +0 -2
  296. package/dist/src-_oI9AePb.js +0 -2
  297. package/dist/src-ftu5wPSt.js.map +0 -1
  298. package/dist/src-qsKCqv7a.js +0 -2
  299. package/dist/src-u8_ixn_F.js.map +0 -1
  300. package/dist/state-DpAxYyED.js +0 -1
  301. package/dist/suite-Cw_7G2RM.js.map +0 -1
  302. package/dist/suite-DamAEnNF.js +0 -1
  303. package/dist/summary-BUKfU-9l.js.map +0 -1
  304. package/dist/summary-Baa4rTHS.js +0 -192
  305. package/dist/summary-Baa4rTHS.js.map +0 -1
  306. package/dist/text-gEcKjAyp.js.map +0 -1
  307. package/dist/tools-DLHgetpx.js +0 -249
  308. package/dist/tools-DLHgetpx.js.map +0 -1
  309. package/dist/views-B8w2J-gD.js.map +0 -1
  310. package/dist/views-DblnI3kA.js +0 -2
  311. package/dist/workspace-C4RA3srV.js.map +0 -1
  312. package/dist/workspace-C_X0tdv6.js +0 -1
package/README.md CHANGED
@@ -1,300 +1,158 @@
1
+ ```
2
+ ██
3
+ ▄▄ ▄▄▄ ▄▄▄▄ ▄▄▄▄ ▄▄ ▄▄ ▄▄▄▄ ██
4
+ ███▀▀▀ ██▄▄██ ██▄▄██ ██ ██ ▄▄▄██ ██
5
+ ██ ██ ▄ ██ ▄ ████ ██ ██ ██
6
+ ██ ▀▀▀▀ ▀▀▀▀ ▀▀ ▀▀▀▀▀ ▀▀
7
+
8
+ Evaluation runner for SDKs, CLIs, MCP servers, and docs.
9
+
10
+ # Get started using the `/setup` skill:
11
+ npx skills add invertase/reeval --skill setup
12
+
13
+ # Or install manually:
14
+ npm i -D reeval && npx reeval init
15
+ ```
16
+
17
+ > [!IMPORTANT]
18
+ > **Work in Progress**: reeval is under active development. Expect breaking changes between minor version releases.
19
+
1
20
  # reeval
2
21
 
3
- **Find out whether your skill, docs or MCP server makes coding agents better, on real agents.**
22
+ reeval is an open-source evaluation runner for developer tools. It gives a real coding agent a task in a fresh sandbox, then checks the result with assertions on files, commands, and the transcript, and with an LLM judge where an assertion can't decide. Run the same task with and without a skill, doc, or MCP server, and reeval reports whether the change helped.
4
23
 
5
- ```ts
6
- // evals/api.eval.ts, from examples/hello
7
- import { defineEnvironment, evaluate, expect } from 'reeval'
8
- import { claudeCode, codex, cursor } from 'reeval/harness'
9
- import { appFiles, probeUsers } from './api/app.ts'
10
-
11
- // create-next-app's API template at a tag. No baseline, so it's the control.
12
- const nextApi = defineEnvironment('nextjs-api', ({ git }) => ({
13
- workspace: git('github:vercel/next.js', {
14
- ref: 'v16.3.7',
15
- path: 'packages/create-next-app/templates/app-api/ts',
16
- }),
17
- files: appFiles, // package.json, and lib/users.ts to list
18
- setup: ['mv gitignore .gitignore', 'npm install --no-audit --no-fund'],
19
- }))
20
-
21
- const withSkill = nextApi.extendEnvironment('with-api-conventions', ({ skill }) => ({
22
- skills: [
23
- skill.git('github:invertase/reeval', {
24
- ref: '052108cae3ca4c9d1bad1e6b527d76bdf11fd4cc',
25
- path: 'examples/hello/skills',
26
- only: ['api-conventions'],
27
- }),
28
- ],
29
- }))
24
+ Evals are TypeScript files in `evals/`, next to the tool they test. Each run writes a JSON record, and recorded runs commit to Git, so `reeval compare` can diff a pull request's run against the last recorded one and fail the job when an eval regresses.
30
25
 
31
- evaluate(
32
- 'how well the api-conventions skill influences the output',
33
- {
34
- environment: nextApi,
35
- harness: [
36
- cursor({ model: 'composer-2.5' }),
37
- claudeCode({ model: 'claude-sonnet-5' }),
38
- codex({ model: 'gpt-5.6-luna' }),
39
- ],
40
- runs: 3,
41
- timeout: '20m',
42
- compare: {
43
- variants: [withSkill],
44
- questions: ['Which endpoint follows our API conventions?'],
45
- },
46
- },
47
- async (c) => {
48
- await c.send(
49
- 'Add a paginated GET /api/users endpoint (app/api/users/route.ts) ' +
50
- 'over lib/users.ts, with tests that npm test runs.',
51
- )
52
- // The route exists and pages by cursor.
53
- await expect(c).toHaveFile('app/api/users/route.ts', /cursor/i)
54
- // It builds, types included.
55
- await expect(c.exec('npm run build')).toSucceed()
56
- // The agent's own tests pass.
57
- await expect(c.exec('npm test')).toSucceed()
58
- // The built route pages as { data, nextCursor } and rejects a bad cursor.
59
- await expect(c.exec(probeUsers)).toSucceed()
60
- // A judge for what the checks can't read: do the tests cover it?
61
- const covered = 'Do the tests follow nextCursor to the end and check invalid_cursor?'
62
- expect(await c.judge(covered)).toPass()
63
- },
64
- )
26
+ ## Features
27
+
28
+ Cursor ⋅ Claude Code ⋅ Codex ⋅ Antigravity ⋅ OpenCode ⋅ Goose ⋅ pi ⋅ Grok Build
29
+
30
+ - **Real agents**: each harness runs the agent itself, with its own tools, skills, and rules, as it works on a developer's machine ([harnesses](docs/guide/harnesses.mdx)).
31
+ - **Keys stay on the host**: each attempt starts in a fresh sandbox that holds only a placeholder key. reeval's egress gateway swaps in the real key on requests to that provider and nowhere else ([secrets and egress](docs/guide/secrets-and-egress.mdx)).
32
+ - **Compare a change**: one eval runs a baseline and its variants with the same prompt and checks, then prints whether each variant helped, made it worse, or can't tell yet ([compare](docs/guide/compare.mdx)).
33
+ - **Pinned environments**: an environment starts from a workspace, such as a git repository at a fixed ref, then adds files, setup steps, rules, skills, and MCP servers, so every attempt starts from the same state ([environments](docs/guide/environments.mdx)).
34
+ - **History in Git**: recorded runs sit beside the code. `reeval query` reads them with SQL, and `reeval studio` shows each attempt's transcript, diff, and checks ([history](docs/guide/history.mdx)).
35
+
36
+ ## Install
37
+
38
+ ```bash
39
+ npm i -D reeval
65
40
  ```
66
41
 
67
- - **Real agents in sandboxes.** Cursor, Claude Code, Codex, Antigravity, OpenCode, Goose, pi, fx
68
- and Grok Build each work in a fresh local Docker container. Their API keys stay on the host: the sandbox gets
69
- a placeholder, and reeval's egress gateway swaps in the key only on requests to that provider.
70
- - **Any environment.** Start from a git repository at a pinned ref, then add files, setup steps,
71
- rules, skills, MCP servers and secrets, on reeval's image or your own `from` or Dockerfile.
72
- - **The whole matrix.** Each harness × environment is a cell with its own runs, all planned
73
- before anything starts (`reeval run --dry-run`), with profiles that size a run for a PR or a
74
- nightly.
75
- - **Checks and judges.** Deterministic checks on files, commands and the transcript decide pass
76
- or fail; an LLM judge answers what they can't.
77
- - **Compare, questions and analysis.** `compare` says whether each variant helped over the
78
- control, made it worse or can't tell yet (`-v` adds the 95% interval), and its effort;
79
- `questions` asks a model which attempt did better, pair by pair and blind; `reeval analyze` writes a checked reading of a run.
80
- - **Results in your repo.** Every run is a JSON record you can commit, diff with `reeval compare`,
81
- query with SQL (`reeval query`) and browse in `reeval studio`.
82
-
83
- A real run of the eval, one attempt per cell: no control paged by cursor, and with the skill
84
- all three agents passed every check.
42
+ reeval runs on Node.js 22.13 or later. Real runs also need a sandbox runtime (Docker or Podman) and an API keys for the agents. `npx reeval doctor` checks both and names the fix for anything missing.
43
+
44
+ ## Quick start
45
+
46
+ Scaffold a config and one eval, then check that reeval loads them:
47
+
48
+ ```bash
49
+ npx reeval init --yes # reeval.config.ts on Cursor, and evals/greet.eval.ts
50
+ npx reeval run --dry-run # smoke check: plans the run, no keys or sandbox
51
+ ```
85
52
 
86
53
  ```text
87
- $ reeval run evals/api.eval.ts --runs 1
88
- …
89
- pass how well the api-conventions skill influences the output
90
- cursor:composer-2.5
91
- arm pass
92
- nextjs-api 0 of 1
93
- with-api-conventions 1 of 1 can't tell yet
94
- check nextjs-api with-api-conventions
95
- toHaveFile app/api/users/route.ts 0 of 1 1 of 1
96
- expected app/api/users/route.ts to match /cursor/i
97
- toSucceed npm run build not run 1 of 1
98
- toSucceed npm test not run 1 of 1
99
- toSucceed cat > /tmp/probe-users.mjs <<'EOF'… not run 1 of 1
100
- toPass Do the tests follow nextCursor to the… not run 1 of 1
101
- claude-code:claude-sonnet-5
102
- arm pass
103
- nextjs-api 0 of 1
104
- with-api-conventions 1 of 1 can't tell yet
105
- …
106
- codex:gpt-5.6-luna
107
- arm pass
108
- nextjs-api 0 of 1
109
- with-api-conventions 1 of 1 can't tell yet
110
- …
111
- question Which endpoint follows our API conventions?
112
- claude-code:claude-sonnet-5 won 2 of 2
113
- cursor:composer-2.5 won 1 of 4
114
- codex:gpt-5.6-luna won 1 of 2
54
+ plan run … · 1 eval · 1 cell · 1 attempt · ~3m 00s serial
55
+ eval harnesses variants runs attempts notes
56
+ evals/greet.eval.ts › creates greet.js 1 — 1 1
115
57
  …
116
58
  ```
117
59
 
60
+ Then build the agent's sandbox image, add its key, and run it for real:
61
+
118
62
  ```bash
119
- npm i -D reeval # the CLI is `reeval`, or `re` for short
63
+ npx reeval image build
64
+ echo 'CURSOR_API_KEY=…' >> .env.local
65
+ npx reeval run
120
66
  ```
121
67
 
122
- You need Node 22.13 or later and, for real runs, a running Docker.
68
+ Without `--yes`, `init` asks which agent to configure. The starter eval only proves the setup works; the next section is what reeval is for.
123
69
 
124
- | Platform | Fake agent and sandbox | Real runs (Docker sandbox) |
125
- |---|---|---|
126
- | Linux | ✓ | ✓ Docker Engine or Docker Desktop |
127
- | macOS | ✓ | ✓ Docker Desktop, OrbStack or Colima |
128
- | Windows | ✓ with [Git for Windows](https://git-scm.com/download/win) (its `sh`) | ✓ Docker Desktop on the WSL 2 backend, running Linux containers |
70
+ ## Measure whether a skill helps
129
71
 
130
- `reeval doctor` checks Docker for your platform and names the fix. CI runs every tier on Linux and
131
- everything but the Docker tier on Windows and macOS.
132
-
133
- ## A minimal eval
72
+ The Vercel AI SDK deprecates `generateObject` in favour of `Output.object`, and agents trained on older code still reach for the old call. This eval measures whether a skill shipped with the SDK fixes that. It runs the same task in two arms, four attempts each: `plain` has no skill, and `with-skill` adds the one in `skills/ai-sdk`.
134
73
 
135
74
  ```ts
136
- // evals/hello.eval.ts
137
- import { evaluate, expect, group } from 'reeval'
138
-
139
- group('greet module', () => {
140
- evaluate('creates a tested greet module', async (c) => {
141
- const turn = await c.send(
142
- 'Create greet.js exporting greet(name) that returns "Hello, <name>!", ' +
143
- 'and greet.test.js that tests it with node:test. No dependencies.',
144
- )
145
-
146
- await expect(turn).toHaveFile('greet.js')
147
- await expect(c.exec('node --test')).toSucceed()
148
- const honest = "Does the agent's final message describe what it changed?"
149
- expect(await c.judge(honest)).toPass()
150
- })
151
- })
152
- ```
75
+ // evals/ai-sdk.eval.ts
76
+ import { defineEnvironment, evaluate, expect } from 'reeval';
153
77
 
154
- ```ts
155
- // reeval.config.ts
156
- import { defineConfig } from 'reeval'
157
- import { cursor } from 'reeval/harness'
158
-
159
- export default defineConfig({
160
- include: ['evals/**/*.eval.ts'],
161
- // or claudeCode, codex, antigravity, opencode, goose, pi, fx, grokBuild, or a
162
- // list of harnesses: each is its own cell
163
- harness: cursor({ model: 'composer-2.5' }),
164
- // optional; pin the version
165
- judge: { model: 'typesafe-ai/jev-1.14.0', threshold: 0.8 },
166
- timeout: '15m',
167
- profiles: {
168
- pr: { limit: { runs: 1, compare: false }, budget: { attempts: 20 } },
169
- nightly: { defaults: { runs: 3 }, record: 'always' },
170
- },
171
- defaultProfile: { ci: 'pr' },
172
- })
173
- ```
78
+ const plain = defineEnvironment('plain', {});
174
79
 
175
- ## Compare with a skill
80
+ const withSkill = plain.extendEnvironment('with-skill', ({ skill }) => ({
81
+ skills: [skill.local('../skills/ai-sdk')],
82
+ }));
176
83
 
177
- Give the agent a skill and check that it helps. `plain` is the baseline. The variant is
178
- that environment plus the skill, and compare runs the two apart, with the same prompt and
179
- the same checks:
84
+ evaluate(
85
+ 'triages a GitHub issue with the AI SDK',
86
+ { runs: 4, compare: { baseline: plain, variants: [withSkill] } },
87
+ async (c) => {
88
+ await c.send(`
89
+ Add triage.ts: triageIssue(title, body) uses the ai package to
90
+ return a typed { labels, priority, duplicateOf }.
91
+ `);
180
92
 
181
- ```ts
182
- // evals/skill.eval.ts (trimmed from examples/hello)
183
- import { defineEnvironment, evaluate, expect, group } from 'reeval'
184
-
185
- const plain = defineEnvironment('plain', {})
186
- const withHouseGreeting = plain.extendEnvironment(
187
- 'with-house-greeting',
188
- ({ skill }) => ({
189
- skills: [skill.local('../skills/house-greeting')],
190
- }),
191
- )
192
-
193
- group(
194
- 'house greeting',
195
- { compare: { baseline: plain, variants: [withHouseGreeting] } },
196
- () => {
197
- evaluate('greets in the house style', async (c) => {
198
- await c.send(
199
- 'Create greet.js exporting greet(name) that greets the person ' +
200
- 'in our house style.',
201
- )
202
- await expect(c.exec(greetAda)).toSucceed() // passes only for "Ahoy, Ada!"
203
- })
93
+ await expect(c, 'writes triage.ts').toHaveFile('triage.ts');
94
+ await expect(c, 'uses Output.object').toHaveFile('triage.ts', /Output\.object/);
204
95
  },
205
- )
96
+ );
206
97
  ```
207
98
 
208
99
  ```text
209
- $ reeval run skill --runs 2
210
- plan run 20261020T213308Z_… · 1 eval · 2 cells · 4 attempts · ~52s serial (~13s at concurrency 4)
100
+ $ npx reeval run evals/ai-sdk.eval.ts
211
101
  …
212
- pass house greeting › greets in the house style
213
- arm pass
214
- plain 0 of 2
215
- with-house-greeting 2 of 2 can't tell yet
216
- check plain with-house-greeting
217
- house greeting 0 of 2 2 of 2
218
- expected command to succeed, exit code 1
219
- +2 more passed
102
+ pass triages a GitHub issue with the AI SDK
103
+ arm pass
104
+ plain 0 of 4
105
+ with-skill 4 of 4 helped
106
+ check plain with-skill
107
+ uses Output.object 0 of 4 4 of 4
108
+ expected triage.ts to match /Output\.object/
109
+ +1 more passed
220
110
  …
111
+ 1 pass
221
112
  ```
222
113
 
223
- ## Run it
114
+ Without the skill, no attempt used `Output.object`; with it, all four did. `helped` means the 95% interval of the difference sits above zero (`-v` prints it), and `made it worse` that it sits below. When the interval spans zero, or an arm has too few attempts, reeval prints `can't tell yet`. `+1 more passed` folds the checks that every arm passed.
224
115
 
225
- ```text
226
- $ CI=1 reeval run hello --output-logs full
227
- plan run 20261020T220141Z_… · profile pr (auto: CI is set) · 2 evals · 2 cells · 2 attempts · ~25s serial (~13s at concurrency 4) · budget 20 attempts ✓
228
- reeval 0.10.0 · run 20261020T220141Z_… · 1 eval file · harness cursor:composer-2.5 · sandbox docker · concurrency 4 · grouped logs
229
- [creates#1 cursor] ▶ evals/hello.eval.ts › greet module › creates a tested greet module
230
- [creates#1 cursor] +0:00 sandbox ready 2s
231
- [creates#1 cursor] +0:01 turn 1 done 6s · 2 tool calls, 2 file edits
232
- [creates#1 cursor] +0:08 $ node --test exit 0 210ms
233
- [creates#1 cursor] +0:08 judge pass 1.00 (≥ 0.8) Does the agent's final message accurately describe what it changed?
234
- [adds#1 cursor] ▶ evals/hello.eval.ts › greet module › adds a default name in a follow-up turn
235
- [adds#1 cursor] +0:00 sandbox ready 2s
236
- [adds#1 cursor] +0:01 turn 1 done 7s · 1 tool call, 1 file edit
237
- [adds#1 cursor] +0:09 turn 2 done 4s · 1 tool call, 1 file edit
238
- [adds#1 cursor] +0:12 $ node -e "import('./greet.js').then((m) => {… exit 0 105ms
239
- [adds#1 cursor] +0:13 judge pass 1.00 (≥ 0.8) Did the agent add the default without breaking greet(name)?
240
-
241
- pass greet module › creates a tested greet module
242
- pass greet module › adds a default name in a follow-up turn
243
-
244
- 16s · 144k in (64k cached) · 863 out · results .reeval/runs/20261020T220141Z_…/summary.md
245
- 2 pass
246
- Set analysis.model in reeval.config.ts for answers to what each eval asks.
247
- recorded evals/.history/20261020T220141Z_….json + 10 artifact files in evals/.history/20261020T220141Z_…/ (41.8 KB). Commit it with git.
248
- ```
116
+ ## Run in CI and inspect runs
249
117
 
250
- Under a coding agent, reeval switches to compact output: the plan, the same result blocks and
251
- the tally, with no per-attempt lines. To see what an attempt did step by step, add `-v`; `-vv`
252
- adds the raw payloads and every `docker` command. Either way each attempt's trace stays local in `.reeval/debug`, never in
253
- the committed history.
118
+ | Command | Use it for |
119
+ | --- | --- |
120
+ | <code>reeval&nbsp;run&nbsp;--profile&nbsp;pr</code> | A run sized for a pull request. In the config `init` writes, that is one run per cell, no variants, and at most 20 attempts. |
121
+ | <code>reeval&nbsp;compare&nbsp;--fail-on-regression</code> | Diff a run against its nearest recorded ancestor, and exit 1 when an eval regressed. |
122
+ | <code>reeval&nbsp;show&nbsp;--md</code> | One run's results as Markdown, for a job summary or a PR comment. |
123
+ | <code>reeval&nbsp;query</code> | Read-only SQL over every run, or built-in views such as `lift`, `effort`, and `failing_attempts`. |
124
+ | <code>reeval&nbsp;studio</code> | Runs, transcripts, diffs, and checks in the browser, or a static site with `reeval studio build`. |
254
125
 
255
- ```bash
256
- reeval record # copy the latest run into evals/.history/
257
- reeval history # pass/fail per eval over recent runs
258
- reeval compare # latest vs its nearest recorded ancestor
259
- reeval query lift # each variant against its control
260
- reeval query effort # tool calls, agent time and tokens
261
- reeval query "SELECT * FROM failing_attempts WHERE skill = 'house-greeting'"
262
- reeval analyze # a checked reading of a run
263
- ```
126
+ Environments load extensions from where teams already keep them:
264
127
 
265
- Where the harness reports them (every harness but Goose does), the record
266
- keeps each turn's tokens and the model that served it, and totals them per attempt and per run.
128
+ - **Skills**: from a local folder, a git repository at a pinned ref, an npm package, the skills.sh registry, or written inline.
129
+ - **MCP servers**: stdio, Streamable HTTP, or SSE servers, with their own environment variables and headers.
130
+ - **Rules**: the project's instructions, written as `AGENTS.md`, or `CLAUDE.md` on Claude Code, before the first turn.
267
131
 
268
- `reeval analyze` makes one LLM call over a digest of those facts, and checks every claim's
269
- citations and every suggested command against reeval's own CLI. `--save` commits it next to the
270
- run, and `reeval analyze --context` hands the same digest to your own coding agent, with no key.
132
+ ## Examples
271
133
 
272
- ## Studio
134
+ The [recipes](docs/recipes/index.mdx) are complete evals for common jobs:
273
135
 
274
- ```bash
275
- reeval studio # runs, evals and transcripts on :4984
276
- reeval studio build --out site # the same as a static site, for any host
277
- ```
136
+ - [Prove a skill helps](docs/recipes/skill-lift.mdx): with and without a skill, gated on a minimum lift.
137
+ - [Compare agents](docs/recipes/compare-agents.mdx): one suite on several agents at once, with pass rate and effort per agent.
138
+ - [Evaluate an MCP server](docs/recipes/mcp-server.mdx): check the agent calls the server's tools, and whether answers improve.
139
+ - [Check a recommendation](docs/recipes/recommendation.mdx): ask which library to use, and let a judge decide whether the agent picks the right one.
140
+ - [PR gate in GitHub Actions](docs/recipes/github-pr-gate.mdx): run on every pull request and fail the check on a regression.
141
+
142
+ ## Documentation
143
+
144
+ The manual in [`docs/`](docs/index.mdx) covers harnesses, sandboxes, environments, secrets and egress, checks and judges, profiles, history, and every CLI command and flag.
145
+
146
+ ## For coding agents
278
147
 
279
- The studio shows each run's commit, pass counts and drift, and its saved analyses. For compares
280
- it shows per-cell pass rates, lift and effort, and for each attempt the transcript, diff, checks
281
- and judge input. `reeval studio` adds a Debug tab for attempts with local debug data.
148
+ To write or update evals, load [`skills/reeval/SKILL.md`](skills/reeval/SKILL.md). For every command, flag, and exit code, run `npx reeval --help`.
282
149
 
283
- ## Learn more
150
+ To preview a run without starting sandboxes or spending tokens, run `npx reeval run --dry-run --json`. It prints the planned evals, cells, and attempts as one JSON document and exits 0.
284
151
 
285
- | For | Read |
286
- |---|---|
287
- | Learning reeval, from a first eval to CI | The Guide in [`docs/`](./docs), a [docs.page](https://use.docs.page) site (`npx @docs.page/cli preview`) |
288
- | How it works, and complete solutions | The docs' Concepts and Recipes |
289
- | Every option, command, flag, exit code and file format | The docs' Reference |
290
- | Coding agents writing evals | The reeval skill, [`skills/reeval/SKILL.md`](./skills/reeval/SKILL.md) |
291
- | Developing this repo | [AGENTS.md](./AGENTS.md) |
152
+ To check a machine's setup, run `npx reeval doctor --json`. It checks Node.js, the sandbox and its images, and the agents' keys, never prints a key, and changes nothing.
292
153
 
293
- ## License
154
+ To read past runs without calling a model, run `npx reeval query failing_attempts --json`, or `npx reeval analyze --context` for a run's digest. `npx reeval mcp` serves the run history over stdio as read-only MCP tools.
294
155
 
295
- Licensed under the [Apache License, Version 2.0](./LICENSE). Copyright 2026 Invertase Limited.
296
- Questions about licensing: [oss@invertase.io](mailto:oss@invertase.io).
156
+ ## Licence
297
157
 
298
- The published package inlines some third-party code (the studio app's React, Radix UI and
299
- shadcn/ui components, and Claude Code's patched adapter). Its `THIRD_PARTY_NOTICES.md`, generated
300
- at build time, lists each of those packages with its version, licence and notices.
158
+ [Apache-2.0](LICENSE). Copyright 2026 Invertase Limited. The npm package ships third-party licences and attributions in `THIRD_PARTY_NOTICES.md`. Questions about licensing: [oss@invertase.io](mailto:oss@invertase.io).
@@ -4,6 +4,6 @@
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "dependencies": {
7
- "@earendil-works/pi-coding-agent": "1.3.0"
7
+ "@earendil-works/pi-coding-agent": "1.4.0"
8
8
  }
9
9
  }
@@ -9,8 +9,8 @@ importers:
9
9
  .:
10
10
  dependencies:
11
11
  '@earendil-works/pi-coding-agent':
12
- specifier: 1.3.0
13
- version: 1.3.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
12
+ specifier: 1.4.0
13
+ version: 1.4.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
14
14
 
15
15
  packages:
16
16
 
@@ -107,34 +107,34 @@ packages:
107
107
  resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==}
108
108
  engines: {node: '>=6.9.0'}
109
109
 
110
- '@earendil-works/pi-agent-core@1.3.0':
111
- resolution: {integrity: sha512-2jvpxZs47PFD5mSQb/yK0pGHJ5yO7Nu22u9mFjHbSLRgu62vZ9rupimDSIp4arnqOadyv0AWvYHtCSpFoJV7ag==}
110
+ '@earendil-works/pi-agent-core@1.4.0':
111
+ resolution: {integrity: sha512-PoKY84SKUwnt7S5QBZaGUqfNO1kjP3KHpHUA9QpFTj4cOjaVWMYIcBPJ6FDRCdE8Zen9OSECQUd0uUfVgtSmgA==}
112
112
  engines: {node: '>=22.19.0'}
113
113
 
114
- '@earendil-works/pi-ai@1.3.0':
115
- resolution: {integrity: sha512-KaBI8x7q7sPoFUXICNGD9efHzDG+oRNwVvkA9jdIsSQWH1RjFssOlEGsbLtewUPPgCrvmz0l2KTgSLXTyj3acw==}
114
+ '@earendil-works/pi-ai@1.4.0':
115
+ resolution: {integrity: sha512-hQM/C4+1w8rHYACzDDf+0vQMnEnpzIop1tptIERVgR3ZeT/hHSzBNG8PaWPgxWQjqSeKCyBZSyp8uTT6eKK1pQ==}
116
116
  engines: {node: '>=22.19.0'}
117
117
  hasBin: true
118
118
 
119
- '@earendil-works/pi-codemode@1.3.0':
120
- resolution: {integrity: sha512-2G9tmbsPhgzwfz7cmzJpbLSLqOx3eu22Gbzm+Wc3HqeZMjLQS4F3KfAabozVhv7uEjq3k2O1dZTHmhhWr2xbfQ==}
119
+ '@earendil-works/pi-codemode@1.4.0':
120
+ resolution: {integrity: sha512-23CNAXpS9DuLzPMyYuvrXVVio46x4YhffCgCqaWmF7F5H8PooqjrQvX4ucF6M0BhUd+x2tV6r1J0dv8cCME4Cg==}
121
121
  engines: {node: '>=22.19.0'}
122
122
 
123
- '@earendil-works/pi-coding-agent@1.3.0':
124
- resolution: {integrity: sha512-V/WoCjA2hQSe3QLWIUB24cTRdtEdeLiIzkDqU5RMXV6VWuD+KGZnzVBMhglwdnQTySkehZsjt8a3g6Jd2g4nnw==}
123
+ '@earendil-works/pi-coding-agent@1.4.0':
124
+ resolution: {integrity: sha512-Z41LpZ3yYHSC/UUps6Mr39UMFPwH8elhJBG9DY1P7kuzsE5qSK/6eMj2EHzO5evJRQWLbKSqUMw+4nCNtIyiQg==}
125
125
  engines: {node: '>=22.19.0'}
126
126
  hasBin: true
127
127
 
128
- '@earendil-works/pi-mcp@1.3.0':
129
- resolution: {integrity: sha512-lbktLplmdGamM2t460Q0ziNEfpUEHDTVNf79g/AialJ3XZ+SHgNqa/OJXRR+fU+GV/l+gBhRPcyP8XkQlv8Avw==}
128
+ '@earendil-works/pi-mcp@1.4.0':
129
+ resolution: {integrity: sha512-92aZmmGsUpHHknYuKXZHRINQfahntw5hU9If0I0ZM49GojOaFHpkl5/GF3/aatqpt7v7GjZbBfpfSygGKW+pnw==}
130
130
  engines: {node: '>=22.19.0'}
131
131
 
132
- '@earendil-works/pi-telemetry@1.3.0':
133
- resolution: {integrity: sha512-ERGZr+aXjNJzoUbB7ZzHVH3g5otzMHjHLs2Fyizm12By5X+gBEhod9cJXFOk13S7M8a29Am+Mq21zm73mRJFLg==}
132
+ '@earendil-works/pi-telemetry@1.4.0':
133
+ resolution: {integrity: sha512-MLIfowwUYIY65jSjMX82paZOrX/NTvLk6D08h+3Jq42a99RzUOewzuCR0zOlPul3D6UBfddat76VT6LvsHEs1w==}
134
134
  engines: {node: '>=22.19.0'}
135
135
 
136
- '@earendil-works/pi-tui@1.3.0':
137
- resolution: {integrity: sha512-AlKvEwEWyVtnuw7SVb4N/mUhlfIohyFslUNWarZVdLHHSdt3ca5EhMLwTzblBpDpaofSz+f+tAHie6CfxVrWKA==}
136
+ '@earendil-works/pi-tui@1.4.0':
137
+ resolution: {integrity: sha512-4obPOjgOD7g4mGSlngIvxyujC1UPdmyI9zdVthbr8GufacFEX+Ce0+scPgHg++k2xj5+QjESM2d5TxvIuzCVmg==}
138
138
  engines: {node: '>=22.19.0'}
139
139
 
140
140
  '@google/genai@2.21.0':
@@ -356,6 +356,12 @@ packages:
356
356
  resolution: {integrity: sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==}
357
357
  engines: {node: 20 || >=22}
358
358
 
359
+ marked-cjk-friendly@0.1.2:
360
+ resolution: {integrity: sha512-GUj8HjiEbur9yhgUo52FBgKizggF1QtT6gVdrYdWW6ZB4lVVjgS3EyyXPyfyRD0V4ghGRPlO7MO80rgSWbm0eA==}
361
+ engines: {node: '>=18'}
362
+ peerDependencies:
363
+ marked: '>=15.0.0'
364
+
359
365
  marked@18.0.11:
360
366
  resolution: {integrity: sha512-HnslJfsZkRPBDJRHvVtAaWlZHEpSu7u8LgQuJCELjRKuWR+hpq4A7sLq3p8HaI9ypVoXDXxV34CsQJEe1+J5Aw==}
361
367
  engines: {node: '>= 20'}
@@ -694,9 +700,9 @@ snapshots:
694
700
 
695
701
  '@babel/runtime@7.29.7': {}
696
702
 
697
- '@earendil-works/pi-agent-core@1.3.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.22.0)':
703
+ '@earendil-works/pi-agent-core@1.4.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.22.0)':
698
704
  dependencies:
699
- '@earendil-works/pi-ai': 1.3.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.22.0)
705
+ '@earendil-works/pi-ai': 1.4.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.22.0)
700
706
  typebox: 1.3.27
701
707
  transitivePeerDependencies:
702
708
  - '@aws-sdk/credential-provider-node'
@@ -711,11 +717,11 @@ snapshots:
711
717
  - ws
712
718
  - zod
713
719
 
714
- '@earendil-works/pi-ai@1.3.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.22.0)':
720
+ '@earendil-works/pi-ai@1.4.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.22.0)':
715
721
  dependencies:
716
722
  '@anthropic-ai/sdk': 0.129.0
717
723
  '@aws-sdk/client-bedrock-runtime': 3.1127.0
718
- '@earendil-works/pi-telemetry': 1.3.0
724
+ '@earendil-works/pi-telemetry': 1.4.0
719
725
  '@google/genai': 2.21.0
720
726
  '@smithy/node-http-handler': 4.12.1
721
727
  http-proxy-agent: 9.1.0
@@ -736,17 +742,17 @@ snapshots:
736
742
  - ws
737
743
  - zod
738
744
 
739
- '@earendil-works/pi-codemode@1.3.0':
745
+ '@earendil-works/pi-codemode@1.4.0':
740
746
  dependencies:
741
747
  quickjs-wasi: 3.6.2
742
748
 
743
- '@earendil-works/pi-coding-agent@1.3.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
749
+ '@earendil-works/pi-coding-agent@1.4.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
744
750
  dependencies:
745
- '@earendil-works/pi-agent-core': 1.3.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.22.0)
746
- '@earendil-works/pi-ai': 1.3.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.22.0)
747
- '@earendil-works/pi-codemode': 1.3.0
748
- '@earendil-works/pi-mcp': 1.3.0
749
- '@earendil-works/pi-tui': 1.3.0
751
+ '@earendil-works/pi-agent-core': 1.4.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.22.0)
752
+ '@earendil-works/pi-ai': 1.4.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.22.0)
753
+ '@earendil-works/pi-codemode': 1.4.0
754
+ '@earendil-works/pi-mcp': 1.4.0
755
+ '@earendil-works/pi-tui': 1.4.0
750
756
  '@silvia-odwyer/photon-node': 0.3.4
751
757
  brace-expansion: 5.0.12
752
758
  chalk: 6.0.0
@@ -776,16 +782,17 @@ snapshots:
776
782
  - ws
777
783
  - zod
778
784
 
779
- '@earendil-works/pi-mcp@1.3.0':
785
+ '@earendil-works/pi-mcp@1.4.0':
780
786
  dependencies:
781
787
  cross-spawn: 7.0.6
782
788
 
783
- '@earendil-works/pi-telemetry@1.3.0': {}
789
+ '@earendil-works/pi-telemetry@1.4.0': {}
784
790
 
785
- '@earendil-works/pi-tui@1.3.0':
791
+ '@earendil-works/pi-tui@1.4.0':
786
792
  dependencies:
787
793
  get-east-asian-width: 1.6.0
788
794
  marked: 18.0.11
795
+ marked-cjk-friendly: 0.1.2(marked@18.0.11)
789
796
 
790
797
  '@google/genai@2.21.0':
791
798
  dependencies:
@@ -1008,6 +1015,10 @@ snapshots:
1008
1015
 
1009
1016
  lru-cache@11.5.3: {}
1010
1017
 
1018
+ marked-cjk-friendly@0.1.2(marked@18.0.11):
1019
+ dependencies:
1020
+ marked: 18.0.11
1021
+
1011
1022
  marked@18.0.11: {}
1012
1023
 
1013
1024
  minimatch@10.2.6: