@runcofactor/cli 0.52.0 → 0.53.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 +2 -0
- package/dist/{account-3ZG24MOE.js → account-MRZ54P5P.js} +5 -5
- package/dist/{alert-5G7PTAX2.js → alert-XBHELHEI.js} +8 -8
- package/dist/{api-catalog-IBYAFKKQ.js → api-catalog-GWYRX53L.js} +5 -5
- package/dist/{api-key-UXC44BDR.js → api-key-FH6JN447.js} +5 -5
- package/dist/{attachment-T6IRFQW3.js → attachment-J7GRVT5F.js} +5 -5
- package/dist/{auth-SHOCJE6Z.js → auth-VZZQXRDR.js} +3 -3
- package/dist/{benchmark-NJ2U6VTC.js → benchmark-A3SNDARF.js} +5 -5
- package/dist/{blackcat-RQJVFGXQ.js → blackcat-UM6TBQBN.js} +3 -3
- package/dist/{chunk-DHAGRM2F.js → chunk-33U56YGD.js} +14 -5
- package/dist/{chunk-DHAGRM2F.js.map → chunk-33U56YGD.js.map} +1 -1
- package/dist/{chunk-M752EUK3.js → chunk-3JU4UYYN.js} +5 -5
- package/dist/{chunk-G6BCST3G.js → chunk-3ZOUNCA5.js} +7 -7
- package/dist/{chunk-76Z6E7XX.js → chunk-4UZN6TVT.js} +74 -131
- package/dist/chunk-4UZN6TVT.js.map +1 -0
- package/dist/{chunk-ABT3BLRC.js → chunk-5TKXHS3X.js} +3 -3
- package/dist/{chunk-QCYSONXI.js → chunk-CRYHWO4M.js} +2 -2
- package/dist/{chunk-QTYUM4ZB.js → chunk-EJ3ZPH5U.js} +23 -187
- package/dist/chunk-EJ3ZPH5U.js.map +1 -0
- package/dist/{chunk-I5RHTCPY.js → chunk-EL6KJ4PO.js} +4 -4
- package/dist/{chunk-ZL4O6C42.js → chunk-HXBK3AGD.js} +2 -2
- package/dist/{chunk-PRERH4DN.js → chunk-I2SOHQ2C.js} +3 -3
- package/dist/{chunk-CYSPCGO6.js → chunk-JEHHEMUL.js} +5 -5
- package/dist/{chunk-LIEADTEF.js → chunk-LJFVRJCA.js} +2 -2
- package/dist/{chunk-UEJ2HTKU.js → chunk-MJVUMVLO.js} +19 -1
- package/dist/chunk-MJVUMVLO.js.map +1 -0
- package/dist/chunk-N55RKCGR.js +24 -0
- package/dist/chunk-N55RKCGR.js.map +1 -0
- package/dist/{chunk-PHNH3CEU.js → chunk-O4Z44BR7.js} +5 -5
- package/dist/{chunk-QA37WVF6.js → chunk-OQFCZERZ.js} +6 -6
- package/dist/{chunk-EUVB6Y3C.js → chunk-P7L5KELH.js} +8 -8
- package/dist/chunk-P7L5KELH.js.map +1 -0
- package/dist/{chunk-Z3MDQSZG.js → chunk-PJFFGQSB.js} +2 -2
- package/dist/{chunk-IY3ZK46I.js → chunk-QOVJUSSL.js} +2 -2
- package/dist/{chunk-RPJMQBB5.js → chunk-QXU4G4YN.js} +3 -3
- package/dist/{chunk-SZSTJIYU.js → chunk-RRSUKARV.js} +4 -4
- package/dist/{chunk-775FI436.js → chunk-RVD6J6IZ.js} +2 -2
- package/dist/{chunk-5UUIBY6E.js → chunk-TAVBFLCR.js} +3 -3
- package/dist/{chunk-ROX7N3RK.js → chunk-V7HB5LAU.js} +10 -7
- package/dist/chunk-V7HB5LAU.js.map +1 -0
- package/dist/{chunk-LL6TSQWV.js → chunk-VKZOHJCE.js} +3 -3
- package/dist/chunk-VKZOHJCE.js.map +1 -0
- package/dist/{chunk-3HI6QC4V.js → chunk-WRBU6TX7.js} +2 -2
- package/dist/{proofs-TXJGAP5F.js → chunk-X7SUSIY3.js} +118 -20
- package/dist/chunk-X7SUSIY3.js.map +1 -0
- package/dist/{chunk-BF3IPGMP.js → chunk-XSSZMG65.js} +4 -4
- package/dist/{credential-TWSWV64F.js → credential-4RFRU6OH.js} +5 -5
- package/dist/{credential-template-XO5D5AI3.js → credential-template-36PFUTBN.js} +5 -5
- package/dist/{digest-SLEFOLPV.js → digest-THMKFMP7.js} +8 -8
- package/dist/{docs-IDC4V4WQ.js → docs-ZGM53L67.js} +5 -5
- package/dist/{doctor-SDAYEA6C.js → doctor-Z2XBGBM3.js} +3 -3
- package/dist/{environment-VBUIBQ6O.js → environment-5YVZXBN7.js} +7 -7
- package/dist/eval-SO5TPD37.js +1177 -0
- package/dist/eval-SO5TPD37.js.map +1 -0
- package/dist/{exploration-IREIR5PO.js → exploration-GZ4WUJJH.js} +5 -5
- package/dist/{exploratory-test-4Q7BMEFT.js → exploratory-test-Y7P4ZDLD.js} +5 -5
- package/dist/{external-run-S7LULKPT.js → external-run-IJGGZOGI.js} +7 -7
- package/dist/{feature-flag-IASHTUGU.js → feature-flag-UH6Z7774.js} +5 -5
- package/dist/{flow-IBEZFZTU.js → flow-MRWAQYZZ.js} +5 -5
- package/dist/{github-HAEZRULP.js → github-VDJU3PU3.js} +6 -6
- package/dist/index.js +101 -82
- package/dist/index.js.map +1 -1
- package/dist/{init-LT2TZMQY.js → init-CROSTPA6.js} +5 -5
- package/dist/{install-RTEYH6TK.js → install-ECR7OLAY.js} +5 -5
- package/dist/{issues-5GE277R2.js → issues-K5TL2S4Z.js} +7 -7
- package/dist/{knobs-AMIWGYUZ.js → knobs-OKQFBQLK.js} +5 -5
- package/dist/{landing-3VLVVQL5.js → landing-XANIBPVM.js} +7 -7
- package/dist/{list-GDJR6UY6.js → list-64GX47Q4.js} +5 -5
- package/dist/{local-4R6GVW7U.js → local-QMQY2ZUX.js} +7 -7
- package/dist/{login-IXVAWTLO.js → login-I7UQ3GTM.js} +5 -5
- package/dist/{mcp-BM2MJWX4.js → mcp-XZV63DX5.js} +11 -11
- package/dist/{mcp-BM2MJWX4.js.map → mcp-XZV63DX5.js.map} +1 -1
- package/dist/{metrics-SSIP5CEB.js → metrics-KBTQ3KGZ.js} +5 -5
- package/dist/{monitor-ESZYHXT2.js → monitor-UGWY43IU.js} +5 -5
- package/dist/perf-CCHWHCSR.js +961 -0
- package/dist/perf-CCHWHCSR.js.map +1 -0
- package/dist/{product-VCGUV5TH.js → product-KLG2ZTHC.js} +5 -5
- package/dist/{product-map-AXKZNQDM.js → product-map-AMEZ76EQ.js} +5 -5
- package/dist/{prompts-FVPSON2N.js → prompts-ZVQNGL7X.js} +5 -5
- package/dist/proofs-QCNSQAPX.js +20 -0
- package/dist/{property-XEPCC7KQ.js → property-PJDQFHAL.js} +6 -6
- package/dist/{psql-JKF3OYYJ.js → psql-AURAN27C.js} +5 -5
- package/dist/{record-REQ37S54.js → record-SYWBTUOB.js} +6 -6
- package/dist/{redis-WGHT2GJB.js → redis-2H752SKO.js} +5 -5
- package/dist/{release-SNDIVIA6.js → release-OSIYUXSC.js} +5 -5
- package/dist/{runbook-XFJG2LFC.js → runbook-7LVHF6KV.js} +5 -5
- package/dist/{sandbox-DYCKLCMY.js → sandbox-TJQPMRGS.js} +18 -30
- package/dist/sandbox-TJQPMRGS.js.map +1 -0
- package/dist/{scenarios-PVHCKP55.js → scenarios-P2ABU4HK.js} +5 -5
- package/dist/{schedule-DGC7CX23.js → schedule-XLS56NP5.js} +8 -8
- package/dist/{session-ERGUFDDI.js → session-ACSFC3UB.js} +8 -8
- package/dist/{skill-6QO2E3TB.js → skill-F7I5P6AI.js} +43 -28
- package/dist/{skill-6QO2E3TB.js.map → skill-F7I5P6AI.js.map} +1 -1
- package/dist/{slack-WE7THLLH.js → slack-ZEK4GRND.js} +6 -6
- package/dist/{spec-SEOY7N3L.js → spec-XPIRRSV6.js} +5 -5
- package/dist/{src-CCK3TKBX.js → src-N7ZCYCXU.js} +4 -4
- package/dist/{src-AEWV5HYH.js → src-XSBBMVGW.js} +3 -3
- package/dist/{start-EPGLHTND.js → start-DKWLOQI6.js} +5 -5
- package/dist/{status-DTE2GXM2.js → status-K7KH5DI3.js} +5 -5
- package/dist/{tag-GIFEWGBL.js → tag-2Y3OMQQC.js} +6 -6
- package/dist/{task-VLJCHSFB.js → task-4PIOC4QV.js} +6 -6
- package/dist/{teams-J2OOJBL4.js → teams-KUM56BE2.js} +83 -47
- package/dist/teams-KUM56BE2.js.map +1 -0
- package/dist/{test-suite-CTACGIAZ.js → test-suite-SW25YGJV.js} +138 -96
- package/dist/test-suite-SW25YGJV.js.map +1 -0
- package/dist/{trace-RWQDYL4K.js → trace-QPXHYBLA.js} +7 -7
- package/dist/{triage-6UAXLCGU.js → triage-EZABRZZM.js} +6 -6
- package/dist/trigger-7C7KX5KH.js +137 -0
- package/dist/trigger-7C7KX5KH.js.map +1 -0
- package/dist/{update-check-QRREAM3N.js → update-check-E3X7UIY6.js} +3 -3
- package/dist/{upgrade-5Y655TQ6.js → upgrade-EJGTMW44.js} +4 -4
- package/dist/{usage-KCXFY46V.js → usage-GZCQDULF.js} +7 -7
- package/dist/{utilities-SUON2KZK.js → utilities-RIITD53A.js} +6 -6
- package/dist/{visual-GJZVJC32.js → visual-FH67OKS2.js} +5 -5
- package/dist/{workflow-R5QAXWBX.js → workflow-34YJZ2QQ.js} +38 -86
- package/dist/workflow-34YJZ2QQ.js.map +1 -0
- package/dist/{workflow-cache-PFBTWLGM.js → workflow-cache-YQ3BGJIG.js} +17 -17
- package/dist/{workflow-cache-convergence-resolve-UZGRPC3B.js → workflow-cache-convergence-resolve-SPLBRSNK.js} +5 -5
- package/dist/{workflow-debug-RACNWWOL.js → workflow-debug-HZB7TJGK.js} +10 -10
- package/dist/workflow-debug-HZB7TJGK.js.map +1 -0
- package/dist/{workflow-feedback-RJIQ5R3R.js → workflow-feedback-6UOTIWIQ.js} +5 -5
- package/dist/{workflow-fork-LINDCYJ3.js → workflow-fork-IDYHAHCX.js} +5 -5
- package/dist/workflow-promotion-U6WYFY5U.js +62 -0
- package/dist/workflow-promotion-U6WYFY5U.js.map +1 -0
- package/dist/{workflow-proposals-E4EXKAGM.js → workflow-proposals-MMVNIQT3.js} +5 -5
- package/dist/{workflow-revisions-5M6APN6R.js → workflow-revisions-BPUOLCZB.js} +5 -5
- package/dist/{workflow-status-7KL73WS2.js → workflow-status-RA3IEMEW.js} +5 -5
- package/package.json +3 -2
- package/dist/chat-target-IZ7YLLU3.js +0 -502
- package/dist/chat-target-IZ7YLLU3.js.map +0 -1
- package/dist/chunk-76Z6E7XX.js.map +0 -1
- package/dist/chunk-EUVB6Y3C.js.map +0 -1
- package/dist/chunk-LL6TSQWV.js.map +0 -1
- package/dist/chunk-QTYUM4ZB.js.map +0 -1
- package/dist/chunk-ROX7N3RK.js.map +0 -1
- package/dist/chunk-UEJ2HTKU.js.map +0 -1
- package/dist/proofs-TXJGAP5F.js.map +0 -1
- package/dist/sandbox-DYCKLCMY.js.map +0 -1
- package/dist/teams-J2OOJBL4.js.map +0 -1
- package/dist/test-suite-CTACGIAZ.js.map +0 -1
- package/dist/workflow-R5QAXWBX.js.map +0 -1
- /package/dist/{account-3ZG24MOE.js.map → account-MRZ54P5P.js.map} +0 -0
- /package/dist/{alert-5G7PTAX2.js.map → alert-XBHELHEI.js.map} +0 -0
- /package/dist/{api-catalog-IBYAFKKQ.js.map → api-catalog-GWYRX53L.js.map} +0 -0
- /package/dist/{api-key-UXC44BDR.js.map → api-key-FH6JN447.js.map} +0 -0
- /package/dist/{attachment-T6IRFQW3.js.map → attachment-J7GRVT5F.js.map} +0 -0
- /package/dist/{auth-SHOCJE6Z.js.map → auth-VZZQXRDR.js.map} +0 -0
- /package/dist/{benchmark-NJ2U6VTC.js.map → benchmark-A3SNDARF.js.map} +0 -0
- /package/dist/{blackcat-RQJVFGXQ.js.map → blackcat-UM6TBQBN.js.map} +0 -0
- /package/dist/{chunk-M752EUK3.js.map → chunk-3JU4UYYN.js.map} +0 -0
- /package/dist/{chunk-G6BCST3G.js.map → chunk-3ZOUNCA5.js.map} +0 -0
- /package/dist/{chunk-ABT3BLRC.js.map → chunk-5TKXHS3X.js.map} +0 -0
- /package/dist/{chunk-QCYSONXI.js.map → chunk-CRYHWO4M.js.map} +0 -0
- /package/dist/{chunk-I5RHTCPY.js.map → chunk-EL6KJ4PO.js.map} +0 -0
- /package/dist/{chunk-ZL4O6C42.js.map → chunk-HXBK3AGD.js.map} +0 -0
- /package/dist/{chunk-PRERH4DN.js.map → chunk-I2SOHQ2C.js.map} +0 -0
- /package/dist/{chunk-CYSPCGO6.js.map → chunk-JEHHEMUL.js.map} +0 -0
- /package/dist/{chunk-LIEADTEF.js.map → chunk-LJFVRJCA.js.map} +0 -0
- /package/dist/{chunk-PHNH3CEU.js.map → chunk-O4Z44BR7.js.map} +0 -0
- /package/dist/{chunk-QA37WVF6.js.map → chunk-OQFCZERZ.js.map} +0 -0
- /package/dist/{chunk-Z3MDQSZG.js.map → chunk-PJFFGQSB.js.map} +0 -0
- /package/dist/{chunk-IY3ZK46I.js.map → chunk-QOVJUSSL.js.map} +0 -0
- /package/dist/{chunk-RPJMQBB5.js.map → chunk-QXU4G4YN.js.map} +0 -0
- /package/dist/{chunk-SZSTJIYU.js.map → chunk-RRSUKARV.js.map} +0 -0
- /package/dist/{chunk-775FI436.js.map → chunk-RVD6J6IZ.js.map} +0 -0
- /package/dist/{chunk-5UUIBY6E.js.map → chunk-TAVBFLCR.js.map} +0 -0
- /package/dist/{chunk-3HI6QC4V.js.map → chunk-WRBU6TX7.js.map} +0 -0
- /package/dist/{chunk-BF3IPGMP.js.map → chunk-XSSZMG65.js.map} +0 -0
- /package/dist/{credential-TWSWV64F.js.map → credential-4RFRU6OH.js.map} +0 -0
- /package/dist/{credential-template-XO5D5AI3.js.map → credential-template-36PFUTBN.js.map} +0 -0
- /package/dist/{digest-SLEFOLPV.js.map → digest-THMKFMP7.js.map} +0 -0
- /package/dist/{docs-IDC4V4WQ.js.map → docs-ZGM53L67.js.map} +0 -0
- /package/dist/{doctor-SDAYEA6C.js.map → doctor-Z2XBGBM3.js.map} +0 -0
- /package/dist/{environment-VBUIBQ6O.js.map → environment-5YVZXBN7.js.map} +0 -0
- /package/dist/{exploration-IREIR5PO.js.map → exploration-GZ4WUJJH.js.map} +0 -0
- /package/dist/{exploratory-test-4Q7BMEFT.js.map → exploratory-test-Y7P4ZDLD.js.map} +0 -0
- /package/dist/{external-run-S7LULKPT.js.map → external-run-IJGGZOGI.js.map} +0 -0
- /package/dist/{feature-flag-IASHTUGU.js.map → feature-flag-UH6Z7774.js.map} +0 -0
- /package/dist/{flow-IBEZFZTU.js.map → flow-MRWAQYZZ.js.map} +0 -0
- /package/dist/{github-HAEZRULP.js.map → github-VDJU3PU3.js.map} +0 -0
- /package/dist/{init-LT2TZMQY.js.map → init-CROSTPA6.js.map} +0 -0
- /package/dist/{install-RTEYH6TK.js.map → install-ECR7OLAY.js.map} +0 -0
- /package/dist/{issues-5GE277R2.js.map → issues-K5TL2S4Z.js.map} +0 -0
- /package/dist/{knobs-AMIWGYUZ.js.map → knobs-OKQFBQLK.js.map} +0 -0
- /package/dist/{landing-3VLVVQL5.js.map → landing-XANIBPVM.js.map} +0 -0
- /package/dist/{list-GDJR6UY6.js.map → list-64GX47Q4.js.map} +0 -0
- /package/dist/{local-4R6GVW7U.js.map → local-QMQY2ZUX.js.map} +0 -0
- /package/dist/{login-IXVAWTLO.js.map → login-I7UQ3GTM.js.map} +0 -0
- /package/dist/{metrics-SSIP5CEB.js.map → metrics-KBTQ3KGZ.js.map} +0 -0
- /package/dist/{monitor-ESZYHXT2.js.map → monitor-UGWY43IU.js.map} +0 -0
- /package/dist/{product-VCGUV5TH.js.map → product-KLG2ZTHC.js.map} +0 -0
- /package/dist/{product-map-AXKZNQDM.js.map → product-map-AMEZ76EQ.js.map} +0 -0
- /package/dist/{prompts-FVPSON2N.js.map → prompts-ZVQNGL7X.js.map} +0 -0
- /package/dist/{src-AEWV5HYH.js.map → proofs-QCNSQAPX.js.map} +0 -0
- /package/dist/{property-XEPCC7KQ.js.map → property-PJDQFHAL.js.map} +0 -0
- /package/dist/{psql-JKF3OYYJ.js.map → psql-AURAN27C.js.map} +0 -0
- /package/dist/{record-REQ37S54.js.map → record-SYWBTUOB.js.map} +0 -0
- /package/dist/{redis-WGHT2GJB.js.map → redis-2H752SKO.js.map} +0 -0
- /package/dist/{release-SNDIVIA6.js.map → release-OSIYUXSC.js.map} +0 -0
- /package/dist/{runbook-XFJG2LFC.js.map → runbook-7LVHF6KV.js.map} +0 -0
- /package/dist/{scenarios-PVHCKP55.js.map → scenarios-P2ABU4HK.js.map} +0 -0
- /package/dist/{schedule-DGC7CX23.js.map → schedule-XLS56NP5.js.map} +0 -0
- /package/dist/{session-ERGUFDDI.js.map → session-ACSFC3UB.js.map} +0 -0
- /package/dist/{slack-WE7THLLH.js.map → slack-ZEK4GRND.js.map} +0 -0
- /package/dist/{spec-SEOY7N3L.js.map → spec-XPIRRSV6.js.map} +0 -0
- /package/dist/{src-CCK3TKBX.js.map → src-N7ZCYCXU.js.map} +0 -0
- /package/dist/{tag-GIFEWGBL.js.map → src-XSBBMVGW.js.map} +0 -0
- /package/dist/{start-EPGLHTND.js.map → start-DKWLOQI6.js.map} +0 -0
- /package/dist/{status-DTE2GXM2.js.map → status-K7KH5DI3.js.map} +0 -0
- /package/dist/{trace-RWQDYL4K.js.map → tag-2Y3OMQQC.js.map} +0 -0
- /package/dist/{task-VLJCHSFB.js.map → task-4PIOC4QV.js.map} +0 -0
- /package/dist/{triage-6UAXLCGU.js.map → trace-QPXHYBLA.js.map} +0 -0
- /package/dist/{update-check-QRREAM3N.js.map → triage-EZABRZZM.js.map} +0 -0
- /package/dist/{upgrade-5Y655TQ6.js.map → update-check-E3X7UIY6.js.map} +0 -0
- /package/dist/{utilities-SUON2KZK.js.map → upgrade-EJGTMW44.js.map} +0 -0
- /package/dist/{usage-KCXFY46V.js.map → usage-GZCQDULF.js.map} +0 -0
- /package/dist/{workflow-debug-RACNWWOL.js.map → utilities-RIITD53A.js.map} +0 -0
- /package/dist/{visual-GJZVJC32.js.map → visual-FH67OKS2.js.map} +0 -0
- /package/dist/{workflow-cache-PFBTWLGM.js.map → workflow-cache-YQ3BGJIG.js.map} +0 -0
- /package/dist/{workflow-cache-convergence-resolve-UZGRPC3B.js.map → workflow-cache-convergence-resolve-SPLBRSNK.js.map} +0 -0
- /package/dist/{workflow-feedback-RJIQ5R3R.js.map → workflow-feedback-6UOTIWIQ.js.map} +0 -0
- /package/dist/{workflow-fork-LINDCYJ3.js.map → workflow-fork-IDYHAHCX.js.map} +0 -0
- /package/dist/{workflow-proposals-E4EXKAGM.js.map → workflow-proposals-MMVNIQT3.js.map} +0 -0
- /package/dist/{workflow-revisions-5M6APN6R.js.map → workflow-revisions-BPUOLCZB.js.map} +0 -0
- /package/dist/{workflow-status-7KL73WS2.js.map → workflow-status-RA3IEMEW.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/eval.ts","../../types/src/agent-eval-template.ts","../src/eval-api.ts","../src/eval-bundle.ts","../src/eval-run.ts","../../types/src/agent-eval-render.ts","../src/eval-template.ts"],"sourcesContent":["/** `cofactor eval`: author agent evals, add cases, run them against a commit and compare models. */\nimport { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { EvalConversationSchema } from '@chatsdet/types/agent-eval-template';\nimport { GLOBAL_VALUE_FLAGS, hasFlag, resolveConfig } from './auth.js';\nimport { writeRawOutput } from './brand.js';\nimport {\n getPositionalArg,\n getPositionalArgs,\n getScalarArgValue,\n readStdin,\n} from './cli-helpers.js';\nimport { resolveApplicationId } from './environment.js';\nimport { EVALS, getEval, request, requestAll, requestText, type EvalDetail, type UploadReply } from './eval-api.js';\nimport { loadBundle, missingRequiredPaths } from './eval-bundle.js';\nimport { compareRuns, getRun, listRuns, runEval } from './eval-run.js';\nimport {\n EVAL_GITIGNORE,\n TemplateError,\n formatIssues,\n initRunbook,\n initTemplate,\n readPushPayload,\n} from './eval-template.js';\n\nconst USAGE = {\n init: 'init <name> [--application <app>] [--capability CAP-…]',\n push: 'push [<file>] --application <app>',\n show: 'show <name>',\n runbook: 'runbook <name>',\n list: 'list',\n cases: 'cases <name>',\n 'rm-case': 'rm-case <name> <key>',\n 'add-case':\n 'add-case <name> --key <k> --input <dir|file.tar.gz> --expected <file|-> --source \"<provenance>\" [--title <t>] [--conversation <file.json>]',\n run: 'run <name> [--model <alias>]... [--environment <env>] [--at <sha>] [--case <key>]... [--repeats N] [--parallel N] [--no-wait]',\n get: 'get <run-id> [--case <key>] [--transcript]',\n runs: 'runs <name> [--limit N]',\n compare: 'compare (<run-id>... | --batch <id>)',\n};\ntype Command = keyof typeof USAGE;\n\nconst VALUE_FLAGS = [\n ...GLOBAL_VALUE_FLAGS,\n '--application',\n '--capability',\n '--key',\n '--input',\n '--expected',\n '--source',\n '--title',\n '--conversation',\n '--model',\n '--environment',\n '--at',\n '--case',\n '--repeats',\n '--parallel',\n '--limit',\n '--batch',\n];\n/** How many positional arguments a sub-command needs (push, list and compare take none). */\nconst POSITIONALS: Partial<Record<Command, number>> = {\n show: 1, runbook: 1, cases: 1, 'rm-case': 2, 'add-case': 1, run: 1, get: 1, runs: 1,\n};\nconst WRITES: Command[] = ['push', 'add-case', 'rm-case', 'run'];\nconst DEFAULT_TEMPLATE_DIR = 'evals';\n\nfunction printHelp(command: string | undefined): void {\n const usage = Object.hasOwn(USAGE, command ?? '') ? USAGE[command as Command] : undefined;\n console.log(\n [\n `Usage: cofactor eval ${usage ?? '<sub-command>'} [--json]`,\n '',\n ...Object.values(USAGE).map((line) => ` cofactor eval ${line}`),\n '',\n 'An eval runs an agent command against a set of cases at a commit, grades each attempt and reports',\n 'pass rate, cost and time per task. The template and runbook live in your repo under evals/.',\n '',\n 'init: writes evals/<name>.eval.yaml (a commented template with a script and an ai-judge grader),',\n ' evals/<name>.runbook.md and evals/.gitignore (*.tar.gz, _staging/). Refuses to overwrite.',\n 'push: validates the template locally, reads the runbook it names (relative to the YAML) and stores both;',\n ' re-pushing is idempotent. Defaults to evals/*.eval.yaml when exactly one exists. Needs --application.',\n ' Warns on a missing runbook heading; errors when \"## Finding real data\" or \"## Sanitizing\" is empty, or when',\n ' any section still has the \"<!-- cofactor:todo -->\" line that init writes (delete it once the section is written).',\n 'show/list/cases/runbook: read the stored eval, its cases (key, sha256, size, source) and runbook.',\n 'add-case: --input is a directory (tarred deterministically: sorted entries, fixed mtime, uid/gid 0) or a .tar.gz.',\n ' The sha256 shown is that of the uncompressed tar, so the same files give the same sha256 on any runtime',\n ' and dedup is by tar content; gzip is transport only.',\n ' The template\\'s input.require paths are checked first.',\n ' --expected is a JSON file, or - for stdin. --source says where the data came from and what corroborates the',\n ' label. Never include customer data in a case. --conversation <file.json> is required for a multi-turn eval.',\n 'rm-case: deletes a case that no run has used.',\n 'run: starts one run per --model (alias from the template; none means its default) and waits, printing one',\n ' section per model and then the comparison grid. --case, --repeats and a changed pass bar make a partial run',\n ' that never counts for coverage or proofs. Polls every 5 seconds for at most 8.5 hours; a timeout leaves the',\n ' runs readable with get; the batch and run ids are printed to stderr before waiting. --no-wait prints the',\n ' ids and exits 0. --json prints an array with one entry per run, in order: the run\\'s result, or',\n ' {id, status, verdict, error} for a run with no result.',\n 'get: a run\\'s result. --case <key> narrows to one case; --case <key> --transcript adds a multi-turn attempt\\'s',\n ' conversation. runs: recent runs for an eval, newest first (--limit N).',\n 'compare: the grid for run ids or a --batch; --json prints the array of runs.',\n '',\n 'Common options:',\n ' --org <name|id> Logged-in organization; required explicitly for push, add-case, rm-case and run',\n ' --env <env> API environment (prod, dev, local)',\n ' --api-url <url> API URL override',\n ' --token <key> API token override',\n ' --json Raw JSON on every sub-command except init',\n ' --help, -h Show help without authentication',\n '',\n 'Requires the sandbox-v2 organization flag. API-key scopes:',\n ' run: sandbox:create + sandbox:exec, named explicitly (sandbox:* does not grant sandbox:exec).',\n ' push, add-case, rm-case: sandbox:edit. show, list, cases, runbook, get, runs, compare: sandbox:read.',\n '',\n 'Exit codes (run):',\n ' 0 every run\\'s verdict is pass',\n ' 3 at least one run\\'s verdict is fail (the agent missed the pass bar; perf also exits 3 for \"slower\")',\n ' 1 a failed or cancelled run, a polling timeout, or any error',\n 'Other sub-commands exit 0 on success, 1 on error.',\n ].join('\\n')\n );\n}\n\nfunction required(argv: string[], flag: string): string {\n const value = getScalarArgValue(argv, flag);\n if (!value) throw new Error(`${flag} is required.`);\n return value;\n}\n\n/** `--expected` alone may be `-` (stdin), which the generic value check reads as a missing value. */\nfunction expectedArg(argv: string[]): string {\n const i = argv.findIndex((arg) => arg === '--expected' || arg.startsWith('--expected='));\n const value = i < 0 ? undefined : argv[i]!.startsWith('--expected=') ? argv[i]!.slice('--expected='.length) : argv[i + 1];\n if (!value || value.startsWith('--')) throw new Error('--expected is required: a JSON file, or - for stdin.');\n return value;\n}\n\nasync function readJson(path: string, label: string): Promise<unknown> {\n let text: string;\n try {\n text = path === '-' ? await readStdin() : await readFile(path, 'utf8');\n } catch (error) {\n throw new Error(`Cannot read ${label}: ${error instanceof Error ? error.message : String(error)}`);\n }\n try {\n return JSON.parse(text);\n } catch (error) {\n throw new Error(`${label} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\ntype Context = { argv: string[]; positionals: string[]; apiUrl: string; token: string; json: boolean };\n\n/** The first positional (an eval name or run id), or the sub-command's usage as the error. */\nfunction target(ctx: Context, command: Command): string {\n const value = ctx.positionals[0];\n if (!value) throw new Error(`Usage: cofactor eval ${USAGE[command]}`);\n return value;\n}\n\nasync function init(argv: string[]): Promise<void> {\n const name = getPositionalArg(argv, VALUE_FLAGS);\n if (!name) throw new Error(`Usage: cofactor eval ${USAGE.init}`);\n if (!/^[a-z0-9-]{2,40}$/.test(name) || name === 'runs' || name === 'compare')\n throw new Error('The eval name must be 2 to 40 lowercase letters, digits or dashes (and not \"runs\" or \"compare\").');\n const capability = getScalarArgValue(argv, '--capability');\n if (capability !== undefined && !/^CAP-[A-Z0-9]+-\\d{3,}$/.test(capability))\n throw new Error('--capability must be a product-map code such as CAP-CMM-001.');\n const files = [\n { path: join(DEFAULT_TEMPLATE_DIR, `${name}.eval.yaml`), text: initTemplate({ name, application: getScalarArgValue(argv, '--application'), capability }) },\n { path: join(DEFAULT_TEMPLATE_DIR, `${name}.runbook.md`), text: initRunbook(name) },\n ];\n const gitignore = join(DEFAULT_TEMPLATE_DIR, '.gitignore');\n const exists = async (path: string) => readFile(path).then(() => true, () => false);\n for (const file of files) {\n if (await exists(file.path)) throw new Error(`${file.path} already exists; not overwriting it.`);\n }\n await mkdir(DEFAULT_TEMPLATE_DIR, { recursive: true });\n const written = files.map((file) => file.path);\n for (const file of files) await writeFile(file.path, file.text, { flag: 'wx' });\n if (!(await exists(gitignore))) {\n await writeFile(gitignore, EVAL_GITIGNORE, { flag: 'wx' });\n written.push(gitignore);\n }\n writeRawOutput(\n hasFlag(argv, '--json')\n ? JSON.stringify({ written }, null, 2)\n : `${written.map((path) => `Wrote ${path}`).join('\\n')}\\nEdit the run command and graders, write each runbook section and delete its <!-- cofactor:todo --> line, then: cofactor eval push ${files[0]!.path} --application <app> --org <org>`\n );\n}\n\nasync function defaultTemplateFile(): Promise<string> {\n const found = (await readdir(DEFAULT_TEMPLATE_DIR).catch(() => [])).filter((f) => f.endsWith('.eval.yaml'));\n if (found.length !== 1)\n throw new Error(\n found.length === 0\n ? `No ${DEFAULT_TEMPLATE_DIR}/*.eval.yaml found; pass the template file.`\n : `Several templates in ${DEFAULT_TEMPLATE_DIR}/ (${found.join(', ')}); pass the one to push.`\n );\n return join(DEFAULT_TEMPLATE_DIR, found[0]!);\n}\n\nasync function push({ argv, apiUrl, token, json }: Context): Promise<void> {\n const file = getPositionalArg(argv, VALUE_FLAGS) ?? (await defaultTemplateFile());\n const payload = await readPushPayload(file);\n for (const warning of payload.warnings) console.error(`Warning: ${warning}`);\n const applicationId = await resolveApplicationId(argv, apiUrl, token);\n const pushed = await request<{ id: string; name: string }>(apiUrl, token, 'PUT', EVALS, {\n applicationId,\n definition: payload.definition,\n runbook: payload.runbook,\n });\n const detail = await getEval(apiUrl, token, pushed.name);\n if (json) {\n writeRawOutput(JSON.stringify({ ...detail, warnings: payload.warnings }, null, 2));\n return;\n }\n writeRawOutput(\n [\n `Pushed ${detail.name} (${detail.id})`,\n `Cases: ${detail.cases.length}`,\n `Capabilities: ${detail.capabilities.map((c) => c.code).join(', ') || 'none'}`,\n ].join('\\n')\n );\n}\n\nfunction describeEval(detail: EvalDetail): string {\n const d = detail.definition;\n return [\n `${detail.name} ${detail.id}`,\n d.description,\n `Application: ${detail.applicationId}`,\n `Mode: ${d.mode}`,\n `Run: ${d.run.split('\\n')[0]}${d.run.includes('\\n') ? ' …' : ''}`,\n `Models: ${Object.entries(d.agent.models).map(([alias, m]) => `${alias}${alias === d.agent.default ? '*' : ''} (${m.model})`).join(', ')}`,\n `Graders: ${d.graders.map((g) => `${g.id} [${g.kind}]`).join(', ')}`,\n `Repeats: ${d.repeats}, pass at least ${d.passAtLeast}, bar ${Math.round(d.passBar * 100)}%, ${d.attemptSeconds}s per attempt`,\n `Capabilities: ${detail.capabilities.map((c) => `${c.code} ${c.title}`).join('; ') || 'none'}`,\n `Cases: ${detail.cases.length}`,\n ].join('\\n');\n}\n\nasync function listEvals({ apiUrl, token, json }: Context): Promise<void> {\n const evals = await requestAll<{ id: string; name: string; applicationId: string; description: string; caseCount: number; latestVerdict: 'pass' | 'fail' | null }>(apiUrl, token, EVALS);\n writeRawOutput(\n json\n ? JSON.stringify(evals, null, 2)\n : evals.map((e) => `${e.name} ${e.id} ${e.caseCount} cases ${e.latestVerdict ?? '-'} ${e.description}`).join('\\n') || 'No evals found.'\n );\n}\n\nasync function showEval(ctx: Context): Promise<void> {\n const detail = await getEval(ctx.apiUrl, ctx.token, target(ctx, 'show'));\n writeRawOutput(ctx.json ? JSON.stringify(detail, null, 2) : describeEval(detail));\n}\n\nasync function listCases(ctx: Context): Promise<void> {\n const { cases } = await getEval(ctx.apiUrl, ctx.token, target(ctx, 'cases'));\n writeRawOutput(\n ctx.json\n ? JSON.stringify(cases, null, 2)\n : cases.map((c) => `${c.key} ${c.bundleSha256.slice(0, 12)} ${c.bundleBytes} bytes ${c.title} [${c.source}]`).join('\\n') || 'No cases.'\n );\n}\n\nasync function showRunbook(ctx: Context): Promise<void> {\n const name = target(ctx, 'runbook');\n const text = await requestText(ctx.apiUrl, ctx.token, `${EVALS}/${encodeURIComponent(name)}/runbook`);\n writeRawOutput(ctx.json ? JSON.stringify({ name, runbook: text }, null, 2) : text.trimEnd());\n}\n\nasync function removeCase(ctx: Context): Promise<void> {\n const name = target(ctx, 'rm-case');\n const key = ctx.positionals[1];\n if (!key) throw new Error(`Usage: cofactor eval ${USAGE['rm-case']}`);\n const evaluation = await getEval(ctx.apiUrl, ctx.token, name);\n await request(ctx.apiUrl, ctx.token, 'DELETE', `${EVALS}/${encodeURIComponent(evaluation.id)}/cases/${encodeURIComponent(key)}`);\n writeRawOutput(ctx.json ? JSON.stringify({ eval: name, key, deleted: true }) : `Removed case ${key} from ${name}`);\n}\n\nasync function addCase(ctx: Context): Promise<void> {\n const { argv, apiUrl, token, json } = ctx;\n const name = target(ctx, 'add-case');\n const key = required(argv, '--key');\n const input = required(argv, '--input');\n const expectedSource = expectedArg(argv);\n const source = required(argv, '--source');\n const conversationFile = getScalarArgValue(argv, '--conversation');\n if (!/^[a-z0-9][a-z0-9-]{0,99}$/.test(key))\n throw new Error('--key must be lowercase letters, digits and dashes, starting with a letter or digit (at most 100 characters).');\n\n const expected = await readJson(expectedSource, expectedSource === '-' ? 'the expected value on stdin' : `--expected ${expectedSource}`);\n let conversation: unknown;\n if (conversationFile) {\n const parsed = EvalConversationSchema.safeParse(await readJson(conversationFile, `--conversation ${conversationFile}`));\n if (!parsed.success)\n throw new TemplateError(`${conversationFile} is not a valid conversation:`, formatIssues(parsed.error));\n conversation = parsed.data;\n }\n\n const evaluation = await getEval(apiUrl, token, name);\n const multiTurn = evaluation.definition.mode === 'multi-turn';\n if (multiTurn && !conversation) throw new Error(`${name} is multi-turn: pass --conversation <file.json>.`);\n if (!multiTurn && conversation) throw new Error(`${name} is single-turn: --conversation is only for multi-turn evals.`);\n\n const bundle = await loadBundle(input);\n const missing = missingRequiredPaths(bundle.entries, evaluation.definition.input.require);\n if (missing.length)\n throw new Error(`The bundle is missing required input path(s): ${missing.join(', ')} (the template's input.require).`);\n\n const evalPath = `${EVALS}/${encodeURIComponent(evaluation.id)}`;\n const upload = await request<UploadReply>(apiUrl, token, 'POST', `${evalPath}/uploads`, {\n sha256: bundle.sha256,\n gzipSha256: bundle.gzipSha256,\n bytes: bundle.bytes,\n });\n const deduplicated = upload.status === 'exists';\n if (upload.status === 'upload') {\n const response = await fetch(upload.url, { method: 'PUT', headers: upload.headers, body: new Uint8Array(bundle.archive) });\n if (!response.ok)\n throw new Error(`Uploading the bundle failed (${response.status}): ${(await response.text()).slice(0, 300)}`);\n }\n await request(apiUrl, token, 'POST', `${evalPath}/cases`, {\n key,\n title: getScalarArgValue(argv, '--title') ?? key,\n sha256: bundle.sha256,\n expected,\n source,\n ...(conversation ? { conversation } : {}),\n });\n const result = { eval: name, key, sha256: bundle.sha256, bytes: bundle.bytes, deduplicated };\n writeRawOutput(\n json\n ? JSON.stringify(result, null, 2)\n : `Added case ${key} to ${name}\\nsha256 ${bundle.sha256} (${bundle.bytes} bytes local gzip), ${deduplicated ? 'deduplicated: the bundle already existed' : 'uploaded'}`\n );\n}\n\n/** One handler per authenticated sub-command; a number is the process exit code. */\nconst HANDLERS: Record<Exclude<Command, 'init'>, (ctx: Context) => Promise<number | void>> = {\n push,\n show: showEval,\n runbook: showRunbook,\n list: listEvals,\n cases: listCases,\n 'rm-case': removeCase,\n 'add-case': addCase,\n run: (ctx) => runEval(ctx.argv, target(ctx, 'run'), ctx.apiUrl, ctx.token),\n get: (ctx) => getRun(ctx.argv, target(ctx, 'get'), ctx.apiUrl, ctx.token),\n runs: (ctx) => listRuns(ctx.argv, target(ctx, 'runs'), ctx.apiUrl, ctx.token),\n compare: (ctx) => compareRuns(ctx.argv, ctx.positionals, ctx.apiUrl, ctx.token),\n};\n\nexport async function runEvalCommand(argv: string[]): Promise<void> {\n const [command, ...rest] = argv;\n if (!command || command === 'help' || hasFlag(argv, '--help', '-h')) {\n printHelp(command === 'help' ? rest[0] : command);\n return;\n }\n let code = 0;\n try {\n if (!Object.hasOwn(USAGE, command)) throw new Error(`Unknown eval command: ${command}`);\n const cmd = command as Command;\n // Require the identity selector before authentication or any mutating request.\n if (WRITES.includes(cmd)) required(rest, '--org');\n // --expected is checked by expectedArg: its value may be a bare \"-\".\n for (const flag of VALUE_FLAGS.filter((flag) => flag !== '--expected')) {\n if (rest.includes(flag) && getScalarArgValue(rest, flag) === undefined) throw new Error(`${flag} requires a value.`);\n }\n const positionals = getPositionalArgs(rest, VALUE_FLAGS);\n // Usage errors come before authentication.\n if (positionals.length < (POSITIONALS[cmd] ?? 0)) throw new Error(`Usage: cofactor eval ${USAGE[cmd]}`);\n if (cmd === 'init') {\n await init(rest);\n } else {\n const { apiUrl, token } = await resolveConfig(rest);\n const ctx = { argv: rest, positionals, apiUrl, token, json: hasFlag(rest, '--json') };\n code = (await HANDLERS[cmd](ctx)) ?? 0;\n }\n } catch (error) {\n console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);\n code = 1;\n }\n if (code !== 0) process.exit(code);\n}\n","/**\n * Agent evaluation shared contracts.\n * @module agent-eval-template\n * @see docs/project/conventions.md\n */\nimport { z } from 'zod';\n\nexport const AGENT_EVAL_MAX_BUNDLE_BYTES = 512 * 1024 ** 2;\nexport const AGENT_EVAL_MAX_TOTAL_BUNDLE_BYTES = 2 * 1024 ** 3;\n\nconst ModelSchema = z.strictObject({\n provider: z.enum(['anthropic', 'azure']),\n model: z.string().min(1),\n});\n\nconst ScriptGrader = z.strictObject({\n id: z.string().regex(/^[a-z0-9-]+$/),\n kind: z.literal('script'),\n command: z.string().min(1),\n});\nconst JudgeGrader = z.strictObject({\n id: z.string().regex(/^[a-z0-9-]+$/),\n kind: z.literal('ai-judge'),\n rubric: z.string().min(20),\n scale: z.enum(['binary', '1-5']),\n passAt: z.number().int().min(2).max(5).optional(), // required when scale is '1-5'\n judge: ModelSchema,\n});\n\nexport const AgentEvalTemplateSchema = z\n .strictObject({\n version: z.literal(1),\n name: z\n .string()\n .regex(/^[a-z0-9-]{2,40}$/)\n .refine((n) => n !== 'runs' && n !== 'compare'), // reserved route segments\n description: z.string().min(1).max(500),\n proves: z.strictObject({ capabilities: z.array(z.string().regex(/^CAP-/)).min(1) }), // resolved within the application given at push\n runbook: z.string().min(1), // path relative to this file\n mode: z.enum(['single-turn', 'multi-turn']).default('single-turn'),\n run: z.string().min(1), // shell command, cwd = repo root of the commit; multi-turn: the agent process, JSONL on stdin/stdout\n simulator: ModelSchema.optional(), // required when mode is multi-turn: pins the simulated-user model\n input: z.strictObject({\n description: z.string().min(1),\n require: z.array(z.string()).default([]),\n }),\n agent: z.strictObject({\n models: z\n .record(z.string().regex(/^[a-z0-9-]+$/), ModelSchema)\n .refine((m) => Object.keys(m).length >= 1),\n default: z.string(), // must be a key of models\n }),\n graders: z.array(z.discriminatedUnion('kind', [ScriptGrader, JudgeGrader])).min(1),\n repeats: z.number().int().min(1).max(7).default(3),\n passAtLeast: z.number().int().min(1).default(2), // <= repeats\n passBar: z.number().min(0.1).max(1), // minimum case pass rate for the eval to pass\n attemptSeconds: z.number().int().min(30).max(1700), // grader commands get a fixed 120 s\n })\n .superRefine((template, ctx) => {\n if (!Object.hasOwn(template.agent.models, template.agent.default)) {\n ctx.addIssue({\n code: 'custom',\n path: ['agent', 'default'],\n message: 'Default must name an agent model alias',\n });\n }\n if (template.passAtLeast > template.repeats) {\n ctx.addIssue({\n code: 'custom',\n path: ['passAtLeast'],\n message: 'passAtLeast must not exceed repeats',\n });\n }\n const ids = new Set<string>();\n template.graders.forEach((grader, index) => {\n if (ids.has(grader.id)) {\n ctx.addIssue({\n code: 'custom',\n path: ['graders', index, 'id'],\n message: 'Grader ids must be unique',\n });\n }\n ids.add(grader.id);\n if (grader.kind === 'ai-judge' && grader.scale === '1-5' && grader.passAt === undefined) {\n ctx.addIssue({\n code: 'custom',\n path: ['graders', index, 'passAt'],\n message: 'A 1-5 judge requires passAt',\n });\n }\n });\n if ((template.mode === 'multi-turn') !== (template.simulator !== undefined)) {\n ctx.addIssue({\n code: 'custom',\n path: ['simulator'],\n message: 'A simulator is required exactly when mode is multi-turn',\n });\n }\n });\nexport type AgentEvalTemplate = z.infer<typeof AgentEvalTemplateSchema>;\n\n/** A multi-turn case's conversation; null on a single-turn case. */\nexport const EvalConversationSchema = z.discriminatedUnion('kind', [\n z.strictObject({ kind: z.literal('scripted'), turns: z.array(z.string().min(1)).min(1) }),\n z.strictObject({\n kind: z.literal('simulated'),\n persona: z.string().min(1),\n goal: z.string().min(1),\n facts: z.array(z.string()),\n stopWhen: z.string().min(1),\n maxTurns: z.number().int().min(2).max(30),\n }),\n]);\nexport type EvalConversation = z.infer<typeof EvalConversationSchema>;\n","/** Shared request plumbing for `cofactor eval`. */\nimport type { AgentEvalTemplate } from '@chatsdet/types/agent-eval-template';\nimport { apiFetch, type ClassifiedFailure } from './api-fetch.js';\nimport { apiRequest } from './cli-helpers.js';\n\ntype ApiResponse<T> = {\n ok: boolean;\n error?: string;\n code?: string;\n details?: unknown;\n reason?: unknown;\n alias?: unknown;\n capability?: unknown;\n secret?: unknown;\n issues?: unknown;\n data?: T;\n pagination?: { totalPages: number };\n};\n\nexport const EVALS = '/org/agent-evals';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nfunction describeDetails(details: unknown): string {\n if (typeof details === 'string') return `\\n ${details}`;\n if (!Array.isArray(details)) return '';\n const lines = details.flatMap((item) => {\n if (typeof item === 'string') return [item];\n if (!isRecord(item) || typeof item.message !== 'string') return [];\n const path = Array.isArray(item.path) ? item.path.map(String).join('.') : '';\n return [`${path ? `${path}: ` : ''}${item.message}`];\n });\n return lines.length ? `\\n${lines.map((line) => ` ${line}`).join('\\n')}` : '';\n}\n\n/** The parameters a user error carries besides its message (reason, alias, capability). */\nfunction describeParams(response: ApiResponse<unknown>): string {\n return (['reason', 'alias', 'capability', 'secret'] as const)\n .flatMap((key) => (typeof response[key] === 'string' ? [`\\n ${key}: ${response[key]}`] : []))\n .join('');\n}\n\nfunction describeFailure(response: ApiResponse<unknown>, method: string, path: string): string {\n const message = `${response.code ? `${response.code}: ` : ''}${response.error ?? `${method} ${path} failed`}${describeParams(response)}${describeDetails(response.details)}${describeDetails(response.issues)}`;\n return response.code === 'API_KEY_INSUFFICIENT_SCOPE' && method === 'POST' && path.endsWith('/runs')\n ? `${message}\\n eval run needs an API key with sandbox:create and sandbox:exec; sandbox:* does not grant sandbox:exec.`\n : message;\n}\n\n/** The text for a failed `apiFetch`: the API's typed error when the body has one. */\nfunction failureText(failure: ClassifiedFailure, method: string, path: string): string {\n try {\n const parsed: unknown = JSON.parse(failure.body ?? '');\n if (isRecord(parsed) && typeof parsed.error === 'string')\n return describeFailure(parsed as ApiResponse<unknown>, method, path);\n } catch {\n /* not a JSON error body */\n }\n return failure.message;\n}\n\nexport async function request<T>(\n apiUrl: string,\n token: string,\n method: string,\n path: string,\n body?: Record<string, unknown>\n): Promise<T> {\n const response = await apiRequest<ApiResponse<T>>(apiUrl, token, method, path, body);\n if (!response.ok || response.data === undefined) throw new Error(describeFailure(response, method, path));\n return response.data;\n}\n\nconst authHeaders = (token: string) => ({ Authorization: `Bearer ${token}`, 'User-Agent': 'Cofactor-CLI' });\n\n/** GET a text route (the runbook), surfacing the API's error code and message. */\nexport async function requestText(apiUrl: string, token: string, path: string): Promise<string> {\n const result = await apiFetch(`${apiUrl}${path}`, { headers: authHeaders(token), token });\n if (!result.ok) throw new Error(failureText(result.failure, 'GET', path));\n return result.response.text();\n}\n\n/**\n * GET that reports a network error, 429 or 5xx as `transient` instead of exiting, for the long wait in\n * `eval run`. Auth, proxy and 4xx failures throw at once.\n */\nexport async function requestTolerant<T>(\n apiUrl: string,\n token: string,\n path: string\n): Promise<{ data: T } | { transient: string }> {\n const result = await apiFetch(`${apiUrl}${path}`, { headers: authHeaders(token), token });\n if (!result.ok) {\n const { failure } = result;\n if (failure.kind === 'network' || (failure.status !== null && (failure.status >= 500 || failure.status === 429)))\n return { transient: failure.message };\n throw new Error(failureText(failure, 'GET', path));\n }\n const body = (await result.response.json()) as ApiResponse<T>;\n if (!body.ok || body.data === undefined) throw new Error(describeFailure(body, 'GET', path));\n return { data: body.data };\n}\n\n/** Every page of a paginated list route. */\nexport async function requestAll<T>(apiUrl: string, token: string, path: string): Promise<T[]> {\n const items: T[] = [];\n for (let page = 1; ; page++) {\n const response = await apiRequest<ApiResponse<T[]>>(\n apiUrl,\n token,\n 'GET',\n `${path}?pageSize=100&page=${page}`\n );\n if (!response.ok || !response.data) throw new Error(describeFailure(response, 'GET', path));\n items.push(...response.data);\n if (page >= (response.pagination?.totalPages ?? 1)) return items;\n }\n}\n\n/** The stored eval as `GET /org/agent-evals/:name` returns it. */\nexport type EvalDetail = {\n id: string;\n name: string;\n applicationId: string;\n definition: AgentEvalTemplate;\n cases: { key: string; title: string; source: string; bundleBytes: number; bundleSha256: string }[];\n capabilities: { id: string; code: string; title: string }[];\n};\n\nexport const getEval = (apiUrl: string, token: string, name: string) =>\n request<EvalDetail>(apiUrl, token, 'GET', `${EVALS}/${encodeURIComponent(name)}`);\n\n/** `POST .../uploads`: either the object exists, or a presigned PUT to make. */\nexport type UploadReply =\n | { status: 'exists' }\n | { status: 'upload'; url: string; headers: Record<string, string> };\n","/**\n * Case bundles for `cofactor eval add-case`: a deterministic tar of a directory (gzipped for\n * upload), a reader for an existing .tar.gz, and the `input.require` check. The content address\n * `sha256` is the hash of the uncompressed tar, which this file fully specifies, so the same files\n * give the same sha256 on any runtime and identical bundles deduplicate across cases and evals\n * (spec D4, D11). Gzip is transport only: its bytes depend on the runtime's zlib, so they are\n * hashed separately as `gzipSha256` for the upload's integrity check.\n */\nimport { createHash } from 'node:crypto';\nimport { lstat, readdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { gunzipSync, gzipSync } from 'node:zlib';\nimport { AGENT_EVAL_MAX_BUNDLE_BYTES } from '@chatsdet/types/agent-eval-template';\n\nconst BLOCK = 512;\n// Memory guards for this process, not the server's limit (which is on the archive's bytes and is\n// enforced by the API): a directory's raw size, and what an archive may unpack to.\nconst MAX_RAW_BYTES = AGENT_EVAL_MAX_BUNDLE_BYTES;\nconst MAX_UNPACKED_BYTES = 4 * AGENT_EVAL_MAX_BUNDLE_BYTES;\n\n/** `sha256` addresses the uncompressed tar; `archive` is the gzip that gets uploaded, with its own hash and size. */\nexport type BundleSource = {\n sha256: string;\n gzipSha256: string;\n bytes: number;\n archive: Buffer;\n entries: string[];\n};\n\nconst sha256Hex = (data: Buffer): string => createHash('sha256').update(data).digest('hex');\n\nfunction octal(value: number, width: number): string {\n return `${value.toString(8).padStart(width - 1, '0')}\\0`;\n}\n\n/** Split a path into the ustar `prefix` and `name` fields, which hold 155 and 100 bytes. */\nfunction splitName(path: string): { prefix: string; name: string } {\n if (Buffer.byteLength(path) <= 100) return { prefix: '', name: path };\n for (let i = path.indexOf('/'); i !== -1; i = path.indexOf('/', i + 1)) {\n const prefix = path.slice(0, i);\n const name = path.slice(i + 1);\n if (Buffer.byteLength(prefix) <= 155 && Buffer.byteLength(name) <= 100) return { prefix, name };\n }\n throw new Error(`Path is too long for a bundle (limit 255 bytes): ${path}`);\n}\n\nfunction header(path: string, size: number, type: '0' | '5', mode: number): Buffer {\n const { prefix, name } = splitName(path);\n const block = Buffer.alloc(BLOCK);\n block.write(name, 0, 'utf8');\n block.write(octal(mode, 8), 100, 'ascii');\n block.write(octal(0, 8), 108, 'ascii'); // uid\n block.write(octal(0, 8), 116, 'ascii'); // gid\n block.write(octal(size, 12), 124, 'ascii');\n block.write(octal(0, 12), 136, 'ascii'); // fixed mtime\n block.fill(0x20, 148, 156); // checksum placeholder is spaces\n block.write(type, 156, 'ascii');\n block.write('ustar\\0', 257, 'ascii');\n block.write('00', 263, 'ascii');\n // uname and gname stay empty: no owner names in the archive.\n block.write(prefix, 345, 'utf8');\n const checksum = block.reduce((sum, byte) => sum + byte, 0);\n block.write(`${checksum.toString(8).padStart(6, '0')}\\0 `, 148, 'ascii');\n return block;\n}\n\ntype Entry = { path: string; absolute: string; directory: boolean; mode: number; size: number };\n\n/** Entries in byte order of their NFC-normalized names, so macOS (NFD) and Linux file systems agree. */\nasync function walk(root: string, real = '', archive = ''): Promise<Entry[]> {\n const names = (await readdir(real ? join(root, real) : root))\n .map((name) => ({ real: name, archive: name.normalize('NFC') }))\n .sort((a, b) => Buffer.compare(Buffer.from(a.archive), Buffer.from(b.archive)));\n const entries: Entry[] = [];\n for (const name of names) {\n const realPath = real ? `${real}/${name.real}` : name.real;\n const path = archive ? `${archive}/${name.archive}` : name.archive;\n const absolute = join(root, realPath);\n const stats = await lstat(absolute);\n if (stats.isDirectory()) {\n entries.push({ path, absolute, directory: true, mode: 0o755, size: 0 });\n entries.push(...(await walk(root, realPath, path)));\n } else if (stats.isFile()) {\n entries.push({\n path,\n absolute,\n directory: false,\n mode: stats.mode & 0o111 ? 0o755 : 0o644,\n size: stats.size,\n });\n } else {\n throw new Error(\n `Cannot bundle ${path}: only regular files and directories are supported (no symlinks or devices).`\n );\n }\n }\n return entries;\n}\n\n/** Tar a directory deterministically: sorted entries, mtime 0, uid and gid 0, no owner names. */\nexport async function tarDirectory(root: string): Promise<Buffer> {\n const entries = await walk(root);\n const total = entries.reduce((sum, entry) => sum + entry.size, 0);\n if (total > MAX_RAW_BYTES) {\n throw new Error(`The input directory holds ${total} bytes; the CLI bundles at most ${MAX_RAW_BYTES}. Prune it.`);\n }\n const parts: Buffer[] = [];\n for (const entry of entries) {\n if (entry.directory) {\n parts.push(header(`${entry.path}/`, 0, '5', entry.mode));\n continue;\n }\n const content = await readFile(entry.absolute);\n parts.push(header(entry.path, content.length, '0', entry.mode), content);\n const padding = (BLOCK - (content.length % BLOCK)) % BLOCK;\n if (padding) parts.push(Buffer.alloc(padding));\n }\n parts.push(Buffer.alloc(BLOCK * 2));\n return Buffer.concat(parts);\n}\n\nfunction readString(block: Buffer, start: number, length: number): string {\n const slice = block.subarray(start, start + length);\n const end = slice.indexOf(0);\n return slice.subarray(0, end === -1 ? length : end).toString('utf8');\n}\n\nfunction normalize(path: string): string {\n return path.replace(/^(\\.\\/)+/, '').replace(/\\/+$/, '');\n}\n\n/** Entry paths of an uncompressed tar (ustar, GNU long names and pax `path` records). */\nexport function listTarEntries(tar: Buffer): string[] {\n const entries: string[] = [];\n let longName: string | null = null;\n let offset = 0;\n while (offset + BLOCK <= tar.length) {\n const block = tar.subarray(offset, offset + BLOCK);\n if (block.every((byte) => byte === 0)) break;\n const stored = Number.parseInt(readString(block, 148, 8).trim(), 8);\n const actual = block.reduce((sum, byte, i) => sum + (i >= 148 && i < 156 ? 0x20 : byte), 0);\n if (stored !== actual) throw new Error('not a valid tar archive (bad header checksum)');\n const size = Number.parseInt(readString(block, 124, 12).trim() || '0', 8);\n const type = String.fromCharCode(block[156] || 0x30);\n const body = tar.subarray(offset + BLOCK, offset + BLOCK + size);\n offset += BLOCK + Math.ceil(size / BLOCK) * BLOCK;\n if (type === 'L') {\n longName = readString(body, 0, body.length);\n continue;\n }\n if (type === 'x') {\n const record = body.toString('utf8').match(/\\d+ path=([^\\n]*)\\n/);\n if (record?.[1]) longName = record[1];\n continue;\n }\n if (type === 'g') continue;\n const prefix = readString(block, 345, 155);\n if (['1', '2', '3', '4', '6'].includes(type))\n throw new Error(`the archive holds a link or device entry (${readString(block, 0, 100)}); only files and directories are supported`);\n const name = longName ?? (prefix ? `${prefix}/${readString(block, 0, 100)}` : readString(block, 0, 100));\n longName = null;\n entries.push(normalize(name));\n }\n return entries;\n}\n\n/** Load an input (a directory or a .tar.gz) as a bundle, with its entry list, the tar's sha256 and the gzip's size and hash. */\nexport async function loadBundle(input: string): Promise<BundleSource> {\n let stats;\n try {\n stats = await lstat(input);\n } catch {\n throw new Error(`--input ${input} does not exist.`);\n }\n let tar: Buffer;\n if (stats.isDirectory()) {\n tar = await tarDirectory(input);\n } else if (stats.isFile() && /\\.(tar\\.gz|tgz)$/.test(input)) {\n if (stats.size > AGENT_EVAL_MAX_BUNDLE_BYTES)\n throw new Error(`${input} is ${stats.size} bytes; a bundle is limited to ${AGENT_EVAL_MAX_BUNDLE_BYTES}. Prune it.`);\n const gzip = await readFile(input);\n try {\n tar = gunzipSync(gzip, { maxOutputLength: MAX_UNPACKED_BYTES });\n } catch {\n throw new Error(`--input ${input} is not a valid gzip file, or unpacks to more than ${MAX_UNPACKED_BYTES} bytes.`);\n }\n } else {\n throw new Error('--input must be a directory or a .tar.gz file.');\n }\n // Always re-gzipped here, even for a .tar.gz input: the upload is then a single-member gzip from\n // this CLI, whatever the input held. Gzip is transport only; the content address is the tar's hash.\n const archive = gzipSync(tar, { level: 9 });\n let entries: string[];\n try {\n entries = listTarEntries(tar);\n } catch (error) {\n throw new Error(`--input ${input}: ${error instanceof Error ? error.message : String(error)}.`);\n }\n return {\n sha256: sha256Hex(tar),\n gzipSha256: sha256Hex(archive),\n bytes: archive.length,\n archive,\n entries,\n };\n}\n\n/** The `input.require` paths the bundle does not contain (a path may name a file or a directory). */\nexport function missingRequiredPaths(entries: string[], required: string[]): string[] {\n return required.filter((path) => {\n const wanted = normalize(path);\n return !entries.some((entry) => entry === wanted || entry.startsWith(`${wanted}/`));\n });\n}\n","/** `cofactor eval run|get|runs|compare`: start runs, wait for them and print their results. */\nimport { setTimeout as sleep } from 'node:timers/promises';\nimport { renderAgentEvalCompare, renderAgentEvalRun } from '@chatsdet/types/agent-eval-render';\nimport type {\n AgentEvalCompareResult,\n AgentEvalRunResult,\n AgentEvalTranscriptEntry,\n} from '@chatsdet/types/agent-eval-result';\nimport { hasFlag } from './auth.js';\nimport { writeRawOutput } from './brand.js';\nimport { getArgValues, getScalarArgValue } from './cli-helpers.js';\nimport { EVALS, getEval, request, requestTolerant } from './eval-api.js';\n\ntype RunStatus = AgentEvalRunResult['status'];\ntype Verdict = 'pass' | 'fail' | null;\n/** `GET /org/agent-evals/runs/:id`: the run row, its stored result once finished, and its attempts. */\ntype RunDetail = {\n id: string;\n batchId: string;\n status: RunStatus;\n verdict: Verdict;\n error: string | null;\n modelAlias: string;\n result: AgentEvalRunResult | null;\n attempts: { attemptIndex: number; transcript: AgentEvalTranscriptEntry[] | null; case: { key: string } }[];\n};\n/** One item of `GET /org/agent-evals/:name/runs`. */\ntype RunSummary = {\n id: string;\n batchId: string;\n modelAlias: string;\n commitSha: string;\n status: RunStatus;\n verdict: Verdict;\n error: string | null;\n};\n\n/** Tests shorten the interval. */\nexport const pollSettings = { intervalMs: 5000 };\n// The run job has an eight-hour budget; wait a little past it before giving up.\nconst WAIT_MS = 8.5 * 60 * 60 * 1000;\nconst MAX_TRANSIENT_FAILURES = 5;\nconst FINISHED: RunStatus[] = ['completed', 'failed', 'cancelled'];\n\nfunction intFlag(argv: string[], flag: string): number | undefined {\n const value = getScalarArgValue(argv, flag);\n if (value === undefined) return undefined;\n if (!/^\\d+$/.test(value)) throw new Error(`${flag} must be a whole number.`);\n return Number(value);\n}\n\nconst runPath = (id: string, transcript = false) =>\n `${EVALS}/runs/${encodeURIComponent(id)}${transcript ? '?transcript=1' : ''}`;\n\nconst describeRun = (run: RunDetail) =>\n `${run.id} ${run.modelAlias} ${run.status}${run.verdict ? ` ${run.verdict}` : ''}${run.error ? ` ${run.error}` : ''}`;\n\nconst stub = (run: RunDetail) => ({ id: run.id, status: run.status, verdict: run.verdict, error: run.error });\n\n/** 0 when every run passed, 1 for a failed or cancelled run, 3 when a run's verdict is fail. */\nfunction exitCodeFor(runs: { status: RunStatus; verdict: Verdict }[]): number {\n if (runs.some((run) => run.status !== 'completed')) return 1;\n return runs.some((run) => run.verdict !== 'pass') ? 3 : 0;\n}\n\n/**\n * Wait for every run of a batch. One light list request per tick covers the batch; each run's full\n * detail is fetched once when all are finished. Network errors and 5xx replies are tolerated up to\n * five in a row; auth and 4xx errors end the wait at once.\n */\nasync function waitForRuns(\n apiUrl: string,\n token: string,\n evalName: string,\n started: { batchId: string; runIds: string[] }\n): Promise<RunDetail[]> {\n const ids = `batch ${started.batchId}; runs ${started.runIds.join(', ')}`;\n let transient = 0;\n const get = async <T>(path: string): Promise<T | null> => {\n const reply = await requestTolerant<T>(apiUrl, token, path);\n if ('data' in reply) {\n transient = 0;\n return reply.data;\n }\n if (++transient >= MAX_TRANSIENT_FAILURES)\n throw new Error(`Giving up after ${transient} failed polls (${reply.transient}). Still readable: ${ids}.`);\n return null;\n };\n const deadline = Date.now() + WAIT_MS;\n for (;;) {\n if (Date.now() >= deadline)\n throw new Error(`Timed out waiting for the runs. Inspect them with cofactor eval get <run-id>: ${ids}.`);\n const page = await get<{ items: RunSummary[] }>(`${EVALS}/${encodeURIComponent(evalName)}/runs?limit=100`);\n if (page) {\n const statuses = new Map(page.items.map((item) => [item.id, item.status]));\n // A run beyond the first page is looked up directly.\n const known = await Promise.all(\n started.runIds.map(async (id) => statuses.get(id) ?? (await get<RunDetail>(runPath(id)))?.status)\n );\n if (known.every((status) => status !== undefined && FINISHED.includes(status))) break;\n }\n await sleep(pollSettings.intervalMs);\n }\n const details: RunDetail[] = [];\n for (const id of started.runIds) {\n let detail: RunDetail | null = null;\n while (!(detail = await get<RunDetail>(runPath(id)))) await sleep(pollSettings.intervalMs);\n details.push(detail);\n }\n return details;\n}\n\nexport async function runEval(argv: string[], name: string, apiUrl: string, token: string): Promise<number> {\n const json = hasFlag(argv, '--json');\n const models = getArgValues(argv, '--model');\n const cases = getArgValues(argv, '--case');\n const at = getScalarArgValue(argv, '--at');\n const environment = getScalarArgValue(argv, '--environment');\n const repeats = intFlag(argv, '--repeats');\n const parallel = intFlag(argv, '--parallel');\n const evaluation = await getEval(apiUrl, token, name);\n const started = await request<{ batchId: string; runIds: string[] }>(\n apiUrl,\n token,\n 'POST',\n `${EVALS}/${encodeURIComponent(evaluation.id)}/runs`,\n {\n ...(models.length ? { models } : {}),\n ...(environment ? { environment } : {}),\n ...(at ? { at } : {}),\n ...(cases.length ? { cases } : {}),\n ...(repeats !== undefined ? { repeats } : {}),\n ...(parallel !== undefined ? { parallel } : {}),\n }\n );\n if (hasFlag(argv, '--no-wait')) {\n writeRawOutput(\n json\n ? JSON.stringify(started, null, 2)\n : `Started batch ${started.batchId}\\n${started.runIds.join('\\n')}\\nRead results with: cofactor eval get <run-id> | cofactor eval compare --batch ${started.batchId}`\n );\n return 0;\n }\n // Printed before waiting so an interrupted or failed wait still leaves the ids to read results with.\n console.error(\n `Started batch ${started.batchId}; runs ${started.runIds.join(', ')}. If this is interrupted, read results with cofactor eval get <run-id> or cofactor eval compare --batch ${started.batchId}.`\n );\n const details = await waitForRuns(apiUrl, token, name, started);\n const results = details.flatMap((run) => (run.result ? [run.result] : []));\n if (json) {\n writeRawOutput(JSON.stringify(details.map((run) => run.result ?? stub(run)), null, 2));\n } else {\n const compare =\n details.length > 1 && results.length === details.length\n ? await request<AgentEvalCompareResult>(apiUrl, token, 'GET', `${EVALS}/compare?batch=${encodeURIComponent(started.batchId)}`)\n : null;\n if (results.length)\n writeRawOutput(\n [...results.map(renderAgentEvalRun), ...(compare ? [renderAgentEvalCompare(compare)] : [])].join('\\n').trimEnd()\n );\n for (const run of details.filter((run) => !run.result || run.status !== 'completed')) console.error(describeRun(run));\n }\n return exitCodeFor(details);\n}\n\nexport async function getRun(argv: string[], target: string, apiUrl: string, token: string): Promise<void> {\n const json = hasFlag(argv, '--json');\n const caseKey = getScalarArgValue(argv, '--case');\n const transcript = hasFlag(argv, '--transcript');\n if (transcript && !caseKey) throw new Error('--transcript needs --case <key>: transcripts are large, so the CLI prints one case at a time.');\n const run = await request<RunDetail>(apiUrl, token, 'GET', runPath(target, transcript));\n if (!run.result) {\n writeRawOutput(json ? JSON.stringify(stub(run), null, 2) : describeRun(run));\n return;\n }\n const result: AgentEvalRunResult = {\n ...run.result,\n cases: run.result.cases\n .filter((c) => caseKey === undefined || c.key === caseKey)\n .map((c) => ({\n ...c,\n attempts: c.attempts.map((attempt) => ({\n ...attempt,\n transcript: transcript\n ? (run.attempts.find((a) => a.case.key === c.key && a.attemptIndex === attempt.index)?.transcript ?? attempt.transcript)\n : attempt.transcript,\n })),\n })),\n };\n if (caseKey && result.cases.length === 0) throw new Error(`Run ${target} has no case \"${caseKey}\".`);\n if (json) {\n writeRawOutput(JSON.stringify(result, null, 2));\n return;\n }\n const lines = [renderAgentEvalRun(result).trimEnd()];\n if (transcript) {\n for (const attempt of result.cases.flatMap((c) => c.attempts)) {\n lines.push('', `Transcript, attempt ${attempt.index}:`);\n lines.push(\n ...(attempt.transcript?.length\n ? attempt.transcript.map((entry) => `${entry.role}: ${entry.text}`)\n : ['(none: this eval is not multi-turn, or the attempt did not run)'])\n );\n }\n }\n writeRawOutput(lines.join('\\n'));\n}\n\nexport async function listRuns(argv: string[], name: string, apiUrl: string, token: string): Promise<void> {\n const limit = intFlag(argv, '--limit');\n const page = await request<{ items: RunSummary[]; nextCursor: string | null }>(\n apiUrl,\n token,\n 'GET',\n `${EVALS}/${encodeURIComponent(name)}/runs${limit !== undefined ? `?limit=${limit}` : ''}`\n );\n writeRawOutput(\n hasFlag(argv, '--json')\n ? JSON.stringify(page, null, 2)\n : page.items\n .map((run) => `${run.id} ${run.modelAlias} ${run.status} ${run.verdict ?? '-'} ${run.commitSha.slice(0, 7)} batch ${run.batchId}`)\n .join('\\n') || 'No runs found.'\n );\n}\n\nexport async function compareRuns(argv: string[], ids: string[], apiUrl: string, token: string): Promise<void> {\n const batch = getScalarArgValue(argv, '--batch');\n if (Boolean(batch) === (ids.length > 0)) throw new Error('Use either one or more run ids or --batch <id>.');\n const query = batch ? `batch=${encodeURIComponent(batch)}` : `runs=${ids.map(encodeURIComponent).join(',')}`;\n const comparison = await request<AgentEvalCompareResult>(apiUrl, token, 'GET', `${EVALS}/compare?${query}`);\n writeRawOutput(\n hasFlag(argv, '--json') ? JSON.stringify(comparison.runs, null, 2) : renderAgentEvalCompare(comparison).trimEnd()\n );\n}\n","/** Pure markdown rendering shared by CLI and tests. Tokens per task are averaged here from server-provided case means. */\nimport type {\n AgentEvalCaseResult,\n AgentEvalCompareResult,\n AgentEvalRunResult,\n AgentEvalTokens,\n} from './agent-eval-result.js';\n\nconst cell = (value: string) => value.replaceAll('|', '\\\\|').replace(/\\r?\\n/g, ' ');\nconst percent = (value: number) => `${Math.round(value * 100)}%`;\nconst money = (cents: number | null, incomplete = false) =>\n cents === null ? 'unpriced' : `$${(cents / 100).toFixed(2)}${incomplete ? '*' : ''}`;\nconst minutes = (ms: number) => (ms / 60_000).toFixed(1);\nconst tokenCount = (n: number) =>\n n >= 1000 ? `${(n / 1000).toFixed(n >= 100_000 ? 0 : 1)}k` : `${Math.round(n)}`;\nconst tokenPair = (tokens: AgentEvalTokens) =>\n `${tokenCount(tokens.input)} / ${tokenCount(tokens.output)}`;\nconst meanTaskTokens = (result: AgentEvalRunResult): AgentEvalTokens => {\n const cases = result.cases;\n const mean = (key: keyof AgentEvalTokens) =>\n cases.length ? cases.reduce((n, c) => n + c.tokensPerAttempt[key], 0) / cases.length : 0;\n return {\n input: mean('input'),\n output: mean('output'),\n cacheRead: mean('cacheRead'),\n cacheCreation: mean('cacheCreation'),\n };\n};\nconst verdict = (r: AgentEvalRunResult) => (r.verdict ?? r.status).toUpperCase();\n\nexport function renderAgentEvalRun(result: AgentEvalRunResult): string {\n const s = result.summary;\n const taskTokens = meanTaskTokens(result);\n const warning = result.warnings.length\n ? ` [WARNING: ${result.warnings.map(cell).join('; ')}]`\n : '';\n // userSim is non-null exactly for a multi-turn eval (D16); single-turn output stays unchanged.\n const multiTurn = s.userSim !== null;\n const turnsToSuccess = (c: AgentEvalCaseResult) => {\n const passing = c.attempts.flatMap((a) => (a.passed && a.turns !== null ? [a.turns] : []));\n return passing.length ? (passing.reduce((n, t) => n + t, 0) / passing.length).toFixed(1) : '-';\n };\n const lines = [\n `## Eval ${cell(result.eval)}: ${verdict(result)} (${s.casesPassed}/${s.cases} cases, bar ${percent(result.passBar)}) — ${cell(result.model.alias)} (${cell(result.model.id)}) @ ${result.commit.slice(0, 7)}, ${result.repeats} repeats${warning}`,\n '',\n `| Case | Result | Attempts | Score | ${multiTurn ? 'Turns | ' : ''}Cost/attempt | Time/attempt | Tokens in/out |`,\n `|---|---|---|---|${multiTurn ? '---|' : ''}---|---|---|`,\n ...result.cases.map(\n (c) =>\n `| ${cell(c.key)} | ${c.passed ? 'PASS' : 'FAIL'} | ${c.passedAttempts}/${c.attempts.length} | ${c.meanScore.toFixed(1)} | ${multiTurn ? `${turnsToSuccess(c)} | ` : ''}${money(\n c.costCentsPerAttempt,\n c.attempts.some((a) => !a.costComplete)\n )} | ${minutes(c.durationMsPerAttempt)} min | ${tokenPair(c.tokensPerAttempt)} |`\n ),\n '',\n `Per task: ${money(s.costCentsPerTask, s.incompleteCalls > 0)} | ${minutes(s.durationMsPerTask)} min | ${tokenCount(taskTokens.input)} in / ${tokenCount(taskTokens.output)} out. Total: ${money(s.costCents, s.incompleteCalls > 0)} for ${s.attempts} attempts, ${Math.round(result.cases.flatMap((c) => c.attempts).reduce((n, a) => n + a.durationMs, 0) / 60_000)} min of agent time.`,\n ];\n const judges = [\n ...new Set(\n result.cases\n .flatMap((c) => c.attempts.flatMap((a) => a.grades))\n .filter((g) => g.kind === 'ai-judge')\n .map((g) => g.judgeModel)\n ),\n ];\n lines.push(\n `Judge (${judges.length ? judges.map((m) => cell(m ?? 'unknown')).join(', ') : 'none'}, pinned): ${s.judge.calls} calls, ${money(s.judge.costCents)}, not included above.`\n );\n if (s.userSim) {\n const models = [\n ...new Set(\n result.cases.flatMap((c) =>\n c.attempts.flatMap((a) => a.calls.filter((call) => call.role === 'user-sim').map((call) => call.model))\n )\n ),\n ];\n lines.push(\n `User-sim (${models.length ? models.map(cell).join(', ') : 'none'}, pinned): ${s.userSim.calls} calls, ${money(s.userSim.costCents)}, not included above.`\n );\n }\n const failures = result.cases.flatMap((c) =>\n c.attempts.flatMap((a) => [\n ...a.grades\n .filter((g) => !g.pass)\n .map((g) => `${cell(c.key)} #${a.index}: ${cell(g.grader)}: ${cell(g.reason)}`),\n ...(a.error && !a.grades.some((g) => !g.pass && (g.reason === a.error || g.error === a.error))\n ? [`${cell(c.key)} #${a.index}: ${cell(a.error)}`]\n : []),\n ])\n );\n lines.push(`Failed grades: ${failures.length ? failures.join('; ') : 'none'}.`);\n if (result.error) lines.push(`Error: ${cell(result.error)}.`);\n if (s.incompleteCalls) lines.push('* Cost is a lower bound because agent calls were incomplete.');\n lines.push(\n `Warnings: ${result.warnings.length ? result.warnings.map(cell).join('; ') : 'none'}. Run: ${result.id}.`\n );\n return `${lines.join('\\n')}\\n`;\n}\n\nexport function renderAgentEvalCompare(result: AgentEvalCompareResult): string {\n const lines = [\n `## Eval compare: ${cell(result.eval)} @ ${result.commit.slice(0, 7)}${result.batchId ? ` (batch ${result.batchId})` : ''}`,\n '',\n '| Model | Verdict | Pass rate | Mean score | Cost/task | Time/task | Tokens/task in/out |',\n '|---|---|---|---|---|---|---|',\n ...result.runs.map(\n (r) =>\n `| ${cell(r.model.alias)} (${cell(r.model.id)}) | ${verdict(r)} | ${percent(r.summary.passRate)} | ${r.summary.meanScore.toFixed(1)} | ${money(r.summary.costCentsPerTask, r.summary.incompleteCalls > 0)} | ${minutes(r.summary.durationMsPerTask)} min | ${tokenPair(meanTaskTokens(r))} |`\n ),\n '',\n `| Case | ${result.runs.map((r) => cell(r.model.alias)).join(' | ')} |`,\n `|---|${result.runs.map(() => '---|').join('')}`,\n ...result.cases.map(\n (c) =>\n `| ${cell(c.key)} | ${c.models\n .map(\n ({ result: r }) =>\n `${r.passedAttempts}/${r.attempts.length} ${r.passed ? 'PASS' : 'FAIL'} ${money(\n r.costCentsPerAttempt,\n r.attempts.some((a) => !a.costComplete)\n )} ${minutes(r.durationMsPerAttempt)}m`\n )\n .join(' | ')} |`\n ),\n ];\n for (const r of result.runs)\n if (r.warnings.length)\n lines.push(`Warnings (${cell(r.model.alias)}): ${r.warnings.map(cell).join('; ')}.`);\n if (result.runs.some((r) => r.summary.incompleteCalls > 0))\n lines.push('* Cost is a lower bound because agent calls were incomplete.');\n return `${lines.join('\\n')}\\n`;\n}\n","/** Authoring side of `cofactor eval`: the `init` files and the local checks `push` runs. */\nimport { readFile } from 'node:fs/promises';\nimport { dirname, isAbsolute, relative, resolve, sep } from 'node:path';\nimport { parse } from 'yaml';\nimport type { ZodError } from 'zod';\nimport {\n AgentEvalTemplateSchema,\n type AgentEvalTemplate,\n} from '@chatsdet/types/agent-eval-template';\n\n/** `eval init` writes this line first in every runbook section; `eval push` refuses a runbook that still has one. */\nexport const RUNBOOK_TODO_MARKER = '<!-- cofactor:todo -->';\n\n/** The fixed runbook headings, in order, each with the prompt `eval init` writes under it. */\nexport const RUNBOOK_SECTIONS: readonly { heading: string; prompt: string }[] = [\n {\n heading: 'What this eval proves',\n prompt: \"Describe the agent's job in one paragraph and the capabilities it backs.\",\n },\n {\n heading: 'Anatomy of a case',\n prompt:\n 'List the files in $EVAL_INPUT, what the expected value holds, and what a good case teaches.',\n },\n {\n heading: 'Finding real data',\n prompt:\n 'Say where in production the inputs live: exact cofactor commands, queries and ids, and how to pick varied cases.',\n },\n {\n heading: 'Labeling',\n prompt:\n 'Say how the expected value is decided and what must corroborate it; never the agent\\'s own output alone.',\n },\n {\n heading: 'Sanitizing',\n prompt:\n 'Say what to strip or replace before upload, the check to run, and the neutral names to use (Acme, example.com).',\n },\n {\n heading: 'Synthesizing scenarios',\n prompt:\n 'Say how to make a case when no real one exists (mutate a frozen input) and how to mark it synthetic in --source.',\n },\n {\n heading: 'Adding the case',\n prompt: 'Give the exact eval add-case command shape for this eval.',\n },\n { heading: 'Known traps', prompt: 'Record what has gone wrong before.' },\n];\n\n/** Headings whose section must not be empty: real data and sanitizing are what keep customer data out of cases. */\nconst REQUIRED_SECTIONS = ['Finding real data', 'Sanitizing'];\n\nexport const EVAL_GITIGNORE = '*.tar.gz\\n_staging/\\n';\n\nexport function initRunbook(name: string): string {\n return [\n `# ${name} runbook`,\n '',\n ...RUNBOOK_SECTIONS.flatMap(({ heading, prompt }) => [`## ${heading}`, '', RUNBOOK_TODO_MARKER, `<!-- ${prompt} -->`, '']),\n ].join('\\n');\n}\n\nexport function initTemplate(opts: {\n name: string;\n application?: string;\n capability?: string;\n}): string {\n const capability = opts.capability ?? 'CAP-REPLACE-ME';\n const application = opts.application ?? '<application>';\n return `# Agent eval: ${opts.name}\n# Push it with:\n# cofactor eval push evals/${opts.name}.eval.yaml --application ${application} --org <org>\n# Add cases with:\n# cofactor eval add-case ${opts.name} --key <key> --input <dir> --expected <file> --source \"<provenance>\" --org <org>\n# Run it with:\n# cofactor eval run ${opts.name} --org <org>\nversion: 1\nname: ${opts.name}\ndescription: Replace with one sentence on what this agent must get right.\n\n# Capabilities in the application's product map that this eval proves (CAP- codes).\nproves:\n capabilities:\n - ${capability}\n\n# Runbook for whoever adds cases; path relative to this file. Stored with the eval.\nrunbook: ${opts.name}.runbook.md\n\n# single-turn: \\`run\\` is executed once per attempt. multi-turn: \\`run\\` is the agent process,\n# speaking JSONL on stdin/stdout, and a \\`simulator\\` model is required (cases then need a conversation).\nmode: single-turn\n\n# Shell command run at the repository root of the evaluated commit. It reads its case from\n# $EVAL_INPUT and writes its answer to $EVAL_OUTPUT/answer.* (answer.json, answer.txt, ...).\n# Model calls go to the injected ANTHROPIC_BASE_URL / OPENAI_BASE_URL; never use a real key.\nrun: ./scripts/run-agent.sh\n\ninput:\n description: What the files in a case's input directory contain.\n # Paths every case bundle must contain (files or directories); checked before upload.\n require:\n - input.json\n\nagent:\n models:\n # alias: provider (anthropic | azure) and model id. Aliases are what --model takes.\n sonnet:\n provider: anthropic\n model: claude-sonnet-4-6\n default: sonnet\n\ngraders:\n # A script grader runs after the agent exits with EVAL_INPUT, EVAL_OUTPUT and EVAL_EXPECTED\n # (the case's expected value as a JSON file). Its last stdout line is\n # {\"pass\": true, \"score\": 1, \"reason\": \"why\"}. Anything else is a grader error.\n - id: answer-matches-expected\n kind: script\n command: ./scripts/grade-answer.sh\n\n # An ai-judge scores a rubric against the answer and the case's expected value.\n # The judge model is pinned. scale is binary or 1-5; a 1-5 scale requires passAt.\n - id: answer-quality\n kind: ai-judge\n rubric: The answer states the same root cause as the expected value and cites evidence from the input.\n scale: 1-5\n passAt: 4\n judge:\n provider: anthropic\n model: claude-opus-4-8\n\n# Each case runs \\`repeats\\` times and passes when at least \\`passAtLeast\\` attempts pass.\nrepeats: 3\npassAtLeast: 2\n\n# The eval passes when this share of cases pass.\npassBar: 0.5\n\n# Time limit per attempt, in seconds (30 to 1700).\nattemptSeconds: 600\n`;\n}\n\n/** Zod issues as one readable line each: `graders.1.passAt: A 1-5 judge requires passAt`. */\nexport function formatIssues(error: ZodError): string[] {\n return error.issues.map((issue) => {\n const path = issue.path.map(String).join('.');\n return `${path || '(template)'}: ${issue.message}`;\n });\n}\n\nexport class TemplateError extends Error {\n constructor(heading: string, lines: string[]) {\n super(`${heading}\\n${lines.map((line) => ` ${line}`).join('\\n')}`);\n }\n}\n\nexport type PushPayload = {\n definition: AgentEvalTemplate;\n runbook: string;\n warnings: string[];\n};\n\nfunction sectionBodies(runbook: string): Map<string, string> {\n const sections = new Map<string, string>();\n let current: string | null = null;\n for (const line of runbook.split(/\\r?\\n/)) {\n const heading = line.match(/^##\\s+(.+?)\\s*$/);\n if (heading) {\n current = heading[1]!;\n sections.set(current, '');\n } else if (current !== null) {\n sections.set(current, `${sections.get(current)}${line}\\n`);\n }\n }\n return sections;\n}\n\n/** Missing headings are warnings; an empty required section or a section still holding the todo marker is an error. */\nexport function checkRunbook(runbook: string): { errors: string[]; warnings: string[] } {\n const sections = sectionBodies(runbook);\n const errors: string[] = [];\n const warnings: string[] = [];\n const todo = [...sections].filter(([, body]) => body.split('\\n').some((line) => line.trim() === RUNBOOK_TODO_MARKER));\n if (todo.length) {\n errors.push(\n `Runbook still has ${RUNBOOK_TODO_MARKER} in: ${todo.map(([heading]) => `\"## ${heading}\"`).join(', ')}. Write each section, then delete its marker line.`\n );\n }\n for (const { heading } of RUNBOOK_SECTIONS) {\n const body = sections.get(heading);\n const empty = body === undefined || body.replace(/<!--[\\s\\S]*?-->/g, '').trim() === '';\n if (body === undefined) warnings.push(`Runbook has no \"## ${heading}\" section.`);\n if (REQUIRED_SECTIONS.includes(heading) && empty) {\n errors.push(`Runbook section \"## ${heading}\" is empty; write it before pushing.`);\n }\n }\n return { errors, warnings };\n}\n\n/** Parse and validate a template file and read its runbook, relative to the YAML. */\nexport async function readPushPayload(file: string): Promise<PushPayload> {\n let source: string;\n try {\n source = await readFile(file, 'utf8');\n } catch {\n throw new Error(`Cannot read ${file}.`);\n }\n let raw: unknown;\n try {\n raw = parse(source);\n } catch (error) {\n throw new Error(`${file} is not valid YAML: ${error instanceof Error ? error.message : String(error)}`);\n }\n const parsed = AgentEvalTemplateSchema.safeParse(raw);\n if (!parsed.success) throw new TemplateError(`${file} is not a valid eval template:`, formatIssues(parsed.error));\n const runbookPath = resolve(dirname(file), parsed.data.runbook);\n const inside = relative(dirname(resolve(file)), runbookPath);\n if (isAbsolute(parsed.data.runbook) || inside === '..' || inside.startsWith(`..${sep}`) || isAbsolute(inside))\n throw new Error(`The template's runbook (${parsed.data.runbook}) must be a path inside the template's directory.`);\n let runbook: string;\n try {\n runbook = await readFile(runbookPath, 'utf8');\n } catch {\n throw new Error(`Cannot read the runbook ${runbookPath} (the template's runbook: ${parsed.data.runbook}).`);\n }\n const { errors, warnings } = checkRunbook(runbook);\n if (errors.length) throw new TemplateError(`${runbookPath} cannot be pushed:`, errors);\n return { definition: parsed.data, runbook, warnings };\n}\n"],"mappings":"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","names":["readFile","readdir","join","required","run","target","readFile","readFile","readFile","join","readdir","flag"]}
|
|
@@ -5,19 +5,19 @@ import {
|
|
|
5
5
|
getArgValues,
|
|
6
6
|
getPositionalArg,
|
|
7
7
|
selectProperty
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-VKZOHJCE.js";
|
|
9
9
|
import "./chunk-S3Q7MDCS.js";
|
|
10
10
|
import {
|
|
11
11
|
isActiveExplorationCycleStatus
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-4UZN6TVT.js";
|
|
13
13
|
import {
|
|
14
14
|
getArgValue,
|
|
15
15
|
hasFlag,
|
|
16
16
|
resolveConfig
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-WRBU6TX7.js";
|
|
18
18
|
import {
|
|
19
19
|
writeRawOutput
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-MJVUMVLO.js";
|
|
21
21
|
import "./chunk-TOWZAG3I.js";
|
|
22
22
|
|
|
23
23
|
// src/exploration.ts
|
|
@@ -182,4 +182,4 @@ async function runExploration(argv) {
|
|
|
182
182
|
export {
|
|
183
183
|
runExploration
|
|
184
184
|
};
|
|
185
|
-
//# sourceMappingURL=exploration-
|
|
185
|
+
//# sourceMappingURL=exploration-GZ4WUJJH.js.map
|
|
@@ -6,22 +6,22 @@ import {
|
|
|
6
6
|
getScalarArgValue,
|
|
7
7
|
resolveCredentialId,
|
|
8
8
|
selectProperty
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VKZOHJCE.js";
|
|
10
10
|
import "./chunk-S3Q7MDCS.js";
|
|
11
11
|
import {
|
|
12
12
|
ADHOC_TEST_INSTRUCTIONS_MAX_LENGTH,
|
|
13
13
|
EXPLORATORY_EFFORT_VALUES,
|
|
14
14
|
REVIEW_FLAVOR_VALUES
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-4UZN6TVT.js";
|
|
16
16
|
import {
|
|
17
17
|
hasFlag,
|
|
18
18
|
resolveConfig,
|
|
19
19
|
resolveOrgAppUrl
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-WRBU6TX7.js";
|
|
21
21
|
import {
|
|
22
22
|
stripTerminalControls,
|
|
23
23
|
writeRawOutput
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-MJVUMVLO.js";
|
|
25
25
|
import "./chunk-TOWZAG3I.js";
|
|
26
26
|
|
|
27
27
|
// src/exploratory-test.ts
|
|
@@ -323,4 +323,4 @@ export {
|
|
|
323
323
|
handleRun,
|
|
324
324
|
runExploratoryTest
|
|
325
325
|
};
|
|
326
|
-
//# sourceMappingURL=exploratory-test-
|
|
326
|
+
//# sourceMappingURL=exploratory-test-Y7P4ZDLD.js.map
|
|
@@ -2,38 +2,38 @@ import { createRequire as __cr } from "module"; import { fileURLToPath as __fup
|
|
|
2
2
|
import {
|
|
3
3
|
printFinding,
|
|
4
4
|
printTriageSummary
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-RRSUKARV.js";
|
|
6
6
|
import {
|
|
7
7
|
formatElapsedDurationMs,
|
|
8
8
|
formatRecordedUtcTimestamp
|
|
9
9
|
} from "./chunk-2TIRL6ZK.js";
|
|
10
10
|
import {
|
|
11
11
|
streamExternalRun
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-P7L5KELH.js";
|
|
13
13
|
import {
|
|
14
14
|
attachCliDiagnosticMetadata
|
|
15
15
|
} from "./chunk-W7CFLOEI.js";
|
|
16
16
|
import {
|
|
17
17
|
getGuideSectionArg
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-VKZOHJCE.js";
|
|
19
19
|
import "./chunk-S3Q7MDCS.js";
|
|
20
20
|
import {
|
|
21
21
|
elapsedTestAttemptMs
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-4UZN6TVT.js";
|
|
23
23
|
import {
|
|
24
24
|
apiFetch,
|
|
25
25
|
fetchOrExit,
|
|
26
26
|
getArgValue,
|
|
27
27
|
hasFlag,
|
|
28
28
|
resolveConfig
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-WRBU6TX7.js";
|
|
30
30
|
import {
|
|
31
31
|
EXTERNAL_RUN_GUIDE_SECTIONS,
|
|
32
32
|
printGuide,
|
|
33
33
|
stripTerminalControls,
|
|
34
34
|
writeRawOutput,
|
|
35
35
|
writeUntrustedText
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-MJVUMVLO.js";
|
|
37
37
|
import "./chunk-TOWZAG3I.js";
|
|
38
38
|
|
|
39
39
|
// src/external-run.ts
|
|
@@ -1252,4 +1252,4 @@ export {
|
|
|
1252
1252
|
__externalRunInternals,
|
|
1253
1253
|
runExternalRun
|
|
1254
1254
|
};
|
|
1255
|
-
//# sourceMappingURL=external-run-
|
|
1255
|
+
//# sourceMappingURL=external-run-IJGGZOGI.js.map
|
|
@@ -5,17 +5,17 @@ import {
|
|
|
5
5
|
getTargetOrg,
|
|
6
6
|
parseLifecycleStage,
|
|
7
7
|
toLifecycleLabel
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-VKZOHJCE.js";
|
|
9
9
|
import "./chunk-S3Q7MDCS.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-4UZN6TVT.js";
|
|
11
11
|
import {
|
|
12
12
|
getArgValue,
|
|
13
13
|
hasFlag,
|
|
14
14
|
resolveConfig
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-WRBU6TX7.js";
|
|
16
16
|
import {
|
|
17
17
|
writeRawOutput
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-MJVUMVLO.js";
|
|
19
19
|
import "./chunk-TOWZAG3I.js";
|
|
20
20
|
|
|
21
21
|
// src/feature-flag.ts
|
|
@@ -856,4 +856,4 @@ async function runFeatureFlag(argv) {
|
|
|
856
856
|
export {
|
|
857
857
|
runFeatureFlag
|
|
858
858
|
};
|
|
859
|
-
//# sourceMappingURL=feature-flag-
|
|
859
|
+
//# sourceMappingURL=feature-flag-UH6Z7774.js.map
|
|
@@ -10,18 +10,18 @@ import {
|
|
|
10
10
|
getPositionalArg,
|
|
11
11
|
resolveEnvironmentByNameOrId,
|
|
12
12
|
selectProperty
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-VKZOHJCE.js";
|
|
14
14
|
import "./chunk-S3Q7MDCS.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-4UZN6TVT.js";
|
|
16
16
|
import {
|
|
17
17
|
getArgValue,
|
|
18
18
|
hasFlag,
|
|
19
19
|
resolveConfig,
|
|
20
20
|
resolveOrgAppUrl
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-WRBU6TX7.js";
|
|
22
22
|
import {
|
|
23
23
|
writeRawOutput
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-MJVUMVLO.js";
|
|
25
25
|
import "./chunk-TOWZAG3I.js";
|
|
26
26
|
|
|
27
27
|
// src/flow/index.ts
|
|
@@ -2188,4 +2188,4 @@ async function runFlow(argv) {
|
|
|
2188
2188
|
export {
|
|
2189
2189
|
runFlow
|
|
2190
2190
|
};
|
|
2191
|
-
//# sourceMappingURL=flow-
|
|
2191
|
+
//# sourceMappingURL=flow-MRWAQYZZ.js.map
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { createRequire as __cr } from "module"; import { fileURLToPath as __fup } from "url"; import { dirname as __dn } from "path"; const require = __cr(import.meta.url); const __filename = __fup(import.meta.url); const __dirname = __dn(__filename);
|
|
2
2
|
import {
|
|
3
3
|
openUrl
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-5TKXHS3X.js";
|
|
5
5
|
import {
|
|
6
6
|
apiRequest,
|
|
7
7
|
getTargetOrg,
|
|
8
8
|
requireOrgAdmin
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VKZOHJCE.js";
|
|
10
10
|
import "./chunk-S3Q7MDCS.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-4UZN6TVT.js";
|
|
12
12
|
import {
|
|
13
13
|
decodeJwtPayload,
|
|
14
14
|
getArgValue,
|
|
15
15
|
hasFlag,
|
|
16
16
|
resolveConfig,
|
|
17
17
|
resolveOrgAppUrl
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-WRBU6TX7.js";
|
|
19
|
+
import "./chunk-MJVUMVLO.js";
|
|
20
20
|
import "./chunk-TOWZAG3I.js";
|
|
21
21
|
|
|
22
22
|
// src/github.ts
|
|
@@ -156,4 +156,4 @@ export {
|
|
|
156
156
|
githubConnectUrl,
|
|
157
157
|
runGithub
|
|
158
158
|
};
|
|
159
|
-
//# sourceMappingURL=github-
|
|
159
|
+
//# sourceMappingURL=github-VDJU3PU3.js.map
|