@hawkeyexl/manni 4.11.0 → 4.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{batch-UAULUMGH.js → batch-KMGZMIAQ.js} +20 -19
- package/dist/build-NO4AWCYG.js +36 -0
- package/dist/calibrate-XQUG5XAK.js +41 -0
- package/dist/capture-5XE3ZMXK.js +38 -0
- package/dist/{check-YEOYBFST.js → check-HTNPLWOV.js} +19 -18
- package/dist/check-RJ45IBA6.js +34 -0
- package/dist/{check-VELUQAUW.js → check-W24BQNCT.js} +35 -34
- package/dist/{check-VELUQAUW.js.map → check-W24BQNCT.js.map} +1 -1
- package/dist/check-WFXSXICD.js +30 -0
- package/dist/{chunk-IGSHYP74.js → chunk-23P7KMJM.js} +4 -4
- package/dist/{chunk-HA6MQMOY.js → chunk-24J7TYPU.js} +6 -6
- package/dist/{chunk-PCS4VJBV.js → chunk-37QJLVS3.js} +9 -9
- package/dist/{chunk-4CK6ZSOK.js → chunk-3P6KCU36.js} +3 -3
- package/dist/{chunk-54F74XR3.js → chunk-5JBVFWVP.js} +19 -19
- package/dist/{chunk-B7XYNRJQ.js → chunk-6KIYVVKL.js} +2 -2
- package/dist/{chunk-J6IDQGJL.js → chunk-6TVH4FI7.js} +469 -85
- package/dist/chunk-6TVH4FI7.js.map +1 -0
- package/dist/{chunk-GDVZ5VII.js → chunk-7A452BPZ.js} +4 -4
- package/dist/{chunk-M42DZCOU.js → chunk-7FCLXEAQ.js} +2 -2
- package/dist/{chunk-2MJ62AYQ.js → chunk-7MCQHTQ5.js} +4 -3
- package/dist/chunk-7MCQHTQ5.js.map +1 -0
- package/dist/{chunk-LBSCW232.js → chunk-7NXPQKSB.js} +7 -7
- package/dist/{chunk-OPXWPJDA.js → chunk-A3TEDWBZ.js} +14 -14
- package/dist/{chunk-BBT6AVUG.js → chunk-BHHXU2D2.js} +2 -2
- package/dist/{chunk-D4N2V43Z.js → chunk-CEI2J42X.js} +13 -7
- package/dist/chunk-CEI2J42X.js.map +1 -0
- package/dist/{chunk-FQXWVS6J.js → chunk-CMMBWHT2.js} +9 -9
- package/dist/{chunk-EIFCP6CZ.js → chunk-CO47QJKZ.js} +2 -2
- package/dist/{chunk-2DRHT73U.js → chunk-CVZMKWZ5.js} +913 -1398
- package/dist/chunk-CVZMKWZ5.js.map +1 -0
- package/dist/{chunk-ADMEPUBT.js → chunk-CXWTNT2O.js} +3 -3
- package/dist/{chunk-LKP7QDFN.js → chunk-DAQTRAP5.js} +4 -4
- package/dist/chunk-DSWKBZWW.js +16 -0
- package/dist/chunk-DSWKBZWW.js.map +1 -0
- package/dist/{chunk-PWBH7DCQ.js → chunk-EESH6COU.js} +4 -4
- package/dist/{chunk-JPQDNYXH.js → chunk-EM67O2ET.js} +8 -2
- package/dist/chunk-EM67O2ET.js.map +1 -0
- package/dist/{chunk-HQR2ZBHW.js → chunk-I2XQRRP7.js} +36 -7
- package/dist/chunk-I2XQRRP7.js.map +1 -0
- package/dist/{chunk-NCPWXHDO.js → chunk-JEUFYSFQ.js} +4 -4
- package/dist/{chunk-2IR4T5PO.js → chunk-JJ4RSDSY.js} +2 -2
- package/dist/chunk-KCB5JCK4.js +2272 -0
- package/dist/chunk-KCB5JCK4.js.map +1 -0
- package/dist/{chunk-VSEBFHAY.js → chunk-KFKL4VTL.js} +11369 -10218
- package/dist/chunk-KFKL4VTL.js.map +1 -0
- package/dist/{chunk-PCQ7ELJH.js → chunk-L2TD7DZB.js} +109 -5
- package/dist/chunk-L2TD7DZB.js.map +1 -0
- package/dist/{chunk-WDWXAYVH.js → chunk-L3RLGGRK.js} +4 -4
- package/dist/{chunk-T7JAOYE5.js → chunk-L75CAZG4.js} +6 -6
- package/dist/{chunk-U7CTFN2J.js → chunk-MYRPMSOX.js} +7 -7
- package/dist/{chunk-Y6DOMTQD.js → chunk-NCF5NQV5.js} +27 -27
- package/dist/chunk-NCF5NQV5.js.map +1 -0
- package/dist/{chunk-WQWKYAAK.js → chunk-NUQF5F5J.js} +2 -2
- package/dist/{chunk-FUCPZVRY.js → chunk-OEN6FBUW.js} +2 -2
- package/dist/{chunk-FBMZJEB3.js → chunk-OKMTUAWO.js} +4 -4
- package/dist/{chunk-QLWC7MKD.js → chunk-OTJOBZJ5.js} +135 -135
- package/dist/chunk-OTJOBZJ5.js.map +1 -0
- package/dist/{chunk-R4WXQIOZ.js → chunk-PCEM5FOZ.js} +3 -3
- package/dist/{chunk-4D5IZSXM.js → chunk-PXNCRGUL.js} +3 -3
- package/dist/chunk-Q2QC5AZB.js +1868 -0
- package/dist/chunk-Q2QC5AZB.js.map +1 -0
- package/dist/{chunk-ODRPL3WB.js → chunk-Q3ODX5PF.js} +2 -2
- package/dist/{chunk-KGEQJ5CC.js → chunk-RRFFUWDL.js} +8 -8
- package/dist/{chunk-NSBXVPZL.js → chunk-S3XUYW5K.js} +17 -17
- package/dist/{chunk-LPIF5LIE.js → chunk-SAU2WQFC.js} +2 -2
- package/dist/{chunk-MSRU4D4P.js → chunk-SFLICIQV.js} +2 -2
- package/dist/{chunk-NGTVREIH.js → chunk-U6IHLEWT.js} +2 -2
- package/dist/{chunk-QCHVR4ZM.js → chunk-VM7VAFJW.js} +33 -7
- package/dist/chunk-VM7VAFJW.js.map +1 -0
- package/dist/{chunk-6HWBRZIN.js → chunk-VQYGLU4C.js} +252 -193
- package/dist/chunk-VQYGLU4C.js.map +1 -0
- package/dist/{chunk-2IAZEB45.js → chunk-WGMFDG6U.js} +229 -821
- package/dist/chunk-WGMFDG6U.js.map +1 -0
- package/dist/{chunk-GV56WGL2.js → chunk-WO4JYWZK.js} +1036 -883
- package/dist/chunk-WO4JYWZK.js.map +1 -0
- package/dist/chunk-XYRUDFKS.js +685 -0
- package/dist/chunk-XYRUDFKS.js.map +1 -0
- package/dist/{chunk-VQK4VHLF.js → chunk-YQV75FIL.js} +2 -2
- package/dist/chunk-YUTVAMWW.js +2 -0
- package/dist/{chunk-RLT5SEML.js → chunk-Z5MZCCTT.js} +6 -6
- package/dist/{chunk-BKVHX6FU.js → chunk-ZIRBFXDW.js} +5 -10
- package/dist/chunk-ZIRBFXDW.js.map +1 -0
- package/dist/{cli-O4ABTN4Z.js → cli-236TGVJG.js} +31 -30
- package/dist/{cli-O4ABTN4Z.js.map → cli-236TGVJG.js.map} +1 -1
- package/dist/{cli-3BTCK4AB.js → cli-3FAPJBEY.js} +27 -26
- package/dist/{cli-3BTCK4AB.js.map → cli-3FAPJBEY.js.map} +1 -1
- package/dist/{cli-JJMOVIKS.js → cli-BS43EVCD.js} +14 -14
- package/dist/{cli-RORDPAPE.js → cli-CMR4FYF6.js} +59 -38
- package/dist/cli-CMR4FYF6.js.map +1 -0
- package/dist/{cli-ONTC5PKT.js → cli-FX53PBQ3.js} +9 -9
- package/dist/{cli-6KZTHWGP.js → cli-IQNJLKSN.js} +37 -36
- package/dist/{cli-6KZTHWGP.js.map → cli-IQNJLKSN.js.map} +1 -1
- package/dist/{cli-4MF37HAQ.js → cli-KOMXVPXX.js} +26 -25
- package/dist/{cli-4MF37HAQ.js.map → cli-KOMXVPXX.js.map} +1 -1
- package/dist/{cli-I62SRH3R.js → cli-NGL63E53.js} +14 -13
- package/dist/{cli-DRMZBZLB.js → cli-QPGS2MR5.js} +43 -42
- package/dist/{cli-DRMZBZLB.js.map → cli-QPGS2MR5.js.map} +1 -1
- package/dist/{cli-VID7PJS3.js → cli-RKQX4TI3.js} +23 -22
- package/dist/{cli-VID7PJS3.js.map → cli-RKQX4TI3.js.map} +1 -1
- package/dist/{cli-VUKMWSSF.js → cli-WNEI5L7P.js} +4 -4
- package/dist/cli.js +19 -13
- package/dist/cli.js.map +1 -1
- package/dist/{config-XDA42RJL.js → config-JJW75SBX.js} +5 -5
- package/dist/docmeta.js +13 -12
- package/dist/docmeta.js.map +1 -1
- package/dist/github-4UR67MEN.js +35 -0
- package/dist/github-UPGKMVVF.js +30 -0
- package/dist/graph/runtime.d.ts +4 -1
- package/dist/graph/runtime.js +20 -9
- package/dist/graph/runtime.js.map +1 -1
- package/dist/{host-6GURH5HE.js → host-YSTYO5DX.js} +3 -3
- package/dist/index.d.ts +192 -26
- package/dist/index.js +129 -124
- package/dist/index.js.map +1 -1
- package/dist/{json-BXY44ED7.js → json-DQIELR36.js} +18 -17
- package/dist/labels-XSTJJMSG.js +73 -0
- package/dist/labels-XSTJJMSG.js.map +1 -0
- package/dist/lint-BLBGGOYM.js +34 -0
- package/dist/list-B3RRRWFQ.js +32 -0
- package/dist/list-ZFRT3JQH.js +35 -0
- package/dist/{page-EV7OUBAU.js → page-5ISEVJR5.js} +18 -16
- package/dist/{prepare-JHJDJB6I.js → prepare-KFXXG2CJ.js} +22 -21
- package/dist/{prepare-JHJDJB6I.js.map → prepare-KFXXG2CJ.js.map} +1 -1
- package/dist/{pretty-Q5Y2PA64.js → pretty-Y7CGQLAF.js} +18 -17
- package/dist/{pretty-SCRK66M5.js → pretty-ZISH3Q4F.js} +18 -17
- package/dist/{provider-527CO4DM.js → provider-LBX4IXGX.js} +3 -3
- package/dist/{release-3D5PK6M7.js → release-VV3UTKE5.js} +3 -3
- package/dist/{reporters-M6LJ2IYU.js → reporters-26H3N2KW.js} +3 -3
- package/dist/{reporters-A5ADKDYR.js → reporters-4STXJJE2.js} +16 -15
- package/dist/{reporters-RBYTASMI.js → reporters-74B4U2GZ.js} +7 -7
- package/dist/run-DVGTKM52.js +37 -0
- package/dist/{term-CQAGNG3Q.js → term-PLJEYJQV.js} +981 -141
- package/dist/term-PLJEYJQV.js.map +1 -0
- package/dist/validate-CJNFQHMD.js +19 -0
- package/package.json +3 -2
- package/plugin/manni/.claude-plugin/plugin.json +1 -1
- package/shapes/graph/shapes-1.1.0.ttl +785 -0
- package/dist/build-QSPNK5AL.js +0 -35
- package/dist/calibrate-KXN4URPM.js +0 -40
- package/dist/capture-JHTSUPUC.js +0 -37
- package/dist/check-MDGXEUWL.js +0 -20
- package/dist/check-WOQRKNZK.js +0 -29
- package/dist/chunk-2DRHT73U.js.map +0 -1
- package/dist/chunk-2IAZEB45.js.map +0 -1
- package/dist/chunk-2MJ62AYQ.js.map +0 -1
- package/dist/chunk-4VBSTXN6.js +0 -392
- package/dist/chunk-4VBSTXN6.js.map +0 -1
- package/dist/chunk-6HWBRZIN.js.map +0 -1
- package/dist/chunk-BKVHX6FU.js.map +0 -1
- package/dist/chunk-D4N2V43Z.js.map +0 -1
- package/dist/chunk-EFW7CAG4.js +0 -387
- package/dist/chunk-EFW7CAG4.js.map +0 -1
- package/dist/chunk-GV56WGL2.js.map +0 -1
- package/dist/chunk-HQR2ZBHW.js.map +0 -1
- package/dist/chunk-J6IDQGJL.js.map +0 -1
- package/dist/chunk-JPQDNYXH.js.map +0 -1
- package/dist/chunk-JROBZ7JA.js +0 -818
- package/dist/chunk-JROBZ7JA.js.map +0 -1
- package/dist/chunk-PCQ7ELJH.js.map +0 -1
- package/dist/chunk-QCHVR4ZM.js.map +0 -1
- package/dist/chunk-QLWC7MKD.js.map +0 -1
- package/dist/chunk-TU2WUBVZ.js +0 -2
- package/dist/chunk-VSEBFHAY.js.map +0 -1
- package/dist/chunk-Y6DOMTQD.js.map +0 -1
- package/dist/cli-RORDPAPE.js.map +0 -1
- package/dist/github-RY3FRA6P.js +0 -29
- package/dist/github-YKQSH7FS.js +0 -34
- package/dist/lint-YJ2L22BW.js +0 -33
- package/dist/list-NSG24VVX.js +0 -31
- package/dist/list-V6EGCSHX.js +0 -34
- package/dist/run-BUE2DDXN.js +0 -36
- package/dist/term-CQAGNG3Q.js.map +0 -1
- package/dist/validate-ZBW44RHT.js +0 -18
- /package/dist/{batch-UAULUMGH.js.map → batch-KMGZMIAQ.js.map} +0 -0
- /package/dist/{build-QSPNK5AL.js.map → build-NO4AWCYG.js.map} +0 -0
- /package/dist/{calibrate-KXN4URPM.js.map → calibrate-XQUG5XAK.js.map} +0 -0
- /package/dist/{capture-JHTSUPUC.js.map → capture-5XE3ZMXK.js.map} +0 -0
- /package/dist/{check-MDGXEUWL.js.map → check-HTNPLWOV.js.map} +0 -0
- /package/dist/{check-WOQRKNZK.js.map → check-RJ45IBA6.js.map} +0 -0
- /package/dist/{check-YEOYBFST.js.map → check-WFXSXICD.js.map} +0 -0
- /package/dist/{chunk-IGSHYP74.js.map → chunk-23P7KMJM.js.map} +0 -0
- /package/dist/{chunk-HA6MQMOY.js.map → chunk-24J7TYPU.js.map} +0 -0
- /package/dist/{chunk-PCS4VJBV.js.map → chunk-37QJLVS3.js.map} +0 -0
- /package/dist/{chunk-4CK6ZSOK.js.map → chunk-3P6KCU36.js.map} +0 -0
- /package/dist/{chunk-54F74XR3.js.map → chunk-5JBVFWVP.js.map} +0 -0
- /package/dist/{chunk-B7XYNRJQ.js.map → chunk-6KIYVVKL.js.map} +0 -0
- /package/dist/{chunk-GDVZ5VII.js.map → chunk-7A452BPZ.js.map} +0 -0
- /package/dist/{chunk-M42DZCOU.js.map → chunk-7FCLXEAQ.js.map} +0 -0
- /package/dist/{chunk-LBSCW232.js.map → chunk-7NXPQKSB.js.map} +0 -0
- /package/dist/{chunk-OPXWPJDA.js.map → chunk-A3TEDWBZ.js.map} +0 -0
- /package/dist/{chunk-BBT6AVUG.js.map → chunk-BHHXU2D2.js.map} +0 -0
- /package/dist/{chunk-FQXWVS6J.js.map → chunk-CMMBWHT2.js.map} +0 -0
- /package/dist/{chunk-EIFCP6CZ.js.map → chunk-CO47QJKZ.js.map} +0 -0
- /package/dist/{chunk-ADMEPUBT.js.map → chunk-CXWTNT2O.js.map} +0 -0
- /package/dist/{chunk-LKP7QDFN.js.map → chunk-DAQTRAP5.js.map} +0 -0
- /package/dist/{chunk-PWBH7DCQ.js.map → chunk-EESH6COU.js.map} +0 -0
- /package/dist/{chunk-NCPWXHDO.js.map → chunk-JEUFYSFQ.js.map} +0 -0
- /package/dist/{chunk-2IR4T5PO.js.map → chunk-JJ4RSDSY.js.map} +0 -0
- /package/dist/{chunk-WDWXAYVH.js.map → chunk-L3RLGGRK.js.map} +0 -0
- /package/dist/{chunk-T7JAOYE5.js.map → chunk-L75CAZG4.js.map} +0 -0
- /package/dist/{chunk-U7CTFN2J.js.map → chunk-MYRPMSOX.js.map} +0 -0
- /package/dist/{chunk-WQWKYAAK.js.map → chunk-NUQF5F5J.js.map} +0 -0
- /package/dist/{chunk-FUCPZVRY.js.map → chunk-OEN6FBUW.js.map} +0 -0
- /package/dist/{chunk-FBMZJEB3.js.map → chunk-OKMTUAWO.js.map} +0 -0
- /package/dist/{chunk-R4WXQIOZ.js.map → chunk-PCEM5FOZ.js.map} +0 -0
- /package/dist/{chunk-4D5IZSXM.js.map → chunk-PXNCRGUL.js.map} +0 -0
- /package/dist/{chunk-ODRPL3WB.js.map → chunk-Q3ODX5PF.js.map} +0 -0
- /package/dist/{chunk-KGEQJ5CC.js.map → chunk-RRFFUWDL.js.map} +0 -0
- /package/dist/{chunk-NSBXVPZL.js.map → chunk-S3XUYW5K.js.map} +0 -0
- /package/dist/{chunk-LPIF5LIE.js.map → chunk-SAU2WQFC.js.map} +0 -0
- /package/dist/{chunk-MSRU4D4P.js.map → chunk-SFLICIQV.js.map} +0 -0
- /package/dist/{chunk-NGTVREIH.js.map → chunk-U6IHLEWT.js.map} +0 -0
- /package/dist/{chunk-VQK4VHLF.js.map → chunk-YQV75FIL.js.map} +0 -0
- /package/dist/{chunk-TU2WUBVZ.js.map → chunk-YUTVAMWW.js.map} +0 -0
- /package/dist/{chunk-RLT5SEML.js.map → chunk-Z5MZCCTT.js.map} +0 -0
- /package/dist/{cli-JJMOVIKS.js.map → cli-BS43EVCD.js.map} +0 -0
- /package/dist/{cli-ONTC5PKT.js.map → cli-FX53PBQ3.js.map} +0 -0
- /package/dist/{cli-I62SRH3R.js.map → cli-NGL63E53.js.map} +0 -0
- /package/dist/{cli-VUKMWSSF.js.map → cli-WNEI5L7P.js.map} +0 -0
- /package/dist/{config-XDA42RJL.js.map → config-JJW75SBX.js.map} +0 -0
- /package/dist/{github-RY3FRA6P.js.map → github-4UR67MEN.js.map} +0 -0
- /package/dist/{github-YKQSH7FS.js.map → github-UPGKMVVF.js.map} +0 -0
- /package/dist/{host-6GURH5HE.js.map → host-YSTYO5DX.js.map} +0 -0
- /package/dist/{json-BXY44ED7.js.map → json-DQIELR36.js.map} +0 -0
- /package/dist/{lint-YJ2L22BW.js.map → lint-BLBGGOYM.js.map} +0 -0
- /package/dist/{list-NSG24VVX.js.map → list-B3RRRWFQ.js.map} +0 -0
- /package/dist/{list-V6EGCSHX.js.map → list-ZFRT3JQH.js.map} +0 -0
- /package/dist/{page-EV7OUBAU.js.map → page-5ISEVJR5.js.map} +0 -0
- /package/dist/{pretty-Q5Y2PA64.js.map → pretty-Y7CGQLAF.js.map} +0 -0
- /package/dist/{pretty-SCRK66M5.js.map → pretty-ZISH3Q4F.js.map} +0 -0
- /package/dist/{provider-527CO4DM.js.map → provider-LBX4IXGX.js.map} +0 -0
- /package/dist/{release-3D5PK6M7.js.map → release-VV3UTKE5.js.map} +0 -0
- /package/dist/{reporters-A5ADKDYR.js.map → reporters-26H3N2KW.js.map} +0 -0
- /package/dist/{reporters-M6LJ2IYU.js.map → reporters-4STXJJE2.js.map} +0 -0
- /package/dist/{reporters-RBYTASMI.js.map → reporters-74B4U2GZ.js.map} +0 -0
- /package/dist/{run-BUE2DDXN.js.map → run-DVGTKM52.js.map} +0 -0
- /package/dist/{validate-ZBW44RHT.js.map → validate-CJNFQHMD.js.map} +0 -0
|
@@ -3,23 +3,23 @@ import {
|
|
|
3
3
|
renderList,
|
|
4
4
|
runFill,
|
|
5
5
|
runList
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-A3TEDWBZ.js";
|
|
7
7
|
import {
|
|
8
8
|
CALIBRATE_FORMATS,
|
|
9
9
|
REPORT_FORMATS,
|
|
10
10
|
SUMMARY_FORMATS,
|
|
11
11
|
parseFormat,
|
|
12
12
|
runRun
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-ODRPL3WB.js";
|
|
13
|
+
} from "./chunk-5JBVFWVP.js";
|
|
14
|
+
import "./chunk-OEN6FBUW.js";
|
|
16
15
|
import "./chunk-FQGLRJGX.js";
|
|
17
16
|
import "./chunk-CWXZ2MRT.js";
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-Q3ODX5PF.js";
|
|
18
|
+
import "./chunk-PCEM5FOZ.js";
|
|
19
|
+
import "./chunk-OKMTUAWO.js";
|
|
20
20
|
import "./chunk-CU57HT2E.js";
|
|
21
|
+
import "./chunk-U6IHLEWT.js";
|
|
21
22
|
import "./chunk-4TSWU2SU.js";
|
|
22
|
-
import "./chunk-NGTVREIH.js";
|
|
23
23
|
import {
|
|
24
24
|
TracevalsError
|
|
25
25
|
} from "./chunk-UKZNLVJW.js";
|
|
@@ -30,37 +30,38 @@ import {
|
|
|
30
30
|
} from "./chunk-YNHZHSSM.js";
|
|
31
31
|
import "./chunk-ZPLVANY2.js";
|
|
32
32
|
import "./chunk-GLP5PSXB.js";
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-LKP7QDFN.js";
|
|
33
|
+
import "./chunk-YUTVAMWW.js";
|
|
34
|
+
import "./chunk-DAQTRAP5.js";
|
|
36
35
|
import {
|
|
37
36
|
terminalConfirm
|
|
38
|
-
} from "./chunk-
|
|
39
|
-
import "./chunk-
|
|
40
|
-
import "./chunk-
|
|
37
|
+
} from "./chunk-VQYGLU4C.js";
|
|
38
|
+
import "./chunk-7FCLXEAQ.js";
|
|
39
|
+
import "./chunk-CEI2J42X.js";
|
|
40
|
+
import "./chunk-L2TD7DZB.js";
|
|
41
41
|
import {
|
|
42
42
|
collect,
|
|
43
43
|
configOption
|
|
44
|
-
} from "./chunk-
|
|
45
|
-
import "./chunk-
|
|
46
|
-
import "./chunk-
|
|
47
|
-
import
|
|
48
|
-
|
|
49
|
-
} from "./chunk-YEUYKR62.js";
|
|
44
|
+
} from "./chunk-WO4JYWZK.js";
|
|
45
|
+
import "./chunk-DSWKBZWW.js";
|
|
46
|
+
import "./chunk-KFKL4VTL.js";
|
|
47
|
+
import "./chunk-77AINBYM.js";
|
|
48
|
+
import "./chunk-MNH7QO4Z.js";
|
|
50
49
|
import {
|
|
51
50
|
colorFor
|
|
52
51
|
} from "./chunk-RNVYGWIC.js";
|
|
53
|
-
import
|
|
54
|
-
|
|
52
|
+
import {
|
|
53
|
+
fail
|
|
54
|
+
} from "./chunk-YEUYKR62.js";
|
|
55
|
+
import "./chunk-OTJOBZJ5.js";
|
|
55
56
|
import {
|
|
56
57
|
notice
|
|
57
58
|
} from "./chunk-HX44GB4Z.js";
|
|
58
59
|
import {
|
|
59
60
|
LOCAL_FLAG_HELP
|
|
60
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-VM7VAFJW.js";
|
|
61
62
|
import {
|
|
62
63
|
package_default
|
|
63
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-7MCQHTQ5.js";
|
|
64
65
|
import "./chunk-OWBRDNRZ.js";
|
|
65
66
|
import "./chunk-G3T47CFV.js";
|
|
66
67
|
import "./chunk-2H7UOFLK.js";
|
|
@@ -161,7 +162,7 @@ function buildProgram() {
|
|
|
161
162
|
"--manifest names one session's manifest, so it cannot be used with a corpus; drop it and each trace will find its own"
|
|
162
163
|
);
|
|
163
164
|
}
|
|
164
|
-
const { runBatch } = await import("./batch-
|
|
165
|
+
const { runBatch } = await import("./batch-KMGZMIAQ.js");
|
|
165
166
|
const { report: report2, rendered: rendered2 } = await runBatch({
|
|
166
167
|
...shared,
|
|
167
168
|
...traces.length > 0 ? { traces } : {}
|
|
@@ -280,7 +281,7 @@ function buildProgram() {
|
|
|
280
281
|
whole("--max-false-pass", opts.maxFalsePass, 0);
|
|
281
282
|
whole("--max-false-fail", opts.maxFalseFail, 0);
|
|
282
283
|
whole("--max-review", opts.maxReview, 0);
|
|
283
|
-
const { runCalibrate } = await import("./calibrate-
|
|
284
|
+
const { runCalibrate } = await import("./calibrate-XQUG5XAK.js");
|
|
284
285
|
const { report, rendered } = await runCalibrate({
|
|
285
286
|
...shared,
|
|
286
287
|
...traces.length > 0 ? { traces } : {},
|
|
@@ -382,7 +383,7 @@ function buildProgram() {
|
|
|
382
383
|
"pretty"
|
|
383
384
|
).action(async (opts) => {
|
|
384
385
|
try {
|
|
385
|
-
const { runCapture } = await import("./capture-
|
|
386
|
+
const { runCapture } = await import("./capture-5XE3ZMXK.js");
|
|
386
387
|
const result = await runCapture({
|
|
387
388
|
version,
|
|
388
389
|
...configOptions(opts),
|
|
@@ -409,7 +410,7 @@ function buildProgram() {
|
|
|
409
410
|
"pretty"
|
|
410
411
|
).action(async (opts) => {
|
|
411
412
|
try {
|
|
412
|
-
const { runPrepare } = await import("./prepare-
|
|
413
|
+
const { runPrepare } = await import("./prepare-KFXXG2CJ.js");
|
|
413
414
|
const result = await runPrepare({
|
|
414
415
|
...configOptions(opts),
|
|
415
416
|
...opts.project !== void 0 ? { project: opts.project } : {},
|
|
@@ -446,7 +447,7 @@ function buildProgram() {
|
|
|
446
447
|
throw new TracevalsError(`tracevals check takes one trace, got ${String(traces.length)}`);
|
|
447
448
|
}
|
|
448
449
|
whole("--runs", opts.runs, 1);
|
|
449
|
-
const { runCheck } = await import("./check-
|
|
450
|
+
const { runCheck } = await import("./check-W24BQNCT.js");
|
|
450
451
|
const { report, rendered } = await runCheck({
|
|
451
452
|
...configOptions(opts),
|
|
452
453
|
tracePath: trace,
|
|
@@ -474,7 +475,7 @@ function buildProgram() {
|
|
|
474
475
|
"pretty"
|
|
475
476
|
).action(async (opts) => {
|
|
476
477
|
try {
|
|
477
|
-
const { runRelease } = await import("./release-
|
|
478
|
+
const { runRelease } = await import("./release-VV3UTKE5.js");
|
|
478
479
|
const result = await runRelease({
|
|
479
480
|
...opts.all === true ? { all: true } : {},
|
|
480
481
|
format: opts.format ?? "pretty"
|
|
@@ -517,4 +518,4 @@ function buildProgram() {
|
|
|
517
518
|
export {
|
|
518
519
|
buildProgram
|
|
519
520
|
};
|
|
520
|
-
//# sourceMappingURL=cli-
|
|
521
|
+
//# sourceMappingURL=cli-236TGVJG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tracevals/cli.ts"],"sourcesContent":["/**\n * The tracevals program. Named `tracevals` because that is where it is\n * mounted (`manni tracevals …`); `src/cli.ts` adds it to the umbrella and\n * runs it. Thin commander wrapper; all behavior lives in commands.\n */\nimport { Command } from \"commander\";\nimport pkg from \"../../package.json\" with { type: \"json\" };\nimport { collect, configOption } from \"../shared/cli-options.js\";\nimport { LOCAL_FLAG_HELP } from \"../shared/providers.js\";\nimport { fail } from \"../shared/run.js\";\nimport { terminalConfirm } from \"../shared/prompt.js\";\nimport { colorFor } from \"../shared/color.js\";\nimport { notice } from \"../shared/warn.js\";\nimport { renderList, runList } from \"./commands/list.js\";\nimport { runFill } from \"./commands/fill.js\";\nimport { runRun } from \"./commands/run.js\";\nimport { TracevalsError } from \"./types.js\";\nimport { allowExecutionMessage, isExecutionGrant } from \"../shared/execution.js\";\nimport {\n CALIBRATE_FORMATS,\n REPORT_FORMATS,\n SUMMARY_FORMATS,\n parseFormat,\n type ReportFormat,\n type SummaryFormat,\n} from \"./reporters/index.js\";\n\nconst { version } = pkg;\n\nexport function buildProgram(): Command {\nconst program = new Command();\n\nprogram\n .name(\"tracevals\")\n .description(\n \"Deterministic and LLM-as-judge adherence evals for AI agent session traces.\",\n )\n .version(version)\n .option(\"--no-color\", \"disable colored output\")\n // A pointer, not the whole help screen: the message that precedes it\n // already names the offending flag.\n .showHelpAfterError(\"(add --help for usage)\")\n // MUST come before the `.command()` calls below. `copyInheritedSettings`\n // copies `_exitCallback` by value at subcommand-creation time, so an\n // `exitOverride()` installed afterwards leaves every subcommand calling\n // `process.exit(1)` on a parse error, which is a usage error owed exit 2.\n .exitOverride();\n\ninterface ConfigFlags {\n /** `-c <path>` gives a string, `--no-config` gives false, neither gives undefined. */\n config?: string | boolean;\n}\n\ninterface RunFlags extends ConfigFlags {\n project?: string;\n provider?: string;\n model?: string;\n local?: boolean;\n offline?: boolean;\n runs?: number;\n deterministicOnly?: boolean;\n cache?: boolean;\n maxTurns?: number;\n format?: ReportFormat;\n output?: string;\n history?: boolean;\n failOnReview?: boolean;\n allowExecution?: string[];\n execution?: boolean;\n require?: string[];\n reportUnusedArtifacts?: boolean;\n manifest?: string;\n allProjects?: boolean;\n newerThan?: string;\n limit?: number;\n}\n\n/**\n * Repeatable execution grant, validated on the way in. An unknown value is a\n * usage error rather than a grant that quietly matches nothing.\n */\nfunction collectGrant(value: string, previous: string[]): string[] {\n if (!isExecutionGrant(value)) fail(new TracevalsError(allowExecutionMessage(value)));\n return [...previous, value];\n}\n\n/**\n * `-c, --config <path>` and `--no-config`, on every verb that reads config.\n *\n * Declared once so the four cannot drift apart on a name or a description,\n * the way docevals' `documentInputs()` does it. `list` is the one verb without\n * them: it enumerates the session store and reads no config at all, and an\n * accepted flag that quietly does nothing is worse than an absent one.\n */\nfunction addConfigFlags(cmd: Command): Command {\n return cmd\n .option(\"-c, --config <path>\", \"Path to manni.config.yaml\")\n .option(\"--no-config\", \"Ignore any discovered config file\");\n}\n\n/** The config flags as the command cores take them. */\nfunction configOptions(opts: ConfigFlags): {\n config?: string;\n noConfig?: boolean;\n} {\n const { configPath, noConfig } = configOption(opts.config);\n return {\n ...(configPath === undefined ? {} : { config: configPath }),\n ...(noConfig === true ? { noConfig } : {}),\n };\n}\n\n/**\n * Commander argument parser for `-f/--format`. Routes through `fail()` for the\n * reason the numeric checks below do: commander only special-cases\n * InvalidArgumentError, so any other exception escapes `program.parse()`\n * uncaught — a stack trace and exit 1, when a bad flag owes exit 2.\n */\nfunction parseFormatArg<T extends string>(name: string, allowed: readonly T[]) {\n return (value: string): T => {\n try {\n return parseFormat(value, allowed, name);\n } catch (e) {\n fail(e);\n }\n };\n}\n\nconst range = (min: number, max: number): string =>\n Number.isFinite(max) ? `between ${min} and ${max}` : `of at least ${min}`;\n\n/**\n * A numeric flag, checked before anything reads it.\n *\n * `parseFloat(\"abc\")` is NaN, and every comparison against NaN is false — so a\n * flag that failed to parse does **not** fall back to the config. `undefined`\n * is what defers to the config, and NaN is not undefined: it survives the `??`\n * overlay and lands in the runtime as a limit that can never be reached. A\n * budget of NaN bills without a ceiling while the report still claims one,\n * which is the most expensive way for a safety limit to fail. Range checks\n * therefore test for a *finite* number, not only for the range.\n */\nfunction numeric(\n name: string,\n value: number | undefined,\n min: number,\n max: number = Number.POSITIVE_INFINITY,\n): void {\n if (value === undefined) return;\n if (Number.isFinite(value) && value >= min && value <= max) return;\n throw new TracevalsError(\n `${name} must be a number ${range(min, max)}, got ${value}`,\n );\n}\n\n/**\n * The same for a count. Kept apart from `numeric` because a fraction is never\n * meant here: `--limit 2.5` and `--limit -1` both reach `slice(0, n)`, where\n * the negative one silently evaluates every trace except the oldest.\n */\nfunction whole(\n name: string,\n value: number | undefined,\n min: number,\n max: number = Number.POSITIVE_INFINITY,\n): void {\n if (value === undefined) return;\n if (Number.isInteger(value) && value >= min && value <= max) return;\n throw new TracevalsError(\n `${name} must be a whole number ${range(min, max)}, got ${value}`,\n );\n}\n\n/**\n * The single mapping from `addRunFlags`' options onto the shared run options.\n *\n * `run` and `calibrate` accept the same flags, and `calibrate` used to\n * hand-copy the list, which is how it came to accept a flag and drop it on\n * the floor. `addRunFlags`' own docstring says an accepted flag that\n * quietly does nothing is worse than an absent one, so there is now one place\n * to add a flag rather than two places to remember.\n *\n * Validation lives here for the same reason: both commands get it, or neither.\n */\nfunction sharedRunOptions(opts: RunFlags) {\n whole(\"--runs\", opts.runs, 1);\n whole(\"--limit\", opts.limit, 1);\n whole(\"--max-turns\", opts.maxTurns, 1);\n\n return {\n ...configOptions(opts),\n project: opts.project,\n provider: opts.provider,\n model: opts.model,\n local: opts.local,\n // `undefined` rather than `false` when absent, so a future config\n // `offline:` still decides on a run where the flag was never typed.\n offline: opts.offline ? true : undefined,\n runs: opts.runs,\n deterministicOnly: opts.deterministicOnly,\n noCache: opts.cache === false,\n maxTurns: opts.maxTurns,\n format: opts.format ?? \"pretty\",\n output: opts.output,\n // Undefined when neither spelling is passed, so the config still decides.\n // Both spellings are declared for precisely that reason: commander\n // defaults a lone `--no-x` to `true`, which makes the config's own value\n // unreachable from the command line.\n failOnReview: opts.failOnReview,\n // Commander's default is `[]`, which is \"no flag\", not \"run nothing\": only\n // a list someone typed narrows the run, and `--no-execution` runs none.\n ...(opts.execution === false\n ? { allowExecution: [] }\n : (opts.allowExecution ?? []).length > 0\n ? { allowExecution: opts.allowExecution }\n : {}),\n reportUnusedArtifacts: opts.reportUnusedArtifacts,\n ...(opts.require !== undefined ? { require: opts.require } : {}),\n ...(opts.allProjects !== undefined ? { allProjects: opts.allProjects } : {}),\n ...(opts.newerThan !== undefined ? { newerThan: opts.newerThan } : {}),\n ...(opts.limit !== undefined ? { limit: opts.limit } : {}),\n };\n}\n\nasync function executeRun(traces: string[], opts: RunFlags, color: boolean) {\n const shared = {\n ...sharedRunOptions(opts),\n color,\n // Run-only, both of them: `--history` is a point in one session's\n // timeline, and a manifest belongs to exactly one session (ADR 01024).\n history: opts.history,\n ...(opts.manifest !== undefined ? { manifest: opts.manifest } : {}),\n };\n\n // What decides the report shape is *how traces were selected*, not how many\n // came back. One named trace is a `RunReport`, byte for byte as before; a\n // discovery selector is a `BatchReport` even when it matches exactly one, so\n // a script piping `--format json` gets a stable shape (ADR 01018).\n const selecting =\n opts.allProjects === true ||\n opts.newerThan !== undefined ||\n opts.limit !== undefined;\n\n if (traces.length > 1 || selecting) {\n if (opts.manifest !== undefined) {\n // Each trace finds its own manifest by convention; one named file cannot\n // be evidence about more than the session it was captured for.\n throw new TracevalsError(\n \"--manifest names one session's manifest, so it cannot be used with a corpus; drop it and each trace will find its own\",\n );\n }\n const { runBatch } = await import(\"./commands/batch.js\");\n const { report, rendered } = await runBatch({\n ...shared,\n ...(traces.length > 0 ? { traces } : {}),\n });\n console.log(rendered);\n process.exitCode = report.exitCode;\n return;\n }\n\n let trace = traces[0];\n if (trace === undefined) {\n // The interactive picker needs a TTY; scripted callers must name a trace.\n if (!process.stdout.isTTY || !process.stdin.isTTY) {\n throw new TracevalsError(\n \"no trace given; pass a trace file or run `manni tracevals list`\",\n );\n }\n const { pickTrace } = await import(\"./trace/picker.js\");\n trace = await pickTrace();\n }\n const { report, rendered } = await runRun({ ...shared, tracePath: trace });\n console.log(rendered);\n process.exitCode = report.exitCode;\n}\n\n/**\n * Flags shared by `run` and `calibrate`. `--history` is run-only: calibration\n * is a measurement of a corpus, not a point in one session's timeline, and an\n * accepted flag that quietly does nothing is worse than an absent one.\n */\nfunction addRunFlags(\n cmd: Command,\n options: { history?: boolean; formats?: readonly ReportFormat[] } = {},\n): Command {\n const withHistory = options.history !== false;\n const formats = options.formats ?? REPORT_FORMATS;\n const base = addConfigFlags(cmd)\n .option(\n \"--project <dir>\",\n \"artifact-lookup root (overrides the trace's recorded cwd)\",\n )\n .option(\n \"--provider <name>\",\n \"Judge provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\",\n )\n .option(\n \"--model <model>\",\n \"Model override; needs a named provider, from here or config\",\n )\n .option(\"--local\", LOCAL_FLAG_HELP)\n // `Number`, not `parseInt`: parseInt truncates, so `--runs 1.5` would be\n // silently accepted as 1 and `--runs 1e3` as 1. `whole()` below refuses\n // what Number keeps.\n .option(\"--runs <n>\", \"ensemble runs per eval\", (v) => Number(v))\n .option(\"--deterministic-only\", \"skip LLM-judged evals\")\n .option(\n \"--offline\",\n \"never fetch a remote manifest; read external metadata from local manifests\",\n )\n .option(\"--no-cache\", \"bypass the judge cache\")\n .option(\n \"--max-turns <n>\",\n \"Stop after this many ensemble runs (a cached ensemble costs none)\",\n (v) => Number(v),\n )\n .option(\n \"-f, --format <format>\",\n `Output format: ${formats.join(\" | \")}`,\n parseFormatArg(\"--format\", formats),\n \"pretty\" as ReportFormat,\n )\n .option(\"-o, --output <file>\", \"also write the report to a file\")\n .option(\n \"--report-unused-artifacts\",\n \"list every skill and agent the session was offered and never used\",\n )\n .option(\"--fail-on-review\", \"Exit 1 when any eval lands in the human-review zone (the default)\")\n .option(\"--no-fail-on-review\", \"Do not fail the run on evals left for human review\")\n // `<kind>`, not `<kind...>`: a variadic option greedily eats the\n // positional `[traces...]` that follow it. Repeat the flag instead.\n .option(\n \"--allow-execution <kind>\",\n \"Run only these execution grants (repeatable): frontmatter-commands\",\n collectGrant,\n [],\n )\n .option(\"--no-execution\", \"Clear every execution grant for this run\")\n .option(\n \"--require <module>\",\n \"load a grader plugin; repeatable, and added to config plugins\",\n collect,\n [],\n )\n .option(\"--all-projects\", \"evaluate every project's traces in the session store\")\n .option(\n \"--newer-than <duration>\",\n \"only traces modified within this window, such as 30m, 24h, 7d or 2w\",\n )\n .option(\"--limit <n>\", \"maximum traces to evaluate\", (v) => Number(v));\n return withHistory\n ? base.option(\n \"--history\",\n \"append to history and compare with the previous run\",\n )\n : base;\n}\n\naddRunFlags(\n // No `isDefault` (proposal 0034): `run` is a verb, so a bare\n // `manni tracevals` prints the help and exits 2, and a trace path with no\n // verb is commander's unknown-command refusal rather than a silent run.\n program\n .command(\"run [traces...]\")\n .description(\n \"Evaluate one or more traces against the skills and instructions they used\",\n ),\n)\n // Run-only, and single-trace-only: a manifest belongs to exactly one session\n // (ADR 01024). A corpus still picks one up per trace by convention — this\n // flag is for naming one outright, which only a single trace can mean.\n .option(\n \"--manifest <file>\",\n \"session manifest to compare artifacts against; without it one is looked for beside the trace and under the project\",\n )\n .action(async (traces: string[], opts: RunFlags, command: Command) => {\n try {\n await executeRun(traces, opts, colorFor(command, process.stdout.isTTY));\n } catch (e) {\n fail(e);\n }\n });\n\n// `calibrate` shares `run`'s flags because it *is* a run — plus the labels it\n// is measured against. Kept a separate command rather than a flag on `run`:\n// the report answers a different question and carries a different shape, and\n// a script must be able to tell which it is asking for (ADR 01022).\naddRunFlags(\n program\n .command(\"calibrate [traces...]\")\n .description(\n \"Measure judged and graded verdicts against a labels file: false passes, false fails, and review volume\",\n )\n .option(\n \"--labels <file>\",\n \"calibration labels sidecar (default: calibrate.labels)\",\n )\n .option(\n \"--sweep\",\n \"re-score the corpus across the configured grid of zones and ensemble sizes, from cached verdicts\",\n )\n .option(\"--max-false-pass <n>\", \"exit 1 above this many false passes\", (v) =>\n Number(v),\n )\n .option(\"--max-false-fail <n>\", \"exit 1 above this many false fails\", (v) =>\n Number(v),\n )\n .option(\n \"--max-review <n>\",\n \"exit 1 above this many needs-review outcomes\",\n (v) => Number(v),\n ),\n { history: false, formats: CALIBRATE_FORMATS },\n).action(\n async (\n traces: string[],\n opts: RunFlags & {\n labels?: string;\n sweep?: boolean;\n maxFalsePass?: number;\n maxFalseFail?: number;\n maxReview?: number;\n },\n command: Command,\n ) => {\n try {\n const shared = {\n ...sharedRunOptions(opts),\n color: colorFor(command, process.stdout.isTTY),\n };\n // A threshold that never trips looks exactly like a threshold that held.\n whole(\"--max-false-pass\", opts.maxFalsePass, 0);\n whole(\"--max-false-fail\", opts.maxFalseFail, 0);\n whole(\"--max-review\", opts.maxReview, 0);\n\n const { runCalibrate } = await import(\"./commands/calibrate.js\");\n const { report, rendered } = await runCalibrate({\n ...shared,\n ...(traces.length > 0 ? { traces } : {}),\n ...(opts.labels !== undefined ? { labels: opts.labels } : {}),\n ...(opts.sweep !== undefined ? { sweep: opts.sweep } : {}),\n ...(opts.maxFalsePass !== undefined\n ? { maxFalsePass: opts.maxFalsePass }\n : {}),\n ...(opts.maxFalseFail !== undefined\n ? { maxFalseFail: opts.maxFalseFail }\n : {}),\n ...(opts.maxReview !== undefined ? { maxReview: opts.maxReview } : {}),\n });\n console.log(rendered);\n process.exitCode = report.exitCode;\n } catch (e) {\n fail(e);\n }\n },\n);\n\naddConfigFlags(\n program\n .command(\"fill [paths...]\")\n .description(\n \"Propose evals for skills, agent definitions, and project rules, and write those above the confidence threshold\",\n ),\n)\n .option(\"--project <dir>\", \"project root to scan (default: current directory)\")\n // Repeatable, one value per occurrence, never split on commas — the family's\n // one-separator-per-list rule. It narrows what `fill` scans; there is no\n // `--collection`, because a docs collection is not an artifact set.\n .option(\"--exclude <glob>\", \"Glob to exclude (repeatable)\", collect, [])\n .option(\"--dry-run\", \"report proposals without writing them\")\n .option(\n \"--confidence <n>\",\n \"minimum confidence to write (0-1)\",\n (v) => parseFloat(v),\n )\n .option(\n \"--max-evals <n>\",\n \"maximum evals per artifact, including existing ones\",\n (v) => Number(v),\n )\n .option(\n \"--max-turns <n>\",\n \"Stop after this many inference calls (a cached artifact costs none)\",\n (v) => Number(v),\n )\n .option(\"--no-cache\", \"bypass the proposal cache\")\n .option(\n \"--provider <name>\",\n \"Provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\",\n )\n .option(\n \"--model <model>\",\n \"Model override; needs a named provider, from here or config\",\n )\n .option(\"--local\", LOCAL_FLAG_HELP)\n .option(\n \"--offline\",\n \"never fetch a remote manifest; read external metadata from local manifests\",\n )\n .option(\n \"--require <module>\",\n \"load a grader plugin; repeatable, and added to config plugins\",\n collect,\n [],\n )\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .action(async (paths: string[], opts: ConfigFlags & {\n project?: string;\n exclude?: string[];\n dryRun?: boolean;\n confidence?: number;\n maxEvals?: number;\n maxTurns?: number;\n cache?: boolean;\n provider?: string;\n model?: string;\n local?: boolean;\n offline?: boolean;\n require?: string[];\n format?: SummaryFormat;\n }, command: Command) => {\n try {\n numeric(\"--confidence\", opts.confidence, 0, 1);\n whole(\"--max-evals\", opts.maxEvals, 1);\n whole(\"--max-turns\", opts.maxTurns, 1);\n\n const { report, rendered } = await runFill({\n ...configOptions(opts),\n ...(paths.length > 0 ? { paths } : {}),\n ...(opts.project !== undefined ? { project: opts.project } : {}),\n ...(opts.exclude !== undefined ? { exclude: opts.exclude } : {}),\n ...(opts.dryRun !== undefined ? { dryRun: opts.dryRun } : {}),\n ...(opts.confidence !== undefined ? { confidence: opts.confidence } : {}),\n ...(opts.maxEvals !== undefined ? { maxEvals: opts.maxEvals } : {}),\n ...(opts.maxTurns !== undefined ? { maxTurns: opts.maxTurns } : {}),\n ...(opts.cache === false ? { noCache: true } : {}),\n ...(opts.provider !== undefined ? { provider: opts.provider } : {}),\n ...(opts.model !== undefined ? { model: opts.model } : {}),\n ...(opts.local !== undefined ? { local: opts.local } : {}),\n ...(opts.offline === true ? { offline: true } : {}),\n ...(opts.require !== undefined ? { require: opts.require } : {}),\n // P1 (proposal 0047): offered only on a terminal, where there is\n // someone to answer. Off one the block goes to the artifact and the\n // W1 line says so.\n confirm: terminalConfirm(),\n onNotice: notice,\n onRelocated: (result) => {\n const manifests = result.manifests.map((m) => m.file).join(\", \");\n notice(`moved ${String(result.summary.moved)} value(s) into ${manifests}.`);\n },\n color: colorFor(command, process.stdout.isTTY),\n });\n console.log(\n opts.format === \"json\" ? JSON.stringify(report, null, 2) : rendered,\n );\n process.exitCode = report.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n// The one write path `run` never takes (ADR 01024). Meant for a `SessionStart`\n// hook, which is why it reads its payload on stdin and — in that mode — writes\n// its report to stderr: a SessionStart hook's stdout becomes model context.\naddConfigFlags(\n program\n .command(\"capture\")\n .description(\n \"Record a session manifest: sha256 of every instruction artifact plus the git SHA, read from a Claude Code hook payload on stdin\",\n ),\n)\n .option(\"--project <dir>\", \"project root to scan (default: the payload's cwd)\")\n .option(\"--session-id <id>\", \"session id (default: the payload's session_id)\")\n .option(\"-o, --out <file>\", \"write here instead of the configured directory\")\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .action(async (opts: ConfigFlags & {\n project?: string;\n sessionId?: string;\n out?: string;\n format?: SummaryFormat;\n }) => {\n try {\n const { runCapture } = await import(\"./commands/capture.js\");\n const result = await runCapture({\n version,\n ...configOptions(opts),\n ...(opts.project !== undefined ? { project: opts.project } : {}),\n ...(opts.sessionId !== undefined ? { sessionId: opts.sessionId } : {}),\n ...(opts.out !== undefined ? { out: opts.out } : {}),\n format: opts.format ?? \"pretty\",\n });\n if (result.stdout !== \"\") console.log(result.stdout);\n // Hook mode's report, through the family's stderr writer rather than\n // `console.error`, so the `manni: ` prefix comes from `programName()`\n // and is never hand-spelled. `notice`, not `warn`: the report says what\n // this run did, so it is said every time rather than deduplicated.\n if (result.stderr !== \"\") notice(result.stderr);\n process.exitCode = result.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n// Proposal 0079. `prepare` is meant for a SessionStart hook as `capture` is,\n// so under an envelope its report goes to stderr; a SessionStart hook's\n// stdout becomes model context.\naddConfigFlags(\n program\n .command(\"prepare\")\n .description(\n \"Fetch the local models judging needs and extract the rules of every file that applies to every session\",\n ),\n)\n .option(\"--project <dir>\", \"project root (default: the payload's cwd, else the current directory)\")\n .option(\"--no-cache\", \"extract again, even from cached sources\")\n .option(\"--offline\", \"refuse network providers, so only local models are fetched\")\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .action(async (opts: ConfigFlags & {\n project?: string;\n cache?: boolean;\n offline?: boolean;\n format?: SummaryFormat;\n }) => {\n try {\n const { runPrepare } = await import(\"./commands/prepare.js\");\n const result = await runPrepare({\n ...configOptions(opts),\n ...(opts.project !== undefined ? { project: opts.project } : {}),\n ...(opts.cache === false ? { noCache: true } : {}),\n ...(opts.offline === true ? { offline: true } : {}),\n format: opts.format ?? \"pretty\",\n });\n if (result.stdout !== \"\") console.log(result.stdout);\n if (result.stderr !== \"\") notice(result.stderr);\n process.exitCode = result.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n// `[traces...]` rather than `<trace>`, so a missing or second trace gets the\n// tool's own message and exit 2 instead of commander's.\naddConfigFlags(\n program\n .command(\"check [traces...]\")\n .description(\n \"Judge the last turn of one session against the rules that governed it\",\n ),\n)\n .option(\"--project <dir>\", \"project root for resolving sources (default: the trace's recorded cwd)\")\n .option(\n \"--provider <name>\",\n \"Judge provider: auto (default) | anthropic | openai | claude-cli | jev | llama-cpp\",\n )\n .option(\"--model <model>\", \"Judge model; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .option(\"--runs <n>\", \"judge calls per rule (overrides judge.ensembleRuns)\", (v) => Number(v))\n .option(\"--no-cache\", \"bypass the rules cache and the verdict cache\")\n .option(\"--offline\", \"refuse network providers; judge and extract with local models only\")\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .option(\"-o, --output <file>\", \"also write the report to a file\")\n .action(async (traces: string[], opts: ConfigFlags & {\n project?: string;\n provider?: string;\n model?: string;\n local?: boolean;\n runs?: number;\n cache?: boolean;\n offline?: boolean;\n format?: SummaryFormat;\n output?: string;\n }, command: Command) => {\n try {\n const trace = traces[0];\n if (trace === undefined) {\n throw new TracevalsError(\"no trace given; pass a trace file or run manni tracevals list\");\n }\n if (traces.length > 1) {\n throw new TracevalsError(`tracevals check takes one trace, got ${String(traces.length)}`);\n }\n whole(\"--runs\", opts.runs, 1);\n const { runCheck } = await import(\"./commands/check.js\");\n const { report, rendered } = await runCheck({\n ...configOptions(opts),\n tracePath: trace,\n ...(opts.project !== undefined ? { project: opts.project } : {}),\n ...(opts.provider !== undefined ? { provider: opts.provider } : {}),\n ...(opts.model !== undefined ? { model: opts.model } : {}),\n ...(opts.local !== undefined ? { local: opts.local } : {}),\n ...(opts.runs !== undefined ? { runs: opts.runs } : {}),\n ...(opts.cache === false ? { noCache: true } : {}),\n ...(opts.offline === true ? { offline: true } : {}),\n format: opts.format ?? \"pretty\",\n ...(opts.output !== undefined ? { output: opts.output } : {}),\n color: colorFor(command, process.stdout.isTTY),\n });\n console.log(rendered);\n process.exitCode = report.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n// No `-c`/`--no-config`: `release` reads no config, only the envelope.\nprogram\n .command(\"release\")\n .description(\"Return a session's lease on the model host, or with --all stop the host\")\n .option(\"--all\", \"drop every lease, unload every model and stop the host\")\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .action(async (opts: { all?: boolean; format?: SummaryFormat }) => {\n try {\n const { runRelease } = await import(\"./commands/release.js\");\n const result = await runRelease({\n ...(opts.all === true ? { all: true } : {}),\n format: opts.format ?? \"pretty\",\n });\n if (result.stdout !== \"\") console.log(result.stdout);\n process.exitCode = result.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\nprogram\n .command(\"list\")\n .description(\"List discoverable traces (Claude Code session files)\")\n // The long spellings only, matching `run`: a short form that exists on one\n // verb and not on its sibling is exactly the drift \"commands must have\n // parallel behaviors\" exists to prevent.\n .option(\n \"--project <dir>\",\n \"project directory to scope to (default: current directory)\",\n )\n .option(\"--all-projects\", \"scan every project in the session store\")\n .option(\n \"--newer-than <duration>\",\n \"only traces modified within this window, such as 30m, 24h, 7d or 2w\",\n )\n .option(\"--limit <n>\", \"maximum traces to list\", (v) => Number(v))\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n // No `-c`/`--no-config`: `list` enumerates the session store and reads no\n // config at all, and an accepted flag that quietly does nothing is worse\n // than an absent one.\n .action(async (opts: {\n project?: string;\n allProjects?: boolean;\n newerThan?: string;\n limit?: number;\n format?: SummaryFormat;\n }, command: Command) => {\n try {\n // The same footgun as `run --limit`: `slice(0, -1)` lists everything but\n // the oldest, and reads as a shorter store rather than as a bad flag.\n whole(\"--limit\", opts.limit, 1);\n const run = await runList({\n project: opts.project,\n allProjects: opts.allProjects,\n ...(opts.newerThan !== undefined ? { newerThan: opts.newerThan } : {}),\n limit: opts.limit,\n });\n console.log(\n opts.format === \"json\"\n ? JSON.stringify(run, null, 2)\n : renderList(run, { color: colorFor(command, process.stdout.isTTY) }),\n );\n } catch (e) {\n fail(e);\n }\n });\n\nreturn program;\n}\n"],"mappings":"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","names":["report","rendered"]}
|
|
1
|
+
{"version":3,"sources":["../src/tracevals/cli.ts"],"sourcesContent":["/**\n * The tracevals program. Named `tracevals` because that is where it is\n * mounted (`manni tracevals …`); `src/cli.ts` adds it to the umbrella and\n * runs it. Thin commander wrapper; all behavior lives in commands.\n */\nimport { Command } from \"commander\";\nimport pkg from \"../../package.json\" with { type: \"json\" };\nimport { collect, configOption } from \"../shared/cli-options.js\";\nimport { LOCAL_FLAG_HELP } from \"../shared/providers.js\";\nimport { fail } from \"../shared/run.js\";\nimport { terminalConfirm } from \"../shared/prompt.js\";\nimport { colorFor } from \"../shared/color.js\";\nimport { notice } from \"../shared/warn.js\";\nimport { renderList, runList } from \"./commands/list.js\";\nimport { runFill } from \"./commands/fill.js\";\nimport { runRun } from \"./commands/run.js\";\nimport { TracevalsError } from \"./types.js\";\nimport { allowExecutionMessage, isExecutionGrant } from \"../shared/execution.js\";\nimport {\n CALIBRATE_FORMATS,\n REPORT_FORMATS,\n SUMMARY_FORMATS,\n parseFormat,\n type ReportFormat,\n type SummaryFormat,\n} from \"./reporters/index.js\";\n\nconst { version } = pkg;\n\nexport function buildProgram(): Command {\nconst program = new Command();\n\nprogram\n .name(\"tracevals\")\n .description(\n \"Deterministic and LLM-as-judge adherence evals for AI agent session traces.\",\n )\n .version(version)\n .option(\"--no-color\", \"disable colored output\")\n // A pointer, not the whole help screen: the message that precedes it\n // already names the offending flag.\n .showHelpAfterError(\"(add --help for usage)\")\n // MUST come before the `.command()` calls below. `copyInheritedSettings`\n // copies `_exitCallback` by value at subcommand-creation time, so an\n // `exitOverride()` installed afterwards leaves every subcommand calling\n // `process.exit(1)` on a parse error, which is a usage error owed exit 2.\n .exitOverride();\n\ninterface ConfigFlags {\n /** `-c <path>` gives a string, `--no-config` gives false, neither gives undefined. */\n config?: string | boolean;\n}\n\ninterface RunFlags extends ConfigFlags {\n project?: string;\n provider?: string;\n model?: string;\n local?: boolean;\n offline?: boolean;\n runs?: number;\n deterministicOnly?: boolean;\n cache?: boolean;\n maxTurns?: number;\n format?: ReportFormat;\n output?: string;\n history?: boolean;\n failOnReview?: boolean;\n allowExecution?: string[];\n execution?: boolean;\n require?: string[];\n reportUnusedArtifacts?: boolean;\n manifest?: string;\n allProjects?: boolean;\n newerThan?: string;\n limit?: number;\n}\n\n/**\n * Repeatable execution grant, validated on the way in. An unknown value is a\n * usage error rather than a grant that quietly matches nothing.\n */\nfunction collectGrant(value: string, previous: string[]): string[] {\n if (!isExecutionGrant(value)) fail(new TracevalsError(allowExecutionMessage(value)));\n return [...previous, value];\n}\n\n/**\n * `-c, --config <path>` and `--no-config`, on every verb that reads config.\n *\n * Declared once so the four cannot drift apart on a name or a description,\n * the way docevals' `documentInputs()` does it. `list` is the one verb without\n * them: it enumerates the session store and reads no config at all, and an\n * accepted flag that quietly does nothing is worse than an absent one.\n */\nfunction addConfigFlags(cmd: Command): Command {\n return cmd\n .option(\"-c, --config <path>\", \"Path to manni.config.yaml\")\n .option(\"--no-config\", \"Ignore any discovered config file\");\n}\n\n/** The config flags as the command cores take them. */\nfunction configOptions(opts: ConfigFlags): {\n config?: string;\n noConfig?: boolean;\n} {\n const { configPath, noConfig } = configOption(opts.config);\n return {\n ...(configPath === undefined ? {} : { config: configPath }),\n ...(noConfig === true ? { noConfig } : {}),\n };\n}\n\n/**\n * Commander argument parser for `-f/--format`. Routes through `fail()` for the\n * reason the numeric checks below do: commander only special-cases\n * InvalidArgumentError, so any other exception escapes `program.parse()`\n * uncaught — a stack trace and exit 1, when a bad flag owes exit 2.\n */\nfunction parseFormatArg<T extends string>(name: string, allowed: readonly T[]) {\n return (value: string): T => {\n try {\n return parseFormat(value, allowed, name);\n } catch (e) {\n fail(e);\n }\n };\n}\n\nconst range = (min: number, max: number): string =>\n Number.isFinite(max) ? `between ${min} and ${max}` : `of at least ${min}`;\n\n/**\n * A numeric flag, checked before anything reads it.\n *\n * `parseFloat(\"abc\")` is NaN, and every comparison against NaN is false — so a\n * flag that failed to parse does **not** fall back to the config. `undefined`\n * is what defers to the config, and NaN is not undefined: it survives the `??`\n * overlay and lands in the runtime as a limit that can never be reached. A\n * budget of NaN bills without a ceiling while the report still claims one,\n * which is the most expensive way for a safety limit to fail. Range checks\n * therefore test for a *finite* number, not only for the range.\n */\nfunction numeric(\n name: string,\n value: number | undefined,\n min: number,\n max: number = Number.POSITIVE_INFINITY,\n): void {\n if (value === undefined) return;\n if (Number.isFinite(value) && value >= min && value <= max) return;\n throw new TracevalsError(\n `${name} must be a number ${range(min, max)}, got ${value}`,\n );\n}\n\n/**\n * The same for a count. Kept apart from `numeric` because a fraction is never\n * meant here: `--limit 2.5` and `--limit -1` both reach `slice(0, n)`, where\n * the negative one silently evaluates every trace except the oldest.\n */\nfunction whole(\n name: string,\n value: number | undefined,\n min: number,\n max: number = Number.POSITIVE_INFINITY,\n): void {\n if (value === undefined) return;\n if (Number.isInteger(value) && value >= min && value <= max) return;\n throw new TracevalsError(\n `${name} must be a whole number ${range(min, max)}, got ${value}`,\n );\n}\n\n/**\n * The single mapping from `addRunFlags`' options onto the shared run options.\n *\n * `run` and `calibrate` accept the same flags, and `calibrate` used to\n * hand-copy the list, which is how it came to accept a flag and drop it on\n * the floor. `addRunFlags`' own docstring says an accepted flag that\n * quietly does nothing is worse than an absent one, so there is now one place\n * to add a flag rather than two places to remember.\n *\n * Validation lives here for the same reason: both commands get it, or neither.\n */\nfunction sharedRunOptions(opts: RunFlags) {\n whole(\"--runs\", opts.runs, 1);\n whole(\"--limit\", opts.limit, 1);\n whole(\"--max-turns\", opts.maxTurns, 1);\n\n return {\n ...configOptions(opts),\n project: opts.project,\n provider: opts.provider,\n model: opts.model,\n local: opts.local,\n // `undefined` rather than `false` when absent, so a future config\n // `offline:` still decides on a run where the flag was never typed.\n offline: opts.offline ? true : undefined,\n runs: opts.runs,\n deterministicOnly: opts.deterministicOnly,\n noCache: opts.cache === false,\n maxTurns: opts.maxTurns,\n format: opts.format ?? \"pretty\",\n output: opts.output,\n // Undefined when neither spelling is passed, so the config still decides.\n // Both spellings are declared for precisely that reason: commander\n // defaults a lone `--no-x` to `true`, which makes the config's own value\n // unreachable from the command line.\n failOnReview: opts.failOnReview,\n // Commander's default is `[]`, which is \"no flag\", not \"run nothing\": only\n // a list someone typed narrows the run, and `--no-execution` runs none.\n ...(opts.execution === false\n ? { allowExecution: [] }\n : (opts.allowExecution ?? []).length > 0\n ? { allowExecution: opts.allowExecution }\n : {}),\n reportUnusedArtifacts: opts.reportUnusedArtifacts,\n ...(opts.require !== undefined ? { require: opts.require } : {}),\n ...(opts.allProjects !== undefined ? { allProjects: opts.allProjects } : {}),\n ...(opts.newerThan !== undefined ? { newerThan: opts.newerThan } : {}),\n ...(opts.limit !== undefined ? { limit: opts.limit } : {}),\n };\n}\n\nasync function executeRun(traces: string[], opts: RunFlags, color: boolean) {\n const shared = {\n ...sharedRunOptions(opts),\n color,\n // Run-only, both of them: `--history` is a point in one session's\n // timeline, and a manifest belongs to exactly one session (ADR 01024).\n history: opts.history,\n ...(opts.manifest !== undefined ? { manifest: opts.manifest } : {}),\n };\n\n // What decides the report shape is *how traces were selected*, not how many\n // came back. One named trace is a `RunReport`, byte for byte as before; a\n // discovery selector is a `BatchReport` even when it matches exactly one, so\n // a script piping `--format json` gets a stable shape (ADR 01018).\n const selecting =\n opts.allProjects === true ||\n opts.newerThan !== undefined ||\n opts.limit !== undefined;\n\n if (traces.length > 1 || selecting) {\n if (opts.manifest !== undefined) {\n // Each trace finds its own manifest by convention; one named file cannot\n // be evidence about more than the session it was captured for.\n throw new TracevalsError(\n \"--manifest names one session's manifest, so it cannot be used with a corpus; drop it and each trace will find its own\",\n );\n }\n const { runBatch } = await import(\"./commands/batch.js\");\n const { report, rendered } = await runBatch({\n ...shared,\n ...(traces.length > 0 ? { traces } : {}),\n });\n console.log(rendered);\n process.exitCode = report.exitCode;\n return;\n }\n\n let trace = traces[0];\n if (trace === undefined) {\n // The interactive picker needs a TTY; scripted callers must name a trace.\n if (!process.stdout.isTTY || !process.stdin.isTTY) {\n throw new TracevalsError(\n \"no trace given; pass a trace file or run `manni tracevals list`\",\n );\n }\n const { pickTrace } = await import(\"./trace/picker.js\");\n trace = await pickTrace();\n }\n const { report, rendered } = await runRun({ ...shared, tracePath: trace });\n console.log(rendered);\n process.exitCode = report.exitCode;\n}\n\n/**\n * Flags shared by `run` and `calibrate`. `--history` is run-only: calibration\n * is a measurement of a corpus, not a point in one session's timeline, and an\n * accepted flag that quietly does nothing is worse than an absent one.\n */\nfunction addRunFlags(\n cmd: Command,\n options: { history?: boolean; formats?: readonly ReportFormat[] } = {},\n): Command {\n const withHistory = options.history !== false;\n const formats = options.formats ?? REPORT_FORMATS;\n const base = addConfigFlags(cmd)\n .option(\n \"--project <dir>\",\n \"artifact-lookup root (overrides the trace's recorded cwd)\",\n )\n .option(\n \"--provider <name>\",\n \"Judge provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\",\n )\n .option(\n \"--model <model>\",\n \"Model override; needs a named provider, from here or config\",\n )\n .option(\"--local\", LOCAL_FLAG_HELP)\n // `Number`, not `parseInt`: parseInt truncates, so `--runs 1.5` would be\n // silently accepted as 1 and `--runs 1e3` as 1. `whole()` below refuses\n // what Number keeps.\n .option(\"--runs <n>\", \"ensemble runs per eval\", (v) => Number(v))\n .option(\"--deterministic-only\", \"skip LLM-judged evals\")\n .option(\n \"--offline\",\n \"never fetch a remote manifest; read external metadata from local manifests\",\n )\n .option(\"--no-cache\", \"bypass the judge cache\")\n .option(\n \"--max-turns <n>\",\n \"Stop after this many ensemble runs (a cached ensemble costs none)\",\n (v) => Number(v),\n )\n .option(\n \"-f, --format <format>\",\n `Output format: ${formats.join(\" | \")}`,\n parseFormatArg(\"--format\", formats),\n \"pretty\" as ReportFormat,\n )\n .option(\"-o, --output <file>\", \"also write the report to a file\")\n .option(\n \"--report-unused-artifacts\",\n \"list every skill and agent the session was offered and never used\",\n )\n .option(\"--fail-on-review\", \"Exit 1 when any eval lands in the human-review zone (the default)\")\n .option(\"--no-fail-on-review\", \"Do not fail the run on evals left for human review\")\n // `<kind>`, not `<kind...>`: a variadic option greedily eats the\n // positional `[traces...]` that follow it. Repeat the flag instead.\n .option(\n \"--allow-execution <kind>\",\n \"Run only these execution grants (repeatable): frontmatter-commands\",\n collectGrant,\n [],\n )\n .option(\"--no-execution\", \"Clear every execution grant for this run\")\n .option(\n \"--require <module>\",\n \"load a grader plugin; repeatable, and added to config plugins\",\n collect,\n [],\n )\n .option(\"--all-projects\", \"evaluate every project's traces in the session store\")\n .option(\n \"--newer-than <duration>\",\n \"only traces modified within this window, such as 30m, 24h, 7d or 2w\",\n )\n .option(\"--limit <n>\", \"maximum traces to evaluate\", (v) => Number(v));\n return withHistory\n ? base.option(\n \"--history\",\n \"append to history and compare with the previous run\",\n )\n : base;\n}\n\naddRunFlags(\n // No `isDefault` (proposal 0034): `run` is a verb, so a bare\n // `manni tracevals` prints the help and exits 2, and a trace path with no\n // verb is commander's unknown-command refusal rather than a silent run.\n program\n .command(\"run [traces...]\")\n .description(\n \"Evaluate one or more traces against the skills and instructions they used\",\n ),\n)\n // Run-only, and single-trace-only: a manifest belongs to exactly one session\n // (ADR 01024). A corpus still picks one up per trace by convention — this\n // flag is for naming one outright, which only a single trace can mean.\n .option(\n \"--manifest <file>\",\n \"session manifest to compare artifacts against; without it one is looked for beside the trace and under the project\",\n )\n .action(async (traces: string[], opts: RunFlags, command: Command) => {\n try {\n await executeRun(traces, opts, colorFor(command, process.stdout.isTTY));\n } catch (e) {\n fail(e);\n }\n });\n\n// `calibrate` shares `run`'s flags because it *is* a run — plus the labels it\n// is measured against. Kept a separate command rather than a flag on `run`:\n// the report answers a different question and carries a different shape, and\n// a script must be able to tell which it is asking for (ADR 01022).\naddRunFlags(\n program\n .command(\"calibrate [traces...]\")\n .description(\n \"Measure judged and graded verdicts against a labels file: false passes, false fails, and review volume\",\n )\n .option(\n \"--labels <file>\",\n \"calibration labels sidecar (default: calibrate.labels)\",\n )\n .option(\n \"--sweep\",\n \"re-score the corpus across the configured grid of zones and ensemble sizes, from cached verdicts\",\n )\n .option(\"--max-false-pass <n>\", \"exit 1 above this many false passes\", (v) =>\n Number(v),\n )\n .option(\"--max-false-fail <n>\", \"exit 1 above this many false fails\", (v) =>\n Number(v),\n )\n .option(\n \"--max-review <n>\",\n \"exit 1 above this many needs-review outcomes\",\n (v) => Number(v),\n ),\n { history: false, formats: CALIBRATE_FORMATS },\n).action(\n async (\n traces: string[],\n opts: RunFlags & {\n labels?: string;\n sweep?: boolean;\n maxFalsePass?: number;\n maxFalseFail?: number;\n maxReview?: number;\n },\n command: Command,\n ) => {\n try {\n const shared = {\n ...sharedRunOptions(opts),\n color: colorFor(command, process.stdout.isTTY),\n };\n // A threshold that never trips looks exactly like a threshold that held.\n whole(\"--max-false-pass\", opts.maxFalsePass, 0);\n whole(\"--max-false-fail\", opts.maxFalseFail, 0);\n whole(\"--max-review\", opts.maxReview, 0);\n\n const { runCalibrate } = await import(\"./commands/calibrate.js\");\n const { report, rendered } = await runCalibrate({\n ...shared,\n ...(traces.length > 0 ? { traces } : {}),\n ...(opts.labels !== undefined ? { labels: opts.labels } : {}),\n ...(opts.sweep !== undefined ? { sweep: opts.sweep } : {}),\n ...(opts.maxFalsePass !== undefined\n ? { maxFalsePass: opts.maxFalsePass }\n : {}),\n ...(opts.maxFalseFail !== undefined\n ? { maxFalseFail: opts.maxFalseFail }\n : {}),\n ...(opts.maxReview !== undefined ? { maxReview: opts.maxReview } : {}),\n });\n console.log(rendered);\n process.exitCode = report.exitCode;\n } catch (e) {\n fail(e);\n }\n },\n);\n\naddConfigFlags(\n program\n .command(\"fill [paths...]\")\n .description(\n \"Propose evals for skills, agent definitions, and project rules, and write those above the confidence threshold\",\n ),\n)\n .option(\"--project <dir>\", \"project root to scan (default: current directory)\")\n // Repeatable, one value per occurrence, never split on commas — the family's\n // one-separator-per-list rule. It narrows what `fill` scans; there is no\n // `--collection`, because a docs collection is not an artifact set.\n .option(\"--exclude <glob>\", \"Glob to exclude (repeatable)\", collect, [])\n .option(\"--dry-run\", \"report proposals without writing them\")\n .option(\n \"--confidence <n>\",\n \"minimum confidence to write (0-1)\",\n (v) => parseFloat(v),\n )\n .option(\n \"--max-evals <n>\",\n \"maximum evals per artifact, including existing ones\",\n (v) => Number(v),\n )\n .option(\n \"--max-turns <n>\",\n \"Stop after this many inference calls (a cached artifact costs none)\",\n (v) => Number(v),\n )\n .option(\"--no-cache\", \"bypass the proposal cache\")\n .option(\n \"--provider <name>\",\n \"Provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\",\n )\n .option(\n \"--model <model>\",\n \"Model override; needs a named provider, from here or config\",\n )\n .option(\"--local\", LOCAL_FLAG_HELP)\n .option(\n \"--offline\",\n \"never fetch a remote manifest; read external metadata from local manifests\",\n )\n .option(\n \"--require <module>\",\n \"load a grader plugin; repeatable, and added to config plugins\",\n collect,\n [],\n )\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .action(async (paths: string[], opts: ConfigFlags & {\n project?: string;\n exclude?: string[];\n dryRun?: boolean;\n confidence?: number;\n maxEvals?: number;\n maxTurns?: number;\n cache?: boolean;\n provider?: string;\n model?: string;\n local?: boolean;\n offline?: boolean;\n require?: string[];\n format?: SummaryFormat;\n }, command: Command) => {\n try {\n numeric(\"--confidence\", opts.confidence, 0, 1);\n whole(\"--max-evals\", opts.maxEvals, 1);\n whole(\"--max-turns\", opts.maxTurns, 1);\n\n const { report, rendered } = await runFill({\n ...configOptions(opts),\n ...(paths.length > 0 ? { paths } : {}),\n ...(opts.project !== undefined ? { project: opts.project } : {}),\n ...(opts.exclude !== undefined ? { exclude: opts.exclude } : {}),\n ...(opts.dryRun !== undefined ? { dryRun: opts.dryRun } : {}),\n ...(opts.confidence !== undefined ? { confidence: opts.confidence } : {}),\n ...(opts.maxEvals !== undefined ? { maxEvals: opts.maxEvals } : {}),\n ...(opts.maxTurns !== undefined ? { maxTurns: opts.maxTurns } : {}),\n ...(opts.cache === false ? { noCache: true } : {}),\n ...(opts.provider !== undefined ? { provider: opts.provider } : {}),\n ...(opts.model !== undefined ? { model: opts.model } : {}),\n ...(opts.local !== undefined ? { local: opts.local } : {}),\n ...(opts.offline === true ? { offline: true } : {}),\n ...(opts.require !== undefined ? { require: opts.require } : {}),\n // P1 (proposal 0047): offered only on a terminal, where there is\n // someone to answer. Off one the block goes to the artifact and the\n // W1 line says so.\n confirm: terminalConfirm(),\n onNotice: notice,\n onRelocated: (result) => {\n const manifests = result.manifests.map((m) => m.file).join(\", \");\n notice(`moved ${String(result.summary.moved)} value(s) into ${manifests}.`);\n },\n color: colorFor(command, process.stdout.isTTY),\n });\n console.log(\n opts.format === \"json\" ? JSON.stringify(report, null, 2) : rendered,\n );\n process.exitCode = report.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n// The one write path `run` never takes (ADR 01024). Meant for a `SessionStart`\n// hook, which is why it reads its payload on stdin and — in that mode — writes\n// its report to stderr: a SessionStart hook's stdout becomes model context.\naddConfigFlags(\n program\n .command(\"capture\")\n .description(\n \"Record a session manifest: sha256 of every instruction artifact plus the git SHA, read from a Claude Code hook payload on stdin\",\n ),\n)\n .option(\"--project <dir>\", \"project root to scan (default: the payload's cwd)\")\n .option(\"--session-id <id>\", \"session id (default: the payload's session_id)\")\n .option(\"-o, --out <file>\", \"write here instead of the configured directory\")\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .action(async (opts: ConfigFlags & {\n project?: string;\n sessionId?: string;\n out?: string;\n format?: SummaryFormat;\n }) => {\n try {\n const { runCapture } = await import(\"./commands/capture.js\");\n const result = await runCapture({\n version,\n ...configOptions(opts),\n ...(opts.project !== undefined ? { project: opts.project } : {}),\n ...(opts.sessionId !== undefined ? { sessionId: opts.sessionId } : {}),\n ...(opts.out !== undefined ? { out: opts.out } : {}),\n format: opts.format ?? \"pretty\",\n });\n if (result.stdout !== \"\") console.log(result.stdout);\n // Hook mode's report, through the family's stderr writer rather than\n // `console.error`, so the `manni: ` prefix comes from `programName()`\n // and is never hand-spelled. `notice`, not `warn`: the report says what\n // this run did, so it is said every time rather than deduplicated.\n if (result.stderr !== \"\") notice(result.stderr);\n process.exitCode = result.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n// Proposal 0079. `prepare` is meant for a SessionStart hook as `capture` is,\n// so under an envelope its report goes to stderr; a SessionStart hook's\n// stdout becomes model context.\naddConfigFlags(\n program\n .command(\"prepare\")\n .description(\n \"Fetch the local models judging needs and extract the rules of every file that applies to every session\",\n ),\n)\n .option(\"--project <dir>\", \"project root (default: the payload's cwd, else the current directory)\")\n .option(\"--no-cache\", \"extract again, even from cached sources\")\n .option(\"--offline\", \"refuse network providers, so only local models are fetched\")\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .action(async (opts: ConfigFlags & {\n project?: string;\n cache?: boolean;\n offline?: boolean;\n format?: SummaryFormat;\n }) => {\n try {\n const { runPrepare } = await import(\"./commands/prepare.js\");\n const result = await runPrepare({\n ...configOptions(opts),\n ...(opts.project !== undefined ? { project: opts.project } : {}),\n ...(opts.cache === false ? { noCache: true } : {}),\n ...(opts.offline === true ? { offline: true } : {}),\n format: opts.format ?? \"pretty\",\n });\n if (result.stdout !== \"\") console.log(result.stdout);\n if (result.stderr !== \"\") notice(result.stderr);\n process.exitCode = result.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n// `[traces...]` rather than `<trace>`, so a missing or second trace gets the\n// tool's own message and exit 2 instead of commander's.\naddConfigFlags(\n program\n .command(\"check [traces...]\")\n .description(\n \"Judge the last turn of one session against the rules that governed it\",\n ),\n)\n .option(\"--project <dir>\", \"project root for resolving sources (default: the trace's recorded cwd)\")\n .option(\n \"--provider <name>\",\n \"Judge provider: auto (default) | anthropic | openai | claude-cli | jev | llama-cpp\",\n )\n .option(\"--model <model>\", \"Judge model; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .option(\"--runs <n>\", \"judge calls per rule (overrides judge.ensembleRuns)\", (v) => Number(v))\n .option(\"--no-cache\", \"bypass the rules cache and the verdict cache\")\n .option(\"--offline\", \"refuse network providers; judge and extract with local models only\")\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .option(\"-o, --output <file>\", \"also write the report to a file\")\n .action(async (traces: string[], opts: ConfigFlags & {\n project?: string;\n provider?: string;\n model?: string;\n local?: boolean;\n runs?: number;\n cache?: boolean;\n offline?: boolean;\n format?: SummaryFormat;\n output?: string;\n }, command: Command) => {\n try {\n const trace = traces[0];\n if (trace === undefined) {\n throw new TracevalsError(\"no trace given; pass a trace file or run manni tracevals list\");\n }\n if (traces.length > 1) {\n throw new TracevalsError(`tracevals check takes one trace, got ${String(traces.length)}`);\n }\n whole(\"--runs\", opts.runs, 1);\n const { runCheck } = await import(\"./commands/check.js\");\n const { report, rendered } = await runCheck({\n ...configOptions(opts),\n tracePath: trace,\n ...(opts.project !== undefined ? { project: opts.project } : {}),\n ...(opts.provider !== undefined ? { provider: opts.provider } : {}),\n ...(opts.model !== undefined ? { model: opts.model } : {}),\n ...(opts.local !== undefined ? { local: opts.local } : {}),\n ...(opts.runs !== undefined ? { runs: opts.runs } : {}),\n ...(opts.cache === false ? { noCache: true } : {}),\n ...(opts.offline === true ? { offline: true } : {}),\n format: opts.format ?? \"pretty\",\n ...(opts.output !== undefined ? { output: opts.output } : {}),\n color: colorFor(command, process.stdout.isTTY),\n });\n console.log(rendered);\n process.exitCode = report.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n// No `-c`/`--no-config`: `release` reads no config, only the envelope.\nprogram\n .command(\"release\")\n .description(\"Return a session's lease on the model host, or with --all stop the host\")\n .option(\"--all\", \"drop every lease, unload every model and stop the host\")\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .action(async (opts: { all?: boolean; format?: SummaryFormat }) => {\n try {\n const { runRelease } = await import(\"./commands/release.js\");\n const result = await runRelease({\n ...(opts.all === true ? { all: true } : {}),\n format: opts.format ?? \"pretty\",\n });\n if (result.stdout !== \"\") console.log(result.stdout);\n process.exitCode = result.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\nprogram\n .command(\"list\")\n .description(\"List discoverable traces (Claude Code session files)\")\n // The long spellings only, matching `run`: a short form that exists on one\n // verb and not on its sibling is exactly the drift \"commands must have\n // parallel behaviors\" exists to prevent.\n .option(\n \"--project <dir>\",\n \"project directory to scope to (default: current directory)\",\n )\n .option(\"--all-projects\", \"scan every project in the session store\")\n .option(\n \"--newer-than <duration>\",\n \"only traces modified within this window, such as 30m, 24h, 7d or 2w\",\n )\n .option(\"--limit <n>\", \"maximum traces to list\", (v) => Number(v))\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n // No `-c`/`--no-config`: `list` enumerates the session store and reads no\n // config at all, and an accepted flag that quietly does nothing is worse\n // than an absent one.\n .action(async (opts: {\n project?: string;\n allProjects?: boolean;\n newerThan?: string;\n limit?: number;\n format?: SummaryFormat;\n }, command: Command) => {\n try {\n // The same footgun as `run --limit`: `slice(0, -1)` lists everything but\n // the oldest, and reads as a shorter store rather than as a bad flag.\n whole(\"--limit\", opts.limit, 1);\n const run = await runList({\n project: opts.project,\n allProjects: opts.allProjects,\n ...(opts.newerThan !== undefined ? { newerThan: opts.newerThan } : {}),\n limit: opts.limit,\n });\n console.log(\n opts.format === \"json\"\n ? JSON.stringify(run, null, 2)\n : renderList(run, { color: colorFor(command, process.stdout.isTTY) }),\n );\n } catch (e) {\n fail(e);\n }\n });\n\nreturn program;\n}\n"],"mappings":"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","names":["report","rendered"]}
|
|
@@ -3,46 +3,47 @@ import {
|
|
|
3
3
|
KeyError,
|
|
4
4
|
runKeyRotate,
|
|
5
5
|
runKeySet
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-S3XUYW5K.js";
|
|
7
|
+
import "./chunk-CMMBWHT2.js";
|
|
8
|
+
import "./chunk-37QJLVS3.js";
|
|
9
|
+
import "./chunk-CXWTNT2O.js";
|
|
10
|
+
import "./chunk-PXNCRGUL.js";
|
|
11
|
+
import "./chunk-L3RLGGRK.js";
|
|
12
|
+
import "./chunk-ZIRBFXDW.js";
|
|
12
13
|
import "./chunk-PCE7QHXJ.js";
|
|
13
|
-
import "./chunk-77AINBYM.js";
|
|
14
|
-
import "./chunk-BKVHX6FU.js";
|
|
15
14
|
import "./chunk-IKEWBMCN.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import
|
|
15
|
+
import "./chunk-YUTVAMWW.js";
|
|
16
|
+
import "./chunk-DAQTRAP5.js";
|
|
17
|
+
import "./chunk-VQYGLU4C.js";
|
|
18
|
+
import "./chunk-7FCLXEAQ.js";
|
|
19
|
+
import {
|
|
20
|
+
COMMON_FORMAT_LIST
|
|
21
|
+
} from "./chunk-CEI2J42X.js";
|
|
22
|
+
import "./chunk-L2TD7DZB.js";
|
|
21
23
|
import {
|
|
22
24
|
collect,
|
|
23
25
|
explicitFalse,
|
|
24
26
|
splitList
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import {
|
|
31
|
-
fail
|
|
32
|
-
} from "./chunk-YEUYKR62.js";
|
|
27
|
+
} from "./chunk-WO4JYWZK.js";
|
|
28
|
+
import "./chunk-DSWKBZWW.js";
|
|
29
|
+
import "./chunk-KFKL4VTL.js";
|
|
30
|
+
import "./chunk-77AINBYM.js";
|
|
31
|
+
import "./chunk-MNH7QO4Z.js";
|
|
33
32
|
import {
|
|
34
33
|
palette,
|
|
35
34
|
shouldColor
|
|
36
35
|
} from "./chunk-RNVYGWIC.js";
|
|
37
|
-
import
|
|
38
|
-
|
|
36
|
+
import {
|
|
37
|
+
fail
|
|
38
|
+
} from "./chunk-YEUYKR62.js";
|
|
39
|
+
import "./chunk-OTJOBZJ5.js";
|
|
39
40
|
import {
|
|
40
41
|
notice
|
|
41
42
|
} from "./chunk-HX44GB4Z.js";
|
|
42
|
-
import "./chunk-
|
|
43
|
+
import "./chunk-VM7VAFJW.js";
|
|
43
44
|
import {
|
|
44
45
|
package_default
|
|
45
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-7MCQHTQ5.js";
|
|
46
47
|
import "./chunk-OWBRDNRZ.js";
|
|
47
48
|
import "./chunk-G3T47CFV.js";
|
|
48
49
|
import "./chunk-2H7UOFLK.js";
|
|
@@ -231,4 +232,4 @@ function buildProgram() {
|
|
|
231
232
|
export {
|
|
232
233
|
buildProgram
|
|
233
234
|
};
|
|
234
|
-
//# sourceMappingURL=cli-
|
|
235
|
+
//# sourceMappingURL=cli-3FAPJBEY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/key/cli.ts","../src/key/reporters/json.ts","../src/key/reporters/pretty.ts"],"sourcesContent":["/**\n * The `key` domain's commander program. Mounted by `src/cli.ts` under\n * `manni key`; no entry point of its own. Proposal 0045 extends 0034's\n * grammar: a domain is a tool, or a family resource with verbs. `key` is the\n * second kind, with two verbs, `set` and `rotate`, and no default subcommand.\n *\n * clig.dev as every tool has it: the report to stdout, diagnostics to stderr,\n * colour only on a TTY and never under `NO_COLOR`/`--no-color`, exit `0` done,\n * `1` a value that could not be re-encrypted, `2` operational/usage. Nothing\n * this program prints is ever a key.\n */\nimport { Command } from \"commander\";\nimport pkg from \"../../package.json\" with { type: \"json\" };\nimport { collect, explicitFalse, splitList } from \"../shared/cli-options.js\";\nimport { shouldColor } from \"../shared/color.js\";\nimport { fail } from \"../shared/run.js\";\nimport { notice } from \"../shared/warn.js\";\nimport { COMMON_FORMAT_LIST } from \"../meta/internal.js\";\nimport { runKeyRotate } from \"./commands/rotate.js\";\nimport { runKeySet } from \"./commands/set.js\";\nimport { KeyError } from \"./errors.js\";\nimport { renderRotateJson } from \"./reporters/json.js\";\nimport { BASELINE_NOTICE, renderRotatePretty, setMessage } from \"./reporters/pretty.js\";\n\nconst ROTATE_FORMATS = [\"pretty\", \"json\"] as const;\ntype RotateFormat = (typeof ROTATE_FORMATS)[number];\n\nfunction isRotateFormat(value: string): value is RotateFormat {\n return (ROTATE_FORMATS as readonly string[]).includes(value);\n}\n\n/** What commander hands `set`'s action. */\ninterface SetCliOptions {\n /** `-c, --config <path>`. */\n config?: string;\n dryRun?: boolean;\n}\n\n/**\n * What commander hands `rotate`'s action. The `--no-<thing>` flags are\n * `boolean` and never `undefined`: commander supplies `true` when the flag is\n * absent, so only the explicit `false` travels to the core (`explicitFalse`).\n */\ninterface RotateCliOptions {\n to?: string;\n /** `--collection <name>`, repeatable; commander's default value is `[]`. */\n collection: string[];\n /** `--ext <list>`; the command splits it. */\n ext?: string;\n /** `--exclude <glob>`, repeatable; commander's default value is `[]`. */\n exclude: string[];\n as?: string;\n config?: string;\n allowEmpty?: boolean;\n /** `--no-gitignore`. */\n gitignore: boolean;\n root?: string;\n dryRun?: boolean;\n /** `-f, --format <format>`. Always a string: the declaration has a default. */\n format: string;\n}\n\nexport function buildProgram(): Command {\n const program = new Command();\n program\n .name(\"key\")\n .description(\"Set and rotate the family key that encrypted values are encrypted with.\")\n .version(pkg.version, \"-V, --version\")\n .option(\"--no-color\", \"disable colored output\")\n // A pointer, not the whole help screen: the message that precedes it\n // already names the offending flag.\n .showHelpAfterError(\"(add --help for usage)\")\n // MUST come before the `.command()` calls below. `copyInheritedSettings`\n // copies `_exitCallback` by value at subcommand-creation time, so an\n // `exitOverride()` installed afterwards leaves every subcommand still\n // calling `process.exit(1)`.\n .exitOverride();\n\n /** This domain's `--no-color`, wherever the domain is mounted. */\n const color = (): boolean =>\n shouldColor({ noColor: program.opts().color === false, isTTY: process.stdout.isTTY });\n\n program\n .command(\"set\")\n .description(\"Write the family encryption key to manni.config.yaml; generate one when no value is given\")\n .argument(\"[value]\", \"the key, at least 32 hex or base64url characters (default: 64 random hex)\")\n .option(\n \"-c, --config <path>\",\n \"the config file to write (default: the nearest manni.config.yaml, else a new one at the git root)\",\n )\n .option(\"--dry-run\", \"say what would be written; write nothing\")\n .addHelpText(\n \"after\",\n [\n \"\",\n \"Examples:\",\n \" manni key set # generate 256 bits into manni.config.yaml\",\n \" manni key set --dry-run # name the file, write nothing\",\n \" manni key set -c ops/manni.config.yaml 0123456789abcdef0123456789abcdef\",\n ].join(\"\\n\"),\n )\n .action(async (value: string | undefined, options: SetCliOptions) => {\n try {\n const result = await runKeySet({\n value,\n configPath: options.config,\n dryRun: Boolean(options.dryRun),\n onNotice: notice,\n });\n process.stdout.write(`${setMessage(result)}\\n`);\n process.exitCode = 0;\n } catch (err) {\n fail(err);\n }\n });\n\n program\n .command(\"rotate\")\n .description(\"Re-encrypt every encrypted value under a new key, then write the key\")\n .argument(\"[paths...]\", \"files, directories, or globs (default: every collection)\")\n .option(\n \"--to <value>\",\n \"the new key (default: 64 random hex); required for a narrowed run and a key from MANNI_ENCRYPTION_KEY\",\n )\n .option(\"--collection <name>\", \"configured collection to run over; repeatable\", collect, [])\n .option(\"--ext <list>\", \"comma-separated extensions for directory walks\")\n .option(\"--exclude <glob>\", \"glob to exclude; repeatable\", collect, [])\n .option(\"--as <format>\", \"force an input format for every input\")\n .option(\"-c, --config <path>\", \"path to a manni config file\")\n .option(\"--allow-empty\", \"treat zero matched files as success\")\n .option(\"--no-gitignore\", \"include files .gitignore covers\")\n .option(\n \"--root <dir>\",\n \"directory cited sources resolve from (default: cite.root from config, else the git root)\",\n )\n .option(\"--dry-run\", \"print what would change; write nothing\")\n .option(\"-f, --format <format>\", `output: ${ROTATE_FORMATS.join(\" | \")}`, \"pretty\")\n .addHelpText(\n \"after\",\n [\n \"\",\n \"Examples:\",\n \" manni key rotate # every collection, then the key\",\n \" manni key rotate --dry-run # see every change first\",\n ' manni key rotate --collection site --to \"$NEW_KEY\" # part of the family',\n ' MANNI_ENCRYPTION_KEY=… manni key rotate --to \"$NEW_KEY\"',\n ].join(\"\\n\"),\n )\n .action(async (paths: string[], options: RotateCliOptions) => {\n try {\n const format = options.format;\n if (!isRotateFormat(format)) {\n throw new KeyError(`Unknown --format \"${format}\". Use ${COMMON_FORMAT_LIST}.`);\n }\n const result = await runKeyRotate({\n inputs: paths,\n collection: options.collection,\n to: options.to,\n exts: options.ext ? splitList(options.ext) : undefined,\n exclude: options.exclude,\n as: options.as,\n configPath: options.config,\n // `undefined` rather than `false` when absent.\n allowEmpty: options.allowEmpty ? true : undefined,\n respectGitignore: explicitFalse(options.gitignore),\n root: options.root,\n dryRun: Boolean(options.dryRun),\n onNotice: notice,\n });\n if (format === \"json\") {\n process.stdout.write(`${renderRotateJson(result)}\\n`);\n // stdout is the JSON's; the notice is a diagnostic.\n if (result.baselineStale) notice(BASELINE_NOTICE);\n } else {\n process.stdout.write(`${renderRotatePretty(result, { color: color() })}\\n`);\n }\n process.exitCode = result.exitCode;\n } catch (err) {\n fail(err);\n }\n });\n\n return program;\n}\n","/**\n * JSON output for `key rotate`: every page and every local external-metadata\n * manifest with something encrypted in it, each value's full ciphertext\n * before and after, and the counts. The key is never in it.\n */\nimport type { KeyRotateResult } from \"../types.js\";\n\nexport function renderRotateJson(result: KeyRotateResult): string {\n return JSON.stringify(\n {\n pages: result.pages,\n manifests: result.manifests,\n reencrypted: result.reencrypted,\n skipped: result.skipped,\n keyWritten: result.keyWritten,\n },\n null,\n 2,\n );\n}\n","/**\n * Pretty output for `key set` and `key rotate`. A ciphertext is shown as `~`\n * and its first four characters, then `…`, with a citation's line suffix\n * after it: `~AQx7…`, `~AQm4…:2`. The full values are in `-f json`; the key\n * is in neither. Colour via `shouldColor`; never under `--no-color`/`NO_COLOR`.\n */\nimport { palette } from \"../../shared/color.js\";\nimport type { KeyRotateResult, KeySetResult, RotatedValue, SkippedValue } from \"../types.js\";\n\nexport interface PrettyOptions {\n color: boolean;\n}\n\n/** Said at the end of a writing rotation when a citation baseline exists. */\nexport const BASELINE_NOTICE =\n \"The citation baseline fingerprints id-less encrypted citations by their pin; re-record it with `manni cite check --write-baseline`.\";\n\nconst NARROWED =\n \"Key not written: this run covered part of the family. Finish with a whole run under the same key: `manni key rotate --to <the same value>`.\";\nconst FROM_ENV =\n \"Key not written: it comes from MANNI_ENCRYPTION_KEY. Update the secret to the value you passed.\";\n\nconst plural = (n: number, one: string, many = `${one}s`): string =>\n `${String(n)} ${n === 1 ? one : many}`;\n\n/** What `set` says: the file, never the key. */\nexport function setMessage(result: KeySetResult): string {\n return result.dryRun\n ? `Would write encryptionKey to ${result.source}.`\n : `Encryption key written to ${result.source}.`;\n}\n\n/** `~AQx7…`, and a citation's line suffix after it: `~AQm4…:2`. */\nexport function shortCiphertext(value: string): string {\n // base64url has no `:`, so the first one starts the line suffix.\n const colon = value.indexOf(\":\");\n const token = colon === -1 ? value : value.slice(0, colon);\n const suffix = colon === -1 ? \"\" : value.slice(colon);\n return `${token.slice(0, 5)}…${suffix}`;\n}\n\n/** A metadata value by its pointer; a citation by its id, else where it sits. */\nfunction nameOf(row: RotatedValue | SkippedValue): string {\n if (row.kind === \"metadata\") return row.pointer;\n if (row.id !== undefined) return row.id;\n if (row.index !== undefined) return `/citations/${String(row.index)}`;\n return `line ${String(row.line ?? 0)}`;\n}\n\nfunction closing(result: KeyRotateResult): string | undefined {\n switch (result.outcome) {\n case \"written\":\n return result.configSource === undefined\n ? undefined\n : `Encryption key written to ${result.configSource}.`;\n case \"finished\":\n // Said before the counts: the key was written by the run that stopped.\n return undefined;\n case \"narrowed\":\n return NARROWED;\n case \"env\":\n return FROM_ENV;\n case \"skipped\":\n return result.skipped === 1\n ? \"Key not written: 1 value could not be re-encrypted. Fix it and rotate again.\"\n : `Key not written: ${String(result.skipped)} values could not be re-encrypted. Fix them and rotate again.`;\n case \"dry-run\":\n return \"Dry run: nothing written.\";\n }\n}\n\nexport function renderRotatePretty(result: KeyRotateResult, opts: PrettyOptions): string {\n const c = palette(opts.color);\n const lines: string[] = [];\n for (const page of result.pages) {\n for (const row of page.rewritten) {\n // A metadata value has no line suffix; two spaces keep its arrow in the\n // column a `:L` suffix would take.\n const gap = row.kind === \"metadata\" ? \" \" : \" \";\n lines.push(\n `${page.file}: ${nameOf(row)} ${c.dim(shortCiphertext(row.from))}${gap}-> ${shortCiphertext(row.to)}`,\n );\n }\n for (const row of page.skipped) {\n lines.push(`${page.file}: ${nameOf(row)} ${c.red(\"skipped:\")} ${row.message}`);\n }\n }\n // A manifest value is named by the entry it belongs to and the pointer\n // inside it, so one line says which document's private half moved.\n for (const manifest of result.manifests) {\n for (const row of manifest.rewritten) {\n lines.push(\n `${manifest.file}: ${row.entry}${row.pointer} ${c.dim(shortCiphertext(row.from))} -> ${shortCiphertext(row.to)}`,\n );\n }\n for (const row of manifest.skipped) {\n lines.push(\n `${manifest.file}: ${row.entry}${row.pointer} ${c.red(\"skipped:\")} ${row.message}`,\n );\n }\n }\n if (result.outcome === \"finished\" && result.configSource !== undefined) {\n lines.push(`Finished the interrupted rotation in ${result.configSource}.`);\n }\n const files =\n result.pages.filter((page) => page.rewritten.length > 0).length +\n result.manifests.filter((manifest) => manifest.rewritten.length > 0).length;\n lines.push(\n `${plural(result.reencrypted, \"value\")} re-encrypted in ${plural(files, \"file\")}, ${String(result.skipped)} skipped`,\n );\n const last = closing(result);\n if (last !== undefined) lines.push(result.outcome === \"skipped\" ? c.red(last) : last);\n if (result.baselineStale) lines.push(BASELINE_NOTICE);\n return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/key/cli.ts","../src/key/reporters/json.ts","../src/key/reporters/pretty.ts"],"sourcesContent":["/**\n * The `key` domain's commander program. Mounted by `src/cli.ts` under\n * `manni key`; no entry point of its own. Proposal 0045 extends 0034's\n * grammar: a domain is a tool, or a family resource with verbs. `key` is the\n * second kind, with two verbs, `set` and `rotate`, and no default subcommand.\n *\n * clig.dev as every tool has it: the report to stdout, diagnostics to stderr,\n * colour only on a TTY and never under `NO_COLOR`/`--no-color`, exit `0` done,\n * `1` a value that could not be re-encrypted, `2` operational/usage. Nothing\n * this program prints is ever a key.\n */\nimport { Command } from \"commander\";\nimport pkg from \"../../package.json\" with { type: \"json\" };\nimport { collect, explicitFalse, splitList } from \"../shared/cli-options.js\";\nimport { shouldColor } from \"../shared/color.js\";\nimport { fail } from \"../shared/run.js\";\nimport { notice } from \"../shared/warn.js\";\nimport { COMMON_FORMAT_LIST } from \"../meta/internal.js\";\nimport { runKeyRotate } from \"./commands/rotate.js\";\nimport { runKeySet } from \"./commands/set.js\";\nimport { KeyError } from \"./errors.js\";\nimport { renderRotateJson } from \"./reporters/json.js\";\nimport { BASELINE_NOTICE, renderRotatePretty, setMessage } from \"./reporters/pretty.js\";\n\nconst ROTATE_FORMATS = [\"pretty\", \"json\"] as const;\ntype RotateFormat = (typeof ROTATE_FORMATS)[number];\n\nfunction isRotateFormat(value: string): value is RotateFormat {\n return (ROTATE_FORMATS as readonly string[]).includes(value);\n}\n\n/** What commander hands `set`'s action. */\ninterface SetCliOptions {\n /** `-c, --config <path>`. */\n config?: string;\n dryRun?: boolean;\n}\n\n/**\n * What commander hands `rotate`'s action. The `--no-<thing>` flags are\n * `boolean` and never `undefined`: commander supplies `true` when the flag is\n * absent, so only the explicit `false` travels to the core (`explicitFalse`).\n */\ninterface RotateCliOptions {\n to?: string;\n /** `--collection <name>`, repeatable; commander's default value is `[]`. */\n collection: string[];\n /** `--ext <list>`; the command splits it. */\n ext?: string;\n /** `--exclude <glob>`, repeatable; commander's default value is `[]`. */\n exclude: string[];\n as?: string;\n config?: string;\n allowEmpty?: boolean;\n /** `--no-gitignore`. */\n gitignore: boolean;\n root?: string;\n dryRun?: boolean;\n /** `-f, --format <format>`. Always a string: the declaration has a default. */\n format: string;\n}\n\nexport function buildProgram(): Command {\n const program = new Command();\n program\n .name(\"key\")\n .description(\"Set and rotate the family key that encrypted values are encrypted with.\")\n .version(pkg.version, \"-V, --version\")\n .option(\"--no-color\", \"disable colored output\")\n // A pointer, not the whole help screen: the message that precedes it\n // already names the offending flag.\n .showHelpAfterError(\"(add --help for usage)\")\n // MUST come before the `.command()` calls below. `copyInheritedSettings`\n // copies `_exitCallback` by value at subcommand-creation time, so an\n // `exitOverride()` installed afterwards leaves every subcommand still\n // calling `process.exit(1)`.\n .exitOverride();\n\n /** This domain's `--no-color`, wherever the domain is mounted. */\n const color = (): boolean =>\n shouldColor({ noColor: program.opts().color === false, isTTY: process.stdout.isTTY });\n\n program\n .command(\"set\")\n .description(\"Write the family encryption key to manni.config.yaml; generate one when no value is given\")\n .argument(\"[value]\", \"the key, at least 32 hex or base64url characters (default: 64 random hex)\")\n .option(\n \"-c, --config <path>\",\n \"the config file to write (default: the nearest manni.config.yaml, else a new one at the git root)\",\n )\n .option(\"--dry-run\", \"say what would be written; write nothing\")\n .addHelpText(\n \"after\",\n [\n \"\",\n \"Examples:\",\n \" manni key set # generate 256 bits into manni.config.yaml\",\n \" manni key set --dry-run # name the file, write nothing\",\n \" manni key set -c ops/manni.config.yaml 0123456789abcdef0123456789abcdef\",\n ].join(\"\\n\"),\n )\n .action(async (value: string | undefined, options: SetCliOptions) => {\n try {\n const result = await runKeySet({\n value,\n configPath: options.config,\n dryRun: Boolean(options.dryRun),\n onNotice: notice,\n });\n process.stdout.write(`${setMessage(result)}\\n`);\n process.exitCode = 0;\n } catch (err) {\n fail(err);\n }\n });\n\n program\n .command(\"rotate\")\n .description(\"Re-encrypt every encrypted value under a new key, then write the key\")\n .argument(\"[paths...]\", \"files, directories, or globs (default: every collection)\")\n .option(\n \"--to <value>\",\n \"the new key (default: 64 random hex); required for a narrowed run and a key from MANNI_ENCRYPTION_KEY\",\n )\n .option(\"--collection <name>\", \"configured collection to run over; repeatable\", collect, [])\n .option(\"--ext <list>\", \"comma-separated extensions for directory walks\")\n .option(\"--exclude <glob>\", \"glob to exclude; repeatable\", collect, [])\n .option(\"--as <format>\", \"force an input format for every input\")\n .option(\"-c, --config <path>\", \"path to a manni config file\")\n .option(\"--allow-empty\", \"treat zero matched files as success\")\n .option(\"--no-gitignore\", \"include files .gitignore covers\")\n .option(\n \"--root <dir>\",\n \"directory cited sources resolve from (default: cite.root from config, else the git root)\",\n )\n .option(\"--dry-run\", \"print what would change; write nothing\")\n .option(\"-f, --format <format>\", `output: ${ROTATE_FORMATS.join(\" | \")}`, \"pretty\")\n .addHelpText(\n \"after\",\n [\n \"\",\n \"Examples:\",\n \" manni key rotate # every collection, then the key\",\n \" manni key rotate --dry-run # see every change first\",\n ' manni key rotate --collection site --to \"$NEW_KEY\" # part of the family',\n ' MANNI_ENCRYPTION_KEY=… manni key rotate --to \"$NEW_KEY\"',\n ].join(\"\\n\"),\n )\n .action(async (paths: string[], options: RotateCliOptions) => {\n try {\n const format = options.format;\n if (!isRotateFormat(format)) {\n throw new KeyError(`Unknown --format \"${format}\". Use ${COMMON_FORMAT_LIST}.`);\n }\n const result = await runKeyRotate({\n inputs: paths,\n collection: options.collection,\n to: options.to,\n exts: options.ext ? splitList(options.ext) : undefined,\n exclude: options.exclude,\n as: options.as,\n configPath: options.config,\n // `undefined` rather than `false` when absent.\n allowEmpty: options.allowEmpty ? true : undefined,\n respectGitignore: explicitFalse(options.gitignore),\n root: options.root,\n dryRun: Boolean(options.dryRun),\n onNotice: notice,\n });\n if (format === \"json\") {\n process.stdout.write(`${renderRotateJson(result)}\\n`);\n // stdout is the JSON's; the notice is a diagnostic.\n if (result.baselineStale) notice(BASELINE_NOTICE);\n } else {\n process.stdout.write(`${renderRotatePretty(result, { color: color() })}\\n`);\n }\n process.exitCode = result.exitCode;\n } catch (err) {\n fail(err);\n }\n });\n\n return program;\n}\n","/**\n * JSON output for `key rotate`: every page and every local external-metadata\n * manifest with something encrypted in it, each value's full ciphertext\n * before and after, and the counts. The key is never in it.\n */\nimport type { KeyRotateResult } from \"../types.js\";\n\nexport function renderRotateJson(result: KeyRotateResult): string {\n return JSON.stringify(\n {\n pages: result.pages,\n manifests: result.manifests,\n reencrypted: result.reencrypted,\n skipped: result.skipped,\n keyWritten: result.keyWritten,\n },\n null,\n 2,\n );\n}\n","/**\n * Pretty output for `key set` and `key rotate`. A ciphertext is shown as `~`\n * and its first four characters, then `…`, with a citation's line suffix\n * after it: `~AQx7…`, `~AQm4…:2`. The full values are in `-f json`; the key\n * is in neither. Colour via `shouldColor`; never under `--no-color`/`NO_COLOR`.\n */\nimport { palette } from \"../../shared/color.js\";\nimport type { KeyRotateResult, KeySetResult, RotatedValue, SkippedValue } from \"../types.js\";\n\nexport interface PrettyOptions {\n color: boolean;\n}\n\n/** Said at the end of a writing rotation when a citation baseline exists. */\nexport const BASELINE_NOTICE =\n \"The citation baseline fingerprints id-less encrypted citations by their pin; re-record it with `manni cite check --write-baseline`.\";\n\nconst NARROWED =\n \"Key not written: this run covered part of the family. Finish with a whole run under the same key: `manni key rotate --to <the same value>`.\";\nconst FROM_ENV =\n \"Key not written: it comes from MANNI_ENCRYPTION_KEY. Update the secret to the value you passed.\";\n\nconst plural = (n: number, one: string, many = `${one}s`): string =>\n `${String(n)} ${n === 1 ? one : many}`;\n\n/** What `set` says: the file, never the key. */\nexport function setMessage(result: KeySetResult): string {\n return result.dryRun\n ? `Would write encryptionKey to ${result.source}.`\n : `Encryption key written to ${result.source}.`;\n}\n\n/** `~AQx7…`, and a citation's line suffix after it: `~AQm4…:2`. */\nexport function shortCiphertext(value: string): string {\n // base64url has no `:`, so the first one starts the line suffix.\n const colon = value.indexOf(\":\");\n const token = colon === -1 ? value : value.slice(0, colon);\n const suffix = colon === -1 ? \"\" : value.slice(colon);\n return `${token.slice(0, 5)}…${suffix}`;\n}\n\n/** A metadata value by its pointer; a citation by its id, else where it sits. */\nfunction nameOf(row: RotatedValue | SkippedValue): string {\n if (row.kind === \"metadata\") return row.pointer;\n if (row.id !== undefined) return row.id;\n if (row.index !== undefined) return `/citations/${String(row.index)}`;\n return `line ${String(row.line ?? 0)}`;\n}\n\nfunction closing(result: KeyRotateResult): string | undefined {\n switch (result.outcome) {\n case \"written\":\n return result.configSource === undefined\n ? undefined\n : `Encryption key written to ${result.configSource}.`;\n case \"finished\":\n // Said before the counts: the key was written by the run that stopped.\n return undefined;\n case \"narrowed\":\n return NARROWED;\n case \"env\":\n return FROM_ENV;\n case \"skipped\":\n return result.skipped === 1\n ? \"Key not written: 1 value could not be re-encrypted. Fix it and rotate again.\"\n : `Key not written: ${String(result.skipped)} values could not be re-encrypted. Fix them and rotate again.`;\n case \"dry-run\":\n return \"Dry run: nothing written.\";\n }\n}\n\nexport function renderRotatePretty(result: KeyRotateResult, opts: PrettyOptions): string {\n const c = palette(opts.color);\n const lines: string[] = [];\n for (const page of result.pages) {\n for (const row of page.rewritten) {\n // A metadata value has no line suffix; two spaces keep its arrow in the\n // column a `:L` suffix would take.\n const gap = row.kind === \"metadata\" ? \" \" : \" \";\n lines.push(\n `${page.file}: ${nameOf(row)} ${c.dim(shortCiphertext(row.from))}${gap}-> ${shortCiphertext(row.to)}`,\n );\n }\n for (const row of page.skipped) {\n lines.push(`${page.file}: ${nameOf(row)} ${c.red(\"skipped:\")} ${row.message}`);\n }\n }\n // A manifest value is named by the entry it belongs to and the pointer\n // inside it, so one line says which document's private half moved.\n for (const manifest of result.manifests) {\n for (const row of manifest.rewritten) {\n lines.push(\n `${manifest.file}: ${row.entry}${row.pointer} ${c.dim(shortCiphertext(row.from))} -> ${shortCiphertext(row.to)}`,\n );\n }\n for (const row of manifest.skipped) {\n lines.push(\n `${manifest.file}: ${row.entry}${row.pointer} ${c.red(\"skipped:\")} ${row.message}`,\n );\n }\n }\n if (result.outcome === \"finished\" && result.configSource !== undefined) {\n lines.push(`Finished the interrupted rotation in ${result.configSource}.`);\n }\n const files =\n result.pages.filter((page) => page.rewritten.length > 0).length +\n result.manifests.filter((manifest) => manifest.rewritten.length > 0).length;\n lines.push(\n `${plural(result.reencrypted, \"value\")} re-encrypted in ${plural(files, \"file\")}, ${String(result.skipped)} skipped`,\n );\n const last = closing(result);\n if (last !== undefined) lines.push(result.outcome === \"skipped\" ? c.red(last) : last);\n if (result.baselineStale) lines.push(BASELINE_NOTICE);\n return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -5,28 +5,28 @@ import {
|
|
|
5
5
|
renderJson,
|
|
6
6
|
renderPretty,
|
|
7
7
|
runTest
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-L75CAZG4.js";
|
|
9
9
|
import "./chunk-ZPLVANY2.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-DAQTRAP5.js";
|
|
11
|
+
import "./chunk-7FCLXEAQ.js";
|
|
12
|
+
import "./chunk-CEI2J42X.js";
|
|
12
13
|
import {
|
|
13
14
|
collect
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import {
|
|
18
|
-
fail
|
|
19
|
-
} from "./chunk-YEUYKR62.js";
|
|
15
|
+
} from "./chunk-WO4JYWZK.js";
|
|
16
|
+
import "./chunk-KFKL4VTL.js";
|
|
17
|
+
import "./chunk-MNH7QO4Z.js";
|
|
20
18
|
import {
|
|
21
19
|
colorFor
|
|
22
20
|
} from "./chunk-RNVYGWIC.js";
|
|
23
|
-
import
|
|
24
|
-
|
|
21
|
+
import {
|
|
22
|
+
fail
|
|
23
|
+
} from "./chunk-YEUYKR62.js";
|
|
24
|
+
import "./chunk-OTJOBZJ5.js";
|
|
25
25
|
import "./chunk-HX44GB4Z.js";
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-VM7VAFJW.js";
|
|
27
27
|
import {
|
|
28
28
|
package_default
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-7MCQHTQ5.js";
|
|
30
30
|
import "./chunk-OWBRDNRZ.js";
|
|
31
31
|
import "./chunk-G3T47CFV.js";
|
|
32
32
|
import "./chunk-2H7UOFLK.js";
|
|
@@ -80,4 +80,4 @@ function buildProgram() {
|
|
|
80
80
|
export {
|
|
81
81
|
buildProgram
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=cli-
|
|
83
|
+
//# sourceMappingURL=cli-BS43EVCD.js.map
|