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.
- package/README.md +115 -257
- package/assets/package.json +1 -1
- package/assets/pnpm-lock.yaml +41 -30
- package/bin/mcp-timer.cjs +224 -0
- package/dist/{adapter-Bwy3QxAK.js → adapter-IKKo4sZj.js} +4 -4
- package/dist/{adapter-Bwy3QxAK.js.map → adapter-IKKo4sZj.js.map} +1 -1
- package/dist/{agent-DpE80WPz.js → agent-ClE-g9VL.js} +22 -7
- package/dist/{agent-DpE80WPz.js.map → agent-ClE-g9VL.js.map} +1 -1
- package/dist/{analysis-Bxub9LMT.js → analysis-B0nOfAzA.js} +3 -3
- package/dist/{analysis-Bxub9LMT.js.map → analysis-B0nOfAzA.js.map} +1 -1
- package/dist/{assemble-D9GWr-HS.js → assemble-BO93VAk1.js} +22 -20
- package/dist/assemble-BO93VAk1.js.map +1 -0
- package/dist/assemble-VQxyoDxK.js +1 -0
- package/dist/{attempt-CGPV3BZY.js → attempt-jI0OWxlz.js} +2 -2
- package/dist/{attempt-CGPV3BZY.js.map → attempt-jI0OWxlz.js.map} +1 -1
- package/dist/bridge/index.mjs +2 -1
- package/dist/{capture-BQlGHiMC.js → capture-dn2hjSLj.js} +29 -21
- package/dist/{capture-BQlGHiMC.js.map → capture-dn2hjSLj.js.map} +1 -1
- package/dist/capture-nIJ-7kUE.js +1 -0
- package/dist/{cli-ClpPT8kn.js → cli-BCE1xlm4.js} +176 -120
- package/dist/cli-BCE1xlm4.js.map +1 -0
- package/dist/{cli-spec-qmEnQ25_.js → cli-spec-BXIBUlaK.js} +34 -15
- package/dist/cli-spec-BXIBUlaK.js.map +1 -0
- package/dist/cli.js +2 -2
- package/dist/{command-BlM0y8jN.js → command-Bh3yhN_b.js} +8 -8
- package/dist/{command-BlM0y8jN.js.map → command-Bh3yhN_b.js.map} +1 -1
- package/dist/command-C6vwmjS7.js +91 -0
- package/dist/command-C6vwmjS7.js.map +1 -0
- package/dist/{command-DbAe1Rzb.js → command-CANun0m0.js} +16 -19
- package/dist/command-CANun0m0.js.map +1 -0
- package/dist/command-CBaHukyl.js +335 -0
- package/dist/command-CBaHukyl.js.map +1 -0
- package/dist/{command-TgbzPizb.js → command-D_kEnYcX.js} +17 -16
- package/dist/command-D_kEnYcX.js.map +1 -0
- package/dist/commands-7tH3EsVu.js +666 -0
- package/dist/commands-7tH3EsVu.js.map +1 -0
- package/dist/{commands-CthqwkAn.js → commands-BKGzBMgb.js} +1 -1
- package/dist/{config-DrVSEVN0.js → config-D7TFvUpL.js} +40 -55
- package/dist/config-D7TFvUpL.js.map +1 -0
- package/dist/{context-C1mxXh80.js → context-Dgn48BqT.js} +13 -2
- package/dist/context-Dgn48BqT.js.map +1 -0
- package/dist/{contrasts-5zsj32gk.js → contrasts-B4nOhn0Z.js} +3 -3
- package/dist/{contrasts-5zsj32gk.js.map → contrasts-B4nOhn0Z.js.map} +1 -1
- package/dist/db-DJUuFoWQ.js +602 -0
- package/dist/db-DJUuFoWQ.js.map +1 -0
- package/dist/db-W9EFlXnn.js +2 -0
- package/dist/{dist-CuY4ehEk.js → dist-Dp_AJgYN.js} +3 -3
- package/dist/{dist-CuY4ehEk.js.map → dist-Dp_AJgYN.js.map} +1 -1
- package/dist/{docker-D1HZDS6q.js → docker-CQxucRPe.js} +16 -15
- package/dist/docker-CQxucRPe.js.map +1 -0
- package/dist/{docker-DNmMPOBb.js → docker-Dac6Zalz.js} +1 -1
- package/dist/{docker-DOvjji9I.js → docker-DuHcQidD.js} +3 -3
- package/dist/{docker-DOvjji9I.js.map → docker-DuHcQidD.js.map} +1 -1
- package/dist/{doctor-D2MbNO8L.js → doctor-De_QlOTM.js} +72 -38
- package/dist/doctor-De_QlOTM.js.map +1 -0
- package/dist/{egress-2-qzPvGi.js → egress-DEAvq8Fl.js} +453 -31
- package/dist/egress-DEAvq8Fl.js.map +1 -0
- package/dist/env-BQqj93gu.js +21 -0
- package/dist/env-BQqj93gu.js.map +1 -0
- package/dist/{environment-Cca6a4wB.js → environment-B4IuURK1.js} +247 -14
- package/dist/environment-B4IuURK1.js.map +1 -0
- package/dist/{evaluate-DMyaGQEj.d.ts → evaluate-C9-ritA5.d.ts} +2 -2
- package/dist/{evaluate-DKIl54Hb.js → evaluate-Djk1YPFL.js} +540 -560
- package/dist/evaluate-Djk1YPFL.js.map +1 -0
- package/dist/facts-Cfx1H70y.js +898 -0
- package/dist/facts-Cfx1H70y.js.map +1 -0
- package/dist/files-Bs6H3HiG.js +65 -0
- package/dist/files-Bs6H3HiG.js.map +1 -0
- package/dist/{files-BpUYBwGu.js → files-CN1QfenC.js} +31 -8
- package/dist/files-CN1QfenC.js.map +1 -0
- package/dist/files-CtjEXWXm.js +1 -0
- package/dist/{files-BXHZFWmx.js → files-D27nUk0K.js} +6 -17
- package/dist/files-D27nUk0K.js.map +1 -0
- package/dist/files-D3gJa91B.js +1 -0
- package/dist/generate-BnrvBAzF.js +1646 -0
- package/dist/generate-BnrvBAzF.js.map +1 -0
- package/dist/{git-Crl3b87o.js → git-rPfl7AD1.js} +3 -3
- package/dist/{git-Crl3b87o.js.map → git-rPfl7AD1.js.map} +1 -1
- package/dist/{harness-CEuntrla.js → harness-1OkumOAm.js} +3 -3
- package/dist/{harness-CEuntrla.js.map → harness-1OkumOAm.js.map} +1 -1
- package/dist/harness.d.ts +1 -1
- package/dist/harness.js +1 -1
- package/dist/{header-DHQv_ZrF.js → header-BVzbRnNv.js} +10 -3
- package/dist/{header-DHQv_ZrF.js.map → header-BVzbRnNv.js.map} +1 -1
- package/dist/{images-Bi3aGxb9.js → images-m784ueGK.js} +61 -13
- package/dist/images-m784ueGK.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +4 -4
- package/dist/init-hiTkiM4L.js +543 -0
- package/dist/init-hiTkiM4L.js.map +1 -0
- package/dist/init-kMkTgTZc.js +1 -0
- package/dist/insights-B2Xmhz9o.js +64 -0
- package/dist/insights-B2Xmhz9o.js.map +1 -0
- package/dist/{invocations-BYDPe3fV.js → invocations-D_ePcwyL.js} +4 -4
- package/dist/{invocations-BYDPe3fV.js.map → invocations-D_ePcwyL.js.map} +1 -1
- package/dist/{judge-DW_GDOmB.js → judge-CEDIfRiU.js} +50 -15
- package/dist/judge-CEDIfRiU.js.map +1 -0
- package/dist/judge.d.ts +7 -6
- package/dist/judge.js +8 -7
- package/dist/judge.js.map +1 -1
- package/dist/{live-jlfszAbb.js → live-DYd2QEyR.js} +2 -2
- package/dist/{live-jlfszAbb.js.map → live-DYd2QEyR.js.map} +1 -1
- package/dist/model-B8H3gL69.js +1 -0
- package/dist/{model-DaVCY3rb.js → model-CTiuzkWw.js} +9 -7
- package/dist/model-CTiuzkWw.js.map +1 -0
- package/dist/model-DcIbmggK.js +1 -0
- package/dist/{model-D0IcOQao.js → model-DpkclE4r.js} +60 -25
- package/dist/model-DpkclE4r.js.map +1 -0
- package/dist/{model-DaX4bNLZ.js → model-UgHDMhI1.js} +144 -46
- package/dist/model-UgHDMhI1.js.map +1 -0
- package/dist/{node-B3ydHo6t.js → node-CGZYh4Fj.js} +4 -4
- package/dist/{node-B3ydHo6t.js.map → node-CGZYh4Fj.js.map} +1 -1
- package/dist/{opencode-providers-J9colP0-.js → opencode-providers-snfeWd6Z.js} +86 -47
- package/dist/opencode-providers-snfeWd6Z.js.map +1 -0
- package/dist/{options-C0d0AzeR.js → options-CyAyLjgJ.js} +22 -11
- package/dist/options-CyAyLjgJ.js.map +1 -0
- package/dist/{pairs-CnInRu-G.js → pairs-DP6XOJby.js} +2 -2
- package/dist/{pairs-CnInRu-G.js.map → pairs-DP6XOJby.js.map} +1 -1
- package/dist/{patch-B1bnfhN-.js → patch-uMq9rCl_.js} +2 -2
- package/dist/{patch-B1bnfhN-.js.map → patch-uMq9rCl_.js.map} +1 -1
- package/dist/{plan-DgQxp9yy.js → plan-CZYgXnZh.js} +21 -8
- package/dist/plan-CZYgXnZh.js.map +1 -0
- package/dist/plugins-P-uh54VF.js +654 -0
- package/dist/plugins-P-uh54VF.js.map +1 -0
- package/dist/{preflight-DlQvbySb.js → preflight-BQlPTHVu.js} +1 -1
- package/dist/{preflight-BRzD30L5.js → preflight-D3HvKeAx.js} +14 -10
- package/dist/preflight-D3HvKeAx.js.map +1 -0
- package/dist/prepare-DCwM2KKD.js +2 -0
- package/dist/{prepare-B_y-AFMv.js → prepare-Dx7dOnJB.js} +70 -23
- package/dist/prepare-Dx7dOnJB.js.map +1 -0
- package/dist/{provenance-DQ0AXn6c.js → provenance-C_-8y-x3.js} +4 -4
- package/dist/{provenance-DQ0AXn6c.js.map → provenance-C_-8y-x3.js.map} +1 -1
- package/dist/{providers-DoTq1jHW.js → providers-CF5UEaP8.js} +24 -10
- package/dist/providers-CF5UEaP8.js.map +1 -0
- package/dist/providers-CTBYvMxu.js +1 -0
- package/dist/{query-BO-ux7RB.js → query-DXthKmq0.js} +3 -3
- package/dist/{query-BO-ux7RB.js.map → query-DXthKmq0.js.map} +1 -1
- package/dist/query-D_1ARx5q.js +1 -0
- package/dist/{questions-C2dym2ce.js → questions-KENpWnfV.js} +8 -9
- package/dist/questions-KENpWnfV.js.map +1 -0
- package/dist/{record-BKmMvZ6O.js → record-kk9M1hj-.js} +8 -4
- package/dist/record-kk9M1hj-.js.map +1 -0
- package/dist/{redact-DJ9JCShu.js → redact-CRGdfV2s.js} +4 -2
- package/dist/redact-CRGdfV2s.js.map +1 -0
- package/dist/remarks-1521zwfW.js +38 -0
- package/dist/remarks-1521zwfW.js.map +1 -0
- package/dist/remarks-BhAV1H4V.js +1 -0
- package/dist/remarks-Ml6bcSdV.js +278 -0
- package/dist/remarks-Ml6bcSdV.js.map +1 -0
- package/dist/{remote-CPPW86Q9.js → remote-Dkeghk8k.js} +3 -3
- package/dist/{remote-CPPW86Q9.js.map → remote-Dkeghk8k.js.map} +1 -1
- package/dist/resolve-CMmhACr6.js +1 -0
- package/dist/resolve-DzdWcIL6.js +724 -0
- package/dist/resolve-DzdWcIL6.js.map +1 -0
- package/dist/{results-BE2f-1XS.js → results-D-naai_Q.js} +33 -8
- package/dist/results-D-naai_Q.js.map +1 -0
- package/dist/{resume-Ca1c8vix.js → resume-8-nnW8iO.js} +4 -4
- package/dist/{resume-Ca1c8vix.js.map → resume-8-nnW8iO.js.map} +1 -1
- package/dist/{root-DICDHCtp.js → root-DNuLhaA5.js} +2 -2
- package/dist/root-DNuLhaA5.js.map +1 -0
- package/dist/rules-CcV3zLDR.js +318 -0
- package/dist/rules-CcV3zLDR.js.map +1 -0
- package/dist/run-Bel7Vde4.js +88 -0
- package/dist/run-Bel7Vde4.js.map +1 -0
- package/dist/{sandbox-DLrsvu7U.js → sandbox-YLbk9mO7.js} +2 -2
- package/dist/{sandbox-DLrsvu7U.js.map → sandbox-YLbk9mO7.js.map} +1 -1
- package/dist/sandbox.d.ts +1 -1
- package/dist/sandbox.js +1 -1
- package/dist/server-C-ysqkLv.js +1 -0
- package/dist/{server-TUY5xA_A.js → server-De8oH3bt.js} +10 -10
- package/dist/{server-TUY5xA_A.js.map → server-De8oH3bt.js.map} +1 -1
- package/dist/{source-DJGS0a0u.js → source-C686eZpY.js} +2 -2
- package/dist/{source-DJGS0a0u.js.map → source-C686eZpY.js.map} +1 -1
- package/dist/source-DjgypUHW.js +1 -0
- package/dist/src-3mP821Pt.js +2 -0
- package/dist/src-B3KCLZVk.js +3 -0
- package/dist/src-BAyg6CtQ.js +2 -0
- package/dist/{src-CF17Ug08.js → src-BYLM3hEz.js} +22 -6
- package/dist/src-BYLM3hEz.js.map +1 -0
- package/dist/src-BezgGX4X.js +2 -0
- package/dist/{src-DvCg0NBs.js → src-C7W6kg81.js} +40 -10
- package/dist/{src-DvCg0NBs.js.map → src-C7W6kg81.js.map} +1 -1
- package/dist/{src-ftu5wPSt.js → src-CIpKL45U.js} +782 -169
- package/dist/src-CIpKL45U.js.map +1 -0
- package/dist/src-ChBhk06Q.js +2 -0
- package/dist/{src-BxfCKA3_.js → src-CoqZYspK.js} +1 -1
- package/dist/{src-CFp86GtV.js → src-CzQrAcF8.js} +49 -49
- package/dist/src-CzQrAcF8.js.map +1 -0
- package/dist/src-D9fSTxlc.js +1 -0
- package/dist/{src-FGXhkEkH.js → src-DeY52Gyf.js} +182 -23
- package/dist/src-DeY52Gyf.js.map +1 -0
- package/dist/src-DrJSnoMR.js +2 -0
- package/dist/{src-DvK0EIZx.js → src-Xj_BZKbq.js} +112 -13
- package/dist/src-Xj_BZKbq.js.map +1 -0
- package/dist/{src-u8_ixn_F.js → src-cbCb-MPy.js} +20 -4
- package/dist/src-cbCb-MPy.js.map +1 -0
- package/dist/src-dhSTRN50.js +2 -0
- package/dist/{src-C7_1SqDP.js → src-djNNYIdP.js} +2 -2
- package/dist/{src-C7_1SqDP.js.map → src-djNNYIdP.js.map} +1 -1
- package/dist/state-BGWGAwdo.js +1 -0
- package/dist/{state-DfpHox6b.js → state-C0i_ujQZ.js} +19 -17
- package/dist/{state-DfpHox6b.js.map → state-C0i_ujQZ.js.map} +1 -1
- package/dist/studio-app/assets/{index-CBkhNAv8.js → index-Bb_cid9k.js} +9 -9
- package/dist/studio-app/index.html +1 -1
- package/dist/{suite-Cw_7G2RM.js → suite-DmuF_ApO.js} +80 -30
- package/dist/suite-DmuF_ApO.js.map +1 -0
- package/dist/suite-mn9g4veR.js +2 -0
- package/dist/{summary-BUKfU-9l.js → summary-BFMHMTz2.js} +273 -47
- package/dist/summary-BFMHMTz2.js.map +1 -0
- package/dist/testing.d.ts +2 -2
- package/dist/testing.js +2 -2
- package/dist/{text-gEcKjAyp.js → text-CrVy5ioL.js} +18 -2
- package/dist/text-CrVy5ioL.js.map +1 -0
- package/dist/{transcript-BNNANU8A.js → transcript-BTxJpW4R.js} +2 -2
- package/dist/{transcript-BNNANU8A.js.map → transcript-BTxJpW4R.js.map} +1 -1
- package/dist/{types-BYdlwMwo.d.ts → types-B-9b1MDV.d.ts} +850 -34
- package/dist/types-C5vI3g1C.js.map +1 -1
- package/dist/usage-BDo2q_yu.js +1 -0
- package/dist/{command-Bj39y-Wm.js → validate-DWjkshl1.js} +20 -377
- package/dist/validate-DWjkshl1.js.map +1 -0
- package/dist/view/index.d.ts +31 -263
- package/dist/view/index.js +8 -7
- package/dist/views-DE2A1jEX.js +2 -0
- package/dist/{views-B8w2J-gD.js → views-Dk8MCQKr.js} +8 -98
- package/dist/views-Dk8MCQKr.js.map +1 -0
- package/dist/{worker-entry-DNnveLqx.js → worker-entry-CqrzGPF4.js} +2 -2
- package/dist/{worker-entry-DNnveLqx.js.map → worker-entry-CqrzGPF4.js.map} +1 -1
- package/dist/workspace-B1eGO46M.js +1 -0
- package/dist/{workspace-C4RA3srV.js → workspace-CLeOybkr.js} +45 -11
- package/dist/workspace-CLeOybkr.js.map +1 -0
- package/package.json +5 -1
- package/skills/eval-rubric/SKILL.md +130 -0
- package/dist/agent-D483ru7D.js +0 -334
- package/dist/agent-D483ru7D.js.map +0 -1
- package/dist/assemble-D5KGrwnJ.js +0 -1
- package/dist/assemble-D9GWr-HS.js.map +0 -1
- package/dist/capture-CYGLpWxR.js +0 -1
- package/dist/cli-ClpPT8kn.js.map +0 -1
- package/dist/cli-spec-qmEnQ25_.js.map +0 -1
- package/dist/command-Bj39y-Wm.js.map +0 -1
- package/dist/command-C-cVjlny.js +0 -1
- package/dist/command-DbAe1Rzb.js.map +0 -1
- package/dist/command-TgbzPizb.js.map +0 -1
- package/dist/commands-YUwlyTbr.js +0 -228
- package/dist/commands-YUwlyTbr.js.map +0 -1
- package/dist/config-DrVSEVN0.js.map +0 -1
- package/dist/context-C1mxXh80.js.map +0 -1
- package/dist/db-CKg5NtiW.js +0 -2
- package/dist/db-DfhipHEF.js +0 -1416
- package/dist/db-DfhipHEF.js.map +0 -1
- package/dist/docker-D1HZDS6q.js.map +0 -1
- package/dist/doctor-D2MbNO8L.js.map +0 -1
- package/dist/egress-2-qzPvGi.js.map +0 -1
- package/dist/environment-Cca6a4wB.js.map +0 -1
- package/dist/evaluate-DKIl54Hb.js.map +0 -1
- package/dist/files-BXHZFWmx.js.map +0 -1
- package/dist/files-BpUYBwGu.js.map +0 -1
- package/dist/files-Bw8lWEjg.js +0 -1
- package/dist/files-D6J0iSdx.js +0 -1
- package/dist/images-Bi3aGxb9.js.map +0 -1
- package/dist/init-Cl3f3NBT.js +0 -360
- package/dist/init-Cl3f3NBT.js.map +0 -1
- package/dist/init-fhOXED8F.js +0 -1
- package/dist/judge-DW_GDOmB.js.map +0 -1
- package/dist/model-CXhrziBe.js +0 -1
- package/dist/model-D0IcOQao.js.map +0 -1
- package/dist/model-DaVCY3rb.js.map +0 -1
- package/dist/model-DaX4bNLZ.js.map +0 -1
- package/dist/model-_bxNrk2h.js +0 -1
- package/dist/opencode-providers-J9colP0-.js.map +0 -1
- package/dist/options-C0d0AzeR.js.map +0 -1
- package/dist/plan-DgQxp9yy.js.map +0 -1
- package/dist/preflight-BRzD30L5.js.map +0 -1
- package/dist/prepare-B_y-AFMv.js.map +0 -1
- package/dist/prepare-DCKTLHN3.js +0 -2
- package/dist/providers-B9yTdIqF.js +0 -1
- package/dist/providers-DoTq1jHW.js.map +0 -1
- package/dist/query-CRQfsw0e.js +0 -1
- package/dist/questions-C2dym2ce.js.map +0 -1
- package/dist/record-BKmMvZ6O.js.map +0 -1
- package/dist/redact-DJ9JCShu.js.map +0 -1
- package/dist/results-BE2f-1XS.js.map +0 -1
- package/dist/root-DICDHCtp.js.map +0 -1
- package/dist/server-Dp8eOeK5.js +0 -1
- package/dist/source-DdbLGR1M.js +0 -1
- package/dist/src-CF17Ug08.js.map +0 -1
- package/dist/src-CFp86GtV.js.map +0 -1
- package/dist/src-CLoOMVWI.js +0 -3
- package/dist/src-CcrQbpG8.js +0 -2
- package/dist/src-DCFtJRp0.js +0 -2
- package/dist/src-DSYYPEOj.js +0 -2
- package/dist/src-DYO3DdnQ.js +0 -1
- package/dist/src-DvK0EIZx.js.map +0 -1
- package/dist/src-FGXhkEkH.js.map +0 -1
- package/dist/src-WD-zgQYZ.js +0 -2
- package/dist/src-_oI9AePb.js +0 -2
- package/dist/src-ftu5wPSt.js.map +0 -1
- package/dist/src-qsKCqv7a.js +0 -2
- package/dist/src-u8_ixn_F.js.map +0 -1
- package/dist/state-DpAxYyED.js +0 -1
- package/dist/suite-Cw_7G2RM.js.map +0 -1
- package/dist/suite-DamAEnNF.js +0 -1
- package/dist/summary-BUKfU-9l.js.map +0 -1
- package/dist/summary-Baa4rTHS.js +0 -192
- package/dist/summary-Baa4rTHS.js.map +0 -1
- package/dist/text-gEcKjAyp.js.map +0 -1
- package/dist/tools-DLHgetpx.js +0 -249
- package/dist/tools-DLHgetpx.js.map +0 -1
- package/dist/views-B8w2J-gD.js.map +0 -1
- package/dist/views-DblnI3kA.js +0 -2
- package/dist/workspace-C4RA3srV.js.map +0 -1
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
63
|
+
npx reeval image build
|
|
64
|
+
echo 'CURSOR_API_KEY=…' >> .env.local
|
|
65
|
+
npx reeval run
|
|
120
66
|
```
|
|
121
67
|
|
|
122
|
-
|
|
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
|
-
|
|
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
|
-
`
|
|
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/
|
|
137
|
-
import { evaluate, expect
|
|
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
|
-
|
|
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
|
-
|
|
80
|
+
const withSkill = plain.extendEnvironment('with-skill', ({ skill }) => ({
|
|
81
|
+
skills: [skill.local('../skills/ai-sdk')],
|
|
82
|
+
}));
|
|
176
83
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
182
|
-
|
|
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
|
|
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
|
|
213
|
-
arm
|
|
214
|
-
plain
|
|
215
|
-
with-
|
|
216
|
-
check
|
|
217
|
-
|
|
218
|
-
expected
|
|
219
|
-
+
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
118
|
+
| Command | Use it for |
|
|
119
|
+
| --- | --- |
|
|
120
|
+
| <code>reeval run --profile 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 compare --fail-on-regression</code> | Diff a run against its nearest recorded ancestor, and exit 1 when an eval regressed. |
|
|
122
|
+
| <code>reeval show --md</code> | One run's results as Markdown, for a job summary or a PR comment. |
|
|
123
|
+
| <code>reeval query</code> | Read-only SQL over every run, or built-in views such as `lift`, `effort`, and `failing_attempts`. |
|
|
124
|
+
| <code>reeval studio</code> | Runs, transcripts, diffs, and checks in the browser, or a static site with `reeval studio build`. |
|
|
254
125
|
|
|
255
|
-
|
|
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
|
-
|
|
266
|
-
|
|
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
|
-
|
|
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
|
-
|
|
134
|
+
The [recipes](docs/recipes/index.mdx) are complete evals for common jobs:
|
|
273
135
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
296
|
-
Questions about licensing: [oss@invertase.io](mailto:oss@invertase.io).
|
|
156
|
+
## Licence
|
|
297
157
|
|
|
298
|
-
The
|
|
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).
|
package/assets/package.json
CHANGED
package/assets/pnpm-lock.yaml
CHANGED
|
@@ -9,8 +9,8 @@ importers:
|
|
|
9
9
|
.:
|
|
10
10
|
dependencies:
|
|
11
11
|
'@earendil-works/pi-coding-agent':
|
|
12
|
-
specifier: 1.
|
|
13
|
-
version: 1.
|
|
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.
|
|
111
|
-
resolution: {integrity: sha512-
|
|
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.
|
|
115
|
-
resolution: {integrity: sha512-
|
|
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.
|
|
120
|
-
resolution: {integrity: sha512-
|
|
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.
|
|
124
|
-
resolution: {integrity: sha512-
|
|
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.
|
|
129
|
-
resolution: {integrity: sha512-
|
|
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.
|
|
133
|
-
resolution: {integrity: sha512-
|
|
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.
|
|
137
|
-
resolution: {integrity: sha512-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
746
|
-
'@earendil-works/pi-ai': 1.
|
|
747
|
-
'@earendil-works/pi-codemode': 1.
|
|
748
|
-
'@earendil-works/pi-mcp': 1.
|
|
749
|
-
'@earendil-works/pi-tui': 1.
|
|
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.
|
|
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.
|
|
789
|
+
'@earendil-works/pi-telemetry@1.4.0': {}
|
|
784
790
|
|
|
785
|
-
'@earendil-works/pi-tui@1.
|
|
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:
|