@hawkeyexl/manni 4.9.0 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/README.md +1 -1
  2. package/dist/{batch-W5GXL2P4.js → batch-UAULUMGH.js} +18 -14
  3. package/dist/{build-Q56FEXR6.js → build-QSPNK5AL.js} +14 -11
  4. package/dist/calibrate-KXN4URPM.js +40 -0
  5. package/dist/{capture-GMYH4ATL.js → capture-JHTSUPUC.js} +16 -13
  6. package/dist/{check-OAJWC3WD.js → check-MDGXEUWL.js} +5 -5
  7. package/dist/{check-KUBELO5G.js → check-VELUQAUW.js} +17 -14
  8. package/dist/{check-KUBELO5G.js.map → check-VELUQAUW.js.map} +1 -1
  9. package/dist/check-WOQRKNZK.js +29 -0
  10. package/dist/{check-ZE5HIDOW.js → check-YEOYBFST.js} +14 -11
  11. package/dist/{chunk-FGUXMZXO.js → chunk-2DRHT73U.js} +7 -7
  12. package/dist/{chunk-XHFHXOQQ.js → chunk-2IAZEB45.js} +8 -8
  13. package/dist/{chunk-35WTFPQS.js → chunk-2IR4T5PO.js} +2 -2
  14. package/dist/{chunk-KX5IYIOO.js → chunk-2MJ62AYQ.js} +2 -2
  15. package/dist/chunk-2MJ62AYQ.js.map +1 -0
  16. package/dist/{chunk-OWSNXPPX.js → chunk-4CK6ZSOK.js} +6 -6
  17. package/dist/{chunk-YUZ2ECZY.js → chunk-4D5IZSXM.js} +3 -3
  18. package/dist/{chunk-RFSGKF4O.js → chunk-4VBSTXN6.js} +4 -4
  19. package/dist/{chunk-3XMG4CZY.js → chunk-54F74XR3.js} +15 -13
  20. package/dist/{chunk-3XMG4CZY.js.map → chunk-54F74XR3.js.map} +1 -1
  21. package/dist/{chunk-IN6DWNVE.js → chunk-6HWBRZIN.js} +47 -191
  22. package/dist/chunk-6HWBRZIN.js.map +1 -0
  23. package/dist/{chunk-GEMXGXPR.js → chunk-ADMEPUBT.js} +3 -3
  24. package/dist/{chunk-23UAGEKP.js → chunk-B7XYNRJQ.js} +2 -2
  25. package/dist/{chunk-QKE3XS2L.js → chunk-BBT6AVUG.js} +2 -2
  26. package/dist/{chunk-VKWZCEWB.js → chunk-BKVHX6FU.js} +4 -4
  27. package/dist/{chunk-X6WLCNKC.js → chunk-D4N2V43Z.js} +4 -4
  28. package/dist/{chunk-XXDXIIQ4.js → chunk-EFW7CAG4.js} +2 -2
  29. package/dist/{chunk-UDUHRXJ4.js → chunk-EIFCP6CZ.js} +2 -2
  30. package/dist/{chunk-KPXOJMQ6.js → chunk-FBMZJEB3.js} +2 -2
  31. package/dist/{chunk-HRXDM6H6.js → chunk-FQXWVS6J.js} +8 -8
  32. package/dist/{chunk-76I6I5N2.js → chunk-FUCPZVRY.js} +2 -2
  33. package/dist/{chunk-DTGIUMZV.js → chunk-GDVZ5VII.js} +4 -4
  34. package/dist/{chunk-QCCAHV6A.js → chunk-GV56WGL2.js} +321 -3308
  35. package/dist/chunk-GV56WGL2.js.map +1 -0
  36. package/dist/{chunk-TKTRIZT4.js → chunk-HA6MQMOY.js} +6 -6
  37. package/dist/{chunk-ECVQNGTH.js → chunk-HQR2ZBHW.js} +3 -3
  38. package/dist/{chunk-MHAYLDBK.js → chunk-IGSHYP74.js} +4 -4
  39. package/dist/{chunk-YEUQ7OKT.js → chunk-J6IDQGJL.js} +4 -4
  40. package/dist/{chunk-5LBEQ4ZU.js → chunk-JPQDNYXH.js} +2 -2
  41. package/dist/{chunk-6KKZXB2O.js → chunk-JROBZ7JA.js} +2 -2
  42. package/dist/{chunk-TMI2YF6D.js → chunk-KGEQJ5CC.js} +15 -26
  43. package/dist/{chunk-TMI2YF6D.js.map → chunk-KGEQJ5CC.js.map} +1 -1
  44. package/dist/{chunk-2EHDJ47Y.js → chunk-LBSCW232.js} +4 -4
  45. package/dist/{chunk-M6GH3FGJ.js → chunk-LKP7QDFN.js} +4 -4
  46. package/dist/{chunk-5EB6RIXJ.js → chunk-LPIF5LIE.js} +2 -2
  47. package/dist/chunk-M42DZCOU.js +164 -0
  48. package/dist/chunk-M42DZCOU.js.map +1 -0
  49. package/dist/{chunk-ND2S5BXB.js → chunk-MSRU4D4P.js} +2 -2
  50. package/dist/{chunk-BSTXARMY.js → chunk-NSBXVPZL.js} +11 -11
  51. package/dist/{chunk-Q45PZX2D.js → chunk-ODRPL3WB.js} +2 -2
  52. package/dist/{chunk-FSBIPCWE.js → chunk-OPXWPJDA.js} +10 -10
  53. package/dist/chunk-PCQ7ELJH.js +3081 -0
  54. package/dist/chunk-PCQ7ELJH.js.map +1 -0
  55. package/dist/{chunk-QAKJNPY3.js → chunk-PCS4VJBV.js} +6 -6
  56. package/dist/{chunk-GRILZZGS.js → chunk-PWBH7DCQ.js} +3 -3
  57. package/dist/{chunk-XKBEHKWO.js → chunk-QLWC7MKD.js} +34 -32
  58. package/dist/chunk-QLWC7MKD.js.map +1 -0
  59. package/dist/{chunk-XTAHZTES.js → chunk-R4WXQIOZ.js} +6 -6
  60. package/dist/{chunk-3CDZWY6M.js → chunk-RLT5SEML.js} +5 -5
  61. package/dist/{chunk-XG6PVB5S.js → chunk-SSQZB5SQ.js} +1 -11
  62. package/dist/chunk-SSQZB5SQ.js.map +1 -0
  63. package/dist/chunk-T7JAOYE5.js +393 -0
  64. package/dist/chunk-T7JAOYE5.js.map +1 -0
  65. package/dist/chunk-TU2WUBVZ.js +2 -0
  66. package/dist/{chunk-Q2H7J3FF.js → chunk-U7CTFN2J.js} +12 -10
  67. package/dist/{chunk-Q2H7J3FF.js.map → chunk-U7CTFN2J.js.map} +1 -1
  68. package/dist/{chunk-3XGGF5JW.js → chunk-VSEBFHAY.js} +10 -7
  69. package/dist/{chunk-3XGGF5JW.js.map → chunk-VSEBFHAY.js.map} +1 -1
  70. package/dist/{chunk-OVOYKWCM.js → chunk-WDWXAYVH.js} +4 -4
  71. package/dist/{chunk-5WME4CB6.js → chunk-Y6DOMTQD.js} +10 -8
  72. package/dist/{chunk-5WME4CB6.js.map → chunk-Y6DOMTQD.js.map} +1 -1
  73. package/dist/chunk-ZMECS2IJ.js +27 -0
  74. package/dist/chunk-ZMECS2IJ.js.map +1 -0
  75. package/dist/chunk-ZPLVANY2.js +15 -0
  76. package/dist/chunk-ZPLVANY2.js.map +1 -0
  77. package/dist/{cli-MEPJTS2V.js → cli-3BTCK4AB.js} +18 -15
  78. package/dist/{cli-MEPJTS2V.js.map → cli-3BTCK4AB.js.map} +1 -1
  79. package/dist/{cli-EMQXRN6E.js → cli-4MF37HAQ.js} +16 -12
  80. package/dist/{cli-EMQXRN6E.js.map → cli-4MF37HAQ.js.map} +1 -1
  81. package/dist/{cli-YDMMIL2U.js → cli-6KZTHWGP.js} +17 -14
  82. package/dist/{cli-YDMMIL2U.js.map → cli-6KZTHWGP.js.map} +1 -1
  83. package/dist/{cli-ZJRHU7MO.js → cli-DRMZBZLB.js} +39 -34
  84. package/dist/cli-DRMZBZLB.js.map +1 -0
  85. package/dist/{cli-J35OPSTP.js → cli-I62SRH3R.js} +10 -8
  86. package/dist/cli-JJMOVIKS.js +83 -0
  87. package/dist/cli-JJMOVIKS.js.map +1 -0
  88. package/dist/{cli-TPONWND4.js → cli-O4ABTN4Z.js} +25 -21
  89. package/dist/{cli-TPONWND4.js.map → cli-O4ABTN4Z.js.map} +1 -1
  90. package/dist/{cli-URNPOMOH.js → cli-ONTC5PKT.js} +3 -3
  91. package/dist/{cli-BJ7JXJ2U.js → cli-RORDPAPE.js} +17 -14
  92. package/dist/{cli-BJ7JXJ2U.js.map → cli-RORDPAPE.js.map} +1 -1
  93. package/dist/{cli-B7SFJDZA.js → cli-VID7PJS3.js} +17 -13
  94. package/dist/{cli-B7SFJDZA.js.map → cli-VID7PJS3.js.map} +1 -1
  95. package/dist/cli-VUKMWSSF.js +839 -0
  96. package/dist/cli-VUKMWSSF.js.map +1 -0
  97. package/dist/cli.js +24 -11
  98. package/dist/cli.js.map +1 -1
  99. package/dist/{config-YWSNBFEE.js → config-XDA42RJL.js} +3 -3
  100. package/dist/docmeta.js +9 -7
  101. package/dist/docmeta.js.map +1 -1
  102. package/dist/github-RY3FRA6P.js +29 -0
  103. package/dist/github-YKQSH7FS.js +34 -0
  104. package/dist/index.d.ts +1023 -915
  105. package/dist/index.js +107 -81
  106. package/dist/index.js.map +1 -1
  107. package/dist/{json-JIUPGOUQ.js → json-BXY44ED7.js} +13 -10
  108. package/dist/lint-YJ2L22BW.js +33 -0
  109. package/dist/list-NSG24VVX.js +31 -0
  110. package/dist/list-V6EGCSHX.js +34 -0
  111. package/dist/{page-WQ3GQF76.js → page-EV7OUBAU.js} +12 -9
  112. package/dist/{prepare-ZUTYXTUZ.js → prepare-JHJDJB6I.js} +17 -14
  113. package/dist/{prepare-ZUTYXTUZ.js.map → prepare-JHJDJB6I.js.map} +1 -1
  114. package/dist/{pretty-Q3C433DW.js → pretty-Q5Y2PA64.js} +14 -11
  115. package/dist/{pretty-CBV5XSMZ.js → pretty-SCRK66M5.js} +13 -10
  116. package/dist/{reporters-DH5HPFXJ.js → reporters-A5ADKDYR.js} +12 -9
  117. package/dist/{reporters-TTYGOUAF.js → reporters-RBYTASMI.js} +5 -5
  118. package/dist/run-BUE2DDXN.js +36 -0
  119. package/dist/{term-DL3YFL43.js → term-CQAGNG3Q.js} +17 -14
  120. package/dist/{term-DL3YFL43.js.map → term-CQAGNG3Q.js.map} +1 -1
  121. package/dist/{validate-UVDMC5LT.js → validate-ZBW44RHT.js} +6 -5
  122. package/dist/validate-ZBW44RHT.js.map +1 -0
  123. package/package.json +1 -1
  124. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  125. package/dist/calibrate-XFE56P4M.js +0 -36
  126. package/dist/check-HBRX4FOR.js +0 -26
  127. package/dist/chunk-IN6DWNVE.js.map +0 -1
  128. package/dist/chunk-KX5IYIOO.js.map +0 -1
  129. package/dist/chunk-QCCAHV6A.js.map +0 -1
  130. package/dist/chunk-XG6PVB5S.js.map +0 -1
  131. package/dist/chunk-XKBEHKWO.js.map +0 -1
  132. package/dist/cli-ZJRHU7MO.js.map +0 -1
  133. package/dist/github-63CZJGZS.js +0 -31
  134. package/dist/github-IYOVHWHG.js +0 -26
  135. package/dist/lint-TBE35CCW.js +0 -29
  136. package/dist/list-IZ4RIM72.js +0 -30
  137. package/dist/list-TNEJ3J77.js +0 -28
  138. package/dist/run-LZXKVTM7.js +0 -32
  139. /package/dist/{batch-W5GXL2P4.js.map → batch-UAULUMGH.js.map} +0 -0
  140. /package/dist/{build-Q56FEXR6.js.map → build-QSPNK5AL.js.map} +0 -0
  141. /package/dist/{calibrate-XFE56P4M.js.map → calibrate-KXN4URPM.js.map} +0 -0
  142. /package/dist/{capture-GMYH4ATL.js.map → capture-JHTSUPUC.js.map} +0 -0
  143. /package/dist/{check-HBRX4FOR.js.map → check-MDGXEUWL.js.map} +0 -0
  144. /package/dist/{check-OAJWC3WD.js.map → check-WOQRKNZK.js.map} +0 -0
  145. /package/dist/{check-ZE5HIDOW.js.map → check-YEOYBFST.js.map} +0 -0
  146. /package/dist/{chunk-FGUXMZXO.js.map → chunk-2DRHT73U.js.map} +0 -0
  147. /package/dist/{chunk-XHFHXOQQ.js.map → chunk-2IAZEB45.js.map} +0 -0
  148. /package/dist/{chunk-35WTFPQS.js.map → chunk-2IR4T5PO.js.map} +0 -0
  149. /package/dist/{chunk-OWSNXPPX.js.map → chunk-4CK6ZSOK.js.map} +0 -0
  150. /package/dist/{chunk-YUZ2ECZY.js.map → chunk-4D5IZSXM.js.map} +0 -0
  151. /package/dist/{chunk-RFSGKF4O.js.map → chunk-4VBSTXN6.js.map} +0 -0
  152. /package/dist/{chunk-GEMXGXPR.js.map → chunk-ADMEPUBT.js.map} +0 -0
  153. /package/dist/{chunk-23UAGEKP.js.map → chunk-B7XYNRJQ.js.map} +0 -0
  154. /package/dist/{chunk-QKE3XS2L.js.map → chunk-BBT6AVUG.js.map} +0 -0
  155. /package/dist/{chunk-VKWZCEWB.js.map → chunk-BKVHX6FU.js.map} +0 -0
  156. /package/dist/{chunk-X6WLCNKC.js.map → chunk-D4N2V43Z.js.map} +0 -0
  157. /package/dist/{chunk-XXDXIIQ4.js.map → chunk-EFW7CAG4.js.map} +0 -0
  158. /package/dist/{chunk-UDUHRXJ4.js.map → chunk-EIFCP6CZ.js.map} +0 -0
  159. /package/dist/{chunk-KPXOJMQ6.js.map → chunk-FBMZJEB3.js.map} +0 -0
  160. /package/dist/{chunk-HRXDM6H6.js.map → chunk-FQXWVS6J.js.map} +0 -0
  161. /package/dist/{chunk-76I6I5N2.js.map → chunk-FUCPZVRY.js.map} +0 -0
  162. /package/dist/{chunk-DTGIUMZV.js.map → chunk-GDVZ5VII.js.map} +0 -0
  163. /package/dist/{chunk-TKTRIZT4.js.map → chunk-HA6MQMOY.js.map} +0 -0
  164. /package/dist/{chunk-ECVQNGTH.js.map → chunk-HQR2ZBHW.js.map} +0 -0
  165. /package/dist/{chunk-MHAYLDBK.js.map → chunk-IGSHYP74.js.map} +0 -0
  166. /package/dist/{chunk-YEUQ7OKT.js.map → chunk-J6IDQGJL.js.map} +0 -0
  167. /package/dist/{chunk-5LBEQ4ZU.js.map → chunk-JPQDNYXH.js.map} +0 -0
  168. /package/dist/{chunk-6KKZXB2O.js.map → chunk-JROBZ7JA.js.map} +0 -0
  169. /package/dist/{chunk-2EHDJ47Y.js.map → chunk-LBSCW232.js.map} +0 -0
  170. /package/dist/{chunk-M6GH3FGJ.js.map → chunk-LKP7QDFN.js.map} +0 -0
  171. /package/dist/{chunk-5EB6RIXJ.js.map → chunk-LPIF5LIE.js.map} +0 -0
  172. /package/dist/{chunk-ND2S5BXB.js.map → chunk-MSRU4D4P.js.map} +0 -0
  173. /package/dist/{chunk-BSTXARMY.js.map → chunk-NSBXVPZL.js.map} +0 -0
  174. /package/dist/{chunk-Q45PZX2D.js.map → chunk-ODRPL3WB.js.map} +0 -0
  175. /package/dist/{chunk-FSBIPCWE.js.map → chunk-OPXWPJDA.js.map} +0 -0
  176. /package/dist/{chunk-QAKJNPY3.js.map → chunk-PCS4VJBV.js.map} +0 -0
  177. /package/dist/{chunk-GRILZZGS.js.map → chunk-PWBH7DCQ.js.map} +0 -0
  178. /package/dist/{chunk-XTAHZTES.js.map → chunk-R4WXQIOZ.js.map} +0 -0
  179. /package/dist/{chunk-3CDZWY6M.js.map → chunk-RLT5SEML.js.map} +0 -0
  180. /package/dist/{cli-J35OPSTP.js.map → chunk-TU2WUBVZ.js.map} +0 -0
  181. /package/dist/{chunk-OVOYKWCM.js.map → chunk-WDWXAYVH.js.map} +0 -0
  182. /package/dist/{config-YWSNBFEE.js.map → cli-I62SRH3R.js.map} +0 -0
  183. /package/dist/{cli-URNPOMOH.js.map → cli-ONTC5PKT.js.map} +0 -0
  184. /package/dist/{github-63CZJGZS.js.map → config-XDA42RJL.js.map} +0 -0
  185. /package/dist/{github-IYOVHWHG.js.map → github-RY3FRA6P.js.map} +0 -0
  186. /package/dist/{json-JIUPGOUQ.js.map → github-YKQSH7FS.js.map} +0 -0
  187. /package/dist/{lint-TBE35CCW.js.map → json-BXY44ED7.js.map} +0 -0
  188. /package/dist/{list-IZ4RIM72.js.map → lint-YJ2L22BW.js.map} +0 -0
  189. /package/dist/{list-TNEJ3J77.js.map → list-NSG24VVX.js.map} +0 -0
  190. /package/dist/{page-WQ3GQF76.js.map → list-V6EGCSHX.js.map} +0 -0
  191. /package/dist/{pretty-CBV5XSMZ.js.map → page-EV7OUBAU.js.map} +0 -0
  192. /package/dist/{pretty-Q3C433DW.js.map → pretty-Q5Y2PA64.js.map} +0 -0
  193. /package/dist/{reporters-DH5HPFXJ.js.map → pretty-SCRK66M5.js.map} +0 -0
  194. /package/dist/{reporters-TTYGOUAF.js.map → reporters-A5ADKDYR.js.map} +0 -0
  195. /package/dist/{run-LZXKVTM7.js.map → reporters-RBYTASMI.js.map} +0 -0
  196. /package/dist/{validate-UVDMC5LT.js.map → run-BUE2DDXN.js.map} +0 -0
@@ -11,20 +11,21 @@ import {
11
11
  runPromote,
12
12
  runReview,
13
13
  seedGoldenCases
14
- } from "./chunk-3CDZWY6M.js";
14
+ } from "./chunk-RLT5SEML.js";
15
15
  import {
16
16
  renderList,
17
17
  runList
18
- } from "./chunk-UDUHRXJ4.js";
18
+ } from "./chunk-EIFCP6CZ.js";
19
19
  import {
20
20
  runRun
21
- } from "./chunk-TKTRIZT4.js";
22
- import "./chunk-Q2H7J3FF.js";
23
- import "./chunk-XG6PVB5S.js";
21
+ } from "./chunk-HA6MQMOY.js";
22
+ import "./chunk-U7CTFN2J.js";
23
+ import "./chunk-SSQZB5SQ.js";
24
24
  import {
25
25
  allowExecutionMessage,
26
26
  isExecutionGrant
27
27
  } from "./chunk-YNHZHSSM.js";
28
+ import "./chunk-ZPLVANY2.js";
28
29
  import {
29
30
  render
30
31
  } from "./chunk-NCPWXHDO.js";
@@ -37,16 +38,19 @@ import {
37
38
  DocevalsError
38
39
  } from "./chunk-SE4JN5XN.js";
39
40
  import "./chunk-77AINBYM.js";
40
- import "./chunk-M6GH3FGJ.js";
41
+ import "./chunk-TU2WUBVZ.js";
42
+ import "./chunk-LKP7QDFN.js";
41
43
  import {
42
44
  terminalConfirm
43
- } from "./chunk-IN6DWNVE.js";
45
+ } from "./chunk-6HWBRZIN.js";
46
+ import "./chunk-M42DZCOU.js";
47
+ import "./chunk-PCQ7ELJH.js";
44
48
  import {
45
49
  collect,
46
50
  configOption
47
- } from "./chunk-QCCAHV6A.js";
48
- import "./chunk-X6WLCNKC.js";
49
- import "./chunk-3XGGF5JW.js";
51
+ } from "./chunk-GV56WGL2.js";
52
+ import "./chunk-D4N2V43Z.js";
53
+ import "./chunk-VSEBFHAY.js";
50
54
  import {
51
55
  fail
52
56
  } from "./chunk-YEUYKR62.js";
@@ -55,7 +59,7 @@ import {
55
59
  palette
56
60
  } from "./chunk-RNVYGWIC.js";
57
61
  import "./chunk-MNH7QO4Z.js";
58
- import "./chunk-XKBEHKWO.js";
62
+ import "./chunk-QLWC7MKD.js";
59
63
  import {
60
64
  notice
61
65
  } from "./chunk-HX44GB4Z.js";
@@ -64,7 +68,7 @@ import {
64
68
  } from "./chunk-QCHVR4ZM.js";
65
69
  import {
66
70
  package_default
67
- } from "./chunk-KX5IYIOO.js";
71
+ } from "./chunk-2MJ62AYQ.js";
68
72
  import "./chunk-OWBRDNRZ.js";
69
73
  import "./chunk-G3T47CFV.js";
70
74
  import "./chunk-2H7UOFLK.js";
@@ -470,4 +474,4 @@ export {
470
474
  buildProgram,
471
475
  colorFor
472
476
  };
473
- //# sourceMappingURL=cli-B7SFJDZA.js.map
477
+ //# sourceMappingURL=cli-VID7PJS3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/docevals/cli.ts"],"sourcesContent":["/**\n * The docevals program. Named `docevals` because that is where it is mounted\n * (`manni docevals …`); `src/cli.ts` adds it to the umbrella and runs it.\n */\nimport { Command } from \"commander\";\nimport pkg from \"../../package.json\" with { type: \"json\" };\nimport { fail } from \"../shared/run.js\";\nimport { notice } from \"../shared/warn.js\";\nimport { terminalConfirm } from \"../shared/prompt.js\";\nimport { collect, configOption } from \"../shared/cli-options.js\";\nimport { LOCAL_FLAG_HELP } from \"../shared/providers.js\";\nimport type { DocumentInputOptions } from \"./core/discover.js\";\nimport { colorFor, palette } from \"../shared/color.js\";\nimport { DocevalsError } from \"./types.js\";\nimport { allowExecutionMessage, isExecutionGrant } from \"../shared/execution.js\";\nimport { runList, renderList } from \"./commands/list.js\";\nimport { runRun } from \"./commands/run.js\";\nimport { runGenerate } from \"./commands/generate.js\";\nimport { runFill, renderFill } from \"./commands/fill.js\";\nimport { runPromote } from \"./commands/promote.js\";\nimport { listReviews, renderReviews, runReview } from \"./commands/review.js\";\nimport {\n runCalibrate,\n renderCalibration,\n seedGoldenCases,\n} from \"./commands/calibrate.js\";\nimport { runInit } from \"./commands/init.js\";\nimport {\n render,\n parseFormat,\n REPORT_FORMATS,\n SUMMARY_FORMATS,\n type ReportFormat,\n type SummaryFormat,\n} from \"./reporters/index.js\";\n\n/**\n * Whether `command`'s output gets colour: the family's rule, read off this\n * domain's `--no-color`. Exported for the tests that pin it.\n */\nexport { colorFor };\n\nexport function buildProgram(): Command {\n const program = new Command();\n\n program\n .name(\"docevals\")\n .description(\n \"Deterministic and LLM-as-judge evals for documentation pages, driven by frontmatter.\",\n )\n .version(pkg.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\n /**\n * Repeatable execution grant, validated on the way in.\n *\n * An unknown value is a usage error rather than a silent no-op (ADR 01007, the\n * same rule `--format` follows): a mistyped grant that quietly granted nothing\n * would skip every command eval and still exit 0, which reads as \"the corpus\n * is clean\" rather than \"you misspelled a flag\".\n */\n function collectGrant(value: string, previous: string[]): string[] {\n if (!isExecutionGrant(value)) {\n fail(new DocevalsError(allowExecutionMessage(value)));\n }\n return [...previous, value];\n }\n\n function parseIntArg(name: string) {\n return (value: string): number => {\n const n = Number.parseInt(value, 10);\n if (Number.isNaN(n) || n < 1) {\n fail(new DocevalsError(`${name} must be a positive integer, got \"${value}\"`));\n }\n return n;\n };\n }\n\n /**\n * Repeatable single-value option, e.g. `--eval a --eval b`.\n *\n * NOT commander's variadic `<name...>`: a variadic consumes every following\n * non-option token, so `run --eval fresh-enough docs/guide.md` parsed the glob\n * as a second eval name and left `globs` empty — silently widening the run to\n * the whole configured corpus, which is the opposite of what selection is for.\n */\n function collectArg(value: string, previous: string[]): string[] {\n return [...previous, value];\n }\n\n function parseFloatArg(name: string) {\n return (value: string): number => {\n const n = Number.parseFloat(value);\n if (Number.isNaN(n) || n < 0) {\n fail(new DocevalsError(`${name} must be a non-negative number, got \"${value}\"`));\n }\n return n;\n };\n }\n\n /**\n * Commander argument parser for `-f/--format` (ADR 01007). Routes through\n * `fail()` for the same reason the numeric parsers do: commander only special-\n * cases InvalidArgumentError, so any other exception escapes `program.parse()`\n * uncaught — a stack trace and exit 1, when a bad flag owes exit 2.\n */\n function 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\n /**\n * The document-set surface every verb that reads pages shares (proposal\n * 0041): positional `[paths...]`, `--collection` and `--exclude` (each one\n * value per occurrence), and `-c`/`--no-config`. Declared once so the five\n * verbs cannot drift apart on a name or a description.\n */\n function documentInputs(command: Command, verb: string): Command {\n return command\n .argument(\n \"[paths...]\",\n `Files, directories, or globs to ${verb} (default: the configured collections)`,\n )\n .option(\n \"--collection <name>\",\n \"Configured collection to read (repeatable)\",\n collect,\n [],\n )\n .option(\"--exclude <glob>\", \"Glob to exclude (repeatable)\", collect, [])\n .option(\"-c, --config <path>\", \"Path to manni.config.yaml\")\n .option(\"--no-config\", \"Ignore any discovered config file\");\n }\n\n /** The shared options as the command cores take them. */\n function documentOptions(opts: {\n collection?: string[];\n exclude?: string[];\n config?: string | boolean;\n }): DocumentInputOptions {\n const { configPath, noConfig } = configOption(opts.config);\n return {\n ...(configPath === undefined ? {} : { config: configPath }),\n ...(noConfig === true ? { noConfig } : {}),\n ...(opts.collection === undefined ? {} : { collection: opts.collection }),\n ...(opts.exclude === undefined ? {} : { exclude: opts.exclude }),\n };\n }\n\n documentInputs(\n program\n .command(\"list\")\n .description(\"Show the resolved eval plan per page without running anything\"),\n \"list\",\n )\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .option(\"--eval <name>\", \"Show only this eval (repeatable)\", collectArg, [])\n .option(\"--suite <name>\", \"Show only evals in this suite\")\n .action(\n async (\n paths: string[],\n opts: {\n config?: string | boolean;\n collection?: string[];\n exclude?: string[];\n format: SummaryFormat;\n eval?: string[];\n suite?: string;\n },\n command: Command,\n ) => {\n try {\n const run = await runList(paths, {\n ...documentOptions(opts),\n format: opts.format,\n evalNames: opts.eval,\n suite: opts.suite,\n });\n console.log(\n renderList(run, opts.format, {\n color: colorFor(command, process.stdout.isTTY),\n }),\n );\n process.exitCode = run.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n documentInputs(\n program.command(\"run\").description(\"Run evals against documentation pages\"),\n \"evaluate\",\n )\n .option(\n \"-f, --format <format>\",\n `Output format: ${REPORT_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", REPORT_FORMATS),\n \"pretty\" as ReportFormat,\n )\n .option(\"--deterministic-only\", \"Run only command/tool graders, skip the AI judge\")\n .option(\"--ai-only\", \"Run only AI-judged evals, skip deterministic graders\")\n .option(\n // `<kind>`, not `<kind...>`: a variadic option greedily eats the\n // positional `[paths...]` that follow it, so `--allow-execution\n // frontmatter-commands docs/**` would silently swallow the glob and run\n // over the default file set instead. Repeat the flag to grant twice.\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(\"--no-generate\", \"Do not generate scripts for command evals missing a command\")\n .option(\"--no-cache\", \"Bypass the judge response cache\")\n .option(\"--fail-on-review\", \"Exit 1 when any eval lands in the human-review zone\")\n .option(\"--provider <name>\", \"Judge provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\")\n .option(\"--model <model>\", \"Model override; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .option(\"--runs <n>\", \"Ensemble runs per eval\", parseIntArg(\"--runs\"))\n .option(\n \"--chunk-chars <n>\",\n \"Characters of page per judge call; longer pages are read in parts\",\n parseIntArg(\"--chunk-chars\"),\n )\n .option(\n \"--eval <name>\",\n \"Run only this eval (repeatable); suite targets are not evaluated on a filtered run\",\n collectArg,\n [],\n )\n .option(\"--suite <name>\", \"Run only evals in this suite\")\n .option(\n \"--since <ref>\",\n \"Evaluate only pages whose file or eval manifest changed between this git ref and HEAD\",\n )\n .option(\n \"--newer-than <duration>\",\n \"Evaluate only pages whose file or eval manifest changed within this window, \" +\n \"such as 30m, 24h, 7d or 2w; in CI, prefer --since\",\n )\n .option(\n \"--max-turns <n>\",\n \"Stop after this many ensemble runs (a cached ensemble costs none)\",\n parseIntArg(\"--max-turns\"),\n )\n .option(\n \"--baseline [path]\",\n \"Fail only on findings a recorded baseline does not already hold\",\n )\n .option(\"--no-baseline\", \"Ignore the configured baseline for this run\")\n .option(\n \"--write-baseline [path]\",\n \"Record this run's findings as the baseline; without a path, the configured one\",\n )\n .action(async (paths: string[], opts: Record<string, unknown>, command: Command) => {\n try {\n const report = await runRun(paths, {\n ...documentOptions({\n config: opts.config as string | boolean | undefined,\n collection: opts.collection as string[] | undefined,\n exclude: opts.exclude as string[] | undefined,\n }),\n // parseFormatArg validated this at parse time; the cast only re-narrows\n // from the `unknown` that the Record-typed options bag erases it to.\n format: opts.format as ReportFormat,\n deterministicOnly: opts.deterministicOnly as boolean | undefined,\n aiOnly: opts.aiOnly as boolean | undefined,\n // Commander's default is `[]`, which is \"no flag\", not \"run nothing\":\n // only a list someone typed narrows the run.\n allowExecution:\n (opts.allowExecution as string[]).length > 0\n ? (opts.allowExecution as string[])\n : undefined,\n execution: opts.execution as boolean | undefined,\n generate: opts.generate as boolean | undefined,\n cache: opts.cache as boolean | undefined,\n failOnReview: opts.failOnReview as boolean | undefined,\n provider: opts.provider as string | undefined,\n model: opts.model as string | undefined,\n local: opts.local as boolean | undefined,\n runs: opts.runs as number | undefined,\n chunkChars: opts.chunkChars as number | undefined,\n maxTurns: opts.maxTurns as number | undefined,\n evalNames: opts.eval as string[] | undefined,\n suite: opts.suite as string | undefined,\n since: opts.since as string | undefined,\n newerThan: opts.newerThan as string | undefined,\n // commander collapses `--baseline` to true and `--no-baseline` to\n // false on the same key; a string is an explicit path.\n baseline: opts.baseline as string | boolean | undefined,\n writeBaseline: opts.writeBaseline as string | boolean | undefined,\n toolVersion: pkg.version,\n });\n console.log(\n render(report, opts.format as ReportFormat, {\n color: colorFor(command, process.stdout.isTTY),\n }),\n );\n process.exitCode = report.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n documentInputs(\n program\n .command(\"generate\")\n .description(\n \"Generate check scripts for command evals with a plain-language assertion but no command\",\n ),\n \"read\",\n )\n .option(\"--provider <name>\", \"Provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\")\n .option(\"--model <model>\", \"Model override; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .action(\n async (\n paths: string[],\n opts: {\n config?: string | boolean;\n collection?: string[];\n exclude?: string[];\n provider?: string;\n model?: string;\n local?: boolean;\n },\n command: Command,\n ) => {\n try {\n const pc = palette(colorFor(command, process.stdout.isTTY));\n const result = await runGenerate(paths, {\n ...documentOptions(opts),\n provider: opts.provider,\n model: opts.model,\n local: opts.local,\n });\n if (result.targets === 0) {\n console.log(\"Nothing to generate — every command eval has a command.\");\n return;\n }\n console.log(\n `Generated ${result.generatedPaths.length}/${result.targets} check script(s):`,\n );\n for (const p of result.generatedPaths) console.log(` ${p}`);\n // Evals whose command reference had nowhere to go (proposal 0047).\n for (const r of result.refusals) console.log(pc.red(` ${r.message}`));\n if (result.generatedPaths.length < result.targets) {\n process.exitCode = 1;\n }\n } catch (e) {\n fail(e);\n }\n },\n );\n\n documentInputs(\n program\n .command(\"fill\")\n .description(\n \"Propose frontmatter evals for pages with an LLM; writes proposals at or above the confidence threshold\",\n ),\n \"fill\",\n )\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .option(\"--dry-run\", \"Report proposals without writing frontmatter\")\n .option(\n \"--confidence <n>\",\n \"Minimum confidence to write (0-1, default: config fill.confidenceThreshold)\",\n parseFloatArg(\"--confidence\"),\n )\n .option(\n \"--max-turns <n>\",\n \"Stop after this many inference calls (a cached page costs none)\",\n parseIntArg(\"--max-turns\"),\n )\n .option(\"--no-cache\", \"Bypass the fill proposal cache\")\n .option(\n \"--chunk-chars <n>\",\n \"Characters of page per fill call; longer pages are proposed in parts\",\n parseIntArg(\"--chunk-chars\"),\n )\n .option(\"--provider <name>\", \"Provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\")\n .option(\"--model <model>\", \"Model override; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .action(async (paths: string[], opts: Record<string, unknown>, command: Command) => {\n try {\n const confidence = opts.confidence as number | undefined;\n if (confidence !== undefined && confidence > 1) {\n fail(new DocevalsError(`--confidence must be between 0 and 1, got ${confidence}`));\n }\n const report = await runFill(paths, {\n ...documentOptions({\n config: opts.config as string | boolean | undefined,\n collection: opts.collection as string[] | undefined,\n exclude: opts.exclude as string[] | undefined,\n }),\n dryRun: opts.dryRun as boolean | undefined,\n confidence,\n maxTurns: opts.maxTurns as number | undefined,\n noCache: opts.cache === false ? true : undefined,\n provider: opts.provider as string | undefined,\n model: opts.model as string | undefined,\n local: opts.local as boolean | undefined,\n // P1 (proposal 0047): offered only on a terminal, where there is\n // someone to answer. Off one the evals go to the page and the W1\n // line says so.\n confirm: terminalConfirm(),\n onNotice: notice,\n onRelocated: (result) => {\n const manifests = result.manifests.map((m) => m.file).join(\", \");\n notice(\n `moved ${String(result.summary.moved)} value(s) into ${manifests}.`,\n );\n },\n });\n // As in `run`: parseFormatArg validated this at parse time, and the cast\n // only re-narrows from the `unknown` the Record-typed options bag erases\n // it to. renderFill guards itself regardless.\n console.log(\n renderFill(report, opts.format as SummaryFormat, {\n color: colorFor(command, process.stdout.isTTY),\n }),\n );\n process.exitCode = report.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n documentInputs(\n program\n .command(\"promote\")\n .description(\n \"Find ai-graded evals expressible as deterministic checks; --write converts them\",\n ),\n \"read\",\n )\n .option(\"--write\", \"Apply promotions (write scripts and rewrite evals)\")\n .option(\"--provider <name>\", \"Provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\")\n .option(\"--model <model>\", \"Model override; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .action(\n async (\n paths: string[],\n opts: {\n config?: string | boolean;\n collection?: string[];\n exclude?: string[];\n write?: boolean;\n provider?: string;\n model?: string;\n local?: boolean;\n },\n command: Command,\n ) => {\n try {\n const pc = palette(colorFor(command, process.stdout.isTTY));\n const proposals = await runPromote(paths, {\n ...documentOptions(opts),\n write: opts.write,\n provider: opts.provider,\n model: opts.model,\n local: opts.local,\n });\n if (proposals.length === 0) {\n console.log(\"No ai-graded evals found.\");\n return;\n }\n for (const p of proposals) {\n const tag = p.promotable\n ? p.applied\n ? pc.green(\"promoted\")\n : pc.cyan(\"promotable\")\n : pc.dim(\"keep-ai\");\n const script = p.scriptPath ? pc.dim(` -> ${p.scriptPath}`) : \"\";\n console.log(`${tag} ${p.evalName} (${p.source}, ${p.file})${script}`);\n console.log(pc.dim(` ${p.rationale}`));\n // Promotable, and nowhere to write it (proposal 0047).\n if (p.error !== undefined) console.log(pc.red(` ${p.error}`));\n }\n if (!opts.write && proposals.some((p) => p.promotable)) {\n console.log(pc.cyan(\"\\nRe-run with --write to apply promotions.\"));\n }\n } catch (e) {\n fail(e);\n }\n },\n );\n\n program\n .command(\"calibrate\")\n .description(\n \"Measure judge agreement against a human-verified golden set (.manni/docevals/golden/*.yaml)\",\n )\n .option(\"-c, --config <path>\", \"Path to manni.config.yaml\")\n .option(\"--golden <dir>\", \"Golden set directory\", \".manni/docevals/golden\")\n .option(\n \"--seed\",\n \"Write golden candidates from recorded reviews and exit; judges nothing, needs no provider\",\n )\n .option(\"--provider <name>\", \"Provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\")\n .option(\"--model <model>\", \"Model override; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .option(\"--runs <n>\", \"Ensemble runs per case\", parseIntArg(\"--runs\"))\n .option(\n \"--max-turns <n>\",\n \"Stop after this many ensemble runs (a cached ensemble costs none)\",\n parseIntArg(\"--max-turns\"),\n )\n .option(\"--no-cache\", \"Bypass the judge response cache\")\n .action(\n async (opts: {\n config?: string;\n golden?: string;\n seed?: boolean;\n provider?: string;\n model?: string;\n local?: boolean;\n runs?: number;\n maxTurns?: number;\n cache?: boolean;\n }, command: Command) => {\n try {\n const color = colorFor(command, process.stdout.isTTY);\n const pc = palette(color);\n if (opts.seed) {\n // No `config`: reviews.yaml and the golden directory both resolve\n // against the working directory, not the config's, so passing it\n // would imply an influence it does not have.\n const seeded = seedGoldenCases({ golden: opts.golden });\n if (seeded.total === 0) {\n console.log(\n \"No recorded reviews to seed from — run `manni docevals review <file> <eval> <pass|fail>` first.\",\n );\n return;\n }\n // The lead number is what moved, not the file's size: `total`\n // counts cases already confirmed and left alone, so leading with it\n // read as \"wrote 8 candidates\" on a re-seed that wrote none.\n const changed = seeded.added + seeded.updated;\n console.log(\n changed === 0\n ? `No new reviews to seed — ${seeded.total} golden case(s) already in ${seeded.path}.`\n : `Wrote ${changed} golden candidate(s) to ${seeded.path} ` +\n `(${seeded.added} new, ${seeded.updated} updated; ${seeded.total} total).`,\n );\n if (seeded.unreviewed > 0) {\n console.log(\n pc.yellow(\n `${seeded.unreviewed} case(s) are \\`reviewed: false\\`. Read them and set ` +\n \"`reviewed: true` — a golden set assembled without a human is not one.\",\n ),\n );\n }\n return;\n }\n const report = await runCalibrate({\n config: opts.config,\n golden: opts.golden,\n provider: opts.provider,\n model: opts.model,\n local: opts.local,\n runs: opts.runs,\n maxTurns: opts.maxTurns,\n noCache: opts.cache === false,\n });\n console.log(renderCalibration(report, { color }));\n // Both conditions: the judge has to agree enough, AND the set has to\n // have been measured. A stale golden file whose pages were renamed\n // used to certify on whatever still resolved.\n process.exitCode =\n report.meetsThreshold &&\n report.unjudged === 0 &&\n report.balanced\n ? 0\n : 1;\n } catch (e) {\n fail(e);\n }\n },\n );\n\n program\n .command(\"init\")\n .description(\"Create a starter manni.config.yaml in the current directory\")\n .action(() => {\n try {\n console.log(`Created ${runInit()}`);\n } catch (e) {\n fail(e);\n }\n });\n\n program\n .command(\"review\")\n .description(\n \"Record a human verdict for an eval in the human-review zone (or list recorded reviews)\",\n )\n .argument(\"[file]\", \"Page path\")\n .argument(\"[eval]\", \"Eval name\")\n .argument(\"[verdict]\", \"pass | fail\")\n .option(\"--reviewer <name>\", \"Reviewer name recorded with the verdict\")\n .option(\"--note <text>\", \"Optional note\")\n .action(\n (\n file: string | undefined,\n evalName: string | undefined,\n verdict: string | undefined,\n opts: { reviewer?: string; note?: string },\n command: Command,\n ) => {\n try {\n if (!file) {\n console.log(\n renderReviews(listReviews(), {\n color: colorFor(command, process.stdout.isTTY),\n }),\n );\n return;\n }\n if (!evalName || !verdict) {\n throw new DocevalsError(\n \"Usage: manni docevals review <file> <eval> <pass|fail>\",\n );\n }\n const entry = runReview(file, evalName, verdict, opts);\n console.log(\n `Recorded ${entry.verdict} for ${entry.evalName} on ${entry.file}`,\n );\n } catch (e) {\n fail(e);\n }\n },\n );\n\n return program;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/docevals/cli.ts"],"sourcesContent":["/**\n * The docevals program. Named `docevals` because that is where it is mounted\n * (`manni docevals …`); `src/cli.ts` adds it to the umbrella and runs it.\n */\nimport { Command } from \"commander\";\nimport pkg from \"../../package.json\" with { type: \"json\" };\nimport { fail } from \"../shared/run.js\";\nimport { notice } from \"../shared/warn.js\";\nimport { terminalConfirm } from \"../shared/prompt.js\";\nimport { collect, configOption } from \"../shared/cli-options.js\";\nimport { LOCAL_FLAG_HELP } from \"../shared/providers.js\";\nimport type { DocumentInputOptions } from \"./core/discover.js\";\nimport { colorFor, palette } from \"../shared/color.js\";\nimport { DocevalsError } from \"./types.js\";\nimport { allowExecutionMessage, isExecutionGrant } from \"../shared/execution.js\";\nimport { runList, renderList } from \"./commands/list.js\";\nimport { runRun } from \"./commands/run.js\";\nimport { runGenerate } from \"./commands/generate.js\";\nimport { runFill, renderFill } from \"./commands/fill.js\";\nimport { runPromote } from \"./commands/promote.js\";\nimport { listReviews, renderReviews, runReview } from \"./commands/review.js\";\nimport {\n runCalibrate,\n renderCalibration,\n seedGoldenCases,\n} from \"./commands/calibrate.js\";\nimport { runInit } from \"./commands/init.js\";\nimport {\n render,\n parseFormat,\n REPORT_FORMATS,\n SUMMARY_FORMATS,\n type ReportFormat,\n type SummaryFormat,\n} from \"./reporters/index.js\";\n\n/**\n * Whether `command`'s output gets colour: the family's rule, read off this\n * domain's `--no-color`. Exported for the tests that pin it.\n */\nexport { colorFor };\n\nexport function buildProgram(): Command {\n const program = new Command();\n\n program\n .name(\"docevals\")\n .description(\n \"Deterministic and LLM-as-judge evals for documentation pages, driven by frontmatter.\",\n )\n .version(pkg.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\n /**\n * Repeatable execution grant, validated on the way in.\n *\n * An unknown value is a usage error rather than a silent no-op (ADR 01007, the\n * same rule `--format` follows): a mistyped grant that quietly granted nothing\n * would skip every command eval and still exit 0, which reads as \"the corpus\n * is clean\" rather than \"you misspelled a flag\".\n */\n function collectGrant(value: string, previous: string[]): string[] {\n if (!isExecutionGrant(value)) {\n fail(new DocevalsError(allowExecutionMessage(value)));\n }\n return [...previous, value];\n }\n\n function parseIntArg(name: string) {\n return (value: string): number => {\n const n = Number.parseInt(value, 10);\n if (Number.isNaN(n) || n < 1) {\n fail(new DocevalsError(`${name} must be a positive integer, got \"${value}\"`));\n }\n return n;\n };\n }\n\n /**\n * Repeatable single-value option, e.g. `--eval a --eval b`.\n *\n * NOT commander's variadic `<name...>`: a variadic consumes every following\n * non-option token, so `run --eval fresh-enough docs/guide.md` parsed the glob\n * as a second eval name and left `globs` empty — silently widening the run to\n * the whole configured corpus, which is the opposite of what selection is for.\n */\n function collectArg(value: string, previous: string[]): string[] {\n return [...previous, value];\n }\n\n function parseFloatArg(name: string) {\n return (value: string): number => {\n const n = Number.parseFloat(value);\n if (Number.isNaN(n) || n < 0) {\n fail(new DocevalsError(`${name} must be a non-negative number, got \"${value}\"`));\n }\n return n;\n };\n }\n\n /**\n * Commander argument parser for `-f/--format` (ADR 01007). Routes through\n * `fail()` for the same reason the numeric parsers do: commander only special-\n * cases InvalidArgumentError, so any other exception escapes `program.parse()`\n * uncaught — a stack trace and exit 1, when a bad flag owes exit 2.\n */\n function 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\n /**\n * The document-set surface every verb that reads pages shares (proposal\n * 0041): positional `[paths...]`, `--collection` and `--exclude` (each one\n * value per occurrence), and `-c`/`--no-config`. Declared once so the five\n * verbs cannot drift apart on a name or a description.\n */\n function documentInputs(command: Command, verb: string): Command {\n return command\n .argument(\n \"[paths...]\",\n `Files, directories, or globs to ${verb} (default: the configured collections)`,\n )\n .option(\n \"--collection <name>\",\n \"Configured collection to read (repeatable)\",\n collect,\n [],\n )\n .option(\"--exclude <glob>\", \"Glob to exclude (repeatable)\", collect, [])\n .option(\"-c, --config <path>\", \"Path to manni.config.yaml\")\n .option(\"--no-config\", \"Ignore any discovered config file\");\n }\n\n /** The shared options as the command cores take them. */\n function documentOptions(opts: {\n collection?: string[];\n exclude?: string[];\n config?: string | boolean;\n }): DocumentInputOptions {\n const { configPath, noConfig } = configOption(opts.config);\n return {\n ...(configPath === undefined ? {} : { config: configPath }),\n ...(noConfig === true ? { noConfig } : {}),\n ...(opts.collection === undefined ? {} : { collection: opts.collection }),\n ...(opts.exclude === undefined ? {} : { exclude: opts.exclude }),\n };\n }\n\n documentInputs(\n program\n .command(\"list\")\n .description(\"Show the resolved eval plan per page without running anything\"),\n \"list\",\n )\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .option(\"--eval <name>\", \"Show only this eval (repeatable)\", collectArg, [])\n .option(\"--suite <name>\", \"Show only evals in this suite\")\n .action(\n async (\n paths: string[],\n opts: {\n config?: string | boolean;\n collection?: string[];\n exclude?: string[];\n format: SummaryFormat;\n eval?: string[];\n suite?: string;\n },\n command: Command,\n ) => {\n try {\n const run = await runList(paths, {\n ...documentOptions(opts),\n format: opts.format,\n evalNames: opts.eval,\n suite: opts.suite,\n });\n console.log(\n renderList(run, opts.format, {\n color: colorFor(command, process.stdout.isTTY),\n }),\n );\n process.exitCode = run.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n documentInputs(\n program.command(\"run\").description(\"Run evals against documentation pages\"),\n \"evaluate\",\n )\n .option(\n \"-f, --format <format>\",\n `Output format: ${REPORT_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", REPORT_FORMATS),\n \"pretty\" as ReportFormat,\n )\n .option(\"--deterministic-only\", \"Run only command/tool graders, skip the AI judge\")\n .option(\"--ai-only\", \"Run only AI-judged evals, skip deterministic graders\")\n .option(\n // `<kind>`, not `<kind...>`: a variadic option greedily eats the\n // positional `[paths...]` that follow it, so `--allow-execution\n // frontmatter-commands docs/**` would silently swallow the glob and run\n // over the default file set instead. Repeat the flag to grant twice.\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(\"--no-generate\", \"Do not generate scripts for command evals missing a command\")\n .option(\"--no-cache\", \"Bypass the judge response cache\")\n .option(\"--fail-on-review\", \"Exit 1 when any eval lands in the human-review zone\")\n .option(\"--provider <name>\", \"Judge provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\")\n .option(\"--model <model>\", \"Model override; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .option(\"--runs <n>\", \"Ensemble runs per eval\", parseIntArg(\"--runs\"))\n .option(\n \"--chunk-chars <n>\",\n \"Characters of page per judge call; longer pages are read in parts\",\n parseIntArg(\"--chunk-chars\"),\n )\n .option(\n \"--eval <name>\",\n \"Run only this eval (repeatable); suite targets are not evaluated on a filtered run\",\n collectArg,\n [],\n )\n .option(\"--suite <name>\", \"Run only evals in this suite\")\n .option(\n \"--since <ref>\",\n \"Evaluate only pages whose file or eval manifest changed between this git ref and HEAD\",\n )\n .option(\n \"--newer-than <duration>\",\n \"Evaluate only pages whose file or eval manifest changed within this window, \" +\n \"such as 30m, 24h, 7d or 2w; in CI, prefer --since\",\n )\n .option(\n \"--max-turns <n>\",\n \"Stop after this many ensemble runs (a cached ensemble costs none)\",\n parseIntArg(\"--max-turns\"),\n )\n .option(\n \"--baseline [path]\",\n \"Fail only on findings a recorded baseline does not already hold\",\n )\n .option(\"--no-baseline\", \"Ignore the configured baseline for this run\")\n .option(\n \"--write-baseline [path]\",\n \"Record this run's findings as the baseline; without a path, the configured one\",\n )\n .action(async (paths: string[], opts: Record<string, unknown>, command: Command) => {\n try {\n const report = await runRun(paths, {\n ...documentOptions({\n config: opts.config as string | boolean | undefined,\n collection: opts.collection as string[] | undefined,\n exclude: opts.exclude as string[] | undefined,\n }),\n // parseFormatArg validated this at parse time; the cast only re-narrows\n // from the `unknown` that the Record-typed options bag erases it to.\n format: opts.format as ReportFormat,\n deterministicOnly: opts.deterministicOnly as boolean | undefined,\n aiOnly: opts.aiOnly as boolean | undefined,\n // Commander's default is `[]`, which is \"no flag\", not \"run nothing\":\n // only a list someone typed narrows the run.\n allowExecution:\n (opts.allowExecution as string[]).length > 0\n ? (opts.allowExecution as string[])\n : undefined,\n execution: opts.execution as boolean | undefined,\n generate: opts.generate as boolean | undefined,\n cache: opts.cache as boolean | undefined,\n failOnReview: opts.failOnReview as boolean | undefined,\n provider: opts.provider as string | undefined,\n model: opts.model as string | undefined,\n local: opts.local as boolean | undefined,\n runs: opts.runs as number | undefined,\n chunkChars: opts.chunkChars as number | undefined,\n maxTurns: opts.maxTurns as number | undefined,\n evalNames: opts.eval as string[] | undefined,\n suite: opts.suite as string | undefined,\n since: opts.since as string | undefined,\n newerThan: opts.newerThan as string | undefined,\n // commander collapses `--baseline` to true and `--no-baseline` to\n // false on the same key; a string is an explicit path.\n baseline: opts.baseline as string | boolean | undefined,\n writeBaseline: opts.writeBaseline as string | boolean | undefined,\n toolVersion: pkg.version,\n });\n console.log(\n render(report, opts.format as ReportFormat, {\n color: colorFor(command, process.stdout.isTTY),\n }),\n );\n process.exitCode = report.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n documentInputs(\n program\n .command(\"generate\")\n .description(\n \"Generate check scripts for command evals with a plain-language assertion but no command\",\n ),\n \"read\",\n )\n .option(\"--provider <name>\", \"Provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\")\n .option(\"--model <model>\", \"Model override; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .action(\n async (\n paths: string[],\n opts: {\n config?: string | boolean;\n collection?: string[];\n exclude?: string[];\n provider?: string;\n model?: string;\n local?: boolean;\n },\n command: Command,\n ) => {\n try {\n const pc = palette(colorFor(command, process.stdout.isTTY));\n const result = await runGenerate(paths, {\n ...documentOptions(opts),\n provider: opts.provider,\n model: opts.model,\n local: opts.local,\n });\n if (result.targets === 0) {\n console.log(\"Nothing to generate — every command eval has a command.\");\n return;\n }\n console.log(\n `Generated ${result.generatedPaths.length}/${result.targets} check script(s):`,\n );\n for (const p of result.generatedPaths) console.log(` ${p}`);\n // Evals whose command reference had nowhere to go (proposal 0047).\n for (const r of result.refusals) console.log(pc.red(` ${r.message}`));\n if (result.generatedPaths.length < result.targets) {\n process.exitCode = 1;\n }\n } catch (e) {\n fail(e);\n }\n },\n );\n\n documentInputs(\n program\n .command(\"fill\")\n .description(\n \"Propose frontmatter evals for pages with an LLM; writes proposals at or above the confidence threshold\",\n ),\n \"fill\",\n )\n .option(\n \"-f, --format <format>\",\n `Output format: ${SUMMARY_FORMATS.join(\" | \")}`,\n parseFormatArg(\"--format\", SUMMARY_FORMATS),\n \"pretty\" as SummaryFormat,\n )\n .option(\"--dry-run\", \"Report proposals without writing frontmatter\")\n .option(\n \"--confidence <n>\",\n \"Minimum confidence to write (0-1, default: config fill.confidenceThreshold)\",\n parseFloatArg(\"--confidence\"),\n )\n .option(\n \"--max-turns <n>\",\n \"Stop after this many inference calls (a cached page costs none)\",\n parseIntArg(\"--max-turns\"),\n )\n .option(\"--no-cache\", \"Bypass the fill proposal cache\")\n .option(\n \"--chunk-chars <n>\",\n \"Characters of page per fill call; longer pages are proposed in parts\",\n parseIntArg(\"--chunk-chars\"),\n )\n .option(\"--provider <name>\", \"Provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\")\n .option(\"--model <model>\", \"Model override; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .action(async (paths: string[], opts: Record<string, unknown>, command: Command) => {\n try {\n const confidence = opts.confidence as number | undefined;\n if (confidence !== undefined && confidence > 1) {\n fail(new DocevalsError(`--confidence must be between 0 and 1, got ${confidence}`));\n }\n const report = await runFill(paths, {\n ...documentOptions({\n config: opts.config as string | boolean | undefined,\n collection: opts.collection as string[] | undefined,\n exclude: opts.exclude as string[] | undefined,\n }),\n dryRun: opts.dryRun as boolean | undefined,\n confidence,\n maxTurns: opts.maxTurns as number | undefined,\n noCache: opts.cache === false ? true : undefined,\n provider: opts.provider as string | undefined,\n model: opts.model as string | undefined,\n local: opts.local as boolean | undefined,\n // P1 (proposal 0047): offered only on a terminal, where there is\n // someone to answer. Off one the evals go to the page and the W1\n // line says so.\n confirm: terminalConfirm(),\n onNotice: notice,\n onRelocated: (result) => {\n const manifests = result.manifests.map((m) => m.file).join(\", \");\n notice(\n `moved ${String(result.summary.moved)} value(s) into ${manifests}.`,\n );\n },\n });\n // As in `run`: parseFormatArg validated this at parse time, and the cast\n // only re-narrows from the `unknown` the Record-typed options bag erases\n // it to. renderFill guards itself regardless.\n console.log(\n renderFill(report, opts.format as SummaryFormat, {\n color: colorFor(command, process.stdout.isTTY),\n }),\n );\n process.exitCode = report.exitCode;\n } catch (e) {\n fail(e);\n }\n });\n\n documentInputs(\n program\n .command(\"promote\")\n .description(\n \"Find ai-graded evals expressible as deterministic checks; --write converts them\",\n ),\n \"read\",\n )\n .option(\"--write\", \"Apply promotions (write scripts and rewrite evals)\")\n .option(\"--provider <name>\", \"Provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\")\n .option(\"--model <model>\", \"Model override; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .action(\n async (\n paths: string[],\n opts: {\n config?: string | boolean;\n collection?: string[];\n exclude?: string[];\n write?: boolean;\n provider?: string;\n model?: string;\n local?: boolean;\n },\n command: Command,\n ) => {\n try {\n const pc = palette(colorFor(command, process.stdout.isTTY));\n const proposals = await runPromote(paths, {\n ...documentOptions(opts),\n write: opts.write,\n provider: opts.provider,\n model: opts.model,\n local: opts.local,\n });\n if (proposals.length === 0) {\n console.log(\"No ai-graded evals found.\");\n return;\n }\n for (const p of proposals) {\n const tag = p.promotable\n ? p.applied\n ? pc.green(\"promoted\")\n : pc.cyan(\"promotable\")\n : pc.dim(\"keep-ai\");\n const script = p.scriptPath ? pc.dim(` -> ${p.scriptPath}`) : \"\";\n console.log(`${tag} ${p.evalName} (${p.source}, ${p.file})${script}`);\n console.log(pc.dim(` ${p.rationale}`));\n // Promotable, and nowhere to write it (proposal 0047).\n if (p.error !== undefined) console.log(pc.red(` ${p.error}`));\n }\n if (!opts.write && proposals.some((p) => p.promotable)) {\n console.log(pc.cyan(\"\\nRe-run with --write to apply promotions.\"));\n }\n } catch (e) {\n fail(e);\n }\n },\n );\n\n program\n .command(\"calibrate\")\n .description(\n \"Measure judge agreement against a human-verified golden set (.manni/docevals/golden/*.yaml)\",\n )\n .option(\"-c, --config <path>\", \"Path to manni.config.yaml\")\n .option(\"--golden <dir>\", \"Golden set directory\", \".manni/docevals/golden\")\n .option(\n \"--seed\",\n \"Write golden candidates from recorded reviews and exit; judges nothing, needs no provider\",\n )\n .option(\"--provider <name>\", \"Provider: auto (default) | anthropic | openai | claude-cli | llama-cpp\")\n .option(\"--model <model>\", \"Model override; needs a named provider, from here or config\")\n .option(\"--local\", LOCAL_FLAG_HELP)\n .option(\"--runs <n>\", \"Ensemble runs per case\", parseIntArg(\"--runs\"))\n .option(\n \"--max-turns <n>\",\n \"Stop after this many ensemble runs (a cached ensemble costs none)\",\n parseIntArg(\"--max-turns\"),\n )\n .option(\"--no-cache\", \"Bypass the judge response cache\")\n .action(\n async (opts: {\n config?: string;\n golden?: string;\n seed?: boolean;\n provider?: string;\n model?: string;\n local?: boolean;\n runs?: number;\n maxTurns?: number;\n cache?: boolean;\n }, command: Command) => {\n try {\n const color = colorFor(command, process.stdout.isTTY);\n const pc = palette(color);\n if (opts.seed) {\n // No `config`: reviews.yaml and the golden directory both resolve\n // against the working directory, not the config's, so passing it\n // would imply an influence it does not have.\n const seeded = seedGoldenCases({ golden: opts.golden });\n if (seeded.total === 0) {\n console.log(\n \"No recorded reviews to seed from — run `manni docevals review <file> <eval> <pass|fail>` first.\",\n );\n return;\n }\n // The lead number is what moved, not the file's size: `total`\n // counts cases already confirmed and left alone, so leading with it\n // read as \"wrote 8 candidates\" on a re-seed that wrote none.\n const changed = seeded.added + seeded.updated;\n console.log(\n changed === 0\n ? `No new reviews to seed — ${seeded.total} golden case(s) already in ${seeded.path}.`\n : `Wrote ${changed} golden candidate(s) to ${seeded.path} ` +\n `(${seeded.added} new, ${seeded.updated} updated; ${seeded.total} total).`,\n );\n if (seeded.unreviewed > 0) {\n console.log(\n pc.yellow(\n `${seeded.unreviewed} case(s) are \\`reviewed: false\\`. Read them and set ` +\n \"`reviewed: true` — a golden set assembled without a human is not one.\",\n ),\n );\n }\n return;\n }\n const report = await runCalibrate({\n config: opts.config,\n golden: opts.golden,\n provider: opts.provider,\n model: opts.model,\n local: opts.local,\n runs: opts.runs,\n maxTurns: opts.maxTurns,\n noCache: opts.cache === false,\n });\n console.log(renderCalibration(report, { color }));\n // Both conditions: the judge has to agree enough, AND the set has to\n // have been measured. A stale golden file whose pages were renamed\n // used to certify on whatever still resolved.\n process.exitCode =\n report.meetsThreshold &&\n report.unjudged === 0 &&\n report.balanced\n ? 0\n : 1;\n } catch (e) {\n fail(e);\n }\n },\n );\n\n program\n .command(\"init\")\n .description(\"Create a starter manni.config.yaml in the current directory\")\n .action(() => {\n try {\n console.log(`Created ${runInit()}`);\n } catch (e) {\n fail(e);\n }\n });\n\n program\n .command(\"review\")\n .description(\n \"Record a human verdict for an eval in the human-review zone (or list recorded reviews)\",\n )\n .argument(\"[file]\", \"Page path\")\n .argument(\"[eval]\", \"Eval name\")\n .argument(\"[verdict]\", \"pass | fail\")\n .option(\"--reviewer <name>\", \"Reviewer name recorded with the verdict\")\n .option(\"--note <text>\", \"Optional note\")\n .action(\n (\n file: string | undefined,\n evalName: string | undefined,\n verdict: string | undefined,\n opts: { reviewer?: string; note?: string },\n command: Command,\n ) => {\n try {\n if (!file) {\n console.log(\n renderReviews(listReviews(), {\n color: colorFor(command, process.stdout.isTTY),\n }),\n );\n return;\n }\n if (!evalName || !verdict) {\n throw new DocevalsError(\n \"Usage: manni docevals review <file> <eval> <pass|fail>\",\n );\n }\n const entry = runReview(file, evalName, verdict, opts);\n console.log(\n `Recorded ${entry.verdict} for ${entry.evalName} on ${entry.file}`,\n );\n } catch (e) {\n fail(e);\n }\n },\n );\n\n return program;\n}\n"],"mappings":"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","names":[]}