@hawkeyexl/manni 4.4.1 → 4.6.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 (226) hide show
  1. package/README.md +1 -1
  2. package/dist/batch-OZOACN4G.js +41 -0
  3. package/dist/build-Z5VOVADH.js +32 -0
  4. package/dist/calibrate-TZYT42DR.js +36 -0
  5. package/dist/capture-SL4MNDDP.js +34 -0
  6. package/dist/check-5OMA42Y6.js +26 -0
  7. package/dist/{check-HYNGXYJV.js → check-OAJWC3WD.js} +7 -5
  8. package/dist/{check-ASPIHA6B.js → check-PKY7KTQE.js} +13 -14
  9. package/dist/check-WB2QDHJQ.js +880 -0
  10. package/dist/check-WB2QDHJQ.js.map +1 -0
  11. package/dist/{chunk-MWJLZMBL.js → chunk-2JFPBZJK.js} +11 -11
  12. package/dist/{chunk-QQUKGCAJ.js → chunk-2KRB3EG7.js} +2 -2
  13. package/dist/{chunk-DXNZS72W.js → chunk-2M6DVNI5.js} +10 -6
  14. package/dist/{chunk-DXNZS72W.js.map → chunk-2M6DVNI5.js.map} +1 -1
  15. package/dist/{chunk-QZ6LRSNV.js → chunk-3NWX34ZI.js} +19 -19
  16. package/dist/{chunk-IDV6HJCB.js → chunk-5G53XATW.js} +4 -4
  17. package/dist/{chunk-M2JCK5F6.js → chunk-6KKZXB2O.js} +19 -6
  18. package/dist/chunk-6KKZXB2O.js.map +1 -0
  19. package/dist/{chunk-PNPQTHBT.js → chunk-733Y2STG.js} +2 -2
  20. package/dist/{chunk-WB3QM6PP.js → chunk-73TC4DYH.js} +332 -2522
  21. package/dist/chunk-73TC4DYH.js.map +1 -0
  22. package/dist/{chunk-EPH54CAY.js → chunk-7WRP5FFP.js} +4 -4
  23. package/dist/{chunk-NXV7WE2D.js → chunk-APKH2T6E.js} +29 -591
  24. package/dist/chunk-APKH2T6E.js.map +1 -0
  25. package/dist/{chunk-I2AH3CJJ.js → chunk-B3TS4WRM.js} +17 -15
  26. package/dist/{chunk-I2AH3CJJ.js.map → chunk-B3TS4WRM.js.map} +1 -1
  27. package/dist/chunk-BWCWTHYS.js +146 -0
  28. package/dist/chunk-BWCWTHYS.js.map +1 -0
  29. package/dist/{chunk-MMTSSTG7.js → chunk-C3B2VJNC.js} +2 -2
  30. package/dist/{chunk-PU6DFJMY.js → chunk-C73RSUIC.js} +4 -4
  31. package/dist/chunk-CU57HT2E.js +116 -0
  32. package/dist/chunk-CU57HT2E.js.map +1 -0
  33. package/dist/chunk-CWXZ2MRT.js +222 -0
  34. package/dist/chunk-CWXZ2MRT.js.map +1 -0
  35. package/dist/{chunk-GCQRPUSB.js → chunk-DC5DDJVE.js} +6 -6
  36. package/dist/{chunk-6OYEI2VV.js → chunk-ECVQNGTH.js} +3 -3
  37. package/dist/chunk-FLAO4ZS3.js +502 -0
  38. package/dist/chunk-FLAO4ZS3.js.map +1 -0
  39. package/dist/chunk-FQGLRJGX.js +174 -0
  40. package/dist/chunk-FQGLRJGX.js.map +1 -0
  41. package/dist/{chunk-7UKO3ASZ.js → chunk-GAJIJKET.js} +3 -3
  42. package/dist/{chunk-6JSSEWBG.js → chunk-GREQKO6M.js} +202 -54
  43. package/dist/chunk-GREQKO6M.js.map +1 -0
  44. package/dist/chunk-HX44GB4Z.js +30 -0
  45. package/dist/chunk-HX44GB4Z.js.map +1 -0
  46. package/dist/{chunk-4IUC2MNL.js → chunk-IY7NYNPZ.js} +9 -11
  47. package/dist/{chunk-4IUC2MNL.js.map → chunk-IY7NYNPZ.js.map} +1 -1
  48. package/dist/{chunk-57NEQRVO.js → chunk-KCOFEWV5.js} +8 -6
  49. package/dist/{chunk-57NEQRVO.js.map → chunk-KCOFEWV5.js.map} +1 -1
  50. package/dist/chunk-M2RLHZ4J.js +849 -0
  51. package/dist/chunk-M2RLHZ4J.js.map +1 -0
  52. package/dist/{chunk-NLXTXE5Y.js → chunk-M6GSS72T.js} +185 -33
  53. package/dist/chunk-M6GSS72T.js.map +1 -0
  54. package/dist/{chunk-YTURO7SI.js → chunk-MHM4QEBV.js} +4 -4
  55. package/dist/{chunk-RL5XWQOL.js → chunk-MOWMCEOJ.js} +143 -54
  56. package/dist/chunk-MOWMCEOJ.js.map +1 -0
  57. package/dist/{chunk-C4SQM22E.js → chunk-MWBJ3KTF.js} +13 -11
  58. package/dist/chunk-MWBJ3KTF.js.map +1 -0
  59. package/dist/chunk-N7JSEDSC.js +233 -0
  60. package/dist/chunk-N7JSEDSC.js.map +1 -0
  61. package/dist/{chunk-JCDXE76J.js → chunk-NBMPHD4I.js} +2 -2
  62. package/dist/{chunk-37LP5HMZ.js → chunk-NHHOPZRA.js} +12 -10
  63. package/dist/{chunk-37LP5HMZ.js.map → chunk-NHHOPZRA.js.map} +1 -1
  64. package/dist/{chunk-YB4IBW3M.js → chunk-NTWW7J76.js} +2 -2
  65. package/dist/{chunk-UJCVAWP7.js → chunk-PCFG7E6B.js} +3 -3
  66. package/dist/{chunk-UJCVAWP7.js.map → chunk-PCFG7E6B.js.map} +1 -1
  67. package/dist/{chunk-FBEQCK47.js → chunk-PL4UAF4S.js} +73 -1304
  68. package/dist/chunk-PL4UAF4S.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-PIKOVN6W.js → chunk-QW77LCOU.js} +10 -10
  72. package/dist/{chunk-2B7ZNTPV.js → chunk-SM6NOMJS.js} +2 -2
  73. package/dist/chunk-SWSTHZBI.js +2464 -0
  74. package/dist/chunk-SWSTHZBI.js.map +1 -0
  75. package/dist/{chunk-JXLTXMJ7.js → chunk-T6SYGLWR.js} +3 -3
  76. package/dist/{chunk-CK7SKVHR.js → chunk-TBAMBLF3.js} +3 -12
  77. package/dist/chunk-TBAMBLF3.js.map +1 -0
  78. package/dist/chunk-TH4JVQPF.js +133 -0
  79. package/dist/chunk-TH4JVQPF.js.map +1 -0
  80. package/dist/{chunk-QRWGPQKO.js → chunk-TLXE7LYK.js} +4 -4
  81. package/dist/{chunk-M3W7J6MU.js → chunk-TUAAR3MM.js} +3280 -283
  82. package/dist/chunk-TUAAR3MM.js.map +1 -0
  83. package/dist/{chunk-SKSDRUUK.js → chunk-UAKNZVCD.js} +4 -4
  84. package/dist/{chunk-YJOGUXGP.js → chunk-UJSGS2Y5.js} +8 -6
  85. package/dist/{chunk-YJOGUXGP.js.map → chunk-UJSGS2Y5.js.map} +1 -1
  86. package/dist/{chunk-UQISLDAV.js → chunk-UWQ2UVHE.js} +8 -6
  87. package/dist/{chunk-UQISLDAV.js.map → chunk-UWQ2UVHE.js.map} +1 -1
  88. package/dist/chunk-WQWKYAAK.js +86 -0
  89. package/dist/chunk-WQWKYAAK.js.map +1 -0
  90. package/dist/{chunk-LJ2RDH3F.js → chunk-XG6PVB5S.js} +1 -23
  91. package/dist/chunk-XG6PVB5S.js.map +1 -0
  92. package/dist/{chunk-Q35YIDBV.js → chunk-XKBEHKWO.js} +29 -264
  93. package/dist/chunk-XKBEHKWO.js.map +1 -0
  94. package/dist/chunk-XPEWUK7J.js +532 -0
  95. package/dist/chunk-XPEWUK7J.js.map +1 -0
  96. package/dist/{chunk-MYMBCTDE.js → chunk-XXDXIIQ4.js} +2 -2
  97. package/dist/chunk-YGFIQ6Y5.js +17 -0
  98. package/dist/chunk-YGFIQ6Y5.js.map +1 -0
  99. package/dist/chunk-YLK2J5YK.js +610 -0
  100. package/dist/chunk-YLK2J5YK.js.map +1 -0
  101. package/dist/{chunk-3VK37OR2.js → chunk-Z4IZGEM3.js} +16 -12
  102. package/dist/{chunk-3VK37OR2.js.map → chunk-Z4IZGEM3.js.map} +1 -1
  103. package/dist/{cli-6HIDIFVT.js → cli-6EWVMEN6.js} +5 -3
  104. package/dist/{cli-6HIDIFVT.js.map → cli-6EWVMEN6.js.map} +1 -1
  105. package/dist/{cli-VI7VHWNZ.js → cli-6H7HVDMQ.js} +113 -20
  106. package/dist/{cli-VI7VHWNZ.js.map → cli-6H7HVDMQ.js.map} +1 -1
  107. package/dist/{cli-RPM5PELX.js → cli-EPVZHAZS.js} +24 -20
  108. package/dist/cli-EPVZHAZS.js.map +1 -0
  109. package/dist/{cli-MN7PYMBI.js → cli-LUCSGTVI.js} +17 -19
  110. package/dist/{cli-MN7PYMBI.js.map → cli-LUCSGTVI.js.map} +1 -1
  111. package/dist/{cli-LFP5ZGYS.js → cli-NIG4N3XM.js} +16 -15
  112. package/dist/{cli-LFP5ZGYS.js.map → cli-NIG4N3XM.js.map} +1 -1
  113. package/dist/{cli-PYPX6O6E.js → cli-PSKNB66T.js} +225 -58
  114. package/dist/cli-PSKNB66T.js.map +1 -0
  115. package/dist/{cli-3BIBYHFK.js → cli-UO4NHIB3.js} +17 -17
  116. package/dist/{cli-6UB5N6CU.js → cli-UQ7A3YA2.js} +17 -18
  117. package/dist/{cli-6UB5N6CU.js.map → cli-UQ7A3YA2.js.map} +1 -1
  118. package/dist/{cli-673OTRGE.js → cli-YHYDLQAF.js} +10 -10
  119. package/dist/cli.js +11 -11
  120. package/dist/config-P4HDNTYD.js +26 -0
  121. package/dist/conformance-ZFCMKM6M.js +18 -0
  122. package/dist/docmeta.js +9 -9
  123. package/dist/github-7ZCH5PSO.js +26 -0
  124. package/dist/github-POT6724K.js +31 -0
  125. package/dist/host-6GURH5HE.js +23 -0
  126. package/dist/index.d.ts +102 -12
  127. package/dist/index.js +185 -171
  128. package/dist/index.js.map +1 -1
  129. package/dist/{json-SY7KLNC7.js → json-KT2K62L5.js} +12 -13
  130. package/dist/lint-5AQ5C2BV.js +29 -0
  131. package/dist/list-5JZKX2NK.js +28 -0
  132. package/dist/list-SWPFXQMU.js +30 -0
  133. package/dist/{page-KSGV5RD4.js → page-UPSXRP75.js} +11 -12
  134. package/dist/prepare-6GNEWCNH.js +155 -0
  135. package/dist/prepare-6GNEWCNH.js.map +1 -0
  136. package/dist/{pretty-CXSDXNAS.js → pretty-Q6FQAOK4.js} +13 -14
  137. package/dist/{pretty-A5EGTN35.js → pretty-SQRPFPSQ.js} +12 -13
  138. package/dist/provider-AMGRDY6V.js +34 -0
  139. package/dist/release-IECYCLTD.js +36 -0
  140. package/dist/release-IECYCLTD.js.map +1 -0
  141. package/dist/{reporters-HUY7UXFS.js → reporters-45MMC2ID.js} +13 -13
  142. package/dist/{reporters-K2VUKSAK.js → reporters-XUV4MM64.js} +7 -5
  143. package/dist/reporters-XUV4MM64.js.map +1 -0
  144. package/dist/run-KMWY2IAN.js +32 -0
  145. package/dist/run-KMWY2IAN.js.map +1 -0
  146. package/dist/{term-BIQUPMOR.js → term-PCJUCWNF.js} +16 -17
  147. package/dist/{term-BIQUPMOR.js.map → term-PCJUCWNF.js.map} +1 -1
  148. package/dist/validate-IMNCZNWG.js +17 -0
  149. package/dist/validate-IMNCZNWG.js.map +1 -0
  150. package/package.json +2 -2
  151. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  152. package/plugin/manni/hooks/hooks.json +47 -0
  153. package/dist/batch-GFNLTGOH.js +0 -36
  154. package/dist/build-COYIQ25L.js +0 -31
  155. package/dist/calibrate-MDBLJKEE.js +0 -31
  156. package/dist/capture-LRML2PKV.js +0 -32
  157. package/dist/check-EDLBYL5N.js +0 -27
  158. package/dist/chunk-6JSSEWBG.js.map +0 -1
  159. package/dist/chunk-A5ULMVHQ.js +0 -164
  160. package/dist/chunk-A5ULMVHQ.js.map +0 -1
  161. package/dist/chunk-C4SQM22E.js.map +0 -1
  162. package/dist/chunk-CK7SKVHR.js.map +0 -1
  163. package/dist/chunk-FBEQCK47.js.map +0 -1
  164. package/dist/chunk-LJ2RDH3F.js.map +0 -1
  165. package/dist/chunk-M2JCK5F6.js.map +0 -1
  166. package/dist/chunk-M3W7J6MU.js.map +0 -1
  167. package/dist/chunk-NLXTXE5Y.js.map +0 -1
  168. package/dist/chunk-NXV7WE2D.js.map +0 -1
  169. package/dist/chunk-Q35YIDBV.js.map +0 -1
  170. package/dist/chunk-RL5XWQOL.js.map +0 -1
  171. package/dist/chunk-TK3FC4RF.js +0 -3090
  172. package/dist/chunk-TK3FC4RF.js.map +0 -1
  173. package/dist/chunk-TU2WUBVZ.js +0 -2
  174. package/dist/chunk-WB3QM6PP.js.map +0 -1
  175. package/dist/cli-PYPX6O6E.js.map +0 -1
  176. package/dist/cli-RPM5PELX.js.map +0 -1
  177. package/dist/github-6QMYOHC3.js +0 -27
  178. package/dist/github-SXPGP5DB.js +0 -32
  179. package/dist/lint-ASMJLLPA.js +0 -28
  180. package/dist/list-KZNVTNVC.js +0 -31
  181. package/dist/list-Q57YTFUQ.js +0 -29
  182. package/dist/run-3DYJNRIG.js +0 -33
  183. package/dist/validate-53RKM2XG.js +0 -16
  184. /package/dist/{batch-GFNLTGOH.js.map → batch-OZOACN4G.js.map} +0 -0
  185. /package/dist/{build-COYIQ25L.js.map → build-Z5VOVADH.js.map} +0 -0
  186. /package/dist/{calibrate-MDBLJKEE.js.map → calibrate-TZYT42DR.js.map} +0 -0
  187. /package/dist/{capture-LRML2PKV.js.map → capture-SL4MNDDP.js.map} +0 -0
  188. /package/dist/{check-ASPIHA6B.js.map → check-5OMA42Y6.js.map} +0 -0
  189. /package/dist/{check-EDLBYL5N.js.map → check-OAJWC3WD.js.map} +0 -0
  190. /package/dist/{check-HYNGXYJV.js.map → check-PKY7KTQE.js.map} +0 -0
  191. /package/dist/{chunk-MWJLZMBL.js.map → chunk-2JFPBZJK.js.map} +0 -0
  192. /package/dist/{chunk-QQUKGCAJ.js.map → chunk-2KRB3EG7.js.map} +0 -0
  193. /package/dist/{chunk-QZ6LRSNV.js.map → chunk-3NWX34ZI.js.map} +0 -0
  194. /package/dist/{chunk-IDV6HJCB.js.map → chunk-5G53XATW.js.map} +0 -0
  195. /package/dist/{chunk-PNPQTHBT.js.map → chunk-733Y2STG.js.map} +0 -0
  196. /package/dist/{chunk-EPH54CAY.js.map → chunk-7WRP5FFP.js.map} +0 -0
  197. /package/dist/{chunk-MMTSSTG7.js.map → chunk-C3B2VJNC.js.map} +0 -0
  198. /package/dist/{chunk-PU6DFJMY.js.map → chunk-C73RSUIC.js.map} +0 -0
  199. /package/dist/{chunk-GCQRPUSB.js.map → chunk-DC5DDJVE.js.map} +0 -0
  200. /package/dist/{chunk-6OYEI2VV.js.map → chunk-ECVQNGTH.js.map} +0 -0
  201. /package/dist/{chunk-7UKO3ASZ.js.map → chunk-GAJIJKET.js.map} +0 -0
  202. /package/dist/{chunk-YTURO7SI.js.map → chunk-MHM4QEBV.js.map} +0 -0
  203. /package/dist/{chunk-JCDXE76J.js.map → chunk-NBMPHD4I.js.map} +0 -0
  204. /package/dist/{chunk-YB4IBW3M.js.map → chunk-NTWW7J76.js.map} +0 -0
  205. /package/dist/{chunk-PIKOVN6W.js.map → chunk-QW77LCOU.js.map} +0 -0
  206. /package/dist/{chunk-2B7ZNTPV.js.map → chunk-SM6NOMJS.js.map} +0 -0
  207. /package/dist/{chunk-JXLTXMJ7.js.map → chunk-T6SYGLWR.js.map} +0 -0
  208. /package/dist/{chunk-QRWGPQKO.js.map → chunk-TLXE7LYK.js.map} +0 -0
  209. /package/dist/{chunk-SKSDRUUK.js.map → chunk-UAKNZVCD.js.map} +0 -0
  210. /package/dist/{chunk-MYMBCTDE.js.map → chunk-XXDXIIQ4.js.map} +0 -0
  211. /package/dist/{cli-3BIBYHFK.js.map → cli-UO4NHIB3.js.map} +0 -0
  212. /package/dist/{chunk-TU2WUBVZ.js.map → cli-YHYDLQAF.js.map} +0 -0
  213. /package/dist/{cli-673OTRGE.js.map → config-P4HDNTYD.js.map} +0 -0
  214. /package/dist/{github-6QMYOHC3.js.map → conformance-ZFCMKM6M.js.map} +0 -0
  215. /package/dist/{github-SXPGP5DB.js.map → github-7ZCH5PSO.js.map} +0 -0
  216. /package/dist/{json-SY7KLNC7.js.map → github-POT6724K.js.map} +0 -0
  217. /package/dist/{lint-ASMJLLPA.js.map → host-6GURH5HE.js.map} +0 -0
  218. /package/dist/{list-KZNVTNVC.js.map → json-KT2K62L5.js.map} +0 -0
  219. /package/dist/{list-Q57YTFUQ.js.map → lint-5AQ5C2BV.js.map} +0 -0
  220. /package/dist/{page-KSGV5RD4.js.map → list-5JZKX2NK.js.map} +0 -0
  221. /package/dist/{pretty-A5EGTN35.js.map → list-SWPFXQMU.js.map} +0 -0
  222. /package/dist/{pretty-CXSDXNAS.js.map → page-UPSXRP75.js.map} +0 -0
  223. /package/dist/{reporters-HUY7UXFS.js.map → pretty-Q6FQAOK4.js.map} +0 -0
  224. /package/dist/{reporters-K2VUKSAK.js.map → pretty-SQRPFPSQ.js.map} +0 -0
  225. /package/dist/{run-3DYJNRIG.js.map → provider-AMGRDY6V.js.map} +0 -0
  226. /package/dist/{validate-53RKM2XG.js.map → reporters-45MMC2ID.js.map} +0 -0
@@ -1,21 +1,31 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ idHash
4
+ } from "./chunk-N7JSEDSC.js";
5
+ import "./chunk-YLK2J5YK.js";
2
6
  import {
3
7
  readStdin
4
8
  } from "./chunk-TZOYZK2E.js";
9
+ import "./chunk-CWXZ2MRT.js";
10
+ import "./chunk-APKH2T6E.js";
11
+ import "./chunk-4TSWU2SU.js";
12
+ import {
13
+ DEFAULT_CAPTURE_DIR
14
+ } from "./chunk-CU57HT2E.js";
5
15
  import "./chunk-UKZNLVJW.js";
6
- import "./chunk-QRWGPQKO.js";
7
- import "./chunk-A5ULMVHQ.js";
16
+ import "./chunk-TLXE7LYK.js";
17
+ import "./chunk-GREQKO6M.js";
8
18
  import {
9
19
  memberOf,
10
20
  retainMembers
11
- } from "./chunk-M3W7J6MU.js";
12
- import "./chunk-IDV6HJCB.js";
21
+ } from "./chunk-TUAAR3MM.js";
22
+ import "./chunk-5G53XATW.js";
13
23
  import {
14
24
  extractorForExtension,
15
25
  resolveTargetSet,
16
26
  supportedExtensions,
17
27
  withSharedWalks
18
- } from "./chunk-57NEQRVO.js";
28
+ } from "./chunk-KCOFEWV5.js";
19
29
  import {
20
30
  fail
21
31
  } from "./chunk-YEUYKR62.js";
@@ -25,12 +35,16 @@ import {
25
35
  import "./chunk-MNH7QO4Z.js";
26
36
  import {
27
37
  findFamilyConfigFile,
28
- notice,
29
38
  readFamilyConfigFile
30
- } from "./chunk-Q35YIDBV.js";
39
+ } from "./chunk-XKBEHKWO.js";
40
+ import {
41
+ notice,
42
+ warn
43
+ } from "./chunk-HX44GB4Z.js";
44
+ import "./chunk-QCHVR4ZM.js";
31
45
  import {
32
46
  package_default
33
- } from "./chunk-UJCVAWP7.js";
47
+ } from "./chunk-PCFG7E6B.js";
34
48
  import {
35
49
  programName
36
50
  } from "./chunk-OWBRDNRZ.js";
@@ -66,13 +80,23 @@ function parseEnvelope(text) {
66
80
  const cwd = str(doc.cwd);
67
81
  const toolName = str(doc.tool_name);
68
82
  const model = str(doc.model) ?? str(record(doc.model)?.id);
83
+ const strings = {
84
+ sessionId: str(doc.session_id),
85
+ transcriptPath: str(doc.transcript_path),
86
+ agentTranscriptPath: str(doc.agent_transcript_path),
87
+ agentId: str(doc.agent_id),
88
+ agentType: str(doc.agent_type),
89
+ lastAssistantMessage: str(doc.last_assistant_message)
90
+ };
91
+ const given = Object.fromEntries(Object.entries(strings).filter(([, v]) => v !== void 0));
69
92
  return {
70
93
  event,
71
94
  stopHookActive: doc.stop_hook_active === true,
72
95
  ...cwd === void 0 ? {} : { cwd },
73
96
  ...toolName === void 0 ? {} : { toolName },
74
97
  ...filePath === void 0 ? {} : { filePath },
75
- ...model === void 0 ? {} : { model }
98
+ ...model === void 0 ? {} : { model },
99
+ ...given
76
100
  };
77
101
  }
78
102
  async function readEnvelope(stream = process.stdin) {
@@ -139,8 +163,13 @@ async function loadFamily(cwd, configPath) {
139
163
  const file = configPath === void 0 ? await findFamilyConfigFile(cwd, toError) : await readFamilyConfigFile(configPath, cwd, toError);
140
164
  if (file === null) throw noConfigError(cwd);
141
165
  const doc = parseYaml(file.text);
142
- const sections = doc !== null && typeof doc === "object" && !Array.isArray(doc) ? new Set(Object.keys(doc)) : /* @__PURE__ */ new Set();
143
- return { file, configPath: configPath ?? file.source, sections, collections: file.collections };
166
+ const top = record2(doc);
167
+ const sections = new Set(top === void 0 ? [] : Object.keys(top));
168
+ const conformance = record2(top?.tracevals)?.conformance !== void 0;
169
+ return { file, configPath: configPath ?? file.source, sections, conformance, collections: file.collections };
170
+ }
171
+ function record2(value) {
172
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
144
173
  }
145
174
  function labelFrom(cwd, path) {
146
175
  return relative(cwd, path).split(sep).join("/");
@@ -161,7 +190,7 @@ async function listMembers(family, cwd) {
161
190
  }
162
191
 
163
192
  // src/family/commands/check.ts
164
- import { extname, resolve as resolve3 } from "node:path";
193
+ import { basename, extname, resolve as resolve3 } from "node:path";
165
194
 
166
195
  // src/family/core/changed.ts
167
196
  import { execFile } from "node:child_process";
@@ -206,6 +235,23 @@ async function changedFiles(cwd) {
206
235
  return { files: files.map(absolute), removed: removed.map(absolute), dirty: status.length > 0 };
207
236
  }
208
237
 
238
+ // src/family/core/said-once.ts
239
+ import { mkdirSync, writeFileSync } from "node:fs";
240
+ import { dirname, join } from "node:path";
241
+ function saidPath(projectDir, sessionId, key) {
242
+ return join(projectDir, DEFAULT_CAPTURE_DIR, `${idHash(sessionId)}.${key}.said`);
243
+ }
244
+ function sayOnce(projectDir, sessionId, key) {
245
+ const path = saidPath(projectDir, sessionId, key);
246
+ try {
247
+ mkdirSync(dirname(path), { recursive: true });
248
+ writeFileSync(path, "", { flag: "wx" });
249
+ return true;
250
+ } catch (err) {
251
+ return err.code !== "EEXIST";
252
+ }
253
+ }
254
+
209
255
  // src/family/commands/check.ts
210
256
  var CHECK_FORMATS = ["pretty", "json", "github"];
211
257
  async function runDomain(domain, ctx) {
@@ -214,8 +260,8 @@ async function runDomain(domain, ctx) {
214
260
  switch (domain) {
215
261
  case "meta": {
216
262
  const [{ runValidate }, { render: renderMeta }] = await Promise.all([
217
- import("./validate-53RKM2XG.js"),
218
- import("./reporters-K2VUKSAK.js")
263
+ import("./validate-IMNCZNWG.js"),
264
+ import("./reporters-XUV4MM64.js")
219
265
  ]);
220
266
  const run2 = await runValidate({ inputs, configPath, cwd, skipDefaultOnly: true, onNotice });
221
267
  if (run2.results.length === 0) {
@@ -228,10 +274,10 @@ async function runDomain(domain, ctx) {
228
274
  }
229
275
  case "cite": {
230
276
  const [{ runCheck: runCite }, { renderCheckPretty: citePretty }, { renderCheckJson: citeJson }, { renderCheckGithub: citeGithub }] = await Promise.all([
231
- import("./check-ASPIHA6B.js"),
232
- import("./pretty-CXSDXNAS.js"),
277
+ import("./check-PKY7KTQE.js"),
278
+ import("./pretty-Q6FQAOK4.js"),
233
279
  import("./json-7WV7KL6H.js"),
234
- import("./github-SXPGP5DB.js")
280
+ import("./github-POT6724K.js")
235
281
  ]);
236
282
  const run2 = await runCite({ inputs, configPath, cwd, onNotice });
237
283
  if (!run2.pages.some((p) => p.citations.length > 0 || p.findings.length > 0)) {
@@ -245,8 +291,8 @@ async function runDomain(domain, ctx) {
245
291
  case "lint": {
246
292
  if (!family.sections.has("lint")) return { skipped: NOT_SET_UP.lint };
247
293
  const [{ runLint }, { render: renderLint }] = await Promise.all([
248
- import("./lint-ASMJLLPA.js"),
249
- import("./reporters-HUY7UXFS.js")
294
+ import("./lint-5AQ5C2BV.js"),
295
+ import("./reporters-45MMC2ID.js")
250
296
  ]);
251
297
  const run2 = await runLint({ inputs, configPath, cwd, onNotice });
252
298
  return {
@@ -256,7 +302,7 @@ async function runDomain(domain, ctx) {
256
302
  }
257
303
  case "docevals": {
258
304
  const [{ runRun: runDocevals }, { render: renderDocevals }, { DocevalsError }] = await Promise.all([
259
- import("./run-3DYJNRIG.js"),
305
+ import("./run-KMWY2IAN.js"),
260
306
  import("./reporters-M6LJ2IYU.js"),
261
307
  import("./types-Y6TXHM7M.js")
262
308
  ]);
@@ -283,10 +329,10 @@ async function runDomain(domain, ctx) {
283
329
  }
284
330
  case "term": {
285
331
  const [{ runCheck: runTerm }, { renderFindingsPretty: termPretty }, { renderFindingsJson: termJson }, { renderFindingsGithub: termGithub }] = await Promise.all([
286
- import("./check-EDLBYL5N.js"),
287
- import("./pretty-A5EGTN35.js"),
288
- import("./json-SY7KLNC7.js"),
289
- import("./github-6QMYOHC3.js")
332
+ import("./check-5OMA42Y6.js"),
333
+ import("./pretty-SQRPFPSQ.js"),
334
+ import("./json-KT2K62L5.js"),
335
+ import("./github-7ZCH5PSO.js")
290
336
  ]);
291
337
  const report = await runTerm({ inputs, configPath, cwd, allowEmpty: true, onNotice });
292
338
  if (report.terms === 0) return { skipped: NOT_SET_UP.term };
@@ -298,8 +344,8 @@ async function runDomain(domain, ctx) {
298
344
  case "graph": {
299
345
  if (!family.sections.has("graph")) return { skipped: NOT_SET_UP.graph };
300
346
  const [{ buildGraph }, { runCheck: runGraph, renderCheck: renderGraph }] = await Promise.all([
301
- import("./build-COYIQ25L.js"),
302
- import("./check-HYNGXYJV.js")
347
+ import("./build-Z5VOVADH.js"),
348
+ import("./check-OAJWC3WD.js")
303
349
  ]);
304
350
  const built = await buildGraph({ config: configPath, cwd });
305
351
  for (const warning of built.warnings) onNotice(warning);
@@ -464,17 +510,85 @@ ${renderFailures(run2)}
464
510
  `
465
511
  };
466
512
  }
467
- if (envelope.event === "Stop" && failed) {
468
- const reply = envelope.stopHookActive ? { systemMessage: "manni still reports errors after one repair pass. Run manni check to see them." } : {
469
- decision: "block",
470
- reason: `manni found errors in the files you changed. Fix them, then finish.
513
+ if (envelope.event === "Stop") return turnReply(run2, void 0, envelope);
514
+ return { exitCode: 0 };
515
+ }
516
+ function turnReply(run2, turn, envelope) {
517
+ const reasons = [];
518
+ const messages = [];
519
+ if (run2?.status === "fail") {
520
+ if (envelope.stopHookActive) {
521
+ messages.push("manni still reports errors after one repair pass. Run manni check to see them.");
522
+ } else {
523
+ reasons.push(`manni found errors in the files you changed. Fix them, then finish.
471
524
 
472
- ${renderFailures(run2)}`
473
- };
474
- return { exitCode: 0, stdout: `${JSON.stringify(reply)}
525
+ ${renderFailures(run2)}`);
526
+ }
527
+ }
528
+ if (turn?.broken !== void 0) {
529
+ const { rules, report, trace } = turn.broken;
530
+ if (envelope.stopHookActive) {
531
+ messages.push(
532
+ `tracevals still finds broken rules after one repair pass. Run manni tracevals check ${trace} to see them.`
533
+ );
534
+ } else {
535
+ reasons.push(
536
+ `This turn broke ${plural(rules, "rule")} from the files and requests that governed it. Fix the work, or say why the rule does not apply here, then finish.
537
+
538
+ ${report}`
539
+ );
540
+ }
541
+ }
542
+ if (turn?.skipMessage !== void 0) messages.push(turn.skipMessage);
543
+ if (reasons.length === 0 && messages.length === 0) return { exitCode: 0 };
544
+ const reply = {
545
+ ...reasons.length > 0 ? { decision: "block", reason: reasons.join("\n\n") } : {},
546
+ ...messages.length > 0 ? { systemMessage: messages.join(" ") } : {}
547
+ };
548
+ return { exitCode: 0, stdout: `${JSON.stringify(reply)}
475
549
  ` };
550
+ }
551
+ async function runTurnCheck(envelope, cwd, seams = {}) {
552
+ const subagent = envelope.event === "SubagentStop";
553
+ const judged = subagent ? envelope.agentTranscriptPath : envelope.transcriptPath;
554
+ if (judged === void 0) return void 0;
555
+ const trace = resolve3(cwd, judged);
556
+ const sessionId = envelope.sessionId ?? basename(trace, ".jsonl");
557
+ let result;
558
+ let renderTurn;
559
+ try {
560
+ const [{ checkTurn }, reporters] = await Promise.all([
561
+ import("./check-WB2QDHJQ.js"),
562
+ import("./conformance-ZFCMKM6M.js")
563
+ ]);
564
+ renderTurn = reporters.renderCheck;
565
+ result = await checkTurn({
566
+ transcriptPath: resolve3(cwd, envelope.transcriptPath ?? judged),
567
+ ...subagent ? { agentTranscriptPath: trace } : {},
568
+ ...subagent && envelope.agentId !== void 0 ? { agentId: envelope.agentId } : {},
569
+ ...subagent && envelope.agentType !== void 0 ? { agentType: envelope.agentType } : {},
570
+ ...envelope.lastAssistantMessage !== void 0 ? { lastAssistantMessage: envelope.lastAssistantMessage } : {},
571
+ sessionId,
572
+ cwd,
573
+ inLoop: true,
574
+ ...seams
575
+ });
576
+ } catch (err) {
577
+ if (!(err instanceof ToolError)) warn(`the turn check failed unexpectedly: ${errorMessage(err)}`);
578
+ return void 0;
476
579
  }
477
- return { exitCode: 0 };
580
+ const { skipped } = result;
581
+ if (skipped?.message !== void 0) {
582
+ return sayOnce(cwd, sessionId, skipped.gate) ? { skipMessage: skipped.message } : void 0;
583
+ }
584
+ if (result.exitCode !== 1 || result.report === void 0) return void 0;
585
+ return {
586
+ broken: {
587
+ rules: result.report.summary.fail,
588
+ report: renderTurn(result.report, { color: false }),
589
+ trace: judged
590
+ }
591
+ };
478
592
  }
479
593
  function hookFailure(message, envelope, file) {
480
594
  if (envelope.event !== "PostToolUse" || file === void 0) return { exitCode: 0 };
@@ -490,6 +604,38 @@ function hookFailure(message, envelope, file) {
490
604
  import { appendFileSync, existsSync, readFileSync } from "node:fs";
491
605
  import { extname as extname2, resolve as resolve4 } from "node:path";
492
606
  var STATUS_FORMATS = ["pretty", "json"];
607
+ async function tracevalsRow(cwd, opts) {
608
+ try {
609
+ const [
610
+ { discoverConfig },
611
+ { assertProviderSelection, resolveSelectionIdentity, selectHookProvider, selectProvider },
612
+ { hostStatus }
613
+ ] = await Promise.all([
614
+ import("./config-P4HDNTYD.js"),
615
+ import("./provider-AMGRDY6V.js"),
616
+ import("./host-6GURH5HE.js")
617
+ ]);
618
+ const { config } = await discoverConfig(cwd, opts.configPath === void 0 ? {} : { configPath: opts.configPath });
619
+ const hook = await resolveSelectionIdentity(config, selectHookProvider(config));
620
+ const selection = selectProvider(config);
621
+ assertProviderSelection(selection);
622
+ const extraction = await resolveSelectionIdentity(config, selection);
623
+ const host = await (opts.hostStatus ?? hostStatus)().catch(() => null);
624
+ return {
625
+ name: "tracevals",
626
+ status: "in-play",
627
+ reason: `hook: ${hook.provider} ${hook.model} \xB7 extraction: ${extraction.provider} ${extraction.model}`,
628
+ models: {
629
+ hook: { provider: hook.provider, model: hook.model },
630
+ extraction: { provider: extraction.provider, model: extraction.model }
631
+ },
632
+ ...host === null || host.models.length === 0 ? {} : { host: host.models }
633
+ };
634
+ } catch (err) {
635
+ const message = errorMessage(err).split("\n", 1)[0] ?? "";
636
+ return { name: "tracevals", status: "unknown", reason: `manni tracevals check could not run: ${message}` };
637
+ }
638
+ }
493
639
  function pages(n, one, many) {
494
640
  return n === 1 ? `1 page ${one}` : `${String(n)} pages ${many}`;
495
641
  }
@@ -507,8 +653,8 @@ function ownSchemaCount(cwd, members) {
507
653
  return n;
508
654
  }
509
655
  async function citedPages(cwd, configPath) {
510
- const { prepareRun, readTarget } = await import("./check-ASPIHA6B.js");
511
- const { readPage } = await import("./page-KSGV5RD4.js");
656
+ const { prepareRun, readTarget } = await import("./check-PKY7KTQE.js");
657
+ const { readPage } = await import("./page-UPSXRP75.js");
512
658
  const prepared = await prepareRun({ inputs: [], configPath, cwd, checkSources: false }, "checked", "check");
513
659
  let n = 0;
514
660
  for (const file of prepared.files) {
@@ -535,14 +681,14 @@ async function row(domain, family, cwd, members) {
535
681
  return n > 0 ? inPlay(pages(n, "carries citations", "carry citations")) : notSetUp;
536
682
  }
537
683
  case "docevals": {
538
- const { runList: listEvals } = await import("./list-KZNVTNVC.js");
684
+ const { runList: listEvals } = await import("./list-SWPFXQMU.js");
539
685
  const { plans } = await listEvals([], { config: configPath, cwd });
540
686
  const n = plans.filter((p) => !p.skip && p.evals.length > 0).length;
541
687
  if (n === 0) return notSetUp;
542
688
  return inPlay(section ? "docevals: section" : pages(n, "declares evals", "declare evals"));
543
689
  }
544
690
  case "term": {
545
- const { runList: listTerms } = await import("./list-Q57YTFUQ.js");
691
+ const { runList: listTerms } = await import("./list-5JZKX2NK.js");
546
692
  const { terms } = await listTerms({ inputs: [], configPath, cwd, allowEmpty: true });
547
693
  return terms.length > 0 ? inPlay(plural(terms.length, "term")) : notSetUp;
548
694
  }
@@ -571,7 +717,11 @@ async function statusUnshared(opts) {
571
717
  domains.push({ name: domain, status: "unknown", reason: `manni ${COMMANDS[domain]} could not run: ${message}` });
572
718
  }
573
719
  }
574
- for (const [name, reason] of NOT_CHECKED) domains.push({ name, status: "not-checked", reason });
720
+ for (const [name, reason] of NOT_CHECKED) {
721
+ domains.push(
722
+ name === "tracevals" && family.conformance ? await tracevalsRow(cwd, opts) : { name, status: "not-checked", reason }
723
+ );
724
+ }
575
725
  return {
576
726
  version: package_default.version,
577
727
  config: family.file.source,
@@ -595,9 +745,14 @@ function renderStatus(report, format) {
595
745
  `config ${report.config}`,
596
746
  ...report.collections.map((c) => `collection ${c.name} (${plural(c.files, "file")})`)
597
747
  ].join(" ");
598
- const rows = report.domains.map(
599
- (d) => `${d.name.padEnd(11)}${STATE_LABEL[d.status].padEnd(14)}${d.reason}`
600
- );
748
+ const label = (d) => d.models !== void 0 ? "judges each turn" : STATE_LABEL[d.status];
749
+ const width = Math.max(14, ...report.domains.map((d) => label(d).length + 3));
750
+ const rows = report.domains.flatMap((d) => [
751
+ `${d.name.padEnd(11)}${label(d).padEnd(width)}${d.reason}`,
752
+ ...(d.host ?? []).map(
753
+ (m) => `${"".padEnd(11)}${"model host".padEnd(width)}${m.model} loaded, ${plural(m.sessions, "session")}, idle ${String(Math.floor(m.idleMs / 6e4))}m`
754
+ )
755
+ ]);
601
756
  return [head, "", ...rows].join("\n");
602
757
  }
603
758
  var FIX_SKILL = "manni:fix";
@@ -644,24 +799,35 @@ function hookScope(envelope, cwd) {
644
799
  const file = labelFrom(cwd, resolve5(cwd, envelope.filePath));
645
800
  return { scope: { kind: "paths", paths: [file] }, file };
646
801
  }
802
+ var TURN_EVENTS = ["Stop", "SubagentStop"];
647
803
  async function checkUnderHook(paths, options, envelope) {
648
804
  const cwd = resolve5(envelope.cwd ?? process.cwd());
649
805
  const asked = paths.length > 0 ? { scope: { kind: "paths", paths }, file: paths.join(", ") } : hookScope(envelope, cwd);
650
- if (asked === void 0) return;
651
- try {
652
- const run2 = await runFamilyCheck({
653
- cwd,
654
- scope: asked.scope,
655
- allowMissing: true,
656
- ...options.config === void 0 ? {} : { configPath: options.config },
657
- // stdout and stderr are the hook's channels; a notice is not for the agent.
658
- onNotice: () => void 0
659
- });
660
- send(hookReply(run2, envelope));
661
- } catch (err) {
662
- if (err instanceof FamilyError && err.quiet) return;
663
- send(hookFailure(errorMessage(err), envelope, asked.file));
806
+ const turnEvent = TURN_EVENTS.includes(envelope.event);
807
+ if (asked === void 0 && !turnEvent) return;
808
+ let run2;
809
+ if (asked !== void 0) {
810
+ try {
811
+ run2 = await runFamilyCheck({
812
+ cwd,
813
+ scope: asked.scope,
814
+ allowMissing: true,
815
+ ...options.config === void 0 ? {} : { configPath: options.config },
816
+ // stdout and stderr are the hook's channels; a notice is not for the agent.
817
+ onNotice: () => void 0
818
+ });
819
+ } catch (err) {
820
+ if (!(err instanceof FamilyError && err.quiet) && !turnEvent) {
821
+ send(hookFailure(errorMessage(err), envelope, asked.file));
822
+ return;
823
+ }
824
+ }
825
+ }
826
+ if (!turnEvent) {
827
+ if (run2 !== void 0) send(hookReply(run2, envelope));
828
+ return;
664
829
  }
830
+ send(turnReply(run2, await runTurnCheck(envelope, cwd), envelope));
665
831
  }
666
832
  function buildCheck() {
667
833
  return new Command("check").description("Run every check this repository has set up, and nothing else").argument("[paths...]", "files, directories, or globs; the per-file checks run on the collection members among them").option("-c, --config <path>", "path to a manni config file").addOption(
@@ -734,6 +900,7 @@ ${agentLines(report)}` : "";
734
900
  }
735
901
  export {
736
902
  buildCheck,
737
- buildStatus
903
+ buildStatus,
904
+ hookScope
738
905
  };
739
- //# sourceMappingURL=cli-PYPX6O6E.js.map
906
+ //# sourceMappingURL=cli-PSKNB66T.js.map