@hawkeyexl/manni 4.5.0 → 4.7.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 (215) hide show
  1. package/README.md +1 -1
  2. package/dist/batch-U6S2JUUN.js +41 -0
  3. package/dist/build-4RN6WBCP.js +32 -0
  4. package/dist/calibrate-6VIZYR4L.js +36 -0
  5. package/dist/capture-DP3NXAZE.js +34 -0
  6. package/dist/{check-RQIIIURI.js → check-ERVNGKLC.js} +13 -14
  7. package/dist/check-IWHUPAZM.js +886 -0
  8. package/dist/check-IWHUPAZM.js.map +1 -0
  9. package/dist/{check-ESNS7ZBC.js → check-OAJWC3WD.js} +7 -5
  10. package/dist/check-STHXZIZO.js +26 -0
  11. package/dist/{chunk-TA42STP7.js → chunk-2ZWTSRE5.js} +4 -4
  12. package/dist/{chunk-F2OVHJNC.js → chunk-4Z2MN5FR.js} +11 -11
  13. package/dist/{chunk-HVFR66GQ.js → chunk-5UB47BEV.js} +3280 -283
  14. package/dist/chunk-5UB47BEV.js.map +1 -0
  15. package/dist/{chunk-TCC737IS.js → chunk-5VWDIWOH.js} +4 -4
  16. package/dist/{chunk-B7XUEQF3.js → chunk-6KKZXB2O.js} +7 -5
  17. package/dist/{chunk-B7XUEQF3.js.map → chunk-6KKZXB2O.js.map} +1 -1
  18. package/dist/{chunk-ELZ2IIOF.js → chunk-6URSCTTX.js} +2 -2
  19. package/dist/{chunk-K3U5F2QT.js → chunk-6VDBP5UV.js} +12 -12
  20. package/dist/chunk-7EL5LLKD.js +233 -0
  21. package/dist/chunk-7EL5LLKD.js.map +1 -0
  22. package/dist/{chunk-C3KI45RF.js → chunk-7XZ6INKO.js} +4 -4
  23. package/dist/{chunk-ZX43SRZR.js → chunk-AMEILOVV.js} +8 -6
  24. package/dist/{chunk-ZX43SRZR.js.map → chunk-AMEILOVV.js.map} +1 -1
  25. package/dist/{chunk-SNEHX4VE.js → chunk-B5CMM57M.js} +2 -2
  26. package/dist/chunk-BWCWTHYS.js +146 -0
  27. package/dist/chunk-BWCWTHYS.js.map +1 -0
  28. package/dist/{chunk-QLUMKWQQ.js → chunk-C2TJG5KV.js} +10 -6
  29. package/dist/{chunk-QLUMKWQQ.js.map → chunk-C2TJG5KV.js.map} +1 -1
  30. package/dist/{chunk-GAZFKZHM.js → chunk-CEVU3GFF.js} +6 -6
  31. package/dist/chunk-CI55ABCK.js +502 -0
  32. package/dist/chunk-CI55ABCK.js.map +1 -0
  33. package/dist/{chunk-QCBICNKC.js → chunk-CR3HZERW.js} +202 -54
  34. package/dist/chunk-CR3HZERW.js.map +1 -0
  35. package/dist/chunk-CU57HT2E.js +116 -0
  36. package/dist/chunk-CU57HT2E.js.map +1 -0
  37. package/dist/chunk-CWXZ2MRT.js +222 -0
  38. package/dist/chunk-CWXZ2MRT.js.map +1 -0
  39. package/dist/chunk-D2LBN44V.js +134 -0
  40. package/dist/chunk-D2LBN44V.js.map +1 -0
  41. package/dist/chunk-D6RO54QD.js +674 -0
  42. package/dist/chunk-D6RO54QD.js.map +1 -0
  43. package/dist/{chunk-52PDIZKV.js → chunk-ECVQNGTH.js} +3 -3
  44. package/dist/chunk-FQGLRJGX.js +174 -0
  45. package/dist/chunk-FQGLRJGX.js.map +1 -0
  46. package/dist/{chunk-NGK3N6F2.js → chunk-GCC52YZD.js} +3 -3
  47. package/dist/chunk-HX44GB4Z.js +30 -0
  48. package/dist/chunk-HX44GB4Z.js.map +1 -0
  49. package/dist/{chunk-NN4ASVTY.js → chunk-IIFADWWI.js} +4 -4
  50. package/dist/{chunk-OIZ3XMKB.js → chunk-IOL74S4J.js} +4 -4
  51. package/dist/{chunk-UK2I3ACY.js → chunk-IZBBXKMJ.js} +4 -4
  52. package/dist/{chunk-YA63PVWI.js → chunk-K52CS4KT.js} +12 -10
  53. package/dist/{chunk-YA63PVWI.js.map → chunk-K52CS4KT.js.map} +1 -1
  54. package/dist/{chunk-7OQAU4EA.js → chunk-LDKIIZDW.js} +16 -12
  55. package/dist/{chunk-7OQAU4EA.js.map → chunk-LDKIIZDW.js.map} +1 -1
  56. package/dist/{chunk-QY3DOZMS.js → chunk-LONRQBGV.js} +4 -4
  57. package/dist/{chunk-EL2BZTDL.js → chunk-LXJEAV2V.js} +13 -11
  58. package/dist/{chunk-EL2BZTDL.js.map → chunk-LXJEAV2V.js.map} +1 -1
  59. package/dist/{chunk-XWFNO5PO.js → chunk-MIBWI5H7.js} +3 -3
  60. package/dist/{chunk-527HHQPS.js → chunk-MSMB6XOS.js} +6 -4
  61. package/dist/{chunk-527HHQPS.js.map → chunk-MSMB6XOS.js.map} +1 -1
  62. package/dist/{chunk-C6HZ6C5T.js → chunk-NIFEEIGQ.js} +2 -2
  63. package/dist/{chunk-JQU7FHYH.js → chunk-NZ6TNSCU.js} +10 -10
  64. package/dist/{chunk-3R5Y3XOL.js → chunk-OOEMKOX6.js} +29 -591
  65. package/dist/chunk-OOEMKOX6.js.map +1 -0
  66. package/dist/{chunk-MZC62HPZ.js → chunk-PAOVVHQX.js} +2 -2
  67. package/dist/chunk-PNX43DYW.js +849 -0
  68. package/dist/chunk-PNX43DYW.js.map +1 -0
  69. package/dist/chunk-QCHVR4ZM.js +286 -0
  70. package/dist/chunk-QCHVR4ZM.js.map +1 -0
  71. package/dist/{chunk-SJO2FTPG.js → chunk-QP5X66TO.js} +73 -1304
  72. package/dist/chunk-QP5X66TO.js.map +1 -0
  73. package/dist/{chunk-HQFVJDEN.js → chunk-QQNPVW3J.js} +19 -19
  74. package/dist/chunk-TPVOOTMN.js +532 -0
  75. package/dist/chunk-TPVOOTMN.js.map +1 -0
  76. package/dist/{chunk-IA7BMIPE.js → chunk-UZKQSWHJ.js} +2 -2
  77. package/dist/chunk-WQWKYAAK.js +86 -0
  78. package/dist/chunk-WQWKYAAK.js.map +1 -0
  79. package/dist/{chunk-CP4ZM43V.js → chunk-WTEILBKC.js} +2 -2
  80. package/dist/{chunk-LJ2RDH3F.js → chunk-XG6PVB5S.js} +1 -23
  81. package/dist/chunk-XG6PVB5S.js.map +1 -0
  82. package/dist/{chunk-Q35YIDBV.js → chunk-XKBEHKWO.js} +29 -264
  83. package/dist/chunk-XKBEHKWO.js.map +1 -0
  84. package/dist/{chunk-BOIF2XGG.js → chunk-XXDXIIQ4.js} +2 -2
  85. package/dist/{chunk-6XTQDFGP.js → chunk-YSCZL4U5.js} +3 -3
  86. package/dist/{chunk-6XTQDFGP.js.map → chunk-YSCZL4U5.js.map} +1 -1
  87. package/dist/{chunk-7ZUCEMCY.js → chunk-ZEXGGGLW.js} +9 -11
  88. package/dist/{chunk-7ZUCEMCY.js.map → chunk-ZEXGGGLW.js.map} +1 -1
  89. package/dist/{chunk-DX32P2DT.js → chunk-ZKAKA54B.js} +2 -2
  90. package/dist/{chunk-TVIX653Q.js → chunk-ZKCNPKUO.js} +4 -4
  91. package/dist/{chunk-DE7JSWXV.js → chunk-ZNE25EAR.js} +8 -6
  92. package/dist/{chunk-DE7JSWXV.js.map → chunk-ZNE25EAR.js.map} +1 -1
  93. package/dist/{chunk-FLF6AECQ.js → chunk-ZPP75QWG.js} +17 -15
  94. package/dist/{chunk-FLF6AECQ.js.map → chunk-ZPP75QWG.js.map} +1 -1
  95. package/dist/{cli-PRZHQ3QB.js → cli-37SRAYNE.js} +14 -15
  96. package/dist/{cli-PRZHQ3QB.js.map → cli-37SRAYNE.js.map} +1 -1
  97. package/dist/{cli-TYGOHJOJ.js → cli-HXWYUKGJ.js} +225 -58
  98. package/dist/cli-HXWYUKGJ.js.map +1 -0
  99. package/dist/{cli-HUIMNJT6.js → cli-IRHPPUFJ.js} +19 -20
  100. package/dist/{cli-HUIMNJT6.js.map → cli-IRHPPUFJ.js.map} +1 -1
  101. package/dist/{cli-6PGVHP7Y.js → cli-KIID535Y.js} +17 -19
  102. package/dist/{cli-6PGVHP7Y.js.map → cli-KIID535Y.js.map} +1 -1
  103. package/dist/{cli-AAG3N4NB.js → cli-MTDGQIIV.js} +17 -18
  104. package/dist/{cli-AAG3N4NB.js.map → cli-MTDGQIIV.js.map} +1 -1
  105. package/dist/{cli-E3H6ZP4I.js → cli-NM6FZ54R.js} +5 -3
  106. package/dist/{cli-E3H6ZP4I.js.map → cli-NM6FZ54R.js.map} +1 -1
  107. package/dist/{cli-MHTYPVOD.js → cli-XIODOEUG.js} +113 -20
  108. package/dist/{cli-MHTYPVOD.js.map → cli-XIODOEUG.js.map} +1 -1
  109. package/dist/{cli-YW6VWBHX.js → cli-YL3IDR52.js} +10 -10
  110. package/dist/{cli-QKIJOXGW.js → cli-ZQUJYQBA.js} +17 -17
  111. package/dist/cli.js +11 -11
  112. package/dist/config-O6UBGEDK.js +26 -0
  113. package/dist/conformance-ALLPNGEQ.js +18 -0
  114. package/dist/docmeta.js +9 -9
  115. package/dist/github-UCYLM3DR.js +26 -0
  116. package/dist/github-VEJFO6JJ.js +31 -0
  117. package/dist/host-6GURH5HE.js +23 -0
  118. package/dist/index.d.ts +72 -4
  119. package/dist/index.js +176 -166
  120. package/dist/index.js.map +1 -1
  121. package/dist/{json-4DCKDGUV.js → json-6F52FSXZ.js} +12 -13
  122. package/dist/lint-X2GNINK6.js +29 -0
  123. package/dist/list-DP3O3CWB.js +30 -0
  124. package/dist/list-P77RZFZF.js +28 -0
  125. package/dist/{page-QEDB7EVU.js → page-WQCMBNRD.js} +11 -12
  126. package/dist/prepare-52QOK7M4.js +155 -0
  127. package/dist/prepare-52QOK7M4.js.map +1 -0
  128. package/dist/{pretty-SQX33UM2.js → pretty-5MMMNSWF.js} +13 -14
  129. package/dist/{pretty-5DGEBZSV.js → pretty-H4DQREMW.js} +12 -13
  130. package/dist/provider-AMGRDY6V.js +34 -0
  131. package/dist/release-CTYRHZL4.js +36 -0
  132. package/dist/release-CTYRHZL4.js.map +1 -0
  133. package/dist/{reporters-YELDDYJD.js → reporters-SU3VUKKX.js} +7 -5
  134. package/dist/{reporters-OHSI3RMV.js → reporters-WIHBEMPG.js} +11 -12
  135. package/dist/reporters-WIHBEMPG.js.map +1 -0
  136. package/dist/run-L2DWJ26K.js +32 -0
  137. package/dist/run-L2DWJ26K.js.map +1 -0
  138. package/dist/{term-2WMDZ4PY.js → term-PJIJQZNF.js} +16 -17
  139. package/dist/{term-2WMDZ4PY.js.map → term-PJIJQZNF.js.map} +1 -1
  140. package/dist/validate-XCDSPURG.js +17 -0
  141. package/dist/validate-XCDSPURG.js.map +1 -0
  142. package/package.json +2 -2
  143. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  144. package/plugin/manni/hooks/hooks.json +47 -0
  145. package/dist/batch-GOE3UXOD.js +0 -36
  146. package/dist/build-M7BMEHL2.js +0 -33
  147. package/dist/calibrate-6RRAILUY.js +0 -31
  148. package/dist/capture-RJPQ6B4N.js +0 -32
  149. package/dist/check-BQD64X3N.js +0 -27
  150. package/dist/chunk-3R5Y3XOL.js.map +0 -1
  151. package/dist/chunk-3YHAYXBC.js +0 -164
  152. package/dist/chunk-3YHAYXBC.js.map +0 -1
  153. package/dist/chunk-HVFR66GQ.js.map +0 -1
  154. package/dist/chunk-LJ2RDH3F.js.map +0 -1
  155. package/dist/chunk-NAZRLJAK.js +0 -3090
  156. package/dist/chunk-NAZRLJAK.js.map +0 -1
  157. package/dist/chunk-Q35YIDBV.js.map +0 -1
  158. package/dist/chunk-QCBICNKC.js.map +0 -1
  159. package/dist/chunk-SJO2FTPG.js.map +0 -1
  160. package/dist/chunk-TU2WUBVZ.js +0 -2
  161. package/dist/cli-TYGOHJOJ.js.map +0 -1
  162. package/dist/github-3WMSTNTK.js +0 -32
  163. package/dist/github-OXSJQ4PS.js +0 -27
  164. package/dist/lint-YDHVVZHT.js +0 -30
  165. package/dist/list-3ZO2NIYO.js +0 -31
  166. package/dist/list-EJH6VAOW.js +0 -29
  167. package/dist/run-IP6NZHAG.js +0 -33
  168. package/dist/validate-G6HH3YXL.js +0 -16
  169. /package/dist/{batch-GOE3UXOD.js.map → batch-U6S2JUUN.js.map} +0 -0
  170. /package/dist/{build-M7BMEHL2.js.map → build-4RN6WBCP.js.map} +0 -0
  171. /package/dist/{calibrate-6RRAILUY.js.map → calibrate-6VIZYR4L.js.map} +0 -0
  172. /package/dist/{capture-RJPQ6B4N.js.map → capture-DP3NXAZE.js.map} +0 -0
  173. /package/dist/{check-BQD64X3N.js.map → check-ERVNGKLC.js.map} +0 -0
  174. /package/dist/{check-ESNS7ZBC.js.map → check-OAJWC3WD.js.map} +0 -0
  175. /package/dist/{check-RQIIIURI.js.map → check-STHXZIZO.js.map} +0 -0
  176. /package/dist/{chunk-TA42STP7.js.map → chunk-2ZWTSRE5.js.map} +0 -0
  177. /package/dist/{chunk-F2OVHJNC.js.map → chunk-4Z2MN5FR.js.map} +0 -0
  178. /package/dist/{chunk-TCC737IS.js.map → chunk-5VWDIWOH.js.map} +0 -0
  179. /package/dist/{chunk-ELZ2IIOF.js.map → chunk-6URSCTTX.js.map} +0 -0
  180. /package/dist/{chunk-K3U5F2QT.js.map → chunk-6VDBP5UV.js.map} +0 -0
  181. /package/dist/{chunk-C3KI45RF.js.map → chunk-7XZ6INKO.js.map} +0 -0
  182. /package/dist/{chunk-SNEHX4VE.js.map → chunk-B5CMM57M.js.map} +0 -0
  183. /package/dist/{chunk-GAZFKZHM.js.map → chunk-CEVU3GFF.js.map} +0 -0
  184. /package/dist/{chunk-52PDIZKV.js.map → chunk-ECVQNGTH.js.map} +0 -0
  185. /package/dist/{chunk-NGK3N6F2.js.map → chunk-GCC52YZD.js.map} +0 -0
  186. /package/dist/{chunk-NN4ASVTY.js.map → chunk-IIFADWWI.js.map} +0 -0
  187. /package/dist/{chunk-OIZ3XMKB.js.map → chunk-IOL74S4J.js.map} +0 -0
  188. /package/dist/{chunk-UK2I3ACY.js.map → chunk-IZBBXKMJ.js.map} +0 -0
  189. /package/dist/{chunk-QY3DOZMS.js.map → chunk-LONRQBGV.js.map} +0 -0
  190. /package/dist/{chunk-XWFNO5PO.js.map → chunk-MIBWI5H7.js.map} +0 -0
  191. /package/dist/{chunk-C6HZ6C5T.js.map → chunk-NIFEEIGQ.js.map} +0 -0
  192. /package/dist/{chunk-JQU7FHYH.js.map → chunk-NZ6TNSCU.js.map} +0 -0
  193. /package/dist/{chunk-MZC62HPZ.js.map → chunk-PAOVVHQX.js.map} +0 -0
  194. /package/dist/{chunk-HQFVJDEN.js.map → chunk-QQNPVW3J.js.map} +0 -0
  195. /package/dist/{chunk-IA7BMIPE.js.map → chunk-UZKQSWHJ.js.map} +0 -0
  196. /package/dist/{chunk-CP4ZM43V.js.map → chunk-WTEILBKC.js.map} +0 -0
  197. /package/dist/{chunk-BOIF2XGG.js.map → chunk-XXDXIIQ4.js.map} +0 -0
  198. /package/dist/{chunk-DX32P2DT.js.map → chunk-ZKAKA54B.js.map} +0 -0
  199. /package/dist/{chunk-TVIX653Q.js.map → chunk-ZKCNPKUO.js.map} +0 -0
  200. /package/dist/{chunk-TU2WUBVZ.js.map → cli-YL3IDR52.js.map} +0 -0
  201. /package/dist/{cli-QKIJOXGW.js.map → cli-ZQUJYQBA.js.map} +0 -0
  202. /package/dist/{cli-YW6VWBHX.js.map → config-O6UBGEDK.js.map} +0 -0
  203. /package/dist/{github-3WMSTNTK.js.map → conformance-ALLPNGEQ.js.map} +0 -0
  204. /package/dist/{github-OXSJQ4PS.js.map → github-UCYLM3DR.js.map} +0 -0
  205. /package/dist/{json-4DCKDGUV.js.map → github-VEJFO6JJ.js.map} +0 -0
  206. /package/dist/{lint-YDHVVZHT.js.map → host-6GURH5HE.js.map} +0 -0
  207. /package/dist/{list-3ZO2NIYO.js.map → json-6F52FSXZ.js.map} +0 -0
  208. /package/dist/{list-EJH6VAOW.js.map → lint-X2GNINK6.js.map} +0 -0
  209. /package/dist/{page-QEDB7EVU.js.map → list-DP3O3CWB.js.map} +0 -0
  210. /package/dist/{pretty-5DGEBZSV.js.map → list-P77RZFZF.js.map} +0 -0
  211. /package/dist/{pretty-SQX33UM2.js.map → page-WQCMBNRD.js.map} +0 -0
  212. /package/dist/{reporters-OHSI3RMV.js.map → pretty-5MMMNSWF.js.map} +0 -0
  213. /package/dist/{reporters-YELDDYJD.js.map → pretty-H4DQREMW.js.map} +0 -0
  214. /package/dist/{run-IP6NZHAG.js.map → provider-AMGRDY6V.js.map} +0 -0
  215. /package/dist/{validate-G6HH3YXL.js.map → reporters-SU3VUKKX.js.map} +0 -0
@@ -22,29 +22,27 @@ import {
22
22
  runRelocate,
23
23
  runVendorSchema,
24
24
  terminalConfirm
25
- } from "./chunk-QCBICNKC.js";
26
- import {
27
- collect,
28
- configOption,
29
- explicitFalse,
30
- readStdin,
31
- reportConfig,
32
- rowsToFindings,
33
- runValidate,
34
- splitList
35
- } from "./chunk-NAZRLJAK.js";
25
+ } from "./chunk-CR3HZERW.js";
36
26
  import {
37
27
  LOCATION_EXTERNAL_SCHEMA,
38
28
  LOCATION_PAGE_SCHEMA,
39
29
  Validator,
40
30
  applyRelocation,
31
+ collect,
32
+ configOption,
33
+ explicitFalse,
41
34
  isParamName,
42
35
  keyHome,
43
36
  offerPrompt,
44
37
  planRelocation,
38
+ readStdin,
45
39
  relocateFailed,
46
- relocationContext
47
- } from "./chunk-HVFR66GQ.js";
40
+ relocationContext,
41
+ reportConfig,
42
+ rowsToFindings,
43
+ runValidate,
44
+ splitList
45
+ } from "./chunk-5UB47BEV.js";
48
46
  import {
49
47
  COMMON_FORMATS,
50
48
  COMMON_FORMAT_LIST,
@@ -60,7 +58,7 @@ import {
60
58
  isQueryFormat,
61
59
  isReportFormat,
62
60
  render
63
- } from "./chunk-TCC737IS.js";
61
+ } from "./chunk-5VWDIWOH.js";
64
62
  import {
65
63
  DocmetaError,
66
64
  STDIN_LABEL,
@@ -70,7 +68,7 @@ import {
70
68
  schemaLoadOptions,
71
69
  supportedExtensions,
72
70
  toJsonText
73
- } from "./chunk-527HHQPS.js";
71
+ } from "./chunk-MSMB6XOS.js";
74
72
  import {
75
73
  fail
76
74
  } from "./chunk-YEUYKR62.js";
@@ -79,13 +77,15 @@ import {
79
77
  shouldColor
80
78
  } from "./chunk-RNVYGWIC.js";
81
79
  import {
82
- LOCAL_FLAG_HELP,
83
80
  notice,
84
81
  warn
85
- } from "./chunk-Q35YIDBV.js";
82
+ } from "./chunk-HX44GB4Z.js";
83
+ import {
84
+ LOCAL_FLAG_HELP
85
+ } from "./chunk-QCHVR4ZM.js";
86
86
  import {
87
87
  package_default
88
- } from "./chunk-6XTQDFGP.js";
88
+ } from "./chunk-YSCZL4U5.js";
89
89
  import {
90
90
  programName
91
91
  } from "./chunk-OWBRDNRZ.js";
@@ -1523,4 +1523,4 @@ export {
1523
1523
  parseQueryParams,
1524
1524
  buildProgram
1525
1525
  };
1526
- //# sourceMappingURL=chunk-HQFVJDEN.js.map
1526
+ //# sourceMappingURL=chunk-QQNPVW3J.js.map
@@ -0,0 +1,532 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ DEFAULT_CAPTURE_DIR,
4
+ compileRedactPatterns
5
+ } from "./chunk-CU57HT2E.js";
6
+ import {
7
+ JEV,
8
+ JEV_OUT_OF_LOOP
9
+ } from "./chunk-BWCWTHYS.js";
10
+ import {
11
+ TracevalsError
12
+ } from "./chunk-UKZNLVJW.js";
13
+ import {
14
+ EXECUTION_GRANTS,
15
+ configuredGrants,
16
+ isExecutionGrant,
17
+ unknownGrantsMessage
18
+ } from "./chunk-YNHZHSSM.js";
19
+ import {
20
+ FAMILY_CONFIG_NAMES,
21
+ findConfigFileSync,
22
+ readConfigFileSync
23
+ } from "./chunk-XKBEHKWO.js";
24
+ import {
25
+ assertKnownProvider
26
+ } from "./chunk-QCHVR4ZM.js";
27
+ import {
28
+ errorMessage
29
+ } from "./chunk-G3T47CFV.js";
30
+
31
+ // src/tracevals/core/config.ts
32
+ import { Ajv2020 as Ajv20202 } from "ajv/dist/2020.js";
33
+
34
+ // src/tracevals/core/config-schema.json
35
+ var config_schema_default = {
36
+ $schema: "https://json-schema.org/draft/2020-12/schema",
37
+ $id: "manni:tracevals:config",
38
+ title: "tracevals section of manni.config.yaml",
39
+ description: "Settings for manni tracevals, held under the `tracevals` key of the config file shared by the manni family of tools. Sibling keys belong to other tools and are not validated here.",
40
+ type: "object",
41
+ additionalProperties: false,
42
+ properties: {
43
+ provider: {
44
+ type: "string",
45
+ minLength: 1,
46
+ description: "Which provider judges out of the loop, and extracts rules: auto, anthropic, openai, claude-cli, or llama-cpp. jev only decides, so it is refused here; name it as conformance.hook.provider. Overrides the family's top-level `providers.provider` for tracevals only. Connection settings \u2014 an endpoint, an API key's environment variable, the Claude CLI command \u2014 live in that top-level `providers:` map, never here."
47
+ },
48
+ model: {
49
+ type: "string",
50
+ minLength: 1,
51
+ description: "The model within `provider`, which must be named at this level. Unset, the inference library's default for the winning provider is used; manni pins no model id of its own."
52
+ },
53
+ judge: {
54
+ type: "object",
55
+ additionalProperties: false,
56
+ properties: {
57
+ ensembleRuns: { type: "integer", minimum: 1 },
58
+ temperature: { type: "number", minimum: 0, maximum: 2 },
59
+ zones: {
60
+ type: "object",
61
+ additionalProperties: false,
62
+ properties: {
63
+ autoPass: { type: "number", minimum: 0, maximum: 1 },
64
+ autoFail: { type: "number", minimum: 0, maximum: 1 }
65
+ }
66
+ },
67
+ cacheDir: { type: "string" },
68
+ maxTurns: { type: "integer", minimum: 1, description: "Stop after this many ensemble runs. A cached ensemble spends none. Unset means unbounded; the remaining evals report `skipped` with the reason `turn budget` rather than aborting the run." },
69
+ redact: {
70
+ type: "array",
71
+ description: "Extra regular expressions scrubbed from the session digest before it is sent to a judge provider. Applied on top of the built-in secret shapes, never instead of them; each source is compiled with the `g` flag, and a match is replaced with `[redacted]`. Pattern matching is best-effort \u2014 --deterministic-only is the only setting that guarantees nothing leaves the machine.",
72
+ items: { type: "string", minLength: 1 }
73
+ }
74
+ }
75
+ },
76
+ execution: {
77
+ type: "object",
78
+ additionalProperties: false,
79
+ description: "Operator grant for executing content-authored code.",
80
+ properties: {
81
+ allow: {
82
+ type: "array",
83
+ items: { enum: ["frontmatter-commands"] },
84
+ default: ["frontmatter-commands"],
85
+ description: "Which content-authored code a run may execute. Absent, every grant holds; list fewer to narrow it, or write [] to run none. frontmatter-commands lets `command` evals declared in an artifact's front matter run; without it they report `skipped` with a reason, never `pass`."
86
+ }
87
+ }
88
+ },
89
+ render: {
90
+ type: "object",
91
+ additionalProperties: false,
92
+ properties: {
93
+ maxBlockChars: { type: "integer", minimum: 100 },
94
+ maxTotalChars: {
95
+ type: "integer",
96
+ minimum: 1e3,
97
+ description: "Upper bound on the rendered digest, in characters. The timeline always keeps at least 200 characters, so a very long header can push the digest past this bound by up to 200."
98
+ }
99
+ }
100
+ },
101
+ history: {
102
+ type: "object",
103
+ additionalProperties: false,
104
+ properties: {
105
+ file: { type: "string" }
106
+ }
107
+ },
108
+ capture: {
109
+ type: "object",
110
+ additionalProperties: false,
111
+ description: "Session manifests \u2014 sha256 of every instruction artifact plus the git SHA, recorded at session start by `manni tracevals capture` and read back by `run` to make staleness exact instead of an mtime guess. See ADR 01024.",
112
+ properties: {
113
+ dir: {
114
+ type: "string",
115
+ minLength: 1,
116
+ description: "Directory manifests are written to and looked for, resolved against the project root. `run` also accepts one placed beside the trace as `<trace>.manifest.json`, and --manifest names one outright."
117
+ }
118
+ }
119
+ },
120
+ fill: {
121
+ type: "object",
122
+ additionalProperties: false,
123
+ properties: {
124
+ confidenceThreshold: { type: "number", minimum: 0, maximum: 1 },
125
+ maxEvalsPerArtifact: { type: "integer", minimum: 1 },
126
+ temperature: { type: "number", minimum: 0, maximum: 2 },
127
+ cacheDir: { type: "string" },
128
+ maxTurns: { type: "integer", minimum: 1, description: "Stop after this many inference calls, one per artifact filled. A cached artifact spends none. Unset means unbounded." }
129
+ }
130
+ },
131
+ calibrate: {
132
+ type: "object",
133
+ additionalProperties: false,
134
+ description: "Settings for `manni tracevals calibrate` \u2014 measuring the tool's verdicts against a human's answers. See ADR 01022.",
135
+ properties: {
136
+ labels: {
137
+ type: "string",
138
+ minLength: 1,
139
+ description: "Default labels sidecar, resolved against this config file's directory. Overridden by --labels."
140
+ },
141
+ maxFalsePass: {
142
+ type: "integer",
143
+ minimum: 0,
144
+ description: "Fail the calibration run (exit 1) above this many false passes \u2014 labelled fail, judged pass. Unset by default: a calibration run is a measurement, not a gate."
145
+ },
146
+ maxFalseFail: {
147
+ type: "integer",
148
+ minimum: 0,
149
+ description: "Fail the calibration run above this many false fails \u2014 labelled pass, judged fail."
150
+ },
151
+ maxReview: {
152
+ type: "integer",
153
+ minimum: 0,
154
+ description: "Fail the calibration run above this many needs-review outcomes across the whole corpus."
155
+ },
156
+ sweep: {
157
+ type: "object",
158
+ additionalProperties: false,
159
+ description: "Values --sweep tries on each axis, one axis at a time with the others held at their configured value. The corpus is judged once at the largest ensembleRuns here and every cell is re-scored from those cached runs, so the grid costs nothing beyond that one run.",
160
+ properties: {
161
+ ensembleRuns: {
162
+ type: "array",
163
+ minItems: 1,
164
+ items: { type: "integer", minimum: 1 }
165
+ },
166
+ autoPass: {
167
+ type: "array",
168
+ minItems: 1,
169
+ items: { type: "number", minimum: 0, maximum: 1 }
170
+ },
171
+ autoFail: {
172
+ type: "array",
173
+ minItems: 1,
174
+ items: { type: "number", minimum: 0, maximum: 1 }
175
+ }
176
+ }
177
+ }
178
+ }
179
+ },
180
+ conformance: {
181
+ type: "object",
182
+ additionalProperties: false,
183
+ description: "Checking each turn against the rules the files that govern the agent declare. Present, even as {}, it puts tracevals in play under Claude Code hooks; absent, tracevals stays out of them.",
184
+ properties: {
185
+ hook: {
186
+ type: "object",
187
+ additionalProperties: false,
188
+ description: "The judge inside a Stop or SubagentStop hook. Each key falls back to the top-level one of the same name.",
189
+ properties: {
190
+ provider: {
191
+ type: "string",
192
+ minLength: 1,
193
+ description: "The provider that judges inside a hook. Default: tracevals.provider. jev is accepted here, and only here."
194
+ },
195
+ model: {
196
+ type: "string",
197
+ minLength: 1,
198
+ description: "The model that judges inside a hook. Default: tracevals.model."
199
+ },
200
+ runs: {
201
+ type: "integer",
202
+ minimum: 1,
203
+ description: "Judge calls per rule inside a hook. A rule blocks only when every run scores it not followed at the bar. jev makes one call and ignores it. Default 1."
204
+ }
205
+ }
206
+ },
207
+ include: {
208
+ type: "array",
209
+ description: "Globs, relative to the project root, naming files that govern agents beyond the known formats. Each applies to every turn.",
210
+ items: { type: "string", minLength: 1 }
211
+ },
212
+ exclude: {
213
+ type: "array",
214
+ description: "Globs, relative to the project root, naming files never treated as rule sources, in any format. It removes plan, spec and output style files too. It also matches the sources `prompt`, `plan` and `system-prompt` by name.",
215
+ items: { type: "string", minLength: 1 }
216
+ },
217
+ plans: {
218
+ type: "array",
219
+ default: [],
220
+ description: "Globs, relative to the project root, naming files that say what to build, beyond the known spec formats. Each is a rule source once the session touches it.",
221
+ items: { type: "string", minLength: 1 }
222
+ }
223
+ }
224
+ },
225
+ failOnReview: { type: "boolean" },
226
+ plugins: {
227
+ type: "array",
228
+ description: "Modules imported before evals are planned, so one calling registerGrader() can add a grader kind the built-ins do not cover. A relative or absolute path resolves against this file's directory, not the working directory; a bare package name resolves the way an import from this file's directory would. Load order is significant: a later entry wins a colliding kind.",
229
+ items: { type: "string", minLength: 1 }
230
+ },
231
+ reportUnusedArtifacts: {
232
+ type: "boolean",
233
+ description: "List every skill and agent the session was offered and never used, rather than only counting them. Off by default: a real roster runs to hundreds of skills."
234
+ }
235
+ }
236
+ };
237
+
238
+ // src/tracevals/calibrate/labels.ts
239
+ import { readFile } from "node:fs/promises";
240
+ import { dirname, resolve } from "node:path";
241
+ import { Ajv2020 } from "ajv/dist/2020.js";
242
+ import { parse as parseYaml } from "yaml";
243
+
244
+ // src/tracevals/calibrate/labels-schema.json
245
+ var labels_schema_default = {
246
+ $schema: "https://json-schema.org/draft/2020-12/schema",
247
+ $id: "manni:tracevals:calibration-labels",
248
+ title: "manni tracevals calibration labels",
249
+ description: "Ground truth for `manni tracevals calibrate`: what a human decided a given eval should have produced on a given trace. A sidecar rather than an eval field, because a label belongs to a corpus and a reviewer, not to the artifact \u2014 and because the eval vocabulary is docmeta's, vendored byte-identical, with `inlineEval` closed to additions (ADR 01010).",
250
+ type: "object",
251
+ additionalProperties: false,
252
+ required: ["version", "labels"],
253
+ properties: {
254
+ version: {
255
+ const: 1,
256
+ description: "Format version. Pinned so a future shape change is an explicit migration rather than a silently-reinterpreted file."
257
+ },
258
+ labels: {
259
+ type: "array",
260
+ minItems: 1,
261
+ description: "One entry per (trace, artifact, eval) you have judged by hand.",
262
+ items: {
263
+ type: "object",
264
+ additionalProperties: false,
265
+ required: ["trace", "artifact", "eval", "expected"],
266
+ properties: {
267
+ trace: {
268
+ type: "string",
269
+ minLength: 1,
270
+ description: "Path to the trace file, resolved against this file's own directory \u2014 not the working directory."
271
+ },
272
+ artifact: {
273
+ type: "string",
274
+ minLength: 1,
275
+ description: "Artifact name as the report shows it: a skill name, a subagent_type, or a project-rules filename such as CLAUDE.md."
276
+ },
277
+ type: {
278
+ enum: ["skill", "agent", "project-rules", "slash-command"],
279
+ description: "Optional disambiguator, needed when one name resolves to two kinds of artifact \u2014 a skill and an agent, or a skill and the slash command that types it. Every `ArtifactType` the resolver can produce belongs here: a label whose type this rejects has no way to name the artifact it means."
280
+ },
281
+ eval: {
282
+ type: "string",
283
+ minLength: 1,
284
+ description: "The eval's id. Shorthand entries with no declared id get a positional one (eval-1, eval-2, ...), so labelling those is only as stable as the order they are written in."
285
+ },
286
+ expected: {
287
+ enum: ["pass", "fail", "needs-review"],
288
+ description: "What you decided. `needs-review` means you found it genuinely ambiguous and want the tool to defer too."
289
+ },
290
+ note: {
291
+ type: "string",
292
+ description: "Why you decided that. Carried into the disagreement report, where it is the whole reason a disagreement is actionable."
293
+ }
294
+ }
295
+ }
296
+ }
297
+ }
298
+ };
299
+
300
+ // src/tracevals/calibrate/labels.ts
301
+ var labelsSchema = labels_schema_default;
302
+ var DEFAULT_LABELS_FILE = "tracevals/labels.yaml";
303
+ var ajv = new Ajv2020({ allErrors: true });
304
+ var validate = ajv.compile(labelsSchema);
305
+ var labelKey = (traceFile, artifact, evalName, type) => `${traceFile}\0${type ?? ""}\0${artifact}\0${evalName}`;
306
+ function parseLabels(text, file) {
307
+ let raw;
308
+ try {
309
+ raw = parseYaml(text);
310
+ } catch (err) {
311
+ throw new TracevalsError(
312
+ `could not parse ${file}: ${errorMessage(err)}`
313
+ );
314
+ }
315
+ if (raw === null || raw === void 0) {
316
+ throw new TracevalsError(`invalid labels file ${file}: it is empty`);
317
+ }
318
+ if (!validate(raw)) {
319
+ const detail = (validate.errors ?? []).map((e) => `${e.instancePath || "/"} ${e.message ?? "invalid"}`).join("; ");
320
+ const empty = (validate.errors ?? []).some(
321
+ (e) => e.instancePath === "/labels" && e.keyword === "minItems"
322
+ );
323
+ throw new TracevalsError(
324
+ empty ? `invalid labels file ${file}: it must carry at least one label \u2014 an empty one measures nothing` : `invalid labels file ${file}: ${detail}`
325
+ );
326
+ }
327
+ const base = dirname(resolve(file));
328
+ const labels = [];
329
+ const seen = /* @__PURE__ */ new Set();
330
+ for (const entry of raw.labels) {
331
+ const traceFile = resolve(base, entry.trace);
332
+ const type = entry.type;
333
+ const key = labelKey(
334
+ traceFile,
335
+ entry.artifact,
336
+ entry.eval,
337
+ type
338
+ );
339
+ if (seen.has(key)) {
340
+ throw new TracevalsError(
341
+ `invalid labels file ${file}: duplicate label for ${entry.artifact ?? "?"} \u203A ${entry.eval ?? "?"} on ${entry.trace ?? "?"}`
342
+ );
343
+ }
344
+ seen.add(key);
345
+ labels.push({
346
+ trace: entry.trace,
347
+ traceFile,
348
+ artifact: entry.artifact,
349
+ ...type !== void 0 ? { type } : {},
350
+ eval: entry.eval,
351
+ expected: entry.expected,
352
+ ...entry.note !== void 0 ? { note: entry.note } : {}
353
+ });
354
+ }
355
+ return labels;
356
+ }
357
+ async function loadLabels(file) {
358
+ let text;
359
+ try {
360
+ text = await readFile(file, "utf-8");
361
+ } catch (err) {
362
+ throw new TracevalsError(
363
+ `could not read labels file ${file}: ${errorMessage(err)}`
364
+ );
365
+ }
366
+ return parseLabels(text, file);
367
+ }
368
+
369
+ // src/tracevals/core/config.ts
370
+ var configSchema = config_schema_default;
371
+ var DEFAULT_CONFIG_FILENAME = FAMILY_CONFIG_NAMES[0] ?? "manni.config.yaml";
372
+ var CONFIG_SECTION_KEY = "tracevals";
373
+ var CONFIG_SECTION_KEY_PATH = `/${CONFIG_SECTION_KEY}`;
374
+ var CONFIG_FILE = {
375
+ section: CONFIG_SECTION_KEY,
376
+ legacyNames: [],
377
+ toError: (message) => new TracevalsError(message)
378
+ };
379
+ var ajv2 = new Ajv20202({ allErrors: true, verbose: true });
380
+ var validate2 = ajv2.compile(configSchema);
381
+ function camelCaseHint(key, parentSchema) {
382
+ const camel = key.replace(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
383
+ if (camel === key || parentSchema === null || typeof parentSchema !== "object") {
384
+ return "";
385
+ }
386
+ const properties = parentSchema.properties;
387
+ return properties !== null && typeof properties === "object" && Object.hasOwn(properties, camel) ? `; did you mean "${camel}"?` : "";
388
+ }
389
+ function movedProviderHint(instancePath, keyword) {
390
+ return instancePath === "/provider" && keyword === "type" ? `; "provider" is now a provider name; per-provider settings moved to the top-level providers: map` : "";
391
+ }
392
+ function parseConfig(raw, file = {}) {
393
+ const source = file.source ?? DEFAULT_CONFIG_FILENAME;
394
+ const unknownGrants = configuredGrants(raw).filter((g) => !isExecutionGrant(g));
395
+ if (unknownGrants.length > 0) {
396
+ throw new TracevalsError(`${source}: ${unknownGrantsMessage(unknownGrants)}`);
397
+ }
398
+ if (!validate2(raw)) {
399
+ const detail = (validate2.errors ?? []).map((e) => {
400
+ const extra = e.keyword === "additionalProperties" ? e.params.additionalProperty : void 0;
401
+ return extra !== void 0 ? `unknown key "${extra}"${camelCaseHint(extra, e.parentSchema)}` : `${CONFIG_SECTION_KEY_PATH}${e.instancePath} ${e.message ?? "is invalid"}` + movedProviderHint(e.instancePath, e.keyword);
402
+ }).join("; ");
403
+ throw new TracevalsError(`${source}: ${detail}`);
404
+ }
405
+ const r = raw;
406
+ const provider = r.provider ?? null;
407
+ if (provider !== null) {
408
+ if (provider === JEV) throw new TracevalsError(JEV_OUT_OF_LOOP);
409
+ assertKnownProvider(provider, (message) => new TracevalsError(message));
410
+ }
411
+ const hookProvider = r.conformance?.hook?.provider ?? null;
412
+ if (hookProvider !== null) {
413
+ assertKnownProvider(hookProvider, (message) => new TracevalsError(message), { decisions: true });
414
+ }
415
+ const config = {
416
+ provider,
417
+ model: r.model ?? null,
418
+ providers: file.providers ?? {},
419
+ configSource: source,
420
+ judge: {
421
+ ensembleRuns: r.judge?.ensembleRuns ?? 3,
422
+ temperature: r.judge?.temperature ?? 0,
423
+ zones: {
424
+ autoPass: r.judge?.zones?.autoPass ?? 0.8,
425
+ autoFail: r.judge?.zones?.autoFail ?? 0.8
426
+ },
427
+ cacheDir: r.judge?.cacheDir ?? ".manni/tracevals/cache",
428
+ // `null`, not a number: unbounded is a state, and any number here would
429
+ // be a ceiling nobody asked for.
430
+ maxTurns: r.judge?.maxTurns ?? null,
431
+ // Always a list: the render site concatenates nothing onto it, but a
432
+ // hole here would be a special case in every consumer.
433
+ redact: [...r.judge?.redact ?? []]
434
+ },
435
+ render: {
436
+ maxBlockChars: r.render?.maxBlockChars ?? 2e3,
437
+ maxTotalChars: r.render?.maxTotalChars ?? 15e4
438
+ },
439
+ execution: { allow: [...r.execution?.allow ?? EXECUTION_GRANTS] },
440
+ history: {
441
+ file: r.history?.file ?? ".manni/tracevals/history.jsonl"
442
+ },
443
+ capture: {
444
+ // Beside the judge cache, under the state directory that already travels
445
+ // with the project — which is what puts a manifest next to its trace in
446
+ // the CI patterns the docs describe.
447
+ dir: r.capture?.dir ?? DEFAULT_CAPTURE_DIR
448
+ },
449
+ fill: {
450
+ // 0.7 matches the manuscript's calibration bar for judged agreement.
451
+ confidenceThreshold: r.fill?.confidenceThreshold ?? 0.7,
452
+ maxEvalsPerArtifact: r.fill?.maxEvalsPerArtifact ?? 8,
453
+ temperature: r.fill?.temperature ?? 0,
454
+ // Separate from the judge cache: different key scheme and value shape.
455
+ cacheDir: r.fill?.cacheDir ?? ".manni/tracevals/cache/fill",
456
+ maxTurns: r.fill?.maxTurns ?? null
457
+ },
458
+ calibrate: {
459
+ labels: r.calibrate?.labels ?? DEFAULT_LABELS_FILE,
460
+ sweep: {
461
+ // Spans the range rather than filling it: the first sweep judges the
462
+ // corpus at the largest value here, so a wide grid is the one part of
463
+ // calibration that does cost money.
464
+ ensembleRuns: [...r.calibrate?.sweep?.ensembleRuns ?? [1, 3, 5]],
465
+ autoPass: [
466
+ ...r.calibrate?.sweep?.autoPass ?? [0.5, 0.6, 0.7, 0.8, 0.9, 0.95]
467
+ ],
468
+ autoFail: [
469
+ ...r.calibrate?.sweep?.autoFail ?? [0.5, 0.6, 0.7, 0.8, 0.9, 0.95]
470
+ ]
471
+ }
472
+ },
473
+ failOnReview: r.failOnReview ?? true,
474
+ // Always a list, never undefined: the read site concatenates `--require`
475
+ // onto it, and a hole there would be a special case in every caller.
476
+ plugins: [...r.plugins ?? []],
477
+ // An observation, not a gate: listing it is opt-in because a real roster
478
+ // runs to hundreds of skills (ADR 01016).
479
+ reportUnusedArtifacts: r.reportUnusedArtifacts ?? false,
480
+ conformance: r.conformance === void 0 ? null : {
481
+ hook: {
482
+ provider: hookProvider,
483
+ model: r.conformance.hook?.model ?? null,
484
+ runs: r.conformance.hook?.runs ?? 1
485
+ },
486
+ include: [...r.conformance.include ?? []],
487
+ exclude: [...r.conformance.exclude ?? []],
488
+ plans: [...r.conformance.plans ?? []]
489
+ }
490
+ };
491
+ compileRedactPatterns(config.judge.redact);
492
+ for (const key of ["maxFalsePass", "maxFalseFail", "maxReview"]) {
493
+ if (typeof r.calibrate?.[key] === "number") {
494
+ config.calibrate[key] = r.calibrate[key];
495
+ }
496
+ }
497
+ return config;
498
+ }
499
+ async function discoverConfig(dir = process.cwd(), lookup = {}) {
500
+ if (lookup.noConfig === true) {
501
+ return { config: parseConfig({}), dir, collections: [] };
502
+ }
503
+ const file = await Promise.resolve().then(
504
+ () => lookup.configPath === void 0 ? findConfigFileSync(dir, CONFIG_FILE) : readConfigFileSync(lookup.configPath, dir, CONFIG_FILE)
505
+ );
506
+ if (file === null) return { config: parseConfig({}), dir, collections: [] };
507
+ return {
508
+ config: parseConfig(file.value ?? {}, {
509
+ source: file.source,
510
+ ...file.providers !== void 0 ? { providers: file.providers } : {}
511
+ }),
512
+ dir: file.dir,
513
+ collections: file.collections,
514
+ path: file.path
515
+ };
516
+ }
517
+ async function loadConfig(dir = process.cwd(), lookup = {}) {
518
+ return (await discoverConfig(dir, lookup)).config;
519
+ }
520
+
521
+ export {
522
+ DEFAULT_LABELS_FILE,
523
+ labelKey,
524
+ parseLabels,
525
+ loadLabels,
526
+ DEFAULT_CONFIG_FILENAME,
527
+ CONFIG_SECTION_KEY,
528
+ parseConfig,
529
+ discoverConfig,
530
+ loadConfig
531
+ };
532
+ //# sourceMappingURL=chunk-TPVOOTMN.js.map